Skip to content

Commit cb8f520

Browse files
docs(pm-dispatch): point the PR-body door's three pointers at it without restating the no-footer rule (#31079)
<!-- claude-projects-attribution: {"github_login":"huangyiirene"} --> _Requested by **Irene** · [project thread](https://claude.ai/code/project/chan_01TJXtQ1tVD26ecLDZxFS67x?thread=cmsg_01TJXtQ1tVD26ecLDZxFS67x2bRxGynbUjVmYxkdXkEU9Z)_ Fixes #31071 Clause-②: no Metadata-protocol: none `dispatch-gates --tier` reads a MANDATORY model tier for `.claude/skills/pm-dispatch/SKILL.md` (clause ① of the model-tiering ruling); it is waived by the standing order of the maintainer in this project (2026-11-03), and this card ran on the project's default model. The dispatching seat runs the contract review. ## 维护者速读 - 改了什么:三处指向 PR 正文门(`seat-post-protocol.md` L31)的指针各删掉自带的「不送页脚」副本,只留指针;规则唯一的家是 `seat-post-protocol.md` L32。 - 为什么改:#31050 → #31059 → #31071 链上每次评审都发现一处重述;本 PR 先全量扫描门的所有指针,一次清完,不再开第四张卡。 - 风险与回滚:只删内部 agent 规程里的重述文字,三文件行数不变、不发包(`skip-changeset`);回滚即 revert。 - 先看:`rest-channel.md` L17、`platform-readings.md` L290、`SKILL.md` L313 末尾;对照 `seat-post-protocol.md` L31–32。 - 两分钟验证:`node scripts/pm/check-skill-line-ratchet.mjs`,预期退出 0,三文件 319 / 458 / 82 行(上限不变)。 - 需要你做的:无,席位落地。 ## What changes Each pointer keeps pointing at the door; only its own copy of the rule goes. | File · line | `main` | head | |---|---|---| | `.claude/skills/pm-dispatch/references/rest-channel.md` L17 | `` …(`seat-post-protocol.md` 正文行,不送页脚)。 `` | `` …(`seat-post-protocol.md` 正文行)。 `` | | `.claude/skills/pm-dispatch/references/platform-readings.md` L290 | `` - ⇒ 该正文改走 `seat-post-protocol.md` 的 PR 正文行,不送页脚。 `` | `` - ⇒ 该正文改走 `seat-post-protocol.md` 的 PR 正文行。 `` | | `.claude/skills/pm-dispatch/SKILL.md` L313 (`Metadata-protocol:` row of the claim template) | `` …through the PR-body line of `references/seat-post-protocol.md`, with no footer (`references/platform-readings.md`)) `` | `` …through the PR-body line of `references/seat-post-protocol.md`) `` | The rule's home, unchanged: `seat-post-protocol.md` L32 `` - PR 正文不送页脚:中继 `issue_patch` 存 = 送、无追加(`platform-readings.md` 中继行)。 ``, under the door line L31. L32 also carries the `platform-readings.md` pointer that SKILL.md L313 dropped, so no reader loses the path to the reading. ## Tests None: the diff deletes restated instruction text, with no runtime behaviour to test. The gates below are the checks. ## Acceptance notes ### Line budget (`scripts/pm/check-skill-line-ratchet.mjs`, exit 0) | File | Lines (main → head) | Ceiling | Bytes (main → head) | Touched line bytes (main → head) | |---|---|---|---|---| | `references/rest-channel.md` | 82 → 82 | 82 | 7,739 → 7,726 | L17 118 → 105 | | `references/platform-readings.md` | 458 → 458 | 458 | 47,039 → 47,026 | L290 78 → 65 | | `SKILL.md` | 319 → 319 | 319 | 32,229 → 32,177 | L313 750 → 698 | Net lines 0 per file; no ceiling or pin moves. SKILL.md L313 sits inside the claim template's ```` ```text ```` fence (L302–L319); the ratchet's own `classifyLine` reads it as class `fence`, exempt from the 120 B cap, before and after. The other two touched lines are prose under 120 B on both sides. Bytes measured without the newline. ### Sweep (closes the chain #31050 → #31059 → #31071) Before editing, on `origin/main` 3f61e4f: `git grep -nE "PR 正文行|PR-body line|正文行|不送页脚|no footer" -- .claude`, plus a wider `页脚|footer` pass and every `seat-post-protocol` pointer. - Copies of the rule found: exactly the three lines above. Fixed here. - `.claude/agents/os-dev.md` L66 points at `seat-post-protocol.md` without spelling the rule. Left. - `platform-readings.md` L332–353 and L402–407 (including L335, L339, L405) are measurement readings, not pointers. Left. - The other `正文行` hits (`os-dev.md` L276–277, `SKILL.md` L92 and L109, `dispatch-runbook.md` L163, `state-machine.md` L27, `triage-duties.md` L24) mean a body line in general, not the PR-body door. Left. - `os-dev.md` L397 and L405 are the attribution-footer clause homed in AGENTS.md (不循环重贴页脚), a different rule. Left. - Other `seat-post-protocol` pointers (`lanes/director.md` L83, `seat-lifecycle.md` L23 and L63) point at other sections and spell no footer rule. Left. - `pm-dispatch` has no `evals/` directory. After this PR, `git grep -nE "不送页脚|no footer" -- .claude` finds only the home (`seat-post-protocol.md` L32) and the readings (`platform-readings.md` L335, L339, L405). ## Verification <details><summary>Local gates on 2125972: 22 derived, 22 run with exit 0, 0 NOT MEASURED (`dispatch-gates --ran`)</summary> - `node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack` derived 22 commands (17 pnpm, 5 direct node) for the 3 changed paths. Each ran under a 900 s timeout with `NODE_OPTIONS=--max-old-space-size=8192`, its exit code captured before any pipe, after building `@objectstack/formula`, `@objectstack/lint` and `@objectstack/objectql`. All 22 exited 0 on the first run. - They include `check:pm-skill-ratchet`, `check:pm-skill-id-lint`, `check:pm-governed-merges`, `check:pm-governed-prose`, `check:doc-authoring`, `check:skill-frame-sync`, `check-comment-mask-corpus.mjs` and the self-test of `check-harness-current.mjs`. - `--ran` printed: `22 derived famil(ies) accounted for — 22 run, 0 NOT-MEASURED (a DERIVED zero — all 22 recorded an exit code and none of them is 3)`. - Also run, outside the derived list: `pnpm check:pm-settings-deny-roster` (exit 0), the one artifact-roster family whose roster sits under `.claude`. </details> - `node scripts/pm/check-governed-merges.mjs --branch claude/project-thread-smbdef`: GOVERNED, Tier S (席内达档复核落地): `.claude/**` ×3; 6 changed lines (+3 / −3), under 3000. - `node scripts/check-commit-card-trailers.mjs --range origin/main..HEAD`: exit 0 before every push. ## 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.) - [x] 4. One issue, one branch off an up-to-date `main`, one pull request. - [x] 5. Nothing publishes (`.claude/**` only), so the PR takes `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_01J8VVAnKJn5WEgnj43PxAB8 Co-authored-by: Claude <noreply@anthropic.com>
1 parent cf4b9bf commit cb8f520

3 files changed

Lines changed: 3 additions & 3 deletions

File tree

‎.claude/skills/pm-dispatch/SKILL.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -310,7 +310,7 @@ Seat: `domain:<x>#<n>` (the seat number this PM sits on; absent = seat 1)
310310
File surface: `<预期触碰的目录>` (stop on breach; explain in the report)
311311
Container & model: `<S 级机械卡 / M / L>`, `mode:subagent | mode:cloud | mode:thread`, `model: <档位词,引当次 --tier 输出;天花板拼 CONTRACT_REVIEW_TIER,同行引其 MANDATORY 路径行或 reason:(逐卡裁决,或常设档位令的 id 与时刻);⛔ 不抄模型 id>`, `effort: <medium | high | xhigh | max,按卡难度定>`
312312
Clause-②: yes | no
313-
Metadata-protocol: added | narrowed | semantic | none (the kind of change to what a metadata author can write; the level table is AGENTS.md's Post-Task Checklist step 3; the dev copies it beside `Clause-②:` into the PR body and every changeset body; a kind other than `none`, or a `(narrowing)` arm, owes the PR body a third line the dev writes from the diff: `Skills-docs: updated here | follow-up owed — FILES | follow-up #N | none — REASON`; `updated here` = this diff teaches it in `skills/**` or the docs and the package's evals exercise it; the seat files the owed card and rewrites `owed — FILES` to `#N` before ACCEPT, through the PR-body line of `references/seat-post-protocol.md`, with no footer (`references/platform-readings.md`))
313+
Metadata-protocol: added | narrowed | semantic | none (the kind of change to what a metadata author can write; the level table is AGENTS.md's Post-Task Checklist step 3; the dev copies it beside `Clause-②:` into the PR body and every changeset body; a kind other than `none`, or a `(narrowing)` arm, owes the PR body a third line the dev writes from the diff: `Skills-docs: updated here | follow-up owed — FILES | follow-up #N | none — REASON`; `updated here` = this diff teaches it in `skills/**` or the docs and the package's evals exercise it; the seat files the owed card and rewrites `owed — FILES` to `#N` before ACCEPT, through the PR-body line of `references/seat-post-protocol.md`)
314314
Responsibility: `<whose code produces the risk, and the repo it lives in (objectstack ⇒ a platform card carries the fix, references/cross-repo-coordination.md rule 1) | the platform path that already covers it, or none | who reaches it, and whether anyone uses it today>` (defect cards and cards whose premise is a failing behaviour, else `n/a — not a defect card`; the dispatch prompt's ruling section repeats the three answers)
315315
Thread-read: <id of the newest comment on the card at the moment this claim is written, or none>
316316
Premise: holds | corrected <comment id> | inbox (the pre-dispatch premise reading, dispatch-runbook.md 派发前置)

‎.claude/skills/pm-dispatch/references/platform-readings.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -287,7 +287,7 @@
287287
- 经 `rerun-failed.mjs` 重跑 PR `ci.yml` 失败 job 仅一次,先在 PR 或卡写明 flake 理由;二败即真红。
288288
- `run_rerun_failed` 只收 `ci.yml`;他 workflow 的 flake 走下两条,⛔ 永不空提交、永不关了重开。
289289
- `pr-automation.yml`(`Check Changeset` 取消无后继):席位改正文记下 flake 理由,其 `edited` 即重跑。
290-
- ⇒ 该正文改走 `seat-post-protocol.md` 的 PR 正文行,不送页脚。
290+
- ⇒ 该正文改走 `seat-post-protocol.md` 的 PR 正文行。
291291
- `lint.yml`(检出超时):`main` 前进后中继 `pr_update_branch` 出真新 head 整套重跑;齐平即空操作。
292292
- 同一 head 上轻量兄弟 workflow `success` 加重量级载体 `cancelled` 是普通取代的预期签名。
293293
- 同名 `failure` 也会被带另一诊断的后一次 `failure` 取代 ⇒ 任何判定前先按名取最新一次。

‎.claude/skills/pm-dispatch/references/rest-channel.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
- 活着 = 工作流文件在 `main` 且 Actions 状态 `active`;维护者在 Actions UI 停用即整队回 `direct`。
1515
- dispatch 带会话令牌发往 objectstack;run 在 runner 上以逐次铸造、窄到目标仓的 App 令牌执行。
1616
- 闭合 op 表住 `fleet-write/ops.mjs`;读侧不走中继;批量恒走逐 op 工具。
17-
- 直调 `dispatch.mjs` 仅落地,与 PR 正文单笔 `issue_patch`(`seat-post-protocol.md` 正文行,不送页脚)。
17+
- 直调 `dispatch.mjs` 仅落地,与 PR 正文单笔 `issue_patch`(`seat-post-protocol.md` 正文行)。
1818
- 正文超 60,000 字节的那一笔 `post-stamped` 写走 `direct` 并印一行,身份是席位自己的用户。
1919
- run 失败记 5(post-stamped 4,close-cards 有步落地或读不回 4),UNCONFIRMED 6:只读,⛔ 永不重试。
2020

0 commit comments

Comments
 (0)