Skip to content

[finding] objectui#8047 mechanized the cite-by-content rule for TEST NAMES only, and its carve-out for comments does not hold across files — 10 cross-file path:line citations measured already false, in one PR's blast radius alone #8875

Description

@os-zhuang

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 syntaxesname.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:1652const 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:1692page: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:1014handler(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).

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

domain:devxobjectui devx stream: fix lands on .github/, scripts/ or release pipeline — devx lane cross-repofindingpm:dispatchedpriority:p2tooling

Type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions