You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
ci: 20 .test.cjs suites run in no known runner #3560
Found while wiring the #3552 guard: 20 .test.cjs files match no runner. Root Jest testMatch covers only .js/.mjs/.ts; nested jest runners use default match (no .cjs); only release-agent and prompt-engineer-agent run node --test (covering 6 of the 20).
Uncovered files (verified 2026-09-24: absent from root --listTests, no owning script found)
Covered elsewhere (no action): release-agent (6) and prompt-engineer-agent via package-local node --test.
Proposal
Decide per file: migrate to .test.js under root Jest, or wire the owning package's runner into CI. The #3552 wiring guard (scripts/validation/__tests__/test-wiring.test.js) explicitly scopes .cjs out until this is decided, so the gap stays visible instead of silently absorbed.
Acceptance
Every file above either runs in a gated runner or is deleted/moved with reason
Re-measured on develop at cb955e47dd, each of the 20 tracked *.test.cjs files in its own Jest process.
3 pass · 16 fail · 1 kills the runner with no summary. 19 failed / 99 passed / 118 total.
Full per-suite table and the two additional defects are in #3484. Three findings bear directly on this issue's proposal:
1. The proposal's two options do not resolve this. Migrating to .test.js does not help a suite that fails at module load before registering a test, and 11 of the 16 failures are exactly that. Wiring a package-local node --test runner does not help a file that calls process.exit() mid-run, which is what merge-entries.test.cjs does at line 223. Both of those need the suite fixed first. Neither option is blocked by runner availability.
2. testMatch alone is not the whole fix..jest.config.cjs's transform pattern '^.+\\.(js|mjs|ts|tsx|jsx)?$' does not include cjs, so these files are not transformed even once matched. Anything that widens the runner has to widen that too.
3. The coverage claim in this issue still holds. The 20 files are still absent from root --listTests, and release-agent and prompt-engineer-agent still cover 6 of them via node --test. Nothing here has changed that.
Proposed duplicate
Proposing #3484 wins and this one closes as the duplicate. #3484 states the defect precisely, carries a testable acceptance criterion ("--listTests includes every tracked *.test.cjs, and all of them pass"), and now holds the per-suite measurement. This issue frames the same 20 files from the runner-ownership angle and proposes an approach this measurement shows is premature.
I am not closing either issue — the choice is the maintainer's.
Context from #3711 (merged as 907442298): before it, bare npx jest found no configuration and fell back to Jest's built-in defaults, which did match the 20 *.test.cjs suites. With the new root jest.config.cjs forwarding to .jest.config.cjs, bare Jest now discovers exactly what the intended configuration does, and that configuration's testMatch does not include .cjs test files. So these suites are still not run by npm test, and bare Jest no longer picks them up either. This issue is unchanged: they still need a decision to be included in testMatch (and the failing ones fixed) or run by their own runner.
Activity
linear-code commentedon Sep 24, 2026
GIT-2342
fix(test): portable nested runner, wiring guard, harness alignment (#…
fix: test - load ESM sources that use import.meta.url under Jest (#3472…
eleshar commentedon Oct 1, 2026
Re-measured on
developatcb955e47dd, each of the 20 tracked*.test.cjsfiles in its own Jest process.3 pass · 16 fail · 1 kills the runner with no summary. 19 failed / 99 passed / 118 total.
Full per-suite table and the two additional defects are in #3484. Three findings bear directly on this issue's proposal:
1. The proposal's two options do not resolve this. Migrating to
.test.jsdoes not help a suite that fails at module load before registering a test, and 11 of the 16 failures are exactly that. Wiring a package-localnode --testrunner does not help a file that callsprocess.exit()mid-run, which is whatmerge-entries.test.cjsdoes at line 223. Both of those need the suite fixed first. Neither option is blocked by runner availability.2.
testMatchalone is not the whole fix..jest.config.cjs's transform pattern'^.+\\.(js|mjs|ts|tsx|jsx)?$'does not includecjs, so these files are not transformed even once matched. Anything that widens the runner has to widen that too.3. The coverage claim in this issue still holds. The 20 files are still absent from root
--listTests, andrelease-agentandprompt-engineer-agentstill cover 6 of them vianode --test. Nothing here has changed that.Proposed duplicate
Proposing #3484 wins and this one closes as the duplicate. #3484 states the defect precisely, carries a testable acceptance criterion ("
--listTestsincludes every tracked*.test.cjs, and all of them pass"), and now holds the per-suite measurement. This issue frames the same 20 files from the runner-ownership angle and proposes an approach this measurement shows is premature.I am not closing either issue — the choice is the maintainer's.
eleshar commentedon Oct 3, 2026
Context from #3711 (merged as
907442298): before it, barenpx jestfound no configuration and fell back to Jest's built-in defaults, which did match the 20*.test.cjssuites. With the new rootjest.config.cjsforwarding to.jest.config.cjs, bare Jest now discovers exactly what the intended configuration does, and that configuration'stestMatchdoes not include.cjstest files. So these suites are still not run bynpm test, and bare Jest no longer picks them up either. This issue is unchanged: they still need a decision to be included intestMatch(and the failing ones fixed) or run by their own runner.