feat(deps): maak aantoonbaar dat de gebundelde JavaScript onaangeraakt is (#641) #657

Merged
brenno merged 1 commit from docs/js-verificatie into main 2026-07-22 17:17:09 +00:00
Owner

De HTML-export levert bijna 6 MB vreemde JavaScript bij de ontvanger af. De eerste vraag die een reviewer daarover stelt is terecht: waarom zou ik geloven dat jullie niet aan 3,5 MB geminificeerde mermaid hebben gezeten?

make deps-check beantwoordde die vraag niet. Die vergelijkt elk bestand met de sha256 in MANIFEST.json, en die staan in dezelfde repository — wie het ene verandert, verandert het andere. Dat vangt een ongeluk of een halve upgrade, geen bewuste bewerking.

Wat het wél beantwoordt is de source-URL die de manifest per bundel al bijhield, en die route bleek te houden. Nagemeten voor alle zes, niet steekproefsgewijs: marked, highlight.js, DOMPurify, mermaid, MathJax en de highlight.js-stylesheet zijn byte-identiek aan upstream.

Wat erbij komt

dart run tool/check_bundled_js.dart --verify-upstream haalt elke bundel opnieuw op en vergelijkt de hash.

Opt-in en bewust niet in make deps-check: het trekt ~6 MB van een CDN, en de dagelijkse poort hoort niet te vallen omdat andermans CDN plat ligt. Die afweging staat in de kop van het gereedschap.

Waar het staat

docs/SBOM.md krijgt een eigen kopje, mét de handmatige variant:

curl -sL https://cdn.jsdelivr.net/npm/marked@18.0.5/lib/marked.umd.js | shasum -a 256

Dat is er met opzet bij: zo hoef je dít gereedschap ook niet te vertrouwen. THIRD_PARTY_NOTICES.md verwijst er bovenaan naar, want dat is het bestand waar iemand met deze vraag als eerste kijkt.

make check groen.

Closes #641

De HTML-export levert bijna 6 MB vreemde JavaScript bij de ontvanger af. De eerste vraag die een reviewer daarover stelt is terecht: *waarom zou ik geloven dat jullie niet aan 3,5 MB geminificeerde mermaid hebben gezeten?* `make deps-check` beantwoordde die vraag **niet**. Die vergelijkt elk bestand met de `sha256` in `MANIFEST.json`, en die staan in dezelfde repository — wie het ene verandert, verandert het andere. Dat vangt een ongeluk of een halve upgrade, geen bewuste bewerking. Wat het wél beantwoordt is de `source`-URL die de manifest per bundel al bijhield, en die route bleek te houden. **Nagemeten voor alle zes, niet steekproefsgewijs:** marked, highlight.js, DOMPurify, mermaid, MathJax en de highlight.js-stylesheet zijn byte-identiek aan upstream. ## Wat erbij komt `dart run tool/check_bundled_js.dart --verify-upstream` haalt elke bundel opnieuw op en vergelijkt de hash. **Opt-in en bewust niet in `make deps-check`:** het trekt ~6 MB van een CDN, en de dagelijkse poort hoort niet te vallen omdat andermans CDN plat ligt. Die afweging staat in de kop van het gereedschap. ## Waar het staat `docs/SBOM.md` krijgt een eigen kopje, mét de handmatige variant: ```bash curl -sL https://cdn.jsdelivr.net/npm/marked@18.0.5/lib/marked.umd.js | shasum -a 256 ``` Dat is er met opzet bij: zo hoef je dít gereedschap ook niet te vertrouwen. `THIRD_PARTY_NOTICES.md` verwijst er bovenaan naar, want dat is het bestand waar iemand met deze vraag als eerste kijkt. `make check` groen. Closes #641
feat(deps): maak aantoonbaar dat de gebundelde JavaScript onaangeraakt is
Some checks failed
CI / Gate (Linux) · Format · Analyze · Coverage (push) Failing after 12s
CI / Web hardening (push) Failing after 11s
CI / Web hardening (pull_request) Failing after 12s
CI / Supply-chain (Trivy · advisory) (push) Failing after 12s
CI / Gate (Linux) · Format · Analyze · Coverage (pull_request) Failing after 13s
CI / Docs links (push) Failing after 13s
CI / Supply-chain (Trivy · advisory) (pull_request) Failing after 11s
CI / Docs links (pull_request) Failing after 11s
CI / Test (macos-latest) (push) Has been cancelled
CI / Test (windows-latest) (push) Has been cancelled
CI / Test (macos-latest) (pull_request) Has been cancelled
CI / Test (windows-latest) (pull_request) Has been cancelled
1617780fb5
De HTML-export levert bijna 6 MB vreemde JavaScript bij de ontvanger af, en de
eerste vraag die een reviewer daarover stelt is terecht: waarom zou ik geloven
dat jullie niet aan 3,5 MB geminificeerde mermaid hebben gezeten?

`make deps-check` beantwoordde die vraag niet. Die vergelijkt elk bestand met de
sha256 in MANIFEST.json, en die staan in dezelfde repo — wie het ene verandert,
verandert het andere. Dat vangt een ongeluk of een halve upgrade, geen bewuste
bewerking.

Wat het wél beantwoordt is de `source`-URL die de manifest per bundel al
bijhield. `--verify-upstream` haalt elke bundel daar opnieuw op en vergelijkt de
hash. Nagemeten: alle zes zijn byte-identiek aan upstream.

Opt-in en niet in `make deps-check`, met opzet: het trekt ~6 MB van een CDN, en
de dagelijkse poort hoort niet te vallen omdat andermans CDN plat ligt.

Opgeschreven waar een reviewer kijkt — docs/SBOM.md met de handmatige
curl-variant erbij, zodat je dit gereedschap ook niet hoeft te vertrouwen, en
een verwijzing bovenaan THIRD_PARTY_NOTICES.md.

Closes #641
brenno merged commit f36f27bd9a into main 2026-07-22 17:17:09 +00:00
Sign in to join this conversation.
No description provided.