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.
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.
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.
§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-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.