fix(document): opslaan vanuit Visueel is byte-getrouw (#1613) #1619
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!1619
Loading…
Reference in a new issue
No description provided.
Delete branch "fix/1613-visual-save-byte-faithful"
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?
Samenvatting
Een document opslaan vanuit de visuele stand schreef niet de bron terug die je hebt bewerkt, maar de bron die uit de heen-en-terugweg naar de rijke-tekstlaag komt. Die weg is niet byte-getrouw, dus het bestand op schijf werd geherstructureerd op plekken waar je niets hebt aangeraakt — witregels rond koppen schoven, een compacte tabelscheidingsregel (
|---|---|) werd| --- | --- |, een genummerde lijst kon verhuizen. In een repository met versiebeheer verdween de echte wijziging tussen tientallen spookregels.De oplossing (ontwerpbesluit B: alleen wijzigingen wegschrijven):
source_patcher.dartvergelijkt drie versies van de bron: het origineel op schijf, de baseline (round-trip zónder bewerkingen), en de current (round-trip mét bewerkingen). Een regelgebaseerde LCS-diff isoleert de echte bewerkingen (baseline → current). Die diff toegepast op het origineel levert de byte-getrouwe versie op.DocumentStatehoudt nusavedSource(de bron bij laden) envisualEdited(of de huidige bron uit Visueel komt) bij.DocumentNotifier.editaccepteert eenvisualEdit-vlag.saveDocumentWithDestinationpatcht bij een visuele opslaan de echte bewerkingen opsavedSourcein plaats van de hele genormaliseerde bron weg te schrijven. Na opslaan wordt de notifier bijgewerkt met de byte-getrouwe versie.visualEdit: truemee wanneer de bewerking uit de visuele stand komt.Bewaker
Deze wijziging raakt geen bestandsformaat, opslag, afhankelijkheid, uitgaand verkeer of publieke belofte — ze herstelt juist de bestaande belofte (
saveDocument: "precies de bron, geen normalisatie"). De bewaker-stap is expliciet overgeslagen.Testplan
make checkgroen (format, analyse, 10258 tests, dekking 87.2%, per-file vloer)patchVisualEdits(geen bewerking, één woord toegevoegd, tabelscheidingsregel behouden, witregels behouden, regel verwijderd, regel ingevoegd, regel verplaatst, baseline == current, meerdere bewerkingen, lege edge cases)saveDocumentWithDestination(Visueel schrijft alleen bewerking weg, Bron is byte-getrouw zonder patching)make check-secretsniet gedraaid (geen nieuwe dependencies of sleutels)make sastniet gedraaid (geen nieuwe dependencies of sleutels)Generated with Devin