Skip to content

0.14.0

Cut on 2026-09-24. coxswain-cartridges, coxswain-graphs and coxswain-tools are tagged v0.14.0 in lockstep; coxswain-crew is unchanged and stays pinned at v0.12.0; coxswain-tools is published to PyPI from its tag. Status: beta; nothing here breaks a 0.13.0 install. The Jev system-one deciders land complete and off by default, with a vendor backend and a fully local one. Model selection moves to capability classes without changing a single role's model. A ticket can now ask for a stronger model, and a build sent back for changes escalates on its own. The landing loop resumes where it stopped, lands stacked tasks, and reads every board card and check at a fraction of the GitHub API calls it used.

coxswain-cartridges

  • The cartridges work store keeps a ticket's verify: list (cartridges #128) and its per-role tier: map (cartridges #134) instead of dropping fields it did not know, and a ticket may depend on a task in another initiative, met once that task is done (cartridges #130).
  • The cartridges router speaks capability classes (extract, reason, judge, frontier): the chair's bounds hold a class ceiling (cartridges #141), decide enforces it (cartridges #143), and a router Decision has a plain JSON wire form a caller can hand to graphs, which never imports cartridges (cartridges #144).
  • Every provider profile maps classes to models (cartridges #142). Its per-role defaults stay tier names for this release: writing them as classes (#146) was reverted (#147) because the graphs runner still checked tier names only; that check is being fixed.
  • The route-work skill uses the cox route chair commands and names the two launch gotchas (cartridges #132).

coxswain-graphs

  • Jev system-one deciders land complete and switched off unless a provider profile's system_one block turns them on: the arbiter is skipped when both reviewers approve (graphs #277); the typed fast-path core (graphs #278) and its wiring into the build runner (graphs #285); a handoff spec, a shadow report and a review prescreen (graphs #279, #280, #282); a backend over TypeSafe's Jev API (graphs #281); and a local k-nearest-neighbour backend that needs no vendor (graphs #298). A decider that fails never fails a node.
  • Elevation. A ticket's tier: map raises a role's model and never lowers a call site's own, and a build sent back after a review revise asks one tier higher on its second attempt and records why (graphs #283).
  • Capability classes. The resolver and both runners choose models through classes, falling back to tiers when a profile has no class map (graphs #299, #300, #301), and the runner can record a router decision it is given without computing one (graphs #302).
  • The driver honours dependencies on tasks in other initiatives (graphs #284), and the coverage floor no longer passes when pytest collects nothing (graphs #275).

coxswain-tools

  • cox runs land resumes on a pull-request branch it already pushed when the tree matches (tools #443), lands a task stacked on a parent that already merged, and finds a phase's initiative from the work store (tools #445). It reads an arbitration record that is null, a dict or the arbiter-skip marker (tools #437).
  • cox route sync updates one card with one issue read instead of listing the whole board, and every land polls its checks over the REST API, off the GraphQL budget that evening rate limits kept exhausting (tools #447). A ticket gets its issue when it is filed, a pull request closes it, and a done ticket's issue is closed (tools #459).
  • A run counts as live only if its process started after the run was launched, so a pid reused after a reboot no longer holds a slot (tools #441). The ready list skips work behind a blocked item, and cox route launch refuses it unless --include-blocked is given; --force never lifts that guard (tools #444).
  • Pacing does not judge the spend-to-time ratio before 10 percent of a window has passed, and the launch line says "advisory" instead of claiming a downgrade it does not apply (tools #446). cox reads capability-class names in profile defaults (tools #461).
  • The release planner bumps a component whose manifest entry spans several lines (tools #439).

Known gaps

Profile defaults written as classes return once the graphs runner accepts class names. The graphs capability-classes shadow phase and the route-sync card fields (per-task Run and Cost, initiatives as parent issues) are in flight for the next release. The cox dev commands move to the umbrella's unshipped devtools/ after this cut; 0.15.0 is the first release cut from there. SQLite run records are decomposed and their first phase is building.

Components

coxswain-graphs carries Jev, elevation and the class-aware runners; coxswain-cartridges carries the class vocabulary, the router wire form and the work-store fields; coxswain-tools carries the landing, sync and pacing fixes; coxswain-crew is unchanged and stays pinned at v0.12.0.