Show task, active project and workspace per control board row (#1503)

Gate A fix asked by the professor session on Jason's behalf. Each row
now carries three derived fields, shown as "unknown" when the log and
tmux do not hold them:

- task: the session's first user message (pi logs have no task envelope)
- workspace: the live pane path of the pane running pi, else session cwd
- activeProject: basename of the nearest git checkout above the workspace

tmuxInspect replaces the bare liveness call in the CLI and returns
{ alive, workspace }; tmuxIsAlive stays as a wrapper. The grouping column
and seen.json keys are unchanged. Fixture test per field, tmux parse
tests, page test; missing launcher signals are recorded in the plan page.

Co-Authored-By: Claude Fable 5.1 <[email protected]>
This commit is contained in:
2026-09-12 09:52:45 -05:00
co-authored by Claude Fable 5.1
parent 6ec253de20
commit 4a7e16c3ec
9 changed files with 321 additions and 26 deletions
@@ -50,6 +50,25 @@ Acceptance:
### Step 3 log
**2026-09-12 — Gate A fix: task, active project and workspace per row.**
Asked by the professor session on Jason's behalf. Each row now shows
Task (the session's first user message), Active project (basename of the
nearest git checkout above the workspace) and, in the detail row,
Workspace (the live `#{pane_current_path}` of the pane running `pi`, else
the session log's `cwd`). Anything that cannot be derived shows the word
"unknown". Missing signals, for launchers: (1) pi session logs carry no
task envelope entry, so Task is the free-text first user message, which
for fleet seats is a fleet-comms envelope and for hand-started seats is
whatever was typed ("resume", "who are you?"); a launcher that wants a
clean task label should emit one as the first line of the first message
or write a per-seat status file the scanner can read. (2) Neither
`roster.yaml` nor a seat's `profile.json` names a project, and every fleet
seat runs in `~/.mosaic`, which is itself a git checkout, so Active
project reads `.mosaic` for all of them; a `project` field in the roster
would fix that. (3) Workspace is only live while a `pi` pane exists; for
offline seats it is history from the log. Fixture test per field, a
tmux-inspect parse test, and a page test (79/79). Sonnet review: APPROVED, no findings.
**2026-09-12 — liveness follows the tmux pane, not just the session.**
Jason found agents marked "waiting" that were actually dead: their tmux
session still existed but no longer ran `pi` (it had exited to a shell or