feat(collab): sessie-snapshot-baseline (increment 1 van #996) #997

Merged
brenno merged 1 commit from collab/webdav-session-wiring into main 2026-07-30 16:45:15 +00:00
Owner

Increment 1 van #996: de sessie-baseline die #989 bewust liet liggen (COLLABORATION.md §5.2/§5.5).

Een CollabSnapshot legt de slides van de autoriteit op een op-versie vast; een latere deelnemer neemt ze over en deelt zo dezelfde slide-id-ruimte — Slide.id wordt bij élk parsen opnieuw gegenereerd (§5.5), dus zonder gedeelde id's desynct elke bewerking. De snapshot draagt de slides, niet het hele Deck: de duurzame inhoud staat in het gedeelde .md (P2), gewijzigde metadata rijdt mee op de op-stroom (SetDeckMeta) — een volledige Deck-codec zou overkill zijn en de Markdown-serializer dupliceren. JSON van het model, fail-closed als de op-codec.

Plus een snapshot-slot naast de genummerde log in dezelfde sidecar (readSnapshot/writeSnapshot op CollabLogStore; de WebDAV-binding zet hem onvoorwaardelijk — alleen de autoriteit schrijft hem). Gedekt door de codec-round-trip (incl. het id-overname-scenario) en de store-I/O tegen een loopback-WebDAV.

De sessie-bootstrap en provider-/UI-bedrading die deze baseline gebruiken (§5.7) volgen als increment 2/3.

make check groen (7554 tests, dekking 87,4%, per-bestand-vloer gehaald). Docs bijgewerkt (SOURCE_MAP, CHANGELOG, COLLABORATION.md §10).

Increment 1 van #996: de sessie-baseline die #989 bewust liet liggen (COLLABORATION.md §5.2/§5.5). Een `CollabSnapshot` legt de slides van de autoriteit op een op-versie vast; een latere deelnemer neemt ze over en deelt zo dezelfde slide-id-ruimte — `Slide.id` wordt bij élk parsen opnieuw gegenereerd (§5.5), dus zonder gedeelde id's desynct elke bewerking. De snapshot draagt de slides, niet het hele `Deck`: de duurzame inhoud staat in het gedeelde `.md` (P2), gewijzigde metadata rijdt mee op de op-stroom (`SetDeckMeta`) — een volledige Deck-codec zou overkill zijn en de Markdown-serializer dupliceren. JSON van het model, fail-closed als de op-codec. Plus een snapshot-slot naast de genummerde log in dezelfde sidecar (`readSnapshot`/`writeSnapshot` op `CollabLogStore`; de WebDAV-binding zet hem onvoorwaardelijk — alleen de autoriteit schrijft hem). Gedekt door de codec-round-trip (incl. het id-overname-scenario) en de store-I/O tegen een loopback-WebDAV. De sessie-bootstrap en provider-/UI-bedrading die deze baseline gebruiken (§5.7) volgen als increment 2/3. `make check` groen (7554 tests, dekking 87,4%, per-bestand-vloer gehaald). Docs bijgewerkt (SOURCE_MAP, CHANGELOG, COLLABORATION.md §10).
feat(collab): session snapshot baseline for the async transport (#996)
All checks were successful
scans / scans (pull_request) Successful in 3m33s
d5345f9576
The baseline a joiner starts from (COLLABORATION.md §5.2/§5.5), the piece
#989 deferred. A CollabSnapshot is the authority's slides at an op
version; a joiner adopts them so it shares the authority's slide-id space
— Slide.id is regenerated on every parse (§5.5), so without a shared id
space every op desyncs. It carries the slides, not the whole Deck: the
durable content lives in the shared .md (P2) and changed metadata rides
the op stream (SetDeckMeta), so a full-Deck codec would be over-reach.
JSON of the model, fail-closed like the op codec.

Plus a snapshot slot beside the numbered log in the one sidecar —
readSnapshot/writeSnapshot on CollabLogStore, the WebDAV binding putting
it unconditionally (only the authority writes it). Covered by the codec
round-trip (incl. the id-adoption scenario) and the store I/O against a
loopback WebDAV.

Increment 1 of #996; the session bootstrap and provider/UI wiring that
use this baseline (§5.7) follow.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
brenno merged commit 4defcbecc3 into main 2026-07-30 16:45:15 +00:00
Sign in to join this conversation.
No description provided.