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]>
879 lines
35 KiB
Markdown
879 lines
35 KiB
Markdown
# 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
|
||
|
||
```json queue-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
|
||
}
|
||
```
|