Context — 2026-07-23 white-screen outage
The npm-minor Dependabot group (#9657) bumped vite 8.0.16 → 8.1.5 (rolldown 1.0.3 → 1.1.5). The new bundler emits a broken mui/@emotion chunk under our custom chunk split: the deployed app died at chunk init (TypeError: t is not a function at mui-*.js:1:54) into a blank page, while every HTTP probe stayed 200 and all CI stayed green — the jsdom test suite never executes the built bundle. Fixed by pinning vite back in #9670.
Bisect evidence (clean install + build + real-browser check per step):
| Build |
vite |
Custom chunks |
Result |
| #8330-era main |
8.0.16 |
manualChunks |
✅ boots |
| #9657 / main |
8.1.5 |
manualChunks |
❌ TypeError, blank |
| main |
8.1.5 |
rolldown-native advancedChunks |
❌ same TypeError |
| main |
8.1.5 |
none (default chunking) |
✅ boots |
| main + pin |
8.0.16 |
manualChunks |
✅ boots, mui chunk byte-identical to known-good |
Conclusion: upstream rolldown 1.1.5 codegen bug affecting any custom chunk split over our @mui/@emotion/react graph — not specific to the legacy manualChunks compat path.
Current state (after #9670)
app/package.json: vite exact-pinned to 8.0.16
.github/dependabot.yml: vite ignored for patch/minor/major — fully frozen
Tasks
Acceptance
vite unpinned and following Dependabot again, custom chunk split restored, CI smoke gate proven to catch a broken bundle (test it once against 8.1.5 before unfreezing).
Context — 2026-07-23 white-screen outage
The npm-minor Dependabot group (#9657) bumped vite 8.0.16 → 8.1.5 (rolldown 1.0.3 → 1.1.5). The new bundler emits a broken
mui/@emotionchunk under our custom chunk split: the deployed app died at chunk init (TypeError: t is not a functionatmui-*.js:1:54) into a blank page, while every HTTP probe stayed 200 and all CI stayed green — the jsdom test suite never executes the built bundle. Fixed by pinning vite back in #9670.Bisect evidence (clean install + build + real-browser check per step):
manualChunksmanualChunksadvancedChunksmanualChunksConclusion: upstream rolldown 1.1.5 codegen bug affecting any custom chunk split over our
@mui/@emotion/react graph — not specific to the legacymanualChunkscompat path.Current state (after #9670)
app/package.json:viteexact-pinned to8.0.16.github/dependabot.yml: vite ignored for patch/minor/major — fully frozenTasks
yarn build, load the dist output in a headless browser (playwright) and assert the app mounts with zero console errors. This is the structural fix — any future bundler regression turns CI red instead of shipping a blank page. Add toCI: Tests(or a dedicated job) onapp/changes.TypeError: t is not a functionwhen@mui/*+@emotion/*are grouped into one chunk viamanualChunks/advancedChunks, rolldown 1.1.5. Link the issue here; watch releases."vite": "^8.x", remove the dependabot ignore block, and prefer the rolldown-nativeadvancedChunksconfig over the legacymanualChunksfunction when re-testing (migration draft exists in fix(app): pin vite to 8.0.16 — rolldown 8.1.5 bundle broke anyplot.ai (white-screen outage) #9670's history).Acceptance
vite unpinned and following Dependabot again, custom chunk split restored, CI smoke gate proven to catch a broken bundle (test it once against 8.1.5 before unfreezing).