Laat lokale bestandsconflicten vergelijken en veilig samenvoegen (#2323) #2351

Merged
brenno merged 1 commit from issue-2323-local-file-conflicts into main 2026-10-07 15:26:13 +00:00
Owner

Summary

  • DeckNotifier houdt een basis-deck bij (laatste open-/opslagbeurt) als driewegs-voorouder, in een eigen DeckLocalMerge-klasse om de omvangratchet te houden.
  • Nieuwe pure orkestratie lib/services/local_conflict.dart: driewegs-merge via mergeDeckVersions, eerlijke tweewegs-vergelijking zonder basis, per-dia keuze-toepassing, blok-/woordniveau-diff voor documenten.
  • LocalDeckConflictDialog toont per dia wat verschilt, eist expliciete keuze per botsing; DocumentConflictDialog toont blokverschillen met woordmarkering.
  • Merge-toepassing: één ongedaan-stap, blijft vuil, weigert bij verlopen schijf-vingerafdruk (race → opnieuw vergelijken).
  • 15 nieuwe strings in alle 30 niet-NL talen via add_l10n.

Geen netwerk, geen afhankelijkheid, geen formaatwijziging, geen wachter.

Test plan

  • make check volledig groen
  • 19 nieuwe tests in test/local_conflict_test.dart
  • 139 gerichte regressietests

Fixes #2323

## Summary - DeckNotifier houdt een basis-deck bij (laatste open-/opslagbeurt) als driewegs-voorouder, in een eigen DeckLocalMerge-klasse om de omvangratchet te houden. - Nieuwe pure orkestratie lib/services/local_conflict.dart: driewegs-merge via mergeDeckVersions, eerlijke tweewegs-vergelijking zonder basis, per-dia keuze-toepassing, blok-/woordniveau-diff voor documenten. - LocalDeckConflictDialog toont per dia wat verschilt, eist expliciete keuze per botsing; DocumentConflictDialog toont blokverschillen met woordmarkering. - Merge-toepassing: één ongedaan-stap, blijft vuil, weigert bij verlopen schijf-vingerafdruk (race → opnieuw vergelijken). - 15 nieuwe strings in alle 30 niet-NL talen via add_l10n. Geen netwerk, geen afhankelijkheid, geen formaatwijziging, geen wachter. #### Test plan - [x] make check volledig groen - [x] 19 nieuwe tests in test/local_conflict_test.dart - [x] 139 gerichte regressietests Fixes #2323
Beide conflictdialogen boden alleen een blinde keuze. Nu is er
"Verschillen bekijken…" plus "Mijn versie als kopie bewaren":

- DeckNotifier bewaart de exacte basisversie van de laatste open-/opslag
  (alleen bij een aantoonbare basis, nooit bij vuil herstel) en kan een
  merge als één ongedaan-stap toepassen — met vingerafdruk-controle zodat
  een verlopen analyse nooit wordt toegepast.
- services/local_conflict.dart orkestreert de driewegs-analyse rond de
  bewezen diffDeckVersions/mergeDeckVersions en levert de blok- en
  woordvergelijking voor documenten.
- De dia-dialoog toont overzicht + verplichte keuze per botsende dia;
  de documentdialoog toont beide bronnen zij-aan-zij zonder tekstmerge.
- Schijf leest uitsluitend via de open-poort; elke schrijfactie hertoetst
  de vingerafdruk (mtime/hash) vlak ervoor.

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

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
brenno merged commit fed56ebb44 into main 2026-10-07 15:26:13 +00:00
brenno deleted branch issue-2323-local-file-conflicts 2026-10-07 15:26:14 +00:00
Sign in to join this conversation.
No description provided.