Repository navigation
docs(pm-dispatch): route any card that involves cloud to the cloud PM, by involvement rather than by where the code lands - #26972
Conversation
…PM, by involvement rather than by where the code lands The domain:cloud lane-table row now routes by involvement (same line, 117 bytes), and the triage routing step gains the "involves cloud" test, its "not by itself" exclusions and the in-flight rule. The three new lines are paid by three lines whose rules live verbatim in homes the triage seat reads (the retriage per-fire line, the finding-leaves-the-label line and the re-read-before-write line). Claude-Session: https://claude.ai/code/session_01ADHkmQJocfeTUHYwZhSN2b Co-authored-by: Claude <noreply@anthropic.com>
席位核对ACCEPT ·
|
Contract reviewServed-tier: Director seat (summon #52, ledger objectstack#12708), summoned by the ① Derived judgments
② Semver level
③ Boundary flags
④ Design judgment
Implemented-by: VERDICT: PASS Generated by Claude Code |
…n's parking rule Conflicts in pm-dispatch SKILL.md and triage-duties.md against #26972, which implemented the same maintainer rule with domain:cloud + status:parked. This PR's design wins: the domain:cloud row and the triage routing line keep the whole-card route to the cloud PM (repo:cloud, live pm state, never parked; an in-flight card is released to triage). Main's "does not count" exclusion is kept as its own triage line; main's deletion of the ruling-208 line is kept. Claude-Session: https://claude.ai/code/session_01ADHkmPywJ6aAj1KTC5Pvo6 Co-authored-by: Claude <noreply@anthropic.com>
…age line The merge dropped #26972's inclusion line; its hosted-surface, Blocked-by-a-cloud-card and cause-in-cloud items have no other home. They go back as one line paired with the kept exclusion. Claude-Session: https://claude.ai/code/session_01ADHkmPywJ6aAj1KTC5Pvo6 Co-authored-by: Claude <noreply@anthropic.com>
Requested by Steve · project thread
Fixes #26762
Clause-②: no
Metadata-protocol: none
维护者速读
domain:cloud+status:parked归 cloud PM,本仓车道不认领;按「涉及」判,不按代码落点判。只在 cloud 环境测出、修复验收全在本仓的,或只把 cloud 卡当历史引用的,不算。已派发到本仓车道的在飞卡原地完工,只加评论注明。.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 命中。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.mdonmainand none is created..claude/skills/pm-dispatch/SKILL.md, thedomain:cloudrow 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 「路由是分诊的技术判断…」:pm:dispatchedto 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):
SKILL.mddomain:cloudrow (109 → 117 B); no line addedreferences/triage-duties.mdpm:retriageper-fire line (「每 fire 先答所求、同笔摘标」 isstate-machine.mdL40, written for the 分诊 Routine; 「须维护者答的入箱」 and 「既裁砍项与席改标退回执行席」 are SKILL.md 红线 L36 and thepm:retriagestate row L112); ② the 发现分诊轮 line (「finding恒 = 待首次定级、定级即离标」 is the SKILL.mdfindingrow L113 verbatim; 「hold 重验只在Restart-when:命中时发生」 is thepm:on-holdrow L108 + the 双查 rule L126 +state-machine.mdL14–19); ③ the 写入前现读 line (「写入前现读当前状态」 is the 取现集 step of SKILL.md L146 标签写恒四步; 「列表快照读数一律作废」 isplatform-readings.mdL224 「隔轮旧读数是无效快照」). 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 fromreading-discipline.mdL6).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.mdL44–47 already describe the parkeddomain:cloud+status:parkedcard and therepo:cloudlabel; they are consistent with the new rows and were not edited (outside the claim's file surface).references/lanes/cloud.md"if it exists"; it does not exist onmainand the delta forbids creating one, so nothing lands there.decision-analysis.md常设决裁批流程 L7/L11; not needed for this budget, noted for the seat.Verification
Head
b75467f70a238b6d78140f92affa0dd1dffc9e49(merge base912076f8oforigin/main;#26771had merged asbdb00ffef4before the branch was cut). Change set: 2 files, +4 / −4 lines.Acceptance gates named by the claim, run on the edited tree:
Derived gate families (
node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack, 22 families), each run with< /dev/nullafter@objectstack/formulaand@objectstack/lintwere built underos-verify-lock.sh; every family exited 0. Reconciled: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-ratchetconfirms the table-row and line-byte caps.Human Minimum
packages/specholds no runtime logic. (n/a — no schema)pnpm lintis CI's run (repo-wide), not re-run locally.main, one pull request.packages/spectouched: no.content/docs/references/,packages/*/CHANGELOG.mdorcontent/docs/releases/.Generated by Claude Code