Skip to content

Commit 6e31ed3

Browse files
committed
skills(pm-dispatch, os-dev): five measured refinements to the finding admission threshold
Read current state before every write (three lines in the finding-triage block), a named carrier for the acceptance-notes fallback (seat half in SKILL.md, dev half in os-dev.md), three criterion boundaries beside the three classes in all three carriers, one irreversibility gate before the close-not-planned line, and a falsifiable acceptance procedure in the runbook. Every pinned file stays at its pin by folding restated lines. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019RfFHiRCSs3JXLK4cwcfox
1 parent f48f3f1 commit 6e31ed3

4 files changed

Lines changed: 16 additions & 16 deletions

File tree

.claude/agents/os-dev.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,12 @@ model: opus
4141
3. **范围 = 这张 issue,别无其它。** 顺路发现 ⛔ 不在本 PR 修,只有三类立卡且不打标签:
4242
- (a) 可复现缺陷(复现或失败探针具名);(b) 违背已声明契约(引契约原文);
4343
- (c) 让 AI 写出运行时拒收或静默丢弃的元数据的陷阱;三类内 ⛔ 不因看着小揣着不报。
44+
- (a) 分错误与不完整,不分文档与代码:示例照抄即失败是 (a),漏列成员不是。
45+
- (c) 元数据 = 由写它的人以外的人存储并再作者化的键:React prop 不是,存储视图配置是。
46+
- 把作者引向运行时会兑现却让事情更糟的元数据的警告不在 (c) 内,记为边界不扩类。
4447
- 其余 ⛔ 不立卡:观察、死代码、未演练漂移、抛光、风格、文档 nit、命名。
4548
- 它们进 PR `## 验收备注`,报告 `out_of_scope_findings``noted, not filed: …`,席位 ACCEPT 时读。
49+
-`noted, not filed` 前先答哪一个 PR 或人会碰到这个文件;答不出就写明「承接者:无」。
4650
- 先搜再立:关键词 + 文件路径扫 open issues;并行 dev 同一小时立的卡只有这一搜能看见。
4751
- 通道先探后选:同容器先测一条 repo-scoped REST 读;通 ⇒ 走 REST 列表端点 + 本地 grep。
4852
- 通道对照表见 `.claude/skills/pm-dispatch/references/rest-channel.md`,其 ✓ 按座位实测。
@@ -92,15 +96,13 @@ model: opus
9296
- 上限划定前台里放什么:重活走规则 1 的锁;仓级扫描归 CI(见本地验证范围节)。
9397
- 消融/变异脚本自带还原 trap(硬线在标准条款节的 ablation 条)。
9498
7. **排队不是停摆,在轮内主动等。** 持锁的是你不拥有的进程,它的完成不会唤醒你。
95-
- ⛔ 永不为等锁结束一轮。
9699
- 99 专指没排到,读作 NOT MEASURED;把间隔花在无锁工作上(写测试、changeset、PR 正文)。
97100
- 再取以同名续位,⛔ 不从队尾重排:`OS_VERIFY_LOCK_SLOT=<稳定名>` 在第一次尝试前就设好。
98101
- 没排到的调用把排位寄存,同名再来续原到达戳;不设它,每次离开都从队尾重排。
99102
- 排队约 20 分钟无进展 ⇒ 先看这次检查能否收窄到不必持锁(收窄要申报,见干净收尾)。
100103
- 收窄不了就停下报 `blocked` 并点名持锁者:`os-verify-lock.sh --status` 打印持锁者与队列。
101104
- 一动不动的持锁者本身就是真发现;沉默是唯一错误答案。
102105
- 等锁、门禁批或任何慢步骤一律在本轮内前台阻塞,锁脚本自己会等。
103-
- 判据,写与读报告同一条:最后一句是意图而不是结果 ⇒ 该 dev 已停摆,不是已完成。
104106

105107
## Toolchain traps
106108

