refactor(demo): één beschrijving van een demo-persona - #286
Open
ericwout-overheid wants to merge 6 commits into
Open
refactor(demo): één beschrijving van een demo-persona#286ericwout-overheid wants to merge 6 commits into
ericwout-overheid wants to merge 6 commits into
Conversation
Contributor
JaCoCo coverage
|
ericwout-overheid
force-pushed
the
feature/demo-console-bericht-per-persona
branch
from
September 4, 2026 11:19
7c0b0ae to
e7031a9
Compare
ericwout-overheid
force-pushed
the
chore/demo-persona-ontdubbelen
branch
from
September 4, 2026 11:25
a92d651 to
62b9ba4
Compare
ericwout-overheid
marked this pull request as ready for review
September 4, 2026 11:39
ericwout-overheid
force-pushed
the
chore/demo-persona-ontdubbelen
branch
from
September 4, 2026 12:04
c2f1fe5 to
a16c7d9
Compare
Base automatically changed from
feature/demo-console-bericht-per-persona
to
main
September 4, 2026 12:42
Het bedieningspaneel had een eigen `Persona` naast `DemoPersona` van de personadienst: dezelfde velden, `label` hernoemd naar `naam`, `bron` weggelaten, en geen enkele van de zeven `require`-eisen. De generator had er daarom drie van teruggezet — dezelfde controle op een tweede plek, en alleen voor wie via de generator binnenkomt. `DemoBerichtGenerator` werkt nu rechtstreeks op `DemoPersona`; `Persona` en de handgeschreven mapping in `GeneratorProducer` zijn geschrapt. Wat in het init-blok van de generator overblijft is de kennis die alleen hij heeft: minstens één persona, unieke id's, minstens één magazijn per persona, elk magazijn-OIN bekend bij zijn organisaties, en sjablonen per organisatie. `Doelpersona` blijft: dat is geen kopie van de identiteit maar het paneel-contract, dat het identificatienummer bewust niet draagt. De vervallen generator-tests (lege id, leeg label, elfproef) hebben hun tegenhanger in `DemoPersonaTest`. Closes MinBZK/MijnOverheidZakelijk#1071 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SkFnFHif3ffbctaxoyEdwn
Uit de review op deze wijziging: - `GeneratorProducer` beweerde dat de keuzelijst en de gegenereerde berichten dezelfde set persona's gebruiken. Dat is niet zo: de generator krijgt `metMagazijnen()`, een deelverzameling. Met de handmatige mapping weg is die aanroep de enige plek waar het filter nog zichtbaar is. - De assertie in `een persona met een onbekende organisatie-OIN` sloeg op het woord "onbekend" in de vaste meldingstekst en zou dus ook slagen als de melding de persona niet meer noemt. - De magazijnen-lus werd alleen met één OIN uitgelokt; een regressie naar `magazijnen.first()` kwam er groen doorheen. Test erbij met een bekend OIN vóór het onbekende. - De sjablonen-test maakte de eerste map-entry leeg, waar `organisaties.values.first()` doorheen komt; nu de tweede. - `OmgevingResourceTest` gaf twee persona's hetzelfde identificatienummer, wat de personadienst fail-fast weigert — een fixture die niet kan bestaan. - KDoc van `Doelpersona` zette zich nog af tegen `PersonaDto`, terwijl het type nu uit `DemoPersona` ontstaat, dat het nummer óók draagt. - De toelichting op de magazijnen-eis noemde de verkeerde reden: hij bestaat omdat de constructor nul magazijnen aanneemt, niet omdat de personadienst ze toestaat. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SkFnFHif3ffbctaxoyEdwn
Uit de tweede reviewronde: - De twee lussen in het init-blok werden alleen met de foute waarde op de laatste positie uitgelokt. Daarmee sneuvelt een `first()`-implementatie wel, maar een `last()`-implementatie niet. Beide tests zijn nu geparameteriseerd over de positie. - De KDoc van `Doelpersona` schreef de niet-lege velden toe aan `doelgroep()`, terwijl `DemoPersona` ze bewaakt, en beweerde dat het nummer buiten de generator-API blijft — dat doet het niet, alleen buiten de keuzelijst. - De KDoc van `DemoBerichtGenerator` vatte het init-blok samen als "afzenders en sjablonen"; dat dekt drie van de vijf eisen niet. - `GeneratorProducer` sprak van "de personadienst" waar het om de bean uit de jar gaat, in-process — niet om een aanroep over het net. - De toelichting bij de generator-fixture in `TempoServiceTest` telde nog drie regels testdata. - Het plan telde de invarianten die de kopie kostte te laag en had de rationale onder "minstens één persona" omgekeerd. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SkFnFHif3ffbctaxoyEdwn
De lus over de persona's zette de kapotte persona altijd als laatste, zodat een implementatie die alleen `personas.first()` nagaat sneuvelde maar een die alleen de laatste bekijkt erdoorheen kwam. Nu geparameteriseerd, gelijk aan de twee lussen eronder. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SkFnFHif3ffbctaxoyEdwn
De basisbranch heeft `require(sjablonen.isNotEmpty())` naar `Organisatie` verplaatst; de tabel noemde hem nog als behouden generator-invariant. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SkFnFHif3ffbctaxoyEdwn
…noemen De header zei dat Grootbedrijf en Concern een opt-in bij de twee echte magazijnen hebben, "dus" die twee leeg blijven. Dat volgt niet: juist een opt-in maakt aanlevering mogelijk. Ze blijven leeg omdat het paneel er niets voor aanlevert. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SkFnFHif3ffbctaxoyEdwn
ericwout-overheid
force-pushed
the
chore/demo-persona-ontdubbelen
branch
from
September 5, 2026 08:41
a16c7d9 to
aae49e4
Compare
Contributor
🚀 Preview DeploymentDe preview-omgeving van deze PR: Demo
Berichtenuitvraag
Deze preview wordt opgeruimd zodra de PR sluit. |
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.
Wat
De demo-identiteit stond twee keer beschreven:
DemoPersonaindemo-personas(zes velden, zevenrequire-eisen) enPersonaindemo-console/generator/AanleverModel.kt(vijf velden, geen eisen).GeneratorProducerschreef de ene handmatig op de andere over, metlabel→naamals enige verschil naast het weggelatenbron.Die kopie kostte drie invarianten — een lege id, een leeg label en een ongeldig identificatienummer kwamen er ongehinderd doorheen. De generator had ze daarom in zijn eigen init-blok teruggezet: dezelfde controle op een tweede plek, en alleen voor wie via de generator binnenkomt.
DemoBerichtGeneratorwerkt nu rechtstreeks opDemoPersona;Personaen de handmatige mapping zijn geschrapt.Doelpersonablijft staan: dat is geen kopie van de identiteit maar het paneel-contract, dat het identificatienummer bewust niet draagt.Wat er in het init-blok van de generator overblijft
Behouden — kennis die alleen de generator heeft:
doelgroep()mag niet leeg zijn; de personadienst weigert een lege set al, maar deze constructor nietDemoPersonastaat nul magazijnen expliciet toe (Grootbedrijf haalt op bij de stub-magazijnen)organisatiesMagazijnKennisUitInrichtingtoetst tegendemo.magazijnen(aanlever-URL's), de generator tegen zijn sjablonen-map — twee verschillende verzamelingenVervallen, want ze staan in het init-blok van
DemoPersonaen zijn daar getoetst: id niet leeg, label niet leeg,Identificatiecheck.valideer(type, waarde). Met de lege id weg vervalt ook deforEachIndexed: de melding wijst de persona weer bij zijn id aan in plaats van bij zijn positie.Acceptatiecriteria
PersonaConfiguratieTest(@QuarkusTest) bouwt de generator uit de échte configuratie en toetst de keuzelijst via/api/demo/omgeving.Tests
De drie vervallen generator-tests (lege id, leeg label, elfproef) hebben hun tegenhanger in
DemoPersonaTest; de controle verdwijnt niet, alleen de tweede plek. De twee overgebleven fail-fast-tests kregen er een assertie op de melding bij, zodat ze niet groen blijven als een ándere invariant aanslaat../mvnw clean test -pl demo/demo-console -am: 262 tests, 0 failures../mvnw detekt:check: 0 bevindingen.Herkomst
Deze PR stond eerst gestapeld op #280, dat
Persona.idenDoelpersonaintroduceerde. Nu #280 gemerged is, staat hij rechtstreeks opmain.Meegenomen: één regel in de header van
demo-personas/…/microprofile-config.properties. Die zei dat Grootbedrijf en Concern een opt-in bij de twee echte magazijnen hebben, "dus" die twee leeg blijven. Dat volgt niet — juist een opt-in maakt aanlevering mogelijk; ze blijven leeg omdat het paneel er niets voor aanlevert.Plan:
docs/plans/2026-09-04-demo-persona-ontdubbelen.mdCloses MinBZK/MijnOverheidZakelijk#1071
🤖 Generated with Claude Code
https://claude.ai/code/session_01SkFnFHif3ffbctaxoyEdwn