From fa628d0b3602a4df059add483084b23b826c85f9 Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 20 Sep 2026 14:43:23 +0000 Subject: [PATCH 1/3] fix(pm): repair two carriers still spelling the superseded references-tier boundary MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Two carriers of the governed-tier rule still stated the 2026-09-13 boundary (Tier S / "fact layer" = only .claude/skills/pm-dispatch/references/**) that #19133 (2026-09-18, maintainer "同意改规则。" plus the amendment folding in .claude/settings.json and .claude/hooks/**) superseded: Tier S is now the whole .claude/** tree, per the GOVERNED_SURFACES register (id: claude-tree) and its self-test case skills-agents-and-the-fact-layer-are-Tier-S in scripts/pm/check-governed-merges.mjs, and per SKILL.md:625-626. Within the last hour this stale text caused two agents to misclassify a compliant PR. - .claude/skills/pm-dispatch/references/landing-operations.md:27-28 spelled the old boundary as current ("受管路径全在本技能 references/ 者事实层 … 其余为规则层"), which would tell a dev touching e.g. SKILL.md itself to leave the PR in draft awaiting a maintainer approval it does not need. Re-keyed to Tier S (.claude/** whole tree) / Tier H (everything else), same two-bullet shape, line count and byte ceiling unchanged (69/69). - scripts/pm/check-governed-queue-guard.mjs's "THIRD leg" header (~268-294) reproduced the same narrow 2026-09-13 boundary and concluded "Every other governed path is the rules layer and keeps the predicate above byte-for-byte" -- false since #19133, and self-contradicting the same file's own later "the landing TIER" section, which already records that REFERENCES_TIER_PREFIX "is gone". The quoted 2026-09-13 ruling is kept, untranslated, as the ruling that started this leg; a new paragraph marks it SUPERSEDED by #19133 and points at governedTierFor / the register / `check-governed-merges.mjs --test ` instead of a prefix to remember. No behavior, constant, or self-test assertion changed. Tier verdict on this PR's final file list (check-governed-merges.mjs --test): GOVERNED -- Tier S (landing-operations.md hits the .claude/** register row; check-governed-queue-guard.mjs is not itself a registered surface). The card relation to the pre-existing tracking issue is stated once, in the pull request body, per this repo's own commit-trailer contract. Co-Authored-By: Claude --- .../references/landing-operations.md | 4 +-- scripts/pm/check-governed-queue-guard.mjs | 28 +++++++++++++------ 2 files changed, 22 insertions(+), 10 deletions(-) diff --git a/.claude/skills/pm-dispatch/references/landing-operations.md b/.claude/skills/pm-dispatch/references/landing-operations.md index 71017d48a53..da6627d89d1 100644 --- a/.claude/skills/pm-dispatch/references/landing-operations.md +++ b/.claude/skills/pm-dispatch/references/landing-operations.md @@ -24,8 +24,8 @@ - 契约复核 PASS 落地的 PR 到窗口时已 ready 且 auto-merge 在挂,见 `contract-review.md`。 - 窗口自身权责不变:跟到 MERGED、踢出处置、落地后对账。 - 转 ready/入队前跑 `check-governed-merges.mjs --pr N`:受管面照两层;>5000 行(含生成物)照规则层。 -- 受管路径全在本技能 `references/` 者事实层:席内达档复核过落地前检三条即转正式入队。 -- 其余为规则层:四件套留 draft 等人批,⛔ 不翻正式不入队;获授权批准后认领席落地。 +- Tier S(`.claude/**` 全树)者:席内达档复核过落地前检三条即转正式入队。 +- Tier H(其余受管面)者:四件套留 draft 等人批,⛔ 不翻正式不入队;获授权批准后认领席落地。 - ⛔ 两层不由席位批准;清标即落地同受此闸,漏判会被队列守卫在 merge group 里拒收。 - 再读 `mergeable_state`:`dirty` ⇒ 先 merge `origin/main` 再挂;生成物在面上按 A 的固定序。 - ready + 全绿 ≠ 已入队:队列从不主动拉 PR,入队是显式动作。 diff --git a/scripts/pm/check-governed-queue-guard.mjs b/scripts/pm/check-governed-queue-guard.mjs index c5edabd8119..17876bf5167 100644 --- a/scripts/pm/check-governed-queue-guard.mjs +++ b/scripts/pm/check-governed-queue-guard.mjs @@ -279,19 +279,31 @@ * — answered 「我点头」. The other half of that boundary, the 规则层, is every * remaining governed path and is quoted in full on #17950; ⛔ it is NOT excerpted * here, because a partial rules-layer list read as the whole one is precisely - * the under-claim `check-governed-prose` exists to stop. The register is the - * enumeration; this leg only asks whether a path is under the ONE prefix above. The charter text landed as PR #18018; this leg is what - * makes it ENFORCED rather than declared, which is the whole of #18020. + * the under-claim `check-governed-prose` exists to stop. The charter text landed + * as PR #18018; this leg is what made it ENFORCED rather than declared, which is + * the whole of #18020 — narrowly, for the one prefix quoted above. * - * So a governed diff whose governed paths ALL lie under - * `.claude/skills/pm-dispatch/references/` may land on a REVIEW OF RECORD in - * place of the authorized approval: the `## Contract review` comment — on the + * ⭐ SUPERSEDED 2026-09-18 (#19133, ruled 「同意改规则。」 on the skills seat's + * proposal; the amendment moved `.claude/settings.json` and `.claude/hooks/**` + * over too: 「我觉得这些我也没必要确认」): the quote above is reproduced as the + * ruling that STARTED this leg, not as the population it enforces today. #19133 + * widened that population from the one prefix quoted above to the WHOLE of + * `.claude/**` — Tier S, in the register's own words — leaving Tier H as exactly + * the register's other rows. The register's `tier` field is the enumeration now; + * this leg asks `governedTierFor` for Tier S, never a prefix repeated here — see + * the "landing TIER" section below for the enforced definition, and read it live + * with `node scripts/pm/check-governed-merges.mjs --test ` rather than + * trusting a prefix copied into prose, which is exactly what went stale once. + * + * So a governed diff whose governed paths are ALL Tier S — today, the whole of + * `.claude/**` — may land on a REVIEW OF RECORD in place of the authorized + * approval: the `## Contract review` comment — on the * PULL REQUEST'S THREAD **or on its CARD'S** — that names the pull request's * CURRENT head, carries a `Reviewed-by:` line, and declares a `Served-tier:` * reading that STANDS -- its token being the NAME `CONTRACT_REVIEW_TIER`, * ⛔ never a model identifier, which `AGENTS.md` lets land in no comment and a - * record IS one (#18060). Every other governed path is the rules layer and - * keeps the predicate above byte-for-byte. + * record IS one (#18060). Every governed path outside Tier S is Tier H, the + * rules layer, and keeps the predicate above byte-for-byte. * * ⭐ THE TWO CARRIERS ARE ONE DELIVERY, and the location is the governed text's * to decide rather than this file's — quoted, untranslated, because it IS the From 71216fcff6d2cd314784ce7746ccd91095751ea7 Mon Sep 17 00:00:00 2001 From: Claude Date: Mon, 21 Sep 2026 01:35:48 +0000 Subject: [PATCH 2/3] fix(pm): restore the ALL quantifier and re-key the self-test success line MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Rework of the two one-line defects the at-tier contract review returned FAIL on. Both are text; no behaviour, constant, register row, tier function or self-test expected value moves. - .claude/skills/pm-dispatch/references/landing-operations.md:27 named the SURFACE ("Tier S(.claude/** 全树)者") and dropped the PR-level ALL quantifier that its own predecessor ("受管路径全在 … 者"), this repair's prescribed wording and the sibling contract-review.md:46 all carry. As written, :27 and :28 partitioned governed SURFACES rather than pull requests, so a mixed diff (.claude/** plus AGENTS.md, Tier H by the register's ALL-not-ANY rule) matched both lines with no tiebreak on the page. Restored to "受管路径全在 `.claude/**` 者 Tier S:…" — 93 B → 105 B against the 120 B cap, line count 69/69 unchanged. - scripts/pm/check-governed-queue-guard.mjs:4442-4443, the --self-test SUCCESS line printed on every run, still stated the superseded #18020 references-tier population ("a governed diff whose governed paths all lie under the one ruled prefix") while the battery at :3949-3950 asserts the-old-references-boundary-is-GONE. Landed 2026-09-13 in #18036 and untouched since, so the file's docblock repair left the one instance seats actually read. The population is re-keyed to Tier S — the register's .claude/** row, asked through governedTierFor — with the #18020 naming kept as history, matching the docblock's own form. 296 cases unchanged. Co-Authored-By: Claude --- .claude/skills/pm-dispatch/references/landing-operations.md | 2 +- scripts/pm/check-governed-queue-guard.mjs | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/.claude/skills/pm-dispatch/references/landing-operations.md b/.claude/skills/pm-dispatch/references/landing-operations.md index da6627d89d1..b0bd927ccfe 100644 --- a/.claude/skills/pm-dispatch/references/landing-operations.md +++ b/.claude/skills/pm-dispatch/references/landing-operations.md @@ -24,7 +24,7 @@ - 契约复核 PASS 落地的 PR 到窗口时已 ready 且 auto-merge 在挂,见 `contract-review.md`。 - 窗口自身权责不变:跟到 MERGED、踢出处置、落地后对账。 - 转 ready/入队前跑 `check-governed-merges.mjs --pr N`:受管面照两层;>5000 行(含生成物)照规则层。 -- Tier S(`.claude/**` 全树)者:席内达档复核过落地前检三条即转正式入队。 +- 受管路径全在 `.claude/**` 者 Tier S:席内达档复核过落地前检三条即转正式入队。 - Tier H(其余受管面)者:四件套留 draft 等人批,⛔ 不翻正式不入队;获授权批准后认领席落地。 - ⛔ 两层不由席位批准;清标即落地同受此闸,漏判会被队列守卫在 merge group 里拒收。 - 再读 `mergeable_state`:`dirty` ⇒ 先 merge `origin/main` 再挂;生成物在面上按 A 的固定序。 diff --git a/scripts/pm/check-governed-queue-guard.mjs b/scripts/pm/check-governed-queue-guard.mjs index 17876bf5167..3e9eeff5de0 100644 --- a/scripts/pm/check-governed-queue-guard.mjs +++ b/scripts/pm/check-governed-queue-guard.mjs @@ -4439,8 +4439,9 @@ export async function selfTest() { 'fail-closed on an unreadable label set and on a group naming no pull request, enumerated per commit so a ' + 'bare PR cannot carry a gated sibling through, silent and read-free on the pull_request leg, and replayed ' + 'against the eleven measured enqueues of 2026-09-09 — five refused, six passed, that second number being ' + - 'the boundary a label reader cannot cross — and the #18020 references TIER: a governed diff whose governed ' + - 'paths all lie under the one ruled prefix lands on the skills seat\'s review of record instead of an ' + + 'the boundary a label reader cannot cross — and the #18020 references TIER, re-keyed to Tier S by #19133: a ' + + 'governed diff whose governed paths are ALL Tier S — the register\'s `.claude/**` row, asked through ' + + '`governedTierFor`, never a prefix repeated here — lands on the skills seat\'s review of record instead of an ' + 'authorized approval, with the record recognisers IMPORTED through a lazy load whose precondition (no ' + 'top-level await in this file\'s dispatch) is pinned against this file\'s own source, refused on an older ' + 'head, on a missing or below-tier or partially-stamped `Served-tier:`, on an unsigned record, on no record ' + From a2777e9d8bb4bbc7da15ee9ffd1bad6e25ebf982 Mon Sep 17 00:00:00 2001 From: Claude Date: Mon, 21 Sep 2026 02:47:27 +0000 Subject: [PATCH 3/3] fix(pm): name the owning seat in the queue-guard self-test success line The re-keyed Tier S sentence printed on every --self-test run still named the skills seat as the actor a Tier S landing rests on. That is the pre-re-key actor: the Prime Directive, the surface register, this file's own printed verdicts and the dispatch skill all say the owning seat. One word inside the literal; no constant, register row, tier function or expected value moves, and the case count is unchanged. Claude-Session: https://claude.ai/code/session_01AmH9bKvGoLjiY86Q4Z3og2 Co-Authored-By: Claude --- scripts/pm/check-governed-queue-guard.mjs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/pm/check-governed-queue-guard.mjs b/scripts/pm/check-governed-queue-guard.mjs index 3e9eeff5de0..8d74ad7d06c 100644 --- a/scripts/pm/check-governed-queue-guard.mjs +++ b/scripts/pm/check-governed-queue-guard.mjs @@ -4441,7 +4441,7 @@ export async function selfTest() { 'against the eleven measured enqueues of 2026-09-09 — five refused, six passed, that second number being ' + 'the boundary a label reader cannot cross — and the #18020 references TIER, re-keyed to Tier S by #19133: a ' + 'governed diff whose governed paths are ALL Tier S — the register\'s `.claude/**` row, asked through ' + - '`governedTierFor`, never a prefix repeated here — lands on the skills seat\'s review of record instead of an ' + + '`governedTierFor`, never a prefix repeated here — lands on the owning seat\'s review of record instead of an ' + 'authorized approval, with the record recognisers IMPORTED through a lazy load whose precondition (no ' + 'top-level await in this file\'s dispatch) is pinned against this file\'s own source, refused on an older ' + 'head, on a missing or below-tier or partially-stamped `Served-tier:`, on an unsigned record, on no record ' +