fix(save): sidecars vóór de .md + grafiekcijfers inline bij falend databestand #1969

Merged
brenno merged 1 commit from fix/transactionele-opslag-1949-1950 into main 2026-09-03 14:26:42 +00:00
Owner

Samenvatting

Twee opslag-bugs in één PR, omdat ze dezelfde functie raken (_writeProject):

  • #1949 — Niet-transactionele opslag. Sidecars werden ná de .md geschreven. Faalde een sidecar, dan stond de nieuwe .md al op schijf met oude/ontbrekende sidecars. Nu worden sidecars vóór de .md geschreven — de .md is het commit-punt. Markdown + recordWrittenBytes gaan vooraf zodat het zegel de juiste hash draagt.
  • #1950 — Grafiekcijfers verdwijnen bij falend databestand. _externalizeCharts haalt cijfers uit de markdown; lukt het databestand niet, dan blijft de .md de cijfers inline houden (inlineChartData: true). Het tabblad blijft vuil (isDirty), zodat de herstelkopie blijft en de gebruiker weet dat hij nog niet klaar is.

Wat er verandert

  • lib/services/file/file_service_project.dart: schrijfvolgorde omgekeerd (sidecars vóór .md), markdown + recordWrittenBytes gaan vooraf.
  • lib/state/deck_provider.dart: _reportChartWarnings retourneert bool; _saveToPath en saveAs houden isDirty waar bij grafiekdata-falen.
  • tool/check_conventions.dart: plafonds voor DeckNotifier (+4) en FileService (+1) verhoogd met reden.

Bewaker

De wijziging raakt opslag en wat er in de .md terechtkomt, maar is puur defensief: geen formaatwijziging (de .md ondersteunt al zowel inline als source-only), geen nieuwe afhankelijkheid, geen uitgaand verkeer. De inline-cijfers-fallback verbetert uitwisselbaarheid (de .md blijft zelfbevat) in plaats van deze te verminderen.

Test plan

  • make check groen (11000+ tests, golden suite, alle poorten)
  • make check-secrets schoon (gitleaks + trufflehog)
  • make sast schoon (semgrep, 0 bevindingen)
  • Nieuwe test: sidecar-fout laat oude .md op schijf (#1949)
  • Nieuwe test: grafiekcijfers blijven inline + tabblad blijft vuil (#1950)
  • Bestaande test aangepast: chart_data_file_test verwacht nu inline cijfers bij onbeschrijfbaar databestand

Generated with Devin

## Samenvatting Twee opslag-bugs in één PR, omdat ze dezelfde functie raken (`_writeProject`): - **#1949 — Niet-transactionele opslag.** Sidecars werden ná de `.md` geschreven. Faalde een sidecar, dan stond de nieuwe `.md` al op schijf met oude/ontbrekende sidecars. Nu worden sidecars vóór de `.md` geschreven — de `.md` is het commit-punt. Markdown + `recordWrittenBytes` gaan vooraf zodat het zegel de juiste hash draagt. - **#1950 — Grafiekcijfers verdwijnen bij falend databestand.** `_externalizeCharts` haalt cijfers uit de markdown; lukt het databestand niet, dan blijft de `.md` de cijfers inline houden (`inlineChartData: true`). Het tabblad blijft vuil (`isDirty`), zodat de herstelkopie blijft en de gebruiker weet dat hij nog niet klaar is. ### Wat er verandert - `lib/services/file/file_service_project.dart`: schrijfvolgorde omgekeerd (sidecars vóór `.md`), markdown + `recordWrittenBytes` gaan vooraf. - `lib/state/deck_provider.dart`: `_reportChartWarnings` retourneert `bool`; `_saveToPath` en `saveAs` houden `isDirty` waar bij grafiekdata-falen. - `tool/check_conventions.dart`: plafonds voor `DeckNotifier` (+4) en `FileService` (+1) verhoogd met reden. ### Bewaker De wijziging raakt opslag en wat er in de `.md` terechtkomt, maar is puur defensief: geen formaatwijziging (de `.md` ondersteunt al zowel inline als source-only), geen nieuwe afhankelijkheid, geen uitgaand verkeer. De inline-cijfers-fallback verbetert uitwisselbaarheid (de `.md` blijft zelfbevat) in plaats van deze te verminderen. #### Test plan - [x] `make check` groen (11000+ tests, golden suite, alle poorten) - [x] `make check-secrets` schoon (gitleaks + trufflehog) - [x] `make sast` schoon (semgrep, 0 bevindingen) - [x] Nieuwe test: sidecar-fout laat oude `.md` op schijf (#1949) - [x] Nieuwe test: grafiekcijfers blijven inline + tabblad blijft vuil (#1950) - [x] Bestaande test aangepast: `chart_data_file_test` verwacht nu inline cijfers bij onbeschrijfbaar databestand Generated with [Devin](https://devin.ai)
fix(save): sidecars vóór de .md schrijven + grafiekcijfers inline houden bij falend databestand
All checks were successful
scans / scans (pull_request) Successful in 2m31s
static-gate / static-gate (pull_request) Successful in 7m0s
0cb6bdc076
#1949: _writeProject schreef eerst de .md en daarna pas de sidecars
(annotaties, notities, MIAUW, zegel, weigeringen). Faalde een sidecar,
dan stond de nieuwe .md al op schijf met oude of ontbrekende sidecars —
de gebruiker dacht dat opslaan was afgebroken, maar de schade was al
aangericht. Nu worden de sidecars vóór de .md geschreven: de .md is het
commit-punt, en faalt een sidecar dan staat de oude .md nog op schijf
met de oude sidecars (consistent). De markdown en recordWrittenBytes
gaan vooraf, zodat het zegel de hash van de nieuwe .md draagt.

#1950: _externalizeCharts haalt grafiekcijfers uit de markdown en zet
ze in data/*.json. Lukt dat schrijven niet, dan bevat de .md alleen nog
de source-verwijzing naar een ontbrekend bestand — gegevensverlies. Nu
houdt de .md de cijfers inline (inlineChartData: true) wanneer er
chartWarnings zijn. Het tabblad blijft vuil (isDirty), zodat de
herstelkopie blijft en de gebruiker weet dat hij nog niet klaar is.

Generated with [Devin](https://devin.ai)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
brenno merged commit edf8609add into main 2026-09-03 14:26:42 +00:00
Sign in to join this conversation.
No description provided.