Context
#9221 added npm run import-specifiers:check (wired into test:ci) to keep relative-import specifiers uniform per resolution zone: files under src/**/scripts/**/test/** (Bundler resolution) must be extensionless; files under packages/** (their own NodeNext-resolved, published-ESM tsconfigs) must use .js.
#9239 ("relocate streaming-text, use-streaming-text, typing-indicator from loopover-miner-ui") merged 8 minutes after #9221/#9231, into packages/loopover-ui-kit, with relative imports that don't carry the required .js extension:
$ npm run import-specifiers:check
packages/loopover-ui-kit/src/components/streaming-text.test.tsx: "../hooks/use-streaming-text" — this file's own package is NodeNext-resolved ESM and requires `.js`
packages/loopover-ui-kit/src/components/streaming-text.test.tsx: "./streaming-text" — this file's own package is NodeNext-resolved ESM and requires `.js`
packages/loopover-ui-kit/src/components/streaming-text.tsx: "../hooks/use-streaming-text" — this file's own package is NodeNext-resolved ESM and requires `.js`
packages/loopover-ui-kit/src/components/typing-indicator.test.tsx: "./typing-indicator" — this file's own package is NodeNext-resolved ESM and requires `.js`
packages/loopover-ui-kit/src/hooks/use-streaming-text.test.ts: "./use-streaming-text" — this file's own package is NodeNext-resolved ESM and requires `.js`
Most likely cause: #9239's branch was created/last-CI'd against a main commit that predated #9221/#9231, and nothing required it to be rebased before merging — an ordinary race between two PRs, not a gate bypass.
Requirements
- Add the
.js extension to each relative specifier listed above (and any others import-specifiers:check still reports by the time this is picked up — re-run the command rather than trusting this exact list, in case further drift has landed).
npm run import-specifiers:check exits 0 afterward.
Expected outcome
main is clean against its own drift guard again.
Context
#9221 added
npm run import-specifiers:check(wired intotest:ci) to keep relative-import specifiers uniform per resolution zone: files undersrc/**/scripts/**/test/**(Bundler resolution) must be extensionless; files underpackages/**(their own NodeNext-resolved, published-ESM tsconfigs) must use.js.#9239 ("relocate streaming-text, use-streaming-text, typing-indicator from loopover-miner-ui") merged 8 minutes after #9221/#9231, into
packages/loopover-ui-kit, with relative imports that don't carry the required.jsextension:Most likely cause: #9239's branch was created/last-CI'd against a
maincommit that predated #9221/#9231, and nothing required it to be rebased before merging — an ordinary race between two PRs, not a gate bypass.Requirements
.jsextension to each relative specifier listed above (and any othersimport-specifiers:checkstill reports by the time this is picked up — re-run the command rather than trusting this exact list, in case further drift has landed).npm run import-specifiers:checkexits 0 afterward.Expected outcome
mainis clean against its own drift guard again.