feat(privacy): terzijdelegging per bevinding — ontwerp + opslaglaag (#651) #732

Merged
brenno merged 2 commits from feat/terzijdelegging-651 into main 2026-07-23 11:50:23 +00:00
Owner

Twee commits: het afgetoetste ontwerp (FILE_FORMAT §6.7) en de opslaglaag eronder. Het paneel volgt.

Ontwerp. Per deck in een sidecar, niet per gebruiker in de voorkeuren — een terzijdelegging is een oordeel over dít document en hoort mee te reizen naar de tweede reviewer.

Identiteit is regel + commitment over de waarde, niet de positie: elke positie in PrivacyFinding schuift zodra iemand er een woord boven typt, dus een positie-gebonden terzijdelegging zou stil verlopen. Gevolg, en het is bedoeld: een naam die je op dia 4 goedkeurt blijft ook op dia 9 stil.

Eén correctie op mijn eigen eerdere aanbeveling in dit issue. Die zei: commitment in plaats van ruwe waarde, "dezelfde reden als het redactiemanifest". Dat klopt niet — dat manifest verbergt waarden omdat ze uít het artefact zijn gehaald; hier staan ze nog in de .md, dus tegen wie de sidecar heeft koopt het niets. De houdbare redenen zijn andere twee: geen tweede kopie van een persoonsgegeven maken die de verwijdering van het origineel overleeft, en een zout per deck dat correlatie tussen decks stopt. Het ontwerp zegt er expliciet bij dat het zout géén geheim is.

Grafstenen zijn dragend. Zonder revocations verdwijnt een ongedaan-making bij de eerstvolgende samenvoeging en blijft de bevinding verborgen — de stille faalrichting. Daarom ruimt "alles herroepen" de sidecar ook niet op, anders dan bij de MIAUW-sidecar. Bij een gelijk tijdstempel wint zichtbaarheid.

Bijvangst. De klasseratchet tripte op FileService en wees op vijf keer dezelfde twintig regels sidecar-boilerplate. Nu één vorm, top-level in plaats van in de klasse; FileService ging van 2917 naar 2817 regels, vier basislijnen mee omlaag.

22 tests. make check groen: 5964 tests.

Nog niet gebouwd: het paneel dat filtert, de tweede actie op de kaart met de terzijdegelegd-lijst, de vertalingen, en het git-schrijfpad. Het issue blijft daarvoor open.

Twee commits: het afgetoetste ontwerp (FILE_FORMAT §6.7) en de opslaglaag eronder. Het paneel volgt. **Ontwerp.** Per deck in een sidecar, niet per gebruiker in de voorkeuren — een terzijdelegging is een oordeel over dít document en hoort mee te reizen naar de tweede reviewer. Identiteit is **regel + commitment over de waarde, niet de positie**: elke positie in `PrivacyFinding` schuift zodra iemand er een woord boven typt, dus een positie-gebonden terzijdelegging zou stil verlopen. Gevolg, en het is bedoeld: een naam die je op dia 4 goedkeurt blijft ook op dia 9 stil. **Eén correctie op mijn eigen eerdere aanbeveling in dit issue.** Die zei: commitment in plaats van ruwe waarde, "dezelfde reden als het redactiemanifest". Dat klopt niet — dat manifest verbergt waarden omdat ze uít het artefact zijn gehaald; hier staan ze nog in de `.md`, dus tegen wie de sidecar heeft koopt het niets. De houdbare redenen zijn andere twee: geen tweede kopie van een persoonsgegeven maken die de verwijdering van het origineel overleeft, en een zout per deck dat correlatie tussen decks stopt. Het ontwerp zegt er expliciet bij dat het zout géén geheim is. **Grafstenen zijn dragend.** Zonder `revocations` verdwijnt een ongedaan-making bij de eerstvolgende samenvoeging en blijft de bevinding verborgen — de stille faalrichting. Daarom ruimt "alles herroepen" de sidecar ook niet op, anders dan bij de MIAUW-sidecar. Bij een gelijk tijdstempel wint zichtbaarheid. **Bijvangst.** De klasseratchet tripte op `FileService` en wees op vijf keer dezelfde twintig regels sidecar-boilerplate. Nu één vorm, top-level in plaats van in de klasse; `FileService` ging van 2917 naar 2817 regels, vier basislijnen mee omlaag. 22 tests. `make check` groen: 5964 tests. **Nog niet gebouwd:** het paneel dat filtert, de tweede actie op de kaart met de terzijdegelegd-lijst, de vertalingen, en het git-schrijfpad. Het issue blijft daarvoor open.
Het bestandsformaat raken vraagt eerst een afgetoetst ontwerp. Dit is het:
FILE_FORMAT §6.7, een `<naam>.dismissals.json` naast het deck.

**Per deck en niet per gebruiker**, want het is een oordeel over dít
document: verhuist het deck, dan hoort het oordeel mee. In de voorkeuren
blijft het achter en beoordeelt de tweede reviewer alles opnieuw, terwijl
de eerste op ándere decks bevindingen onderdrukt ziet die hij nooit zag.

**Identiteit is regel + waarde, niet de positie.** Elke positie in
`PrivacyFinding` schuift zodra iemand er een woord boven typt; een
terzijdelegging op een positie zou stil verlopen. `seen_at` is er voor de
ongedaan-lijst en is nadrukkelijk géén onderdeel van de identiteit.

**Waarom een commitment, terwijl de waarde gewoon in de .md staat.** Mijn
eerdere aanbeveling zei "dezelfde reden als het redactiemanifest", en dat
was slordig: dat manifest verbergt waarden omdat ze uít het artefact zijn
gehaald. Hier niet. De houdbare redenen zijn andere twee — een
privacygereedschap hoort geen tweede kopie van een persoonsgegeven te
maken die de verwijdering van het origineel overleeft, en het zout per
deck stopt correlatie tussen decks. Het ontwerp zegt er expliciet bij dat
het zout géén geheim is, zodat er geen bescherming wordt gesuggereerd die
er niet is.

**De scan blijft vinden.** Een terzijdelegging verbergt in het paneel;
`privacyRawScanProvider` en de telling die MIAUW EIS 1.1 leest zien het
volle aantal, en "terzijdegelegd" blijft te onderscheiden van "opgelost".

**Samenvoegen** is een unie op regel + commitment, waarbij bij dezelfde
sleutel de latere `at` wint. Grafstenen (`revocations`) horen erbij:
zonder die zou een ongedaan-making bij de volgende merge verdwijnen en
de bevinding verborgen blijven — de stille faalrichting.

**Anders dan de inktlaag reist dit wél mee in een git-commit.** Inkt is
een persoonlijke aantekening op een kopie; een terzijdelegging is een
reviewbesluit over het rapport.

Nog niets leest of schrijft dit bestand; dat is de volgende stap.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
De opslaglaag van FILE_FORMAT §6.7. Een `<naam>.dismissals.json` naast de
`.md`, met de codec, het lees- en schrijfpad, en de reispaden.

**Identiteit is regel + commitment over de waarde, niet de positie.** Elke
positie in `PrivacyFinding` schuift zodra iemand er een woord boven typt;
een terzijdelegging op een positie zou stil verlopen. `seen_at` reist wél
mee, maar alleen om te tónen wáár je oordeelde.

**Het commitment is geen vertrouwelijkheid tegenover wie het deck heeft** —
die leest de dia gewoon. Het houdt tegen dat deze sidecar een tweede kopie
van een persoonsgegeven wordt die de verwijdering van het origineel
overleeft, en het zout per deck stopt correlatie tussen decks. Dat staat er
zo bij, zodat niemand een bescherming veronderstelt die er niet is.

**Grafstenen zijn dragend.** Zonder `revocations` verdwijnt een
ongedaan-making bij de eerstvolgende samenvoeging — de andere kant draagt
de terzijdelegging nog — en blijft de bevinding verborgen. Daarom ruimt
"alles herroepen" de sidecar ook níét op, anders dan bij de MIAUW-sidecar.
Bij een gelijk tijdstempel wint zichtbaarheid.

Tweeëntwintig tests, over de codec, het samenvoegen en het hele pad van
opslaan tot heropenen tot pakket.

**Onderweg vijf keer dezelfde twintig regels opgeruimd.** De klasseratchet
tripte op `FileService`, en wees op iets echts: pad bepalen, een sidecar
van een nieuwere build met rust laten, schrijven of verwijderen — dat stond
vijf keer uitgeschreven, met de kans er bij de zesde één stap van te
vergeten. Juist de middelste mag je niet vergeten: half inlezen en
terugschrijven wist wat deze build niet begreep. Nu één vorm, en top-level
in plaats van in de klasse, want geen van de vijf raakt er een veld van
aan. `FileService` ging van 2917 naar 2817 regels; vier basislijnen mee
omlaag.

Nog niet gebouwd: het paneel dat filtert, de tweede actie op de kaart met
de terzijdegelegd-lijst, de vertalingen, en het git-schrijfpad.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
brenno merged commit 1729aff398 into main 2026-07-23 11:50:23 +00:00
brenno deleted branch feat/terzijdelegging-651 2026-07-23 11:50:23 +00:00
Sign in to join this conversation.
No description provided.