fix(spiegel): Windows-CI-build (windows-2022) + ~58 test-portabiliteitsfixes #881

Merged
brenno merged 8 commits from fix/spiegel-ci-windows-2022 into main 2026-07-26 09:48:31 +00:00
Owner

De Windows-flutter test-leg op de spiegel draaide nog nooit (de build strandde altijd eerder). Deze PR repareert de build en ~58 van de 78 blootgelegde portabiliteitsfouten.

Build

windows-2022 pinnen in de test-matrix, exact zoals release.yml (#788): het voorgebouwde OpenCV-pakket van dartcv4 gaat niet samen met de nieuwste MSVC op windows-latest. Los deze pin bij de dartcv4-migratie (#870).

~58 testfixes

Pad-asserties platform-bewust (p.normalize/p.join), Windows-file-locking bij temp-opruiming verdragen, CRLF- en tijd-tolerantie, en een echte tool-padbug in pack_web_release (absoluut-op-absoluut geplakt op Windows). Elke batch is op de Windows-runner geverifieerd (78 → 54 → 39 → …); alle test-wijzigingen draaien groen op macOS.

Nog open (getrackt in #880)

De harde kern (~20): git-op-Windows (ProcessException), SBOM-CRLF-hashes, trash-verplaatsing, en ref-herschrijving (format-nabij, langs de bewaker). Die vragen een Windows-machine i.p.v. blinde CI-iteratie; de Windows-job blijft tot dan rood.

Bewaker

Raakt CI-config en tests; de pack_web_release-fix houdt de checksumlijst juist portabel (/). Geen formaat-/opslag-/afhankelijkheidswijziging. Het enige format-nabije punt (ref-herschrijving) is bewust naar #880 geschoven, niet hier aangeraakt.

De Windows-`flutter test`-leg op de spiegel draaide nog nooit (de build strandde altijd eerder). Deze PR repareert de **build** en **~58 van de 78** blootgelegde portabiliteitsfouten. ## Build `windows-2022` pinnen in de test-matrix, exact zoals release.yml (#788): het voorgebouwde OpenCV-pakket van dartcv4 gaat niet samen met de nieuwste MSVC op windows-latest. Los deze pin bij de dartcv4-migratie (#870). ## ~58 testfixes Pad-asserties platform-bewust (`p.normalize`/`p.join`), Windows-file-locking bij temp-opruiming verdragen, CRLF- en tijd-tolerantie, en een echte tool-padbug in `pack_web_release` (absoluut-op-absoluut geplakt op Windows). Elke batch is op de Windows-runner geverifieerd (78 → 54 → 39 → …); alle test-wijzigingen draaien groen op macOS. ## Nog open (getrackt in #880) De harde kern (~20): git-op-Windows (`ProcessException`), SBOM-CRLF-hashes, trash-verplaatsing, en ref-herschrijving (format-nabij, langs de bewaker). Die vragen een Windows-machine i.p.v. blinde CI-iteratie; de Windows-job blijft tot dan rood. ## Bewaker Raakt CI-config en tests; de pack_web_release-fix houdt de checksumlijst juist portabel (`/`). Geen formaat-/opslag-/afhankelijkheidswijziging. Het enige format-nabije punt (ref-herschrijving) is bewust naar #880 geschoven, niet hier aangeraakt.
De Windows-job op de spiegel strandde op `flutter build windows`: het
voorgebouwde OpenCV-pakket van dartcv4 kent de nieuwste MSVC op windows-latest
niet ("Found OpenCV Windows Pack but it has no binaries compatible"). release.yml
loste dit gisteren al zo op (#788); ci.yml had die pin nog niet.

Dit is dezelfde gedocumenteerde noodgreep, niet de eindoplossing: de migratie
naar dartcv4 2.x (die op windows-latest wél bouwt) is afzonderlijk getrackt.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Op Windows gaf bundelBestanden het hele absolute pad terug: de prefix-check
vergeleek een pad met backslashes tegen een voorvoegsel met een /-achtervoegsel,
dus startsWith faalde. Dat plakte verderop als `bundel/C:\...\bestand` en
gooide PathNotFoundException. Nu normaliseren we separators naar / — wat de
checksumlijst (sha256sum -c op Linux) sowieso portabel hoort te houden. POSIX-
uitvoer blijft identiek.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Windows kan een net via de beeld-cache ingelezen bestand niet meteen
verwijderen (errno 32, 'used by another process'), waardoor de tearDown-delete
van deze beeldtests daar faalde. OS-temp wordt sowieso opgeruimd en de test is
op dat punt al klaar, dus we verdragen de FileSystemException. Op POSIX
onveranderd.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
De resolutiefuncties (resolveProjectRelative, resolveSlideAssetPath,
resolveEditorAssetPath, displayFolder, ImageService.resolve) geven op Windows
terecht paden met backslashes; deze tests hardcodeerden de POSIX-vorm. De
verwachting loopt nu door p.normalize, zodat de join/traversal-logica getoetst
blijft maar de OS-scheiding niet meer meetelt. Op POSIX is p.normalize een
no-op — gedrag daar onveranderd.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
network_sink_guard, app_theme_contrast en shortcut_label lopen lib/ af en
vergelijken/excluderen met /-patronen. Op Windows geeft listSync backslashes,
waardoor de uitsluitingen (allowlist, preview-dia's, l10n-tabellen) niet
matchten en de checks valse overtreders meldden. Nu eerst naar / normaliseren.
Op POSIX onveranderd.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
compliance_attestation las COMPLIANCE.md rauw en zocht op letterlijke \n;
op Windows checkt git met \r\n uit. Nu genormaliseerd bij het lezen.

ink_stroke_identity verwachtte dat twee dádelijk opeenvolgende stroke-id's
strikt oplopen, maar het contract is 'ruwweg' — op Windows tikt de klok grover
dan een microseconde, waardoor beide dezelfde tijdstempel dragen en de random
staart de volgorde beslist. Een tussenpoos van 25 ms herstelt de tijd-ordening.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
De tests gaven een hardgecodeerd POSIX-target ('/deck/images/foto.png') mee,
terwijl de resolver dat op Windows naar backslashes normaliseert — waardoor
resolve(p) == target nooit matchte en de beeldverwijzingen 'onvindbaar' leken.
In productie loopt de target door dezelfde resolver, dus dit is een test-
inconsistentie, geen app-bug. Target nu ook door p.normalize.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
test: nog drie pad-asserties platform-bewust (Windows)
All checks were successful
scans / scans (pull_request) Successful in 3m25s
8201ab088a
scan_library, deck_provider en save_destination_dialog vergeleken door de test
met '/' gebouwde paden tegen de door de app genormaliseerde vorm. scan_library
en deck_provider nu via p.normalize; de save-dialoog toont p.join(map,
bestandsnaam), dus de finder gebruikt diezelfde join i.p.v. een POSIX-literal.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
brenno merged commit 20da4b58d1 into main 2026-07-26 09:48:31 +00:00
Sign in to join this conversation.
No description provided.