Grafiekcijfers verdwijnen uit de markdown terwijl opslaan als geslaagd telt als het databestand faalt #1950

Closed
opened 2026-09-03 10:14:26 +00:00 by brenno · 0 comments
Owner

Het probleem

Bij opslaan worden inline grafiekcijfers uit de markdown naar data/*.json verplaatst, zodat het .md-bestand alleen nog een source:-verwijzing houdt. Lukt het schrijven van dat databestand niet, dan krijgt de gebruiker een waarschuwing — maar opslaan retourneert true, het tabblad wordt schoon gemarkeerd, en de herstelkopie verdwijnt.

Op schijf staat dan markdown mét verwijzing en zónder (of met een oude) datafile. Na heropenen of een crash: een lege grafiek. De cijfers zaten in het geheugen, zijn uit de markdown gehaald, en nergens duurzaam bewaard.

Hoe het nu werkt

lib/services/file/file_service_project.dart:

updatedDeck = await _externalizeCharts(updatedDeck, dir);
final chartWarnings = await _writeChartData(...);
...
final markdown = _md.generateDeck(updatedDeck);
await writeStringAtomic(File(filePath), markdown);
return (deck: updatedDeck, chartWarnings: chartWarnings);

De commentaar daar erkent het risico en stuurt chartWarnings terug zodat de UI niet "geslaagd" zou moeten lezen. DeckNotifier._saveToPath meldt de waarschuwing wél (_reportChartWarnings) en zet daarna alsnog isDirty: false.

Er zijn tests voor het signaal (chart_data_save_warning_test.dart); niet voor "dirty blijft true tot de datafile er is".

Denkrichting (niet uitgewerkt)

Als chartWarnings niet leeg is: de inline cijfers in de markdown laten staan (externaliseren terugdraaien), isDirty true houden, en niet de herstelkopie wissen. De waarschuwing blijft; opslaan is dan écht niet klaar.

Alternatief: _writeChartData laten gooien zodat het bestaande foutpad in _saveToPath (isDirty blijft, error-state) het overneemt.

Raakvlakken

  • lib/services/file/file_service_project.dart (_externalizeCharts, _writeChartData)
  • lib/state/deck_provider.dart (_saveToPath, _reportChartWarnings)
  • docs/FILE_FORMAT.md (grafiekdata in data/*.json) — geen formaatwijziging nodig
## Het probleem Bij opslaan worden inline grafiekcijfers uit de markdown naar `data/*.json` verplaatst, zodat het `.md`-bestand alleen nog een `source:`-verwijzing houdt. Lukt het schrijven van dat databestand niet, dan krijgt de gebruiker een waarschuwing — maar opslaan retourneert `true`, het tabblad wordt schoon gemarkeerd, en de herstelkopie verdwijnt. Op schijf staat dan markdown mét verwijzing en zónder (of met een oude) datafile. Na heropenen of een crash: een lege grafiek. De cijfers zaten in het geheugen, zijn uit de markdown gehaald, en nergens duurzaam bewaard. ## Hoe het nu werkt `lib/services/file/file_service_project.dart`: ```dart updatedDeck = await _externalizeCharts(updatedDeck, dir); final chartWarnings = await _writeChartData(...); ... final markdown = _md.generateDeck(updatedDeck); await writeStringAtomic(File(filePath), markdown); return (deck: updatedDeck, chartWarnings: chartWarnings); ``` De commentaar daar erkent het risico en stuurt `chartWarnings` terug zodat de UI niet "geslaagd" zou moeten lezen. `DeckNotifier._saveToPath` meldt de waarschuwing wél (`_reportChartWarnings`) en zet daarna alsnog `isDirty: false`. Er zijn tests voor het signaal (`chart_data_save_warning_test.dart`); niet voor "dirty blijft true tot de datafile er is". ## Denkrichting (niet uitgewerkt) Als `chartWarnings` niet leeg is: de inline cijfers in de markdown laten staan (externaliseren terugdraaien), `isDirty` true houden, en niet de herstelkopie wissen. De waarschuwing blijft; opslaan is dan écht niet klaar. Alternatief: `_writeChartData` laten gooien zodat het bestaande foutpad in `_saveToPath` (`isDirty` blijft, error-state) het overneemt. ## Raakvlakken - `lib/services/file/file_service_project.dart` (`_externalizeCharts`, `_writeChartData`) - `lib/state/deck_provider.dart` (`_saveToPath`, `_reportChartWarnings`) - `docs/FILE_FORMAT.md` (grafiekdata in `data/*.json`) — geen formaatwijziging nodig
brenno 2026-09-03 14:27:01 +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#1950
No description provided.