Tijdsvervallende controles hebben geen klok: OSV-CVE's op de gebundelde JS, licenties en pins draaien alleen als iemand ze typt #1892

Closed
opened 2026-08-31 13:37:55 +00:00 by brenno · 0 comments
Owner

Een deel van de controles in deze repo verandert van uitkomst zonder dat er
iets aan de code verandert
. Een CVE verschijnt, een standaard krijgt een
nieuwe editie, een actie krijgt een nieuwe release. Zulke controles hebben een
klok nodig, geen wijzigingstrigger. Ze hebben er geen.

Er is precies één geplande workflow in de hele repo:
.forgejo/workflows/tap-mirror-check.yml (dagelijks, 05:17 UTC, over de
Homebrew-spiegel). Verder staat er nergens een schedule:.

Wat daardoor alleen draait als iemand het typt

controle wat hij ziet draait automatisch
make deps-checkcheck_bundled_js.dart OSV-query (api.osv.dev) op de gebundelde marked, highlight.js, DOMPurify, mermaid, MathJax in de HTML-export nergens
make deps-checkcheck_reference_data.dart WSTG, CWE, MIAUW, CVSS: gebundelde versie vs. upstream nergens
make licenses elke afhankelijkheid nog opensource nergens
make trivy CVE's in de Dart-afhankelijkhedenboom nergens
make catalogs-outdated gebundelde catalogi vs. upstream nergens
make check-pins gepinde CI-acties en scannerbinaries vs. hun laatste release nergens
make deps-outdated versheid afhankelijkheden nergens

make check-web draait alleen in release.yml (op een tag). De rest zit in
check-full, en check-full staat in geen enkele workflow.

Waarom dat anders ligt dan bij de andere poorten

De rest van het systeem is netjes wijzigingsgestuurd: raak je iets, dan toetst
een poort het. Dat is voor code de juiste vorm. Voor deze zeven is het de
verkeerde: de gebeurtenis die ertoe doet gebeurt buiten de repo. Een
kwetsbaarheid in een gebundelde JS-bibliotheek wordt niet gepubliceerd op het
moment dat iemand hier een commit doet. Als niemand in vier weken make check-full typt, weet dit project vier weken niets.

Dat weegt zwaarder omdat de webexport die bundels inline in het geëxporteerde
HTML-bestand
zet: een kwetsbare DOMPurify of marked reist mee in elk document
dat een gebruiker exporteert en doorstuurt.

Voorstel

Eén wekelijkse workflow — bijvoorbeeld supply-chain.yml, maandag, op de
capacity-4-baan — die deps-check, licenses, check-pins en
catalogs-outdated draait op de kop van main. Blokkerend waar hij dat lokaal
ook is (deps-check, licenses), adviserend waar hij dat is
(catalogs-outdated, check-pins).

Aandachtspunt: OSV is een netwerkaanroep en kan onbereikbaar zijn.
check_bundled_js.dart meldt dat al netjes apart (OSV UNREACHABLE, "COULD NOT
VERIFY CVEs — integrity passed"). Die uitkomst moet in een geplande run
zichtbaar anders zijn dan groen, anders vervangt "kon niet meten" stilletjes
"niets gevonden".

Gevonden bij een kritische review van het kwaliteitsbewakingssysteem, 31-08-2026.

Een deel van de controles in deze repo verandert van uitkomst **zonder dat er iets aan de code verandert**. Een CVE verschijnt, een standaard krijgt een nieuwe editie, een actie krijgt een nieuwe release. Zulke controles hebben een klok nodig, geen wijzigingstrigger. Ze hebben er geen. Er is precies **één** geplande workflow in de hele repo: `.forgejo/workflows/tap-mirror-check.yml` (dagelijks, 05:17 UTC, over de Homebrew-spiegel). Verder staat er nergens een `schedule:`. ## Wat daardoor alleen draait als iemand het typt | controle | wat hij ziet | draait automatisch | |---|---|---| | `make deps-check` → `check_bundled_js.dart` | **OSV-query** (`api.osv.dev`) op de gebundelde marked, highlight.js, DOMPurify, mermaid, MathJax in de HTML-export | nergens | | `make deps-check` → `check_reference_data.dart` | WSTG, CWE, MIAUW, CVSS: gebundelde versie vs. upstream | nergens | | `make licenses` | elke afhankelijkheid nog opensource | nergens | | `make trivy` | CVE's in de Dart-afhankelijkhedenboom | nergens | | `make catalogs-outdated` | gebundelde catalogi vs. upstream | nergens | | `make check-pins` | gepinde CI-acties en scannerbinaries vs. hun laatste release | nergens | | `make deps-outdated` | versheid afhankelijkheden | nergens | `make check-web` draait alleen in `release.yml` (op een tag). De rest zit in `check-full`, en `check-full` staat in geen enkele workflow. ## Waarom dat anders ligt dan bij de andere poorten De rest van het systeem is netjes wijzigingsgestuurd: raak je iets, dan toetst een poort het. Dat is voor code de juiste vorm. Voor deze zeven is het de verkeerde: de gebeurtenis die ertoe doet gebeurt **buiten** de repo. Een kwetsbaarheid in een gebundelde JS-bibliotheek wordt niet gepubliceerd op het moment dat iemand hier een commit doet. Als niemand in vier weken `make check-full` typt, weet dit project vier weken niets. Dat weegt zwaarder omdat de webexport die bundels **inline in het geëxporteerde HTML-bestand** zet: een kwetsbare DOMPurify of marked reist mee in elk document dat een gebruiker exporteert en doorstuurt. ## Voorstel Eén wekelijkse workflow — bijvoorbeeld `supply-chain.yml`, maandag, op de capacity-4-baan — die `deps-check`, `licenses`, `check-pins` en `catalogs-outdated` draait op de kop van `main`. Blokkerend waar hij dat lokaal ook is (`deps-check`, `licenses`), adviserend waar hij dat is (`catalogs-outdated`, `check-pins`). Aandachtspunt: OSV is een netwerkaanroep en kan onbereikbaar zijn. `check_bundled_js.dart` meldt dat al netjes apart (`OSV UNREACHABLE`, "COULD NOT VERIFY CVEs — integrity passed"). Die uitkomst moet in een geplande run zichtbaar anders zijn dan groen, anders vervangt "kon niet meten" stilletjes "niets gevonden". _Gevonden bij een kritische review van het kwaliteitsbewakingssysteem, 31-08-2026._
brenno 2026-08-31 15:46:54 +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#1892
No description provided.