Check pi liveness per tmux pane and add "Seen" marks to the control board (#1503)

First step-3 refinement from Jason's daily use. Liveness now lists the
panes of the agent's tmux session and counts it alive only if a pane runs
pi, so killed pi sessions whose tmux session still exists show offline
instead of waiting. A "Seen" button on waiting and error rows stores the
row's lastActivity in <dataRoot>/board/seen.json (clicks only, never
rewritten by a scan, fail closed if corrupt) and drops the row from
"Waiting on you" until the agent writes anything newer; "Unsee" reverses
it. New POST /api/seen route: JSON only, 4 KB limit, 400 on bad input.

Tests: control-board 63/63 (30 new), registry 69/69. Review APPROVED;
receipt docs/plans/reviews/2026-09-12_control-board-step3-seen-marks.md.

Co-Authored-By: Claude Fable 5.1 <[email protected]>
This commit is contained in:
2026-09-12 08:24:49 -05:00
co-authored by Claude Fable 5.1
parent ebedd1281e
commit 88d21defde
12 changed files with 777 additions and 21 deletions
+22
View File
@@ -1965,3 +1965,25 @@ non-loopback host (now always rejects); expanded rows first closed on every
refresh (now persisted); the browser reported a favicon 404 (now a 204 route).
The independent reviewer had no browser, so the live check was done by the
coordinator and is recorded as such. Next: step 3, Jason uses the page daily.
## 2026-09-12 — Control board step 3, first refinement (#1503)
Before: after killing the darkwing and dewey pi sessions, Jason still saw
them under "Waiting on you", and most other waiting rows were completion
reports rather than questions for him.
After: liveness now lists the panes of the agent's tmux session and counts
the agent alive only if a pane runs `pi`; both killed agents show offline.
A "Seen" button on waiting and error rows stores the row's last-activity
timestamp in `<dataRoot>/board/seen.json` (written only by clicks, never by
a scan, fail closed if corrupt) and drops the row from "Waiting on you"
until the agent writes anything newer; "Unsee" reverses it. New
`POST /api/seen` route (JSON only, 4 KB limit). Suites: control-board 63/63,
registry 69/69. Live: waiting on Jason 18 → 16, Seen/Unsee round trip
verified in Chrome. Independent review APPROVED; its one finding (README
quoted an incomplete tmux command) is fixed. Receipt:
`docs/plans/reviews/2026-09-12_control-board-step3-seen-marks.md`.
Still open by design: "waiting" cannot tell a question from a completion
report; a wording hint or an agent-side "Waiting on:" convention are the
next candidates if the Seen button is not enough. Next: Jason keeps using it.