docs(records): row 33 landed, cold-start failure reopened (#1508)

Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
2026-10-04 01:26:07 -05:00
co-authored by Claude Opus 5.5
parent 93eba94939
commit 1c72495815
4 changed files with 125 additions and 1 deletions
+29
View File
@@ -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.
@@ -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.
+4
View File
@@ -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
+14 -1
View File
@@ -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.