/** * The page can never stay silently blank. * * A reader once had nothing but white for an evening: the shell arrived, the * modules were served from the browser's own store so not one request reached * the hub, and nothing ever rendered. No message, no error on screen, nothing * in the server's log to look at — the same account worked in a private window * and in another browser, which is the signature of something wrong in this * origin's stored state rather than in what was deployed. Clearing the site's * data fixed it. Clearing the *cache*, three times, had not: a service worker * and IndexedDB are not the cache, and nothing on screen said so. * * This answers the *silence*, not whatever caused it. A blank page is a bug * report nobody can write, and a phone has no console to open. * * **A classic script, deliberately, and first.** The failure it guards against * includes the module graph never linking — one bad module and no module code * runs at all, so a guard inside `app.js` would be part of what failed. This * one has no imports and cannot be stopped by them. * * It does nothing when the application mounts, which is the ordinary case: it * looks once, late, and speaks only to a reader already staring at nothing. */ (function () { 'use strict'; // Long enough that a cold phone on a slow network is never interrupted — // argon2's wasm, forty modules and a catalogue — and short enough that // nobody sits in front of white wondering. The app mounts in well under two // seconds when it mounts at all. var GIVE_UP_MS = 10000; var problems = []; function note(what) { if (problems.length < 5) problems.push(String(what).slice(0, 200)); } // Capture phase: a `