The 10-Lane Pipeline
Ten lanes, three roles, and a scheduling order chosen to stop the board silting up with unreviewed work.
| # | Lane | What it means |
|---|---|---|
| 1 | backlog | Authored but not yet admitted to the run |
| 2 | ready | Admitted and claimable by a builder |
| 3 | building | A builder holds the lease and is writing code |
| 4 | built | Code exists; claimable by a refiner or a reviewer |
| 5 | refining | A refiner is finishing the experience |
| 6 | refined | Ready for review |
| 7 | reviewing | A reviewer is driving the gates |
| 8 | needs_rework | Review refused it; a builder may pull it again |
| 9 | blocked | Parked with a stated reason — an overrun lands here |
| 10 | done | Every required gate holds a passing, evidence-backed verdict |
Reviewers drain first
Each pass counts what is pullable per role and dispatches in a fixed order: reviewer, then refiner, then builder.
The reason is backpressure. A board that always pulls builders first grows a queue of built cards nobody reviews — work in progress accumulates at the tail while the front keeps accepting more. Draining the pipeline before feeding it keeps the two ends in balance.
A pipeline, not batches
Up to three workers run at once by default, and the slot that frees up immediately pulls the next card.
A batch scheduler waits for its slowest member before planning the next round, so one twenty-minute card would idle every other worker for twenty minutes. Here wall-clock is governed by the longest single chain rather than the sum of per-batch worst cases.
Three hard stops
Dispatch halts on a card ceiling (max_cards, a hard stop rather than a target — a board producing endless rework cycles would otherwise loop forever), on the spend ceiling, or when an operator pauses the fleet.
All three stop dispatching while letting in-flight workers finish. Killing a live worker abandons its claim and wastes everything it has already spent.
With --watch, a board that runs dry is re-checked every few seconds instead of ending the run — but watch deliberately does not override a spent budget or an operator pause, because that would make the stop button advisory.