Atlas · wr-infra · 2026-06-02 · DRAFT for review

War-Room Orchestration Model

One pane runs the room. At session start the room declares a focus — which projects/epics it works on. The orchestrator at the *.0 seat then sweeps the focused slice (panes, open PRs, board status), triages it as one system, and routes to the spokes — so both sides of a multi-agent dev story move together, never one in isolation, and never drowning in the whole fleet.

The bottleneck

Single-session marshal lets a spoke triage from inside a room — partial context — and it's blind to GitHub state.

✗ Spoke self-marshals (today)

  • Spoke pulls only its own backlog + handoffs
  • Blind to open PRs + board status — re-dispatches work already moving
  • Dispatches against partial room context
  • One side of a story advances; the other stalls → confusion
  • Sweep-everything is unbounded → floods, re-creates scatter

✓ Orchestrator triages a focused room

  • Focus declared at session start = the lens that bounds triage
  • *.0 sees every pane + open PRs + board status in focus
  • Dependency-sequences across the full focused set
  • Spokes can't self-triage in a room — gate forbids it

The model

Orchestrator (hub) drives marshal-triage, which consumes the shipped substrate and routes to live spokes. Heartbeat is the loop that re-invokes triage on a cadence.

heartbeat — re-invoke on cadence Orchestrator pane *.0 — sees focused room Marshal — whole-room triage focus-scoped: PRs + board + backlog + handoffs dependency-sequenced across the focused set SHIPPED SUBSTRATE room-sweep.sh — pane states comms policy — call any pane /war-room-dispatch — route LIVE SPOKES — routed by domain hadescreds proteusdb / vps apolloui metis…bridges

Focus-first — the lens

The fleet work surface is too big to triage whole. Focus, declared in /war-room-start, narrows it to a bounded set before marshal touches it.

WHOLE FLEET SURFACE every open PR ~18 project boards backlog files handoff inbox FOCUS declared in /war-room-start focused set 1–few boards/epics + their open PRs + items to triage

The hard gate

Modes are mutually exclusive — a spoke can never reach triage inside a room. The footgun is unreachable, not discouraged.

marshal invoked $WARROOM_SESSION set? no SOLO — roomless backlog worktree fan-out (scoped) yes pane == *.0 ? yes ORCHESTRATOR whole-room triage no (spoke) HARD REFUSE "defer to the *.0 pane"

Whole-room triage — one focused pass

Step 0 bounds everything; Step 3 is the anti-confusion mechanism — dependencies sequenced across the whole focused set.

Roadmap reorder — marshal is the foundation

The triage engine is foundational; the heartbeat loop wraps it. So EM sequences before E7 wiring.

EM — Orchestrator Marshal triage engine · 9 tasks · DRAFT spec enables E7 — Heartbeat (#83) loop that re-invokes triage

Where things stand

PieceStateNote
Comms policy (pane map + peer dispatch + auth header)shipped2 commits, branch local
room-sweep.sh pane classifiershippedE7 spike · validated live
E7 Heartbeat epic #83on board #14Todo · now depends on EM
Marshal 3-way fork reviewdoneatlas-v2 base + proteus donor + 3 fixes
Orchestrator-Marshal spec (EM)draftedfocus-first + PR/board ingest · 9 tasks · docs/war-rooms/orchestrator-marshal-spec.md
Focus capture in /war-room-startqueued → EM.4writes focus → session state; marshal reads it
EM epic on board + delegationawaiting sign-offfiles / builds nothing until you approve
Fork consolidation + re-symlink fleetqueued → EM.1/EM.2ends 3-fork drift (P15–P17)
shipped spec / design your gate queued / blocked

Atlas · wr-infra · 2026-06-02 · review surface for the EM spec sign-off gate. No epic filed, no build started, until the spec is approved.