The web session generates new Olm keys for an existing device ID.
Synapse rejects the upload (400 — keys mismatch) which crashes the
entire client init. Result: no sync, no room history, no calls.
Proper E2EE requires persistent Olm account storage (IndexedDB) so
the same device ID always sends the same keys. Deferred to Phase 3.
Without Olm loaded, the Matrix SDK gracefully skips encryption init.
Unencrypted rooms work fully. E2EE rooms show 'Encrypted message'.
Also unregisters stale service workers that served cached old JS
(caused calls to use the old GET URL instead of POST /sfu/get).
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>