Native-assetslaag reproduceerbaar pinnen (webbundel-repro over machines heen) #1033

Closed
opened 2026-07-31 21:49:41 +00:00 by brenno · 1 comment
Owner

Voortgekomen uit #1027 (reproduceerbare builds). Vastgelegd zodat het aangewezen sluitstuk niet wegzakt.

Stand

De webbundel is met #1027 content-reproduceerbaar binnen een vaste bouwomgeving: van 2854 bestanden was de enige intrinsieke bouw-tot-bouw-variatie het willekeurige serviceWorkerVersion-getal, en dat is nu genormaliseerd (tool/pack_web_release.dart). Toolchain (Flutter, make check-toolchain) en afhankelijkheden (pubspec.lock, --enforce-lockfile) zijn gepind.

Eén variabele is dat niet: de native-assetslaag. Tijdens het onderzoek sprong main.dart.js éénmaal naar een tweede, daarna stabiele waarde, samenvallend met een gelijktijdige host-build — een gevoeligheid van de dartcv4/OpenCV-build via CMake, geen per-build-willekeur. flutter clean zette die staat niet terug.

Doel

Nagaan of dartcv4's native-assets-hook (OpenCV via CMake) bij identieke bron én toolchain over machines heen hetzelfde oplevert, en zo niet, of en hoe dat te pinnen valt (CMake-/compilerversie, deterministische native build). Mogelijk upstream-rakend (dartcv4).

Waarom

Het sluitstuk voor "de gebruiker bouwt uit de bron, verifieerbaar identiek" over machines heen. Zonder dit is de herbouw-en-vergelijk-route (docs/BUILD.md §"Reproducible builds (web)") het meest conclusief in dezelfde bouwomgeving; een cross-machine-mismatch is dan niet-conclusief i.p.v. bewijs van manipulatie.

Verwant

Sluitstuk onder #520 (veilige distributie), naast #1027. Weging en context in assurance/reproduceerbare-builds.md.

Voortgekomen uit #1027 (reproduceerbare builds). Vastgelegd zodat het aangewezen sluitstuk niet wegzakt. ## Stand De webbundel is met #1027 **content-reproduceerbaar binnen een vaste bouwomgeving**: van 2854 bestanden was de enige intrinsieke bouw-tot-bouw-variatie het willekeurige `serviceWorkerVersion`-getal, en dat is nu genormaliseerd (`tool/pack_web_release.dart`). Toolchain (Flutter, `make check-toolchain`) en afhankelijkheden (`pubspec.lock`, `--enforce-lockfile`) zijn gepind. Eén variabele is dat **niet**: de native-assetslaag. Tijdens het onderzoek sprong `main.dart.js` éénmaal naar een tweede, daarna stabiele waarde, samenvallend met een gelijktijdige host-build — een gevoeligheid van de `dartcv4`/OpenCV-build via CMake, geen per-build-willekeur. `flutter clean` zette die staat niet terug. ## Doel Nagaan of `dartcv4`'s native-assets-hook (OpenCV via CMake) bij identieke bron én toolchain **over machines heen** hetzelfde oplevert, en zo niet, of en hoe dat te pinnen valt (CMake-/compilerversie, deterministische native build). Mogelijk upstream-rakend (dartcv4). ## Waarom Het sluitstuk voor "de gebruiker bouwt uit de bron, verifieerbaar identiek" over machines heen. Zonder dit is de herbouw-en-vergelijk-route (`docs/BUILD.md` §"Reproducible builds (web)") het meest conclusief in dezelfde bouwomgeving; een cross-machine-mismatch is dan niet-conclusief i.p.v. bewijs van manipulatie. ## Verwant Sluitstuk onder #520 (veilige distributie), naast #1027. Weging en context in `assurance/reproduceerbare-builds.md`.
Author
Owner

Onderzocht — en de premisse van dit issue is empirisch weerlegd. Afgehandeld op main (PR #1035, merge f26eae1f).

Dit issue vroeg de native-assetslaag (dartcv4/OpenCV via CMake) te pinnen, op grond van een waarneming in #1027 dat main.dart.js een tweede, stabiele waarde aannam. Gecontroleerd nagebouwd in een geïsoleerde, schone werkkopie op de ongewijzigde bron:

  • Drie schone build+pack-cycli gaven elke keer main.dart.js = 23ca67d6…, mét de host-native-assets-hook (dart run pack) die élke cyclus draaide → dart2js is deterministisch, en die hook raakt de web-uitvoer niet.
  • Precies de parallelle lib/-edit (preview_panel.dart) toepassen en opnieuw bouwen gaf f04ac94e… — exact de "tweede waarde" uit #1027.

De sprong was dus bronvervuiling: een parallelle sessie bewerkte lib/ in de gedeelde werkmap tussen builds door. Niet de native-assetslaag — die kán de web-uitvoer architectonisch ook niet raken (host-FFI, en web heeft geen dart:ffi).

De #1027-conclusie is ingetrokken en gecorrigeerd (assurance/reproduceerbare-builds.md, docs/BUILD.md, enisa-sbd-mapping.md), mét de fout zichtbaar en gedateerd. Bewaker-review (publieke belofte): akkoord. De les — reproduceerbaarheidstoetsen horen in een geïsoleerde werkkopie — staat in het dossier.

De echte, smalle restrand (reproduceerbaarheid over een andere bouwomgeving: vooral een ander OS) valt samen met "de Linux-tak meten" en blijft belegd onder #520. Er is dus geen native-assets-werk nodig; sluit dit als niet-een-defect.

Onderzocht — en de premisse van dit issue is **empirisch weerlegd**. Afgehandeld op main (PR #1035, merge `f26eae1f`). Dit issue vroeg de native-assetslaag (dartcv4/OpenCV via CMake) te pinnen, op grond van een waarneming in #1027 dat `main.dart.js` een tweede, stabiele waarde aannam. Gecontroleerd nagebouwd in een **geïsoleerde, schone werkkopie** op de ongewijzigde bron: - Drie schone build+pack-cycli gaven **elke keer** `main.dart.js = 23ca67d6…`, mét de host-native-assets-hook (`dart run pack`) die élke cyclus draaide → dart2js is deterministisch, en die hook raakt de web-uitvoer niet. - Precies de parallelle `lib/`-edit (`preview_panel.dart`) toepassen en opnieuw bouwen gaf `f04ac94e…` — exact de "tweede waarde" uit #1027. De sprong was dus **bronvervuiling**: een parallelle sessie bewerkte `lib/` in de gedeelde werkmap tussen builds door. Niet de native-assetslaag — die kán de web-uitvoer architectonisch ook niet raken (host-FFI, en web heeft geen `dart:ffi`). De #1027-conclusie is ingetrokken en gecorrigeerd (`assurance/reproduceerbare-builds.md`, `docs/BUILD.md`, `enisa-sbd-mapping.md`), mét de fout zichtbaar en gedateerd. Bewaker-review (publieke belofte): akkoord. De les — reproduceerbaarheidstoetsen horen in een geïsoleerde werkkopie — staat in het dossier. De echte, smalle restrand (reproduceerbaarheid over een andere bouwomgeving: vooral een ander OS) valt samen met "de Linux-tak meten" en blijft belegd onder #520. Er is dus geen native-assets-werk nodig; sluit dit als niet-een-defect.
brenno 2026-07-31 22:28:17 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
LibreKAT/Ocideck#1033
No description provided.