diff --git a/AGENTS.md b/AGENTS.md index 1ff636e..85fa26f 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -27,14 +27,15 @@ touches `src/`. ## Verify your work — after every metadata change ```bash -pnpm validate # protocol schema + CEL predicates (record. existence) + widget bindings -pnpm lint # data-model conventions: reserved vocabulary, titles, master-detail, select options +pnpm validate # protocol schema + CEL predicates (record. existence) + widget bindings +pnpm lint # data-model conventions: reserved vocabulary, titles, master-detail, select options pnpm typecheck +pnpm lint:i18n-gate # zh-CN bundle completeness: a key missing there renders as English, not an error ``` -`validate` runs the same gates as `pnpm build` without emitting `dist/`. All three exit non-zero with a -located, corrective message. **Never report a change as done, and never open a PR, until all three pass.** -Paste the three green tails into the PR body. +`validate` runs the same gates as `pnpm build` without emitting `dist/`. Each exits non-zero with a +located, corrective message. **Never report a change as done, and never open a PR, until all of them +pass.** Paste one green tail per gate into the PR body. ### ⛔ And then open it in a browser @@ -126,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`. | +| Gates | `pnpm validate && pnpm lint && pnpm typecheck && pnpm lint:i18n-gate`. | | 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/CLAUDE.md b/CLAUDE.md index 16a72f5..0e60115 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -5,8 +5,9 @@ Three rules there must never be missed: ## ⛔ Gate every metadata change -`pnpm validate && pnpm lint && pnpm typecheck` 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 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. ## ⛔ Worktree-first, never `git stash` diff --git a/README.md b/README.md index 5bfff00..f90ea10 100644 --- a/README.md +++ b/README.md @@ -44,9 +44,10 @@ titles, so seeding one on top of the other gives you both books. Every metadata change is gated: ```bash -pnpm validate # protocol schema + CEL predicates + bindings -pnpm lint # data-model conventions (reserved vocabulary, titles, master-detail) +pnpm validate # protocol schema + CEL predicates + bindings +pnpm lint # data-model conventions (reserved vocabulary, titles, master-detail) pnpm typecheck +pnpm lint:i18n-gate # every zh-CN key present — a missing one renders as English, silently ``` ## Layout diff --git a/docs/backlog/README.md b/docs/backlog/README.md index 4e8c31d..b8a73b6 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` 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 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.