Samenwerken: Fase 0.5 afmaken — snapshot + sessie-bedrading #996
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#996
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 op #989 (de WebdavAsyncTransport landde als bouwblok; snapshot-herbaselijning §5.2 en de bedrading §5.7 bleven bewust vervolg, net als bij #988). Deze issue maakt Fase 0.5 af tot iets dat een gebruiker écht kan gebruiken: asynchroon co-auteuren van een deck over de WebDAV die hij al heeft.
Increment 1 — Snapshot / gedeelde baseline (§5.2, §5.5). Een Deck-JSON-(de)serialiser naast de bestaande op-codec (collab_codec.dart heeft al slideToJson/fromJson; deck-meta erbij). De eigenaar schrijft bij sessie-start een snapshot naar de sidecar; de deelnemer leest hem, zodat beide dezelfde slide-id's dragen (§5.5 — zonder dit hergenereert elk parseDeck andere id's en desynct elke op). JSON, geen Markdown-round-trip (P5). Volledig getest.
Increment 2 — Sessie-bedrading (§5.7). Een collab_session_provider (StateNotifier over een CollabSession die een transport bezit), een SessionRef-naad op TabInfo, en de per-tab override in app_shell (naast deckProvider e.d. — een deck-rakende provider die je vergeet te overschrijven leest stil deck==null). De sessie voedt het tab-deck; lokale bewerkingen stromen als intents naar buiten. Start (snapshot pushen + autoriteit worden), deelnemen (snapshot + inhaalslag), einde (alleen de eigenaar persisteert, §6.5/P2).
Increment 3 — Interface. Sessie starten/delen/deelnemen vanuit de shell voor een deck met een WebDAV-origin. Geen chat/presence/realtime — dat is Fase 1 (Matrix, #977, op pauze).
Raakt het .md niet (P2): de snapshot + de op-log leven in een sidecar naast het deck. Geen nieuwe deps. Referentie: COLLABORATION.md §5.2, §5.5, §5.7, §6.5; assurance/ketenkeuring-matrix-*.md (waarom dit de weg is zolang Matrix geparkeerd staat).
Opgepakt. Tak: collab/webdav-session-wiring. Increment 1 (snapshot-codec) eerst, apart gepoort en geland; daarna de provider-/sessie-bedrading.
Increments 1 en 2 geland op main:
5349d2ab): collab_session_launch.dart — hostCollabSession/joinCollabSession knopen snapshot + transport + autoriteit tot start/join (§6.5). Store-generiek, end-to-end getest (id-overname, inhaalslag, gast-round-trip). make check groen.De collab-laag kan nu programmatisch een async WebDAV-sessie hosten en bijkomen. Resteert increment 3 (§5.7): de provider-/UI-bedrading (collab_session_provider + per-tab override in app_shell + start/delen/deelnemen-acties) én de editor→op-adapter die een deck-brede bewerking naar de veld-ops vertaalt die de sessie indient. Dat laatste is de onderspecificeerde kern en verdient een eigen ontwerpronde; het is UI-zwaar en botst met de meerdere concurrente sessies in deze repo. Daarom hier gestopt met increment 3 open — laat maar weten of ik het oppak.
Increment 3 grotendeels geland — de collab-laag is nu compleet en getest.
Daarmee kan een async WebDAV-sessie programmatisch gehost/bijgekomen/co-geauteurd worden met correcte convergentie, echo-veiligheid en behoud van niet-syncbare velden — alles in lib/collab/, volledig getest.
Resteert 3c: de app-lijm die dit gebruiker-zichtbaar maakt — een collabSessionProvider (Riverpod) die per tab een CollabSessionController bezit en aan deckProvider hangt, de per-tab override in app_shell (een deck-rakende provider die je daar vergeet leest stil deck==null), de TabInfo SessionRef-naad, en de start/delen/deelnemen-UI. Dat is een aparte inspanning: het raakt app_shell en dialogen, en het vraagt verificatie met de draaiende app (beeldkeuring/gebruikerstest) i.p.v. alleen headless tests. #996 blijft daarvoor open.
Increment 3c geland (PR #1003, merge
321bcb99) — daarmee is #996 volledig af en is Fase 0.5 end-to-end gebruiker-bereikbaar.Volledige keten van #996: increment 1 (snapshot/baseline, #997) → 2 (host/join-levenscyclus, #999) → 3a (deck-diff→ops, #1000) → 3b (tab↔sessie-controller, #1001) → 3c (provider + UI, #1003). Een async WebDAV-samenwerksessie is nu vanuit de interface te starten en bij te komen, met correcte convergentie, echo-veiligheid en behoud van niet-syncbare velden. Bewust vervolg binnen Fase 0.5: eigenaarsoverdracht (§5.3) en herbaselijning op een niet-nul versie (§5.2). Afgehandeld — sluiten.