Samenwerken: zeven dia-velden reizen helemaal niet mee, ook niet bij een nieuwe dia #1807

Closed
opened 2026-08-27 13:22:56 +00:00 by brenno · 0 comments
Owner

Wat er misgaat

Zeven velden van Slide zitten helemáál niet in de samenwerklaag. Niet in
slideToJson, niet in slideFromJson, niet in SlideField:

anchor · nextAnchor · ganttScale · ganttSections · menuLayout ·
tableColumnAlignments · tableNumberColumns

Een codec-rondgang verliest ze. Dat betekent dat niet alleen een bewerking niet
aankomt (dat is #1803 en de bredere zaak), maar dat ook een nieuwe dia bij de
ander arriveert met die velden op hun standaardwaarde — en een hersynchronisatie
of een herverbinding zet ze bij iedereen terug naar de standaard.

Waarom dit ernstiger is dan #1803

Het breekt een vastgelegde belofte. De doc-comment van slideToJson zegt:

Serialise a whole [Slide] to a JSON-safe map. Every field is carried so the
receiver reproduces the slide exactly (P3)

Dat klopt niet, en de tekst maakt het onzichtbaar: wie hem leest gaat er terecht
van uit dat de dia compleet overgaat.

Wat de gebruiker merkt

  • anchor en nextAnchor dragen de niet-lineaire navigatie (#1162). Een
    keuze-menudia die naar dia's springt, verliest bij de ander zijn ankers — de
    sprongen wijzen nergens meer heen.
  • menuLayout bepaalt hoe die menudia eruitziet.
  • ganttScale en ganttSections bepalen de tijdas en de indeling van een
    Gantt-dia; zonder die twee ziet de ander een andere planning.
  • tableColumnAlignments en tableNumberColumns bepalen uitlijning en
    getalnotatie van een tabel.

Geen van deze is voorbijgaande renderstand — het is allemaal geautoriseerde
inhoud die in het .md wordt bewaard.

Reproductie

  1. Twee cliënten in dezelfde sessie.
  2. Cliënt A maakt een menudia met een blok dat naar een dia met een anker springt.
  3. Cliënt B krijgt de dia binnen; het anker en het sprongdoel ontbreken.

Voorstel

  1. De zeven velden opnemen in slideToJson en slideFromJson, met een test die
    een volledige dia heen en terug haalt en élk veld vergelijkt — niet een
    handmatig rijtje, want dat is precies hoe deze zeven zijn ontstaan.
  2. Daarna beslissen of ze óók in SlideField horen (bewerken, niet alleen
    invoegen). Voor anchor/nextAnchor ligt dat voor de hand.
  3. De schuldlijst unsyncedBaseline in tool/check_collab_field_parity.dart
    navenant laten krimpen — de poort uit #1803 bewaakt dat hij niet groeit, maar
    krimpen moet met de hand.

Herkomst

Gevonden bij #1803, toen de nieuwe pariteitspoort de hele oppervlakte in kaart
bracht. In beide richtingen nagekeken: nul treffers in slideToJson en nul in
slideFromJson.

**Wat er misgaat** Zeven velden van `Slide` zitten helemáál niet in de samenwerklaag. Niet in `slideToJson`, niet in `slideFromJson`, niet in `SlideField`: `anchor` · `nextAnchor` · `ganttScale` · `ganttSections` · `menuLayout` · `tableColumnAlignments` · `tableNumberColumns` Een codec-rondgang verliest ze. Dat betekent dat niet alleen een *bewerking* niet aankomt (dat is #1803 en de bredere zaak), maar dat ook een **nieuwe dia** bij de ander arriveert met die velden op hun standaardwaarde — en een hersynchronisatie of een herverbinding zet ze bij iedereen terug naar de standaard. **Waarom dit ernstiger is dan #1803** Het breekt een vastgelegde belofte. De doc-comment van `slideToJson` zegt: > Serialise a whole [Slide] to a JSON-safe map. **Every field is carried so the > receiver reproduces the slide exactly (P3)** Dat klopt niet, en de tekst maakt het onzichtbaar: wie hem leest gaat er terecht van uit dat de dia compleet overgaat. **Wat de gebruiker merkt** - `anchor` en `nextAnchor` dragen de niet-lineaire navigatie (#1162). Een keuze-menudia die naar dia's springt, verliest bij de ander zijn ankers — de sprongen wijzen nergens meer heen. - `menuLayout` bepaalt hoe die menudia eruitziet. - `ganttScale` en `ganttSections` bepalen de tijdas en de indeling van een Gantt-dia; zonder die twee ziet de ander een andere planning. - `tableColumnAlignments` en `tableNumberColumns` bepalen uitlijning en getalnotatie van een tabel. Geen van deze is voorbijgaande renderstand — het is allemaal geautoriseerde inhoud die in het `.md` wordt bewaard. **Reproductie** 1. Twee cliënten in dezelfde sessie. 2. Cliënt A maakt een menudia met een blok dat naar een dia met een anker springt. 3. Cliënt B krijgt de dia binnen; het anker en het sprongdoel ontbreken. **Voorstel** 1. De zeven velden opnemen in `slideToJson` en `slideFromJson`, met een test die een volledige dia heen en terug haalt en élk veld vergelijkt — niet een handmatig rijtje, want dat is precies hoe deze zeven zijn ontstaan. 2. Daarna beslissen of ze óók in `SlideField` horen (bewerken, niet alleen invoegen). Voor `anchor`/`nextAnchor` ligt dat voor de hand. 3. De schuldlijst `unsyncedBaseline` in `tool/check_collab_field_parity.dart` navenant laten krimpen — de poort uit #1803 bewaakt dat hij niet groeit, maar krimpen moet met de hand. **Herkomst** Gevonden bij #1803, toen de nieuwe pariteitspoort de hele oppervlakte in kaart bracht. In beide richtingen nagekeken: nul treffers in `slideToJson` en nul in `slideFromJson`.
brenno 2026-08-27 16:43:32 +00:00
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#1807
No description provided.