Measured on 9370edc74 (branch claude/issue-13983-prerequisite-exit-code, the #13983 worktree) while changing that file's refusal code.
The reading
scripts/import-prerequisite.mjs ships a --self-test — 49 cases after #13983, 41 before it — and nothing runs it:
$ git grep -n "import-prerequisite" -- .github/workflows package.json
(no output)
It is the shared PREREQUISITE NOT MET frame that 45 gates import (42 under scripts/**, 3 under packages/lint/scripts/**), and its self-test is the ONE place the inherited advisory is pinned — the module's own comment says so: "Pinned HERE and nowhere else, because this is the one copy 45 importers print." So the pin for a paragraph 45 gates emit verbatim executes only when a human or an agent types the command by hand.
Why the wiring gate does not catch it, and why that is not a bug in the wiring gate
scripts/check-self-test-wired.mjs is green, and correctly so. Its population is scripts CI runs:
✓ check-self-test-wired: every one of the 159 script(s) CI runs that ship a `--self-test` has that self-test run by CI.
scope: 218 file(s) under scripts/, 174 carrying `--self-test` in code (comments masked); 159 of those are run by 29 workflow(s); ...
174 carry the flag, 159 are run by CI. import-prerequisite.mjs is in the 15-file remainder by construction: it is a MODULE that gates import, never a script a workflow invokes, so no workflow can name it and the gate's own header is explicit that membership is "a workflow names it — directly, or through a root package.json alias a workflow names".
⇒ The blast radius and the population rule point in opposite directions here: the file with the largest inheritance surface in the farm is the one shape the wiring gate cannot see.
Deliberately not claimed
Why it is worth a card
The repo has been bitten by the unrun kind twice (a 61-case self-test no job ran; a 79-case one likewise), both found by hand and late — check-self-test-wired.mjs's header records both. This one pins a paragraph 45 gates print and, since #13983, an exit-code class those 45 gates return.
Generated by Claude Code
Generated by Claude Code
Measured on
9370edc74(branchclaude/issue-13983-prerequisite-exit-code, the #13983 worktree) while changing that file's refusal code.The reading
scripts/import-prerequisite.mjsships a--self-test— 49 cases after #13983, 41 before it — and nothing runs it:It is the shared
PREREQUISITE NOT METframe that 45 gates import (42 underscripts/**, 3 underpackages/lint/scripts/**), and its self-test is the ONE place the inherited advisory is pinned — the module's own comment says so: "Pinned HERE and nowhere else, because this is the one copy 45 importers print." So the pin for a paragraph 45 gates emit verbatim executes only when a human or an agent types the command by hand.Why the wiring gate does not catch it, and why that is not a bug in the wiring gate
scripts/check-self-test-wired.mjsis green, and correctly so. Its population is scripts CI runs:174 carry the flag, 159 are run by CI.
import-prerequisite.mjsis in the 15-file remainder by construction: it is a MODULE that gates import, never a script a workflow invokes, so no workflow can name it and the gate's own header is explicit that membership is "a workflow names it — directly, or through a rootpackage.jsonalias a workflow names".⇒ The blast radius and the population rule point in opposite directions here: the file with the largest inheritance surface in the farm is the one shape the wiring gate cannot see.
Deliberately not claimed
import-prerequisite.mjs— the frame 20+ gates inherit — prints PREREQUISITE NOT MET and exits 1, while three sibling gates answer the same words with 3 #13983 — the 41 pre-existing cases were equally unrun.check-self-test-wired's population should change. Widening "scripts CI runs" to "scripts a CI-run script imports" is a decision with its own cost (transitive closure, and the 15-file remainder is not audited here); naming this one file in a workflow step is the other option, and it is the smaller one.lint.yml, a standalone step, or thepackages/lintjob).Why it is worth a card
The repo has been bitten by the unrun kind twice (a 61-case self-test no job ran; a 79-case one likewise), both found by hand and late —
check-self-test-wired.mjs's header records both. This one pins a paragraph 45 gates print and, since #13983, an exit-code class those 45 gates return.Generated by Claude Code
Generated by Claude Code