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-roletier: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 isdone(cartridges #130). - The cartridges router speaks capability classes (extract, reason, judge, frontier): the chair's bounds hold a
class ceiling (cartridges #141),
decideenforces it (cartridges #143), and a routerDecisionhas 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 chaircommands 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_oneblock 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 landresumes 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 syncupdates 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 launchrefuses it unless--include-blockedis given;--forcenever 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).
coxreads 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.