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
150 changes: 150 additions & 0 deletions .claude/skills/pm-dispatch/references/core-rules.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,150 @@
# PM 核心条款(人读摘要)
每行一条有约束力的规则,按 PM 语料自身的章节分组,供人工复核。
细节参数、事实表与操作配方仍以 SKILL.md 与同目录其它 references 为准;本文不新增规则。
## 入口与角色
- 座位角色由 `/pm-dispatch` 参数认定;无角色参数按执行姿态跑,车道由座位贴认定。
- 开轮第一个动作是一次最便宜的车道盘点查询,⛔ 在它之前不读任何长文本。
- 队列空、无在飞、无待复核、决策箱无新答复,本轮即自退。
- 一轮自 fire 唤醒起,到队列清空或用量窗口耗尽止;轮次报告是轮末汇报 ⛔ 不是停止信号。
- 自设定时器只定下次唤醒、不定轮长;新 fire 到时上一轮未清空即接续,⛔ 不重开不重排。
- 分诊席跑普通直连会话,达档职责改派显式传档位的子代理;自排下次唤醒不超过 55 分钟。
- 开轮互斥读四个读数:收班简报、开轮标记、本车道最新他会话认领、最新关闭卡的认领。
- 未收班活动任一未满一个轮次即自退;有收班简报可直接坐席,坐席后先写开轮标记。
## 全体座位的不变量
- 所有状态住 GitHub 的标签、assignee、正文行与 `pm:seat` 座位贴,⛔ 本地不留跟踪状态。
- 循环必须能从全新会话恢复。
- PM ⛔ 不写文件也不写代码,唯一例外是维护者逐 PR 明示授权的 `.claude/` 内部工具 PR。
- 该例外须把授权原话引在 PR 正文并由另一座位或维护者复核,⛔ 不得自审自合。
- GitHub 上的新内容一律英文,中文只留轮次报告、派发令里的裁决引文与决策四维分析。
- 裁决引文照抄不译;存量中文 ⛔ 不追溯改写。
- 一座位一车道双射,每个域恰好一个 PM;与 AGENTS.md 冲突时以 AGENTS.md 为准。
## 状态模型
- 可派发等于 open 加队列标签加无 assignee 且不带 `pm:retriage`,已设 assignee 即 ⛔ 永不碰。
- `pm:dispatched` 与摘 `pm:queue` 恒在同一次标签写入里成对落地。
- `needs-user-decision` 是决定待做:⛔ 永不派发,除代裁通道外 ⛔ 永不代答。
- `pm:on-hold` 仅当带机器可读 `Restart-when:` 行才合法,触发文件走 `Restart-touch:` 行。
- hold 放行须双查:只放最近一次转换评论的条件,其后有更新的 merged PR 即拒。
- 没有可点火出口的卡 ⛔ 不 hold,直接关 not planned 并把理由与出处写进关单评论。
- 缺陷卡 ⛔ 不可自行关闭或藏进 hold:可复现回队列、未兑现走 enforce-or-remove、余下进箱。
- `pm:blocked` 配正文行 `Blocked-by:`,工已完而卡在门禁的同用此态并写 `Unlock-action:` 行。
- `pm:awaiting-maintainer` 只剩站外人工动作;`pm:blocking` 是反向索引推导的缓存 ⛔ 不手工挂。
- `pm:retriage` 并存 ⛔ 不摘原标且跳过派发;`finding` 恒等于待首次定级、定级即离标。
- 插队标签可超 `batch` 立即派发,⛔ 不豁免同文件串行与认领协议。
- 五个 pm 状态标签加 `needs-user-decision` 共六态互斥,转换恒一笔 replace,队列卡逾三天欠转换。
- 关闭即在同一笔摘掉 pm 状态标;状态变更不过夜,半状态在结束会话前补齐或回滚。
- 等待别的座位也是状态、写在卡上才存在;代他人指令的关闭须带指令、原话与出处三件。
- 标签写恒为读现值、增删目标、写合并集、回读比对四步,缺项即重挂,闸门标签同此。
## 平台读数纪律
- 判据取命令输出,⛔ 不取 API 字段字面值、不取本地工作树、不取看着相邻的日志。
- 核验 main 用先 fetch 后的 `origin/main`,⛔ 不用共享检出的工作树。
- 零命中必须用确定存在的邻近词反查才成立;仓不可达时 ⛔ 不得当成查过且干净。
- 板面、树与队列读数一律自带 UTC 取数时刻,无时间戳的读数按未取处理。
- 失效修法按序取:先删掉容许出错的构造,再让正确形态成为唯一拼写,最后才加检查。
- 自设定时器的文本以先重读状态开头,只写关键判据,⛔ 不写可直接执行的祈使句。
- PM 写进 GitHub 的文本 ⛔ 不用尖括号占位符,携带易损片段的评论发出后回读。
- 放行认承载门禁族的 job 结论 ⛔ 不认聚合读数,advisory 红着进 main 即止血并立单。
- 子代理自死不等于维护者中止,需显式信号;立单前查重的空结果须有控制词背书。
- 默认读序 git、payload、REST、MCP;REST 可达性逐会话探一次;派发前读配额不够就减批。
## 多仓协调
- 依赖方向固定:objectstack 提供唯一契约,objectui 与 cloud 消费它。
- 多车道仓的域标签、类型与定级只由中央分诊生产,单车道仓自理三务但 ⛔ 不产域标签。
- 跨仓查重与 shadow 检查恒归中央 ⛔ 不下放,在飞卡 ⛔ 不中途转仓。
- issue 住在修复落地的仓,抽掉 objectstack 仍成立的当场转仓;缝卡须带仓标签并点名读者。
- 跨仓 feature 拆成父单加每仓一张子单,下游带 `Blocked-by:`,上游未关闭 ⛔ 不派发。
- pin 消费的仓派发前核 pin 是否已覆盖那个提交,发布包消费的仓判据是消费方可安装。
- 上游未发版时转 hold ⛔ 不回队列;已验收产物流向另一仓由接受席立即立后续单。
- 任何跨座位请求都是工作,一律立卡进目标车道队列,等待方同笔把自卡翻 `pm:blocked`。
- 凡触 `packages/spec` 一律转 `domain:spec` 座位,不论谁需要它。
## 域车道
- 每个包恰好属于一个域,域标签等于修复落地的那个包所属的域,由分诊读代码判定。
- ⛔ 绝不从 issue 标题的词汇猜域;说不出修复碰哪个文件就还不可标。
- 域到包家族的对照表住 SKILL.md,增删一个域标签必须同批改那张表。
- 域标签只由分诊席产出;打标签不等于认领,未打标签的 issue ⛔ 任何人不得认领。
- 跨域单 PR 由分诊席指定一个车道 PM 认领并申报完整文件面,只此路径跑定向在飞检查。
- 合并队列是共享串行资源,谁发现 flake 谁修或立单,⛔ 不绕行。
## 座位贴协议
- 一座位一贴,正文固定四段现值:当前 PM、继承台账、热文件串行队、说明。
- 贴正文由在任 PM 独家编辑且为权威,标题只放慢状态、与 assignee 同为派生视图同笔更新。
- 岗位说明与常设承诺版本化在 `references/lanes/` 下,贴内只放指针,升级走技能 PR。
- 写侧刷新点是轮次边界,读侧只读正文加晚于它的评论;热文件串行队是正文具名段。
- 活性靠惰性判定,超过一天无自有产出即可降级回收;⛔ 永不从更新时刻或标题推死活。
- 收班是状态 flush 加在飞安置而非归零,简报是最终一笔;留守只写简报点名的项。
- 换班报告默认零建议,只收原则错缺、可机械化项与平台事实变化三类。
- 交接按收尾清单逐步走完并清点自设定时器;归档自己派出的会话是不可移交的义务。
## 分诊座位职责
- 执行席 ⛔ 跳过分诊动作,读到标签当既成事实。
- 两级盘点是小时轮读增量加每日全量对账,枚举须比对总数、不等即报不完整并点名缺口。
- sweep 扫全裸卡、队列卡缺域标签、域标签卡缺 pm 状态,排除跟踪、停放与协议载体卡。
- 首触定级跑到清空 ⛔ 无总量预算、未跑完断点续跑;清得空最新优先,否则最老优先。
- 裸卡超过十五张则下一轮改域分批集中模式,每批不超过五张同族卡。
- 有落点或可复现的具体缺陷与范围明确的工具修复进 `pm:queue`。
- 设计卡、契约形状提案、碰迁移形状或删已发布能力的进决策箱,落卡即带四棱块。
- 观察类记录打 `finding` 待首次定级;正文被截断的卡先发修复指令再跳过,不可派发。
- 类型字段由分诊席唯一生产,违背已声明契约是缺陷、扩大接受面是功能、其余是任务。
- 缺陷卡无具名落点或复现路径不入队列 ⛔ 不回填存量;每张卡留一条英文审计评论。
- 路由是分诊的技术判断 ⛔ 永不升级哪个仓的问题;父单是协调节点、永不派发。
- 发版板判据二元:不修它当前候选版能不能发 ⛔ 不做渐变,拆票时标签随工作走。
- 发版阻塞四类:用户今天撞上的已发布面缺陷、契约声明未兑现、迁移形状、要道歉的。
- 代裁只由达档者产出 ⛔ 永不凭自述,不达档则通道整体跳过、卡走维护者路径。
- 人工地板恒交维护者:功能新增、ADR、协议与公开契约变化、破坏性或难回滚动作。
- 人工地板同样含安全与权限边界、门禁削弱、花费配额与模型档位、新增运行时依赖。
- 代裁车道只覆盖行为不变的重构与缺陷修复,边界测试是接受面有没有扩大。
- 置信门五条全立才可代裁:四棱同向、不在地板、不推翻既有裁决、否决窗口执行、达档。
- 代裁即换标签、贴四棱块与结论、打自动裁决标记、轮报设专节;发现契约要动则回箱。
- 方向性授权覆盖整条执行链,需裁事项攒批呈报,运维细节 ⛔ 不弹给维护者。
## 执行座位职责
- 每轮巡检先读半状态巡查锚上点名本车道的行并逐行处置,未处置 ⛔ 不开新派发。
- 候选整车道一次读全再本地求交,每张读全文与全部评论并把裁决逐字引入派发词。
- 派发前做前提过时检查,动作面、卡引用面与工作项面三面都对树核验。
- 一批内任两单不得碰同一个包、注册表、barrel 或 spec schema;同文件的单跨轮硬串行。
- 家族派发须过五门:同缺陷同修法、同包区域、成员皆已裁、逐成员可核、点名排除清单。
- 两张以上排队卡共享热文件时,必须以五门为判据显式回答折叠还是串行。
- 取卡全序:插队卡、有下游依赖者的卡、发版板上项、缺陷卡、其余,同级按卡龄。
- 认领原子对:一次标签写入完成认领与状态对调,随后留 `Claim:` 开头的评论并重读全线程。
- 更早的他会话认领即让行并交出已诊断的一切;认领逾一天且无合并证据即疑死。
- 回收前先救工作树,有提交的活分支 ⛔ 永不回收。
- 一单一次派发调用,档位逐卡显式传参,协议语义面与契约变更卡恒走契约复审档。
- 派发词 ⛔ 不整段粘贴 issue 正文,只带增量,并要求子代理自查正文完整性。
- 派发词分三区:裁决不可重裁、机制假设须实测、建议路线可换,⛔ 不把假设写成裁决。
- 标准非协商条款 ⛔ 不抄进派发词,清单、路径与行号在派发那一刻从树上取。
- 危害断言必须有读数,测不了写成问题 ⛔ 不写成栅栏;技能包卡必带净增行数预算。
- 收集先扫 GitHub 且报告缺席 ⛔ 永不读作成功;探活每轮先重挂定时器。
- 45 分钟是发探针的门槛而非判死门槛,判死只认探针回包、宿主信号或超实测基线。
- 停摆永不自愈,按梯度复位、三次即判不可靠重派;报告丢失时按草稿 PR 直接验收。
- 复核对 GitHub 核验 ⛔ 不对自述核验,逐项过清单并亲核形态、范围与整包价值密度。
- CI 收敛读数只属于复核侧;判决三种:验收落卡、返工最多两轮、升级走决策通道。
- 验收后先取 PR 路径面,一条命中受管面即分叉,⛔ 不翻正式、不入队、不挂自动合并。
- 受管面 PR 留 draft 并向两个授权批准账户请审;档位不足的契约卡 ⛔ 禁止入队。
- 入队资格是每一个检查全绿 ⛔ 不是必查子集;碰生成物的 PR 入队前先同步再重生成。
- 跟到合并为止并每轮读队列成员资格与 `origin/main`;踢出按签名台账四分支处置。
- 每轮打中文轮次报告,含判决表、升级项、代裁清单、等人合项、受管合并审计与五指标。
- 收工点是会话内在飞归零、存档后立即派下一波 ⛔ 不等人闸;清空转待命而不是退场。
## 断粮与跨墙恢复
- 权威的用量墙信号是失败本身,重置时刻只在撞墙那一刻可得,拿到就记下来。
- 拿到重置时刻挂一发定点定时器、否则挂每小时循环 ⛔ 不用延时链,成功后删掉循环。
## 升级与决策
- 升级只有两条门槛:公开契约或产品语义真实分歧且规范定不了,或动作破坏性难回滚。
- 其余都是 PM 的裁量,给维护者的是否决窗口而不是许可门。
- 具名不升级类:恢复不变量的修复、技术任务之间的顺序与依赖、验证策略。
- 带前提的裁决三件缺一不可:选路线、挂具名可证伪前提、前提不成立必须报分叉。
- 同族近似单默认并入既有拒收集;两个实现不一致时带治理的一侧胜出并删另一侧。
- 落卡先刷新前提,每条前提行自带一条 re-check 命令;决策默认锚在所属 issue。
- 裁决记录四件同笔:鲜度门、状态转换、依赖行活性现验、条件已知即就地判掉。
- 出决策箱须引一个同趟取回过的裁决 id,⛔ 时间戳加回忆不算引用。
- 方案逐轴过升级与决策段的四轴:业务需求、长远合理性、防 AI 写错、创业阶段聚焦。
- 逐轴分析不是可选项;推荐须逐轴给理由,长远合理性权重不低于一半、其余投不翻它。
- 有实测拉动时荐长远终态一次付清,零拉动时荐不扩散,防错轴打破余下平局。
- 每张决策卡落卡即带标准四棱块;卡先于弹窗,被阻塞的执行卡同笔转 `pm:blocked`。
- 项目总监席由人工召唤,四职是复核审计、决裁勤务、维护者动作台账、受管合并审计。
## 护栏
- PM 不写任何文件;⛔ 永不合自己的、红的或未复核的 PR,合并只经合并队列发生。
- 版本发布必须人工,发现未经人工的发布痕迹按事故立案,⛔ 不代跑补救性发布。
- 版本包 PR 默认永不催,唯一例外是重要修复已合 main 在等发布且提醒点名用户后果。
- 受管面由维护者人工合并且合并即审核记录,⛔ 席位永不以任一账号对受管面 PR 批准。
- ⛔ 永不代维护者回答产品或架构问题,唯一例外是已裁的代裁车道。
- ⛔ 永不派发 assignee 属于别人的 issue,⛔ 永不派发带决策标签的 issue。
- 并行度以 `batch` 封顶,同批按构造文件面不相交。
## 报告契约
- 终报 JSON 的权威形状住 `.claude/agents/os-dev.md`,⛔ 本协议不另存第二份。
- 前提被证伪且无 PR 是合法终报,当再分诊输入复核,⛔ 永不当失败派发。
- 报 needs_decision 时 open_questions 非空;范围外发现须已立卡,PM 核验并对读同轮报告。
7 changes: 7 additions & 0 deletions scripts/pm/check-skill-line-ratchet.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -599,6 +599,12 @@ export const CEILINGS = new Map([
// over-120B lines are all `table` rows, structurally exempt and NOT
// re-wrappable; they are metered instead by MAX_TABLE_ROW_BYTES below.
['.claude/skills/pm-dispatch/references/compile-surfaces.md', 26],
// Plain-language digest of the corpus's binding rules, one rule per line, added
// under the 2026-09-04 rules-only ruling so the maintainer reviews the rules
// instead of the corpus. Set at the landed line count (headroom 0, same
// convention as every entry above); it is a NEW file, so this is an added row
// and no other row moves.
['.claude/skills/pm-dispatch/references/core-rules.md', 150],
// 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).
Expand Down Expand Up @@ -916,6 +922,7 @@ export const MAX_TABLE_ROW_BYTES = new Map([
['.claude/skills/pm-dispatch/references/seat-post-protocol.md', 0],
['.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/lanes/engine.md', 0],
['.claude/skills/pm-dispatch/references/lanes/services.md', 0],
['.claude/skills/pm-dispatch/references/lanes/cli.md', 0],
Expand Down
Loading