Herstelopruiming wist de momentopname van een nog open vuil tabblad #2722

Closed
opened 2026-11-02 22:19:19 +00:00 by brenno · 0 comments
Owner

Wat er mis is

Een vuil tabblad dat zeven dagen niet meer verandert terwijl de app open blijft, verliest zijn herstelbestand. De autosave schrijft niet opnieuw, want de inhoud is identiek. Daarna is een crash het onopgeslagen werk kwijt. Het tabblad leeft alleen nog in dat proces.

Bewijs

  • lib/state/tabs_provider.dart: de tik slaat een schrijfactie over bij een identiek deck en roept wel pruneIfDue aan.
  • lib/services/recovery_service.dart pruneOlderThan: verwijdert elk .json ouder dan zeven dagen op wijzigingstijd, zonder te kijken of het sessielock van deze sessie nog leeft. Dat lock bestaat juist om momentopnames van een levend exemplaar te herkennen. De prune gebruikt het niet.

test/recovery_service_test.dart toetst alleen leeftijd.

Voorstel

Bestanden van de eigen levende sessie overslaan, of de wijzigingstijd bij elke tik verversen zolang het tabblad vuil is.

Regressietest: een momentopname met de sessie-id van een levend lock, ouder dan defaultMaxAge, moet pruneOlderThan overleven. Dezelfde leeftijd zonder levend lock moet weg.

Het bestandsformaat verandert niet.

## Wat er mis is Een vuil tabblad dat zeven dagen niet meer verandert terwijl de app open blijft, verliest zijn herstelbestand. De autosave schrijft niet opnieuw, want de inhoud is identiek. Daarna is een crash het onopgeslagen werk kwijt. Het tabblad leeft alleen nog in dat proces. ## Bewijs - `lib/state/tabs_provider.dart`: de tik slaat een schrijfactie over bij een identiek deck en roept wel `pruneIfDue` aan. - `lib/services/recovery_service.dart` `pruneOlderThan`: verwijdert elk `.json` ouder dan zeven dagen op wijzigingstijd, zonder te kijken of het sessielock van deze sessie nog leeft. Dat lock bestaat juist om momentopnames van een levend exemplaar te herkennen. De prune gebruikt het niet. `test/recovery_service_test.dart` toetst alleen leeftijd. ## Voorstel Bestanden van de eigen levende sessie overslaan, of de wijzigingstijd bij elke tik verversen zolang het tabblad vuil is. Regressietest: een momentopname met de sessie-id van een levend lock, ouder dan `defaultMaxAge`, moet `pruneOlderThan` overleven. Dezelfde leeftijd zonder levend lock moet weg. Het bestandsformaat verandert niet.
brenno 2026-11-03 00:46:42 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
LibreKAT/Ocideck#2722
No description provided.