Skip to content

Three PREREQUISITE NOT MET sites still exit 1 after #13983 — the i18n frames, plus a lane doc that keys on the old number #14008

Description

@claude

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:

  1. 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.
  2. The same counter-argument 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 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.

Deliberately not claimed

Generated by Claude Code


Generated by Claude Code

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions