Description:
Cache decrypted messages in IndexedDB encrypted under a device-local key (derived from a non-exportable key) so the app shows history instantly + offline without re-syncing/re-decrypting everything. Evict on logout / device revocation.
Acceptance criteria:
- History available offline after first sync
- Local cache encrypted at rest
- Cache cleared on logout/revocation
Description:
Cache decrypted messages in IndexedDB encrypted under a device-local key (derived from a non-exportable key) so the app shows history instantly + offline without re-syncing/re-decrypting everything. Evict on logout / device revocation.
Acceptance criteria: