Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 7 additions & 6 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,14 +27,15 @@ touches `src/`.
## Verify your work — after every metadata change

```bash
pnpm validate # protocol schema + CEL predicates (record.<field> existence) + widget bindings
pnpm lint # data-model conventions: reserved vocabulary, titles, master-detail, select options
pnpm validate # protocol schema + CEL predicates (record.<field> 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

Expand Down Expand Up @@ -126,7 +127,7 @@ docs/backlog/ work cards docs/requirements/
| PR | **Draft** PR against `main`, title = issue title, body: what changed · gate output · `Fixes #<n>`. 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. |
Expand Down
5 changes: 3 additions & 2 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -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`

Expand Down
5 changes: 3 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
8 changes: 4 additions & 4 deletions docs/backlog/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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.