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
8 changes: 4 additions & 4 deletions .claude/agents/os-dev.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -41,8 +41,8 @@ model: opus
了。
探针遇 403 ⇒ 停下报 `blocked`,不进重试循环;只有网络错误才值得退避重试。**Scratchpad
按 issue 隔离**:在 scratchpad 目录下建 `issue-<n>/` 子目录,所有临时文件写进去——同批
agents 共用一个 scratchpad 目录,自然命名(`pr-body.md`)会被彼此的成功回执静默覆盖;
靠结构隔离,不靠记性。
agents 共用一个 scratchpad 目录,自然命名(`pr-body.md`)会被彼此的成功回执静默覆盖;靠结构隔
,不靠记性。
2. **issue 已由 PM 认领**(大家共享同一 GitHub 身份)。不要动 assignee;若发现与他人在途
工作重复,停下报 `blocked`。**PR 上不是你设置的状态属于另一个 actor——去问,永不去
「纠正」**:共享身份让所有人的写入都像你写的;被改写的 body 只是关于 body 的证据,不证
Expand DownExpand Up@@ -110,8 +110,8 @@ model: opus
6. **整条流水线在前台跑。** build 与 test 都是本任务的步骤:阻塞运行、读真实输出、继续。
⛔ 永不把验证挂在后台 watcher 上然后停轮(禁令与两种合法终态见「干净收尾」)。
**平台事实(2026-08-20 实测):容器把前台命令钉在 ~10 分钟上限,超时 SIGTERM 杀掉
(`exit 143`,日志常常连一个发现都没写出)。** 这不改前台纪律,它划定前台里放什么:
重活走规则 1 的锁 —— 串行化之后不再与并行 build 抢 CPU,争用下顶到上限的命令轻载只
(`exit 143`,日志常常连一个发现都没写出)。** 这不改前台纪律,它划定前台里放什么:重活走
规则 1 的锁 —— 串行化之后不再与并行 build 抢 CPU,争用下顶到上限的命令轻载只
~2 分钟;仓级扫描归 CI(见「本地验证范围」);消融/变异脚本自带还原 trap(硬线在「标
准条款」的 ablation 条)。
Expand Down
4 changes: 2 additions & 2 deletions .claude/skills/checklist-author/SKILL.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -58,5 +58,5 @@ metadata:
**没有子代理工具时,按角度顺序跑 —— 并在交付里声明这一轮是顺序执行的。** 会话里不
存在 Task/子代理工具是允许的退化路径,不是阻塞;五个角度仍要逐个走完,一个都不省。
但 SWEEP.md 的全部主张是「不同角度捕获不同的遗漏类,**因为读者彼此独立**」:塌缩成
一个读者后,补上的测试项依然成立,**「没有别的遗漏」这个结论不再成立** —— 不声明,
就没人分得清一轮降级的 sweep 和一轮完整的 sweep。
一个读者后,补上的测试项依然成立,**「没有别的遗漏」这个结论不再成立** —— 不声明,
没人分得清一轮降级的 sweep 和一轮完整的 sweep。
4 changes: 2 additions & 2 deletions .claude/skills/checklist-test/SKILL.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -146,8 +146,8 @@ expected-fail 探针 —— 永不在真实缺陷上把条款打成绿。
挂 `qa-run`,正常进分诊首触。清单准确性发现与 fixture 缺口归波次锚卡(sweep 跟踪
issue)收口,⛔ 不抽取;环境阻塞记录在案即可。逐条 `fail` 的四分法处置、收口评论的
机器行与抽取卡的溯源行见 §5。⛔ 认证 / 授权漏洞的抽取卡不写复现,见 Guardrails。
- **完成判据** —— 一个区只有在**每一项都有判定**时才算跑完。跑不完的一轮照常立单:
交出已有的判定,**外加一份点名未触达项的交接清单**,标题按上面的分数如实写。
- **完成判据** —— 一个区只有在**每一项都有判定**时才算跑完。跑不完的一轮照常立
单:交出已有的判定,**外加一份点名未触达项的交接清单**,标题按上面的分数如实写。
`not-run` 是诚实判定 —— 判 1 项、11 项没跑就写 `(1/12) · … · 11 NOT-RUN`。

