Skip to content

docs(pm): a plain-language digest of the PM corpus's binding rules - #15402

Merged
os-zhuang merged 4 commits into
mainfrom
claude/issue-15379-pm-core-rules-digest
Sep 4, 2026
Merged

docs(pm): a plain-language digest of the PM corpus's binding rules#15402
os-zhuang merged 4 commits into
mainfrom
claude/issue-15379-pm-core-rules-digest

Conversation

@claude

@claude claude Bot commented Sep 4, 2026

Copy link
Copy Markdown
Contributor

Part of #15379 (family carrier — stays open for members 1b–5)
Part of #15412

A plain-language digest of the PM corpus's binding rules, so the maintainer reviews the
rules instead of the corpus. One new reference file, .claude/skills/pm-dispatch/references/core-rules.md,
plus the ceiling row and max-table-row pin the ratchet map owes any new covered file.

What this is

  • 134 rules, one per line, 150 lines total, grouped under the corpus's own section
    order: entry and roles, the all-seat invariants, the state model, platform-reading
    discipline, multi-repo coordination, domain lanes, the seat post, the triage seat, the
    execution seat, quota-wall recovery, escalation and decisions, guardrails, the report
    contract.
  • Rules only. No provenance narrative, no incident post-mortem, no date, no
    quotation, no issue or PR number, no marker other than the prohibition sign. Each line
    states what to do or what never to do, plus the threshold or the name it depends on.
    Identifiers stay in English (label names, body-line keys, commands, paths).
  • Every line is within the ratchet's 120-byte cap; the widest is 120 bytes.
  • Round boundary (added in the second patch round). The corpus states the boundary
    in three separate places and nowhere in one: a round runs to empty, there is no
    per-round total budget, and a round may span fires. Two digest lines now collect it —
    a round runs from the fire that wakes the seat until the queue is empty or the usage
    window is exhausted, the round report is the end-of-round account and not a stop
    signal, and the self-timer sets only the next wake-up, so an unfinished round is
    continued on the next fire rather than restarted or re-ordered. The triage seat's
    timer line is reworded to the same reading, so it can no longer be read as a
    round-length cap.
  • The escalation decision frame is referred to by section, and its axes are named in
    short words. The frame block itself is not reproduced: it stays in exactly its two
    watched copies, and check:skill-frame-sync still reports two.

How to review it

Read the digest file. The first table below is the instrument: one row per digest line,
with the corpus section it comes from and what the corpus wrapped around it that this
digest drops. Sample any rule you remember from the corpus and look for it in the table.
The second table lists what was deliberately left out, by class, so the omissions are
reviewable too. The third table lists the conflicts found while reading the corpus; they
are reported, not resolved here.

Table 1 — rule inventory (one row per digest line)

