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@@ -44,17 +44,20 @@ metadata:
| `mode:subagent` \| `mode:cloud` | 派发后端 | 按卡分流:S+M ⇒ `subagent`,`cloud` 只留 L/XL 等保留面(维护者 2026-08-12 裁定) |
| `#12 #34 …` | 显式 issue 清单,整体覆盖标签查询 | — |

无角色参数时按执行姿态运行,车道由座位贴认定。角色参数的意义:座位 Routine 的prompt 收敛
成一行
技能调用,座位行为全部版本化在 git,升级走技能 PR,⛔ 永不靠重建Routine 改行为。**探针先
无角色参数时按执行姿态运行,车道由座位贴认定。角色参数的意义:召唤/自排的 prompt 收敛
成一行技能调用,座位行为全部版本化在 git,升级走技能 PR。**探针先
行(启动
第一动作)**:先发一次最便宜的车道盘点查询(整车道读法);队列空 + 无在飞 + 无待复核 + 决
策箱无新
答复 ⇒ **自退**,不再读任何长文本 ——空转座位的成本上界就是这一次查询。

**座位 Routine 三原则**(细则见 `references/seat-post-protocol.md`):① 维护者在 Routines UI 创建、UI 钉
模型;② 手动 fire 烟测,判据取**GitHub 上的产出**;③ 每 fire 一轮:读座位贴 → 从 labels 重建状
态 → 跑一轮 → 结束,不继承上下文。**开轮互斥读法**(宁少跑,不让两个同座位会话并行写
**分诊席直连自排**(维护者 2026-08-27 裁,原话:「我觉得分诊也和普通项目经理一样走普通
的session,然后需要高级别处理的任务走 fable 子agent,然后自己默认定时1小时,除非人工要
求。」):分诊 = 普通直连会话、整席 `opus`(机械三务至多 opus);达档职责(代裁、条款②/契约
复审)走显式传 `model` 的 fable 子代理,逐份裁决过转录核验采信(细则见
`references/contract-review.md`);自排定时默认**收班时挂、延时 ≤55 分钟**(1 小时 prompt-cache TTL 减
分钟级抖动,整班守一条缓存链;用量超额 TTL 降至 5 分钟收益归零、compaction 轮照旧重写,皆
不改默认),维护者明示可改。**开轮互斥读法**(宁少跑,不让两个同座位会话并行写
标签;维护者 2026-08-27 裁「落协议」:近期窗口只管**未收班**活动):fire 开始、首个写动作之
前读四个读数,未收班活动任一未满一个轮次 ⇒ 自退 —— 最近收班简报;晚于它的最新
「开轮」标记(轮中会话在座位贴上唯一的痕迹);本车道 `pm:dispatched` 卡最新非本 session 的
Expand DownExpand Up@@ -145,11 +148,10 @@ seat-post-protocol);维护者明示召唤是仲裁:有简报径直坐席,无简
枚;union 有而回读缺 = 被剥,重挂并报告(对比只察觉、不预防);**承载闸门语义的标签**(如
`needs:contract-review`)挂与清两向同此四步,闸门被剥不是红灯是放行,与「从未挂过」在证据
上不可区分;多席可写面恒读回(防竞态覆盖,不只防 sanitizer);「API 200」≠「落地正确」。
- **PM 写进 GitHub 的文本 ⛔ 不用尖括号路径占位符**,改写成「后跟显式路径」的说法 ——
被 sanitizer 吃掉后剩下的裸命令读起来完整而其实不是(实测:一条派发令就
在「永不用裸形式」之前展示了它要禁的那条裸形式);backtick、围栏块与标题同吃,都不是
护身符。不产生这个构造才是修法,回读只是兜底:必须携带易损片段的评论(派发令与裁
决,不含例行标记)post 后读回。
- **PM 写进 GitHub 的文本 ⛔ 不用尖括号路径占位符**,改写成「后跟显式路径」的说法(被吃
后剩下的裸命令读来完整而其实不是;backtick、围栏与标题同吃都不是护身符,写侧形状见事
实表)。不产生这个构造才是修法,回读只是兜底:携带易损片段的评论(派发令与裁决,例行
标记除外)post 后读回。

