Skip to content

Commit d41e862

Browse files
committed
feat(pm): H13 age-alarm for the domain-without-pm-state half-state; heal-backlog oldest-first discipline
- scripts/pm/check-half-states.mjs: new H13 detector — a card carrying domain:* with no pm-state label, aged past one sweep cycle (2h; the triage Routine fires hourly), is reported as a defect of the healing loop, not inventory. Louder line when the card's own title/body self-declares P0/data-integrity: the emergency-triage channel is the mandated move. Needs the sweep's only unscoped listing — the shape is invisible to every label-scoped page by construction (it was not detected at all before this change). Report-only, exit conventions unchanged; 22 new self-test cases. - dispatch-runbook.md: 半状态治愈积压排序 — sweep half-state disjuncts ②③ process oldest-first, P0-suspect first; 优先最新 applies to fresh intake only. Paid at the 223-line ceiling by deduplicating text restated from SKILL.md/os-dev (replay-identity triple restatement, claim-spelling restatement, principle restatements, self-referential section enumeration). - SKILL.md: sweep line now scopes 优先最新 to fresh intake; 状态变更不 过夜 gains the waiting-is-a-state clause (who is awaited, since when, never in session memory; a P0-suspect wait mandates the emergency channel). Net-zero lines, paid by pointing two restated details at their runbook homes. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AeA3nU1B5Q2pgxqxgUrexd
1 parent 152bff8 commit d41e862

3 files changed

Lines changed: 207 additions & 33 deletions

File tree

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

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -97,11 +97,11 @@ references);② 创建后手动 fire 一轮烟测,判据取**GitHub 上的产出
9797
件**(维护者 2026-08-11 接受):hold 评论写触发文件清单,座位贴设「派发前必查」段,派发卡文件面与清单相交时点名该单、顺手活列为申报过的增项。
9898
- **`Blocked-by:` 行是机器可 grep 的反向索引**,一遍读喂三个职责:上游关单时放回被解锁的、按解
9999
锁扇出排序选择、**在合并后的 ref 上重验每张回队卡的文件面**(⛔ 只做第一件)。**一个标签存在
100-
,当且仅当有具名读者**;2026-08-11 的「⛔ 不落存储标签」已被维护者 2026-08-13 意见取代(原话
101-
:「被依赖的卡片是不是应该通过label标注提高优先级」):`pm:blocking` = 分诊 sweep 自该索引推导写
100+
,当且仅当有具名读者**;2026-08-11 的「⛔ 不落存储标签」已被维护者 2026-08-13 意见取代(原
101+
话见 runbook 全序节):`pm:blocking` = 分诊 sweep 自该索引推导写
102102
入/摘除的**缓存**,⛔ 不手工挂 —— 变的是缓存位置,推导本性与具名读者不变量未变(读者:选择优先级全序、列表页扫描)。
103103
- **状态变更不过夜**:标签挂了评论没跟上、assignee 设了没认领评论、结论只在 chat ——都是半状态
104-
,结束会话(含限流悬挂)前补齐成对或回滚半边(report-only 巡查见机械守卫索引)。**代执行他人指令
104+
,结束会话(含限流悬挂)前补齐成对或回滚半边(report-only 巡查见机械守卫索引)。**等待他座位也是状态,写在卡上才存在**(等谁、自何时,⛔ 不留在会话记忆);P0 嫌疑的等待 ⇒ 紧急直接分诊通道是义务不是选项(维护者 2026-08-19)。**代执行他人指令
105105
的关闭/作废,评论带出处三件(谁的指令、原话、在哪说的)** —— 无出处的关闭与误操作在证据上不可区
106106
分,会被兄弟席当误扫重开;同理适用于摘标签、回收认领等不可反推理由的动作。
107107
- **写后回读按风险定向;标签写恒为硬步骤 read-modify-write + 回读**(维护者 2026-08-18 裁定):① 先取现集 → ② 只增删目标标签 → ③ 写合并集 → ④ 写后回读核验 —— 整组 PUT 写的是本席快照,并发席落在你读与写之间的标签被静默剥掉,受害者常是你没打算碰的那枚;**承载闸门语义的标签**(如 `needs:contract-review`)挂与清两向同此四步,闸门被剥不是红灯是放行,「被剥」与「从未挂过」在证据上不可区分,回读是唯一察觉手段;
@@ -258,7 +258,7 @@ of record)。**读侧闭环(维护者 2026-08-12 批准):接管与巡检只读
258258
仓没有车道标签,这形状是它们队列卡的常态);③ 有 `domain:*` 无 pm-state。②③ 只取 `updated_at`
259259
早于 ~2 分钟的卡且不是可选项 —— 半标注卡是协议自己按设计生产的(一次标签写入即把老卡打成半标
260260
注),只带路由或状态机其一的卡对两个视图同时不可见。排除:`tracking`、`status:parked`(其正常形
261-
状恰是「带域标签无 pm-state」)、全部 `pm:seat` 贴、`qa-run` 记录(协议载体非工作);存量大时每轮限量、优先最新。**紧急卡直接分诊**
261+
状恰是「带域标签无 pm-state」)、全部 `pm:seat` 贴、`qa-run` 记录(协议载体非工作);存量大时每轮限量 —— 新入卡①优先最新,半状态治愈积压②③**最老优先、P0 嫌疑先行**,⛔ 优先最新不适用(细则见 runbook)。**紧急卡直接分诊**
262262
(维护者 2026-08-13):维护者点名或 p0 嫌疑 ⇒ 立即起 `claude-fable-5` 分诊子代理,不等 Routine 班
263263
次;授权面 = 分诊本身(定级/路由/标签/既有评论格式),⛔ 不写码不认领;产出落卡,与 Routine 分诊同格式同效力(细则见 `references/dispatch-runbook.md`)。
264264
**跨仓 pin 链的窗口级兜底也在本 sweep**(联动单第一产者仍是接受座位;⛔ 只立单不执行 bump):
@@ -467,7 +467,7 @@ issue 评论;④ draft PR 一存在立即 `subscribe_pr_activity` 硬步骤)全
467467
- **停摆永不自愈**:携带任务中途状态的完成通知本身就是停摆信号,立刻 SendMessage 附前台执行姿
468468
态句,⛔ 不等任何静默阈值(阈值是给「没有回答」的);复位走梯度,每次比上一次更具体,第三次停摆
469469
判 unreliable 按接手协议重派。这里是消费侧兜底,⛔ 不能写成「派发词写全了就可以不探」。
470-
- **通知重放先算身份再读内容**:去重三元组 `(issue, 分支, PR head sha)`,与已验收那份相同 ⇒ 记
470+
- **通知重放先算身份再读内容**:与已验收那份同身份(三元组定义见 runbook)⇒ 记
471471
「重放」即结束,⛔ 不重新验收不重复 ACCEPT;⛔ 到达不读作「还活着」,不到达也不读作「已死」。
472472
- **直接验收兜底(报告丢失 ≠ 验收停摆)**:(a) draft PR 在且 CI 全绿 + (b) 探活确认已死或 ≥2h 无
473473
推送 + (c) 报告未达 ⇒ 直接按 PR 验收(复核判据不减,细则见 runbook);先探活后翻 ready;舰队级

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

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

