From 6114e30fdd7492bce94d58213262dc32559be816 Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 9 Sep 2026 02:21:12 +0000 Subject: [PATCH 1/2] skills(pm-dispatch): name the acceptance-notes heading in English at all five sites MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The os-dev definition named the PR section `## 验收备注` while the language invariant admits Chinese on exactly four channels; devs were picking a side. The heading is now `## Acceptance notes` in the dev definition, the three SKILL.md sites (including the seat's ACCEPT read) and the runbook, rewritten in place with every line within the 120-byte cap; the four-channel list is not widened. Claude-Session: https://claude.ai/code/session_01HxLw5aKDPR5RJgyUR7Exkd Co-authored-by: Claude --- .claude/agents/os-dev.md | 2 +- .claude/skills/pm-dispatch/SKILL.md | 6 +++--- .claude/skills/pm-dispatch/references/dispatch-runbook.md | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.claude/agents/os-dev.md b/.claude/agents/os-dev.md index 5342ee9cc3..55d97fd60a 100644 --- a/.claude/agents/os-dev.md +++ b/.claude/agents/os-dev.md @@ -45,7 +45,7 @@ model: opus - (c) 元数据 = 由写它的人以外的人存储并再作者化的键:React prop 不是,存储视图配置是。 - 把作者引向运行时会兑现却让事情更糟的元数据的警告不在 (c) 内,记为边界不扩类。 - 其余 ⛔ 不立卡:观察、死代码、未演练漂移、抛光、风格、文档 nit、命名。 - - 它们进 PR `## 验收备注`,报告 `out_of_scope_findings` 记 `noted, not filed: …`,席位 ACCEPT 时读。 + - 它们进 PR `## Acceptance notes`,报告 `out_of_scope_findings` 记 `noted, not filed: …`,席位 ACCEPT 读。 - 写 `noted, not filed` 前先答哪一个 PR 或人会碰到这个文件;答不出就写明「承接者:无」。 - 先搜再立:关键词 + 文件路径扫 open issues;并行 dev 同一小时立的卡只有这一搜能看见。 - 通道先探后选:同容器先测一条 repo-scoped REST 读;通 ⇒ 走 REST 列表端点 + 本地 grep。 diff --git a/.claude/skills/pm-dispatch/SKILL.md b/.claude/skills/pm-dispatch/SKILL.md index 0f84f55ef3..e0d11cb4a1 100644 --- a/.claude/skills/pm-dispatch/SKILL.md +++ b/.claude/skills/pm-dispatch/SKILL.md @@ -345,11 +345,11 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报 - 决策卡落卡必带四棱卡面块与其上的「维护者速读」,⛔ 不留待有人接手再补。 - 决策卡的速读同题,用业务语言先讲事情与选项,末句只问一字:A/B/C 或是否。 - `finding` = 三类内待定级:(a) 可复现缺陷(复现或失败探针);(b) 违背已声明契约(引契约文); -- (c) AI 写元数据会被运行时拒收或静默丢弃的陷阱;其余进 PR `## 验收备注`,⛔ 不立卡。 +- (c) AI 写元数据会被运行时拒收或静默丢弃的陷阱;其余进 PR `## Acceptance notes`,⛔ 不立卡。 - (a) 的分界是不完整 vs 错误,不是文档 vs 代码:示例照抄即失败是 (a),漏列成员不是。 - (c) 元数据 = 由写它的人以外的人存储并再作者化的键:React prop 不是,存储的视图配置是。 - 把作者引向运行时会兑现却让事情更糟的元数据的警告不在 (c) 内;记为边界,⛔ 不扩类。 -- 判「进验收备注」前先问:哪一个 PR 会碰到这个文件?说得出具体 PR 或人 ⇒ 写进去。 +- 判「进 Acceptance notes」前先问:哪一个 PR 会碰到这个文件?说得出具体 PR 或人 ⇒ 写进去。 - ⛔ 说不出(`.changeset/*`、无人在改的文档页、生成物、已扫完的批次)⇒ 兜底不成立。 - 仍然关,但关闭理由必须写明「承接者:无」。 - 先修复:正文被 sanitizer 截断的卡不可派发,评论修复指令后跳过。 @@ -775,7 +775,7 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报 - `premise_still_valid: false` + `pr: null` 是合法终报,当再分诊输入复核,永不当失败派发。 - `status: needs_decision` 时 `open_questions` 必须非空。 - `out_of_scope_findings` 只列三类立卡与 `noted, not filed`;立卡查重先行、归挂、立在修复仓。 -- 席位在 ACCEPT 读 PR `## 验收备注`,其中实属三类的由席位补立;三类外已立的卡关 not planned。 +- 席位在 ACCEPT 读 PR `## Acceptance notes`,实属三类的由席位补立;三类外已立的卡关 not planned。 - PM 核验它们存在,并把同轮并行报告互相对读:两个 dev 同一小时审相邻代码会立出孪生卡。 ## 机械守卫索引 diff --git a/.claude/skills/pm-dispatch/references/dispatch-runbook.md b/.claude/skills/pm-dispatch/references/dispatch-runbook.md index 893ad06333..a09b72599a 100644 --- a/.claude/skills/pm-dispatch/references/dispatch-runbook.md +++ b/.claude/skills/pm-dispatch/references/dispatch-runbook.md @@ -27,7 +27,7 @@ - 每批约定:≤5 张同族卡、同上下文逐张读;常设授权,⛔ 不逐次请示。 - sweep 打包晋级五条:同类才打包(全部命中同一判据)。 - 逐项清单(落点、before、after)是 PR 正文必备件。 -- N 项之外零改动且 PR 自证;范围外发现按立卡三类门槛分流,三类外进验收备注、不单开。 +- N 项之外零改动且 PR 自证;范围外按立卡三类门槛分流,三类外进 Acceptance notes、不单开。 - sweep 卡是认领对象,成员单保持标签但不再是可派发候选。 - 积压告警:连续 COMPLETED 清空 fire 后裸卡仍 >15 ⇒ 入流大于吞吐,报维护者。 - 阈值落地一周后随机抽 20 条 `noted, not filed`,由席位逐条重判,量出误记率并记档。 From b9a54a77f75b381662f28e21f8bc341a623125ad Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 9 Sep 2026 02:21:12 +0000 Subject: [PATCH 2/2] docs(agents): the commit-trailer exemption is a reporting one; the pair stays model-free AGENTS.md's sentence prescribed the model-free trailer pair and, in the same breath, exempted "the harness-written Co-Authored-By trailer", which carries a model name; two seats read it two ways. The sentence now says the exemption is about REPORTING (a harness-written trailer is not declared a deviation), the pair a seat writes stays model-free, and landed history is not rewritten. The runbook's deviation line and the dev definition's commit clause say the same in place, and the partof gate's verbatim citation of that clause follows it. Claude-Session: https://claude.ai/code/session_01HxLw5aKDPR5RJgyUR7Exkd Co-authored-by: Claude --- .claude/agents/os-dev.md | 2 +- .claude/skills/pm-dispatch/references/dispatch-runbook.md | 2 +- AGENTS.md | 6 +++--- scripts/check-partof-closing-keyword.mjs | 6 +++--- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/.claude/agents/os-dev.md b/.claude/agents/os-dev.md index 55d97fd60a..c72e4ce0f0 100644 --- a/.claude/agents/os-dev.md +++ b/.claude/agents/os-dev.md @@ -278,7 +278,7 @@ model: opus - ⛔ 不写否定式的关单句,它照样关掉点名的卡:解析器无视否定,只匹配关键词 + `#`。 - 关键词是 `fix/fixes/fixed/close/closes/closed` 与 `resolve/resolves/resolved`;让它们远离其它卡号。 - 写 `# is not addressed here`、`out of scope: #` 或 `# remains open`。 -- PR 正文与 commit message 分开解析:卡片关系只在正文声明一次,commit ⛔ 不带卡片 trailer。 +- 卡片关系只在 PR 正文声明一次:commit ⛔ 不带卡片 trailer,其 trailer pair 一律 model-free。 - 标题与散文用英文(见 AGENTS.md);引用的中文裁决保持原文不译,改写引文就是改写裁决。 - 受管面(见 AGENTS.md)PR 正文带 `## 维护者速读(草稿)` 节,中文、业务角度,席位意见留空。 - 五段固定:改了什么/为什么改/风险与代价(含回滚)/席位意见/你要做的;席位定稿成评论。 diff --git a/.claude/skills/pm-dispatch/references/dispatch-runbook.md b/.claude/skills/pm-dispatch/references/dispatch-runbook.md index a09b72599a..10203a8409 100644 --- a/.claude/skills/pm-dispatch/references/dispatch-runbook.md +++ b/.claude/skills/pm-dispatch/references/dispatch-runbook.md @@ -213,7 +213,7 @@ - ⛔ 不在消费者侧打补丁;只写一个路径名,是要求 dev 在守约与修对之间二选一。 - 跨包常等于跨车道,PM 事后补跨座位声明。 - 模型标识只禁内容工件:PR 标题与正文、代码注释、文档、changeset、评论。 -- 两条豁免同属规则,⛔ 不再申报为偏差:一是 commit 的 `Co-Authored-By` 尾注(含 session 链接)。 +- 豁免不再申报为偏差:一是 harness 的 `Co-Authored-By` 尾注,免的是申报,trailer pair 仍 model-free。 - 另一条是 `.claude/agents/*` frontmatter 的 `model:`,`check:agent-model-declared` 要求。 - same-day churn 行:派发时 `git log origin/main --oneline -20 -- ` 见当天合并即加一行。 - 该行原文:基于合并后的代码工作,issue 引用的片段可能已变,先核对当前 main。 diff --git a/AGENTS.md b/AGENTS.md index caf2ac7379..b73ca8efc0 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -439,9 +439,9 @@ verbatim and a bare one lands under it, leaving two. ⛔ A tail bare footer on a platform's, not your form downgraded. Which layer does this is unknown; don't go establishing it. **Commit message:** an agent commit ends with the model-free trailer pair `Claude-Session: https://claude.ai/code/session_` and -`Co-authored-by: Claude `; no model identifier lands in a PR title or -body, a comment, a changeset, a doc or a code comment — the harness-written `Co-Authored-By` -trailer (with its session link) is the one exemption. +`Co-authored-by: Claude `; no model identifier lands in a PR title or body, +a comment, a changeset, a doc or a code comment. The one exemption is a REPORTING one: a harness-written +`Co-Authored-By` trailer is not declared a deviation; the pair stays model-free; landed history is not rewritten. **GitHub mutates body BYTES — spell poison-shaped tokens out in words, never literally.** Regex literals and script-tag-shaped tokens go in fenced code with the dangerous character diff --git a/scripts/check-partof-closing-keyword.mjs b/scripts/check-partof-closing-keyword.mjs index fb822185aa..950cef304b 100644 --- a/scripts/check-partof-closing-keyword.mjs +++ b/scripts/check-partof-closing-keyword.mjs @@ -504,9 +504,9 @@ export const COMMITS_FILE_ENV = 'PR_COMMITS_FILE'; */ const RELATION_CONTRACT = 'The contract is written down in the agent rules at .claude/agents/os-dev.md — ' - + '「PR 正文与 commit message 分开解析:卡片关系只在正文声明一次,commit ⛔ 不带卡片 trailer。」 ' - + '(The PR body and the commit messages are parsed separately: the card relation is declared ONCE, ' - + 'in the body, and a commit carries no card trailer.)'; + + '「卡片关系只在 PR 正文声明一次:commit ⛔ 不带卡片 trailer,其 trailer pair 一律 model-free。」 ' + + '(The card relation is declared ONCE, in the PR body; a commit carries no card trailer, ' + + 'and its trailer pair is model-free.)'; /** * Every sentence inside the corner brackets of a citation, in order.