Uh oh!
There was an error while loading. Please reload this page.
skills(pm): encode the clear-equals-land arm preconditions in contract-review.md - #14070
Merged
Merged
Conversation
…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
This was referenced Sep 1, 2026
os-zhuang
approved these changes
Sep 1, 2026
os-zhuang
marked this pull request as ready for review
September 1, 2026 06:34
os-zhuang
enabled auto-merge
September 1, 2026 06:34
Uh oh!
There was an error while loading. Please reload this page.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for freeto join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes#13791
The 清标即落地 (clear-equals-land) section of
.claude/skills/pm-dispatch/references/contract-review.mdstated the releaseACTION — 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)
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 (
0limbs legible and carriers agree·
4they do not ·3the environment could not answer, deliberately NOT readas clean); and the unchanged governed-surface boundary.
Two deliberate narrowings, both measured rather than assumed:
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.
--pairis cited as the reading for limb ② only. It is a predicate overthe 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
.claude/skills/pm-dispatch/references/contract-review.mdscripts/pm/check-skill-line-ratchet.mjsscripts/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, inthe 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
6557bc1bbDerived 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.
node scripts/check-ci-filter-parity.mjsnode scripts/check-cross-package-test-inputs.mjsnode scripts/check-shard-attestation.mjsnode scripts/check-test-completeness.mjsnode scripts/pm/bare-root-worklist.mjs --self-testpnpm --filter @objectstack/lint run check:doc-formula-expressionspnpm check:agent-test-spellingpnpm check:bash32-floorpnpm check:cli-command-idspnpm check:cross-package-test-inputspnpm check:doc-authoringpnpm check:entry-guardpnpm check:parse-guardpnpm check:pm-dispatch-gatespnpm check:pm-governed-mergespnpm check:pm-skill-id-lintpnpm check:pm-skill-ratchetpnpm check:pnpm-filter-targetspnpm check:skill-frame-syncpnpm check:watch-hint-literalcheck-test-completenessexits 3 by its own design when run with no savedturbo run testlog — its failure text says so and says to record the localreading as NOT MEASURED. It is not a red.
check:doc-formula-expressionsalsoanswered 3 on the first pass (
PREREQUISITE NOT MET—@objectstack/formulaand
@objectstack/lintwere not built in a fresh worktree); both were built andit 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: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 57and exited 1, sothe 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.mjsand
scripts/pm/check-dispatch-gates.mjs(1,090 cases) — all exit 0.node scripts/check-nul-bytes.mjsexit 0 over 7,678 files, and a direct control-bytescan of both touched files matched nothing.
Boundaries observed
.claude/**) ⇒ draft-only. Not flipped ready, notarmed, not queued; it reaches
mainonly through a human merge or thepinned-approval path.
above.
at-tier PASS, and says so.
check:pm-skill-id-lintgreen) —provenance in the clause is date plus verbatim words.
skip-changeset, applied on this PR.Session: https://claude.ai/code/session_01Msg17tAHJ3jVTYFgHydCm2
Generated by Claude Code
Generated by Claude Code