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
71 changes: 36 additions & 35 deletions .claude/skills/pm-dispatch/SKILL.md

Large diffs are not rendered by default.

37 changes: 37 additions & 0 deletions .claude/skills/pm-dispatch/references/lanes/cli.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
# 车道岗位说明:domain:cli(references/lanes —— 座位贴指针指向本文件)

岗位说明版本化于此,升级走技能 PR;现值状态恒在座位贴,⛔ 不迁入本文件。

## 范围

- `packages/cli`、`runtime`、`verify`、`qa`、`types`、`packages/rest`、
`packages/mcp`、`packages/observability`、`packages/client*`、
`cloud-connection`、`create-objectstack`、`packages/adapters/*`、
`plugin-hono-server`、`plugin-dev`。
- 红线:按落点判归属 —— 标题挂 cli 而落点在别包的卡只上报误标不改签;
`packages/spec` 恒归 spec 座位;`/meta` 路由**本体**归本席,元数据格式/接受面归
`domain:spec`。

## 常设承诺

- **Required checks 六个**:`TypeScript Type Check` · `Lint & Repo Gates` ·
`Test Core` · `Dogfood Regression Gate` · `Build Core` ·
`Temporal Conformance (live PG + MySQL)` —— 逐 job 读各自 `conclusion`,⛔ 不认
聚合,`in_progress` 不是过;advisory 门禁红进 main 是共享损伤,照样止血立单。
- **PR 侧绿 ≠ 队列侧绿**;队列成员资格直接可读:
`git ls-remote origin 'refs/heads/gh-readonly-queue/*'`(条目名
`main/pr-{number}-{parent sha}`,parent sha 可重建队序;⚠️ ref 在出队后滞留、入
队瞬间滞后)。
- `dispatch-gates.mjs` 只报**路径推导**的地板 —— 条款②从卡**内容**判且优先于它;
已知盲区:它不点名 `pnpm lint` 族 ⇒ 本车道派发令恒补一句「跑 `pnpm lint`」。
- ⛔ 永不削弱门禁 —— 棘轮上跳是门禁在报你的改动有缺陷;规则文案里自带的逃生舱只用
于它描述的那种情形。

## 席内判断

- **探针的 baseline 也是测量**,而且是没人复查的那个 —— 判据恒读命中行本身,⛔ 不
读命中数;断言「文本被删」的探针要锚在消失的那段上(被删串的前缀在删除后仍然幸
存是构造使然)。
- 静默时长是**发探针**的门槛,永不是判死的(本车道实测基线:派发 → draft PR ≈
35–50 分钟);分支无提交 + SendMessage 探针便宜,且实测能复活假死的 dev —— ⛔ 永
不往可能活着的 worktree 派第二个 agent。
38 changes: 38 additions & 0 deletions .claude/skills/pm-dispatch/references/lanes/devx.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
# 车道岗位说明:domain:devx(references/lanes —— 座位贴指针指向本文件)

岗位说明版本化于此,升级走技能 PR;现值状态恒在座位贴,⛔ 不迁入本文件。

## 范围

- `packages/lint`、`packages/sdui-parser`、`content/docs/**`、`apps/docs`、
`scripts/`(门禁类)、`.github/workflows/`(门禁接线)、`.githooks/`、
`examples/**` 测试基建面、`docker/README.md`。
- 边界:守护 skills 的门禁脚本在 `scripts/` 下时归本席 —— 判据是**被改文件的路
径**,SUBJECT 是 governed 面本身的门禁/审计除外(归 skills,见 SKILL.md 域车道
表);`.claude/workflows/` ≠ `.claude/skills/`;与 spec 相交的三面按「是否围着
spec 契约转」切分;**范围内的文件 ≠ 范围内的卡**,归属按卡的 `domain:*` 判,反
向亦然(本席卡的落点溢进他席文件面时,由此产生的人工合并等后果照单接受)。

## 常设承诺

- `content/docs/releases/**` 是 release-owned,恰两条通道:完整性缺口逐卡批准
(⛔ 不构成先例);事实错误走专用 docs-only PR。发布页作用域只管 v16 及以后。
- ⛔ 不做任何发布动作,含改根 `version` 脚本链;**能点绿的门禁不等于该点绿**。
- governed 面 PR 照 SKILL.md「ACCEPT 之后的路径分叉」:恒 draft、留维护者、看得见
地悬着;设计如此的红门禁必须在 PR 上说明红因并声明不修。
- changeset 按 publish 面判:根 `scripts/` / docs / test-only ⇒ `skip-changeset`;
落进已发布包的源 ⇒ 真 changeset;**收窄接受集**须 lint+spec 双侧语义登记,尤须
慎重。

## 席内判断

- **卡片正文冻结在立卡那一刻**,而本仓刻意把裁定/更正/`Blocked-by:` 放在评论里 ——
超过一天的卡,正文是页面上最不当前的东西;先读晚于正文的评论再判可派性。
- **量具在共享 checkout 上会静默说谎**:读内容用 `git show origin/main:` 带路径,
跑脚本必须在自己的 worktree,复核 diff 用具名 ref,⛔ 不用 `FETCH_HEAD`(它是共
享的,会被别的 agent 的 fetch 在两条命令之间冲掉)。
- **门禁的自述必须为真** —— 理由为假的门禁比没有门禁更坏(下一个读者会相信某风险
已被覆盖);新门禁靠**故意复现伤害**自证,语料已被修干净时加反空转肢(某个面读
不出具名 pin 即判失败),⛔ 让枚举静默退化成 no-op。
- 派发词给出的实测值必须同时给「自己重测」的指令(PM 清单会错,dev 重推导是兜
底);先例给的是「怎么想」,不是「怎么改」。
41 changes: 41 additions & 0 deletions .claude/skills/pm-dispatch/references/lanes/engine.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
# 车道岗位说明:domain:engine(references/lanes —— 座位贴指针指向本文件)

岗位说明(范围 / 常设承诺 / 席内判断)版本化于此,升级走技能 PR;现值状态(当前
PM、继承台账、热文件串行队)恒在座位贴,⛔ 不迁入本文件。本车道 2026-08-19 由
engine-core + metadata + drivers 三车道合并而成(裁决引文在 SKILL.md 域车道表)。

## 范围

- `packages/objectql`(含 SchemaRegistry)、`packages/core`、`packages/formula`
(CEL / `matches-filter` / RLS 谓词求值)、`plugin-pinyin-search`(落点在编译/查
询核心)。⚠️ `objectql/src/metadata-facade.ts` 名字带 metadata,归本车道。
- `packages/metadata*`(加载、注册、持久化、缓存、目录)、`packages/platform-objects`。
- `packages/drivers/driver-*`(driver-memory / driver-mongodb / driver-sql /
driver-sqlite-wasm / driver-turso)。
- 红线:改元数据**格式/接受面**(判据是「**改变**接受面」,不是「碰到 spec」)⇒
`domain:spec`;`/meta` 路由本体在 `packages/rest` ⇒ `domain:cli`;
`packages/services/**` ⇒ `domain:services`;`content/docs/**`、`packages/lint`
⇒ `domain:devx`。

## 常设承诺

- **投入冻结随包不随车道**:维护者 2026-08-05 对 `driver-memory` /
`driver-mongodb` 族的投入冻结继续有效;能穿过冻结的形状是「消除静默失败模式」与
清账/对齐既有能力,形如**能力投资**的卡派发前须取裁决;`formula` / `driver-sql`
不受影响。
- **driver conformance 台账只降不升**:任何 driver 卡的派发令要求 dev 前后各读一
次 covered/DEBT 读数,写进报告。
- 改变契约接受/拒绝行为的卡按条款②处理(判据与档位在 SKILL.md,⛔ 不另抄)。

## 席内判断

- **区域 ≠ 文件**:区域放行只能来自对方卡**真实改动行程**(有 PR 读 diff,没有就
申报 UNKNOWN);**做删除的卡,其行程没人能从「它加了什么」的名字推出**。行号数
小时内即腐烂,恒按符号定位。
- **五个 driver 列只有约三个独立实现**:`driver-sqlite-wasm` 与 `driver-turso`
local 都继承 `SqlDriver` 的 filter 编译器 —— 把一致性表当五方佐证会高估证据;同
理,单点修 SQL 家族共享 seam 即可覆盖三个 driver。
- **元数据合并语义按键类各不相同**(fields 展开 / validations+indexes 连接 / 标量
last-writer-wins)—— 评审 pin 时先问它**没有**覆盖什么;标量的 last-writer-wins
是跨机制重复立卡的老源头,同 seam 的第三张分歧卡优先裁**类**,不裁实例。
- 元数据接受面形状的卡先问「生产者在哪」—— 答案常改变卡的范围与域标签,回分诊。
31 changes: 31 additions & 0 deletions .claude/skills/pm-dispatch/references/lanes/services.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
# 车道岗位说明:domain:services(references/lanes —— 座位贴指针指向本文件)

