Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
51 changes: 31 additions & 20 deletions .github/workflows/code-quality.yml
Original file line number Diff line number Diff line change
Expand Up @@ -199,28 +199,39 @@ jobs:
frontend-checks: '["check:manifest", "check:vue3-compile", "test:l10n"]'

# ── Hydra mechanical gates ───────────────────────────────────────────
# `enable-hydra-gates` defaults to FALSE, so this tier has never executed
# `enable-hydra-gates` defaults to FALSE, so this tier had never executed
# here — the job reported `skipped`, which the Quality Report renders
# identically to a pass. Pinned to v1.3.0 so a change to the gate package
# cannot move this repo's verdict without a commit here.
# `enable-axe` deliberately NOT set: a vanilla Nextcloud 34 already carries
# serious/critical violations from core's own UI.
# identically to a pass.
enable-hydra-gates: true
# PIN MOVED v1.0.1 -> v1.3.0. `hydra-gates-require-full-coverage`
# (default ON) fails a run when a gate whose subject matter EXISTS did
# not report; its contract is that a not-applicable gate must DECLARE
# itself. v1.0.1 contains ZERO `_skip` calls — no na/structural/wiring
# vocabulary at all — so such a gate emits NOTHING and is counted as
# "DID NOT RUN". v1.3.0 ships 36 such declarations. Measured on doriath
# (PR #160): gates 4/24/33 went from unexplained "DID NOT RUN" to
# explicit NOT APPLICABLE, and Hydra Gates went failure -> success.
hydra-gates-ref: v1.5.0
# PIN MOVED v1.3.0 -> v1.4.0 (fleet consumer-ref sweep, 2026-08-05).
# A pinned ref is a silent expiry date on every upstream fix: this repo
# cannot receive a gate-package fix until this line moves. v1.4.0 is the
# latest tag and the FIRST one carrying `hydra-gates/scripts/axe-run.cjs`
# (verified absent at v1.3.0), so it is also the first that has #168's
# axe DOM scoping and #165's gate-46 fix.
# No `hydra-gates-ref` here on purpose. The shared workflow defaults it
# to @main, and this workflow is itself consumed at @main, so the two
# sides move together and a gate fix reaches this repo without a commit
# in this repo. A pin is a silent expiry date: 22 repos sat on v1.0.1 and
# 16 gates were dead fleet-wide while every one reported PASS (.github#159),
# and a default flipped at @main later reached those old runners and made
# them red on gates they had no subject matter for (.github#173).
# To hold this repo still for a specific reason, set the input explicitly
# and say why — it is still honoured. To roll back for everyone, revert on
# ConductionNL/.github main.
#
# THIRD CAUSE, and the one that is failing this repo RIGHT NOW
# (.github#177): quality.yml@main began executing three gate helpers BY
# NAME — check_spec_anchors.py, check_form_labels.py and
# check_license_triangle.py — which exist in NO tag before v1.5.0.
# Verified by DIRECTORY LISTING of each tag, not by per-file lookups:
# those answered "present" uniformly across v1.0.0..v1.5.0, and the
# uniformity across independent inputs was the tell that the instrument
# was wrong. So the Hydra Gates job here fails at "Verify the pinned gates
# package satisfies this workflow", before a single gate runs, with the
# workflow's own words: "This is NOT a code-quality finding about your
# repository." Removing the pin is the repair.
#
# Unpinning also picks up v1.5.1's push scoping (.github#179): on a push to
# `development`, `origin/development` IS `HEAD`, so the diff was empty by
# construction — <= v1.4.0 passed over it (permanently green) and v1.5.0
# refused with exit 99 (permanently red). The scope is now
# `github.event.before...HEAD`, what the push actually changed.
#
# `enable-axe` is deliberately still NOT set — a vanilla Nextcloud 34
# reports serious/critical violations on core's OWN routes that DOM
# scoping does not remove. Enabling axe is a separate decision.
Loading