Stage 0 surfaced a Vite alias drift (@runtime-contract missing from vite.config.ts though present in tsconfig + vitest) that no test caught — typecheck passed, unit tests passed, but the dev server crashed on first boot. Add a CI job that runs npm run dev:full in background, waits for the dev URL, hits curl http://127.0.0.1:4173/ and asserts the response is HTML without a Vite error overlay. Kill the server. This catches alias / config drift class bugs before merge.
Stage 0 surfaced a Vite alias drift (
@runtime-contractmissing fromvite.config.tsthough present in tsconfig + vitest) that no test caught — typecheck passed, unit tests passed, but the dev server crashed on first boot. Add a CI job that runsnpm run dev:fullin background, waits for the dev URL, hitscurl http://127.0.0.1:4173/and asserts the response is HTML without a Vite error overlay. Kill the server. This catches alias / config drift class bugs before merge.