## 平台读数纪律

Expand All@@ -166,10 +168,9 @@ seat-post-protocol);维护者明示召唤是仲裁:有简报径直坐席,无简
轮 —— 每一枪**以「幂等 —— 动手前先重读状态」开头**,只写关键判
据(「若 X 则 Y」),其余指针化
(座位贴为唯一状态源);⛔ 不写结论、不含未经重读即可执行的祈使句。
- **放行认门禁 job 的结论,不认聚合读数**(承载门禁族的 job 须 `completed: success`,`in_progress`
不算;聚合只作阴性筛查,放行按名定向读单条 job,⛔ 不拉全表);advisory 门禁红着合并进
main 是共享损伤,任何车道发现都立即止血 + 立单(main-red 跳队与锚卡两约定见
landing-operations B);落地两个读数与踢出重投的签名纪律见事实表。
- **放行认门禁 job 的结论,不认聚合读数**(判据 `completed: success`,定向读法见事实表);advisory
门禁红着合并进 main 是共享损伤,任何车道发现都立即止血 + 立单(main-red 跳队与锚卡两约
定见 landing-operations B);落地两个读数与踢出重投的签名纪律见事实表。
- **dev 自己死了 ≠ 维护者中止**:子代理消失(零推送/零分支/无报告)是正常死法,走死认领回
收;「维护者中止」只在有显式信号(原话,或宿主回报 stopped by the user)时成立 —— 判据是
信号不是症状,⛔ 不得据推断立一道没有重启条件的门。
Expand DownExpand Up@@ -339,9 +340,9 @@ skills,类似分诊」)—— 贴内指针指向其车道文件,升级走技能
(执行座位 ⛔ 跳过本节动作 —— 读到标签当既成事实。)职责按仓类执行(类别
见「多仓协调」首段):sweep 与首触定级只对多车道仓(单车道仓机械三务自理);发版板(无板仓
跳过)、查重/shadow 检查与代裁通道全仓照跑。**代裁通道保留、档位硬门**(维护者 2026-08-26
裁定,原话:「代裁通道如果是 fable 可以代裁,其他接受你的建议」):仅当运行席**实测服役模
型** = `claude-fable-5`(降档保险丝机器读数,⛔ 永不凭自述)才可代裁;通道只在分诊 Routine(钉
档)或项目总监席上运行,其余执行座位 ⛔ 不代裁;2026-08-12 置信门其余条件全部照旧
裁定,原话:「代裁通道如果是 fable 可以代裁,其他接受你的建议」):裁决只由**达档者**产出
(⛔ 永不凭自述)—— 分诊席显式传 `model` 的 fable 子代理(逐份过转录核验,2026-08-27 裁;见
`references/contract-review.md`)或达档总监席;其余座位 ⛔ 不代裁;2026-08-12 置信门其余条件照旧
**工具加载纪律(fire 开局)**:互斥检查/自退判断只按名加载所需工具 —— `ToolSearch` 用
`select:mcp__github__list_issues,mcp__github__issue_read` 形式,判定「本轮有活」之后才加载其余;⛔ 开
局不做泛关键词 ToolSearch(一次注入全家桶 schema —— 分诊席 2026-08-20 自测:空转轮 ~12 万
Expand All@@ -367,8 +368,8 @@ fire 跑全仓全量对账并归集日频职责;选层按 fire 时刻 ⛔ 不用
状恰是「带域标签无 pm-state」)、全部 `pm:seat` 贴、`qa-run` 记录(协议载体非工作);存量大时每
轮限量 —— 新入卡①优先最新,半状态治愈积压②③**最老优先、P0 嫌疑先行**,⛔ 优先最新
不适用(细则见 runbook)。**紧急卡直接分诊**
(维护者 2026-08-13):维护者点名或 p0 嫌疑 ⇒ 立即起 `claude-fable-5` 分诊子代理,不等 Routine 班
次;授权面 = 分诊本身(定级/路由/标签/既有评论格式),⛔ 不写码不认领;产出落卡,与 Routine
(维护者 2026-08-13):维护者点名或 p0 嫌疑 ⇒ 立即起 `claude-fable-5` 分诊子代理,不等定时轮
次;授权面 = 分诊本身(定级/路由/标签/既有评论格式),⛔ 不写码不认领;产出落卡,与定时轮
分诊同格式同效力(细则见 `references/dispatch-runbook.md`)。
**跨仓 pin 链的窗口级兜底也在本 sweep**(联动单第一产者仍是接受座位;⛔ 只立单不执行
bump):
Expand DownExpand Up@@ -414,7 +415,7 @@ sanitizer 截断的卡不

