From 2014600f870f35184709877b527f3fbe7262afe9 Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 24 Sep 2026 14:50:54 +0000 Subject: [PATCH 1/2] pm-dispatch: restore needs:contract-review as a marker for a PR awaiting its at-tier review MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The label comes back as a visibility marker only, never a gate: - references/contract-review.md gains a 〈等复核标记〉 section: hang on the PR at ACCEPT when either clause-② limb hits and no same-form PASS is on the current head; clear when that PASS is on file or the PR merges or closes; single carrier = the PR; named readers = the maintainer's PR-list filter and each seat's patrol and handover; no check, workflow, queue guard or patrol script reads it. - references/landing-operations.md: the subagent-down line names the marker in place (line count unchanged, 119 bytes). - scripts/pm/ensure-pm-labels.sh: one main-repo row, colour bfdadc, description under the 100-character cap. Every layer ruling record 5770886272 retired (gate role, --pair, double carrier, independence pair) stays retired. Claude-Session: https://claude.ai/code/session_01A22sUB3mUWs6M36VgfijBq Co-authored-by: Claude --- .../pm-dispatch/references/contract-review.md | 10 +++++++++- .../references/landing-operations.md | 2 +- scripts/pm/ensure-pm-labels.sh | 17 +++++++++++++++++ 3 files changed, 27 insertions(+), 2 deletions(-) diff --git a/.claude/skills/pm-dispatch/references/contract-review.md b/.claude/skills/pm-dispatch/references/contract-review.md index 5a2999b156f..28ad271fda2 100644 --- a/.claude/skills/pm-dispatch/references/contract-review.md +++ b/.claude/skills/pm-dispatch/references/contract-review.md @@ -1,6 +1,6 @@ # 契约复核细则(按面) -见 landing-operations.md 〈入队与落地〉的条款②闸门;本文只放复核归属与资格。 +见 landing-operations.md 〈入队与落地〉的条款②闸门;本文只放复核归属、资格与等复核标记。 ## 复核归属与资格(按面) @@ -26,3 +26,11 @@ - 例外:纯重生成 head 后移原记录继续管;判据机读已提交树;PR 落 `Regen-provenance:` 行。 - ② PR check 全绿,⛔ 非 required 子集;例外:merge-base 同签名的红不计、按设计而红见 SKILL.md。 - 签名 = 失败步 + 首错行,读 base check runs 的 API ⛔ 不凭口述;主干红止血立单不变。 + +## 等复核标记 `needs:contract-review` + +- 只作等复核标记,⛔ 不是闸门;单载体 = PR,卡上副本在规则外、不是要求。 +- 挂:ACCEPT 时条款②任一肢命中而现 head 无同形 PASS 在案 ⇒ 派发席同笔挂于 PR。 +- 摘:现 head 同形 PASS 在案 ⇒ 写记录的席同笔摘;PR 合并或关闭 ⇒ 派发席摘。 +- 读者 = 维护者过滤 `is:pr is:open label:needs:contract-review` 与席位巡查、交接。 +- ⛔ 无 check、workflow、队列守卫或巡查脚本读它;入队只认同形记录,标记有无不改判。 diff --git a/.claude/skills/pm-dispatch/references/landing-operations.md b/.claude/skills/pm-dispatch/references/landing-operations.md index 2a686cb1512..c7dca9335cf 100644 --- a/.claude/skills/pm-dispatch/references/landing-operations.md +++ b/.claude/skills/pm-dispatch/references/landing-operations.md @@ -10,7 +10,7 @@ - 路径肢 = diff 触及契约面 `packages/spec/src/**` 非测试,含 error-code-ledger、`*.zod.ts` 契约 schema。 - 声明肢 = 认领评论声明 `Clause-②: yes`,与路径无关;错误的 `no` 是可审计的假申报。 - 交付后复核按面欠 ⛔ 不按车道(五面见 `references/contract-review.md`);双肢命中即 spec 车道。 -- 子代理起不来 ⇒ 复核缺席,PR 留 draft 队列外等档;唯一旁路是维护者亲审,逐次为准。 +- 子代理起不来 ⇒ 复核缺席,PR 带 `needs:contract-review` 留 draft 队列外;旁路仅维护者逐次亲审 - PASS ⇒ ready、auto-merge;FAIL ⇒ 补丁轮;⛔ 免复核不放行。 - DELIBERATE CORRECTION 红(`check-empty-changeset`):同 head 达档复核 PASS 记录即确认,⛔ 不等维护者。 - 记录须点名被改 note、逐句判改写句,缺一不算;算即按 SKILL.md 三条件带红入队,门禁不改。 diff --git a/scripts/pm/ensure-pm-labels.sh b/scripts/pm/ensure-pm-labels.sh index 27aadbef279..557b8e46600 100644 --- a/scripts/pm/ensure-pm-labels.sh +++ b/scripts/pm/ensure-pm-labels.sh @@ -325,6 +325,23 @@ done # would assert a kinship the paragraph above spends its length denying. gh label create needs:pack-smoke -R objectstack-ai/objectstack -c 006b75 -d "Opt-in pre-merge pack smoke: self-declared breaking auth/audience change (see CONTRIBUTING.md)" 2>/dev/null || true +# needs:contract-review — a MARKER, never a gate; rules in +# .claude/skills/pm-dispatch/references/contract-review.md 〈等复核标记〉. The +# dispatching seat hangs it on the PR at ACCEPT when either clause-② limb hits +# and no same-form PASS is on the current head; the seat posting that PASS, or +# the dispatching seat at merge/close, clears it. Named readers: the +# maintainer's PR-list filter `is:pr is:open label:needs:contract-review` and +# each seat's patrol and handover. ⛔ No check, workflow, queue guard or patrol +# script reads it — the queue releases on the `## Contract review` record alone. +# Restored by the maintainer's instruction recorded on #19973, verbatim: +# 「恢复 needs:contract-review,把这句原话写进一张 skills 车道的卡」 — answering a +# question that proposed a marker, not a gate. The gate role, `--pair`, the +# double carrier and the independence pair that ruling record 5770886272 +# retired stay retired. Main repo only: the clause-② contract surface lives +# here. Colour bfdadc sits outside the state and red (blocked / decision) +# families. +gh label create needs:contract-review -R objectstack-ai/objectstack -c bfdadc -d "Marker only — PR awaits its at-tier Contract review PASS; no check reads it, the record decides" 2>/dev/null || true + # Routing labels exist only on the main backlog repo, and mark SEAM cards only # (file-at-destination ruling: pure sibling-repo fixes live in the target repo). # From 84f4580e8a674f868d70a95c045f11ac4f4d34d6 Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 24 Sep 2026 15:02:22 +0000 Subject: [PATCH 2/2] pm-dispatch: a FAIL verdict leaves the review marker on The marker tracks "landing still owes an at-tier PASS on the current head"; a FAIL starts a patch round and the PR still owes that PASS, so only a PASS on file, a merge or a close clears it. Stated in the rule and in the roster comment so a seat does not clear on FAIL and re-hang at the next ACCEPT. Claude-Session: https://claude.ai/code/session_01A22sUB3mUWs6M36VgfijBq Co-authored-by: Claude --- .claude/skills/pm-dispatch/references/contract-review.md | 2 +- scripts/pm/ensure-pm-labels.sh | 9 +++++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/.claude/skills/pm-dispatch/references/contract-review.md b/.claude/skills/pm-dispatch/references/contract-review.md index 28ad271fda2..264290ebf50 100644 --- a/.claude/skills/pm-dispatch/references/contract-review.md +++ b/.claude/skills/pm-dispatch/references/contract-review.md @@ -31,6 +31,6 @@ - 只作等复核标记,⛔ 不是闸门;单载体 = PR,卡上副本在规则外、不是要求。 - 挂:ACCEPT 时条款②任一肢命中而现 head 无同形 PASS 在案 ⇒ 派发席同笔挂于 PR。 -- 摘:现 head 同形 PASS 在案 ⇒ 写记录的席同笔摘;PR 合并或关闭 ⇒ 派发席摘。 +- 摘:现 head 同形 PASS 在案 ⇒ 写记录的席同笔摘;PR 合并或关闭 ⇒ 派发席摘;FAIL 不摘。 - 读者 = 维护者过滤 `is:pr is:open label:needs:contract-review` 与席位巡查、交接。 - ⛔ 无 check、workflow、队列守卫或巡查脚本读它;入队只认同形记录,标记有无不改判。 diff --git a/scripts/pm/ensure-pm-labels.sh b/scripts/pm/ensure-pm-labels.sh index 557b8e46600..1bc07e3fd53 100644 --- a/scripts/pm/ensure-pm-labels.sh +++ b/scripts/pm/ensure-pm-labels.sh @@ -329,10 +329,11 @@ gh label create needs:pack-smoke -R objectstack-ai/objectstack -c 006b75 -d "Opt # .claude/skills/pm-dispatch/references/contract-review.md 〈等复核标记〉. The # dispatching seat hangs it on the PR at ACCEPT when either clause-② limb hits # and no same-form PASS is on the current head; the seat posting that PASS, or -# the dispatching seat at merge/close, clears it. Named readers: the -# maintainer's PR-list filter `is:pr is:open label:needs:contract-review` and -# each seat's patrol and handover. ⛔ No check, workflow, queue guard or patrol -# script reads it — the queue releases on the `## Contract review` record alone. +# the dispatching seat at merge/close, clears it (a FAIL leaves it on). Named +# readers: the maintainer's PR-list filter +# `is:pr is:open label:needs:contract-review` and each seat's patrol and +# handover. ⛔ No check, workflow, queue guard or patrol script reads it — the +# queue releases on the `## Contract review` record alone. # Restored by the maintainer's instruction recorded on #19973, verbatim: # 「恢复 needs:contract-review,把这句原话写进一张 skills 车道的卡」 — answering a # question that proposed a marker, not a gate. The gate role, `--pair`, the