diff --git a/BUILD-LOG.md b/BUILD-LOG.md index a3eecd22..d5cc3d0e 100644 --- a/BUILD-LOG.md +++ b/BUILD-LOG.md @@ -3697,3 +3697,72 @@ Review: Dewey approved in round 1 (comment 26873, queue rev 209). Mutants D1, D2 Gate: a worktree at 7478ee2c with `build.patch` (`04234ce1…629d9`), manifest 1/1 OK. Conversation 152/152, K1, K3 and K10 isolated 3/3 three times, webui 14/14. No package or script changed between 7478ee2c and the landing commit. Receipts are in `~/sage-scratch/r46-out/`. Follow-ups, not blocking (Dewey notes a and b): `crashDuringStop` reads `.result.pid` without checking `ok`, and the 10 s timeout leaves the child running. They wait for a later conversation row. + +### 2026-10-09 — Rocko, row 45 S4 follow-up started (#1527, lead decision 72) + +Before: row 39 landed as 2f5303c1. A refused DM retried every 30 min with no limit, journal lines loaded with loose types, the N2, N4, N5 and M28 mutants survived, the notifier's reader capability had no exposure check, the host's failed-start path sent `close` to the broker without checking the channel, a 0500 journal directory gave a raw EACCES, and `packages/discord/tests/journal.test.mjs` used the fixed pid `2 ** 22 - 7` as a dead process. Claimed at queue rev 201. The packet goes in `agents/rocko/work/s4-follow-up/`. + +### 2026-10-09 — Rocko, row 45 S4 follow-up candidate ready for review (#1527, lead decision 72) + +After: the candidate packet is at `agents/rocko/work/s4-follow-up/` on base 521597bb. It covers 8 files: `build.patch` +459/−44, sha256 `4ed9ff61…3408`; `candidate-manifest.sha256` `b329fdcb…ed14`. + +- **F2:** the fifth definite refusal (4xx other than 429), counted from the journal, appends one `gave-up` line, logs once, and stops the DM. The digest marks the DM `[blocking, DM refused, not retried]`. Unknown outcomes keep retrying. +- **J4:** every complete journal line is type-checked on open, not only confirmed lines, because the F2 count reads refused lines. A bad line refuses with exit 3 and names the field. +- **Error paths:** a symlinked directory refuses and says it is a link. An unwritable directory or file is a CliError with exit 3 that names the path. +- **host.mjs:** guards both `close` sends with `broker.connected`. +- **Tests and scripts:** + - new tests for N2, N4, N5 and M28, the reader-cap exposure check (via a diagnostics_channel spy) and both guards; + - `t.after` in "a notifier that dies"; + - the bus-service.sh install message gains the mkdir 0700 line; + - every fixed pid in the discord journal test is replaced with a proven dead one; + - Sage's trackers boot test is copied to `packages/cli/tests/`. + +Gate: + +- Round 1 ran every node suite and every `test-*.sh`. Zero failures, except: + - conversation K1, K3 and K10, the row 46 exceptions; + - two test-task live-recall cases, the same on an unpatched base with Docker withheld. +- The base conversation run failed only K1 and K3, so K10 is intermittent. The patch doesn't touch that package. +- Round 2 re-ran cli after the G144 test was added: 60/0. +- Mutants: 18 of 18 killed (N2, N4, N5, M28, G150, G144, F2a–f, J4a–d, E1, E2). In round 1, G144 survived. Its new test first exposed a window: after a SIGKILL, `connected` stays true until the disconnect is processed. The window is recorded in BUILD.md, not changed; no error event was observed. + +No commits, pushes or Gitea calls were made, and no token or binding was read. + +### 2026-10-09 — Rocko, row 45 S4 follow-up round 2 candidate ready (#1527, lead decision 73) + +Before: Darkwing (comment 26872) and Filbert (comment 26880) both asked for changes. R1: a close or stop send can race a child's death and raise a raw EPIPE. B1/R2: a definite refusal backed off from 30 s, doubling, so five refusals took 7.5 minutes instead of riding out a binding typo. Lead decision 73 (a690f091) and comment 26879 ruled on both. + +After: the round 2 packet is at `agents/rocko/work/s4-follow-up/` on base d539d8d2. None of the 8 files changed upstream since 521597bb. `build.patch` is +635/−56, sha256 `c8cec070…6756`; `candidate-manifest.sha256` is `5b067a9d…0d0e`. + +- **R1:** `host.mjs` :144, :150, :184 and :188 pass a callback to `send`, so an EPIPE goes to the callback, not to an `error` event that rejects `ended()`. At :150 the raw EPIPE turned an exit-3 refusal into exit 1, which the unit restarts every 15 s. A `failSends` helper in `host.test.mjs` fails sends deterministically, and three tests cover the four sites. +- **R2:** a definite refusal waits the full 30 minutes, counted from its `at` in the journal (`refusedAt`), so a restart doesn't shorten it. Sends go at 0, 30, 60, 90 and 120 min, and the DM gives up at 2 hours. Tests poll every `POLL_MS` and restart after the second refusal. Unknown outcomes keep the doubling backoff. +- **README:** recovery after a give-up is manual (decide through the CLI; the digest lists the decision). Also the refusal wait, the digest-mark sentence (Darkwing note 4) and the new error paths. +- **Optional items:** X9 (a 0400 journal), X14 (the install `mkdir` line), a real-date `day` check (note 3), and CliErrors for a dangling directory link, a file parent and a directory journal (note 1). Declined: a type check inside `append`, because a throw there is logged as `unknown` and loops into duplicate DMs. Reasoning in BUILD.md. + +Gate (worktree at d539d8d2 with the patch, manifest 8/8): every node suite green, cli 66/0, conversation 152/0 now that row 46 has landed. Every `test-*.sh` green except test-task 26/2, the two Docker live-recall cases, as on the round 1 base. Mutants: 31 of 31 killed, the 18 from round 1 and 13 new ones (G144cb, G150cb, G184, G188, R2a–c, X9, X14, D3, N1a–c). + +Corrections: + +- My first round 2 mutant run let G184 hang the host test file for 900 s instead of failing. The cleanup `close()` waited on a `done` that never settles. I fixed the test's cleanup, restored the tree and re-ran everything from scratch. +- In my round 1 "candidate ready" entry, "Round 2 re-ran cli" meant a re-run inside round 1 after the G144 test was added, not a review round. + +No commits, pushes or Gitea calls were made, and no token or binding was read. + +### 2026-10-09 — Sage, row 45 landed: S4 follow-up refusal backoff (#1527, lead decision 73) + +Both round 2 reviews approve candidate 5b067a9d: Darkwing (comment 26884, record b13fef4c) and Filbert (comment 26886, record 9b067be1). The candidate landed as 9cdb6d82 from the canonical tree after the manifest checked 8/8. My copy of `trackers-boot.test.mjs` under agents/sage/work/s4-follow-up/ is removed (2be51cf5). + +Landing gate, worktree at b13fef4c with build.patch c8cec070 applied, suites run one at a time: + +- node: bus 67, business 60, cli 66, control-board 124, conversation 152, discord 178, ledger 78, mosaic 69, queue 148, seat 19, tasks 51, webui 14. No failures. +- scripts: test-auth 15, test-conductor 17, test-config 24, test-discord 66, test-extension-package 18, test-foundation 44, test-queue 27, test-release 14, test-task 98. No failures. + +test-task ran 98/0 without the `COMPOSE_PROJECT_NAME` override. Rocko and Filbert each saw 26/2 on the two Docker live-recall cases. My gate ran after the network cleanup (e52493f7), which is the likely difference, but I did not prove it. + +Follow-ups, none blocking: + +- A digest refused with a 403 retries every 30 minutes with no limit. Decision 72 limits DMs only, so this is allowed, but the README should say so and say what a digest refusal waits (Darkwing, Filbert). +- No test pins the digest-refusal doubling (Filbert). +- A refusal line with a future `at` holds the DM silently. A clock step back lengthens the wait (Darkwing, Filbert). Both fail safe. +- The README calls 429 "unknown" while the journal records it as refused (Filbert). +- A regular file at the directory path reports "mode 0700" where "not a directory" would be clearer (Darkwing). diff --git a/docs/SESSIONS.md b/docs/SESSIONS.md index 209a4adb..75df54f9 100644 --- a/docs/SESSIONS.md +++ b/docs/SESSIONS.md @@ -537,4 +537,5 @@ are never rewritten or removed; corrections are new entries. 2026-10-09T13:29:22Z | Dewey (T3 Claude Code, thread 84fb346c) | row 46 cohort K1/K3/K10 round 1 review on #1528 | Approve, comment 26873, rev 209 (op dewey-r46-verdict-1), candidate 92284143. Unpatched 7478ee2c 1/4 twice (K1, K3, K10 fail; K11 passes); patched K cases 4/4 three times, conversation 152/152, webui 14/14 (TMPDIR=/mnt/storage/scratch/tmp). Mutants: D1 exit-before-ready 0/4, D2 plus old dispatcher hangs to timeout (dispatcher change needed), D3 ready-before-handler survives (untestable ordering, correct by inspection), D4 handler exits 0/4. Non-blocking notes a-d in the comment. Rev 209 not committed (rev 208 is Darkwing's, recorded 1 s earlier); left for Sage. Receipts ~/dewey-scratch/r46-out/; worktree removed 2026-10-09T13:32:39Z | Sage (T3 Claude Code, thread 1ef1e4f8) | Docker networks, land row 46, rule row 45 round 1 | Mos's network ruling done: 17 unreferenced bridge networks removed, 32 to 15 (BUILD-LOG 75254319 before, e52493f7 after); no volumes, daemon.json or restart. Row 46 landed: fake-pi 2d308abd, queue rev 210 1aad1e09, #1528 closed (comment 26877); gate 152/152 and K 3/3 three times; BUILD-LOG records my probe correction. Row 45: Darkwing and Filbert both changes (26872, 26880). Lead decision 73 (a690f091): definite refusals wait the full 30-min cap counted from the journal; close send callback at host.mjs:144/150/184/188. Ruling comment 26879; round 2 handed to Rocko. Rev 211 (Filbert) left for Filbert. 2026-10-09T13:32Z | Filbert (T3 Claude Code, thread 9cb9731e) | row 45 (#1527) S4 follow-up review round 1 | changes, comment 26880, queue rev 211 (6e4af4b7); B1 five definite refusals give up in 7.5 min against decision 72's reason, R1 close-send callback folded into round 2; gate matches base, Node 24 238/238, Rocko's 18 mutants killed, 11 of my 14; record 46baf3f8 +2026-10-09T14:09:53Z | Rocko (T3 Claude Code, thread b84bb264) | row 45 (#1527) S4 follow-up round 2 candidate | Packet agents/rocko/work/s4-follow-up/ on d539d8d2: build.patch c8cec070…6756, candidate manifest 5b067a9d…0d0e, packet manifest 4ec1ea9a…2d30. R1 send callbacks at host.mjs:144/150/184/188 with deterministic EPIPE tests; R2 30-min refusal wait from the journal (decision 73); README manual recovery; X9, X14, notes 1 and 3; append type-check declined with reason. Gate green except test-task's 2 Docker cases (conversation 152/0); 31/31 mutants killed. Queue revs 212-214 uncommitted: round 2 opened, request rocko-r45-review-r2 failed (no credential), for Sage to post. No commits, pushes, Gitea calls, token or binding reads. 2026-10-09T14:26Z | Filbert (T3 Claude Code, thread 9cb9731e) | row 45 (#1527) S4 follow-up review round 2 | approve, comment 26886, queue rev 218 (5eb9fa8a), record 9b067be1; B1 resolved (permanent 403 sends at 0/30/60/90/120 min, gave-up at 120, also under a 15 s crash loop and a 401), R1 resolved (4 callbacks, each mutant fails an EPIPE test), G184 fails in 22 s (CLOSE_TIMEOUT_MS) not a hang, append type-check decline agreed (A3: 20 real DMs in 10 min), 31/31 of Rocko's mutants killed, gate green but test-task 26/2 (Docker recall), notes: future-at silent hold, README 429 wording, digest-refusal pacing untested