Minimal synthetic reproduction with two concurrent middleware-mode Vite servers, independent caches, React SSR, concurrent shutdown, and test-owned cache removal. No project configuration, credentials, environment files, external service or database is used.
Use Node.js 24.21.0 and npm. Clone/download all Gist files into one directory.
node setup.mjs
npm ci --prefix baseline
npm ci --prefix candidate
node run.mjs baseline
node run.mjs candidateEach command starts a fresh child process and fresh caches. No sleeps, retries,
optimizer disabling or reduced concurrency are used. The parent waits for natural
child termination, then inspects only that run's cache root. Logs and remaining
files are retained under runs/; no global cache cleanup is performed.
| Configuration | Vite | Rolldown | Darwin ARM64 binding | React / react-dom |
|---|---|---|---|---|
| baseline | 8.1.2 | 1.1.3 | 1.1.3 | 19.2.7 |
| candidate | 8.3.4 | 1.2.13 | 1.2.13 | 19.2.7 |
The baseline pins the compatible Rolldown version. The candidate lockfile contains
Vite's normal transitive dependency resolution; there are no overrides.
Both Vite versions support Node 24 through their ^20.19.0 || >=22.12.0 engine range.
After await server.close() and successful removal of each test-owned cache,
the cache stays absent. post-exit-cache-check should contain empty directories
and files; the runner should exit 0.
The child logs original-close:resolved, owned-rm:resolved, and an
after-cleanup event with remaining: []. It then exits naturally with code 0.
The parent subsequently finds recreated server-*/deps_temp_* directories with
optimized React output. The runner exits 1 to report the lifecycle failure.
Earlier isolated checks observed this in three runs per version (six server caches per version). Successful child exit is not evidence of complete cache cleanup.
This reproduction demonstrates late output. It does not itself reproduce
intermittent ENOTEMPTY or native crashes observed in a larger test suite, and
does not establish that those errors have the same cause.
Timing-dependent results may vary. A run with no late output is inconclusive, not proof that an underlying issue has been fixed. Do not publish raw logs from another application; only this synthetic reproduction is intended to be public.