feat(poort): make shellcheck — de shellscripts stonden buiten elke controle #774

Merged
brenno merged 1 commit from feat/shellcheck-poort into main 2026-07-23 18:28:04 +00:00
Owner

De shellscripts stonden buiten elke poort. Nu niet meer.

Waarom

Dart in deze repo komt langs een compiler, een analyzer op --fatal-infos en acht eigengebouwde poorten. Shell kwam nergens langs. Dat was te verdedigen zolang er één script was dat alleen een releasebeheerder met de hand draaide (scripts/build_release.sh). Met een tweede script dat gecommitte artefacten produceert — scripts/regenerate_icons.sh, dat net met #769 landde — is het dat niet meer.

Wat het is

make shellcheck draait ShellCheck op standaardstrengheid over scripts/*.sh. In check-full, bewust niet in check — dezelfde reden als bij sast en check-secrets: de dagelijkse poort mag geen externe binaries veronderstellen. Beide scripts waren al schoon, dus de poort kon erin zonder basislijn en zonder uitzonderingen.

Geregistreerd in docs/CHECKS.md (tabelregel + eigen sectie), in de make help-lijst en in de check-full-samenvatting.

In twee richtingen getoetst — en dat leverde zijn eigen les op

De eerste geplante fout gaf géén bevinding: een variabele met een letterlijk pad, daarna onaangehaald gebruikt. ShellCheck volgt de waarde en wéét dan dat de expansie veilig is. Ik had die groene uitkomst bijna gelezen als "poort werkt" — terwijl het bewees dat mijn plant geen fout wás. Met een expansie die hij wél kan afkeuren (SC2086 op een commandosubstitutie) valt hij netjes om (exit ≠ 0), en na herstel weer groen. Dat staat zo ook in CHECKS.md, want de volgende die deze poort vertrouwt moet weten waaraan hij beproefd is.

Poorten

  • make check — exit 0. Gedraaid op deze tak, gerebased op de verse main (0c93962e, mét het icoonscript).
  • make shellcheck — exit 0 over beide scripts.
  • make check-secrets — schoon, werkboom én historie.
  • make sast — 0 bevindingen.
  • Geen SBOM: geen afhankelijkheid gewijzigd (ShellCheck is een ontwikkelgereedschap, geen dep).

Let op de CI-gate. Die was vanmiddag flaky-rood voor álle PR's (#768/#769/#770/#771 én main-runs), terwijl make check lokaal en op een schone main groen is. De oorzaak lijkt de runner (vijf runs tegelijk, ~35 min elk), niet de code — maar de Linux-log was niet in te zien. Als deze PR daar ook op rood loopt, weegt die stand mee.

🤖 Generated with Claude Code

De shellscripts stonden buiten elke poort. Nu niet meer. ## Waarom Dart in deze repo komt langs een compiler, een analyzer op `--fatal-infos` en acht eigengebouwde poorten. Shell kwam nergens langs. Dat was te verdedigen zolang er één script was dat alleen een releasebeheerder met de hand draaide (`scripts/build_release.sh`). Met een tweede script dat gecommitte artefacten produceert — `scripts/regenerate_icons.sh`, dat net met #769 landde — is het dat niet meer. ## Wat het is `make shellcheck` draait ShellCheck op standaardstrengheid over `scripts/*.sh`. In `check-full`, bewust **niet** in `check` — dezelfde reden als bij `sast` en `check-secrets`: de dagelijkse poort mag geen externe binaries veronderstellen. Beide scripts waren al schoon, dus de poort kon erin zonder basislijn en zonder uitzonderingen. Geregistreerd in `docs/CHECKS.md` (tabelregel + eigen sectie), in de `make help`-lijst en in de `check-full`-samenvatting. ## In twee richtingen getoetst — en dat leverde zijn eigen les op De eerste geplante fout gaf géén bevinding: een variabele met een letterlijk pad, daarna onaangehaald gebruikt. ShellCheck volgt de waarde en wéét dan dat de expansie veilig is. Ik had die groene uitkomst bijna gelezen als "poort werkt" — terwijl het bewees dat mijn plant geen fout wás. Met een expansie die hij wél kan afkeuren (SC2086 op een commandosubstitutie) valt hij netjes om (exit ≠ 0), en na herstel weer groen. Dat staat zo ook in CHECKS.md, want de volgende die deze poort vertrouwt moet weten waaraan hij beproefd is. ## Poorten - `make check` — exit 0. Gedraaid op deze tak, gerebased op de verse main (`0c93962e`, mét het icoonscript). - `make shellcheck` — exit 0 over beide scripts. - `make check-secrets` — schoon, werkboom én historie. - `make sast` — 0 bevindingen. - Geen SBOM: geen afhankelijkheid gewijzigd (ShellCheck is een ontwikkelgereedschap, geen dep). **Let op de CI-gate.** Die was vanmiddag flaky-rood voor álle PR's (#768/#769/#770/#771 én main-runs), terwijl `make check` lokaal en op een schone main groen is. De oorzaak lijkt de runner (vijf runs tegelijk, ~35 min elk), niet de code — maar de Linux-log was niet in te zien. Als deze PR daar ook op rood loopt, weegt die stand mee. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
feat(poort): make shellcheck — de shellscripts stonden buiten elke controle
All checks were successful
ci / gate (pull_request) Successful in 41m18s
faabc3511b
Dart in deze repo komt langs een compiler, een analyzer op --fatal-infos en acht
eigengebouwde poorten. Shell kwam nergens langs. Dat was te verdedigen zolang er
één script was dat alleen een releasebeheerder met de hand draaide; met een
tweede script dat gecommitte artefacten produceert is het dat niet meer.

Beide scripts waren al schoon, dus de poort kon erin zonder basislijn en zonder
uitzonderingen. Standaardstrengheid, niets gefilterd. In check-full, bewust niet
in check — dezelfde reden als bij sast en check-secrets: de dagelijkse poort mag
geen externe binaries veronderstellen.

In twee richtingen getoetst, en dat leverde meteen zijn eigen les op. De eerste
geplante fout — een variabele met een letterlijk pad, daarna onaangehaald
gebruikt — gaf géén bevinding: ShellCheck volgt de waarde en weet dan dat het
veilig is. Een poort die alleen beproefd is tegen een fout die hij toch nooit zou
vangen, bewijst niets. Met een expansie die hij wél kan afkeuren (SC2086 op een
commandosubstitutie) valt hij netjes om, en na herstel weer groen.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
brenno merged commit abbe6a6d11 into main 2026-07-23 18:28:04 +00:00
brenno deleted branch feat/shellcheck-poort 2026-07-23 18:28:05 +00:00
Sign in to join this conversation.
No description provided.