fix(gate): flaky ai-image-dialoogtest deterministisch + cmake-eis gedocumenteerd (#890) #900

Merged
brenno merged 3 commits from fix/890-dartcv-followups into main 2026-07-26 15:53:11 +00:00
Owner

Volgt #890 op. De blokkerende regel (1) — dartcv4 ontbrak in THIRD_PARTY_NOTICES.md — was al opgelost door #892; deze PR pakt de twee resterende punten plus een naloper op.

Wat hierin zit

(2) De flaky gezichtsdetectietest — met regressiewaarborg.
test/ai_image_outbound_dialog_test.dart → 'meldt gevonden gezichten, en zwijgt bij nul' flakte onder de volle make check (geïsoleerd 8/8, onder belasting rood op een niet-vindbaar widget bij tester.tap).

Oorzaak, aangetoond: pumpWidget met opnieuw een MaterialApp reconcilieert met de bestaande in plaats van hem opnieuw te bouwen. De Navigator eronder blijft dus staan — inclusief een dialoog die een vorige toon()-aanroep niet sloot. Die modale barrière ligt over de knop, waardoor de tik op 'open' op de barrière landt: de tweede dialoog gaat niet open en de eerste (mét de regel over herkenbare gezichten) blijft zichtbaar → findsNothing valt rood.

Fix: toon() ruimt de boom eerst op met een lege widget (schone Navigator per aanroep) en wacht daarna begrensd (pumpUntil) tot de dialoog er echt is.

Regressiewaarborg: WidgetController.hitTestWarningShouldBeFatal = true maakt een gemiste tik hier fataal. Dat maakt de flake deterministisch — bewezen rood op de ónherstelde code, groen op deze — in plaats van een test die toevallig soms slaagt. 3× groen achter elkaar in <1s, en groen in de volledige make check (6704 tests).

(3) make check vereist nu cmake — gedocumenteerd.
Sinds #870 bouwt de dartcv4-native-assets-hook op elke dart run/flutter test. Zonder cmake op PATH breekt de poort met 'Failed to find cmake with version=latest' (de Android-SDK-cmake wordt bewust geweigerd). Vastgelegd bij The one command in docs/CHECKS.md en toegevoegd aan de macOS-stap in docs/DEVELOPMENT_SETUP_GUIDE.md. De tak fix/macos-dartcv-native-assets-path raakt hier niet aan — die repareert alleen het macOS-frameworkpad in de GitHub-spiegel-CI.

(naloper) Laatste opencv_core-verwijzing weg.
#892 verving de tabelregel al; in de proza eronder stond het teruggetrokken pakket nog als levend voorbeeld. Weg; de vijf overige voorbeelden zijn nog directe dependencies.

Poorten

  • make check — groen (exit 0, 6704 tests, dekking 86,6%, per-bestand-vloer schoon).
  • make check-secrets — geen lekken. make sast (semgrep) — 0 bevindingen.

Bewaker

Overgeslagen, expliciet: de wijziging raakt geen bestandsformaat, opslag, afhankelijkheid, uitgaand verkeer, sleutel of publieke belofte — het is een testhulp, twee bouwdoc-notities en het schrappen van een verouderde verwijzing.

Volgt #890 op. De blokkerende regel (1) — `dartcv4` ontbrak in `THIRD_PARTY_NOTICES.md` — was al opgelost door #892; deze PR pakt de twee resterende punten plus een naloper op. ## Wat hierin zit **(2) De flaky gezichtsdetectietest — met regressiewaarborg.** `test/ai_image_outbound_dialog_test.dart` → 'meldt gevonden gezichten, en zwijgt bij nul' flakte onder de volle `make check` (geïsoleerd 8/8, onder belasting rood op een niet-vindbaar widget bij `tester.tap`). Oorzaak, aangetoond: `pumpWidget` met opnieuw een `MaterialApp` *reconcilieert* met de bestaande in plaats van hem opnieuw te bouwen. De `Navigator` eronder blijft dus staan — inclusief een dialoog die een vorige `toon()`-aanroep niet sloot. Die modale barrière ligt over de knop, waardoor de tik op 'open' op de barrière landt: de tweede dialoog gaat niet open en de eerste (mét de regel over herkenbare gezichten) blijft zichtbaar → `findsNothing` valt rood. Fix: `toon()` ruimt de boom eerst op met een lege widget (schone `Navigator` per aanroep) en wacht daarna begrensd (`pumpUntil`) tot de dialoog er echt is. Regressiewaarborg: `WidgetController.hitTestWarningShouldBeFatal = true` maakt een gemiste tik hier fataal. Dat maakt de flake **deterministisch** — bewezen rood op de ónherstelde code, groen op deze — in plaats van een test die toevallig soms slaagt. 3× groen achter elkaar in <1s, en groen in de volledige `make check` (6704 tests). **(3) `make check` vereist nu cmake — gedocumenteerd.** Sinds #870 bouwt de `dartcv4`-native-assets-hook op elke `dart run`/`flutter test`. Zonder `cmake` op PATH breekt de poort met 'Failed to find cmake with version=latest' (de Android-SDK-cmake wordt bewust geweigerd). Vastgelegd bij *The one command* in `docs/CHECKS.md` en toegevoegd aan de macOS-stap in `docs/DEVELOPMENT_SETUP_GUIDE.md`. De tak `fix/macos-dartcv-native-assets-path` raakt hier niet aan — die repareert alleen het macOS-frameworkpad in de GitHub-spiegel-CI. **(naloper) Laatste `opencv_core`-verwijzing weg.** #892 verving de tabelregel al; in de proza eronder stond het teruggetrokken pakket nog als levend voorbeeld. Weg; de vijf overige voorbeelden zijn nog directe dependencies. ## Poorten - `make check` — groen (exit 0, 6704 tests, dekking 86,6%, per-bestand-vloer schoon). - `make check-secrets` — geen lekken. `make sast` (semgrep) — 0 bevindingen. ## Bewaker Overgeslagen, expliciet: de wijziging raakt geen bestandsformaat, opslag, afhankelijkheid, uitgaand verkeer, sleutel of publieke belofte — het is een testhulp, twee bouwdoc-notities en het schrappen van een verouderde verwijzing.
De test 'meldt gevonden gezichten, en zwijgt bij nul' flakte onder de
volle `make check`: geïsoleerd slaagde hij (8/8), onder belasting viel hij
om op een niet-vindbaar widget bij `tester.tap`.

Oorzaak: `pumpWidget` met opnieuw een MaterialApp *reconcilieert* met de
bestaande in plaats van hem opnieuw te bouwen, dus de Navigator eronder —
met een dialoog die een vorige `toon()`-aanroep niet sloot — blijft staan.
Die modale barrière ligt over de knop, waardoor de tik op 'open' op de
barrière landt: de nieuwe dialoog gaat niet open en de oude (mét de regel
over herkenbare gezichten) blijft zichtbaar, zodat `findsNothing` rood valt.

Fix: `toon()` ruimt de boom eerst op met een lege widget, zodat elke aanroep
bij een schone Navigator begint; daarna wacht hij begrensd (`pumpUntil`) tot
de dialoog er echt is. Als regressiewaarborg maakt `hitTestWarningShouldBeFatal`
een gemiste tik hier fataal — dat maakt de flake deterministisch (rood op de
oude code, groen op deze) en houdt hem weg.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Sinds de migratie naar `dartcv4` (#870) bouwt de native OpenCV-binding via
een native-assets build-hook, en die draait op elke `dart run`/`flutter test`
— dus op elke `make check`. Zonder `cmake` op PATH breekt de poort vóór de
eerste test met 'Failed to find cmake with version=latest' (de cmake uit de
Android-SDK wordt bewust geweigerd).

Zet die eis bij 'The one command' in docs/CHECKS.md, zodat de poort lokaal
reproduceerbaar blijft, en voeg `brew install cmake` toe aan de macOS-stap
in de setupgids (die noemde alleen Xcode CLT en CocoaPods).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
chore(notices): schrap de laatste opencv_core-verwijzing (#890)
All checks were successful
scans / scans (pull_request) Successful in 3m19s
45d9f11d00
#892 verving de tabelregel `opencv_core` al door `dartcv4`, waarmee de
blokkerende `third_party_notices_test` weer groen werd. In de proza eronder
stond `opencv_core` nog als voorbeeld in de lijst van directe dependencies
die zich hadden opgehoopt — een teruggetrokken pakket dat daar als levend
voorbeeld leest, precies de drift waar dit bestand voor waarschuwt. De vijf
overige voorbeelden zijn nog directe dependencies; opencv_core weg.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
brenno merged commit 0ff457fac6 into main 2026-07-26 15:53:11 +00:00
Sign in to join this conversation.
No description provided.