214 lines
13 KiB
Markdown
214 lines
13 KiB
Markdown
# 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
|
|
|
|
4. **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.
|
|
5. **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.
|
|
6. **Gate E "all seats"** means every seat that registers on the board. T3
|
|
threads are listed as not covered until they carry identity.
|
|
7. **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
|
|
|
|
8. **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.
|
|
9. **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.
|
|
10. **Board guard live.** Rocko approved Dewey's Host and Origin guard
|
|
(de9ff942), and Sage committed it as d1629d61 after the eight suites,
|
|
control-board (121/121) and webui (9/9) passed on an index export. It
|
|
was pushed. The board restarted at 20:40:43Z: old PID 3977979 stopped
|
|
on SIGTERM, new PID 288909, log
|
|
`/tmp/control-board-20260926T204043Z.log`, the same flags and port 7331,
|
|
44 sessions before and after. Live checks: a foreign Host on
|
|
`/api/board` returns 403, a foreign Origin on `POST /api/reply` returns
|
|
403, and the WebUI proxy's `/api/board` returns 200.
|
|
11. **Row 25 was never live.** Before 20:56Z `discord.sh check` passed with the
|
|
new `setspark` key, but it listed no SetSpark verbs. `resolveToolRoots`
|
|
dropped `tools.setspark`, so pi never got the record verbs and the
|
|
connector never built its SetSpark client. Passing the validated object
|
|
through as-is would also fail, because the extension refuses its
|
|
`maxResponseBytes` as an unknown key. Sage wrote the fix with a test that
|
|
fails first (binding to extension round trip). The connector's client now
|
|
uses the validated object, which keeps the response cap. The README now
|
|
marks `principal` as required. The eight suites passed on an index export,
|
|
and the check lists the eight verbs. Rocko reviews the staged diff
|
|
(`agents/sage/work/row25-setspark-fix.diff`, 4dec1898…). The restart
|
|
waits on that verdict and the commit.
|
|
12. **Gate F brief (Darkwing, 08959a05…).** Sage ruled on the three questions
|
|
Darkwing had marked for Jason:
|
|
- Gate F is on by default. A missing DB exits 1 and names `--no-t3`.
|
|
- The `t3:unmapped` row stays.
|
|
- The 14 old Discord Bot headers stay as recorded and appear only in the
|
|
JSON diagnostic.
|
|
|
|
The 6a uppercase-class fix rides in Gate F. Filbert reviews the brief,
|
|
and no code starts before the verdict.
|
|
13. **Discord restarted with row 25 live.** Rocko approved the fix, which is
|
|
committed and pushed as 6c06a6f3. The restart ran at 20:58:03Z: PID
|
|
890894 was replaced by 499064, the gateway was READY at 20:58:04Z, and pi
|
|
has the SetSpark verbs. Jason's live check comes next.
|
|
14. **Gate F brief approved.** Filbert approved R2 (e8300cb6…); his review is
|
|
at bb02d8d3…. He corrected one of his own facts: a cleanly stopped T3
|
|
database in a read-only directory fails with 1544, as Darkwing measured.
|
|
Either way it exits 1. The three nits ride in the build. The JSON records
|
|
which database file it read, so a fixture can't pass for Gate F evidence.
|
|
Darkwing builds. Filbert reviews the code, and Sage commits.
|
|
15. **Queue as data (#1508) plan approved.** Rocko approved round 6
|
|
(282fabbb…, report 80cde839…). One ordering note goes to the builder:
|
|
capture H before the step-1 canary that reads from it. Build order is
|
|
the plan's section 1. Darkwing builds Gate F first, because row 6 closes
|
|
on it, then Piece A. Sage splits A into A1 (journal, lock, CLI, verify)
|
|
and A2 (migration, render, dispatch), each with its own Filbert review, so
|
|
each round stays small. C ships inside A1. Gate F's code goes ahead on
|
|
Filbert's verdict, without a separate look from Jason. The design calls
|
|
are the lead's (item 12).
|
|
16. **Row 25 approvals, second fix and restart.** Jason's live check found no
|
|
Approve button. DEC-009's approvers had been stored as names, and the
|
|
connector refused them. Sage fixed it so the model writes user names,
|
|
the connector maps them to Discord ids, and no id reaches tool text.
|
|
Rocko approved R3, and the fix is 20ea5a0b, pushed. Sage restarted the
|
|
connector at 21:30:21Z, the second restart today. It is a local dev
|
|
service, and Jason was waiting on the check. Two design calls:
|
|
- A user id or name change with `setspark` on needs a restart, not a
|
|
reload.
|
|
- Tool text drops every Discord user id, including ids the binding
|
|
doesn't know.
|
|
The SetSpark service accepting free-text approvers is reported to
|
|
Jason as a shared-signals gap. Mosaic doesn't change it.
|
|
17. **CHAT-02 backend committed and live.** Filbert approved the code at R2
|
|
(3b14d66c…), and Darkwing approved the route changes at R2 (b9d92003…).
|
|
Sage committed the nine pinned files with the packet, the evidence and
|
|
the three reviews as a5beb6d9. The eight suites, conversation and
|
|
control-board 153/153, and webui 9/9 passed on an index export. It was
|
|
pushed. The board restarted at 21:36:29Z: PID 288909 stopped on SIGTERM,
|
|
and the new PID is 1042473. The log is
|
|
`/tmp/control-board-20260926T213629Z.log`, with the same flags and port
|
|
7331, and 44 sessions before and after. Live checks:
|
|
- `/api/conversations` returns 200 with 19 entries (18 Pi available, 1
|
|
Claude unsupported, as D2 rules).
|
|
- One conversation returns 200 with a 10-entry page.
|
|
- An extra parameter returns 400, a foreign Host or Origin returns 403,
|
|
and POST returns 405.
|
|
The two nonblocking notes from Darkwing (the scan test checks keys, not
|
|
status values, and it reads a fixed list of three files) go to Dewey as
|
|
optional. The Console and its WebUI proxy allowlist are next.
|