Phases. Work that is a run of related cards rather than one card now
has a shape on the board. A phase is a card like any other, marked
**Type:** Phase, with a ## Cards section naming its members in the
order they run — document order is run order, and membership runs one
direction only, so a member's phase and position are derived rather than
written twice.
Running one cuts phase/<stem> from the newest main it can see. Each
member is branched from the phase's tip, run headless exactly as ▸
start work runs any card, and merged back into the phase branch when
its checks are green; then the next one starts. Five conditions halt the
run rather than stepping over a card, main is merged into the phase
branch on every beat so a long run never drifts into one enormous
conflict, and nothing retries by itself. At the end: one PR, from the
phase branch into main, for a human. Merging it moves every card the
phase carried to done/ and clears the worktrees and branches behind
them — in a single commit naming all of them.
The runner is a beat, not an agent, and it is stateless. Each pass
recomputes what has landed from git and from the phase card's own
## Phase log, so a restarted board resumes a phase by looking rather
than by remembering.
Where a phase is drawn. The Board is the work you are personally
holding, so a phase's members are not listed there — nothing is moved,
deleted or marked, and each column says how many it is not showing. They
live in Phases, a fourth view with one swimlane per phase: a head
carrying the run's progress and its controls, five stage columns whose
last one is Merged in rather than done/, the cards drawn exactly as
the Board draws them, and the phase's own log beneath the lane. A halt is
impossible to miss — the header chip holds it, the view switcher marks it
from wherever you are, a toast fires, and the member card wears its own
failure independently.
Also in this release
- ⟶ phase on a
backlog/orto-do/card appends it to a waiting
phase's list, without the file being opened. - A board with no agent commands says so — a header chip naming the
setting and the file that holds it, and a line on every launch that
would have run them. It never refuses a launch. - A work agent refuses a phase card, naming ▸ run phase instead;
the read-only pair are still allowed. - Headless runs are told they get one turn, because nobody is there
to answer "shall I continue?". - An archive ⌸ chip on the card, for the tidy-up the length of the
board is too far to drag. - A redraw keeps where you were looking — scroll position survives
every live update. - A pinned port stays pinned across a restart: the probe now binds
the way the board binds, so a socket left inTIME_WAITno longer hops
a restart off its own port. - Sync rides one resolved remote —
BOARD_GIT_REMOTE, else the
checkout's first — and stalls saying so when there is none, rather than
looking healthy while syncing nothing.
Docs
bench.12vectors.com has the phases chapter
in three pages — Phases,
Running a phase
and Where a phase is
drawn — cut,
like every other page, from AGENTS.md itself.
Install or update
mkdir .task-manager && curl -L \
https://github.com/12vectors/bench/releases/latest/download/bench.tar.gz \
| tar -xz -C .task-manager
./.task-manager/start.shAn existing install updates in place with ./.task-manager/update.sh,
which replaces manager/core/ and the top-level scripts and touches
nothing under manager/local/.