fix(collab): een gewijzigde paneelzoom reist weer mee, plus een poort op de synchroniseerbare oppervlakte (#1803) #1805
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!1805
Loading…
Reference in a new issue
No description provided.
Delete branch "fix/1803-collab-imagezoom-pariteit"
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?
Lost #1803 op: een gewijzigde paneelzoom bereikt de andere cliënt weer, en er
staat een poort op de richting die niemand bewaakte.
De fout
imageZoomstond niet inSlideField, endeckDiffToOpsloopt uitsluitend overdie enum — er is geen terugval op een hele-dia-operatie. Wie de zoom van een
paneelafbeelding versleepte, zag hem bij de ander onveranderd blijven: geen
melding, geen conflict, twee bijsnijdingen die stil uiteenlopen tot iemand
opslaat en er één wint.
De asymmetrie maakte het lastig na te doen.
slideToJsonkent het veld wél, duseen nieuwe dia droeg de zoom mee en een hersynchronisatie herstelde hem; alleen
het wijzigen op een bestaande dia kwam niet aan.
Het was vergeten, niet uitgesloten — de datums laten dat zien. Het operatiemodel
landde op 2026-07-30 mét
imageSizeen alle vier de focal-velden,imageZoomkwam op 2026-08-12 in
Slide, en heeft nooit indeck_op.dartgestaan.De regressietest, en waarom hij niet op de bestaande helper leunt
De test leest de wáárde ná toepassing, niet of een hervergelijking leeg is. De
bestaande
expectReproduces-helper — in het bestand omschreven als "thestrongest check" — is voor deze klasse fout blind: een veld dat de diff niet kent
is in béíde richtingen onzichtbaar, dus de hervergelijking komt leeg terug
terwijl de waarde nooit is overgekomen. Eerst rood gezien op de onherstelde code:
Expected: an object with length of <1>, Actual: [].De poort, en waarom een losse reparatie niet genoeg was
Er stonden al twee pariteitstests op de samenwerklaag, en ze kijken allebei
dezelfde kant op:
deck_op_testeist een testgeval voor elkeSlideField,collab_codec_testeist dat de codec elkeSlideFieldafbeeldt. Beidebeantwoorden "wordt alles ín de enum afgehandeld?". Niemand vroeg "staat elk
synchroniseerbaar veld ín de enum?" — dus een veld toevoegen aan
Slidehaaldegeen enkele poort omlaag. Dat is niet één bug maar een gat waar de volgende
precies zo doorheen valt.
make check-collab-field-paritystelt die vraag wel. Elk veld vanSlidestaatin
SlideField, óf op een uitsluitingslijst mét reden ernaast, óf op eenschuldlijst die alleen mag krimpen. Bewust niet synchroniseren blijft toegestaan;
de keuze niet maken niet meer, en wie het veld toevoegt beslist op het moment dat
hij het antwoord nog weet.
De poort is in twee richtingen getoetst: stil op de echte repo, en luid op
een geplante overtreding. Daarvoor is de beslislogica een zuivere functie, zodat
een test een veld kan verzinnen in plaats van het model te moeten verminken.
Wat de poort meteen zichtbaar maakt
De schuldlijst begint op achttien velden, en die zijn niet allemaal even erg.
imageZoom:slideToJsondraagt ze wel, de diffniet. Nieuwe dia compleet, bewerking niet.
anchor,nextAnchor,ganttScale,ganttSections,menuLayout,tableColumnAlignments,tableNumberColumns— zittenhelemaal niet in de samenwerklaag. Niet in
slideToJson, niet inslideFromJson. Een codec-rondgang verliest ze, dus ook een nieuwe dia komtbij de ander aan met die velden op hun standaardwaarde.
Dat laatste is ernstiger dan deze fix, want het breekt een vastgelegde belofte:
de doc-comment van
slideToJsonzegt "Every field is carried so the receiverreproduces the slide exactly (P3)". Dat verdient een eigen issue en zit
bewust niet in deze PR — het is een andere reparatie, met eigen tests.
Poorten
make checkvolledig groen (== OciDeck check complete ==, dekking 87,1%,per-bestandsvloer 0 eronder)
make check-secretsgroen ·make sastgroen (0 bevindingen)check-collab-field-parity: OK (76 Slide-velden — 53 gesynchroniseerd, 5 bewust niet, 18 bekende schuld)Geen bewaker-ronde: deze wijziging raakt het bestandsformaat niet, de opslag
niet, geen afhankelijkheid, geen uitgaand verkeer en geen publieke belofte in de
interface. Expliciet overgeslagen, niet vergeten.
Eén noot over de draai: de eerste twee
make check-pogingen vielen om doordateen andere sessie in dezelfde werkkopie van tak wisselde en mijn bestanden
midden in de suite onder de run vandaan haalde. Deze PR is groen gedraaid vanuit
een eigen worktree.