ci(quality): move hydra-gates-ref v1.0.1 -> v1.3.0, which is what is failing CI - #124
Merged
Conversation
…dead gates
v1.0.1 is `f4d9756` (2026-08-03). Three gate fixes merged after it, so
every Hydra Gates run this repo has ever made executed a script in which
16 gates reported PASS when their helper never ran (.github#147),
gate-33 had no axe report to read and never said so (#148), and gates 6
and 7 reported PASS on an empty scope (#149).
The tick was identical either way, which is why nothing here shows it.
Measured before opening this PR — full tree, private mount namespace and
tmpfs so the runner's hardcoded /tmp/hydra-gate-*.log paths cannot be
contaminated by another run on the same host (.github#158 item 6):
v1.0.1 4 gates fail: 38 skip-link, 40 form-label-association,
43 table-headers, 45 prefers-reduced-motion
v1.2.0 the SAME 4 fail; no new failure, and no failure disappears
What does change is the accounting: 61 declared gates become 63, and
gates 24 and 33 now print SKIPPED with a named reason instead of being
absent from the summary.
Refs ConductionNL/.github#159
Contributor
Quality Report — ConductionNL/app-versions @
|
| Check | PHP | Vue | Security | License | Tests |
|---|---|---|---|---|---|
| lint | ✅ | ||||
| phpcs | ✅ | ||||
| phpmd | ✅ | ||||
| psalm | ✅ | ||||
| phpstan | ✅ | ||||
| phpmetrics | ✅ | ||||
| eslint | ❌ | ||||
| stylelint | ❌ | ||||
| build | ❌ | ||||
| composer | ✅ | ✅ 17/17 | |||
| npm | ❌ | ❌ | |||
| PHPUnit | ⏭️ | ||||
| Newman | ⏭️ | ||||
| Playwright | ⏭️ | ||||
| Hydra gates | ❌ |
Quality workflow — 2026-08-05 13:58 UTC
Download the full PDF report from the workflow artifacts.
…he shared quality.yml The first commit here was measured against quality.yml as it stood this morning. It has since changed underneath the pin, and that is the second half of the same defect. ConductionNL/.github#164 (merged 13:52Z) flipped `hydra-gates-require-full-coverage` to default TRUE in the SHARED quality.yml — which every repo references at `@main`. The accounting that makes that flag survivable, NOT APPLICABLE as distinct from a structural or a wiring gap, ships in the PINNED package. So a repo on any pin older than that change fails the coverage assertion for gates it has no subject matter for. Not a prediction. Run 31012647428 on this branch, at v1.2.0, 26 jobs, Hydra Gates FAILED: RESULT: ALL GATES PASSED — EXCEPT GATES 4 5 6 7 14 15 22 24 25 33 53, WHICH DID NOT RUN. --require-full-coverage was set: treating incomplete coverage as failure. Re-measured on this branch, diff-scoped against origin/development exactly as CI scopes it, each run in its own mount namespace with a private tmpfs: v1.0.1 exit 98 FAIL v1.2.0 exit 98 FAIL <- confirmed by the real CI run above v1.3.0 exit 0 PASS 52 applicable gates ran and passed; 11 named NOT APPLICABLE v1.3.0 is `f7eaf2a` = .github@main, tagged so the ref is reproducible. Refs ConductionNL/.github#159
Contributor
Quality Report — ConductionNL/app-versions @
|
| Check | PHP | Vue | Security | License | Tests |
|---|---|---|---|---|---|
| lint | ✅ | ||||
| phpcs | ✅ | ||||
| phpmd | ✅ | ||||
| psalm | ✅ | ||||
| phpstan | ✅ | ||||
| phpmetrics | ✅ | ||||
| eslint | ❌ | ||||
| stylelint | ❌ | ||||
| build | ❌ | ||||
| composer | ✅ | ✅ 17/17 | |||
| npm | ❌ | ❌ | |||
| PHPUnit | ⏭️ | ||||
| Newman | ⏭️ | ||||
| Playwright | ⏭️ | ||||
| Hydra gates | ✅ |
Quality workflow — 2026-08-05 14:08 UTC
Download the full PDF report from the workflow artifacts.
rubenvdlinde
added a commit
that referenced
this pull request
Aug 5, 2026
…is PR
The earlier commit here quoted the `stylelint` globs. That was a real finding
— unquoted, the shell (no globstar) expands `src/**/*.vue` to `src/*/*.vue`,
which matches src/components/ but NOT src/App.vue, so the largest component in
the app has never been linted. But fixing it forces edits to App.vue (two
`no-descending-specificity` errors it was hiding), and App.vue in the diff
pulls in three DIFF-SCOPED Hydra a11y gates that pass vacuously on any PR that
does not touch it:
[gate-38] skip-link FAIL — 1 root component
[gate-40] form-label-association FAIL — 5 inputs
[gate-45] prefers-reduced-motion FAIL — 1 <style> block
Two of those want judgement this PR should not be making:
* gate-40 is a FALSE POSITIVE on 4 of its 5 findings. Those inputs are each
wrapped in a `<label>` carrying visible text — implicit association, valid
HTML and valid WCAG; the gate's regex just cannot see a wrapping label
across a multi-line `<input>`. "Fixing" them with `aria-label` would
OVERRIDE the visible label and regress SC 2.5.3 (Label in Name). Only the
version filter input (placeholder, no label) is a genuine defect.
* gate-38 wants a skip link on App.vue, which renders inside Nextcloud's
admin settings page — a surface that already carries core's own skip link.
So this stays out of a CI-unblocking PR, and none of it is waived: no skip, no
exclude, no `continue-on-error`. The stylelint scope returns to exactly what it
was, the gates keep full strength, and the debt is recorded as a follow-up
issue. #124 measured the same four gates (38/40/43/45) as inherited whole-tree
debt at both v1.0.1 and v1.3.0, which is the same conclusion.
The `word-break: break-word` fixes in the two components stylelint DOES cover
stay — those are what the running lint actually reported.
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.
One line:
hydra-gates-ref: v1.0.1->v1.3.0.This repo's CI is red right now, and it is not this repo's fault
At 2026-08-05T13:52Z,
ConductionNL/.githubcommitf7eaf2a(#164) flippedhydra-gates-require-full-coverageto defaulttruein the sharedquality.yml. Every repo references that workflow at@main, so the flip went live everywhere at once. But the flag requires a gate to declare itself not-applicable — and that vocabulary ships in the pinned package:_skipcallsv1.0.1(this repo's pin)v1.3.0A pin with no
_skipcalls cannot say "not applicable". So every gate without subject matter here — 4 (composer-audit, correctly diff-scoped out per ADR-020), 24 (integration-parity), 33 (axe-core, whose producerenable-axeis deliberately off) — becameDID NOT RUNand failed the job.The red is fleet-wide, dated, and caused by a shared-workflow flag meeting a pinned script that predates the vocabulary it needs. It is not a code defect and not anything a PR author did. The control that settles it: decidesk#407 is PHPMD-only with zero npm changes and shows the identical failure, and it passed on pre-13:52Z base runs — the base is a different vintage of the shared workflow, not of the code.
The pin was also four fixes stale
v1.0.1isf4d9756(2026-08-03). Every Hydra Gates run this repo has ever made executed a script in which:v1.0.1?A gate that reports PASS without running emits a tick identical to a real one, which is why nothing in this repo's history shows the difference. Tracked in .github#159.
Measured before opening this PR
Diff-scoped against
origin/development, exactly as CI scopes it. Each run in its own mount namespace with a private tmpfs — the runner writes ~50 detail logs to hardcoded/tmp/hydra-gate-<name>.logpaths and reads its verdicts back out of them, so two concurrent runs on one host silently corrupt each other's counts (.github#158 item 6). Another agent was running the gates unisolated on the same host during this work, so that is not hypothetical.Verified not merely that the job is green but that gates 4, 24 and 33 each name themselves not-applicable and say why. A green that came from somewhere else would not be the fix landing.
Independently confirmed end-to-end by doriath#160, which changed this same single line and nothing else: Hydra Gates went failure -> success.
v1.3.0isf7eaf2a=.github@mainat the time it was cut.Refs ConductionNL/.github#159