Wachtpuntpoort over de AST, en de laatste bewezen rode tests om (#1911) #1915

Merged
brenno merged 1 commit from fix/wachtpunt-schuld into main 2026-09-02 08:15:12 +00:00
Owner

Vervolg op #1912. Ruimt de drie punten op die daar bewust bleven staan.

De derde blinde vlek in de poort

#1912 dichtte er twee (het typeargument, de reikwijdte) en liet de derde staan, met vermelding in CHECKS.md: een wachtpunt in een hulp die vánuit runAsync wordt aangeroepen staat er niet lexicaal in. callout_reveal_test._pumpOverlay had precies die vorm en is nooit gezien.

De meting loopt nu over de AST (analyzer, zoals check_method_length al deed), met een call-graph binnen het bestand. Bijvangst: commentaar en stringliteralen vallen vanzelf buiten de meting, dus _withoutLineComments, _withoutTripleQuoted en _callScope konden weg — en daarmee het risico dat de poort over zijn eigen uitleg valt.

Op de huidige boom vindt de AST exact dezelfde verzameling als de tekstversie. Er staan geen omweg-gevallen meer in. Dit is dus preventie, geen nieuwe vondst — en dat is de eerlijke samenvatting.

Eén ding erbij: een bestand dat niet parseert wordt nu gemeld in plaats van overgeslagen. "Stil niets meten" is precies wat deze poort zes weken onbruikbaar maakte.

De bewezen rode schuld

export_dialog_pdf_end_to_end_test en document_editor_screen_test zijn om. Twee van die vier wachtpunten bleken bij nader inzien al pollussen met een afbreekvoorwaarde — de poort ziet dat verschil niet en boekte ze onterecht als gok. Ze zijn nu pumpUntil in plaats van met de hand geschreven, wat ook een leesbare faalmelding oplevert in plaats van stil doorlopen naar "geen bestand".

De derde is de interessante. De test die vijf keer omviel (taken 3421, 3433, 3439, 3448, 3480) faalde op iets wat geen enkele poort ziet: twee kale pump()-frames en dan toetsen of een asynchrone terugval al gebeurd was — een gok in frames in plaats van in wandelklok. Die wacht nu op de uitkomst. Dat de poort die vorm niet dekt staat als beperking in CHECKS.md; ik heb er geen poort omheen gebouwd omdat ik er één geval van heb en niet weet hoe breed het is.

Daarmee draagt geen enkel bestand dat ooit rood stond nog een gok. Basislijn 24 → 22 bestanden, 32 → 28 wachtpunten; alle resterende zijn nog niet rood gezien.

Getoetst

  • make check volledig groen (suite, dekkingsvloer, per-bestandsvloer, golden).
  • test/fixed_delay_ratchet_test.dart uitgebreid van 7 naar 10 gevallen; de drie nieuwe dekken de omweg via een hulp, de omweg áchter een hulp, en een hulp die niemand vanuit runAsync aanroept (mag níet tellen).
Vervolg op #1912. Ruimt de drie punten op die daar bewust bleven staan. ## De derde blinde vlek in de poort #1912 dichtte er twee (het typeargument, de reikwijdte) en liet de derde staan, met vermelding in CHECKS.md: een wachtpunt in een hulp die vánuit `runAsync` wordt *aangeroepen* staat er niet lexicaal in. `callout_reveal_test._pumpOverlay` had precies die vorm en is nooit gezien. De meting loopt nu over de **AST** (`analyzer`, zoals `check_method_length` al deed), met een call-graph binnen het bestand. Bijvangst: commentaar en stringliteralen vallen vanzelf buiten de meting, dus `_withoutLineComments`, `_withoutTripleQuoted` en `_callScope` konden weg — en daarmee het risico dat de poort over zijn eigen uitleg valt. Op de huidige boom vindt de AST **exact dezelfde verzameling** als de tekstversie. Er staan geen omweg-gevallen meer in. Dit is dus preventie, geen nieuwe vondst — en dat is de eerlijke samenvatting. Eén ding erbij: een bestand dat niet parseert wordt nu *gemeld* in plaats van overgeslagen. "Stil niets meten" is precies wat deze poort zes weken onbruikbaar maakte. ## De bewezen rode schuld `export_dialog_pdf_end_to_end_test` en `document_editor_screen_test` zijn om. Twee van die vier wachtpunten bleken bij nader inzien **al pollussen met een afbreekvoorwaarde** — de poort ziet dat verschil niet en boekte ze onterecht als gok. Ze zijn nu `pumpUntil` in plaats van met de hand geschreven, wat ook een leesbare faalmelding oplevert in plaats van stil doorlopen naar "geen bestand". De derde is de interessante. De test die vijf keer omviel (taken 3421, 3433, 3439, 3448, 3480) faalde op iets wat **geen enkele poort ziet**: twee kale `pump()`-frames en dan toetsen of een asynchrone terugval al gebeurd was — een gok in frames in plaats van in wandelklok. Die wacht nu op de uitkomst. Dat de poort die vorm niet dekt staat als beperking in CHECKS.md; ik heb er geen poort omheen gebouwd omdat ik er één geval van heb en niet weet hoe breed het is. Daarmee draagt **geen enkel bestand dat ooit rood stond nog een gok**. Basislijn 24 → 22 bestanden, 32 → 28 wachtpunten; alle resterende zijn nog niet rood gezien. ## Getoetst - `make check` volledig groen (suite, dekkingsvloer, per-bestandsvloer, golden). - `test/fixed_delay_ratchet_test.dart` uitgebreid van 7 naar 10 gevallen; de drie nieuwe dekken de omweg via een hulp, de omweg áchter een hulp, en een hulp die niemand vanuit `runAsync` aanroept (mag níet tellen).
fix(poort): meet de wachtpunten over de AST, en ruim de rode schuld op (#1911)
All checks were successful
scans / scans (pull_request) Successful in 2m45s
static-gate / static-gate (pull_request) Successful in 6m32s
facbc6d147
**De derde blinde vlek.** De poort was een reguliere uitdrukking. Twee
blinde vlekken zijn vorige ronde gedicht; de derde bleef staan en stond
als zodanig in CHECKS.md: een wachtpunt in een hulp die vánuit
`runAsync` wordt *aangeroepen* staat er niet lexicaal in.
`callout_reveal_test._pumpOverlay` had die vorm en is nooit gezien.

De meting loopt nu over de AST (`analyzer`, zoals `check_method_length`
al deed) met een call-graph binnen het bestand: een `runAsync` telt
wanneer hij direct óf via een hulp uit hetzelfde bestand bij een vaste
wachttijd uitkomt. Commentaar en stringliteralen vallen daarmee vanzelf
buiten de meting — de parser maakt er geen aanroepknooppunten van — dus
`_withoutLineComments`, `_withoutTripleQuoted` en `_callScope` konden
weg, en met hen het risico dat de poort over zijn eigen uitleg valt.

Op de huidige boom vindt de AST exact dezelfde verzameling als de
tekstversie: er staan geen omweg-gevallen meer in. Dit is dus preventie,
geen nieuwe vondst.

**Een bestand dat niet parseert wordt gemeld, niet overgeslagen.** "Stil
niets meten" is precies wat deze poort zes weken onbruikbaar maakte.

**De bewezen rode schuld is om.** `export_dialog_pdf_end_to_end_test` en
`document_editor_screen_test`. Twee daarvan waren bij nader inzien al
pollussen mét afbreekvoorwaarde — de poort ziet dat verschil niet, dus
ze stonden onterecht als gok geboekt; nu zijn ze `pumpUntil` in plaats
van met de hand geschreven, wat ook de leesbare faalmelding oplevert.

De derde is de interessante: "Visueel: rauwe HTML schakelt automatisch
naar Bron-modus" viel vijf keer om (taken 3421, 3433, 3439, 3448, 3480)
op iets wat géén poort ziet — twee kale `pump()`-frames en dan toetsen
of een asynchrone terugval al gebeurd was. Een gok in frames in plaats
van in wandelklok. Die staat nu op de uitkomst te wachten; dat de poort
die vorm niet dekt, staat in CHECKS.md.

Daarmee draagt geen enkel bestand dat ooit rood stond nog een gok.
Basislijn 24 → 22 bestanden, 32 → 28 wachtpunten, alle resterende nog
niet rood gezien.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
brenno merged commit 4ac8502bc4 into main 2026-09-02 08:15:12 +00:00
Sign in to join this conversation.
No description provided.