# Overdeck becomes the orchestrator — Claude sessions retire from orchestration

outcome: Overdeck (board + collector + conductor + factory + registry) owns dispatch, execution, landing, deploy, and status. A Claude chat session's job shrinks to conversation: capture a /request, /brainstorm a spec with the owner — then hand the work to Overdeck and stop. No chat session baby-sits lanes.
status: PROPOSED — north-star direction, owner-declared 2026-08-15. Not an immediate build order; every new slice anywhere MUST move toward this, never away.
source request: owner 2026-08-15, verbatim: "i eventually will want to retire the claude orchestrator. i will want overdeck to orchestrate. claude will be able to open a /request and /brainstorm with me in chat mode, but not have to actually do the work. the work will be offloaded to overdeck and moved on."

## Target shape

- Intake: chat (/request, /brainstorm) writes a board row + spec/plan doc. That is where a chat session's delivery duty ENDS.
- Orchestration: Overdeck picks up open rows (respecting per-task routing — priority/account/cli/model, drawer plan D6), dispatches factory runs on the cluster, tracks them through the live status registry, lands via the standing conductor, deploys via the watcher, stamps proof.
- Escalation: only "Blocked — needs you" reaches the owner; answers flow back through the board (drawer answer box), not through a waiting chat session.

## Already pointing this way (do not rebuild — these ARE the pieces)

- Standing land conductor + submit-and-exit contract (landing daemon plan; briefs end at "submitted").
- Auto-deploy watcher (deploy is an async consumer of main).
- Live status registry L1–L3 + queue mirror (factory run in flight) — machinery writes status, not agents' goodwill.
- Requests drawer D4 Dispatch (board button → detached factory run) and D6 routing — the board dispatching work IS Overdeck orchestrating, first slice.
- /fire, intake hooks, agent-judgement writer, worker-lost sweeper — the board as truth of what runs.
- Gate offload + merge train — execution capacity off the laptop.

## The gap this plan tracks

**Slice 0 — on-event triggers in the controller (BUILD FIRST — owner decision 2026-08-15).** The enabling piece: a small trigger table — "when ticket/row X reaches state landed/deployed, do Y" — read and fired by the controller's existing 60s reconcile loop. Y = flip a config flag, dispatch a factory run, launch a planned slice. This replaces every hand-armed session watcher (the chains "flip after landing" and "prove after deploy" that today live only in a chat session's head). Explicitly NOT session-notification plumbing — no daemon pings a Claude chat; the controller acts itself. Seams: trigger rows (condition: row id or landq ticket + target state; action: named, allowlisted action kinds — never arbitrary shell from a DB row; one-shot with journaled firing receipt); reads the registry rows + landq queue mirror that already carry the states. Fail-visible: a trigger whose action fails journals the failure on the board; triggers never fire twice (idempotent claim on the trigger row). Evidence: register a trigger "when <docs ticket> lands → stamp a trail entry", watch the controller fire it with no session involved.

1. Board-driven scheduler (the general case of slice 0: "when a lane slot frees and an open routed row exists → dispatch"): Overdeck (controller loop) auto-dispatches the top open, unblocked, routed row when a lane slot frees — today dispatch is owner-click (D4); the scheduler makes it continuous. WIP cap remains REJECTED (L4) — the scheduler bounds nothing by count; it dispatches what routing and machine health allow.
2. Chat handoff contract: /request and /brainstorm end by writing the row + doc and STOP — no inline lane-running from chat. The orchestration duties currently in main-session briefs (relay decisions, resume lanes, verify deploys) move to the controller + board escalations.
3. Escalation surface: blocked rows notify (edge-triggered, per notifications doctrine) and carry the answer box; no chat session polls.
4. Retirement receipt: a full request delivered ask→shipped with the only human touches being the ask and (optionally) an answer — and NO Claude orchestrator session involved. That receipt closes this plan.

constraints: owner directives outrank this doc; WIP cap NEVER returns; all standing safety rules (worktree isolation, guarded landing, hooks parity on every runtime including remote pi) apply to Overdeck-dispatched work exactly as to chat-dispatched work.

current receipt: direction registered 2026-08-15; drawer plan (D4/D6) and registry factory runs are the in-flight prerequisites.
next executable action: land slice 0 (trigger layer) once the queue drainer is fixed and the registry/queue-mirror rows exist; then the scheduler slice rides the trigger layer.