同一份逐条款表 + 环境准备与测试的耗时之比,回报给维护者(chat),并链接已立的 issue。
Expand Down
40 changes: 20 additions & 20 deletions .claude/skills/pm-dispatch/SKILL.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -138,9 +138,9 @@ fire 一轮烟测,判据取**GitHub 上的产出**;③ 每 fire 一轮:读座位
- **写后回读按风险定向;标签写恒为硬步骤 read-modify-write + 回读**(维护者 2026-08-18 裁定):①
先取现集 → ② 只增删目标标签 → ③ 写合并集 → ④ 写后回读核验 —— 整组 PUT 写的是
本席快照,并发席落在你读与写之间的标签被静默剥掉,受害者常是你没打算碰的那枚;**承
载闸门语义的标签**(如 `needs:contract-review`)挂与清两向同此四步,闸门被剥不是红灯是放行,
与「从未挂过」在证据上不可区分,回读是唯一察觉手段;多席可写面恒读回(防竞态覆盖,不
只防 sanitizer);「API 返回 200」≠「落地内容正确」。
载闸门语义的标签**(如 `needs:contract-review`)挂与清两向同此四步,闸门被剥不是红灯是放
行,与「从未挂过」在证据上不可区分,回读是唯一察觉手段;多席可写面恒读回(防竞态覆
盖,不只防 sanitizer);「API 返回 200」≠「落地内容正确」。
- **PM 写进 GitHub 的文本 ⛔ 不用尖括号路径占位符**,改写成「后跟显式路径」的说法 ——
被 sanitizer 吃掉后剩下的裸命令读起来完整而其实不是(实测:一条派发令就
在「永不用裸形式」之前展示了它要禁的那条裸形式);backtick、围栏块与标题同吃,都不是
Expand DownExpand Up@@ -313,8 +313,8 @@ skills,类似分诊」)—— 贴内指针指向其车道文件,升级走技能
正文 + 晚于正文最后编辑的评论(维护者 2026-08-12 批准;更早的已被吸收,是存档不是现状),中
途状态
由卡上 claim/ACCEPT 评论承载。**热文件串行队是正文具名段**(区域写不清就只能整文件串
行)。无心跳,
活性惰性判定;竞态三招 —— 动手前重 fetch 正文、审计评论时间戳先到先得、写后回
行)。无心跳,活性惰性判定;竞态三招 —— 动手前重 fetch 正文、审计评论时间戳先到先得、
写后回
读。**换班报告默
认零建议**(维护者 2026-08-12 裁定,原话:「还有各车道下班时会提交 skills 建议有必要吗?就是那些
搞得后来skills越来越乱。」):强制建议清单已退役,离任报告只收三类 —— 原则错/缺(→ skills 席专题)
Expand All@@ -336,8 +336,8 @@ skills,类似分诊」)—— 贴内指针指向其车道文件,升级走技能
收过不过得去?):in-scope ⇒ 挂父单sub-issue 下轮自动入队;顺带发现 ⇒ 独立立单进修复落地
仓 backlog(查重先行,⛔ 不借sub-issue 通道把未分诊的塞进池子);触 spec/公共契约 ⇒ 转 spec 座
队列 + epic 侧写`Blocked-by:`;每次分流留一行审计评论。进度视图:父单维护 checklist 汇总评论,
决策仍锚在具体 sub-issue。收尾四步、僵尸回收与领地防撞(声明式,越窄越诚实)细则见
队列 + epic 侧写`Blocked-by:`;每次分流留一行审计评论。进度视图:父单维护 checklist 汇总评
论,决策仍锚在具体 sub-issue。收尾四步、僵尸回收与领地防撞(声明式,越窄越诚实)细则见
`references/seat-post-protocol.md`。

