main is RED and the merge queue is blocked for everyone. Two consecutive commits fail the same gate; a PR that is green on its own head was kicked from the queue for this, not for its own content.
The failure, quoted from CI
Job Lint & Repo Gates, step Merge-driver wiring gate = node scripts/git-merge-regen.mjs --self-test && node scripts/check-regen-pending.mjs --self-test.
The first half passes completely (17 ✓ lines, ending ✓ merge driver wiring is consistent (24 path(s) deliberately excluded)). The second half fails:
✗ a gate that cannot LOAD is PREREQUISITE NOT MET, not `stale`
✗ …and never calls the artifact stale, which is the false claim
✗ …carrying the load-bearing half: that nothing was measured
✗ …naming the package node could not find, not the artifact
✗ a gate whose RUNNER is not installed refuses the same way
✗ …naming the command the shell could not find, in the diagnosis
✗ a gate that ALREADY refused with an unmet prerequisite is propagated, not relabelled
✗ …quoting the gate's own words rather than a second opinion
✗ self-test failed -- 1 failure(s) (cases and floor).
##[error]Process completed with exit code 1.
Bisected on main, and it clears the obvious suspect
| commit |
time |
Lint & Repo Gates |
fc20f7bda — check-regen-pending refuses on an unmet prerequisite… (introduced these very cases) |
09-05 08:15 |
— |
cc00df2f7 — retire PluginSecurityScanner |
09-05 16:12 |
success |
aa6ba0623 — H48 governed-PR ACCEPT verdict |
09-05 16:36 |
failure |
f7db8f4fd — defineStack cross-reference refusal |
09-05 17:00 |
failure |
⇒ ⛔ fc20f7bda is not the cause — cc00df2f7 is a descendant of it and was green. The transition is cc00df2f7 → aa6ba0623, and everything between is cancelled (superseded pushes), so those two are the tightest bracket CI gives.
⭐ aa6ba0623 changed exactly one file: scripts/pm/check-half-states.mjs, +415 / −0. It touches neither half of what this gate reconciles (.gitattributes, scripts/regen-artifacts.mjs — verified absent from its file list).
Hypothesis to verify, ⛔ not a conclusion
The failing assertions are the PREREQUISITE NOT MET family, and the summary reads "1 failure(s) (cases and floor)" — a floor was added to this very script by f158daf78 (batch 10d — floor check-regen-pending on its three named callees). So the self-test appears to enumerate callees/gates and assert a floor over them.
A newly added scripts/pm/check-half-states.mjs could move that population — and that script is independently known to answer exit 3 / PREREQUISITE NOT MET in environments without repo-scoped board reads (observed twice this week in dev reports). A self-test case that picks a gate by enumeration and asserts on how a refusal is reported would flip the moment the enumeration reaches a script that genuinely refuses.
⚠️ That is a hypothesis with a mechanism, not a measurement. Verify it before fixing: reproduce at aa6ba0623, then re-run with that one file removed. If the failure persists without it, the bracket is wrong and the cause is elsewhere.
Why this is urgent beyond one PR
The merge queue re-tests every entry against main. While this is red, every queued PR is kicked regardless of its own state — PR #15235 already was (green on its own head, contract-reviewed PASS, kicked at 17:07). Cards will accumulate looking individually broken when the damage is shared.
⛔ Not to be done
⛔ Do not fix this by weakening or deleting the failing cases. They pin the distinction between "nothing was measured" and "the artifact is stale" — the false-claim direction the script was written to close (fc20f7bda). If the right answer is that the enumeration should exclude a genuinely-refusing gate, that is a change to the enumeration, not to the assertions.
Refs: main aa6ba0623 / f7db8f4fd (red), cc00df2f7 (last green) · scripts/check-regen-pending.mjs · fc20f7bda, f158daf78 · PR #15235 / #15072 (kicked by this).
mainis RED and the merge queue is blocked for everyone. Two consecutive commits fail the same gate; a PR that is green on its own head was kicked from the queue for this, not for its own content.The failure, quoted from CI
Job
Lint & Repo Gates, step Merge-driver wiring gate =node scripts/git-merge-regen.mjs --self-test && node scripts/check-regen-pending.mjs --self-test.The first half passes completely (17 ✓ lines, ending
✓ merge driver wiring is consistent (24 path(s) deliberately excluded)). The second half fails:Bisected on
main, and it clears the obvious suspectfc20f7bda— check-regen-pending refuses on an unmet prerequisite… (introduced these very cases)cc00df2f7— retire PluginSecurityScanneraa6ba0623— H48 governed-PR ACCEPT verdictf7db8f4fd— defineStack cross-reference refusal⇒ ⛔
fc20f7bdais not the cause —cc00df2f7is a descendant of it and was green. The transition iscc00df2f7→aa6ba0623, and everything between iscancelled(superseded pushes), so those two are the tightest bracket CI gives.⭐
aa6ba0623changed exactly one file:scripts/pm/check-half-states.mjs, +415 / −0. It touches neither half of what this gate reconciles (.gitattributes,scripts/regen-artifacts.mjs— verified absent from its file list).Hypothesis to verify, ⛔ not a conclusion
The failing assertions are the PREREQUISITE NOT MET family, and the summary reads "1 failure(s) (cases and floor)" — a floor was added to this very script by
f158daf78(batch 10d — floor check-regen-pending on its three named callees). So the self-test appears to enumerate callees/gates and assert a floor over them.A newly added
scripts/pm/check-half-states.mjscould move that population — and that script is independently known to answer exit 3 / PREREQUISITE NOT MET in environments without repo-scoped board reads (observed twice this week in dev reports). A self-test case that picks a gate by enumeration and asserts on how a refusal is reported would flip the moment the enumeration reaches a script that genuinely refuses.aa6ba0623, then re-run with that one file removed. If the failure persists without it, the bracket is wrong and the cause is elsewhere.Why this is urgent beyond one PR
The merge queue re-tests every entry against
main. While this is red, every queued PR is kicked regardless of its own state — PR #15235 already was (green on its own head, contract-reviewed PASS, kicked at 17:07). Cards will accumulate looking individually broken when the damage is shared.⛔ Not to be done
⛔ Do not fix this by weakening or deleting the failing cases. They pin the distinction between "nothing was measured" and "the artifact is stale" — the false-claim direction the script was written to close (
fc20f7bda). If the right answer is that the enumeration should exclude a genuinely-refusing gate, that is a change to the enumeration, not to the assertions.Refs: main
aa6ba0623/f7db8f4fd(red),cc00df2f7(last green) ·scripts/check-regen-pending.mjs·fc20f7bda,f158daf78· PR #15235 / #15072 (kicked by this).