v0.41.0
The fleet stops assuming one issue is one repo, one worktree and one PR — and gains a launch surface
for running issues where you are actually looking. Plus a read-only audit of what this repo's CI
really costs.
Added
/board work -Parallel … -Surface terminal|app|headless(#710, phase 1 of six).terminalis
the default and is byte-for-byte the old behaviour.appdoes the board mechanics
(Status/assignee/claim) and then creates no worktree and spawns no process: it emits a dispatch
manifest — one self-contained entry per issue — for the agent to hand to the host application's own
session-spawn tool, and the id that comes back is recorded with-RegisterSession. A script cannot
open a host session; only the agent can, so the surface is honest about needing one click per task.
headlessis accepted so callers can name it but refuses to dispatch, rather than silently falling
back to a visible terminal. This is phase 1: the completion channel, the pre-dispatch independence
check, the wave hand-off, the run roll-up and-MaxSessionsare later phases — #710 stays open.- Cross-repo issues (#487). An issue whose work lands in OTHER repositories is detected (a
cross-repolabel or a target-repos list in the body), briefed accordingly — the worktree is the
base of operations, one PR per target repo,Refsand neverCloses, because aCloses #nin
another repo closes THAT repo's issue — and its PRs are recorded per session. The review gate can
take several PRs at once, and the issue closes only when all of them have merged. /board workopens with a state of play (#660). Before the pending list it reports the other
kinds of open work the board query alone never showed: an in-flight run marker, issues already In
Progress or In Review, open PRs, live sessions and an unreleased changelog. A source it cannot read
is reported as unknown and never takes the pending list down with it.- A read-only audit of this repo's Actions cost (#614), measured from the workflows that really
ship rather than estimated: which jobs have no timeout, which run on a multiplier-priced runner,
which lack concurrency cancellation, and which artifacts keep the 90-day default.
Changed
- Every read and write of
sessions.jsonis serialised through one named OS mutex. Parallel
visible sessions made two long-standing races reachable: two processes writing at once dropped each
other's rows, and a read landing inside a write failed as a non-terminating error thecatch
never saw — measured at 21% of reads during writes, which reads as "no sessions at all" and had
-Watchcalling a fleet finished while it was running. Both are proven with real multi-process
tests; an abandoned mutex (a session killed mid-write) is now a success, not a crash. - A read-only listing no longer creates
.agentic-board/just to answer "is anything running". - The skills audit no longer pairs a skill with its own copies, lints each skill once, and routes
every finding by the plugin's real identity (Refs #462); the Triggers lint acceptsTriggers - x.