Skip to content

docs(hydra): link the CI/CD standard from the Hydra pages - #382

Merged
rubenvdlinde merged 1 commit into
mainfrom
docs/hydra-cicd-crossref
Aug 12, 2026
Merged

docs(hydra): link the CI/CD standard from the Hydra pages#382
rubenvdlinde merged 1 commit into
mainfrom
docs/hydra-cicd-crossref

Conversation

@rubenvdlinde

Copy link
Copy Markdown
Contributor

The Hydra docs described the machinery — states, labels, gates — but never said which standard a gate measures against. docs/WayOfWork/ci-cd.md had no inbound link from anywhere in docs/hydra/.

Adds a The standard Hydra enforces section to the Hydra one-pager: the rule (pass Nextcloud's checks unchanged; stricter allowed, different not), the tool split (php-cs-fixer owns formatting, PHPCS owns semantics), and gate-65, including that it fails an app for pinning the gates, the coding standard or the shared workflow. pipeline-overview.md gets the same cross-link.

The Hydra pages described the machinery — states, labels, gates — but never said
which STANDARD a gate is measuring against, so 'will this merge?' was only half
answered here and the other half lived in a page nothing linked to.

Adds a short section to the Hydra one-pager stating the rule (pass Nextcloud's
checks unchanged; stricter is allowed, different is not), the tool split, and
gate-65 — including that it fails an app for pinning the gates, the coding
standard or the shared workflow rather than tracking the tip. Cross-links
pipeline-overview.md the same way.
@rubenvdlinde
rubenvdlinde merged commit 11cbb70 into main Aug 12, 2026
20 of 21 checks passed
rubenvdlinde added a commit that referenced this pull request Aug 12, 2026
`Package invariants` — a REQUIRED check — has been red on main since 09:38
today, so the six queued gate PRs cannot merge. Both failures trace to gate-65
(coding-standard-adoption), added in #382.

gate-65 is deliberately not diff-scoped: it judges the repo's standing
configuration. Its only NOT-APPLICABLE path is "no composer.json and no
phpcs.xml", and every synthetic fixture in the corpus HAS a composer.json,
because the gate under test needs one. So it fires inside other suites'
fixtures and fails runs those suites require to be green. A whole-repo gate is
a global mutation of every other gate's test environment.

test_gate_license_triangle_scope.sh — the fixture now adopts the standard the
same way the compliant scaffold in test_check_coding_standard_adoption.sh does
(require-dev, cs:check/cs:fix, .php-cs-fixer.dist.php, and an .editorconfig
with indent_style = tab). Arm 6 needed the same treatment separately: it
rewrites composer.json down to a bare name to drop the licence field, which
also un-adopts the standard — that arm is the CONTROL that makes assertion 5
mean anything, so it silently proving nothing was the worse of the two
failures.

test_gate_acceptance_matrix.sh — gate-65 gets its COVERED-ELSEWHERE.md row.
It is not uncovered: test_check_coding_standard_adoption.sh plants 15
single-defect probes, one per rule, plus a negative control and a wiring
assertion. That is what the ELSEWHERE list is for.

Verified: license-triangle 11 PASS / 0 FAIL, acceptance matrix green (13 gates
counted as covered elsewhere, was 12), and the full helper suite on this branch
is 76 passed / 2 quarantined / 0 failed.
rubenvdlinde added a commit that referenced this pull request Aug 12, 2026
…ate fires inside every fixture (#384)

* fix(shellcheck): SC2294 — the probe helper never had an array to lose

ShellCheck has been red on main since 2026-08-03 on a single finding, and
because the required check runs against the PR MERGE ref it fails every open
PR — including six queued gate fixes that never touched this file.

All 15 probe callers pass their planted defect as ONE quoted shell string
('rm .php-cs-fixer.dist.php', "sed -i 's|...|...|' composer.json"), so the
string form is what the helper always meant; eval "$@" only looked
array-shaped.

Verified both arms of the suite: 23 passed / 0 failed before and after. That
is a real control, not a tautology — had eval stopped executing, the defect
would go unplanted and each probe would report 'did not detect'.

* fix(gate-65): a whole-repo gate fires inside every other suite's fixture

`Package invariants` — a REQUIRED check — has been red on main since 09:38
today, so the six queued gate PRs cannot merge. Both failures trace to gate-65
(coding-standard-adoption), added in #382.

gate-65 is deliberately not diff-scoped: it judges the repo's standing
configuration. Its only NOT-APPLICABLE path is "no composer.json and no
phpcs.xml", and every synthetic fixture in the corpus HAS a composer.json,
because the gate under test needs one. So it fires inside other suites'
fixtures and fails runs those suites require to be green. A whole-repo gate is
a global mutation of every other gate's test environment.

test_gate_license_triangle_scope.sh — the fixture now adopts the standard the
same way the compliant scaffold in test_check_coding_standard_adoption.sh does
(require-dev, cs:check/cs:fix, .php-cs-fixer.dist.php, and an .editorconfig
with indent_style = tab). Arm 6 needed the same treatment separately: it
rewrites composer.json down to a bare name to drop the licence field, which
also un-adopts the standard — that arm is the CONTROL that makes assertion 5
mean anything, so it silently proving nothing was the worse of the two
failures.

test_gate_acceptance_matrix.sh — gate-65 gets its COVERED-ELSEWHERE.md row.
It is not uncovered: test_check_coding_standard_adoption.sh plants 15
single-defect probes, one per rule, plus a negative control and a wiring
assertion. That is what the ELSEWHERE list is for.

Verified: license-triangle 11 PASS / 0 FAIL, acceptance matrix green (13 gates
counted as covered elsewhere, was 12), and the full helper suite on this branch
is 76 passed / 2 quarantined / 0 failed.

* fix(shellcheck): SC2016 — the fixture's PHP body belongs in a quoted heredoc

My own previous commit reintroduced a ShellCheck finding while fixing one. The
.php-cs-fixer.dist.php body is PHP and contains $config; written as printf
with single quotes, ShellCheck reads it as a shell expansion that will not
expand. A <<'PHP' heredoc says verbatim to the shell and to the reader at once,
and matches how the sibling scaffold already writes the same file.

Re-verified: license-triangle 11 PASS / 0 FAIL.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant