Repository navigation
feat(hydra-gates): spec-screens gate - #836
Open
rubenvdlinde wants to merge 3 commits into
Open
rubenvdlinde wants to merge 3 commits into
rubenvdlinde wants to merge 3 commits into
Conversation
Every openspec change and spec directory a PR touches must carry a screens.md that names boards on design-system main, or a real no-screen reason. A leftover 'No board found yet' line fails. Blocking from day one (decision 151); NOT APPLICABLE without a delta base; SKIPPED (wiring) when design-system is unreachable. Rule: hydra ADR-116 screens first.
…cision 157) '- Design backlog: <proposed board> (decision 157)' passes; a missing screens.md, an unknown board, a placeholder reason and 'No board found yet' still fail. Board names are validated, not the URL text.
…ds merged before the index rebuild Measured on the generated screens.md of all 20 apps: the school sets key a board as <set>-<Board> in screens.json, and one portaliq board was merged on main before the index was rebuilt. Both read as unknown boards.
This was referenced Oct 10, 2026
This branch has not been deployed
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 yet
Do not merge until every app's
screens.mdPR has landed. This gate blocks from day one (decision 151). Merged early, it fails every PR that touches a change or spec directory whose generatedscreens.mdhas not landed yet.App PRs, for the coordinator to fill in:
Rule it enforces: hydra ADR-116
screens first(ConductionNL/hydra#747).What gate-118
spec-screenschecksFor every
openspec/changes/<c>/,openspec/changes/archive/<c>/andopenspec/specs/<s>/directory the PR touches:screens.mdexists and has at least one-line;- <Board>line names a board on design-systemmain;- No screen: <reason>reason is real: at least ten characters, and not one of design-system's ownPLACEHOLDER_REASONshapes ("not designed yet", "no board", "design session" and the rest, copied verbatim fromscripts/screens/capabilities.py);- No board found yetline is left.- Design backlog: <proposed board> (decision 157)passes: real UI whose board is not drawn yet, naming the board it proposes. Only a backlog line that names nothing fails. Board names are validated, not the URL text after them (https://identity.conduction.nl/screens/board?id=<app>/<Board>).Verdicts follow the package's protocol. No delta base: NOT APPLICABLE. A change touching no openspec directory: NOT APPLICABLE. Design-system unreachable: SKIPPED (wiring), never PASS, unless a finding that needs no network already fails it. A crash without the checker's summary line: SKIPPED (wiring), not a finding. There is no
_BLOCKINGopt-in, because there is no warning period.When the runner audits against the empty tree (a push whose previous tip is unknown), the gate judges every live change and spec and leaves
archive/alone, since an archived change from beforescreens.mdexisted is history.One deliberate difference from the brief
The brief said a board must be present in design-system's
apps/<app>.json. That file is one of several registration sourcesbuild.pymerges, so on its own it misses real boards. Run read-only over the generator's current output for ten apps, theapps/<app>.json-only check reported 185 false findings on dossiq (DqZaak among them), 208 on pipelinq and 83 on opencatalogi, all boards that exist and are published.So the gate asks the published index,
preview/screens/screens.json(what identity.conduction.nl/screens serves), plus the app's ownapps/<app>.jsonfor a board registered but not yet built. Any app's board may be named: shared boards sit under other ids, such as launchpad'swerkplek/LpStart. The app file is found byHYDRA_GATE_SCREENS_APP, the<id>inappinfo/info.xml, the repo name, the origin remote, then the directory name.Two more shapes came from running it over the generated
screens.mdof all 20 apps (thechore/openspec-screensworktrees, read-only,--full-tree): the school sets key a board as<set>-<Board>inscreens.jsonwith id<set>/<Board>, so the id counts as a name too; and a board merged onmainbefore the index was rebuilt (portaliqZaakWooVerzoek) is found by itsscreens-src/zuiddrecht/<Board>.dc.htmlfile.With that, the run over 3,482 change and spec directories reports one finding:
PqBrpMonitorin pipelinqopenspec/specs/brp-lookup/screens.md, which is not on design-systemmain. That needs a board or a different line before pipelinq's next PR touches that spec.Files
hydra-gates/scripts/lib/check_spec_screens.py: the checkerhydra-gates/scripts/run-hydra-gates.sh: the gate-118 block, after gate-116hydra-gates/scripts/lib/test_check_spec_screens.py: 23 rule-by-rule arms, offline, including the backlog marker beside the four failures it does not excusehydra-gates/scripts/lib/test_gate118_spec_screens_scope.sh: 7 arms through the real runner, ARM 7 being the backlog marker, over a real git historyhydra-gates/scripts/test-fixtures/gate-acceptance/COVERED-ELSEWHERE.md: the gate-118 rowGate number 118: 117 is claimed by the open #782.
Verified
test_check_spec_screens.py: 23 passedtest_gate118_spec_screens_scope.sh: all 7 arms passedcheck_gate_numbers_unique.sh: every number claimed oncetests/test-hydra-gates-bin.sh: 70 passed, 0 failedtests/run-helper-suites.sh: 128 passed, 1 quarantined (pre-existing), 0 failed. This ran on the first commit; the gate-118 suites were rerun on the head commit, and the later commits touch only the gate-118 checker, its tests and comments.