a8709b447a
`initI18n` runs in the client `init()` hook and blocks the first render. For every non-English user it awaited TWO locale dictionaries back to back — the active locale AND `en` (the fallback) — so first paint waited on two sequential round-trips + JSON parses. Now it awaits only the active locale, then warms `en` in the background (non-blocking). `t()` only consults `dicts.en` for keys the active locale is missing, and most call sites already pass an inline English fallback, so the deferred `en` doesn't change what users see; when it arrives `dicts.en` is reactive, so any key that fell through re-renders. English users are unchanged (no second fetch was ever needed). Net: non-English startup drops from two blocking locale fetches to one, halving the i18n payload on the critical path (the server already serves these JSONs brotli/gzip-compressed via the global CompressionLayer, so the wire cost was already small — this removes the extra round-trip + parse from first paint). Validated: new unit test (initI18n resolves while the en fetch is still pending, en is kicked off in the background, and a key missing from the active locale falls back once en lands) → 47 frontend tests green; npm run check; prod build. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01M8Vb9QHmLZnEMzHz7MrFy6