feat(miauw): de dispositie reist mee naar git — unie per EIS-id met grafstenen (#756) #768

Merged
brenno merged 9 commits from feat/miauw-dispositie-naar-git-756 into main 2026-07-23 17:18:56 +00:00
Owner

De laatste laag die achterbleef: wie een MIAUW-rapportdeck naar een repository verhuisde, hield de dispositie (waivers mét verplichte reden, klantbevestigingen) alleen op de eigen machine — een tweede reviewer zag een gap-analyse zonder de genomen besluiten. Nu reist deck.miauw.json mee langs dezelfde route als de notities, de ink en de terzijdeleggingen.

Ontwerp eerst, zoals het issue vroeg. Het merge-besluit staat in GIT_STORAGE §9.7 en het formaat in FILE_FORMAT §6.5 (v2), beide vóór de bouw geschreven en door de bewaker gekeurd: unie per EIS-id, het laatste besluit wint (at, ISO-8601 UTC), en intrekken is een grafsteen die de merge overleeft — v1 had geen tijd en geen grafstenen, en een pure unie zou een ingetrokken waiver stil laten herrijzen; voor een security-uitsluiting is dat de verkeerde kant om te falen.

Bewaker: akkoord-met-kanttekeningen, alle verwerkt; de afwegingen die hier horen:

  • Grafstenen tellen als inhoud ("alles intrekken" verwijdert het bestand niet; staat nu expliciet in §6.5).
  • Het klok-beslist-verlies bij twee herformuleringen van dezelfde reden is bewust aanvaard en in §9.7 opgeschreven (identiteit is het EIS-nummer; het alternatief is een conflictdialoog voor een éénregelig motiveringsveld).
  • Geen author-veld: de sidecar reist mee in git-historie, pakketten, prullenbak en autosave — een naam erin is een tweede kopie van een persoonsgegeven met eigen levensduur. Auditspoor = git-commits + het zegel (§6.6).
  • Geen native merge-driver (dismissals-precedent): git's tekstmerge mag conflictmarkers achterlaten, de leeskant classificeert die als onaantastbaar en resolveRepoDeckMerge past de echte unie toe. Grafsteen wint een tijdsgelijkspel — de strikte lezing is de veilige.
  • De formaatsprong v1→v2 valt vóór elke release-tag; het bestaande versiecontract (nieuwer bestand → niets lezen, niets overschrijven) beschermt oudere builds, en v1 blijft leesbaar (items gelden als ongedateerd).

Bouw. MiauwDisposition (entries + grafstenen) op Deck, met platte tekstgetters zodat analyzer, privacyscanner en projectie niet meebewegen; zetten stempelt het moment, intrekken laat de grafsteen achter. Route: repoMiauwState/withRepoMiauw, vierde aanroep in writeAllRepoSidecars, regel in mirrorDeckFiles, uitzondering in de sync-engine-delete-lus, terugschrijfregel in de weigertak, mergeMiauw in mergeDeckVersions. De projectie redigeert teksten maar bewaart tijd en grafstenen.

Tests, eerst rood gezien. Route (eigen bestand, terugkomst, grafstenen-zijn-inhoud, alleen eigen bestanden opruimen, werkkopie draagt hem, v1 leesbaar), unie (laatste wint, intrekking overleeft, grafsteen wint gelijkspel, v1 verliest van gedateerd), en het intrekgeval bewezen tegen echte git in git_native_merge_test.

Docs. USER_GUIDE (de uitzondering opgeheven — alleen het zegel blijft tag-only), CHANGELOG, SOURCE_MAP (zes regels getoetst + één vooraf bestaande fictie hersteld), PENTEST_MIAUW §9, OCIWACHT. Restpunt buiten scope: de verouderde git-snackbar over media loopt als eigen taak.

Gedraaid: make check groen (na rebase op de geland(e) #751/#766 opnieuw), check-secrets 0, sast 0. DAST n.v.t.

Sluit #756.

🤖 Generated with Claude Code

De laatste laag die achterbleef: wie een MIAUW-rapportdeck naar een repository verhuisde, hield de dispositie (waivers mét verplichte reden, klantbevestigingen) alleen op de eigen machine — een tweede reviewer zag een gap-analyse zonder de genomen besluiten. Nu reist `deck.miauw.json` mee langs dezelfde route als de notities, de ink en de terzijdeleggingen. **Ontwerp eerst, zoals het issue vroeg.** Het merge-besluit staat in GIT_STORAGE §9.7 en het formaat in FILE_FORMAT §6.5 (v2), beide vóór de bouw geschreven en door de bewaker gekeurd: **unie per EIS-id, het laatste besluit wint (`at`, ISO-8601 UTC), en intrekken is een grafsteen** die de merge overleeft — v1 had geen tijd en geen grafstenen, en een pure unie zou een ingetrokken waiver stil laten herrijzen; voor een security-uitsluiting is dat de verkeerde kant om te falen. **Bewaker: akkoord-met-kanttekeningen**, alle verwerkt; de afwegingen die hier horen: - **Grafstenen tellen als inhoud** ("alles intrekken" verwijdert het bestand niet; staat nu expliciet in §6.5). - Het **klok-beslist-verlies** bij twee herformuleringen van dezelfde reden is bewust aanvaard en in §9.7 opgeschreven (identiteit is het EIS-nummer; het alternatief is een conflictdialoog voor een éénregelig motiveringsveld). - **Geen author-veld**: de sidecar reist mee in git-historie, pakketten, prullenbak en autosave — een naam erin is een tweede kopie van een persoonsgegeven met eigen levensduur. Auditspoor = git-commits + het zegel (§6.6). - **Geen native merge-driver** (dismissals-precedent): git's tekstmerge mag conflictmarkers achterlaten, de leeskant classificeert die als onaantastbaar en `resolveRepoDeckMerge` past de echte unie toe. Grafsteen wint een tijdsgelijkspel — de strikte lezing is de veilige. - De **formaatsprong v1→v2** valt vóór elke release-tag; het bestaande versiecontract (nieuwer bestand → niets lezen, niets overschrijven) beschermt oudere builds, en v1 blijft leesbaar (items gelden als ongedateerd). **Bouw.** `MiauwDisposition` (entries + grafstenen) op `Deck`, met platte tekstgetters zodat analyzer, privacyscanner en projectie niet meebewegen; zetten stempelt het moment, intrekken laat de grafsteen achter. Route: `repoMiauwState`/`withRepoMiauw`, vierde aanroep in `writeAllRepoSidecars`, regel in `mirrorDeckFiles`, uitzondering in de sync-engine-delete-lus, terugschrijfregel in de weigertak, `mergeMiauw` in `mergeDeckVersions`. De projectie redigeert teksten maar bewaart tijd en grafstenen. **Tests, eerst rood gezien.** Route (eigen bestand, terugkomst, grafstenen-zijn-inhoud, alleen eigen bestanden opruimen, werkkopie draagt hem, v1 leesbaar), unie (laatste wint, intrekking overleeft, grafsteen wint gelijkspel, v1 verliest van gedateerd), en het intrekgeval **bewezen tegen echte git** in git_native_merge_test. **Docs.** USER_GUIDE (de uitzondering opgeheven — alleen het zegel blijft tag-only), CHANGELOG, SOURCE_MAP (zes regels getoetst + één vooraf bestaande fictie hersteld), PENTEST_MIAUW §9, OCIWACHT. Restpunt buiten scope: de verouderde git-snackbar over media loopt als eigen taak. **Gedraaid:** make check groen (na rebase op de geland(e) #751/#766 opnieuw), check-secrets 0, sast 0. DAST n.v.t. Sluit #756. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Per item een tijdstempel en grafstenen voor intrekkingen: een unie
zonder die twee laat een ingetrokken waiver stil herrijzen, en dat is
voor een security-uitsluiting de verkeerde kant om te falen. Unie per
EIS-id, laatste besluit wint, grafsteen wint gelijkspel; geen native
driver (dismissals-precedent). Bewaker akkoord; zijn drie
aanscherpingen staan erin (grafstenen zijn inhoud, het bewust
aanvaarde klok-beslist-verlies bij dubbele tekstbewerking, de
ingesprongen repokopie).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
MiauwDisposition draagt per besluit een at-tijdstempel en per
intrekking een grafsteen; Deck houdt één dispositie-object met platte
tekstgetters zodat de leeslaag (analyzer, scanner, projectie) niet
meebeweegt. Zetten stempelt het moment, intrekken laat de grafsteen
achter; v1-bestanden blijven leesbaar als ongedateerd. De projectie
redigeert teksten maar bewaart tijd en grafstenen: inhoud wordt
geredigeerd, besluitgeschiedenis niet.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
deck.miauw.json naast deck.md via dezelfde machinerie als de andere
lagen: gedeelde aanraak-/verwijderregels, regel in mirrorDeckFiles
(wat daar ontbreekt wordt op de tak verwijderd), uitzondering in de
delete-lus van de sync-engine, terugschrijfregel in de weigertak, en
mergeMiauw in mergeDeckVersions — copyWith hield anders stil onze
kant en het besluit van de tweede reviewer verdween.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Route: eigen bestand, terugkomst bij openen, grafstenen-zijn-inhoud,
opruimen alleen van eigen bestanden, werkkopie draagt hem, v1 blijft
leesbaar. Unie: beide reviewers blijven, laatste besluit wint,
intrekking overleeft de zet van de andere kant, grafsteen wint
gelijkspel, v1 verliest van elk gedateerd besluit.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Reviewer A trekt een waiver in terwijl reviewer B een eigen besluit
toevoegt; na de native merge staat de grafsteen in de origin en is de
waiver niet herrezen — het geval waar pure vereniging op stukging.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
USER_GUIDE (de uitzondering opgeheven — alleen het zegel blijft
tag-only), CHANGELOG, SOURCE_MAP (zes regels tegen de code getoetst,
plus één vooraf bestaande fictie hersteld), PENTEST_MIAUW §9 en
OCIWACHT op de sidecar-werkelijkheid; en de zwevende docstring van het
verdwenen omissies-dialoog opgeruimd.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
fix(parse): het legacy-opwaardeerpad als top-level helper — klasseplafond (#756)
Some checks failed
ci / gate (pull_request) Failing after 38m53s
c5eb16d85a
MarkdownService zat twee regels boven zijn plafond; de v1-front-matter-
naar-dispositie-vertaling raakt geen parserstaat en hoort dus toch al
niet op de klasse.

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