brief for piece 5, darkwing on point, with Gate F (#1503)

Co-Authored-By: Claude Fable 5.1 <[email protected]>
This commit is contained in:
2026-09-12 19:25:53 -05:00
co-authored by Claude Fable 5.1
parent fab40f25f8
commit f80404f541
3 changed files with 74 additions and 3 deletions
@@ -295,6 +295,69 @@ is his say-so at the end of the day, with any exception written as a line in
- No fleet sources, no comms changes, no `packages/seat` changes.
- Dewey coordinates with Darkwing before touching any board file.
## Piece 5: darkwing on point (orchestrator behaviour)
Approved in principle by Jason 2026-09-12 evening ("have darkwing on the
fleet running point"). Starts when Jason sends darkwing the start message,
planned Sunday 2026-09-13. Owner: darkwing. Purpose: move the Gate D number
(18.9 human messages per closed issue) by having a seat do the assigning.
### What it is
Mostly behaviour, with one small code change.
**Code (one commit, with tests):** `mosaic seat task` records who set the
task: a `taskSetBy` field from `MOSAIC_AGENT_NAME`, or `--by NAME`, or
"unknown"; the scanner serializes it and the page shows it next to the task
source. Closes the "set by" line in `DEFERRED.md`.
**Behaviour, darkwing's loop for every item it runs:**
1. Read `docs/plans/CURRENT.md` and `docs/plans/DEFERRED.md`. Take the next
queue item Jason has called, or one bounded Open line from DEFERRED that
touches no file another seat is on. Never take two.
2. Open the Gitea issue with the acceptance sentence and the owning seat.
3. Set the owning seat's task with `scripts/mosaic seat task <seat> "<issue
and one-line ask>"`.
4. Send the start message to the seat through `tools/tmux/agent-send.sh`
aimed at the tmux session in the seat's registration (ms-communications
rules apply; a refusal is a finding, not something to route around).
5. Receive the seat's report the same way. Verify: tests run, review by a
seat that did not write the code, acceptance sentence met.
6. Close the issue, move the DEFERRED line to Done with the commit, update
`CURRENT.md`.
7. Report to Jason only at a gate or a block, in darkwing's own session
(the board reads it). No progress narration.
**What darkwing does not do:** brief new pieces (Jason and the coordinator
do), start a queue item Jason has not called, push anywhere but `refactor`,
touch `~/.mosaic`, or message Jason for routine decisions the plan already
settles (AGENTS.md "Decide and continue").
### First assignment under this piece
Filbert: the DEFERRED line "Relaunched seat shows the old last message":
when a registration's `startedAt` is newer than the session's last activity,
the row shows "relaunched at X, no messages since" instead of the stale
activity. Board test with a fixture registration newer than the log.
Darkwing runs steps 1 to 7 for it without Jason's involvement.
### Gate F (yes/no)
Filbert's item goes from a DEFERRED line to a closed issue with Jason having
sent filbert nothing. Evidence: the ledger for 2026-09-13 shows filbert's
Human column at 0 and the issue closed; Jason's only start message that day
is the one to darkwing.
### Boundaries
- No new package, no scheduler, no daemon; darkwing runs the loop while its
session is live and stops when it is not.
- No fleet seats, no changes to `tools/tmux/agent-send.sh` or the comms
skill; a refusal from either is reported as a finding.
- `packages/seat` and `packages/control-board` change only for the
`taskSetBy` field.
## How the scanner decides state
The scanner reads the newest pi session log for each agent, plus whether