From c7cca67020cb23bf60f795c75248fcc1b67f8f0b Mon Sep 17 00:00:00 2001 From: Claude Date: Mon, 21 Sep 2026 09:00:42 +0000 Subject: [PATCH 1/4] 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 --- .claude/skills/pm-dispatch/SKILL.md | 14 +++-- .../pm-dispatch/references/core-rules.md | 4 +- .../pm-dispatch/references/filing-gate.md | 52 +++++++++++++++++++ scripts/pm/check-skill-line-ratchet.mjs | 7 +++ 4 files changed, 70 insertions(+), 7 deletions(-) create mode 100644 .claude/skills/pm-dispatch/references/filing-gate.md diff --git a/.claude/skills/pm-dispatch/SKILL.md b/.claude/skills/pm-dispatch/SKILL.md index ac5eb1ffc5..4ae49b7aa0 100644 --- a/.claude/skills/pm-dispatch/SKILL.md +++ b/.claude/skills/pm-dispatch/SKILL.md @@ -96,6 +96,7 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报 - 状态只经 GitHub 标签、assignee、正文行与 `pm:seat` 座位贴读写;循环须能从全新会话恢复。 - 用户账号仅三用:assignee、授权批准、维护者亲手;批准账号永不跑席位或作其关联用户。 - 内容写只走 REST 代理,⛔ 无 MCP 写;`user.login` 记令牌不记席位,归属 = 文本里的 session ID。 +- 写节奏 ⛔ 非可选:REST 写间隔 ≥3 秒、每账号每小时 ≤40 笔;429 ⇒ 该席本 fire 停写记贴。 - GitHub 上一切新内容用英文;中文只留四通道(维护者速读、轮报、裁决引文、四维分析)。 - 裁决引文照抄不译;四维中文只管新记录,存量英文块 ⛔ 不迁移;存量中文 ⛔ 不追溯改写。 - 一 PM 恰管一车道,一车道由一组座位管,一席一贴;PM Y 管什么恰一个答案。 @@ -166,6 +167,7 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报 - 同仪器的控制词双零是仪器坏,⛔ 不读作缺席:换法重画再报;哑火仪器与干净结果同值。 - 控制通过 ≠ 问题问对:零命中须写仪器可达半径与一个必在半径外的已知目标。 - 半径按形态写(内容/文件名/声明/字段);所求在半径外 ⇒ 零非读数,换看得见它的仪器。 +- 零的三件判据、目录约定与精确名匹配见 `references/filing-gate.md` 的〈读数判据〉。 - 正命中须答谁打印/执行它,否则不证缺陷仍活;注释/文档块/夹具/修复的回归 pin 不算。 - 他人据以行动的读数须带单位并答什么本来会让它不是这个值;递 dev 的恒标线索非答案。 - ⛔ 自用即弃的探针不欠此税;「不是这个值」的答案取逐字工件或具名反例。 @@ -346,6 +348,8 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报 - 碰迁移形状或删已发布能力也进决策箱;说明书脱节不进:有裁定出处才是 (b),否则改文档。 - 决策卡落卡必带四棱卡面块与其上的「维护者速读」,⛔ 不留待有人接手再补。 - 决策卡的速读同题,用业务语言先讲事情与选项,末句只问一字:A/B/C 或是否。 +- 立卡门:只为四类立卡 —— 缺陷 / 维护者决定 / 直派任务 / 协调节点,⛔ 其余不立卡。 +- 正文首行写类别字母;四类定义、⛔ 清单、三答与配额见 `references/filing-gate.md`。 - `finding` = 三类内待定级:(a) 可复现缺陷(复现或失败探针);(b) 违背已声明契约(引契约文); - (c) AI 写元数据会被运行时拒收或静默丢弃的陷阱;其余进 PR `## Acceptance notes`,⛔ 不立卡。 - (a) 的分界是不完整 vs 错误,不是文档 vs 代码:示例照抄即失败是 (a),漏列成员不是。 @@ -353,12 +357,11 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报 - (c) 元数据 = 由写它的人以外的人存储并再作者化的键:React prop 不是,存储的视图配置是。 - 把作者引向运行时会兑现却让事情更糟的元数据的警告不在 (c) 内;记为边界,⛔ 不扩类。 - (a) 须今天可达,(c) 须具名生产者;观察、休眠、零拉动 ⛔ 不立卡、不进汇总卡、无配额。 -- 判「进 Acceptance notes」前先问:哪一个 PR 会碰到这个文件?说得出具体 PR 或人 ⇒ 写进去。 -- ⛔ 说不出(`.changeset/*`、无人在改的文档页、生成物、已扫完的批次)⇒ 兜底不成立。 -- 仍然关,但关闭理由必须写明「承接者:无」。 +- Acceptance notes 前先答「哪个 PR 或人会碰到它」;答不出 ⇒ 仍然关,理由写「承接者:无」。 - 先修复:正文被 sanitizer 截断的卡不可派发,评论修复指令后跳过。 - 停摆指令判据必须比其它分类更硬(双读取),事后证伪同处公开作废。 - 决策箱勤务:入箱校验/补全四棱块、速读与 `Prior rulings on this card:` 行;存量卡低频回填。 +- 入决策箱那一笔连「前提今天还成立吗」一起现读;改状态只需现读卡。 - 线程有 `Ruling:`/RULED 的卡再入箱,该行逐 id 各一句变化;缺行 ⇒ 拒入,`pm:retriage` 回立卡者。 - `type`(Bug/Feature/Task)是分诊固定产出,分诊席唯一权威生产;立单者可预填,分诊校正。 - 判据:违背已声明契约 ⇒ `Bug`,扩大接受集/公开面越出已声明 ⇒ `Feature`,其余 ⇒ `Task`。 @@ -366,7 +369,7 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报 - ⛔ 不回填存量 backlog 的 type;新卡即时打、存量卡下次碰到补。 - 定级按北极星「优先级」1–3 条;首行 `Path: <定义项> | <清单项 id/缺项> | P<路步> | none`。 - 定义项取北极星「做出来的是什么」或仪器卡的车队决定;无则关;`none` 非分诊缺口。 -- 清单项会 fail 才算断,继承其 `priority`;缺项先补账本;⛔「有人在等」不是定级判据。 +- 清单项三态定级(会 fail / 步骤够不到 / 无项断言)与定级判据见 `references/filing-gate.md`。 - 「无则关」= 首触即关 not_planned,带理由与入队两条件,⛔ 不定 p3、不 hold;下行同此。 - 产品仓 P0/P1 开着时,无解锁对象的 p2/p3 `tooling` 卡同样关。 - 路由是分诊的技术判断,⛔ 永不升级哪个仓的问题;父单是协调节点,永不派发。 @@ -384,7 +387,7 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报 - `Restart-when:` 命中同 closed 命中待遇:回队前 ref 重验再回队。 - ⛔ 不设逐卡豁免评论;每 fire 定完全部未定级 finding,优先于旧卡重验。 - 三类外不可逆或有硬时限(发版即固化、只被消费的文件、过窗不可补)⇒ 不关,报维护者。 -- 每批先验三类:三类外关 not planned(不等批准,维护者可否决重开);三类内无证据拒收。 +- 三类外首触关闭只清门前存量,关 not planned(不等批准可否决重开);三类内无证据拒收。 - 三类内再过时前提检查,三选一:晋级 / 关闭 not planned / hold;判级只在此轮,不在立单时。 - ⛔ 写入前对每张卡现读当前状态;任何列表快照读数一律作废。 - ⛔ 带 `pm:dispatched` / assignee / 任何 open 或 merged PR 引用的卡,一律不动。 @@ -393,6 +396,7 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报 - 域分批与 sweep 打包晋级五条照用;每批约定与积压告警见 `references/dispatch-runbook.md`。 - `pm:retriage` 每 fire 先答异议评论所求,答后同笔摘标;须维护者答的进收件箱,标照摘。 - retriage 维持或改判皆由分诊席同笔摘标;挂标归异议席。 +- retriage 的异议判据认内容(有评论写明所求)⛔ 不认形状(有一条异议评论)。 - 发版板 `target:`:判据二元,⛔ 不做优先级渐变:不修它,当前 RC 能不能发。 - 判阻塞四类:① 用户今天就撞的已发布面缺陷;② 公开契约 declared≠enforced。 - ③ 存量数据/迁移形状(发布后修不回);④ 发布说明里要为它道歉的。 diff --git a/.claude/skills/pm-dispatch/references/core-rules.md b/.claude/skills/pm-dispatch/references/core-rules.md index 030185679b..96be37b906 100644 --- a/.claude/skills/pm-dispatch/references/core-rules.md +++ b/.claude/skills/pm-dispatch/references/core-rules.md @@ -77,11 +77,11 @@ - 换班报告默认零建议,只收原则错缺、可机械化项与平台事实变化三类。 - 交接按收尾清单走完;强制接管 ⛔ 不取在飞卡,由原认领者跟完;归档自派会话不可移交。 ## 分诊座位职责 -- 执行席 ⛔ 跳过分诊动作,读到标签当既成事实;立卡者不查重、只附查重词。 +- 执行席 ⛔ 跳过分诊动作,读到标签当既成事实;立卡者只答类别/读者/查重命中数。 - 两级盘点是小时轮读增量加每日全量对账,枚举须比对总数、不等即报不完整并点名缺口。 - sweep 扫全裸卡、队列卡缺域或缺定级、域卡缺 pm 状态,排除跟踪、停放与协议载体卡。 - 首触定级跑到清空 ⛔ 无总量预算、未跑完断点续跑;清得空最新优先,否则最老优先。 -- 裸卡超过十五张则下一轮改域分批集中模式,每批不超过五张同族卡。 +- 立卡门四类外 ⛔ 不立卡;裸卡超十五张则下轮改域分批,每批不超过五张同族卡。 - 有落点或可复现的缺陷、实现未被裁错的说明书脱节进 `pm:queue`;工具卡另须带解锁行。 - 设计卡、契约形状提案、碰迁移形状或删已发布能力的进决策箱;无出处说明书脱节不进。 - 立卡限三类:今日可达可复现缺陷、契约违背、具名生产者陷阱;截断卡发修复指令不派。 diff --git a/.claude/skills/pm-dispatch/references/filing-gate.md b/.claude/skills/pm-dispatch/references/filing-gate.md new file mode 100644 index 0000000000..20b81baf8b --- /dev/null +++ b/.claude/skills/pm-dispatch/references/filing-gate.md @@ -0,0 +1,52 @@ +# 立卡门与定级判据 + +见 SKILL.md 〈分诊座位职责〉与〈平台读数纪律〉的指针行;本文是「什么才算一张卡」与 +定级、读数三组判据的执行说明。 + +## 立卡门 + +出处 —— 维护者 2026-09-21 逐字,不译: + +> 刚才 os-sam 又被封号了,也是因为分诊批量处理issue的时候,所以现在 issue 太多对于车队是负担。 19546 我希望在创建issue 的环节就卡死,没必要的issue就不要创建。 + +- 立卡只为四类,正文首行写出类别字母;⛔ 其余一律不立卡,不论它叫什么。 +- (a) 有具名落点或复现的产品缺陷,即 `pm:queue` 的定义。 +- (b) 只有维护者能做的决定,落卡即带「维护者速读」与四棱块。 +- (c) 维护者直派的任务,正文引其原话。 +- (d) 协调节点:跨仓/跨层父单与它的逐层子单。 +- ⛔ 不是卡:仪器误报与门禁假读数 —— 既不派 dev,今亦不立卡。 +- ⛔ 不是卡:席位自己的失误、协议观察与「记住这条」,它们进座位贴或收班简报。 +- ⛔ 不是卡:三类外的 `finding` —— 原为首触即关,今门前即拒。 +- ⛔ 不是卡:丢卡重建,除非它自身即 (a)–(d)。 +- ⛔ 不是卡:既有卡一条评论能承载的指针/知会/请求 —— 评论是加速器不是记录。 +- ⛔ 不是卡:sweep 每 fire 重导的 pin/bump/卫生提醒。 +- 每次 POST 之前正文答三件:类别字母、动手的读者(哪个席位哪一步)、查重词与命中数。 +- 缺任一件的卡由分诊首触即关、不定级,关单一行点名缺的是哪一件。 +- 「动手的读者」与 Acceptance notes 同一问:说得出具体 PR 或人 ⇒ 写进去,说不出 ⇒ 不立卡。 +- 配额:一席每 fire 至多立三张;sweep 超出的折进一张带清单的卡,或折进座位贴。 +- 分诊席的存量清理仍走维护者确认的十张一组,⛔ 不因本门改批量。 +- 写节奏 ⛔ 非可选:REST 写(评论/标签/关单/立卡)间隔 ≥3 秒,每账号每小时 ≤40 笔。 +- 收到 429 或次级限流 ⇒ 该席本 fire 停写,并把停写记在座位贴上。 +- 关单 ⛔ 永不由脚本循环连发:须维护者确认的分组,且逐笔之间留间隔。 + +## 定级判据(北极星「优先级」的执行说明) + +- 假绿另有条款:绿线被读作「已核对」而实际没核对 ⇒ 一次人眼捕获即一次实测代价。 +- 「仪器为车队服务」的四种答案 ⛔ 不压成两条;假红的标准代价形态是席位顺从它。 +- 点名一次被假红占住的席位动作(具名那张卡),与点名一次派错/落不了同等成立。 +- 沿链继承只给上界,界内哪格由失效形态定:墙齐平,税降一格;可重入队的 PR 是税。 +- 北极星第 4 条只认出货面(`skills/**`、产品文档),⛔ 不含 `.claude/**` 内部协议。 +- 它认的是一句说错的话,⛔ 不是一句缺席的话;缺句按覆盖不足走北极星第 2 条。 + +## 读数判据(判据的可达半径与零) + +- 判据有可达半径:半径内(本仓 CI、席位动作、run record)测出的零是真的零。 +- 半径外 = 出货给第三方的面:`packages/*/dist`、`.d.ts`、`content/docs/**`、`skills/**`、墓碑处方。 +- 半径外含拒绝消息、CHANGELOG 与协议的接受/拒绝行为;「点不出受害者」⛔ 不是证据。 +- 判据是「它对不对」,错 ⇒ 留;`packages/spec` 的「辅助面」⛔ 不蕴含「可关」。 +- 落点在半径内 ⛔ 不蕴含所护的在内:追「它最终护的是谁」⛔ 不追它住在哪个目录。 +- 零成读数须三件全立:① 同主体必中词证总体可达;② 探针问的是契约里真有的键/位置。 +- ③ 这个总体就是该现象会出现的地方;缺任一件,那个零只是探针的自画像。 +- 「某目录里没有 X」前先读其 README 与 `.gitignore`:被 ignore 的目录是约定 ⛔ 不是空集。 +- 前缀匹配 ⛔ 不是精确匹配:同族别名会撑满前缀,命中数与零一样会骗人。 +- 全板枚举每 fire 至多一次,⛔ 不反复实扫;统计走 `board-archive` 离线做,巡查按日。 diff --git a/scripts/pm/check-skill-line-ratchet.mjs b/scripts/pm/check-skill-line-ratchet.mjs index 4668a63382..e0578e1801 100644 --- a/scripts/pm/check-skill-line-ratchet.mjs +++ b/scripts/pm/check-skill-line-ratchet.mjs @@ -1211,6 +1211,12 @@ export const CEILINGS = new Map([ // Landing it in SKILL.md alone was option C, refused by the ruling: the twin // obligation is not waived. Landed count, headroom 0, same convention. ['.claude/skills/pm-dispatch/references/core-rules.md', 151], + // New file, landed at its own count (headroom 0, same convention as every + // entry above): the filing gate and the grading/reading criteria the triage + // seat applies. A new pm-dispatch references file belongs in this map by the + // header's own definition of the covered surface — the map is an + // ENUMERATION, so a file that is merely absent is silently unratcheted. + ['.claude/skills/pm-dispatch/references/filing-gate.md', 52], // The app-vs-platform boundary — the deciding question (could this be written // from the metadata alone, with no knowledge of this company?), the publication // 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([ ['.claude/skills/pm-dispatch/references/true-green.md', 0], ['.claude/skills/pm-dispatch/references/compile-surfaces.md', 352], ['.claude/skills/pm-dispatch/references/core-rules.md', 0], + ['.claude/skills/pm-dispatch/references/filing-gate.md', 0], ['.claude/skills/pm-dispatch/references/app-platform-boundary.md', 219], ['.claude/skills/pm-dispatch/references/lanes/engine.md', 0], ['.claude/skills/pm-dispatch/references/lanes/services.md', 0], From 6667449fb7fbb66057841479b4bbcbff4f7249df Mon Sep 17 00:00:00 2001 From: Claude Date: Mon, 21 Sep 2026 09:38:15 +0000 Subject: [PATCH 2/4] =?UTF-8?q?docs(pm-dispatch):=20the=20filing=20door's?= =?UTF-8?q?=20identity=20rule=20=E2=80=94=20writes=20go=20through=20claude?= =?UTF-8?q?[bot]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Door rule 6: issues, PRs and comments are written through the GitHub App installation identity, never a seat's user token — a user-class write is bound to its author and 404s with the account. Every seat reads back `user.type` on its first write of a fire and files nothing new that fire when it reads `User`. The claim carrier stays the assignee and attribution stays the session ID in the text. SKILL.md pays it in place: the paced-writes invariant now carries the identity prohibition in the same line. Claude-Session: https://claude.ai/code/session_012GcsUbuqFGBibkEDMRC1eE Co-authored-by: Claude --- .claude/skills/pm-dispatch/SKILL.md | 4 ++-- .claude/skills/pm-dispatch/references/filing-gate.md | 5 +++++ scripts/pm/check-skill-line-ratchet.mjs | 2 +- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/.claude/skills/pm-dispatch/SKILL.md b/.claude/skills/pm-dispatch/SKILL.md index 4343a0f64a..0c63d0d923 100644 --- a/.claude/skills/pm-dispatch/SKILL.md +++ b/.claude/skills/pm-dispatch/SKILL.md @@ -96,7 +96,7 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报 - 状态只经 GitHub 标签、assignee、正文行与 `pm:seat` 座位贴读写;循环须能从全新会话恢复。 - 用户账号仅三用:assignee、授权批准、维护者亲手;批准账号永不跑席位或作其关联用户。 - 内容写只走 REST 代理,⛔ 无 MCP 写;`user.login` 记令牌不记席位,归属 = 文本里的 session ID。 -- 写节奏 ⛔ 非可选:REST 写间隔 ≥3 秒、每账号每小时 ≤40 笔;429 ⇒ 该席本 fire 停写记贴。 +- 写侧恒走 `claude[bot]` ⛔ 不走用户令牌;节奏 ≥3 秒/笔、每账号每小时 ≤40 笔,429 即停写。 - GitHub 上一切新内容用英文;中文只留四通道(维护者速读、轮报、裁决引文、四维分析)。 - 裁决引文照抄不译;四维中文只管新记录,存量英文块 ⛔ 不迁移;存量中文 ⛔ 不追溯改写。 - 一 PM 恰管一车道,一车道由一组座位管,一席一贴;PM Y 管什么恰一个答案。 @@ -167,7 +167,7 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报 - 同仪器的控制词双零是仪器坏,⛔ 不读作缺席:换法重画再报;哑火仪器与干净结果同值。 - 控制通过 ≠ 问题问对:零命中须写仪器可达半径与一个必在半径外的已知目标。 - 半径按形态写(内容/文件名/声明/字段);所求在半径外 ⇒ 零非读数,换看得见它的仪器。 -- 零的三件判据、目录约定与精确名匹配见 `references/filing-gate.md` 的〈读数判据〉。 +- 零的三件判据、目录约定、精确名与枚举配额见 `references/filing-gate.md` 的〈读数判据〉。 - 正命中须答谁打印/执行它,否则不证缺陷仍活;注释/文档块/夹具/修复的回归 pin 不算。 - 他人据以行动的读数须带单位并答什么本来会让它不是这个值;递 dev 的恒标线索非答案。 - ⛔ 自用即弃的探针不欠此税;「不是这个值」的答案取逐字工件或具名反例。 diff --git a/.claude/skills/pm-dispatch/references/filing-gate.md b/.claude/skills/pm-dispatch/references/filing-gate.md index 3e7c78255e..f82a2ac974 100644 --- a/.claude/skills/pm-dispatch/references/filing-gate.md +++ b/.claude/skills/pm-dispatch/references/filing-gate.md @@ -8,6 +8,8 @@ 出处 —— 维护者 2026-09-21 逐字,不译: > 刚才 os-sam 又被封号了,也是因为分诊批量处理issue的时候,所以现在 issue 太多对于车队是负担。 19546 我希望在创建issue 的环节就卡死,没必要的issue就不要创建。 +> +> 之前封号的时候讨论过 issue 和 pr 应该使用 claude app 创建,名称应该是 claude(bot) - 立卡只为四类,正文首行写出类别字母;⛔ 其余一律不立卡,不论它叫什么。 - (a) 有具名落点或复现的产品缺陷,即 `pm:queue` 的定义。 @@ -28,6 +30,9 @@ - 写节奏 ⛔ 非可选:REST 写(评论/标签/关单/立卡)间隔 ≥3 秒,每账号每小时 ≤40 笔。 - 收到 429 或次级限流 ⇒ 该席本 fire 停写,并把停写记在座位贴上。 - 关单 ⛔ 永不由脚本循环连发:须维护者确认的分组,且逐笔之间留间隔。 +- 立卡、开 PR 与评论恒走 App 安装身份(`claude[bot]`),⛔ 不走席位用户令牌。 +- 用户类写绑作者:封号则其卡与评论按作者 404,故一个 fire 的首写回读 `user.type`。 +- 读到 `User` ⇒ 记座位贴、本 fire ⛔ 不立新卡;认领仍靠 assignee,署名仍是文本的 session ID。 ## 定级判据(北极星「优先级」的执行说明) diff --git a/scripts/pm/check-skill-line-ratchet.mjs b/scripts/pm/check-skill-line-ratchet.mjs index e0578e1801..86d7130a0c 100644 --- a/scripts/pm/check-skill-line-ratchet.mjs +++ b/scripts/pm/check-skill-line-ratchet.mjs @@ -1216,7 +1216,7 @@ export const CEILINGS = new Map([ // seat applies. A new pm-dispatch references file belongs in this map by the // header's own definition of the covered surface — the map is an // ENUMERATION, so a file that is merely absent is silently unratcheted. - ['.claude/skills/pm-dispatch/references/filing-gate.md', 52], + ['.claude/skills/pm-dispatch/references/filing-gate.md', 57], // The app-vs-platform boundary — the deciding question (could this be written // from the metadata alone, with no knowledge of this company?), the publication // test (one consumer is a use, two is a contract) and the two anti-patterns. From 34a97c480a5741169728b67d5911a1b67b7f5c75 Mon Sep 17 00:00:00 2001 From: Claude Date: Mon, 21 Sep 2026 09:40:41 +0000 Subject: [PATCH 3/4] docs(pm-dispatch): restore the two rule limbs the door's pointer had elided MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The three-state checklist test and the shapes that answer 「no reader」 (`.changeset/*`, an unowned doc page, a generated file, a swept batch) moved out of SKILL.md behind pointers but had not landed in the reference file. Both are back, and the new file's ceiling is re-pinned at its landed count. Claude-Session: https://claude.ai/code/session_012GcsUbuqFGBibkEDMRC1eE Co-authored-by: Claude --- .claude/skills/pm-dispatch/references/filing-gate.md | 4 ++++ scripts/pm/check-skill-line-ratchet.mjs | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/.claude/skills/pm-dispatch/references/filing-gate.md b/.claude/skills/pm-dispatch/references/filing-gate.md index f82a2ac974..5c8c4316ce 100644 --- a/.claude/skills/pm-dispatch/references/filing-gate.md +++ b/.claude/skills/pm-dispatch/references/filing-gate.md @@ -25,6 +25,7 @@ - 每次 POST 之前正文答三件:类别字母、动手的读者(哪个席位哪一步)、查重词与命中数。 - 缺任一件的卡由分诊首触即关、不定级,关单一行点名缺的是哪一件。 - 「动手的读者」与 Acceptance notes 同一问:说得出具体 PR 或人 ⇒ 写进去,说不出 ⇒ 不立卡。 +- 说不出的形态:`.changeset/*`、无人在改的文档页、生成物、已扫完的批次,兜底不成立。 - 配额:一席每 fire 至多立三张;sweep 超出的折进一张带清单的卡,或折进座位贴。 - 分诊席的存量清理仍走维护者确认的十张一组,⛔ 不因本门改批量。 - 写节奏 ⛔ 非可选:REST 写(评论/标签/关单/立卡)间隔 ≥3 秒,每账号每小时 ≤40 笔。 @@ -36,6 +37,9 @@ ## 定级判据(北极星「优先级」的执行说明) +- 清单项三态 ①:项会 fail ⇒ 断,继承其 `priority`;⛔「有人在等」不是定级判据。 +- ② 项的标题/场景断言该能力而 steps 到不了那条路径 ⇒ 补步骤并继承该项档 ⛔ 不降 p3。 +- ③ 无项断言该能力 ⇒ 缺项补账本、北极星第 2 条 p3;②最常见,`area:*` 继承后成规模。 - 假绿另有条款:绿线被读作「已核对」而实际没核对 ⇒ 一次人眼捕获即一次实测代价。 - 「仪器为车队服务」的四种答案 ⛔ 不压成两条;假红的标准代价形态是席位顺从它。 - 点名一次被假红占住的席位动作(具名那张卡),与点名一次派错/落不了同等成立。 diff --git a/scripts/pm/check-skill-line-ratchet.mjs b/scripts/pm/check-skill-line-ratchet.mjs index 86d7130a0c..a246f21f6f 100644 --- a/scripts/pm/check-skill-line-ratchet.mjs +++ b/scripts/pm/check-skill-line-ratchet.mjs @@ -1216,7 +1216,7 @@ export const CEILINGS = new Map([ // seat applies. A new pm-dispatch references file belongs in this map by the // header's own definition of the covered surface — the map is an // ENUMERATION, so a file that is merely absent is silently unratcheted. - ['.claude/skills/pm-dispatch/references/filing-gate.md', 57], + ['.claude/skills/pm-dispatch/references/filing-gate.md', 61], // The app-vs-platform boundary — the deciding question (could this be written // from the metadata alone, with no knowledge of this company?), the publication // test (one consumer is a use, two is a contract) and the two anti-patterns. From ae96af9dccb5487ee95cfcea0887ab2e796d1d0a Mon Sep 17 00:00:00 2001 From: Claude Date: Mon, 21 Sep 2026 10:07:16 +0000 Subject: [PATCH 4/4] docs(pm-dispatch): reconcile the four surviving lines that contradicted the door MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Round 2 of the at-tier review (record 5758683730, item 2). In-place rewrites only; every ceiling stays at headroom 0 and the new reference file's ceiling comes down with it. - SKILL.md:187 — the filer runs the dedupe query and writes it with its hit count, closed cards included; triage still owns the verdict. Its twin at core-rules.md:80 already carried the door's wording. - SKILL.md:241-242 and core-rules.md:61 — a cross-seat request rides on the existing card it concerns: `Blocked-by:` on the requesting card and one comment on the target's, naming the seat and the step. A new card only when no existing card carries the work and the request is itself door class ①②④. The inverted 「评论是加速器不是记录」 phrase is gone from both sides. - SKILL.md:310 and :785 — a 顺带发现 becomes a card only through the door. - The door's classes are ①②③④ everywhere, so they no longer share letters with `finding`'s (a)(b)(c); core-rules.md:87 now reads as the `finding` sub-rule inside door class ①, not as a second door. - os-dev.md:51 carried the same 「立卡者不查重」 claim and is rewritten too. - filing-gate.md's provenance block shrinks from five lines to two, keeping both maintainer sentences verbatim. Claude-Session: https://claude.ai/code/session_012GcsUbuqFGBibkEDMRC1eE Co-authored-by: Claude --- .claude/agents/os-dev.md | 2 +- .claude/skills/pm-dispatch/SKILL.md | 14 ++++++------- .../pm-dispatch/references/core-rules.md | 6 +++--- .../pm-dispatch/references/filing-gate.md | 21 ++++++++----------- scripts/pm/check-skill-line-ratchet.mjs | 2 +- 5 files changed, 21 insertions(+), 24 deletions(-) diff --git a/.claude/agents/os-dev.md b/.claude/agents/os-dev.md index 2ac96fc766..129e77273e 100644 --- a/.claude/agents/os-dev.md +++ b/.claude/agents/os-dev.md @@ -48,7 +48,7 @@ model: opus - 其余 ⛔ 不立卡:观察、休眠、零拉动、死代码、未演练漂移、抛光、风格、nit、命名。 - 它们进 PR `## Acceptance notes`;报告 `out_of_scope_findings` 逐条带 `class: a|b|c`+证据或 `carrier:`。 - `carrier:` = 将碰该文件的 PR 或人,答不出写「承接者:无」;皆无 ⇒ 只进 Acceptance notes。 - - 立卡者不查重,只在卡面附 3–5 个查重词;查重归分诊席,⛔ 不扫 open issues、不拉板。 + - dev ⛔ 不查重,只附 3–5 个查重词;查询与命中数由立卡席写,⛔ 不扫 open issues、不拉板。 - GitHub 写一律走 REST 代理(`curl` 带 `GITHUB_TOKEN`);归属 = 文本里的 session ID,非 `user.login`。 - 写预算四笔:`git push`、一次 `POST /pulls`(draft)、`POST /issues/{n}/labels`、`os-dev-report` 评论。 - 卡与线程只走 payload 档(公开仓单卡网页内嵌 JSON,拼写住 platform-readings)或单卡 REST 读。 diff --git a/.claude/skills/pm-dispatch/SKILL.md b/.claude/skills/pm-dispatch/SKILL.md index 0c63d0d923..16546f68a7 100644 --- a/.claude/skills/pm-dispatch/SKILL.md +++ b/.claude/skills/pm-dispatch/SKILL.md @@ -184,7 +184,7 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报 - dev 自己死了不等于维护者中止:子代理消失是正常死法,走接管(见认领节)。 - 维护者中止只认原话或宿主回报 stopped by the user,⛔ 不据推断立无重启条件的门。 - 共享基础设施修复入队前按症状复查 main,不按 issue 号。 -- 立卡者不查重、只附 3–5 查重词;真撞上重复,先比数值与作用域再决定关哪个。 +- 立卡者自跑查重并写下查询与命中数(含 closed);判重仍归分诊,比数值与作用域定关哪个。 - sweep 晋级与立卡的前提要对此刻的 main;dev 带证据的零实现停手是好产出,不当返工计。 - 裁决明令的动作实施中测出对向事实 ⇒ 照字面执行,被打断行为的 pin 反转为拒绝 pin。 - 对向事实下 ⛔ 同 PR 不做任何 promote/回退;pin 是反转不是删除。 @@ -238,8 +238,8 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报 - 认领即跟到 MERGED:派发后发现的跨车道面(含 spec)不移卡,认领席借契约复审档隔离复核。 - 复核记录带 `Implemented-by:`/`Reviewed-by:`,自审机读可见;`pm:retriage` 改路由只对未派发卡。 - 转移落对方队列:目标仓立单带 `pm:queue`、出处行与一行可执行判据,依赖用 `Blocked-by:`。 -- 任何跨座位请求都是工作(要读数、要开卡、要授权):一律立卡进目标车道队列。 -- ⛔ 座位贴敲门或裁决评论永不作跨座位请求的唯一载体;评论是加速器不是记录。 +- 跨座位请求骑在它所关的既有卡上:请求席在自卡写 `Blocked-by:`,并在目标卡留一条评论。 +- 该评论点名席位与步骤;无既有卡承载且请求自身即立卡门 ①②④ 时才立新卡。 - 等待方同一笔把自卡翻 `pm:blocked` + `Blocked-by:` 指向请求卡;⛔ 不设新标签新 sweep。 - 目标仓不可达是读数缺口,不是落点:由可达席在目标仓立卡,此前请求记座位贴或协调卡。 @@ -307,7 +307,7 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报 - `pm:epic` + `pm:queue` 同卡 = 半状态(保留兼移交);后者即已移交,取回走全套认领协议含重读。 - 单车道仓(无 `domain:*`)开卡即认领合法;多车道仓域标签前置照旧,子树标记即保留。 - 新立 spec/公共契约 sub-issue 照旧转 spec 座位队列,epic 侧写 `Blocked-by:`;衍生按三分留席。 -- 顺带发现 ⇒ 独立立单进修复落地仓,附查重词;⛔ 不借 sub-issue 通道塞未分诊卡进池子。 +- 顺带发现只经立卡门:三类内缺陷才立,带查询与命中数;其余进 Acceptance notes 或座位贴。 - 每次分流留一行审计评论;父单维护 checklist 汇总评论,决策仍锚在具体 sub-issue。 - 收尾四步、僵尸回收与领地防撞细则见 `references/seat-post-protocol.md`。 @@ -348,8 +348,8 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报 - 碰迁移形状或删已发布能力也进决策箱;说明书脱节不进:有裁定出处才是 (b),否则改文档。 - 决策卡落卡必带四棱卡面块与其上的「维护者速读」,⛔ 不留待有人接手再补。 - 决策卡的速读同题,用业务语言先讲事情与选项,末句只问一字:A/B/C 或是否。 -- 立卡门:只为四类立卡 —— 缺陷 / 维护者决定 / 直派任务 / 协调节点,⛔ 其余不立卡。 -- 正文首行写类别字母;四类定义、⛔ 清单、三答与配额见 `references/filing-gate.md`。 +- 立卡门四类:① 缺陷 / ② 维护者决定 / ③ 直派任务 / ④ 协调节点,⛔ 其余一律不立卡。 +- 首行写立卡门类别 ①–④;四类定义、⛔ 清单、三答与配额见 `references/filing-gate.md`。 - `finding` = 三类内待定级:(a) 可复现缺陷(复现或失败探针);(b) 违背已声明契约(引契约文); - (c) AI 写元数据会被运行时拒收或静默丢弃的陷阱;其余进 PR `## Acceptance notes`,⛔ 不立卡。 - (a) 的分界是不完整 vs 错误,不是文档 vs 代码:示例照抄即失败是 (a),漏列成员不是。 @@ -782,7 +782,7 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报 - `status: needs_decision` 时 `open_questions` 必须非空。 - `out_of_scope_findings` 每条 `class: a|b|c`+证据,或 `carrier:`(承接者);皆无 ⇒ Acceptance notes。 - dev 不立卡;ACCEPT 逐条一行 `filed #N`/`Acceptance notes`/`dropped — 因`;三类由席位立在修复仓。 -- 席位读 PR `## Acceptance notes`,实属三类的补立、归挂、附查重词;三类外已立卡关 not planned。 +- 席位读 PR `## Acceptance notes`,实属三类的经立卡门补立、归挂;门外已立卡关 not planned。 - PM 核验它们存在,并把同轮并行报告互相对读:两个 dev 同一小时审相邻代码会立出孪生卡。 ## 机械守卫索引 diff --git a/.claude/skills/pm-dispatch/references/core-rules.md b/.claude/skills/pm-dispatch/references/core-rules.md index b5a52abf1b..031ce186ff 100644 --- a/.claude/skills/pm-dispatch/references/core-rules.md +++ b/.claude/skills/pm-dispatch/references/core-rules.md @@ -58,7 +58,7 @@ - 跨层功能点或跨仓 `Seam:` 卡拆成父单加逐层子单,下游带 `Blocked-by:`,上游未关 ⛔ 不派发。 - pin 消费的仓派发前核 pin 是否已覆盖那个提交,发布包消费的仓判据是消费方可安装。 - 上游未发版时转 hold ⛔ 不回队列;已验收产物流向另一仓由接受席立即立后续单。 -- 跨座位请求即立卡进目标车道,自卡翻 `pm:blocked`;阻塞项无主由被挡席认领,在飞即等。 +- 跨座位请求骑既有卡:自卡 `Blocked-by:` + `pm:blocked`,目标卡评论;无主被挡席认领,在飞即等。 - 认领席跟到 MERGED,派发后的跨车道面不移卡、借隔离复核;新 spec 工作由 spec 席收口。 ## 域车道 - 每个包恰好属于一个域,域标签 = 修复落地包的域,只决文件归属 ⛔ 非队列非优先级单位。 @@ -81,10 +81,10 @@ - 两级盘点是小时轮读增量加每日全量对账,枚举须比对总数、不等即报不完整并点名缺口。 - sweep 扫全裸卡、队列卡缺域或缺定级、域卡缺 pm 状态,排除跟踪、停放与协议载体卡。 - 首触定级跑到清空 ⛔ 无总量预算、未跑完断点续跑;清得空最新优先,否则最老优先。 -- 立卡门四类外 ⛔ 不立卡;裸卡超十五张则下轮改域分批,每批不超过五张同族卡。 +- 立卡门 ①–④ 外 ⛔ 不立卡;裸卡超十五张则下轮改域分批,每批不超过五张同族卡。 - 有落点或可复现的缺陷、实现未被裁错的说明书脱节进 `pm:queue`;工具卡另须带解锁行。 - 设计卡、契约形状提案、碰迁移形状或删已发布能力的进决策箱;无出处说明书脱节不进。 -- 立卡限三类:今日可达可复现缺陷、契约违背、具名生产者陷阱;截断卡发修复指令不派。 +- 门 ① 内 `finding` 限三类:今日可达可复现缺陷、契约违背、具名生产者陷阱;截断卡不派。 - 三类边界:缺陷问错不问缺、文档同判;元数据须他人再作者化;引向更糟的警告在类外。 - 类型字段由分诊席唯一生产,违背已声明契约是缺陷、扩出已声明是功能、其余是任务。 - 缺陷卡无具名落点或复现路径不入队列 ⛔ 不回填存量;每张卡留一条英文审计评论。 diff --git a/.claude/skills/pm-dispatch/references/filing-gate.md b/.claude/skills/pm-dispatch/references/filing-gate.md index 5c8c4316ce..7f273778e7 100644 --- a/.claude/skills/pm-dispatch/references/filing-gate.md +++ b/.claude/skills/pm-dispatch/references/filing-gate.md @@ -5,24 +5,21 @@ ## 立卡门 -出处 —— 维护者 2026-09-21 逐字,不译: - -> 刚才 os-sam 又被封号了,也是因为分诊批量处理issue的时候,所以现在 issue 太多对于车队是负担。 19546 我希望在创建issue 的环节就卡死,没必要的issue就不要创建。 -> +> 出处,维护者 2026-09-21 逐字不译:刚才 os-sam 又被封号了,也是因为分诊批量处理issue的时候,所以现在 issue 太多对于车队是负担。 19546 我希望在创建issue 的环节就卡死,没必要的issue就不要创建。 > 之前封号的时候讨论过 issue 和 pr 应该使用 claude app 创建,名称应该是 claude(bot) -- 立卡只为四类,正文首行写出类别字母;⛔ 其余一律不立卡,不论它叫什么。 -- (a) 有具名落点或复现的产品缺陷,即 `pm:queue` 的定义。 -- (b) 只有维护者能做的决定,落卡即带「维护者速读」与四棱块。 -- (c) 维护者直派的任务,正文引其原话。 -- (d) 协调节点:跨仓/跨层父单与它的逐层子单。 +- 立卡只为四类,正文首行写立卡门类别 ①–④;⛔ 其余一律不立卡,不论它叫什么。 +- ① 有具名落点或复现的产品缺陷,即 `pm:queue` 的定义;其内的 `finding` 限三类。 +- ② 只有维护者能做的决定,落卡即带「维护者速读」与四棱块。 +- ③ 维护者直派的任务,正文引其原话。 +- ④ 协调节点:跨仓/跨层父单与它的逐层子单。 - ⛔ 不是卡:仪器误报与门禁假读数(不派 dev 见 `references/instrument-discipline.md`)。 - ⛔ 不是卡:席位自己的失误、协议观察与「记住这条」,它们进座位贴或收班简报。 - ⛔ 不是卡:三类外的 `finding` —— 原为首触即关,今门前即拒。 -- ⛔ 不是卡:丢卡重建,除非它自身即 (a)–(d)。 -- ⛔ 不是卡:既有卡一条评论能承载的指针/知会/请求 —— 评论是加速器不是记录。 +- ⛔ 不是卡:丢卡重建,除非它自身即 ①–④。 +- ⛔ 不是卡:既有卡一条评论能承载的指针/知会/请求;那条评论即其记录。 - ⛔ 不是卡:sweep 每 fire 重导的 pin/bump/卫生提醒。 -- 每次 POST 之前正文答三件:类别字母、动手的读者(哪个席位哪一步)、查重词与命中数。 +- POST 前正文答三件:类别 ①–④、动手的读者(哪席哪步)、查重查询与命中数(含 closed)。 - 缺任一件的卡由分诊首触即关、不定级,关单一行点名缺的是哪一件。 - 「动手的读者」与 Acceptance notes 同一问:说得出具体 PR 或人 ⇒ 写进去,说不出 ⇒ 不立卡。 - 说不出的形态:`.changeset/*`、无人在改的文档页、生成物、已扫完的批次,兜底不成立。 diff --git a/scripts/pm/check-skill-line-ratchet.mjs b/scripts/pm/check-skill-line-ratchet.mjs index a246f21f6f..d149a3e422 100644 --- a/scripts/pm/check-skill-line-ratchet.mjs +++ b/scripts/pm/check-skill-line-ratchet.mjs @@ -1216,7 +1216,7 @@ export const CEILINGS = new Map([ // seat applies. A new pm-dispatch references file belongs in this map by the // header's own definition of the covered surface — the map is an // ENUMERATION, so a file that is merely absent is silently unratcheted. - ['.claude/skills/pm-dispatch/references/filing-gate.md', 61], + ['.claude/skills/pm-dispatch/references/filing-gate.md', 58], // The app-vs-platform boundary — the deciding question (could this be written // from the metadata alone, with no knowledge of this company?), the publication // test (one consumer is a use, two is a contract) and the two anti-patterns.