What Muse's owed reads of #617, #627, #628, #642 and #646 found
DO
3h ago+318+318+012345678901234567890123456789-30-30-01234567890123456789
The follow-on, under the merged-early rule, for Muse's owed reads of five merged PRs:
- #617, "The first cut and the move of next";
- #627, "The refused rollback";
- #628, "The eval job reads a named set…" (record 0164);
- #642, "The gate pools every dispatch…" (record 0169);
- #646, "A gate set's dispatch asks its preflight first…" (record 0170).
Muse answered again on 2026-11-09. #636 read clean. #657's one finding was already ruled by the Factory Builder, and the ruling is quoted in its fixture. This PR adds no record.
What each finding got
| PR | Finding | Fixed by |
|---|---|---|
| #617 | The refused PATCH was not held to the admin actor or to the protected-ref reason | The test now holds the PATCH to the Maintainer from config/hooks.json, made with the admin role, and to the line "Cannot update this protected ref.". Two fixture mutants |
| #617 | The ruleset was held to a subset of its rules | It is now held to check_rulesets.TAG_RULESETS, non_fast_forward among them. A fixture mutant |
| #617 | read_at comes hours before the PATCH | Not changed. read_at is when the item's reads began, 06:54:10, one second before its first exchange. The test already holds every exchange in time order |
| #617 | A stale docstring in tests/test_release_step.py | Fixed |
| #627 | The rollback's evidence reads were not held to 200 | Each read in the rollback test and the cut test is now held to 200. A fixture mutant |
| #628 | ORIGIN_LEAST's exact boundary was untested | A group of exactly the least now plans. A mutant |
| #628 | A gate set's faults were not held to unreadable cases | A unit test on faults_of. A mutant |
| #628 | run.py's docstring said Results are never kept | It now says a gate set's Results go to the ledger in the scratch, for the seal |
| #642 | _dispatches' whole-answer guards were untested | A list not read whole, or answered with a 500, leaves the commit unjudged, each with the reports a pool would otherwise read. A mutant |
| #642 | A dispatch listed three times pooled as three | _dispatches now refuses a run id named twice. A test and a mutant |
| #642 | check_examples crashed on a gate set with no bars | A live gate set is now held by held first, as the job reads it, so a missing bars, least or preflight is a named problem. The bars guard stays. Tests and mutants |
| #646 | The ledger dropped a preflight case's at_alternate and surplus_gating marks | gate_scored now asks the preflight with containers for its marks and hands them to ledger_of. Tested through ledger_of and through the run step, with three mutants |
| #646 | eval-ledger/1's preflight was required by nothing | A counter-example, examples/invalid/eval-ledger.no-preflight.json. A mutant |
Checks
| Check | Result |
|---|---|
SIM_SEEDS=40 make verify | OK, 1722 tests (at 3f2cbb49) |
| Filtered mutants: every new and refreshed one | 15 of 15 killed (at 3f2cbb49), after 11 of 11 at b27eea17 |
| gitleaks | No leaks |
| Argon (b27eea1), 2 parts | Clean |
| Muse (b27eea1) | 1 major and 1 minor, both fixed in 3f2cbb49: the preflight marks are now tested through the run step, and a gate set with no preflight is held by held |
| Claude review and security (b27eea1), one read | Nothing blocking, and no security property weakened. Fixed: the same two findings as Muse; 200 checks in the cut test; #627's mutant; the #642 test now refuses for the right reason; ledger_of's six-item default |
| Astra | Only where Muse gives no read |
🤖 Generated with Claude Code