Shared vocabulary for the orchestrator. Names here are the load-bearing
concepts; use them exactly in code, plans, and reviews. Architecture-level terms
(module, interface, seam, depth, adapter) live in the
improve-codebase-architecture skill's LANGUAGE.md.
- Workflow — a plain async TypeScript function the orchestrator runs top to
bottom. Resume = re-execute, with finished
run()names returning cached values. - Step — a reusable named unit (
step.define). Kinds:agent,interactive,command,ask,commit,worktree. The name is the memoization key. - Runner — an adapter wrapping a coding-agent CLI (Claude, Codex, …) behind the
Runnerinterface. The core never imports a concrete runner. - Host — the observability seam the workflow executor talks to. Two adapters:
plain(line-prefixed stdout/NDJSON) andtwo-pane(tmux). - Step lifecycle event —
step:start/step:complete/step:failed/step:cachedplus thestep:parallel-*family. The executor emits these to the host;Host.onLifecycleEventreturnsvoid(fire-and-forget by contract).
- Pane —
left= status rollup;right= the active step's view. - Source — one swappable origin of right-pane bytes, keyed by
SourceKey(liveper step,rollupfor a parallel block). Each source owns its own tmux session/pane; the right-pane controller swaps the visible pane between them. - Live vs replay — a
livesource tails an open tee; on step end it transforms to a frozenreplaythe user can scroll back to. - Tee (
PerStepTee) — per-step sink that fans transcript bytes to on-diskformatted_output.*files; the live source tails the tee file. Opened onstep:start, closed onstep:complete/step:failed. - Rollup (
RollupAggregator) — aggregates parallel-branch status into a single snapshot rendered on the_rollupsource during a parallel block. - Banner — a transient overlay message on the right pane (info/error), emitted through the controller; last-write-wins.
- Interactive completion wait (
awaitInteractivePaneExit) — how an interactive step learns its pane has exited. Races the unboundedpane-diedhook channel against a slow#{pane_dead}liveness poll. The hook is the fast path; the poll is a backstop for a lost/delayed hook signal under host contention. Invariant: the poll never fails a live pane (a human may pause the agent arbitrarily long), so it only short-circuits a pane that already died. A backstop hit logsinteractive-wait-hook-missed. Added 2026-05-26 to kill the two-pane-sequential-runs flake (a lost hook used to hang until the caller's timeout with no diagnosis). - Lifecycle choreographer (
LifecycleChoreographer) — translates one step lifecycle event into the ordered right-pane side effects (tee open/write/close, source register/unregister, banners, rollup apply/reset). Owns the ordering invariants ("unregister before close", "summary before freeze") and serializes events FIFO so they hold across events even though the host fires them without awaiting. Introduced 2026-05-26 (extracted fromtmux-host.onLifecycleEvent); seedocs/issues/2026-05-26-arch-lifecycle-router-in-tmux-host.md.