diff --git a/docs/release-control/v6/internal/subsystems/deployment-installability.md b/docs/release-control/v6/internal/subsystems/deployment-installability.md index eddfcaa8a..7c40835be 100644 --- a/docs/release-control/v6/internal/subsystems/deployment-installability.md +++ b/docs/release-control/v6/internal/subsystems/deployment-installability.md @@ -978,6 +978,12 @@ upgrade, update, release, or artifact-selection behavior. deterministic token authentication after setup, and may use the server setup API as a fallback only when the UI wizard fails to complete cleanly under the managed hot-dev runtime. + The built `index.html` must not modulepreload lazy route chunks: the SRI + plugin runs with `preloadDynamicChunks: false` so cold start fetches only the + entry and its static vendor imports (route-level code splitting stays + effective on slow devices), while dynamic-import integrity remains enforced + through the generated import map `integrity` block. Reintroducing whole-app + preloading is a governed regression, not a tuning knob. Managed browser verification must also restart an existing hot-dev session when a verification lock is active or the runtime auth file no longer matches the deterministic dev user/hash. `tests/integration/scripts/run-playwright.mjs` diff --git a/frontend-modern/vite.config.ts b/frontend-modern/vite.config.ts index 44e1e5ccb..10b73710e 100644 --- a/frontend-modern/vite.config.ts +++ b/frontend-modern/vite.config.ts @@ -46,7 +46,11 @@ const proxyOriginOverride = process.env.PULSE_DEV_PROXY_ORIGIN ?? ''; const srcAlias = path.resolve(__dirname, './src'); export default defineConfig(({ mode }) => ({ - plugins: [solid(), sri({ algorithm: 'sha384' })], + // preloadDynamicChunks would modulepreload every lazy chunk (~3.1MB raw, + // the whole app incl. all Settings panels and every locale) at cold start, + // defeating route-level code splitting on slow devices. Dynamic-import SRI + // is still enforced through the generated import map integrity block. + plugins: [solid(), sri({ algorithm: 'sha384', preloadDynamicChunks: false })], resolve: { alias: { '@': srcAlias,