fix(scan): pas 32 MiB-deckgrens toe vóór scanPresentations leest (#1048) #1075

Merged
brenno merged 3 commits from fix/scan-deck-size-cap-1048 into main 2026-08-01 13:17:04 +00:00
Owner

Wat

scanPresentations las ieder markdownbestand eerst volledig met readAsString en gaf de string als content aan openDeck, dat in dat pad de 32 MiB-bestandsgrens oversloeg. Eén enorm .md werd zo volledig ingelezen vóór weigering, en veel geldige decks konden samen gigabytes strings in geheugen houden.

Fix (acceptatie #1048)

  • Stat vóór lezen — elk bestand wordt gestat; boven maxDeckMarkdownBytes (32 MiB) overgeslagen zonder ooit gelezen te worden.
  • Bytegrens op aangeleverde contentopenDeckDetailed weigert nu ook content boven de grens (conservatieve O(1)-check op UTF-16 code-units).
  • Cumulatief scanbudget — nieuwe parameter maxScanBytes (256 MiB); de walk stopt zodra de bewaarde bronnen dat budget zouden overschrijden, net als de bestaande maxFilesVisited-afkap.

De grenzen zijn als top-level helpers (_scanOneFile, _providedContentOverCap) geplaatst zodat het klasseplafond niet sneuvelt.

Tests

Regressietests in test/file_service_extra_test.dart (eerst rood tegen de onherstelde code):

  • oversized bestand wordt overgeslagen, buurdeck blijft;
  • vijf gelijke decks onder een krap budget → precies 2 resultaten;
  • oversized content wordt geweigerd.

Poort

make check groen (7838 tests, coverage 87,5%), make check-secrets en make sast schoon.

Bewaker-stap bewust overgeslagen: raakt formaat/opslag/afhankelijkheid/uitgaand verkeer/publieke belofte niet — puur interne geheugenbegrenzing.

Lost #1048 op.

🤖 Generated with Claude Code

## Wat `scanPresentations` las ieder markdownbestand eerst volledig met `readAsString` en gaf de string als `content` aan `openDeck`, dat in dat pad de 32 MiB-bestandsgrens oversloeg. Eén enorm `.md` werd zo volledig ingelezen vóór weigering, en veel geldige decks konden samen gigabytes strings in geheugen houden. ## Fix (acceptatie #1048) - **Stat vóór lezen** — elk bestand wordt gestat; boven `maxDeckMarkdownBytes` (32 MiB) overgeslagen zonder ooit gelezen te worden. - **Bytegrens op aangeleverde content** — `openDeckDetailed` weigert nu ook `content` boven de grens (conservatieve O(1)-check op UTF-16 code-units). - **Cumulatief scanbudget** — nieuwe parameter `maxScanBytes` (256 MiB); de walk stopt zodra de bewaarde bronnen dat budget zouden overschrijden, net als de bestaande `maxFilesVisited`-afkap. De grenzen zijn als top-level helpers (`_scanOneFile`, `_providedContentOverCap`) geplaatst zodat het klasseplafond niet sneuvelt. ## Tests Regressietests in `test/file_service_extra_test.dart` (eerst rood tegen de onherstelde code): - oversized bestand wordt overgeslagen, buurdeck blijft; - vijf gelijke decks onder een krap budget → precies 2 resultaten; - oversized `content` wordt geweigerd. ## Poort `make check` groen (7838 tests, coverage 87,5%), `make check-secrets` en `make sast` schoon. Bewaker-stap bewust overgeslagen: raakt formaat/opslag/afhankelijkheid/uitgaand verkeer/publieke belofte niet — puur interne geheugenbegrenzing. Lost #1048 op. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
scanPresentations las ieder .md eerst volledig met readAsString en gaf de
string als content aan openDeck, dat in dat pad de bestandsgrens oversloeg.
Nu wordt elk bestand gestat en boven maxDeckMarkdownBytes overgeslagen vóór
het lezen, krijgt aangeleverde content in openDeck een gelijkwaardige
bytegrens, en stopt de scan bij een cumulatief budget (256 MiB).

Regressietests: één oversized bestand overgeslagen, veel resultaten die samen
het budget overschrijden afgekapt, en oversized content geweigerd.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
refactor(scan): trek scangrenzen naar top-level helpers (#1048)
All checks were successful
scans / scans (pull_request) Successful in 3m37s
6c659bc8f6
De 32 MiB/256 MiB-grenzen duwden file_service.dart over de 1000-regel-
ratchet en FileService over zijn klasseplafond. Het per-bestand stat/
gate/lees-werk staat nu in de top-level _scanOneFile en de aangeleverde-
content-grens in _providedContentOverCap; scanPresentations blijft een
publieke methode op de klasse. Geen gedragswijziging.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
brenno merged commit c1679f4db8 into main 2026-08-01 13:17:04 +00:00
brenno deleted branch fix/scan-deck-size-cap-1048 2026-08-01 13:17:04 +00:00
Sign in to join this conversation.
No description provided.