Skip to content

0.9.0

Cut on 2026-09-16. coxswain-cartridges, coxswain-graphs and coxswain-tools are tagged v0.9.0 in lockstep; coxswain-crew is unchanged and stays pinned at v0.7.0; coxswain-tools is published to PyPI from its tag. Status: beta; nothing here breaks a 0.8.0 install. This release closes the first P project, schema versions — the three components now declare and check the contracts between them — and finishes the day's work on the fix loop: builds are judged by their content, the account's session limit pauses a run instead of burning an attempt, and the ticket lint stops refusing prose that only looked like a path. A pinned component now rejoins the release version on its next change, and bare cox keeps the chair alive by itself.

coxswain-graphs

  • The graphs harness declares CORE_SCHEMA, refuses to start against a different MAJOR of core.SCHEMA_VERSION, warns on a MINOR, and stamps every ledger row with schema (graphs #119).
  • A graphs node whose result is the account's session-limit banner raises LimitStop: the phase stops with no attempt written, the summary reads paused: account session limit, resets <time>, and the run record carries paused_until (graphs #121).
  • The graphs fix loop accepts a pytest evidence line satisfied by any run covering a superset of its files, reads a surface written path (new) as that path when a budget-stopped build resumes, and counts an identical patch after a handoff evidence request as progress (graphs #120, #118, #124).
  • The graphs ticket lint treats a bare slash, an angle-bracket placeholder, a device path and an absolute spelling of a repository file as notation rather than out-of-reach paths — six decomposes had died on those in one day (graphs #117, #122, #123).
  • The graphs decompose's emit step is pinned to route lint advisories under lint:, never into surfaces (graphs #125), and the triage graph's docket carries a measured stranded count, closing G7 (graphs #116).

coxswain-tools

  • cox versions in tools gains a schema column, cox setup doctor a schema row, and cox install warns when the resolved components disagree on MAJOR (tools #161).
  • The tools release planner rejoins a lockstep = false component whose main has commits past its pinned tag — tagging it at the release version and keeping lockstep = false in the manifest — and leaves an unchanged one pinned; release-check warns when a pinned component's pyproject has moved (tools #163).
  • Bare cox in tools spawns a detached python -m agent_tools.chair beat-loop for the chair it takes and prints the beater's pid, so the lock no longer goes stale one window after launch (tools #164, #165).
  • cox stats bounds in tools resolves a role's ceiling through role_budget_usd, tier_overrides and defaults before falling back to standard, so the censored table names the right caps (tools #162).

coxswain-cartridges

  • core.SCHEMA_VERSION = "1.0" in cartridges names the four load-bearing contracts — STATES, the frontmatter whitelist, ATTEMPT_KINDS, ledger.REQUIRED_FIELDS — and the rule that changing any of them bumps the version with a CHANGELOG entry (cartridges #74).
  • The cartridges provider profile raises the eight per-role ceilings that cox stats bounds showed censored by their own cap, by about half each, with the measured table in the PR (cartridges #75).

Known gaps

release-check still reports the false cli_surface drifts and the release planner still trusts the chair for the index section and the GitHub Release objects, so this release was cut with --allow-doc-drift; both fixes (tools-release-gaps, tools-github-releases) are in flight and ship in 0.10.0, together with the three capped graphs-loop-fixes tickets and the small defects filed today (two-parent phases, a reviewer that cannot emit structured output, placeholder builds, the stale initiative.md a relaunched decompose reads, the doctor's schema readers for the other two components).

Components

coxswain-graphs, coxswain-tools and coxswain-cartridges carry the changes above. coxswain-crew is unchanged since v0.7.0 and stays pinned there.