diff --git a/.claude/skills/pm-dispatch/references/contract-review.md b/.claude/skills/pm-dispatch/references/contract-review.md index 5a2999b156..264290ebf5 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 合并或关闭 ⇒ 派发席摘;FAIL 不摘。 +- 读者 = 维护者过滤 `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 2a686cb151..c7dca9335c 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 27aadbef27..1bc07e3fd5 100644 --- a/scripts/pm/ensure-pm-labels.sh +++ b/scripts/pm/ensure-pm-labels.sh @@ -325,6 +325,24 @@ 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 (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 +# 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). #