Skip to content

fix(pm): repair two carriers still spelling the superseded references-tier boundary - #19379

Merged
hotlong merged 3 commits into
mainfrom
claude/pm-superseded-references-tier
Sep 22, 2026
Merged

hotlong merged 3 commits into
mainfrom
claude/pm-superseded-references-tier

Conversation

@os-steve

@os-steve os-steve commented Sep 20, 2026

Copy link
Copy Markdown
Collaborator

Part of #19146

Clause-②: no

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) superseded. #19133's ruling, verbatim and untranslated: maintainer 「同意改规则。」 on the skills seat's proposal, plus the amendment that folded .claude/settings.json and .claude/hooks/** in too: 「我觉得这些我也没必要确认」. Tier S is now the whole .claude/** tree.

Current, correct source of truth (unchanged by this PR):

  • scripts/pm/check-governed-merges.mjs register row { id: 'claude-tree', prefix: '.claude/', glob: '.claude/**', tier: GOVERNED_TIER_S, … }, pinned by self-test case skills-agents-and-the-fact-layer-are-Tier-S.
  • .claude/skills/pm-dispatch/SKILL.md:625-626: 「受管面两层:Tier H(规则层)= AGENTS.md+CLAUDE.md+docs/adr/**+docs/NORTH-STAR.md+发布 skills/**。」「Tier S = .claude/** 全树;Tier H 四件套等人批;Tier S 经席内达档复核 PASS 在案后 ready → 入队。」

What was stale

.claude/skills/pm-dispatch/references/landing-operations.md:27-28

Before:

- 受管路径全在本技能 `references/` 者事实层:席内达档复核过落地前检三条即转正式入队。
- 其余为规则层:四件套留 draft 等人批,⛔ 不翻正式不入队;获授权批准后认领席落地。

After:

- Tier S(`.claude/**` 全树)者:席内达档复核过落地前检三条即转正式入队。
- Tier H(其余受管面)者:四件套留 draft 等人批,⛔ 不翻正式不入队;获授权批准后认领席落地。

Line count and byte ceiling unchanged (69/69, both lines within the 120-byte cap — check:pm-skill-ratchet verified).

scripts/pm/check-governed-queue-guard.mjs, the "THIRD leg" header (~268-294)

It reproduced the 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".

Fix: the quoted 2026-09-13 ruling is kept, untranslated, as the ruling that STARTED this leg (history is load-bearing — a reader who finds that text must see why it no longer governs). A new paragraph marks it SUPERSEDED by #19133 (cited with date, reusing this same file's own existing verbatim quote of the amendment for consistency) and points at governedTierFor / the register / node scripts/pm/check-governed-merges.mjs --test <paths> instead of a prefix to remember. The concluding sentence now reads "Every governed path outside Tier S is Tier H, the rules layer, and keeps the predicate above byte-for-byte."

No behavior changed: GOVERNED_SURFACES, governedTierFor, landingTierOf, every tier constant and every self-test assertion's expected value are untouched — only the two stale prose passages.

Verification before editing

Tier verdict on this PR's final file list

node scripts/pm/check-governed-merges.mjs --test .claude/skills/pm-dispatch/references/landing-operations.md scripts/pm/check-governed-queue-guard.mjs

GOVERNED — Tier S, exit 3. landing-operations.md hits the .claude/** register row; check-governed-queue-guard.mjs is not itself a registered surface (1 of 2 paths governed). Per Prime Directive #14, this PR lands on the owning seat's Tier S contract-tier review of record — no seat approves it, and no maintainer click is waited for.

Gates run (exit code captured before any pipe)

  • node scripts/pm/check-governed-queue-guard.mjs --self-test — exit 0 (296 cases pass)
  • node scripts/pm/check-governed-merges.mjs --self-test — exit 0 (435 assertions)
  • pnpm check:pm-skill-ratchet — exit 0 (landing-operations.md 69/69, headroom 0, unchanged)
  • pnpm check:pm-skill-id-lint — exit 0 (27 files clean)
  • pnpm check:pm-governed-prose — exit 0 (names all 6 registered surfaces)
  • pnpm check:nul-bytes — exit 0
  • npx eslint scripts/pm/check-governed-queue-guard.mjs — exit 0
  • node --check scripts/pm/check-governed-queue-guard.mjs — exit 0

Changeset

skip-changeset — no packages/* touched; neither .claude/skills/** nor scripts/pm/** ships in any package's files[] (same as precedent PRs #19144 and #19021).

On the card

This PR is filed as Part of #19146, not a new card: #19146 ("skills: re-key the three 事实层 = references/ spellings the Tier S ruling leaves false") was already open, filed by the seat that landed PR #19144, and its item 2 is exactly landing-operations.md:27-28. Creating a new duplicate card would have contradicted this repo's own duplicate-avoidance practice, so none was created. #19146's other items — .claude/agents/os-dev.md:286-287, check-half-states.mjs H48 and check-half-states.mjs H43 — are not touched by this PR and remain open on that card; neither is SKILL.md:608's own 事实层 wording (added to #19146 by its own addendum comment). H43 is the newest of them: it had lived only in card comment 5750573385 and is enumerated on the card body as item 4 by this rework. It is left here deliberately — H43 is missing LOGIC in a non-governed instrument (a LAZY governedTierFor load, because that row travels to sibling repos, plus one pnpm check:pm-half-states self-test case), which is the same change class as H48 and rides with it in ONE half-states PR rather than under a docs-only Tier S record. The at-tier review of record (5751616940) ruled this PR NOT incomplete for leaving it there. This PR additionally fixes scripts/pm/check-governed-queue-guard.mjs's self-contradiction, which is not named in #19146 at all.

Note on the dispatching brief

The brief that generated this PR stated "this repair has no card yet." That is not accurate: #19146 already existed (filed 2026-09-18, still open) covering part of this exact repair. Everything else in the brief — the ruling text, the register row, the self-test name, SKILL.md:625-626, and both stale passages — verified exactly as stated on direct reading.

Rework after the at-tier contract review (record 5751616940 — FAIL)

Head fa628d0b3671216fcff6, one commit on the same branch (⛔ no rebase, no amend, no force-push — the review record is anchored to this branch's history). Both defects are TEXT: ⛔ no tier constant, no GOVERNED_SURFACES row, no governedTierFor, no landingTierOf and no self-test expected value moved. Self-test case counts are unchanged at 296 / 435.

1. landing-operations.md:27 — the PR-level ALL quantifier is restored.

The line shipped as 「- Tier S(.claude/** 全树)者:…」, which names the SURFACE. Its own predecessor (「受管路径全在本技能 references/ 者事实层」), this repair's prescribed wording on the card, and the sibling contract-review.md:46 (「受管路径全在 Tier S 面(.claude/**)者」) all carry the quantifier. Without it, lines 27 and 28 partition governed SURFACES rather than pull requests — so a mixed diff (a .claude/** path plus AGENTS.md, Tier H by the register's ALL-not-ANY rule) matched both lines with no tiebreak on the page.

-- Tier S(`.claude/**` 全树)者:席内达档复核过落地前检三条即转正式入队。
+- 受管路径全在 `.claude/**` 者 Tier S:席内达档复核过落地前检三条即转正式入队。

Re-measured here, not taken on trust: 93 B → 105 B against the 120 B cap, file 69/69 lines with headroom 0 (check:pm-skill-ratchet exit 0 names the file at 69/ceiling 69).

2. check-governed-queue-guard.mjs:4442-4443 — the --self-test SUCCESS line is re-keyed.

The docblock repair in the first commit left the one instance seats actually read: the SUCCESS line printed on EVERY run (it is in the review's own capture) still stated the superseded #18020 population, while the battery at :3949-3950 asserts ⛔ the-old-references-boundary-is-GONE. Landed 2026-09-13 in #18036 and untouched by #19144 — present at merge-base and at the reviewed head, reproduced here before the edit.

-      '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 ' +

History stays (the #18020 naming), exactly as the docblock keeps its quoted ruling; only the POPULATION is re-keyed. Proof it is gone from the PRINTED output, not merely from the source: --self-test at the new head prints the one ruled prefix 0 times and the re-keyed sentence once.

Still stating the superseded boundary — reported, ⛔ deliberately not pulled in

The review lists these as live and OUT of this PR's scope, and this rework leaves them exactly as it found them: .claude/agents/os-dev.md:286-287 (this card's item 1) and SKILL.md:608's 「⛔ 无事实层例外」 (a card addendum, vocabulary only — the rule itself stays true). Naming-only uses of "the references tier" as this leg's NAME (queue-guard :268, :358, :442, :452, :646, :736, code comments :1420 / :1546 / :2261 / :2470 / :2560, and check-clause2-carriers.mjs:8635) are an optional tidy and were left alone: widening the diff of a docs-only record to sweep names is not what the FAIL asked for.

Tier verdict on the FINAL file list

node scripts/pm/check-governed-merges.mjs --test .claude/skills/pm-dispatch/references/landing-operations.md scripts/pm/check-governed-queue-guard.mjs

⛔ GOVERNED — Tier S(席内达档复核落地), exit 3; 1 of 2 paths on the register (.claude/** ×1 — landing-operations.md; scripts/pm/check-governed-queue-guard.mjs is not a registered surface). File list unchanged from the reviewed head, so the tier is unchanged. Per Prime Directive #14 this lands on the at-tier review of record — ⛔ no seat approves it and no maintainer click is owed.

Gates at the new head (exit code captured BEFORE any pipe)

The brief's minimum, plus every family node scripts/pm/dispatch-gates.mjs --commands derives for this change set — 38 commands, 37 at exit 0:

  • check-governed-queue-guard.mjs --self-test — exit 0, 296 cases (unchanged)
  • check-governed-merges.mjs --self-test — exit 0, 435 assertions (unchanged)
  • check:pm-skill-ratchet exit 0 (69/69, headroom 0) · check:pm-skill-id-lint exit 0 (27 clean) · check:pm-governed-prose exit 0 (6/6 surfaces, 28 self-test cases) · check:skill-frame-sync exit 0 · check:nul-bytes exit 0 (9053 files, no raw control bytes)
  • node --check exit 0 · npx eslint scripts/pm/check-governed-queue-guard.mjs exit 0 (1 file linted, 0 errors, 0 warnings, read from --format json)
  • check:pm-dispatch-gates, check:pm-governed-merges, check:ratchet-remedy-authority, check:doc-authoring, check:cross-package-test-inputs, check-declaration-mirrors, check-scripts-symbol-anchors, check-self-test-wired, check-self-test-workflow-commands, check-comment-mask-corpus and the rest of the derived list — all exit 0
  • ⊘ NOT MEASURED — pnpm --filter @objectstack/lint run check:doc-formula-expressions exit 3, PREREQUISITE NOT MET (@objectstack/formula and @objectstack/lint unbuilt in this worktree). Exit 3 is this repo's NOT-MEASURED code, ⛔ not a finding; the family's population is docs formula expressions, disjoint from this diff's two paths, and CI runs it against a built tree.

⚠️ dispatch-gates.mjs prints a STALE TREE warning: this branch is ≥55 commits behind origin/main and 15 files the derivation reads changed across that range. The gate list above is therefore derived from this branch's tree, which is what the review record is anchored to; ⛔ it was not refreshed by a rebase. CI on the merge group derives from the merged tree.

⚠️ check-clause2-carriers.mjs --pair 19379 reads 2 (UNJUDGED) — measured, and it is the BRANCH NAME

Reproduced at the new head: PM_SWEEP_REPO=objectstack-ai/objectstack node scripts/pm/check-clause2-carriers.mjs --pair 19379 → exit 2, 「the card's NEWEST claim comment (5754245926) matches the claim marker but its Branch: directive parses to ZERO branches」. The stored line 2 really is Branch: `claude/pm-superseded-references-tier` on a line of its own, so the printed remedy — "name the branch on a Branch: line of its OWN" — is already satisfied and cannot clear it.

The cause is not the regex named in the dispatching brief. BRANCH_TOKEN (check-clause2-carriers.mjs:3278) reads the Implemented-by: VALUE of a review record; it never sees a claim's Branch: directive. That directive is read by the sibling check-half-states.mjs:5407 claimedBranches, through CLAIM_BRANCH_SHAPE (:5358):

/claude\/issue-\d+-[A-Za-z0-9][A-Za-z0-9._-]*/g

