Skip to content
Merged
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
44 changes: 22 additions & 22 deletions .claude/skills/pm-dispatch/SKILL.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -47,17 +47,18 @@ metadata:
答复 ⇒ **自退**,不再读任何长文本 ——空转座位的成本上界就是这一次查询。

**座位 Routine 三原则**(创建细则见 `references/seat-post-protocol.md`):① 由维护者在 Routines
UI 创建并勾 GitHub 连接器、UI 钉模型(会话内 create_trigger 的Routine 拿不到 GitHub 工具,静默
零产出);② 创建后手动 fire 一轮烟测,判据取**GitHub 上的产出**;③ 每 fire 一轮:读座位
贴 → 从 labels 重建状态 → 跑一轮 → 结束,不继承上下文;fire 开始先读本座位上一轮产出时间,不足
一个轮次即自退(轮次互斥—— 宁少跑,不让两个同座位会话并行写标签)。跨 fire 长流程的前提:接力/停
放的每一项都落成 GitHub 上可读的文本,⛔ 不留在会话记忆里。
UI 创建并勾 GitHub 连接器、UI 钉模型(会话内 create_trigger 建的是静默零产出陷阱,细节在
references);② 创建后手动 fire 一轮烟测,判据取**GitHub 上的产出**;③ 每 fire 一轮:读座位
贴 → 从 labels 重建状态 → 跑一轮 → 结束,不继承上下文。**开轮互斥读法**(宁少跑,不让两个同座位
会话并行写标签):fire 开始、首个写动作之前读两个读数 —— 最近收班简报未满一个轮次,或最新「开
轮」标记晚于收班简报且自身未满一个轮次(轮中会话按设计还没发收班贴,开轮标记是它唯一可见的痕
迹)⇒ 自退;两读数皆清,先在座位贴留一行开轮标记(session ID + fire 时刻)再跑轮。跨 fire 长流
程的前提:接力/停放的每一项都落成 GitHub 上可读的文本,⛔ 不留在会话记忆里。

## 全体座位的不变量

- **所有状态在 GitHub,本地零状态。** 循环必须能从全新会话恢复;状态只经 issue 标签、assignee
、正文行与 `pm:seat` 座位贴读写。org Project 只是视图层,没有任何判据读它,⛔ 不进热路径 ——
GitHub 之外不维护任何跟踪状态。
- **所有状态在 GitHub,本地零状态。** 循环必须能从全新会话恢复;状态只经 issue 标签、assignee、
正文行与 `pm:seat` 座位贴读写,GitHub 之外不维护任何跟踪状态(org Project 只是视图,见多仓协调 5)。
- **PM 不写文件、不写代码。** 唯一例外:维护者**逐 PR 明示授权**的 `.claude/` 内部工具 PR
—— 授权原话引用在 PR 正文,复核需另一座位或维护者 walkthrough,⛔ 不得自审自合。
- **GitHub 上一切新内容用英文**(维护者 2026-08-06 指令);中文留两个通道 —— 轮次报告(chat)与派
Expand DownExpand Up@@ -122,9 +123,8 @@ UI 创建并勾 GitHub 连接器、UI 钉模型(会话内 create_trigger 的Rout
轮 —— 每一枪**以「幂等 —— 动手前先重读状态」开头**,只写关键判据(「若 X 则 Y」),其余指针化
(座位贴为唯一状态源);⛔ 不写结论、不含未经重读即可执行的祈使句。
- **放行认门禁 job 的结论,不认聚合读数**(承载门禁族的 job 须 `completed: success`,`in_progress`
不算);聚合只作阴性筛查(`blocked`/`dirty` ⇒ 再定位),放行按名定向读单条 job,⛔ 不拉全表(定位
失败才拉);advisory 门禁红着合并进 main 是共享损伤,任何车道发现都立即止血 + 立单。落地判据永远
两个读数:队列成员资格(timeline 事件,⛔ 非 `auto_merge` 字段)和 `origin/main`;踢出重投先认签名(见事实表)。
不算;聚合只作阴性筛查,放行按名定向读单条 job,⛔ 不拉全表);advisory 门禁红着合并进 main 是共
享损伤,任何车道发现都立即止血 + 立单;落地两个读数与踢出重投的签名纪律见事实表。
- **dev 自己死了 ≠ 维护者中止**:子代理消失(零推送/零分支/无报告)是正常死法,按死认领
回收处理;「维护者中止」只在有显式信号(原话,或宿主回报stopped by the user)时成立 —— 判
据是信号不是症状,⛔ 不得据推断立一道没有重启条件的门。
Expand DownExpand Up@@ -241,8 +241,7 @@ of record)。**读侧闭环(维护者 2026-08-12 批准):接管与巡检只读
收过不过得去?):in-scope ⇒ 挂父单sub-issue 下轮自动入队;顺带发现 ⇒ 独立立单进修复落地
仓 backlog(查重先行,⛔ 不借sub-issue 通道把未分诊的塞进池子);触 spec/公共契约 ⇒ 转 spec 座位
队列 + epic 侧写`Blocked-by:`;每次分流留一行审计评论。进度视图:父单维护 checklist 汇总评论,
决策仍锚在具体 sub-issue。收尾四步与僵尸回收细则见 `references/seat-post-protocol.md`;领地防
撞是声明式的 —— 撞上由合并队列兜底,所以领地声明越窄越诚实。
决策仍锚在具体 sub-issue。收尾四步、僵尸回收与领地防撞(声明式,越窄越诚实)细则见 `references/seat-post-protocol.md`。

