Skip to content

Commit c65599f

Browse files
docs(pm-dispatch): pin the cloud unlock probe and have triage complete a freeze itself (#31474)
<!-- claude-projects-attribution: {"github_login":"zhuangjianguo"} --> _Requested by **Steedos** · [project thread](https://claude.ai/code/project/chan_018ETKaNwMZCNRYD7D8Q9Ubb?thread=cmsg_018ETKaNwMZCNRYD7D8Q9UbbDeGPLQrs5C3RsEmkP8cErv)_ Fixes #31353 Clause-②: no Metadata-protocol: none ## 维护者速读 - 改了什么:pm-dispatch 两条规则说清楚了。一是 cloud 解锁探针:写明在 objectstack 检出里跑,第一个 sha 是修复在 `main` 上的 squash 合并 commit,第二个是 cloud 仓 `.objectstack-sha` 文件里写的 sha;二是分诊入队前遇到冻结/hold,由分诊自己同笔挂 `pm:on-hold` 加引原文的 `Restart-when:`,写不出可执行判据才挂 `pm:retriage` 问所属车道。 - 为什么改:PR #31347 合约复核 6716750908 的两条 should-fix。探针原文三处可误读(在哪跑、pin sha 从哪来、写的是修复 sha 而非合并 sha);冻结规则原文让分诊挂一个由分诊自己回答的标签,等于没说答案。两处误读都只会多挡卡,不会误放。 - 风险与回滚:只改 `.claude/` 下两份参考文档,无代码、无发布面。每份文件的新增一行都用同文件删除一条在别处已写明的规则来付,行数上限不动。回滚即 revert 本 PR。 - 先看:`.claude/skills/pm-dispatch/references/triage-duties.md` L40–41(冻结规则);`.claude/skills/pm-dispatch/references/cross-repo-coordination.md` L28–29(探针);两处被删的行(cross-repo 原 L41、triage-duties 原 L100)。 - 两分钟验证:`pnpm check:pm-skill-ratchet`,应看到两份文件 47/47 与 100/100 行、headroom 0,退出码 0。 - 需要你做的:无,`.claude/**` 属 Tier S,席位在总监席契约复核 PASS 后落地。 ## What changes `.claude/skills/pm-dispatch/references/cross-repo-coordination.md` - L28–29: the cloud unlock probe is `git merge-base --is-ancestor 合入sha PIN_SHA` (the file spells the placeholders in angle brackets), run in an objectstack checkout; 合入sha is the squash merge commit on `main` (a fix PR's own head is never an ancestor of the pin), and pin sha is the sha written inside `objectstack-ai/cloud`'s `.objectstack-sha`, not the file. - Paid by deleting old L41 (`复核记录带 Implemented-by:/Reviewed-by:;改路由…只对未派发卡`). Both halves are already stated elsewhere: `references/lanes/review.md` L19 and `references/contract-review.md` L43 carry the `Implemented-by:`/`Reviewed-by:` pair; `SKILL.md` L112 (`定车道与改路由限未派发卡`) and `references/execution-duties.md` L10 (`席改标限未派发卡`) carry the undispatched-only rule. `.claude/skills/pm-dispatch/references/triage-duties.md` - L40–41: before a move into `pm:queue`, triage reads the latest transition comment; on a hold, freeze or ruling it lands `pm:on-hold` plus a `Restart-when:` quoting it in one write (`state-machine.md` L16), and files `pm:retriage` to ask the owning lane only when it cannot write an executable `Restart-when:`. - Paid by deleting old L100 (`推送维护者只照 lanes/triage.md 推送清单;…`), a pointer whose rule `references/lanes/triage.md` L8–14 states in full (push only what needs the maintainer, the rest only into the seat post's round record). `state-machine.md` is unchanged. ## Tests Docs-only diff under `.claude/**`; no package moves, no test owed. Line widths re-measured: every touched line is at most 120 bytes (widest 120). ## Acceptance notes - Nit 1 (the ratchet comment on the `triage-duties.md` ceiling still describes the main-green doorbell as two lines) is not taken: that comment lives in `scripts/pm/check-skill-line-ratchet.mjs`, outside this card's two-file surface. - Nit 2 (cross-repo L38 lost "immediately") is not taken: the shortest wording that restores it (`…贴上注明;有主即停。`) measures 125 bytes against the 120-byte line cap, so it is not line-neutral. - The fallback clause (`pm:retriage` to the owning lane) keeps `state-machine.md` L40's remover: triage still removes the label, after the lane's answer supplies the `Restart-when:`. ## Verification <details><summary>Derived gates at 6baaf5a (19 of 19 exit 0)</summary> ``` node scripts/check-closing-keyword-parity.mjs :: exit 0 node scripts/check-closing-keyword-parity.mjs --self-test :: exit 0 node scripts/check-comment-mask-corpus.mjs :: exit 0 node scripts/pm/check-harness-current.mjs --self-test :: exit 0 pnpm --filter @objectstack/lint run check:doc-formula-expressions :: exit 0 pnpm check:agent-test-spelling :: exit 0 pnpm check:cross-package-test-inputs :: exit 0 pnpm check:doc-authoring :: exit 0 pnpm check:driver-memory-census :: exit 0 pnpm check:gitlink-declared :: exit 0 pnpm check:nul-bytes :: exit 0 pnpm check:pm-governed-merges :: exit 0 pnpm check:pm-half-states :: exit 0 pnpm check:pm-label-write :: exit 0 pnpm check:pm-skill-id-lint :: exit 0 pnpm check:pm-skill-ratchet :: exit 0 pnpm check:refd-timer-probe :: exit 0 pnpm check:skill-frame-sync :: exit 0 pnpm check:watch-hint-literal :: exit 0 dispatch-gates --ran: 19 derived famil(ies) accounted for — 19 run, 0 NOT-MEASURED ``` </details> <details><summary>Ratchet reading</summary> ``` check-skill-line-ratchet: .claude/skills/pm-dispatch/references/cross-repo-coordination.md is 47 lines (ceiling 47; headroom 0). check-skill-line-ratchet: .claude/skills/pm-dispatch/references/triage-duties.md is 100 lines (ceiling 100; headroom 0). ``` </details> 🤖 Generated with [Claude Code](https://claude.com/claude-code) --- _Generated by [Claude Code](https://claude.ai/code/session_01QsR2jSJweEchb2oqYvkbgR)_ --------- Co-authored-by: Claude <noreply@anthropic.com>
1 parent 39aa3f6 commit c65599f

2 files changed

Lines changed: 4 additions & 4 deletions

File tree

‎.claude/skills/pm-dispatch/references/cross-repo-coordination.md‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,8 @@
2525
- 规则 2:跨层功能点或 `ui/` 消费的 `Seam:` 卡恒由分诊立父单 + 逐层子单,spec/后端先行。
2626
- `main` 有 `ui/` 起,新 spec 键不再先行、取代上句次序:与首个读者同 PR,hotcrm 读者同合并批。
2727
- 下游带 `Blocked-by: <owner/repo>#<n>`;`Blocked-by` 未关闭/未合并的不派发,对 GitHub 现验。
28-
- cloud 探针 `git merge-base --is-ancestor <修复sha> <.objectstack-sha>`;不过 `Blocked-by:` 改指 pin-bump 卡。
28+
- cloud 探针 `git merge-base --is-ancestor <合入sha> <pin sha>`;不过 `Blocked-by:` 改指 pin-bump 卡。
29+
- 探针在 objectstack 检出跑;合入sha = `main` 的 squash 合并;pin sha = cloud `.objectstack-sha` 里的 sha。
2930
- 被链接或同父的两单永不同批;`ui/` 起的新键与首个读者除外,⛔ `planned` 行不单独进 main。
3031
- 规则 3:联动杂事立单,不靠记忆。
3132
- 已验收 PR 的产物流向另一仓,接受该 PR 的执行席立即在消费仓立后续单,带 `Blocked-by:`。
@@ -38,7 +39,6 @@
3839
- 多车道仓分诊空缺时,会话型执行 PM 可代扫:只做分诊动作,不跨车道认领,贴上注明。
3940
- 规则 5:一块板不设第二跟踪器:pm 标签就是状态机,看板(org Project)只是维护者的聚合视图。
4041
- 认领即跟到 MERGED:派发后发现跨车道面(含 spec)不移卡,复核按面定档,未达档借隔离复核。
41-
- 复核记录带 `Implemented-by:`/`Reviewed-by:`;改路由(`pm:retriage` 或席改标)只对未派发卡。
4242
- 转移落对方队列:目标仓立单带 `pm:queue`、出处行与一行可执行判据,依赖用 `Blocked-by:`。
4343
- 跨座位请求骑在它所关的既有卡上:请求席在自卡写 `Blocked-by:`,并在目标卡留一条评论。
4444
- 该评论点名席位与步骤;无既有卡承载且请求自身即立卡门 ①②④ 时才立新卡。

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,8 @@
3737
- `tooling` 入 `pm:queue` 仅凭三门之一:首行带 `Unblocks: #N`(open 产品卡)或点名所护的已发布面;
3838
- 或实测拖慢车队开发:正确源上假红/假绿、反复重跑、同因丢复核轮;卡须具名实例。
3939
- `pm:queue` 也收恢复不变量的 finding、test-only pin,与实现未被裁错的说明书脱节(修文档)。
40-
- 入 `pm:queue` 前读最新转换评论(dispatch-runbook 状态提取):hold/冻结/裁决即改挂 `pm:retriage`。
40+
- 入 `pm:queue` 前读最新转换评论(dispatch-runbook 状态提取):hold/冻结/裁决 ⇒ 分诊自补半状态。
41+
- 自补 = 同笔 `pm:on-hold`+引原文 `Restart-when:`;写不出可执行判据才挂 `pm:retriage` 问所属车道。
4142
- `needs-user-decision` = 设计卡、feature/契约形状提案、需要 appetite 的多周程序;只挂 issue。
4243
- 先例已定新键/值/导出名非契约形状提案;分诊审计 ⛔ 不自加门,唯语义/形状真分歧呈人。
4344
- 碰迁移形状或删已发布能力也进决策箱;说明书脱节不进:有裁定出处才是 (b),否则改文档。
@@ -97,4 +98,3 @@
9798
- 条件:席位验收评论逐条核实、去重计数(候选/落地/已有/拒收)、一事一行、不计重排。
9899
- 回翻条款:实施中发现契约终究要动 ⇒ dev 停手,卡回决策箱,⛔ 永不静默重裁。
99100
- 请示纪律:方向性授权覆盖整条执行链一并做完,⛔ 不逐项回问。
100-
- 推送维护者只照 `lanes/triage.md` 推送清单;中间状态与限流/重试细节只进座位贴和触发器。

0 commit comments

Comments
 (0)