feat(queue): queue as data A2, migration, render and dispatch (#1508)

Filbert approved round 1 (f167b85e). Manifest 782bcb62, 21 files, plus
the QUEUE.md markers and the TOOLS.md section. Lead decision 35.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
2026-09-26 20:14:09 -05:00
co-authored by Claude Opus 5.5
parent c9539baa0f
commit 6ca116b7ba
32 changed files with 4886 additions and 103 deletions
+22 -14
View File
@@ -1,29 +1,32 @@
# QUEUE — the one task list
Read this first. One row per piece. Nobody needs to read the prose plans to
know what is next; the Brief column says which section to open only when you
are the owner of that row.
Read this first. One row per piece. The table between the markers is
rendered from `docs/plans/queue.json`, and `scripts/mosaic queue` is its only
writer. Don't edit the table by hand: `queue verify` and the commit hook
refuse a table that isn't the render. `packages/queue/README.md` has the verbs.
How to find your next thing:
- **Jason**: the first row whose State starts with `Jason:`.
- **A seat**: the first row where Owner is you and State is `in progress`,
`in review` or `briefed`. If there is none, you have nothing; say so on the
board and stop.
- **Sage, project lead** (Jason's ruling 2026-09-26; Darkwing before that): update this table at every gate, before
anything else is written. CURRENT.md is the narrative log; this table wins
- **A seat**: run `scripts/mosaic queue next`. It names the row to resume,
review or start, or says there is nothing; if nothing, say so on the board
and stop.
- **Jason**: rows in state `waiting-on-jason`, and parked rows to reopen.
- **Sage, project lead** (Jason's ruling 2026-09-26): changes the queue with
`scripts/mosaic queue` and commits `queue.json` with QUEUE.md through
`scripts/queue-commit.sh`. CURRENT.md is the narrative log; the queue wins
if they disagree.
States: `queued` (no brief yet) → `briefed` (brief written, not started) →
`in progress` → `in review` → `Jason: <what he must do>` → `done`. `parked`
means not before the rows above it and not without Jason's say. `required`
means it cannot be parked or reordered below `queued` rows; only Jason moves it.
States: `queued` (brief exists, not accepted) → `briefed` → `in-progress` →
`in-review` → `waiting-on-jason` → `done`. `blocked` returns to the state it
left. `parked` rows wait for Jason to reopen them. A `required` row can't be
parked, and only Jason clears the flag. `after` names the rows a piece waits
for.
Brief locations: "plan page" is `docs/plans/2026-09-12_control-board-mvp.md`.
Gaps found while working go to `docs/plans/DEFERRED.md`, not here.
## Pieces (in order)
<!-- mosaic-queue:begin -->
Lead: Sage from 2026-09-26 (Jason's ruling); Darkwing is a collaborating seat.
Jason is preparing the target for the next phase; until it arrives, the
priority below stands.
@@ -79,8 +82,13 @@ Gate F or when blocked."
| Console features outside the refined session-chat brief, including Fresh creation and model switching | Deferred by WEBUI Q1; required history/control/stop now belong to row 5, not this parked item | `2026-09-13_webui-session-chat.md` |
| Open gaps from the MVP work | Fixed only when a gate needs them | DEFERRED.md, "Open" |
<!-- mosaic-queue:end -->
## Log of table changes
Frozen at genesis. Since then the log in `docs/plans/queue.json` records every
change; the entries below are history.
- 2026-09-13 — created; rows 1 to 8 taken from CURRENT.md, DEFERRED.md and the plan page.
- 2026-09-13 — rows 9 to 13 added (#1508): the process itself becomes data with one writer and ledger checks. Jason: "I want this iron-clad." Required, not parked; rule: these rows cannot be moved to parked, only to done.