@@ -293,7 +295,6 @@ model: opus
293295
- `skip-changeset` 标签按仓库分流,先认清目标仓有没有这个机制;判据:不从任何包发布东西。
294296
- 例:`docs/adr/**` · `.claude/**` · `scripts/pm/**` · 仓根工具配置 · 私有 workspace · 注释。
295297
- 本仓库:标签是真实机制,打标签是你的步骤、不是 CI 的,PR 一开出就打。
296-
- ⛔ 永不等 Check Changeset 转红再补。
297298
- 写入首选加法端点(REST `POST .../issues/<n>/labels`,不碰已有标签);可达性按会话探,先探后用。
298299
- 被拒 ⇒ 走回退:MCP 读现值→并集→整组写→必做对比式读回,并申报换道。
299300
- 读回 diff 现集对 union(读集, 目标):union 有而回读缺 = 被剥的并发标签,重挂并写进报告。
@@ -326,7 +327,6 @@ model: opus
326327
- 读完一次运行的输出 ⇒ 它的 monitor 也到头了;残留的 monitor 会把整份报告朝 PM 重放。
327328
2. **monitor 还是响了**,它的第一行要说清看的是什么、那东西是否还活着。
328329
- 任何唤醒起手先重读真实状态(分支推了吗?PR 开着吗?报告交了吗?)。
329-
- 永不单凭一次唤醒重做工作或开第二个 PR。
330330
3. **守约不等于会被听见,为此做计划。** 进程可能死在 PR push 与报告轮之间。
331331
- 永不把自己的沉默读作成功(报告缺席直接挡 ACCEPT);PM 的探活-复活循环是常设兜底。
332332
- PR 开出后被探是正常形状,不是训斥;被探时重读状态、从 transcript 交付报告。

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

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -92,13 +92,10 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报
9292

9393
- 所有状态在 GitHub:只经 issue 标签、assignee、正文行与 `pm:seat` 座位贴读写。
9494
- 循环必须能从全新会话恢复。
95-
- PM 不写文件、不写代码;唯一例外及其全部条件见红线。
9695
- GitHub 上一切新内容用英文;中文只留四通道,含 `## 维护者速读`(受管 PR 与决策卡)。
9796
- 另三通道:轮次报告、派发令里的裁决引文、决策四维分析(评论与四棱块)。
9897
- 裁决引文照抄不译;四维中文只管新记录,存量英文块 ⛔ 不迁移;存量中文 ⛔ 不追溯改写。
99-
- 先认领后动工;assignee 不是你 ⇒ 已被认领,永不碰。
10098
- 一座位一车道双射:域 X 谁管、PM Y 管什么,各恰好一个答案。
101-
-`AGENTS.md` 冲突时,`AGENTS.md` 胜。
10299

103100
## 状态模型
104101

@@ -310,12 +307,10 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报
310307

311308
## 分诊座位职责
312309

