fix(privacy): laat een cockpit-dia geen pentestmetrieken tonen met de module uit (#646) #689

Merged
brenno merged 1 commit from fix/cockpit-neutrale-standaard into main 2026-07-22 21:06:59 +00:00
Owner

Tweede item uit #646, en het enige met een gebroken belofte erin.

Wat er misging

De module Informatieveiligheid staat standaard uit en belooft dan verborgen te blijven. Toch kreeg wie een cockpit-dia toevoegde meters met "Overall risk", "Exploitability heat", "Evidence confidence" en "Findings trend".

Wat het níét was

Niet "de cockpit hoort achter de module". Dat type is een algemeen dashboard en hoort er gewoon te zijn. Het probleem zat in zijn voorbeelddata: die heette pentestPreset en dat wás het ook.

Waar het overal terugkwam

Die preset is de terugval op vijf plekken:

  1. een nieuwe cockpit-dia
  2. een spec zonder meters
  3. een spec die niet parseert
  4. de editor
  5. de preview

En op een zesde die de melding niet noemde: de HTML-export. marp_html_service_cockpit.dart valt op dezelfde preset terug bij lege meters. Daar bleef het niet in een venster maar belandde het in een rapport dat de deur uit ging — bij iemand die de module nooit had aangezet.

Punt 3 is de stilste: juist bij een fout — een beschadigd of met de hand bewerkt blok — kwam er data tevoorschijn die er niet hoorde te zijn.

De reparatie

samplePreset is domeinneutraal: "Capacity used", "Load", "Signal quality", "Trend". Dezelfde vier metertypes (speedometer, thermometer, voltmeter, climbDescent), dus er gaat niets verloren aan wat de voorbeelddata demonstreert — voorbeelddata is er om te laten zien wát er kan.

De test bewaakt dat woordelijk, op een lijstje pentestbegrippen, langs alle drie de ingangen: de preset zelf, een nieuwe dia, en een kapot blok. Een volgende preset-schrijver kent deze geschiedenis niet; de test wel.

Getoetst

  • make check groen, make test-golden groen, make check-secrets en make sast schoon.
  • Mutatie geplant (één label terug naar "Overall risk"): drie van de vier tests worden rood.
  • Drie bestaande tests toetsten op de oude terugvallabels en zijn meeverhuisd. Twee andere gebruiken 'Overall risk' als eigen invoer in een round-trip-test — dat is een label dat de gebruiker typt, niet de app, en die blijven dus staan.

Eén correctie op mezelf: mijn test eiste eerst dat alle zeven metertypes voorkwamen, terwijl de preset er altijd vier toonde. De test moest kloppen, niet de code — anders had ik de preset uitgebreid om mijn eigen verkeerde aanname waar te maken.

Wat van #646 overblijft

De consentmuur, de dubbele opslagdialoog, de half-Engelse macOS-menubalk, de foutmelding bij een kapotte .md zonder reden of regelnummer, en de tijdstempel in de exportnaam. Daarvan is de foutmelding de enige die de issue zelf als "echte gebruikersimpact" aanmerkt; de rest is polijstwerk.

Werkt aan #646; die blijft open voor de rest.

Tweede item uit #646, en het enige met een gebroken belofte erin. ## Wat er misging De module Informatieveiligheid staat standaard uit en belooft dan verborgen te blijven. Toch kreeg wie een cockpit-dia toevoegde meters met **"Overall risk"**, **"Exploitability heat"**, **"Evidence confidence"** en **"Findings trend"**. ## Wat het níét was Niet "de cockpit hoort achter de module". Dat type is een algemeen dashboard en hoort er gewoon te zijn. Het probleem zat in zijn voorbeelddata: die heette `pentestPreset` en dat wás het ook. ## Waar het overal terugkwam Die preset is de terugval op vijf plekken: 1. een nieuwe cockpit-dia 2. een spec zonder meters 3. een spec die niet parseert 4. de editor 5. de preview En op een zesde die de melding niet noemde: **de HTML-export**. `marp_html_service_cockpit.dart` valt op dezelfde preset terug bij lege meters. Daar bleef het niet in een venster maar belandde het in een rapport dat de deur uit ging — bij iemand die de module nooit had aangezet. Punt 3 is de stilste: juist bij een *fout* — een beschadigd of met de hand bewerkt blok — kwam er data tevoorschijn die er niet hoorde te zijn. ## De reparatie `samplePreset` is domeinneutraal: "Capacity used", "Load", "Signal quality", "Trend". Dezelfde vier metertypes (speedometer, thermometer, voltmeter, climbDescent), dus er gaat niets verloren aan wat de voorbeelddata demonstreert — voorbeelddata is er om te laten zien wát er kan. De test bewaakt dat woordelijk, op een lijstje pentestbegrippen, langs alle drie de ingangen: de preset zelf, een nieuwe dia, en een kapot blok. Een volgende preset-schrijver kent deze geschiedenis niet; de test wel. ## Getoetst - `make check` groen, `make test-golden` groen, `make check-secrets` en `make sast` schoon. - Mutatie geplant (één label terug naar "Overall risk"): drie van de vier tests worden rood. - Drie bestaande tests toetsten op de oude terugvallabels en zijn meeverhuisd. Twee andere gebruiken 'Overall risk' als *eigen invoer* in een round-trip-test — dat is een label dat de gebruiker typt, niet de app, en die blijven dus staan. Eén correctie op mezelf: mijn test eiste eerst dat alle zeven metertypes voorkwamen, terwijl de preset er altijd vier toonde. De test moest kloppen, niet de code — anders had ik de preset uitgebreid om mijn eigen verkeerde aanname waar te maken. ## Wat van #646 overblijft De consentmuur, de dubbele opslagdialoog, de half-Engelse macOS-menubalk, de foutmelding bij een kapotte `.md` zonder reden of regelnummer, en de tijdstempel in de exportnaam. Daarvan is de foutmelding de enige die de issue zelf als "echte gebruikersimpact" aanmerkt; de rest is polijstwerk. Werkt aan #646; die blijft open voor de rest.
fix(privacy): laat een cockpit-dia geen pentestmetrieken tonen met de module uit (#646)
Some checks failed
CI / Gate (Linux) · Format · Analyze · Coverage (push) Failing after 28s
CI / Web hardening (push) Failing after 29s
CI / Docs links (push) Failing after 24s
CI / Supply-chain (Trivy · advisory) (push) Failing after 23s
CI / Gate (Linux) · Format · Analyze · Coverage (pull_request) Failing after 29s
CI / Web hardening (pull_request) Failing after 24s
CI / Docs links (pull_request) Failing after 20s
CI / Supply-chain (Trivy · advisory) (pull_request) Failing after 22s
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
43bfe4ea86
De module Informatieveiligheid staat standaard uit en belooft dan verborgen te
blijven. Wie een cockpit-dia toevoegde kreeg toch "Overall risk",
"Exploitability heat", "Evidence confidence" en "Findings trend" op zijn scherm.

De diagnose is niet "verberg de cockpit". Dat type is een algemeen dashboard en
hoort er te zijn; het probleem zat in zijn voorbeelddata, die `pentestPreset`
heette en dat ook was. En die preset was de terugval op vijf plekken — een
nieuwe dia, een lege spec, een onleesbare spec, de editor en de preview.

De zesde is de plek waar het van vervelend naar ernstig gaat: de **HTML-export**
valt op dezelfde preset terug bij lege meters. Daar bleef het niet in een venster
maar belandde het in een uitgeleverd rapport. Dat stond niet in de melding.

`samplePreset` is nu domeinneutraal, met dezelfde vier metertypes, dus er gaat
niets verloren aan wat de voorbeelddata demonstreert. De test bewaakt woordelijk
dat er geen pentestbegrip meer opduikt — ook niet via een kapot blok, want juist
bij een fout kwam die data tevoorschijn.

Drie bestaande tests toetsten op de oude labels en zijn meeverhuisd; twee andere
typen 'Overall risk' als eigen invoer in een round-trip en blijven staan — dat is
een label van de gebruiker, niet van de app.

Eén ding rechtgezet in mijn eigen test: die eiste eerst alle zeven metertypes,
terwijl de preset er altijd vier toonde. De test moest kloppen, niet de code.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
brenno merged commit 8fcf77a560 into main 2026-07-22 21:06:59 +00:00
Sign in to join this conversation.
No description provided.