Repository navigation
feat(hydra-gates): gate 119 procedure-code ratchet (decision 182) - #838
Merged
Merged
Conversation
This was referenced Oct 10, 2026
Merged
…as a same-named case controller)
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.
DO NOT MERGE before every fleet app has a
.procedure-code-baseline.jsonThe gate reports NOT APPLICABLE (never PASS) for an app without a baseline. Merged early, the fleet would read NOT APPLICABLE for a rule it believes is enforced. The coordinator opens the baseline PRs in the apps once this is approved; the table below is the number each file should carry.
What it is
Gate 119,
procedure-code, for decision 182 (Ruben, 10 Oct 2026): procedures are configuration, code is generic.Per app it counts PHP, JS, TS and Vue files under
lib/andsrc/whose repo-relative path, or a class/interface/trait/enum declared inside, carries a Dutch procedure token. It holds the count to.procedure-code-baseline.json({"count": N}) at the app root, as the custom-widget ratchet (gate 29) does:{"count": N}--baseNot a delta gate: the count is of the whole tree against the committed number, so it also judges full-scope runs. A base only adds the baseline-raised check.
One config file
hydra-gates/scripts/lib/procedure_code_tokens.jsonholds everything configurable: roots, extensions, the 17 tokens, and the allowlist.substringTokens: bezwaar, beschikking, subsid, termijn, besluit, leerplicht, verlof, melding, klacht, jeugd, bijstand, omgevings (matched anywhere in the lowercased path or class name).wordTokens: woo, vth, dso, wmo, leges (whole word only after camelCase/kebab/snake splitting, soWoodServiceandDsonar.vuedo not count,WOOPublicationandwoo-publication.vuedo).allow.words: zgw, ztc, zrc, drc, stuf, brp, kvk, dso-adapter (a hyphenated entry is a word run, soDso/Adapter.phpis excused butDsoMelding.phpis not).allow.pathPrefixes:lib/Adapter,lib/Service/Zgw. This is how an ambiguous token likedsois excused: by where the file lives.lib/Adapters/is notlib/Adapter/.Numbering
Next free number is 119. 117 is in #782 and 118 in #836; no other open PR or remote branch claims 119.
check_gate_numbers_unique.sh: 97 gates, every number claimed once. This branch is cut frommainand does not include #782 or #836, so the runner hunk will need a trivial rebase over whichever lands first (all three append before the "Summary + COVERAGE ACCOUNTING" block).Files
scripts/lib/check_procedure_code.py: the checker.--ref <ref>counts a git ref read-only (ls-tree + git grep);--base,--list,--config.scripts/lib/procedure_code_tokens.json: the config.scripts/run-hydra-gates.sh: the gate 119 block (wiring, census line, a crash is not a finding).scripts/lib/test_check_procedure_code.py: 15 rule-by-rule arms.scripts/lib/test_gate119_procedure_code_scope.sh: 10 runner arms over a real git history.scripts/test-fixtures/gate-acceptance/COVERED-ELSEWHERE.md: row for gate 119.Tests
test_check_procedure_code.py: 15 tests OK (also under-W error).test_gate119_procedure_code_scope.sh: all 10 arms passed (the runner takes about four minutes).check_gate_numbers_unique.sh: pass, 97 gates.run-hydra-gates.sh.tests/test-hydra-gates-bin.sh: 70 passed, 0 failed.tests/run-helper-suites.sh: 125 passed, 1 quarantined, 3 failed. The three aretest_check_connections_declaration.js,test_gate116_connections_declaration_scope.shandtest_gate_45_to_55_acceptance.sh. All refuse to run because Ajv is not installed in this clone (disk is at 97%, so I did notnpm install). They do not touch this change. CI installs Ajv.Baselines
Measured read-only against
origin/developmentof each clone (check_procedure_code.py <clone> --ref origin/development), after agit fetchof development.Token split, so the sizes can be judged: dossiq 36 bezwaar, 29 termijn, 28 beschikking, 27 woo, 16 vth, 13 dso, 13 besluit, 12 subsid. integriq 35 dso. opencatalogi 25 woo. shillinq 6 subsid, 3 wmo, 1 leges.
Notes for the coordinator:
Leave, notVerlof). A zero baseline still enforces: it fails on the first procedure-named file.Dso*files inlib/Controller,lib/Exception,lib/Notificationand so on. If those are the national-standard DSO adapter, they are excused by adding their path prefix toallow.pathPrefixesin the config, not by baselining 35. The two example prefixes (lib/Adapter,lib/Service/Zgw) do not cover them. Decision for Ruben; integriq's baseline would drop accordingly.lib/Service/Zgw/BesluittypeNotInCatalogusException.php.{"count": N}.