build(toolchain): één Flutter op de machine, de laatste stable, en een poort erop (#598) #723

Merged
brenno merged 1 commit from fix/toolchain-poort-598 into main 2026-07-23 10:56:38 +00:00
Owner

Sluit de kern van #598.

Wat het was. De enige machine die de poort ooit gedraaid heeft stond op 3.44.2 • [user-branch] • unknown source, terwijl vijf plekken een gepinde release noemden. Geen CI-runner, dus élke groene poort waar de publicatie op leunt was geproduceerd door een build die niemand kon reproduceren.

De oorzaak was PATH-volgorde, geen verdwenen installatie: ~/.zshrc zette $HOME/flutter/bin bovenaan en tien regels lager zette de Homebrew-regel /opt/homebrew/bin er alsnog vóór. De cask won dus altijd, en die meldt 3.44.2 met binaries onder een map die 3.29.0 heet.

Nu: één Flutter, 3.44.7 • stable • github.com/flutter/flutter.git, uit het officiële release-archief met de sha256 getoetst vóór uitpakken. De cask is verwijderd. Alle pins mee, SBOM mee.

De poort. make check-toolchain eist kanaal stable, de officiële repository, en de versie exact gelijk aan de pin — elk apart fataal, alle gebreken in één run gemeld. Daarbovenop moet de toolchain in docs/CHECKS.md staan, zodat een pin-verhoging de documentatie niet achterlaat. Bewust geen "3.44.x": dart format reflowt tussen releases, en dat is het enige symptoom waar de pin voor bestaat.

CONTRIBUTING.md draagt de regel uit: één Flutter per machine, niet één per project, met de installatieroute en het verbod op de cask mét reden.

make check groen op de nieuwe toolchain: 5923 tests.

Sluit de kern van #598. **Wat het was.** De enige machine die de poort ooit gedraaid heeft stond op `3.44.2 • [user-branch] • unknown source`, terwijl vijf plekken een gepinde release noemden. Geen CI-runner, dus élke groene poort waar de publicatie op leunt was geproduceerd door een build die niemand kon reproduceren. **De oorzaak was PATH-volgorde**, geen verdwenen installatie: `~/.zshrc` zette `$HOME/flutter/bin` bovenaan en tien regels lager zette de Homebrew-regel `/opt/homebrew/bin` er alsnog vóór. De cask won dus altijd, en die meldt 3.44.2 met binaries onder een map die 3.29.0 heet. **Nu:** één Flutter, `3.44.7 • stable • github.com/flutter/flutter.git`, uit het officiële release-archief met de sha256 getoetst vóór uitpakken. De cask is verwijderd. Alle pins mee, SBOM mee. **De poort.** `make check-toolchain` eist kanaal `stable`, de officiële repository, en de versie exact gelijk aan de pin — elk apart fataal, alle gebreken in één run gemeld. Daarbovenop moet de toolchain in `docs/CHECKS.md` staan, zodat een pin-verhoging de documentatie niet achterlaat. Bewust geen "3.44.x": `dart format` reflowt tussen releases, en dat is het enige symptoom waar de pin voor bestaat. `CONTRIBUTING.md` draagt de regel uit: één Flutter per machine, niet één per project, met de installatieroute en het verbod op de cask mét reden. `make check` groen op de nieuwe toolchain: 5923 tests.
De enige machine die de poort ooit gedraaid heeft stond op
`3.44.2 • [user-branch] • unknown source`, terwijl `.tool-versions`,
README, BUILD.md en beide workflows een gepinde release noemden. Er is
geen CI-runner, dus élke groene poort waar de publicatie op leunt was
geproduceerd door een build die niemand kon reproduceren — precies wat
COMPLIANCE.md QA.04 belooft dat niet gebeurt (#598).

**De oorzaak was PATH-volgorde.** In `~/.zshrc` stond `$HOME/flutter/bin`
op regel 11, en tien regels lager zette "Zet Homebrew correct"
`/opt/homebrew/bin` er alsnog vóór. De brew-cask won dus altijd, en die
meldt 3.44.2 in `--version` met binaries onder een map die 3.29.0 heet.
Drie nummers voor één installatie, en een verschil dat twee keer
onopgemerkt kon ontstaan omdat niets ernaar keek.

**Nu:** één Flutter, `3.44.7 • stable • github.com/flutter/flutter.git`,
uit het officiële release-archief met de sha256 getoetst vóór uitpakken.
De cask is verwijderd. Alle pins staan op 3.44.7, inclusief de acht
plekken in de workflows, en de SBOM draagt het mee.

**En een poort erop.** `make check-toolchain` eist drie dingen, elk apart
fataal: kanaal `stable`, de officiële repository, en de versie exact
gelijk aan de pin. Alle gebreken worden in één run gemeld — wie een
toolchain moet vervangen wil de hele lijst, niet één regel per keer.
Daarbovenop moet de toolchain in `docs/CHECKS.md` staan, zodat een
pin-verhoging de documentatie niet achterlaat.

Bewust géén "3.44.x": `dart format` reflowt tussen releases, dus een
groene opmaakpoort op een buurversie zegt iets over een andere formatter
dan CI draait. Dat is het enige symptoom waar de pin voor bestaat.

Mijn eerste opzet eiste alleen dat de draaiende toolchain érgens
gedocumenteerd stond, uit vrees de enige ontwikkelmachine te blokkeren.
Die soepelheid was een concessie aan een kapotte toestand; zodra die
verholpen is wordt ze een achterdeur. Zestien tests bewaken de regel,
inclusief dat één patch verschil valt.

CONTRIBUTING.md draagt de regel nu uit: één Flutter per machine, niet één
per project, met de installatieroute en het verbod op de cask mét reden.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
brenno merged commit e68623d068 into main 2026-07-23 10:56:38 +00:00
brenno deleted branch fix/toolchain-poort-598 2026-07-23 10:56:38 +00:00
Sign in to join this conversation.
No description provided.