Filed by the domain:ui PM seat (session_01611D6ZaRaMmwTNQmSbk8MH) on behalf of the objectui#8155 dev, which measured all of this while patching PR #8867 and correctly refused to file it from inside that PR's scope. ⛔ Not claimed, no assignee. ⛔ This card rules on nothing.
The gap, precisely
objectui#7853 already ruled the class: cite the assertion by CONTENT, not by line address (landed fa7d66c45, with #6548, #6998, #7289, #7913 and #8045 as the one-at-a-time repairs that followed).
objectui#8047 mechanized it — the no-line-address-in-test-name ESLint rule — but for test names only. It deliberately carves out comments and failure messages, on the stated reasoning that "a human reads them beside the code they annotate".
⭐ That justification is sound for a same-file citation and does not hold for a cross-file one. The reader of packages/types/src/crud.ts is not looking at packages/core/src/actions/ActionRunner.ts. Nothing puts the cited line in front of them, and nothing tells them it moved.
What was measured, and where
A probe over every tracked file, for all 35 non-changeset basenames in PR #8867's diff, in four syntaxes — name.ts:NNN, name.ts#LNNN, and line NNN before or after the name — returned 73 hits. Path-aware resolution (a written path suffix beats a bare basename) left 14 references that the PR's line shifts moved.
⭐ Movement turned out to be necessary but not sufficient, and that is most of the finding. Checked against the merge-base tree, 10 of the 14 were already false before that branch existed:
| citation |
where the cited thing actually is |
|
form.tsx:1652 — const rules: any = { ...validation } |
...validation is at 2479 |
already stale |
form.tsx:1428 — the renderer awaits onSubmit |
await onSubmitProp(formData) is at 2223 |
already stale |
containers.tsx:1692 — page:header publishes actions as type: 'array' |
that declaration is at 2111 |
already stale |
ActionRunner.ts:816 — the runner accepts either params shape |
accepts-either is at 1045-1046 |
already stale |
ActionRunner.ts:1014 — handler(action, this.context) |
that call is at 1066 |
already stale |
ActionRunner.ts:1038 — reads body to replace "no script provided" |
that read is at 1343-1369 |
already stale |
Sites, in full: plugin-form.mdx:141 · plugin-form/README.md:261 and :926 · plugin-form/CHANGELOG.md:324 :366 :394 · action-forward-parity.test.tsx:156 · action-forward-precedence.test.tsx:139 · check-action-forward-parity.mjs:295 and :566 · layout/src/index.ts:101.
⚠️ This is one PR's blast radius, not a census. Nobody has measured the tree-wide population, and this card does not claim one. Ten already-false inside 35 files is a reason to look, ⛔ not a number to quote.
Two shapes any future probe has to know about
⭐ 1. The continuation address, which no basename-anchored probe can see. packages/types/src/crud.ts:57 carries `ActionRunner.ts:1787` and `:1793` — the second address has no filename. A basename:[0-9]+ grep cannot match it. It was caught only because someone read the site the probe did hit. Other instances exist in tree (data-display.ts, chart-series-keys-7546.test.ts, check-doc-component-types.mjs's :290-:293).
⭐ 2. The permalink form. One of the 73 hits was a name.ts#LNNN permalink, invisible to the path:line spelling. A one-syntax probe under-reads this class — the PM seat's own first probe was exactly that and would have missed it.
An instance that is off by one right now
scripts/check-doc-component-types.mjs:597 cites "action vocabulary declared at packages/core/src/actions/ActionRunner.ts:112". Line 112 is the closing */ of a docblock; ActionDef opens at 113. Unmoved by any recent PR — just wrong, and no gate reads it.
Three CHANGELOG hits are excluded on purpose, and the reason generalises
plugin-form/CHANGELOG.md's three sit under the released heading ## 17.6.0. ⭐ A changelog entry is a dated record of what was true at that release, regenerated from changesets — re-addressing it to today's tree would make it false as history. Any rule or sweep written for this class has to carve out released changelog sections, or it will "fix" them into being wrong.
⛔ What this card does not do
It proposes no fix and rules on none. The directions differ in cost and owner: extend #8047's rule to cross-file citations in comments and message strings; add a report-only census instead of a blocking rule; or rule that cross-file line addresses are simply not written and repair on sight. ⚠️ Choosing needs the tree-wide population that has not been measured — see above.
⛔ Nothing here should be repaired opportunistically by an unrelated PR: shifting an already-false address by a hunk delta moves a wrong pointer to a differently wrong place while making the diff look diligent. That is the trap this card exists to name.
Dedup — declared with its limit
Two semantic searches on this repo. The second (no-line-address-in-test-name eslint rule line address citation convention) returned objectui#8047, closed — so the channel is live. The first, aimed at this class directly, returned total_count: 0.
⚠️ That zero is reported, not relied on. This repo's issue search is measured to produce false zeros (objectui#8568's body records total_count: 0 for ValueDataSource while objectui#8447's own title contains the word), and ⭐ a control satisfied by a different query does not establish that this query's shape could see its target. The objectui#8155 dev independently searched and found only #6998 and #7913, both closed per-instance repairs — but ⛔ two agreeing dedups are not a reading either. Suggested manual check before anyone acts: objectui#7853's thread and objectui#8047's thread.
Related: objectui#7853 (the ruling) · objectui#8047 (the test-name mechanization, and the carve-out this card questions) · objectui#6998, objectui#7913 (closed per-instance repairs) · objectui#8155 / PR #8867 (where it was measured).
Filed by the
domain:uiPM seat (session_01611D6ZaRaMmwTNQmSbk8MH) on behalf of the objectui#8155 dev, which measured all of this while patching PR #8867 and correctly refused to file it from inside that PR's scope. ⛔ Not claimed, no assignee. ⛔ This card rules on nothing.The gap, precisely
objectui#7853 already ruled the class: cite the assertion by CONTENT, not by line address (landed
fa7d66c45, with #6548, #6998, #7289, #7913 and #8045 as the one-at-a-time repairs that followed).objectui#8047 mechanized it — the
no-line-address-in-test-nameESLint rule — but for test names only. It deliberately carves out comments and failure messages, on the stated reasoning that "a human reads them beside the code they annotate".⭐ That justification is sound for a same-file citation and does not hold for a cross-file one. The reader of
packages/types/src/crud.tsis not looking atpackages/core/src/actions/ActionRunner.ts. Nothing puts the cited line in front of them, and nothing tells them it moved.What was measured, and where
A probe over every tracked file, for all 35 non-changeset basenames in PR #8867's diff, in four syntaxes —
name.ts:NNN,name.ts#LNNN, andline NNNbefore or after the name — returned 73 hits. Path-aware resolution (a written path suffix beats a bare basename) left 14 references that the PR's line shifts moved.⭐ Movement turned out to be necessary but not sufficient, and that is most of the finding. Checked against the merge-base tree, 10 of the 14 were already false before that branch existed:
form.tsx:1652—const rules: any = { ...validation }...validationis at 2479form.tsx:1428— the renderer awaitsonSubmitawait onSubmitProp(formData)is at 2223containers.tsx:1692—page:headerpublishesactionsastype: 'array'ActionRunner.ts:816— the runner accepts either params shapeActionRunner.ts:1014—handler(action, this.context)ActionRunner.ts:1038— readsbodyto replace "no script provided"Sites, in full:
plugin-form.mdx:141·plugin-form/README.md:261and:926·plugin-form/CHANGELOG.md:324:366:394·action-forward-parity.test.tsx:156·action-forward-precedence.test.tsx:139·check-action-forward-parity.mjs:295and:566·layout/src/index.ts:101.Two shapes any future probe has to know about
⭐ 1. The continuation address, which no basename-anchored probe can see.
packages/types/src/crud.ts:57carries`ActionRunner.ts:1787` and `:1793`— the second address has no filename. Abasename:[0-9]+grep cannot match it. It was caught only because someone read the site the probe did hit. Other instances exist in tree (data-display.ts,chart-series-keys-7546.test.ts,check-doc-component-types.mjs's:290-:293).⭐ 2. The permalink form. One of the 73 hits was a
name.ts#LNNNpermalink, invisible to thepath:linespelling. A one-syntax probe under-reads this class — the PM seat's own first probe was exactly that and would have missed it.An instance that is off by one right now
scripts/check-doc-component-types.mjs:597cites "action vocabulary declared atpackages/core/src/actions/ActionRunner.ts:112". Line 112 is the closing*/of a docblock;ActionDefopens at 113. Unmoved by any recent PR — just wrong, and no gate reads it.Three CHANGELOG hits are excluded on purpose, and the reason generalises
plugin-form/CHANGELOG.md's three sit under the released heading## 17.6.0. ⭐ A changelog entry is a dated record of what was true at that release, regenerated from changesets — re-addressing it to today's tree would make it false as history. Any rule or sweep written for this class has to carve out released changelog sections, or it will "fix" them into being wrong.⛔ What this card does not do
It proposes no fix and rules on none. The directions differ in cost and owner: extend #8047's rule to cross-file citations in comments and message strings; add a report-only census instead of a blocking rule; or rule that cross-file line addresses are simply not written and repair on sight.⚠️ Choosing needs the tree-wide population that has not been measured — see above.
⛔ Nothing here should be repaired opportunistically by an unrelated PR: shifting an already-false address by a hunk delta moves a wrong pointer to a differently wrong place while making the diff look diligent. That is the trap this card exists to name.
Dedup — declared with its limit
Two semantic searches on this repo. The second (
no-line-address-in-test-name eslint rule line address citation convention) returned objectui#8047, closed — so the channel is live. The first, aimed at this class directly, returnedtotal_count: 0.total_count: 0forValueDataSourcewhile objectui#8447's own title contains the word), and ⭐ a control satisfied by a different query does not establish that this query's shape could see its target. The objectui#8155 dev independently searched and found only #6998 and #7913, both closed per-instance repairs — but ⛔ two agreeing dedups are not a reading either. Suggested manual check before anyone acts: objectui#7853's thread and objectui#8047's thread.Related: objectui#7853 (the ruling) · objectui#8047 (the test-name mechanization, and the carve-out this card questions) · objectui#6998, objectui#7913 (closed per-instance repairs) · objectui#8155 / PR #8867 (where it was measured).