What Muse's owed reads of #617, #627, #628, #642 and #646 found

DO
3h ago
+318-30

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

PRFindingFixed by
#617The refused PATCH was not held to the admin actor or to the protected-ref reasonThe 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
#617The ruleset was held to a subset of its rulesIt is now held to check_rulesets.TAG_RULESETS, non_fast_forward among them. A fixture mutant
#617read_at comes hours before the PATCHNot 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
#617A stale docstring in tests/test_release_step.pyFixed
#627The rollback's evidence reads were not held to 200Each read in the rollback test and the cut test is now held to 200. A fixture mutant
#628ORIGIN_LEAST's exact boundary was untestedA group of exactly the least now plans. A mutant
#628A gate set's faults were not held to unreadable casesA unit test on faults_of. A mutant
#628run.py's docstring said Results are never keptIt now says a gate set's Results go to the ledger in the scratch, for the seal
#642_dispatches' whole-answer guards were untestedA list not read whole, or answered with a 500, leaves the commit unjudged, each with the reports a pool would otherwise read. A mutant
#642A dispatch listed three times pooled as three_dispatches now refuses a run id named twice. A test and a mutant
#642check_examples crashed on a gate set with no barsA 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
#646The ledger dropped a preflight case's at_alternate and surplus_gating marksgate_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
#646eval-ledger/1's preflight was required by nothingA counter-example, examples/invalid/eval-ledger.no-preflight.json. A mutant

Checks

CheckResult
SIM_SEEDS=40 make verifyOK, 1722 tests (at 3f2cbb49)
Filtered mutants: every new and refreshed one15 of 15 killed (at 3f2cbb49), after 11 of 11 at b27eea17
gitleaksNo leaks
Argon (b27eea1), 2 partsClean
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 readNothing 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
AstraOnly where Muse gives no read

🤖 Generated with Claude Code