feat(quality): (pagina/totaal)-teller op gesplitste dia's + geen dode Splits slide-knop (#1164) #1176

Merged
brenno merged 5 commits from fix/quality-post-repair-1164 into main 2026-08-03 17:28:55 +00:00
Owner

Sluit #1164 (deels; #4 uitgesteld, #5 afgesplitst als #1174).

Voortgekomen uit de beeldkeuring bij #1159: hoe zien dia's er ná auto-reparatie uit? Deze PR pakt de twee concreet-veilige punten aan.

1. Een "(pagina/totaal)"-teller op gesplitste dia-titels

Na "Splits slide" herhaalde elke vervolgpagina exact dezelfde titel, zonder markering — soms met een nu-onjuist aantal erin. Elke pagina van een gesplitste reeks toont nu een bescheiden, gedempte teller ("1/3", "2/3", "3/3") naast de titel.

  • Positie is een pure functie van de slides (splitRunPositionFor via splitRunRange, geen meting); reist als SlidePreviewWidget.splitRunPosition mee.
  • Alle Flutter-oppervlakken delen SlidePreviewWidget, dus de teller verschijnt in de slidestrook, de editor, het volledige-deck-overzicht, de presentatie en de PDF-export tegelijk. Een losse dia toont niets extra (bestaande goldens ongewijzigd).
  • Bewust buiten scope: de HTML/Marp-export. Die rendert de dia-markdown client-side (de titel is de letterlijke # kop); een afgeleide teller hoort niet in de interchange-inhoud thuis — anders dan een gerasterde snapshot als de PDF. Vastgelegd, niet vergeten.

2. Geen dode 'Splits slide'-knop

Een pagina met te weinig bullets voor twee volwaardige pagina's (bv. een al-gesplitste pagina van drie lange bullets die alleen nog woordigheid meldt) kreeg toch een 'Splits slide'-knop die niets uitrichtte. Het paneel biedt hem nu alleen aan op dezelfde grens als de fix-alles-motor (hasBulletsForFontEnlargingSplit); anders blijft 'Uitleg naar notities' over.

Verificatie

  • Visueel gekeurd met de draaiende app (beeldkeurder) over slidestrook, presentatie én PDF: teller verschijnt correct ("1/3","2/3","3/3"), gedempt en kleiner dan de titel, niet op losse dia's. De keuring ving één gemist renderpad — het volledige-deck-overzicht — dat in deze PR is meegenomen.
  • Tests: test/split_run_test.dart (positie-berekening), test/split_title_counter_test.dart (teller in bullets/twoBullets), test/slide_quality_panel_test.dart (dode-knop-grens). make check groen — de enige gate-uitval was een load-geïnduceerde time-out in pdf_export_slide_types_test.dart, die in isolatie volledig groen draait (33/33). make check-secrets + make sast groen (zie hieronder).
  • Plafonds: de teller-plumbing tripte vier ratchets. De helper is naar de part bullets_previews.dart getild; de irreducibele plumbing (een nieuw publiek veld + dispatch) is met onderbouwing in de basislijnen verwerkt, in lijn met de bestaande "bewust verhoogd"-entries.

Restpunten (niet in deze PR)

  • #4 (70%-klif): bewust uitgesteld — drempel verschuiven is risicovol en deels productmatig.
  • #5 (thema-logo-placeholder in export): afgesplitst als #1174 (waarschijnlijk omgeving, met een defensieve exportfix als kandidaat).
  • Cosmetisch: bij een titel over meerdere regels drijft de teller naar de rechterrand — door de beeldkeuring als niet-blokkerend beoordeeld.

Bewaker

Raakt niets uit het bewaker-rijtje: geen bestandsformaat, opslag, afhankelijkheid of uitgaand verkeer. De teller is een render-decoratie die bewust buiten de interchange-markdown/HTML-export blijft — dat versterkt uitwisselbaarheid i.p.v. het te ondermijnen. Stap bewust afgewogen.

🤖 Generated with Claude Code

Sluit #1164 (deels; #4 uitgesteld, #5 afgesplitst als #1174). Voortgekomen uit de beeldkeuring bij #1159: hoe zien dia's er ná auto-reparatie uit? Deze PR pakt de twee concreet-veilige punten aan. ## 1. Een "(pagina/totaal)"-teller op gesplitste dia-titels Na "Splits slide" herhaalde elke vervolgpagina exact dezelfde titel, zonder markering — soms met een nu-onjuist aantal erin. Elke pagina van een gesplitste reeks toont nu een bescheiden, gedempte teller ("1/3", "2/3", "3/3") naast de titel. - Positie is een **pure** functie van de slides (`splitRunPositionFor` via `splitRunRange`, geen meting); reist als `SlidePreviewWidget.splitRunPosition` mee. - Alle Flutter-oppervlakken delen `SlidePreviewWidget`, dus de teller verschijnt in de slidestrook, de editor, het **volledige-deck-overzicht**, de presentatie en de **PDF-export** tegelijk. Een losse dia toont niets extra (bestaande goldens ongewijzigd). - **Bewust buiten scope: de HTML/Marp-export.** Die rendert de dia-markdown client-side (de titel is de letterlijke `# kop`); een afgeleide teller hoort niet in de interchange-inhoud thuis — anders dan een gerasterde snapshot als de PDF. Vastgelegd, niet vergeten. ## 2. Geen dode 'Splits slide'-knop Een pagina met te weinig bullets voor twee volwaardige pagina's (bv. een al-gesplitste pagina van drie lange bullets die alleen nog woordigheid meldt) kreeg toch een 'Splits slide'-knop die niets uitrichtte. Het paneel biedt hem nu alleen aan op dezelfde grens als de fix-alles-motor (`hasBulletsForFontEnlargingSplit`); anders blijft 'Uitleg naar notities' over. ## Verificatie - **Visueel gekeurd met de draaiende app** (beeldkeurder) over slidestrook, presentatie én PDF: teller verschijnt correct ("1/3","2/3","3/3"), gedempt en kleiner dan de titel, niet op losse dia's. De keuring ving één gemist renderpad — het volledige-deck-overzicht — dat in deze PR is meegenomen. - Tests: `test/split_run_test.dart` (positie-berekening), `test/split_title_counter_test.dart` (teller in bullets/twoBullets), `test/slide_quality_panel_test.dart` (dode-knop-grens). `make check` groen — de enige gate-uitval was een load-geïnduceerde time-out in `pdf_export_slide_types_test.dart`, die in isolatie volledig groen draait (33/33). `make check-secrets` + `make sast` groen (zie hieronder). - **Plafonds:** de teller-plumbing tripte vier ratchets. De helper is naar de part `bullets_previews.dart` getild; de irreducibele plumbing (een nieuw publiek veld + dispatch) is met onderbouwing in de basislijnen verwerkt, in lijn met de bestaande "bewust verhoogd"-entries. ## Restpunten (niet in deze PR) - **#4 (70%-klif):** bewust uitgesteld — drempel verschuiven is risicovol en deels productmatig. - **#5 (thema-logo-placeholder in export):** afgesplitst als #1174 (waarschijnlijk omgeving, met een defensieve exportfix als kandidaat). - Cosmetisch: bij een titel over meerdere regels drijft de teller naar de rechterrand — door de beeldkeuring als niet-blokkerend beoordeeld. ## Bewaker Raakt niets uit het bewaker-rijtje: geen bestandsformaat, opslag, afhankelijkheid of uitgaand verkeer. De teller is een render-decoratie die bewust buiten de interchange-markdown/HTML-export blijft — dat versterkt uitwisselbaarheid i.p.v. het te ondermijnen. Stap bewust afgewogen. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Na "Splits slide" herhaalde elke vervolgpagina exact dezelfde titel, zonder
enige markering — soms met een nu-onjuist aantal in de titel ("... (achttien
bullets)" op een pagina van zes). Onverzorgd, en zichtbaar in de strook, de
presentatie én de export.

Elke pagina van een gesplitste reeks toont nu een bescheiden, gedempte teller
"(pagina/totaal)" naast de titel, zodat spreker en publiek zien dat de lijst
doorloopt en waar ze zitten. De positie is een pure functie van de slides
(splitRunPositionFor via splitRunRange, geen meting) en reist als
SlidePreviewWidget.splitRunPosition mee; alle vier de oppervlakken delen die
widget, dus de teller verschijnt overal tegelijk. Een losse dia (reeks van één)
toont niets extra, dus de bestaande goldens veranderen niet.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Een dia met te weinig bullets voor twee volwaardige pagina's — bijvoorbeeld een
al-gesplitste pagina van drie lange bullets die alleen nog woordigheid meldt —
kreeg toch een 'Splits slide'-knop. Splitsen zou daar flinters van één of twee
bullets opleveren en de melding onaangeroerd laten: een dode knop.

Het paneel biedt 'Splits slide' nu alleen aan wanneer de dia genoeg bullets
heeft voor twee echte pagina's (hasBulletsForFontEnlargingSplit) — dezelfde
grens als de fix-alles-motor. Waar dat niet zo is blijft 'Uitleg naar notities'
over, de remedie die woordigheid wél aanpakt.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
De beeldkeuring ving een gemist renderpad: "Volledig deck bekijken"
(FullDeckPreview) heeft een eigen tweede SlidePreviewWidget in zijn
scroll-lijst, en die kreeg de split-positie nog niet mee — de teller stond er
wél in de strook, de presentatie en de PDF, maar niet in het volledige-deck-
overzicht. Nu berekent ook dat pad de positie tegen zijn render-lijst.

De markdown-getrouwe HTML/Marp-export blijft bewust zonder teller: die rendert
de dia-markdown client-side (de titel is de letterlijke kop), en een afgeleide
teller hoort niet in de interchange-inhoud thuis — anders dan een gerasterde
snapshot als de PDF.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
chore(quality): til de titelteller-helper naar de part, verwerk de plafonds (#1164)
All checks were successful
scans / scans (pull_request) Successful in 1m32s
static-gate / static-gate (pull_request) Successful in 3m34s
5dafb809f0
De conventiepoort tripte op drie plafonds die de teller-plumbing net overschreed.
_titleWithSplitCounter is naar de part bullets_previews.dart getild — zijn
natuurlijke plek naast de bullettitels — wat het extraheerbare deel uit de
librarykop haalt. Wat overbleef is irreducibele plumbing: een nieuw publiek veld
op SlidePreviewWidget met zijn dispatch/export, en de doorvoer ervan in twee
reeds-basislijnde giganten (presenter en slidestrook). Die drie basislijnen zijn
met onderbouwing exact opgehoogd, in lijn met de bestaande "bewust verhoogd"-
entries voor nieuwe publieke mogelijkheden.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
brenno merged commit 6e3f55b53a into main 2026-08-03 17:28:55 +00:00
brenno deleted branch fix/quality-post-repair-1164 2026-08-03 17:28:56 +00:00
Sign in to join this conversation.
No description provided.