docs(design): natieve calls — één interface Jitsi + Matrix, ketenkeuring flutter_webrtc #1095

Merged
brenno merged 2 commits from design/native-calls into main 2026-08-01 22:23:18 +00:00
Owner

Legt de diepe natieve call-route vast voor OciDeck (ontwerp-only, unbuilt, expliciet gepoort). Volgt uit een ontwerpsessie: video-conferenties meedoen, presenteren, en een zo diep mogelijke integratie — natief, niet via een embedded Jitsi-UI.

Wat dit toevoegt

  • docs/design/NATIVE_CALLS.md — één backend-neutrale call-interface met Jitsi (XMPP/Jingle/Colibri2) en MatrixRTC/LiveKit als verwisselbare adapters over één gedeelde flutter_webrtc-mediakern. De UI rendert enkel uit MeetingCapabilities/MeetingEvent/MeetingParticipant en kent de backend niet. Plus de media-vs-signalering-decompositie en XMPP als kandidaat-enkelvoudige spine voor calls én data-plane.
  • assurance/ketenkeuring-flutter-webrtc.md — GO/NO-GO voor de media-plane-dep. Licentie/toolchain schoon (MIT, geen Rust); de spanning zit in netwerkbeheersing (media omzeilt NetGuard) en de belofte "the only HTTP client dependency is http". Uitkomst: NO-GO om nú kaal toe te voegen; principieel GO mits vier voorwaarden + spine-besluit.
  • Kruislinks in COLLABORATION.md (+ Jitsi-registerrij verwijst naar het natieve ontwerp) en assurance/README.md.

Botsing (expliciet, per bewaker)

