Conversation
Vite 8 pre-bundles deps with Rolldown/Oxc, not esbuild, so the esbuild destructuring-lowering workaround (kolu#1387) is obsolete and the option is deprecated. build.target esnext is retained for production output.
Vite 8 (Rolldown/Oxc) cannot parse raw JSX from an externalized source .tsx the way Vite 6's esbuild did. Pure-logic client tests pulled solid-pierre's CodeView.tsx into their graph only because ancestorDirectoryPaths was imported from the component barrel. Expose pathReconcile via a ./paths subpath so pure consumers (fileSearch, lineRef) no longer drag in a Solid component.
Drop the barrel re-export so the pure helper is reachable only via @kolu/solid-pierre/paths, making the pure-consumers-don't-pull-in-JSX property structural. Agreed by the lowy ⇄ hickey lens debate (finding lowy-2, raised by lowy). Not pushed or merged.
…figs Keep only the terse build.target line in the four example vite configs; the single authoritative rationale stays in packages/client/vite.config.ts. Agreed by the lowy ⇄ hickey lens debate (finding hickey-3, raised by hickey). Not pushed or merged.
⚖️ Lowy ⇄ Hickey lens debate✅ Consensus after 1 round(s) · lowy + hickey · base Independent findings: lowy=4, hickey=3 Applied (3)
Agreed — no change (4)
|
Codex ⇄ Claude debate✅ Consensus after 1 round(s) · codex reviewed at Round 1codex — approved: No findings. I reviewed the diff against e6bde5d, including the Vite 8.1 package and lockfile updates, the Findings:
claude — (no author turn this round) (no author turn — the debate ended this round) |
👮 Code-police
All clear. The source-level changes are the Vite 8 config migration ( |
EvidenceThis is a dev-tooling upgrade: the experimental bundled dev mode is dev-only and the production Cold page load — bundled dev mode on vs off
~7× faster cold page load and ~100× fewer dev requests — Rolldown serves the app as one bundle instead of streaming 400+ unbundled ES modules. The modest upfront Both dev entrypoints serve the client over Vite 8.1The served shell references Build & test verification (pu box, all green)
Captured on an ephemeral pu box per the project's off-machine evidence policy. |
🧪 CI metrics — leased pool boxThe x86_64-linux lane ran on no pool box — resolved via
(no per-recipe timing in Pool status (8 boxes)
Posted by |
experimental.bundledDev:true emits a fatal `__reExport is not defined` at runtime (a Rolldown dev-bundling CJS-interop helper 8.1.0 references but does not emit), so the client never mounts under `just dev` — verified via chrome-devtools. CI never caught it because the e2e lane exercises the production build (koluBin), not the dev server. Standard Vite 8 dev works: chrome-devtools confirms kolu loads, connects (SRV/KAVAL healthy), and creates a working terminal. The Vite 6→8.1 upgrade itself stands; only the broken experimental dev flag is dropped.
Evidence — corrected (chrome-devtools)
What chrome-devtools confirms at
|
🧪 CI metrics — leased pool boxThe x86_64-linux lane ran on
Pool status (8 boxes)
Posted by |

Every Vite-built surface moves from Vite 6.4 to Vite 8.1 — a two-major jump that swaps the bundler from Rollup/esbuild to Rolldown/Oxc. All surfaces build, the full test suite passes,
just devruns correctly (verified end-to-end via chrome-devtools — kolu loads, connects, creates a working terminal), and the production build is ~3× faster (full numbers below).Performance
Measured head-to-head on one ephemeral box,
vite81(Vite 8.1) vsmaster(Vite 6.4), same machine, warm caches. Medians; raw runs in footnotes.Build time — the win
vite build(3 runs)nix build .#default(forced real build)vite buildis the same step the Nix client derivation runs, so the ~4 s saving flows straight intonix build. The packaged build only improves ~15% because the rest of it (pnpm install, node-gyp native rebuild, server packaging, NAR) is Vite-independent.Bundle size — a small tradeoff
Rolldown's output is slightly larger in aggregate, though the first-load entry chunk is flat:
dist/The +9% gzip is in the lazy-loaded chunks (the 300+ Shiki grammar chunks, fetched on demand), not the startup path — so it doesn't move first-load (next table).
Runtime — flat (as expected)
/api/healthready in)³ The server runs under
tsx, not Vite, so its boot time is Vite-independent — measured to confirm no regression. Client load+mount is marginally slower, tracking the slightly larger bundle; the experimental bundled-dev startup win is dropped (scope correction above).¹ 6.35 / 6.32 / 6.96 s ² 2.17 / 2.16 / 2.09 s ·
nix buildforced to actually build (source change) so neither side substitutes from cache.Surfaces moved
packages/client,packages/pulam-web, 4@kolu/*examplesvite ^6.4.3→^8.1.0vite-plugin-solid,@tailwindcss/vite,vitest) re-resolved cleandocs/atlas,website(Astro 7)vite 8.0.16→8.1.0pnpm.overridesmechanism (Astro declares^8.0.13)Node is already 24.13 in the Nix toolchain, above Vite 8.1's 20.19/22.12 floor — no toolchain bump.
pnpmDeps/website-pnpm-depsFOD hashes regenerated. Vite 8.1.0 ≥ 8.0.16 also clears the 8.0.0–8.0.15 advisory.Migration fallout cleaned up
optimizeDeps.esbuildOptionsacross all six configs. It dodged an esbuild ≥0.27.7 destructuring-lowering bug (kolu#1387); Vite 8 optimizes deps with Rolldown/Oxc, not esbuild, so the workaround is obsolete and deprecated.build.target: esnextis retained.@kolu/solid-pierrenow exposes its pure path helpers via a./pathssubpath. Vite 8's Rolldown/Oxc SSR transform won't parse raw JSX from an externalized source.tsxthe way Vite 6's esbuild did. Three DOM-free client logic tests pulledCodeView.tsxinto their graph only becauseancestorDirectoryPathswas imported from the component barrel; routing pure consumers through./pathsdecouples them (dead barrel re-export then removed — lens-debate).What was deliberately not adopted
nix buildartifact never depends on an experimental flag.import.meta.globcaseSensitive, Wasm ESM,html.additionalAssetSources) — no call sites, so wiring them in would be dead config.Verification
pnpm typecheckgreen; full unit suite green (client 457 tests, all packages).website+atlasbuild on Astro 7 + Vite 8.1.just dev+just dev-autorun; chrome-devtools confirms kolu loads, connects, and creates a working terminal — no app-breaking console errors (the only[error]is the pre-existing dev-only/sw.jsno-op, present on master).x86_64-linux+aarch64-darwin(32 contexts).Try it locally
Generated by
/beon Claude Code (modelclaude-opus-4-8).