Control board piece 2: reply-from-board (Gate C) #1505

Closed
opened 2026-09-12 16:18:26 +00:00 by jason.woltje · 2 comments
Owner

Piece 2 of the control board MVP, approved by Jason 2026-09-12 after Gate B. Brief: docs/plans/2026-09-12_control-board-mvp.md, section "Piece 2: reply-from-board" (commit a62ca190). Tracking issue #1503.

What: a one-line text box and Send in the detail of each registered, non-stale row. POST /api/reply {agent, text} runs tools/tmux/agent-send.sh -s <session from the registration> -S "<host>:control-board" -m <text> (plus -L from the registration's tmux socket when set) and returns exit code, stdout and stderr. The page shows delivered with the time or failed with the stderr.

Never: raw send-keys, a queue, retries, history, broadcast, more than one seat per request. No change to packages/seat, the registration record, or agent-send.sh; if the tool refuses, the refusal is the finding.

Gate C: Jason answers a waiting seat from the board, and within one scan the row is working and its task or last message reflects the reply.

Tests: fake agent-send on PATH capturing argv (-s, -S, -L, text); refusals with exit codes (unknown row, empty text, no registration, stale registration, tool failure with stderr); page shows the box only on registered live rows and a failure receipt shows stderr.

Piece 2 of the control board MVP, approved by Jason 2026-09-12 after Gate B. Brief: `docs/plans/2026-09-12_control-board-mvp.md`, section "Piece 2: reply-from-board" (commit a62ca190). Tracking issue #1503. **What**: a one-line text box and Send in the detail of each registered, non-stale row. `POST /api/reply {agent, text}` runs `tools/tmux/agent-send.sh -s <session from the registration> -S "<host>:control-board" -m <text>` (plus `-L` from the registration's tmux socket when set) and returns exit code, stdout and stderr. The page shows `delivered` with the time or `failed` with the stderr. **Never**: raw send-keys, a queue, retries, history, broadcast, more than one seat per request. No change to `packages/seat`, the registration record, or `agent-send.sh`; if the tool refuses, the refusal is the finding. **Gate C**: Jason answers a `waiting` seat from the board, and within one scan the row is `working` and its task or last message reflects the reply. **Tests**: fake agent-send on PATH capturing argv (`-s`, `-S`, `-L`, text); refusals with exit codes (unknown row, empty text, no registration, stale registration, tool failure with stderr); page shows the box only on registered live rows and a failure receipt shows stderr.
Author
Owner

Piece 2 landed on refactor at 867619dc (tracks #1503).

  • POST /api/reply {agent, text} runs tools/tmux/agent-send.sh -s <session> -S <host>:control-board [-L <socket>] -m <text> once for one seat and returns delivered, exit code, stdout, stderr. Refusals: 400 bad/empty/long text, 404 unknown row, 409 no or stale registration or no tmux session, 500 tool not startable. Non-zero tool exits are reported with stderr, never retried.
  • Page: reply box and Send in the detail of registered live rows; receipt delivered <time> to tmux <session> or failed (exit N): <stderr>; other rows say "reply needs a registered seat". Drafts and receipts survive the refresh.
  • Every message ends with a fixed trailer telling the seat to answer in its own session and not to agent-send to control-board (refinement after the first Gate C exchange, "pizza?", which was delivered and read back within one scan; the seat's send-back was refused as expected since the board has no pane).
  • Live check on a scratch tmux session through the real agent-send.sh: delivered, then a failure receipt with the tool's stderr. Board suite 98/98 (was 91). Sonnet review: one comment defect fixed before commit.

Next: Jason confirms Gate C on this build (restart the board on 7331 first).

Piece 2 landed on `refactor` at 867619dc (tracks #1503). - `POST /api/reply {agent, text}` runs `tools/tmux/agent-send.sh -s <session> -S <host>:control-board [-L <socket>] -m <text>` once for one seat and returns `delivered`, exit code, stdout, stderr. Refusals: 400 bad/empty/long text, 404 unknown row, 409 no or stale registration or no tmux session, 500 tool not startable. Non-zero tool exits are reported with stderr, never retried. - Page: reply box and Send in the detail of registered live rows; receipt `delivered <time> to tmux <session>` or `failed (exit N): <stderr>`; other rows say "reply needs a registered seat". Drafts and receipts survive the refresh. - Every message ends with a fixed trailer telling the seat to answer in its own session and not to agent-send to control-board (refinement after the first Gate C exchange, "pizza?", which was delivered and read back within one scan; the seat's send-back was refused as expected since the board has no pane). - Live check on a scratch tmux session through the real agent-send.sh: delivered, then a failure receipt with the tool's stderr. Board suite 98/98 (was 91). Sonnet review: one comment defect fixed before commit. Next: Jason confirms Gate C on this build (restart the board on 7331 first).
Author
Owner

Gate C passed on 867619dc, logged by Jason at 4f830680: "pizza?" sent from the board to filbert (gpt-6-astra) arrived with the trailer, the seat answered "Yes. Pepperoni?" in its own session with no send attempt, and the row showed the answer on the next scan. CURRENT.md moved on at c90ce3a8. Closing; piece 2 is done. Tracks #1503.

Gate C passed on 867619dc, logged by Jason at 4f830680: "pizza?" sent from the board to filbert (gpt-6-astra) arrived with the trailer, the seat answered "Yes. Pepperoni?" in its own session with no send attempt, and the row showed the answer on the next scan. CURRENT.md moved on at c90ce3a8. Closing; piece 2 is done. Tracks #1503.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: mosaicstack/stack#1505