feat(collab): presence — iedereen ziet elkaars dia (Matrix) #1067

Merged
brenno merged 1 commit from feat/matrix-presence into main 2026-08-01 10:53:38 +00:00
Owner

Realtime presence (§6, "iedereen ziet iedereen", besluit 2026-08-01): elke mede-auteur zendt uit welke dia hij bekijkt, en iedereen ziet dat als gekleurde stippen op de diastrook.

Wat

  • matrix_presence.dartMatrixPresence + PeerPresence. announce(slideId) verzegelt de huidige dia in een room-state-event per device (laatste positie overschrijft de vorige, geen ophoping in de timeline); de homeserver ziet enkel ciphertext. Peers die vóór hun epoch-sleutel binnenkomen worden gebufferd en heropend in retryPending — dezelfde volgordefix als de snapshot-channel. Niet gezaghebbend: verzegeld zonder handtekening.
  • Sessie-naad: MatrixCollabLaunch.announcePresence/presencePeers/onPresenceChanged; syncNow retryt presence elke ronde (host én guest).
  • Provider: CollabSessionState.presence; bij een actieve sessie zendt de tab zijn dia uit (nu en bij elke selectiewijziging) en weerspiegelt die van anderen.
  • UI: SlidePresenceDots per dia in de slidelijst — alleen tijdens een sessie, dus de lijst (en de goldens) blijven er buiten ongemoeid. Palet in AppTheme.presencePalette.

Toetsing

  • Presence-propagatie host↔guest (beide zien elkaar op de juiste dia, met de volgorde-buffer/retry), en de dots-widget (initialen, +N-overflow, leeg).
  • make check groen: 7817 tests, dekking 87,4%, per-bestandsvloer 0 onder.
  • Geen nieuwe zichtbare tekst (alleen initialen/tooltips), dus geen l10n. SOURCE_MAP bijgewerkt.

Voorlaatste stap in de afronding van #977; alleen chat rest nog.

Realtime presence (§6, "iedereen ziet iedereen", besluit 2026-08-01): elke mede-auteur zendt uit welke dia hij bekijkt, en iedereen ziet dat als gekleurde stippen op de diastrook. ## Wat - **`matrix_presence.dart`** — `MatrixPresence` + `PeerPresence`. `announce(slideId)` verzegelt de huidige dia in een room-**state**-event per device (laatste positie overschrijft de vorige, geen ophoping in de timeline); de homeserver ziet enkel ciphertext. Peers die vóór hun epoch-sleutel binnenkomen worden gebufferd en heropend in `retryPending` — dezelfde volgordefix als de snapshot-channel. Niet gezaghebbend: verzegeld zonder handtekening. - **Sessie-naad:** `MatrixCollabLaunch.announcePresence`/`presencePeers`/`onPresenceChanged`; `syncNow` retryt presence elke ronde (host én guest). - **Provider:** `CollabSessionState.presence`; bij een actieve sessie zendt de tab zijn dia uit (nu en bij elke selectiewijziging) en weerspiegelt die van anderen. - **UI:** `SlidePresenceDots` per dia in de slidelijst — alleen tijdens een sessie, dus de lijst (en de goldens) blijven er buiten ongemoeid. Palet in `AppTheme.presencePalette`. ## Toetsing - Presence-propagatie host↔guest (beide zien elkaar op de juiste dia, met de volgorde-buffer/retry), en de dots-widget (initialen, +N-overflow, leeg). - `make check` groen: 7817 tests, dekking 87,4%, per-bestandsvloer 0 onder. - Geen nieuwe zichtbare tekst (alleen initialen/tooltips), dus geen l10n. SOURCE_MAP bijgewerkt. Voorlaatste stap in de afronding van #977; alleen chat rest nog.
feat(collab): presence — iedereen ziet elkaars dia (Matrix)
All checks were successful
scans / scans (pull_request) Successful in 3m32s
77fb96b08c
Realtime presence (§6, "iedereen ziet iedereen", besluit 2026-08-01): elke
mede-auteur zendt uit welke dia hij bekijkt, en iedereen ziet dat als gekleurde
stippen op de diastrook.

- `matrix_presence.dart`: `MatrixPresence` + `PeerPresence`. `announce(slideId)`
  verzegelt de huidige dia in een room-**state**-event per device (laatste positie
  overschrijft de vorige, geen ophoping); de server ziet enkel ciphertext. Peers
  worden gebufferd wanneer ze vóór hun epoch-sleutel binnenkomen en heropend in
  `retryPending` — dezelfde volgordefix als de snapshot-channel. Niet
  gezaghebbend: verzegeld zonder handtekening.
- Sessie-naad: `MatrixCollabLaunch.announcePresence`/`presencePeers`/
  `onPresenceChanged`, `syncNow` retryt presence elke ronde (host én guest).
- Provider: `CollabSessionState.presence`; bij een actieve sessie zendt de tab
  zijn dia uit (nu en bij elke selectiewijziging) en weerspiegelt die van anderen.
- UI: `SlidePresenceDots` per dia in de slidelijst — alleen tijdens een sessie,
  dus de lijst (en de goldens) blijven er buiten ongemoeid. Palet in AppTheme.

- Tests: presence-propagatie host↔guest (beide zien elkaar op de juiste dia) en
  de dots-widget (initialen, +N, leeg). `make check` groen (7817 tests, 87,4%).
- Geen nieuwe zichtbare tekst (alleen initialen/tooltips), dus geen l10n.

Onderdeel van de afronding van #977 (self-encrypted relay, pure Dart).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
brenno merged commit 0173e0ff82 into main 2026-08-01 10:53:38 +00:00
brenno deleted branch feat/matrix-presence 2026-08-01 10:53:38 +00:00
Sign in to join this conversation.
No description provided.