Skip to content

coxswain 0.41.0

Choose a tag to compare

@ppfenning ppfenning released this 17 Oct 01:38
· 2012 commits to main since this release
994611d

0.41.0

Cut on 2026-10-16. Status: beta. Towpath now shows the chair's background agents and splits spend between the
chair, its agents and the cox seats. The install and upgrade path is repaired after the first clean-machine rehearsal of
0.40.0, an install and an upgrade in a throwaway container: cox install clones components under the names its setup
step reads, cox upgrade --to takes each component's pin from the target release, and the install page now gives the
commands, flags and steps that work on a clean machine (coxswain #303, coxswain #306). A group of chair and routing
fixes ships beside them. The first pieces of a dedicated home directory for the install are in place but wired to no
command, and the directory itself ships in 0.42.0. A release rehearsal design and a dispatch-only rehearsal workflow
also landed in this repository (coxswain #304, coxswain #305); the workflow cannot gate a release yet, as the known
gaps explain.

Towpath shows the chair's background agents. The towpath feed gains a chair_agents section, one row per
background agent the chair launched, with its label, model, state, start and finish, tokens and cost. It also gains a
spend_split section that divides the five-hour and weekly windows between the chair session, the chair's agents and
the cox seats, with each window's meter fraction and reset time. Towpath draws them as a Chair agents frame and a spend
split frame on the regatta page, both hidden until toggled with 0 and .. A feed from an older cox carries
neither section, and the frames then say there is nothing to show.

An install and upgrade path that works on a clean machine. The first clean-machine rehearsal of 0.40.0, a fresh
install and an upgrade from 0.39.1 in a throwaway container, failed both. cox install cloned each component to
<root>/<name> while its own setup step read <root>/coxswain-<name>, so the setup step failed. Install now clones to
the names setup reads, and fetch, checkout, cox versions and cox upgrade read the same directories. With --to,
cox upgrade overrode every component's tag with the target version, which left a pinned component such as crew
behind. It now takes each tag from the target release's manifest. The first upgrade run crashed on a module import
after its setup step replaced the tool's own environment; install and upgrade now import every module before that
step. Install and upgrade exit 0 when only the closing doctor reports failing rows, and print a line that says to
create the workspace folders and team cartridge and run cox setup doctor. cox install still does not create those
folders or the cartridge, so the install page lists them as steps.

Chair and routing fixes. cox route requeue queues the intake of an initiative whose decompose produced no tasks.
cox route file records a repository under the home directory in the tilde form, cox runs cause finds a task whose
ticket moved phase after the run, and a relaunch honours lane capacity zero. The land back-off gains a rule that
releases a window when the phase branch has a new head; nothing records or passes a head yet, so the back-off still
runs its full window.

Groundwork for the home directory, not yet a feature. A design, a location resolver, a setup install plan that can
take the resolved locations, and pure migration planners and doctor rows landed. None of it is wired to a command:
cox setup migrate does not exist in 0.41.0, cox setup install still lays out under --root, and cox setup doctor
does not show the home rows. The directory ships in 0.42.0.

coxswain-dash

  • The feed reader parses the new chair_agents and spend_split sections against a shared activity fixture. Both are
    optional, and an agent state it does not know parses as unknown instead of failing the feed (dash #132, dash #133).
  • A Chair agents panel lists each background agent newest first with its state, model, elapsed time, tokens and cost.
    A spend split panel shows the chair session, chair agents and cox seats in dollars and share for the five-hour and
    weekly windows, with the meter fraction and the time to reset (dash #134).
  • The regatta page draws both panels in a band under the main frames. 0 toggles the Chair agents frame and . the
    spend split frame, both hidden by default, and focus cycles through a frame only while it is shown (dash #135).

coxswain-tools

  • The towpath feed carries the chair's background agents and a three-way spend split. Pure row and split builders
    (tools #1696) feed readers for the chair session's and agents' transcripts and for the price catalog, with the
    assembly of both sections (tools #1697), and the feed wiring adds chair_agents and spend_split to the schema 1
    snapshot (tools #1698). An agent is done when its last message ends the turn, running while its transcript has
    moved in the last ten minutes, and failed otherwise, and at most 12 rows are sent.
  • The land back-off rule releases an open window when the refusal recorded a phase branch head and the current head
    differs. Refusals do not record a head and the land planner does not pass the current one, so no back-off releases on
    a new head yet (tools #1699).
  • cox route requeue ID queues the intake of an initiative that has no live tasks and drops the empty initiative, so an
    intake whose decompose produced no tasks can run again. It takes an intake or an initiative, --dry-run, and writes
    store rows only (tools #1700, tools #1707).
  • cox route file writes a repository under the home directory in the tilde form and expands a --repo ~/... value,
    so a filing made on the chair machine resolves on every lane host (tools #1701).
  • cox runs cause finds a task whose ticket moved to another phase after the run, by looking for exactly one matching
    work item in the same initiative (tools #1702).
  • A relaunch honours lane capacity zero: when the local machine and every lane host are capped at 0, no initiative
    relaunches and the refusal says no lane capacity remains (tools #1703).
  • Groundwork for a dedicated home directory, wired to no command: the design document (tools #1704), a resolver for the
    home, its installs and workspaces folders, and the config, state and profile paths (tools #1705), a setup install
    plan that can take the resolved locations and registers the plugin marketplace through the claude command only
    (tools #1710), and pure planners for moving an existing layout and its lane hosts with doctor rows for the home that
    cox setup doctor does not show yet (tools #1716).
  • cox install clones each component to <root>/coxswain-<name>, the directory its setup step reads (tools #1706).
  • cox upgrade --to takes each component's tag from the target release's manifest, so a pinned component stays pinned,
    where it had overridden every component with the target version (tools #1711).
  • The upgrade imports every lazily loaded module before its setup step replaces the tool's environment, so the first
    upgrade run finishes, and install does the same before its setup step (tools #1708, tools #1712).
  • Install's fetch and checkout, the facts cox versions and cox upgrade gather, and the upgrade runner read each
    component from its coxswain-<name> directory. A bare directory left by an older install is listed as an extra
    (tools #1714, tools #1715).
  • Install and upgrade exit 0 when only the closing doctor reports failing rows, and print a line that says to create
    the workspace folders and team cartridge and run cox setup doctor (tools #1717).

Known gaps

The rehearsal landed as a design, a dispatch-only workflow and a script with tests (coxswain #304, coxswain #305), but
it cannot gate a release yet. Its fresh and upgrade scenarios download an install.sh that does not exist, so they do
not run the documented install, and the release command does not require a passing rehearsal. Requiring it is planned
for 0.42.0. The gate for 0.41.0 was a clean-machine rehearsal run by hand in a throwaway Proxmox container. The fresh
install and the upgrade from 0.40.0 both passed on tools 4e23473 and the umbrella at 569a119, and the upgrade ran before
the tag with the candidate staged in local mirrors.

The home directory and cox setup migrate are 0.42.0. The resolver, the install plan, the migration planners and the
doctor rows exist and are tested, but no command calls them. The land back-off does not release on a new head until
refusals record one and the planner passes the current one.

Components

coxswain-dash and coxswain-tools change. coxswain-cartridges and coxswain-graphs have no commits since v0.40.0 and stay
pinned there, and coxswain-crew is unchanged since v0.38.0 and stays pinned there.

Upgrading from 0.40.0. The store schema is unchanged and nothing migrates. Update cox itself first, with
uv tool upgrade coxswain-tools or brew upgrade cox, so the upgrade runs with this release's fixes, then run
cox upgrade. It takes each component's pin from the 0.41.0 manifest, so crew stays at v0.38.0. An install made with
cox install at 0.40.0 has its components cloned under bare directory names (cartridges, graphs, tools, and
crew or dash if you installed them), and 0.41.0 reads coxswain-<name>. The upgrade therefore lists each bare
directory as an extra and clones a fresh coxswain-<name> beside it at the pinned tag. The bare directories are not
upgraded or used again, cox versions keeps listing them as extra, and you can delete them by hand. If you made
coxswain-* links to get past the 0.40.0 install failure, the upgrade reads those names and needs no fresh clone.