fix(quality): splits te-klein-renderende dia's ook bij lange bullets (#1159) #1165

Merged
brenno merged 2 commits from fix/autofix-split-density-1159 into main 2026-08-03 14:56:26 +00:00
Owner

Sluit #1159.

Wat er misging

De kwaliteitsbewaking splitst een te volle dia over pagina's zodat de tekst groter rendert. Maar Fix alle problemen (quality_autofix.dart) en de live-fix bij presenteren (safeFixForSlide) splitsten alleen wanneer een dia méér bullets had dan de leesbaarheidsdrempel (visibleContentBulletCount > _splitThreshold, 8 enkelkoloms / 12 checklist).

Dichtheids-overloop komt echter vaak door de lengte van de bullets, niet hun aantal. Een dia met 6–8 lange bullets rendert te klein (textDensityWarning, schaal < 0,70) maar heeft ≤ drempel bullets, dus de motor deed niets en de font bleef klein.

Gemeten (headless, 960pt, Roboto)

dia orig. schaal vóór ná fix
16 korte bullets 0,597 splitst → ×1,80
6 lange bullets 0,694 0 fixes → ×1,00 [3,3] → 0,978 (×1,41)
8 lange bullets 0,672 0 fixes → ×1,00 [4,4] → 0,913 (×1,36)

De handmatige "Splits slide"-knop (canSplitSlide, geen aantal-drempel) splitste al wél; alleen de autofix-route weigerde.

De fix

_shouldSplitFor(slide, kind): boven de drempel splitsen op aantal zoals voorheen; eronder alleen wanneer de dia te klein rendert (textDensityWarning/Critical) én er genoeg bullets zijn voor twee volwaardige pagina's (≥ 2×kMinPageBullets). De paginatie in bullet_pagination.dart blijft bewust ongemoeid — aantal-gebaseerd en voorspelbaar. Alleen de of-vraag is nu dichtheids-gedreven, niet de hoe. Een zuivere aantal- of woordmelding onder de drempel splitst niet (dat levert flinters op).

Verificatie

  • Regressietests in test/quality_autofix_test.dart (dichtheids-split bij weinig lange bullets, live-fix idem, en de negatieve: te weinig bullets → niet splitsen). Bestaande woord-count-tests blijven groen (5 bullets < 2×kMinPageBullets).
  • make check groen; make check-secrets + make sast groen.
  • Visuele herbeoordeling met de app (strook, presentatiemodus, PDF-export): een dia op 64% wordt gesplitst in [3,3] en de font is op de resultaatpagina's zichtbaar groter — in alle drie de oppervlakken.

Herbeoordeling na reparatie

De beeldkeuring bevestigde de fix en legde bredere, reeds bestaande verschijningsgebreken bloot (vervolgpagina's herhalen de identieke titel; een "Splits slide"-knop die op woordigheid-dia's niets uitricht; de onzichtbare 70%-klif). Die staan los van deze font-fix en zijn deels productkeuzes — vastgelegd als vervolg in #1164 i.p.v. in de release-cyclus meegesleept.

Bewaker

Raakt niets uit het bewaker-rijtje: geen bestandsformaat, opslag, afhankelijkheid, uitgaand verkeer of vastzettende belofte — enkel het gedrag van een bestaande knop en de docs die dat beschrijven. Stap bewust overgeslagen.

🤖 Generated with Claude Code

