You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Measured on 9370edc74 while landing #13983, which moved the shared scripts/import-prerequisite.mjs frame (45 importing gates) from exit 1 to exit 3. Filed rather than folded in: #13983's scope boundary is explicit — only that frame's prerequisite branch — and these are different files on a different gate family, with a governed-surface edit attached.
The reading
After #13983 lands, PREREQUISITE NOT MET is exit 3 in the frame 45 gates inherit and in five sibling sites (check-test-completeness.mjs, check-dual-build-cjs-loads.mjs, check-type-check-coverage.mjs, pm/check-half-states.mjs, and pm/ci-failure.mjs, which imports the fourth's constant). Three sites still answer the same two words with 1:
scripts/check-i18n-coverage.mjs — three refusal paths (process.exit(1) at 1144, 1204, 1238), each printing (Exit code 1 — capture it BEFORE any pipe:
scripts/check-i18n-bundles.mjs — one (process.exit(1) at 1000), same advisory shape
packages/cli/scripts/check-app-nav-i18n.mjs — one (process.exit(1) at 622)
All three refuse through scripts/cli-build-prerequisite.mjs's vocabulary but own their exit and their banner text — that module contains no process.exit of its own, so there is no single place to change.
Why this is not a mechanical follow-up
Two things a dev cannot decide alone:
A lane doc keys on the current number..claude/skills/pm-dispatch/references/lanes/services.md line 22 reads, verbatim: check:i18n 以「PREREQUISITE NOT MET — workspace CLI 未 build」退 1 不是漂移。 That sentence becomes false the moment these gates move, so the change carries a .claude/** edit — a governed surface (AGENTS.md Prime Directive 14), which forks the PR and reserves the landing for the maintainer.
#13825 covers the wording of check-app-nav-i18n.mjs's banner (it prescribes echo "EXIT=$?" without saying BEFORE any pipe). This card is about the exit code those banners announce. They touch the same line and should probably land together, in whichever order triage prefers.
Measured on
9370edc74while landing #13983, which moved the sharedscripts/import-prerequisite.mjsframe (45 importing gates) from exit 1 to exit 3. Filed rather than folded in: #13983's scope boundary is explicit — only that frame's prerequisite branch — and these are different files on a different gate family, with a governed-surface edit attached.The reading
After #13983 lands,
PREREQUISITE NOT METis exit 3 in the frame 45 gates inherit and in five sibling sites (check-test-completeness.mjs,check-dual-build-cjs-loads.mjs,check-type-check-coverage.mjs,pm/check-half-states.mjs, andpm/ci-failure.mjs, which imports the fourth's constant). Three sites still answer the same two words with 1:scripts/check-i18n-coverage.mjs— three refusal paths (process.exit(1)at 1144, 1204, 1238), each printing(Exit code 1 — capture it BEFORE any pipe:scripts/check-i18n-bundles.mjs— one (process.exit(1)at 1000), same advisory shapepackages/cli/scripts/check-app-nav-i18n.mjs— one (process.exit(1)at 622)All three refuse through
scripts/cli-build-prerequisite.mjs's vocabulary but own their exit and their banner text — that module contains noprocess.exitof its own, so there is no single place to change.Why this is not a mechanical follow-up
Two things a dev cannot decide alone:
.claude/skills/pm-dispatch/references/lanes/services.mdline 22 reads, verbatim:check:i18n 以「PREREQUISITE NOT MET — workspace CLI 未 build」退 1 不是漂移。That sentence becomes false the moment these gates move, so the change carries a.claude/**edit — a governed surface (AGENTS.md Prime Directive 14), which forks the PR and reserves the landing for the maintainer.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 answered applies here, and the answer is weaker. There is still zero mechanical CI benefit (every consumer treats any non-zero as failure), and the inheritance surface is 5 sites rather than 45. The case rests entirely on the 2026-08-07 meta-criterion — one operation, two implementations, the governed side wins — now at 6 sites to 3 rather than 3 to 1.Neighbouring card, not a duplicate
#13825 covers the wording of
check-app-nav-i18n.mjs's banner (it prescribesecho "EXIT=$?"without saying BEFORE any pipe). This card is about the exit code those banners announce. They touch the same line and should probably land together, in whichever order triage prefers.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's direction was triage's call and so is this one.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 depends on the answer; that PR left these three files untouched on purpose.Generated by Claude Code
Generated by Claude Code