Doctrine

Wake-work pairing: every dispatch + session report must pair SEAT-ID with WORK-ID

feed-protocolhandoff-efficiencyoperator-ergonomicswrite-site-discipline

Wake-work pairing: every dispatch + session report must pair SEAT-ID with WORK-ID

The rule

Every feed post that requires another session to act, AND every in-session report to Chad that mentions another seat's work, MUST pair the SESSION-IDENTITY with the WORK-IDENTITY in a scannable, predictable location. The goal is to minimize Chad's scan-and-route latency during manual wake-and-paste workflows: he reads the pairing, opens the named Desktop tab (or claude --resume <uuid> for CLI), pastes the ticket bootstrap, the receiving session runs with it.

Canonical format — feed posts

Dispatch/peer-sync/status-update posts that target another session include a WAKE block at the very top of the body, immediately after the machine-readable header (KIND/ITEM/LANE/STATE/OWNER/QUEUE/PRIORITY) and before any prose:

WAKE: <SEAT-NAME>
WORK: <ITEM-ID>

Examples:

WAKE: CODEX-DESKTOP-MacBook-Air-CAMBER-02
WORK: HWD-0018
WAKE: any-idle-HEARTWOOD-codex
WORK: HWD-0019
WAKE: self
WORK: ORA-0006

Canonical format — in-session reports to Chad

Any time Claude, Codex, or Gemini reports to Chad and references another seat's work, include a one-line wake-work pair in the summary:

"Dispatched HWD-0018 to CAMBER-02 → wake CODEX-DESKTOP-MacBook-Air-CAMBER-02, paste HWD-0018."

Or embedded in a list:

- HWD-0015 — waiting on CAMBER-01 (wake: CODEX-DESKTOP-MacBook-Air-CAMBER-01, work: HWD-0015)
- HWD-0016 — waiting on HEARTWOOD-01 (wake: CODEX-DESKTOP-MacBook-Air-HEARTWOOD-01, work: HWD-0016)

The seat-name is Chad's routing key (which Desktop tab to click, or which claude --resume UUID to use). The work-ID is the bootstrap payload (what to paste into the woken session).

Why

Chad is the human bottleneck at N=1. The fleet parallelizes across 10+ Codex seats, but every dispatch still needs Chad (or a shepherd) to wake a Desktop session manually — Desktop sessions can't be woken via shell like CLI sessions can (claude --resume <uuid> works for CLI; no equivalent for Desktop). Every second of scan-time Chad burns finding "which seat does this dispatch target?" and "what's the ticket ID again?" compounds across dozens of handoffs per day.

Prior post conventions had the SESSION identity as OWNER: in the header and the WORK identity as ITEM: in the header — technically both fields exist. But a 90-line dispatch post has the OWNER line buried between LANE and QUEUE fields, and the ITEM line is separated from OWNER by three other fields. Chad's eye has to decode the header as a table, not scan for a routing signal.

The WAKE/WORK block at the TOP of the body is a scannable signal. Chad's eye hits two lines, two values, done. The header remains machine-readable for fleet-active-queue / queue-drift-check; the WAKE block is the human-readable routing primitive layered on top.

Positional convention (the emerging meta-doctrine)

This rule composes with the existing feed-post conventions. The layout is now positional:

PositionBlockRulePurpose
Subject line## TIMESTAMP — SEAT — ITEM <verb> — summaryStandardFeed-scan headline
Header (machine-readable)KIND:/ITEM:/LANE:/STATE:/OWNER:/QUEUE:/PRIORITY:ORA-2026-0007Reducer-parseable queue state
Top of body (human-scannable routing)WAKE:/WORK:ORA-2026-0019 (this doctrine)Chad's wake-and-paste routing key
Middle of bodyProse: context, hypotheses, scope, proofFree-formActual content
Bottom of bodyPRIOR-DIAGNOSTIC:ORA-2026-0007Back-references for handoff context
End of bodyRESPONSES: [...]ORA-2026-0008Decision-menu for peer-sync

Every seat writing a feed post now knows: top-right of my machine-header for reducer, top-left of my body for Chad's eye, bottom of body for protocol trailers. Predictable positions let every reader (human + tooling) find what they need in constant time.

Exceptions ("unless it does not matter")

The WAKE/WORK block is NOT required on:

  • Self-claim and self-DONE posts — the seat writing the post is the one acting; no external routing needed. Optionally include WAKE: self for consistency with the positional convention, or omit entirely.
  • Pure narrative / observation posts — KIND=narrative entries that describe events, findings, or reflections with no routing semantics. No WAKE block.
  • ORA reflective entries posted to FLEET_FEED.md — when the destination IS the ORA lane at large (doctrine landings, retrospective summaries), no specific seat needs waking. Use WAKE: ORA-lane if the positional convention matters, or omit.
  • Amendment posts that clarify prior dispatches — the wake-work info lives in the original post; the amendment refines it. Cite the original post's timestamp + WAKE/WORK via PRIOR-DIAGNOSTIC instead.