## 分诊座位职责
Expand DownExpand Up@@ -405,8 +405,7 @@ sanitizer 截断的卡不
`Task` 才是代裁候选)、发版板缺陷扫描(`type:Bug is:open`)、普通队列 Bug 优先平手判据。

**路由即分诊的技术判断,永不升级「哪个仓?」。** 读五仓代码定落点;跨仓的按contract-first
拆分;
父单已有子结构的,父单队列标签即可(sub-issue 自动成为候选),分诊逐个展开路由、补
拆分;父单已有子结构的,父单队列标签即可(sub-issue 自动成为候选),分诊逐个展开路由、补
`Blocked-by:`
排序,父单是协调节点**永不派发**。每张留一条英文审计评
论(「Triage: lands in …; rationale: …」)
Expand DownExpand Up@@ -511,8 +510,8 @@ sub-issue 自动是
**批次独立性。** 一批内任两单不得可能碰同一个包/registry/barrel/spec schema;拿不准就串
行。**同
文件单跨轮硬串行;延后不是搁置**(被延后那一刻就把已知的坑记到该 issue 上)。**家族派
发(family dispatch)是本条的范围澄清,不是豁免**:独立性防的是两个 agent 相撞同一区域,
一个 dev **有意**覆盖 N 张同区域已裁卡是平凡满足不变量,可折叠为一次派发(折叠认领约定见「认
发(family dispatch)是本条的范围澄清,不是豁免**:独立性防的是两个 agent 相撞同一区域,一个 dev
**有意**覆盖 N 张同区域已裁卡是平凡满足不变量,可折叠为一次派发(折叠认领约定见「认
领」节)。准入五门全过才可折:① 同缺陷形态同修法(⛔ 不是同关键词/同子系统);② 同包/区域(一
worktree、一 changeset、一队列位);③ **每张成员都已裁/已定级,⛔ 决策箱内一张不许**(承重
门:防
Expand DownExpand Up@@ -607,18 +606,18 @@ dev 侧推分支要早 —— 远程分支是在飞工作最硬的证据。**死
目经理技能 必须要使用 Fable 5」。**派发模型是 PM 的逐卡显式决定** —— 下限 `sonnet`(机械
卡:正确
性由门禁农场机械判定,失败在漏跑门不在判断);默认判断档 `opus`(M/L、裁决实施、任何带设
计判断的卡;
拿不准就升一档 —— 错派低档的返工贵过省下的额度);上限 `fable`(最重协议/流程/编排
计判断的卡;拿不准就升一档 —— 错派低档的返工贵过省下的额度);上限 `fable`(最重协议/流
/编排
卡,按卡取用非新
默认)。**⛔ 强制条款两条**:① 凡改**协议语义面**的卡一律 `model: "claude-fable-5"` —— 面 =
本 `SKILL.md` 主文件、决策框架拷贝所在文件(以 `check:skill-frame-sync` 强制处为准)与
`.claude/agents/os-dev.md`(2026-08-20 收窄,维护者原话:「接受你的建议」—— fable 当审计师用,不当
施工队用);仅 `references/**` 面、或任一 pm-dispatch 治理面上一行级机械文本改动的卡降为 **opus
施工**(纯机械一行 PM 酌定可至 sonnet 地板),**补偿控制即既有技能面复核档要求**(ACCEPT 路径
分叉 ①:复核席跑契约复审档位)—— opus 施工的治理面改动只经 fable 档复核到达维护者,⛔
不新增标签不新增链;② 凡**改变契约接受/拒绝行为或扩大公开面**的卡(`domain:spec` 语义面;
判据即分诊代裁的机械边界测试与 spec 席内分派判据 —— `references/lanes/spec.md`,⛔ 不另抄第
二份)一律 `claude-fable-5`(维护者
不新增标签不新增链;② 凡**改变契约接受/拒绝行为或扩大公开面**的卡(`domain:spec` 语义
面;判据即分诊代裁的机械边界测试与 spec 席内分派判据 —— `references/lanes/spec.md`,⛔ 不另
抄第二份)一律 `claude-fable-5`(维护者
2026-08-12 裁定,原话:「同意,就按语义面收窄,立卡并通知 spec 席」)—— 契约错毒化一切下
游,全仓最贵(条款②闸门见「入队与落地」)。**卡面对条款②的复述仍是条款②**(座位复述
会丢掉原文旁的例外,而被读的正是复述):额度耗尽豁免及其 `needs:contract-review` 补偿一并及
Expand DownExpand Up@@ -811,8 +810,8 @@ main 红了约一小时,逐 PR 连环红到 fix-forward 才止)。本段只适
计数不追记,只有改变修法作用域时才记)。四分支:已知 flaky ⇒ 原样重投;**已修签名再现
⇒ ⛔ 不重
投**,判新问题重新诊断;基上缺已合修复 ⇒ merge main 推新提交(重跑无效);新签名 ⇒ ⛔ 不
重投,
在 PR 与其 `Fixes` 卡各留完整签名与初判;每次处置留审计评论(重投写签名与台账依据)。
重投,在 PR 与其 `Fixes` 卡各留完整签名与初判;每次处置留审计评论(重投写签名与台账依
)。
- **依赖前棒才能转绿的 PR:draft 停放 + 签名级预期红清单 + 解除条件**;**多个已实现 PR 全碰
生成物
⇒ 串行接力一次只放行一个,每棒一整圈、交接语义不是文本** —— 两式全文见
Expand All@@ -833,8 +832,9 @@ main 红了约一小时,逐 PR 连环红到 fix-forward 才止)。本段只适
在内;老化 = 首触欠账);**发版阻塞**(release blockers;三仓 `target:<major>`之和,归零 = 三张板都
空)。

