Skip to content

Commit 82ea3f5

Browse files
hotlongclaude
andauthored
docs(pm-dispatch): findings pipeline — hold verdicts swap finding→pm:on-hold, first-touch grading every round, auto-concentrated rounds, lane-evidence protocol, atomic ruling-recording (#8449) (#8602)
- finding now means exactly 'awaiting first grade': a hold verdict swaps finding → pm:on-hold in the same write; raw label count is the health metric; the exemption-comment mechanism is dropped in favor of the state transition (maintainer design input, 2026-08-13). - First-touch grading every round, budget 3-5, prioritized over re-verifying holds; auto-concentrated domain-batched round at finding >15 under the standing authorization. - Lane-evidence protocol codified (evidence yes, grades never; skills lane self-grades, repo-wide round skips it). - Ruling-recording is one atomic action with four parts (freshness gate, state transition, Blocked-by liveness, condition-fired check); the two report-only checker flags are described in the runbook, wiring is a separate card. - SKILL.md stays at 686/686 (net zero); details moved to references/dispatch-runbook.md, which has no ratchet. Claude-Session: https://claude.ai/code/session_018WuTtyckQa1VcXwgd52JpN Co-authored-by: Claude <noreply@anthropic.com>
1 parent 9cfdddd commit 82ea3f5

3 files changed

Lines changed: 86 additions & 31 deletions

File tree

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

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

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

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

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

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

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

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

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

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

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

604604
- **实际业务需求** — 它服务的是**真实存在的业务场景**,还是投机性能力面?判据要求**实测**(谁在

.claude/skills/pm-dispatch/references/dispatch-runbook.md

Lines changed: 58 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
# 派发与收集运行细则(references —— 按需加载)
22

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

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

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

39+
## 发现分诊轮细则(维护者 2026-08-13)
40+
41+
出处原话(逐字,未译),同日三段:「Finding 很多,是否建议集中分诊」…「按照你的建
42+
议」= 域分批集中轮的常设授权;「还有这个积压时常态,是否应该优化。」= 结构修复
43+
令;「积压数字本身有误导 —— 47 张里大半是带重启条件的健康 hold(它们本来就该躺着),
44+
那为什么标 finding」= 状态语义裁定,取代最初提议的「豁免评论 + 计数谓词」机制。
45+
46+
- **状态语义**:`finding` 曾同时编码「待首次定级」与「已定级 hold」两个状态,违反
47+
「标签即状态机,必须诚实」—— 健康 hold 群把裸计数顶成常红,真未定级堆藏在里面,
48+
逐轮重验稳定 hold 又吃掉未定级卡需要的预算。修法是**状态转换,不是豁免评论**:
49+
任何一轮定级出 hold ⇒ 同笔 `finding``pm:on-hold`(域标签保留;hold 评论按其
50+
既有纪律带日期/理由/具名重启条件,维护者裁 vs 座位定级的出处写在评论里,⛔ 不设
51+
第二个标签区分)。座位定级的 hold 本就是座位裁量内的决定,恰合 `pm:on-hold`
52+
声明语义;换标后继承其既有读者路径(派发前触发文件必查、具名重启条件),重验只
53+
在具名重启命中时发生 —— 曾提议的逐卡豁免评论机制已废弃,⛔ 不复活。
54+
- **首触定级(每轮,预算 3–5 张)**:零定级评论的卡优先 —— 未定级卡的前提准确性半
55+
衰期以天计,首触延迟是单卡最大成本(重验考古);旧 hold 重验不占这个预算。三选
56+
一:晋级(换 `pm:queue`)/ 关闭 not planned(附理由,列入轮次报告 —— 维护者可否
57+
决重开,PM 不等批准)/ hold(换标如上)。**判级发生在分诊轮,不在立单时** ——
58+
立单 dev 只有局部视野,照实立单不压级。
59+
- **自动集中轮**:诚实口径 `finding` >15 ⇒ 下一 fire 跑域分批集中轮,15–20 张、同
60+
族卡同上下文读;常设授权见上,⛔ 不逐次请示。**sweep 打包晋级五条**(维护者
61+
2026-08-07 批准):同类才打包(全部命中同一判据);逐项清单(落点 | before |
62+
after)是 PR 正文必备件;N 项之外零改动且 PR 自证;范围外发现照旧单开;sweep 卡
63+
是认领对象,成员单保持标签但不再是可派发候选。
64+
- **车道证据协议**:车道座位可在本车道 finding 上附证据/前提重验评论(待命五项之
65+
一),⛔ 不定级、不改标签 —— 定级单一生产者是分诊席。唯一例外:skills 车道的
66+
finding 由该席自分诊(座位贴协议既有裁定),全仓分诊轮跳过该车道,防双生产者。
67+
68+
## 落卡与裁决记录细则(维护者 2026-08-13)
69+
70+
出处原话(逐字,未译):「还有很多我发现分诊或者决裁后没有改状态,这个也是问题」…
71+
「这个也需要更新项目经理技能」。实测失效形状(一张决策卡三个叠加半状态):裁决当
72+
刻标签换了,但推荐已被更早的评论用测量证伪而正文未调和 —— 裁决者读正文,接受了一
73+
个已不成立的推荐;正文 `Blocked-by:` 的目标已交付一半(测量半边已合并)却原样保
74+
留,裁决后换标 `pm:blocked` 指着已解除的阻塞;裁决自带的激活条件在记录时已不成
75+
立,记录步骤无人检查。
76+
77+
- **裁决记录四件(原子,记录座位全责;维护者裁与代裁同规)**:① 鲜度门 —— 录前重
78+
读晚于正文最后编辑的评论,凡修正推荐/前提/选项的先调和正文(或在记录里内联声明
79+
分歧),对过期正文记录的裁决按过期论;② 状态转换同笔 —— `needs-user-decision`
80+
(或 finding 定级)换成结果态(`pm:queue`/`pm:blocked`/`pm:on-hold`/关闭),永
81+
不留挂;③ `Blocked-by:` 活性现验 —— 保留或新设的行当场核目标的相关交付物仍未交
82+
付(关单不是唯一解除方式,合并了一半也算解除),耗尽的行同笔删;④ 条件已判即判
83+
—— 条件性裁决在记录时评估其输入是否已知,已可判定的就地解决,⛔ 不留给未来静默
84+
触发。
85+
- **机械两旗(report-only,归半状态巡查;接线是另一张卡的事,⛔ 不随协议文本改脚
86+
本)**:旗一 —— open 卡标题带决策标记或线程含裁决记录、却仍挂
87+
`needs-user-decision`;旗二 —— `pm:blocked` 卡的 `Blocked-by:` 目标已关闭。
88+
「交付了一半的阻塞」是判断不是 grep,归上面第③件,⛔ 不进机械旗。
89+
- **落卡分析模板**(主文件②的 references 细则;英文):背景 / 带 re-check 命令的
90+
前提 / 具体问题 / 选项 / 推荐 / 相关单与 PR;标签就是维护者的收件箱,答复后按上
91+
面四件录裁。
92+
3893
## 云卡(`mode:cloud`)四课
3994

4095
一次性云卡用 `create_session`,⛔ 不用 create_trigger+fire(维护者 2026-08-07 拍

.claude/skills/pm-dispatch/references/seat-post-protocol.md

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

0 commit comments

Comments
 (0)