Sluit #1159. ## Wat er misging De kwaliteitsbewaking splitst een te volle dia over pagina's zodat de tekst groter rendert. Maar **Fix alle problemen** (`quality_autofix.dart`) en de **live-fix bij presenteren** (`safeFixForSlide`) splitsten alleen wanneer een dia méér bullets had dan de leesbaarheidsdrempel (`visibleContentBulletCount > _splitThreshold`, 8 enkelkoloms / 12 checklist). Dichtheids-overloop komt echter vaak door de **lengte** van de bullets, niet hun aantal. Een dia met 6–8 lange bullets rendert te klein (`textDensityWarning`, schaal < 0,70) maar heeft ≤ drempel bullets, dus de motor deed niets en de font bleef klein. ## Gemeten (headless, 960pt, Roboto) | dia | orig. schaal | vóór | ná fix | | --- | --- | --- | --- | | 16 korte bullets | 0,597 | splitst → ×1,80 | ✅ | | 6 lange bullets | 0,694 | **0 fixes → ×1,00** | [3,3] → 0,978 (**×1,41**) | | 8 lange bullets | 0,672 | **0 fixes → ×1,00** | [4,4] → 0,913 (**×1,36**) | De handmatige "Splits slide"-knop (`canSplitSlide`, geen aantal-drempel) splitste al wél; alleen de autofix-route weigerde. ## De fix `_shouldSplitFor(slide, kind)`: boven de drempel splitsen op aantal zoals voorheen; eronder alleen wanneer de dia te klein *rendert* (`textDensityWarning`/`Critical`) én er genoeg bullets zijn voor twee volwaardige pagina's (≥ 2×`kMinPageBullets`). De paginatie in `bullet_pagination.dart` blijft bewust ongemoeid — aantal-gebaseerd en voorspelbaar. Alleen de *of*-vraag is nu dichtheids-gedreven, niet de *hoe*. Een zuivere aantal- of woordmelding onder de drempel splitst niet (dat levert flinters op). ## Verificatie - Regressietests in `test/quality_autofix_test.dart` (dichtheids-split bij weinig lange bullets, live-fix idem, en de negatieve: te weinig bullets → niet splitsen). Bestaande woord-count-tests blijven groen (5 bullets < 2×kMinPageBullets). - `make check` groen; `make check-secrets` + `make sast` groen. - Visuele herbeoordeling met de app (strook, presentatiemodus, PDF-export): een dia op 64% wordt gesplitst in [3,3] en de font is op de resultaatpagina's zichtbaar groter — in alle drie de oppervlakken. ## Herbeoordeling na reparatie De beeldkeuring bevestigde de fix en legde bredere, **reeds bestaande** verschijningsgebreken bloot (vervolgpagina's herhalen de identieke titel; een "Splits slide"-knop die op woordigheid-dia's niets uitricht; de onzichtbare 70%-klif). Die staan los van deze font-fix en zijn deels productkeuzes — vastgelegd als vervolg in #1164 i.p.v. in de release-cyclus meegesleept. ## Bewaker Raakt niets uit het bewaker-rijtje: geen bestandsformaat, opslag, afhankelijkheid, uitgaand verkeer of vastzettende belofte — enkel het gedrag van een bestaande knop en de docs die dat beschrijven. Stap bewust overgeslagen. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
De 'Fix alle problemen'-motor en de live-fix bij presenteren splitsten een
te volle dia alleen wanneer die méér bullets had dan de leesbaarheidsdrempel.
Dichtheids-overloop komt echter vaak door de lengte van de bullets: een dia met
zes tot acht lange bullets rendert te klein maar heeft te weinig bullets voor
de aantal-gate, dus de motor deed niets en de font bleef klein.

Nu splitst de motor zo'n dia ook wanneer hij te klein rendert
(textDensityWarning/Critical) en er genoeg bullets zijn voor twee volwaardige
pagina's (>= 2x kMinPageBullets). De paginatie zelf blijft aantal-gebaseerd en
voorspelbaar; alleen de beslissing óf er gesplitst wordt is nu ook
dichtheids-gedreven. Een zuivere aantal- of woordmelding onder de drempel
splitst niet — dat levert flinters op.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
docs(quality): beschrijf dichtheids-gedreven splitsen in Fix alle problemen (#1159)
All checks were successful
static-gate / static-gate (pull_request) Successful in 3m48s
scans / scans (pull_request) Successful in 7m24s
6b69bc3e47
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
brenno force-pushed fix/autofix-split-density-1159 from 6b69bc3e47
All checks were successful
static-gate / static-gate (pull_request) Successful in 3m48s
scans / scans (pull_request) Successful in 7m24s
to 262b1e5e2a
Some checks failed
scans / scans (pull_request) Failing after 1s
static-gate / static-gate (pull_request) Successful in 3m37s
2026-08-03 14:28:59 +00:00
Compare
brenno merged commit d5b120cf23 into main 2026-08-03 14:56:26 +00:00
brenno deleted branch fix/autofix-split-density-1159 2026-08-03 14:56:27 +00:00
Sign in to join this conversation.
No description provided.