Finding-header rendert te groot: geen inhoud-bewuste auto-fit (kan op ~50%) #1282
Labels
No labels
accepted
bug
declined
docs
duplicate
enhancement
good first issue
in-progress
needs-info
privacy
security
triage
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
LibreKAT/Ocideck#1282
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Symptoom
Een finding-slide met
ocideck_finding_role: headerrendert de inhoud véél te groot.De kop met alle informatie (titel, Scope object, CVSS 4.0-vector, CWE-link, Test,
Retest, en de secties Description / Confirmation / Possible impact / Recommendation)
past ruimschoots op ~50% van de huidige grootte en zou dan prima leesbaar én compleet
zijn. Nu is de tekst onnodig groot.
Reproductie (
Proefpresentatie.md, slide 29 "F-01 · Slim kattenluik metingebakken sleutel"): open de header-slide in preview/presenteren.
Oorzaak (bestand:regel) — hypothese (a): geen auto-fit
De tekstgroottes zijn vast en
w-relatief × één constante — er is geen krimpstapdie naar de inhoud meet:
—
const double _findingFontScale = 0.84;(de enige globale knop).w * <fractie> * _findingFontScale, hard: kopw*0.038(:159),scope
w*0.024(:182), CVSS-scorew*0.052(:258), badgesw*0.024(:438),body
w*0.024(:504), sectiekopw*0.03(:505).lib/widgets/slides/previews/preview_scaffold.dart:88
→
FittedBox(fit: BoxFit.scaleDown, alignment: topLeft).scaleDownkrimpt alleen,vergroot nooit.
bestaat juist om die scaleDown te vermíjden door te splitsen; de vloer
_minSinglePageScale = 0.70(:158) houdt een finding enkel-pagina zolang hij ≥0,70breedte rendert, anders splitsen.
Gevolg: de gerenderde grootte is in de praktijk de vaste natuurlijke grootte, en
die is voor een dichte pentest-header ~2× te groot. Precies de meet-en-schaal-stap die
de gebruiker wil (naar ~0,5, mét bovengrens) ontbreekt. Bullets hébben die stap wél
(
bulletsSlideFitScale,lib/services/slide_layout_metrics.dart:370,
met
maxScale-bovengrens); findings kregen hem nooit.Wat "50%" is: geen fout gezette constante — de krimpstap ontbreekt.
_findingFontScale = 0.84staat ~2× te hoog voor een dichte header (zou rond ~0,42 =0,84×~0,5 goed lezen). Erger: de vloer
_minSinglePageScale = 0.70maakt ~50% zelfsonbereikbaar — ook het vangnet (scaleDown) is via paginering op 0,70 begrensd.
Waarom het niét het kostenmodel (#1198) is
Hypothese (b) — het pagineringskostenmodel onderschat de renderhoogte — is een andere
bug en wijst de verkeerde kant op. Het onderschatten zit in de body/sectie-kost
(
_charsPerLine = 47:149,_bodyCost:161,_linesPerSlide = 23:58).Onderschatten → te veel op één pagina → pagina hoger dan de dia → scaleDown krimpt
richting de 0,70-vloer → kleiner/smaller, het tegenovergestelde van "te groot".
Belangrijk bewijs: de header-kost is aan een echte render gepind
(test/finding_header_cost_test.dart), maar de
body-kost is door géén enkele echte-render-test gepind — de pagineringstests toetsen
alleen paginatellingen/sectieverdeling. Dat is exact de "schatting die stil wegrot"-situatie.
Voorgestelde oplossing
Geef de header een echte gemeten auto-fit mét bovengrens, naar het bullets-model:
findingHeaderFitScale(...)inslide_layout_metrics.dart, náástbulletsSlideFitScale:370) die de pagina-inhoud(header-card + de secties van díe pagina) met
TextPaintertegen de beschikbaredia-hoogte/breedte meet en een schaal in
(0, maxScale]teruggeeft (maxScale=bovengrens, zodat een schaarse header niet opblaast).
_FindingPreview: vermenigvuldig de vaste groottes met die schaal(
_findingFontScale * fitScale). Let op:fitScaleOverridebestaat al opSlidePreviewWidget(slide_preview.dart:472)maar wordt niet aan
_FindingPreviewdoorgegeven (:945) en_PreviewScaffoldnegeert het (hardcoded scaleDown) — dus of die keten uitbreiden, of de schaal binnen
_FindingPreviewberekenen.firstRenderPageSpec/expandFindingsForRender),niet op de rauwe slide, zodat een finding die legitiem over 2 dia's gaat blijft
splitsen en niet stil wordt afgekapt. Verlaag je de vloer
_minSinglePageScale, danmoet je de gekoppelde body-begroting (
_linesPerSlide/_charsPerLine)mee-herijken, anders verschuift stil hoeveel findings pagineren.
uiteenlopen.
Kleinste veilige vorm: paginering behouden voor écht lange findings, maar de
auto-fit/lagere vloer laten toe dat een louter-dichte header op ~0,5 op één dia krimpt
i.p.v. te groot te blijven.
Regressietest (eerst rood)
Sjabloon: test/finding_header_cost_test.dart
rendert
SlidePreviewWidgetop vast oppervlak en meet een keyed subtree mettester.getSize. Nieuw:gerenderde hoogte (via
finding-header-card-key / de content-hoogte in deFittedBox,zoals
renderWidthFractionintest/finding_preview_test.dart:242).
dia-onderkant) én rendert op ~doelschaal (bv. schaal ≤ ~0,55 / frac in een band),
niet alleen
> 0.70(de bestaande test toetst enkel de ondergrens). Met de huidigevaste 0,84 faalt dit = eerst-rood; na de auto-fit groen.
_charsPerLine/_linesPerSlideniet stil wegrotten.geen sectie (
finding_pagination_test.dart:79dekt de sectiestroom al).beeldkeuring).Geraakte poorten / ketens
top-level in dezelfde library (zoals
bulletsSlideFitScale), niet als methode op_FindingPreview.part):finding_preview.dart509 regels,finding_pagination.dart365 — ruimte genoeg;slide_layout_metrics.dartchecken.nieuw label/tooltip
make add-l10n.finding_header_cost_test.darten depaginatellingen in
finding_pagination_test.dartzijn de ijkpunten en worden bijherijking van de begroting rood — in dezelfde PR bijwerken.
Open vragen voor de bouwer
natuurlijke grootte (niet-overlopende pagina) of oogt hij tegen de 0,70-vloer juist
krap? Dat bepaalt of pure schaalverlaging volstaat of dat de begroting mee moet.
_FindingPreviewbedient header én continuation;detail/evidence routeren óók naar
_FindingPreview(slide_preview.dart:945sleuteltop
SlideType.finding, niet op rol). Continuation-kop is al half zo groot(
finding_preview.dart:116) — waarschijnlijk oké, maar detail/evidence nalopen.findingsSummary,scopeMatrix,checklist,controlStatus,signOffgebruiken óók_PreviewScaffold+ vaste groottes en zittenniet in de dichtheids/overflow-dekking van de kwaliteitsanalyzer. Overweeg of de fix
breder moet (mogelijk aparte bevinding).
findings bijna overbodig) versus "paginering behouden, alleen niet meer te groot". De
opdracht zegt paginering niet breken — leg dit bij de product-owner neer.
Opgepakt. Tak: fix/1282-finding-header-autofit. Reikwijdte: inhoud-bewuste auto-fit met bovengrens voor de finding-header (finding_preview.dart + een top-level fit-helper in slide_layout_metrics.dart), paginering behouden. NB: #1163 zette al de vaste _findingFontScale=0.84 op main; dit maakt het inhoud-afhankelijk. Body-kostenmodel blijft #1198.
Opgelost op main (squash van PR #1288). Inhoud-bewuste auto-fit findingHeaderFitScale (nieuw bestand lib/services/finding_header_metrics.dart) meet de gepagineerde header-inhoud en krimpt de vaste 0.84-schaal tot hij past, met bovengrens; paginering intact (#1147/#1198 groen). Eerst-rood geverifieerd; beeldkeuring: past, heel en leesbaar op scherm-oppervlakken + donker thema. NB voor de bouwlus: de agent strandde en de recovery vergde twee poort-fixes (file-split onder de 1000-regelgrens + SOURCE_MAP-registratie van het nieuwe bestand).