Deck-opslag is niet transactioneel: de .md staat al op schijf als een sidecar daarna faalt #1949
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#1949
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
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?
Het probleem
Opslaan van een project schrijft eerst afbeeldingen en de
.md(atoomair), en daarna pas de sidecars: annotaties (.ink.json), gebruikersnotities, MIAUW-dispositie, zegel, weigeringen.Faalt een sidecar — schijf vol, rechten, onderbroken schrijven — dan gooit
saveDeckDetaileden het tabblad blijft vuil. Op schijf staat intussen al de nieuwe markdown. Bij heropenen of crashherstel uit het bestand: de.mdis nieuw, de sidecars zijn oud of weg. Annotaties, notities of een zegel lijken verdwenen terwijl de gebruiker dacht dat opslaan was afgebroken.Hetzelfde patroon geldt voor het kopiëren van afbeeldingen naar
images/: dat gebeurt met gewoneFile.copyvóór de atomaire.md. Een crash middenin laat een halveimages/-map achter.Hoe het nu werkt
lib/services/file/file_service_project.dart,_writeProject:De
.mdis bewust atoomair (writeStringAtomic). De sidecars en asset-kopieën zijn dat als keten niet: er is geen rollback als stap 2 van 6 faalt.atomic_file_test.dartensave_hardening_test.dartdekken losse schrijffouten, niet "sidecar faalt ná geslaagde.md".Waarom dat zo gebouwd is
De
.mdmoet pure Marp blijven; specifieke data hoort ernaast (FILE_FORMAT). Elke sidecar is later toegevoegd. Atoomair schrijven per bestand was de lat; de keten als één transactie is nooit afgedwongen.Denkrichting (niet uitgewerkt)
Mogelijkheden, oplopend:
.mdatoomair vervangen (of andersom: sidecars eerst,.mdals laatste commit-punt), met opruimen van wezen bij falen..mdterugzetten vanuit de atomic-backup als die er nog is.Geen formaatwijziging. De sidecars blijven sidecars.
Raakvlakken
lib/services/file/file_service_project.dart(_writeProject,_copyLogoToProject, image-copy)lib/state/deck_provider.dart(_saveToPath)test/atomic_file_test.dart,test/save_hardening_test.dart