岗位说明版本化于此,升级走技能 PR;现值状态恒在座位贴,⛔ 不迁入本文件。本车道
2026-08-19 并入原 identity 车道的四个插件(裁决引文在 SKILL.md 域车道表)。

## 范围

- `packages/services/*`、`packages/connectors/*`、`packages/triggers/*`、
`plugin-approvals`、`plugin-webhooks`、`plugin-email`、`plugin-reports`、
`embedder-openai`、`knowledge-*`。
- 身份侧(2026-08-19 并入):`plugin-auth`、`plugin-security`、`plugin-sharing`、
`plugin-audit`。
- 红线:零持有 `packages/spec` —— 触 spec 的卡一律转 spec 座位;**安全/权限边界的
放宽**(访问控制、认证流、RLS/共享语义、审计留痕)是人工地板,恒升级不代裁。

## 常设承诺

- **每条否定性 pin 都要消融验证**(被禁行为放回 → 测试转红 → 报失败输出 → 恢复)
—— 单独的绿不是证据。
- **安全族卡的披露纪律**:复现配方不落任何公开面(卡、PR、评论);证据以抽象描述
或私有通道承载。
- 门禁读数不轻信聚合:`check:type-check-debt` 可以在包级 typecheck 绿时红;
`check:i18n` 以「PREREQUISITE NOT MET — workspace CLI 未 build」退 1 不是漂移。

## 席内判断

- **认证栈版本族升级把 `pnpm-workspace.yaml` overrides 与 `plugin-auth/**` 当同一
个热文件面**串行;在旧版本族上测得的前提(兼容性、行为断言)在新版本族落地后
**逐卡重读**再派发,⛔ 不沿用旧读数。
- 多服务共享同一条自动化引擎/数据源 seam 时同文件卡跨轮硬串行,后一单派发前先用前
一单的报告重新定价(SKILL.md 候选与批次的重定价条款)。
36 changes: 36 additions & 0 deletions .claude/skills/pm-dispatch/references/lanes/skills.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
# 车道岗位说明:domain:skills(references/lanes —— 座位贴指针指向本文件)

岗位说明版本化于此,升级走技能 PR;现值状态恒在座位贴,⛔ 不迁入本文件。

## 范围

- 两个技能根:`.claude/skills/**`(含 pm-dispatch 本体)+ `skills/**`(发布目录,
恒英文);`scripts/pm/**` PM 循环工具;指令架构文件:根 `AGENTS.md` + 根
`CLAUDE.md`;governed 面的治理执行文件(`.github/CODEOWNERS` 治理路由半边 +
SUBJECT 是 governed 面本身的门禁/审计)。全量判据与裁决引文在 SKILL.md 域车道
表;governed 面统一定义见 SKILL.md「ACCEPT 之后的路径分叉」,判定命令
`node scripts/pm/check-governed-merges.mjs --test` 带路径。
- QA 管理循环执行归本席;qa-run 记录是协议载体不是工作;契约复审(条款②复审链)归
分诊席,本席仅过渡期代行。

## 常设承诺

- 四维分析先于派发与复核。
- governed PR 恒 draft 等人合;flip/arm 前跑 `check-governed-merges --test`;轮报
的 governed 合并审计清单带 `--since` 四仓实跑,⛔ 不凭记忆汇总。
- 档位从 `--tier` 推导引用;pm-dispatch 根 fable 强制;条款②闸门照现行;限额豁免
floor opus。
- 棘轮逐行付账,⛔ re-wrap;付账砍点逐条核幸存 —— 被砍内容若在别处无家,砍掉就是
丢规则。
- 首触定级每轮;决策形状 ⇒ 决策箱带四棱块,⛔ 永不自裁(唯一例外:本车道 finding
自分诊,全仓轮跳过)。
- 内部指令面中文,机器判据恒英文;认领前重读全线程;标签写 read-modify-write +
回读。
- QA 波次由维护者手动触发,⛔ 不自启。

## 席内判断

- 技能文本改动的复核先问「谁在读这一行」—— 无具名读者的新增是 token 税;每条经验
自含失效模式与边界,⛔ 操作文本不引 issue 编号(id-lint 机械强制)。
- fold-or-serial 必答与家族派发五门在 SKILL.md 批次独立性段 —— 本车道的 SKILL.md
热文件链是它最常命中的现场,链首认领就是答题处。
44 changes: 44 additions & 0 deletions .claude/skills/pm-dispatch/references/lanes/spec.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
# 车道岗位说明:domain:spec(references/lanes —— 座位贴指针指向本文件)

