0.20.0
Cut on 2026-09-26. coxswain-cartridges, coxswain-graphs and coxswain-tools are tagged v0.20.0.
coxswain-crew stays pinned at v0.12.0. coxswain-tools is published to PyPI from its tag. Status: beta. This
release carries two headlines.
The chair runs itself. cox chair run is the chair's mechanical loop. Each tick (default 60 seconds) it beats the
chair lease, reads the 5-hour window and the weekly spend, lands every approved task one repository at a time,
relaunches an initiative once its ready tasks' dependencies have landed, retries or rescues a quarantine caused by the
harness, fills free lanes up to the team cartridge's policy.dispatch.max_in_flight from the work store first, and
prints one status line.
Past the weekly hard stop it lands, but launches nothing. Every action it takes carries the lease epoch, so when an
interactive session takes the chair with cox route chair take --steal, the loop stops acting until the chair is
released. cox chair run --once --dry-run plans one tick and changes nothing. It never cuts a release, merges a
Homebrew tap PR, pushes the workspace, or changes a profile or tier. The Autonomous chair docs page describes it
(coxswain #146).
Rescue. A build quarantined for a harness reason that kept its patch no longer needs a person to finish it. The
graphs rescue graph re-applies the patch in a fresh worktree, runs the configured checks in the harness itself, and
runs the review round. On approve, the task lands as usual. A rescue runs at most once per version of the ticket, and a
failed rescue does not count as a build attempt. cox route launch rescue runs it, and cox chair run plans it in
place of a rebuild.
Upgrading from 0.19.0. Nothing to change. The chair loop is opt-in: start cox chair run when you want it. Attempts
now record the ticket text they were made against, so after a ticket is rewritten the attempt cap counts only
attempts on the new text.
coxswain-cartridges
record_attemptstamps each attempt with the ticket text'sbody_sha, andattempts_on_current_bodyreturns the attempts made on the current text (cartridges #170).
coxswain-graphs
- The
rescuegraph: which quarantined tasks are eligible, the checks re-run in the harness, a review-only graph, the driver step, therescuecommand, and a failed rescue that does not count as a build attempt (graphs #549, #551, #553, #555, #557, #559). - The attempt cap counts only attempts made against the ticket's current text (graphs #547). A rescue reads an
attempt's cause from the store (graphs #563), and
store_cli lease acquire --stealtakes a held lease at the next epoch (graphs #565). A rescue verifies the kept patch on the default branch, not on a stale phase branch (graphs #567), and an approved rescue leaves one commit on a branch thatcox runs landfinds (graphs #569). - Decompose prefixes a task id with the initiative id only once (graphs #543), and writes the initiative's title and other scalars as valid YAML (graphs #561).
- Builds run with
SHELLset to bash, so a builder's shell commands behave the same on every machine (graphs #545).
coxswain-tools
cox chair run: the command, and its readers for the lease, docket, approved tasks, quarantines, stranded work, attempts, live initiatives, intake, run ids and the action log, wired together and proven complete (tools #816, #820, #822, #824, #826, #828, #830, #832, #834, #836, #838, #840, #842). The lane cap comes from the team cartridge, and the status line shows the 5-hour window (tools #844, #846).- Rescue:
cox route launch rescue, the rescue action, the kept-patch reader, the quarantine facts, the launch cap and the planner rule (tools #848, #850, #852, #854, #856, #858, #860). - The chair loop in use, from the end-to-end gate in a test workspace: a land uses the run that holds the approved
record (tools #862), launches name
work/<id>from the workspace and the loop starts an initiative that has not begun (tools #864, #866), and a quarantine is an attempt on the ticket's current text with its cause from the store (tools #868). cox route chair take --stealtakes the store lease too (tools #871). Every performed action is recorded, the status line names launches, rescues and failures (tools #873), and--dry-runnames what each tick would do (tools #875).- A failed rescue recorded in the store hands the task to the chair instead of rescuing it again each tick (tools #877).
cox runs landstages regenerated files without the exclude pathspec that git 2.55 refuses (tools #814).cox runs fetchreports a lane that another machine already landed as landed elsewhere, instead of failing (tools #818).
Components
coxswain-tools carries the chair loop and the rescue action. coxswain-graphs carries the rescue graph and the
attempt cap. coxswain-cartridges carries the ticket-version stamp. The umbrella carries the docs.
coxswain-crew is unchanged.