Files
stack/agents/darkwing/work/queue-migration-map.md
T
jason.woltjeandClaude Opus 5.5 6ca116b7ba 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]>
2026-09-26 20:14:09 -05:00

35 KiB
Raw Blame History

Queue migration map (#1508, A2)

Darkwing, 2026-09-27. This is the reviewed input to queue genesis --map agents/darkwing/work/queue-migration-map.md. Genesis reads the one json queue-map block at the end. Everything above it is for review.

Built from docs/plans/QUEUE.md blob c8e3d34e6efcb98070ebf226157ac027811ffa54 (HEAD c9539baa). If a row in QUEUE.md changes before genesis, the map has to change with it. queue-a2/map-check.mjs lists the table lines that differ from that blob and any piece or owner that no longer matches.

What genesis keeps

  • Rows 1 to 25 keep their ids. The five parked items become rows 26 to 30, in table order, with state parked, owner unassigned and no issue (plan Q9). highWater is 30 and nothing is retired.
  • The text between the QUEUE.md markers goes into genesis as legacyView, byte for byte. That covers every row, the parked table, the start message and the priority paragraph. A shortened note loses nothing, because the full State text is there.
  • The State column becomes state plus note. Piece and Gate are copied verbatim. Every text passes A2's rule: no \ or <, piece and gate at most 300 characters, notes at most 500.
  • Each row has one brief, {path, anchor}, and genesis pins the blob. Every anchor occurs once as a heading in HEAD. Done and parked rows keep their briefs; verify --current skips them.
  • createdAt comes from the log of table changes. Parked items 1, 2, 3 and 5 date from 7c8e530a, the commit that created QUEUE.md (2026-09-13 UTC). Item 4 has no evidence before 2026-09-26, so it is unknown.
  • requiredSince for rows 9 to 13 is 2026-09-13, the log line that made them required.
  • reviewers holds seats under agents/ only. A lane named for a fleet seat (rev-code-02, orch-01) stays in the note.
  • Genesis gives a claim to each in-progress, in-review and waiting-on-jason row: 5, 7, 9, 11 and 16.

Choices Sage should check

  1. Row 7 stays a row. Plan Q9 retired it, but lead decision 27 made it Sage's weekly ledger run, with packages/ledger/README.md as its brief. The map keeps it as in-progress with Sage's claim, so queue next sage resumes it and Sage records the weekly number with queue note 7. Retiring it would instead need retired: [7] and a pointer line under the markers.
  2. Row 10 keeps owner coordinator. No seat can act as coordinator, so only Jason or Sage can move the row, and its work edits AGENTS.md, which is Sage's. I recommend queue assign 10 sage as the first operation after genesis, so the change is logged instead of hidden in the migration.
  3. Rows 10, 12 and 13 have no after. QUEUE.md says "after row 9", but row 9 stays open until Gate G, and Gate G also verifies row 10, so after: 9 done would hold row 10 behind a gate that needs it. A's code is in place once genesis is committed, and each note says so.
  4. Row 11 is waiting-on-jason. QUEUE.md says the queue add refusal lands with A2. It landed in A1: add runs the same brief check genesis does. Only the gate is left, and the gate is Jason's.
  5. Gate owners. Jason holds every gate except rows 12 and 13, which the map gives to Sage. Both are checks the lead can see: a review round with no new file under reviews/, and the ledger run Sage does each Monday. With Sage as gate owner, J5 lets in-review → done happen without Jason.
  6. Row 16 stays open, as waiting-on-jason. Its State doesn't say done. Lead decision 29's "rows 14 to 25 are done" sits in the #1509 paragraph, and row 16 is #1510. If #1510 is closed, change the row to done before the map is committed.
  7. closes. Rows 9 to 12 close nothing and row 13 closes #1508, so piece E won't report #1508 open under a done row 9. This is J6's narrowing, and this line is its reason. Every other row closes its issues.
  8. Row 5's note matches QUEUE.md at c9539baa: the CHAT-03 brief is pinned, and Sage names the source author after A2 lands. When the row changes before genesis, the note changes with it.

Row by row

# State Owner; reviewers Issues Required After Gate owner Created Why
1 done darkwing #1503 no none jason 2026-09-13 Done per lead decision 29.
2 done darkwing #1504 no none jason 2026-09-13 Brief: the plan page's Step 3.
3 done darkwing #1505 no none jason 2026-09-13
4 done darkwing #1506 no none jason 2026-09-13
5 in-progress dewey; filbert, rocko #1507 no none jason 2026-09-13 Rocko added as reviewer (adversarial lane). The note is shortened; the full State text is in legacyView.
6 done darkwing; dewey #1511, #1512 no none jason 2026-09-13 Done per lead decision 29. One brief per row, so the plan page's Piece 5; the other two briefs are named in the note. Dewey is the reviewer; Filbert authored the pilot.
7 in-progress sage none no none jason 2026-09-13 Kept as a live row, not retired (see question 1). Recurring, so in-progress with Sage's claim.
8 parked unassigned none no none jason 2026-09-13 Brief: Sage's stub (J9).
9 in-progress darkwing; filbert #1508; closes none yes, 2026-09-13 none jason 2026-09-13 No after: lead decision 29 took the wait on row 6 off rows 9 to 13. The note is written as of genesis.
10 briefed coordinator #1508; closes none yes, 2026-09-13 none jason 2026-09-13 Owner kept as coordinator (see question 2). No after: see question 3.
11 waiting-on-jason darkwing #1508; closes none yes, 2026-09-13 none jason 2026-09-13 Both parts are in A1 already, so only the gate is left (see question 4).
12 briefed darkwing #1508; closes none yes, 2026-09-13 none sage 2026-09-13 Gate owner sage (see question 5).
13 briefed darkwing; filbert #1508 yes, 2026-09-13 none sage 2026-09-13 Closes #1508; rows 9 to 12 close nothing. Gate owner sage (question 5).
14 done coordinator; filbert #1509 no none jason 2026-09-13 Reviewer lane named Filbert or orch-01; Filbert kept, orch-01 isn't a seat under agents/.
15 done coordinator #1509 no none jason 2026-09-13
16 waiting-on-jason darkwing; filbert #1510 no none jason 2026-09-13 Kept open as waiting-on-jason (see question 6).
17 done coordinator #1509 no none jason 2026-09-13
18 done darkwing #1509 no none jason 2026-09-13 The note keeps the coordinator's part.
19 done coordinator #1509 no none jason 2026-09-13
20 done coordinator #1509 no none jason 2026-09-13 Done: lead decision 29 closed #1509 with rows 14 to 25 done.
21 done coordinator #1509 no none jason 2026-09-14 Done: lead decision 29. rev-code-02 isn't a seat under agents/, so no reviewer.
22 done darkwing; filbert #1503 no none jason 2026-09-14 Done: #1503 closed (lead decision 29).
23 done coordinator #1509 no none jason 2026-09-16 Done per lead decision 29.
24 done coordinator #1509 no none jason 2026-09-16 Done per lead decision 29.
25 done coordinator #1509 no none jason 2026-09-20 Done per lead decision 29.
26 parked unassigned none no none jason 2026-09-13 Parked item 1.
27 parked unassigned none no none jason 2026-09-13 Parked item 2.
28 parked unassigned none no none jason 2026-09-13 Parked item 3.
29 parked unassigned none no none jason unknown Parked item 4. First committed 2026-09-26 (0f5b7cb9); no earlier evidence, so unknown.
30 parked unassigned none no none jason 2026-09-13 Parked item 5.

Map

{
  "rows": [
    {
      "id": 1,
      "piece": "Control board MVP (scanner + page)",
      "owner": "darkwing",
      "issues": [
        1503
      ],
      "closes": [
        1503
      ],
      "state": "done",
      "previousState": null,
      "required": false,
      "requiredSince": null,
      "gate": "A passed 2026-09-12",
      "gateOwner": "jason",
      "brief": {
        "path": "docs/plans/2026-09-12_control-board-mvp.md",
        "anchor": "Control board MVP — plan"
      },
      "after": [],
      "reviewers": [],
      "note": "done 2026-09-27 (Sage, lead decision 29): D-001 MVP delivered, Gate A passed 2026-09-12, attention status operator-accepted (row 22), relaunch activity, attribution and Host guard landed; #1503 closed; cross-harness board work belongs to Gate E (row 5)",
      "blockedReason": null,
      "createdAt": "2026-09-13"
    },
    {
      "id": 2,
      "piece": "Seat registration and `mosaic seat task`",
      "owner": "darkwing",
      "issues": [
        1504
      ],
      "closes": [
        1504
      ],
      "state": "done",
      "previousState": null,
      "required": false,
      "requiredSince": null,
      "gate": "B passed 2026-09-12",
      "gateOwner": "jason",
      "brief": {
        "path": "docs/plans/2026-09-12_control-board-mvp.md",
        "anchor": "Step 3: daily use and fixes"
      },
      "after": [],
      "reviewers": [],
      "note": "done 2026-09-13",
      "blockedReason": null,
      "createdAt": "2026-09-13"
    },
    {
      "id": 3,
      "piece": "Reply-from-board (piece 2 on the plan page)",
      "owner": "darkwing",
      "issues": [
        1505
      ],
      "closes": [
        1505
      ],
      "state": "done",
      "previousState": null,
      "required": false,
      "requiredSince": null,
      "gate": "C passed 2026-09-12",
      "gateOwner": "jason",
      "brief": {
        "path": "docs/plans/2026-09-12_control-board-mvp.md",
        "anchor": "Piece 2: reply-from-board"
      },
      "after": [],
      "reviewers": [],
      "note": "done 2026-09-12",
      "blockedReason": null,
      "createdAt": "2026-09-13"
    },
    {
      "id": 4,
      "piece": "Ledger (piece 3 on the plan page)",
      "owner": "darkwing",
      "issues": [
        1506
      ],
      "closes": [
        1506
      ],
      "state": "done",
      "previousState": null,
      "required": false,
      "requiredSince": null,
      "gate": "D: 18.9 human messages per closed issue, week of 2026-09-06",
      "gateOwner": "jason",
      "brief": {
        "path": "docs/plans/2026-09-12_control-board-mvp.md",
        "anchor": "Piece 3: ledger (numbers for the rails)"
      },
      "after": [],
      "reviewers": [],
      "note": "done 2026-09-13",
      "blockedReason": null,
      "createdAt": "2026-09-13"
    },
    {
      "id": 5,
      "piece": "WebUI first screen on the Console design (piece 4 on the plan page)",
      "owner": "dewey",
      "issues": [
        1507
      ],
      "closes": [
        1507
      ],
      "state": "in-progress",
      "previousState": null,
      "required": false,
      "requiredSince": null,
      "gate": "E: all-seat interactive demonstration then Jason workday ruling; live cutover separately approved",
      "gateOwner": "jason",
      "brief": {
        "path": "docs/plans/2026-09-13_webui-session-chat.md",
        "anchor": "WebUI session chat: refined brief and delivery plan"
      },
      "after": [],
      "reviewers": [
        "filbert",
        "rocko"
      ],
      "note": "CHAT-00/01/01C published (370823b3, 28d4e98a, b023841c); CHAT-02 done: backend a5beb6d9, Console c9e771cf, live check passed 2026-09-26; CHAT-03 brief approved and pinned 2026-09-27 (BRIEF.md 1ef15ac0, rescoped to Gate E, lead decisions 30 to 33; Filbert r3 approve, Rocko blocker closed, Filbert scope check pass); source author named by Sage after queue A2 lands; CHAT-04..08 not chartered; Gate E blocked",
      "blockedReason": null,
      "createdAt": "2026-09-13"
    },
    {
      "id": 6,
      "piece": "Darkwing on point: darkwing assigns and gates filbert's work (piece 5 on the plan page)",
      "owner": "darkwing",
      "issues": [
        1511,
        1512
      ],
      "closes": [
        1511,
        1512
      ],
      "state": "done",
      "previousState": null,
      "required": false,
      "requiredSince": null,
      "gate": "F: filbert's item closes with zero human messages from Jason; code phase does not claim Gate F",
      "gateOwner": "jason",
      "brief": {
        "path": "docs/plans/2026-09-12_control-board-mvp.md",
        "anchor": "Piece 5: darkwing on point (orchestrator behaviour)"
      },
      "after": [],
      "reviewers": [
        "dewey"
      ],
      "note": "done 2026-09-27 (lead decision 29): #1511 and #1512 landed in af4203ca (pushed), closed; Gate F not passed (2 human messages in filbert's T3 thread; the first 11 days predate the T3 source); Gate G (row 9) carries the test. Filbert authored the pilot. Briefs also: 2026-09-15_relaunch-activity.md, 2026-09-14_task-attribution.md",
      "blockedReason": null,
      "createdAt": "2026-09-13"
    },
    {
      "id": 7,
      "piece": "Weekly ledger run and rails number",
      "owner": "sage",
      "issues": [],
      "closes": [],
      "state": "in-progress",
      "previousState": null,
      "required": false,
      "requiredSince": null,
      "gate": "under 10 human messages per closed issue for the week of 2026-09-13",
      "gateOwner": "jason",
      "brief": {
        "path": "packages/ledger/README.md",
        "anchor": "Ledger"
      },
      "after": [],
      "reviewers": [],
      "note": "recurring, every Monday (lead decision 27); Jason reads; 09-13..19: 47.7, 09-20..26: 33.0 human messages per closed issue",
      "blockedReason": null,
      "createdAt": "2026-09-13"
    },
    {
      "id": 8,
      "piece": "Fleet seats (`~/.mosaic`) onto `mosaic launch`",
      "owner": "unassigned",
      "issues": [],
      "closes": [],
      "state": "parked",
      "previousState": null,
      "required": false,
      "requiredSince": null,
      "gate": "Jason's call",
      "gateOwner": "jason",
      "brief": {
        "path": "docs/plans/2026-09-26_fleet-seats-onto-mosaic-launch.md",
        "anchor": "Row 8: fleet seats onto `mosaic launch` (stub brief)"
      },
      "after": [],
      "reviewers": [],
      "note": "parked by current owner direction; no `~/.mosaic` changes during internal bootstrap",
      "blockedReason": null,
      "createdAt": "2026-09-13"
    },
    {
      "id": 9,
      "piece": "Queue as data: `docs/plans/queue.json`, `mosaic queue` is the only writer",
      "owner": "darkwing",
      "issues": [
        1508
      ],
      "closes": [],
      "state": "in-progress",
      "previousState": null,
      "required": true,
      "requiredSince": "2026-09-13",
      "gate": "G: a fresh seat told only \"run `mosaic queue next` and do it\" starts its piece with zero human messages",
      "gateOwner": "jason",
      "brief": {
        "path": "docs/plans/2026-09-13_queue-as-data.md",
        "anchor": "Piece A: queue record and `mosaic queue` (QUEUE row 9)"
      },
      "after": [],
      "reviewers": [
        "filbert"
      ],
      "note": "A1 (journal, lock, CLI, verify) committed 34a72af9; A2 (migration, render, dispatch) committed with this map; Filbert approved both; genesis and hook install by Sage; Gate G also verifies row 10",
      "blockedReason": null,
      "createdAt": "2026-09-13"
    },
    {
      "id": 10,
      "piece": "Seats read the queue, not CURRENT.md (AGENTS.md cadence, seat context files)",
      "owner": "coordinator",
      "issues": [
        1508
      ],
      "closes": [],
      "state": "briefed",
      "previousState": null,
      "required": true,
      "requiredSince": "2026-09-13",
      "gate": "verified by Gate G",
      "gateOwner": "jason",
      "brief": {
        "path": "docs/plans/2026-09-13_queue-as-data.md",
        "anchor": "Piece B: seats read the queue, not CURRENT.md (QUEUE row 10)"
      },
      "after": [],
      "reviewers": [],
      "note": "AGENTS.md lines done 2026-09-13; the rest starts once genesis is committed",
      "blockedReason": null,
      "createdAt": "2026-09-13"
    },
    {
      "id": 11,
      "piece": "Brief template `docs/plans/BRIEF-TEMPLATE.md`; `queue add` refuses a missing brief",
      "owner": "darkwing",
      "issues": [
        1508
      ],
      "closes": [],
      "state": "waiting-on-jason",
      "previousState": null,
      "required": true,
      "requiredSince": "2026-09-13",
      "gate": "two briefs accepted by Jason with no scope question",
      "gateOwner": "jason",
      "brief": {
        "path": "docs/plans/2026-09-13_queue-as-data.md",
        "anchor": "Piece C: brief template (QUEUE row 11)"
      },
      "after": [],
      "reviewers": [],
      "note": "template and the `queue add` brief refusal both committed with A1 (34a72af9); the gate counts the first briefs added through the queue",
      "blockedReason": null,
      "createdAt": "2026-09-13"
    },
    {
      "id": 12,
      "piece": "Reviews as issue comments posted by `queue move ID in-review`, not files in `docs/plans/reviews/`",
      "owner": "darkwing",
      "issues": [
        1508
      ],
      "closes": [],
      "state": "briefed",
      "previousState": null,
      "required": true,
      "requiredSince": "2026-09-13",
      "gate": "one review round with no new file under reviews/",
      "gateOwner": "sage",
      "brief": {
        "path": "docs/plans/2026-09-13_queue-as-data.md",
        "anchor": "Piece D: reviews through a channel, not files (QUEUE row 12)"
      },
      "after": [],
      "reviewers": [],
      "note": "starts once genesis is committed; the live posting test needs the per-seat credential file (8.9)",
      "blockedReason": null,
      "createdAt": "2026-09-13"
    },
    {
      "id": 13,
      "piece": "Ledger \"queue\" section: issue/row/seat drift printed with the weekly number",
      "owner": "darkwing",
      "issues": [
        1508
      ],
      "closes": [
        1508
      ],
      "state": "briefed",
      "previousState": null,
      "required": true,
      "requiredSince": "2026-09-13",
      "gate": "first run Monday 2026-09-21, zero violations or every one moved same day",
      "gateOwner": "sage",
      "brief": {
        "path": "docs/plans/2026-09-13_queue-as-data.md",
        "anchor": "Piece E: ledger checks the queue (QUEUE row 13)"
      },
      "after": [],
      "reviewers": [
        "filbert"
      ],
      "note": "starts once genesis is committed; closes #1508 when done, so rows 9 to 12 close nothing; first run is the Monday after E is approved (Q7)",
      "blockedReason": null,
      "createdAt": "2026-09-13"
    },
    {
      "id": 14,
      "piece": "Discord connector pilot: Sage answers in Shared Signals (chat only, no tools, no repo writes)",
      "owner": "coordinator",
      "issues": [
        1509
      ],
      "closes": [
        1509
      ],
      "state": "done",
      "previousState": null,
      "required": false,
      "requiredSince": null,
      "gate": "H: offline suite green, eight-step live pilot with private receipts, then Jason says the reply reads as Sage",
      "gateOwner": "jason",
      "brief": {
        "path": "docs/plans/2026-09-13_discord-connector-pilot.md",
        "anchor": "Discord connector pilot: Sage on Shared Signals"
      },
      "after": [],
      "reviewers": [
        "filbert"
      ],
      "note": "done: rev-code-02 APPROVE 26170 (round 9), committed 786e379c; pilot steps 1-8 done with private receipts, Gate H passed (Jason, 2026-09-13: replies read as Sage); connector left running for MVP iteration; reviewer lane was Filbert or orch-01",
      "blockedReason": null,
      "createdAt": "2026-09-13"
    },
    {
      "id": 15,
      "piece": "Discord connector: eyes reaction on every admitted message as a read receipt (MVP iteration 1)",
      "owner": "coordinator",
      "issues": [
        1509
      ],
      "closes": [
        1509
      ],
      "state": "done",
      "previousState": null,
      "required": false,
      "requiredSince": null,
      "gate": "Jason sees the reaction on a live message",
      "gateOwner": "jason",
      "brief": {
        "path": "docs/plans/2026-09-13_discord-connector-pilot.md",
        "anchor": "11. MVP iteration, after the pilot"
      },
      "after": [],
      "reviewers": [],
      "note": "done: committed 93d6b624, live check passed 19:21 UTC (turn record receipt ok, Jason: test is successful), receipt `mvp1-read-receipt-20260913T192158Z.json` in the private evidence dir; reaction placed at admission before the engine runs, outcome in the turn record, none on drops or refusals; `scripts/test-discord.sh` 28/28 (90 node tests)",
      "blockedReason": null,
      "createdAt": "2026-09-13"
    },
    {
      "id": 16,
      "piece": "Repository-native development bootstrap: five internal agents, Darkwing coordination",
      "owner": "darkwing",
      "issues": [
        1510
      ],
      "closes": [
        1510
      ],
      "state": "waiting-on-jason",
      "previousState": null,
      "required": false,
      "requiredSince": null,
      "gate": "source approved; Researcher live response passed 26216; existing native Rocko lock preserved, no new Rocko model test; no MVP acceptance/publication",
      "gateOwner": "jason",
      "brief": {
        "path": "docs/plans/2026-09-13_internal-development-bootstrap.md",
        "anchor": "Repository-native development bootstrap"
      },
      "after": [],
      "reviewers": [
        "filbert"
      ],
      "note": "source approved by internal Filbert, exact R1 receipt 26204; six offline tests independently pass in both copies; 24 config tests and five no-effect checks are author evidence",
      "blockedReason": null,
      "createdAt": "2026-09-13"
    },
    {
      "id": 17,
      "piece": "Discord connector: systemd user service with a supervised pre-start (`recover`, exit 3 never retried) (MVP iteration 2)",
      "owner": "coordinator",
      "issues": [
        1509
      ],
      "closes": [
        1509
      ],
      "state": "done",
      "previousState": null,
      "required": false,
      "requiredSince": null,
      "gate": "the Sage connector runs under `mosaic-discord@shared-signals`, survives a kill with a clean restart, and stays down behind `discord.sh stop`",
      "gateOwner": "jason",
      "brief": {
        "path": "docs/plans/2026-09-13_discord-connector-pilot.md",
        "anchor": "11. MVP iteration, after the pilot"
      },
      "after": [],
      "reviewers": [],
      "note": "done, operator-verified by Jason 2026-09-13 (all four steps): suite 40/40 (95 node tests); Sage seat migrated 19:35 UTC, SIGKILL recovered in 16 s with the dead lock cleared, brake held (exit 3, no restart), released and READY; receipt `mvp2-service-unit-*.json` in the private evidence dir; the first cut (ExecStartPre) looped and was replaced by `run --supervised` before any traffic",
      "blockedReason": null,
      "createdAt": "2026-09-13"
    },
    {
      "id": 18,
      "piece": "Control board row for the Discord connector (MVP iteration 3): discovery from binding files, liveness from run.lock, reply refused",
      "owner": "darkwing",
      "issues": [
        1509
      ],
      "closes": [
        1509
      ],
      "state": "done",
      "previousState": null,
      "required": false,
      "requiredSince": null,
      "gate": "a Sage (discord) row on the board shows live, offline and braked correctly, and reply from the board is refused",
      "gateOwner": "jason",
      "brief": {
        "path": "docs/plans/2026-09-14_discord-board-row.md",
        "anchor": "Discord connector board row"
      },
      "after": [],
      "reviewers": [],
      "note": "done for bounded local delivery; Jason accepted visual test (parfait), R3 26257 reviewed, 322 tests and live 409 refusal verified; owner by Jason's ruling 2026-09-13, coordinator answered connector-side questions; also briefed in the pilot page section 11",
      "blockedReason": null,
      "createdAt": "2026-09-13"
    },
    {
      "id": 19,
      "piece": "Discord connector: binding reload without a restart (`reload` verb, SIGHUP, `systemctl --user reload`); channels, users, limits and guildName apply in place, identity, engine and context stay fixed, an invalid file is refused and the old binding kept (MVP iteration 4)",
      "owner": "coordinator",
      "issues": [
        1509
      ],
      "closes": [
        1509
      ],
      "state": "done",
      "previousState": null,
      "required": false,
      "requiredSince": null,
      "gate": "edit the binding, run `scripts/discord.sh reload shared-signals`, the change applies with no restart, a broken edit is refused and journaled",
      "gateOwner": "jason",
      "brief": {
        "path": "docs/plans/2026-09-13_discord-connector-pilot.md",
        "anchor": "11. MVP iteration, after the pilot"
      },
      "after": [],
      "reviewers": [],
      "note": "done: caaef941; live 00:03 UTC: reload applied Carmen's entry with no restart, unknown key refused by the CLI (exit 2), fixed key refused in the process with the binding kept, `systemctl --user reload` applied; suite 41/41 (101 node tests); receipt `mvp4-5-reload-carmen-*.json`",
      "blockedReason": null,
      "createdAt": "2026-09-13"
    },
    {
      "id": 20,
      "piece": "Discord connector: per-user channel allowlist in the binding and Carmen enrolled (all listed rooms except #sage-admin) (MVP iteration 5)",
      "owner": "coordinator",
      "issues": [
        1509
      ],
      "closes": [
        1509
      ],
      "state": "done",
      "previousState": null,
      "required": false,
      "requiredSince": null,
      "gate": "Carmen gets a reply in #general and silence in #sage-admin; Jason unchanged",
      "gateOwner": "jason",
      "brief": {
        "path": "docs/plans/2026-09-13_discord-connector-pilot.md",
        "anchor": "11. MVP iteration, after the pilot"
      },
      "after": [],
      "reviewers": [],
      "note": "done: caaef941 (`users[].channels` allowlist, `channel-not-for-user` drop); Carmen enrolled live by reload 00:03 UTC; her first message was the remaining check; #1509 closed with rows 14 to 25 done (lead decision 29)",
      "blockedReason": null,
      "createdAt": "2026-09-13"
    },
    {
      "id": 21,
      "piece": "Discord connector: read-only tools for the Discord Sage through a Mosaic pi extension confined to declared roots (MVP iteration 6)",
      "owner": "coordinator",
      "issues": [
        1509
      ],
      "closes": [
        1509
      ],
      "state": "done",
      "previousState": null,
      "required": false,
      "requiredSince": null,
      "gate": "Sage answers a question from a file under a declared root with the reads in the turn record; a read outside the roots is refused and recorded",
      "gateOwner": "jason",
      "brief": {
        "path": "docs/plans/2026-09-14_discord-readonly-tools.md",
        "anchor": "Discord Sage: read-only tools (iteration 6)"
      },
      "after": [],
      "reviewers": [],
      "note": "approved: rev-code-02 round 2 verdict 26276 (tree 43f0329b), committed; Jason ruled R1–R7 2026-09-14 (roots docs/ and agents/sage/, Carmen included); done with rows 14 to 25 when #1509 closed (lead decision 29); reviewer per Q12",
      "blockedReason": null,
      "createdAt": "2026-09-14"
    },
    {
      "id": 22,
      "piece": "Board attention status: completed replies idle, explicit human input waiting",
      "owner": "darkwing",
      "issues": [
        1503
      ],
      "closes": [
        1503
      ],
      "state": "done",
      "previousState": null,
      "required": false,
      "requiredSince": null,
      "gate": "operator accepted full targeted status sequence: explicit request waiting, Seen hides attention but preserves waiting, completion returns idle; broader MVP/cross-harness acceptance and publication separate",
      "gateOwner": "jason",
      "brief": {
        "path": "docs/plans/2026-09-13_board-attention-status.md",
        "anchor": "Board attention status correction"
      },
      "after": [],
      "reviewers": [
        "filbert"
      ],
      "note": "source approved, receipt 26248; reviewer 193 per copy, author union 213 pass; actual Researcher scan idle; operator accepted (row 1); #1503 closed (lead decision 29)",
      "blockedReason": null,
      "createdAt": "2026-09-14"
    },
    {
      "id": 23,
      "piece": "Discord connector: writes confined to the `shared-signals` root plus web fetch and search for the Discord Sage (MVP iteration 7)",
      "owner": "coordinator",
      "issues": [
        1509
      ],
      "closes": [
        1509
      ],
      "state": "done",
      "previousState": null,
      "required": false,
      "requiredSince": null,
      "gate": "Sage writes a naming shortlist into the repository from #ideas with the write and web calls in the turn record; a write outside the root is refused",
      "gateOwner": "jason",
      "brief": {
        "path": "docs/plans/2026-09-16_discord-write-and-web-tools.md",
        "anchor": "Discord Sage: writes into the strategy repository, and web research (#1509, QUEUE row 23)"
      },
      "after": [],
      "reviewers": [],
      "note": "done 2026-09-27 (Sage, lead decision 29): committed and pushed 1685deb4; live turns wrote `vault/Businesses/naming.md` with web_search and web_fetch in the turn record; the outside-root refusal rests on the offline suite, not a live turn; reviewer per Q12",
      "blockedReason": null,
      "createdAt": "2026-09-16"
    },
    {
      "id": 24,
      "piece": "Discord connector: git verbs (status, commit, pull ff-only, push) for the Discord Sage on the `shared-signals` root, seat identity through the existing credential helper (MVP iteration 8)",
      "owner": "coordinator",
      "issues": [
        1509
      ],
      "closes": [
        1509
      ],
      "state": "done",
      "previousState": null,
      "required": false,
      "requiredSince": null,
      "gate": "Sage commits and pushes a decision file from #ideas; GitHub shows Sage as author with a Requested-by trailer; no token in any record",
      "gateOwner": "jason",
      "brief": {
        "path": "docs/plans/2026-09-16_discord-git-tools.md",
        "anchor": "Discord Sage: git for the strategy repository (#1509, QUEUE row 24)"
      },
      "after": [],
      "reviewers": [],
      "note": "done 2026-09-27 (Sage, lead decision 29): committed and pushed 1949ed8d; live-configured 2026-09-18, never used from Discord; records now go through row 25 and SetSpark cutover freezes `vault/`, so first real use is the check and a failure opens a new issue; reviewer per Q12",
      "blockedReason": null,
      "createdAt": "2026-09-16"
    },
    {
      "id": 25,
      "piece": "Discord connector: SetSpark record client for the Discord Sage, fixed verbs against setspark-api, connector-verified approvals (MVP iteration 9)",
      "owner": "coordinator",
      "issues": [
        1509
      ],
      "closes": [
        1509
      ],
      "state": "done",
      "previousState": null,
      "required": false,
      "requiredSince": null,
      "gate": "Sage creates one work item from #sage-admin and the API shows it with revision 1; a proposal is approved by the Approve button and the audit row carries Sage's key id and Jason's Discord id separately; rev-code-02 approves on #1509",
      "gateOwner": "jason",
      "brief": {
        "path": "docs/plans/2026-09-20_discord-setspark-client.md",
        "anchor": "Discord Sage: SetSpark record client (#1509, QUEUE row 25)"
      },
      "after": [],
      "reviewers": [],
      "note": "done 2026-09-26: committed and pushed 43d7574d, live check passed (DEC-010, request 2, approved by button at 21:38:58Z, lead decision 19); approver rule enforced by the service since shared-signals cc74d92 (lead decisions 24 and 28); reviewer per Q12",
      "blockedReason": null,
      "createdAt": "2026-09-20"
    },
    {
      "id": 26,
      "piece": "Registry increment 3 (headless identity-env leak)",
      "owner": "unassigned",
      "issues": [],
      "closes": [],
      "state": "parked",
      "previousState": null,
      "required": false,
      "requiredSince": null,
      "gate": "Jason reopens",
      "gateOwner": "jason",
      "brief": {
        "path": "docs/plans/CURRENT.md",
        "anchor": "Completed checkpoint: #1500 increment 2 (historical)"
      },
      "after": [],
      "reviewers": [],
      "note": "#1500 closed on increment 2; Jason has not asked for 3",
      "blockedReason": null,
      "createdAt": "2026-09-13"
    },
    {
      "id": 27,
      "piece": "Auth/provider/harness registry review",
      "owner": "unassigned",
      "issues": [],
      "closes": [],
      "state": "parked",
      "previousState": null,
      "required": false,
      "requiredSince": null,
      "gate": "Jason reopens",
      "gateOwner": "jason",
      "brief": {
        "path": "docs/plans/2026-09-03_auth-provider-harness-registry.md",
        "anchor": "Harness declaration + centralized auth/provider registry"
      },
      "after": [],
      "reviewers": [],
      "note": "Paused for owner alignment",
      "blockedReason": null,
      "createdAt": "2026-09-13"
    },
    {
      "id": 28,
      "piece": "CI runners, second real adapter, push automation",
      "owner": "unassigned",
      "issues": [],
      "closes": [],
      "state": "parked",
      "previousState": null,
      "required": false,
      "requiredSince": null,
      "gate": "Jason reopens",
      "gateOwner": "jason",
      "brief": {
        "path": "docs/plans/ROADMAP.md",
        "anchor": "Explicitly deferred"
      },
      "after": [],
      "reviewers": [],
      "note": "Deferred by owner 2026-09-03",
      "blockedReason": null,
      "createdAt": "2026-09-13"
    },
    {
      "id": 29,
      "piece": "Console features outside the refined session-chat brief, including Fresh creation and model switching",
      "owner": "unassigned",
      "issues": [],
      "closes": [],
      "state": "parked",
      "previousState": null,
      "required": false,
      "requiredSince": null,
      "gate": "Jason reopens",
      "gateOwner": "jason",
      "brief": {
        "path": "docs/plans/2026-09-13_webui-session-chat.md",
        "anchor": "WebUI session chat: refined brief and delivery plan"
      },
      "after": [],
      "reviewers": [],
      "note": "Deferred by WEBUI Q1; required history/control/stop now belong to row 5, not this parked item",
      "blockedReason": null,
      "createdAt": "unknown"
    },
    {
      "id": 30,
      "piece": "Open gaps from the MVP work",
      "owner": "unassigned",
      "issues": [],
      "closes": [],
      "state": "parked",
      "previousState": null,
      "required": false,
      "requiredSince": null,
      "gate": "Jason reopens",
      "gateOwner": "jason",
      "brief": {
        "path": "docs/plans/DEFERRED.md",
        "anchor": "Open"
      },
      "after": [],
      "reviewers": [],
      "note": "Fixed only when a gate needs them",
      "blockedReason": null,
      "createdAt": "2026-09-13"
    }
  ],
  "retired": [],
  "highWater": 30
}