**波次收工点(维护者 2026-08-09 裁定)。** ① 收工点 = 会话内在飞归零(⛔ 不在复核中途压缩;
云卡不挡 —— 热移交见座位贴协议细则);② 收工存档 = 上下文里的判断 flush 到 GitHub(不过
**波次收工点(维护者 2026-08-09 裁定)。** ① 收工点 = 会话内在飞归零(⛔ 不在复核中途压
缩;云卡不挡 —— 热移交见座位贴协议细则);② 收工存档 = 上下文里的判断 flush 到 GitHub(不
夜义务),随后**立即派下一波**,⛔ 不等人闸。`/compact` 由维护者在终端会话择机执行,永远不
是派发前提;①② 令任何压缩无损,前提是 GitHub 恒为唯一权威 —— 失守时压缩即丢判断。

Expand Down
10 changes: 4 additions & 6 deletions .claude/skills/pm-dispatch/references/decision-analysis.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -9,8 +9,7 @@
## 适用面(边界)

- 只约束 **`needs-user-decision` 卡与决策箱讨论**的四维分析;内部工具卡(dev 派发用)的四维照
旧,
不强加行业类比。四条轴本身不变,轴定义与绑定句在主文件「升级与决策」。
旧,不强加行业类比。四条轴本身不变,轴定义与绑定句在主文件「升级与决策」。
- 只适用新记录,存量分析 ⛔ 不回改(new-records-only,与四维中文化同款先例)。

## 落卡分析模板(主文件「落卡/升级流程」②的 references 细则;中文,2026-08-19 裁)
Expand DownExpand Up@@ -39,10 +38,9 @@
面文本 grep,不依赖注释形状 —— sanitizer 纪律见平台读数);四棱各一行,用中文写(语言例外
见主文件
全体座位的不变量)—— ① 项目长远合理性(缩小还是扩大特例/契约增生);② 实际业务拉
动(今天谁撞上;
零拉动默认 defer/remove);③ 防 AI 犯错(闭合枚举优于自由结构、响亮拒绝优于静默容忍);④ 创
动(今天谁撞上;零拉动默认 defer/remove);③ 防 AI 犯错(闭合枚举优于自由结构、响亮拒绝优于
静默容忍);④ 创
业阶段
不扩散(remove 优于 declare-and-maintain,每个已声明的键都是永久义务);一行推荐 + 字母选项
(A/B/…);**一行强制置信缺口(「本分析看不见什么」)**。四棱行同受六项约束:每行论据从业
务立场写,
机制名词只作括号补充。
务立场写,机制名词只作括号补充。
12 changes: 6 additions & 6 deletions .claude/skills/pm-dispatch/references/dispatch-runbook.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -7,9 +7,9 @@

