diff --git a/agents/filbert/work/handoff-2026-10-12-codex.md b/agents/filbert/work/handoff-2026-10-12-codex.md new file mode 100644 index 000000000..9dbfee514 --- /dev/null +++ b/agents/filbert/work/handoff-2026-10-12-codex.md @@ -0,0 +1,81 @@ +# Filbert handoff: Claude thread to Codex gpt-6.1-sol + +Written 2026-10-12 by Filbert on the Claude thread +(9cb9731e-a10f-4c8f-a212-c4fa1f5f4731), per lead decision 122 (Jason's Q129). +The move takes effect after row 95 lands and after my row 92 round 2 verdict +is posted, whichever comes later. Run `scripts/mosaic queue next filbert` +before trusting anything below; the queue wins over this note. + +## Open reviews (filbert is a reviewer) + +| Row | Issue | State | Mine | +| --- | --- | --- | --- | +| 92 | #1586 | in review, Darkwing building round 2 | Round 1: **changes**, comment 27951, rev 772. Dewey approved round 1. **The Claude thread reviews round 2 before the move.** | +| 13 | #1508 | in review | approved, comment 26589. Waits on others. | +| 63 | #1556 | in review | approved, comment 27846. Dewey asked for changes (27847). Review round 2 when Darkwing requests it. | +| 77 | #1571 | in review, round 2 | approved, comment 27898. Waits on the gate. | +| 88 | #1582 | briefed (Researcher builds) | Review when requested. I am the only reviewer. Items 7 and 8 must kill my row 61 survivors: `in` used for `Object.hasOwn`, and the dropped `txt()`. | + +The other rows that list me as a reviewer are briefed or parked; the queue +names them when they're ready. + +Row 92 round 1 asked for six things (details in 27951): + +1. Confined-shell table rows proving `/proc`, `/dev` and IPC are private. Today `--ro-bind /proc`, `--dev-bind /dev` and a dropped `--unshare-ipc` all survive. Host `/dev/shm` holds 0600 PostgreSQL segments. +2. A row running pi in the sandbox. The dropped `node_modules` bind survives. +3. A launcher test where a runner is SIGKILLed from the host and the end reason is `killed`. `resolve({ code, signal })` survives. +4. A pi launch with no credential succeeds. +5. The cli README refusal row adds `ANTHROPIC_AUTH_TOKEN` with `ANTHROPIC_BASE_URL`. +6. A README sentence: pi logs in only through `ENV_ALLOW`, since `~/.pi/agent` is gone. + +My mutant script is `~/filbert-scratch/r92/mutants.py `, with +13 edits. Round 2 should kill everything except `no /etc`, `0755` and +`recover start time`, which are notes. + +## Row 95 (#1589), mine as builder + +Darkwing approved round 1 (comment 27953, rev 773), naming manifest +`246c0557…`. There is no round 2 (Sage, 2026-10-12). Sage is running the gate +rerun and lands it. Mos is notified before landing, and it goes live after +the Console restart Mos approves. + +**Follow-up after landing** (Sage agreed), for Darkwing's notes: + +- N1: `browser-edge.test.mjs` line 29 awaits `boardRequested` with no bound. A toggle regression stalls the file for 120 s instead of failing it. Bound it. +- N2: test 2's 600 ms settle never reaches the 10 s poll, so "no further request on the poll" claims more than it tests. That is why mutants 13 and 27 survive. +- N3: the README test paragraph should also list the conversations, seen and queue redirects. + +The packet is `agents/filbert/work/queue-95/`. My scratch worktree is +`~/filbert-scratch/r95w`. + +## Row 93 (#1587), mine to build on Codex + +- Brief: `docs/plans/2026-10-12_pm-test-fixes.md`, section "A review loop through the bus" (blob ae867dfa). +- It needs row 91 done (Darkwing's project checkout per workspace, which itself waits on row 92) and row 95 done. Not started; nothing is drafted. +- Reviewers are Darkwing and Dewey, both required. Gate owner is Sage. +- Scope: a bare working repository per business and project, under the data root, that only the host writes. Plus four verbs and tools: + - `push_working`: fast-forward only, to `work/`; + - `request_review`: the commit must be in the working repository; + - `fetch_review`: into the reviewer's clone as a remote-tracking ref; + - `review_verdict`: approve or changes, citing the request event. + + The role paragraphs and the session text name the steps. The packet argues whether `task_close` checks the verdict citation. +- Read the brief's full file list and its out-of-scope section before starting. The host runs git for a session, so this crosses row 92's sandbox; build on whatever row 92 lands. + +## Working rules I follow (not all in AGENTS.md) + +- Gitea writes: `MOSAIC_GITEA_CREDENTIAL_FILE=$HOME/.mosaic/fleet/agents/filbert/secrets/gitea-mosaicstack-filbert.token`, with `scripts/gitea-api.sh` run from the repo. Check that `GET user` returns `filbert` first. Never print the token. +- Verdicts: + 1. Post the comment, then read it back and compare the body to the file. + 2. Record it: `scripts/mosaic queue review record --verdict approve|changes --comment ID --candidate --op filbert--review- --by filbert`. + 3. Commit the rev with `scripts/queue-commit.sh -m ...`, naming other seats' swept revs. + 4. Only after it says committed, write the SESSIONS line. +- I commit only my own records, packets and queue revs. Sage commits candidates and pushes. I push nothing. +- Gates: + - Use a detached `git worktree` at the base, apply the patch with `git apply --index`, symlink `node_modules`, then run `sha256sum -c` on the manifest and check BASE..HEAD for drift. + - Run suites sequentially with output teed, `TMPDIR=~/filbert-scratch/tmp` and `DOCKER_HOST=unix:///nonexistent.sock`. +- Mutant runs: + - Each run gets `start_new_session=True`, with `killpg` on timeout. + - Afterwards, kill my leftover node or chromium processes (cwd under `~/filbert-scratch`) by PID. Other seats wait for a quiet machine. +- To remove a worktree: `rm -f` its `node_modules` symlink, then `git worktree remove --force`. +- Never start, stop or restart the Console or the bus unit. No writes under `~/.mosaic`. Agent seats never run the human verbs against a real bus.