which REQUIRES a literal issue- plus digits segment. Measured on the real stored comment body and two controls:

input claimedBranches()
the live comment 5754245926, as stored []
the same comment, branch swapped to claude/issue-19146-superseded-references-tier ["claude/issue-19146-superseded-references-tier"]
Branch: claude/issue-abc-slug`` (no digits) []

Only the branch NAME differs across those rows, so the marker, the backticks, the line position and the directive shape are all fine. claimGovernance on that one-comment thread returns governing: null with malformed: { id: 5754245926 } — which cardDeclaration turns into claim-branch-unparsed, i.e. exit 2.

The narrow shape is DELIBERATE where it was written (CLAIM_BRANCH_SHAPE's own docblock: a Branch: line naming some other shape "is deliberately left unmatched, which puts the card out of this row's scope entirely" — under-reporting beats manufacturing findings out of typos). The consequence in THIS reader is not out-of-scope, though: Prime Directive #14 makes --pair at 0 part of the Tier S landing predicate, so a Tier S PR on a branch without an issue-digits segment cannot satisfy it by any act of the claiming seat short of renaming the branch — which would strand this review record. ⛔ Not repaired here: check-clause2-carriers.mjs is ⛔ out of this PR's scope and the branch is ⛔ not renamed. Reported for the seat.


🤖 Generated with Claude Code

https://claude.ai/code/session_01AmH9bKvGoLjiY86Q4Z3og2


Generated by Claude Code


Generated by Claude Code

…-tier boundary

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 <paths>` 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 <noreply@anthropic.com>

Copy link
Copy Markdown
Collaborator Author

Contract review

Served-tier: CONTRACT_REVIEW_TIER
Head-sha: fa628d0b3602a4df059add483084b23b826c85f9
Card: #19146 · PR #19379 (one commit; base ada701220b, 2 files, +22 / −10) · isolated adversarial review, measured in a detached worktree at the head, every exit code captured before any pipe.

① Derived judgments

② Semver level

None. Docs-only rules repair: no packages/* path, and neither .claude/** nor scripts/pm/** ships in any released package's files[]. skip-changeset is the correct label for this file list, and Clause-②: no is the correct declaration (no contract surface touched) — which the missing claim comment (③) must carry.

③ Boundary flags

Implemented-by: claude/pm-superseded-references-tier
Reviewed-by: session_01AmH9bKvGoLjiY86Q4Z3og2

VERDICT: FAIL


Generated by Claude Code

This was referenced Sep 20, 2026
…line

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 <noreply@anthropic.com>

Copy link
Copy Markdown
Collaborator Author

Contract review

Served-tier: CONTRACT_REVIEW_TIER
Head-sha: 71216fcff6d2cd314784ce7746ccd91095751ea7
Card: #19146 · PR #19379 · second at-tier review, after record 5751616940 (FAIL on fa628d0b36). Measured in a detached worktree at the sha above, fetched from origin first: the shared checkout's LOCAL ref claude/pm-superseded-references-tier still reads fa628d0b36 and was left untouched; origin, and the PR's head, read 71216fcff6 — two commits on base ada701220b, no rebase. Every exit code captured before any pipe.

① Derived judgments

  • Tier, re-derived on the final file list: check-governed-merges.mjs --test landing-operations.md check-governed-queue-guard.mjsGOVERNED — Tier S(席内达档复核落地), exit 3, 1 of 2 paths on the register (.claude/** ×1); the .mjs is not a registered surface. Tier claim in the PR body: CORRECT. Register probed on real paths, one each: .claude/settings.json, .claude/hooks/guard-main-checkout.sh, .claude/agents/os-dev.md, .claude/skills/pm-dispatch/SKILL.md, .claude/README.md → Tier S; skills/x/SKILL.md, AGENTS.md, CLAUDE.md, docs/adr/0001-x.md, docs/NORTH-STAR.md → Tier H (the #9495 regime rendering, landing tier: H(人合)); .claude/agents/os-dev.md + AGENTS.md → Tier H; settings + hooks + agents → Tier S; scripts/pm/*.mjs, .claudeX/x.md, docs/adrs/x.md → not governed, exit 0. The register has six rows; .claude/** (claude-tree) is its only GOVERNED_TIER_S row and the field is tier.
  • landing-operations.md:27 — REPAIRED, CORRECT. Head reads 「受管路径全在 .claude/** 者 Tier S:席内达档复核过落地前检三条即转正式入队。」. The quantifier is over GOVERNED paths (受管路径全在), which is exactly governedTierFor's ALL-over-governed-paths semantics, so an unregistered sibling such as this PR's own scripts/pm/ file does not break it. It matches the card's prescribed head clause, the merge-base form (「受管路径全在本技能 … 者」) and contract-review.md:46 (「受管路径全在 Tier S 面(.claude/**)者」). Partition probed: pure .claude/** diff → :27 only; .claude/** + AGENTS.md → :28 only (「Tier H(其余受管面)者」); pure Tier H → :28 only — exactly one line applies in each case. Bytes re-taken: :27 105 B (93 B at fa628d0b36, 117 B at merge-base), :28 120 B — at the cap, so the next edit of :28 must shrink it; file 69 lines, no line over 120 B; check-skill-line-ratchet exit 0 (69 / ceiling 69, headroom 0). The 5000-line carve-out lives on :26, not :27; the block reads top-down, no action.
  • Queue-guard docblock (:286-:304): CORRECT against the register — sole S row, the other five rows H; governedTierFor imported at :513, driving every entry's tier at :972 and the replay at :2804, re-exported at :728. The amendment quote is reused, not re-typed: the file's earlier instance at :668-:670 is line-wrapped (「我觉得这些我也没 / 必要确认」), so a one-line grep reads 1 and the wrapped control reads 2.
  • --self-test SUCCESS line (:4442-:4445) — population: REPAIRED. Printed output at head carries 「the one ruled prefix」 0× (merge-base 1×) and the re-keyed sentence 1×; it now agrees with the battery at :3949-:3953 (a-Tier-S-only-path-set-is-Tier-S, the-old-references-boundary-is-GONE…, ONE-Tier-H-path-makes-the-WHOLE-entry-Tier-H).
  • --self-test SUCCESS line — actor: DEFECT, live. The same sentence still reads 「… a governed diff whose governed paths are ALL Tier S … lands on the skills seat's review of record instead of an authorized approval」. That actor is the pre-skills(governed): narrow the human-merge floor to the law — Tier H stays human/approved (AGENTS.md · CLAUDE.md · docs/adr/** · docs/NORTH-STAR.md · .claude/settings.json · .claude/hooks/**); Tier S (.claude/skills/** · .claude/agents/**) lands on the seat's CONTRACT_REVIEW_TIER PASS + post-merge audit #19133 one, from when the ruled prefix was the skills lane's own. The regime the sentence says it is re-keyed to names a different actor everywhere else: AGENTS.md Prime Directive feat: Comprehensive CRM example demonstrating all ObjectStack protocol features #14 「Tier S by the owning seat on a contract-tier review of record」 and 「the owning seat then lands it through the queue」; the register check-governed-merges.mjs:316 / :1015 / :1559 「the owning seat lands it」; this file's own printed verdicts :1426 「each carries the owning seat's」 and :1489 「the owning seat posts its review of record」; SKILL.md:522 / :609 and contract-review.md:26 put the ② review in the OWNING seat when it is at tier (the skills seat is only the hand-off for a seat outside the tier). The only other 「skills seat」 in the file (:286, :668, 「on the skills seat's proposal」) is history and correct. Counter-example on this very record: PR fix(pm): repair two carriers still spelling the superseded references-tier boundary #19379 is Tier S, owned by domain:spec seat 4, its claim (5754245926) and both at-tier records rendered on that seat — not the skills seat's. On the most-read sentence in the file, present tense, inside the clause that announces the re-key, a wrong actor is a live mis-statement of who lands Tier S — the same class as the population defect the prior record failed on. Required: one word, 「skills seat's」 → 「owning seat's」 in the :4444 literal. Measured to move nothing: no pin holds that text (0 hits outside the file; inside it the phrase is split across two literals by construction), no expected value, 296 cases unchanged.
  • Behaviour, proven by test and by AST: the comment-stripped md5 of the .mjs is identical at merge-base and fa628d0b36 (0 differing AST lines); merge-base vs head differs in 51 AST lines, ALL inside the selfTest() success-line string chain (node count 20741 → 20744: one BinaryExpression, one PlusToken, one StringLiteral); no other node moved. So 「no behaviour changed」 is true up to the printed sentence, and the PR body's exact wording (no constant, row, tier function or expected value moved) holds. Self-tests at head AND at merge-base: queue-guard 296 / 296, exit 0; governed-merges 435 / 435, exit 0 — NOT MEASURED (exit 3, PREREQUISITE NOT MET) until pnpm install --frozen-lockfile --ignore-scripts in my worktrees, then measured on both trees; half-states 5092, exit 0; clause2 1071, exit 0.
  • Gates at head: skill-line-ratchet 0, skill-id-lint 0 (27 clean), governed-prose 0 (2 surfaces name all 6), skill-frame-sync 0, node --check 0, widening-tells --declaration no on the three-dot diff 0 (no tell; no declared surface covers either path). CI on the head: 38 check-runs, 27 success / 11 skipped / 0 failure; required contexts Lint & Repo Gates, TypeScript Type Check, Test Core, Dogfood Regression Gate and Governed Surface Queue Guard success; Build Core and Temporal Conformance skipped on the docs-only paths filter.

② Semver level

None. No packages/* path; 76 package manifests scanned, 0 files[] naming .claude or scripts/pm. skip-changeset is correct for this file list, and Clause-②: no is declared on both carriers — the pair record reads no from claim 5754245926 and no from the PR body — with no widening tell on the diff.

③ Boundary flags

  • RULING on --pair 19379 = exit 2 (UNJUDGED): this PR is UNLANDABLE as it stands, on this branch, whatever this verdict says. Re-measured at head: PM_SWEEP_REPO=objectstack-ai/objectstack node scripts/pm/check-clause2-carriers.mjs --pair 19379 → exit 2, pair.1.head-sha equal to the sha above, pair.1.claim.selected: NONE — the newest claim (5754245926) matches the marker but its Branch: line parses to zero branches (claim-branch-unparsed, cardDeclaration :2398 / :2416). Mechanism reproduced first-hand through claimedBranches (check-half-states.mjs:5407) on the stored body: the live claim → 0; the same body with the branch swapped to claude/issue-19146-superseded-references-tier → 1; claude/issue-abc-slug → 0; claude/issue-19146-x → 1. Only the branch NAME differs, so the printed remedy is already satisfied and cannot clear it. Prime Directive feat: Comprehensive CRM example demonstrating all ObjectStack protocol features #14 makes --pair at 0 a conjunct of the Tier S landing predicate and ends 「No seat judges this」: exit 2 is not a deviation a seat may declare and land over (the rework report's option A), and a PASS record here would still not make the PR landable. Where the fault lies: the branch, not the checker. AGENTS.md:460 「Name the branch after the issue it fixes」 with the shape claude/issue-NNNN-slug, and :395 (the claim names the branch in that shape), are the contract; CLAIM_BRANCH_SHAPE (:5358) is that rule made mechanical, and check-closing-target-claim.mjs imports the same reader. The class-(b) finding the rework report files against the checker is therefore mis-aimed — the predicate is unsatisfiable only for a branch that already violates the naming rule — and widening the shape (option B) would be a workaround of a declared rule (Prime Directive [WIP] Fix error in step four of the action run #5). The remedy is on the branch side and is the owning seat's act, ⛔ not performed here: a conforming name carrying these same two commits (a GitHub branch rename keeps the PR, its thread, its head and both records — nothing is stranded, the records stay as history), then one new Claim: naming it and one fresh at-tier record whose Implemented-by: names it, at whatever head the FAIL above is repaired on. Two follow-ons for the skills seat, not this PR: contract-review.md:42 enumerates the ② readings as 0 / 4 / 3 only — exit 2 is not in the skill's vocabulary; and the green check-run 「The card this PR closes must claim this branch」 on this head is vacuous (Part of #N is not a closing keyword, check-closing-target-claim.mjs:82 / :584) and vouches for nothing about this claim.
  • Residual superseded-boundary statements after this head, swept by meaning over tracked files. LIVE: .claude/agents/os-dev.md:286-:287 (card item 1 — the file every dev subagent reads). VOCABULARY only, rule still true: SKILL.md:608 「⛔ 无事实层例外」 and check-skill-line-ratchet.mjs:327 「no fact-layer exception」. NAMING only: 「references tier」 as the leg's name at queue-guard :268, :442, :452, :646, :736, :1420, :1546, :2261, :2470, :2560, :3929 and check-clause2-carriers.mjs:8635. HISTORY, correct as written: queue-guard :275 (the quoted ruling), :674-:675 (「it is gone」), :3937; check-governed-merges.mjs:321; check-clause2-carriers.mjs:8647. The scope line is drawn acceptably — the diff repairs what it names and adds an off-card file — with one obligation it creates: the skills seat's addendum (5737973707) prescribed the three spellings 「one PR, ceilings unchanged」, and this PR delivers one of the three, so os-dev.md:286-287 and SKILL.md:608 are now owed as a follow-up on skills: re-key the three 事实层 = references/ spellings the Tier S ruling leaves false (os-dev.md :286–:287, landing-operations.md :27–:28, H48) #19146; the PR body says so, the card body should.
  • H43 / H48: not re-litigated; the prior ruling stands, and the card body now enumerates H43 as item 4 (verified on the live body).
  • Commit form, REPORTING only: both branch commits end with the harness Co-Authored-By trailer and neither carries the Claude-Session: line AGENTS.md:440-442 pairs it with; check-commit-card-trailers.mjs refuses a model identifier or a card relation in the pair and does not require the session line, so the pre-push hook passed. Landed history is not rewritten (⛔ no amend, no force-push). No model identifier in either commit or in the PR body.
  • Identity: Implemented-by is the mode:subagent dev's branch and Reviewed-by the adopting seat's session (contract-review.md:35-:37); an isolated subagent under scratchpad/pr-19379-r2/ produced this record from the card, the rulings, the prior record and the PR; the pair reads branch vs session, not SELF-REVIEW.
  • Nothing in this review modified the PR, its branch, body, labels or state; no push, no approval, no enqueue; the sibling worktrees named in the brief were not entered.

Implemented-by: claude/pm-superseded-references-tier
Reviewed-by: session_01AmH9bKvGoLjiY86Q4Z3og2

VERDICT: FAIL


Generated by Claude Code

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 <noreply@anthropic.com>
@hotlong
hotlong marked this pull request as ready for review September 22, 2026 07:22
@hotlong
hotlong enabled auto-merge September 22, 2026 07:22
@hotlong
hotlong added this pull request to the merge queue Sep 22, 2026
Merged via the queue into main with commit 1f53b0b Sep 22, 2026
33 checks passed
@hotlong
hotlong deleted the claude/pm-superseded-references-tier branch September 22, 2026 07:44
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation size/s skip-changeset PR has no user-facing published change; bypasses the changeset gate

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants