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)
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.