§1 — Why

Measured across 259 runs the fleet sustains 2.26 concurrent workers against a 13-wide peak, and roughly 45% of purchased worker-time idles at the contract's wave barrier (fleet review §2/§5/§6). None of the serialization is in code: it comes from the reckon-ship contract's wave-and-wait shape, the over-broad landing freeze, a uniform 25m time ceiling, and per-run polling that makes wide fleets expensive in orchestrator context. This plan raises throughput by removing artificial serialization only — the DAG and file-scope disjointness still decide what may run together, so no parallelism is forced that plans do not expose. Depends on crew-state-integrity and dispatch-lifecycle-safety: a wider fleet is exactly what trips the ledger races and the member-collision loss.

§2 — Contract changes (reckon-ship SKILL.md + references) ✓ landed 2026-08-17

Rewrote the ship contract for rolling slot refill (commit 36e668a): free slots refill from the ready queue under the rule "no dependent node builds on unverified work"; the landing freeze narrows to promotion/merge while unrelated dispatch proceeds; one advisory fleet-size table remains with the roster as the real ceiling; engine-injected references are gated behind hand-composing. Mandatory per-session read measured 10,930 tokens (from ~24k); 33 contract tests green. Full record: §2 landed.

§3 — Time budgets that mean something ✓ landed 2026-08-17

Time budgets now come from measurement (commit d5d3c35): implement 8 m and review 4 m derived from ledger p75 (457 s / n=79 and 189 s / n=10), with cleanup and investigate kept as documented fallbacks because n=2 and n=0 cannot carry a derived default. The 60 m ceiling resolves independently, so a 45 m implement node needs no host edit. Overrun state is exposed in one poll with opt-in enforcement past a 1.5× grace recording phase=stopped. The retired concurrency key is gone from schema, model, published JSON and provenance, with a legacy host value stripped and warned — proven against this workstation's own config. 186 focused tests green. Full record: §3 landed.

§4 — Cheap observation and state writes ✓ landed 2026-08-17

Observation and state writes are now cheap (commits 43ebf37, 864fc0c): the ledger records view filters plan/since/limit, crew list takes --project and --phase (project-only 2 of 3, phase-only 2 of 3, combined exactly 1 over a three-pointer fixture), and the version-only typed read costs 126 B against the 2,542 B raw read — 95% smaller — so a landing write no longer pays for state it does not consume. All six roles the contract instructs now resolve, test and documentation included. Full record: §4 landed.

§5 — Skill/CLI reconciliation sweep ✓ landed 2026-08-17

Swept the contract onto the live surface (commit 372c243) and made the parity mechanical: 5 tests now pin 6 MCP crew views, 14 instructed CLI command paths with their flags, 6 dispatch exit outcomes, 3 refusal remedies and lifecycle guidance, so drift fails a test rather than misleading an orchestrator. Swept the member-collision guard, vendored-script prerequisite, exit codes 0–5, durable manifest default, in-harness caveats, the missing records/budget views, the XDG config-home rename, and the duplicate fleet-size table. All three refusals this sprint hit in practice are documented with remedies. 38 contract tests green. Full record: §5 landed.

§6 — The test role cannot execute tests ✓ landed 2026-08-17

Caught by dispatching the final suite gate under the role §4 had just added: it resolved read-only, uv had no writable cache and no network, and pytest collected 0 tests, so the gate was recorded not-run rather than passed or failed. Fixed (commit 9747555) by driving the sandbox tier from a declared execution_capable flag — test moves to worktree-full, resolution now rejects any execution-capable role lacking worktree-write, and an arbitrary role named executor proves the rule generalises beyond a name allowlist. 190 focused tests green. Full record: §6 landed.

§ Decisions

Wire backends.*.concurrency as a dispatch admission check, or delete it from the schema?

Wiring gives a real per-backend cap tunable per host/project; deleting keeps admission purely roster-driven and the config surface smaller. The status quo — declared and ignored — misleads every reader.

Lead decision 2026-08-17: admission stays roster-driven — the member roster already bounds real concurrency, so a per-backend numeric cap duplicates it; removing the declared-but-dead key is cheaper and more truthful than wiring an admission check the current fleet scale does not need.

§ Followups

Raise sustained throughput: contract, budgets, observation