**发现分诊轮(队列的出水口)。** `finding` 恒 = 待首次定级、定级即离标(维护者 2026-08-13 意
见;换标与 hold 评论纪律见状态模型,hold 重验只在 `Restart-when:` 命中时发生 —— closed 形态随
每轮解锁扫描,可执行判据由分诊 Routine 每日一个低频子轮批量执行(十几条一行判据逐小时
每轮解锁扫描,可执行判据由分诊席每日一个低频子轮批量执行(十几条一行判据逐小时
跑是浪费,每日即消化节奏),命中同 closed 命中一个待遇:回队前 ref 重验再回队;⛔ 不设逐卡
豁免评论)。**每 fire 跑到清空**:⛔ 无每轮总量预算,当轮定完全部未定级 finding、优先于旧
卡重验;质量靠**每批 ≤5 张同族卡逐张读**,不靠封顶总量(维护者 2026-08-25,原话不译):
Expand DownExpand Up@@ -615,8 +616,8 @@ dev 侧早推分支 —— 远程分支是在飞工作最硬的证据。**死认
游,全仓最贵(条款②闸门见「入队与落地」)。**卡面对条款②的复述仍是条款②**(座位复述
会丢掉原文旁的例外,而被读的正是复述):额度耗尽豁免及其 `needs:contract-review` 补偿一并及
于它;豁免够不到的地板只有维护者裁决能设。**席位档策略(同 2026-08-20 裁决)**:skills 车道外
执行 PM 席默认 `opus` 会话,fable 保留给分诊 Routine(代裁 + 契约复审)、本席与条款②工作 ——
各自档位与 Routine UI pin 归既有条款(本行只记策略)。降档出口两条:**额度耗尽豁免**(维护者
执行 PM 席与分诊席默认 `opus` 会话,fable 保留给裁决/复审子代理、skills 席与条款②工作
—— 各自档位归既有条款(本行只记策略)。降档出口两条:**额度耗尽豁免**(维护者
2026-08-13
原话:「fable 如果用完了,可以用 opus」):仅当 fable 实测不可用(限流/墙杀中途,重派同样可降)
才落 `opus`,⛔ 不再往下;与**主动预降**(余量吃紧可预先降档),两者档位与理由皆记入认领评
Expand DownExpand Up@@ -852,9 +853,8 @@ main 红了约一小时,逐 PR 连环红到 fix-forward 才止)。本段只适
出处:维护者 2026-08-11 提问(「首先项目经理能不能查到相关的数据,其次是到达时间窗口工作就会停,
是否应该设置一个1小时的定时以监测时间窗口已经解锁」)。检测读数、盲区与恢复 playbook 细则见 `references/platform-readings.md`;常驻原则:

- **检测**:`ccusage blocks` 只有单容器视野、估成本不估套餐余量(账号级剩余额度无接口可查);
**权威的墙信号是失败本身**——撞墙报文里的重置时刻在那一刻可得、事前查不到,把它
记下来(工具读数与盲区在事实表)。
- **检测**:**权威的墙信号是失败本身**——撞墙报文里的重置时刻在那一刻可得、事前查不
到,把它记下来(`ccusage blocks` 等工具读数与其盲区在事实表)。
- **跨墙定时器**:拿到重置时刻 ⇒ 一发定点(reset + 缓冲)优先;没有 ⇒ 挂每小时 cron Routine,⛔
**不用 send_later 链** —— send_later 是 run-once、fire 后自禁用,投进死窗口那一发是否被重试
未实
Expand Down
54 changes: 27 additions & 27 deletions .claude/skills/pm-dispatch/references/contract-review.md
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
# 契约复审链细则(references —— 按需加载)

出处:主文件「入队与落地」条款②闸门(原则、双肢定义与 `CONTRACT_REVIEW_TIER` 单源住那
里);本表是 `needs:contract-review` 复审链细则,挂标、复审、清标时查阅;⛔ 不引用 issue 编号。
出处:主文件条款②闸门(原则/双肢与档位单源在彼);本表 = 复审链细则,⛔ 不引 issue 编号。

## 载体纪律(挂与清)

Expand All@@ -11,38 +10,39 @@
- **载体不迁移**(维护者 2026-08-18,原话:「中期把闸门迁到 PR review 的 Request Changes 上 我觉得
没必要」): 闸门载体保持本标签,⛔ 不迁 PR review / Request Changes、不为迁移留门;挂与清皆按
标签纪律的 read-modify-write 硬步骤写。
- **重挂前先查裁决**:闸门标签缺失 ⇒ 先 grep 卡片评论找现行复审结论 —— PASS 评论 + 标
签缺失 + PR head 自复审后未动 = **已复审清标**,不是被剥;仅当 head 在结论之后移动、或根
本无结论时才重挂(复审载体是卡上一行结论,`get_reviews` 读空不是「未复审」的证据)。
- **重挂前先查裁决**:闸门标签缺失 ⇒ 先 grep 卡评论找复审结论 —— PASS + 无标 + head 未
动 = 已清标非被剥;head 后移或无结论才重挂(`get_reviews` 读空 ≠ 未复审)。

## 复审资格与归属

- **资格** —— ① 跑在契约复审档位,硬条件,认定只认降档保险丝的机读;② 非该卡派发
席,已从资格条件放宽为路径偏好(维护者 2026-08-21,原话:「你自己就是 Fable,自己就可以审
核」): 经同一机读证实达档的派发席,可对自派的卡执行复审并清标(审的是低档实现者的
契约增量,非自身产物 —— 派发席不写代码);放宽的是独立席位,不是复审本身,主文件「⛔
禁止自查放行」禁的是免复审直放,不禁本路径;低于档位的席照旧留标等待。
- **归属**:常设 = 项目总监席人工召唤(维护者 2026-08-27 裁,原话与交接台账见
`lanes/director.md`;取代 skills 席自绑小时钟 —— 2026-08-23 钟实测已死,⛔ 不复活,召唤间隔
停放是设计安全态);分诊席达档时(经同一机读证实)照旧可清。只审契约增量 diff、结论一
行写在卡上、PASS 双载体同笔清标并清 review request 或留 review 评论,标清后卡方可入队。
- **资格** —— ① 跑在契约复审档位,硬条件,认定只认机读:自会话凭降档保险丝,子代理凭
转录核验(下节);② 非该卡派发席,已从资格放宽为路径偏好(维护者 2026-08-21,原话:「你自
己就是 Fable,自己就可以审核」):机读证实达档的派发席,可对自派的卡执行复审并清
标(审的是低档实现者的契约增量,非自身产物);放宽的是独立席位,不是复审本身,主文件「
⛔ 禁止自查放行」禁的是免复审直放,不禁本路径;低于档位的席照旧留标等待。
- **归属**(维护者 2026-08-27 裁:「契约复审也是很重要的职责,也是需要定时处理的」):常设
唯一 = **分诊席定时轮**,逐载体经转录核验的达档子代理复审,只审契约增量 diff、结论一
行写卡;PASS 双载体同笔清标并清 review request,标清后方可入队;FAIL label-flip 交接;卡在决策
⇒ 只进决策箱,⛔ 永不自裁;轮报设**复审清单**专节(同代裁清单强制审计形状)。总监席
= 召唤兜底,只处理分诊明示停放、核验失败在案或老化超期的载体,加决裁批次内 BLOCKED
分支;⛔ 永不与定时轮并行扫同一载体集。
- **清标即落地**(维护者 2026-08-25,原话:「审核通过你应该直接负责合并吧,还要等原始的项
目经理吗」):非受管 code PR 由**复审链同笔收口**:清标后按 `landing-operations.md` 走落地前
检(`mergeable_state` 先读、闭合关键词扫描、true-green 核 job 结论、ready 先于 auto-merge 不可
反)→ 转 ready → 挂 auto-merge/入队;车道 PM 窗口与 half-states 孤儿巡检退为**兜底**,⛔ 停手即
复现「就绪却无人落地」。**三样不变**:受管面照旧 draft-only + 人工/受托合并、⛔ 链永不
入队;FAIL / REWORK 路径原样;降档保险丝原样 —— 低于档位的席清不了标,故落不了地。
目经理吗」):非受管 code PR 由**复审链同笔收口**:清标后按 `landing-operations.md` 走落地前检
→ 转 ready → 挂 auto-merge/入队;车道 PM 窗口与 half-states 孤儿巡检退为**兜底**,⛔ 停手即复
现「就绪却无人落地」。**三样不变**:受管面照旧 draft-only + 人工/受托合并、⛔ 链永不入
队;FAIL / REWORK 路径原样;降档保险丝原样 —— 低于档位的席清不了标,故落不了地。

