Skip to content

[finding] cross-package-test-inputs.mjs still says the gate cannot see an escaping relative IMPORT specifier — #10452 fixed that, and it demanded four declarations for exactly that spelling this round #12934

Description

@os-elon

Found while converting the five comment-mask ledger rows (#12834 / PR #12932). Out of that card's scope, recorded rather than fixed.

The stale claim

scripts/cross-package-test-inputs.mjs, in the @objectstack/cli entry's rationale for declaring the js-comment-mask.mjs pair (around line 250):

js-comment-mask.mjs is the first entry declared for an IMPORT rather than a file read, and it now has TWO importers: [...] This gate did NOT demand the declaration -- its literal collector recognises path-shaped reads, and a relative import specifier that escapes the package is not one of the spellings it knows. Declared by hand because the coupling is real whatever the collector saw [...]

The last two sentences are a present-tense claim about what the collector can and cannot see, and it is no longer true.

Measured, not argued

Converting four more files onto the same module in PR #12932 added exactly one relative import specifier escaping the package to each, and nothing else that escapes. check:cross-package-test-inputs went red on all four, in both of its shapes:

  • @objectstack/plugin-auth names path(s) no declared glob covers — naming scripts/js-comment-mask.mjs and scripts/js-comment-mask.d.mts, and attributing each to packages/plugins/plugin-auth/src/rate-limit-storage-isolation.test.ts. That attribution is the collector reading the import specifier.
  • @objectstack/example-showcase has test(s) that read outside the package but declares no input radius, and the same for @objectstack/driver-sql and @objectstack/runtime — three packages whose only new escaping construct is that import.

The gate also printed the exact inputs list each one needed. So it does not merely see the spelling; it resolves it well enough to prescribe the fix.

Why it went stale

#10452 — "check-cross-package-test-inputs' literal collector cannot see an escaping relative IMPORT specifier, so a test that imports a module outside its package goes undeclared silently" — is closed. The rationale text predates that fix and was never re-read against it. The @objectstack/cli entry's own neighbouring comment already alludes to the change ("it never reached the scan before #10452 relaxed the pre-filter to admit import-only escapes"), so the file contradicts itself two paragraphs apart.

Why this is worth a row rather than a shrug

The claim is load-bearing in the direction that costs something. It tells the next author that a declaration for an import-only coupling is a hand-maintained courtesy the gate will not ask for — which is exactly the belief that produced #7802, and exactly the belief this gate exists to make unnecessary. An author who trusts it will not expect a red, and the ones who did get one this round only learned otherwise by running it.

Same species as #9651 (still calls sync-template-versions.mjs "named in a comment rather than read", which stopped being true), which was filed and accepted on this same file.

Suggested shape

Rewrite those two sentences to say the gate DOES demand it now, and cite #10452 as when that changed. The four entries PR #12932 adds already state the coupling correctly and can serve as the model. Deliberately not done in that PR: it rewrites another entry's recorded rationale, scripts/cross-package-test-inputs.mjs was contended this round (#10062 was dispatched concurrently against it), and a prose correction should be reviewable on its own rather than riding a five-row conversion.

No domain:* label set here — routing is the triage seat's call.

Metadata

Metadata

Assignees

Type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions