Repository navigation
Commit fd246c2
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
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
162 | 162 | | |
163 | 163 | | |
164 | 164 | | |
165 | | - | |
| 165 | + | |
166 | 166 | | |
167 | 167 | | |
168 | 168 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
55 | 55 | | |
56 | 56 | | |
57 | 57 | | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
58 | 61 | | |
59 | 62 | | |
60 | 63 | | |
| |||
65 | 68 | | |
66 | 69 | | |
67 | 70 | | |
68 | | - | |
69 | 71 | | |
70 | 72 | | |
71 | 73 | | |
72 | 74 | | |
73 | | - | |
74 | 75 | | |
75 | 76 | | |
76 | 77 | | |
77 | 78 | | |
78 | | - | |
79 | 79 | | |
80 | 80 | | |
81 | 81 | | |
| |||
0 commit comments