# section digest line source dropped
1 入口与角色 座位角色由 /pm-dispatch 参数认定;无角色参数按执行姿态跑,车道由座位贴认定。 SKILL.md 入口与角色 (args table, role-param paragraph) none
2 入口与角色 开轮第一个动作是一次最便宜的车道盘点查询,⛔ 在它之前不读任何长文本。 SKILL.md 入口与角色 (probe-first) none
3 入口与角色 队列空、无在飞、无待复核、决策箱无新答复,本轮即自退。 SKILL.md 入口与角色 (self-exit) narrative (the idle-seat cost-bound sentence)
4 入口与角色 一轮自 fire 唤醒起,到队列清空或用量窗口耗尽止;轮次报告是轮末汇报 ⛔ 不是停止信号。 SKILL.md 入口与角色 (probe-first, self-exit) with 分诊座位职责 (run to empty, no per-round budget, a round may span fires) ADDED this round — the corpus states the round boundary in three places and never in one; this line collects it, with the narrative dropped
5 入口与角色 自设定时器只定下次唤醒、不定轮长;新 fire 到时上一轮未清空即接续,⛔ 不重开不重排。 SKILL.md 入口与角色 (self-schedule) with 分诊座位职责 (a new fire continues an unfinished round) ADDED this round — narrative and the ruling date dropped
6 入口与角色 分诊席跑普通直连会话,达档职责改派显式传档位的子代理;自排下次唤醒不超过 55 分钟。 SKILL.md 入口与角色 (triage session shape, self-schedule) quotation + date; narrative (prompt-cache TTL rationale). REWORDED this round: the timer is the next wake-up, not a round-length cap
7 入口与角色 开轮互斥读四个读数:收班简报、开轮标记、本车道最新他会话认领、最新关闭卡的认领。 SKILL.md 入口与角色 (open-round mutual exclusion, four readings) date; narrative (the fourth-reading blind-spot story)
8 入口与角色 未收班活动任一未满一个轮次即自退;有收班简报可直接坐席,坐席后先写开轮标记。 SKILL.md 入口与角色 (shift-close brief releases the seat) narrative (why a brief is a release marker, not a lock)
9 全体座位的不变量 所有状态住 GitHub 的标签、assignee、正文行与 pm:seat 座位贴,⛔ 本地不留跟踪状态。 SKILL.md 全体座位的不变量 none
10 全体座位的不变量 循环必须能从全新会话恢复。 SKILL.md 全体座位的不变量 none
11 全体座位的不变量 PM ⛔ 不写文件也不写代码,唯一例外是维护者逐 PR 明示授权的 .claude/ 内部工具 PR。 SKILL.md 全体座位的不变量 (PM writes nothing) none
12 全体座位的不变量 该例外须把授权原话引在 PR 正文并由另一座位或维护者复核,⛔ 不得自审自合。 SKILL.md 全体座位的不变量 (the one authorised exception) none
13 全体座位的不变量 GitHub 上的新内容一律英文,中文只留轮次报告、派发令里的裁决引文与决策四维分析。 SKILL.md 全体座位的不变量 (language policy) date
14 全体座位的不变量 裁决引文照抄不译;存量中文 ⛔ 不追溯改写。 SKILL.md 全体座位的不变量 (rulings quoted untranslated) narrative (rewriting a quote rewrites the ruling)
15 全体座位的不变量 一座位一车道双射,每个域恰好一个 PM;与 AGENTS.md 冲突时以 AGENTS.md 为准。 SKILL.md 全体座位的不变量 (one seat one lane; AGENTS.md wins) none
16 状态模型 可派发等于 open 加队列标签加无 assignee 且不带 pm:retriage,已设 assignee 即 ⛔ 永不碰。 SKILL.md 状态模型 table rows 1-2; 认领 none
17 状态模型 pm:dispatched 与摘 pm:queue 恒在同一次标签写入里成对落地。 SKILL.md 状态模型 row pm:dispatched narrative (why an unpaired write costs re-reads)
18 状态模型 needs-user-decision 是决定待做:⛔ 永不派发,除代裁通道外 ⛔ 永不代答。 SKILL.md 状态模型 row needs-user-decision none
19 状态模型 pm:on-hold 仅当带机器可读 Restart-when: 行才合法,触发文件走 Restart-touch: 行。 SKILL.md 状态模型 row pm:on-hold; state-machine.md pm:on-hold parameter (the exact Restart-when / Restart-touch line contracts stay in state-machine.md)
20 状态模型 hold 放行须双查:只放最近一次转换评论的条件,其后有更新的 merged PR 即拒。 state-machine.md pm:on-hold release double-check none
21 状态模型 没有可点火出口的卡 ⛔ 不 hold,直接关 not planned 并把理由与出处写进关单评论。 SKILL.md 标签纪律 (no exit means close not planned) date; narrative (a card is the record, reopening is free)
22 状态模型 缺陷卡 ⛔ 不可自行关闭或藏进 hold:可复现回队列、未兑现走 enforce-or-remove、余下进箱。 SKILL.md 标签纪律 (type:Bug three branches) narrative (a held Bug is a hidden defect)
23 状态模型 pm:blocked 配正文行 Blocked-by:,工已完而卡在门禁的同用此态并写 Unlock-action: 行。 SKILL.md 状态模型 row pm:blocked; state-machine.md pm:blocked parameter (the single accepted Unlock-action value stays in state-machine.md)
24 状态模型 pm:awaiting-maintainer 只剩站外人工动作;pm:blocking 是反向索引推导的缓存 ⛔ 不手工挂。 SKILL.md 状态模型 rows pm:awaiting-maintainer / pm:blocking; state-machine.md none
25 状态模型 pm:retriage 并存 ⛔ 不摘原标且跳过派发;finding 恒等于待首次定级、定级即离标。 SKILL.md 状态模型 rows pm:retriage / finding date
26 状态模型 插队标签可超 batch 立即派发,⛔ 不豁免同文件串行与认领协议。 SKILL.md 状态模型 row priority:p0 none
27 状态模型 五个 pm 状态标签加 needs-user-decision 共六态互斥,转换恒一笔 replace,队列卡逾三天欠转换。 state-machine.md 通则 six-state ONE-OF and queue rot horizon narrative (the cause is always a half-written transition)
28 状态模型 关闭即在同一笔摘掉 pm 状态标;状态变更不过夜,半状态在结束会话前补齐或回滚。 SKILL.md 标签纪律 (strip on close; no half state overnight) none
29 状态模型 等待别的座位也是状态、写在卡上才存在;代他人指令的关闭须带指令、原话与出处三件。 SKILL.md 标签纪律 (waiting is a state; provenance triple) date; narrative
30 状态模型 标签写恒为读现值、增删目标、写合并集、回读比对四步,缺项即重挂,闸门标签同此。 SKILL.md 标签纪律 (label write is read-modify-write); platform-readings.md MCP labels; rest-channel.md write side date; narrative (the compare read-back detects, never prevents)
31 平台读数纪律 判据取命令输出,⛔ 不取 API 字段字面值、不取本地工作树、不取看着相邻的日志。 SKILL.md 平台读数纪律 (the unifying principle) none
32 平台读数纪律 核验 main 用先 fetch 后的 origin/main,⛔ 不用共享检出的工作树。 SKILL.md 平台读数纪律 (verify main on origin/main) narrative (the shared checkout HEAD moves under you)
33 平台读数纪律 零命中必须用确定存在的邻近词反查才成立;仓不可达时 ⛔ 不得当成查过且干净。 SKILL.md 平台读数纪律 (zero hits need a positive control) narrative
34 平台读数纪律 板面、树与队列读数一律自带 UTC 取数时刻,无时间戳的读数按未取处理。 SKILL.md 平台读数纪律 (readings carry their UTC timestamp) quotation + date
35 平台读数纪律 失效修法按序取:先删掉容许出错的构造,再让正确形态成为唯一拼写,最后才加检查。 SKILL.md 平台读数纪律 (fix order: remove the construct first) narrative (which class recurs and which held)
36 平台读数纪律 自设定时器的文本以先重读状态开头,只写关键判据,⛔ 不写可直接执行的祈使句。 SKILL.md 平台读数纪律 (timer text discipline) none
37 平台读数纪律 PM 写进 GitHub 的文本 ⛔ 不用尖括号占位符,携带易损片段的评论发出后回读。 SKILL.md 标签纪律 (no angle-bracket placeholders); AGENTS.md body-bytes clause narrative (what a swallowed fragment leaves behind)
38 平台读数纪律 放行认承载门禁族的 job 结论 ⛔ 不认聚合读数,advisory 红着进 main 即止血并立单。 SKILL.md 平台读数纪律 (gate job conclusion; advisory red) none
39 平台读数纪律 子代理自死不等于维护者中止,需显式信号;立单前查重的空结果须有控制词背书。 SKILL.md 平台读数纪律 (dev death is not a maintainer stop; dedup before filing); platform-readings.md session-level search zero date; narrative (the measured session-level failure)
40 平台读数纪律 默认读序 git、payload、REST、MCP;REST 可达性逐会话探一次;派发前读配额不够就减批。 SKILL.md 平台读数纪律; platform-readings.md API quota; rest-channel.md parameter (the per-operation channel table and quota figures stay in rest-channel.md / platform-readings.md); date
41 多仓协调 依赖方向固定:objectstack 提供唯一契约,objectui 与 cloud 消费它。 SKILL.md 多仓协调 preamble none
42 多仓协调 多车道仓的域标签、类型与定级只由中央分诊生产,单车道仓自理三务但 ⛔ 不产域标签。 SKILL.md 多仓协调 preamble (two repo classes) date
43 多仓协调 跨仓查重与 shadow 检查恒归中央 ⛔ 不下放,在飞卡 ⛔ 不中途转仓。 SKILL.md 多仓协调 preamble; rule 1 none
44 多仓协调 issue 住在修复落地的仓,抽掉 objectstack 仍成立的当场转仓;缝卡须带仓标签并点名读者。 SKILL.md 多仓协调 rule 1 (file at destination; seam cards) date
45 多仓协调 跨仓 feature 拆成父单加每仓一张子单,下游带 Blocked-by:,上游未关闭 ⛔ 不派发。 SKILL.md 多仓协调 rule 2 (contract-first split) none
46 多仓协调 pin 消费的仓派发前核 pin 是否已覆盖那个提交,发布包消费的仓判据是消费方可安装。 SKILL.md 多仓协调 rule 2 (pin lag); 标签纪律 (cross-repo unlock) parameter (the REST compare recipe stays in platform-readings.md)
47 多仓协调 上游未发版时转 hold ⛔ 不回队列;已验收产物流向另一仓由接受席立即立后续单。 SKILL.md 标签纪律 (cross-repo unlock); 多仓协调 rule 3 narrative (a re-queued dispatch ends premise-false)
48 多仓协调 任何跨座位请求都是工作,一律立卡进目标车道队列,等待方同笔把自卡翻 pm:blocked SKILL.md 多仓协调 跨座位转移 narrative (a comment is an accelerator, not a record)
49 多仓协调 凡触 packages/spec 一律转 domain:spec 座位,不论谁需要它。 SKILL.md 多仓协调 跨座位转移 (spec is the sole owner) none
50 域车道 每个包恰好属于一个域,域标签等于修复落地的那个包所属的域,由分诊读代码判定。 SKILL.md 域车道 (anchoring rule) none
51 域车道 ⛔ 绝不从 issue 标题的词汇猜域;说不出修复碰哪个文件就还不可标。 SKILL.md 域车道 (anchoring rule, second half) none
52 域车道 域到包家族的对照表住 SKILL.md,增删一个域标签必须同批改那张表。 SKILL.md 域车道 (table maintenance) parameter (the domain-to-package table itself stays in SKILL.md)
53 域车道 域标签只由分诊席产出;打标签不等于认领,未打标签的 issue ⛔ 任何人不得认领。 SKILL.md 域车道 (single producer) narrative
54 域车道 跨域单 PR 由分诊席指定一个车道 PM 认领并申报完整文件面,只此路径跑定向在飞检查。 SKILL.md 域车道 (cross-domain exception path) none
55 域车道 合并队列是共享串行资源,谁发现 flake 谁修或立单,⛔ 不绕行。 SKILL.md 域车道 (merge queue is a shared serial resource) narrative (the flake tax scales with PM count)
56 座位贴协议 一座位一贴,正文固定四段现值:当前 PM、继承台账、热文件串行队、说明。 SKILL.md 座位贴协议; seat-post-protocol.md date
57 座位贴协议 贴正文由在任 PM 独家编辑且为权威,标题只放慢状态、与 assignee 同为派生视图同笔更新。 SKILL.md 座位贴协议; seat-post-protocol.md title/assignee none
58 座位贴协议 岗位说明与常设承诺版本化在 references/lanes/ 下,贴内只放指针,升级走技能 PR。 SKILL.md 座位贴协议 (job descriptions versioned in lanes/) date; narrative (hand-copied relay is the failure mode being retired)
59 座位贴协议 写侧刷新点是轮次边界,读侧只读正文加晚于它的评论;热文件串行队是正文具名段。 SKILL.md 座位贴协议 (write-side refresh point, read-side boundary, hot-file queue) date
60 座位贴协议 活性靠惰性判定,超过一天无自有产出即可降级回收;⛔ 永不从更新时刻或标题推死活。 seat-post-protocol.md liveness narrative (the stale-post anecdote)
61 座位贴协议 收班是状态 flush 加在飞安置而非归零,简报是最终一笔;留守只写简报点名的项。 seat-post-protocol.md close of shift; linger date
62 座位贴协议 换班报告默认零建议,只收原则错缺、可机械化项与平台事实变化三类。 SKILL.md 座位贴协议 (shift report carries zero advice) date; narrative
63 座位贴协议 交接按收尾清单逐步走完并清点自设定时器;归档自己派出的会话是不可移交的义务。 seat-post-protocol.md handover checklist parameter (the seven numbered steps stay in seat-post-protocol.md)
64 分诊座位职责 执行席 ⛔ 跳过分诊动作,读到标签当既成事实。 SKILL.md 分诊座位职责 (opening) none
65 分诊座位职责 两级盘点是小时轮读增量加每日全量对账,枚举须比对总数、不等即报不完整并点名缺口。 SKILL.md 两级盘点; dispatch-runbook.md 分诊两级盘点细则 date; narrative (token-cost figures)
66 分诊座位职责 sweep 扫全裸卡、队列卡缺域标签、域标签卡缺 pm 状态,排除跟踪、停放与协议载体卡。 SKILL.md Backlog sweep (the three-way disjunction and exclusions) narrative (half-labelled cards are produced by design); parameter (the ~2-minute window)
67 分诊座位职责 首触定级跑到清空 ⛔ 无总量预算、未跑完断点续跑;清得空最新优先,否则最老优先。 SKILL.md Backlog sweep / 发现分诊轮 (run to empty; ordering) narrative (the threshold rationale and the measured dump)
68 分诊座位职责 裸卡超过十五张则下一轮改域分批集中模式,每批不超过五张同族卡。 SKILL.md Backlog sweep (>15 threshold); 发现分诊轮 (batch of five) date
69 分诊座位职责 有落点或可复现的具体缺陷与范围明确的工具修复进 pm:queue SKILL.md 分类动作 (pm:queue) none
70 分诊座位职责 设计卡、契约形状提案、碰迁移形状或删已发布能力的进决策箱,落卡即带四棱块。 SKILL.md 分类动作 (decision inbox); 升级与决策 (facet block mandatory at filing) none
71 分诊座位职责 观察类记录打 finding 待首次定级;正文被截断的卡先发修复指令再跳过,不可派发。 SKILL.md 分类动作 (finding; repair first) narrative
72 分诊座位职责 类型字段由分诊席唯一生产,违背已声明契约是缺陷、扩大接受面是功能、其余是任务。 SKILL.md 原生 issue 类型 date; narrative (the three readers)
73 分诊座位职责 缺陷卡无具名落点或复现路径不入队列 ⛔ 不回填存量;每张卡留一条英文审计评论。 SKILL.md 原生 issue 类型; 路由 (audit comment) none
74 分诊座位职责 路由是分诊的技术判断 ⛔ 永不升级哪个仓的问题;父单是协调节点、永不派发。 SKILL.md 路由即分诊的技术判断 none
75 分诊座位职责 发版板判据二元:不修它当前候选版能不能发 ⛔ 不做渐变,拆票时标签随工作走。 SKILL.md 发版板 (binary criterion; split inheritance) narrative (a gradient nobody maintains)
76 分诊座位职责 发版阻塞四类:用户今天撞上的已发布面缺陷、契约声明未兑现、迁移形状、要道歉的。 SKILL.md 发版板 (four blocker classes) none
77 分诊座位职责 代裁只由达档者产出 ⛔ 永不凭自述,不达档则通道整体跳过、卡走维护者路径。 SKILL.md 分诊座位职责 (adjudication tier gate) quotation + date
78 分诊座位职责 人工地板恒交维护者:功能新增、ADR、协议与公开契约变化、破坏性或难回滚动作。 SKILL.md 高置信决策卡的分诊代裁 (human floor) narrative (AI has a structural motive to turn CI green)
79 分诊座位职责 人工地板同样含安全与权限边界、门禁削弱、花费配额与模型档位、新增运行时依赖。 SKILL.md 高置信决策卡的分诊代裁 (human floor, second half) narrative
80 分诊座位职责 代裁车道只覆盖行为不变的重构与缺陷修复,边界测试是接受面有没有扩大。 SKILL.md 代裁车道 + 机械边界测试 none
81 分诊座位职责 置信门五条全立才可代裁:四棱同向、不在地板、不推翻既有裁决、否决窗口执行、达档。 SKILL.md 置信门 date
82 分诊座位职责 代裁即换标签、贴四棱块与结论、打自动裁决标记、轮报设专节;发现契约要动则回箱。 SKILL.md 置信门 item 4; 回翻条款 narrative (the aggregate-drift brake)
83 分诊座位职责 方向性授权覆盖整条执行链,需裁事项攒批呈报,运维细节 ⛔ 不弹给维护者。 SKILL.md 请示纪律 date; quotation
84 执行座位职责 每轮巡检先读半状态巡查锚上点名本车道的行并逐行处置,未处置 ⛔ 不开新派发。 SKILL.md 执行座位职责 (patrol anchor first) none
85 执行座位职责 候选整车道一次读全再本地求交,每张读全文与全部评论并把裁决逐字引入派发词。 SKILL.md 候选与批次 (whole-lane read; decision re-read) date; narrative (the structural blind spot; why a race re-read cannot answer it)
86 执行座位职责 派发前做前提过时检查,动作面、卡引用面与工作项面三面都对树核验。 SKILL.md 候选与批次 (stale-premise check, three faces) narrative (the measured three-item card)
87 执行座位职责 一批内任两单不得碰同一个包、注册表、barrel 或 spec schema;同文件的单跨轮硬串行。 SKILL.md 批次独立性 none
88 执行座位职责 家族派发须过五门:同缺陷同修法、同包区域、成员皆已裁、逐成员可核、点名排除清单。 SKILL.md 家族派发 five gates narrative (which gate is load-bearing and why)
89 执行座位职责 两张以上排队卡共享热文件时,必须以五门为判据显式回答折叠还是串行。 SKILL.md fold-or-serial 必答 date; narrative (the doubled paydown cost)
90 执行座位职责 取卡全序:插队卡、有下游依赖者的卡、发版板上项、缺陷卡、其余,同级按卡龄。 SKILL.md 选择优先级 (lane total order); dispatch-runbook.md 取卡全序 date; narrative (the per-level rationale)
91 执行座位职责 认领原子对:一次标签写入完成认领与状态对调,随后留 Claim: 开头的评论并重读全线程。 SKILL.md 认领 (the atomic pair; claim comment; race re-read) date; parameter (the claim template and its field list stay in SKILL.md). MERGED this round with the former separate claim-comment-fields line, to pay for the two added rules
92 执行座位职责 更早的他会话认领即让行并交出已诊断的一切;认领逾一天且无合并证据即疑死。 SKILL.md 认领 (race re-read; yielding; stale-claim reclaim) narrative (why the closes-list is the wrong death leg)
93 执行座位职责 回收前先救工作树,有提交的活分支 ⛔ 永不回收。 SKILL.md 认领 (liveness gate before touching a worktree) narrative (uncommitted work is evidence of life, not death)
94 执行座位职责 一单一次派发调用,档位逐卡显式传参,协议语义面与契约变更卡恒走契约复审档。 SKILL.md 派发 (model tiering; mandatory clauses 1 and 2) date; narrative (the top tier audits and does not build)
95 执行座位职责 派发词 ⛔ 不整段粘贴 issue 正文,只带增量,并要求子代理自查正文完整性。 SKILL.md 派发词原则 (no body paste; dev self-check) narrative (the truncation risk transfers with the read)
96 执行座位职责 派发词分三区:裁决不可重裁、机制假设须实测、建议路线可换,⛔ 不把假设写成裁决。 SKILL.md 派发词原则 (three zones) narrative (an assumption wearing a ruling's clothes)
97 执行座位职责 标准非协商条款 ⛔ 不抄进派发词,清单、路径与行号在派发那一刻从树上取。 SKILL.md 派发词原则 (standard clauses stripped; lists taken from the tree) narrative
98 执行座位职责 危害断言必须有读数,测不了写成问题 ⛔ 不写成栅栏;技能包卡必带净增行数预算。 SKILL.md 派发词原则 (harm claims need readings; skills line budget) date; narrative (the measured false fence)
99 执行座位职责 收集先扫 GitHub 且报告缺席 ⛔ 永不读作成功;探活每轮先重挂定时器。 SKILL.md 收集 (GitHub is the truth source); 探活 item 1 narrative (a sanitised report is indistinguishable from an undelivered one)
100 执行座位职责 45 分钟是发探针的门槛而非判死门槛,判死只认探针回包、宿主信号或超实测基线。 SKILL.md 收集 (45 minutes is the probe threshold; three death grounds) narrative (probe cost versus death-call cost)
101 执行座位职责 停摆永不自愈,按梯度复位、三次即判不可靠重派;报告丢失时按草稿 PR 直接验收。 SKILL.md 收集 (stalls never self-heal; direct-acceptance fallback) date; narrative
102 执行座位职责 复核对 GitHub 核验 ⛔ 不对自述核验,逐项过清单并亲核形态、范围与整包价值密度。 SKILL.md 复核; review-checklist.md; 复核 (skills whole-package density) parameter (the roughly twenty judging criteria stay in review-checklist.md)
103 执行座位职责 CI 收敛读数只属于复核侧;判决三种:验收落卡、返工最多两轮、升级走决策通道。 SKILL.md 复核 (CI convergence belongs to the reviewer); 判决 date
104 执行座位职责 验收后先取 PR 路径面,一条命中受管面即分叉,⛔ 不翻正式、不入队、不挂自动合并。 SKILL.md ACCEPT 之后的路径分叉 (governed surface; mixed diff) date; quotation
105 执行座位职责 受管面 PR 留 draft 并向两个授权批准账户请审;档位不足的契约卡 ⛔ 禁止入队。 SKILL.md ACCEPT 路径分叉 item 3; 入队与落地 (clause-two gate) date; quotation; narrative (the author-identity fallback is a platform fact)
106 执行座位职责 入队资格是每一个检查全绿 ⛔ 不是必查子集;碰生成物的 PR 入队前先同步再重生成。 SKILL.md 入队与落地 (entry requires every check green); landing-operations.md A narrative (the measured hour of red main)
107 执行座位职责 跟到合并为止并每轮读队列成员资格与 origin/main;踢出按签名台账四分支处置。 SKILL.md 入队与落地 (follow to MERGED; kick handling); landing-operations.md B parameter (the flip timer window and the signature ledger stay in landing-operations.md)
108 执行座位职责 每轮打中文轮次报告,含判决表、升级项、代裁清单、等人合项、受管合并审计与五指标。 SKILL.md 轮次报告与节奏 (report contents and the five health indicators) narrative; parameter (the five indicators keep their definitions in SKILL.md). MERGED this round with the former separate health-indicator line, to pay for the two added rules
109 执行座位职责 收工点是会话内在飞归零、存档后立即派下一波 ⛔ 不等人闸;清空转待命而不是退场。 SKILL.md 波次收工点; 停止条件与待命 date
110 断粮与跨墙恢复 权威的用量墙信号是失败本身,重置时刻只在撞墙那一刻可得,拿到就记下来。 SKILL.md 断粮与跨墙恢复 (detection) date; parameter (the ccusage readings stay in platform-readings.md)
111 断粮与跨墙恢复 拿到重置时刻挂一发定点定时器、否则挂每小时循环 ⛔ 不用延时链,成功后删掉循环。 SKILL.md 断粮与跨墙恢复 (cross-wall timer) narrative (the untested retry behaviour of a one-shot chain)
112 升级与决策 升级只有两条门槛:公开契约或产品语义真实分歧且规范定不了,或动作破坏性难回滚。 SKILL.md 升级与决策 (escalation threshold) quotation
113 升级与决策 其余都是 PM 的裁量,给维护者的是否决窗口而不是许可门。 SKILL.md 升级与决策 (everything else is the PM discretion) none
114 升级与决策 具名不升级类:恢复不变量的修复、技术任务之间的顺序与依赖、验证策略。 SKILL.md 升级与决策 (named non-escalating classes) narrative (asking whether an invariant may be restored is an anti-pattern)
115 升级与决策 带前提的裁决三件缺一不可:选路线、挂具名可证伪前提、前提不成立必须报分叉。 SKILL.md 第三档 conditional ruling narrative (what dropping the third piece degrades into)
116 升级与决策 同族近似单默认并入既有拒收集;两个实现不一致时带治理的一侧胜出并删另一侧。 SKILL.md 两条元判据 date; narrative (leaving the ungoverned side is a bypass for the permission gate)
117 升级与决策 落卡先刷新前提,每条前提行自带一条 re-check 命令;决策默认锚在所属 issue。 SKILL.md 落卡/升级流程 items 1 and 2 parameter (the two hard lines on re-check commands stay in dispatch-runbook.md)
118 升级与决策 裁决记录四件同笔:鲜度门、状态转换、依赖行活性现验、条件已知即就地判掉。 SKILL.md 落卡/升级流程 item 3 date
119 升级与决策 出决策箱须引一个同趟取回过的裁决 id,⛔ 时间戳加回忆不算引用。 dispatch-runbook.md 落卡与裁决记录细则 (leaving the decision inbox) date; narrative (the two measured id shapes)
120 升级与决策 方案逐轴过升级与决策段的四轴:业务需求、长远合理性、防 AI 写错、创业阶段聚焦。 SKILL.md 升级与决策 (the four-axis frame, referred to by section) the frame block itself is NOT reproduced here; it stays in exactly its two watched copies, and the axes are named in short words
121 升级与决策 逐轴分析不是可选项;推荐须逐轴给理由,长远合理性权重不低于一半、其余投不翻它。 SKILL.md 升级与决策 (recommendation must be justified; long-term weight) quotation + date
122 升级与决策 有实测拉动时荐长远终态一次付清,零拉动时荐不扩散,防错轴打破余下平局。 SKILL.md 升级与决策 (recommendation order by pull); decision-analysis.md quotation + date
123 升级与决策 每张决策卡落卡即带标准四棱块;卡先于弹窗,被阻塞的执行卡同笔转 pm:blocked SKILL.md 升级与决策 (facet block at filing; cards before popups); decision-analysis.md date; parameter (the facet block shape stays in decision-analysis.md)
124 升级与决策 项目总监席由人工召唤,四职是复核审计、决裁勤务、维护者动作台账、受管合并审计。 SKILL.md 升级与决策 (director seat); lanes/director.md quotation + date
125 护栏 PM 不写任何文件;⛔ 永不合自己的、红的或未复核的 PR,合并只经合并队列发生。 SKILL.md 护栏 (PM writes nothing; queue-only merges) none
126 护栏 版本发布必须人工,发现未经人工的发布痕迹按事故立案,⛔ 不代跑补救性发布。 SKILL.md 护栏 (releases are manual); AGENTS.md release directive quotation + date
127 护栏 版本包 PR 默认永不催,唯一例外是重要修复已合 main 在等发布且提醒点名用户后果。 SKILL.md 护栏 (release-reminder discipline) date
128 护栏 受管面由维护者人工合并且合并即审核记录,⛔ 席位永不以任一账号对受管面 PR 批准。 SKILL.md 护栏 (governed surfaces human-merged; no agent approval) three quotations + dates
129 护栏 ⛔ 永不代维护者回答产品或架构问题,唯一例外是已裁的代裁车道。 SKILL.md 护栏 (decisions belong to the maintainer) none
130 护栏 ⛔ 永不派发 assignee 属于别人的 issue,⛔ 永不派发带决策标签的 issue。 SKILL.md 护栏 (never dispatch someone else's or a decision card) none
131 护栏 并行度以 batch 封顶,同批按构造文件面不相交。 SKILL.md 护栏 (batch cap; disjoint file surfaces) none
132 报告契约 终报 JSON 的权威形状住 .claude/agents/os-dev.md,⛔ 本协议不另存第二份。 SKILL.md 报告契约; os-dev.md 终报消息 narrative (two copies were measured to drift)
133 报告契约 前提被证伪且无 PR 是合法终报,当再分诊输入复核,⛔ 永不当失败派发。 SKILL.md 报告契约; os-dev.md rule 6 none
134 报告契约 报 needs_decision 时 open_questions 非空;范围外发现须已立卡,PM 核验并对读同轮报告。 SKILL.md 报告契约; os-dev.md rule 3 none

Table 2 — left out, and why

A digest of 150 lines cannot carry the corpus's roughly 3,100 lines. What is missing is
listed here by class. The classification test used throughout: does the passage change a
decision a PM makes on this turn, and is it a rule rather than the data a rule consults?

class what it covers why it is not in the digest
Provenance and ruling metadata every ruling date, every verbatim maintainer quotation, and the supersession ledgers (SKILL.md alone carries 97 dates and 124 quotation-bearing lines; the references and the dev definition carry more) the ruling that produced a rule is not the rule; this is exactly what the rules-only ruling removes
Incident narrative and rationale tails every measured-once story, every why-we-learned-it paragraph, every cost figure quoted as persuasion decision-neutral: the rule stands without it
Measured platform facts references/platform-readings.md in full, references/rest-channel.md's per-operation channel table, references/true-green.md's per-repo run recipes lookup data consulted at the moment of an operation, not a rule to review; the digest carries the disciplines those facts serve (read order, session-scoped reachability, positive controls, timestamped readings) and points at the tables
Lookup tables and rosters the /pm-dispatch argument defaults, the domain-to-package table, the compile-surface list, the required-check names, the per-lane package inventories data whose home is the table; a digest that copied them would be a second copy that drifts
Templates and forms the nine-line claim template, the facet-block shape, the six writing requirements of the filing template, the seven-step handover checklist, the generated-artifact merge sequence forms, referenced by pointer; reviewing a form is not reviewing a rule
Per-lane job descriptions references/lanes/*.md standing commitments and in-seat judgement (roughly 355 lines) binding on one seat each, not corpus-wide rules; the digest carries only the lane rules that bind every seat
Intra-corpus duplicates a rule stated in two or more files (the corpus audit measured 169 duplicate lines across the references and 83 in SKILL.md) the digest states each rule once; the duplication is a corpus defect, not content
Retired constructs and tombstones the retired secondment channel, the retired summary issue, the retired forward-hanging of the review label, the retired domain labels they name something that no longer exists
The dev agent's own working rules worktree discipline, ablation, gate reading, toolchain traps, cleanup, the turn-ending self-check in .claude/agents/os-dev.md out of scope by the card: only the PM-facing half of that file is digested (the report contract, what the dispatch prompt owes the dev, and what the PM verifies on return)

The two round-boundary rules added in the second patch round were paid for inside the
150-line ceiling by folding two pairs that state adjacent rules, never by dropping a
prohibition: the round-report contents merged with the health-indicator list (the five
indicators are still reported as a count; their definitions stay in SKILL.md), and the
claim atomic pair merged with the claim-comment field list (the field list is a form,
already in the templates class above). Both folded-out halves are enumerations, and
both merged rows are marked MERGED in Table 1.

Two rule-level details were folded out for space and are named here rather than left
silent: the roughly two-minute freshness window on the sweep's half-labelled disjuncts
(the disjuncts and the exclusion list are in the digest), and the per-level rationale of
the lane total order (the order itself is in the digest).

Table 3 — conflicts found (reported, not resolved)

Two corpus passages state the same rule with different names. Per the card's stop
condition the digest line is written from the stricter reading and the conflict is listed
here for the seat to raise.

# conflict the two passages stricter reading taken
1 Whether a single-lane repo seat may produce the issue type and the first grading of a finding SKILL.md multi-repo preamble and rule 4 say a single-lane repo:* seat self-serves the three mechanical duties (its own sweep, its own type, first grading of its findings); references/lanes/hotcrm.md says at three sites that this seat produces neither type nor grading the digest takes SKILL.md (the seat self-serves the three duties and withholds only the domain label), which is the wider grant and the later text; the lane file reads as pre-dating it
2 Who releases a clause-two contract PR after review SKILL.md ACCEPT fork and references/contract-review.md put the release in the dispatching seat's own review; references/lanes/director.md still describes the director seat's contract-review duty as an audit position with the release moved away not a digest conflict in outcome (both texts agree the director audits and the dispatching seat releases) but the two are worth reading together; the digest states the release rule once, from the ACCEPT fork

Gates

The 28-family union below was re-run in full on 3345687b and every exit code was
captured by redirect before any pipe. Two seat-review patch rounds then landed fb5fecb9 and 23ddfa99
(two prose lines inside the digest, no other file), and the four gates that read those
lines were re-run on that head: the ratchet, frame sync, the id lint and the NUL-byte
scan, all exit 0 — verdict lines below.

  • node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --ran RANFILE
    dispatch-gates --ran: 28 derived famil(ies) accounted for — 28 run, 0 NOT-MEASURED.
    (exit 0). Nine further families were run beyond the derivation: the ratchet self-test,
    the two published-list-mirror legs, the two skills-token-ratchet legs, the governed
    queue guard self-test, the governed-prose and label-desc-cap gates, and the whole-repo
    lint.
  • Ratchet, the new file's row:
    check-skill-line-ratchet: .claude/skills/pm-dispatch/references/core-rules.md is 150 lines (ceiling 150; headroom 0).
    and widest table row is 0 bytes (pin 0; headroom 0). Total ceilings grow by 150 —
    the one growth this card authorises. Self-test:
    check-skill-line-ratchet self-test: 155 cases pass. (exit 0)
  • Frame sync, still two copies: pnpm check:skill-frame-sync exit 0 — the digest
    carries none of the block's sentences and none of its fingerprint phrases; the two
    declared copies are untouched by this diff.
  • Id lint: pnpm check:pm-skill-id-lint exit 0 — no issue number in the new file.
  • NUL bytes:
    check-nul-bytes: OK (scanned 7460 text file(s) -- 7460 tracked, 0 untracked-not-ignored; skipped 7 binary; no raw ASCII control bytes).
  • Governed predicate:
    node scripts/pm/check-governed-merges.mjs --test .claude/skills/pm-dispatch/references/core-rules.md scripts/pm/check-skill-line-ratchet.mjs
    exits 3 with governed-surface predicate: 1 of 2 path(s) hit the register and
    GOVERNED — a human merge is the review record for this PR. This PR stays a draft.
  • Whole-repo lint through the shared verification lock:
    OS_VERIFY_LOCK_SLOT=issue-15379-heavy bash scripts/pm/os-verify-lock.sh -c 'pnpm lint'

    os-verify-lock: VERDICT command-exit 0 · held the lock 77s (1m17s) · waited 0s · SHARED-BOX SECONDS
    (the lock excludes other locked runs, not unlocked sibling work, so the seconds are not
    idle-box figures).
  • check:doc-formula-expressions first returned exit 3, PREREQUISITE NOT MET
    nothing measured. Two workspace builds through the same lock (@objectstack/formula,
    then @objectstack/lint; build verdict command-exit 0 · held the lock 155s) made it
    runnable, and it then passed:
    check:doc-formula-expressions: 22 record-scoped formula example(s) across 428 files / 1371 TS blocks judged clean
    (exit 0).
  • Every other derived family exited 0. The full per-command record is in the run log the
    reconciliation above consumed.
  • Patch round on fb5fecb9:
    check-skill-line-ratchet: .claude/skills/pm-dispatch/references/core-rules.md is 150 lines (ceiling 150; headroom 0).
    and widest table row is 0 bytes (pin 0; headroom 0).;
    check-skill-frame-sync: 2 copies of the decision frame are structurally isomorphic across 2 files;
    check-skill-id-lint: 24 file(s) clean;
    check-nul-bytes: OK (scanned 7460 text file(s) ... no raw ASCII control bytes).
    The state-set rule now reads five pm state labels plus the decision label as six
    mutually exclusive states, and the handover rule no longer uses a first-person seat
    voice. The file stays at exactly 150 lines, headroom 0.

What this PR does not do

It is a draft and stays one: .claude/** is a governed surface, so no seat flips it
ready, enqueues it, arms auto-merge, or approves it. Review is requested from the two
authorised approver accounts, and the merge is the maintainer's.

skip-changeset applies: nothing here is published from a package.

  • Second patch round on 23ddfa99 (two rules added under the entry section, two
    pairs folded to pay for them), same four gates re-run on that head, all exit 0:
    check-skill-line-ratchet: .claude/skills/pm-dispatch/references/core-rules.md is 150 lines (ceiling 150; headroom 0).
    and widest table row is 0 bytes (pin 0; headroom 0).;
    check-skill-frame-sync: 2 copies of the decision frame are structurally isomorphic across 2 files;
    check-skill-id-lint: 24 file(s) clean (pattern /#[0-9]{3,}/g).;
    check-nul-bytes: OK (scanned 7460 text file(s) ... no raw ASCII control bytes).
    The ceiling did not move.

Generated by Claude Code


Generated by Claude Code

os-steve and others added 2 commits September 4, 2026 14:06
One new reference file, `.claude/skills/pm-dispatch/references/core-rules.md`:
every binding rule of the PM corpus as one plain-Chinese sentence per line,
grouped under the corpus's own section order, 150 lines, every line within the
120-byte cap. Rules only — no provenance narrative, no incident story, no date,
no quotation, no issue number.

The escalation decision frame is referred to by section and its axes named in
short words; the frame block itself stays in exactly its two watched copies.

Adds the ceiling row and the max-table-row pin for the new file, both at the
landed measurement; no other row moves.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019RfFHiRCSs3JXLK4cwcfox
…write rule

The label-write rule folded to one line lost the clause that gate-semantics labels
follow the same four steps in both directions. Restored inside the 120-byte cap.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019RfFHiRCSs3JXLK4cwcfox
@github-actions github-actions Bot added the size/m label Sep 4, 2026
@claude claude Bot added the skip-changeset PR has no user-facing published change; bypasses the changeset gate label Sep 4, 2026
@github-actions github-actions Bot added the documentation Improvements or additions to documentation label Sep 4, 2026
…the digest

Two seat-review fixes to the digest:

- the mutual-exclusion rule counted seven states; the corpus has five `pm:*` state
  labels plus `needs-user-decision`, six in total. Rewritten to say five plus one,
  keeping the one-replace-write rule and the three-day queue-rot clause.
- the handover rule used a first-person seat voice; replaced with a role-neutral form.

The file stays at exactly 150 lines with every line inside the 120-byte cap.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019RfFHiRCSs3JXLK4cwcfox
…next wake-up

Two rules added under the entry section: a round runs from the fire that wakes the
seat until the queue is empty or the usage window is exhausted, and the round report
is the end-of-round account rather than a stop signal; the self-timer sets only the
next wake-up, so an unfinished round is continued on the next fire, never restarted
or re-ordered. The triage seat's timer line is reworded to the same reading.

Paid for inside the 150-line ceiling by folding two pairs that state adjacent rules:
the round-report contents with the health-indicator list, and the claim atomic pair
with the claim-comment field list. No prohibition was dropped; both folded-out halves
are enumerations already declared as lookup data in the PR body's second table.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019RfFHiRCSs3JXLK4cwcfox
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation size/m skip-changeset PR has no user-facing published change; bypasses the changeset gate

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants