skills(pm): encode the clear-equals-land arm preconditions in contract-review.md - #14070

Merged
os-zhuang merged 1 commit into
mainfrom
claude/issue-13791-stall-takeover-rescope
Sep 1, 2026
Merged

skills(pm): encode the clear-equals-land arm preconditions in contract-review.md#14070
os-zhuang merged 1 commit into
mainfrom
claude/issue-13791-stall-takeover-rescope

Conversation

@os-sam

Copy link
Copy Markdown
Collaborator

Fixes#13791

The 清标即落地 (clear-equals-land) section of
.claude/skills/pm-dispatch/references/contract-review.md stated the release
ACTION — PASS, strip both carriers, provenance comment, pre-land check, ready,
arm — but carried no walkable precondition list. Criterion 3 in particular
(every check green, never the required subset) had no home anywhere in the
release path: it existed only as a general enqueue rule in the main skill file.
This PR encodes the criteria shape, under the in-seat regime the same-day
review-chain reform installed.

The clause, as landed (4 lines, 471 B, every line inside the 120-byte cap)

- **落地前检三条**(维护者 2026-08-31「同意」):① 席内契约档 PASS 在案(卡上达档裁决评论);②
`needs:contract-review` 双载体已清;③ PR 全部 check 全绿(⛔ 非 required 子集)。② 逐对机读
`node scripts/pm/check-clause2-carriers.mjs --pair PR-NUMBER`:0 双肢可读且一致 · 4 不一致 · 3 环境答不
了 ⛔ 不作干净。转 ready 同笔留 provenance 评论引该 PASS;受管面不适用,draft-only 终局不变。

Four things ride in those four lines, all of them ruled or ordered by the
dispatch: the three arm preconditions; the maintainer-provenance stamp the
file's own convention requires on a ruled bullet; the per-pair mechanical
reading of limb ② with its exit register (0 limbs legible and carriers agree
· 4 they do not · 3 the environment could not answer, deliberately NOT read
as clean); and the unchanged governed-surface boundary.

Two deliberate narrowings, both measured rather than assumed:

  • The re-scope the card carries: the ruled conditions 1 and 4 named the
    external review chain (a PASS from it, and its stall past a patrol interval).
    The same-day in-seat reform demoted that chain to optional audit, so a chain
    that is no longer a release precondition cannot stall. Condition 1 lands as an
    in-seat at-tier PASS on record; condition 4 has no referent and is not
    encoded. No stall timeout appears in the text.
  • --pair is cited as the reading for limb only. It is a predicate over
    the clause-② carriers and the card's declaration comment; it does not read PR
    check status, so claiming it covers ③ would have been a false mechanical
    claim.

The authorizing rulings, quoted verbatim and untranslated

The line ratchet's own red text requires the ruling quoted in the raising PR,
and the second ruling below orders both quotes here.

1 — the rule. Maintainer, 2026-08-31, director seat summon 7, decision batch
17, on option B (record: #13758, comment 5478594239). It names this file and
this section:

同意

2 — the ceiling raise 57 → 60, taking the FULL encoding (not the 58-line
bare minimum). Maintainer, 2026-09-01, director decision batch A (record: this
card, comment 5486842552):

同意。

Line budget, before and after

filelines beforelines afterbytes beforebytes afterceiling
.claude/skills/pm-dispatch/references/contract-review.md57605,3815,77557 → 60, headroom 0
scripts/pm/check-skill-line-ratchet.mjs1,1561,174not ceilinged (scripts/ carries no row)

Paid in place first, then raised. The one real deletion this surface had:
the downgrade-fuse bullet restated the served-tier READING — which MCP call,
which field, and why self-attestation is not a reading — while carrying a
pointer at platform-readings.md, the file that single-sources exactly that, in
the same breath. The restatement collapses to the pointer it already had:
4 lines / 437 B → 3 lines / 357 B. Nothing operative left the bullet: the
mandatory per-session read, the ⛔ on self-attestation, the mismatch consequence
(no self-clearing; go to the transcript-verified fable review subagent) and the
label-retention rule are all still there.

That leaves a residual of +4 lines, which cannot be paid without deleting a
ruled clause — refused on the state-machine precedent already recorded in
the CEILINGS map, and the nearest candidates were the governed-surface boundary
and the terminal clause, i.e. exactly the text the card forbids weakening. Hence
the raise, which is the ratchet's own prescribed escape and the third use of it
on this file, matching the recording convention of the two same-day precedents
(48 → 51, then 51 → 57): landed count, headroom 0, arithmetic and ruling in the
map comment.

Verification — gate union at HEAD 6557bc1bb

Derived after the final commit with
node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --commands
(exit 0; the tool reads the change set itself from the merge base, three-dot).
Every exit code captured before any pipe.

gateexit
node scripts/check-ci-filter-parity.mjs0
node scripts/check-cross-package-test-inputs.mjs0
node scripts/check-shard-attestation.mjs0
node scripts/check-test-completeness.mjs3 — NOT MEASURED
node scripts/pm/bare-root-worklist.mjs --self-test0
pnpm --filter @objectstack/lint run check:doc-formula-expressions0
pnpm check:agent-test-spelling0
pnpm check:bash32-floor0
pnpm check:cli-command-ids0
pnpm check:cross-package-test-inputs0
pnpm check:doc-authoring0
pnpm check:entry-guard0
pnpm check:parse-guard0
pnpm check:pm-dispatch-gates0
pnpm check:pm-governed-merges0
pnpm check:pm-skill-id-lint0
pnpm check:pm-skill-ratchet0
pnpm check:pnpm-filter-targets0
pnpm check:skill-frame-sync0
pnpm check:watch-hint-literal0

check-test-completeness exits 3 by its own design when run with no saved
turbo run test log — its failure text says so and says to record the local
reading as NOT MEASURED. It is not a red. check:doc-formula-expressions also
answered 3 on the first pass (PREREQUISITE NOT MET@objectstack/formula
and @objectstack/lint were not built in a fresh worktree); both were built and
it was re-run to a real 0.

The line-ratchet verdict lines for this file, verbatim from the gate's own
output at HEAD 6557bc1bb:

✓ check-skill-line-ratchet: .claude/skills/pm-dispatch/references/contract-review.md is 60 lines (ceiling 60; headroom 0).
✓ check-skill-line-ratchet: .claude/skills/pm-dispatch/references/contract-review.md: widest table row is 0 bytes (pin 0; headroom 0).

Reverse verification of the raise, on the committed tree: with the ceiling still
at 57 the same gate printed
✗ … contract-review.md is 60 lines; the ratchet ceiling is 57 and exited 1, so
the ratchet really is reading this edit and the raise is what turns it green —
not a stale count.

Because the diff edits a gate script, that script's own suites were run beyond
the derived family: check-skill-line-ratchet.mjs --self-test (111 cases pass),
plus the three modules that import it —
scripts/check-published-list-mirrors.mjs, scripts/check-skills-token-ratchet.mjs
and scripts/pm/check-dispatch-gates.mjs (1,090 cases) — all exit 0.
node scripts/check-nul-bytes.mjs exit 0 over 7,678 files, and a direct control-byte
scan of both touched files matched nothing.

Boundaries observed

  • Governed surface (.claude/**) ⇒ draft-only. Not flipped ready, not
    armed, not queued; it reaches main only through a human merge or the
    pinned-approval path.
  • No ruled clause was weakened, and no deletion other than the single dedup
    above.
  • The clause is not widened: it covers non-governed code PRs after a recorded
    at-tier PASS, and says so.
  • No issue numbers in operative skill text (check:pm-skill-id-lint green) —
    provenance in the clause is date plus verbatim words.
  • Publishes nothing from any package ⇒ skip-changeset, applied on this PR.

Session: https://claude.ai/code/session_01Msg17tAHJ3jVTYFgHydCm2

Generated by Claude Code


Generated by Claude Code

…t-review.md
The 清标即落地 section stated the release ACTION but carried no walkable
precondition list. It now carries the three arm preconditions — an in-seat
at-tier PASS on record, `needs:contract-review` cleared on both carriers, and
ALL of the PR's checks green (never the required subset) — plus the per-pair
mechanical reading (`check-clause2-carriers --pair`) with its exit register,
the provenance-comment requirement on arm, and the unchanged governed-surface
boundary.
Funded in place by the one real deletion the surface had: the downgrade-fuse
bullet restated the served-tier reading that platform-readings already
single-sources, while carrying a pointer at it in the same breath; that
restatement collapses to the pointer (4 lines to 3). The residual raises the
line ratchet 57 to 60 under the maintainer ruling quoted in the PR body.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Msg17tAHJ3jVTYFgHydCm2
@os-zhuang
os-zhuang marked this pull request as ready for review September 1, 2026 06:34
@os-zhuang
os-zhuang added this pull request to the merge queueSep 1, 2026
Merged via the queue into main with commit ec0c6c2Sep 1, 2026
34 checks passed
@os-zhuang
os-zhuang deleted the claude/issue-13791-stall-takeover-rescope branch September 1, 2026 06:59
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentationImprovements or additions to documentationsize/sskip-changesetPR has no user-facing published change; bypasses the changeset gate

Projects

None yet

Development

Successfully merging this pull request may close these issues.

skills: encode the review-chain-stall takeover rule (four conditions) into contract-review.md's clear-equals-land section

3 participants

@os-sam@os-zhuang@claude
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

skills(pm): encode the clear-equals-land arm preconditions in contract-review.md - #14070

Merged
os-zhuang merged 1 commit into
mainfrom
claude/issue-13791-stall-takeover-rescope
Sep 1, 2026
Merged

skills(pm): encode the clear-equals-land arm preconditions in contract-review.md#14070
os-zhuang merged 1 commit into
mainfrom
claude/issue-13791-stall-takeover-rescope

Conversation

@os-sam

Copy link
Copy Markdown
Collaborator

Fixes#13791

The 清标即落地 (clear-equals-land) section of
.claude/skills/pm-dispatch/references/contract-review.md stated the release
ACTION — PASS, strip both carriers, provenance comment, pre-land check, ready,
arm — but carried no walkable precondition list. Criterion 3 in particular
(every check green, never the required subset) had no home anywhere in the
release path: it existed only as a general enqueue rule in the main skill file.
This PR encodes the criteria shape, under the in-seat regime the same-day
review-chain reform installed.

The clause, as landed (4 lines, 471 B, every line inside the 120-byte cap)

- **落地前检三条**(维护者 2026-08-31「同意」):① 席内契约档 PASS 在案(卡上达档裁决评论);②
`needs:contract-review` 双载体已清;③ PR 全部 check 全绿(⛔ 非 required 子集)。② 逐对机读
`node scripts/pm/check-clause2-carriers.mjs --pair PR-NUMBER`:0 双肢可读且一致 · 4 不一致 · 3 环境答不
了 ⛔ 不作干净。转 ready 同笔留 provenance 评论引该 PASS;受管面不适用,draft-only 终局不变。

Four things ride in those four lines, all of them ruled or ordered by the
dispatch: the three arm preconditions; the maintainer-provenance stamp the
file's own convention requires on a ruled bullet; the per-pair mechanical
reading of limb ② with its exit register (0 limbs legible and carriers agree
· 4 they do not · 3 the environment could not answer, deliberately NOT read
as clean); and the unchanged governed-surface boundary.

Two deliberate narrowings, both measured rather than assumed:

  • The re-scope the card carries: the ruled conditions 1 and 4 named the
    external review chain (a PASS from it, and its stall past a patrol interval).
    The same-day in-seat reform demoted that chain to optional audit, so a chain
    that is no longer a release precondition cannot stall. Condition 1 lands as an
    in-seat at-tier PASS on record; condition 4 has no referent and is not
    encoded. No stall timeout appears in the text.
  • --pair is cited as the reading for limb only. It is a predicate over
    the clause-② carriers and the card's declaration comment; it does not read PR
    check status, so claiming it covers ③ would have been a false mechanical
    claim.

The authorizing rulings, quoted verbatim and untranslated

The line ratchet's own red text requires the ruling quoted in the raising PR,
and the second ruling below orders both quotes here.

1 — the rule. Maintainer, 2026-08-31, director seat summon 7, decision batch
17, on option B (record: #13758, comment 5478594239). It names this file and
this section:

同意

2 — the ceiling raise 57 → 60, taking the FULL encoding (not the 58-line
bare minimum). Maintainer, 2026-09-01, director decision batch A (record: this
card, comment 5486842552):

同意。

Line budget, before and after

filelines beforelines afterbytes beforebytes afterceiling
.claude/skills/pm-dispatch/references/contract-review.md57605,3815,77557 → 60, headroom 0
scripts/pm/check-skill-line-ratchet.mjs1,1561,174not ceilinged (scripts/ carries no row)

Paid in place first, then raised. The one real deletion this surface had:
the downgrade-fuse bullet restated the served-tier READING — which MCP call,
which field, and why self-attestation is not a reading — while carrying a
pointer at platform-readings.md, the file that single-sources exactly that, in
the same breath. The restatement collapses to the pointer it already had:
4 lines / 437 B → 3 lines / 357 B. Nothing operative left the bullet: the
mandatory per-session read, the ⛔ on self-attestation, the mismatch consequence
(no self-clearing; go to the transcript-verified fable review subagent) and the
label-retention rule are all still there.

That leaves a residual of +4 lines, which cannot be paid without deleting a
ruled clause — refused on the state-machine precedent already recorded in
the CEILINGS map, and the nearest candidates were the governed-surface boundary
and the terminal clause, i.e. exactly the text the card forbids weakening. Hence
the raise, which is the ratchet's own prescribed escape and the third use of it
on this file, matching the recording convention of the two same-day precedents
(48 → 51, then 51 → 57): landed count, headroom 0, arithmetic and ruling in the
map comment.

Verification — gate union at HEAD 6557bc1bb

Derived after the final commit with
node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --commands
(exit 0; the tool reads the change set itself from the merge base, three-dot).
Every exit code captured before any pipe.

gateexit
node scripts/check-ci-filter-parity.mjs0
node scripts/check-cross-package-test-inputs.mjs0
node scripts/check-shard-attestation.mjs0
node scripts/check-test-completeness.mjs3 — NOT MEASURED
node scripts/pm/bare-root-worklist.mjs --self-test0
pnpm --filter @objectstack/lint run check:doc-formula-expressions0
pnpm check:agent-test-spelling0
pnpm check:bash32-floor0
pnpm check:cli-command-ids0
pnpm check:cross-package-test-inputs0
pnpm check:doc-authoring0
pnpm check:entry-guard0
pnpm check:parse-guard0
pnpm check:pm-dispatch-gates0
pnpm check:pm-governed-merges0
pnpm check:pm-skill-id-lint0
pnpm check:pm-skill-ratchet0
pnpm check:pnpm-filter-targets0
pnpm check:skill-frame-sync0
pnpm check:watch-hint-literal0

check-test-completeness exits 3 by its own design when run with no saved
turbo run test log — its failure text says so and says to record the local
reading as NOT MEASURED. It is not a red. check:doc-formula-expressions also
answered 3 on the first pass (PREREQUISITE NOT MET@objectstack/formula
and @objectstack/lint were not built in a fresh worktree); both were built and
it was re-run to a real 0.

The line-ratchet verdict lines for this file, verbatim from the gate's own
output at HEAD 6557bc1bb:

✓ check-skill-line-ratchet: .claude/skills/pm-dispatch/references/contract-review.md is 60 lines (ceiling 60; headroom 0).
✓ check-skill-line-ratchet: .claude/skills/pm-dispatch/references/contract-review.md: widest table row is 0 bytes (pin 0; headroom 0).

Reverse verification of the raise, on the committed tree: with the ceiling still
at 57 the same gate printed
✗ … contract-review.md is 60 lines; the ratchet ceiling is 57 and exited 1, so
the ratchet really is reading this edit and the raise is what turns it green —
not a stale count.

Because the diff edits a gate script, that script's own suites were run beyond
the derived family: check-skill-line-ratchet.mjs --self-test (111 cases pass),
plus the three modules that import it —
scripts/check-published-list-mirrors.mjs, scripts/check-skills-token-ratchet.mjs
and scripts/pm/check-dispatch-gates.mjs (1,090 cases) — all exit 0.
node scripts/check-nul-bytes.mjs exit 0 over 7,678 files, and a direct control-byte
scan of both touched files matched nothing.

Boundaries observed

  • Governed surface (.claude/**) ⇒ draft-only. Not flipped ready, not
    armed, not queued; it reaches main only through a human merge or the
    pinned-approval path.
  • No ruled clause was weakened, and no deletion other than the single dedup
    above.
  • The clause is not widened: it covers non-governed code PRs after a recorded
    at-tier PASS, and says so.
  • No issue numbers in operative skill text (check:pm-skill-id-lint green) —
    provenance in the clause is date plus verbatim words.
  • Publishes nothing from any package ⇒ skip-changeset, applied on this PR.

Session: https://claude.ai/code/session_01Msg17tAHJ3jVTYFgHydCm2

Generated by Claude Code


Generated by Claude Code

…t-review.md
The 清标即落地 section stated the release ACTION but carried no walkable
precondition list. It now carries the three arm preconditions — an in-seat
at-tier PASS on record, `needs:contract-review` cleared on both carriers, and
ALL of the PR's checks green (never the required subset) — plus the per-pair
mechanical reading (`check-clause2-carriers --pair`) with its exit register,
the provenance-comment requirement on arm, and the unchanged governed-surface
boundary.
Funded in place by the one real deletion the surface had: the downgrade-fuse
bullet restated the served-tier reading that platform-readings already
single-sources, while carrying a pointer at it in the same breath; that
restatement collapses to the pointer (4 lines to 3). The residual raises the
line ratchet 57 to 60 under the maintainer ruling quoted in the PR body.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Msg17tAHJ3jVTYFgHydCm2
@os-zhuang
os-zhuang marked this pull request as ready for review September 1, 2026 06:34
@os-zhuang
os-zhuang added this pull request to the merge queueSep 1, 2026
Merged via the queue into main with commit ec0c6c2Sep 1, 2026
34 checks passed
@os-zhuang
os-zhuang deleted the claude/issue-13791-stall-takeover-rescope branch September 1, 2026 06:59
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentationImprovements or additions to documentationsize/sskip-changesetPR has no user-facing published change; bypasses the changeset gate

Projects

None yet

Development

Successfully merging this pull request may close these issues.

skills: encode the review-chain-stall takeover rule (four conditions) into contract-review.md's clear-equals-land section

3 participants

@os-sam@os-zhuang@claude
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

skills(pm): encode the clear-equals-land arm preconditions in contract-review.md - #14070

Merged
os-zhuang merged 1 commit into
mainfrom
claude/issue-13791-stall-takeover-rescope
Sep 1, 2026
Merged

skills(pm): encode the clear-equals-land arm preconditions in contract-review.md#14070
os-zhuang merged 1 commit into
mainfrom
claude/issue-13791-stall-takeover-rescope

Conversation

@os-sam

Copy link
Copy Markdown
Collaborator

Fixes#13791

The 清标即落地 (clear-equals-land) section of
.claude/skills/pm-dispatch/references/contract-review.md stated the release
ACTION — PASS, strip both carriers, provenance comment, pre-land check, ready,
arm — but carried no walkable precondition list. Criterion 3 in particular
(every check green, never the required subset) had no home anywhere in the
release path: it existed only as a general enqueue rule in the main skill file.
This PR encodes the criteria shape, under the in-seat regime the same-day
review-chain reform installed.

The clause, as landed (4 lines, 471 B, every line inside the 120-byte cap)

- **落地前检三条**(维护者 2026-08-31「同意」):① 席内契约档 PASS 在案(卡上达档裁决评论);②
`needs:contract-review` 双载体已清;③ PR 全部 check 全绿(⛔ 非 required 子集)。② 逐对机读
`node scripts/pm/check-clause2-carriers.mjs --pair PR-NUMBER`:0 双肢可读且一致 · 4 不一致 · 3 环境答不
了 ⛔ 不作干净。转 ready 同笔留 provenance 评论引该 PASS;受管面不适用,draft-only 终局不变。

Four things ride in those four lines, all of them ruled or ordered by the
dispatch: the three arm preconditions; the maintainer-provenance stamp the
file's own convention requires on a ruled bullet; the per-pair mechanical
reading of limb ② with its exit register (0 limbs legible and carriers agree
· 4 they do not · 3 the environment could not answer, deliberately NOT read
as clean); and the unchanged governed-surface boundary.

Two deliberate narrowings, both measured rather than assumed:

  • The re-scope the card carries: the ruled conditions 1 and 4 named the
    external review chain (a PASS from it, and its stall past a patrol interval).
    The same-day in-seat reform demoted that chain to optional audit, so a chain
    that is no longer a release precondition cannot stall. Condition 1 lands as an
    in-seat at-tier PASS on record; condition 4 has no referent and is not
    encoded. No stall timeout appears in the text.
  • --pair is cited as the reading for limb only. It is a predicate over
    the clause-② carriers and the card's declaration comment; it does not read PR
    check status, so claiming it covers ③ would have been a false mechanical
    claim.

The authorizing rulings, quoted verbatim and untranslated

The line ratchet's own red text requires the ruling quoted in the raising PR,
and the second ruling below orders both quotes here.

1 — the rule. Maintainer, 2026-08-31, director seat summon 7, decision batch
17, on option B (record: #13758, comment 5478594239). It names this file and
this section:

同意

2 — the ceiling raise 57 → 60, taking the FULL encoding (not the 58-line
bare minimum). Maintainer, 2026-09-01, director decision batch A (record: this
card, comment 5486842552):

同意。

Line budget, before and after

filelines beforelines afterbytes beforebytes afterceiling
.claude/skills/pm-dispatch/references/contract-review.md57605,3815,77557 → 60, headroom 0
scripts/pm/check-skill-line-ratchet.mjs1,1561,174not ceilinged (scripts/ carries no row)

Paid in place first, then raised. The one real deletion this surface had:
the downgrade-fuse bullet restated the served-tier READING — which MCP call,
which field, and why self-attestation is not a reading — while carrying a
pointer at platform-readings.md, the file that single-sources exactly that, in
the same breath. The restatement collapses to the pointer it already had:
4 lines / 437 B → 3 lines / 357 B. Nothing operative left the bullet: the
mandatory per-session read, the ⛔ on self-attestation, the mismatch consequence
(no self-clearing; go to the transcript-verified fable review subagent) and the
label-retention rule are all still there.

That leaves a residual of +4 lines, which cannot be paid without deleting a
ruled clause — refused on the state-machine precedent already recorded in
the CEILINGS map, and the nearest candidates were the governed-surface boundary
and the terminal clause, i.e. exactly the text the card forbids weakening. Hence
the raise, which is the ratchet's own prescribed escape and the third use of it
on this file, matching the recording convention of the two same-day precedents
(48 → 51, then 51 → 57): landed count, headroom 0, arithmetic and ruling in the
map comment.

Verification — gate union at HEAD 6557bc1bb

Derived after the final commit with
node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --commands
(exit 0; the tool reads the change set itself from the merge base, three-dot).
Every exit code captured before any pipe.

gateexit
node scripts/check-ci-filter-parity.mjs0
node scripts/check-cross-package-test-inputs.mjs0
node scripts/check-shard-attestation.mjs0
node scripts/check-test-completeness.mjs3 — NOT MEASURED
node scripts/pm/bare-root-worklist.mjs --self-test0
pnpm --filter @objectstack/lint run check:doc-formula-expressions0
pnpm check:agent-test-spelling0
pnpm check:bash32-floor0
pnpm check:cli-command-ids0
pnpm check:cross-package-test-inputs0
pnpm check:doc-authoring0
pnpm check:entry-guard0
pnpm check:parse-guard0
pnpm check:pm-dispatch-gates0
pnpm check:pm-governed-merges0
pnpm check:pm-skill-id-lint0
pnpm check:pm-skill-ratchet0
pnpm check:pnpm-filter-targets0
pnpm check:skill-frame-sync0
pnpm check:watch-hint-literal0

check-test-completeness exits 3 by its own design when run with no saved
turbo run test log — its failure text says so and says to record the local
reading as NOT MEASURED. It is not a red. check:doc-formula-expressions also
answered 3 on the first pass (PREREQUISITE NOT MET@objectstack/formula
and @objectstack/lint were not built in a fresh worktree); both were built and
it was re-run to a real 0.

The line-ratchet verdict lines for this file, verbatim from the gate's own
output at HEAD 6557bc1bb:

✓ check-skill-line-ratchet: .claude/skills/pm-dispatch/references/contract-review.md is 60 lines (ceiling 60; headroom 0).
✓ check-skill-line-ratchet: .claude/skills/pm-dispatch/references/contract-review.md: widest table row is 0 bytes (pin 0; headroom 0).

Reverse verification of the raise, on the committed tree: with the ceiling still
at 57 the same gate printed
✗ … contract-review.md is 60 lines; the ratchet ceiling is 57 and exited 1, so
the ratchet really is reading this edit and the raise is what turns it green —
not a stale count.

Because the diff edits a gate script, that script's own suites were run beyond
the derived family: check-skill-line-ratchet.mjs --self-test (111 cases pass),
plus the three modules that import it —
scripts/check-published-list-mirrors.mjs, scripts/check-skills-token-ratchet.mjs
and scripts/pm/check-dispatch-gates.mjs (1,090 cases) — all exit 0.
node scripts/check-nul-bytes.mjs exit 0 over 7,678 files, and a direct control-byte
scan of both touched files matched nothing.

Boundaries observed

  • Governed surface (.claude/**) ⇒ draft-only. Not flipped ready, not
    armed, not queued; it reaches main only through a human merge or the
    pinned-approval path.
  • No ruled clause was weakened, and no deletion other than the single dedup
    above.
  • The clause is not widened: it covers non-governed code PRs after a recorded
    at-tier PASS, and says so.
  • No issue numbers in operative skill text (check:pm-skill-id-lint green) —
    provenance in the clause is date plus verbatim words.
  • Publishes nothing from any package ⇒ skip-changeset, applied on this PR.

Session: https://claude.ai/code/session_01Msg17tAHJ3jVTYFgHydCm2

Generated by Claude Code


Generated by Claude Code

…t-review.md
The 清标即落地 section stated the release ACTION but carried no walkable
precondition list. It now carries the three arm preconditions — an in-seat
at-tier PASS on record, `needs:contract-review` cleared on both carriers, and
ALL of the PR's checks green (never the required subset) — plus the per-pair
mechanical reading (`check-clause2-carriers --pair`) with its exit register,
the provenance-comment requirement on arm, and the unchanged governed-surface
boundary.
Funded in place by the one real deletion the surface had: the downgrade-fuse
bullet restated the served-tier reading that platform-readings already
single-sources, while carrying a pointer at it in the same breath; that
restatement collapses to the pointer (4 lines to 3). The residual raises the
line ratchet 57 to 60 under the maintainer ruling quoted in the PR body.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Msg17tAHJ3jVTYFgHydCm2
@os-zhuang
os-zhuang marked this pull request as ready for review September 1, 2026 06:34
@os-zhuang
os-zhuang added this pull request to the merge queueSep 1, 2026
Merged via the queue into main with commit ec0c6c2Sep 1, 2026
34 checks passed
@os-zhuang
os-zhuang deleted the claude/issue-13791-stall-takeover-rescope branch September 1, 2026 06:59
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentationImprovements or additions to documentationsize/sskip-changesetPR has no user-facing published change; bypasses the changeset gate

Projects

None yet

Development

Successfully merging this pull request may close these issues.

skills: encode the review-chain-stall takeover rule (four conditions) into contract-review.md's clear-equals-land section

3 participants

@os-sam@os-zhuang@claude
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

skills(pm): encode the clear-equals-land arm preconditions in contract-review.md - #14070

Merged
os-zhuang merged 1 commit into
mainfrom
claude/issue-13791-stall-takeover-rescope
Sep 1, 2026
Merged

skills(pm): encode the clear-equals-land arm preconditions in contract-review.md#14070
os-zhuang merged 1 commit into
mainfrom
claude/issue-13791-stall-takeover-rescope

Conversation

@os-sam

Copy link
Copy Markdown
Collaborator

Fixes#13791

The 清标即落地 (clear-equals-land) section of
.claude/skills/pm-dispatch/references/contract-review.md stated the release
ACTION — PASS, strip both carriers, provenance comment, pre-land check, ready,
arm — but carried no walkable precondition list. Criterion 3 in particular
(every check green, never the required subset) had no home anywhere in the
release path: it existed only as a general enqueue rule in the main skill file.
This PR encodes the criteria shape, under the in-seat regime the same-day
review-chain reform installed.

The clause, as landed (4 lines, 471 B, every line inside the 120-byte cap)

- **落地前检三条**(维护者 2026-08-31「同意」):① 席内契约档 PASS 在案(卡上达档裁决评论);②
`needs:contract-review` 双载体已清;③ PR 全部 check 全绿(⛔ 非 required 子集)。② 逐对机读
`node scripts/pm/check-clause2-carriers.mjs --pair PR-NUMBER`:0 双肢可读且一致 · 4 不一致 · 3 环境答不
了 ⛔ 不作干净。转 ready 同笔留 provenance 评论引该 PASS;受管面不适用,draft-only 终局不变。

Four things ride in those four lines, all of them ruled or ordered by the
dispatch: the three arm preconditions; the maintainer-provenance stamp the
file's own convention requires on a ruled bullet; the per-pair mechanical
reading of limb ② with its exit register (0 limbs legible and carriers agree
· 4 they do not · 3 the environment could not answer, deliberately NOT read
as clean); and the unchanged governed-surface boundary.

Two deliberate narrowings, both measured rather than assumed:

  • The re-scope the card carries: the ruled conditions 1 and 4 named the
    external review chain (a PASS from it, and its stall past a patrol interval).
    The same-day in-seat reform demoted that chain to optional audit, so a chain
    that is no longer a release precondition cannot stall. Condition 1 lands as an
    in-seat at-tier PASS on record; condition 4 has no referent and is not
    encoded. No stall timeout appears in the text.
  • --pair is cited as the reading for limb only. It is a predicate over
    the clause-② carriers and the card's declaration comment; it does not read PR
    check status, so claiming it covers ③ would have been a false mechanical
    claim.

The authorizing rulings, quoted verbatim and untranslated

The line ratchet's own red text requires the ruling quoted in the raising PR,
and the second ruling below orders both quotes here.

1 — the rule. Maintainer, 2026-08-31, director seat summon 7, decision batch
17, on option B (record: #13758, comment 5478594239). It names this file and
this section:

同意

2 — the ceiling raise 57 → 60, taking the FULL encoding (not the 58-line
bare minimum). Maintainer, 2026-09-01, director decision batch A (record: this
card, comment 5486842552):

同意。

Line budget, before and after

filelines beforelines afterbytes beforebytes afterceiling
.claude/skills/pm-dispatch/references/contract-review.md57605,3815,77557 → 60, headroom 0
scripts/pm/check-skill-line-ratchet.mjs1,1561,174not ceilinged (scripts/ carries no row)

Paid in place first, then raised. The one real deletion this surface had:
the downgrade-fuse bullet restated the served-tier READING — which MCP call,
which field, and why self-attestation is not a reading — while carrying a
pointer at platform-readings.md, the file that single-sources exactly that, in
the same breath. The restatement collapses to the pointer it already had:
4 lines / 437 B → 3 lines / 357 B. Nothing operative left the bullet: the
mandatory per-session read, the ⛔ on self-attestation, the mismatch consequence
(no self-clearing; go to the transcript-verified fable review subagent) and the
label-retention rule are all still there.

That leaves a residual of +4 lines, which cannot be paid without deleting a
ruled clause — refused on the state-machine precedent already recorded in
the CEILINGS map, and the nearest candidates were the governed-surface boundary
and the terminal clause, i.e. exactly the text the card forbids weakening. Hence
the raise, which is the ratchet's own prescribed escape and the third use of it
on this file, matching the recording convention of the two same-day precedents
(48 → 51, then 51 → 57): landed count, headroom 0, arithmetic and ruling in the
map comment.

Verification — gate union at HEAD 6557bc1bb

Derived after the final commit with
node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --commands
(exit 0; the tool reads the change set itself from the merge base, three-dot).
Every exit code captured before any pipe.

gateexit
node scripts/check-ci-filter-parity.mjs0
node scripts/check-cross-package-test-inputs.mjs0
node scripts/check-shard-attestation.mjs0
node scripts/check-test-completeness.mjs3 — NOT MEASURED
node scripts/pm/bare-root-worklist.mjs --self-test0
pnpm --filter @objectstack/lint run check:doc-formula-expressions0
pnpm check:agent-test-spelling0
pnpm check:bash32-floor0
pnpm check:cli-command-ids0
pnpm check:cross-package-test-inputs0
pnpm check:doc-authoring0
pnpm check:entry-guard0
pnpm check:parse-guard0
pnpm check:pm-dispatch-gates0
pnpm check:pm-governed-merges0
pnpm check:pm-skill-id-lint0
pnpm check:pm-skill-ratchet0
pnpm check:pnpm-filter-targets0
pnpm check:skill-frame-sync0
pnpm check:watch-hint-literal0

check-test-completeness exits 3 by its own design when run with no saved
turbo run test log — its failure text says so and says to record the local
reading as NOT MEASURED. It is not a red. check:doc-formula-expressions also
answered 3 on the first pass (PREREQUISITE NOT MET@objectstack/formula
and @objectstack/lint were not built in a fresh worktree); both were built and
it was re-run to a real 0.

The line-ratchet verdict lines for this file, verbatim from the gate's own
output at HEAD 6557bc1bb:

✓ check-skill-line-ratchet: .claude/skills/pm-dispatch/references/contract-review.md is 60 lines (ceiling 60; headroom 0).
✓ check-skill-line-ratchet: .claude/skills/pm-dispatch/references/contract-review.md: widest table row is 0 bytes (pin 0; headroom 0).

Reverse verification of the raise, on the committed tree: with the ceiling still
at 57 the same gate printed
✗ … contract-review.md is 60 lines; the ratchet ceiling is 57 and exited 1, so
the ratchet really is reading this edit and the raise is what turns it green —
not a stale count.

Because the diff edits a gate script, that script's own suites were run beyond
the derived family: check-skill-line-ratchet.mjs --self-test (111 cases pass),
plus the three modules that import it —
scripts/check-published-list-mirrors.mjs, scripts/check-skills-token-ratchet.mjs
and scripts/pm/check-dispatch-gates.mjs (1,090 cases) — all exit 0.
node scripts/check-nul-bytes.mjs exit 0 over 7,678 files, and a direct control-byte
scan of both touched files matched nothing.

Boundaries observed

  • Governed surface (.claude/**) ⇒ draft-only. Not flipped ready, not
    armed, not queued; it reaches main only through a human merge or the
    pinned-approval path.
  • No ruled clause was weakened, and no deletion other than the single dedup
    above.
  • The clause is not widened: it covers non-governed code PRs after a recorded
    at-tier PASS, and says so.
  • No issue numbers in operative skill text (check:pm-skill-id-lint green) —
    provenance in the clause is date plus verbatim words.
  • Publishes nothing from any package ⇒ skip-changeset, applied on this PR.

Session: https://claude.ai/code/session_01Msg17tAHJ3jVTYFgHydCm2

Generated by Claude Code


Generated by Claude Code

…t-review.md
The 清标即落地 section stated the release ACTION but carried no walkable
precondition list. It now carries the three arm preconditions — an in-seat
at-tier PASS on record, `needs:contract-review` cleared on both carriers, and
ALL of the PR's checks green (never the required subset) — plus the per-pair
mechanical reading (`check-clause2-carriers --pair`) with its exit register,
the provenance-comment requirement on arm, and the unchanged governed-surface
boundary.
Funded in place by the one real deletion the surface had: the downgrade-fuse
bullet restated the served-tier reading that platform-readings already
single-sources, while carrying a pointer at it in the same breath; that
restatement collapses to the pointer (4 lines to 3). The residual raises the
line ratchet 57 to 60 under the maintainer ruling quoted in the PR body.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Msg17tAHJ3jVTYFgHydCm2
@os-zhuang
os-zhuang marked this pull request as ready for review September 1, 2026 06:34
@os-zhuang
os-zhuang added this pull request to the merge queueSep 1, 2026
Merged via the queue into main with commit ec0c6c2Sep 1, 2026
34 checks passed
@os-zhuang
os-zhuang deleted the claude/issue-13791-stall-takeover-rescope branch September 1, 2026 06:59
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentationImprovements or additions to documentationsize/sskip-changesetPR has no user-facing published change; bypasses the changeset gate

Projects

None yet

Development

Successfully merging this pull request may close these issues.

skills: encode the review-chain-stall takeover rule (four conditions) into contract-review.md's clear-equals-land section

3 participants

@os-sam@os-zhuang@claude
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

skills(pm): encode the clear-equals-land arm preconditions in contract-review.md - #14070

Merged
os-zhuang merged 1 commit into
mainfrom
claude/issue-13791-stall-takeover-rescope
Sep 1, 2026
Merged

skills(pm): encode the clear-equals-land arm preconditions in contract-review.md#14070
os-zhuang merged 1 commit into
mainfrom
claude/issue-13791-stall-takeover-rescope

Conversation

@os-sam

Copy link
Copy Markdown
Collaborator

Fixes#13791

The 清标即落地 (clear-equals-land) section of
.claude/skills/pm-dispatch/references/contract-review.md stated the release
ACTION — PASS, strip both carriers, provenance comment, pre-land check, ready,
arm — but carried no walkable precondition list. Criterion 3 in particular
(every check green, never the required subset) had no home anywhere in the
release path: it existed only as a general enqueue rule in the main skill file.
This PR encodes the criteria shape, under the in-seat regime the same-day
review-chain reform installed.

The clause, as landed (4 lines, 471 B, every line inside the 120-byte cap)

- **落地前检三条**(维护者 2026-08-31「同意」):① 席内契约档 PASS 在案(卡上达档裁决评论);②
`needs:contract-review` 双载体已清;③ PR 全部 check 全绿(⛔ 非 required 子集)。② 逐对机读
`node scripts/pm/check-clause2-carriers.mjs --pair PR-NUMBER`:0 双肢可读且一致 · 4 不一致 · 3 环境答不
了 ⛔ 不作干净。转 ready 同笔留 provenance 评论引该 PASS;受管面不适用,draft-only 终局不变。

Four things ride in those four lines, all of them ruled or ordered by the
dispatch: the three arm preconditions; the maintainer-provenance stamp the
file's own convention requires on a ruled bullet; the per-pair mechanical
reading of limb ② with its exit register (0 limbs legible and carriers agree
· 4 they do not · 3 the environment could not answer, deliberately NOT read
as clean); and the unchanged governed-surface boundary.

Two deliberate narrowings, both measured rather than assumed:

  • The re-scope the card carries: the ruled conditions 1 and 4 named the
    external review chain (a PASS from it, and its stall past a patrol interval).
    The same-day in-seat reform demoted that chain to optional audit, so a chain
    that is no longer a release precondition cannot stall. Condition 1 lands as an
    in-seat at-tier PASS on record; condition 4 has no referent and is not
    encoded. No stall timeout appears in the text.
  • --pair is cited as the reading for limb only. It is a predicate over
    the clause-② carriers and the card's declaration comment; it does not read PR
    check status, so claiming it covers ③ would have been a false mechanical
    claim.

The authorizing rulings, quoted verbatim and untranslated

The line ratchet's own red text requires the ruling quoted in the raising PR,
and the second ruling below orders both quotes here.

1 — the rule. Maintainer, 2026-08-31, director seat summon 7, decision batch
17, on option B (record: #13758, comment 5478594239). It names this file and
this section:

同意

2 — the ceiling raise 57 → 60, taking the FULL encoding (not the 58-line
bare minimum). Maintainer, 2026-09-01, director decision batch A (record: this
card, comment 5486842552):

同意。

Line budget, before and after

filelines beforelines afterbytes beforebytes afterceiling
.claude/skills/pm-dispatch/references/contract-review.md57605,3815,77557 → 60, headroom 0
scripts/pm/check-skill-line-ratchet.mjs1,1561,174not ceilinged (scripts/ carries no row)

Paid in place first, then raised. The one real deletion this surface had:
the downgrade-fuse bullet restated the served-tier READING — which MCP call,
which field, and why self-attestation is not a reading — while carrying a
pointer at platform-readings.md, the file that single-sources exactly that, in
the same breath. The restatement collapses to the pointer it already had:
4 lines / 437 B → 3 lines / 357 B. Nothing operative left the bullet: the
mandatory per-session read, the ⛔ on self-attestation, the mismatch consequence
(no self-clearing; go to the transcript-verified fable review subagent) and the
label-retention rule are all still there.

That leaves a residual of +4 lines, which cannot be paid without deleting a
ruled clause — refused on the state-machine precedent already recorded in
the CEILINGS map, and the nearest candidates were the governed-surface boundary
and the terminal clause, i.e. exactly the text the card forbids weakening. Hence
the raise, which is the ratchet's own prescribed escape and the third use of it
on this file, matching the recording convention of the two same-day precedents
(48 → 51, then 51 → 57): landed count, headroom 0, arithmetic and ruling in the
map comment.

Verification — gate union at HEAD 6557bc1bb

Derived after the final commit with
node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --commands
(exit 0; the tool reads the change set itself from the merge base, three-dot).
Every exit code captured before any pipe.

gateexit
node scripts/check-ci-filter-parity.mjs0
node scripts/check-cross-package-test-inputs.mjs0
node scripts/check-shard-attestation.mjs0
node scripts/check-test-completeness.mjs3 — NOT MEASURED
node scripts/pm/bare-root-worklist.mjs --self-test0
pnpm --filter @objectstack/lint run check:doc-formula-expressions0
pnpm check:agent-test-spelling0
pnpm check:bash32-floor0
pnpm check:cli-command-ids0
pnpm check:cross-package-test-inputs0
pnpm check:doc-authoring0
pnpm check:entry-guard0
pnpm check:parse-guard0
pnpm check:pm-dispatch-gates0
pnpm check:pm-governed-merges0
pnpm check:pm-skill-id-lint0
pnpm check:pm-skill-ratchet0
pnpm check:pnpm-filter-targets0
pnpm check:skill-frame-sync0
pnpm check:watch-hint-literal0

check-test-completeness exits 3 by its own design when run with no saved
turbo run test log — its failure text says so and says to record the local
reading as NOT MEASURED. It is not a red. check:doc-formula-expressions also
answered 3 on the first pass (PREREQUISITE NOT MET@objectstack/formula
and @objectstack/lint were not built in a fresh worktree); both were built and
it was re-run to a real 0.

The line-ratchet verdict lines for this file, verbatim from the gate's own
output at HEAD 6557bc1bb:

✓ check-skill-line-ratchet: .claude/skills/pm-dispatch/references/contract-review.md is 60 lines (ceiling 60; headroom 0).
✓ check-skill-line-ratchet: .claude/skills/pm-dispatch/references/contract-review.md: widest table row is 0 bytes (pin 0; headroom 0).

Reverse verification of the raise, on the committed tree: with the ceiling still
at 57 the same gate printed
✗ … contract-review.md is 60 lines; the ratchet ceiling is 57 and exited 1, so
the ratchet really is reading this edit and the raise is what turns it green —
not a stale count.

Because the diff edits a gate script, that script's own suites were run beyond
the derived family: check-skill-line-ratchet.mjs --self-test (111 cases pass),
plus the three modules that import it —
scripts/check-published-list-mirrors.mjs, scripts/check-skills-token-ratchet.mjs
and scripts/pm/check-dispatch-gates.mjs (1,090 cases) — all exit 0.
node scripts/check-nul-bytes.mjs exit 0 over 7,678 files, and a direct control-byte
scan of both touched files matched nothing.

Boundaries observed

  • Governed surface (.claude/**) ⇒ draft-only. Not flipped ready, not
    armed, not queued; it reaches main only through a human merge or the
    pinned-approval path.
  • No ruled clause was weakened, and no deletion other than the single dedup
    above.
  • The clause is not widened: it covers non-governed code PRs after a recorded
    at-tier PASS, and says so.
  • No issue numbers in operative skill text (check:pm-skill-id-lint green) —
    provenance in the clause is date plus verbatim words.
  • Publishes nothing from any package ⇒ skip-changeset, applied on this PR.

Session: https://claude.ai/code/session_01Msg17tAHJ3jVTYFgHydCm2

Generated by Claude Code


Generated by Claude Code

…t-review.md
The 清标即落地 section stated the release ACTION but carried no walkable
precondition list. It now carries the three arm preconditions — an in-seat
at-tier PASS on record, `needs:contract-review` cleared on both carriers, and
ALL of the PR's checks green (never the required subset) — plus the per-pair
mechanical reading (`check-clause2-carriers --pair`) with its exit register,
the provenance-comment requirement on arm, and the unchanged governed-surface
boundary.
Funded in place by the one real deletion the surface had: the downgrade-fuse
bullet restated the served-tier reading that platform-readings already
single-sources, while carrying a pointer at it in the same breath; that
restatement collapses to the pointer (4 lines to 3). The residual raises the
line ratchet 57 to 60 under the maintainer ruling quoted in the PR body.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Msg17tAHJ3jVTYFgHydCm2
@os-zhuang
os-zhuang marked this pull request as ready for review September 1, 2026 06:34
@os-zhuang
os-zhuang added this pull request to the merge queueSep 1, 2026
Merged via the queue into main with commit ec0c6c2Sep 1, 2026
34 checks passed
@os-zhuang
os-zhuang deleted the claude/issue-13791-stall-takeover-rescope branch September 1, 2026 06:59
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentationImprovements or additions to documentationsize/sskip-changesetPR has no user-facing published change; bypasses the changeset gate

Projects

None yet

Development

Successfully merging this pull request may close these issues.

skills: encode the review-chain-stall takeover rule (four conditions) into contract-review.md's clear-equals-land section

3 participants

@os-sam@os-zhuang@claude
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

skills(pm): encode the clear-equals-land arm preconditions in contract-review.md - #14070

Merged
os-zhuang merged 1 commit into
mainfrom
claude/issue-13791-stall-takeover-rescope
Sep 1, 2026
Merged

skills(pm): encode the clear-equals-land arm preconditions in contract-review.md#14070
os-zhuang merged 1 commit into
mainfrom
claude/issue-13791-stall-takeover-rescope

Conversation

@os-sam

Copy link
Copy Markdown
Collaborator

Fixes#13791

The 清标即落地 (clear-equals-land) section of
.claude/skills/pm-dispatch/references/contract-review.md stated the release
ACTION — PASS, strip both carriers, provenance comment, pre-land check, ready,
arm — but carried no walkable precondition list. Criterion 3 in particular
(every check green, never the required subset) had no home anywhere in the
release path: it existed only as a general enqueue rule in the main skill file.
This PR encodes the criteria shape, under the in-seat regime the same-day
review-chain reform installed.

The clause, as landed (4 lines, 471 B, every line inside the 120-byte cap)

- **落地前检三条**(维护者 2026-08-31「同意」):① 席内契约档 PASS 在案(卡上达档裁决评论);②
`needs:contract-review` 双载体已清;③ PR 全部 check 全绿(⛔ 非 required 子集)。② 逐对机读
`node scripts/pm/check-clause2-carriers.mjs --pair PR-NUMBER`:0 双肢可读且一致 · 4 不一致 · 3 环境答不
了 ⛔ 不作干净。转 ready 同笔留 provenance 评论引该 PASS;受管面不适用,draft-only 终局不变。

Four things ride in those four lines, all of them ruled or ordered by the
dispatch: the three arm preconditions; the maintainer-provenance stamp the
file's own convention requires on a ruled bullet; the per-pair mechanical
reading of limb ② with its exit register (0 limbs legible and carriers agree
· 4 they do not · 3 the environment could not answer, deliberately NOT read
as clean); and the unchanged governed-surface boundary.

Two deliberate narrowings, both measured rather than assumed:

  • The re-scope the card carries: the ruled conditions 1 and 4 named the
    external review chain (a PASS from it, and its stall past a patrol interval).
    The same-day in-seat reform demoted that chain to optional audit, so a chain
    that is no longer a release precondition cannot stall. Condition 1 lands as an
    in-seat at-tier PASS on record; condition 4 has no referent and is not
    encoded. No stall timeout appears in the text.
  • --pair is cited as the reading for limb only. It is a predicate over
    the clause-② carriers and the card's declaration comment; it does not read PR
    check status, so claiming it covers ③ would have been a false mechanical
    claim.

The authorizing rulings, quoted verbatim and untranslated

The line ratchet's own red text requires the ruling quoted in the raising PR,
and the second ruling below orders both quotes here.

1 — the rule. Maintainer, 2026-08-31, director seat summon 7, decision batch
17, on option B (record: #13758, comment 5478594239). It names this file and
this section:

同意

2 — the ceiling raise 57 → 60, taking the FULL encoding (not the 58-line
bare minimum). Maintainer, 2026-09-01, director decision batch A (record: this
card, comment 5486842552):

同意。

Line budget, before and after

filelines beforelines afterbytes beforebytes afterceiling
.claude/skills/pm-dispatch/references/contract-review.md57605,3815,77557 → 60, headroom 0
scripts/pm/check-skill-line-ratchet.mjs1,1561,174not ceilinged (scripts/ carries no row)

Paid in place first, then raised. The one real deletion this surface had:
the downgrade-fuse bullet restated the served-tier READING — which MCP call,
which field, and why self-attestation is not a reading — while carrying a
pointer at platform-readings.md, the file that single-sources exactly that, in
the same breath. The restatement collapses to the pointer it already had:
4 lines / 437 B → 3 lines / 357 B. Nothing operative left the bullet: the
mandatory per-session read, the ⛔ on self-attestation, the mismatch consequence
(no self-clearing; go to the transcript-verified fable review subagent) and the
label-retention rule are all still there.

That leaves a residual of +4 lines, which cannot be paid without deleting a
ruled clause — refused on the state-machine precedent already recorded in
the CEILINGS map, and the nearest candidates were the governed-surface boundary
and the terminal clause, i.e. exactly the text the card forbids weakening. Hence
the raise, which is the ratchet's own prescribed escape and the third use of it
on this file, matching the recording convention of the two same-day precedents
(48 → 51, then 51 → 57): landed count, headroom 0, arithmetic and ruling in the
map comment.

Verification — gate union at HEAD 6557bc1bb

Derived after the final commit with
node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --commands
(exit 0; the tool reads the change set itself from the merge base, three-dot).
Every exit code captured before any pipe.

gateexit
node scripts/check-ci-filter-parity.mjs0
node scripts/check-cross-package-test-inputs.mjs0
node scripts/check-shard-attestation.mjs0
node scripts/check-test-completeness.mjs3 — NOT MEASURED
node scripts/pm/bare-root-worklist.mjs --self-test0
pnpm --filter @objectstack/lint run check:doc-formula-expressions0
pnpm check:agent-test-spelling0
pnpm check:bash32-floor0
pnpm check:cli-command-ids0
pnpm check:cross-package-test-inputs0
pnpm check:doc-authoring0
pnpm check:entry-guard0
pnpm check:parse-guard0
pnpm check:pm-dispatch-gates0
pnpm check:pm-governed-merges0
pnpm check:pm-skill-id-lint0
pnpm check:pm-skill-ratchet0
pnpm check:pnpm-filter-targets0
pnpm check:skill-frame-sync0
pnpm check:watch-hint-literal0

check-test-completeness exits 3 by its own design when run with no saved
turbo run test log — its failure text says so and says to record the local
reading as NOT MEASURED. It is not a red. check:doc-formula-expressions also
answered 3 on the first pass (PREREQUISITE NOT MET@objectstack/formula
and @objectstack/lint were not built in a fresh worktree); both were built and
it was re-run to a real 0.

The line-ratchet verdict lines for this file, verbatim from the gate's own
output at HEAD 6557bc1bb:

✓ check-skill-line-ratchet: .claude/skills/pm-dispatch/references/contract-review.md is 60 lines (ceiling 60; headroom 0).
✓ check-skill-line-ratchet: .claude/skills/pm-dispatch/references/contract-review.md: widest table row is 0 bytes (pin 0; headroom 0).

Reverse verification of the raise, on the committed tree: with the ceiling still
at 57 the same gate printed
✗ … contract-review.md is 60 lines; the ratchet ceiling is 57 and exited 1, so
the ratchet really is reading this edit and the raise is what turns it green —
not a stale count.

Because the diff edits a gate script, that script's own suites were run beyond
the derived family: check-skill-line-ratchet.mjs --self-test (111 cases pass),
plus the three modules that import it —
scripts/check-published-list-mirrors.mjs, scripts/check-skills-token-ratchet.mjs
and scripts/pm/check-dispatch-gates.mjs (1,090 cases) — all exit 0.
node scripts/check-nul-bytes.mjs exit 0 over 7,678 files, and a direct control-byte
scan of both touched files matched nothing.

Boundaries observed

  • Governed surface (.claude/**) ⇒ draft-only. Not flipped ready, not
    armed, not queued; it reaches main only through a human merge or the
    pinned-approval path.
  • No ruled clause was weakened, and no deletion other than the single dedup
    above.
  • The clause is not widened: it covers non-governed code PRs after a recorded
    at-tier PASS, and says so.
  • No issue numbers in operative skill text (check:pm-skill-id-lint green) —
    provenance in the clause is date plus verbatim words.
  • Publishes nothing from any package ⇒ skip-changeset, applied on this PR.

Session: https://claude.ai/code/session_01Msg17tAHJ3jVTYFgHydCm2

Generated by Claude Code


Generated by Claude Code

…t-review.md
The 清标即落地 section stated the release ACTION but carried no walkable
precondition list. It now carries the three arm preconditions — an in-seat
at-tier PASS on record, `needs:contract-review` cleared on both carriers, and
ALL of the PR's checks green (never the required subset) — plus the per-pair
mechanical reading (`check-clause2-carriers --pair`) with its exit register,
the provenance-comment requirement on arm, and the unchanged governed-surface
boundary.
Funded in place by the one real deletion the surface had: the downgrade-fuse
bullet restated the served-tier reading that platform-readings already
single-sources, while carrying a pointer at it in the same breath; that
restatement collapses to the pointer (4 lines to 3). The residual raises the
line ratchet 57 to 60 under the maintainer ruling quoted in the PR body.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Msg17tAHJ3jVTYFgHydCm2
@os-zhuang
os-zhuang marked this pull request as ready for review September 1, 2026 06:34
@os-zhuang
os-zhuang added this pull request to the merge queueSep 1, 2026
Merged via the queue into main with commit ec0c6c2Sep 1, 2026
34 checks passed
@os-zhuang
os-zhuang deleted the claude/issue-13791-stall-takeover-rescope branch September 1, 2026 06:59
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentationImprovements or additions to documentationsize/sskip-changesetPR has no user-facing published change; bypasses the changeset gate

Projects

None yet

Development

Successfully merging this pull request may close these issues.

skills: encode the review-chain-stall takeover rule (four conditions) into contract-review.md's clear-equals-land section

3 participants

@os-sam@os-zhuang@claude
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

skills(pm): encode the clear-equals-land arm preconditions in contract-review.md - #14070

Merged
os-zhuang merged 1 commit into
mainfrom
claude/issue-13791-stall-takeover-rescope
Sep 1, 2026
Merged

skills(pm): encode the clear-equals-land arm preconditions in contract-review.md#14070
os-zhuang merged 1 commit into
mainfrom
claude/issue-13791-stall-takeover-rescope

Conversation

@os-sam

Copy link
Copy Markdown
Collaborator

Fixes#13791

The 清标即落地 (clear-equals-land) section of
.claude/skills/pm-dispatch/references/contract-review.md stated the release
ACTION — PASS, strip both carriers, provenance comment, pre-land check, ready,
arm — but carried no walkable precondition list. Criterion 3 in particular
(every check green, never the required subset) had no home anywhere in the
release path: it existed only as a general enqueue rule in the main skill file.
This PR encodes the criteria shape, under the in-seat regime the same-day
review-chain reform installed.

The clause, as landed (4 lines, 471 B, every line inside the 120-byte cap)

- **落地前检三条**(维护者 2026-08-31「同意」):① 席内契约档 PASS 在案(卡上达档裁决评论);②
`needs:contract-review` 双载体已清;③ PR 全部 check 全绿(⛔ 非 required 子集)。② 逐对机读
`node scripts/pm/check-clause2-carriers.mjs --pair PR-NUMBER`:0 双肢可读且一致 · 4 不一致 · 3 环境答不
了 ⛔ 不作干净。转 ready 同笔留 provenance 评论引该 PASS;受管面不适用,draft-only 终局不变。

Four things ride in those four lines, all of them ruled or ordered by the
dispatch: the three arm preconditions; the maintainer-provenance stamp the
file's own convention requires on a ruled bullet; the per-pair mechanical
reading of limb ② with its exit register (0 limbs legible and carriers agree
· 4 they do not · 3 the environment could not answer, deliberately NOT read
as clean); and the unchanged governed-surface boundary.

Two deliberate narrowings, both measured rather than assumed:

  • The re-scope the card carries: the ruled conditions 1 and 4 named the
    external review chain (a PASS from it, and its stall past a patrol interval).
    The same-day in-seat reform demoted that chain to optional audit, so a chain
    that is no longer a release precondition cannot stall. Condition 1 lands as an
    in-seat at-tier PASS on record; condition 4 has no referent and is not
    encoded. No stall timeout appears in the text.
  • --pair is cited as the reading for limb only. It is a predicate over
    the clause-② carriers and the card's declaration comment; it does not read PR
    check status, so claiming it covers ③ would have been a false mechanical
    claim.

The authorizing rulings, quoted verbatim and untranslated

The line ratchet's own red text requires the ruling quoted in the raising PR,
and the second ruling below orders both quotes here.

1 — the rule. Maintainer, 2026-08-31, director seat summon 7, decision batch
17, on option B (record: #13758, comment 5478594239). It names this file and
this section:

同意

2 — the ceiling raise 57 → 60, taking the FULL encoding (not the 58-line
bare minimum). Maintainer, 2026-09-01, director decision batch A (record: this
card, comment 5486842552):

同意。

Line budget, before and after

filelines beforelines afterbytes beforebytes afterceiling
.claude/skills/pm-dispatch/references/contract-review.md57605,3815,77557 → 60, headroom 0
scripts/pm/check-skill-line-ratchet.mjs1,1561,174not ceilinged (scripts/ carries no row)

Paid in place first, then raised. The one real deletion this surface had:
the downgrade-fuse bullet restated the served-tier READING — which MCP call,
which field, and why self-attestation is not a reading — while carrying a
pointer at platform-readings.md, the file that single-sources exactly that, in
the same breath. The restatement collapses to the pointer it already had:
4 lines / 437 B → 3 lines / 357 B. Nothing operative left the bullet: the
mandatory per-session read, the ⛔ on self-attestation, the mismatch consequence
(no self-clearing; go to the transcript-verified fable review subagent) and the
label-retention rule are all still there.

That leaves a residual of +4 lines, which cannot be paid without deleting a
ruled clause — refused on the state-machine precedent already recorded in
the CEILINGS map, and the nearest candidates were the governed-surface boundary
and the terminal clause, i.e. exactly the text the card forbids weakening. Hence
the raise, which is the ratchet's own prescribed escape and the third use of it
on this file, matching the recording convention of the two same-day precedents
(48 → 51, then 51 → 57): landed count, headroom 0, arithmetic and ruling in the
map comment.

Verification — gate union at HEAD 6557bc1bb

Derived after the final commit with
node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --commands
(exit 0; the tool reads the change set itself from the merge base, three-dot).
Every exit code captured before any pipe.

gateexit
node scripts/check-ci-filter-parity.mjs0
node scripts/check-cross-package-test-inputs.mjs0
node scripts/check-shard-attestation.mjs0
node scripts/check-test-completeness.mjs3 — NOT MEASURED
node scripts/pm/bare-root-worklist.mjs --self-test0
pnpm --filter @objectstack/lint run check:doc-formula-expressions0
pnpm check:agent-test-spelling0
pnpm check:bash32-floor0
pnpm check:cli-command-ids0
pnpm check:cross-package-test-inputs0
pnpm check:doc-authoring0
pnpm check:entry-guard0
pnpm check:parse-guard0
pnpm check:pm-dispatch-gates0
pnpm check:pm-governed-merges0
pnpm check:pm-skill-id-lint0
pnpm check:pm-skill-ratchet0
pnpm check:pnpm-filter-targets0
pnpm check:skill-frame-sync0
pnpm check:watch-hint-literal0

check-test-completeness exits 3 by its own design when run with no saved
turbo run test log — its failure text says so and says to record the local
reading as NOT MEASURED. It is not a red. check:doc-formula-expressions also
answered 3 on the first pass (PREREQUISITE NOT MET@objectstack/formula
and @objectstack/lint were not built in a fresh worktree); both were built and
it was re-run to a real 0.

The line-ratchet verdict lines for this file, verbatim from the gate's own
output at HEAD 6557bc1bb:

✓ check-skill-line-ratchet: .claude/skills/pm-dispatch/references/contract-review.md is 60 lines (ceiling 60; headroom 0).
✓ check-skill-line-ratchet: .claude/skills/pm-dispatch/references/contract-review.md: widest table row is 0 bytes (pin 0; headroom 0).

Reverse verification of the raise, on the committed tree: with the ceiling still
at 57 the same gate printed
✗ … contract-review.md is 60 lines; the ratchet ceiling is 57 and exited 1, so
the ratchet really is reading this edit and the raise is what turns it green —
not a stale count.

Because the diff edits a gate script, that script's own suites were run beyond
the derived family: check-skill-line-ratchet.mjs --self-test (111 cases pass),
plus the three modules that import it —
scripts/check-published-list-mirrors.mjs, scripts/check-skills-token-ratchet.mjs
and scripts/pm/check-dispatch-gates.mjs (1,090 cases) — all exit 0.
node scripts/check-nul-bytes.mjs exit 0 over 7,678 files, and a direct control-byte
scan of both touched files matched nothing.

Boundaries observed

  • Governed surface (.claude/**) ⇒ draft-only. Not flipped ready, not
    armed, not queued; it reaches main only through a human merge or the
    pinned-approval path.
  • No ruled clause was weakened, and no deletion other than the single dedup
    above.
  • The clause is not widened: it covers non-governed code PRs after a recorded
    at-tier PASS, and says so.
  • No issue numbers in operative skill text (check:pm-skill-id-lint green) —
    provenance in the clause is date plus verbatim words.
  • Publishes nothing from any package ⇒ skip-changeset, applied on this PR.

Session: https://claude.ai/code/session_01Msg17tAHJ3jVTYFgHydCm2

Generated by Claude Code


Generated by Claude Code

…t-review.md
The 清标即落地 section stated the release ACTION but carried no walkable
precondition list. It now carries the three arm preconditions — an in-seat
at-tier PASS on record, `needs:contract-review` cleared on both carriers, and
ALL of the PR's checks green (never the required subset) — plus the per-pair
mechanical reading (`check-clause2-carriers --pair`) with its exit register,
the provenance-comment requirement on arm, and the unchanged governed-surface
boundary.
Funded in place by the one real deletion the surface had: the downgrade-fuse
bullet restated the served-tier reading that platform-readings already
single-sources, while carrying a pointer at it in the same breath; that
restatement collapses to the pointer (4 lines to 3). The residual raises the
line ratchet 57 to 60 under the maintainer ruling quoted in the PR body.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Msg17tAHJ3jVTYFgHydCm2
@os-zhuang
os-zhuang marked this pull request as ready for review September 1, 2026 06:34
@os-zhuang
os-zhuang added this pull request to the merge queueSep 1, 2026
Merged via the queue into main with commit ec0c6c2Sep 1, 2026
34 checks passed
@os-zhuang
os-zhuang deleted the claude/issue-13791-stall-takeover-rescope branch September 1, 2026 06:59
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentationImprovements or additions to documentationsize/sskip-changesetPR has no user-facing published change; bypasses the changeset gate

Projects

None yet

Development

Successfully merging this pull request may close these issues.

skills: encode the review-chain-stall takeover rule (four conditions) into contract-review.md's clear-equals-land section

3 participants

@os-sam@os-zhuang@claude
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

skills(pm): encode the clear-equals-land arm preconditions in contract-review.md - #14070

Merged
os-zhuang merged 1 commit into
mainfrom
claude/issue-13791-stall-takeover-rescope
Sep 1, 2026
Merged

skills(pm): encode the clear-equals-land arm preconditions in contract-review.md#14070
os-zhuang merged 1 commit into
mainfrom
claude/issue-13791-stall-takeover-rescope

Conversation

@os-sam

Copy link
Copy Markdown
Collaborator

Fixes#13791

The 清标即落地 (clear-equals-land) section of
.claude/skills/pm-dispatch/references/contract-review.md stated the release
ACTION — PASS, strip both carriers, provenance comment, pre-land check, ready,
arm — but carried no walkable precondition list. Criterion 3 in particular
(every check green, never the required subset) had no home anywhere in the
release path: it existed only as a general enqueue rule in the main skill file.
This PR encodes the criteria shape, under the in-seat regime the same-day
review-chain reform installed.

The clause, as landed (4 lines, 471 B, every line inside the 120-byte cap)

- **落地前检三条**(维护者 2026-08-31「同意」):① 席内契约档 PASS 在案(卡上达档裁决评论);②
`needs:contract-review` 双载体已清;③ PR 全部 check 全绿(⛔ 非 required 子集)。② 逐对机读
`node scripts/pm/check-clause2-carriers.mjs --pair PR-NUMBER`:0 双肢可读且一致 · 4 不一致 · 3 环境答不
了 ⛔ 不作干净。转 ready 同笔留 provenance 评论引该 PASS;受管面不适用,draft-only 终局不变。

Four things ride in those four lines, all of them ruled or ordered by the
dispatch: the three arm preconditions; the maintainer-provenance stamp the
file's own convention requires on a ruled bullet; the per-pair mechanical
reading of limb ② with its exit register (0 limbs legible and carriers agree
· 4 they do not · 3 the environment could not answer, deliberately NOT read
as clean); and the unchanged governed-surface boundary.

Two deliberate narrowings, both measured rather than assumed:

  • The re-scope the card carries: the ruled conditions 1 and 4 named the
    external review chain (a PASS from it, and its stall past a patrol interval).
    The same-day in-seat reform demoted that chain to optional audit, so a chain
    that is no longer a release precondition cannot stall. Condition 1 lands as an
    in-seat at-tier PASS on record; condition 4 has no referent and is not
    encoded. No stall timeout appears in the text.
  • --pair is cited as the reading for limb only. It is a predicate over
    the clause-② carriers and the card's declaration comment; it does not read PR
    check status, so claiming it covers ③ would have been a false mechanical
    claim.

The authorizing rulings, quoted verbatim and untranslated

The line ratchet's own red text requires the ruling quoted in the raising PR,
and the second ruling below orders both quotes here.

1 — the rule. Maintainer, 2026-08-31, director seat summon 7, decision batch
17, on option B (record: #13758, comment 5478594239). It names this file and
this section:

同意

2 — the ceiling raise 57 → 60, taking the FULL encoding (not the 58-line
bare minimum). Maintainer, 2026-09-01, director decision batch A (record: this
card, comment 5486842552):

同意。

Line budget, before and after

filelines beforelines afterbytes beforebytes afterceiling
.claude/skills/pm-dispatch/references/contract-review.md57605,3815,77557 → 60, headroom 0
scripts/pm/check-skill-line-ratchet.mjs1,1561,174not ceilinged (scripts/ carries no row)

Paid in place first, then raised. The one real deletion this surface had:
the downgrade-fuse bullet restated the served-tier READING — which MCP call,
which field, and why self-attestation is not a reading — while carrying a
pointer at platform-readings.md, the file that single-sources exactly that, in
the same breath. The restatement collapses to the pointer it already had:
4 lines / 437 B → 3 lines / 357 B. Nothing operative left the bullet: the
mandatory per-session read, the ⛔ on self-attestation, the mismatch consequence
(no self-clearing; go to the transcript-verified fable review subagent) and the
label-retention rule are all still there.

That leaves a residual of +4 lines, which cannot be paid without deleting a
ruled clause — refused on the state-machine precedent already recorded in
the CEILINGS map, and the nearest candidates were the governed-surface boundary
and the terminal clause, i.e. exactly the text the card forbids weakening. Hence
the raise, which is the ratchet's own prescribed escape and the third use of it
on this file, matching the recording convention of the two same-day precedents
(48 → 51, then 51 → 57): landed count, headroom 0, arithmetic and ruling in the
map comment.

Verification — gate union at HEAD 6557bc1bb

Derived after the final commit with
node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --commands
(exit 0; the tool reads the change set itself from the merge base, three-dot).
Every exit code captured before any pipe.

gateexit
node scripts/check-ci-filter-parity.mjs0
node scripts/check-cross-package-test-inputs.mjs0
node scripts/check-shard-attestation.mjs0
node scripts/check-test-completeness.mjs3 — NOT MEASURED
node scripts/pm/bare-root-worklist.mjs --self-test0
pnpm --filter @objectstack/lint run check:doc-formula-expressions0
pnpm check:agent-test-spelling0
pnpm check:bash32-floor0
pnpm check:cli-command-ids0
pnpm check:cross-package-test-inputs0
pnpm check:doc-authoring0
pnpm check:entry-guard0
pnpm check:parse-guard0
pnpm check:pm-dispatch-gates0
pnpm check:pm-governed-merges0
pnpm check:pm-skill-id-lint0
pnpm check:pm-skill-ratchet0
pnpm check:pnpm-filter-targets0
pnpm check:skill-frame-sync0
pnpm check:watch-hint-literal0

check-test-completeness exits 3 by its own design when run with no saved
turbo run test log — its failure text says so and says to record the local
reading as NOT MEASURED. It is not a red. check:doc-formula-expressions also
answered 3 on the first pass (PREREQUISITE NOT MET@objectstack/formula
and @objectstack/lint were not built in a fresh worktree); both were built and
it was re-run to a real 0.

The line-ratchet verdict lines for this file, verbatim from the gate's own
output at HEAD 6557bc1bb:

✓ check-skill-line-ratchet: .claude/skills/pm-dispatch/references/contract-review.md is 60 lines (ceiling 60; headroom 0).
✓ check-skill-line-ratchet: .claude/skills/pm-dispatch/references/contract-review.md: widest table row is 0 bytes (pin 0; headroom 0).

Reverse verification of the raise, on the committed tree: with the ceiling still
at 57 the same gate printed
✗ … contract-review.md is 60 lines; the ratchet ceiling is 57 and exited 1, so
the ratchet really is reading this edit and the raise is what turns it green —
not a stale count.

Because the diff edits a gate script, that script's own suites were run beyond
the derived family: check-skill-line-ratchet.mjs --self-test (111 cases pass),
plus the three modules that import it —
scripts/check-published-list-mirrors.mjs, scripts/check-skills-token-ratchet.mjs
and scripts/pm/check-dispatch-gates.mjs (1,090 cases) — all exit 0.
node scripts/check-nul-bytes.mjs exit 0 over 7,678 files, and a direct control-byte
scan of both touched files matched nothing.

Boundaries observed

  • Governed surface (.claude/**) ⇒ draft-only. Not flipped ready, not
    armed, not queued; it reaches main only through a human merge or the
    pinned-approval path.
  • No ruled clause was weakened, and no deletion other than the single dedup
    above.
  • The clause is not widened: it covers non-governed code PRs after a recorded
    at-tier PASS, and says so.
  • No issue numbers in operative skill text (check:pm-skill-id-lint green) —
    provenance in the clause is date plus verbatim words.
  • Publishes nothing from any package ⇒ skip-changeset, applied on this PR.

Session: https://claude.ai/code/session_01Msg17tAHJ3jVTYFgHydCm2

Generated by Claude Code


Generated by Claude Code

…t-review.md
The 清标即落地 section stated the release ACTION but carried no walkable
precondition list. It now carries the three arm preconditions — an in-seat
at-tier PASS on record, `needs:contract-review` cleared on both carriers, and
ALL of the PR's checks green (never the required subset) — plus the per-pair
mechanical reading (`check-clause2-carriers --pair`) with its exit register,
the provenance-comment requirement on arm, and the unchanged governed-surface
boundary.
Funded in place by the one real deletion the surface had: the downgrade-fuse
bullet restated the served-tier reading that platform-readings already
single-sources, while carrying a pointer at it in the same breath; that
restatement collapses to the pointer (4 lines to 3). The residual raises the
line ratchet 57 to 60 under the maintainer ruling quoted in the PR body.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Msg17tAHJ3jVTYFgHydCm2
@os-zhuang
os-zhuang marked this pull request as ready for review September 1, 2026 06:34
@os-zhuang
os-zhuang added this pull request to the merge queueSep 1, 2026
Merged via the queue into main with commit ec0c6c2Sep 1, 2026
34 checks passed
@os-zhuang
os-zhuang deleted the claude/issue-13791-stall-takeover-rescope branch September 1, 2026 06:59
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentationImprovements or additions to documentationsize/sskip-changesetPR has no user-facing published change; bypasses the changeset gate

Projects

None yet

Development

Successfully merging this pull request may close these issues.

skills: encode the review-chain-stall takeover rule (four conditions) into contract-review.md's clear-equals-land section

3 participants

@os-sam@os-zhuang@claude