diff --git a/ui/index.html b/ui/index.html index e6167a2..f1f5282 100644 --- a/ui/index.html +++ b/ui/index.html @@ -24,6 +24,296 @@
+ + + diff --git a/ui/vite.config.ts b/ui/vite.config.ts index 53258e6..f4d0d8a 100644 --- a/ui/vite.config.ts +++ b/ui/vite.config.ts @@ -1,7 +1,25 @@ import { resolve } from 'node:path'; -import { defineConfig } from 'vite'; +import { defineConfig, type Plugin } from 'vite'; import { svelte } from '@sveltejs/vite-plugin-svelte'; +/** + * stripBootDiag removes the temporary on-device boot-diagnostic block from index.html — the span + * between the `` and `` markers. That block is a + * full-screen ES5 overlay meant only for the production build shipped to the test contour, so it + * is dropped from every non-production build: the `mock` e2e (whose first taps the overlay would + * intercept) and the dev server. It is wired only when mode !== 'production'. Remove this plugin + * together with the index.html block once the Android WebView diagnosis is finished — it must + * never reach master / production. + */ +function stripBootDiag(): Plugin { + return { + name: 'strip-boot-diag', + transformIndexHtml(html) { + return html.replace(/\s*/g, ''); + }, + }; +} + // The edge Connect service is scrabble.edge.v1.Gateway; the gateway serves it over // h2c on :8081 by default. In dev we proxy the RPC path so the browser (which can // not speak h2c directly) talks to the dev server on the same origin. In `mock` @@ -19,7 +37,10 @@ export default defineConfig(({ mode }) => ({ // so a missing build-arg never breaks the build. __APP_VERSION__: JSON.stringify(process.env.VITE_APP_VERSION || 'dev'), }, - plugins: [svelte()], + // The boot-diagnostic overlay ships only in the production build (the test contour); it is + // stripped from the dev server and the mock e2e build, where a full-screen overlay would + // intercept Playwright's taps. See stripBootDiag / the index.html BOOT-DIAG block. + plugins: [svelte(), ...(mode !== 'production' ? [stripBootDiag()] : [])], server: { port: 5173, proxy: