Skip to content

Commit c7cca67

Browse files
committed
docs(pm-dispatch): the filing gate and the grading contract's ten measured misses
A card is created only for four classes; everything else is refused at the door instead of being filed and closed. Paced REST writes become charter, not advice. The grading contract gains the false-green clause, the four acceptable answers, chain inheritance as an upper bound, the three-state checklist test, North Star item 4's two qualifiers, and the reading criteria (reach radius, three-part zero, git-ignored directories, exact-name matching, one board enumeration per fire). Every added line is paid in place: SKILL.md lands at its ceiling (819/819), core-rules.md is net zero (151/151), and the new references file is added to the ratchet map at its landed count with a table-row pin. Claude-Session: https://claude.ai/code/session_012GcsUbuqFGBibkEDMRC1eE Co-authored-by: Claude <noreply@anthropic.com>
1 parent ecf56e7 commit c7cca67

4 files changed

Lines changed: 70 additions & 7 deletions

File tree

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

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,7 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报
9696
- 状态只经 GitHub 标签、assignee、正文行与 `pm:seat` 座位贴读写;循环须能从全新会话恢复。
9797
- 用户账号仅三用:assignee、授权批准、维护者亲手;批准账号永不跑席位或作其关联用户。
9898
- 内容写只走 REST 代理,⛔ 无 MCP 写;`user.login` 记令牌不记席位,归属 = 文本里的 session ID。
99+
- 写节奏 ⛔ 非可选:REST 写间隔 ≥3 秒、每账号每小时 ≤40 笔;429 ⇒ 该席本 fire 停写记贴。
99100
- GitHub 上一切新内容用英文;中文只留四通道(维护者速读、轮报、裁决引文、四维分析)。
100101
- 裁决引文照抄不译;四维中文只管新记录,存量英文块 ⛔ 不迁移;存量中文 ⛔ 不追溯改写。
101102
- 一 PM 恰管一车道,一车道由一组座位管,一席一贴;PM Y 管什么恰一个答案。
@@ -166,6 +167,7 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报
166167
- 同仪器的控制词双零是仪器坏,⛔ 不读作缺席:换法重画再报;哑火仪器与干净结果同值。
167168
- 控制通过 ≠ 问题问对:零命中须写仪器可达半径与一个必在半径外的已知目标。
168169
- 半径按形态写(内容/文件名/声明/字段);所求在半径外 ⇒ 零非读数,换看得见它的仪器。
170+
- 零的三件判据、目录约定与精确名匹配见 `references/filing-gate.md` 的〈读数判据〉。
169171
- 正命中须答谁打印/执行它,否则不证缺陷仍活;注释/文档块/夹具/修复的回归 pin 不算。
170172
- 他人据以行动的读数须带单位并答什么本来会让它不是这个值;递 dev 的恒标线索非答案。
171173
- ⛔ 自用即弃的探针不欠此税;「不是这个值」的答案取逐字工件或具名反例。
@@ -346,27 +348,28 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报
346348
- 碰迁移形状或删已发布能力也进决策箱;说明书脱节不进:有裁定出处才是 (b),否则改文档。
347349
- 决策卡落卡必带四棱卡面块与其上的「维护者速读」,⛔ 不留待有人接手再补。
348350
- 决策卡的速读同题,用业务语言先讲事情与选项,末句只问一字:A/B/C 或是否。
351+
- 立卡门:只为四类立卡 —— 缺陷 / 维护者决定 / 直派任务 / 协调节点,⛔ 其余不立卡。
352+
- 正文首行写类别字母;四类定义、⛔ 清单、三答与配额见 `references/filing-gate.md`。
349353
- `finding` = 三类内待定级:(a) 可复现缺陷(复现或失败探针);(b) 违背已声明契约(引契约文);
350354
- (c) AI 写元数据会被运行时拒收或静默丢弃的陷阱;其余进 PR `## Acceptance notes`,⛔ 不立卡。
351355
- (a) 的分界是不完整 vs 错误,不是文档 vs 代码:示例照抄即失败是 (a),漏列成员不是。
352356
- 门禁头注、self-test 文案与 `check-*` 处方句 ⛔ 非已声明契约;(b) 须用户或已发布包读得到。
353357
- (c) 元数据 = 由写它的人以外的人存储并再作者化的键:React prop 不是,存储的视图配置是。
354358
- 把作者引向运行时会兑现却让事情更糟的元数据的警告不在 (c) 内;记为边界,⛔ 不扩类。
355359
- (a) 须今天可达,(c) 须具名生产者;观察、休眠、零拉动 ⛔ 不立卡、不进汇总卡、无配额。
356-
- 判「进 Acceptance notes」前先问:哪一个 PR 会碰到这个文件?说得出具体 PR 或人 ⇒ 写进去。
357-
- ⛔ 说不出(`.changeset/*`、无人在改的文档页、生成物、已扫完的批次)⇒ 兜底不成立。
358-
- 仍然关,但关闭理由必须写明「承接者:无」。
360+
- Acceptance notes 前先答「哪个 PR 或人会碰到它」;答不出 ⇒ 仍然关,理由写「承接者:无」。
359361
- 先修复:正文被 sanitizer 截断的卡不可派发,评论修复指令后跳过。
360362
- 停摆指令判据必须比其它分类更硬(双读取),事后证伪同处公开作废。
361363
- 决策箱勤务:入箱校验/补全四棱块、速读与 `Prior rulings on this card:` 行;存量卡低频回填。
364+
- 入决策箱那一笔连「前提今天还成立吗」一起现读;改状态只需现读卡。
362365
- 线程有 `Ruling:`/RULED 的卡再入箱,该行逐 id 各一句变化;缺行 ⇒ 拒入,`pm:retriage` 回立卡者。
363366
- `type`(Bug/Feature/Task)是分诊固定产出,分诊席唯一权威生产;立单者可预填,分诊校正。
364367
- 判据:违背已声明契约 ⇒ `Bug`,扩大接受集/公开面越出已声明 ⇒ `Feature`,其余 ⇒ `Task`。
365368
- `Bug` 无具名落点或复现路径不入 `pm:queue`(标记补复现)。
366369
- ⛔ 不回填存量 backlog 的 type;新卡即时打、存量卡下次碰到补。
367370
- 定级按北极星「优先级」1–3 条;首行 `Path: <定义项> | <清单项 id/缺项> | P<路步> | none`。
368371
- 定义项取北极星「做出来的是什么」或仪器卡的车队决定;无则关;`none` 非分诊缺口。
369-
- 清单项会 fail 才算断,继承其 `priority`;缺项先补账本;⛔「有人在等」不是定级判据。
372+
- 清单项三态定级(会 fail / 步骤够不到 / 无项断言)与定级判据见 `references/filing-gate.md`。
370373
- 「无则关」= 首触即关 not_planned,带理由与入队两条件,⛔ 不定 p3、不 hold;下行同此。
371374
- 产品仓 P0/P1 开着时,无解锁对象的 p2/p3 `tooling` 卡同样关。
372375
- 路由是分诊的技术判断,⛔ 永不升级哪个仓的问题;父单是协调节点,永不派发。
@@ -384,7 +387,7 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报
384387
- `Restart-when:` 命中同 closed 命中待遇:回队前 ref 重验再回队。
385388
- ⛔ 不设逐卡豁免评论;每 fire 定完全部未定级 finding,优先于旧卡重验。
386389
- 三类外不可逆或有硬时限(发版即固化、只被消费的文件、过窗不可补)⇒ 不关,报维护者。
387-
- 每批先验三类:三类外关 not planned(不等批准,维护者可否决重开);三类内无证据拒收。
390+
- 三类外首触关闭只清门前存量,关 not planned(不等批准可否决重开);三类内无证据拒收。
388391
- 三类内再过时前提检查,三选一:晋级 / 关闭 not planned / hold;判级只在此轮,不在立单时。
389392
- ⛔ 写入前对每张卡现读当前状态;任何列表快照读数一律作废。
390393
- ⛔ 带 `pm:dispatched` / assignee / 任何 open 或 merged PR 引用的卡,一律不动。
@@ -393,6 +396,7 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报
393396
- 域分批与 sweep 打包晋级五条照用;每批约定与积压告警见 `references/dispatch-runbook.md`。
394397
- `pm:retriage` 每 fire 先答异议评论所求,答后同笔摘标;须维护者答的进收件箱,标照摘。
395398
- retriage 维持或改判皆由分诊席同笔摘标;挂标归异议席。
399+
- retriage 的异议判据认内容(有评论写明所求)⛔ 不认形状(有一条异议评论)。
396400
- 发版板 `target:<major>`:判据二元,⛔ 不做优先级渐变:不修它,当前 RC 能不能发。
397401
- 判阻塞四类:① 用户今天就撞的已发布面缺陷;② 公开契约 declared≠enforced。
398402
- ③ 存量数据/迁移形状(发布后修不回);④ 发布说明里要为它道歉的。

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,11 +77,11 @@
7777
- 换班报告默认零建议,只收原则错缺、可机械化项与平台事实变化三类。
7878
- 交接按收尾清单走完;强制接管 ⛔ 不取在飞卡,由原认领者跟完;归档自派会话不可移交。
7979
## 分诊座位职责
80-
- 执行席 ⛔ 跳过分诊动作,读到标签当既成事实;立卡者不查重、只附查重词。
80+
- 执行席 ⛔ 跳过分诊动作,读到标签当既成事实;立卡者只答类别/读者/查重命中数。
8181
- 两级盘点是小时轮读增量加每日全量对账,枚举须比对总数、不等即报不完整并点名缺口。
8282
- sweep 扫全裸卡、队列卡缺域或缺定级、域卡缺 pm 状态,排除跟踪、停放与协议载体卡。
8383
- 首触定级跑到清空 ⛔ 无总量预算、未跑完断点续跑;清得空最新优先,否则最老优先。
84-
- 裸卡超过十五张则下一轮改域分批集中模式,每批不超过五张同族卡。
84+
- 立卡门四类外 ⛔ 不立卡;裸卡超十五张则下轮改域分批,每批不超过五张同族卡。
8585
- 有落点或可复现的缺陷、实现未被裁错的说明书脱节进 `pm:queue`;工具卡另须带解锁行。
8686
- 设计卡、契约形状提案、碰迁移形状或删已发布能力的进决策箱;无出处说明书脱节不进。
8787
- 立卡限三类:今日可达可复现缺陷、契约违背、具名生产者陷阱;截断卡发修复指令不派。
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
# 立卡门与定级判据
2+
3+
见 SKILL.md 〈分诊座位职责〉与〈平台读数纪律〉的指针行;本文是「什么才算一张卡」与
4+
定级、读数三组判据的执行说明。
5+
6+
## 立卡门
7+
8+
出处 —— 维护者 2026-09-21 逐字,不译:
9+
10+
> 刚才 os-sam 又被封号了,也是因为分诊批量处理issue的时候,所以现在 issue 太多对于车队是负担。 19546 我希望在创建issue 的环节就卡死,没必要的issue就不要创建。
11+
12+
- 立卡只为四类,正文首行写出类别字母;⛔ 其余一律不立卡,不论它叫什么。
13+
- (a) 有具名落点或复现的产品缺陷,即 `pm:queue` 的定义。
14+
- (b) 只有维护者能做的决定,落卡即带「维护者速读」与四棱块。
15+
- (c) 维护者直派的任务,正文引其原话。
16+
- (d) 协调节点:跨仓/跨层父单与它的逐层子单。
17+
- ⛔ 不是卡:仪器误报与门禁假读数 —— 既不派 dev,今亦不立卡。
18+
- ⛔ 不是卡:席位自己的失误、协议观察与「记住这条」,它们进座位贴或收班简报。
19+
- ⛔ 不是卡:三类外的 `finding` —— 原为首触即关,今门前即拒。
20+
- ⛔ 不是卡:丢卡重建,除非它自身即 (a)–(d)。
21+
- ⛔ 不是卡:既有卡一条评论能承载的指针/知会/请求 —— 评论是加速器不是记录。
22+
- ⛔ 不是卡:sweep 每 fire 重导的 pin/bump/卫生提醒。
23+
- 每次 POST 之前正文答三件:类别字母、动手的读者(哪个席位哪一步)、查重词与命中数。
24+
- 缺任一件的卡由分诊首触即关、不定级,关单一行点名缺的是哪一件。
25+
- 「动手的读者」与 Acceptance notes 同一问:说得出具体 PR 或人 ⇒ 写进去,说不出 ⇒ 不立卡。
26+
- 配额:一席每 fire 至多立三张;sweep 超出的折进一张带清单的卡,或折进座位贴。
27+
- 分诊席的存量清理仍走维护者确认的十张一组,⛔ 不因本门改批量。
28+
- 写节奏 ⛔ 非可选:REST 写(评论/标签/关单/立卡)间隔 ≥3 秒,每账号每小时 ≤40 笔。
29+
- 收到 429 或次级限流 ⇒ 该席本 fire 停写,并把停写记在座位贴上。
30+
- 关单 ⛔ 永不由脚本循环连发:须维护者确认的分组,且逐笔之间留间隔。
31+
32+
## 定级判据(北极星「优先级」的执行说明)
33+
34+
- 假绿另有条款:绿线被读作「已核对」而实际没核对 ⇒ 一次人眼捕获即一次实测代价。
35+
- 「仪器为车队服务」的四种答案 ⛔ 不压成两条;假红的标准代价形态是席位顺从它。
36+
- 点名一次被假红占住的席位动作(具名那张卡),与点名一次派错/落不了同等成立。
37+
- 沿链继承只给上界,界内哪格由失效形态定:墙齐平,税降一格;可重入队的 PR 是税。
38+
- 北极星第 4 条只认出货面(`skills/**`、产品文档),⛔ 不含 `.claude/**` 内部协议。
39+
- 它认的是一句说错的话,⛔ 不是一句缺席的话;缺句按覆盖不足走北极星第 2 条。
40+
41+
## 读数判据(判据的可达半径与零)
42+
43+
- 判据有可达半径:半径内(本仓 CI、席位动作、run record)测出的零是真的零。
44+
- 半径外 = 出货给第三方的面:`packages/*/dist`、`.d.ts`、`content/docs/**`、`skills/**`、墓碑处方。
45+
- 半径外含拒绝消息、CHANGELOG 与协议的接受/拒绝行为;「点不出受害者」⛔ 不是证据。
46+
- 判据是「它对不对」,错 ⇒ 留;`packages/spec` 的「辅助面」⛔ 不蕴含「可关」。
47+
- 落点在半径内 ⛔ 不蕴含所护的在内:追「它最终护的是谁」⛔ 不追它住在哪个目录。
48+
- 零成读数须三件全立:① 同主体必中词证总体可达;② 探针问的是契约里真有的键/位置。
49+
- ③ 这个总体就是该现象会出现的地方;缺任一件,那个零只是探针的自画像。
50+
- 「某目录里没有 X」前先读其 README 与 `.gitignore`:被 ignore 的目录是约定 ⛔ 不是空集。
51+
- 前缀匹配 ⛔ 不是精确匹配:同族别名会撑满前缀,命中数与零一样会骗人。
52+
- 全板枚举每 fire 至多一次,⛔ 不反复实扫;统计走 `board-archive` 离线做,巡查按日。

