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
PR #72 (#67) added pnpm lint:i18n-gate to .github/workflows/ci.yml, so CI now enforces four gates. Four places in this repository still tell a contributor there are three:
where
what it says
governed?
README.md 47–49
the three-command block under 「Every metadata change is gated」
no
CLAUDE.md 8
⛔ rule: pnpm validate && pnpm lint && pnpm typecheck must all pass
yes
AGENTS.md 30–37
## Verify your work — a three-command block, then 「Never report a change as done, and never open a PR, until all three pass. Paste the three green tails into the PR body.」
— so the documents are now the last thing in the repository still saying three.
Why this is one PR and not two
README.md is the only one of the four outside the governed range, so it could be fixed on the normal path today. ⛔ Do not. Fixing the editable surface alone would leave README.md saying four while CLAUDE.md and AGENTS.md say three — trading a uniform understatement, which merely omits, for a genuine contradiction, which misleads. All four move together or none do.
That makes this a governed-surface PR: AGENTS.md leaves CLAUDE.md and AGENTS.md to the maintainer's merge, the same path PR #40 took. The dev authors it, CI runs, the seat reviews and records an ACCEPT, and then it waits — ⛔ the seat does not merge it.
Why it is not a defect
A contributor who copies those three commands is led into an omission, not an error: the three still pass and still mean what they say, and pnpm verify — which the same documents also mention — runs all four anyway. Nothing breaks. This is documentation catching up with an enforcement surface that moved, which is the same shape as #44, #58 and #63 and is worth the same care.
What to change
Make all four state the same four-gate set. Notes per surface:
AGENTS.md 30–37 is a rewrite, not a line insert. The count is welded into the prose twice — 「all three pass」 and 「the three green tails」 — so adding a fourth command without touching those two phrases leaves the section contradicting itself in the space of three lines. ⚠️ That is exactly the defect class this card is fixing; do not reproduce it while fixing it.
AGENTS.md 129 is a table cell; keep the cell's existing shape.
CLAUDE.md 8 is inside a ⛔ rule that is deliberately terse and mirrors a Prime Directive; match its register and ⛔ do not expand it into a paragraph.
README.md 47–49 is a fenced block with a trailing comment per line; follow that convention for the fourth.
Consider whether any of the four should simply say pnpm verify instead of enumerating — state your reading, do not act on it unasked. Enumeration is what drifted; a single composed command cannot. But README.md's block exists to show a reader what runs, and collapsing it may cost more than it saves. If you recommend it, recommend it in the PR body and leave the enumerations in place.
Constraints
⛔ Documentation only. No .github/, no package.json, no src/.
⛔ Do not change what the gates are or their order — validate → lint → typecheck → lint:i18n-gate, matching verify and ci.yml as merged.
Grep for every occurrence before declaring done, not just the four above. This card exists because one statement drifted in four places at once, and the four were found by a grep, not by a list — so run the grep yourself and report what it returns, including "nothing else".
⛔ Do not touch DESIGN.md, LICENSE, CHANGELOG.md or docs/design/**.
Every quoted line re-read on the tree you branch from; ⛔ do not copy the table above into the diff — it is the PM seat's summary, taken on 30fd863, and 19a8a4c has landed since.
Verify the edits landed by before/after counts of the old and new spellings — ⛔ never by an editor's exit code.
This PR is left OPEN for the maintainer. Say so in the PR body, and include a 「维护者速读」 section: what changed, why, the risk (nil — documentation), and the rollback (git revert, one commit, no migration).
No changeset (this repo has no changeset gate). No browser run owed.
Provenance
Found by the dev on #67 while checking whether CLAUDE.md's three-gate rule should become four — it reported all four surfaces, correctly declined to touch the three governed ones, and recommended one PR covering all four rather than a card for the README half alone. The PM seat adopted that recommendation; the reasoning above is the dev's.
Related
#67 / PR #72 (19a8a4c, which made CI enforce four) · PR #40 (the governed-surface path this card follows) · #44 · #58 · #63 (documentation catching up with the tree)
The gap
PR #72 (#67) added
pnpm lint:i18n-gateto.github/workflows/ci.yml, so CI now enforces four gates. Four places in this repository still tell a contributor there are three:README.md47–49CLAUDE.md8pnpm validate && pnpm lint && pnpm typecheckmust all passAGENTS.md30–37## Verify your work— a three-command block, then 「Never report a change as done, and never open a PR, until all three pass. Paste the three green tails into the PR body.」AGENTS.md129| Gates | pnpm validate && pnpm lint && pnpm typecheck. |package.json'sverifyscript has composed all four for some time —— so the documents are now the last thing in the repository still saying three.
Why this is one PR and not two
README.mdis the only one of the four outside the governed range, so it could be fixed on the normal path today. ⛔ Do not. Fixing the editable surface alone would leaveREADME.mdsaying four whileCLAUDE.mdandAGENTS.mdsay three — trading a uniform understatement, which merely omits, for a genuine contradiction, which misleads. All four move together or none do.That makes this a governed-surface PR:
AGENTS.mdleavesCLAUDE.mdandAGENTS.mdto the maintainer's merge, the same path PR #40 took. The dev authors it, CI runs, the seat reviews and records an ACCEPT, and then it waits — ⛔ the seat does not merge it.Why it is not a defect
A contributor who copies those three commands is led into an omission, not an error: the three still pass and still mean what they say, and
pnpm verify— which the same documents also mention — runs all four anyway. Nothing breaks. This is documentation catching up with an enforcement surface that moved, which is the same shape as #44, #58 and #63 and is worth the same care.What to change
Make all four state the same four-gate set. Notes per surface:
AGENTS.md30–37 is a rewrite, not a line insert. The count is welded into the prose twice — 「all three pass」 and 「the three green tails」 — so adding a fourth command without touching those two phrases leaves the section contradicting itself in the space of three lines.AGENTS.md129 is a table cell; keep the cell's existing shape.CLAUDE.md8 is inside a ⛔ rule that is deliberately terse and mirrors a Prime Directive; match its register and ⛔ do not expand it into a paragraph.README.md47–49 is a fenced block with a trailing comment per line; follow that convention for the fourth.pnpm verifyinstead of enumerating — state your reading, do not act on it unasked. Enumeration is what drifted; a single composed command cannot. ButREADME.md's block exists to show a reader what runs, and collapsing it may cost more than it saves. If you recommend it, recommend it in the PR body and leave the enumerations in place.Constraints
.github/, nopackage.json, nosrc/.validate→lint→typecheck→lint:i18n-gate, matchingverifyandci.ymlas merged.DESIGN.md,LICENSE,CHANGELOG.mdordocs/design/**.Acceptance
tsconfigincludes onlyobjectstack.config.tsandsrc/**/*; validate/lint walk the metadata graph) — so say that plainly, and demonstrate it rather than asserting it, the wayDESIGN.md§09 still specifies 各阶段合同数**漏斗** — the app stopped shipping a funnel in #48 and narrowed what it plots in #59 #63's PR did with an ablation and docs: the position census disagrees with itself in three places — README says seven over a table of six, DESIGN.md §11 says both 7 and 8 #58's with three independent measurements.30fd863, and19a8a4chas landed since.git revert, one commit, no migration).Provenance
Found by the dev on #67 while checking whether
CLAUDE.md's three-gate rule should become four — it reported all four surfaces, correctly declined to touch the three governed ones, and recommended one PR covering all four rather than a card for the README half alone. The PM seat adopted that recommendation; the reasoning above is the dev's.Related
#67 / PR #72 (
19a8a4c, which made CI enforce four) · PR #40 (the governed-surface path this card follows) · #44 · #58 · #63 (documentation catching up with the tree)