docs: maak CLAUDE.md lichter en breng hem bij - #295
Open
ericwout-overheid wants to merge 3 commits into
Open
Conversation
Een audit van CLAUDE.md tegen de huidige boom leverde één structuurprobleem en drie stukken drift op. De ZAD-sectie was met 12 KB goed voor 27% van het bestand, terwijl ze alleen nodig is bij het onderzoeken van een falende deploy of preview. CLAUDE.md wordt elke sessie volledig geladen, dus die 12 KB drukte op alles wat niet over deployen ging. De gids gaat ongewijzigd naar docs/operations/zad-gitops.md; in CLAUDE.md blijft een pointer staan met wat je hoe dan ook moet weten voordat je iets aanraakt: dat Git de bron van waarheid is, welke project-ids er zijn, dat DELETE op een deployment destructief is, en dat handmatig OM-werk tijdens een lopende deploy misgaat. Verder bijgewerkt: - fbs-common stond beschreven als "JAX-RS filters en exception mappers", maar draagt inmiddels ook de Profiel-serviceclient met voorkeuren en toestemming, de FSC-outway- headers en -TLS-validatie en de LDV-validators. Toestemming kwam daardoor nergens in de modulebeschrijving voor. - docs/demo-runbook.md, docs/operations/ en de Podman-scripts van de demo waren alleen via een omweg vindbaar en staan nu in de bestandentabel. - Van de veertien scripts in .github/scripts stonden er twee in de tabel. De drie poortwachters die stille CI-uitkomsten afvangen — uitrol-poort.sh, merge-guard.sh en proeftuin-pin.sh — zijn toegevoegd. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012EtTFzuvUinGmBM2ZRs71v
Alle drie de ingecheckte automatiseringen in .claude/ deden niets meer. De twee hooks in settings.json lazen `$CLAUDE_TOOL_INPUT`. Die variabele bestaat niet: hook-input komt als JSON op stdin, met het bewerkte pad in .tool_input.file_path. Beide greps draaiden dus op een lege string en matchten nooit. De guard op gegenereerde code eindigde bovendien met `exit 1`, wat een tool-call niet blokkeert — alleen `exit 2` doet dat. Hij hield dus niets tegen, ook niet als hij wel had gevuurd. De PostToolUse-hook noemde daarnaast `services/berichtensessiecache`, een module die nu `libraries/fbs-berichtensessiecache` heet. Dezelfde verouderde naam stond in de skill openapi-wijziging, die daarmee naar een spec verwees die niet bestaat. De hooks staan nu als scripts in .claude/hooks/ in plaats van als shell-eenregelaars in JSON: leesbaar, en te draaien zonder Claude Code. De module-hook leidt de module af uit het bewerkte pad in plaats van er één te noemen, zodat een hernoeming opvalt in plaats van de hook te laten verstommen. De twee pure-JVM-libraries (9s en 20s lokaal) draaien meteen en zwijgen als ze groen zijn; alles wat Quarkus boot of Testcontainers start, krijgt het commando geprint in plaats van de sessie minuten te laten wachten. Toegevoegd: - PreToolUse-guard op bestaande Flyway-migraties. Immutabiliteit stond alleen in CLAUDE.md; een gewijzigde V*.sql valt pas om bij de volgende boot, ver van de edit. Nieuwe V(N+1)-bestanden en de rollback-scripts blijven bewerkbaar. - Subagent taal-en-commentaar-reviewer voor de NL/EN-grens en de commentaarregels. Die worden door geen enkele tool gedekt; detekt heeft de comments-ruleset juist uitgezet. - Subagent pii-log-auditor voor BSN-lekken via logs, URL's en foutmeldingen — inclusief de asymmetrie dat OIN publiek is en juist niet gemaskeerd mag worden, waar een generieke security-review de verkeerde kant op adviseert. - Skill pr-klaarmaken (user-only) voor de PR-volgorde: sync vóór CI vanwege strict branch-protection, verify per geraakte module, warnings triëren, draft zonder reviewer, en de cross-repo sluitregel. Handmatig geverifieerd per hook: blokkeergevallen geven exit 2 met uitleg, de doorlaatgevallen exit 0, en de snelle testroute draait groen en stil. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012EtTFzuvUinGmBM2ZRs71v
Contributor
Author
Vervolgsuggesties — bewust NIET in deze PRBij het repareren van Hooks
Subagents
Skills
MCP-servers
Plugins
Hoort hier een issue bij in 🤖 Generated with Claude Code |
5 tasks
ericwout-overheid
left a comment
Contributor
Author
There was a problem hiding this comment.
Ready for review.
Comment hierboven kan (selectief) eventueel ook meegepakt, of een issue voor gemaakt. Overlegpuntje denk ik.
ericwout-overheid
marked this pull request as ready for review
September 7, 2026 06:39
De ZAD-gids beschreef nog dat een reconcile een door OM uitgeschakeld component niet reactiveert, en dat de deployment herscheppen de enige werkende fix is. Dat klopt sinds RC-37 (2026-08-06) niet meer, en het is een dure fout: het stuurt naar een DELETE die voor projecten met de postgresql-database-service de databasegegevens wist. Een rollout heft de uitschakeling nu op. Twee mechanismen, met verschillende reikwijdte: update-image en een upsert van een bestaande deployment lopen over ActionEvent.REDEPLOY en wissen elke uitschakeling ongeacht de reden, ook met een ongewijzigde tag; een door een mens gestarte (her)verwerking heft via de disabled-image-sweep alleen een image-pull-uitschakeling op. Herscheppen blijft staan als het zware alternatief voor wanneer de uitschakeling meteen terugkomt. Geverifieerd op mpfm-w3h/pr-288/democonsole, dat uitstond door een transiënte timeout op de pull-through-mirror: update-image met dezelfde tag zette het component weer aan, zonder dataverlies. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JFxVFC2NDRtW5HqbpX4nXY
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Twee dingen in deze PR:
CLAUDE.mdopschonen, en de ingecheckte Claude Code-automatisering in.claude/repareren — die deed niets meer.Deel 1 — CLAUDE.md
Alle genoemde klassen, paden, poorten en configuratiesleutels zijn nagelopen en bestaan nog; de
inhoud was actueel. Wat eruit kwam is één structuurprobleem en drie stukken drift.
De ZAD-gids verhuist. De sectie ZAD deploy & GitOps (debug) was 12 KB: 27% van het bestand,
terwijl ze alleen nodig is bij het onderzoeken van een falende deploy of een vastgelopen preview.
CLAUDE.mdwordt elke sessie volledig geladen. De tekst verhuist naardocs/operations/zad-gitops.md— bij de verplaatsing byte-identiek, daarna één inhoudelijkecorrectie (zie hieronder); er blijft een pointer staan met wat je hoe dan
ook moet weten voordat je iets aanraakt — dat Git de bron van waarheid is, de drie project-ids, dat
DELETEop een deployment destructief is, en dat handmatig OM-werk tijdens een lopende deploymisgaat.
fbs-common-beschrijvingprofiel/(serviceclient, voorkeuren, toestemming),fsc/(outway-headers, outbound-TLS) en de LDV-validators. Toestemming kwam nergens in de modulebeschrijving voordocs/demo-runbook.md,docs/operations/,demo/podman-up.sh+smoke.shuitrol-poort.sh,merge-guard.sh,proeftuin-pin.sh.github/scriptsstonden er twee in de tabel. Deze drie vangen stille CI-uitkomsten afCLAUDE.md: 459 → 330 regels (44 KB → 36 KB), zonder verlies van kennis.Deel 2 — de automatisering in
.claude/was doodAlle drie de ingecheckte automatiseringen deden niets. Dat is teambreed:
.claude/settings.json,de agents en de skills staan in git.
De twee hooks lazen
$CLAUDE_TOOL_INPUT. Die variabele bestaat niet — hook-input komt als JSONop stdin, met het pad in
.tool_input.file_path. Beide greps draaiden dus op een lege string enmatchten nooit. De guard op gegenereerde code eindigde bovendien op
exit 1, wat een tool-callniet blokkeert; alleen
exit 2doet dat. Hij hield dus niets tegen, ook niet als hij wél hadgevuurd.
Twee artefacten noemden
services/berichtensessiecache, een module die nulibraries/fbs-berichtensessiecacheheet: de PostToolUse-hook, en de skillopenapi-wijzigingdiedaarmee naar een niet-bestaande spec verwees.
Wat er nu staat
De hooks zijn scripts in
.claude/hooks/in plaats van shell-eenregelaars in JSON — leesbaar, ente draaien zonder Claude Code.
hooks/gegenereerde-code-blokkeren.shtarget/generated-sources(nu écht: stdin-JSON,exit 2)hooks/flyway-immutabel.shV*.sql; noemt het eerstvolgende vrije versienummer. Nieuwe migraties endb/rollback/blijven bewerkbaarhooks/geraakte-module-test.shFBS_HOOK_TESTS=0zet het draaien uitagents/taal-en-commentaar-reviewer.mdcomments-ruleset juist uitgezetagents/pii-log-auditor.mdskills/openapi-wijziging/SKILL.mdskills/pr-klaarmaken/SKILL.mdEén correctie in de verhuisde tekst. De gids beschreef nog dat een reconcile een door OM
uitgeschakeld component niet reactiveert en dat de deployment herscheppen de enige fix is. Sinds
RC-37 (2026-08-06) klopt dat niet meer, en het is een dure fout: het stuurt naar een
DELETEdievoor projecten met de
postgresql-database-service de databasegegevens wist. Een rollout heft deuitschakeling nu op —
update-imageen een upsert wissen elke reden, ook op een ongewijzigde tag;een handmatige (her)verwerking alleen een image-pull-uitschakeling. Herscheppen blijft staan als
het zware alternatief.
Verificatie
diff, exit 0); de correctieerbovenop is een aparte commit
RijksICTGilde/RIG-Cluster) en live bevestigd opmpfm-w3h/pr-288/democonsole:update-imagemet dezelfde tag zette het component weer aan,zonder dataverlies
exit 2met uitleg(inclusief het juiste eerstvolgende migratienummer, V8), doorlaatgevallen
exit 0de modules die het echt nodig hebben
.claude/settings.jsonis geldige JSONBuiten deze PR
.claude/settings.local.jsonbevat ook nog verouderde permissies (services/berichtenlijst,absolute
/home/...-paden), maar dat bestand is gitignored en persoonlijk — dat hoort niet in eenPR.
Nog te bepalen
Hier hoort mogelijk een issue bij; die bestaat nog niet. Zeg het als er een aangemaakt moet worden,
dan komt de sluitregel er alsnog bij.
🤖 Generated with Claude Code
https://claude.ai/code/session_012EtTFzuvUinGmBM2ZRs71v