fix(tooling): ontkoppel translate_docs van Flutter zodat de poort weer compileert #1338

Merged
brenno merged 1 commit from fix/decouple-translate-docs-ffi into main 2026-08-07 16:58:27 +00:00
Owner

dart run tool/translate_docs.dart --check (de poort make translate-docs-check) crashte lokaal op een Dart FFI-compilerfout:

Crash when compiling: type 'InvalidType' is not a subtype of type 'FunctionType' in type cast
#0 _FfiUseSiteTransformer._verifyAndReplaceNativeCallable (…/ffi/use_sites.dart)

Oorzaak, empirisch bepaald (per import gebisecteerd, niet aangenomen): de tool importeerde AppLocalizations en DocumentationService. Die trekken via package:flutter/material.dart en dart:ui de hele Flutter-graaf de standalone-VM-compilatie in, en dat kan de standalone Dart-VM niet — app_localizations doet de FFI-transformer crashen, documentation_service faalt op "dart:ui is not available on this platform". flutter test compileert wél (ander doel), en de andere dart run tool/check_*.dart-poorten importeren geen Flutter, dus die draaien.

Fix: de tool heeft alleen platte data nodig — de taalcodes en de docs-brontaal. Die verhuizen naar een Flutter-vrij lib/l10n/language_registry.dart (kLanguageNames, kDocsBaseLanguage). AppLocalizations.languageNames en DocumentationService.baseLanguage stellen ze opnieuw beschikbaar (app-API ongewijzigd, één bron van waarheid), en de tool importeert alleen nog het register. Daarmee compileert dart run tool/translate_docs.dart weer schoon.

Audit (deel van de opdracht): alle dart run tool/*.dart-poorten nagelopen — enkel translate_docs trok Flutter binnen. build_cwe_catalog leunt op het Flutter-vrije utils/csv.dart en is bovendien geen poort.

Verificatie: dart run tool/translate_docs.dart --check compileert en draait; volledige make check groen (8935 tests, coverage 87,1%, alle statische poorten). Het const-only registerbestand staat in uncoveredBaseline (geen uitvoerbare regels, zoals library_scan_limits.dart); test/language_registry_test.dart borgt dat app-API en register dezelfde data zijn. SOURCE_MAP bijgewerkt.

Twee bestaande zaken die de crash maskeerde — apart gemeld, buiten deze PR:

  1. --check geeft zijn niet-nul-uitkomst niet door: main is Future<int> en return _runCheck(), maar Dart negeert een teruggegeven int (geen exit()/exitCode), dus de poort eindigt altijd 0. De poort is nu een compile-rooktest, geen inhoudscontrole.
  2. Er ontbreken 270 vertaalde docsvarianten (alleen de .nl-varianten bestaan). Punt 1 fixen zou de poort hierop laten falen tot iemand make translate-docs draait — een maintainer-besluit, geen onderdeel van deze reparatie.
`dart run tool/translate_docs.dart --check` (de poort `make translate-docs-check`) crashte lokaal op een Dart FFI-compilerfout: Crash when compiling: type 'InvalidType' is not a subtype of type 'FunctionType' in type cast #0 _FfiUseSiteTransformer._verifyAndReplaceNativeCallable (…/ffi/use_sites.dart) **Oorzaak, empirisch bepaald** (per import gebisecteerd, niet aangenomen): de tool importeerde `AppLocalizations` en `DocumentationService`. Die trekken via `package:flutter/material.dart` en `dart:ui` de hele Flutter-graaf de **standalone-VM-compilatie** in, en dat kan de standalone Dart-VM niet — `app_localizations` doet de FFI-transformer crashen, `documentation_service` faalt op "dart:ui is not available on this platform". `flutter test` compileert wél (ander doel), en de andere `dart run tool/check_*.dart`-poorten importeren geen Flutter, dus die draaien. **Fix:** de tool heeft alleen platte data nodig — de taalcodes en de docs-brontaal. Die verhuizen naar een Flutter-vrij `lib/l10n/language_registry.dart` (`kLanguageNames`, `kDocsBaseLanguage`). `AppLocalizations.languageNames` en `DocumentationService.baseLanguage` stellen ze opnieuw beschikbaar (app-API ongewijzigd, één bron van waarheid), en de tool importeert alleen nog het register. Daarmee compileert `dart run tool/translate_docs.dart` weer schoon. **Audit** (deel van de opdracht): alle `dart run tool/*.dart`-poorten nagelopen — enkel `translate_docs` trok Flutter binnen. `build_cwe_catalog` leunt op het Flutter-vrije `utils/csv.dart` en is bovendien geen poort. **Verificatie:** `dart run tool/translate_docs.dart --check` compileert en draait; volledige `make check` groen (8935 tests, coverage 87,1%, alle statische poorten). Het const-only registerbestand staat in `uncoveredBaseline` (geen uitvoerbare regels, zoals `library_scan_limits.dart`); `test/language_registry_test.dart` borgt dat app-API en register dezelfde data zijn. SOURCE_MAP bijgewerkt. **Twee bestaande zaken die de crash maskeerde — apart gemeld, buiten deze PR:** 1. `--check` geeft zijn niet-nul-uitkomst niet door: `main` is `Future<int>` en `return _runCheck()`, maar Dart negeert een teruggegeven int (geen `exit()`/`exitCode`), dus de poort eindigt altijd 0. De poort is nu een compile-rooktest, geen inhoudscontrole. 2. Er ontbreken 270 vertaalde docsvarianten (alleen de `.nl`-varianten bestaan). Punt 1 fixen zou de poort hierop laten falen tot iemand `make translate-docs` draait — een maintainer-besluit, geen onderdeel van deze reparatie.
fix(tooling): ontkoppel translate_docs van Flutter zodat de poort weer compileert
All checks were successful
scans / scans (pull_request) Successful in 3m35s
static-gate / static-gate (pull_request) Successful in 7m30s
986fec037c
`dart run tool/translate_docs.dart` (make translate-docs-check) crashte op een
Dart FFI-compilerfout (_FfiUseSiteTransformer, "InvalidType is not FunctionType"):
de tool importeerde AppLocalizations en DocumentationService, die via
package:flutter/material.dart en dart:ui de hele Flutter-graaf de standalone-VM-
compilatie in trekken — iets wat de standalone Dart-VM niet aankan.

De tool heeft alleen platte data nodig: de interfacetaalcodes en de docs-
brontaal. Die verhuizen naar een Flutter-vrij lib/l10n/language_registry.dart
(kLanguageNames, kDocsBaseLanguage). AppLocalizations.languageNames en
DocumentationService.baseLanguage stellen ze opnieuw beschikbaar, dus de app-API
blijft gelijk en er is één bron van waarheid. De tool importeert alleen nog het
register en compileert weer schoon onder `dart run`.

Andere `dart run tool/*.dart`-poorten geauditeerd: alleen deze trok Flutter
binnen (build_cwe_catalog leunt op het Flutter-vrije utils/csv.dart en is boven-
dien geen poort). SOURCE_MAP bijgewerkt; test/language_registry_test.dart borgt
dat de app-API en het register dezelfde data zijn.

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