refactor(softwarecatalog): translate 12 pre-existing Dutch property names - #513
Merged
Conversation
…ames
Tranche 2. Measured at 28 Dutch property names against real wordlists; 12 move
here and 13 are held back with a reason each, which is the more useful half of
this commit.
HELD BACK, and why — these need a decision, not a rename:
organisatie, contactpersoon, dienst, gebruik, moduleVersie, bioMaatregel
Each is ALSO a schema slug. A quoted 'organisatie' in PHP is a schema
reference in one place and a property key in another, and there are 107 of
them; nothing in the token tells the two apart. The property rename needs
the SCHEMA rename decided with it.
domein
One of the FOUR facet dimensions the endpoint declares as its query
parameters and response keys. Renaming one of four is exactly what broke
filtering in tranche 1 — they move together, as their own change.
bron
The `Relation` schema declares BOTH `bron` and `source`, two properties for
one concept. A rename would silently merge two columns. The duplication is
the defect and needs deciding.
omschrijving
The COLUMN_MAP is FLAT and already maps `omschrijving` -> `description`.
The remaining occurrence sits in a schema that already declares
`description`, so it would need `summary` — and one source cannot have two
targets in a flat map.
alg, bomRef, tooi, *Url
JOSE header, CycloneDX field, TOOI register, and `url`. Not Dutch.
THREE DEFECTS IN MY OWN TOOLING, all found by tests rather than by review:
1. The unquoted-object-key pattern NEVER FIRED. Its `(?!:)` guard — meant to
skip PHP `::` — sat immediately after the name, where the next character is
the very colon being matched, so it could never pass. Every `beschrijvingKort:`
payload key was left behind while its VALUE was renamed, so the wizard POSTed
a key the schema no longer declares. Moved inside the lookahead.
2. Running the applier twice REWROTE THE MIGRATION MAP'S OWN LEFT-HAND SIDE.
The map is a .php file under lib/, so `'afkorting' => 'abbreviation'` became
`'abbreviation' => 'abbreviation'` — a no-op that also destroys the only
record of the column's old name. It took a pre-existing entry with it. The
map and its test are excluded from the rename now.
3. A DESTRUCTURED PARAMETER is shorthand and has no colon either, so
`buildOrganisationCoverage({ gebruiken })` kept its parameter while one call
site moved to `usages:` — the function then read an undefined key and
returned an empty coverage array.
The app's own test suite caught two of these, including a positive control
asserting the register still declares Dutch columns. That control's threshold
(`> 20`) was a snapshot of how much Dutch remained, not a property of the guard;
it is `> 0` now, which is what it was actually for, with a note that the day it
fails is the day the test has nothing left to guard.
VERIFIED against a control run of the same tree: PHPUnit 684 tests, 1 error on
BOTH (a pre-existing missing Symfony class), 0 failures; phpstan [OK]; psalm "No
errors found!"; jest 120/120; vitest 226/226; eslint 0; prettier clean; build OK;
0 broken routes; 0 surviving uses in src/. 10 migration entries appended, map
verified free of duplicate and identity entries.
Contributor
Quality Report — ConductionNL/softwarecatalog @
|
| Check | PHP | Vue | Security | License | Tests |
|---|---|---|---|---|---|
| lint | ✅ | ||||
| phpcs | ✅ | ||||
| phpmd | ✅ | ||||
| psalm | ✅ | ||||
| phpstan | ✅ | ||||
| phpmetrics | ✅ | ||||
| eslint | ✅ | ||||
| stylelint | ✅ | ||||
| build | ✅ | ||||
| check-manifest | ✅ | ||||
| check-vue-demi | ✅ | ||||
| test-l10n | ✅ | ||||
| format | ✅ | ||||
| composer | ✅ | ✅ 130/130 | |||
| npm | ✅ | ✅ 704/704 | |||
| app:check-code | ⏭️ | ||||
| info.xml | ✅ | ||||
| REUSE | ❌ | ||||
| PHPUnit | ✅ | ||||
| Newman | ⏭️ | ||||
| Playwright | ❌ | ||||
| Hydra gates | ❌ |
Quality workflow — 2026-08-14 18:06 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.
Tranche 2 of the Dutch→English vocabulary programme.
Measured at 28 Dutch property names against real wordlists (274,937 English,
164,174 Dutch; a token is Dutch when the Dutch list has it and the English list
does not). 12 move here. 13 are held back, and that half is the more useful
one — each needs a decision rather than a rename:
organisatie,contactpersoon,dienst,gebruik,moduleVersie,bioMaatregel'organisatie'in PHP is a schema reference in one place and a property key in another — 107 of them — and nothing in the token tells them apart. Needs the schema rename decided with it.domeinbronRelationschema declares bothbronandsourcefor one concept. A rename would silently merge two columns. The duplication is the defect.omschrijvingomschrijving→description. The remaining occurrence is in a schema that already declaresdescription, so it would needsummary— one source cannot have two targets.alg,bomRef,tooi,*Urlurl. Not Dutch.Three defects in my own tooling, found by tests rather than review
(?!:)guard — meant toskip PHP
::— sat immediately after the name, where the next character isthe colon being matched, so it could never pass. Every
beschrijvingKort:payload key was left behind while its value was renamed, so the suite wizard
POSTed a key the schema no longer declares.
The map is a
.phpfile underlib/, so'afkorting' => 'abbreviation'became
'abbreviation' => 'abbreviation'— a no-op that also destroys theonly record of the column's old name, and it took a pre-existing entry with
it. The map and its test are excluded from the rename now.
buildOrganisationCoverage({ gebruiken })kept its parameter while one callsite moved to
usages:; the function read an undefined key and returned anempty coverage array.
This app's own suite caught two of them, including a positive control asserting
the register still declares Dutch columns. That control's threshold (
> 20) wasa snapshot of how much Dutch remained, not a property of the guard — it is
> 0now, which is what it was for, with a note that the day it fails is the day the
test has nothing left to guard.
Verified against a control run of the same tree
[OK][OK]src/The 1 PHPUnit error is pre-existing on both sides — a missing
Symfony\Component\HttpFoundation\HeaderUtilsin the standalone bootstrap.10 migration entries appended; the map is verified free of duplicate and identity
entries.