Skip to content

0.28.0

Cut on 2026-10-05. coxswain-tools, coxswain-graphs, coxswain-dash and coxswain-crew are tagged v0.28.0. coxswain-cartridges stays pinned at v0.23.1. coxswain-tools is published to PyPI from its tag. Status: beta. This release finishes the coxtop canvas, adds run history and run cost to coxtop, and makes lands harder to strand. It carries four headlines.

coxtop matches the canvas. Both pages take the canvas's truecolor palettes, with a nearest xterm-256 fallback when the terminal is not truecolor. The Regatta page gets the canvas layout and its restyled frames: the chair line, spend meters with a gradient and a stop tick, machines with lane blocks, a 24-hour lane chart, runs, the queue, the inbox and a key bar. Slipstream gets its run cards and right rail.

Run history and run cost in coxtop. The feed carries ended runs from the store and each run's cost series. coxtop draws a history frame of ended runs with their outcome, cost and PRs, a run-cost frame that graphs each running run's cumulative cost against today's spend, and each lane's stage cost.

Lands that do not strand. A run that loses its store connection retries its exit writes, and the chair marks a run lost when its host is up but its process is dead, so the initiative relaunches. A phase land treats an item already done elsewhere as satisfied, and a refused land blocks only its own initiative. A pytest check that collects no tests is skipped at land. The chair stops relaunching an initiative whose ready task waits on an approved task in the same phase, and decompose now splits such an edge into its own phase. A task whose self-modification review PR merges lands through the chair.

The chair on several machines. The chair machine's lanes can be reserved for decomposes (policy.dispatch.local_lanes: decompose), so builds go to lane hosts. A chair with no plan meter of its own reads the newest meter row from the store, so a standby chair on another machine paces from the real meter. cox stats models compares models per role, and the crew gains a model steward seat that proposes each role's model from those stats.

Upgrading from 0.27.1. Nothing migrates, and the store schema is unchanged. Restart the chair loop and any standby chair after upgrading cox. To keep the chair machine for decomposes, set policy.dispatch.local_lanes: decompose in the team cartridge and give that machine a lane in the hosts table. Two coxtop items move to a later release: the chair panel's integration with the dash, and the Enter and close keys that start and close a session from it.

coxswain-crew

  • The model steward seat: a charter that proposes each role's model from the run stats, one cited proposal a week, and its place in the seat roster (crew #8, crew #9).

coxswain-dash

  • Truecolor palettes for both themes, with a nearest xterm-256 fallback when the terminal is not truecolor (dash #28).
  • The Slipstream page in the canvas style: run cards with step chips and a right rail (dash #29).
  • The Regatta canvas layout as the default preset, with rounded, titled frames and an inbox never shorter than five rows (dash #32).
  • Regatta frames in the canvas style: the chair line and spend meters with a gradient and stop tick (dash #33), the machines and the 24-hour lane chart (dash #34), and the runs, queue, inbox and key bar (dash #35).
  • The chair panel's first phase: the panel that starts a Claude session (dash #30).
  • A history frame of ended runs with outcome, cost and PRs: the feed's history fields, the app state and keys, and the frame (dash #36, dash #37, dash #38).
  • A run-cost frame that graphs each running run's cumulative cost, and each lane's stage cost (dash #31, dash #39, dash #40).

coxswain-graphs

  • Decompose splits a task whose needs name a same-phase task into its own later phase (graphs #675, graphs #678).
  • A run's exit writes retry a dropped store connection with reconnect and backoff, the exit record last (graphs #677, graphs #680).

coxswain-tools

  • The feed carries what the canvas shows: readers for finished runs and chair fields, and their wiring (tools #1299, tools #1300, tools #1301).
  • The feed carries each run's cost series and today's spend series (tools #1303, tools #1304).
  • The feed carries run history from the store (tools #1307, tools #1308).
  • policy.dispatch.local_lanes: decompose reserves the chair machine's lanes for intake decomposes (tools #1302).
  • The chair waits on a task's review PR instead of landing around it, and finishes the task when the PR merges (tools #1305, tools #1306, tools #1309).
  • The chair stops relaunching an initiative whose ready task needs an approved task in the same phase (tools #1311).
  • A chair with no plan meter of its own reads the newest meter row from the store (tools #1312, tools #1314).
  • cox stats models compares cost and first-try rate per role and model from the store (tools #1310, tools #1313).
  • A phase land treats an item already done elsewhere as satisfied, and a refused land blocks only its own initiative (tools #1315).
  • A land check where pytest collects no tests is skipped, not failed (tools #1316).
  • The chair marks a remote run lost when its host is up but its process is dead (tools #1317, tools #1318).

Components

coxswain-tools carries the feed, the chair's land and pacing changes and cox stats models, coxswain-graphs the decompose split and the exit-write retry, coxswain-dash the canvas, history and run-cost frames, and coxswain-crew the model steward seat. coxswain-cartridges is unchanged since v0.23.1.