fix(quality): vat herhaalde dichtheidsmeldingen na 'Splits slide' samen per reeks (#1289) #1293

Merged
brenno merged 1 commit from fix/1289-quality-split-warnings into main 2026-08-06 00:31:03 +00:00
Owner

Wat & waarom

Gevonden tijdens de beeldkeuring van #1279. Op een overvolle bullets+afbeelding-dia beveelt het kwaliteitspaneel Splits slide aan. Voer je die aanbeveling uit, dan explodeert het aantal meldingen: elke deelpagina van de gesplitste lijst herhaalt dezelfde tekstdichtheid-meldingen (veel woorden, gemiddeld lange bullets, meerzins, verkleind tot X%). Splitsen lost de dichtheid-per-aantal op, maar niet de lengte-per-bullet — die komt uit de bullets zelf en vermenigvuldigt zich dus over de pagina's. Wie de aanbeveling opvolgde, werd beloond met een veelvoud aan meldingen: straf op gehoorzaamheid.

Gemeten (30 lange volzin-bullets → 4 deelpagina's): 5 meldingen → 16, waarvan de gemiddelde-bulletlengte op elke pagina identiek 25 bleef — het bewijs dat splitsen die meldingen niet oplost.

Oplossing

De lengte-gedreven, niet-kritieke dichtheidsmeldingen die over twee of meer pagina's van dezelfde split-run (de continuesSplit-keten) heen herhalen, worden op de weergavelaag samengevat tot één melding per soort per reeks, met de tekst "Geldt voor {n} slides van deze gesplitste reeks."

Dit is richting 1 uit het issue. Grenzen, bewust:

  • Alleen op de weergavelaag (computeDeckQuality, ná de accepted-filter). De ruwe analyse (deckQualityRawProvider) en daarmee de fix-motor (Los automatisch op wat kan) én de per-dia-badges op de slidestrook blijven elke pagina apart zien — de grondwaarheid verandert niet.
  • Alleen echte split-runs (continuesSplit-keten via splitRunRange), nooit los geschreven bullet-dia's die toevallig op elkaar volgen.
  • Nooit fouten. De critical-varianten en de aantal-gedreven meldingen (te veel bullets) zijn eigen soorten en vallen buiten de samenvatting: die lost verder splitsen wél op, dus daar hoort de gebruiker ze per pagina te zien.

Waar

  • Nieuw: lib/services/slide_quality/split_run_density_summary.dart — pure collapseSplitRunDensity(slides, issues) + de set kLengthDrivenRunDensityKinds. Geen providers.
  • lib/state/deck_quality_provider.dartcomputeDeckQuality past de collapse toe; deckQualityRawProvider blijft ongecollapst.
  • lib/l10n/slide_quality_localization.dartformatSlideQualityIssue plakt de reeks-scope-zin erachter zodra args['runPages'] gezet is. 31 vertalingen toegevoegd via make add-l10n.

Toetsing

  • make check groen op de gerebasede staat (volledige suite + dekkingsvloer + statische poorten).
  • Nieuw: test/split_run_density_summary_test.dart — pure eenheidstests (samenvatten, anker, ≥2-grens, geen-run, fouten blijven, aantal-gedreven blijft, max-severity, meerdere reeksen), een echte-analyse-reproductie (dia splitsen → meldingen exploderen → samengevat), en een provider-test (ruw explodeert, weergave vat samen). Suffix-test in slide_quality_localization_coverage_test.dart.
  • Geen render-/layout-/heuristiekcode geraakt — de samengevatte melding loopt door dezelfde tegel die nu al langere meldingen toont (splitRunDragged, privacy). Daarom geen aparte beeldkeuring: wat er verandert is de inhoud van de lijst (door tests gedekt), niet hoe een melding rendert.
  • Geheimen (make check-secrets) en SAST (make sast) gedraaid; DAST (ZAP) n.v.t. — geen webbundel-/serveroppervlak geraakt.

Bewaker

Bewust overgeslagen: puur weergave-de-duplicatie van kwaliteitsmeldingen. Raakt geen bestandsformaat, opslag, afhankelijkheid, uitgaand verkeer of publieke belofte — er wordt niets anders opgeslagen of verstuurd, fouten en per-dia-badges blijven, en de ruwe analyse is onaangeroerd.

Closes #1289

## Wat & waarom Gevonden tijdens de beeldkeuring van #1279. Op een overvolle bullets+afbeelding-dia beveelt het kwaliteitspaneel **Splits slide** aan. Voer je die aanbeveling uit, dan explodeert het aantal meldingen: elke deelpagina van de gesplitste lijst herhaalt dezelfde tekstdichtheid-meldingen (*veel woorden*, *gemiddeld lange bullets*, *meerzins*, *verkleind tot X%*). Splitsen lost de dichtheid-**per-aantal** op, maar niet de lengte-**per-bullet** — die komt uit de bullets zelf en vermenigvuldigt zich dus over de pagina's. Wie de aanbeveling opvolgde, werd beloond met een veelvoud aan meldingen: straf op gehoorzaamheid. Gemeten (30 lange volzin-bullets → 4 deelpagina's): **5 meldingen → 16**, waarvan de gemiddelde-bulletlengte op *elke* pagina identiek 25 bleef — het bewijs dat splitsen die meldingen niet oplost. ## Oplossing De lengte-gedreven, niet-kritieke dichtheidsmeldingen die over **twee of meer** pagina's van dezelfde split-run (de `continuesSplit`-keten) heen herhalen, worden op de **weergavelaag** samengevat tot **één melding per soort per reeks**, met de tekst *"Geldt voor {n} slides van deze gesplitste reeks."* Dit is richting 1 uit het issue. Grenzen, bewust: - **Alleen op de weergavelaag** (`computeDeckQuality`, ná de accepted-filter). De ruwe analyse (`deckQualityRawProvider`) en daarmee de fix-motor (**Los automatisch op wat kan**) én de per-dia-badges op de slidestrook blijven elke pagina apart zien — de grondwaarheid verandert niet. - **Alleen echte split-runs** (`continuesSplit`-keten via `splitRunRange`), nooit los geschreven bullet-dia's die toevallig op elkaar volgen. - **Nooit fouten.** De critical-varianten en de aantal-gedreven meldingen (*te veel bullets*) zijn eigen soorten en vallen buiten de samenvatting: die lost verder splitsen wél op, dus daar hoort de gebruiker ze per pagina te zien. ## Waar - **Nieuw:** `lib/services/slide_quality/split_run_density_summary.dart` — pure `collapseSplitRunDensity(slides, issues)` + de set `kLengthDrivenRunDensityKinds`. Geen providers. - `lib/state/deck_quality_provider.dart` — `computeDeckQuality` past de collapse toe; `deckQualityRawProvider` blijft ongecollapst. - `lib/l10n/slide_quality_localization.dart` — `formatSlideQualityIssue` plakt de reeks-scope-zin erachter zodra `args['runPages']` gezet is. 31 vertalingen toegevoegd via `make add-l10n`. ## Toetsing - **`make check` groen** op de gerebasede staat (volledige suite + dekkingsvloer + statische poorten). - Nieuw: `test/split_run_density_summary_test.dart` — pure eenheidstests (samenvatten, anker, ≥2-grens, geen-run, fouten blijven, aantal-gedreven blijft, max-severity, meerdere reeksen), een **echte-analyse-reproductie** (dia splitsen → meldingen exploderen → samengevat), en een **provider-test** (ruw explodeert, weergave vat samen). Suffix-test in `slide_quality_localization_coverage_test.dart`. - **Geen render-/layout-/heuristiekcode geraakt** — de samengevatte melding loopt door dezelfde tegel die nu al langere meldingen toont (`splitRunDragged`, privacy). Daarom geen aparte beeldkeuring: wat er verandert is de inhoud van de lijst (door tests gedekt), niet hoe een melding rendert. - Geheimen (`make check-secrets`) en SAST (`make sast`) gedraaid; DAST (ZAP) n.v.t. — geen webbundel-/serveroppervlak geraakt. ## Bewaker Bewust overgeslagen: puur weergave-de-duplicatie van kwaliteitsmeldingen. Raakt geen bestandsformaat, opslag, afhankelijkheid, uitgaand verkeer of publieke belofte — er wordt niets anders opgeslagen of verstuurd, fouten en per-dia-badges blijven, en de ruwe analyse is onaangeroerd. Closes #1289
fix(quality): vat herhaalde dichtheidsmeldingen na 'Splits slide' samen per reeks (#1289)
All checks were successful
scans / scans (pull_request) Successful in 1m39s
static-gate / static-gate (pull_request) Successful in 4m2s
c0955dc543
'Splits slide' lost de dichtheid-per-aantal op, niet de lengte-per-bullet: een
lijst van lange volzinnen die je over meerdere pagina's verdeelt, meldt op elke
deelpagina opnieuw 'veel woorden', 'lange bullets' en 'meerzins'. Wie de
aanbeveling opvolgde kreeg zo een veelvoud aan meldingen terug — straf op
gehoorzaamheid.

De lengte-gedreven, niet-kritieke dichtheidsmeldingen die over twee of meer
pagina's van dezelfde split-run (de continuesSplit-keten) heen herhalen, worden
nu op de weergavelaag samengevat tot één melding per soort per reeks, met de
tekst "Geldt voor {n} slides van deze gesplitste reeks". De ruwe analyse en de
fix-motor ('Los automatisch op wat kan') zien nog elke pagina apart, en de
per-dia-badges op de slidestrook blijven per pagina. Fouten (critical) en
aantal-gedreven meldingen (te veel bullets) blijven per pagina staan — die lost
verder splitsen wél op.

Closes #1289

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
brenno merged commit 5bd44569e5 into main 2026-08-06 00:31:03 +00:00
brenno deleted branch fix/1289-quality-split-warnings 2026-08-06 00:31:04 +00:00
Sign in to join this conversation.
No description provided.