313-
- 执行座位 ⛔ 跳过本节动作,读到标签当既成事实。
314310
- sweep 与首触定级只对多车道仓,单车道仓机械三务自理。
315311
- 发版板(无板仓跳过)、查重/shadow 检查与代裁通道全仓照跑。
316312
- 代裁只由达档者产出,⛔ 永不凭自述。
317313
- 达档者 = 显式传 `model` 的契约复审档子代理(逐份过转录核验),或达档总监席。
318-
- 其余座位 ⛔ 不代裁;置信门其余条件照旧。
319314
- fire 开局只按名加载互斥检查所需工具,`ToolSearch``select:` 形式。
320315
- 判定本轮有活之后才加载其余工具。
321316
- ⛔ 分诊 fresh session 开局不做泛关键词 ToolSearch;可验判据:空转轮 ~4 万 token 以内。
@@ -334,10 +329,8 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报
334329
- 半状态治愈积压 ②③ 最老优先、P0 嫌疑先行,⛔ 优先最新不适用。
335330
- 首触定级与三析取 sweep 每 fire 跑到清空:⛔ 无每轮总量预算,清得动就多清。
336331
- 窗口耗尽未跑完的,下一 fire 从标签状态断点续跑。
337-
- 单轮数小时是可接受形态,⛔ 不是封顶总量的理由。
338332
- 排序:队列每轮清空时最新优先;清不空的那一刻起改最老优先。
339333
- 裸卡数 >15 ⇒ 下一 fire 整轮改域分批集中模式,每批 ≤5 张同族卡,照样跑到清空。
340-
- 阈值与跑到清空成对生效,⛔ 不可互相替代。
341334
- 紧急卡直接分诊:维护者点名或 p0 嫌疑 ⇒ 立即起契约复审档分诊子代理,不等定时轮。
342335
- 紧急分诊的授权面 = 分诊本身,⛔ 不写码不认领;产出落卡,与定时轮分诊同格式同效力。
343336
- 跨仓 pin 链的窗口级兜底也在 sweep,⛔ 只立单不执行 bump。
@@ -353,6 +346,12 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报
353346
- 决策卡的速读同题,用业务语言先讲事情与选项,末句只问一字:A/B/C 或是否。
354347
- `finding` = 三类内待定级:(a) 可复现缺陷(复现或失败探针);(b) 违背已声明契约(引契约文);
355348
- (c) AI 写元数据会被运行时拒收或静默丢弃的陷阱;其余进 PR `## 验收备注`,⛔ 不立卡。
349+
- (a) 的分界是不完整 vs 错误,不是文档 vs 代码:示例照抄即失败是 (a),漏列成员不是。
350+
- (c) 元数据 = 由写它的人以外的人存储并再作者化的键:React prop 不是,存储的视图配置是。
351+
- 把作者引向运行时会兑现却让事情更糟的元数据的警告不在 (c) 内;记为边界,⛔ 不扩类。
352+
- 判「进验收备注」前先问:哪一个 PR 会碰到这个文件?说得出具体 PR 或人 ⇒ 写进去。
353+
- ⛔ 说不出(`.changeset/*`、无人在改的文档页、生成物、已扫完的批次)⇒ 兜底不成立。
354+
- 仍然关,但关闭理由必须写明「承接者:无」。
356355
- 先修复:正文被 sanitizer 截断的卡不可派发,评论修复指令后跳过。
357356
- 停摆指令判据必须比其它分类更硬(双读取),事后证伪同处公开作废。
358357
- 决策箱勤务:落卡入箱时校验/补全四棱块与速读;存量卡低频子轮回填,语言按不变量。
@@ -362,7 +361,6 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报
362361
- `Bug` 无具名落点或复现路径不入 `pm:queue`(标记补复现)。
363362
- ⛔ 不回填存量 backlog 的 type;新卡即时打、存量卡下次碰到补。
364363
- 路由是分诊的技术判断,⛔ 永不升级哪个仓的问题。
365-
- 读全仓代码定落点;跨仓按 contract-first 拆分。
366364
- 父单已有子结构的:父单队列标签即可,分诊逐个展开路由、补 `Blocked-by:` 排序。
367365
- 父单是协调节点,永不派发。
368366
- 每张留一条英文审计评论(`Triage: lands in …; rationale: …`),可选带 `Size/model suggestion:` 行。
@@ -375,8 +373,12 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报
375373
- closed 形态随每轮解锁扫描;可执行判据由分诊席每日一个低频子轮批量执行。
376374
- `Restart-when:` 命中同 closed 命中待遇:回队前 ref 重验再回队。
377375
- ⛔ 不设逐卡豁免评论;每 fire 定完全部未定级 finding,优先于旧卡重验。
376+
- 三类外不可逆或有硬时限(发版即固化、只被消费的文件、过窗不可补)⇒ 不关,报维护者。
378377
- 每批先验三类:三类外关 not planned(不等批准,维护者可否决重开);三类内无证据拒收。
379378
- 三类内再过时前提检查,三选一:晋级 / 关闭 not planned / hold;判级只在此轮,不在立单时。
379+
- ⛔ 写入前对每张卡现读当前状态;任何列表快照读数一律作废。
380+
- ⛔ 带 `pm:dispatched` / assignee / 任何 open 或 merged PR 引用的卡,一律不动。
381+
-`issue_write` 会替换标签集并清空未传字段:写入时必须回传 `assignees`
380382
- 车道席可附证据/前提重验,⛔ 不定级不改标;skills 车道 finding 由该席自分诊,全仓轮跳过。
381383
- 域分批与 sweep 打包晋级五条照用;每批约定与积压告警见 `references/dispatch-runbook.md`
382384
- `pm:retriage` 每 fire 先答异议评论所求,答后同笔摘标;须维护者答的进收件箱,标照摘。
@@ -626,7 +628,6 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报
626628
- skills 车道自有 PR 再按 diff 内容分流:diff 含任一 `.md` 文件 ⇒ 终局四件套照旧。
627629
- 纯代码面(`scripts/pm/` 工具、`.claude/` hooks/workflows/settings、非 md 产物)⇒ skills 席自审。
628630
- skills 席自审按契约复审档、清单不减,然后直接落地(ready → 入队),⛔ 不推维护者。
629-
- 分流只及 skills 车道自有 PR,其它车道 governed 面照旧。
630631
- 路径面干净的才转 ready → 入队;队列是唯一被认可的落地路径,⛔ 永不队列外合并。
631632
- 入队资格 = PR 上每一个 check 全绿,⛔ 不是 required 子集;required 集是队列强制的地板。
632633
- 非必查门的红要么是真缺陷要么是坏门,两者都归 PM 入队前处置。
@@ -758,7 +759,6 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报
758759
- 权重是推荐规则不是授权规则:50% 不把人工地板的事变成可派发的事。
759760
- 收件箱由维护者定期消化,⛔ 不 assign 推送。
760761
- 四维分析从业务的角度写;写法六项与四棱块固定形状见 `references/decision-analysis.md`
761-
- 推荐是输入,永不是放行,人工地板不变。
762762
- 四棱是四轴的卡面序列化,一一对应,也是分诊代裁置信门的输入。
763763
- 决策通道优先序,卡先于弹窗:凡需维护者裁决,第一动作是落 `needs-user-decision` 卡。
764764
- 决策卡带选项、推荐、证据与四棱块;被阻塞的执行卡同笔挂 `pm:blocked` + `Blocked-by:`

