From 03448dbbdf0c35a12774995fa99e0b342051b6a1 Mon Sep 17 00:00:00 2001 From: Claude Date: Fri, 23 Oct 2026 12:50:46 +0000 Subject: [PATCH 1/4] =?UTF-8?q?docs(pm-dispatch):=20Tier=20S=20landed=20fr?= =?UTF-8?q?om=20a=20project=20needs=20a=20review=20of=20record=20by=20anot?= =?UTF-8?q?her=20account;=20the=20=E5=88=86=E8=AF=8A=E5=B8=AD=20shrinks=20?= =?UTF-8?q?to=20bare=20cards;=20decision=20cards=20stay=20in=20their=20rep?= =?UTF-8?q?o=20and=20the=20=E6=80=BB=E7=9B=91=E5=B8=AD=20scans=20every=20r?= =?UTF-8?q?epo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Rule text only, on the maintainer's word of 2026-10-23. - contract-review.md: a project seat's Tier S landing needs a `Reviewed-by:` session from an account other than the PR author's (attribution login and relay sender); a same-account subagent is a review, not the record; prose-only PRs owe one cross-account TIER_DEFAULT record; the interim rule while no other account is seated is the maintainer's own message naming each PR. - landing-operations.md: `pm:mailbox` PRs owe no CI, are never queued and are excluded from the landing ledger queries. - dispatch-runbook.md: the patrol section becomes 〈巡查常设项〉: seat-post liveness goes to the 总监席 digest, every project's patrol runs the `needs:contract-review` pass (claim-shaped comment, review, strip on PASS), the lane patrol takes hold/closed re-validation and the fork-PR sweep. - triage-duties.md / lanes/triage.md: the 分诊席 keeps bare-card first touch and cross-lane dedupe on objectstack and objectui only; half-labelled cards go to the owning lane seat; app repos have no triage seat; the release board, pin chain and decision-inbox duties move to lanes/director.md (declared cross-file move 120→103 / 70→87); the human-ruling floor is untouched. - lanes/director.md: the inbox is every repo's `needs-user-decision`, cards stay where filed; the thin triage pairing, the daily digest, the release board, the pin chain extended to every app repo, the roster pointer. - cross-repo-coordination.md: 「决策收件箱按仓」 replaced; the new-repo checklist gains GOVERNED_REPOS, the fleet App and the lane charter file. Claude-Session: https://claude.ai/code/session_011XvnQKt7WvdyvD2X4DLc8R Co-authored-by: Claude --- .../pm-dispatch/references/contract-review.md | 5 +++ .../references/cross-repo-coordination.md | 6 ++-- .../references/dispatch-runbook.md | 22 ++++++------- .../references/landing-operations.md | 4 +-- .../pm-dispatch/references/lanes/director.md | 19 ++++++++++- .../pm-dispatch/references/lanes/triage.md | 8 ++--- .../pm-dispatch/references/triage-duties.md | 29 ++++------------- scripts/pm/check-skill-line-ratchet.mjs | 32 +++++++++++++++++-- 8 files changed, 79 insertions(+), 46 deletions(-) diff --git a/.claude/skills/pm-dispatch/references/contract-review.md b/.claude/skills/pm-dispatch/references/contract-review.md index c12444cfc63..c1252541872 100644 --- a/.claude/skills/pm-dispatch/references/contract-review.md +++ b/.claude/skills/pm-dispatch/references/contract-review.md @@ -32,8 +32,13 @@ 只读条款与输入集内建,⛔ 不删 ⛔ 行。 - 隔离复核子代理暂存全写按所审 PR 命名的 `/pr-/`,⛔ 不读非本轮自写的暂存。 - 独立性对:`Implemented-by:`/`Reviewed-by:` 取值同见 `--template`;子代理记采纳它的席位。 +- 项目席落地的 Tier S:`Reviewed-by:` 须属 PR 作者外的账户;同账户子代理只算复核。 +- 账户读 PR 正文首行 attribution 的 `github_login` 与中继发送者;记录独立性段并书两账户。 +- 只动散文面、不欠契约复核的 PR 同欠另一账户一条 `TIER_DEFAULT` 记录;⛔ 散文面无豁免。 - 轮次报告设复审清单专节,与呈裁清单同为强制审计。 - 落地前检两条,过则 Tier S 入队、Tier H 等人批:① 达档条款②复核 PASS 在案(同形记录)。 +- ① 在项目席另加:记录的复核账户须异于 PR 作者账户,见上文独立性对。 +- 过渡:无另一账户在席时,① 的替代 = 维护者本人在执行线程的消息逐个点名 PR 编号。 - 例外:纯重生成或只动上列散文面的 head 后移原记录继续管;判据机读已提交树; PR 落 `Regen-provenance:` 行。 - ② PR check 全绿,⛔ 非 required 子集;例外:merge-base 同签名的红不计、按设计而红见 SKILL.md。 diff --git a/.claude/skills/pm-dispatch/references/cross-repo-coordination.md b/.claude/skills/pm-dispatch/references/cross-repo-coordination.md index 370393c4740..c67ced17268 100644 --- a/.claude/skills/pm-dispatch/references/cross-repo-coordination.md +++ b/.claude/skills/pm-dispatch/references/cross-repo-coordination.md @@ -9,8 +9,8 @@ - 单车道仓 `repo:*` 席自理机械三务,⛔ 不产 `domain:*`;决策卡入本仓收件箱,不落 objectstack。 - 机械三务 = 自扫 sweep、自打 `type`、自做 `finding` 首触定级。 - 新仓登记是一张清单:座位贴、标签、类别归属、门禁盘点、写身份锁移植(deny + hooks)。 -- 新仓准入判据一句:这个仓真的需要常设席位吗。 -- hotcrm 收卡判据与宪章见 `references/lanes/hotcrm.md`。 +- 新仓三件:加入 `GOVERNED_REPOS`、安装车队 App、写 `lanes/.md` 宪章;应用仓无分诊席。 +- 新仓准入只问一句:真需要常设席位吗;hotcrm 宪章见 `references/lanes/hotcrm.md`。 - objectui 卡按修复落点分两条车道:`domain:ui`(全部代码)与 `domain:skills`(仓根发布 `skills/**`)。 - objectui 的 `domain:spec`、`domain:devx`、`domain:tooling` 已退役:⛔ 不贴、不认领、不再创建。 - 协议恒归 objectstack `domain:spec`;跨层功能照规则 2,objectui 子单归 `domain:ui`。 @@ -24,7 +24,7 @@ - 判据:正文抽掉 objectstack 还成立 ⇒ 当场转仓(console/UI 缺陷即转 objectui);不成立才是缝卡。 - 转仓走 `issue-transfer.mjs`;名册外或平台拒才重建:出处头 + 裸 `#N` 改全名 + 关源单为 moved。 - 缝卡收窄为真协调卡:留 objectstack 带 `repo:*`,正文点名读者(哪个座位、哪一步)。 -- 决策收件箱按仓:平台在 objectstack / objectui,元数据项目在本仓;在飞卡 ⛔ 不中途转仓。 +- 决策卡留在立卡仓,总监席扫全部仓 `needs-user-decision` 呈批;在飞卡 ⛔ 不中途转仓。 - 规则 2:跨层功能点或 objectui 消费的 `Seam:` 卡恒由分诊立父单 + 逐层子单,spec/后端先行。 - 下游带 `Blocked-by: #`;`Blocked-by` 未关闭/未合并的不派发,对 GitHub 现验。 - 被链接或同父的两单永不同批。 diff --git a/.claude/skills/pm-dispatch/references/dispatch-runbook.md b/.claude/skills/pm-dispatch/references/dispatch-runbook.md index 1342bc39f47..4e10fc305ca 100644 --- a/.claude/skills/pm-dispatch/references/dispatch-runbook.md +++ b/.claude/skills/pm-dispatch/references/dispatch-runbook.md @@ -36,21 +36,21 @@ - 写序:标签翻转只在认领评论写成功之后,两笔不原子。 - 评论失败而标签已翻即制造一记真半状态;顺序反了就带重试义务,重试未成即回滚标签。 -## 座位贴活性巡查(分诊轮常设项) +## 巡查常设项(每项目巡查与总监席摘要) -- 分诊 Routine 每 fire 附带一次本巡查。 -- 扫描面:`label:pm:seat` 列表页上标题挂 `🟢 ` 的贴。 -- `🟢 Routine` 座位以调度器读数为准,⛔ 不入本巡查。 -- 判据只认在任者自己的产出:自有评论、认领、正文编辑;作者与时间戳是硬读数。 -- ⛔ 不算发给它的跨座位通知:收到消息不是活着的证据。 +- 座位贴活性归总监席摘要:扫 `label:pm:seat` 挂 `🟢 ` 的贴,Routine 席读调度器。 +- 判据只认在任者自有产出(评论、认领、改正文)及其作者与时间戳,⛔ 收到的通知不算。 - >24h 无自有产出 ⇒ 当场降级:改 `⏳ vacant` + 摘 assignee 同笔 + 证据评论(时间戳与链接)。 +- 跨账户复审:每项目巡查跑 `is:pr is:open label:needs:contract-review`,剔除本账户署名的 PR。 +- 复核前在 PR 留 `Claim:` 形评论(会话、账户);已有他账户的认领即跳过,⛔ 不双做。 +- 复核照 `contract-review.md`;PASS 同笔摘标记、FAIL 不摘;总监席摘要列等候逾 24h 的 PR。 +- 车道巡查同跑:hold/closed 解锁重验回队;本仓无卡 fork PR 按 `external-contributions.md` 立卡。 ## 分诊席读数成本三则 - 收班简报索引化,四段模板:首行机器判据、索引表、健康指标、接力清单。 - 首行机器判据是起始标记 `分诊轮收尾`,逐字不动,互斥守卫靠 grep 它。 -- 索引表 = 卡号加一行判决;后两段沿用 SKILL.md 轮次报告节的定义。 -- 细节禁止复述:逐卡理由已作审计评论落卡,简报只指不拷。 +- 索引表 = 卡号加一行判决,后两段沿用 SKILL.md 轮次报告节;细节不复述,简报只指不拷。 - 硬预算正文 ≤3000 字符,收班自报字符数;连续两轮超限即漂移。 - 互斥最小尾页读法:尾页配方只覆盖座位贴的两个读数,判空缺另对正文与标题。 - 配方:`issue_read get` 拿评论总数,按小 `perPage`(~15)算末页页码只读尾页。 @@ -61,13 +61,13 @@ ## 分诊两级盘点细则 -- 小时层三读法之一,sweep 析取①②③ = `list_issues` + `since`。 +- 小时层三读法之一,sweep 析取①② = `list_issues` + `since`。 - 标签变更会刷新 `updated_at`,半标注照样入窗。 - 之二,解锁扫描反演 = 逐仓 `state=CLOSED` + `since` 与 `Blocked-by:` 反向索引求交,命中走双查。 - 之三,健康指标 = 逐标签 `perPage: 1` 只读 `totalCount`。 - 裸卡数例外:标签缺席无计数可读,取本轮析取①的枚举,⛔ 不另发查询。 -- 每日层(当日首 fire)= 四仓全量对账 + 归集本就日频的职责。 -- 日频职责 = finding 集中轮、`Restart-when:` 判据批扫、决策箱回填。 +- 每日层(当日首 fire)= 两仓全量对账 + 归集本就日频的职责。 +- 日频职责 = finding 集中轮;`Restart-when:` 批扫归车道巡查,决策箱回填归总监席。 - 成本靶:干活轮 ≤50k token,空转轮守既有探针预算。 - 每条枚举比对返回数与 `totalCount`;分页只治当次,一个谓词,⛔ 不加第二条代码路径。 diff --git a/.claude/skills/pm-dispatch/references/landing-operations.md b/.claude/skills/pm-dispatch/references/landing-operations.md index aa631a95fce..6a1d4a6032e 100644 --- a/.claude/skills/pm-dispatch/references/landing-operations.md +++ b/.claude/skills/pm-dispatch/references/landing-operations.md @@ -5,6 +5,7 @@ ## 入队与落地 - fork PR = 提案,席位永不放行;采纳 diff 内部落地,见 `references/external-contributions.md`。 +- `pm:mailbox` 信箱 PR 不欠 CI、永不入队;落地台账与孤儿 PR 查询一律排除该标签。 - 条款②入队闸门:翻 ready / 入队前先取 PR 实际 diff;diff 是事实,卡片语义是预测。 - `--tier` 嫌疑行是提示非裁定;双肢命中任一 ⇒ 无达档条款②复核 PASS 在案 ⛔ 禁止入队。 - 路径肢 = diff 触及契约面 `packages/spec/src/**` 非测试,含 error-code-ledger、`*.zod.ts` 契约 schema。 @@ -15,8 +16,7 @@ - diff 只改 release 文字或注释者:派发席 ACCEPT 确认,逐句引改前与改后,免第二次同 head 复核。 - 其余(含改代码)照全套:同 head 达档复核 PASS 记录即确认,记录逐句判改写句。 - 两类缺一不算;算即按 SKILL.md 三条件带红入队,门禁不改。 -- 真正设计分叉照旧进决策箱,席内复核 ⛔ 不替代维护者裁定。 -- 外部评审链降为可选事后审计,非放行前提。 +- 真正设计分叉照旧进决策箱,席内复核 ⛔ 不替代维护者裁定;外部评审链只作事后审计。 - 默认分支 push 即触发对外部署的仓,只在验证层存在时才合并;无验证层 ⛔ 不合并。 - 验证层 = 部署以 CI 为闸、发布后探测线上面、失败自动回滚并立卡。 - 该类仓的落地判据是已发布且探测通过,⛔ 不是 MERGED;跟到发布为止。 diff --git a/.claude/skills/pm-dispatch/references/lanes/director.md b/.claude/skills/pm-dispatch/references/lanes/director.md index b9f99361a24..4dcc2ddbff5 100644 --- a/.claude/skills/pm-dispatch/references/lanes/director.md +++ b/.claude/skills/pm-dispatch/references/lanes/director.md @@ -20,6 +20,7 @@ - 不占 `domain:*` 车道,范围按职责标签跨车道跨仓;永不认领 backlog、永不写码。 - 项目内卡线程报 `needs_decision` ⇒ 席位写四维分析加推荐,并入决裁批次呈维护者人工裁。 - 维护者令「必须人工决裁」撤销「有把握自己决定」;⛔ 无裁决线程、代裁、置信门。 +- 分诊席默认与本席同项目召唤,小时轮可与收件箱扫描共用一轮;职责见 `triage.md`。 ## 基本原则 @@ -48,7 +49,9 @@ - 首批读完前 ≤5 张同族卡即呈;⛔ 不先扫全箱;每张皆呈维护者,⛔ 无自裁、无免呈。 - 取下五张只用便宜扫描:标签、assignee、PR 引用、速读首行;全文只读手上五张。 - 判据:开场标记→首批 ≤ 读五张;录裁只录维护者回字,⛔ 不自录、不自转工作态。 -- 决策收件箱 `needs-user-decision` 跨仓勤务,按基本原则批呈;⛔ 不复活已退役的汇总 issue。 +- 决策收件箱 = 全部仓的 `needs-user-decision`,卡留立卡仓;⛔ 不复活已退役的汇总 issue。 +- 入箱勤务:校验/补全四棱块、速读与 `Prior rulings on this card:` 行;入箱同笔现读前提。 +- 线程有 `Ruling:`/RULED 的卡再入箱,该行逐 id 各一句变化;缺行 ⇒ 拒入,`pm:retriage` 回立卡者。 - 一次只开一批:维护者对批 N 回字(一字即可)后,新到才合成批 N+1;续批至清零才收工。 - 受管草稿批:两仓 `is:pr is:open is:draft label:needs-user-decision` 对照等人合清单,差集点名。 - 有席内 ACCEPT 者呈一批 ≤5 行,写法见 `../decision-analysis.md`;四件缺一者列缺口不呈。 @@ -65,6 +68,20 @@ - 待您清单与待字索引随所属批只呈一次,⛔ 不逐轮重印;座位贴散文降为指针,标签即状态。 - 出口执行:核验动作确已发生,再摘标加证据评论同笔;出口条款见 `../state-machine.md`。 +## 职责四:每日摘要、发版板、pin 链与总表 + +- 每日摘要:在飞/待裁/待落地/撞墙、等复审逾 24h 的 PR、发版板、pin 滞后、无卡 fork PR。 +- 座位贴与在飞活性复查归本摘要,见 `../dispatch-runbook.md` 巡查常设项与 `../triage-duties.md`。 +- 发版板 `target:` 主仓归本席;判据二元,⛔ 不做优先级渐变:不修它,RC 能不能发。 +- 判阻塞四类:① 用户今天就撞的已发布面缺陷;② 公开契约 declared≠enforced。 +- ③ 存量数据/迁移形状(发布后修不回);④ 发布说明里要为它道歉的。 +- 拆分/分票时 `target:*` 随工作走,对每一半重跑二元判据,默认继承,不继承按四类写明理由。 +- 每张板恰好一个生产者;鲜度节奏、清板三选一、pin 前置见 `../seat-post-protocol.md`。 +- 跨仓 pin 链:objectui pin 落后且其队列已空 ⇒ 在本仓立/刷新 console bump 单;⛔ 只立单不 bump。 +- 见新 tag 族发布 ⇒ 在 cloud 与每个应用仓立平台版本 bump 单;单张封顶,已有则追评刷新。 +- bump 单等待卡清单 = hold 索引(`Restart-when:`/`Blocked-by:` 点名该发布的 open 卡),查询落正文。 +- 车队总表随本摘要重生成,坐席/接管/收班同笔;一席一行,⛔ 不手改;见 `../project-forms.md`。 + ## 与 skills 席的分界 - 改 skill、指令或治理文本归 skills 席;出裁决、清复审标、清点待人工清单归本席。 diff --git a/.claude/skills/pm-dispatch/references/lanes/triage.md b/.claude/skills/pm-dispatch/references/lanes/triage.md index 02d400c3762..7ad3956f16e 100644 --- a/.claude/skills/pm-dispatch/references/lanes/triage.md +++ b/.claude/skills/pm-dispatch/references/lanes/triage.md @@ -1,7 +1,7 @@ # 席位章程:分诊席(Triage) 见 triage-duties.md;本文是本席的岗位说明,现值状态恒在座位贴,⛔ 不迁入本文。 -- 分诊每 fire 只取一个仓,两仓轮替:objectstack、objectui、objectstack……;仓内按最旧优先。 -- 饥饿守卫:轮次开始时任一仓最旧未路由卡超过 4 小时,该仓本轮优先,不论轮到谁。 -- ⛔ 不回退到跨仓全局最旧优先;⛔ 不因积压增设第二分诊席或改 fire 频率。 -- 补半状态前先确认无人在动;读取之后才出现的六态属他席,停手重读,⛔ 不替换。 +- 由维护者一句召唤到任一项目,默认同总监席项目;只写标签与审计评论,⛔ 无 PR、无认领。 +- 范围 = objectstack、objectui 的裸卡首触(定级、路由、三件)与跨车道查重;应用仓无分诊席。 +- 每 fire 只取一个仓,两仓轮替、仓内最旧优先;最旧未路由超 4h 的仓本轮优先。 +- 补半状态前先确认无人在动,读后新现六态属他席即停手;⛔ 不加第二席、不改 fire 频率。 diff --git a/.claude/skills/pm-dispatch/references/triage-duties.md b/.claude/skills/pm-dispatch/references/triage-duties.md index 61d090fb9d0..4ebf6c20424 100644 --- a/.claude/skills/pm-dispatch/references/triage-duties.md +++ b/.claude/skills/pm-dispatch/references/triage-duties.md @@ -2,33 +2,26 @@ 分诊席每次 fire 开局读本文;本文是分诊座位的全部职责。 -- 发版板(无板仓跳过)与查重/shadow 检查全仓照跑;⛔ 无代裁通道。 +- 发版板、pin 链、在飞活性复查归总监席摘要(细则留本文);查重两仓照跑;⛔ 无代裁通道。 - fire 开局只按名加载互斥检查所需工具,`ToolSearch` 用 `select:`;判定本轮有活才加载其余。 - ⛔ 分诊 fresh session 开局不做泛关键词 ToolSearch;可验判据:空转轮 ~4 万 token 以内。 - 两级盘点:小时轮以 `since` 窗口读增量,锚 = 座位贴上一份收班简报的时间戳。 - 查重缓存住席内:新会话全量拉,其后 `since` 增量;⛔ 不建分支、不共享、不依赖备份。 -- 每日一 fire 跑全仓全量对账并归集日频职责;选层按 fire 时刻 ⛔ 不用计数器,简报写明层。 +- 每日一 fire 跑两仓全量对账并归集日频职责;选层按 fire 时刻 ⛔ 不用计数器,简报写明层。 - 每条枚举比对返回数与 `totalCount`,不等 ⇒ 报 `sweep INCOMPLETE` 点名缺口,⛔ 永不报干净。 - Backlog sweep 是常设职责,每 fire 扫任一析取命中的卡。 - 析取 ①:全裸(无 `pm:*`、无 `needs-user-decision`、无 `domain:*`)。 -- 析取 ②:有 `pm:queue` 无 `domain:*`(仅多车道仓);析取 ③:有 `domain:*` 无 pm-state。 -- 析取 ④:有 `pm:queue` 与 `domain:*` 而无 `priority:*`;②③④ 只取 `updated_at` 早于 ~2 分钟。 +- 析取 ②:有 `pm:queue` 无 `domain:*`(仅多车道仓),只取 `updated_at` 早于 ~2 分钟。 +- 有 `domain:*` 无 pm-state,或有 `pm:queue`+`domain:*` 无 `priority:*` 的半标卡,归所属车道席补齐。 - 排除 `tracking`、`status:parked`、全部 `pm:seat` 贴、`qa-run` 记录。 - 自贴卡抽查:窗内新建且 `domain:*` 事件与建卡同分钟,逐张核车道、补齐三件;⛔ 不凭 actor。 -- 半状态治愈积压 ②③④ 最老优先、P0 嫌疑先行,⛔ 优先最新不适用。 -- 首触定级与三析取 sweep 每 fire 跑到清空:⛔ 无每轮总量预算,清得动就多清。 +- 半状态治愈积压 ② 最老优先、P0 嫌疑先行,⛔ 优先最新不适用。 +- 首触定级与两析取 sweep 每 fire 跑到清空:⛔ 无每轮总量预算,清得动就多清。 - 窗口耗尽未跑完的,下一 fire 从标签状态断点续跑。 - 排序:队列每轮清空时最新优先;清不空的那一刻起改最老优先。 - 裸卡数 >15 ⇒ 下一 fire 整轮改域分批集中模式,每批 ≤5 张同族卡,照样跑到清空。 -- 每 fire 同扫 open fork PR:无卡按 `external-contributions.md` ① 立卡;卡已关的按其 ③ 补关。 - 紧急卡直接分诊:维护者点名或 p0 嫌疑 ⇒ 立即起默认判断档分诊子代理,不等定时轮。 - 紧急分诊的授权面 = 分诊本身,⛔ 不写码不认领;产出落卡,与定时轮分诊同格式同效力。 -- 跨仓 pin 链的窗口级兜底也在 sweep,⛔ 只立单不执行 bump。 -- objectui pin 落后且其队列已空 ⇒ 在本仓立/刷新 console bump 单。 -- 见新 tag 族发布 ⇒ 在 cloud 立 `.objectstack-sha` bump 单。 -- bump 单单张封顶:先查同题 open 单,已有就追评刷新;工具链新形态只提请不扩面。 -- bump 单的等待卡清单读自 hold 索引,查询式与命中数落正文;⛔ 凭记忆写的不是该清单。 -- hold 索引 = `Restart-when:` 或 `Blocked-by:` 行点名该发布、版本或上游 commit 的全部 open 卡。 - 分类动作每张三选一,外加一个修复通道。 - 裁定写方向、给六态之一。 - 方向在 ADR/本卡裁决/不可重裁规则:贴 `check-prior-rulings.mjs` 的 `Prior rulings read:` 行,或不点。 @@ -50,9 +43,6 @@ - 缺 `reach:` 且非例外 ⇒ 定 `priority:p3`,并入收口卡或清扫卡,⛔ 不单独派发、不因此关卡。 - 先修复:正文被 sanitizer 截断的卡不可派发,评论修复指令后跳过。 - 停摆指令判据必须比其它分类更硬(双读取),事后证伪同处公开作废。 -- 决策箱勤务:入箱校验/补全四棱块、速读与 `Prior rulings on this card:` 行;存量卡低频回填。 -- 入决策箱那一笔连「前提今天还成立吗」一起现读;改状态只需现读卡。 -- 线程有 `Ruling:`/RULED 的卡再入箱,该行逐 id 各一句变化;缺行 ⇒ 拒入,`pm:retriage` 回立卡者。 - `type`(Bug/Feature/Task)立单者可预填、分诊校正;新卡即时打,存量卡 ⛔ 不回填、下次碰到补。 - 判据:违背已声明契约 ⇒ `Bug`,扩大接受集/公开面越出已声明 ⇒ `Feature`,其余 ⇒ `Task`。 - 定级按北极星「优先级」1–3 条;首行 `Path: <定义项> | <清单项 id/缺项> | P<路步> | none`。 @@ -72,8 +62,6 @@ - 生产者在哪是常设分诊问题:declared ≠ enforced 形状的卡先问谁在写这个字段。 - 首触答责任三问:谁的代码出险/有正路否/谁可达且有人用否;据答改卡范围、域与路由。 - 发现分诊轮:`finding` 恒 = 待首次定级、定级即离标;hold 重验只在 `Restart-when:` 命中时发生。 -- closed 形态随每轮解锁扫描;可执行判据由分诊席每日一个低频子轮批量执行。 -- `Restart-when:` 命中同 closed 命中待遇:回队前 ref 重验再回队。 - ⛔ 不设逐卡豁免评论;每 fire 定完全部未定级 finding,优先于旧卡重验。 - 三类外不可逆或有硬时限(发版即固化、只被消费的文件、过窗不可补)⇒ 不关,报维护者。 - 三类外首触关闭只清门前存量,关 not planned(不等批准可否决重开);三类内无证据拒收。 @@ -87,11 +75,6 @@ - 域分批与 sweep 打包晋级五条照用;每批约定与积压告警见 `references/dispatch-runbook.md`。 - `pm:retriage` 每 fire 先答异议评论所求,答后同笔摘标;须维护者答的进收件箱,标照摘。 - retriage 的异议判据认内容(有评论写明所求)⛔ 不认形状(有一条异议评论)。 -- 发版板 `target:`:判据二元,⛔ 不做优先级渐变:不修它,当前 RC 能不能发。 -- 判阻塞四类:① 用户今天就撞的已发布面缺陷;② 公开契约 declared≠enforced。 -- ③ 存量数据/迁移形状(发布后修不回);④ 发布说明里要为它道歉的。 -- 拆分/分票时 `target:*` 随工作走,对每一半重跑二元判据,默认继承,不继承按四类写明理由。 -- 每张板恰好一个生产者;鲜度节奏、清板三选一、pin 前置见 `references/seat-post-protocol.md`。 - 裁决恒归维护者人工:分诊只分析、推荐、入箱;⛔ 无代裁车道、置信门与 `auto-adjudicated`。 - 人工地板(恒呈维护者):功能新增;ADR;协议/公开契约变化;破坏性或难回滚动作。 - 人工地板同含:安全/权限边界;门禁削弱(降阈/删必查/抬上限/跳测);新增运行时第三方依赖; diff --git a/scripts/pm/check-skill-line-ratchet.mjs b/scripts/pm/check-skill-line-ratchet.mjs index 73b21e631cd..e3227a8f148 100644 --- a/scripts/pm/check-skill-line-ratchet.mjs +++ b/scripts/pm/check-skill-line-ratchet.mjs @@ -1245,7 +1245,14 @@ export const CEILINGS = new Map([ // and the first-class self-ruling gate left (−13), and the same ruling batch // ordered the human floor widened and the risk / workload criteria written // as judgeable lines (+13); landed count, headroom 0, same convention. - ['.claude/skills/pm-dispatch/references/triage-duties.md', 120], + // Lowered 120 → 103 as the SOURCE of the cross-file move declared in + // CROSS_FILE_MOVES below (the thin triage seat): the release board, the + // cross-repo pin chain and the decision-inbox duties moved into the 总监席 + // charter; the fork-PR sweep and the hold/closed re-validation went to the + // lane patrol (dispatch-runbook.md, line-neutral there). The human-ruling + // floor and the risk / workload tests stayed intact. Landed count, headroom 0, + // same convention (lowering is always legitimate). + ['.claude/skills/pm-dispatch/references/triage-duties.md', 103], // execution-duties.md, raised 183 → 185 by the split-off-card ruling — an // ORDINARY raise, ⛔ not a cross-file move (card #23579). The text is two rule // lines beside the derived-sub-issue rules in 〈候选与批次〉: a queued card found @@ -1400,7 +1407,14 @@ export const CEILINGS = new Map([ // Lowered 72 → 70 by the same revocation: the in-project delegated-ruling // channel and its standing order left; `needs_decision` joins the ruling // batch the maintainer rules by hand. Landed count, headroom 0, same convention. - ['.claude/skills/pm-dispatch/references/lanes/director.md', 70], + // Raised 70 → 87 by the CROSS-FILE MOVE declared in CROSS_FILE_MOVES below + // (the thin triage seat): the release board (5), the cross-repo pin chain (3, + // extended to every app repo) and the decision-inbox duties (2) moved in from + // triage-duties.md, whose ceiling fell 120 → 103 in the same PR, with the + // daily digest, the thin-triage pairing and the roster pointer the same word + // ordered; +17 against a net source decrease of 17. Landed count, headroom 0, + // same convention. + ['.claude/skills/pm-dispatch/references/lanes/director.md', 87], // Triage seat charter (maintainer ruling: the triage seat stays single; pickup // alternates between the two multi-lane repos, oldest-first inside a repo, with a // 4-hour starvation guard). A seat charter is read per seat session like every @@ -2028,6 +2042,20 @@ export const CROSS_FILE_MOVES = new Map([ sources: [['.claude/skills/pm-dispatch/SKILL.md', 819]], }, ], + // The thin triage seat (maintainer's word 2026-10-23, verbatim and + // untranslated: 「分诊不忙不如留给总监管」): the 分诊席 keeps bare-card first + // touch and cross-lane dedupe; its daily duties — the release board, the + // cross-repo pin chain, the decision-inbox duties — moved into the 总监席 + // charter. `was` values are the participants' ceilings on `origin/main` + // before the move; the reviewer holds them against that diff. + [ + '.claude/skills/pm-dispatch/references/lanes/director.md', + { + ruling: 'the triage daily duties (release board, pin chain, decision-inbox duties) consolidated into the 总监席 charter on the maintainer\'s word of 2026-10-23 「分诊不忙不如留给总监管」, under the cross-file move authorised by #14685 item 5 (comment 5520452691)', + was: 70, + sources: [['.claude/skills/pm-dispatch/references/triage-duties.md', 120]], + }, + ], ]); /** From f779162f367e6b036ce489937f1af13464b33c3f Mon Sep 17 00:00:00 2001 From: Claude Date: Fri, 23 Oct 2026 13:30:12 +0000 Subject: [PATCH 2/4] pm-dispatch: name the Reviewed-by-account key in the independence pair The contract-review independence lines now say the record carries a Reviewed-by-account: line (the reviewing session's login) beside Reviewed-by:, and pre-landing check 1 compares it to the PR attribution login, matching the key the queue guard reads. Claude-Session: https://claude.ai/code/session_011XvnQKt7WvdyvD2X4DLc8R Co-authored-by: Claude --- .claude/skills/pm-dispatch/references/contract-review.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.claude/skills/pm-dispatch/references/contract-review.md b/.claude/skills/pm-dispatch/references/contract-review.md index c1252541872..2766350705f 100644 --- a/.claude/skills/pm-dispatch/references/contract-review.md +++ b/.claude/skills/pm-dispatch/references/contract-review.md @@ -33,11 +33,11 @@ - 隔离复核子代理暂存全写按所审 PR 命名的 `/pr-/`,⛔ 不读非本轮自写的暂存。 - 独立性对:`Implemented-by:`/`Reviewed-by:` 取值同见 `--template`;子代理记采纳它的席位。 - 项目席落地的 Tier S:`Reviewed-by:` 须属 PR 作者外的账户;同账户子代理只算复核。 -- 账户读 PR 正文首行 attribution 的 `github_login` 与中继发送者;记录独立性段并书两账户。 +- 作者账户 = PR 正文 attribution 的 `github_login`;记录另带 `Reviewed-by-account:` 行写复核账户。 - 只动散文面、不欠契约复核的 PR 同欠另一账户一条 `TIER_DEFAULT` 记录;⛔ 散文面无豁免。 - 轮次报告设复审清单专节,与呈裁清单同为强制审计。 - 落地前检两条,过则 Tier S 入队、Tier H 等人批:① 达档条款②复核 PASS 在案(同形记录)。 -- ① 在项目席另加:记录的复核账户须异于 PR 作者账户,见上文独立性对。 +- ① 在项目席另加:`Reviewed-by-account:` 的登录须异于 PR attribution 的登录,队列守卫同判。 - 过渡:无另一账户在席时,① 的替代 = 维护者本人在执行线程的消息逐个点名 PR 编号。 - 例外:纯重生成或只动上列散文面的 head 后移原记录继续管;判据机读已提交树; PR 落 `Regen-provenance:` 行。 From eadbdfc6b4fbc5dff572f8456c34e0e578d5431e Mon Sep 17 00:00:00 2001 From: Claude Date: Fri, 23 Oct 2026 15:46:47 +0000 Subject: [PATCH 3/4] pm-dispatch: triage-duties line 5 points at director.md for the moved details The release board and pin chain details moved to the director charter, so the pointer line says where they went; only the in-flight liveness re-check keeps its details in this file. Same line count and under the byte width. Claude-Session: https://claude.ai/code/session_011XvnQKt7WvdyvD2X4DLc8R Co-authored-by: Claude --- .claude/skills/pm-dispatch/references/triage-duties.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.claude/skills/pm-dispatch/references/triage-duties.md b/.claude/skills/pm-dispatch/references/triage-duties.md index 4ebf6c20424..7981c332eca 100644 --- a/.claude/skills/pm-dispatch/references/triage-duties.md +++ b/.claude/skills/pm-dispatch/references/triage-duties.md @@ -2,7 +2,7 @@ 分诊席每次 fire 开局读本文;本文是分诊座位的全部职责。 -- 发版板、pin 链、在飞活性复查归总监席摘要(细则留本文);查重两仓照跑;⛔ 无代裁通道。 +- 发版板、pin 链归总监席摘要,细则见 director.md;活性复查同归,细则留本文;⛔ 无代裁通道。 - fire 开局只按名加载互斥检查所需工具,`ToolSearch` 用 `select:`;判定本轮有活才加载其余。 - ⛔ 分诊 fresh session 开局不做泛关键词 ToolSearch;可验判据:空转轮 ~4 万 token 以内。 - 两级盘点:小时轮以 `since` 窗口读增量,锚 = 座位贴上一份收班简报的时间戳。 From 3e07aa849a7952760efeb82974bdec32dca47e09 Mon Sep 17 00:00:00 2001 From: Claude Date: Fri, 23 Oct 2026 16:01:57 +0000 Subject: [PATCH 4/4] pm-dispatch: the interim landing rule also accepts a standing Tier S authorization Per the maintainer's ruling on the card (batch 7 item 2, letter A): while no other account is seated, the substitute for pre-landing check 1 is the maintainer's own words in the executing thread, either naming each PR number or a standing Tier S authorization for that seat, revocable by one sentence. The line wraps once to stay under the byte width. Claude-Session: https://claude.ai/code/session_011XvnQKt7WvdyvD2X4DLc8R Co-authored-by: Claude --- .claude/skills/pm-dispatch/references/contract-review.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.claude/skills/pm-dispatch/references/contract-review.md b/.claude/skills/pm-dispatch/references/contract-review.md index 2766350705f..901423ebb10 100644 --- a/.claude/skills/pm-dispatch/references/contract-review.md +++ b/.claude/skills/pm-dispatch/references/contract-review.md @@ -38,7 +38,8 @@ - 轮次报告设复审清单专节,与呈裁清单同为强制审计。 - 落地前检两条,过则 Tier S 入队、Tier H 等人批:① 达档条款②复核 PASS 在案(同形记录)。 - ① 在项目席另加:`Reviewed-by-account:` 的登录须异于 PR attribution 的登录,队列守卫同判。 -- 过渡:无另一账户在席时,① 的替代 = 维护者本人在执行线程的消息逐个点名 PR 编号。 +- 过渡:无另一账户在席时,① 的替代 = 维护者本人在执行线程的话:逐个点名 PR 编号, + 或对该席位的 Tier S 长期授权(一句可撤)。 - 例外:纯重生成或只动上列散文面的 head 后移原记录继续管;判据机读已提交树; PR 落 `Regen-provenance:` 行。 - ② PR check 全绿,⛔ 非 required 子集;例外:merge-base 同签名的红不计、按设计而红见 SKILL.md。