From d2aebfb7d3f7303c2e5a14ca7bb0767622a43905 Mon Sep 17 00:00:00 2001 From: Claude Date: Sat, 19 Sep 2026 11:46:31 +0000 Subject: [PATCH] chore(devx): migrate six scripts/** line citations to file-level anchors Third round of the scripts/** unresolvable-citation migration, devx-lane slice only. All three cited targets resolve to exactly one tracked file, so each is repaired by the gate's own form: the file named as a file-level anchor, the number kept beside it as data. No digit is repaired or repointed. - check-changeset-no-major.mjs: date-range-presets.ts:101 resolves to packages/spec/src/data/date-range-presets.ts (the only tracked file of that basename; line 101 sits inside the TSDoc block the prose cites). - cross-package-test-inputs.mjs: the three bare continuations :102, :92 and :484-485 all belong to packages/spec/src/shared/retired-key-migrate-sentence.test.ts, whose PUBLISHED_SKILLS_ROOT is still on line 102, the "plus every .md file under skills/" sentence still on 92, and the skills:-prefixed push still on 484-485. - ts-parse.mjs: tenant-audit-census.mjs:459 and its :723 continuation resolve to scripts/tenant-audit-census.mjs, the only tracked file of that basename -- it carries both the .replace collapse and the synthetic `type CensusReceiver = ${typeText}` alias (both drifted off the cited lines, which is exactly why they are kept as dated data). The gate's header record is corrected in the same edit, as both prior rounds did: it claimed a residual of 8 and named holders that have since merged, while the live command printed 18. That regrowth -- 8 back up to 18 between rounds -- is the reading worth keeping, and the header now says so. --list-unresolvable drops 18 -> 12; the remaining 12 are byte-identical and untouched, every one of them on another seat's surface. judgeUntrackedLineAnchors stays false per the #15809 fence. Claude-Session: https://claude.ai/code/session_017ef78bLdybu3AffehKkhfk Co-authored-by: Claude --- scripts/check-changeset-no-major.mjs | 3 ++- scripts/check-scripts-symbol-anchors.mjs | 28 +++++++++++++++++------- scripts/cross-package-test-inputs.mjs | 11 +++++----- scripts/ts-parse.mjs | 7 +++--- 4 files changed, 32 insertions(+), 17 deletions(-) diff --git a/scripts/check-changeset-no-major.mjs b/scripts/check-changeset-no-major.mjs index baa38917fe8..684f869f0cb 100644 --- a/scripts/check-changeset-no-major.mjs +++ b/scripts/check-changeset-no-major.mjs @@ -919,7 +919,8 @@ export function render(result) { // * PR #16347 (head `23443ce169af`) — `@objectstack/lint` graded `minor`, and // that is where the widening is (a new field-typed refusal arm on // `filter-preset-comparand`); `@objectstack/spec` graded `patch`, and what -// it received is ONE re-worded TSDoc comment at `date-range-presets.ts:101`. +// it received is ONE re-worded TSDoc comment in +// `packages/spec/src/data/date-range-presets.ts` (line 101 as measured). // The gate refused, and it refused the SPEC line — the package that did not // grow — while never naming the package that did. // diff --git a/scripts/check-scripts-symbol-anchors.mjs b/scripts/check-scripts-symbol-anchors.mjs index 68940d132cb..ed49c51adff 100644 --- a/scripts/check-scripts-symbol-anchors.mjs +++ b/scripts/check-scripts-symbol-anchors.mjs @@ -76,14 +76,26 @@ * second round (#15809, still) migrated the 7 of those 15 whose holders had * by then merged -- `check-docs-section-name.mjs` and * `docs-audit/affected-docs.mjs` (3 each) and `check-type-check-coverage.mjs` - * (1) -- leaving 8, again every one held OPEN and none an ambiguity: 4 in - * `check-system-context-census.mjs` and 3 in `cross-package-test-inputs.mjs` - * (PR #16215), 1 in `pm/check-half-states.mjs` (PR #16202). Both counts are - * DATED readings; `--list-unresolvable` is the live one. ⚠️ It is why the - * flag is still `false`: the fence #15809 was dispatched under is that it flips - * only when the residual is ZERO and a self-test pins the flip, and a residual - * of 8 would make this gate permanently red for the length of somebody else's - * pull request. `--list-unresolvable` prints the residual so the next author + * (1) -- leaving 8, again every one held OPEN and none an ambiguity. + * + * ⚠️ THE RESIDUAL IS NOT A BURN-DOWN -- IT REGROWS. When a third round + * (#15809, still) was dispatched the same command printed 18, not 8: gate + * header prose written in between had added citations faster than round two + * removed them. That round migrated 6 of the 18 -- one in + * `check-changeset-no-major.mjs`, three in `cross-package-test-inputs.mjs`, + * two in `ts-parse.mjs` -- leaving 12, and ⛛ every one of those 12 sits on + * another seat's surface (the `pm` patrol instruments, the governed-surface + * audit, and `check-spec-docblock-symbol-anchors.mjs`, whose SUBJECT is + * `packages/spec` docblocks), so that round ⛔ judged none of them. Every + * count here is a DATED reading; `--list-unresolvable` is the live one. ⚠️ It + * is why the flag is still `false`: the fence #15809 was dispatched under is + * that it flips only when the residual is ZERO and a self-test pins the flip, + * and a residual of 12 would make this gate permanently red for the length of + * somebody else's pull request. ⭐ A residual that regrows is itself the + * question the card leaves to triage: flipping at zero flips into a gate that + * reds on the next author's first bare citation, so what the flag needs is a + * remedy for an unbindable abbreviation, not a smaller number. + * `--list-unresolvable` prints the residual so the next author * inherits a worklist rather than a count; the day it prints nothing, the flag * is a one-line change with a case to pin it. * diff --git a/scripts/cross-package-test-inputs.mjs b/scripts/cross-package-test-inputs.mjs index c0e8de4622c..b2b9cb54b56 100644 --- a/scripts/cross-package-test-inputs.mjs +++ b/scripts/cross-package-test-inputs.mjs @@ -160,11 +160,12 @@ export const CROSS_PACKAGE_TEST_INPUTS = { // instead would re-assert the rule and see nothing about what is // checked in. // - // src/shared/retired-key-migrate-sentence.test.ts also reads this - // root (`PUBLISHED_SKILLS_ROOT`, `:102`) as the second corpus for its - // widened population (#10848, see the `.claude` entry above) — "plus - // every `.md` file under `skills/`" (`:92`), emitted as - // `skills:`-prefixed entries (`:484-485`). + // `packages/spec/src/shared/retired-key-migrate-sentence.test.ts` also + // reads this root (`PUBLISHED_SKILLS_ROOT`, line 102 as measured) as the + // second corpus for its widened population (#10848, see the `.claude` + // entry above) — "plus every `.md` file under `skills/`" (line 92 as + // measured), emitted as `skills:`-prefixed entries (lines 484-485 as + // measured). // // The whole subtree rather than `skills/*/references/_index.md`: the test // reads the DIRECTORY too (a new skill dir changes its verdict), and a diff --git a/scripts/ts-parse.mjs b/scripts/ts-parse.mjs index be83f4e875d..10fa9126099 100644 --- a/scripts/ts-parse.mjs +++ b/scripts/ts-parse.mjs @@ -1137,9 +1137,10 @@ export function selfTest() { // ⭐⭐ THE FOURTH DOOR. The fixtures are the census's own round trip, spelled // the way the census spells it: a receiver type authored across lines, put - // through `.replace(/\s+/g, ' ')` -- the collapse at - // `tenant-audit-census.mjs:459` -- and wrapped in the synthetic alias its - // `:723` builds. Measured 2026-09-18 on TypeScript 6.0.3: the AUTHORED + // through `.replace(/\s+/g, ' ')` -- the collapse in + // `scripts/tenant-audit-census.mjs` (line 459 as measured) -- and wrapped + // in the synthetic alias its line 723 (as measured) builds. Measured + // 2026-09-18 on TypeScript 6.0.3: the AUTHORED // spelling is legal TypeScript (0 diagnostics), the COLLAPSED one is not // (1: "';' expected"), and the SEMICOLON spelling is the card's lit control. // All three are held here, because only the set of them says the defect is