Dit ontwerp heropent een al genomen soevereine keuze. De self-encrypted relay is op 2026-07-31 op GO gezet als route naar realtime-samenwerken (#976/#991 worden niet gevolgd). NATIVE_CALLS.md §5 stelt nu XMPP als enkelvoudige spine voor — één server (Prosody, die Jitsi tóch al draait) die zowel de calls als de data-plane draagt — en concludeert dat dit voor "meedoen én hosten even belangrijk" de relay-splitsing verslaat.

  • Welke waarde voorgaat, nu: geen — dit is ontwerp-only, er wordt niets omgezet. De keuze staat als open vraag 0 (spine): een beheerdersbesluit, met een eigen ketenkeuring als voorwaarde. De relay-GO blijft staan tot die her-weging bewust is gemaakt.
  • Waaronder de relay-keuze zou wijken voor XMPP: wanneer calls even belangrijk zijn als co-auteuren — dan heb je de XMPP-stack tóch al, en is een tweede Matrix-stack de omweg. Waaronder de relay wint: co-auteuren zónder calls — de relay is lichter (http+cryptography, géén XMPP-clientstack, kleiner vertrouwensoppervlak).

Bedoeld zodat de beheerder open vraag 0 als een bewuste her-weging ziet, niet als technisch detail.

Bewaker

Beoordeeld vanuit de bewaker-blik: akkoord om te landen — het kerngedachtegoed (Markdown-basis meeneembaar, alles specifieks erbuiten) blijft volledig overeind, het bestandsformaat wordt niet geraakt, en elke huidige publieke belofte blijft op deze tak waar (flutter_webrtc is niet toegevoegd; de belofte-bijwerking is een harde voorwaarde vóór de dep landt). Twee tekstpunten uit de review zijn verwerkt (libwebrtc-blob tegen waarde 2; l10n-telling afgestemd op §11).

Verificatie

Docs-only: geen Dart, pubspec of l10n geraakt → make check-uitkomst ongewijzigd. Design-docs onder docs/design/** en assurance/ zijn niet gebundeld, dus de docs-registratiepoort geldt niet (13 bestaande ongeregistreerde design-docs bevestigen dit). Alle 14 relatieve linkdoelen bestaan (geverifieerd). Geen geheimen/SAST-relevantie (markdown).

Legt de **diepe natieve call-route** vast voor OciDeck (ontwerp-only, unbuilt, expliciet gepoort). Volgt uit een ontwerpsessie: video-conferenties meedoen, presenteren, en een zo diep mogelijke integratie — natief, niet via een embedded Jitsi-UI. ## Wat dit toevoegt - `docs/design/NATIVE_CALLS.md` — één backend-neutrale call-interface met **Jitsi** (XMPP/Jingle/Colibri2) en **MatrixRTC/LiveKit** als verwisselbare adapters over één gedeelde `flutter_webrtc`-mediakern. De UI rendert enkel uit `MeetingCapabilities`/`MeetingEvent`/`MeetingParticipant` en kent de backend niet. Plus de media-vs-signalering-decompositie en XMPP als kandidaat-enkelvoudige spine voor calls én data-plane. - `assurance/ketenkeuring-flutter-webrtc.md` — GO/NO-GO voor de media-plane-dep. Licentie/toolchain schoon (MIT, geen Rust); de spanning zit in **netwerkbeheersing** (media omzeilt NetGuard) en de belofte *"the only HTTP client dependency is http"*. Uitkomst: **NO-GO om nú kaal toe te voegen; principieel GO** mits vier voorwaarden + spine-besluit. - Kruislinks in `COLLABORATION.md` (+ Jitsi-registerrij verwijst naar het natieve ontwerp) en `assurance/README.md`. ## Botsing (expliciet, per bewaker) Dit ontwerp **heropent een al genomen soevereine keuze.** De self-encrypted relay is op **2026-07-31 op GO** gezet als *dé* route naar realtime-samenwerken (#976/#991 worden niet gevolgd). `NATIVE_CALLS.md` §5 stelt nu **XMPP als enkelvoudige spine** voor — één server (Prosody, die Jitsi tóch al draait) die zowel de calls als de data-plane draagt — en concludeert dat dit voor "meedoen én hosten even belangrijk" de relay-splitsing verslaat. - **Welke waarde voorgaat, nu:** geen — dit is ontwerp-only, er wordt niets omgezet. De keuze staat als **open vraag 0 (spine): een beheerdersbesluit**, met een eigen ketenkeuring als voorwaarde. De relay-GO blijft staan tot die her-weging bewust is gemaakt. - **Waaronder de relay-keuze zou wijken voor XMPP:** wanneer calls even belangrijk zijn als co-auteuren — dan heb je de XMPP-stack tóch al, en is een tweede Matrix-stack de omweg. **Waaronder de relay wint:** co-auteuren zónder calls — de relay is lichter (`http`+`cryptography`, géén XMPP-clientstack, kleiner vertrouwensoppervlak). Bedoeld zodat de beheerder open vraag 0 als een **bewuste her-weging** ziet, niet als technisch detail. ## Bewaker Beoordeeld vanuit de bewaker-blik: **akkoord om te landen** — het kerngedachtegoed (Markdown-basis meeneembaar, alles specifieks erbuiten) blijft volledig overeind, het bestandsformaat wordt niet geraakt, en elke huidige publieke belofte blijft op deze tak waar (flutter_webrtc is niet toegevoegd; de belofte-bijwerking is een harde voorwaarde vóór de dep landt). Twee tekstpunten uit de review zijn verwerkt (libwebrtc-blob tegen waarde 2; l10n-telling afgestemd op §11). ## Verificatie Docs-only: geen Dart, `pubspec` of l10n geraakt → `make check`-uitkomst ongewijzigd. Design-docs onder `docs/design/**` en `assurance/` zijn niet gebundeld, dus de docs-registratiepoort geldt niet (13 bestaande ongeregistreerde design-docs bevestigen dit). Alle 14 relatieve linkdoelen bestaan (geverifieerd). Geen geheimen/SAST-relevantie (markdown).
Legt de diepe natieve call-route vast (gekozen boven de embedded IFrame-POC):
één backend-neutrale call-interface met Jitsi (XMPP/Jingle/Colibri2) en
MatrixRTC/LiveKit als verwisselbare adapters over één gedeelde flutter_webrtc-
mediakern — de UI rendert enkel uit MeetingCapabilities/MeetingEvent/
MeetingParticipant en kent de backend niet.

Kernpunten:
- NATIVE_CALLS.md: de verenigde interface, de media-vs-signalering-decompositie,
  en XMPP als kandidaat-enkelvoudige spine voor data én media (Jitsi draait al op
  Prosody) — met de eerlijke afweging tegen de al goedgekeurde self-encrypted relay.
- ketenkeuring-flutter-webrtc.md: GO/NO-GO voor de media-plane-dep. Licentie/
  toolchain schoon (MIT, geen Rust); de spanning zit in netwerkbeheersing (media
  omzeilt NetGuard) en de belofte "enige http-dependency". NO-GO om nú kaal toe te
  voegen; principieel GO mits vier voorwaarden + spine-besluit.
- COLLABORATION.md/assurance/README.md: kruislinks naar het nieuwe ontwerp; de
  Jitsi-registerrij verwijst nu naar de natieve NATIVE_CALLS-route.

Ontwerp-only, unbuilt. Open beslissing 0 (spine) en de ketenkeuring-GO zijn
beheerdersbesluiten die vóór code (F1) komen.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
docs(design): bewaker-feedback — libwebrtc-blob (waarde 2), l10n-telling
All checks were successful
scans / scans (pull_request) Successful in 3m46s
14e88c9d1c
Bewaker-blik op de tak: akkoord om te landen; twee tekstpunten verwerkt.
- Ketenkeuring Bevinding 2: benoemt nu de waarde-2-spanning van het voorgebouwde
  libwebrtc-artefact — de minst inspecteerbare dep; pin/hash borgen "wat je krijgt",
  niet "wat je kunt zien". Bewust aanvaard vertrouwenspunt.
- NATIVE_CALLS.md §8: l10n-telling afgestemd op COLLABORATION.md §11 ("30 non-NL
  languages").

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
brenno merged commit c493ec3101 into main 2026-08-01 22:23:18 +00:00
brenno deleted branch design/native-calls 2026-08-01 22:23:18 +00:00
Sign in to join this conversation.
No description provided.