Repository navigation
Commit 453ede3
fix(scripts): the checklist's line-citation limb refuses the comma form and a tilde range (#25340)
<!-- claude-projects-attribution: {"github_login":"os-elon-musk"} -->
_Requested by **Elon** · [project
thread](https://claude.ai/code/project/chan_01WedDzV26nniwxv7jC88B9D?thread=cmsg_01WedDzV26nniwxv7jC88B9DMTMjHLabD7ET8s6UeiyXxh)_
Fixes #24894
Clause-②: no
Metadata-protocol: none
## What changed
`check-platform-checklist`'s line-citation limb now refuses the two
spellings the card measured going through: the comma form (`foo.ts,123`,
`foo.ts,123-140`) and the bare tilde range (`~7354-7368`). Both arrive
as ordinary `line-anchor` findings from the one shared sweep, with the
remedy the limb already names (a `file#symbol` anchor or a file-level
anchor).
- **`scripts/symbol-anchors.mjs`, the comma form.** `LINE_ANCHOR`'s
separator is now a colon (with the optional approximation tilde) or a
comma. It is tight: no space between the path, the comma and the number,
so `foo.test.ts, 12 cases` stays a count. Because it carries its own
path it is a row for every corpus, not an option, and that was measured
first (table below): zero new hits outside the checklist.
- **`scripts/symbol-anchors.mjs`, the tilde range.** A new corpus
declaration, `tildeRangeCitations` (default OFF), and its pattern
`TILDE_RANGE_CITATION`: a tilde, two numbers of at least two digits
joined by a hyphen or an en dash, no whitespace, left side refusing an
identifier character or a colon, right side refusing an identifier
character or a percent sign, and the second number not below the first
(so an approximate month stays silent). It inherits the path named
before it, exactly as the two path-less spellings do. `defineCorpus`
refuses it beside a `docProjection` by the same rule that refuses
`pathlessLineCitations` there, and the message names whichever option
was declared. Line-anchor findings now carry `comma` / `tildeRange`
booleans.
- **`scripts/check-platform-checklist.mjs`.** The corpus declares
`tildeRangeCitations: true`. A finding in one of the two new spellings
that sits inside a `history` array of an area file, or anywhere in
`FOLLOW-UPS.md`, is counted and printed, not judged
(`appendOnlyLineCitation`, keyed on where the finding sits;
`historyLineRanges` walks the JSON with string state so line numbers
survive). It is a filter on the sweep's findings, not a grammar: the
source-read pin D2 (no local citation grammar) still holds. ⛔ It is no
wider than the two spellings: a colon-form citation in a history row is
judged exactly as before. The console line now names the comma form and
the tilde range and prints the append-only count (12 on `main`'s
ledger).
## Why the shared core and not only the checklist's projection
The dispatch preferred a checklist-only change. That route is closed by
this file's own design: the checklist gate carries no line-citation
grammar of its own (self-test D2 reds on one), and the shared core's
header records the 2026-09-01 ruling 「⛔ Do not fork this file for a
second corpus; if a corpus needs behaviour this core lacks, widen the
core」. So the scoping is done the core's way: the path-less spelling is
an opt-in declaration only this corpus makes, and the path-carrying
spelling became a shared row only after it measured zero new hits in
every other corpus. The tilde range is its own declaration rather than a
third row inside `pathlessLineCitations`, because
`check-adr-symbol-anchors` prints that it leaves "the two path-less
spellings" unjudged; folding a third in would make that sentence false.
## Corpus measurement (before any shared pattern moved)
Every corpus registered on the shared core, on `7b047b4483`, with the
real extractor (tilde range forced on for the measurement):
| corpus | comma form (now on for all) | tilde range (if it were on) |
|:--|:--|:--|
| `docs/adr/**` | 0 | 2: one count, one dated read position (ADR-0131) |
| `scripts/**` comment prose | 0 | 3: durations or counts; an
approximate month is refused by the ascending rule |
| `packages/spec/src/**` docblocks | 0 | 0 |
| `isSystem` census page | 0 | 0 |
| platform checklist | 11, all in `FOLLOW-UPS.md` | 1, in a
`records-forms` history row |
Gate verdicts for the four other corpora are byte-identical in their
line-anchor and declined counts before and after (ADR 0 line anchors;
`scripts/**` 0, 11 declined; spec docblocks 0 new, 202 declined, 7
residual; census page OK). `check-issue-citations`, `isystem-census`,
`doc-line-anchors` and `check-react-page-adapter-contract` import no
grammar from the core (`commentProse` / `symbolResolutionClass` only, or
a comment mention), so nothing there moves.
## Red-first proof
The same plant, in `records-forms.json` outside any history row:
`sql-driver.ts#createColumn ~7354-7368 and sql-driver.ts,7354`, applied
and restored by `scripts/ablation-replace.mjs` (blob back to HEAD, `git
diff HEAD` empty, both legs).
- On `main` (`7b047b4483`): `node scripts/check-platform-checklist.mjs`
exits 0 and prints "line citations: 0 survive". This is the escape.
- On this branch: exit 1, and the live control names both: "B5 the live
family carries NO judged line citation … records-forms.json:3871
sql-driver.ts,7354, records-forms.json:3871 ~7354-7368".
- On this branch, a comma citation planted inside a history row's
`change` text: exit 0, append-only count 12 → 13.
## Gates
Head `35c4358`. `node scripts/pm/dispatch-gates.mjs --commands --repo
objectstack-ai/objectstack` derived 34 commands; each ran with its exit
code captured before any pipe and all 34 exit 0, including `pnpm
check:platform-checklist`, `node scripts/symbol-anchors.mjs
--self-test`, `check-scripts-symbol-anchors` and its `--self-test`,
`check-self-test-wired` and `pnpm check:pm-dispatch-gates`. `--ran`
reconciliation: "34 derived famil(ies) accounted for — 34 run, 0
NOT-MEASURED". Seven more ran outside the derivation, all exit 0: the
checklist's `--self-test` and the three other corpus gates with their
`--self-test`s.
- `symbol-anchors` self-test floor 156 → 175 (each new firing spelling
beside the silent neighbour that bounds it, default-off pair,
inheritance, de-duplication, and the projection refusal for the new
option with its data-corpus control).
- Checklist line-citation-binding battery 9 → 18 (D4 declaration; C1–C3,
the card's pins through this corpus's declarations; E1–E5, the
append-only filter both ways on a synthetic document, its not-wider case
included).
- On PR #25323's head (`14056c9`) with this branch's two scripts
overlaid: `pnpm check:platform-checklist` exit 0 (329 items, append-only
count 12) and its `--self-test` exit 0.
`node scripts/pm/check-governed-merges.mjs --branch HEAD`: NOT governed,
337 changed lines. `scripts/` gate files publish nothing, so this PR
carries `skip-changeset`. No package is touched, so no build closure,
package test or typecheck is owed; no test file names either script.
## Acceptance notes
- **Clause-②: no.** The refusal narrows what the QA ledger accepts; that
ledger and these scripts are repo tooling, not a published surface, and
no metadata author's input changes.
- **Append-only scope.** The exemption covers only the two new
spellings, because only they have a measured append-only population (11
+ 1). A colon-form citation quoted in a history row is still judged, as
on `main` (0 today).
- **ADR corpus, noted not filed.** `docs/adr/0131-…md` line 1174 carries
a tilde range (`applyTenantScope (~12016–12066)`), a position dated to
`2514d49f3` in its own sentence. The ADR corpus does not declare
`tildeRangeCitations` and its verdict sentence names only the two
path-less spellings it leaves off; opting that corpus in is a separate
decision with a price (2 hits, one a count).
- The attribution block's first line is an HTML comment, which the
session requires as the body's first line: a declared deviation from
`os-dev.md`'s no-HTML-comment rule (same shape as PR #25323).
- The branch is the harness-designated `claude/project-thread-gdsmhy`,
the one the seat's claim names, rather than a `claude/issue-24894-*`
name. Work was done in a linked worktree (`../objectstack-issue-24894`).
---
_Generated by [Claude
Code](https://claude.ai/code/session_01PPd7QqomCKXskDb8wkVgDV)_
---------
Co-authored-by: Claude <noreply@anthropic.com>1 parent 5e772c7 commit 453ede3
2 files changed
Lines changed: 310 additions & 27 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1129 | 1129 | | |
1130 | 1130 | | |
1131 | 1131 | | |
1132 | | - | |
| 1132 | + | |
| 1133 | + | |
| 1134 | + | |
| 1135 | + | |
| 1136 | + | |
| 1137 | + | |
1133 | 1138 | | |
1134 | 1139 | | |
1135 | 1140 | | |
| |||
1700 | 1705 | | |
1701 | 1706 | | |
1702 | 1707 | | |
| 1708 | + | |
| 1709 | + | |
| 1710 | + | |
| 1711 | + | |
| 1712 | + | |
| 1713 | + | |
| 1714 | + | |
| 1715 | + | |
| 1716 | + | |
| 1717 | + | |
| 1718 | + | |
| 1719 | + | |
| 1720 | + | |
| 1721 | + | |
| 1722 | + | |
| 1723 | + | |
| 1724 | + | |
| 1725 | + | |
| 1726 | + | |
| 1727 | + | |
| 1728 | + | |
| 1729 | + | |
| 1730 | + | |
| 1731 | + | |
| 1732 | + | |
| 1733 | + | |
| 1734 | + | |
| 1735 | + | |
| 1736 | + | |
| 1737 | + | |
| 1738 | + | |
| 1739 | + | |
| 1740 | + | |
| 1741 | + | |
| 1742 | + | |
| 1743 | + | |
| 1744 | + | |
| 1745 | + | |
| 1746 | + | |
| 1747 | + | |
| 1748 | + | |
| 1749 | + | |
| 1750 | + | |
| 1751 | + | |
| 1752 | + | |
| 1753 | + | |
| 1754 | + | |
| 1755 | + | |
| 1756 | + | |
| 1757 | + | |
| 1758 | + | |
| 1759 | + | |
| 1760 | + | |
| 1761 | + | |
| 1762 | + | |
| 1763 | + | |
| 1764 | + | |
| 1765 | + | |
| 1766 | + | |
| 1767 | + | |
| 1768 | + | |
| 1769 | + | |
| 1770 | + | |
| 1771 | + | |
| 1772 | + | |
| 1773 | + | |
| 1774 | + | |
| 1775 | + | |
| 1776 | + | |
| 1777 | + | |
| 1778 | + | |
| 1779 | + | |
| 1780 | + | |
1703 | 1781 | | |
1704 | 1782 | | |
1705 | 1783 | | |
| |||
1735 | 1813 | | |
1736 | 1814 | | |
1737 | 1815 | | |
| 1816 | + | |
| 1817 | + | |
1738 | 1818 | | |
1739 | 1819 | | |
1740 | 1820 | | |
1741 | 1821 | | |
1742 | 1822 | | |
1743 | 1823 | | |
1744 | | - | |
| 1824 | + | |
| 1825 | + | |
| 1826 | + | |
| 1827 | + | |
| 1828 | + | |
1745 | 1829 | | |
1746 | 1830 | | |
1747 | 1831 | | |
| |||
1759 | 1843 | | |
1760 | 1844 | | |
1761 | 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 | + | |
| 1872 | + | |
| 1873 | + | |
| 1874 | + | |
| 1875 | + | |
| 1876 | + | |
| 1877 | + | |
| 1878 | + | |
| 1879 | + | |
| 1880 | + | |
| 1881 | + | |
| 1882 | + | |
| 1883 | + | |
| 1884 | + | |
| 1885 | + | |
| 1886 | + | |
| 1887 | + | |
| 1888 | + | |
| 1889 | + | |
| 1890 | + | |
| 1891 | + | |
| 1892 | + | |
| 1893 | + | |
1762 | 1894 | | |
1763 | 1895 | | |
1764 | 1896 | | |
1765 | | - | |
1766 | | - | |
| 1897 | + | |
| 1898 | + | |
| 1899 | + | |
1767 | 1900 | | |
1768 | 1901 | | |
1769 | 1902 | | |
| |||
1916 | 2049 | | |
1917 | 2050 | | |
1918 | 2051 | | |
| 2052 | + | |
| 2053 | + | |
| 2054 | + | |
| 2055 | + | |
| 2056 | + | |
| 2057 | + | |
1919 | 2058 | | |
1920 | 2059 | | |
1921 | 2060 | | |
| |||
1934 | 2073 | | |
1935 | 2074 | | |
1936 | 2075 | | |
| 2076 | + | |
1937 | 2077 | | |
1938 | 2078 | | |
1939 | 2079 | | |
| |||
3534 | 3674 | | |
3535 | 3675 | | |
3536 | 3676 | | |
| 3677 | + | |
| 3678 | + | |
| 3679 | + | |
| 3680 | + | |
| 3681 | + | |
3537 | 3682 | | |
3538 | 3683 | | |
| 3684 | + | |
3539 | 3685 | | |
3540 | 3686 | | |
3541 | 3687 | | |
| |||
3640 | 3786 | | |
3641 | 3787 | | |
3642 | 3788 | | |
3643 | | - | |
| 3789 | + | |
3644 | 3790 | | |
3645 | 3791 | | |
3646 | 3792 | | |
| |||
0 commit comments