3-
出处:主文件。原则与条款主文住主文件;本表只放细则增量 —— 原话、参数、原文模板、
4-
执行步骤 —— 在选卡、分诊、落卡、云卡、接手与处置停摆/重放/失报那一刻查阅。⛔ 不引
5-
用 issue 编号。
3+
出处:主文件(原则与条款住那里);本表只放细则增量 —— 原话、参数、模板、步骤 ——
4+
在对应操作那一刻查阅;⛔ 不引用 issue 编号。
65

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

@@ -17,7 +16,12 @@
1716
出处(逐字,未译):「对于比较紧急的卡片,是否应该使用 fable 5 子agent直接分诊」。
1817
触发、授权面与同格式同效力在主文件;补遗:授权面不含派发(⛔ 不写码、不认领、不派
1918
发);单一生产者纪律照旧(与「代扫」同界)—— 分诊座位在班且已在处理同卡即让行;
20-
紧急通道改的是节奏,不是生产者数目。
19+
紧急通道改的是节奏,不是生产者数目。**半状态治愈积压排序**(维护者 2026-08-19,
20+
原话:「项目经理等分诊,但是没有切换 label,导致挂了很久。」「我刚和他说了他才处
21+
理。」):sweep 半状态析取②③**最老优先、P0 嫌疑先行**,「优先最新」只适用新入卡
22+
①,⛔ 永不适用治愈积压 —— 限量 + 最新优先令最老半状态结构性饿死,活过一个 sweep
23+
周期的半状态是治愈环自身的缺陷,不是库存;正文自报 P0/data-integrity 的命中即走
24+
本节紧急通道;机械年龄告警在半状态巡查脚本(细节以脚本头为权威)。
2125

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

@@ -149,36 +153,32 @@ subagent 在 PM 容器内运行,agent 定义与技能文本读**本地检出**,
149153
## 跨车道简单阻塞项直接接手(维护者 2026-08-13)
150154

151155
出处(逐字,未译):「如果当前任务依赖其他赛道的任务,如果判断简单,是否可以直接
152-
接手而不必持续等待」。判据与认领纪律在主文件;补遗:只覆盖「等一周 vs 做十分钟」
153-
的形状,认领评论 `Claim:` 首行拼写照旧;`packages/spec` 恒归 spec 座位,本条不豁
154-
免(唯一所有者规则更硬);**⛔ 不是「借调」回归**(借调已议已删)—— 判据是依赖形
155-
状,只做被本车道开卡 `Blocked-by:` 点名的那一个阻塞项,做完即回,⛔ 不顺手接第二
156-
张。
156+
接手而不必持续等待」。判据与认领纪律(含 `Claim:` 拼写)在主文件;补遗:只覆盖
157+
「等一周 vs 做十分钟」的形状;`packages/spec` 恒归 spec 座位,本条不豁免(唯一所
158+
有者规则更硬);**⛔ 不是「借调」回归** —— 判据是依赖形状,只做被本车道开卡
159+
`Blocked-by:` 点名的那一个阻塞项,做完即回,⛔ 不顺手接第二张。
157160

158161
## 停摆复位梯度
159162

160-
原则三条(停摆永不自愈、完成通知即停摆信号立刻 SendMessage、消费侧兜底)在主文
161-
件;本节是执行细则。姿态句全文:「前台(阻塞)同步执行全部步骤,中途不停止、不把
162-
构建/测试挂到后台等唤醒」。梯度逐级(原样重发同一句不算一次复位):① 复述执行姿
163-
态 → ② 点名下一个工具调用 + 明令禁止后台等待 → ③ 第三次停摆判 unreliable,按接手
164-
协议重派到该分支。自己挂的定时器不会唤醒自己;长验证管线的派发/接力词写明前台姿
165-
态;生产侧条款在 os-dev 定义。
163+
原则三条在主文件;本节是执行细则。姿态句全文:「前台(阻塞)同步执行全部步骤,中
164+
途不停止、不把构建/测试挂到后台等唤醒」。梯度逐级(原样重发同一句不算一次复位):
165+
① 复述执行姿态 → ② 点名下一个工具调用 + 明令禁止后台等待 → ③ 第三次停摆判
166+
unreliable,按接手协议重派到该分支。自己挂的定时器不会唤醒自己;长验证管线的派发/
167+
接力词写明前台姿态;生产侧条款在 os-dev 定义。
166168

167169
## 通知重放去重
168170

169-
原则(先算身份再读内容;⛔ 不重新验收、不重读 diff、不重复 ACCEPT;到达与不到达都
170-
不构成生死证据)在主文件;细则:重放形态可以完全正常、报告完整正确 —— monitor 按
171-
自己的 deadline 触发;身份 = 三元组 `(issue, 分支, PR head sha)` + 通知自报的守护
172-
对象(自报是「变便宜」不是前提,没自报就用三元组自己算);判定重放 ⇒ 台账记「重
173-
放,首达时间 T」即结束。
171+
原则在主文件;细则:重放形态可以完全正常、报告完整正确 —— monitor 按自己的
172+
deadline 触发;身份 = 三元组 `(issue, 分支, PR head sha)` + 通知自报的守护对象
173+
(自报是「变便宜」不是前提,没自报就用三元组自己算);判定重放 ⇒ 台账记「重放,
174+
首达时间 T」即结束。
174175

175176
## 直接验收兜底(报告丢失 ≠ 验收停摆)
176177

177178
触发三条件、舰队级例外与「先探活后翻 ready」在主文件;验收动作:逐文件核对 diff
178179
与认领申报的文件面,对照 `origin/main` 复核 PR 正文的前提声明与验证叙述,复核清单
179-
其余判据不减;抢先翻 ready 会撞上 agent 的收尾推送(竞态保护)。「推分支 → 开
180-
draft PR → 立即交报告」是保险不是效率优化,住在 os-dev 定义的 Definition of
181-
done,派发令只带增量。
180+
其余判据不减;抢先翻 ready 会撞上 agent 的收尾推送(竞态保护);「推分支 → 开
181+
draft PR → 立即交报告」契约(保险,非效率优化)住 os-dev 定义,派发令只带增量。
182182

183183
## 派发词构造细则
184184

0 commit comments

Comments
 (0)