Repository navigation
Commit 3fe5f2a
docs(pm-dispatch): runbook patrol names the review claim by its key and reads the owed list from check-owed-reviews (#31034)
<!-- claude-projects-attribution: {"github_login":"huangyiirene"} -->
_Requested by **Irene** · [project
thread](https://claude.ai/code/project/chan_01TJXtQ1tVD26ecLDZxFS67x?thread=cmsg_01TJXtQ1tVD26ecLDZxFS67xRaRtG7juPKBiHi7ami7kzB)_
Fixes #28763
Clause-②: no
Metadata-protocol: none
`dispatch-gates --tier` reads no path-derived model mandate for this
surface ("no path-derived mandate: the surface hits none of the 4
declared glob(s)"). Any contract-review tier owed is waived by the
maintainer's standing order in this project (2026-11-03); the
dispatching seat runs the contract review.
## 维护者速读
- 改了什么:`pm-dispatch` 巡查常设项两行(dispatch-runbook.md L44–45):巡查改跑 `node
scripts/pm/check-owed-reviews.mjs` 取 TAKE 行,认领行按键名
`Contract-review-claim:` 并指向 `contract-review.md`。
- 为什么改:旧行让复核者留 `Claim:` 评论,`check-owed-reviews.mjs` 读作
missing,「不双做」只在散文里成立;旧巡查只搜等复核标记,漏掉无标记的欠审、交接、hold 与失效认领。
- 风险与回滚:只改内部 agent 规程文字(`.claude/**`,不发包,无 changeset);回滚即 revert。
- 行账:文件净增行 0(245 行不变);两行 108 / 119 → 113 / 119 字节,均在 120 字节上限内。
- 先看:`.claude/skills/pm-dispatch/references/dispatch-runbook.md` L44–45
对照 `contract-review.md` L25–29。
- 需要你做的:无,席位落地。
## What changes
`.claude/skills/pm-dispatch/references/dispatch-runbook.md`, 〈巡查常设项〉,
two lines replaced in place:
- **L44 (SF-2):** the patrol ran `is:pr is:open
label:needs:contract-review` and now runs `node
scripts/pm/check-owed-reviews.mjs` (the list `contract-review.md` L25
names) and takes its `TAKE` rows, the status the script gives an owed
head with nobody on it and a trigger holding (`WAIT` rows stay with the
lane, `HELD` and `DONE` need nothing). The account-keyed self-exclusion
(剔除本账户署名的 PR) stays, as record 6561911910 ④ judged.
- **L45 (SF-1):** the reviewer left a `Claim:` comment (session,
account) and now posts a `Contract-review-claim:` line. Its form, lapse
and double-claim rule are pointed to `contract-review.md` (L27–29), with
no second spelling of the form in the runbook. "已有他席认领即跳过(同账户亦然)"
becomes "有活认领 ⛔ 不双做": a live claim blocks whoever holds it, the same
account included.
Measured on `main` at `41dc3024`:
- `contract-review.md` L27: `Contract-review-claim: <session> · head
<full sha> · <UTC>`; L28: the claim lapses when the head moves or after
2 h with no record, and on a double claim the first poster holds.
- `scripts/pm/check-owed-reviews.mjs --help`: `[--repo OWNER/NAME]
[--board OWNER/NAME] [--now ISO] [--json]`, report-only, default repo
`objectstack-ai/objectstack`. Its `claim` column reads
`Contract-review-claim:` lines only (`live` / `lapsed` / `none`). The
runbook spells the bare invocation, no flags (the file is mode 100644,
so it is run with `node`).
## Why
The runbook disagreed with `contract-review.md` and with the script that
every seat runs for the owed list, so a reviewer following the runbook
posted a claim the list could not see.
## Verification
<details><summary>Local gates on cdf61f3: 17 derived, 17 run with exit
0, 0 NOT MEASURED (`dispatch-gates --ran`)</summary>
- `node scripts/pm/dispatch-gates.mjs --commands --repo
objectstack-ai/objectstack` derived 17 commands for the 1 changed file.
All ran after `pnpm install --frozen-lockfile --ignore-scripts` and
`turbo run build` for `@objectstack/formula`, `@objectstack/lint`,
`@objectstack/objectql` (exit 0), each under a 900 s timeout with
`NODE_OPTIONS=--max-old-space-size=8192` and its exit code captured
before any pipe.
- All 17 exited 0, among them `check:pm-skill-ratchet` (line ratchet),
`check:pm-skill-id-lint`, `check:skill-frame-sync`,
`check:doc-authoring`, `check:pm-governed-merges` and
`check-comment-mask-corpus.mjs`.
- Also run, from the roster block: `pnpm check:pm-settings-deny-roster`
(roster under `.claude`) and `pnpm check:pm-governed-prose`, both exit
0.
- `--ran` printed: `17 derived famil(ies) accounted for — 17 run, 0
NOT-MEASURED (a DERIVED zero — all 17 recorded an exit code and none of
them is 3)`.
- `node scripts/check-commit-card-trailers.mjs --range
origin/main..HEAD`: exit 0 before the push.
</details>
## Human Minimum
- [x] 1. Schemas start as Zod; `packages/spec` holds no runtime logic.
(No schema touched.)
- [x] 2. Every name I added uses the casing for its kind. (No names
added.)
- [x] 3. No formatter ran. (Markdown only: no lintable source touched,
so `pnpm lint` was not run.)
- [x] 4. One issue, one branch off an up-to-date `main`, one pull
request.
- [x] 5. Nothing publishes (`.claude/**` only): `skip-changeset`; both
declaration lines are filled in above.
- [x] 6. `packages/spec` not touched; nothing to regenerate.
- [x] 7. No hand edits to `content/docs/references/`,
`packages/*/CHANGELOG.md` or `content/docs/releases/`.
- [x] 8. Title, body and comments are in English. (The 维护者速读 section is
Chinese, per the lane template.)
- [x] The *Before Submitting* list in CONTRIBUTING.md is done.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
https://claude.ai/code/session_01J8VVAmitqSAFN9FfDRLzzh
<!-- signed: domain:skills#3 · huangyiirene ·
session_01J8VVAj7CvjkGXvgXzd6RZ7 -->
---------
Co-authored-by: Claude <noreply@anthropic.com>1 parent 5bca14f commit 3fe5f2a
1 file changed
Lines changed: 2 additions & 2 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
41 | 41 | | |
42 | 42 | | |
43 | 43 | | |
44 | | - | |
45 | | - | |
| 44 | + | |
| 45 | + | |
46 | 46 | | |
47 | 47 | | |
48 | 48 | | |
| |||
0 commit comments