Skip to content

fix(pm): the claim reader reads one declared act — Release: through the shared reading, the prose channel retired, cross-author live claims named (row C9) - #19169

Merged
os-tesla merged 4 commits into
mainfrom
claude/issue-18862-claim-reader-one-spelling
Sep 19, 2026
Merged

os-tesla merged 4 commits into
mainfrom
claude/issue-18862-claim-reader-one-spelling

Conversation

@os-tesla

Copy link
Copy Markdown
Collaborator

Fixes #18862
Fixes #18829
Part of #18773 — the READER half only. The governed-text half of ruling A (AGENTS.md's release clause, SKILL.md's yielding line at its line ceiling, the core-rules.md twin) remains open on that card: Tier H, held by the seat, no governed file is touched here.

Clause-②: no

What this PR does

One skills round, one PR on scripts/pm/check-clause2-carriers.mjs, as the three director records of the maintainer's 「同意」 order (batches #154 / #156). The claim arbiter used to infer three ownership acts the protocol never declared — a supersession between seats, a prose retraction, a stripped prefix — and this PR makes it read the declared act only.

  1. Cross-author live claims with no Release: between — row C9 ([finding] the #18828 triage's p1 escalation condition is MET — 12 open cards across both boards carry LIVE Claim: comments from two or more DIFFERENT authors with no retraction between them, and every reader prints the newer one green as a supersession; a cross-session ownership transfer has no reader #18862, ruling b, 5725370464). claimHandovers reads the live, attributable claims (membership decided by claimRetractions, exactly as C8 and governance read it) and names every point where the author changes. A hand-over whose taking claim is dated strictly after CROSS_AUTHOR_CLAIM_ROW_EFFECTIVE_AT = '2026-09-19T03:45Z' (the frozen UTC minute the row was authored — it names the rule's landing window; the seat reconciles pairs between it and the merge by hand) is a C9 row, exit 4, with the ruling's remedy sentence: the holder posts Release:; the taker posts nothing until then; a taker that yields posts its own Release: with 去向 「让先到者」. A hand-over dated at or before the instant is a C9-BEFORE-EFFECTIVE note and a claim.handover record field — listed, informational, never the exit. C8 is unchanged in behaviour; its direction-(b) pin (silent on cross-author) is replaced by the pin that C9 is the reader that speaks — never both for two authors with one claim each.
  2. One undecoration definition ([finding] check-clause2-carriers keeps two undecoration paths that disagree on 5 of 12 spellings — the retraction line strips a leading sigil / list marker / heading / underscore and the shared claim reading refuses them — both directions carry a live specimen, so converging is a protocol decision, not a cleanup #18829, ruling A, 5725677876). The retraction channel reads Release: through the sibling's markerMatches, never through a stripper of its own; the second stripper is deleted from the tree. The sigil-led [finding] check-type-source-resolution's (via …) provenance annotation is FALSE for an include entry naming a bare directory — and that annotation is the doc-block's OWN test for which remedy limb an author is on #18373 shape is a named near-miss row, leading-sigil, in OWNERSHIP_MARKER_NEAR_MISS_FORMS (scripts/pm/check-half-states.mjs, one roster member and its BATTERY68 pins — no predicate, no H-row, no other export, per the claim amendment 5738916776). The twelve spellings the card compared now read the same on every side of the reader (5 disagreements → 0, pinned on the pool and on the retraction index); - Claim: / * Claim: stay not a claim (H20).
  3. The prose retraction channel retires ([finding] the protocol names Release: as the act that takes a card out of a seat's hands, but a claim RETRACTED before work starts is written as prose — the arbiter now reads that prose (PR #18770), and whether the protocol should REQUIRE the Release: spelling for a retraction is a governed-text question nobody has ruled #18773, ruling A, 5725677697 — reader half). The verb roster, the comment-id scan and the act-verb reading PR fix(pm): a retracted claim leaves the governing-claim pool, so a withdrawn claim never governs #18770 taught are deleted, not disabled. A retraction is read only as a Release: line by the claim's own author, later than the claim; it needs no comment id (it names its target by authorship) — that requirement did not exist before and is not added. The [finding] check-type-source-resolution's (via …) provenance annotation is FALSE for an include entry naming a bare directory — and that annotation is the doc-block's OWN test for which remedy limb an author is on #18373 specimen is replayed both ways: the prose line no longer retracts (the withdrawn claim stands again and governs — the cost ruling A priced and accepted, ⛔ C), the same line in the declared act takes it out, and the thread is listed by C9's note rather than read silently.

Measured, not assumed

Verification

  • node scripts/pm/check-clause2-carriers.mjs --self-test: 978 → 1046 cases pass, exit 0 (head 4cb58bc). Battery roster 33 → 34 (#18862: cross-author LIVE claims…, floor 52); #18719 battery rewritten around the one channel (floor 36 → 46 by count); #18764 two-paths pins replaced by the twelve-spelling replay; #18828 direction (b) replaced.
  • node scripts/pm/check-half-states.mjs --self-test: 5043 → 5063 cases pass, exit 0; H2/H47/H66 decorated ownership marker 193/184 → 213/184; roster pin …separator,leading-sigil,heading-bare,bare-word.
  • Reverse verification, both files, through scripts/ablation-replace.mjs (mutation proven on disk, restored to the HEAD blob, git diff HEAD empty after each): judged: dated === 'after',judged: false, in clause2 reds 21 of 1046 cases (every judged-direction pin); id: 'leading-sigil',id: 'leading-sigil-ablated', in the sibling reds 6 of 5063 (the exact-roster pin and the form's own pins).
  • Absence, tree-wide at 4cb58bc: git grep -n undecorateRetractionLine → 0 (control undecorateProseLine → 20); git grep -n RETRACTION_PROSE_ANCHORS → 0 (control RELEASE_COMMENT_MARKER → 64). No control bytes in either file (grep -naP over the C0/DEL range → 0).
  • Lint, narrowed and measured (head 4cb58bc): npx eslint --no-inline-config --format json over the two changed files → exit 0, 2 files, 0 errors, 0 warnings. Population: eslint.config.mjs' **/*.{ts,tsx,mts,cts,js,jsx,mjs,cjs} object minus NEVER_LINTED, so both .mjs files are in it; the count is the JSON output's length (2). Invariance: the config states it 「never enables type-aware linting (no parserOptions.project, no typed @typescript-eslint rules) for ANY file」, so this diff moves no untouched file's verdict — the narrowing excludes nothing.
  • Derived gate families (node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --commands from the merge-base: 42 commands — eight more than the dispatch's list, pulled in by the check-half-states.mjs touch — plus check:pm-governed-merges, named by the dispatch): the sweep was in progress when this PR was opened; every exit code, with the --ran reconciliation, is in the os-dev-report comment on [finding] the #18828 triage's p1 escalation condition is MET — 12 open cards across both boards carry LIVE Claim: comments from two or more DIFFERENT authors with no retraction between them, and every reader prints the newer one green as a supersession; a cross-session ownership transfer has no reader #18862.

Acceptance notes


Generated by Claude Code

os-dev and others added 4 commits September 19, 2026 03:36
…` near-miss form

The retraction reader in check-clause2-carriers.mjs stripped every leading
non-letter/non-digit character before matching, so `🚨 Claim:` read as the
directive there while the shared reading refused it — two undecoration
paths, 5 of 12 spellings apart. Ruling A on the one-definition question
makes the shared claim reading the protocol's definition and turns the
sigil-led #18373 shape into a named near-miss row with its own fixture.

This is that row: one member of OWNERSHIP_MARKER_NEAR_MISS_FORMS, placed
between `separator` and the two #18831 additions, driven by BATTERY68
against its fixture (the #18373 line written in the declared act, sigil
and bold intact) with controls: the bare line reads, a sigil after the
word is not in the way, a sigil-led line without the word is prose, and
the specimen's own prose (a sigil before 撤回) is named by no form because
naming it would mean reading the verb.

Co-authored-by: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01W5y9kRg1YtYaMQYExVLRc2
…read the sibling's way

Two rulings on the claim arbiter, one region. A retraction is a `Release:`
line (batch #156 item 3, letter A): the prose channel PR #18770 taught —
a closed verb roster, a comment-id scan and a stripper of this file's own —
is deleted, not disabled. The protocol's definition of a decorated ownership
line is the shared claim reading (batch #156 item 4, letter A): the
`Release:` channel now reads through markerMatches instead of the raw
constant, so a bolded or backticked release retracts exactly as a bare one.

Measured consequence, replayed in the self-test: two of the twelve
cross-author pairs #18862 counted — objectui#7848 (a `**Release:**`) and
#7924 (a backticked one) — stood only because the raw constant could not
see the holder's release; os-warren's backticked release on #17852 is read
the same way. The #18373 specimen is replayed both ways: the prose line
retracts nothing (the withdrawn claim stands again, the cost ruling A
accepted), the same line in the declared act takes it out, and the
sigil-led spelling is named by the sibling's `leading-sigil` near-miss
row rather than stripped. The twelve spellings the card compared read the
same through the one path on both sides of this file (5 disagreements → 0).

Co-authored-by: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01W5y9kRg1YtYaMQYExVLRc2
…row C9, judged after its effective instant

The protocol sanctions one hand-over: the holder's `Release:` line. The claim
arbiter ranked a second seat's claim under a first seat's live claim as a
SUPERSESSION at exit 0 — measured on twelve open cards across both boards.
Ruling b (batch #154 item 2): one named state beside C8, its own row and
remedy sentence, exit 4, judged only for pairs whose second claim postdates
the rule's landing; earlier pairs listed as informational, never red.

claimHandovers reads the live, attributable claims (claimRetractions is the
membership authority, as for C8 and governance) and names every point where
the author changes; C9 is the row when any taking claim is dated strictly
after CROSS_AUTHOR_CLAIM_ROW_EFFECTIVE_AT (the frozen UTC minute the row was
authored, naming its landing window), and C9-BEFORE-EFFECTIVE the note
otherwise. The record gains claim.handover from the same derivation. C8's
behaviour is unchanged; its direction-(b) pin now says C9 is the reader that
speaks. The twelve measured rows are replayed from the REST rows: ten are
listed today (none judged), two clear by the one-reading change alone, and
every one re-dated forward is judged.

Co-authored-by: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01W5y9kRg1YtYaMQYExVLRc2
…stamp

The +3 day replay left the older pairs before the effective instant; the
oldest real taking claim is 2026-08-24, so sixty days moves every one past
2026-09-19T03:45Z and the pin measures what it says.

Co-authored-by: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01W5y9kRg1YtYaMQYExVLRc2

Copy link
Copy Markdown
Collaborator Author

Contract review

Served-tier: CONTRACT_REVIEW_TIER
Head-sha: 4cb58bcb01161e5eb13c9b49b9c2e3e2e1a173ec

In-seat review by the domain:skills seat at the contract-review tier (served tier read at seating, marker 5738863635) — the record this lane owes on every round it delivers, Clause-②: no included; one record for the fold's three cards (#18862 anchor · #18829 whole · #18773 reader half), which the pair reading names as C6 on all three. Verified against GitHub and the fetched branch (claude/issue-18862-claim-reader-one-spelling at 4cb58bc, merge-base 5d0ee8f), ⛔ not against the report: two files, scripts/pm/check-clause2-carriers.mjs and scripts/pm/check-half-states.mjs, +803 / −250, four commits, every trailer pair model-free. Every hunk in the sibling file is the one roster member leading-sigil, its docblock and its BATTERY68 pins — the surface the claim amendment 5738916776 allowed (no predicate, no H-row, no other export). Every hunk in the arbiter lies in the retraction section, the new C9 section, pairRows / pairNotes / the input record, and the self-test. check-governed-merges.mjs --pr 19169: NOT governed, 1053 ≤ 5000. No governed file is on the branch (git diff origin/main...4cb58bc --stat names the two scripts/pm/** files only).

① Derived judgments

② Semver level

None owed — scripts/pm/** ships in no package; skip-changeset applied and read back (labels on the head: size/xl, skip-changeset).

③ Boundary flags

Implemented-by: claude/issue-18862-claim-reader-one-spelling
Reviewed-by: session_01W5y9kRg1YtYaMQYExVLRc2

VERDICT: PASS


Generated by Claude Code

@os-tesla
os-tesla marked this pull request as ready for review September 19, 2026 04:35
@os-tesla
os-tesla added this pull request to the merge queue Sep 19, 2026
Merged via the queue into main with commit e8667ee Sep 19, 2026
39 checks passed
@os-tesla
os-tesla deleted the claude/issue-18862-claim-reader-one-spelling branch September 19, 2026 05:02
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment