Samenwerken: eigenaarsoverdracht bij wegvallen van de eigenaar (Fase 0.5, §5.3) #1004
Labels
No labels
accepted
bug
declined
docs
duplicate
enhancement
good first issue
in-progress
needs-info
privacy
security
triage
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
LibreKAT/Ocideck#1004
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Vervolg binnen Fase 0.5, bewust uitgesteld bij #996. COLLABORATION.md §5.3.
Waarom. De samenwerklaag heeft precies één autoriteit (P3): die kent versies toe, past intents toe en herzendt. In v1 blijft de host de héle sessie de autoriteit. Valt de eigenaar weg (verbinding kwijt, app dicht), dan stopt de sessie feitelijk: niemand kent nog versies toe, en de intents (versie 0) die deelnemers in de log schrijven blijven onverwerkt liggen. Voor een async sessie waarbij mensen op verschillende momenten werken is dat een reëel gat.
Wat het ontwerp vraagt (§5.3). Bij sessie-start wordt een deterministische opvolgvolgorde afgesproken. Valt de eigenaar weg, dan neemt de opvolger met de hoogst geobserveerde versie over (versie wint; de vaste volgorde breekt gelijkspel). De tijdelijke autoriteit houdt de sessie levend maar persisteert niet — alleen de eigenaar mag saveDeck/de sessie beëindigen. Komt de originele eigenaar terug, dan draagt de tijdelijke autoriteit terug over.
Wat er nu is.
lib/collab/collab_session.dart(de autoriteit-statemachine) noemt owner-drop-handover in de bestandskop expliciet als vervolg;isAuthorityis een vaste bool bij constructie.collab_session_provider.dartbewaart de sessie opTabInfo.collabSession.participantIdidentificeert een deelnemer.Wat er moet.
isAuthoritymoet muteerbaar/herbepaalbaar worden, en de nieuwe autoriteit hervat het toekennen van versies vanaf de hoogst bekende versie.Reikwijdte. Vooral
collab_session.dart(muteerbare autoriteit + versie-hervatting), het launch/controller-niveau (opvolgvolgorde, detectie), en mogelijk een kleine provider-/UI-melding ('jij bent nu tijdelijk de eigenaar'). Hangt deels samen met herbaselijning (het aparte vervolg-issue): beide draaien om 'hoogst geobserveerde versie' en de sidecar-metadata.Grijpt niet in op het bestandsformaat (P2): sessie-metadata leeft in de sidecar, niet in het .md.
Opgepakt. Tak: collab/owner-handover. Verwachte reikwijdte: lib/collab/collab_session.dart (muteerbare autoriteit + versie-hervatting), lib/collab/collab_log_store.dart (beacon-record), lib/collab/webdav_async_transport.dart (heartbeat), een nieuwe liveness/electie-laag, lib/collab/collab_session_launch.dart + collab_session_controller.dart (wiring + her-inzenden), lib/state/collab_session_provider.dart (melding 'tijdelijk eigenaar'), docs/design/COLLABORATION.md, tests.
Gebouwd en gemergd in #1006 (main
c1334665). De volledige §5.3-keten zit erin: muteerbare autoriteit met versie-hervatting, een advisory beacon met poll-getelde heartbeat-detectie (geen wandklok), caught-up + sequence-steady overname-poorten (die tweede sluit het WebDAV list-lag-gat), deterministische roster-vrije opvolging, hand-back voor de terugkerende eigenaar (via de electie-route), en 'alleen de eigenaar bewaart' als client-side poort in saveDeckWithDestination. Bestandsformaat (P2) ongemoeid — alles in de sidecar.Ontworpen na een drievoudige ontwerp-review (architectuur/beveiliging/test), daarna een implementatie- en een bewaker-review; elke blokkerende bevinding verwerkt.
Bewust niet in deze increment (gedocumenteerd in COLLABORATION.md §5.3 + de dreigingsmodel-rij in SECURITY_DESIGN.md):