From 3217a91a25ca04d9427e7038a00c997f183e7010 Mon Sep 17 00:00:00 2001 From: Claude Date: Sat, 12 Sep 2026 00:44:53 +0000 Subject: [PATCH 1/2] docs(gates): name `pnpm verify` in the two surfaces that only restate it `package.json`'s `verify` is the definition of the gate set. AGENTS.md's delivery-process Gates cell and the backlog's acceptance floor restated that list verbatim while carrying no per-command information: they exist to point at the bar, and a pointer to a definition should be the definition's name. Both now say `pnpm verify`, which cannot go stale because it *is* the list. This is hardening, not a repair. Every statement of the gate set in the tree was already correct; what changes is that two of them can no longer drift from it. The two fenced blocks in README.md and AGENTS.md keep enumerating, deliberately: their job is to show a reader what runs and what each gate catches, and those per-gate comments are the reason the blocks are worth reading. DESIGN.md's M1 acceptance cell stays at three commands, adjudicated on #73 as a record of what a delivered milestone was accepted against rather than an instruction. Neither cell gains a count or a pointer. A count is the precise mechanism that put five copies wrong in one edit, and naming `package.json` would add a second drift-capable coordinate for a fact `pnpm run` already resolves on its own. The backlog paragraph is re-flowed because the substitution shortened its first line mid-command; the re-flow is confined to that one paragraph. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01R3n3GGzobdegM4HUzah1iR --- AGENTS.md | 2 +- docs/backlog/README.md | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/AGENTS.md b/AGENTS.md index 85fa26f..7814aa7 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -127,7 +127,7 @@ docs/backlog/ work cards docs/requirements/ | PR | **Draft** PR against `main`, title = issue title, body: what changed · gate output · `Fixes #`. One issue per PR. | | Release notes | **None per PR.** `CHANGELOG.md` is written at release time by the maintainer. | | Files a code PR never touches | `LICENSE` · `CHANGELOG.md` · `DESIGN.md` §01–§04 without a `needs-user-decision` first | -| Gates | `pnpm validate && pnpm lint && pnpm typecheck && pnpm lint:i18n-gate`. | +| Gates | `pnpm verify`. | | Merge policy | **The loop merges its own green work** (maintainer, 2026-09-07, verbatim: 「你自己派发自己合并」 and 「改策略,让循环真的无人值守」). The PM seat squash-merges a PR when **all** of: CI green on the head · an ACCEPT review recorded on the issue · the diff touches no governed surface · it is not a second REWORK round. Anything else still goes to the maintainer. | | Governed surface (maintainer merges) | `DESIGN.md` §01–§04 · `AGENTS.md` · `CLAUDE.md` · `LICENSE` · `CHANGELOG.md` · `docs/design/**`. A PR touching any of these is ACCEPTed and left open with a `## 维护者速读` comment. | | Decisions stay with the maintainer | The merge authorization covers **merging**, not deciding. Product semantics, `DESIGN.md` §01–§04 wording, and anything on the escalation ladder still becomes a `needs-user-decision` card. | diff --git a/docs/backlog/README.md b/docs/backlog/README.md index b8a73b6..5c7fea1 100644 --- a/docs/backlog/README.md +++ b/docs/backlog/README.md @@ -26,7 +26,7 @@ dispatch is worth anything. | [13](./13-ai-skills.md) | AI participation: S1–S6 skills, the pre-review memo, MCP tool surface, honest degradation | M4 | 05 | | [14](./14-release.md) | Release: docs site, screenshots, feature inventory, marketplace publish | M4 | 10, 11, 12, 13 | -Every card inherits the same acceptance floor: `pnpm validate && pnpm lint && pnpm typecheck && -pnpm lint:i18n-gate` green, gate output pasted in the PR, one draft PR per card, no rider changes. -Field lists, enum values and transitions are pinned in [`DESIGN.md`](../../DESIGN.md) §03–§06 — a -card that needs a value not pinned there stops with `needs_decision` instead of inventing one. +Every card inherits the same acceptance floor: `pnpm verify` green, gate output pasted in the PR, +one draft PR per card, no rider changes. Field lists, enum values and transitions are pinned in +[`DESIGN.md`](../../DESIGN.md) §03–§06 — a card that needs a value not pinned there stops with +`needs_decision` instead of inventing one. From 84d7642de3f5c881108f0c6c8726e0ec61ead0a3 Mon Sep 17 00:00:00 2001 From: Claude Date: Sat, 12 Sep 2026 00:45:17 +0000 Subject: [PATCH 2/2] docs(gates): name `pnpm verify` in CLAUDE.md's inlined gate rule too Found by the enumeration grep this card mandates, and absent from the card's own table of surfaces. CLAUDE.md's rule restated the composed spelling verbatim and carried no per-command information, so it is a restatement by exactly the criterion that moved the other two. It is also provably drift-capable rather than a statement that has never moved: it said three commands until 4560611 rewrote it, so it is one of the surfaces that went stale when CI gained a fourth gate. "must all pass" becomes "must pass": `all` bound to a plural list of commands and does not read over a single script name. Kept as its own commit so it can be dropped with one revert by anyone who reads the card's "no other file" as binding over the card's own criterion. The preceding commit is complete and self-sufficient without this one. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01R3n3GGzobdegM4HUzah1iR --- CLAUDE.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index 0e60115..3dfb25b 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -5,9 +5,8 @@ Three rules there must never be missed: ## ⛔ Gate every metadata change -`pnpm validate && pnpm lint && pnpm typecheck && pnpm lint:i18n-gate` must all pass before a change -is reported as done. Metadata mistakes fail silently at runtime; the gates are the only place they -surface early. +`pnpm verify` must pass before a change is reported as done. Metadata mistakes fail silently at +runtime; the gates are the only place they surface early. ## ⛔ Worktree-first, never `git stash`