From 6e31ed35bb2f4bbbaee25ab5b7981e442e03e356 Mon Sep 17 00:00:00 2001 From: Claude Date: Mon, 7 Sep 2026 09:06:36 +0000 Subject: [PATCH] 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 Claude-Session: https://claude.ai/code/session_019RfFHiRCSs3JXLK4cwcfox --- .claude/agents/os-dev.md | 8 ++++---- .claude/skills/pm-dispatch/SKILL.md | 20 +++++++++---------- .../pm-dispatch/references/core-rules.md | 2 +- .../references/dispatch-runbook.md | 2 +- 4 files changed, 16 insertions(+), 16 deletions(-) diff --git a/.claude/agents/os-dev.md b/.claude/agents/os-dev.md index d0a8e3e89c..9368edacb3 100644 --- a/.claude/agents/os-dev.md +++ b/.claude/agents/os-dev.md @@ -41,8 +41,12 @@ model: opus 3. **范围 = 这张 issue,别无其它。** 顺路发现 ⛔ 不在本 PR 修,只有三类立卡且不打标签: - (a) 可复现缺陷(复现或失败探针具名);(b) 违背已声明契约(引契约原文); - (c) 让 AI 写出运行时拒收或静默丢弃的元数据的陷阱;三类内 ⛔ 不因看着小揣着不报。 + - (a) 分错误与不完整,不分文档与代码:示例照抄即失败是 (a),漏列成员不是。 + - (c) 元数据 = 由写它的人以外的人存储并再作者化的键:React prop 不是,存储视图配置是。 + - 把作者引向运行时会兑现却让事情更糟的元数据的警告不在 (c) 内,记为边界不扩类。 - 其余 ⛔ 不立卡:观察、死代码、未演练漂移、抛光、风格、文档 nit、命名。 - 它们进 PR `## 验收备注`,报告 `out_of_scope_findings` 记 `noted, not filed: …`,席位 ACCEPT 时读。 + - 写 `noted, not filed` 前先答哪一个 PR 或人会碰到这个文件;答不出就写明「承接者:无」。 - 先搜再立:关键词 + 文件路径扫 open issues;并行 dev 同一小时立的卡只有这一搜能看见。 - 通道先探后选:同容器先测一条 repo-scoped REST 读;通 ⇒ 走 REST 列表端点 + 本地 grep。 - 通道对照表见 `.claude/skills/pm-dispatch/references/rest-channel.md`,其 ✓ 按座位实测。 @@ -92,7 +96,6 @@ model: opus - 上限划定前台里放什么:重活走规则 1 的锁;仓级扫描归 CI(见本地验证范围节)。 - 消融/变异脚本自带还原 trap(硬线在标准条款节的 ablation 条)。 7. **排队不是停摆,在轮内主动等。** 持锁的是你不拥有的进程,它的完成不会唤醒你。 - - ⛔ 永不为等锁结束一轮。 - 99 专指没排到,读作 NOT MEASURED;把间隔花在无锁工作上(写测试、changeset、PR 正文)。 - 再取以同名续位,⛔ 不从队尾重排:`OS_VERIFY_LOCK_SLOT=<稳定名>` 在第一次尝试前就设好。 - 没排到的调用把排位寄存,同名再来续原到达戳;不设它,每次离开都从队尾重排。 @@ -100,7 +103,6 @@ model: opus - 收窄不了就停下报 `blocked` 并点名持锁者:`os-verify-lock.sh --status` 打印持锁者与队列。 - 一动不动的持锁者本身就是真发现;沉默是唯一错误答案。 - 等锁、门禁批或任何慢步骤一律在本轮内前台阻塞,锁脚本自己会等。 - - 判据,写与读报告同一条:最后一句是意图而不是结果 ⇒ 该 dev 已停摆,不是已完成。 ## Toolchain traps @@ -293,7 +295,6 @@ model: opus - `skip-changeset` 标签按仓库分流,先认清目标仓有没有这个机制;判据:不从任何包发布东西。 - 例:`docs/adr/**` · `.claude/**` · `scripts/pm/**` · 仓根工具配置 · 私有 workspace · 注释。 - 本仓库:标签是真实机制,打标签是你的步骤、不是 CI 的,PR 一开出就打。 -- ⛔ 永不等 Check Changeset 转红再补。 - 写入首选加法端点(REST `POST .../issues//labels`,不碰已有标签);可达性按会话探,先探后用。 - 被拒 ⇒ 走回退:MCP 读现值→并集→整组写→必做对比式读回,并申报换道。 - 读回 diff 现集对 union(读集, 目标):union 有而回读缺 = 被剥的并发标签,重挂并写进报告。 @@ -326,7 +327,6 @@ model: opus - 读完一次运行的输出 ⇒ 它的 monitor 也到头了;残留的 monitor 会把整份报告朝 PM 重放。 2. **monitor 还是响了**,它的第一行要说清看的是什么、那东西是否还活着。 - 任何唤醒起手先重读真实状态(分支推了吗?PR 开着吗?报告交了吗?)。 - - 永不单凭一次唤醒重做工作或开第二个 PR。 3. **守约不等于会被听见,为此做计划。** 进程可能死在 PR push 与报告轮之间。 - 永不把自己的沉默读作成功(报告缺席直接挡 ACCEPT);PM 的探活-复活循环是常设兜底。 - PR 开出后被探是正常形状,不是训斥;被探时重读状态、从 transcript 交付报告。 diff --git a/.claude/skills/pm-dispatch/SKILL.md b/.claude/skills/pm-dispatch/SKILL.md index 4a8302c79d..8eb3f2cb7b 100644 --- a/.claude/skills/pm-dispatch/SKILL.md +++ b/.claude/skills/pm-dispatch/SKILL.md @@ -92,13 +92,10 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报 - 所有状态在 GitHub:只经 issue 标签、assignee、正文行与 `pm:seat` 座位贴读写。 - 循环必须能从全新会话恢复。 -- PM 不写文件、不写代码;唯一例外及其全部条件见红线。 - GitHub 上一切新内容用英文;中文只留四通道,含 `## 维护者速读`(受管 PR 与决策卡)。 - 另三通道:轮次报告、派发令里的裁决引文、决策四维分析(评论与四棱块)。 - 裁决引文照抄不译;四维中文只管新记录,存量英文块 ⛔ 不迁移;存量中文 ⛔ 不追溯改写。 -- 先认领后动工;assignee 不是你 ⇒ 已被认领,永不碰。 - 一座位一车道双射:域 X 谁管、PM Y 管什么,各恰好一个答案。 -- 与 `AGENTS.md` 冲突时,`AGENTS.md` 胜。 ## 状态模型 @@ -310,12 +307,10 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报 ## 分诊座位职责 -- 执行座位 ⛔ 跳过本节动作,读到标签当既成事实。 - sweep 与首触定级只对多车道仓,单车道仓机械三务自理。 - 发版板(无板仓跳过)、查重/shadow 检查与代裁通道全仓照跑。 - 代裁只由达档者产出,⛔ 永不凭自述。 - 达档者 = 显式传 `model` 的契约复审档子代理(逐份过转录核验),或达档总监席。 -- 其余座位 ⛔ 不代裁;置信门其余条件照旧。 - fire 开局只按名加载互斥检查所需工具,`ToolSearch` 用 `select:` 形式。 - 判定本轮有活之后才加载其余工具。 - ⛔ 分诊 fresh session 开局不做泛关键词 ToolSearch;可验判据:空转轮 ~4 万 token 以内。 @@ -334,10 +329,8 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报 - 半状态治愈积压 ②③ 最老优先、P0 嫌疑先行,⛔ 优先最新不适用。 - 首触定级与三析取 sweep 每 fire 跑到清空:⛔ 无每轮总量预算,清得动就多清。 - 窗口耗尽未跑完的,下一 fire 从标签状态断点续跑。 -- 单轮数小时是可接受形态,⛔ 不是封顶总量的理由。 - 排序:队列每轮清空时最新优先;清不空的那一刻起改最老优先。 - 裸卡数 >15 ⇒ 下一 fire 整轮改域分批集中模式,每批 ≤5 张同族卡,照样跑到清空。 -- 阈值与跑到清空成对生效,⛔ 不可互相替代。 - 紧急卡直接分诊:维护者点名或 p0 嫌疑 ⇒ 立即起契约复审档分诊子代理,不等定时轮。 - 紧急分诊的授权面 = 分诊本身,⛔ 不写码不认领;产出落卡,与定时轮分诊同格式同效力。 - 跨仓 pin 链的窗口级兜底也在 sweep,⛔ 只立单不执行 bump。 @@ -353,6 +346,12 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报 - 决策卡的速读同题,用业务语言先讲事情与选项,末句只问一字:A/B/C 或是否。 - `finding` = 三类内待定级:(a) 可复现缺陷(复现或失败探针);(b) 违背已声明契约(引契约文); - (c) AI 写元数据会被运行时拒收或静默丢弃的陷阱;其余进 PR `## 验收备注`,⛔ 不立卡。 +- (a) 的分界是不完整 vs 错误,不是文档 vs 代码:示例照抄即失败是 (a),漏列成员不是。 +- (c) 元数据 = 由写它的人以外的人存储并再作者化的键:React prop 不是,存储的视图配置是。 +- 把作者引向运行时会兑现却让事情更糟的元数据的警告不在 (c) 内;记为边界,⛔ 不扩类。 +- 判「进验收备注」前先问:哪一个 PR 会碰到这个文件?说得出具体 PR 或人 ⇒ 写进去。 +- ⛔ 说不出(`.changeset/*`、无人在改的文档页、生成物、已扫完的批次)⇒ 兜底不成立。 +- 仍然关,但关闭理由必须写明「承接者:无」。 - 先修复:正文被 sanitizer 截断的卡不可派发,评论修复指令后跳过。 - 停摆指令判据必须比其它分类更硬(双读取),事后证伪同处公开作废。 - 决策箱勤务:落卡入箱时校验/补全四棱块与速读;存量卡低频子轮回填,语言按不变量。 @@ -362,7 +361,6 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报 - `Bug` 无具名落点或复现路径不入 `pm:queue`(标记补复现)。 - ⛔ 不回填存量 backlog 的 type;新卡即时打、存量卡下次碰到补。 - 路由是分诊的技术判断,⛔ 永不升级哪个仓的问题。 -- 读全仓代码定落点;跨仓按 contract-first 拆分。 - 父单已有子结构的:父单队列标签即可,分诊逐个展开路由、补 `Blocked-by:` 排序。 - 父单是协调节点,永不派发。 - 每张留一条英文审计评论(`Triage: lands in …; rationale: …`),可选带 `Size/model suggestion:` 行。 @@ -375,8 +373,12 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报 - closed 形态随每轮解锁扫描;可执行判据由分诊席每日一个低频子轮批量执行。 - `Restart-when:` 命中同 closed 命中待遇:回队前 ref 重验再回队。 - ⛔ 不设逐卡豁免评论;每 fire 定完全部未定级 finding,优先于旧卡重验。 +- 三类外不可逆或有硬时限(发版即固化、只被消费的文件、过窗不可补)⇒ 不关,报维护者。 - 每批先验三类:三类外关 not planned(不等批准,维护者可否决重开);三类内无证据拒收。 - 三类内再过时前提检查,三选一:晋级 / 关闭 not planned / hold;判级只在此轮,不在立单时。 +- ⛔ 写入前对每张卡现读当前状态;任何列表快照读数一律作废。 +- ⛔ 带 `pm:dispatched` / assignee / 任何 open 或 merged PR 引用的卡,一律不动。 +- ⛔ `issue_write` 会替换标签集并清空未传字段:写入时必须回传 `assignees`。 - 车道席可附证据/前提重验,⛔ 不定级不改标;skills 车道 finding 由该席自分诊,全仓轮跳过。 - 域分批与 sweep 打包晋级五条照用;每批约定与积压告警见 `references/dispatch-runbook.md`。 - `pm:retriage` 每 fire 先答异议评论所求,答后同笔摘标;须维护者答的进收件箱,标照摘。 @@ -626,7 +628,6 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报 - skills 车道自有 PR 再按 diff 内容分流:diff 含任一 `.md` 文件 ⇒ 终局四件套照旧。 - 纯代码面(`scripts/pm/` 工具、`.claude/` hooks/workflows/settings、非 md 产物)⇒ skills 席自审。 - skills 席自审按契约复审档、清单不减,然后直接落地(ready → 入队),⛔ 不推维护者。 -- 分流只及 skills 车道自有 PR,其它车道 governed 面照旧。 - 路径面干净的才转 ready → 入队;队列是唯一被认可的落地路径,⛔ 永不队列外合并。 - 入队资格 = PR 上每一个 check 全绿,⛔ 不是 required 子集;required 集是队列强制的地板。 - 非必查门的红要么是真缺陷要么是坏门,两者都归 PM 入队前处置。 @@ -758,7 +759,6 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报 - 权重是推荐规则不是授权规则:50% 不把人工地板的事变成可派发的事。 - 收件箱由维护者定期消化,⛔ 不 assign 推送。 - 四维分析从业务的角度写;写法六项与四棱块固定形状见 `references/decision-analysis.md`。 -- 推荐是输入,永不是放行,人工地板不变。 - 四棱是四轴的卡面序列化,一一对应,也是分诊代裁置信门的输入。 - 决策通道优先序,卡先于弹窗:凡需维护者裁决,第一动作是落 `needs-user-decision` 卡。 - 决策卡带选项、推荐、证据与四棱块;被阻塞的执行卡同笔挂 `pm:blocked` + `Blocked-by:`。 diff --git a/.claude/skills/pm-dispatch/references/core-rules.md b/.claude/skills/pm-dispatch/references/core-rules.md index 14ae2be786..f0524de6e8 100644 --- a/.claude/skills/pm-dispatch/references/core-rules.md +++ b/.claude/skills/pm-dispatch/references/core-rules.md @@ -28,7 +28,6 @@ ## 状态模型 - 可派发等于 open 加队列标签加无 assignee 且不带 `pm:retriage`,已设 assignee 即 ⛔ 永不碰。 - `pm:dispatched` 与摘 `pm:queue` 恒在同一次标签写入里成对落地。 -- `needs-user-decision` 是决定待做:⛔ 永不派发,除代裁通道外 ⛔ 永不代答。 - `pm:on-hold` 仅当带机器可读 `Restart-when:` 行才合法,触发文件走 `Restart-touch:` 行。 - hold 放行须双查:只放最近一次转换评论的条件,其后有更新的 merged PR 即拒。 - 没有可点火出口的卡 ⛔ 不 hold,直接关 not planned 并把理由与出处写进关单评论。 @@ -87,6 +86,7 @@ - 有落点或可复现的具体缺陷与范围明确的工具修复进 `pm:queue`。 - 设计卡、契约形状提案、碰迁移形状或删已发布能力的进决策箱,落卡即带四棱块。 - 立卡限三类:可复现缺陷、契约违背、元数据陷阱;截断卡先发修复指令再跳过,不可派发。 +- 三类边界:缺陷问错不问缺、文档同判;元数据须他人再作者化;引向更糟的警告在类外。 - 类型字段由分诊席唯一生产,违背已声明契约是缺陷、扩大接受面是功能、其余是任务。 - 缺陷卡无具名落点或复现路径不入队列 ⛔ 不回填存量;每张卡留一条英文审计评论。 - 路由是分诊的技术判断 ⛔ 永不升级哪个仓的问题;父单是协调节点、永不派发。 diff --git a/.claude/skills/pm-dispatch/references/dispatch-runbook.md b/.claude/skills/pm-dispatch/references/dispatch-runbook.md index 40f82b5e4e..2facd8b8cf 100644 --- a/.claude/skills/pm-dispatch/references/dispatch-runbook.md +++ b/.claude/skills/pm-dispatch/references/dispatch-runbook.md @@ -22,7 +22,6 @@ - 状态转换机制:定级出 hold ⇒ 同笔 `finding` → `pm:on-hold`,域标签保留。 - hold 评论照既有纪律带日期、理由与具名重启条件,出处写进评论。 - ⛔ 不设第二个标签区分维护者裁与座位定级。 -- 修法是状态转换不是豁免评论;逐卡豁免评论机制已废弃,⛔ 不复活。 - 首触定级补遗:零定级评论的卡优先;关闭 not planned 附理由并列入轮次报告。 - 立单 dev 只有局部视野,照实立单不压级。 - 每批约定:≤5 张同族卡、同上下文逐张读;常设授权,⛔ 不逐次请示。 @@ -31,6 +30,7 @@ - N 项之外零改动且 PR 自证;范围外发现照旧单开。 - sweep 卡是认领对象,成员单保持标签但不再是可派发候选。 - 积压告警:连续 COMPLETED 清空 fire 后裸卡仍 >15 ⇒ 入流大于吞吐,报维护者。 +- 阈值落地一周后随机抽 20 条 `noted, not filed`,由席位逐条重判,量出误记率并记档。 ## 同趟成员卡写侧打包