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
52 changes: 26 additions & 26 deletions .claude/skills/pm-dispatch/SKILL.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -75,10 +75,10 @@ UI 创建并勾 GitHub 连接器、UI 钉模型(会话内 create_trigger 的Rout
| **assignee 已设** | 已认领/在飞 —— 不是你的就永不碰 |
| `pm:dispatched` | 已派发(派发评论记轮次);与摘 `pm:queue` **同一次标签写入**成对落地 |
| `needs-user-decision` | 决定**待做** —— 永不派发、除已裁代裁通道外永不代答;维护者的收件箱 |
| `pm:on-hold` | 决定**已做**且答案是「不是现在」—— 不派发也不催;hold 评论带**日期、理由、重启条件** |
| `pm:on-hold` | 决定**已做**且答案是「不是现在」—— 不派发也不催;hold 评论带**日期、理由、具名重启条件、出处**(维护者裁或座位定级 —— 出处住评论,⛔ 不设第二个标签区分) |
| `pm:blocked` + 正文行 `Blocked-by: #N` | 等上游 —— 选择期跳过,#N 关闭时由解锁扫描放回 |
| `pm:blocking` | 有 open 下游依赖者(分诊 sweep 自 `Blocked-by:` 索引推导的缓存,⛔ 不手工挂);进选择优先级全序 |
| `finding` | 观察类记录—— 持有态,待发现分诊轮定级,不占队列不进收件箱 |
| `finding` | 观察类记录,恒 = **待首次定级**(定级即离标:晋级换 `pm:queue` / 关闭 / hold 换 `pm:on-hold`;裸标签数即健康读数)—— 不占队列不进收件箱 |
| `target:<major>` | 发版阻塞 —— 每个 backlog 恰好一个生产者,见「发版板」 |
| `pm:epic`(父单) | 子树已委托 epic PM(会话与领地在父单正文;`label:pm:epic` 即全量索引)—— 其它 PM 不把其 sub-issue 当候选 |
| `pm:seat` | 座位登记贴 —— 协议载体,不是待分诊的工作 |
Expand DownExpand Up@@ -255,13 +255,12 @@ UI 创建并勾 GitHub 连接器、UI 钉模型(会话内 create_trigger 的Rout
(维护者 2026-08-13):维护者点名或 p0 嫌疑 ⇒ 立即起 `claude-fable-5` 分诊子代理,不等 Routine 班
次;授权面 = 分诊本身(定级/路由/标签/既有评论格式),⛔ 不写码不认领;产出落卡,与 Routine 分诊同格式同效力(细则见 `references/dispatch-runbook.md`)。

**分类动作**(每张三选一 + 一个修复通道):**`pm:queue`** —— 有具名落点或复现的具体缺陷、范围明
确的工具/门禁修复、恢复不变量的 finding、test-only pin,无可问之事; **`needs-user-decision`**
—— 设计卡、feature/契约形状提案、需要 appetite 的多周程序、碰存量数据迁移形状或删除已发布能
力的,落卡时**必带四棱卡面块**(见「升级与决策」),⛔ 不留待有人接手再补;**`finding`** —— 观察
类(死代码、未演练漂移、抛光;真实但今天没有用户撞上),持有态待定级;**Repair first** —— 正文
被 sanitizer 截断的卡不可派发,评论修复指令后跳过;停摆指令判据必须比其它分类更硬(双读取),事
后证伪同处公开作废。
**分类动作**(每张三选一 + 一个修复通道):**`pm:queue`** —— 有具名落点或复现的具体缺陷、范围明确
的工具/门禁修复、恢复不变量的 finding、test-only pin,无可问之事;**`needs-user-decision`** —— 设
计卡、feature/契约形状提案、需要 appetite 的多周程序、碰存量数据迁移形状或删除已发布能力的,落卡时
**必带四棱卡面块**(见「升级与决策」),⛔ 不留待有人接手再补;**`finding`** —— 观察类(死代码、未演
练漂移、抛光;真实但今天没有用户撞上),待首次定级;**Repair first** —— 正文被 sanitizer 截断的卡不
可派发,评论修复指令后跳过;停摆指令判据必须比其它分类更硬(双读取),事后证伪同处公开作废。

**原生 issue 类型 Bug/Feature/Task 是分诊的固定产出**(维护者 2026-08-12 裁定「同意」):分诊
座位是 `type` 字段的唯一权威生产者(立单者可预填,分诊校正 —— 与 `domain:*` 同一纪律);判据即
Expand All@@ -278,19 +277,19 @@ UI 创建并勾 GitHub 连接器、UI 钉模型(会话内 create_trigger 的Rout
。**「生产者在哪?」是常设分诊问题**:declared ≠ enforced 形状的卡先问谁在写这个字段 —— 答案通
常就是根因,并在派发前改变卡的范围与域标签。

**发现分诊轮(队列的出水口)。** 触发:每 ~5 轮,或 `finding` 存量 >~15 插队。对每条先做过时前提
检查(发现的准确性半衰期以天计),然后三选一:晋级(换 `pm:queue`)/ 关闭 not planned(附理由,列入
轮次报告 —— 维护者可否决重开,PM 不等批准)/ 持有(记一行为什么还留着)。**判级发生在这里,不在
立单时**(立单 dev 只有局部视野,照实立单不压级)。**sweep 打包晋级**(维护者 2026-08-07 批准)五
条:同类才打包(全部命中同一判据);逐项清单(落点 | before | after)是 PR 正文必备件;N 项之外零
改动且 PR 自证;范围外发现照旧单开;sweep 卡是认领对象,成员单保持标签但不再是可派发候选
**发现分诊轮(队列的出水口)。** `finding` 恒 = 待首次定级、定级即离标(维护者 2026-08-13 意见;换标
与 hold 评论纪律见 State model,hold 重验只在具名重启条件命中时发生,⛔ 不设逐卡豁免评论)。**首触定
级每轮跑**:预算 3–5 张、优先于一切旧卡重验,先过时前提检查再三选一 —— 晋级 / 关闭 not planned(维
护者可否决重开,PM 不等批准)/ hold;**判级发生在这里,不在立单时**。车道座位可附证据/前提重验,⛔
不定级不改标(唯一例外:skills 车道 finding 由该席自分诊,全仓轮跳过)。**自动集中轮**(常设授权,维
护者 2026-08-13):`finding` >15 ⇒ 下一 fire 跑域分批集中轮,sweep 打包晋级五条照用;原话、批量参数与五条细则见 `references/dispatch-runbook.md`

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

**高置信决策卡的分诊代裁(维护者 2026-08-12 裁定)。** 出处原话:「让他帮我从实际业务需求出发,
从平台长远合理性出发,从避免ai写代码犯错的角度出发,从创业阶段不扩散需求的角度出发综合分析……很
Expand DownExpand Up@@ -522,8 +521,8 @@ You are the reviewer of record —— **对 GitHub 核验,不对报告的自述
,加升级项、代裁清单(分诊)、awaiting a human merge 项。健康指标四个(总 open 数刻意不在其
中 —— 债密区发现快于关闭是循环在工作):**dispatchable inventory**(open `pm:queue` 未认领及趋
势);**decision inbox**(待维护者数;分诊简报还要点名带开放下游依赖的决策
卡 —— 从 `Blocked-by:` 反向索引现算);**finding median age**(老化 = 发现分诊轮欠账);**release
blockers**(三仓 `target:<major>`之和,归零 = 三张板都空)。
卡 —— 从 `Blocked-by:` 反向索引现算);**finding 数与中位年龄**(裸标签数即未定级数,hold 已换标不
在内;老化 = 首触欠账);**release blockers**(三仓 `target:<major>`之和,归零 = 三张板都空)。

**波次收工点(维护者 2026-08-09 裁定)。** 班内节奏:一波处理完 → 收工存档 → `/compact` → 再继续,
⛔ 不跑到被自动压缩。四步有序:① 收工点 = 会话内在飞归零(⛔ 不在复核中途压缩;云卡不挡 —— 热移
Expand All@@ -535,7 +534,7 @@ blockers**(三仓 `target:<major>`之和,归零 = 三张板都空)。

停:队列空或 `rounds` 用尽(**仅一次性调用适用**);一轮 ≥ 半数派发失败或升级(系统性问题,继续
烧 backlog 是浪费);维护者打断。**常设座位队列清空 ≠ 退场**,是切换待命姿态:巡检放宽 60–70 分
钟(有在飞收紧回 ≤45),待命五项 —— findings 配合(补证据、上报异议)、`pm:blocked` 解锁扫描(含回
钟(有在飞收紧回 ≤45),待命五项 —— findings 配合(附证据/前提重验,⛔ 不定级不改标)、`pm:blocked` 解锁扫描(含回
队前 ref 重验与扇出索引更新)、在飞/已入队 PR 跟到 MERGED、决策箱仅在报告中列出 ⛔ 不 nag、跨
车道备忘跟进。退场只有两个入口:维护者交接令(走交接收尾清单),或被惰性回收。

Expand DownExpand Up@@ -593,12 +592,13 @@ blockers**(三仓 `target:<major>`之和,归零 = 三张板都空)。
改绑并删除 —— 不是对齐也不是双写;反向裁只在产品语义明确要求时成立且必须写进裁决正文;留着未治
理侧等于给权限闸留旁路。

**落卡/升级流程**:① **先刷新卡片前提** —— 隔夜没动的卡默认按「前提未经验证」处理; **卡上每条
前提行自带一条 re-check 命令**(`git log … -- <path>`、REST compare、带引号精确名 grep、
`ls-remote | grep <branch>`),复升级时逐条**跑**一遍,零命中/变形的就地改写或撤卡。② 决策默认
**锚在所属 issue**(分析发评论、挂`needs-user-decision`、退出活动队列;标签就是维护者的收件箱,
答复后摘标回队);仅当决定无自然锚才单开 `[Decision] <一句话>` 卡。③ 分析(英文)含:背
景 / 带 re-check命令的前提 / 具体问题 / 选项 / 推荐 / 相关单与 PR。
**落卡/升级流程**:① **先刷新卡片前提** —— 隔夜没动的卡默认按「前提未经验证」处理;**卡上每条前提
行自带一条 re-check 命令**(`git log … -- <path>`、REST compare、带引号精确名 grep、`ls-remote |
grep <branch>`),复升级时逐条**跑**一遍,零命中/变形的就地改写或撤卡。② 决策默认**锚在所属 issue**
(分析发评论 —— 英文,模板见 references;挂 `needs-user-decision`、退出活动队列),无自然锚才单开
`[Decision] <一句话>` 卡。③ **答复/代裁到手,裁决记录是一个原子动作,四件同笔**(维护者 2026-08-13)
:鲜度门(录前重读晚于正文最后编辑的评论,有修正的先调和正文)/ 状态转换同笔(决策标签或 finding 定
级换结果态,永不留挂)/ `Blocked-by:` 活性现验(合并一半也算解除,耗尽行同笔删)/ 条件已判即判(输入已知的就地判掉);案例与机械两旗见 `references/dispatch-runbook.md`。
**每个方案必须沿三条固定评估轴分析,这是决策分析的核心原则,不是可选项:**

- **实际业务需求** — 它服务的是**真实存在的业务场景**,还是投机性能力面?判据要求**实测**(谁在
Expand Down
61 changes: 58 additions & 3 deletions .claude/skills/pm-dispatch/references/dispatch-runbook.md
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
# 派发与收集运行细则(references —— 按需加载)

出处:主文件「候选与批次」「分诊座位职责」「标签纪律」「派发」「收集」。原则住在
主文件;本表是选卡排序、紧急分诊、接手阻塞项、派发云卡、接手死 dev、处置停摆/重
放/失报那一刻查阅的操作细则。⛔ 不引用 issue 编号。
出处:主文件「候选与批次」「分诊座位职责」「标签纪律」「派发」「收集」「升级与决
策」。原则住在主文件;本表是选卡排序、紧急分诊、发现分诊、落卡与裁决记录、接手阻
塞项、派发云卡、接手死 dev、处置停摆/重放/失报那一刻查阅的操作细则。⛔ 不引用
issue 编号。

## 车道取卡全序与 `pm:blocking`(维护者 2026-08-13)

Expand DownExpand Up@@ -35,6 +36,60 @@
- 单一生产者纪律照旧:与「代扫」同一条边界 —— 分诊座位在班且已在处理同一张卡即让
行;紧急通道改变的是节奏,不是分类生产者的数目。

## 发现分诊轮细则(维护者 2026-08-13)

出处原话(逐字,未译),同日三段:「Finding 很多,是否建议集中分诊」…「按照你的建
议」= 域分批集中轮的常设授权;「还有这个积压时常态,是否应该优化。」= 结构修复
令;「积压数字本身有误导 —— 47 张里大半是带重启条件的健康 hold(它们本来就该躺着),
那为什么标 finding」= 状态语义裁定,取代最初提议的「豁免评论 + 计数谓词」机制。

- **状态语义**:`finding` 曾同时编码「待首次定级」与「已定级 hold」两个状态,违反
「标签即状态机,必须诚实」—— 健康 hold 群把裸计数顶成常红,真未定级堆藏在里面,
逐轮重验稳定 hold 又吃掉未定级卡需要的预算。修法是**状态转换,不是豁免评论**:
任何一轮定级出 hold ⇒ 同笔 `finding` → `pm:on-hold`(域标签保留;hold 评论按其
既有纪律带日期/理由/具名重启条件,维护者裁 vs 座位定级的出处写在评论里,⛔ 不设
第二个标签区分)。座位定级的 hold 本就是座位裁量内的决定,恰合 `pm:on-hold` 的
声明语义;换标后继承其既有读者路径(派发前触发文件必查、具名重启条件),重验只
在具名重启命中时发生 —— 曾提议的逐卡豁免评论机制已废弃,⛔ 不复活。
- **首触定级(每轮,预算 3–5 张)**:零定级评论的卡优先 —— 未定级卡的前提准确性半
衰期以天计,首触延迟是单卡最大成本(重验考古);旧 hold 重验不占这个预算。三选
一:晋级(换 `pm:queue`)/ 关闭 not planned(附理由,列入轮次报告 —— 维护者可否
决重开,PM 不等批准)/ hold(换标如上)。**判级发生在分诊轮,不在立单时** ——
立单 dev 只有局部视野,照实立单不压级。
- **自动集中轮**:诚实口径 `finding` >15 ⇒ 下一 fire 跑域分批集中轮,15–20 张、同
族卡同上下文读;常设授权见上,⛔ 不逐次请示。**sweep 打包晋级五条**(维护者
2026-08-07 批准):同类才打包(全部命中同一判据);逐项清单(落点 | before |
after)是 PR 正文必备件;N 项之外零改动且 PR 自证;范围外发现照旧单开;sweep 卡
是认领对象,成员单保持标签但不再是可派发候选。
- **车道证据协议**:车道座位可在本车道 finding 上附证据/前提重验评论(待命五项之
一),⛔ 不定级、不改标签 —— 定级单一生产者是分诊席。唯一例外:skills 车道的
finding 由该席自分诊(座位贴协议既有裁定),全仓分诊轮跳过该车道,防双生产者。

## 落卡与裁决记录细则(维护者 2026-08-13)

出处原话(逐字,未译):「还有很多我发现分诊或者决裁后没有改状态,这个也是问题」…
「这个也需要更新项目经理技能」。实测失效形状(一张决策卡三个叠加半状态):裁决当
刻标签换了,但推荐已被更早的评论用测量证伪而正文未调和 —— 裁决者读正文,接受了一
个已不成立的推荐;正文 `Blocked-by:` 的目标已交付一半(测量半边已合并)却原样保
留,裁决后换标 `pm:blocked` 指着已解除的阻塞;裁决自带的激活条件在记录时已不成
立,记录步骤无人检查。

- **裁决记录四件(原子,记录座位全责;维护者裁与代裁同规)**:① 鲜度门 —— 录前重
读晚于正文最后编辑的评论,凡修正推荐/前提/选项的先调和正文(或在记录里内联声明
分歧),对过期正文记录的裁决按过期论;② 状态转换同笔 —— `needs-user-decision`
(或 finding 定级)换成结果态(`pm:queue`/`pm:blocked`/`pm:on-hold`/关闭),永
不留挂;③ `Blocked-by:` 活性现验 —— 保留或新设的行当场核目标的相关交付物仍未交
付(关单不是唯一解除方式,合并了一半也算解除),耗尽的行同笔删;④ 条件已判即判
—— 条件性裁决在记录时评估其输入是否已知,已可判定的就地解决,⛔ 不留给未来静默
触发。
- **机械两旗(report-only,归半状态巡查;接线是另一张卡的事,⛔ 不随协议文本改脚
本)**:旗一 —— open 卡标题带决策标记或线程含裁决记录、却仍挂
`needs-user-decision`;旗二 —— `pm:blocked` 卡的 `Blocked-by:` 目标已关闭。
「交付了一半的阻塞」是判断不是 grep,归上面第③件,⛔ 不进机械旗。
- **落卡分析模板**(主文件②的 references 细则;英文):背景 / 带 re-check 命令的
前提 / 具体问题 / 选项 / 推荐 / 相关单与 PR;标签就是维护者的收件箱,答复后按上
面四件录裁。

## 云卡(`mode:cloud`)四课

一次性云卡用 `create_session`,⛔ 不用 create_trigger+fire(维护者 2026-08-07 拍
Expand Down
4 changes: 2 additions & 2 deletions .claude/skills/pm-dispatch/references/seat-post-protocol.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -101,8 +101,8 @@
条);等价的 org 级搜索 `org:… label:target:<major> is:open` 仅是备用写法。「归零
= 可发版」指三张板都空,单看主仓归零不是。⛔「姊妹仓命中即误标」的旧读法已废除 ——
它教读者销毁真实阻塞的唯一证据。
- 鲜度:与发现分诊轮同节奏(每 ~5 轮)对板上 open 项做过时前提检查,已修/不成立的摘
+ 一句评论。
- 鲜度:每 ~5 轮对板上 open 项做过时前提检查(原「与发现分诊轮同节奏」;首触定级改
为每轮后,本板自持此节奏),已修/不成立的摘牌 + 一句评论。
- 发版时刻 = 清板,不是重扫:板上每条三选一 —— 修掉 / 摘牌(不再成立)/ **明示接受
带病发布**(摘标签 + accepted-for-GA 评论留痕,进 release notes 的 known
issues);三仓各自执行、读数回贴,⛔ 不因「前端仓/独立部署」整批默认接受。
Expand Down
Loading