feat(collab): snapshot-herbaselijning op een niet-nul versie (§5.2, #1005) #1008
No reviewers
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!1008
Loading…
Reference in a new issue
No description provided.
Delete branch "collab/snapshot-rebaseline"
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?
Closes #1005.
Vervolg op #1004 binnen Fase 0.5 (COLLABORATION.md §5.2). Een deelnemer die
bijkomt begon voorheen vanaf de basislijn bij versie 0 en speelde de héle op-log
opnieuw af — bij een lange sessie werd bijkomen daardoor traag. Nu start een
nieuwe deelnemer (en een terugkerende eigenaar) vanaf de laatste snapshot en
leest alleen de recente records. Raakt het
.mdniet (P2): alles in de sidecar.Ontwerp
CollabSnapshotis{version, seq, slides};seqis het hoogste sequencenummer dat de basislijn al omvat. Eenjoiner start zijn
CollabSessionopinitialVersion = versionen zijntransport op
initialSeq = seq, dus hij haalt alleen de records ná de basislijnop. (Een pre-§5.2-snapshot zonder
seqleest als0.) Ook een terugkerendeeigenaar (§5.3) gebruikt dit.
HandoverCoordinatorschrijftde zittende autoriteit na elke
rebaseEveryOpsversies een verseCollabSnapshot.capture(deck, version, transport.lastSeq). Getriggerd op eenops-teller, geen wandklok — deterministisch toetsbaar. Elke autoriteit doet dit
(de sidecar-snapshot is niet de
saveDeckdie een tijdelijke autoriteit moetlaten).
writeSnapshotoverschrijft, dus er is altijd precies één (de nieuwste)basislijn; oude op-records blijven staan, zodat de join-race onschuldig is.
Bewuste keuzes / uitgesteld
begrenzen) is een apart vervolg: #1007. Het vraagt een WebDAV-DELETE (een
nieuwe, data-muterende uitgaande operatie → security-review) en strand-recovery.
Deze increment lost de join-snelheid op; de op-log blijft groeien tot #1007.
een joiner reconstrueert locks alleen uit events ná de basislijn. Aanvaardbaar:
locks zijn adviserend (de autoriteit serialiseert elke edit) — gedocumenteerd in
§5.2.
Reikwijdte
collab_snapshot.dart(seq),collab_session.dart(initialVersion),webdav_async_transport.dart(initialSeq/lastSeq),collab_session_launch.dart(joiner + host-resume vanaf de basislijn),
handover_coordinator.dart(herbaselijning). Geen nieuwe l10n (onzichtbaar voor de gebruiker), geen
afhankelijkheid.
Toetsing
Na een implementatie-correctheid-review en een bewaker-review; elke bevinding
verwerkt (de eigenaar-hervatting vanaf een niet-nul snapshot is nu getoetst met
version ≠ seq; de herbaselijn-test onderscheidtlastSeqvanversionvia eenlock-record; de changelog maakt het size/speed-onderscheid net zo scherp als de
docs). Nieuwe tests o.a.: snapshot-seq round-trip + default, sessie-startversie,
een joiner die aantoonbaar alleen de recente records leest (read-tellende store),
herbaselijn-drempel, en de eigenaar-hervatting.
make checkgroen (87,3%),make check-secretsenmake sastschoon. Geen goldens (geen rendering).🤖 Generated with Claude Code
CollabSnapshot is now {version, seq, slides}: seq is the highest log sequence the baseline subsumes, so a joiner can resume just above it. A missing seq decodes as 0 (a pre-§5.2 baseline at version 0). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>