Repository navigation
Commit 42f8df1
fix(pm): a decorated
Fixes #18764
Clause-②: no
## The defect
`scripts/pm/check-clause2-carriers.mjs` built the governing-claim POOL,
and indexed retractions, by testing the imported `CLAIM_COMMENT_MARKER`
against the RAW comment body. That constant anchors the bare word at
line start and tolerates leading whitespace and one blockquote marker —
nothing else — so a claim a seat wrote as a bolded or backticked
`Claim:` was not SUPERSEDED here, it was never a candidate: not listed,
not rejected, not named anywhere in the record. Meanwhile
`claimGovernance`, imported from the same sibling, has read both
ownership markers through `markerMatches` since #18680, so ONE FUNCTION
held both answers at once — governance saw the bolded claim and the pool
beside it did not.
## The before-reading, re-derived here and not taken from the card
Taken through this file's own offline reader (`--pair-json`), on
`origin/main` `e7eb4e9184` — the before leg was run in the shared
checkout, whose copy of both `scripts/pm/check-clause2-carriers.mjs`
(blob `ccd5ad7c9a`) and `scripts/pm/check-half-states.mjs` (blob
`153d10a015`) is byte-identical at `e7eb4e9184` and at `a7bafc29af`, so
the reading is a reading of this branch's base.
| fixture | BEFORE (`e7eb4e9184`) | AFTER (this branch) |
|---|---|---|
| a bolded `Claim:` carrying its own `Branch:` and `Clause-②: no` | exit
**4**, row **C2 — MISPLACED**; `claim.selected: none — no comment on
this thread carries a line beginning \`Claim:\``; `claim.clause2-line:
(no carrier, so no line was read from one)` | exit **0**;
`claim.selected: 1 comment(s) in the pool`; `claim.clause2-line:
DECLARED \`no\`` |
| the backticked spelling, same lines | exit **4**, row **C2 —
MISPLACED**, identical record | exit **0**, `DECLARED \`no\`` |
| a BARE older claim declaring `yes` beneath a DECORATED newer one
declaring `no` | exit **4**, row **C3**; the OLD claim governs;
`claim.clause2-line: DECLARED \`yes\`` | exit **0**; the decorated newer
claim governs; the older is listed `rejected: 1 … a SUPERSEDED claim`;
`claim.clause2-line: DECLARED \`no\`` |
The third row is the expensive direction and it is why this is not
merely a missing reading: the value the declaration limb hands every
downstream reader FLIPS, and the wrong value produced an adverse C3 row
about a contract-review gate that was never owed.
### One premise of the dispatch is falsified, and it is stated rather
than smoothed over
The escalation's two live bodies (objectui#9660 comment `5721120402`,
objectui#9717 comment `5720184809`, read 2026-09-17T22:02Z) carry **no
`Branch:` directive line at all**. Driven through the pool verbatim,
both read `claim-branch-unparsed` and exit **2** on BOTH sides of this
change — `claim.selected: NONE — the newest claim comment (5721120402 at
2026-09-17T20:57:09Z) parses ZERO branches`. That state is already
correct on `main`, because it is resolved by the sibling's governance
leg, which already reads decorated claims. So the fixtures in the table
above ADD the `Branch:` / `Clause-②` lines: the defect this PR repairs
is the one that only becomes visible once a claim is otherwise complete.
Neither shape ever read `absent`.
## The repair: one path, and it is the sibling's
Both former raw tests now read through
`markerMatches(CLAIM_COMMENT_MARKER, body)`, imported from
`check-half-states.mjs` — the pool (`claimCarrierSelection`) and the
retraction indexer (`claimRetractions`). The bare marker is tried first
inside `markerMatches`, so the change is provably additive: no body that
matched yesterday stops matching.
- No `\*\*` was added to `CLAIM_COMMENT_MARKER`. Decoration is an open
set, so admitting one spelling buys exactly that spelling; the constant
is the protocol's spelling and every reader imports it rather than
restating it.
- No second undecorator was written in this file. That would give this
file a private definition of "decorated" for the sibling to drift from,
which is the failure the card names.
- The near-miss vocabulary (`OWNERSHIP_MARKER_NEAR_MISS_FORMS`) is the
sibling's and is not re-declared here.
- `scripts/pm/check-half-states.mjs` is untouched.
## The retraction stripper, measured against that path — it STAYS, and
that is a reading
`undecorateRetractionLine` (this file) and the sibling's
`undecorateProseLine`-through-`markerMatches` were run over one fixture
set, with the retraction stripper extracted from the shipped source text
rather than retyped. **5 of 12 fixtures read differently:**
| fixture | `undecorateRetractionLine` | `markerMatches` (shared) |
same? |
|---|---|---|---|
| bare `Claim:` | true | true | yes |
| bold | true | true | yes |
| backticks | true | true | yes |
| **underscore emphasis** `__Claim:__` | true | **false** | **NO** |
| leading blockquote | true | true | yes |
| blockquote + bold | true | true | yes |
| **list item (hyphen)** `- Claim:` | true | **false** | **NO** |
| **list item (asterisk)** `* Claim:` | true | **false** | **NO** |
| **sigil prefix** `🚨 Claim:` | true | **false** | **NO** |
| a line that is NOT a marker but starts with the word | false | false |
yes |
| inflected word `Claiming:` | false | false | yes |
| **heading** `## Claim:` | true | **false** | **NO** |
Per the dispatch, the retraction stripper is **kept as is** and is ⛔ NOT
unified by hand. The divergence is load-bearing in both directions,
which is why: the #18373 retraction this file's own battery replays
opens with a leading sigil, and narrowing the retraction path to the
shared reading would stop reading the specimen #18719 landed for;
widening the shared path the other way would make a list item a claim,
which H20 pins as not one. Two strippers, two jobs — now stated in the
file, and pinned, rather than discovered again. The unification question
is for the seat to route; it is not folded in here.
## The pins
A new self-test battery, `#18764: a DECORATED claim ENTERS the pool —
ONE reading, and it is the sibling's`, 24 cases, with
`SELF_TEST_BATTERY_FLOOR` raised by exactly the one battery it adds (30
→ 31). It pins: a bold and a backticked claim ENTER the pool and GOVERN,
with their `Branch:` and `Clause-②` lines read from them; a decorated
NEWER claim supersedes a BARE older one and the value the limb reads
moves with it; the older record is listed SUPERSEDED rather than
dropped; the retraction index sees a decorated claim as retractable by
its own author; the input record names the decorated row it selected, by
id and by date.
The controls are the other half: the constant itself still refuses those
same bodies; a list item, a heading and an underscore-emphasis line are
still not claims; the `Clause-②-correction:` comment does not enter the
pool through the new door either; a bare claim reads exactly as before;
and the two undecoration paths are pinned as the two jobs they are. The
bare-constant pins that assert on the CONSTANT
(`CLAIM_COMMENT_MARKER.test(...)` in the #17366 and #17149 batteries)
are byte-untouched. No network in the self-test.
## Census — report-only, over THIS gate's own population
The population is the one this gate derives: the open PRs of one board
and the cards they deliver, by this file's own `derivePairs`. ⛔ This is
NOT the half-states population the triage scanned (46 cards / 253
comments over two boards).
- **`objectstack-ai/objectstack`, read 2026-09-17T22:43:06Z** — 26 open
PRs, 24 derived pairs, 24 distinct cards, 147 comments read, 0 unread.
[LIT CTRL] bare-marker claim comments in today's pool: **29**. Decorated
claims the shared reading sees and today's pool does not: **0**.
- **`objectstack-ai/objectui`, read 2026-09-17T22:44:02Z** (the board a
seat reaches with `PM_SWEEP_REPO`, named because the escalation's
instances live there) — 14 open PRs, 12 derived pairs, 12 distinct
cards, 69 comments read. [LIT CTRL]: **13**. Decorated claims invisible
to today's pool: **2**.
- card objectui#9629, comment `5721993574` (`os-sales`,
2026-09-17T22:19:38Z), bolded — the card's ONLY claim. Before: pool
empty, declaration `misplaced no` (an adverse C2). After: pool = that
comment, declaration `declared no`.
- card objectui#9317, comment `5653084747` (`claude[bot]`,
2026-09-13T11:51:39Z), backticked — the card's ONLY claim. Before: pool
empty, `claim-branch-unparsed`. After: in the pool, still
`claim-branch-unparsed` — the gate now names the carrier by id instead
of reading the thread as unclaimed.
Claim: enters the governing-claim pool, through the sibling's one reading (#18824)1 parent fbe5e1e commit 42f8df1
1 file changed
Lines changed: 166 additions & 12 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
683 | 683 | | |
684 | 684 | | |
685 | 685 | | |
| 686 | + | |
686 | 687 | | |
687 | 688 | | |
688 | 689 | | |
| |||
781 | 782 | | |
782 | 783 | | |
783 | 784 | | |
| 785 | + | |
784 | 786 | | |
785 | 787 | | |
786 | 788 | | |
| |||
792 | 794 | | |
793 | 795 | | |
794 | 796 | | |
795 | | - | |
796 | | - | |
| 797 | + | |
| 798 | + | |
797 | 799 | | |
798 | 800 | | |
799 | 801 | | |
| |||
1756 | 1758 | | |
1757 | 1759 | | |
1758 | 1760 | | |
1759 | | - | |
| 1761 | + | |
1760 | 1762 | | |
1761 | 1763 | | |
1762 | 1764 | | |
| |||
1791 | 1793 | | |
1792 | 1794 | | |
1793 | 1795 | | |
| 1796 | + | |
| 1797 | + | |
| 1798 | + | |
1794 | 1799 | | |
1795 | 1800 | | |
1796 | 1801 | | |
1797 | 1802 | | |
1798 | 1803 | | |
1799 | 1804 | | |
| 1805 | + | |
| 1806 | + | |
| 1807 | + | |
| 1808 | + | |
| 1809 | + | |
| 1810 | + | |
| 1811 | + | |
| 1812 | + | |
| 1813 | + | |
| 1814 | + | |
| 1815 | + | |
| 1816 | + | |
| 1817 | + | |
| 1818 | + | |
| 1819 | + | |
| 1820 | + | |
| 1821 | + | |
| 1822 | + | |
| 1823 | + | |
| 1824 | + | |
| 1825 | + | |
| 1826 | + | |
| 1827 | + | |
| 1828 | + | |
| 1829 | + | |
| 1830 | + | |
| 1831 | + | |
| 1832 | + | |
| 1833 | + | |
| 1834 | + | |
| 1835 | + | |
| 1836 | + | |
| 1837 | + | |
| 1838 | + | |
| 1839 | + | |
| 1840 | + | |
| 1841 | + | |
| 1842 | + | |
| 1843 | + | |
| 1844 | + | |
| 1845 | + | |
| 1846 | + | |
| 1847 | + | |
| 1848 | + | |
| 1849 | + | |
| 1850 | + | |
| 1851 | + | |
| 1852 | + | |
| 1853 | + | |
| 1854 | + | |
| 1855 | + | |
| 1856 | + | |
| 1857 | + | |
| 1858 | + | |
| 1859 | + | |
| 1860 | + | |
| 1861 | + | |
| 1862 | + | |
| 1863 | + | |
| 1864 | + | |
| 1865 | + | |
| 1866 | + | |
| 1867 | + | |
| 1868 | + | |
| 1869 | + | |
| 1870 | + | |
| 1871 | + | |
1800 | 1872 | | |
1801 | 1873 | | |
1802 | 1874 | | |
| |||
1837 | 1909 | | |
1838 | 1910 | | |
1839 | 1911 | | |
1840 | | - | |
| 1912 | + | |
1841 | 1913 | | |
1842 | 1914 | | |
1843 | 1915 | | |
| |||
1898 | 1970 | | |
1899 | 1971 | | |
1900 | 1972 | | |
1901 | | - | |
1902 | | - | |
1903 | | - | |
1904 | | - | |
1905 | | - | |
1906 | | - | |
1907 | | - | |
| 1973 | + | |
| 1974 | + | |
| 1975 | + | |
| 1976 | + | |
| 1977 | + | |
| 1978 | + | |
| 1979 | + | |
| 1980 | + | |
| 1981 | + | |
| 1982 | + | |
| 1983 | + | |
1908 | 1984 | | |
1909 | 1985 | | |
1910 | 1986 | | |
| |||
8108 | 8184 | | |
8109 | 8185 | | |
8110 | 8186 | | |
| 8187 | + | |
| 8188 | + | |
| 8189 | + | |
| 8190 | + | |
| 8191 | + | |
| 8192 | + | |
| 8193 | + | |
| 8194 | + | |
| 8195 | + | |
| 8196 | + | |
| 8197 | + | |
| 8198 | + | |
| 8199 | + | |
| 8200 | + | |
| 8201 | + | |
| 8202 | + | |
| 8203 | + | |
| 8204 | + | |
| 8205 | + | |
| 8206 | + | |
| 8207 | + | |
| 8208 | + | |
| 8209 | + | |
| 8210 | + | |
| 8211 | + | |
| 8212 | + | |
| 8213 | + | |
| 8214 | + | |
| 8215 | + | |
| 8216 | + | |
| 8217 | + | |
| 8218 | + | |
| 8219 | + | |
| 8220 | + | |
| 8221 | + | |
| 8222 | + | |
| 8223 | + | |
| 8224 | + | |
| 8225 | + | |
| 8226 | + | |
| 8227 | + | |
| 8228 | + | |
| 8229 | + | |
| 8230 | + | |
| 8231 | + | |
| 8232 | + | |
| 8233 | + | |
| 8234 | + | |
| 8235 | + | |
| 8236 | + | |
| 8237 | + | |
| 8238 | + | |
| 8239 | + | |
| 8240 | + | |
| 8241 | + | |
| 8242 | + | |
| 8243 | + | |
| 8244 | + | |
| 8245 | + | |
| 8246 | + | |
| 8247 | + | |
| 8248 | + | |
| 8249 | + | |
| 8250 | + | |
| 8251 | + | |
| 8252 | + | |
| 8253 | + | |
| 8254 | + | |
| 8255 | + | |
| 8256 | + | |
| 8257 | + | |
| 8258 | + | |
| 8259 | + | |
| 8260 | + | |
| 8261 | + | |
| 8262 | + | |
8111 | 8263 | | |
8112 | 8264 | | |
8113 | 8265 | | |
| |||
8176 | 8328 | | |
8177 | 8329 | | |
8178 | 8330 | | |
8179 | | - | |
| 8331 | + | |
| 8332 | + | |
| 8333 | + | |
8180 | 8334 | | |
8181 | 8335 | | |
8182 | 8336 | | |
| |||
0 commit comments