docs: the front door, the runner and the budgets read as built — every page says a plain message routes itself, no pause exists, turns are a guard, and the plan's graph matches its text - #1031
Merged
Conversation
…y page says a plain message routes itself, no pause exists, turns are a guard, and the plan's graph matches its text The program plan, record 0032 and the user-facing pages catch up with the decisions on main: the request router is live with no pause for write presets, U32 is built ahead of U31 and U31 blocks nothing in Phase G, turns are a runaway guard rather than a budget, ship has one implementation, and a plain message routes itself where the router is on while a directive forces a preset. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Contributor
There was a problem hiding this comment.
LGTM: Docs-only staleness sweep; every updated claim I spot-checked matches the code as built (round loop gone, agentSource/route event, routable flag, turn cap as derived guard).
Verdict: approve — docs-only staleness sweep, and the updated claims match the code.
Reviewed head 6ad059b (#1031, 11 files, +51/−41 — full diff and digest covered). No findings.
What I verified against the source, not just the prose:
- 0032 decision record — "three call sites" for
runAgentis accurate:src/core/dispatch/runLoop.ts:463,src/core/descriptionTurn.ts,src/core/reviewRound.ts:488; the ship round loop's children no longer call it (the onlyrunAgentmention insrc/core/dispatch/ship.tsis a comment noting they aredispatch()runs).ship.coordinatoris indeed no longer a key —src/config/validate.ts:344refuses it by name. - Plan R46/U30 rewording (
chosenBy/routedReason/run_note routed→run_meta.agentSource+routeevent) matches what was built:agentSourceis onsrc/core/dispatch/provision.ts:277-278and threaded to the record/ledger meta. - R47/KTD15 pause removal and
routable: false—src/agents/registry.tscarriesroutable?: falseonship(line 505) andconductor(line 555), exactly as the plan now says. - github-tools.md item 5 and code-map.md — the "8 turns" → "turn guard derived from the budget" edit matches
runawayTurnCap(maxMinutes)/loopBudget()in the registry. - Agent seam row gaining
conductorin how-a-request-flows.md matches the registry. - specs:coverage reports no spec-covered source paths changed (spec edits here are the sweep itself, updated in-diff — not contradictions); test-guard ok, no tests touched.
Nothing blocking, nothing to flag.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Tonight's decisions landed on
mainand left the docs describing an earlier design: a pause before a routed coding run, a compound unit still to build, turns as a budget, a ship flag that no longer exists, and tutorials that tell people they must typeagent:coding. This PR sweeps the markdown so every page reads as built; no code changes.What & why
Six themes, each a decision already on
main:general,research,review,exploreorcodingon the fast model, and a routedcodingdispatches at once;shipisroutable: falsebecause it holds the merge grant, and the conductor is reached only through the compound form. #1028 fixed R46 and U30's text; this PR fixes what it left: R48 still said a compound with a write part "pauses once, at the parent", KTD15 still decided how the pause was expressed, U30's Files and Patterns still listed theroute_pendingnotes and the inbox the pause read, U31 still said a write route "waits forgo", the Phase H receipt and the Definition of Done still required "no write preset dispatched from a route withoutgo". The plan's names for the record also catch up with what U30 built:run_meta.agentSourceand arouteevent, notchosenBy,routedReasonand arun_note routed.parts: [{ text, preset }],compound_rejected: <why>,routeCompoundFixtures.tswith twenty compounds and five decoys), its test scenarios name the tests that exist, and its Verification states the built bar (detection on at least 90 percent, no decoy split). The phase table's H row says U30 and U32 are built and U31 open; U30 gets a Status line too.src/runner.tsrow ("Turn budgets on the agent def") and the GitHub-tools spec'sgeneralitem ("with 8 turns"), now say the wall clock is the budget and the turn cap is derived from it. The owner's per-run dollar cap is not documented as shipped; it is one row in the plan's follow-ups ledger, marked planned and built outside this plan.U32 --> U26and nothing from U31, but KD5, the Summary and the Phase G row said "U26 to U29 wait behind U30 to U32", which reads as U31 too. KD5, the Summary, the Sequencing paragraph, the Phase G row, U26's Dependencies, U31's new Status line and the ledger row now say explicitly that U31 is a calendar wait (the default flip after a week of production routes from 2026-09-14 06:16Z) and blocks nothing in Phase G; U25 is marked live in 1.208.0.proposed, so amendable) still counted the in-process round loop's two children amongrunAgent's call sites and described ship's children "undership.coordinator: true" with the round loop's retirement as future work; its today table and Rollout now say the round loop is deleted,ship.coordinatoris no longer a key, andrunAgenthas three call sites. The agents explanation'sshiprow says the plan runner runs each round as a child run in a thread of its own.agent:revieworagent:codingto pick an agent. They now say the directive forces one and that, where the router is on (routing.auto: on for the production deployment since 1.211.0 through infrastructure#86, and the default for every install once U31 lands), a plain message picks its own agent and the card says why. The README's seam sentence, the request-flow explanation and the config-layers explanation gain the routing stage in one sentence each; the request-flow table gains theconductor.Tour
1. The tutorial no longer tells a person to pick an agent by hand
The get-started table's agents row said "Say
agent:revieworagent:codingin a message to pick one". It now says the directive forces one, and that with the router on a plain message picks its own agent and the card says why, with the link to the row that turns it on. The first-request tutorial and the Slack commands reference say the same thing in their own words.Look for: the wording stays conditional on
routing.auto, because a fresh install has it off until U31 flips the default.switchboard/docs/tutorials/get-started.md
Line 18 in 6ad059b
2. R48 and the plan's pause vocabulary
R47 already recorded the owner's call; R48 still said a compound with a write part "pauses once, at the parent". It now says a compound with a write part dispatches at once under R47's rule and carries the built part shape (
{ text, preset }). KTD15 is amended the way R47 was: it records that the pause was decided, built and removed, and what survives (no card control, Stop and Kill as the one write control). The Phase H receipt and the Definition of Done drop "withoutgo".Look for: the remaining
route_pending,route_confirmedandreply go to startmentions in the plan are all inside sentences that say the pause was built and removed (R47, KTD15, U30 Approach step 4); none describes a pause that exists.switchboard/docs/plans/2026-09-10-001-feat-orchestration-program-plan.md
Lines 114 to 115 in 6ad059b
3. U32 reads as built
The unit gets a Status line naming what landed and that its live receipt on the board item closes it; the Goal drops "under the same pause rule for write presets". Below it (not anchored) the Files, Approach, Test scenarios and Verification describe the built shape: the fixture file's real name and counts,
compound_rejectedinstead of a fallback, noagent:reviewreply that collapses a compound (never built), detection at 90 percent and zero decoys split instead of "at most 1 of the 10 singles".switchboard/docs/plans/2026-09-10-001-feat-orchestration-program-plan.md
Lines 841 to 844 in 6ad059b
4. KD5 says which front-door units U26 waits on
The decision that reordered the pi series behind the front door now names the units: U26 to U29 wait behind U30 and U32 being built, and U31 is a calendar unit that blocks nothing in Phase G. The Summary, the Sequencing paragraph, the Phase G row, U26's Dependencies and the ledger row say the same, so the text agrees with the graph's
U32 --> U26.switchboard/docs/plans/2026-09-10-001-feat-orchestration-program-plan.md
Line 139 in 6ad059b
5. Record 0032's today table knows the round loop is gone
The record is
proposed, so its today facts may be amended. The native-loop row counts threerunAgentcall sites and says the round loop's two children were call sites until the plan runner became ship's one implementation; the ship row says everyagent:shiprequest hands to the runner andship.coordinatoris no longer a key. The Rollout's steps 2 and 4 (not anchored) drop the round-loop retirement as future work.Look for: the three call sites and their line numbers match
git grep -n "runAgent("onmain(runLoop.ts:463,descriptionTurn.ts:164,reviewRound.ts:488).switchboard/docs/decisions/0032-pi-is-the-harness-the-native-loop-retires.md
Lines 24 to 30 in 6ad059b
6. The last two pages that called turns a budget
The GitHub-tools spec's
generalitem said the assistant runs "with 8 turns"; it now says it runs on the 5-minute budget with the turn guard derived from it (the registry givesgeneralloopBudget(5), so its cap is 30). The code map'ssrc/runner.tsrow (not anchored) says the wall clock is the budget and the turn cap a runaway guard, pointing at run-loop item 1.switchboard/docs/reference/specs/github-tools.md
Line 14 in 6ad059b
7. Remaining changes
README.md— the dispatcher sentence gains "routing" between config layers and authorization.docs/explanation/how-a-request-flows.md— the core sentence gains routing; the seam table's Agent row gainsconductor; one paragraph after the sequence diagram says what happens without a directive.docs/explanation/agents-and-toolsets.md— theshiprow describes the plan runner's child rounds; one paragraph after the table says the directive forces a preset and a plain message routes itself where the router is on.docs/explanation/config-layers.md— one sentence: the router picks the preset when no layer above the defaults names one.docs/reference/code-map.md— thesrc/runner.tsrow: wall clock is the budget, the turn cap a runaway guard.docs/reference/slack-commands.md— theagent:<name>directive row: forces an agent; without it a plain message picks its own where the router is on.docs/tutorials/first-request-in-slack.md—agent:codingforces the agent.docs/plans/2026-09-10-001-feat-orchestration-program-plan.md— beyond the anchored steps: R46 and R49 userun_meta.agentSourceand therouteevent; U30 gains a Status line and its Files, Approach, Patterns and test scenarios drop the pause and the old record names; U31 gains a Status line and drops "waits forgo" and the paused card; the Phase G and H rows carry unit states; Appendix B gains the cost-budget row.docs/decisions/0032-pi-is-the-harness-the-native-loop-retires.md— the Rollout's steps 2 and 4.Decisions
acceptedand everyimplementedplan (the agent-ship pipeline plan among them) still describes the round loop as history;decisions:checkholds their bodies unchanged againstorigin/main. Only theproposedplan and record 0032 were amended.helptext is code and is U31's.src/core/commands/help.tsstill leads with the directive list; rewriting it is U31's unit and no doc pretends otherwise.routing.autois off in a fresh install until U31, so the tutorials say "with the router on" rather than "a plain message always routes"; the production deployment has it on since 1.211.0.git grepcounts below name them.agent:reviewandagent:codingmentions describe the house process (a review is requested by directive), not a rule for users.Validation
Gates run in the worktree at the pushed head; the log for the whole gate is
verify.login the session scratchpad (1045 lines, last lineverify exit=0).npm run decisions:checkok — 45 record(s) carry a valid status, every superseded_by resolves, accepted bodies unchanged against origin/mainnpm run docs:genthennpm run docs:checkdocs:gen ok — 0 of 10 file(s) changed;docs:check ok — 10 file(s) matchnpm run specs:checkok — 44 spec(s), 2783 proof reference(s) checked, every Code/Tests path existsnpm run specs:coverage -- --changed origin/main...HEAD --test-guardevery changed source path has a covering spec;test-guard ok — 0 test file(s) changednpm run hygiene:checkok — 0 file(s), 0 hit(s) still listed(no new#NNNin a spec or record)npx prettier --checkon the 11 filesAll matched files use Prettier code style!npm run verifycheck:site ok — 8 required page(s) present)npm run check:pr-title -- "<this title>"check:pr-title okStale phrases,
git grep -c -FoverREADME.md AGENTS.md CONTRIBUTING.md docsonorigin/mainand at this head:pauses oncewithout \go``waits for \go``reply go to startroute_pendingroute_confirmedroute_unconfirmedchosenBy: routerprofile.chosenByrun_note routedroutedReasonparts: [{ preset, prompt }ten single requestsrouteCompound.fixturesU26 to U29 wait behind U30 to U32Turn budgetswith 8 turnsShip's children under \ship.coordinator: true``round-loop retirement unit deletespick one; the defaultpicks the agent; \in acme/api``run this agent for this message onlyHuman-gated: none; a docs-only change with no visual surface.
🤖 Generated with Claude Code