## 降档保险丝(机读)

- 每场开场**必调一次 `get_session`**(claude-code-remote MCP,无参)读 `external_metadata.last_served_model`,⛔
自述档位不是读数(静默降档腐蚀的恰是自述;实测与配置档陷阱见 platform-readings);读数 ≠
`CONTRACT_REVIEW_TIER` ⇒ 该场整体跳过、标签原样留置 —— 卡在队列外等待是安全态。
- **保险丝只对座位自会话有效**:`mode:subagent` 里的 `get_session` 量的是**派发会话**(实测:钉在
地板档的子代理读回父会话的档位,`session_context.model` 与 `last_served_model` 一致只是同一来源
引用两次,⛔ 不作互证)—— subagent 的实际服役档位现无法对 `CONTRACT_REVIEW_TIER` 自证,条
款②的 `mode:subagent` 派发因此恒保留 `needs:contract-review` 走复审链,「派发已在地板」的免审
跳过仅座位自会话成立。 **⛔ 反模式:派更高档位子 agent 去执行契约复审** —— 看似满足
档位,实为构造上不可测量(多次实测:子代理读回父会话档位并拒绝出裁决)。
- 契约复审 ⛔ 不适用额度耗尽豁免降档(豁免的对象是派发;复审的存在意义就是补偿一次
低于地板的派发)。
- **保险丝只测座位自会话**:`mode:subagent` 里的 `get_session` 量的是**派发会话**(实测:钉在地板
档的子代理读回父档,⛔ 不作互证),传参只是配置 ⛔ 不作达档读数;条款②的 `mode:subagent`
派发照旧恒保留 `needs:contract-review`,免审跳过仅座位自会话成立。
- **转录档位核验**(维护者 2026-08-27 裁)——「派更高档位子代理复审」曾构造上不可测
量,今仅核验通过才合法:采信/清标前 grep 子代理 transcript 中 harness 逐消息盖章的 `model` 字
段,产出裁决的每轮都须读到契约复审档位,见回退证据 ⇒ 裁决整体作废(重做或维护者路
径);父会话对裁决仅两个合法动作 —— **逐字采纳或整体作废**(理由仅机械三种:核验失
败/越范围/格式不完整),⛔ 永不改写/删节/润色,采信 = 证据清单核对,非实质重判。
- 契约复审 ⛔ 不适用额度耗尽豁免降档(豁免对象是派发;复审正为补偿低档派发而存在)。
Loading
Loading