refactor(present): verklein _FullscreenPresenterState via QuestionRoundBuilder #894

Merged
brenno merged 1 commit from claude/adoring-leakey-ee29df into main 2026-07-26 15:02:00 +00:00
Owner

Wat

Verkleint _FullscreenPresenterState door de vraagronde-trekking eruit te halen
naar een losse service QuestionRoundBuilder, en verlaagt het klasse-plafond
weer — de opvolging van de tijdelijke oprekking naar 3465 in aa25ce2e.

Waarom

aa25ce2e trok het plafond bewust en gelabeld op naar 3465 om main te
deblokkeren na #865 (online media) en #872 (mermaid-scroll), met de opdracht
"de klasse hoort echt verkleind te worden — zie de aparte presenter-refactortaak".
Dit ís die taak.

Het trekken van een vraagronde — welke antwoorden meedoen en in welke volgorde,
per vraagsoort — is pure rekenkunde over het model (QuestionSpecQuestionView):
geen widget, geen setState, geen vensterkanaal. Dat hoort niet in een
3400-regel-State. Het staat nu in lib/services/question_round_builder.dart,
op zichzelf te toetsen. De presenter roept alleen nog draw() aan en houdt de
timer, het oefenlogboek en de vensters bij.

Effect

  • klasse 3465 → 3310 regels; classSizeBaseline navenant verlaagd — een
    echte verkleining, niet een opgerekt plafond.
  • de trek-logica is nu direct unit-getoetst (alle zes vraagsoorten plus de
    onhaalbare-/timer-invarianten); dat kon niet zolang ze in een State zat.
  • gedrag identiek: de bestaande presenter-vraagtests blijven groen.

Poort

  • make check groen (lokaal; Forgejo heeft geen CI-runner, dus dit is de poort).
  • make check-secrets (gitleaks + trufflehog, werkboom + volledige historie):
    schoon — 0 secrets.
  • make sast (semgrep, lokale regels): schoon — 0 findings (3 regels op 779
    bestanden).
  • DAST (ZAP) niet ingericht — niet gedraaid.

Bewaker

Bewust overgeslagen, expliciet: dit is interne herstructurering — geen
formaat/opslag/verkeer/afhankelijkheid, geen nieuwe publieke belofte. De
verplaatste logica is byte-voor-byte hetzelfde gedrag, alleen op een andere plek.

Noot

Aanvankelijk droeg deze tak ook een fix(notices) voor dartcv4 in
THIRD_PARTY_NOTICES.md (na de #870/#873-migratie ontbrak die rij, waardoor
third_party_notices_test rood stond). #892 heeft dat inmiddels apart op main
gerepareerd, dus die commit is hier vervallen.

🤖 Generated with Claude Code

## Wat Verkleint `_FullscreenPresenterState` door de vraagronde-trekking eruit te halen naar een losse service `QuestionRoundBuilder`, en verlaagt het klasse-plafond weer — de opvolging van de tijdelijke oprekking naar 3465 in `aa25ce2e`. ## Waarom `aa25ce2e` trok het plafond bewust en gelabeld op naar 3465 om main te deblokkeren na #865 (online media) en #872 (mermaid-scroll), met de opdracht "de klasse hoort echt verkleind te worden — zie de aparte presenter-refactortaak". Dit ís die taak. Het trekken van een vraagronde — welke antwoorden meedoen en in welke volgorde, per vraagsoort — is pure rekenkunde over het model (`QuestionSpec` → `QuestionView`): geen widget, geen `setState`, geen vensterkanaal. Dat hoort niet in een 3400-regel-`State`. Het staat nu in `lib/services/question_round_builder.dart`, op zichzelf te toetsen. De presenter roept alleen nog `draw()` aan en houdt de timer, het oefenlogboek en de vensters bij. ## Effect - klasse **3465 → 3310** regels; `classSizeBaseline` navenant verlaagd — een echte verkleining, niet een opgerekt plafond. - de trek-logica is nu **direct unit-getoetst** (alle zes vraagsoorten plus de onhaalbare-/timer-invarianten); dat kon niet zolang ze in een `State` zat. - gedrag identiek: de bestaande presenter-vraagtests blijven groen. ## Poort - `make check` groen (lokaal; Forgejo heeft geen CI-runner, dus dit is de poort). - `make check-secrets` (gitleaks + trufflehog, werkboom + volledige historie): schoon — 0 secrets. - `make sast` (semgrep, lokale regels): schoon — 0 findings (3 regels op 779 bestanden). - DAST (ZAP) niet ingericht — niet gedraaid. ## Bewaker Bewust overgeslagen, expliciet: dit is interne herstructurering — geen formaat/opslag/verkeer/afhankelijkheid, geen nieuwe publieke belofte. De verplaatste logica is byte-voor-byte hetzelfde gedrag, alleen op een andere plek. ## Noot Aanvankelijk droeg deze tak ook een `fix(notices)` voor dartcv4 in `THIRD_PARTY_NOTICES.md` (na de #870/#873-migratie ontbrak die rij, waardoor `third_party_notices_test` rood stond). #892 heeft dat inmiddels apart op main gerepareerd, dus die commit is hier vervallen. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
_FullscreenPresenterState groeide na #865 (online media) en #872 (mermaid-scroll)
over het klasse-plafond; aa25ce2e trok de baseline tijdelijk op naar 3465 met de
uitdrukkelijke opdracht de klasse écht te verkleinen. Dit is die verkleining.

Het trekken van een vraagronde — welke antwoorden meedoen en in welke volgorde,
per vraagsoort — is pure rekenkunde over het model (QuestionSpec → QuestionView):
geen widget, geen setState, geen vensterkanaal. Het staat nu in een losse, op
zichzelf toetsbare service QuestionRoundBuilder i.p.v. zeven methoden op de
presenter-state. De presenter roept alleen nog draw() aan en houdt de timer, het
oefenlogboek en de vensters bij.

- klasse 3465 → 3310 regels; classSizeBaseline navenant verlaagd (een echte
  verkleining, niet een opgerekt plafond).
- nieuwe unit-test dekt alle zes vraagsoorten plus de onhaalbare-/timer-
  invarianten; die logica was niet direct toetsbaar zolang ze in een State zat.
- QuestionRoundBuilder geregistreerd in SOURCE_MAP.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
fix(notices): voeg dartcv4 toe aan THIRD_PARTY_NOTICES (opvolger opencv_core)
Some checks failed
scans / scans (pull_request) Has been cancelled
1c1b1ab11e
De dartcv4-migratie (#870/#873) verving opencv_core in pubspec maar liet de
handgeschreven notices op het oude pakket wijzen; third_party_notices_test stond
daardoor rood op main (dartcv4 staat in pubspec, niet in de notices). Rij
vervangen; licentie Apache-2.0 geverifieerd via tool/license_detect.dart — dezelfde
classifier die de accuracy-test gebruikt. Nodig om make check groen te krijgen.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
brenno force-pushed claude/adoring-leakey-ee29df from 1c1b1ab11e
Some checks failed
scans / scans (pull_request) Has been cancelled
to a4f594f7ad
All checks were successful
scans / scans (pull_request) Successful in 3m23s
2026-07-26 14:53:51 +00:00
Compare
brenno merged commit 4565460915 into main 2026-07-26 15:02:00 +00:00
Sign in to join this conversation.
No description provided.