Skip to content
Merged
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
4 changes: 2 additions & 2 deletions .claude/agents/os-dev.md
Original file line number Diff line number Diff line change
Expand Up @@ -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。
Expand Down Expand Up @@ -278,7 +278,7 @@ model: opus
- ⛔ 不写否定式的关单句,它照样关掉点名的卡:解析器无视否定,只匹配关键词 + `#<n>`。
- 关键词是 `fix/fixes/fixed/close/closes/closed` 与 `resolve/resolves/resolved`;让它们远离其它卡号。
- 写 `#<n> is not addressed here`、`out of scope: #<n>` 或 `#<n> remains open`。
- PR 正文与 commit message 分开解析:卡片关系只在正文声明一次,commit ⛔ 不带卡片 trailer。
- 卡片关系只在 PR 正文声明一次:commit ⛔ 不带卡片 trailer,其 trailer pair 一律 model-free
- 标题与散文用英文(见 AGENTS.md);引用的中文裁决保持原文不译,改写引文就是改写裁决。
- 受管面(见 AGENTS.md)PR 正文带 `## 维护者速读(草稿)` 节,中文、业务角度,席位意见留空。
- 五段固定:改了什么/为什么改/风险与代价(含回滚)/席位意见/你要做的;席位定稿成评论。
Expand Down
6 changes: 3 additions & 3 deletions .claude/skills/pm-dispatch/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -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 截断的卡不可派发,评论修复指令后跳过。
Expand Down Expand Up @@ -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 同一小时审相邻代码会立出孪生卡。

## 机械守卫索引
Expand Down
4 changes: 2 additions & 2 deletions .claude/skills/pm-dispatch/references/dispatch-runbook.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@
- 每批约定:≤5 张同族卡、同上下文逐张读;常设授权,⛔ 不逐次请示。
- sweep 打包晋级五条:同类才打包(全部命中同一判据)。
- 逐项清单(落点、before、after)是 PR 正文必备件。
- N 项之外零改动且 PR 自证;范围外发现按立卡三类门槛分流,三类外进验收备注、不单开。
- N 项之外零改动且 PR 自证;范围外按立卡三类门槛分流,三类外进 Acceptance notes、不单开。
- sweep 卡是认领对象,成员单保持标签但不再是可派发候选。
- 积压告警:连续 COMPLETED 清空 fire 后裸卡仍 >15 ⇒ 入流大于吞吐,报维护者。
- 阈值落地一周后随机抽 20 条 `noted, not filed`,由席位逐条重判,量出误记率并记档。
Expand Down Expand Up @@ -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 -- <paths>` 见当天合并即加一行。
- 该行原文:基于合并后的代码工作,issue 引用的片段可能已变,先核对当前 main。
Expand Down
6 changes: 3 additions & 3 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -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_<id>` and
`Co-authored-by: Claude <noreply@anthropic.com>`; 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 <noreply@anthropic.com>`; 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
Expand Down
6 changes: 3 additions & 3 deletions scripts/check-partof-closing-keyword.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down
Loading