‎scripts/pm/check-skill-line-ratchet.mjs‎

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1211,6 +1211,12 @@ export const CEILINGS = new Map([
12111211
// Landing it in SKILL.md alone was option C, refused by the ruling: the twin
12121212
// obligation is not waived. Landed count, headroom 0, same convention.
12131213
['.claude/skills/pm-dispatch/references/core-rules.md', 151],
1214+
// New file, landed at its own count (headroom 0, same convention as every
1215+
// entry above): the filing gate and the grading/reading criteria the triage
1216+
// seat applies. A new pm-dispatch references file belongs in this map by the
1217+
// header's own definition of the covered surface — the map is an
1218+
// ENUMERATION, so a file that is merely absent is silently unratcheted.
1219+
['.claude/skills/pm-dispatch/references/filing-gate.md', 52],
12141220
// The app-vs-platform boundary — the deciding question (could this be written
12151221
// from the metadata alone, with no knowledge of this company?), the publication
12161222
// test (one consumer is a use, two is a contract) and the two anti-patterns.
@@ -1943,6 +1949,7 @@ export const MAX_TABLE_ROW_BYTES = new Map([
19431949
['.claude/skills/pm-dispatch/references/true-green.md', 0],
19441950
['.claude/skills/pm-dispatch/references/compile-surfaces.md', 352],
19451951
['.claude/skills/pm-dispatch/references/core-rules.md', 0],
1952+
['.claude/skills/pm-dispatch/references/filing-gate.md', 0],
19461953
['.claude/skills/pm-dispatch/references/app-platform-boundary.md', 219],
19471954
['.claude/skills/pm-dispatch/references/lanes/engine.md', 0],
19481955
['.claude/skills/pm-dispatch/references/lanes/services.md', 0],

0 commit comments

Comments
 (0)