fix(finding): pagineer lange bevindingen op volle breedte #950

Merged
brenno merged 2 commits from fix/finding-full-width-pagination into main 2026-07-28 21:37:40 +00:00
Owner

Wat & waarom

Een finding-dia met veel inhoud renderde tot ~1/3 van de diabreedte. De render-tijd-pagineringsschatting zat ~3× te laag — de kop-kaart alleen is al hoger dan een 16:9-dia, terwijl het model van een kop van vier regels uitging — dus lange findings splitsten niet en de FittedBox schaalde de inhoud uniform omlaag, óók in de breedte.

Aanpak

  • Schatting in finding_pagination.dart herijkt op gemeten deelhoogtes van de echte _FindingPreview (diacapaciteit, kop-kaart, sectiekop, tekens-per-regel, vervolgkop), met een enkel-pagina-tolerantie afgeleid van een minimale renderschaal (0,70), logo-bewust.
  • De packer geeft een header-only eerste pagina wanneer de kop-kaart geen sectie naast zich laat passen.
  • Vervolgpagina's tonen de kop als platte regel i.p.v. de severity-kaart, zodat de inhoud de volle diabreedte vult.
  • De gepagineerde render-markdown laat de geblankte secties weg, zodat de Marp/HTML-export geen lege sectiekoppen meer toont (present/PDF sloegen die al over).

Resultaat (gemeten + in de draaiende app bevestigd): F-01 rendert nu in 5 dia's — kop-kaart ~90%, de vier inhoudspagina's 100% breedte (was ~32%).

Formaat / bewaker

Render-only: het bestandsformaat verandert nietomitEmptySections raakt alleen transiënte render-markdown, nooit de opgeslagen .md (die blijft één finding-dia met alle secties). Geen nieuwe afhankelijkheid, geen netwerk, geen opslagwijziging. Bewaker daarom niet nodig.

Test

Regressietests pinnen het model aan de echte render: finding_preview_test meet de FittedBox-schaal (inhoudspagina's >0,95, ongepagineerd geheel <0,6); finding_pagination_test dekt de splitslogica, de header-only pagina en de lege-sectie-weglating.

Poorten

  • make check — groen (6825 tests, coverage 86,7%).
  • make check-secrets (gitleaks + trufflehog) — geen leaks.
  • make sast (semgrep) — 0 findings.
  • DAST (ZAP) niet gedraaid — niet geïnstalleerd (conform de skill); niet relevant voor deze pure render-wijziging.

🤖 Generated with Claude Code

## Wat & waarom Een `finding`-dia met veel inhoud renderde tot ~1/3 van de diabreedte. De render-tijd-pagineringsschatting zat ~3× te laag — de kop-kaart alleen is al hoger dan een 16:9-dia, terwijl het model van een kop van vier regels uitging — dus lange findings splitsten niet en de `FittedBox` schaalde de inhoud uniform omlaag, óók in de breedte. ## Aanpak - Schatting in `finding_pagination.dart` herijkt op **gemeten** deelhoogtes van de echte `_FindingPreview` (diacapaciteit, kop-kaart, sectiekop, tekens-per-regel, vervolgkop), met een enkel-pagina-tolerantie afgeleid van een minimale renderschaal (0,70), logo-bewust. - De packer geeft een **header-only eerste pagina** wanneer de kop-kaart geen sectie naast zich laat passen. - Vervolgpagina's tonen de kop als **platte regel** i.p.v. de severity-kaart, zodat de inhoud de volle diabreedte vult. - De gepagineerde render-markdown laat de geblankte secties weg, zodat de **Marp/HTML-export** geen lege sectiekoppen meer toont (present/PDF sloegen die al over). Resultaat (gemeten + in de draaiende app bevestigd): F-01 rendert nu in 5 dia's — kop-kaart ~90%, de vier inhoudspagina's 100% breedte (was ~32%). ## Formaat / bewaker Render-only: het **bestandsformaat verandert niet** — `omitEmptySections` raakt alleen transiënte render-markdown, nooit de opgeslagen `.md` (die blijft één finding-dia met alle secties). Geen nieuwe afhankelijkheid, geen netwerk, geen opslagwijziging. Bewaker daarom niet nodig. ## Test Regressietests pinnen het model aan de echte render: `finding_preview_test` meet de FittedBox-schaal (inhoudspagina's >0,95, ongepagineerd geheel <0,6); `finding_pagination_test` dekt de splitslogica, de header-only pagina en de lege-sectie-weglating. ## Poorten - `make check` — groen (6825 tests, coverage 86,7%). - `make check-secrets` (gitleaks + trufflehog) — geen leaks. - `make sast` (semgrep) — 0 findings. - **DAST (ZAP) niet gedraaid** — niet geïnstalleerd (conform de skill); niet relevant voor deze pure render-wijziging. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Een finding met veel inhoud renderde tot ~1/3 van de diabreedte. De
render-tijd-pagineringsschatting zat ~3x te laag — de kop-kaart alleen is al
hoger dan een 16:9-dia, terwijl het model van een kop van vier regels uitging —
dus lange findings splitsten niet en de FittedBox schaalde de inhoud uniform
omlaag, ook in de breedte.

De schatting is herijkt op gemeten deelhoogtes van de echte _FindingPreview
(diacapaciteit, kop-kaart, sectiekop, tekens-per-regel, vervolgkop), met een
enkel-pagina-tolerantie afgeleid van een minimale renderschaal (logo-bewust).
De packer geeft nu een header-only eerste pagina wanneer de kop-kaart geen
sectie naast zich laat passen; vervolgpagina's tonen de kop als platte regel
i.p.v. de severity-kaart, zodat de inhoud de volle diabreedte vult. De
gepagineerde render-markdown laat de geblankte secties weg, zodat de Marp/HTML-
export geen lege sectiekoppen meer toont (present/PDF sloegen die al over).

Render-only: het bestandsformaat verandert niet, de .md blijft één finding-dia.
Regressietests pinnen het model aan de echte render (FittedBox-schaal).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
docs(finding): documenteer de volle-breedte-paginering van bevindingen
All checks were successful
scans / scans (pull_request) Successful in 3m14s
7a5936894b
CHANGELOG (Development log), SOURCE_MAP en USER_GUIDE bijgewerkt naar het
werkelijke gedrag: een lange finding splitst render-tijd over meerdere
volle-breedte dia's, met een header-only eerste pagina en een platte
vervolgkop; het bestandsformaat blijft ongewijzigd.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
brenno merged commit d5f957188f into main 2026-07-28 21:37:40 +00:00
brenno deleted branch fix/finding-full-width-pagination 2026-07-28 21:37:40 +00:00
Sign in to join this conversation.
No description provided.