Samenwerken stap 4: Fase 1 — Matrix-dataplane #977

Closed
opened 2026-07-29 22:14:39 +00:00 by brenno · 2 comments
Owner

Echte remote samenwerking: de MatrixTransport achter het CollabTransport-interface uit Fase 0 (#975), met room-encryptie aan vanaf de eerste genetwerkte byte (P4). COLLABORATION.md §6, §8, §10 Fase 1. Gaat pas van start na een GO uit de ketenkeuring.

Drie à vier PR-formaat stappen:

  1. Onboarding: in-app registratie/login tegen een default-of-eigen homeserver (§8); toegangstoken en device-keys in SecretStore (keychain), homeserver-URL en user-id in shared_preferences — zelfde patroon als WebDAV. BESLISPUNT GEBRUIKER: welke default-homeserver stellen we voor (open vraag 3 — mag geen de-facto OciDeck-afhankelijkheid worden).
  2. MatrixTransport: ops als nl.ocideck.op-timeline-events, locks als room-state, rollen als power levels, chat als m.room.message; snapshot gechunkt (events cappen op ~64 KiB); E2EE aan.
  3. Sessielevenscyclus (§6.5): starten (snapshot pushen, slide-ids fixeren), deelnemen (snapshot + recente ops), einde (alleen de eigenaar persisteert via saveDeck).
  4. UI: sessie starten/delen/deelnemen, chat-paneel, presence. Beslispunt bij presence (open vraag 4): wie-kijkt-waar voor iedereen of alleen voor de eigenaar.

Webnotitie: CSP connect-src moet de homeserver-wss: toestaan (web-build-hardening).

Echte remote samenwerking: de MatrixTransport achter het CollabTransport-interface uit Fase 0 (#975), met room-encryptie aan vanaf de eerste genetwerkte byte (P4). COLLABORATION.md §6, §8, §10 Fase 1. Gaat pas van start na een GO uit de ketenkeuring. Drie à vier PR-formaat stappen: 1. Onboarding: in-app registratie/login tegen een default-of-eigen homeserver (§8); toegangstoken en device-keys in SecretStore (keychain), homeserver-URL en user-id in shared_preferences — zelfde patroon als WebDAV. BESLISPUNT GEBRUIKER: welke default-homeserver stellen we voor (open vraag 3 — mag geen de-facto OciDeck-afhankelijkheid worden). 2. MatrixTransport: ops als nl.ocideck.op-timeline-events, locks als room-state, rollen als power levels, chat als m.room.message; snapshot gechunkt (events cappen op ~64 KiB); E2EE aan. 3. Sessielevenscyclus (§6.5): starten (snapshot pushen, slide-ids fixeren), deelnemen (snapshot + recente ops), einde (alleen de eigenaar persisteert via saveDeck). 4. UI: sessie starten/delen/deelnemen, chat-paneel, presence. Beslispunt bij presence (open vraag 4): wie-kijkt-waar voor iedereen of alleen voor de eigenaar. Webnotitie: CSP connect-src moet de homeserver-wss: toestaan (web-build-hardening).
Author
Owner

Op pauze na de ketenkeuring #976: NO-GO op de matrix-Dart-SDK onder het huidige beleid (matrix + vodozemac zijn AGPL-3.0 → valt de eigen licentiepoort en herlicenseert de binary de facto; crypto is native Rust op Windows/Linux/web; SBOM ziet de Cargo-boom niet). Zie assurance/ketenkeuring-matrix-sdk.md.

Deze stap start pas na een expliciet beleidsbesluit (AGPL aanvaarden + de vier voorwaarden uit de keuring). Tot dan is de aanbevolen samenwerkweg Fase 0.5 (WebDAV-async, nul nieuwe deps), belegd in #989.

Op pauze na de ketenkeuring #976: NO-GO op de matrix-Dart-SDK onder het huidige beleid (matrix + vodozemac zijn AGPL-3.0 → valt de eigen licentiepoort en herlicenseert de binary de facto; crypto is native Rust op Windows/Linux/web; SBOM ziet de Cargo-boom niet). Zie assurance/ketenkeuring-matrix-sdk.md. Deze stap start pas na een expliciet beleidsbesluit (AGPL aanvaarden + de vier voorwaarden uit de keuring). Tot dan is de aanbevolen samenwerkweg Fase 0.5 (WebDAV-async, nul nieuwe deps), belegd in #989.
Author
Owner

Afgerond en gemerged op main. De Matrix-dataplane is gebouwd als pure-Dart self-encrypted relay — de homeserver als versleuteld doorgeefluik met OciDecks eigen minimale E2EE (X25519/Ed25519/HKDF/XChaCha20-Poly1305, key-wrapping; géén Olm/Megolm), zodat de EUPL-1.2 behouden blijft en er geen AGPL/Rust binnenkomt.

De vier stappen uit dit issue:

  1. Onboarding — instellingen-sectie Samenwerken; account-config in prefs, access-token + device-seeds versleuteld in de sleutelhanger. Bewust wachtwoordloos (besluit): homeserver + elders aangemaakt access-token plakken, whoami vult user-id én device-id (dat laatste móét het token-device-id zijn, anders komt een key-share niet aan, §4.3). Beslispunt default-homeserver → géén default, leeg met eigen invoer. (#1034, #1039)
  2. MatrixTransport — ops als nl.ocideck.op-timeline-events, locks als room-state, snapshot gechunkt (cap ~48 KiB), E2EE aan. (eerdere P-C/P-D-PR's)
  3. Sessielevenscyclus — starten (snapshot pushen, slide-ids fixeren §5.5), deelnemen (snapshot + ops, met de volgorde-buffer voor "snapshot vóór sleutel"), einde (alleen de eigenaar persisteert). (#1036)
  4. UI — sessie starten/delen/deelnemen via het commandopalet + link-dialogen (#1061); chat-paneel, E2EE én ondertekend (#1071); presence "iedereen ziet iedereen" als gekleurde stippen op de diastrook — beslispunt open vraag 4 → iedereen ziet iedereen (#1067). Plus apparaatverificatie via fingerprint-vergelijking out-of-band (#1063).

Beslispunt rollen-als-power-levels: bewust niet als Matrix power levels gebouwd. De inhoud is E2EE en de autoriteit wordt al op app-niveau afgedwongen (isAuthority/host-gast, alleen de eigenaar persisteert). De homeserver kan de inhoud toch niet lezen, dus room-power-levels zouden geen vertrouwelijkheid toevoegen; ze zijn opgevat als afgedekt.

Webnotitie (CSP): connect-src 'self' https: in de webbundel dekt de homeserver al — we pollen over https, geen wss: nodig.

Toetsing: volledig headless tegen een in-Dart fake-homeserver (host→join→co-author, key-uitwisseling, snapshot, presence, chat, deelnemers/fingerprints). make check groen bij elke PR (~7.800 tests, ~87,5% dekking), l10n in alle 31 talen.

Nog buiten dit issue, als aparte pre-release-voorwaarden: een échte tweezijdige host→join in de draaiende app (vereist een live Matrix-homeserver + twee clients; testomgeving wordt lokaal opgezet), en de staande externe crypto-review (ketenkeuring-conditie 1). De crypto is daarom bewust minimaal gehouden.

Alle scope van dit issue is opgeleverd en gemerged; ik sluit het.

Afgerond en gemerged op `main`. De Matrix-dataplane is gebouwd als **pure-Dart self-encrypted relay** — de homeserver als versleuteld doorgeefluik met OciDecks eigen minimale E2EE (X25519/Ed25519/HKDF/XChaCha20-Poly1305, key-wrapping; géén Olm/Megolm), zodat de EUPL-1.2 behouden blijft en er geen AGPL/Rust binnenkomt. **De vier stappen uit dit issue:** 1. **Onboarding** — instellingen-sectie *Samenwerken*; account-config in prefs, access-token + device-seeds versleuteld in de sleutelhanger. Bewust wachtwoordloos (besluit): homeserver + elders aangemaakt access-token plakken, `whoami` vult user-id én device-id (dat laatste móét het token-device-id zijn, anders komt een key-share niet aan, §4.3). Beslispunt default-homeserver → géén default, leeg met eigen invoer. (#1034, #1039) 2. **MatrixTransport** — ops als `nl.ocideck.op`-timeline-events, locks als room-state, snapshot gechunkt (cap ~48 KiB), E2EE aan. (eerdere P-C/P-D-PR's) 3. **Sessielevenscyclus** — starten (snapshot pushen, slide-ids fixeren §5.5), deelnemen (snapshot + ops, met de volgorde-buffer voor "snapshot vóór sleutel"), einde (alleen de eigenaar persisteert). (#1036) 4. **UI** — sessie starten/delen/deelnemen via het commandopalet + link-dialogen (#1061); **chat**-paneel, E2EE én ondertekend (#1071); **presence** "iedereen ziet iedereen" als gekleurde stippen op de diastrook — beslispunt open vraag 4 → iedereen ziet iedereen (#1067). Plus **apparaatverificatie** via fingerprint-vergelijking out-of-band (#1063). **Beslispunt rollen-als-power-levels:** bewust *niet* als Matrix power levels gebouwd. De inhoud is E2EE en de autoriteit wordt al op app-niveau afgedwongen (`isAuthority`/host-gast, alleen de eigenaar persisteert). De homeserver kan de inhoud toch niet lezen, dus room-power-levels zouden geen vertrouwelijkheid toevoegen; ze zijn opgevat als afgedekt. **Webnotitie (CSP):** `connect-src 'self' https:` in de webbundel dekt de homeserver al — we pollen over https, geen `wss:` nodig. **Toetsing:** volledig headless tegen een in-Dart fake-homeserver (host→join→co-author, key-uitwisseling, snapshot, presence, chat, deelnemers/fingerprints). `make check` groen bij elke PR (~7.800 tests, ~87,5% dekking), l10n in alle 31 talen. **Nog buiten dit issue, als aparte pre-release-voorwaarden:** een échte tweezijdige host→join in de draaiende app (vereist een live Matrix-homeserver + twee clients; testomgeving wordt lokaal opgezet), en de staande externe crypto-review (ketenkeuring-conditie 1). De crypto is daarom bewust minimaal gehouden. Alle scope van dit issue is opgeleverd en gemerged; ik sluit het.
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
LibreKAT/Ocideck#977
No description provided.