出处(逐字,未译):「被依赖的卡片是不是应该通过label标注提高优先级。项目经理处理任务清
单时,bug 是不是应该提高优先级。」全序本体与 `pm:blocking` 推导在主文件;补遗:级序理由
一行 —— p0 是显式裁定,blocking 一张挡多张,bug 是已坏的不变量、先于增强,卡龄防饿死;
写入与摘除都在分诊轮 sweep,依赖者全关即摘,手工挂上的按误标处理、sweep 对着索引校正;
种子与消费者注记在 `scripts/pm/ensure-pm-labels.sh`。
一行 —— p0 是显式裁定,blocking 一张挡多张,bug 是已坏的不变量、先于增强,卡龄防饿死;
入与摘除都在分诊轮 sweep,依赖者全关即摘,手工挂上的按误标处理、sweep 对着索引校正;种子
与消费者注记在 `scripts/pm/ensure-pm-labels.sh`。

## 紧急卡 fable 直接分诊(维护者 2026-08-13)

Expand DownExpand Up@@ -144,9 +144,9 @@ docs/指令类 M 卡碰不到 —— 归档义务因此只落云卡。
`create_session` 带 `source_url` 出生即持推送授权。同时带 `outcome_branch`(= 认领分
支)、显式 `model`(trigger 流不可指模型)、`title`(车道名开头,⛔ 不叫 os-dev;形如
`⚡ <车道> #<单号> <短语>`)。
2. **派发词必带自驱条款**(云会话回合一结束即停摆等 poke):⛔ 不为提问/中期汇报结束回合;
开放选择按裁决与评估轴自裁记入终报 open_questions;合法回合终点只有 (a) 推送完成 +
,或 (b) 硬阻塞详报。
2. **派发词必带自驱条款**(云会话回合一结束即停摆等 poke):⛔ 不为提问/中期汇报结束回
合;开放选择按裁决与评估轴自裁记入终报 open_questions;合法回合终点只有 (a) 推送完成 +
终报,或 (b) 硬阻塞详报。
3. **交付通道**:dev 自开 draft PR(`Fixes #<n>`,正文含验证记录)+ 终报以 issue 评论
(os-dev-report 标记)交付;未 attach 的姊妹仓够不着,跨仓跟进卡 PM 代立;trigger 定时会
话维持降级通道 —— 推送 outcome branch + 终报走最后一条会话消息,PM 代开 draft PR。
Expand Down
4 changes: 2 additions & 2 deletions .claude/skills/pm-dispatch/references/landing-operations.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -34,8 +34,8 @@
auto-merge 与队列成员资格)。

**转 ready / 挂 auto-merge 之前先读 `mergeable_state`**:`dirty` ⇒ 先 merge
`origin/main`(生成物在面上按 A 的固定序)再挂;`unknown` ⇒ 重读一次(惰性计算,
事实行见平台读数)。**ready + 全绿 ≠ 已入队 —— 队列从不主动拉 PR,入队是显式动
`origin/main`(生成物在面上按 A 的固定序)再挂;`unknown` ⇒ 重读一次(惰性计算,事实行见平台读
)。**ready + 全绿 ≠ 已入队 —— 队列从不主动拉 PR,入队是显式动
作。**零 `enqueued` 事件按序查:① `mergeable_state` 是否 `dirty`;②
enable-auto-merge 调用根本没落地(GraphQL、吃配额、回显两向不可靠,按既有陷阱行
重发一次,以 timeline 事件验证,⛔ 不看 `auto_merge` 字段);③ PR 碰
Expand Down
4 changes: 2 additions & 2 deletions .claude/skills/pm-dispatch/references/lanes/cli.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -20,8 +20,8 @@
聚合,`in_progress` 不是过;advisory 门禁红进 main 是共享损伤,照样止血立单。
- **PR 侧绿 ≠ 队列侧绿**;队列分支读法与边界在 platform-readings(条目名
`main/pr-{number}-{parent sha}`,parent sha 可重建队序;⚠️ ref 在出队后滞留)。
- `dispatch-gates.mjs` 只报**路径推导**的地板 —— 条款②从卡**内容**判且优先于它;
已知盲区:它不点名 `pnpm lint` 族 ⇒ 本车道派发令恒补一句「跑 `pnpm lint`」。
- `dispatch-gates.mjs` 只报**路径推导**的地板 —— 条款②从卡**内容**判且优先于它;已知盲
:它不点名 `pnpm lint` 族 ⇒ 本车道派发令恒补一句「跑 `pnpm lint`」。
- ⛔ 永不削弱门禁 —— 棘轮上跳是门禁在报你的改动有缺陷;规则文案里自带的逃生舱只用
于它描述的那种情形。

Expand Down
8 changes: 4 additions & 4 deletions .claude/skills/pm-dispatch/references/lanes/devx.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -11,8 +11,8 @@
据见 SKILL.md 多仓协调)。
- 边界:守护 skills 的门禁脚本在 `scripts/` 下时归本席 —— 判据是**被改文件的路
径**,SUBJECT 例外与 spec 三面切分在 SKILL.md 域车道表;`.claude/workflows/`
≠ `.claude/skills/`;**范围内的文件 ≠ 范围内的卡**,归属按卡的 `domain:*` 判,
反向亦然(本席卡的落点溢进他席文件面时,由此产生的人工合并等后果照单接受)。
≠ `.claude/skills/`;**范围内的文件 ≠ 范围内的卡**,归属按卡的 `domain:*` 判,反向亦然(本席卡
的落点溢进他席文件面时,由此产生的人工合并等后果照单接受)。

## 常设承诺

Expand All@@ -29,8 +29,8 @@

- **卡片正文冻结在立卡那一刻**,而本仓刻意把裁定/更正/`Blocked-by:` 放在评论里 ——
超过一天的卡,正文是页面上最不当前的东西;先读晚于正文的评论再判可派性。
- **量具在共享 checkout 上会静默说谎**:读内容用 `git show origin/main:` 带路径,
跑脚本必须在自己的 worktree,复核 diff 用具名 ref,⛔ 不用 `FETCH_HEAD`(它是共
- **量具在共享 checkout 上会静默说谎**:读内容用 `git show origin/main:` 带路径,跑脚本必须在自
己的 worktree,复核 diff 用具名 ref,⛔ 不用 `FETCH_HEAD`(它是共
享的,会被别的 agent 的 fetch 在两条命令之间冲掉)。
- **门禁的自述必须为真** —— 理由为假的门禁比没有门禁更坏(下一个读者会相信某风险
已被覆盖);新门禁靠**故意复现伤害**自证,语料已被修干净时加反空转肢(某个面读
Expand Down
4 changes: 2 additions & 2 deletions .claude/skills/pm-dispatch/references/lanes/skills.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -4,8 +4,8 @@

## 范围

- 两个技能根:`.claude/skills/**`(含 pm-dispatch 本体)+ `skills/**`(发布目录,
恒英文);`scripts/pm/**` PM 循环工具;指令架构文件:根 `AGENTS.md` + 根
- 两个技能根:`.claude/skills/**`(含 pm-dispatch 本体)+ `skills/**`(发布目录,恒英文);`scripts/pm/**` PM
循环工具;指令架构文件:根 `AGENTS.md` + 根
`CLAUDE.md`;governed 面的治理执行文件(`.github/CODEOWNERS` 治理路由半边 +
SUBJECT 是 governed 面本身的门禁/审计)。全量判据与裁决引文在 SKILL.md 域车道
表;governed 面统一定义见 SKILL.md「ACCEPT 之后的路径分叉」。
Expand Down
Loading
Loading