Skip to content

fix(scripts): the checklist's line-citation limb refuses the comma form and a tilde range - #25340

Merged
objectstack-fleet[bot] merged 2 commits into
mainfrom
claude/project-thread-gdsmhy
Oct 23, 2026
Merged

objectstack-fleet[bot] merged 2 commits into
mainfrom
claude/project-thread-gdsmhy

Conversation

@objectstack-fleet

Copy link
Copy Markdown
Contributor

Requested by Elon · project thread

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-tests.

  • 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 docs(qa): re-author access-security.platform-owner-email-anchor for the Default Organization grant #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 docs(qa): re-author access-security.platform-owner-email-anchor for the Default Organization grant #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

…d-only hits unjudged

Claude-Session: https://claude.ai/code/session_01PPd7QqomCKXskDb8wkVgDV
Co-authored-by: Claude <noreply@anthropic.com>
@objectstack-fleet objectstack-fleet Bot added the skip-changeset PR has no user-facing published change; bypasses the changeset gate label Oct 23, 2026
@objectstack-fleet
objectstack-fleet Bot marked this pull request as ready for review October 23, 2026 06:20
@objectstack-fleet
objectstack-fleet Bot added this pull request to the merge queue Oct 23, 2026
Merged via the queue into main with commit 453ede3 Oct 23, 2026
46 checks passed
@objectstack-fleet
objectstack-fleet Bot deleted the claude/project-thread-gdsmhy branch October 23, 2026 06:46
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size/m skip-changeset PR has no user-facing published change; bypasses the changeset gate

Projects

None yet

2 participants