- ci.yml: build step (vite build via turbo) runs on every PR pipeline after test
- publish.yml: e2e step boots the gateway from built dist (HOME/cwd-isolated
throwaway PGlite) and runs the Playwright suite headless inside
mcr.microsoft.com/playwright:v1.58.2-noble against the SPA bundle served
exactly as production serves it; both kaniko publishes now gate on e2e
- serve-spa.ts: strip query strings before asset resolution; immutable
cache-control for hashed assets (onSend hook); e2e spec covers both
- e2e suite hardened: globalSetup seeds admin+member through real
bootstrap/better-auth APIs (Origin header for CSRF), loginAs waits for the
post-login redirect (fixes 27-skipped race), stale #152-era assertions
rewritten to the current command-driven UI, strict-mode violations fixed
with level-1 heading queries and .or() auto-retrying locators
- verify-release mirrors the new build stage; playwright artifacts ignored