feat(forms): rechtenbewijs per foto en terug naar wat binnenkwam #2242

Merged
brenno merged 2 commits from feat/form-rights-and-revert into main 2026-10-03 08:31:02 +00:00
Owner

Wat

De twee kleine stappen die na de controle door de maker (#2241) openstonden.

1. Rechtenbewijs per foto in het boek (par. 7.5). De sidecar book/<naam>.compile.json krijgt per foto de sha-256 van de bytes en haar herkomst in de vorm van AssetRightsProvenance: de maker (de titel die de inzender gaf), licentie form-consent en als bewijs het formulier, de inzending en de hash van elke toestemmingstekst die de inzender aanvinkte. Zonder toestemmingsveld geen licentie en geen bewijs, en dat staat er zo.

Eerlijk over de reikwijdte: dit is een vastlegging, geen controle. Bij het uitzoeken bleek dat de rechtencontrole alleen foto's scant die uit in git bewaarde decks in de pool assets/<sha256>.<ext> komen. Het boek is een document en wordt nergens door die controle gezien; er verandert in de UI dus niets. De sleutel is bewust de sha-256, de sleutel van .ocideck/asset-assessments/<sha>.json, zodat het bewijs terug te vinden is als de controle ooit documentfoto's leert lezen. Dat laatste is aparte, grotere stap (de beslissing welk pad een boek naar een repo neemt); ik heb het niet verzonnen. FORM_INTAKE §7.5, USER_GUIDE en CHANGELOG zeggen dit ook.

2. Terug naar wat binnenkwam (par. 7.1). FormWorkspace.discardWorkingCopy verwijdert alleen submission.edit.md; wat binnenkwam, de foto's en het register blijven. De Inbox krijgt Werkkopie weggooien… met een bevestiging die zegt wat gaat en wat blijft, en vraagt de werkkopie eerst te sluiten als ze nog openstaat (anders brengt opslaan haar terug). Ook een werkkopie die niet te lezen is kan weg (FormStoredUnavailable.edited) — daar was geen uitweg uit. Nooit voor een verwijderde rij.

8 nieuwe zinnen × 30 talen.

Toetsing

  • Tests: sidecar (6 nieuw), werkruimte (8 nieuw), Inbox-lijst en bevestiging (8 nieuw, met een naad zodat "annuleren gooit niets weg" bewezen is zonder te wachten op schijf).
  • Mutatietoets op alle nieuwe code: 0 overlevers behalve één equivalente (false || x). Het eerst gebouwde FileSystemEntity.type-gedoe bleek met equivalente mutanten te zitten en is vervangen door exists() + delete(), wat ook gelijk loopt met wat reviewStored als werkkopie ziet.
  • make check, check-registrations, check-secrets, sast groen; branch niet achter op main.
  • Niet met het oog gekeurd in de draaiende app (computer-use is niet toegestaan in deze sessie).
## Wat De twee kleine stappen die na de controle door de maker (#2241) openstonden. **1. Rechtenbewijs per foto in het boek** (par. 7.5). De sidecar `book/<naam>.compile.json` krijgt per foto de sha-256 van de bytes en haar herkomst in de vorm van `AssetRightsProvenance`: de maker (de titel die de inzender gaf), licentie `form-consent` en als bewijs het formulier, de inzending en de hash van elke toestemmingstekst die de inzender aanvinkte. Zonder toestemmingsveld geen licentie en geen bewijs, en dat staat er zo. **Eerlijk over de reikwijdte:** dit is een vastlegging, geen controle. Bij het uitzoeken bleek dat de rechtencontrole alleen foto's scant die uit in git bewaarde *decks* in de pool `assets/<sha256>.<ext>` komen. Het boek is een document en wordt nergens door die controle gezien; er verandert in de UI dus niets. De sleutel is bewust de sha-256, de sleutel van `.ocideck/asset-assessments/<sha>.json`, zodat het bewijs terug te vinden is als de controle ooit documentfoto's leert lezen. Dat laatste is aparte, grotere stap (de beslissing welk pad een boek naar een repo neemt); ik heb het niet verzonnen. FORM_INTAKE §7.5, USER_GUIDE en CHANGELOG zeggen dit ook. **2. Terug naar wat binnenkwam** (par. 7.1). `FormWorkspace.discardWorkingCopy` verwijdert alleen `submission.edit.md`; wat binnenkwam, de foto's en het register blijven. De Inbox krijgt *Werkkopie weggooien…* met een bevestiging die zegt wat gaat en wat blijft, en vraagt de werkkopie eerst te sluiten als ze nog openstaat (anders brengt opslaan haar terug). Ook een werkkopie die niet te lezen is kan weg (`FormStoredUnavailable.edited`) — daar was geen uitweg uit. Nooit voor een verwijderde rij. 8 nieuwe zinnen × 30 talen. ## Toetsing - Tests: sidecar (6 nieuw), werkruimte (8 nieuw), Inbox-lijst en bevestiging (8 nieuw, met een naad zodat "annuleren gooit niets weg" bewezen is zonder te wachten op schijf). - Mutatietoets op alle nieuwe code: 0 overlevers behalve één equivalente (`false || x`). Het eerst gebouwde `FileSystemEntity.type`-gedoe bleek met equivalente mutanten te zitten en is vervangen door `exists()` + `delete()`, wat ook gelijk loopt met wat `reviewStored` als werkkopie ziet. - `make check`, `check-registrations`, `check-secrets`, `sast` groen; branch niet achter op main. - Niet met het oog gekeurd in de draaiende app (computer-use is niet toegestaan in deze sessie).
De sidecar krijgt per foto de sha-256 van de bytes en haar herkomst in de vorm van
AssetRightsProvenance: de maker, en als licentie form-consent met als bewijs het formulier, de
inzending en de hash van elke toestemmingstekst. Zonder toestemmingsveld geen licentie en geen
bewijs. Een vastlegging, geen controle: de rechtencontrole leest geen documentfoto's.
Mutatietoets: 0 overlevers.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
discardWorkingCopy verwijdert alleen submission.edit.md; wat binnenkwam, de foto's en het register
blijven. De Inbox krijgt Werkkopie weggooien... met een bevestiging die zegt wat gaat en wat blijft,
ook voor een werkkopie die niet te lezen is (FormStoredUnavailable.edited). 8 zinnen x 30 talen.
Mutatietoets: 0 overlevers behalve een equivalente.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
brenno merged commit 161f49baaf into main 2026-10-03 08:31:02 +00:00
brenno deleted branch feat/form-rights-and-revert 2026-10-03 08:31:03 +00:00
Sign in to join this conversation.
No description provided.