.claude/skills/pm-dispatch/references/core-rules.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@
2828
## 状态模型
2929
- 可派发等于 open 加队列标签加无 assignee 且不带 `pm:retriage`,已设 assignee 即 ⛔ 永不碰。
3030
- `pm:dispatched` 与摘 `pm:queue` 恒在同一次标签写入里成对落地。
31-
- `needs-user-decision` 是决定待做:⛔ 永不派发,除代裁通道外 ⛔ 永不代答。
3231
- `pm:on-hold` 仅当带机器可读 `Restart-when:` 行才合法,触发文件走 `Restart-touch:` 行。
3332
- hold 放行须双查:只放最近一次转换评论的条件,其后有更新的 merged PR 即拒。
3433
- 没有可点火出口的卡 ⛔ 不 hold,直接关 not planned 并把理由与出处写进关单评论。
@@ -87,6 +86,7 @@
8786
- 有落点或可复现的具体缺陷与范围明确的工具修复进 `pm:queue`
8887
- 设计卡、契约形状提案、碰迁移形状或删已发布能力的进决策箱,落卡即带四棱块。
8988
- 立卡限三类:可复现缺陷、契约违背、元数据陷阱;截断卡先发修复指令再跳过,不可派发。
89+
- 三类边界:缺陷问错不问缺、文档同判;元数据须他人再作者化;引向更糟的警告在类外。
9090
- 类型字段由分诊席唯一生产,违背已声明契约是缺陷、扩大接受面是功能、其余是任务。
9191
- 缺陷卡无具名落点或复现路径不入队列 ⛔ 不回填存量;每张卡留一条英文审计评论。
9292
- 路由是分诊的技术判断 ⛔ 永不升级哪个仓的问题;父单是协调节点、永不派发。

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222
- 状态转换机制:定级出 hold ⇒ 同笔 `finding``pm:on-hold`,域标签保留。
2323
- hold 评论照既有纪律带日期、理由与具名重启条件,出处写进评论。
2424
- ⛔ 不设第二个标签区分维护者裁与座位定级。
25-
- 修法是状态转换不是豁免评论;逐卡豁免评论机制已废弃,⛔ 不复活。
2625
- 首触定级补遗:零定级评论的卡优先;关闭 not planned 附理由并列入轮次报告。
2726
- 立单 dev 只有局部视野,照实立单不压级。
2827
- 每批约定:≤5 张同族卡、同上下文逐张读;常设授权,⛔ 不逐次请示。
@@ -31,6 +30,7 @@
3130
- N 项之外零改动且 PR 自证;范围外发现照旧单开。
3231
- sweep 卡是认领对象,成员单保持标签但不再是可派发候选。
3332
- 积压告警:连续 COMPLETED 清空 fire 后裸卡仍 >15 ⇒ 入流大于吞吐,报维护者。
33+
- 阈值落地一周后随机抽 20 条 `noted, not filed`,由席位逐条重判,量出误记率并记档。
3434

3535
## 同趟成员卡写侧打包
3636

0 commit comments

Comments
 (0)