From 1c7249581518e070d8c5072ee7c6ac7c78d3fc4c Mon Sep 17 00:00:00 2001 From: Jason Woltje Date: Sun, 4 Oct 2026 01:26:07 -0500 Subject: [PATCH] docs(records): row 33 landed, cold-start failure reopened (#1508) Co-Authored-By: Claude Opus 5.5 --- BUILD-LOG.md | 29 +++++++ .../work/queue-33-review-r1-2026-10-04.md | 78 +++++++++++++++++++ docs/SESSIONS.md | 4 + docs/plans/DEFERRED.md | 15 +++- 4 files changed, 125 insertions(+), 1 deletion(-) create mode 100644 agents/darkwing/work/queue-33-review-r1-2026-10-04.md diff --git a/BUILD-LOG.md b/BUILD-LOG.md index 0453ccd2..dcc29511 100644 --- a/BUILD-LOG.md +++ b/BUILD-LOG.md @@ -3449,3 +3449,32 @@ of the log under the new code was clean. Follow-ups went to DEFERRED: genesis doesn't check the rule, and the assign refusal's wording. + +## 2026-10-04: Row 33, queue follow-ups (#1508, Filbert) + +Sage briefed row 33 from DEFERRED at 06:15Z (brief +`docs/plans/2026-10-04_queue-follow-ups.md`) for Filbert, with Darkwing +reviewing: +- genesis refuses a map row whose owner is one of its reviewers; +- the assign refusal's wording; +- queue-commit says "HEAD moved since H was recorded" instead of blaming + the guard; +- every accepted date and time must format back to itself; +- 20 cold runs to find the cold-start failure. + +Filbert's manifest fe7da3ef lists 10 paths. Darkwing approved round 1 +(#1508 comment 26651), with two notes: a genesis case with the owner +listed second, and that the cold runs ran on an idle machine. Sage +checked the manifest 10/10 and committed it as 6fb50cc0, which +`verify-commit` matched. Row 33 done at rev 49. + +Index export: config 24, task 90, foundation 44, conductor 17, release 14, +auth 15, discord 64, extension-package 18, queue 27, ledger 78. The queue +node tests gave 147 passed, 1 failed on the first run, then 148/148 on all +ten reruns, with and without load and on fresh exports. That failure is +the old cold-start one, not row 33's change; it predates the row +(Darkwing saw it on the D candidate). It isn't a regression, so the +approved candidate went in. The DEFERRED item is reopened as a new entry. +Correction: Sage's own recipe threw the first run's output away, so the +failing test's name is lost a second time. The recipe now keeps that +output. diff --git a/agents/darkwing/work/queue-33-review-r1-2026-10-04.md b/agents/darkwing/work/queue-33-review-r1-2026-10-04.md new file mode 100644 index 00000000..1400936c --- /dev/null +++ b/agents/darkwing/work/queue-33-review-r1-2026-10-04.md @@ -0,0 +1,78 @@ +# Queue row 33, round 1 review (#1508) + +Darkwing, 2026-10-04. Request: #1508 comment 26648. Brief: +`docs/plans/2026-10-04_queue-follow-ups.md`. Candidate: +`agents/filbert/work/queue-33/candidate-manifest.sha256`, digest +`fe7da3ef063c3274a4b1c780e1b1641d9511bfebfba8b8539b07566f471751e8`, base +3e39a26a. + +Verdict: approve. + +## Checks + +- The manifest hashes to fe7da3ef. All 10 listed files match it in the + canonical working tree. Sage's request says 11 paths, but the manifest + has 10 lines; nothing is missing from what Filbert describes. +- Scratch clone at 930d2757 with the 7 candidate files: `node --test + packages/queue/tests/` passes 148/148. `bash scripts/test-queue.sh` + gives 27/0; the live checks skip there, as in an export. +- Fresh `git archive` export of 3e39a26a with the candidate files: 148/148 + on the first, cold run, and `test-queue.sh` 27/0. +- `scripts/mosaic queue verify --current` in the canonical checkout, with + the candidate's validator: ok at rev 47. The live log replays under the + calendar check. + +## The five items + +1. Genesis. `parseMigrationMap` has one caller, `genesis` in store.mjs, + and it runs after the retry check. A genesis retry still returns its + receipt, and `verify` never parses the map, so a pre-rule queue stays + readable. C1 is right. +2. Assign wording matches the brief. +3. HEAD moved. `head_moved` runs before each canary and again when the + clean run fails. The step-7 check now catches a move that update-ref + used to catch. Both exit without publishing, so C4's changed tests + assert the stronger behaviour. C2 ("another commit landed") is right: + the check fires for any commit. C3, the second check, closes the window + between the check and the hook run, and its test hits that window. +4. Calendar. I parsed every hour 00 to 99 with minutes and seconds 0, 59, + 60 and 99 in V8. Only 24:00 parses without round-tripping, and it moves + the date, so M8 is equivalent, as build.md says. For dates, V8 rolls + seven 2027 values (02-29, 02-30, 02-31, 04-31, 06-31, 09-31, 11-31); + the round trip refuses each. Year 0000 and 9999-12-31T23:59:59.999Z + round-trip and pass. Every time the validator reads goes through + `checkTime`: lines 252, 262, 281, 297, 330, 355, 356 and 1113. +5. Cold runs: 20 recorded, all 148/148. The brief's rule closes the item. + +## My mutants + +Ten, on the candidate. Seven are killed: +- no NaN guard (NaN reaches `toISOString` and throws a RangeError, not a + refusal); +- the time message saying "date"; +- the round trip skipped for fields that allow "unknown"; +- no HEAD check before the canary; +- no recheck after a failed clean run; +- the step-7 check moved before commit-tree; +- the rerun hint dropped. + +Three survive: +- `Date.parse(v)` on the bare date in place of the `T00:00:00.000Z` + suffix. Equivalent: a bare ISO date parses as UTC midnight. +- The genesis rule checking only `reviewers[0]`. Every new test puts the + owner first. The code uses `includes`, so this isn't a defect. +- `head_moved` passing whenever `HEAD^` isn't H, so a move of two or more + commits slips through. Every test moves HEAD by one commit. The code is a + plain equality, so this isn't a defect either; I wrote the mutant to probe + the tests, not because the code could take that form. + +## Non-blocking + +- n1. A genesis map case with the owner second in the reviewer list + (`["filbert", "darkwing"]` for row 9) would kill the `reviewers[0]` + mutant. Optional. +- n2. The 20 cold runs ran one at a time on an idle machine. My original + 141/1 failure came from a fresh clone, but I don't know the machine's + load at that moment. If it was load-dependent, idle runs wouldn't show + it. The brief's rule is met, and I agree with closing the item. If the + failure comes back, capture the test name and the load. diff --git a/docs/SESSIONS.md b/docs/SESSIONS.md index 3811e57a..8881e161 100644 --- a/docs/SESSIONS.md +++ b/docs/SESSIONS.md @@ -456,3 +456,7 @@ are never rewritten or removed; corrections are new entries. 2026-10-04T05:12:59Z | Filbert (T3 Claude Code, thread 9cb9731e) | row 31 review round 1 (#1508) | manifest 35199daf matches working tree 5/5; scratch clone at b800a2e6: queue tests 144/144, test-queue.sh 27/0 (+2 canonical-only skips); real log rev 36 replays clean under candidate; 8 mutants all killed; probe: refusals leave queue.json, QUEUE.md and witness unchanged; approve posted as comment 26629, recorded rev 37 (filbert-31-record-1), committed 1649f5e2 via queue-commit.sh, not pushed; candidate left uncommitted for Sage 2026-10-04T05:17:43Z | Sage (T3 Claude Code, thread 1ef1e4f8) | row 31 commit and close (#1508) | candidate bb2fa970 after Filbert's r1 approval (26629); suites green on an index export; verify-commit 5/5; row 31 done rev 38 (7584fbd0); DEFERRED and BUILD-LOG updated 2026-10-04T05:27:06Z | Sage (T3 Claude Code, thread 1ef1e4f8) | autonomous follow-through after decision 42 (#1508, #1514, row 5) | row 32 guideposts brief (#1514) queued for Jason; row 33 queue follow-ups briefed for filbert (reviewer darkwing); row 5 reviewers darkwing+filbert (Rocko off); Dewey resumed CHAT-03 (stalled since 09-27 on a usage-limit error); closes narrowed on row 33 +2026-10-04T05:59:42Z | Filbert (T3 Claude Code, thread 9cb9731e) | row 33 build, queue follow-ups (#1508) | claimed rev 44 (my queue-commit run lost the race; Sage's 3e39a26a carried it); genesis owner-not-reviewer check, assign wording, queue-commit HEAD-moved message, calendar round trip; 20 cold runs all 148/148, flake not reproduced; canonical 148/148 and test-queue.sh 29/0, export 27/0; 10 of 11 mutants killed (M8 equivalent); in-review rev 46-47 with manifest fe7da3ef, request comment 26648, committed 930d2757 via queue-commit.sh, not pushed; source uncommitted for Sage +2026-10-04T06:01:02Z | Filbert (T3 Claude Code, thread 9cb9731e) | row 33 handoff (#1508) | REVIEW-REQUEST to Darkwing (round 1, comment 26648, manifest fe7da3ef, build notes agents/filbert/work/queue-33/build.md); INFO to Sage (queue commit 930d2757 not pushed, source uncommitted, rev 44 race note); waiting on Darkwing's verdict +2026-10-04T06:10:28Z | Filbert (T3 Claude Code, thread 9cb9731e) | row 33 approved (#1508) | Darkwing r1 approve, comment 26651, rev 48 (862f865a, not pushed); verify --current ok at rev 48; manifest fe7da3ef still matches the working tree; candidate left unchanged for Sage's commit; n1 (owner-second genesis case) and n2 (idle cold runs) noted, not acted on +2026-10-04T06:26:07Z | Sage (T3 Claude Code, thread 1ef1e4f8) | row 33 commit and close (#1508) | candidate 6fb50cc0 after Darkwing's r1 approval (26651); suites green except one first-run queue node failure (147/1), 10 reruns 148/148, cold-start item reopened in DEFERRED; row 33 done rev 49 diff --git a/docs/plans/DEFERRED.md b/docs/plans/DEFERRED.md index 4d158f39..a66ba59b 100644 --- a/docs/plans/DEFERRED.md +++ b/docs/plans/DEFERRED.md @@ -138,6 +138,18 @@ at every gate. Started 2026-09-12 during the control board MVP. Sage asked the SetSpark lead to use a one-word role. The rule stays as it is. (2026-09-26, #1506) +- **Queue tests: the cold-start failure came back (reopened).** Row 33 + closed this as not reproduced in 20 idle cold runs. On 2026-10-04 Sage's + index export of the row 33 candidate ran the nine suites, then + `node --test packages/queue/tests/`, and got 147 passed, 1 failed. Sage's + recipe threw the output away, so again nobody knows which test failed. + Ten more runs all passed 148/148: three reruns in the same export, four + under parallel suite load, and three fresh exports run straight after + `test-queue.sh`. It needs a first run on a fresh tree after a full + suite pass, and even then it's rare. Darkwing's n2 on row 33 (the cold + runs were idle) was right. Next time: Sage's export recipe keeps the + node test output in a file, so the first failure has a name. Then fix it + as its own row. (2026-10-04, #1508) - **Queue: `add --issue N` also sets closes to N.** Follow-up rows under an umbrella issue, like rows 31 and 33 under #1508, would close the issue when they finish. Sage narrowed both by hand (revs 36 and 43). Either @@ -180,7 +192,8 @@ Moved to `docs/plans/QUEUE.md` on 2026-09-13. This file holds only gaps. built it in the Gate G run, and Filbert approved round 1 (#1508 comment 26629, 8 of 8 mutants caught). - Queue follow-ups from rows 12, 13 and 31 (2026-10-04, #1508): closed by - row 33. Filbert built it, and Darkwing reviews it. + row 33, 6fb50cc0. Filbert built it, and Darkwing approved round 1 + (#1508 comment 26651). - `genesis` refuses a map row whose owner is one of its reviewers (exit 2, nothing written). The check is on the map, not in replay, so a log from before the rule still loads.