Compose Multiplatform demo: E2EE chat, offline scrollback, cold start from cache #47

Closed
opened 2026-08-06 15:20:08 +02:00 by thecrealm · 3 comments
Owner

Desktop + Android demo: E2EE chat, offline scrollback, edits/reactions, verification against Element; cold start renders from cache before first sync completes (§3.8 rich-client footprint, NFR-1 trajectory). Roadmap M3 exit criterion 5.

Desktop + Android demo: E2EE chat, offline scrollback, edits/reactions, verification against Element; cold start renders from cache before first sync completes (§3.8 rich-client footprint, NFR-1 trajectory). Roadmap M3 exit criterion 5.
Author
Owner

Status: implementation complete and CI-gated (build #144 @ 96d9c6a, D30). Verified so far:

  • Model-level e2e vs real Synapse (driver preserved in #52): login → E2EE send (cache holds ciphertext only, §9) → decrypted echo → reaction tally → edit replaces content → relaunch renders room list from cache before connect() returns → offline scrollback decrypts on read (#51) → SAS between demo model and a second katrix device (same emoji both sides, Done, isDeviceVerified). Three consecutive green runs.
  • On-device (AVD katrix-ci, Android 36 arm64): adb-driven login against a local Synapse, E2EE send from the app (server wire copy verified m.room.encrypted/megolm), force-stop → relaunch rendered the room list incl. decrypted last-event preview from cache ~2s in while the header still read 'syncing'.
  • Found and fixed along the way: #51 (decrypt-on-read API), #53 (m.relates_to hoist — E2EE aggregations were dead), #54 (SQLITE_BUSY on concurrent writers).

Remaining before the roadmap tick + close — the manual leg per D30:

  1. Desktop interactive run: ./gradlew :samples:demo:run (headless shell here couldn't open a window; on-device Compose rendering is proven).
  2. Verification against Element: log the same account into Element, use the demo's Verify button (or accept Element's request), compare emoji, confirm both sides. See samples/demo/README.md.
Status: implementation complete and CI-gated (build #144 @ 96d9c6a, D30). Verified so far: - **Model-level e2e vs real Synapse** (driver preserved in #52): login → E2EE send (cache holds ciphertext only, §9) → decrypted echo → reaction tally → edit replaces content → relaunch renders room list from cache before connect() returns → offline scrollback decrypts on read (#51) → SAS between demo model and a second katrix device (same emoji both sides, Done, isDeviceVerified). Three consecutive green runs. - **On-device (AVD katrix-ci, Android 36 arm64)**: adb-driven login against a local Synapse, E2EE send from the app (server wire copy verified m.room.encrypted/megolm), force-stop → relaunch rendered the room list incl. decrypted last-event preview from cache ~2s in while the header still read 'syncing'. - Found and fixed along the way: #51 (decrypt-on-read API), #53 (m.relates_to hoist — E2EE aggregations were dead), #54 (SQLITE_BUSY on concurrent writers). Remaining before the roadmap tick + close — the manual leg per D30: 1. Desktop interactive run: `./gradlew :samples:demo:run` (headless shell here couldn't open a window; on-device Compose rendering is proven). 2. **Verification against Element**: log the same account into Element, use the demo's Verify button (or accept Element's request), compare emoji, confirm both sides. See samples/demo/README.md.
thecrealm added
blocked
and removed
now
labels 2026-08-07 18:07:49 +02:00
Author
Owner

Remaining leg is manual-only (interactive desktop run + emoji comparison against Element on a screen) — blocked on a human session; see README steps in samples/demo. Engineering side is done per the status comment.

Remaining leg is manual-only (interactive desktop run + emoji comparison against Element on a screen) — blocked on a human session; see README steps in samples/demo. Engineering side is done per the status comment.
Author
Owner

Manual leg complete per user 2026-08-08: desktop interactive run and Element verification confirmed working. Engineering side was already CI-gated (build #144, D30) — M3 demo exit criterion met.

Manual leg complete per user 2026-08-08: desktop interactive run and Element verification confirmed working. Engineering side was already CI-gated (build #144, D30) — M3 demo exit criterion met.
thecrealm 2026-08-08 00:00:55 +02:00
  • closed this issue
  • removed the
    blocked
    label
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
thecrealm/katrix#47
No description provided.