fix(collab): zeven Slide-velden reizen mee in de samenwerklaag (#1807) #1814

Merged
brenno merged 1 commit from fix/collab-missing-fields-1807 into main 2026-08-27 16:42:41 +00:00
Owner

Samenvatting

Zeven velden van Slide zaten helemáál niet in de samenwerklaag — niet in slideToJson, niet in slideFromJson, niet in SlideField:

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

Een nieuwe dia arriveerde bij de ander met die velden op hun standaardwaarde, en een hersynchronisatie zette ze bij iedereen terug. De doc-comment van slideToJson beloofde "Every field is carried so the receiver reproduces the slide exactly (P3)" — dat klopte niet.

Wat er is gedaan

  1. Alle zeven velden toegevoegd aan slideToJson en slideFromJson met backward-compatibele defaults (oude records zonder deze keys decoderen naar de Slide-standaardwaarden).
  2. Alle zeven velden toegevoegd aan SlideField zodat ook bewerkingen syncen, niet alleen invoegen. Drie nieuwe _ValueKind entries (menuLayout, tableAlignList, boolList) ondersteunen de nieuwe veldtypes in de per-field codec.
  3. slideFieldValue in collab_deck_diff.dart uitgebreid met de zeven nieuwe cases (exhaustive switch → compile-fout zonder).
  4. unsyncedBaseline gekrompen van 18 naar 11 — de zeven velden zijn niet langer schuld maar volledig gedekt in zowel slideToJson als SlideField.
  5. Method-length baseline voor _slideWithField (162 regels) — exhaustive switch met één case per veld, onherleidbaar.

Beslissing: alle zeven in SlideField

Het issue stelde voor om anchor/nextAnchor in ieder geval in SlideField op te nemen. Alle zeven zijn echter geautoriseerde inhoud die de gebruiker bewerkt via de UI (slide settings panel, table editor, menu editor). Niet syncen van bewerkingen is dezelfde klasse bug als het oorspronkelijke probleem. Daarom zijn alle zeven in SlideField opgenomen, niet alleen de twee voor de hand liggende.

Bewaker

Deze wijziging raakt het bestandsformaat niet (de velden zitten al in het .md via de Markdown parser), de opslag niet, geen afhankelijkheden, geen uitgaand verkeer, en geen publieke belofte die niet al in de doc-comment van slideToJson stond. De bewaker-stap is expliciet overgeslagen.

Test plan

  • make check groen: 10614 tests, 87.1% dekking
  • make check-secrets schoon (gitleaks + trufflehog, 0 leaks)
  • make sast schoon (semgrep, 0 findings)
  • Round-trip test vergelijkt elk veld van een maximale slide
  • deck_op_test.dart dekt alle 60 SlideField entries (completeness)
  • check_collab_field_parity groen: 76 velden, 60 gesynchroniseerd, 11 bekende schuld

Generated with Devin

## Samenvatting Zeven velden van `Slide` zaten helemáál niet in de samenwerklaag — niet in `slideToJson`, niet in `slideFromJson`, niet in `SlideField`: `anchor` · `nextAnchor` · `ganttScale` · `ganttSections` · `menuLayout` · `tableColumnAlignments` · `tableNumberColumns` Een nieuwe dia arriveerde bij de ander met die velden op hun standaardwaarde, en een hersynchronisatie zette ze bij iedereen terug. De doc-comment van `slideToJson` beloofde "Every field is carried so the receiver reproduces the slide exactly (P3)" — dat klopte niet. ### Wat er is gedaan 1. **Alle zeven velden toegevoegd aan `slideToJson` en `slideFromJson`** met backward-compatibele defaults (oude records zonder deze keys decoderen naar de Slide-standaardwaarden). 2. **Alle zeven velden toegevoegd aan `SlideField`** zodat ook bewerkingen syncen, niet alleen invoegen. Drie nieuwe `_ValueKind` entries (`menuLayout`, `tableAlignList`, `boolList`) ondersteunen de nieuwe veldtypes in de per-field codec. 3. **`slideFieldValue` in `collab_deck_diff.dart`** uitgebreid met de zeven nieuwe cases (exhaustive switch → compile-fout zonder). 4. **`unsyncedBaseline` gekrompen van 18 naar 11** — de zeven velden zijn niet langer schuld maar volledig gedekt in zowel `slideToJson` als `SlideField`. 5. **Method-length baseline** voor `_slideWithField` (162 regels) — exhaustive switch met één case per veld, onherleidbaar. ### Beslissing: alle zeven in `SlideField` Het issue stelde voor om `anchor`/`nextAnchor` in ieder geval in `SlideField` op te nemen. Alle zeven zijn echter geautoriseerde inhoud die de gebruiker bewerkt via de UI (slide settings panel, table editor, menu editor). Niet syncen van bewerkingen is dezelfde klasse bug als het oorspronkelijke probleem. Daarom zijn alle zeven in `SlideField` opgenomen, niet alleen de twee voor de hand liggende. ### Bewaker Deze wijziging raakt het bestandsformaat niet (de velden zitten al in het `.md` via de Markdown parser), de opslag niet, geen afhankelijkheden, geen uitgaand verkeer, en geen publieke belofte die niet al in de doc-comment van `slideToJson` stond. De bewaker-stap is expliciet overgeslagen. #### Test plan - [x] `make check` groen: 10614 tests, 87.1% dekking - [x] `make check-secrets` schoon (gitleaks + trufflehog, 0 leaks) - [x] `make sast` schoon (semgrep, 0 findings) - [x] Round-trip test vergelijkt elk veld van een maximale slide - [x] `deck_op_test.dart` dekt alle 60 `SlideField` entries (completeness) - [x] `check_collab_field_parity` groen: 76 velden, 60 gesynchroniseerd, 11 bekende schuld Generated with [Devin](https://devin.ai)
fix(collab): zeven Slide-velden reizen mee in de samenwerklaag (#1807)
All checks were successful
scans / scans (pull_request) Successful in 2m22s
static-gate / static-gate (pull_request) Successful in 5m35s
47ff7b8b1e
anchor, nextAnchor, ganttScale, ganttSections, menuLayout,
tableColumnAlignments en tableNumberColumns zaten helemaal niet in
slideToJson/slideFromJson — een nieuwe dia arriveerde bij de ander met
die velden op hun standaardwaarde. De doc-comment beloofde "Every field
is carried (P3)", maar dat klopte niet voor deze zeven.

Alle zeven zijn nu in slideToJson/slideFromJson (met backward-compatibele
defaults voor oude records) én in SlideField, zodat ook bewerkingen
syncen — niet alleen invoegen. Drie nieuwe _ValueKind entries
(menuLayout, tableAlignList, boolList) ondersteunen de nieuwe veldtypes
in de per-field codec.

De unsyncedBaseline krimpt van 18 naar 11; de zeven velden zijn niet
langer schuld maar volledig gedekt.

Generated with [Devin](https://devin.ai)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
brenno merged commit 058a010c08 into main 2026-08-27 16:42:41 +00:00
Sign in to join this conversation.
No description provided.