fix(git): laat de deckmap heel bij openen, opslaan en samenvoegen (#670) #676
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!676
Loading…
Reference in a new issue
No description provided.
Delete branch "fix/native-merge-deckmap-670"
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?
Sluit #670.
Een deckmap is meer dan
deck.md. De cijfers van een gekoppelde grafiek staan indata/*.jsonernaast, en sinds #541 de notities indeck.user-notes.json.De oorzaak lag een stap eerder dan het issue vermoedde. Het native openpad riep
withRepoSidecarshelemaal niet aan — alleen het REST-pad deed dat. Er stond dus een deck in de editor dat zijn eigen lagen niet kende, en omdat élke schrijfweg de deckmap vervangt door wat de app samenstelde, ruimde de eerstvolgende gewone opslag ze op. Geen botsing nodig, geen merge, geen melding — en het deck zag er heel uit: desource-verwijzing stond er nog, alleen de cijfers waren weg.Drie plekken, want het ging op drie manieren mis:
tabs_provider_git_native.dart) hydrateert nu metwithRepoSidecars, net als het REST-pad.readDeckgaf de bestanden hierboven toch al mee, dus het kost geen tweede leesronde;resolveRepoDeckMerge) hydrateert elke kant met álle lagen in plaats van alleen de notities — anders draagtmerge.mergedgeen inline cijfers, levertchartDataFilesOfniets, en verdwijntdata/*.jsonook bij een geslaagde merge, precies zoals je in je tweede lezing schreef;deck.md. Git's eigen tekst-merge is dan al over de deckmap gegaan, dus de sidecars daar kunnen conflictmarkeringen dragen; die worden teruggeschreven zoals ze bij ons stonden.De contractvraag, en waarom hij toch mee kon
mergeRemotebeloofde dat wat de resolver niet noemt verwijderd mag worden. Die volledigheid kón de resolver niet waarmaken: hij krijgt driedeck.md-blobs en een lezer per kant, en weet verder niets van de map. Het contract is omgedraaid naar bijwerken —fileswordt geschreven,deleteswordt verwijderd, de rest blijft staan. Dat is jouw tweede voorstel, en het laat de twee vlakken hetzelfde zeggen: het REST-vlak werkte al metcommitFiles(upserts:, deletes:).commitDeckblijft de map wél vervangen. Daar is de app werkelijk de autoriteit over wat een deck bevat — zo verdwijnt het databestand van een verwijderde dia — enbuildDeckRepoFileslevert elk lid. De asymmetrie is het punt: vervangen mag precies wanneer de schrijver de hele set kent, en de merge-resolver kent die niet. Dat staat zo in GIT_STORAGE §9.7.Regressietest
git_native_merge_test.dart, drie gevallen zoals je vroeg plus één die je nog niet kon weten:deck.mdvan hen die de importpoort weigert. Die toetst tegen de clone en niet tegen de origin: bijclean: falsewordt er niets gepusht, dus de origin bewijst daar niets. Mijn eerste versie deed dat wél en stond daardoor onterecht groen — de enige van de drie die niet vanzelf rood werd.Alle drie de nieuwe gevallen stonden rood tegen de onherstelde code.
Een refactor die erbij hoorde
De reparatie duwde
TabsNotifierover zijn klasseplafond (2352 / 2325). Niet de basislijn verhoogd maar gedrag eruit gehaald, en wel het gedrag dat er sowieso te vaak in stond: de "mem:uit de webstore, anders van schijf"-regel stond vijf keer letterlijk uitgeschreven, één per schrijfpad, en drie openpaden meldden op drie plekken hetzelfde over onleesbare grafiekdata. Nu_repoAssetBytesen_reportMissingChartData, top-level in dezelfde library. De klasse zakt naar 2316 regels en de basislijn gaat mee omlaag.Poort
make checkgroen (niet doortailgepijpt). Documentatie bijgewerkt: CHANGELOG, SOURCE_MAP, GIT_STORAGE §9.2 en §9.7 — die beschreven allemaal nog het oude contract, en §9.2 zei "deck.md and sidecars" over een openpad dat op het native vlak geen sidecars las.Geen afhankelijkheid erbij (geen SBOM), geen nieuwe zichtbare tekst (geen l10n).
make check-secretsenmake sastniet gedraaid.