From 9958e02d747bffbc7e8f825214518911940bd14f Mon Sep 17 00:00:00 2001 From: Claude Date: Tue, 27 Oct 2026 14:19:23 +0000 Subject: [PATCH 1/4] docs(pm-dispatch): a card that touches cloud goes whole to the cloud PM Triage routes any card that needs cloud code, a cloud producer, a cloud fact or carries a cloud half to the repo:cloud seat as one card (domain:cloud + repo:cloud, a live state, never status:parked), instead of splitting it by repository and leaving the objectstack half waiting in a lane that cannot read cloud. Execution seats skip such cards at candidate time, and a card found to touch cloud mid-flight is released with pm:retriage so triage re-routes it. Every edited file stays at its line ceiling. Claude-Session: https://claude.ai/code/session_01QsR2jTTwA6zymWJpVN94wd Co-authored-by: Claude --- .claude/skills/pm-dispatch/SKILL.md | 2 +- .../references/cross-repo-coordination.md | 10 ++++----- .../references/execution-duties.md | 4 ++-- .../pm-dispatch/references/triage-duties.md | 2 +- scripts/pm/ensure-pm-labels.sh | 21 +++++++++++-------- 5 files changed, 21 insertions(+), 18 deletions(-) diff --git a/.claude/skills/pm-dispatch/SKILL.md b/.claude/skills/pm-dispatch/SKILL.md index b1c3b34b8c6..f66aa3f9af4 100644 --- a/.claude/skills/pm-dispatch/SKILL.md +++ b/.claude/skills/pm-dispatch/SKILL.md @@ -162,7 +162,7 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报 | `domain:skills` | governed 面全量(含本文件;统一定义见「governed 面统一定义」行);非门禁的 `scripts/pm/**`(PM 循环工具);governed 面的治理执行文件:`.github/CODEOWNERS` + SUBJECT 是 governed 面本身的门禁/审计(现为 `scripts/pm/check-governed-merges.mjs`) | | `domain:spec` | `packages/spec` 整包:schema 形状、`contracts/**`、退役行为半边、strictness 台账;describe/JSDoc/墓碑散文/错误 guidance 与 alias 表;`packages/spec/scripts/**`、`packages/spec/docs/**` 及按锚定规则的例外归本域的工具链(域边界枚举与席内分派见 `references/lanes/spec.md`) | | `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` | -| `domain:cloud` | 云服务旅程,停放(加 `status:parked`,sweep 免扫)待 cloud PM 迁移,本仓不派 | +| `domain:cloud` | 涉 cloud 即整卡归 cloud PM(`repo:cloud` 席,同挂 `repo:cloud`):读或改 cloud 代码、生产方、事实或带 cloud 半边;本仓车道 ⛔ 不认领;判据见 `references/cross-repo-coordination.md` | | (无固定归属,按落点分诊) | `packages/apps/*`、`examples/*`(归它演练的子系统)、`docs/audits/**` | - 表未覆盖的包首次分诊时归类并走 PR 更新本表;新增或退役 `domain:*` 必须同批改本表。 diff --git a/.claude/skills/pm-dispatch/references/cross-repo-coordination.md b/.claude/skills/pm-dispatch/references/cross-repo-coordination.md index 74e09c7b7c0..a7476e5df47 100644 --- a/.claude/skills/pm-dispatch/references/cross-repo-coordination.md +++ b/.claude/skills/pm-dispatch/references/cross-repo-coordination.md @@ -13,7 +13,7 @@ - 车道可分席(席号 `· seat N`,或域×仓):忙时一车道开多席,闲时收归一席;每席独立座位贴。 - 认领评论带 `Seat: domain:X#N` 行申报席号(缺省席 1);同席认领互斥,他席认领不触发自退。 - 拆分触发预登记:单轮逼近 fire 周期,或某仓在全序下持续断粮 ⇒ 按仓拆回多席。 -- seam 卡单一归属:归修复落地仓的席,双仓皆动 objectstack 侧主导。 +- seam 卡单一归属:归修复落地仓的席,双仓皆动 objectstack 侧主导;涉 cloud 者归 cloud PM(下文)。 - `scripts/pm/**` 等住 objectstack 的全板工具链单写手恒为 objectstack 侧席,他侧上游立卡回链。 - 工装只答被告知的仓,缺 `--repo`/`PM_SWEEP_REPO` 即答 objectstack;⛔ 不答手上那张卡的仓。 - 规则 1:issue 住在修复落地的仓,分诊时按判据严格执行。 @@ -41,7 +41,7 @@ - 转移落对方队列:目标仓立单带 `pm:queue`、出处行与一行可执行判据,依赖用 `Blocked-by:`。 - 跨座位请求骑在它所关的既有卡上:请求席在自卡写 `Blocked-by:`,并在目标卡留一条评论。 - 该评论点名席位与步骤;无既有卡承载且请求自身即立卡门 ①②④ 时才立新卡。 -- 跨不可达仓的卡立卡或首触按仓拆:该仓部分由可达席立卡,或挂 `domain:cloud`+`status:parked`。 -- 本卡只留本仓活,不读他仓;拆不开先立该仓前置卡;依赖即 `pm:blocked`+`Blocked-by: owner/repo#N`。 -- 开发中涉 cloud 车道者由席位同拆:报告 `open_questions`/`out_of_scope_findings`、复核/落地所见。 -- ⛔ 不记而弃、不并入本仓 PR、不留 `carrier: none`;停放卡加 `repo:cloud`,出处行与一行判据。 +- 涉 cloud 即整卡归 cloud PM(`repo:cloud` 席):要读或改 cloud 代码、cloud 生产方、cloud 事实,或带 cloud 半边。 +- 本仓卡挂 `domain:cloud`+`repo:cloud`+活态,摘车道 `domain:*`,⛔ 不挂 `status:parked`;他仓卡能转即转 cloud 仓,否则在本仓立 `repo:cloud` 承接卡写全所求、源卡 `Blocked-by:` 它。 +- ⛔ 不拆半边、不留本仓车道等 cloud 读数;在飞卡见涉 cloud 即 `Release:`+`pm:retriage` 交分诊转 cloud 车道,报告与已测读点留卡。 +- cloud PM 跟到关卡,余下纯本仓活由它立新卡写明 cloud 事实;其他不可达仓照旧按仓拆:可达席立该仓前置卡,本卡 `pm:blocked`+`Blocked-by:`。 diff --git a/.claude/skills/pm-dispatch/references/execution-duties.md b/.claude/skills/pm-dispatch/references/execution-duties.md index e70294af154..ac01233a70b 100644 --- a/.claude/skills/pm-dispatch/references/execution-duties.md +++ b/.claude/skills/pm-dispatch/references/execution-duties.md @@ -5,7 +5,7 @@ ## 候选与批次 - 整车道一次读全,本地求交:`list_issues` 带 `labels: [domain:X]` + 最小字段拿回全车道 open 集。 -- 候选 = open、未 assign、无 `needs-user-decision`、无 `pm:retriage`;⛔ 排除三门皆无的 `tooling` 卡。 +- 候选 = open、未 assign、无 `needs-user-decision`、无 `pm:retriage`、不涉 cloud;⛔ 排除三门皆无的 `tooling` 卡。 - 席改标:卡余项实测路径整落本席包树 ⇒ 本席改 `domain:*`,审计评论列路径与新旧标同笔。 - 席改标限未派发卡;带 `needs-user-decision`、open `Blocked-by:` 或 `security` 的 ⛔ 不改,仍问分诊。 - 无分诊审计评论即非候选;例外:sub-issue 承父卡首触,main-red 锚卡见 `landing-operations.md`。 @@ -175,7 +175,7 @@ - 你是记录在案的复核人:对 GitHub 核验,⛔ 不对报告的自述核验。 - 逐项判据展开在 `references/review-checklist.md`,每份报告对着它过。 -- 报告 `open_questions`/`out_of_scope_findings` 涉 cloud 车道者,按 `cross-repo-coordination.md` 立 cloud 卡。 +- 报告或复核所见涉 cloud ⇒ 整卡 `Release:` 加 `pm:retriage` 请分诊转 cloud 车道,已测读点留卡;⛔ 不拆半边、不停放等读数。 - 改到已有 `.changeset/*.md` 的 PR ⛔ 不打 `skip-changeset`;确认取同 head 达档 PASS 或维护者原话。 - 报告在草稿 PR 时点到达,CI 收敛读数只属于复核侧:gate `in_progress` 是诚实读数。 - 绿色输出≠ 该绿证明了被测风险:拒收断言、全绿方向与时序、pin 翻转、边界后收益。 diff --git a/.claude/skills/pm-dispatch/references/triage-duties.md b/.claude/skills/pm-dispatch/references/triage-duties.md index 94df158fb81..ea942a7edaa 100644 --- a/.claude/skills/pm-dispatch/references/triage-duties.md +++ b/.claude/skills/pm-dispatch/references/triage-duties.md @@ -52,7 +52,7 @@ - 「无则关」= 首触即关 not_planned,带理由与入队三门,⛔ 不定 p3、不 hold;下行同此。 - 所入车道队列 P0/P1 开着(= 未派发,在飞不算)时,三门皆无的 p2/p3 `tooling` 卡同样关。 - 只报告仪器(放宽 tell、半状态巡查)的修复卡首触即关 not_planned,引裁决 208;在途只有删除。 -- 路由是分诊的技术判断,⛔ 永不升级哪个仓的问题;父单是协调节点,永不派发。 +- 路由是分诊的技术判断,⛔ 永不升级哪个仓的问题;涉 cloud 恒整卡路由 cloud 车道(判据见 `cross-repo-coordination.md`);父单永不派发。 - 父单已有子结构的:父单队列标签即可,分诊逐个展开路由、补 `Blocked-by:` 排序。 - 跨层功能点(≥2 层)立父单带 `area:*`+`pm:epic`+清单项级,逐层子单按 `Blocked-by:` 排。 - 每张留一条英文审计评论(`Triage: lands in …; rationale: …`),可选带 `Size/model suggestion:` 行。 diff --git a/scripts/pm/ensure-pm-labels.sh b/scripts/pm/ensure-pm-labels.sh index f8bb15f9739..8e51ee1fb55 100644 --- a/scripts/pm/ensure-pm-labels.sh +++ b/scripts/pm/ensure-pm-labels.sh @@ -471,15 +471,18 @@ gh label create domain:engine -R objectstack-ai/objectstack -c bfd4f2 -d "Reti gh label create domain:services -R objectstack-ai/objectstack -c bfd4f2 -d "Retired 2026-10-22, alias of domain:server (services surface); in-flight cards keep it until landed" 2>/dev/null || true gh label create domain:cli -R objectstack-ai/objectstack -c bfd4f2 -d "Retired 2026-10-22, alias of domain:server (cli surface); in-flight cards keep it until they land" 2>/dev/null || true -# domain:cloud is a PARKING label, not a lane: no seat, never dispatched in this -# repo. Cloud-service journeys found in objectstack / objectui keep it until the -# cloud PM migrates them — maintainer ruling 2026-09-18, verbatim: 「云服务旅程 -# 混在 objectstack / objectui 里的 ⇒保留 domain:cloud 标签 等 cloud 项目经理迁移」. -# The object already exists in objectstack (auto-created, so `--reconcile` is -# what aligns it) and is absent in objectui; the roster makes both. SKILL.md's -# domain table carries the matching row (北极星「现在不做」). -gh label create domain:cloud -R objectstack-ai/objectstack -c bfd4f2 -d "Cloud-service journey parked for the cloud PM to migrate — not dispatched in this repo (云服务旅程,本仓不派)" 2>/dev/null || true -gh label create domain:cloud -R objectstack-ai/objectui -c bfd4f2 -d "Cloud-service journey parked for the cloud PM to migrate — not dispatched from objectui (云服务旅程,本仓不派)" 2>/dev/null || true +# domain:cloud routes a WHOLE card to the cloud PM (the `repo:cloud` seat): any +# card that needs cloud code, a cloud producer, a cloud fact or carries a cloud +# half. No objectstack lane claims it; it rides with `repo:cloud`, the label the +# cloud seat's scope reads. Maintainer ruling 2026-10-27, verbatim: 「一个issue只要 +# 涉及 cloud ,就归 cloud pm 处理」, superseding the 2026-09-18 parking ruling +# (「云服务旅程混在 objectstack / objectui 里的 ⇒保留 domain:cloud 标签 等 cloud 项目经理 +# 迁移」): parked journeys are the cloud PM's too. The object already exists in +# objectstack (auto-created, so `--reconcile` is what aligns it) and is absent in +# objectui; the roster makes both. SKILL.md's domain table carries the matching +# row, and references/cross-repo-coordination.md the routing rule. +gh label create domain:cloud -R objectstack-ai/objectstack -c bfd4f2 -d "Touches cloud: the whole card is the cloud PM's (repo:cloud seat); no objectstack lane claims it" 2>/dev/null || true +gh label create domain:cloud -R objectstack-ai/objectui -c bfd4f2 -d "Touches cloud: the whole card is the cloud PM's (repo:cloud seat); objectui lanes never claim it" 2>/dev/null || true # status:parked is the other half of parking: the backlog sweep's disjunct ③ # (有 domain:* 无 pm-state) and check-half-states.mjs's H13 read it as the # exemption (H13_EXEMPT_LABELS; SKILL.md 排除 `status:parked`), so a card that From 4199852fddc38d11a0437e1d09bab33eda434e46 Mon Sep 17 00:00:00 2001 From: Claude Date: Tue, 27 Oct 2026 14:29:21 +0000 Subject: [PATCH 2/4] docs(pm-dispatch): keep the cloud routing lines inside the 120-byte line budget The ratchet also prices line width: every prose line in a ceilinged file stays within 120 bytes. Compress the seven lines that ran over, without adding a line. "The cloud PM follows the card to closure" moves into the SKILL.md domain:cloud table row, where tables are exempt and the row stays under its 341-byte pin. The candidate-time exclusion is dropped as redundant: a routed card no longer carries a lane domain label, so the lane's candidate query does not return it. Claude-Session: https://claude.ai/code/session_01QsR2jTTwA6zymWJpVN94wd Co-authored-by: Claude --- .claude/skills/pm-dispatch/SKILL.md | 2 +- .../pm-dispatch/references/cross-repo-coordination.md | 8 ++++---- .claude/skills/pm-dispatch/references/execution-duties.md | 4 ++-- .claude/skills/pm-dispatch/references/triage-duties.md | 2 +- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/.claude/skills/pm-dispatch/SKILL.md b/.claude/skills/pm-dispatch/SKILL.md index f66aa3f9af4..9bc92296f67 100644 --- a/.claude/skills/pm-dispatch/SKILL.md +++ b/.claude/skills/pm-dispatch/SKILL.md @@ -162,7 +162,7 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报 | `domain:skills` | governed 面全量(含本文件;统一定义见「governed 面统一定义」行);非门禁的 `scripts/pm/**`(PM 循环工具);governed 面的治理执行文件:`.github/CODEOWNERS` + SUBJECT 是 governed 面本身的门禁/审计(现为 `scripts/pm/check-governed-merges.mjs`) | | `domain:spec` | `packages/spec` 整包:schema 形状、`contracts/**`、退役行为半边、strictness 台账;describe/JSDoc/墓碑散文/错误 guidance 与 alias 表;`packages/spec/scripts/**`、`packages/spec/docs/**` 及按锚定规则的例外归本域的工具链(域边界枚举与席内分派见 `references/lanes/spec.md`) | | `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` | -| `domain:cloud` | 涉 cloud 即整卡归 cloud PM(`repo:cloud` 席,同挂 `repo:cloud`):读或改 cloud 代码、生产方、事实或带 cloud 半边;本仓车道 ⛔ 不认领;判据见 `references/cross-repo-coordination.md` | +| `domain:cloud` | 涉 cloud 即整卡归 cloud PM(`repo:cloud` 席,同挂 `repo:cloud`):读或改 cloud 代码、生产方、事实或带 cloud 半边;本仓车道 ⛔ 不认领;cloud PM 跟到关卡,余下纯本仓活由它写明 cloud 事实后另立卡;判据见 `references/cross-repo-coordination.md` | | (无固定归属,按落点分诊) | `packages/apps/*`、`examples/*`(归它演练的子系统)、`docs/audits/**` | - 表未覆盖的包首次分诊时归类并走 PR 更新本表;新增或退役 `domain:*` 必须同批改本表。 diff --git a/.claude/skills/pm-dispatch/references/cross-repo-coordination.md b/.claude/skills/pm-dispatch/references/cross-repo-coordination.md index a7476e5df47..78a5fc4a130 100644 --- a/.claude/skills/pm-dispatch/references/cross-repo-coordination.md +++ b/.claude/skills/pm-dispatch/references/cross-repo-coordination.md @@ -41,7 +41,7 @@ - 转移落对方队列:目标仓立单带 `pm:queue`、出处行与一行可执行判据,依赖用 `Blocked-by:`。 - 跨座位请求骑在它所关的既有卡上:请求席在自卡写 `Blocked-by:`,并在目标卡留一条评论。 - 该评论点名席位与步骤;无既有卡承载且请求自身即立卡门 ①②④ 时才立新卡。 -- 涉 cloud 即整卡归 cloud PM(`repo:cloud` 席):要读或改 cloud 代码、cloud 生产方、cloud 事实,或带 cloud 半边。 -- 本仓卡挂 `domain:cloud`+`repo:cloud`+活态,摘车道 `domain:*`,⛔ 不挂 `status:parked`;他仓卡能转即转 cloud 仓,否则在本仓立 `repo:cloud` 承接卡写全所求、源卡 `Blocked-by:` 它。 -- ⛔ 不拆半边、不留本仓车道等 cloud 读数;在飞卡见涉 cloud 即 `Release:`+`pm:retriage` 交分诊转 cloud 车道,报告与已测读点留卡。 -- cloud PM 跟到关卡,余下纯本仓活由它立新卡写明 cloud 事实;其他不可达仓照旧按仓拆:可达席立该仓前置卡,本卡 `pm:blocked`+`Blocked-by:`。 +- 涉 cloud 即整卡归 cloud PM(`repo:cloud` 席):要读改 cloud 代码、生产方、事实或带 cloud 半边。 +- 本仓卡挂 `domain:cloud`+`repo:cloud`+活态,摘车道 `domain:*`,⛔ 不挂 `status:parked`。 +- 他仓卡能转即转 cloud 仓,否则本仓立 `repo:cloud` 承接卡写全所求;⛔ 不拆半边等读数。 +- 在飞卡见涉 cloud 即 `Release:`+`pm:retriage` 交分诊转 cloud 车道,已测读点留卡。 diff --git a/.claude/skills/pm-dispatch/references/execution-duties.md b/.claude/skills/pm-dispatch/references/execution-duties.md index ac01233a70b..5f9a001c3cf 100644 --- a/.claude/skills/pm-dispatch/references/execution-duties.md +++ b/.claude/skills/pm-dispatch/references/execution-duties.md @@ -5,7 +5,7 @@ ## 候选与批次 - 整车道一次读全,本地求交:`list_issues` 带 `labels: [domain:X]` + 最小字段拿回全车道 open 集。 -- 候选 = open、未 assign、无 `needs-user-decision`、无 `pm:retriage`、不涉 cloud;⛔ 排除三门皆无的 `tooling` 卡。 +- 候选 = open、未 assign、无 `needs-user-decision`、无 `pm:retriage`;⛔ 排除三门皆无的 `tooling` 卡。 - 席改标:卡余项实测路径整落本席包树 ⇒ 本席改 `domain:*`,审计评论列路径与新旧标同笔。 - 席改标限未派发卡;带 `needs-user-decision`、open `Blocked-by:` 或 `security` 的 ⛔ 不改,仍问分诊。 - 无分诊审计评论即非候选;例外:sub-issue 承父卡首触,main-red 锚卡见 `landing-operations.md`。 @@ -175,7 +175,7 @@ - 你是记录在案的复核人:对 GitHub 核验,⛔ 不对报告的自述核验。 - 逐项判据展开在 `references/review-checklist.md`,每份报告对着它过。 -- 报告或复核所见涉 cloud ⇒ 整卡 `Release:` 加 `pm:retriage` 请分诊转 cloud 车道,已测读点留卡;⛔ 不拆半边、不停放等读数。 +- 报告或复核见涉 cloud ⇒ 整卡 `Release:`+`pm:retriage` 转 cloud 车道,读点留卡;⛔ 不拆半边。 - 改到已有 `.changeset/*.md` 的 PR ⛔ 不打 `skip-changeset`;确认取同 head 达档 PASS 或维护者原话。 - 报告在草稿 PR 时点到达,CI 收敛读数只属于复核侧:gate `in_progress` 是诚实读数。 - 绿色输出≠ 该绿证明了被测风险:拒收断言、全绿方向与时序、pin 翻转、边界后收益。 diff --git a/.claude/skills/pm-dispatch/references/triage-duties.md b/.claude/skills/pm-dispatch/references/triage-duties.md index ea942a7edaa..c560ca61355 100644 --- a/.claude/skills/pm-dispatch/references/triage-duties.md +++ b/.claude/skills/pm-dispatch/references/triage-duties.md @@ -52,7 +52,7 @@ - 「无则关」= 首触即关 not_planned,带理由与入队三门,⛔ 不定 p3、不 hold;下行同此。 - 所入车道队列 P0/P1 开着(= 未派发,在飞不算)时,三门皆无的 p2/p3 `tooling` 卡同样关。 - 只报告仪器(放宽 tell、半状态巡查)的修复卡首触即关 not_planned,引裁决 208;在途只有删除。 -- 路由是分诊的技术判断,⛔ 永不升级哪个仓的问题;涉 cloud 恒整卡路由 cloud 车道(判据见 `cross-repo-coordination.md`);父单永不派发。 +- 路由是分诊的技术判断,⛔ 不升级哪个仓的问题;涉 cloud 整卡归 cloud 车道;父单永不派发。 - 父单已有子结构的:父单队列标签即可,分诊逐个展开路由、补 `Blocked-by:` 排序。 - 跨层功能点(≥2 层)立父单带 `area:*`+`pm:epic`+清单项级,逐层子单按 `Blocked-by:` 排。 - 每张留一条英文审计评论(`Triage: lands in …; rationale: …`),可选带 `Size/model suggestion:` 行。 From 633c68a1b2b1309e5805ab0e74fc9ace6529544e Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 28 Oct 2026 03:44:35 +0000 Subject: [PATCH 3/4] docs(pm-dispatch): keep main's three cloud-involvement items as a triage 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 --- .claude/skills/pm-dispatch/references/triage-duties.md | 1 + 1 file changed, 1 insertion(+) diff --git a/.claude/skills/pm-dispatch/references/triage-duties.md b/.claude/skills/pm-dispatch/references/triage-duties.md index d1d0a98c72a..7350765a325 100644 --- a/.claude/skills/pm-dispatch/references/triage-duties.md +++ b/.claude/skills/pm-dispatch/references/triage-duties.md @@ -55,6 +55,7 @@ - 「无则关」= 首触即关 not_planned,带理由与入队三门,⛔ 不定 p3、不 hold;下行同此。 - 所入车道队列 P0/P1 开着(= 未派发,在飞不算)时,三门皆无的 p2/p3 `tooling` 卡同样关。 - 路由是分诊的技术判断,⛔ 不升级哪个仓的问题;涉 cloud 整卡归 cloud 车道;父单永不派发。 +- 算涉 cloud:亦含托管面(objectos-runtime)、`Blocked-by:` cloud 卡、病因在 cloud。 - 不算涉 cloud:只在 cloud 测得而修复与验收全在本仓;仅引 cloud 卡作历史。 - 父单已有子结构的:父单队列标签即可,分诊逐个展开路由、补 `Blocked-by:` 排序。 - 跨层功能点(≥2 层)立父单带 `area:*`+`pm:epic`+清单项级,逐层子单按 `Blocked-by:` 排。 From 15bbf4fea199647c0f031f67f977559bcfedc55c Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 28 Oct 2026 04:01:13 +0000 Subject: [PATCH 4/4] docs(pm-dispatch): align the repo:cloud label text with the whole-card route; pin triage-duties at 102 The repo:cloud description still called it a seam card with pure cloud fixes living in cloud, which the whole-card route replaced. The triage-duties.md ceiling falls to its landed count after the merge with main. Claude-Session: https://claude.ai/code/session_01ADHkmPywJ6aAj1KTC5Pvo6 Co-authored-by: Claude --- scripts/pm/check-skill-line-ratchet.mjs | 4 +++- scripts/pm/ensure-pm-labels.sh | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/scripts/pm/check-skill-line-ratchet.mjs b/scripts/pm/check-skill-line-ratchet.mjs index e03377ffc08..61e79c6ec96 100644 --- a/scripts/pm/check-skill-line-ratchet.mjs +++ b/scripts/pm/check-skill-line-ratchet.mjs @@ -1307,7 +1307,9 @@ export const CEILINGS = new Map([ // 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], + // Lowered 103 → 102 when the whole-card cloud route (PR #26749) merged with + // main's cloud-involvement lines; landed count, headroom 0, same convention. + ['.claude/skills/pm-dispatch/references/triage-duties.md', 102], // 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 diff --git a/scripts/pm/ensure-pm-labels.sh b/scripts/pm/ensure-pm-labels.sh index 8e51ee1fb55..f515e2694b0 100644 --- a/scripts/pm/ensure-pm-labels.sh +++ b/scripts/pm/ensure-pm-labels.sh @@ -384,7 +384,7 @@ gh label create needs:contract-review -R objectstack-ai/objectstack -c bfdadc -d # repo:cloud to match while you are here: under --reconcile that rewrites a LIVE # label object's colour, which is a deliberate PM action and not this row's. gh label create repo:objectui -R objectstack-ai/objectstack -c fbca04 -d "Seam card: cross-repo ordering with objectui is the substance (pure objectui fixes live in objectui)" 2>/dev/null || true -gh label create repo:cloud -R objectstack-ai/objectstack -c c5def5 -d "Seam card: cross-repo ordering with cloud is the substance (pure cloud fixes live in cloud)" 2>/dev/null || true +gh label create repo:cloud -R objectstack-ai/objectstack -c c5def5 -d "Card routed whole to the cloud PM: needs cloud code, a producer or a fact (cloud owns it to closure)" 2>/dev/null || true gh label create repo:hotcrm -R objectstack-ai/objectstack -c fbca04 -d "Seam card: cross-repo ordering with hotcrm is the substance (pure hotcrm fixes live in hotcrm)" 2>/dev/null || true # ⛔ There is no fourth `repo:*` row, and that absence is now DECLARED rather