Samenwerken stap 2: Fase 0 — de transportloze samenwerklaag #975

Closed
opened 2026-07-29 22:14:04 +00:00 by brenno · 2 comments
Owner

De kern van COLLABORATION.md (§5, §10 Fase 0): co-auteurschap als getypte operaties op het Deck-model, zonder netwerk en zonder dependency — volledig unit-testbaar tegen een LoopbackTransport.

Vijf PR-formaat stappen, langs de bestandsindeling uit §11:

  1. lib/collab/deck_op.dart — de sealed DeckOp-hiërarchie + applyOp (field-level, nooit Markdown-diffs; P5).
  2. lib/collab/deck_snapshot.dart — model-(de)serialisatie in JSON mét versieveld (besluit op open vraag 1: versioned schema).
  3. lib/collab/collab_transport.dart — het CollabTransport-interface + LoopbackTransport.
  4. lib/collab/collab_session.dart — authority-machine, monotone versietoekenning, lock-tabel, handover (hoogste versie wint, vaste volgorde breekt gelijkspel).
  5. lib/state/collab_session_provider.dart + per-tab override in app_shell.dart + SessionRef op TabInfo.

Invarianten die elke stap moet bewaken: P2 (bestand = waarheid), P3 (één authority), P5 (model, niet Markdown), §5.5 (slide-ids zijn sessiegebonden; nooit mid-sessie herparsen). Besluit op open vraag 2: field-level ops volstaan voor v1 — de soft-locks maken dat afdoende.

Kan parallel aan stap 1 (geen bestandsoverlap met lib/meetings/).

De kern van COLLABORATION.md (§5, §10 Fase 0): co-auteurschap als getypte operaties op het Deck-model, zonder netwerk en zonder dependency — volledig unit-testbaar tegen een LoopbackTransport. Vijf PR-formaat stappen, langs de bestandsindeling uit §11: 1. lib/collab/deck_op.dart — de sealed DeckOp-hiërarchie + applyOp (field-level, nooit Markdown-diffs; P5). 2. lib/collab/deck_snapshot.dart — model-(de)serialisatie in JSON mét versieveld (besluit op open vraag 1: versioned schema). 3. lib/collab/collab_transport.dart — het CollabTransport-interface + LoopbackTransport. 4. lib/collab/collab_session.dart — authority-machine, monotone versietoekenning, lock-tabel, handover (hoogste versie wint, vaste volgorde breekt gelijkspel). 5. lib/state/collab_session_provider.dart + per-tab override in app_shell.dart + SessionRef op TabInfo. Invarianten die elke stap moet bewaken: P2 (bestand = waarheid), P3 (één authority), P5 (model, niet Markdown), §5.5 (slide-ids zijn sessiegebonden; nooit mid-sessie herparsen). Besluit op open vraag 2: field-level ops volstaan voor v1 — de soft-locks maken dat afdoende. Kan parallel aan stap 1 (geen bestandsoverlap met lib/meetings/).
Author
Owner

Dit wordt de nieuwe stap 0 van het samenwerktraject (was stap 2). De vergaderadapters (#973/#974/#979) zijn afgewezen per #985; de transportloze samenwerklaag — co-auteuren van een deck als getypte operaties op het Deck-model, LoopbackTransport, geen netwerk — is de kern van 'samenwerken' en is niet afgewezen. Eerste PR: lib/collab/deck_op.dart (de sealed DeckOp-hiërarchie + applyOp, met tests).

Dit wordt de nieuwe **stap 0** van het samenwerktraject (was stap 2). De vergaderadapters (#973/#974/#979) zijn afgewezen per #985; de transportloze samenwerklaag — co-auteuren van een deck als getypte operaties op het Deck-model, LoopbackTransport, geen netwerk — is de kern van 'samenwerken' en is niet afgewezen. Eerste PR: lib/collab/deck_op.dart (de sealed DeckOp-hiërarchie + applyOp, met tests).
Author
Owner

Gemergd naar main via PR #988 (20000a6e36). De transportloze samenwerklaag staat: het getypte operatiemodel (DeckOp + applyOp, fail-closed), het CollabTransport-contract met een LoopbackHub, en de autoriteit-statemachine met lock-tabel — puur Dart, geen netwerk, volledig getest over de loopback, bereikbaar via de TabInfo-seam (§5.7).

Bewust als vervolg (in de code en de PR gemarkeerd, niet stil weggelaten): de optimistische lokale bewerking onder een lock (§5.4), owner-drop-handover (§5.3), snapshot-herbasering voor laatkomers (§5.2), de nullable/clear-flag-velden, en de Riverpod-provider + app_shell-override (die horen bij de fase waarin er een echte sessie ís). Het netwerk zelf loopt via #976 (ketenkeuring matrix-SDK) → #977 (Fase 1 Matrix) → #978 (Fase 2).

Gemergd naar main via PR #988 (20000a6e36). De transportloze samenwerklaag staat: het getypte operatiemodel (DeckOp + applyOp, fail-closed), het CollabTransport-contract met een LoopbackHub, en de autoriteit-statemachine met lock-tabel — puur Dart, geen netwerk, volledig getest over de loopback, bereikbaar via de TabInfo-seam (§5.7). Bewust als vervolg (in de code en de PR gemarkeerd, niet stil weggelaten): de optimistische lokale bewerking onder een lock (§5.4), owner-drop-handover (§5.3), snapshot-herbasering voor laatkomers (§5.2), de nullable/clear-flag-velden, en de Riverpod-provider + app_shell-override (die horen bij de fase waarin er een echte sessie ís). Het netwerk zelf loopt via #976 (ketenkeuring matrix-SDK) → #977 (Fase 1 Matrix) → #978 (Fase 2).
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
LibreKAT/Ocideck#975
No description provided.