diff --git a/docs/plans/2026-09-13_discord-connector-pilot.md b/docs/plans/2026-09-13_discord-connector-pilot.md index 7c8ef737..11f62a00 100644 --- a/docs/plans/2026-09-13_discord-connector-pilot.md +++ b/docs/plans/2026-09-13_discord-connector-pilot.md @@ -435,3 +435,31 @@ Recorded here because they refine a ruling or fill a gap the rulings left. Not done: a binding reload without a restart (a ceiling or channel change still needs stop and start). Next: the control board row. - Live check 2026-09-13 19:35 to 19:40 UTC: Sage seat migrated to the unit; SIGKILL recovered in 16 s with the dead lock cleared; `discord.sh stop` held (start exits 3, no restart); released and READY. Iteration 2 closed. +- Control board row (iteration 3, briefed, not started). Blocked on + ownership, not on design: `packages/control-board` is darkwing's (#1503, + #1505, brief `2026-09-12_control-board-mvp.md`), and the row cannot be + produced from the Discord side. The board discovers rows only from pi + session directories (`.pi/state//sessions`, + `//.pi/agent/sessions`) and decides liveness only by a + tmux pane running `pi`; the connector's session lives at + `/sessions/discord-/` and, since iteration 2, it has + no tmux pane at all. What the board needs, all readable today with no + connector change: + - Discovery: one spec per binding file `/discord/.json` + (0600, the board reads only `name` and `seat`; never the token path), + agent ` (discord: )`, project `fleet`, + sessionsDir `/sessions/discord-`. + - Liveness: `/discord//run.lock/owner.json` with a + live owner (pid alive; start tick and boot id match, the same rule + `stop` uses; `packages/discord/src/journal.mjs` exports `ownerState`). + No lock, or a dead or unverifiable owner, is offline. STOP present is + worth a badge: braked. + - State: the pi session log gives working, waiting, error and idle as + for any seat; `turns/` and `admissions.jsonl` can add today's count + against the ceiling. + - Reply: the board must refuse `/api/reply` for such a row. There is no + pane to send to, and the connector answers only listed Discord users + by design (Q3). + Jason rules who builds it: darkwing under the board brief, or this + session with darkwing's review. Either way it is board-side work. + diff --git a/docs/plans/QUEUE.md b/docs/plans/QUEUE.md index d9013c5a..c04fb883 100644 --- a/docs/plans/QUEUE.md +++ b/docs/plans/QUEUE.md @@ -42,6 +42,7 @@ Gaps found while working go to `docs/plans/DEFERRED.md`, not here. | 14 | Discord connector pilot: Sage answers in Shared Signals (chat only, no tools, no repo writes) | coordinator; Filbert or orch-01 seat reviews | #1509 | 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 | H: offline suite green, eight-step live pilot with private receipts, then Jason says the reply reads as Sage | `2026-09-13_discord-connector-pilot.md` | | 15 | Discord connector: eyes reaction on every admitted message as a read receipt (MVP iteration 1) | coordinator | #1509 | 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; `rest.react` best effort, reaction placed at admission before the engine runs, outcome in the turn record, no reaction on drops or refusals; `scripts/test-discord.sh` 28/28 (90 node tests) | Jason sees the reaction on a live message | `2026-09-13_discord-connector-pilot.md` section 11 | | 17 | Discord connector: systemd user service with a supervised pre-start (`recover`, exit 3 never retried) (MVP iteration 2) | coordinator | #1509 | done: `scripts/test-discord.sh` 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. First cut (ExecStartPre) looped and was replaced by `run --supervised` before any traffic | the Sage connector runs under `mosaic-discord@shared-signals`, survives a kill with a clean restart, and stays down behind `discord.sh stop` | `2026-09-13_discord-connector-pilot.md` section 11 | +| 18 | Control board row for the Discord connector (MVP iteration 3): discovery from binding files, liveness from run.lock, reply refused | Jason to assign: darkwing (board owner) or coordinator with darkwing's review | #1509 | briefed; blocked on ownership, not design | a Sage (discord) row on the board shows live, offline and braked correctly, and reply from the board is refused | `2026-09-13_discord-connector-pilot.md` section 11 | Start message for row 6, sent from the board to darkwing: "Read docs/plans/QUEUE.md, then the plan page section "Piece 5: darkwing on @@ -83,3 +84,4 @@ Gate F or when blocked." - 2026-09-13 — coordinator: rows 14–15 pushed on Jason's authorization (788515dc..dc5902aa to origin/refactor). No other row changed. - 2026-09-13 — coordinator: row 17 added, in verification (Discord service unit, iteration 2 on Jason's "proceed as suggested"). No other row changed. - 2026-09-13 — coordinator: row 17 done; the Sage connector runs under systemd, kill and brake checks passed live. No other row changed. +- 2026-09-13 — coordinator: row 18 added, briefed; board-side work in darkwing's package, owner for Jason to rule. No other row changed.