fix(a11y): de donkere modus als geheel bekeken — elf bevindingen, en de twee poorten die ze niet zagen (#780) #817

Merged
brenno merged 8 commits from chore/donkere-modus-rondgang-780 into main 2026-07-24 19:42:08 +00:00
Owner

De rondgang die #780 vroeg: de app draaiend in het profiel Donker, oppervlak
voor oppervlak, met een gemeten verhouding per bevinding. Elf bevindingen, geen
"niets gevonden".

Wat er gerepareerd is

cluster ergste wat
Presentatiemodus 2,06 : 1 tien plekken op Colors.white24/30/38, plus de ring om de zwarte inkkleur — die vulling haalt zelf 1,4:1, dus zonder ring is het geen keuze maar een gat
Afbeeldingkiezer 2,28 : 1 een randkleur als tekst in de sneltoetshint, die bovendien inkortte tot "Dubbelklik s…" met 400px leegte ernaast. De textDim-helft (3,31–4,24:1) bleek onderweg parallel opgelost in #779 — zie hieronder
Kwaliteitspaneel 2,99 : 1 tekst op 85% en 70% van de voorgrondkleur — en in het lichte thema zakken alle vier de staten, waar donker er maar één laat vallen
Themawisseling het paneel bleef in de kleuren van het vórige thema staan tot een herstart
Mediaplaatshouders 2,08 : 1 "Bestand niet gevonden" en "Online media staat uit" op de tint die ze zelf aanmaken; reist mee de export in

Samengelopen met #779

De kiezerhelft is onderweg parallel opgelost: #779 splitste textDim op in
iconDim (3:1, iconen) en textMuted (4,5:1, tekst) en kwam op dezelfde
getallen uit. Dat is een betere uitkomst dan de mijne — ik had het niveau
geschrapt, zij houden de gedempte tint waar hij wél mag staan — dus die is bij
het rebasen overgenomen. Wat er van deze kant overbleef: de sneltoetshint en
zijn inkorting; beide stonden er nog.

Hun standalone_palette_contrast_test.dart meet dezelfde twee paletten. Mijn
toets is daarin opgegaan in plaats van ernaast gezet — twee bestanden die
hetzelfde meten is precies de verdubbeling waar de doc van dat bestand voor
waarschuwt.

Waarom geen poort dit ving

Twee gaten, allebei nu dicht:

  • De ruwe-kleur-ratchet matcht Color(0x…) en staat op nul. Colors.white38
    is dezelfde vrijheid met dezelfde gevolgen en glipt erlangs — daar kwamen
    álle tien de presenter-plekken vandaan. Het bezwaar is niet dat 38 te weinig
    is, maar dat je aan de aanroepplek niet kunt zíen wat het wordt.
  • app_theme_contrast_test meet wat ThemeData uitdeelt, en dia-inkt tegen
    wit. Niet wélke twee tokens samen op het scherm landen, niet de verzwakking
    van een token, en niet een tint die een oppervlak zelf aanmaakt.
    slideInkFaint haalt 4,4:1 op wit en 2,08:1 op slideRuleSoft — hetzelfde
    token; alleen het paar verraadt het.

Een besluit dat geen kleurwijziging is

Het derde tekstniveau dat de presenter met vier alpha's improviseerde is er
níet gekomen. Op die oppervlakken is het tweede niveau al de dunste grijstint
die 4,5:1 haalt: een niveau daaronder kán geen tekst zijn, en zolang het
bestaat wordt het gebruikt. Dat staat in SOURCE_MAP, want uit de code lees je
het niet terug.

Eén reparatie die niet mocht blijven staan

De themawissel-bevinding is een klasse. Die in één klap sluiten leek simpel —
geef de boom onder home: een sleutel op de modus — en die versie stond een
uur in de tak met een groene toets eronder. Draaiend viel de app om:

ProviderException: Tried to use DeckNotifier after `dispose` was called
#33 _TabContent.build (shell/tab_bar.dart:202)

De deck-providers hangen aan het tabblad. Die boom afbreken disposet
DeckNotifier — en erger dan de crash is wat eraan voorafgaat: het
niet-opgeslagen deck van de gebruiker. De toets bewees dat een blad herkleurt,
niet dat de app het overleeft.

Wat er nu staat is de bescheiden variant: de modus in een InheritedWidget,
en één regel per oppervlak dat erop aansluit. Het kwaliteitspaneel en zijn chip
hebben die regel; de klasse staat nog open, met de diagnose en de drie
routes in #814.

Toetsen

Vier, elk één keer rood gezien:

  • standalone_palette_contrast_test (bestond al, uitgebreid) —
    PresenterPalette.textMuted in de tekstlat; de inkring gemeten tegen de
    annotatiebalk op een witte dia, een oppervlak dat in geen enkele lijst staat
    en het krapste geval is; en een bronwacht op een doorzichtige
    Colors.white/black in een TextStyle.
  • slide_quality_panel_contrast_test — het paar per staat in beide modi, plus
    een bronwacht tegen een alpha over de voorgrond.
  • appearance_scope_test — een aangesloten blad moet na een moduswisseling van
    kleur veranderen; binnen één modus moet de boom juist blijven staan.
  • app_theme_contrast_test — uitgebreid met dia-inkt op een eigen tint.

Wat er níet in zit

Niet nagelopen, en dus nog open: het beamerscherm en het tweede-schermpad, de
git-panelen en de S3/WebDAV-bladeraars, de exportdialoog, het privacypaneel met
de bevindingkaarten, en 24 van de 26 slide-editors. Plus #811 — een harde rand
door elk zwevend veldlabel in donkere modus; geen contrastdefect, en de
reparatie vraagt een ontwerpkeuze die élk tekstveld raakt — en #814.

Poorten

make check groen (6543 toetsen), make test-golden groen na een bewuste
bijwerking van vijf goldens (0,26–0,98% diff: de plaatshouderregel is
donkerder, verder beweegt er niets). make check-secrets en make sast groen.
DAST staat nog niet ingericht; dat is hier niet anders dan anders.

Alle reparaties zijn ook draaiend nagekeken, in beide thema's — inclusief de
themawissel die de eerste poging liet crashen.

Bewaker overgeslagen, expliciet: deze wijziging raakt het bestandsformaat
niet, de opslag niet, geen afhankelijkheid, geen uitgaand verkeer en geen
publieke belofte. Het zijn kleurtokens, een layoutfix en toetsen.

Refs #780

De rondgang die #780 vroeg: de app draaiend in het profiel *Donker*, oppervlak voor oppervlak, met een gemeten verhouding per bevinding. Elf bevindingen, geen "niets gevonden". ## Wat er gerepareerd is | cluster | ergste | wat | |---|---|---| | Presentatiemodus | **2,06 : 1** | tien plekken op `Colors.white24/30/38`, plus de ring om de zwarte inkkleur — die vulling haalt zelf 1,4:1, dus zonder ring is het geen keuze maar een gat | | Afbeeldingkiezer | **2,28 : 1** | een *randkleur* als tekst in de sneltoetshint, die bovendien inkortte tot "Dubbelklik s…" met 400px leegte ernaast. De `textDim`-helft (3,31–4,24:1) bleek onderweg parallel opgelost in #779 — zie hieronder | | Kwaliteitspaneel | **2,99 : 1** | tekst op 85% en 70% van de voorgrondkleur — en in het **lichte** thema zakken alle vier de staten, waar donker er maar één laat vallen | | Themawisseling | — | het paneel bleef in de kleuren van het vórige thema staan tot een herstart | | Mediaplaatshouders | **2,08 : 1** | "Bestand niet gevonden" en "Online media staat uit" op de tint die ze zelf aanmaken; reist mee de export in | ## Samengelopen met #779 De kiezerhelft is onderweg parallel opgelost: #779 splitste `textDim` op in `iconDim` (3:1, iconen) en `textMuted` (4,5:1, tekst) en kwam op dezelfde getallen uit. Dat is een betere uitkomst dan de mijne — ik had het niveau geschrapt, zij houden de gedempte tint waar hij wél mag staan — dus die is bij het rebasen overgenomen. Wat er van deze kant overbleef: de sneltoetshint en zijn inkorting; beide stonden er nog. Hun `standalone_palette_contrast_test.dart` meet dezelfde twee paletten. Mijn toets is daarin opgegaan in plaats van ernaast gezet — twee bestanden die hetzelfde meten is precies de verdubbeling waar de doc van dat bestand voor waarschuwt. ## Waarom geen poort dit ving Twee gaten, allebei nu dicht: * De ruwe-kleur-ratchet matcht `Color(0x…)` en staat op nul. `Colors.white38` is dezelfde vrijheid met dezelfde gevolgen en glipt erlangs — daar kwamen álle tien de presenter-plekken vandaan. Het bezwaar is niet dat 38 te weinig is, maar dat je aan de aanroepplek niet kunt zíen wat het wordt. * `app_theme_contrast_test` meet wat `ThemeData` uitdeelt, en dia-inkt tegen wit. Niet wélke twee tokens samen op het scherm landen, niet de verzwakking van een token, en niet een tint die een oppervlak zelf aanmaakt. `slideInkFaint` haalt 4,4:1 op wit en 2,08:1 op `slideRuleSoft` — hetzelfde token; alleen het paar verraadt het. ## Een besluit dat geen kleurwijziging is Het derde tekstniveau dat de presenter met vier alpha's improviseerde is er níet gekomen. Op die oppervlakken is het tweede niveau al de dunste grijstint die 4,5:1 haalt: een niveau daaronder kán geen tekst zijn, en zolang het bestaat wordt het gebruikt. Dat staat in SOURCE_MAP, want uit de code lees je het niet terug. ## Eén reparatie die niet mocht blijven staan De themawissel-bevinding is een klasse. Die in één klap sluiten leek simpel — geef de boom onder `home:` een sleutel op de modus — en die versie stond een uur in de tak met een groene toets eronder. Draaiend viel de app om: ``` ProviderException: Tried to use DeckNotifier after `dispose` was called #33 _TabContent.build (shell/tab_bar.dart:202) ``` De deck-providers hangen aan het tabblad. Die boom afbreken disposet `DeckNotifier` — en erger dan de crash is wat eraan voorafgaat: het niet-opgeslagen deck van de gebruiker. De toets bewees dat een blad herkleurt, niet dat de app het overleeft. Wat er nu staat is de bescheiden variant: de modus in een `InheritedWidget`, en één regel per oppervlak dat erop aansluit. Het kwaliteitspaneel en zijn chip hebben die regel; **de klasse staat nog open**, met de diagnose en de drie routes in #814. ## Toetsen Vier, elk één keer rood gezien: * `standalone_palette_contrast_test` (bestond al, uitgebreid) — `PresenterPalette.textMuted` in de tekstlat; de inkring gemeten tegen de annotatiebalk op een witte dia, een oppervlak dat in geen enkele lijst staat en het krapste geval is; en een bronwacht op een doorzichtige `Colors.white/black` in een `TextStyle`. * `slide_quality_panel_contrast_test` — het paar per staat in beide modi, plus een bronwacht tegen een alpha over de voorgrond. * `appearance_scope_test` — een aangesloten blad moet na een moduswisseling van kleur veranderen; binnen één modus moet de boom juist blijven staan. * `app_theme_contrast_test` — uitgebreid met dia-inkt op een eigen tint. ## Wat er níet in zit Niet nagelopen, en dus nog open: het beamerscherm en het tweede-schermpad, de git-panelen en de S3/WebDAV-bladeraars, de exportdialoog, het privacypaneel met de bevindingkaarten, en 24 van de 26 slide-editors. Plus #811 — een harde rand door elk zwevend veldlabel in donkere modus; geen contrastdefect, en de reparatie vraagt een ontwerpkeuze die élk tekstveld raakt — en #814. ## Poorten `make check` groen (6543 toetsen), `make test-golden` groen na een bewuste bijwerking van vijf goldens (0,26–0,98% diff: de plaatshouderregel is donkerder, verder beweegt er niets). `make check-secrets` en `make sast` groen. DAST staat nog niet ingericht; dat is hier niet anders dan anders. Alle reparaties zijn ook draaiend nagekeken, in beide thema's — inclusief de themawissel die de eerste poging liet crashen. **Bewaker overgeslagen, expliciet:** deze wijziging raakt het bestandsformaat niet, de opslag niet, geen afhankelijkheid, geen uitgaand verkeer en geen publieke belofte. Het zijn kleurtokens, een layoutfix en toetsen. Refs #780
De rondgang door de donkere modus die #780 vroeg, begon bij de twee
oppervlakken die zichzelf schilderen: de presentatiemodus en de
afbeeldingskiezer. Ze hebben een eigen palet dat niet met het app-thema
meebeweegt, en daarmee vielen ze buiten élke contrasttoets — inclusief de
poort die #750 juist had opgeleverd.

Presentatiemodus, tien plekken onder de lat (acht tekst, twee iconen) plus
de inkring:

  Colors.white24  2,06-2,21:1  de sneltoetsbalk in presenter-view (11px);
                               de "–:––" van Resterend; de ring om een
                               niet-gekozen inkkleur
  Colors.white30  2,61-2,71:1  de afsluitregel van de toetsenlegenda (12px);
                               "Geen notities voor deze slide" (14px)
  Colors.white38  3,43-3,60:1  de ondertitel van het slide-overzicht; de
                               kolomkoppen en de timerlabels; de paginateller
                               in de notitiekolom; "Einde van de presentatie";
                               en twee timer-iconen

Afbeeldingskiezer, drie:

  borderStrong    2,28:1       de sneltoetshint in de voettekst — een
                               *rand*kleur als tekst
  textDim         3,31:1       bijschrift, zoekhint, metaregel
  textDim         4,12/4,24:1  uitleg leegstaat, plaatshouder voorbeeldkolom

Twee ervan doen extra pijn. Die sneltoetsbalk is de énige uitleg die een
presentator tijdens een presentatie op het scherm heeft. En de zwarte
inkkleur is alleen aan zijn ring te herkennen: de vulling zelf is 1,4:1
tegen de balk, dus zonder ring is het geen keuze maar een gat.

Ze hadden één ding gemeen met de vier van #735/#744/#750: de code deed
precies wat er stond. `Colors.white38` is geen `Color(0x…)`-literal, dus de
ruwe-kleur-ratchet in check_conventions (basislijn nul) zag er geen van. En
aan `white38` valt op de aanroepplek niet te zíen dat het 3,5:1 wordt — dát
is het bezwaar, niet dat 38 toevallig te weinig is.

Daarom niet alleen de kleuren, maar de twee gaten:

  * `PresenterPalette.textMuted` en `.outline` erbij — één tweede
    tekstniveau in plaats van vier alpha's die niemand naast elkaar heeft
    gelegd. Een derde niveau is er bewust niet gekomen: op #0A0A0A-#3A3A3A
    is dit de dunste grijstint die 4,5:1 haalt.
  * `ImagePickerPalette.textDim` opgeheven in plaats van opgehoogd, om
    dezelfde reden: onder #8B949E ís er op dat palet geen tekstniveau.
    Zolang zo'n niveau bestaat, wordt het gebruikt.
  * De TLP-chip en de AppBar-scheiding namen "wit op 24%" aan terwijl de
    hoofdkleur een profielkeuze is die licht kan zijn; die volgen nu
    `appBarTheme.foregroundColor`.

En de sneltoetshint in de kiezer kortte in tot "Dubbelklik s…" met 400px
leegte ernaast: `Flexible` + `Spacer` hebben elk flex 1 en deelden de
ruimte. Nu `Expanded`.

Bewaakt door test/fixed_dark_chrome_contrast_test.dart: een parentabel die
meet wat werkelijk samen op het scherm staat (níet welke tokens bestaan),
plus een bronwacht op een doorzichtige `Colors.white/black` in een
`TextStyle`. Beide helften zijn één keer rood gezien — de tabel reproduceert
3,31, 4,12 en 4,24 uit het issue.

Refs #780

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Twee vondsten uit de rondgang van #780, beide in het paneel dat de
gebruiker juist over contrast vertelt.

**De verzwakte voorgrond.** De drie regels per controle stonden op 100, 85
en 70 procent van dezelfde voorgrondkleur. Dat leest in de code als "iets
rustiger", maar het is een kleur die niemand heeft nagerekend — en een
tokentoets ziet hem niet, want die meet het token en niet zijn verzwakking.
Gemeten:

                        100%    85%    70%
  donker  fout          6,11   4,79   3,68
  licht   geen probl.   5,21   3,93   2,99
  licht   fout          5,30   4,31   3,35
  licht   waarschuwing  6,37   4,64   3,38
  licht   informatief   6,96   4,83   3,44

In donkere modus zakt alleen de foutstaat; in het **lichte** thema zakken
álle vier de staten. Dat is het antwoord op de tweede vraag van #780 — de
omgekeerde rondgang is niet overbodig, en hier is licht juist erger.
De rangorde zit nu in gewicht en schuinte: vet, normaal, cursief.

**De vlag die zijn verandering niet meldt.** Bij het omzetten van *Donker*
naar *Europa* bleef het paneel donkergroen op een lichte interface staan.
Een andere dia kiezen hielp niet, in- en uitklappen hielp niet; alleen een
herstart. `AppTheme.isDark` is een statische vlag en dus geen
InheritedWidget: elke widget die zich uit AppTheme kleurt en niet van
`Theme.of(context)` afhangt, houdt de kleuren van het vorige thema vast.
Het paneel was de zichtbare instantie, niet het probleem.

`AppearanceScope` om `home:` heen zet de vlag en geeft de boom een sleutel
op de modus, zodat een moduswisseling hem opnieuw laat bouwen. De sleutel
staat op de modus en niet op het profiel: één kleur bijstellen in een eigen
profiel hoort geen schuifposities te kosten, en die kleuren lopen via
ThemeData en propageren zelf.

Bewaakt door twee nieuwe tests, elk één keer rood gezien:
  * slide_quality_panel_contrast_test — het paar per staat in beide modi,
    plus een bronwacht op een alpha over de voorgrond;
  * appearance_scope_test — een blad dat zich statisch kleurt moet na een
    moduswisseling van kleur veranderen, en binnen één modus mag de boom
    juist blijven staan.

Refs #780

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
De drie plaatshouders in media_previews_image.dart vullen zich met
`slideRuleSoft` en zetten er tekst op in `slideInkFaint`. Dat token haalt
4,4:1 op wit — het canvas waar de tabellen in app_theme_contrast_test tegen
meten — maar op deze eigen tint is het **2,08:1**.

Het gaat niet om decoratie. "Bestand niet gevonden", "Online media staat
uit" en de URL eronder zijn het enige wat vertelt wáárom er een grijs vlak
op de dia staat, en ze reizen mee de export in. Tekst nu op `slideInkMuted`
(6,15:1), pictogram op `slideInkSoft` (3,86:1 — grafisch object, 1.4.11).

Mode-onafhankelijk: dit stond er in het lichte thema net zo goed.

De toets is uitgebreid met deze tint plus een bronwacht op `slideInkFaint`
in dat bestand, zodat de lijst niet twee tokens bewaakt die niemand meer
hoeft te gebruiken.

Verder een klasseplafond-reparatie: de langere tokennamen lieten de
formatter regels afbreken, waardoor `_ImageCarouselPickerState` en
`_FullscreenPresenterState` over hun plafond kwamen. Beide bibliotheken
hebben nu een top-level `_muted` — geen verkorting om het verkorten, maar
één naam voor het ene tekstniveau dat er is.

Refs #780

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
CHANGELOG met de drie clusters en hun gemeten waarden, plus wat er níet
is nagelopen — een rondgang die zwijgt over zijn eigen reikwijdte leest
als volledig.

SOURCE_MAP: `appearance_scope.dart` erbij (de registratiepoort viel er
terecht over), en bij de twee paletten waaróm er geen derde tekstniveau
is gekomen. Dat is het soort besluit dat je uit de code niet terugleest
en dat anders binnen een halfjaar weer wordt ingevoerd.

Refs #780

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Vijf goldens verschuiven doordat de mediaplaatshouders hun tekst van
`slideInkFaint` (2,08:1 op hun eigen tint) naar `slideInkMuted` (6,15:1)
brengen. Diff 0,26 tot 0,98 procent, en het beeldverschil is precies dat:
de labelregel is donkerder, verder beweegt er niets.

Refs #780

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
De eerste poging gaf de boom onder `home:` een sleutel op de modus, zodat
alles opnieuw bouwt. Dat werkt, en het laat de app omvallen:

    ProviderException: Tried to use DeckNotifier after `dispose` was called
    #31 ConsumerStatefulElement.watch … warmTabDerivedProviders
    #33 _TabContent.build (shell/tab_bar.dart:202)

De deck-providers hangen aan het tabblad. Die boom afbreken disposet
`DeckNotifier` terwijl er nog naar geluisterd wordt — en erger dan de crash
is wat eraan voorafgaat: dat is het niet-opgeslagen deck van de gebruiker.

De toets die de reparatie bewaakte was groen. Hij bewees dat een blad na een
moduswisseling herkleurt; hij kon niet bewijzen dat de app het overleeft.
Daar is de app zelf voor, en pas draaiend kwam het eruit.

`AppearanceScope` is nu een `InheritedWidget`: hij zet de vlag in zijn
constructor (dus vóór de eerste descendant bouwt, ook in het eerste frame) en
publiceert de modus als iets om op aan te sluiten. Een oppervlak dat zich uit
`AppTheme` kleurt leest `AppearanceScope.modeOf(context)` — één regel — en
herbouwt dan wél. Het kwaliteitspaneel en zijn chip hebben die regel.

Dat sluit de klasse niet: elk ánder oppervlak dat zich uit `AppTheme` kleurt
en niet van `Theme.of(context)` afhangt, houdt nog steeds de kleuren van het
vorige thema vast. Dat staat als beperking in de dartdoc, met de reden dat de
voor de hand liggende oplossing hier niet kan zolang de deckstaat aan het
tabblad hangt — zodat de volgende die het probeert niet dezelfde crash
opnieuw ontdekt.

De toets is meegegaan: het blad sluit nu aan zoals het paneel dat doet, en
een bronwacht in `slide_quality_panel_contrast_test` bewaakt dat het paneel
én de chip die regel houden. De negatieve toets ("een losgekoppeld blad
blijft achter") is geschrapt: die legde element-hergebruik van Flutter vast
in plaats van gedrag van deze app, en was daardoor niet betrouwbaar rood.

Refs #780

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Main bleek onderweg dezelfde bodem te hebben geraakt: #779 splitste
`ImagePickerPalette.textDim` op in `iconDim` (3:1, iconen) en `textMuted`
(4,5:1, tekst), en zette daar `standalone_palette_contrast_test.dart` onder.
Die uitkomst is beter dan de mijne — ik had het niveau geschrapt, zij houden
de gedempte tint waar hij wél mag staan — dus die is overgenomen bij het
rebasen.

Wat er van deze kant overbleef in de kiezer: de sneltoetshint die
`borderStrong` als tekst gebruikte (2,28:1) en die inkortte tot "Dubbelklik
s…" met 400px leegte ernaast. Beide staan er nog niet op main; die twee zijn
opnieuw aangebracht.

De toets is samengevoegd in plaats van ernaast gezet. Twee bestanden die
dezelfde twee paletten meten is precies de verdubbeling waar de doc van dat
bestand zelf voor waarschuwt. Toegevoegd aan het bestaande bestand:

  * `PresenterPalette.textMuted` in de tekstlat — dat token bestond nog niet
    toen #779 werd geschreven;
  * de ring om een inkkleur, gemeten tegen de annotatiebalk op een witte dia
    (zwart op 82%). Dat oppervlak staat in geen enkele oppervlaktelijst, en
    het is het krapste geval;
  * de bronwacht op een doorzichtige `Colors.white/black` in een `TextStyle`.
    Dat is het gat waar alle tien de presenter-plekken doorheen kwamen: geen
    `Color(0x…)`, dus de ratchet ziet het niet.

En de SOURCE_MAP-regel over `appearance_scope.dart` beschreef nog de
sleutel-op-de-modus die is teruggedraaid.

Refs #780

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
docs(changelog): de #780-regels naar de bovenste Fixed-kop
All checks were successful
scans / scans (pull_request) Successful in 3m16s
3238222695
Het rebasen zette ze midden in het logboek, onder een kop van weken terug.
Het logboek is omgekeerd chronologisch; daar horen ze bovenaan.

Meteen de telling recht: "zestien plekken" telde de gebruiksplekken en niet
de bevindingen, en dat waren er elf.

Refs #780

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
brenno merged commit ac9977330f into main 2026-07-24 19:42:08 +00:00
Sign in to join this conversation.
No description provided.