fix(queue): genesis owner-not-reviewer check, assign wording, queue-commit HEAD-moved message, calendar dates (row 33, #1508)

Built by filbert, approved by darkwing in round 1 (#1508 comment 26651).
Manifest fe7da3ef, 10 paths. Suites green on an index export.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
2026-10-04 01:25:06 -05:00
co-authored by Claude Opus 5.5
parent 862f865a3c
commit 6fb50cc0a8
10 changed files with 347 additions and 52 deletions
+18 -30
View File
@@ -138,42 +138,12 @@ 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: `genesis` from a map doesn't check the owner-not-reviewer
rule.** Row 31 added the refusal to `add`, `set reviewers` and `assign`,
but a genesis map can still create a row whose owner is a reviewer.
No current row has that shape. Filbert, row 31 r1 (#1508 comment 26629).
(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
`add` takes `--closes` or the lead checks closes on every add. Not
urgent while Sage adds the rows. (2026-10-04, #1508)
- **Queue: the `assign` refusal calls the seat "owner" too early.** The
message calls the seat the row's owner before the assign makes it one.
Wording only. Filbert, row 31 r1. (2026-10-04, #1508)
- **Queue tests: one unexplained failure on a cold start.** Darkwing's
first run of the D candidate in a fresh clone gave 141 passed, 1 failed.
The failing test's name wasn't captured. 15 reruns passed 142/0,
sequential and parallel. Darkwing suspects a timing bound, most likely
the 300 ms deadline case in the transport test, which allows 4000 ms.
That isn't confirmed. Next time: capture the name, then fix it as its
own patch. (2026-09-27, #1508)
- **queue-commit.sh blames the guard when HEAD moves.** Step 7's canary
reads H into its index (`scripts/queue-commit.sh:94`). The hook diffs
against the live HEAD. If another queue commit moves the branch after H
is recorded, the clean canary sees a difference and refuses with "git is
not running the queue guard as installed". The fix it prints does
nothing. The refusal is correct, the message is wrong. Fix: guard_check
compares HEAD with H before the canary and says "HEAD moved since H;
start again". Filbert found this during the row 12 live round.
(2026-09-27, #1508)
- **Queue validator checks date shape, not the calendar.** `ISO_RE` and
`DATE_RE` accept month 13, and V8 turns 2026-02-30 into March 2 without
an error. The CLI can't write such a value today; a hand edit or a
future verb could. Fix: round-trip the parsed date. Filbert and
Darkwing, Piece E round 2. (2026-09-27, #1508)
- **Ledger metric call can orphan curl.** The metric call in
`packages/ledger/src/ledger.mjs` still relies on execFileSync's
timeout, which kills the helper but can leave curl running. E's queue
@@ -209,3 +179,21 @@ Moved to `docs/plans/QUEUE.md` on 2026-09-13. This file holds only gaps.
now refuse the owner as a reviewer with exit 2 and write nothing. Rocko
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.
- `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.
- The `assign` refusal now reads "can't assign row N to SEAT: SEAT is
one of its reviewers".
- `queue-commit.sh` compares HEAD with H before each canary and again if
the clean run fails. A moved HEAD exits 2 with "HEAD moved since H was
recorded"; the guard message is kept for a real guard failure.
- Every time and date the validator accepts must format back to itself,
so month 13, day 32, 2026-02-30, 2027-02-29 and 24:00 are refused.
The live log at rev 45 still replays.
- The cold-start failure (2026-09-27): not reproduced in 20 cold runs.
Each ran `node --test packages/queue/tests/` in a fresh tree, 10
shared clones and 10 exports, one after another. All 20 passed
148/148 (2960 of 2960). The 300 ms deadline test is unchanged. Counts:
`agents/filbert/work/queue-33/cold-runs.txt`.