feat(git): het zegel reist mee — de weigering is ingetrokken (#541) #775

Merged
brenno merged 2 commits from feat/zegel-reist-mee-541 into main 2026-07-23 18:53:51 +00:00
Owner

Slotstuk van #541, langs het besluit van de beheerder op het issue (23-07-2026): git is hier een bestandssysteem, geen enforcer. Wat een zegel betekent — afgekaart, niet meer te wijzigen — bewaakt de app zelf door een verzegeld deck alleen-lezen te houden; de opslag bewaart wat er is.

Wat er verandert

  • deck.seal.json reist als sidecar mee naast deck.md (REST én werkkopie/wachtrij), komt bij het openen terug (withRepoSeal, in withRepoSidecars), en valt onder dezelfde aanraak- en verwijderregels als de andere lagen (repoSealState, sync-engine-uitzondering).
  • De weigering is ingetrokken: gitRefusesSealedDeck, GitSaveStatus.sealed, de uitlegdialoog en drie l10n-sleutels × 31 talen zijn weg. Een verzegeld deck slaat gewoon op.
  • De merge verliest geen zegel: de kant die er een draagt wint; dragen beide er een, dan de onze — deterministisch, want twee versies van één zegel is een vergissing, geen conflict (§9.7).
  • Eerlijke grens: de zegelhash gaat over de bytes van de oorspronkelijke .md; de repo-kopie herschrijft assetpaden. Een deck uit git meldt zijn zegel dus als "hier niet na te rekenen" in plaats van vals alarm — identiek aan het .ocideck-pakket. Narekenen blijft sha512sum tegen het origineel (FILE_FORMAT §6.6).

Bijvangst: sidecars schreven nooit naar een verse branch (REST)

GitForge.readBlob gooit notFound bij een ontbrekend bestand en de aanraakcontrole las élke worp als "niet aanraken" — dus de eerste opslag van notities/ink/terzijdeleggingen/dispositie op een branch zonder dat bestand schreef die laag stilletjes niet. repoFileReaderFor vertaalt notFound nu naar null, zoals het RepoFileReader-contract belooft; elke andere fout blijft "niet aanraken". Regressietest op het eerste-opslag-pad zit erbij (rood tegen de onherstelde code, groen erna).

Waarborgen

  • make check groen (6.000+ tests, dekking 86,0%), make check-secrets 0 bevindingen, make sast 0 bevindingen. DAST (ZAP) staat nog niet ingericht en is niet gedraaid.
  • Bewaker-ronde gedaan (formaat/opslag/publieke belofte): .md blijft puur, §6.6 eerlijk, geen vendor-lock, merge-regel verdedigbaar; geen blokkerende bezwaren.
  • Regressietests: zegel-round-trip, merge-overleving (3 takken), weigering-afwezig in de interface, eerste-opslag van een sidecar.
  • Docs: GIT_STORAGE D13 herzien (+§9.1/§9.7), FILE_FORMAT §6.6, USER_GUIDE, SOURCE_MAP, CHANGELOG.

Closes #541

🤖 Generated with Claude Code

Slotstuk van #541, langs het besluit van de beheerder op het issue (23-07-2026): **git is hier een bestandssysteem, geen enforcer.** Wat een zegel betekent — afgekaart, niet meer te wijzigen — bewaakt de app zelf door een verzegeld deck alleen-lezen te houden; de opslag bewaart wat er is. ## Wat er verandert - **`deck.seal.json` reist als sidecar mee** naast `deck.md` (REST én werkkopie/wachtrij), komt bij het openen terug (`withRepoSeal`, in `withRepoSidecars`), en valt onder dezelfde aanraak- en verwijderregels als de andere lagen (`repoSealState`, sync-engine-uitzondering). - **De weigering is ingetrokken**: `gitRefusesSealedDeck`, `GitSaveStatus.sealed`, de uitlegdialoog en drie l10n-sleutels × 31 talen zijn weg. Een verzegeld deck slaat gewoon op. - **De merge verliest geen zegel**: de kant die er een draagt wint; dragen beide er een, dan de onze — deterministisch, want twee versies van één zegel is een vergissing, geen conflict (§9.7). - **Eerlijke grens**: de zegelhash gaat over de bytes van de oorspronkelijke `.md`; de repo-kopie herschrijft assetpaden. Een deck uit git meldt zijn zegel dus als "hier niet na te rekenen" in plaats van vals alarm — identiek aan het `.ocideck`-pakket. Narekenen blijft `sha512sum` tegen het origineel (FILE_FORMAT §6.6). ## Bijvangst: sidecars schreven nooit naar een verse branch (REST) `GitForge.readBlob` gooit `notFound` bij een ontbrekend bestand en de aanraakcontrole las élke worp als "niet aanraken" — dus de eerste opslag van notities/ink/terzijdeleggingen/dispositie op een branch zonder dat bestand schreef die laag stilletjes niet. `repoFileReaderFor` vertaalt `notFound` nu naar null, zoals het `RepoFileReader`-contract belooft; elke andere fout blijft "niet aanraken". Regressietest op het eerste-opslag-pad zit erbij (rood tegen de onherstelde code, groen erna). ## Waarborgen - `make check` groen (6.000+ tests, dekking 86,0%), `make check-secrets` 0 bevindingen, `make sast` 0 bevindingen. DAST (ZAP) staat nog niet ingericht en is niet gedraaid. - Bewaker-ronde gedaan (formaat/opslag/publieke belofte): `.md` blijft puur, §6.6 eerlijk, geen vendor-lock, merge-regel verdedigbaar; geen blokkerende bezwaren. - Regressietests: zegel-round-trip, merge-overleving (3 takken), weigering-afwezig in de interface, eerste-opslag van een sidecar. - Docs: GIT_STORAGE D13 herzien (+§9.1/§9.7), FILE_FORMAT §6.6, USER_GUIDE, SOURCE_MAP, CHANGELOG. Closes #541 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Git is een bestandssysteem, geen enforcer (besluit beheerder, 23-07-2026).
deck.seal.json gaat naast deck.md mee, komt bij het openen terug, en
overleeft de merge van welke kant hij ook komt (beide kanten: onze wint,
deterministisch). De weigering gitRefusesSealedDeck en GitSaveStatus.sealed
zijn opgeheven, incl. dialoog en drie l10n-sleutels in 31 talen.

Bijvangst: repoFileReaderFor vertaalt notFound naar null — de
aanraakcontrole las élke worp als 'niet aanraken', waardoor op het REST-pad
geen enkele sidecar ooit geschreven werd naar een branch waar hij nog niet
stond. Regressietest op het eerste-opslag-pad.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
docs: D13 herzien — het zegel reist mee, git is geen enforcer (#541)
All checks were successful
ci / gate (pull_request) Successful in 41m43s
303e96ff8e
GIT_STORAGE (D13, §9.1, §9.7), FILE_FORMAT §6.6 (zegel in de repo is
metadata, narekenen tegen het origineel), USER_GUIDE, SOURCE_MAP en de
changelog, incl. de sidecar-lezer-bijvangst.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
brenno merged commit 04a01a2edb into main 2026-07-23 18:53:51 +00:00
Sign in to join this conversation.
No description provided.