fix(demo): demo data for the nine bare schemas that reads like a caseload - #1780
Merged
rubenvdlinde merged 1 commit intoSep 3, 2026
Merged
Conversation
…load b321005 closed gate-101 by taking the generator's output for the nine schemas that had none. That made the gate green, and it is worth saying plainly what it put in front of a reader who installs the demo dataset: municipalityCode "Voorbeeld Munici" (truncated at maxLength 16) endpointUrl https://example.invalid/resource/0 caseRef "Voorbeeld Caseref 1" A gemeente code that reads "Voorbeeld Munici" is not a demo of a StUF connection. The generator derives a value from the schema, which is the right way to prove an object VALIDATES and no way at all to show what the feature is for. So these 27 objects are hand written, and every one of them points at something that ships. A toezichtzaak-bouw at Zonnehof 12 in Amersfoort runs through the three inspection checklists vth_seed_data.json actually ships. The fundering round synced. The ruwbouw round collided with a colleague's answer, so it has a queued mutation in conflict and an unresolved conflictRecord pointing at it. A second case on the Amsterdamseweg is still in progress with an upload waiting to go out. Amersfoort runs Key2Zaken and Mozard side by side during a migration, which is the transition scenario the endpoint schema names, with a retired Decos JOIN endpoint on actief=false. The message log holds a creeerZaak Lk01, the Bv01 that confirmed it, and an actualiseerZaak Lk02 that came back Fo02 and is waiting on a retry. The checklist template slugs are the ones VthSeedDataRepairStep imports, the case type slugs are the ones vth_seed_data.json declares, and the objects inside each cluster reference each other by @self.slug. AND ONE OF THE NINE WAS NEVER BARE. samenwerkverzoek already had three good demo objects, in register.d/dso-omgevingsloket.json, which the app imports on install. gate-101 could not see them because it only counts objects in a descriptor marked x-openregister.type mock. Measured on a throwaway instance against development: importing the demo dataset produced SIX samenwerkverzoeken, the fragment's three plus three "Voorbeeld Initiatorcompetentauthority". The demo dataset now carries the fragment's three verbatim, slugs included, so the import updates the rows it already wrote instead of doubling them. Two conflictRecords name a syncQueue slug this file does not carry. That is the shape of the thing: the spec dismisses successful queue entries after seven days, and both of those conflicts are resolved and older than the ones still queued. A conflict log outlives its queue. samenwerkverzoek.caseId stays unset. It is a uuid $ref to a case, and a static demo file cannot know the uuid a case gets at import, so the generator's 00000000-0000-4000-8000-000000000000 names nothing. No schema definitions moved, so no l10n keys move: check:schema-l10n holds at its 2825 baseline. Proof, on a throwaway instance (dossiq 0.3.12-unstable.20260903174414, openregister 2.0.15-unstable.20260903172438) rather than on the file: the nine magic tables were emptied, the demo dataset was imported over the setup action the walkthrough calls, and every one of the nine came back with exactly three rows carrying these values. Importing a second time left it at three.
rubenvdlinde
requested review from
WilcoLouwerse,
bbrands02 and
rjzondervan
as code owners
September 3, 2026 18:28
rubenvdlinde
added a commit
that referenced
this pull request
Sep 3, 2026
…1782) #1779 landed a minute before #1780 and removed zaaksysteemMapping's `openstaandeWijzigingen`. Its check was thorough and correct at the moment it ran: the name appeared in no reader, no writer, no seed object. #1780 then added the only seed object that carried it. An undeclared key is not rejected. OpenRegister gives a declared property a column and an undeclared one nothing at all, so the save answers 200 and stores nothing. A demo row promising a pending-changes list that comes back empty is worse than a mapping that never claimed one, so the claim goes and `synchronisationStatus: wacht` carries the story on its own. Sweeping the rest of the file for the same shape found nine more, all predating both PRs: `catalog` on the generated caseType, decisionType and documentType objects, three each, every value a zero uuid. No dossiq schema declares `catalog`. Same defect, same file, so they go too rather than waiting for the next person to trip over them. Nothing else changes: gate-101 still passes full-tree at 152 schemas.
Contributor
Quality Report — ConductionNL/dossiq @
|
| Check | PHP | Vue | Security | License | Tests |
|---|---|---|---|---|---|
| lint | ✅ | ||||
| phpcs | ✅ | ||||
| phpmd | ✅ | ||||
| psalm | ✅ | ||||
| phpstan | ✅ | ||||
| phpmetrics | ✅ | ||||
| eslint | ✅ | ||||
| stylelint | ✅ | ||||
| build | ✅ | ||||
| check-manifest | ✅ | ||||
| check-vue3-compile | ✅ | ||||
| test-l10n | ✅ | ||||
| format | ✅ | ||||
| check-schema-l10n | ✅ | ||||
| check-l10n-js | ✅ | ||||
| composer | ✅ | ✅ 106/106 | |||
| npm | ✅ | ✅ 540/540 | |||
| app:check-code | ⏭️ | ||||
| info.xml | ✅ | ||||
| REUSE | ❌ | ||||
| PHPUnit | ✅ | ||||
| Newman | ⏭️ | ||||
| Playwright | ⏭️ deferred — runs on the promotion into beta/main, not on a pull request into development | ||||
| Hydra gates | ✅ |
Quality workflow — 2026-09-03 18:37 UTC
Download the full PDF report from the workflow artifacts.
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.
What this changes
b321005closed gate-101 by taking the generator's output for the nine schemas that had no demo data. The gate is green, and this is what it put in front of somebody who installs the demo dataset:stufEndpoint.municipalityCodeVoorbeeld Munici(truncated atmaxLength: 16)stufEndpoint.endpointUrlhttps://example.invalid/resource/0fieldInspection.caseRefVoorbeeld Caseref 1samenwerkverzoek.caseId00000000-0000-4000-8000-000000000000A gemeente code reading
Voorbeeld Municiis not a demo of a StUF connection. The generator derives every value from the schema, which is exactly right for proving an object validates and no help at all in showing what a feature is for. These 27 objects are written by hand instead, and every reference in them points at something the app actually ships.The nine, and the verdict on each
All nine are real. Each is named by a shipped spec and read by shipped code, so none is a schema to delete rather than populate. gate-101 has no waiver channel, so there was no honest exclusion to record either.
fieldInspectionchecklistResultfieldEvidencesyncQueueconflictRecordstufEndpointstufMessageLk01, itsBv01, and anLk02that came backFo02.zaaksysteemMappingsamenwerkverzoekThe story the data tells
A
toezichtzaak-bouwat Zonnehof 12 in Amersfoort runs through the three inspection checklistsvth_seed_data.jsonactually ships. The fundering round synced. The ruwbouw round collided with a colleague's answer, so it carries a queued mutation in conflict and an unresolvedconflictRecordpointing at it. A second case on the Amsterdamseweg is still in progress with an upload waiting to go out.Amersfoort runs Key2Zaken and Mozard side by side during a migration, with a retired Decos JOIN endpoint on
actief: false. The message log holds acreeerZaakLk01, theBv01that confirmed it, and anactualiseerZaakLk02that came backFo02and is waiting on a retry.The checklist template slugs are the ones
VthSeedDataRepairStepimports. The case type slugs are the onesvth_seed_data.jsondeclares. Objects inside each cluster reference each other by@self.slug.One of the nine was never bare, and the fix doubled it
samenwerkverzoekalready had three good demo objects, inregister.d/dso-omgevingsloket.json, which the app imports on install. gate-101 could not see them because it only counts objects in a descriptor markedx-openregister.type: mock.Measured on a throwaway instance against
development: importing the demo dataset produced six samenwerkverzoeken, the fragment's three plus threeVoorbeeld Initiatorcompetentauthority.The demo dataset now carries the fragment's three verbatim, slugs included, so the import updates the rows it already wrote instead of doubling them.
Two things a reviewer will ask about
Two
conflictRecordrows name asyncQueueslug this file does not carry. That is the shape of the thing. The spec dismisses successful queue entries after seven days, and both of those conflicts are resolved and older than the ones still queued. A conflict log outlives its queue.samenwerkverzoek.caseIdstays unset. It is a uuid$refto a case, and a static demo file cannot know the uuid a case gets at import, so the generator's zero uuid names nothing.Proof
Not on the file. On a throwaway instance (
dossiq 0.3.12-unstable.20260903174414,openregister 2.0.15-unstable.20260903172438, its own compose project and port) the nine magic tables were emptied, the demo dataset was imported over the same setup action the walkthrough calls, and every one of the nine came back with exactly three rows carrying these values:Importing a second time left it at three, so the dataset is idempotent against itself.
Checks
origin/development: 78 of 78 applicable gates ran, 0 failures. gate-101demo-data-coverage: PASS.generate_mock_register.py . --checkfull tree:checked 152 schema(s), exit 0.npm run check:schema-l10n: 2825 uncovered, baseline 2825. No schema definitions moved, so no l10n key moves.npm run test:unit: 359 passed.composer test:unit: 3006 tests, 1 failure,StubApiDriftTest::FlowResumeState::storableWhen(). Pre-existing and reproduces ondevelopment; this change touches one JSON file and no PHP.Only
components.objectschanged.components.schemas,components.registers,x-openregisterandpathsare byte-identical todevelopment, and every object outside the nine schemas is untouched.🤖 Generated with Claude Code