Repository navigation
test(pm): pin the clause-② reader POSITION rule against the merged #17819 specimen - #18071
Conversation
…17819 specimen `readClause2Line` decides "is this a declaration?" by position, and position has always meant LINE-INITIAL modulo decoration — never TOP-OF-BODY. Nothing said so and nothing pinned it, so a census read a merged PR whose body carries `**Clause-②: no**` on line 4 as carrying no declaration at all. Measured on PR #17819's merged head b280ae2: this reader answers declared/`no`, and so does the other gate that reads the limb — `check-changeset-no-major.mjs` imports this same function and applies it to the PR body, which is the `Check Changeset` step the ruling named. That gate DID fire on this pair: it refused the shape the PR was opened with (the key inside a backtick span the line talks on outside of — the #17098 QUOTED-AND-CONTINUED tell) at exit 1, the seat rewrote the span as bold, and the `edited` re-run on the same head read it. No accept set moves: the bold form was already admitted and the quoted-and-continued form was already refused. What lands is the pin — one battery holding both shapes of one sentence from one measured PR — and the docblock paragraph that states the position rule. Claude-Session: https://claude.ai/code/session_01DAcomhvR9kKizeYgg89Vo8 Co-authored-by: Claude <noreply@anthropic.com>
…symmetry A symmetry assertion between two undefined readings is vacuously true, which is exactly the shape an ablation must be able to break. Claude-Session: https://claude.ai/code/session_01DAcomhvR9kKizeYgg89Vo8 Co-authored-by: Claude <noreply@anthropic.com>
Contract reviewHead: ① derived judgments — the card's enforce-or-remove question is answered by measurement, and declared and enforced already agree:
Seat measurements on the head tree ( ② semver: ③ boundary flags: Implemented-by: Verdict: PASS — the question is answered with evidence, the reader is pinned in both directions, nothing widened, nothing refused. Generated by Claude Code |
Fixes #17959
Clause-②: no — comments, one self-test battery and its roster floor; the reader and the accept set are byte-identical.
Measured, not assumed
One reader, two gates.
readClause2Lineis exported here and applied to the card's claim comment;scripts/check-changeset-no-major.mjsimports the same function and applies it togithub.event.pull_request.body— that is theCheck Changesetstep the ruling named. The fixed spelling is a POSITION rule: the key opens its own line modulo decoration (spaces, one blockquote mark, one list bullet, bold, backticks), the value token is first after the colon and is exactlyyesorno, and trailing prose after the token is accepted by design. WHICH line is never consulted.It ran, and it fired. Two
Check Changesetruns on the same merged headb280ae29:34684118255, 2026-09-12T08:47:01Z — FAILURE, exit 1: "LEVEL AXIS: NOT MEASURED", "declaration line: a near miss, not a declaration". PR fix(spec): guard three data lookups against Object.prototype fall-through #17819 was OPENED with the key inside a backtick span the line then talks on outside of — the [finding]check-clause2-carriersreads a key-INITIAL describing line as a declaration — its own self-test asserts the general property "only DESCRIBES ⇒ MISSING", and the fixture pinning it covers only the other half #17098 QUOTED-AND-CONTINUED tell.34684357221, 08:52:36Z (edited, same head) — SUCCESS: "LEVEL AXIS: this PR declares clause-②no", quoting the bold-wrapped line 4.So the card's question 2 answers PRESENT, bold admitted.
check:pm-clause2-carriersowed nothing: thelint.ymlstep runs--self-testonly, and the queue guard carries no clause-② leg.Outcome (a), and it needs no widening. The bold form was already admitted; the quoted-and-continued form was already refused. Widening the spelling to clear that red would have refused the very form this file's own remedy sentence prescribes. Declared and enforced agree, so what lands is the PIN and the sentence that says so.
What landed
references/contract-review.mdunchanged: it states no spelling and no placement convention, so there is no convention line to correct.Evidence
pnpm check:pm-clause2-carriers), before and after.git diff HEADempty. Self-test exit 1, 9 of the 10 new cases red — the tenth is the deliberate single-line CONTROL — plus 5 pre-existing cases that read the same rule.7e185157:node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstackderived 35 families; all 35 run in the foreground with exit codes captured before any pipe, all 0;--ranreconciles 35 derived / 35 run / 0 NOT-MEASURED (derived).pnpm lintover the whole repo (eslint . --no-inline-config): exit 0.check:published-readme-exportsandcheck:dts-closureexit 3 — PREREQUISITE NOT MET, nodist/. NOT MEASURED, not a red; both judge built package type surfaces and this diff touches no package.skip-changeset:scripts/pm/**publishes nothing — no published package'sfiles[]namesscripts, and the root manifest is private.Generated by Claude Code