Add mosaic launch <seat> with seat registration for the control board (#1504)

New package packages/seat and wrapper scripts/mosaic. `launch <seat>` writes
<dataRoot>/seats/<layout>/<seat>/registration.json and then execs the seat's
launch.sh unchanged; `seat task <seat> <text>` edits the task only. The board
reads registrations, matches by sessions directory, and lets a registered
task, project or workspace override the derived value with a source tag.
The four repository launch scripts register themselves unless already
registered or run with --check. Fleet launchers untouched; one-liner on the
plan page.

Review found the record path keyed by seat name alone (repo and fleet
"darkwing" would collide); fixed by keying on layout. Also: the Pi pin
refusal now names installed and required versions.

Tests: seat 15, control-board 89, launch scripts 5, registry 69, config 24.

Co-Authored-By: Claude Fable 5.1 <[email protected]>
This commit is contained in:
2026-09-12 10:56:17 -05:00
co-authored by Claude Fable 5.1
parent 01d9a19612
commit 69f99323c7
25 changed files with 1766 additions and 46 deletions
+21 -7
View File
@@ -22,13 +22,27 @@ First step-3 refinement landed 2026-09-12: liveness follows the tmux pane
"Waiting on you" until the agent writes again
(`docs/plans/reviews/2026-09-12_control-board-step3-seen-marks.md`).
Next action: step 3 of #1503 — daily use. Jason opens the page while he works
and reports what is wrong, missing or confusing; each report becomes a small
fix on this package with a test, committed and pushed to `refactor`. Close
#1503 when Jason says the page answers "who is waiting on me" without him
opening a terminal. Out of scope until he asks: auth, hooks/plugins, comms,
memory, launcher changes, non-Pi harnesses, new root files. The registry line
(increment 3, headless identity-env leak) stays parked; #1500 is closed.
Gate A (task, active project, workspace per row) passed on 2026-09-12 and
Jason's go on the professor session's brief opened #1504: seat registration.
`scripts/mosaic launch <seat>` runs a seat's launch script unchanged and
leaves one record at `<dataRoot>/seats/<layout>/<seat>/registration.json` that the
board reads instead of guessing; `scripts/mosaic seat task <seat> <text>`
changes the task. The four repository launch scripts register themselves.
Package: `packages/seat`. Fleet launchers under `~/.mosaic` are not edited
from this repository; the one-line change for them is in the plan page.
Next action: step 3 of #1503 continues — daily use with #1504 landed. Jason
launches his seats through the new path (or the launch scripts, which now
register), sets tasks with `seat task`, and reports what is wrong, missing
or confusing; each report becomes a small fix with a test, committed and
pushed to `refactor`. The sequence Jason set stays: seat registration (done),
then reply-from-board, then the WebUI on Dewey's Console design absorbs the
board as its first screen. Close #1503 when Jason says the page answers "who
is waiting on me" without him opening a terminal. Out of scope until he
asks: auth or provider registry, roster schema changes, hooks/plugins, comms,
memory, multiple sessions per seat, stopping seats, new root files. The
registry line (increment 3, headless identity-env leak) stays parked; #1500
is closed.
## Completed checkpoint: #1500 increment 2 (historical)