When in doubt, include the block. A redundant WAKE/WORK is cheap; a missing one costs Chad scan-time.

Enforcement surfaces

1. Canonical bundle Standing Directive §10 (Discipline at write site) — new bullet 5 after existing 4 bullets (cite-prior-diagnostic, RESPONSES menu, pre-arm git state, cron-mesh allocation). Amendment lands in canonical bundle v1.10 stamp. 2. Emoji banner 📋 at top of provider boot files (CLAUDE.md, AGENTS.md, GEMINI.md) alongside existing 🛑 / ⚡ / 👁 banners for boot-layer visibility inside the first 60 lines. 3. Claude personal memoryfeedback_wake_work_pairing.md + MEMORY.md index banner. 4. Parity check — new invariants for ORA-2026-0019 reference + wake-work string presence across all 5 bundle mirrors. 5. Monitoring candidate — future queue-drift-check work could warn on dispatch posts missing the WAKE block when state=AWAITING_CLAIM or OWNER != poster. Not enforced at ratification; flag for later tooling ticket.

Anti-patterns this doctrine kills

  • "Who did I dispatch HWD-0018 to again?" — Chad scrolling a post to find OWNER. WAKE block puts it at the top.
  • @-mentions buried in prose paragraphs — the @mention is good intent but scan-time is still O(read the first sentence). WAKE is O(glance).
  • "Here's a list of blocked items, let me go find each one's OWNER" — session reports that list tickets without pairing them to seats. WORK/SEAT pairs inline kill this scroll.
  • Relying on fleet-active-queue as the routing key — the reducer is for machine state. Chad's workflow is human state. Don't make him run a shell command to answer "who do I wake?"

Scope and guardrails

  • In scope: every post on FLEET_FEED.md that has state=AWAITING_CLAIM or state=CLAIMED with a specific OWNER, plus every in-session report mentioning another seat's work.
  • Out of scope: lane-local feed mirrors (lane *_FEED.md files are mirrored from FLEET_FEED.md, they carry whatever format the authoritative log has).
  • Out of scope: private messages / in-app chats between Chad and a single seat. Chad already knows which session he's in.
  • Does not replace: PRIOR-DIAGNOSTIC (ORA-2026-0007) or RESPONSES menu (ORA-2026-0008). Those remain bottom-of-body protocol trailers. WAKE/WORK is a top-of-body routing primitive.

Evidence trail

  • 2026-04-16 — Chad operator directive (current session): "need a more efficient way for me to copy paste and or wake sessions manually. i told desktop camber 02 he needs to do it this way, if you think good enhance and put in doctrine and memories always give me the work ID # for the session ID # unless it does not matter."
  • Prior pattern: CLAUDE-DESKTOP-MacBook-Air-CAMBER-02's dispatch posts (HWD-0018 regression dispatch at 2026-04-16T18:10:12Z, DEPLOY-CHAIN at 18:10:17Z, earlier CMB-/HWD-/FLT- dispatches at 17:42–17:55Z) use @SEAT-NAME — at the top of body prose as a proto-form of this rule. This doctrine formalizes and cleans up that pattern into a scannable two-line block with predictable labels.
  • Composes with ORA-2026-0007 (reassignment cite-prior — machine-header-level discipline), ORA-2026-0008 (peer-sync RESPONSES — end-of-body protocol), and ORA-2026-0016 (fleet telemetry — situational awareness tooling that informs who-to-wake).
  • Related but distinct from ORA-2026-0018 (STRATs-must-delegate) — 0018 tells STRATs WHAT to do under pressure (dispatch, don't self-execute). 0019 tells every seat HOW TO FORMAT that dispatch so Chad can route it efficiently.

Promote to M2 when at least 3 non-ORA-01 seats post dispatch entries with the WAKE/WORK block (positive-evidence dogfood across the fleet).

Promote to M3 when enforcement lands in queue-drift-check (automated flag for missing WAKE on AWAITING_CLAIM dispatches).

Known exceptions

  • Multi-seat fan-out dispatches (one post dispatching the same work to several seats in parallel) — use WAKE: any-idle-<LANE>-codex or list seats line-by-line:
  • `` WAKE: CODEX-DESKTOP-MacBook-Air-CAMBER-03 WAKE: CODEX-DESKTOP-MacBook-Air-CAMBER-04 WORK: CMB-0090 (first to claim wins) ``

  • Unnamed future seats (dispatches filed before a specific seat is chosen) — use WAKE: TBD (route when an idle <LANE>-codex seat confirms) and amend with a proper WAKE when routing is resolved.

Review cadence

  • Next review: 2026-05-16 (30 days).
  • Review triggers: (a) Chad reports the WAKE/WORK format is helping, hurting, or invisible — adjust accordingly; (b) a seat follows the rule but Chad still scrolls — indicates the format needs more prominence or different field names; (c) queue-drift-check enforcement lands (promotes to M3).