Context
CI runs unit tests per package (.github/workflows/ci.yml) and scripts/smoke-test.sh curls the deployed API. Nothing exercises the browser: the playground, the pipeline page, the two spec visualizers and both embed widgets can all break in a way that every unit test still passes — a broken Monaco mount, a store wiring mistake, a portal component that fails to open.
Proposal
- Playwright suite against
docker compose up, covering the paths that would embarrass us if broken:
/playground — type a snippet, run it, assert bytecode appears for V8.
/v8-pipeline — switch stages, assert each stage renders.
/type-conversion and /equality — trace an expression, step through it.
/embed/bytecode — snapshot link renders without the app shell.
- Run on pull requests with engine services stubbed or with the real compose stack, whichever keeps the job under a few minutes.
- Traces and screenshots uploaded as artifacts on failure.
Acceptance criteria
- The suite fails when a page throws on mount.
- Total CI time stays within the existing 15-minute job timeout.
Context
CI runs unit tests per package (
.github/workflows/ci.yml) andscripts/smoke-test.shcurls the deployed API. Nothing exercises the browser: the playground, the pipeline page, the two spec visualizers and both embed widgets can all break in a way that every unit test still passes — a broken Monaco mount, a store wiring mistake, a portal component that fails to open.Proposal
docker compose up, covering the paths that would embarrass us if broken:/playground— type a snippet, run it, assert bytecode appears for V8./v8-pipeline— switch stages, assert each stage renders./type-conversionand/equality— trace an expression, step through it./embed/bytecode— snapshot link renders without the app shell.Acceptance criteria