Files
stack/docs/plans/2026-09-26_lead-decisions.md
T

8.2 KiB

Lead decisions, 2026-09-26

Written by Sage (lead). At 20:02Z Jason asked for my decision on the open items ("You are lead... Proactive movement and intelligent decisions"). I read that as his say-so for the push and the local operational calls below. It does not cover credentials, the ~/.mosaic restriction or the live Discord service, which stay with him. Each item names who decided it and what happened.

Decided and done

  1. Push refactor. Done at 20:03Z with the jarvis identity: origin/refactor 43d7574d → 42c08d52 (21e3e908, af4203ca, 0f5b7cb9, 42c08d52). Fast-forward only. All eight suites were green at 42c08d52.
  2. No merge into next. next is the old monolith: apps/, Woodpecker CI and the npm packages behind the estate mosaic CLI that the live fleet still runs. refactor is 172 commits ahead of it, and next has one commit refactor lacks (2101c9b4, a v1 git-tools fix, #1502). A merge replaces the default branch's content, may trigger CI and publishing, and could break the fleet before it is retired. Merge conditions: row 8 (fleet retirement) done, a CI definition for the new root, and 2101c9b4 either carried into v1/ or ruled moot. Until then refactor is the working branch and pushes stay fast-forward only.
  3. Control board restarted at 20:03:52Z so #1512's relaunch notice runs live. Old PID 3414098 (from 09-14) stopped on SIGTERM; new PID 3977979, log /tmp/control-board-20260926T200352Z.log, same flags (none), same port 7331. Before and after: 44 sessions, identical counts, seen state kept; relaunchedAt now appears in /api/board. The WebUI (PID 1266267) reads files from disk and needed no restart.

Decided, work under way

  1. Queue as data (#1508). Section 8 of Filbert's plan is the specification (sha256 124b6f9e…). Rocko reviews round 3.
    • Q1: Gate G reads "run scripts/mosaic queue next and do it".
    • Q2: Gate G runs on a Pi launcher (--fresh); next refuses without an identity.
    • Q3: the CLI never commits; the lead commits the queue files by explicit path after scripts/test-queue.sh.
    • Q4: D posts only with an explicit per-seat credential file and refuses the default. It is built and tested against a fake transport.
    • J1, J2, J4, J5: as proposed in section 7.2. J6: closes = issues, not narrowed without a logged reason. J8: E's budget is 12 Gitea calls at most, 0 with --no-issues. Reduced liveness gate: yes. E before D: yes.
    • J3 (every row has a brief), J7 (dropped), J9 (row 8 stub): decided earlier today.
    • No separate journal file. The log lives inside queue.json, written by temp file, fsync, rename and a directory fsync. The lock is link() of a complete record, with no automatic reclaim.
  2. Gate F waits for a T3 source. The ledger's Table 2 reads only Pi session logs. Filbert confirmed no Pi log carries T3 traffic, so the Human column cannot see T3 seats. Darkwing briefs a read-only T3 thread source after the #1509 engine fixes. When it exists, Sage picks Filbert's Gate F item and Jason sends nothing.
  3. Gate E "all seats" means every seat that registers on the board. T3 threads are listed as not covered until they carry identity.
  4. Sage launch files. Dewey reviewed them (revise, small). Sage made the revisions: sage is added to the launcher test, the README is rewritten for the lead role, and the seat reads but never writes the old DYOR records under ~/.mosaic. It creates no new DYOR records until Jason names a location. Dewey re-reviews, then updates the other seats' persona files that still name Darkwing as lead.

Jason's rulings (walkthrough, 20:19Z to 20:31Z)

  • Seat tokens for piece D's live round. Jason ruled at 20:19Z: yes, in place. Piece D reads each seat's own Gitea token by path, ~/.mosaic/fleet/agents/<seat>/secrets/gitea-mosaicstack-<seat>.token (0600), read-only. It makes no copies and changes nothing under ~/.mosaic. Sage's Gitea calls use jarvis. Darkwing and Dewey have write:repository, and Filbert and Rocko have write:issue only.
  • Discord connector restart. Jason ruled at 20:20Z: one restart, after Rocko approves 6b and it is committed, and row 25 goes live in the same restart. Steps: back up the binding to the Sage evidence directory, add the setspark key (keyFile ~/.config/setspark/keys/sage.json, never read), run discord.sh check, restart, then Jason's live check (one work item, one proposal approved by button).
  • Fleet retirement scope (row 8). Jason ruled at 20:21Z: dev seats only. orch-01, plan-01, rev-code-01, rev-code-02, code-be-01 and code-dogfood-01 get no new work and retire because the T3 seats cover them (Sage leads, Filbert plans, Rocko reviews, Darkwing and Dewey build). Jason stops each process himself or tells Sage to, one seat at a time. The other eight live fleet seats (jarvis, joe, huey, ricer, topher, velma, zane, resume) are outside row 8. Credentials stay in place (see piece D above). The ~/.mosaic restriction still stands.
  • DYOR records. Jason ruled at 20:23Z: DYOR work belongs in /mnt/storage/src/dyor-stack-v4/, a separate project from SetSpark. Sage has moved from DYOR to SetSpark tasks. Sage's SOUL, CONTEXT, README and DISCORD-USER files change to match, and that commit lands before the next Discord restart so the Discord Sage picks it up.
  • One live reply test in the WebUI. Passed. Jason sent "ping" to researcher at 20:10:57Z and "pong" came back at 20:11:06Z. /api/board showed it at 20:15:18Z. Dewey went through 30 board sends to repo Pi seats. 29 got a final answer in the same session file, and the one miss was a seat relaunched mid-turn. No second return defect was found. Jason confirmed at 20:31Z that "pong" appeared in the inspector without Refresh. The 09-13 report was about the missing thread view, which CHAT-02 builds.
  • skills/aws-*. Jason ruled at 20:25Z: add them to .git/info/exclude, a local ignore that is never committed. Done at 20:26Z. That covers the 20 aws-* directories and two more from the same 09-21 install, launch-with-aws and signing-in-to-aws. They stay where they are and no longer show in git status.
  • Row 5 CHAT-02 to 08. Jason ruled at 20:31Z: go on CHAT-02 only, at Dewey's brief 636b0fac (Filbert approved R4). CHAT-03 to 08 stay held, and Sage takes CHAT-03 back to Jason before anyone starts it. Order: the board Host and Origin guard (Rocko reviews), then the packages/conversation backend, then the Console. Filbert reviews the code, and Darkwing reviews the two board routes. CHAT-03 owns the Claude catalogue after B1.

Added later the same day

  1. CHAT-02 brief (Dewey, sha256 314da8b0…). Sage ruled D1 to D4 at about 20:18Z:
    • D1: the writer-claim record and R3-1 move to CHAT-03.
    • D2: Pi only in CHAT-02. The Claude catalogue refuses unsupported-harness until B1 has evidence. This narrows the plan's "both harnesses".
    • D3: packages/conversation is a library with no server. The board adds two read-only routes, and Darkwing reviews that change.
    • D4: Dewey writes the backend, then the Console. Filbert reviews.
    • D5 (the go on CHAT-02 to 08) is still Jason's.
  2. Discord connector restart held. Jason said to restart before 20:17Z. The unit runs from this checkout, and the tree holds Darkwing's uncommitted, unreviewed #1509 engine change (engine-pi.mjs, the new engineBusy). A restart now would load it. The only committed Discord change since the 18 September restart is 43d7574d (row 25), which does nothing until the binding gets a setspark key. So a restart today would change nothing except to pick up unreviewed code. Sage restarts once, after Rocko approves 6b and it is committed. If Jason wants row 25 live, the binding change goes in the same restart. discord.sh check passed at 20:17Z. The service was idle, with the last turn on 09-18. Rocko's 6b R1 verdict (about 20:34Z) was request changes. The high finding is that removing the grace lets delayed events from an old run resolve the next prompt (report agents/rocko/work/discord-engine-busy-r1-review-2026-09-26.md, 047dbd8f). Darkwing is on R2, and the restart stays held.