0.6.0
Cut on 2026-09-15. Every component is tagged v0.6.0 in lockstep; coxswain-tools is published to
PyPI from that tag. Status: beta; nothing here breaks a 0.5.0 install. This release closes two of
the seven intake groups planned on 2026-09-08 — G1, the observed record, and G2, the landing
model — across all three code components, plus the tools half of G3, work shape. Two things change
what you see: work items can read state: approved or dropped, and a run's record carries what the
harness observed rather than what the seat reported.
coxswain-graphs
- Every call appends to
runs/<run>.calls.jsonlas it completes, so a run that dies mid-flight still has a ledger (graphs #65, #68);files_touchedandcommands_runare derived from the runner's own trace, never from the model's summary (graphs #71). - A quarantine has a kind —
refused,unverified(patch kept),infra(patch kept, attempt not counted),dropped— on the record and on the work item's attempt history (graphs #67). - A stale phase branch is recreated from the default branch instead of blocking the run;
done + droppedcompletes a phase (graphs #69);collected_idsandcoverage_floor_holdsgate the trim (graphs #70); onestyle_passtrim runs per phase and is refused when it drops a collected test id or fails a check (graphs #77). lint_tickets' coupling rule is clean for a pair ordered byneeds, transitively (graphs #74); the worktree library (prune_registrations,remove_worktree,keep_worktree) lands ahead of the exit-path wiring (graphs #72); the four static ticket rules exist as a pure function (graphs #76).- Design specs committed under
docs/design/: observed record (graphs #62), landing model (graphs #63), work shape (graphs #66), validator reach, cost bounds, triage (graphs #75).ruffis a dev dependency (graphs #64).
coxswain-tools
cox runs recover <run> <task> --repo PATHmerges an approved, escalated commit into its phase branch — the remedy every escalated run had named since 0.5.0 (tools #132).cox runs landplans from the run's own paths (tools #124), lands a whole phase off its epic branch (tools #125), runs the repository's configured checks in a fresh worktree and names the failing check and its tail (tools #130);routetreatsdroppedas terminal and never ready (tools #131).cox route launch sweep(tools #126),cox route lintwith the four static rules (tools #127) andcox route groups(tools #129).cox stats ingestreadscalls.jsonland trace-recovered figures (tools #116), anchors events to their run (tools #120), classifies outcomes by kind (tools #117), rolls call cost up to tasks socost_per_landedis real (tools #115);cox stats coveragereports known/total provenance rows (tools #121).release-checkgains the pages and readmes checks (tools #114, #118).ruffis a dev dependency (tools #122).
coxswain-cartridges
record_attempttakeskindandpatch_kept(cartridges #56);droppedis a work-store state (cartridges #58);landing_areas.checksis what a build worktree and a land both run, and a project layer may declare its own list (cartridges #59, #68);approvedis a work-store state for built, reviewed work whose merge awaits a person (cartridges #67).- The dispatch schema's
shapediscipline, theconsolidatewrite kind and the sweep ceilings (cartridges #62, #63, #64); the three arms carry the reviewers' ceiling so a bookkeeping step cannot kill an approved task (cartridges #65). Specs: landing model (cartridges #57), work shape (cartridges #61), cost bounds and triage (cartridges #66).
Known gaps
release-check reported 48 drifts on a clean tree, all false; this release was cut with --allow-doc-drift. G6 fixes the checks. The fix loop can spend a third build it never reviews; filed.
Components
coxswain-graphs, coxswain-tools and coxswain-cartridges carry the changes above; coxswain carries
the manifest and these notes (#39). coxswain-crew is unchanged since v0.4.0 and is tagged in lockstep.