Skip to content

Commit fd246c2

Browse files
docs(pm-dispatch): route any card that involves cloud to the cloud PM, by involvement rather than by where the code lands (#26972)
<!-- claude-projects-attribution: {"github_login":"os-steve"} --> _Requested by **Steve** · [project thread](https://claude.ai/code/project/chan_01FdL1XeUyvVNxLreh3F4Qi9?thread=cmsg_01FdL1XeUyvVNxLreh3F4Qi9Tf2FfocFCDEgNJ3nSowwdB)_ Fixes #26762 Clause-②: no Metadata-protocol: none ## 维护者速读 - 改了什么:分诊路由规则改一条——一张卡只要涉及 cloud(修复、验收或必经步骤落 cloud 仓或托管面;是 cloud 卡的半张或被它阻塞;成因在 cloud),就挂 `domain:cloud` + `status:parked` 归 cloud PM,本仓车道不认领;按「涉及」判,不按代码落点判。只在 cloud 环境测出、修复验收全在本仓的,或只把 cloud 卡当历史引用的,不算。已派发到本仓车道的在飞卡原地完工,只加评论注明。 - 为什么改:你 10-27 原话「应该更新分诊和 skills,一个issue只要涉及 cloud,就归 cloud pm 处理」。原表只按「云服务旅程」路由,分诊职责里没有涉及判据。 - 风险与回滚:只改 pm-dispatch 的车道表一行与分诊职责三行(删三行付账,其规则在 SKILL.md / state-machine.md / platform-readings.md 原样保留);无门禁读这段文字;回滚 = revert 本 PR。 - 先看:`.claude/skills/pm-dispatch/references/triage-duties.md`(路由步骤下新三行与删去的三行),`.claude/skills/pm-dispatch/SKILL.md`(`domain:cloud` 行)。 - 两分钟验证:`pnpm check:pm-skill-ratchet` 预期 `✓ … declared cross-file moves: 3`,两文件行数不变(SKILL.md 319、triage-duties.md 103);`git grep -n '凡涉 cloud' origin/main` 合入前为 0 命中。 - 需要你做的:批准本 PR(Tier S draft,等契约复审与 GOVERNED_APPROVERS)。 ## What changes Maintainer rule, verbatim (2026-10-27, triage seat thread): 「应该更新分诊和 skills,一个issue只要涉及 cloud,就归 cloud pm 处理」. The card's body items 1–3 are the rule; item 4 names the homes. There is no `references/lanes/cloud.md` on `main` and none is created. - `.claude/skills/pm-dispatch/SKILL.md`, the `domain:cloud` row of the 域车道 table — same line, 109 → 117 bytes, no new line: the row now reads 「凡涉 cloud 即归 cloud PM(非按落点):停放(加 `status:parked`,sweep 免扫),本仓不派」. The routing basis moves from the card's journey (「云服务旅程」) to its involvement, with the explicit 「非按落点」 clause; the parked label, the sweep exemption and 「本仓不派」 are kept. - `.claude/skills/pm-dispatch/references/triage-duties.md`, three lines directly under the routing line 「路由是分诊的技术判断…」: 1. the "involves cloud" test, any one arm sufficient — its fix, acceptance or a required step lands in the cloud repo or the hosted surface; it is a cloud card's half or is blocked by one; its cause is in cloud (120 B); 2. the "not by itself" exclusions — a defect only measured on cloud whose fix and acceptance are wholly in this repo; a cloud card cited only as history — and the consequence for a hit: it goes to the cloud PM (109 B); 3. the in-flight rule — a card already `pm:dispatched` to a lane here finishes where it is; triage notes the cloud involvement in a comment for the cloud PM, ⛔ never moves it mid-claim (110 B). Line budget (the ratchet, lines only down; 120-byte cap, no re-wraps): | file | before | after | paid by | |---|---|---|---| | `SKILL.md` | 319 | 319 | same-line edit of the `domain:cloud` row (109 → 117 B); no line added | | `references/triage-duties.md` | 103 | 103 | +3 routing lines, −3 TRUE duplicates whose other home the triage seat reads: ① the `pm:retriage` per-fire line (「每 fire 先答所求、同笔摘标」 is `state-machine.md` L40, written for the 分诊 Routine; 「须维护者答的入箱」 and 「既裁砍项与席改标退回执行席」 are SKILL.md 红线 L36 and the `pm:retriage` state row L112); ② the 发现分诊轮 line (「`finding` 恒 = 待首次定级、定级即离标」 is the SKILL.md `finding` row L113 verbatim; 「hold 重验只在 `Restart-when:` 命中时发生」 is the `pm:on-hold` row L108 + the 双查 rule L126 + `state-machine.md` L14–19); ③ the 写入前现读 line (「写入前现读当前状态」 is the 取现集 step of SKILL.md L146 标签写恒四步; 「列表快照读数一律作废」 is `platform-readings.md` L224 「隔轮旧读数是无效快照」). Each surviving home is a file the triage seat reads on every fire (SKILL.md), when handling a state (`state-machine.md`, pointed at from SKILL.md L125) or when taking a reading (`platform-readings.md`, pointed at from `reading-discipline.md` L6). | Every new line is ≤ 120 bytes (120 / 109 / 110, measured with `Buffer.byteLength`). No re-wrap anywhere. No issue number in any rule line (`check:pm-skill-id-lint`). No gate is added or changed, per the card's 「No gate」. No forced test edits. No changeset: `.claude/**` publishes nothing (`skip-changeset`). ## Tests No package or script is touched; no package tests apply. The three acceptance gates named by the claim are in the Verification section. ## Acceptance notes - `references/cross-repo-coordination.md` L44–47 already describe the parked `domain:cloud`+`status:parked` card and the `repo:cloud` label; they are consistent with the new rows and were not edited (outside the claim's file surface). - The card's item 4 names `references/lanes/cloud.md` "if it exists"; it does not exist on `main` and the delta forbids creating one, so nothing lands there. - A fourth duplicate candidate was identified and left in place: the 攒批 line (triage-duties.md 「需裁事项攒批(≤5 项/批…)」) duplicates `decision-analysis.md` 常设决裁批流程 L7/L11; not needed for this budget, noted for the seat. ## Verification Head `b75467f70a238b6d78140f92affa0dd1dffc9e49` (merge base `912076f8` of `origin/main`; `#26771` had merged as `bdb00ffef4` before the branch was cut). Change set: 2 files, +4 / −4 lines. Acceptance gates named by the claim, run on the edited tree: ``` pnpm check:pm-skill-ratchet ✓ (declared cross-file moves: 3; SKILL.md 319/319, triage-duties.md 103/103) pnpm check:pm-skill-id-lint ✓ 104 files clean pnpm check:pm-governed-prose ✓ 2 surfaces name all 13 governed surfaces ``` Derived gate families (`node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack`, 22 families), each run with `< /dev/null` after `@objectstack/formula` and `@objectstack/lint` were built under `os-verify-lock.sh`; every family exited 0. Reconciled: ``` ✓ dispatch-gates --ran: 22 derived famil(ies) accounted for — 22 run, 0 NOT-MEASURED (a DERIVED zero — all 22 recorded an exit code and none of them is 3). ``` Byte check of the three new lines: 120 / 109 / 110 (`Buffer.byteLength`, UTF-8); the edited SKILL.md row is 117 bytes. `check:pm-skill-ratchet` confirms the table-row and line-byte caps. ## Human Minimum - [x] 1. Schemas start as Zod; `packages/spec` holds no runtime logic. (n/a — no schema) - [x] 2. Every name I added uses the casing for its kind. - [x] 3. No formatter ran; `pnpm lint` is CI's run (repo-wide), not re-run locally. - [x] 4. One issue, one branch off an up-to-date `main`, one pull request. - [x] 5. A change that publishes carries a changeset — nothing publishes; both declaration lines are filled in above. - [x] 6. `packages/spec` touched: no. - [x] 7. No hand edits to `content/docs/references/`, `packages/*/CHANGELOG.md` or `content/docs/releases/`. - [x] 8. Title, body and comments are in English (the maintainer's ruling quoted verbatim). - [x] The *Before Submitting* list in CONTRIBUTING.md is done. --- _Generated by [Claude Code](https://claude.ai/code/session_01ADHkmQJocfeTUHYwZhSN2b)_ Co-authored-by: Claude <noreply@anthropic.com>
1 parent 27e4d65 commit fd246c2

2 files changed

Lines changed: 4 additions & 4 deletions

File tree

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,7 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报
162162
| `domain:skills` | governed 面全量(含本文件;统一定义见「governed 面统一定义」行);非门禁的 `scripts/pm/**`(PM 循环工具);governed 面的治理执行文件:`.github/CODEOWNERS` + SUBJECT 是 governed 面本身的门禁/审计(现为 `scripts/pm/check-governed-merges.mjs`) |
163163
| `domain:spec` | `packages/spec` 整包:schema 形状、`contracts/**`、退役行为半边、strictness 台账;describe/JSDoc/墓碑散文/错误 guidance 与 alias 表;`packages/spec/scripts/**`、`packages/spec/docs/**` 及按锚定规则的例外归本域的工具链(域边界枚举与席内分派见 `references/lanes/spec.md`) |
164164
| `domain:ui` | `ui/**` 全部代码:`@object-ui/*` 库与 `ui/apps/*`、`ui/packages/types` 与 schema 语料、`ui/scripts` 与门禁工具、文档随所记录的面走;`packages/console`(dist 由 `pnpm console:build` 生成 ⛔ 不手改);协议恒归 `domain:spec`,受管面归 `domain:skills`;详见 `references/lanes/ui.md` |
165-
| `domain:cloud` | 云服务旅程,停放(加 `status:parked`,sweep 免扫)待 cloud PM 迁移,本仓不派 |
165+
| `domain:cloud` | 凡涉 cloud 即归 cloud PM(非按落点):停放(加 `status:parked`,sweep 免扫),本仓不派 |
166166
| (无固定归属,按落点分诊) | `packages/apps/*`、`examples/*`(归它演练的子系统)、`docs/audits/**` |
167167

168168
- 表未覆盖的包首次分诊时归类并走 PR 更新本表;新增或退役 `domain:*` 必须同批改本表。

‎.claude/skills/pm-dispatch/references/triage-duties.md‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,9 @@
5555
- 「无则关」= 首触即关 not_planned,带理由与入队三门,⛔ 不定 p3、不 hold;下行同此。
5656
- 所入车道队列 P0/P1 开着(= 未派发,在飞不算)时,三门皆无的 p2/p3 `tooling` 卡同样关。
5757
- 路由是分诊的技术判断,⛔ 永不升级哪个仓的问题;父单是协调节点,永不派发。
58+
- 涉 cloud 任一即算:修复/验收/必经步骤落 cloud 仓或托管面;cloud 卡半张或被其阻;因在 cloud。
59+
- 不算:只在 cloud 测得而修复与验收全在本仓;仅引 cloud 卡作历史;命中者归 cloud PM。
60+
- 已 `pm:dispatched` 到本仓车道的原地完工,评论注明涉 cloud 给 cloud PM,⛔ 认领中不迁。
5861
- 父单已有子结构的:父单队列标签即可,分诊逐个展开路由、补 `Blocked-by:` 排序。
5962
- 跨层功能点(≥2 层)立父单带 `area:*`+`pm:epic`+清单项级,逐层子单按 `Blocked-by:` 排。
6063
- 每张留一条英文审计评论(`Triage: lands in …; rationale: …`),可选带 `Size/model suggestion:` 行。
@@ -65,17 +68,14 @@
6568
- 执行席 ⛔ 不并卡,疑重复挂 `pm:retriage` 写明哪两张同文件同机制;同 assignee 者自关后卡。
6669
- 生产者在哪是常设分诊问题:declared ≠ enforced 形状的卡先问谁在写这个字段。
6770
- 首触答责任三问:谁的代码出险/有正路否/谁可达且有人用否;据答改卡范围、域与路由。
68-
- 发现分诊轮:`finding` 恒 = 待首次定级、定级即离标;hold 重验只在 `Restart-when:` 命中时发生。
6971
- ⛔ 不设逐卡豁免评论;每 fire 定完全部未定级 finding,优先于旧卡重验。
7072
- 三类外不可逆或有硬时限(发版即固化、只被消费的文件、过窗不可补)⇒ 不关,报维护者。
7173
- 三类外首触关闭只清门前存量,关 not planned(不等批准可否决重开);三类内无证据拒收。
7274
- 三类内再过时前提检查,三选一:晋级 / 关闭 not planned / hold;判级只在此轮,不在立单时。
73-
- ⛔ 写入前对每张卡现读当前状态;任何列表快照读数一律作废。
7475
- ⛔ 带 `pm:dispatched`/assignee/open 或 merged PR 引用的卡不动;例外:下三行、main-red 锚卡首触。
7576
- 在飞活性复查:认领逾一天无自有产出(commit/PR/评论)⇒ 敲门一次,首行键 `Owned-24h re-check:`。
7677
- 敲门后 `RECLAIM_AFTER_HOURS = 12` 小时无答复 ⇒ `label-write.mjs --release` 一笔中继释放,贴不动。
7778
- 释放:`Release:` 评论(出处三件)+ `Resume-from:` 行 + `pm:dispatched`→`pm:queue` + 清 assignee。
78-
- `pm:retriage` 每 fire 先答所求、同笔摘标;须维护者答的入箱;既裁砍项与席改标退回执行席。
7979
- retriage 的异议判据认内容(有评论写明所求)⛔ 不认形状(有一条异议评论)。
8080
- 人工地板(恒呈维护者):功能新增;ADR;协议/公开契约变化;破坏性或难回滚动作。
8181
- 人工地板同含:安全/权限边界;门禁削弱(降阈/删必查/抬上限/跳测);新增运行时第三方依赖;

0 commit comments

Comments
 (0)