Why this exists
package.json:21 defines the gate set:
"verify": "pnpm validate && pnpm lint && pnpm typecheck && pnpm lint:i18n-gate"
Five places in the repository restated that list, and all five drifted at once when CI gained a fourth gate — fixed in one pass by #73 / PR #77. Correcting five copies leaves five copies. This card removes two of them from the drift surface permanently.
The split, and why it is not "collapse them all"
The five are not the same kind of statement:
| surface |
what it is |
this card |
AGENTS.md Gates cell (delivery-process table) |
a restatement: names the set only to say "this is the bar" |
→ pnpm verify |
docs/backlog/README.md acceptance floor |
a restatement: same, for every dispatched card |
→ pnpm verify |
README.md's fenced block |
a demonstration: shows a reader what runs, one explanatory comment per gate |
⛔ leave enumerating |
AGENTS.md's 「Verify your work」 fenced block |
a demonstration: same, and its comments explain why lint is not a second spelling of validate |
⛔ leave enumerating |
DESIGN.md:354 M1 acceptance cell |
a historical record of what M1 was accepted against |
⛔ leave at three — adjudicated on #73, ⛔ do not touch |
The two restatements carry no per-command information. They exist to point at the bar, and a pointer to a definition should be the definition's name. pnpm verify cannot drift; it is the list.
The two fenced blocks are the opposite: their job is to show what runs and why, and collapsing them would delete the explanations that make them worth reading.
Precedent already in the tree: docs/backlog/14-release.md:14 already says 「pnpm verify green」 — one card already does exactly this.
⛔ This is hardening, not a defect
After PR #77 merges, all five statements are correct. Nothing is broken and nothing misleads. This card buys one thing: two of the five can never go stale again. Treat it with the care that deserves — ⛔ it does not justify touching anything beyond the two cells.
Constraints
Acceptance
Provenance
Recommended by the dev on #73 as open_questions option A, deliberately not acted on in PR #77 because the card said to recommend rather than act. The split above is that dev's; the decision to adopt A and file it is the PM seat's. Its own words for why:
Those two name the set only to say "this is the bar" — they carry no per-command information and are pure restatements of package.json's verify, which is precisely the mechanism that drifted five copies at once.
Related
#73 / PR #77 (the five-way fix this hardens; blocker) · #67 / PR #72 (19a8a4c, which made CI enforce four) · docs/backlog/14-release.md:14 (the precedent) · PR #40 (the governed-surface path)
Why this exists
package.json:21defines the gate set:Five places in the repository restated that list, and all five drifted at once when CI gained a fourth gate — fixed in one pass by #73 / PR #77. Correcting five copies leaves five copies. This card removes two of them from the drift surface permanently.
The split, and why it is not "collapse them all"
The five are not the same kind of statement:
AGENTS.mdGates cell (delivery-process table)pnpm verifydocs/backlog/README.mdacceptance floorpnpm verifyREADME.md's fenced blockAGENTS.md's 「Verify your work」 fenced blocklintis not a second spelling ofvalidateDESIGN.md:354M1 acceptance cellThe two restatements carry no per-command information. They exist to point at the bar, and a pointer to a definition should be the definition's name.
pnpm verifycannot drift; it is the list.The two fenced blocks are the opposite: their job is to show what runs and why, and collapsing them would delete the explanations that make them worth reading.
Precedent already in the tree:
docs/backlog/14-release.md:14already says 「pnpm verifygreen」 — one card already does exactly this.⛔ This is hardening, not a defect
After PR #77 merges, all five statements are correct. Nothing is broken and nothing misleads. This card buys one thing: two of the five can never go stale again. Treat it with the care that deserves — ⛔ it does not justify touching anything beyond the two cells.
Constraints
AGENTS.mdis a governed surface, so this PR is ACCEPTed and left open for the maintainer, exactly like PR Four surfaces state the gate set as three commands; CI now enforces four — one PR must move all four, and three of them are governed #77 and PR Record four maintainer rulings in DESIGN.md §03, §06 and §09 #40. Include a 「维护者速读」 draft.DESIGN.md:354— that one is adjudicated and stays at three.pnpm verifygreen」 must still be a complete sentence, and theAGENTS.mdtable cell must keep its shape.Acceptance
AGENTS.mdordocs/backlog/README.md— PR Four surfaces state the gate set as three commands; CI now enforces four — one PR must move all four, and three of them are governed #77 demonstrated this by reducing all four documents to garbage at once and showing every gate still exits 0. ⛔ Do not merely assert it; one solid demonstration, restored and verified by state (git hash-objectagainstgit rev-parse HEAD:<path>).Provenance
Recommended by the dev on #73 as
open_questionsoption A, deliberately not acted on in PR #77 because the card said to recommend rather than act. The split above is that dev's; the decision to adopt A and file it is the PM seat's. Its own words for why:Related
#73 / PR #77 (the five-way fix this hardens; blocker) · #67 / PR #72 (
19a8a4c, which made CI enforce four) ·docs/backlog/14-release.md:14(the precedent) · PR #40 (the governed-surface path)