## 分诊座位职责

Expand DownExpand Up@@ -293,12 +292,11 @@ hold 评论纪律见状态模型,hold 重验只在 `Restart-when:` 命中时发
道 finding 由该席自分诊,全仓轮跳过)。**自动集中轮**(常设授权,维护者 2026-08-13):`finding` >15 ⇒ 下
一 fire 跑域分批集中轮,sweep 打包晋级五条照用;原话、批量参数与五条细则见 `references/dispatch-runbook.md`。

**发版板(`target:<major>`;运维细则见 `references/seat-post-protocol.md`)。** 判据二元(⛔ 不
做优先级渐变 —— 渐变没人维护):「不修它,当前 RC 能不能发?」判阻塞四类:① 用户今天就撞的已发布
面缺陷;② 公开契约 declared≠enforced;③ 存量数据/迁移形状(发布后修不回);④ 发布说明里要为它道歉
的。拆分/分票时 `target:*` 随工作走,对每一半重跑二元判据,默认继承,不继承按四类写明理由。**每
张板同归本座位生产**(每板恰好一个生产者的不变量不变);「归零 = 可发版」指三张板都空。鲜度每
~5 轮;**发版时刻 = 清板不是重扫**;清板三选一与 pin 前置细则见 references。
**发版板(`target:<major>`;鲜度节奏、清板三选一、pin 前置等运维细则见
`references/seat-post-protocol.md`)。** 判据二元(⛔ 不做优先级渐变 —— 渐变没人维护):「不修它,
当前 RC 能不能发?」判阻塞四类:① 用户今天就撞的已发布面缺陷;② 公开契约 declared≠enforced;③ 存
量数据/迁移形状(发布后修不回);④ 发布说明里要为它道歉的。拆分/分票时 `target:*` 随工作走,对每
一半重跑二元判据,默认继承,不继承按四类写明理由。**每张板同归本座位生产**(每板恰好一个生产者)。

**高置信决策卡的分诊代裁(维护者 2026-08-12 裁定)。** 出处原话:「让他帮我从实际业务需求出发,
从平台长远合理性出发,从避免ai写代码犯错的角度出发,从创业阶段不扩散需求的角度出发综合分析……很
Expand DownExpand Up@@ -329,9 +327,11 @@ hold 评论纪律见状态模型,hold 重验只在 `Restart-when:` 命中时发
构性盲区。候选 = open、未 assign、无`needs-user-decision`;已排队父单的 open sub-issue 自动是
候选(`pm:epic` 父单的子树除外)。**每张候选读全文 + 全部评论**(裁决落在评论区,跳过评论就是跳
过裁决;评论还可能记着一半工作已交付);**派发前做前提过时检查(stale-premise check)—— 裁决同
罪**(裁决描述的也是当时的仓,写得权威、日期又近,恰恰更容易被当成现成事实 ——
`git log --oneline -20 -- <paths>` 之外,裁决实施卡再核被点名的动作在 `origin/main` 上还没被做
掉;花几分钟,不查则赔一次 agent 运行)。
罪**(裁决描述的也是当时的仓,写得权威、日期又近,恰恰更容易被当成现成事实),两半都查:**动作
面** —— `git log --oneline -20 -- <paths>` 之外,裁决实施卡再核被点名的动作在 `origin/main` 上
还没被做掉;**卡引用面** —— 裁决/卡片点名为阻塞、认领面、协调对象或「落地即启用」依赖的每张
issue,逐个读当前 open/closed/assignee,引用读到的现状 ⛔ 不引用裁决写作时的描述(树答不了「那
张卡还开着吗」;过时动作断言 dev 动手即自纠,过时卡引用不变红)。花几分钟,不查则赔一次 agent 运行。

**批次独立性。** 一批内任两单不得可能碰同一个包/registry/barrel/spec schema;拿不准就串行。**同
文件单跨轮硬串行;延后不是搁置**(被延后那一刻就把已知的坑记到该 issue 上)。**维护者明示豁免同
Expand Down
Loading