web: parity page renders the three-scenario comparison from live data

App.vue fetches the default config, posts it to /api/comparison, and
renders ComparisonTable; the Vite dev server proxies /api to the Go
server so the browser sees one origin. src/lib/api.ts is the only
fetch code and uses exclusively generated types: no shape is defined
on the frontend. Scaffold example components removed.
Engine fix surfaced by the smoke test: a nil Go slice marshals to
JSON null, violating the generated 'educated: number[]' contract;
RunScenario now returns an empty slice instead.
Verified end to end: curl through the Vite proxy returns the golden
99/70/7. Vitest covers the table rendering; type-check, oxlint,
eslint clean. This completes the milestone 2 parity check.
This commit is contained in:
Justin Visser 2026-06-10 13:47:01 +02:00
parent e9f36f509e
commit c935071bd1
17 changed files with 198 additions and 319 deletions

View file

@ -15,4 +15,11 @@ export default defineConfig({
'@': fileURLToPath(new URL('./src', import.meta.url))
},
},
server: {
// The Go server owns /api; run it next to `npm run dev` with:
// go run ./cmd/spreadlab
proxy: {
'/api': 'http://localhost:8080',
},
},
})