§2–§5 deliverables, gated on crew-state-integrity and dispatch-lifecycle-safety landing first. §2 (contract text) and §4 (tooling) are independently dispatchable sections.

/reckon-ship fleet-throughput-contract

done - no followup. All five sections landed plus a sixth found in flight. Contract (36e668a): rolling slot refill under 'no dependent node builds on unverified work', narrowed landing freeze, one advisory fleet-size table, mandatory per-session read cut from ~24k to 10,930 tokens. Time budgets (d5d3c35): implement 8 m and review 4 m from ledger p75 (n=79, n=10) with cleanup/investigate honestly left as documented fallbacks, 60 m ceiling resolved separately, overrun visible in one poll with opt-in stop, and the dead concurrency key removed per the locked decision with legacy host values warned not fatal. Observation (43ebf37, 864fc0c): version-only read 126 B vs 2,542 B raw, ledger records and crew list filters, all six mandated roles resolving. Reconciliation (372c243): 5 tests pin 6 views, 14 CLI paths, 6 exit outcomes and 3 refusal remedies. Sandbox capability (9747555): execution-capable roles cannot ship read-only, caught by the gate the roles work had just enabled. Final gate 1941 passed / 0 failed. Evidence: docs/evidence/archive/fleet-throughput-contract-landed.html.

ftc-contract landed - commit 36e668a; gate passed; measure: mandatory per-session read set 10,930 tokens (gate <12k, prior ~24k), 33 contract tests green, 4 added; rolling refill + narrowed landing freeze + single advisory fleet-size table + hand-composing gate; wall 562 s; evidence: fleet-throughput-contract-landed#contract. Section s2 closed.
ftc-mcp-obs landed - commit 43ebf37; gate passed; measure: version-only read 126 B vs 2,542 B raw (95.04% smaller), ledger records view filters plan/since/limit under test, 224 focused tests green, 4 added; wall 434 s; evidence: fleet-throughput-contract-landed#mcp-obs. Section s4 stays open: crew list project/phase filters and test/doc worker roles remain in the crew-code node.
ftc-roles landed - commit 864fc0c; gate passed; measure: crew list --project and --phase filter the shared live read (project-only 2 of 3, phase-only 2 of 3, combined exactly 1); all six shipped roles resolve without error - cleanup, documentation, implement, investigate, review, test - with test/investigate/review read-only; 189 focused tests green, 5 added; wall 325 s; evidence: fleet-throughput-contract-landed#roles. Section s4 closed; plan complete pending the final suite gate.
ftc-reconcile landed - commit 372c243; gate passed; measure: 5 new tests mechanically pin 6 MCP crew views, 14 instructed CLI command paths with flags, 6 dispatch exit outcomes, 3 refusal remedies and lifecycle guidance; 38 contract tests green; swept items each recorded with file and line; wall 596 s; evidence: fleet-throughput-contract-landed#reconcile. Section s5 closed.
ftc-budgets landed - commit d5d3c35; gate passed; measure: defaults from ledger p75 - implement 457 s n=79 to 8 m, review 189 s n=10 to 4 m, cleanup n=2 kept as documented 25 m fallback, investigate documented 4 m fallback; ceiling resolves independently at 60 m so a 45 m implement node needs no host edit; overrun state exposed in one poll with opt-in stop past a 1.5x grace recording phase=stopped; concurrency key absent from schema/model/JSON/provenance with legacy host value stripped and warned (proven on this host's own config); 186 focused tests green, 4 added; wall 743 s, scope_changed so calibration-excluded; evidence: fleet-throughput-contract-landed#budgets. Section s3 closed.
ftc-role-sandbox landed - commit 9747555; gate passed; measure: test role moves read-only to worktree-full while investigate and review stay read-only, driven by a declared execution_capable flag rather than a role-name allowlist - an arbitrary role named executor proves the rule generalises; resolution now rejects an execution-capable role lacking worktree-write; 190 focused tests green, 1 invariant added, schemas regenerate byte-identically; wall 343 s; evidence: fleet-throughput-contract-landed#role-sandbox. Section s6 closed.
Final sprint gate PASSED - full suite 1941 passed / 0 failed / 0 skipped at 3e017f0 in 74.39 s, exit 0. Re-dispatched under the corrected test role resolving worktree-full, so the gate run is itself the end-to-end demonstration of the section 6 fix: the same node that collected 0 tests before the fix wrote its cache and manifest after it.