@@ -2,16 +2,9 @@ import { defineConfig } from 'vitest/config';
22import { resolveVitestMaxWorkers } from './scripts/lib/vitest-concurrency.ts' ;
33import slowTestGateReporter from './scripts/vitest-slow-test-reporter.ts' ;
44
5- // Files that spawn a real subprocess per case. They used to run one at a time in
6- // their own serialized `subprocess-stub` project so broad file parallelism couldn't
7- // starve a spawn past its internal budget and turn it into a generic timeout.
8- // #1823 is now running that project's own kill criterion: un-serialized here in
9- // `unit-core`'s default forks pool, watched for 20 consecutive CI runs with no
10- // timeout-shaped failure. Revert (restore the project, restore this list to
11- // unit-core's exclude) the moment one appears. Still excluded from the mutation
12- // lane via SERIALIZED_TESTS below regardless of this experiment's outcome —
13- // thousands of mutant reruns times a real spawn per case is timeout noise either way.
14- const SUBPROCESS_STUB_TESTS : readonly string [ ] = [
5+ // A real per-case spawn is timeout noise under thousands of mutant reruns, so the
6+ // mutation lane excludes these tests even though the unit lane runs them normally.
7+ const MUTATION_EXCLUDED_SUBPROCESS_TESTS : readonly string [ ] = [
158 // Stubs npx plus the package managers and spawns a real Metro dev server per case.
169 'src/__tests__/client-metro.test.ts' ,
1710 // The SUT is the subprocess watchdog: a node subprocess per case, one hangs on purpose (#1414).
@@ -56,13 +49,14 @@ const FUZZ_WORKER_TESTS: readonly string[] = [
5649 'scripts/fuzz/corpus-replay.test.ts' ,
5750] ;
5851/**
59- * Every test the mutation lane must not collect: a real per-case subprocess spawn is
60- * timeout noise under thousands of mutant reruns, independent of whether Vitest also
61- * serializes it — `fuzz-worker` still does; `subprocess-stub`'s former members no
62- * longer do (#1823). The two lists above stay module-local: this union is the whole
63- * cross-file surface, and the mutation lane wants exactly it.
52+ * Every test the mutation lane must not collect. The two lists above stay
53+ * module-local: this union is the whole cross-file surface, and the mutation lane
54+ * wants exactly it.
6455 */
65- export const SERIALIZED_TESTS : readonly string [ ] = [ ...SUBPROCESS_STUB_TESTS , ...FUZZ_WORKER_TESTS ] ;
56+ export const MUTATION_EXCLUDED_TESTS : readonly string [ ] = [
57+ ...MUTATION_EXCLUDED_SUBPROCESS_TESTS ,
58+ ...FUZZ_WORKER_TESTS ,
59+ ] ;
6660
6761// Imported by vitest.mutation.config.ts so the two lanes cannot drift: a guard
6862// added here must reach the Stryker sandbox too.
@@ -105,9 +99,8 @@ export default defineConfig({
10599 include : [
106100 'src/**/*.test.ts' ,
107101 'packages/*/src/**/*.test.ts' ,
108- // The subprocess watchdog self-check (#1823): spawns a real node subprocess per
109- // case, one hangs on purpose (#1414). Formerly a `subprocess-stub` member; see
110- // SUBPROCESS_STUB_TESTS above for the kill-criterion experiment this rides.
102+ // The subprocess watchdog self-check: spawns a real node subprocess per case,
103+ // and one hangs on purpose (#1414).
111104 'scripts/fuzz/harness.test.ts' ,
112105 // The validation fuzz generators' expectation gates (#1781 B2): in-process, no
113106 // subprocess or worker, so they ride the fast lane unlike their serialized siblings.
@@ -198,8 +191,7 @@ export default defineConfig({
198191 } ,
199192 {
200193 test : {
201- // Serialized for the same contention reason `subprocess-stub` used to be (#1823):
202- // the per-case watchdog budget is real wall clock. The project exists so the
194+ // Serialized because the per-case watchdog budget is real wall clock. The project exists so the
203195 // coverage run can leave it out (see the comment above), not to run it differently.
204196 name : 'fuzz-worker' ,
205197 include : [ ...FUZZ_WORKER_TESTS ] ,
0 commit comments