岗位说明版本化于此,升级走技能 PR;现值状态恒在座位贴,⛔ 不迁入本文件。

## 范围

- `packages/spec` 整包唯一契约,语义/文本/机器三面同席:schema 形状、
`contracts/**`、退役行为半边、strictness 台账;describe/JSDoc/墓碑散文/错误
guidance 与 alias 表;`packages/spec/scripts/**`、`packages/spec/docs/**` 及围着
spec 契约转的工具链(门禁/生成器/lint 规则/报错散文/references 管线)。
- 一般开发工具面留 devx(维护者 2026-08-09 裁决);`packages/spec` 恒归本席,不论
谁需要它。

## 席内分派参考

(维护者 2026-08-16 裁定合并车道:原 spec-surface / spec-tooling 标签已退役,三面
同归 `domain:spec` 一席,锚定规则双射恢复;以下判据降为席内分派与定价依据。)

- 语义/文本按「合法元数据集合变没变」分 —— 改动前能过校验的输入,改动后逐字节同
判 ⇒ 文本面(changeset 恒 patch,默认 sweep-first),否则语义面;**任何改变接
受/拒绝行为的卡,不论多小,按语义面处理**(条款②)。
- 机器面改「围着契约转的机器」,与文本面无交集,⛔ 不碰
`packages/spec/src/**/*.zod.ts` 与 strictness 台账。
- 产物随源走:describe/JSDoc 改动重生成的 references 产物归触发它的源 PR(生成物
门禁重生成提交,⛔ 手改)。
- 改元数据**格式/接受面**的照旧归 `domain:spec`,`/meta` 路由本体在
`packages/rest` 归 `domain:cli`;拿不准 FLAG 回分诊,⛔ 不自设第二套判据。
- 档位随面走的现行表在 SKILL.md 模型分档(单源,⛔ 不另抄)。

## 常设承诺

- findings 首触定级归分诊席,本席只供证据。
- **待命巡逻每次做整车道全交集读**(delta 扫描有尾隙:扫描后、波次边界前入队的卡
谁都看不见;全交集读是安全网)。
- **契约面卡的 fixture triage 必须跑消费包测试**(A 包的改动可让 B 包的 fixture
反着断言,spec 范围内任何 sweep 都看不见)—— 派发令点名消费包测试清单,报告要有
各消费包真实读数。
- 派发前触发文件必查段照座位贴现值执行(那是状态,不是岗位说明);跨仓 pin 滞后的
读法在 SKILL.md 多仓协调。

## 席内判断

- 候选卡的评论是读取的一部分,即使正文看起来已是决策形状 —— 裁决与撤销住在评论
里,跳过评论就是跳过裁决。
20 changes: 10 additions & 10 deletions .claude/skills/pm-dispatch/references/seat-post-protocol.md
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
# 座位贴协议细则(references —— 按需加载)

出处:主文件「座位贴协议」。原则(一座位一贴、单写手、正文为权威)与 2026-08-06
拍板出处住在主文件;本表是接管/移交/回收那一刻要查的**协议细则**。
出处与原则(一座位一贴、单写手、正文为权威)住主文件「座位贴协议」;本表是接管/
移交/回收那一刻要查的**协议细则**。

- **贴 = 座位**,标签 `pm:seat`,正文固定六段:**范围 | 当前 PM | 继承台账 | 热文
件串行队 | 常设承诺 | 说明** —— 仅此六段,段段皆**现值**,没有一段随时间增长
(维护者 2026-08-11 接受)。
- **贴 = 座位**,标签 `pm:seat`,正文固定四段:**当前 PM | 继承台账 | 热文件串行
队 | 说明** —— 段段皆**现值**,没有一段随时间增长;范围与常设承诺是岗位说明,版
本化在 `lanes/<lane>.md`,「说明」段放一行指针(两裁决出处均在主文件);存量贴
由在任座位在下次写侧刷新时按四段收缩(⛔ 岗位说明 PR 不代改贴正文)。
- **标题即状态板**:固定格式 `[PM seat] <座位名> — <状态>`,状态词表
`🟢 <github-login>`(在任)/ `🟢 Routine` / `⏳ vacant` / `⏸️ paused`。标题只放慢
状态(换班级频率);轮次、在飞、队列快照等快状态 ⛔ 不进标题,留在「说明」段。
Expand All@@ -16,15 +17,14 @@
+ 上任时刻。审计/认领评论的**作者字段**是平台盖章、不可自述错的硬读数 —— 接管仲
裁与活性判定优先用它对账正文。
- **读侧边界(接管与巡检)**:只读晚于正文最后编辑时间的评论 —— 评论无界增长而正
文有界,读全评论是纯 token 税;正文编辑时刻与评论时间戳都是平台盖章的硬读数,比
对即得(维护者 2026-08-12 批准)。
文有界,读全评论是纯 token 税;两个时刻都是平台盖章的硬读数,比对即得(批准出处在主文件)。
- **班次叙事不进贴正文**:逐卡状态在卡与 PR 上本就必填,轮次合计走轮次报告;贴正
文按写侧刷新点(下方)编辑,⛔ 不逐事件追加(无界贴会超出单次读取上限)。
- **接管压缩细则**:接任 PM 把交接的有效内容按六段模板重述为新正文,**编辑历史即
- **接管压缩细则**:接任 PM 把交接的有效内容按四段模板重述为新正文,**编辑历史即
存档** —— 旧账留在上一版 body revision,审计评论带版本指针(哪一版、何时)。超
大贴由半状态巡查的 report-only 项浮出,不等读取失败。
- **热文件串行队是正文具名段**(跨轮、跨班次的常设事实):文件 → 有序卡片清单 →
每张卡认领的**区域**;区域列写清楚才敢并行,写不清楚就只能整文件串行
- **热文件串行队**(跨轮、跨班次的常设事实):文件 → 有序卡片清单 → 每张卡认领
**区域**(并行判据在主文件:区域写不清就只能整文件串行)
- **残余竞态补遗**(三招在主文件):贴正文是多席可写面(接管即换写手)⇒ 写后读回
**恒不降级**;新增座位贴(拆域)同样先查 `pm:seat` 索引再立贴。
- **无心跳,活性判定两条路**:惰性半边在**接管冲突**时评估一次 —— Routine 座位查
Expand Down
10 changes: 10 additions & 0 deletions scripts/pm/check-skill-line-ratchet.mjs
Original file line numberDiff line numberDiff line change
Expand Up@@ -56,6 +56,15 @@ export const CEILINGS = new Map([
['.claude/skills/pm-dispatch/references/review-checklist.md', 82],
['.claude/skills/pm-dispatch/references/landing-operations.md', 82],
['.claude/skills/pm-dispatch/references/seat-post-protocol.md', 101],
// Lane job descriptions (maintainer ruling 2026-08-19: per-lane PM job
// descriptions move from seat-post prose into versioned skill references).
// Set at landed line counts (headroom 0, same convention as above).
['.claude/skills/pm-dispatch/references/lanes/engine.md', 41],
['.claude/skills/pm-dispatch/references/lanes/services.md', 31],
['.claude/skills/pm-dispatch/references/lanes/cli.md', 37],
['.claude/skills/pm-dispatch/references/lanes/devx.md', 38],
['.claude/skills/pm-dispatch/references/lanes/skills.md', 36],
['.claude/skills/pm-dispatch/references/lanes/spec.md', 44],
['.claude/agents/os-dev.md', 399],
// #9473: the other four `.claude/skills/` are read in full by the sessions
// that use them too — the erosion mechanism the ratchet exists to stop
Expand DownExpand Up@@ -130,6 +139,7 @@ function selfTest() {
['SKILL.md is covered', CEILINGS.has('.claude/skills/pm-dispatch/SKILL.md'), true],
['the dev-agent definition is covered', CEILINGS.has('.claude/agents/os-dev.md'), true],
['all five compressed references are covered', ['dispatch-runbook', 'platform-readings', 'review-checklist', 'landing-operations', 'seat-post-protocol'].every((n) => CEILINGS.has(`.claude/skills/pm-dispatch/references/${n}.md`)), true],
['all six lane job descriptions are covered', ['engine', 'services', 'cli', 'devx', 'skills', 'spec'].every((n) => CEILINGS.has(`.claude/skills/pm-dispatch/references/lanes/${n}.md`)), true],
['the other four skills are covered (#9473)', ['checklist-test', 'checklist-author', 'dogfood-verification', 'spec-property-retirement'].every((n) => CEILINGS.has(`.claude/skills/${n}/SKILL.md`)), true],
['root AGENTS.md is covered (#9792)', CEILINGS.has('AGENTS.md'), true],
];
Expand Down
Loading
Loading