Skip to content

chore(ci): refresh coverage-guard.php to the canonical deletion-neutral copy - #292

Merged
rubenvdlinde merged 1 commit into
developmentfrom
chore/coverage-guard-deletion-neutral
Aug 21, 2026
Merged

chore(ci): refresh coverage-guard.php to the canonical deletion-neutral copy#292
rubenvdlinde merged 1 commit into
developmentfrom
chore/coverage-guard-deletion-neutral

Conversation

@rubenvdlinde

Copy link
Copy Markdown
Contributor

Refreshes scripts/coverage-guard.php from the canonical copy at ConductionNL/.github@mainquality-config/coverage-guard.php. Verbatim copy, no local edits — the shared workflow expects the app copies to be byte-identical to it.

Why now

decidesk's PHPStan-2 PR failed the Guard coverage baseline step, and the guard printed its own diagnosis:

scripts/coverage-guard.php predates --deletion-neutral, so deleting well-tested
dead code will still read as a coverage drop. Copy the canonical version from
ConductionNL/.github at quality-config/coverage-guard.php to pick it up.

The numbers behind that failure:

Changed files, base:    76.68%  (1782/2324 statements)
Changed files, head:    76.49%  (1763/2305 statements)
FAIL: coverage of the files this change touches dropped by 0.19%.

Nineteen statements were deleted and all nineteen were covered. Nothing became less tested — the denominator shrank and took the numerator with it. Read as a percentage that is a regression; read as counts it plainly is not.

That is not a decidesk quirk. Any change that deletes dead code which tests happened to walk through will trip the old guard, and the PHPStan-2 migration deletes exactly that kind of code across the fleet.

Scope of the staleness

I checked all nine PHP apps. Every one ships the same 433-line copy, byte-identical to each other and with zero deletion-neutral hits:

portaliq · larpingapp · openbuild · hermiq · pipelinq · decidesk · doriath · scholiq · shillinq

Since the app copies carry no local customisation, refreshing wholesale is safe — there is nothing app-specific to preserve.

Verification

$ php scripts/coverage-guard.php --capabilities
against
update-baseline
capabilities
changed-files
deletion-neutral      <- new

php -l clean.

What this deliberately does not do

It does not disable the ratchet, baseline it, or relax the threshold. The guard is doing its job on real coverage losses; only its arithmetic for deletions was out of date. A genuine drop still fails after this change.

…al copy

Verbatim copy of ConductionNL/.github@main quality-config/coverage-guard.php.

The shipped 433-line copy predates --deletion-neutral, so deleting
well-tested dead code reads as a coverage drop: on decidesk the same class
of change gave 1782/2324 -> 1763/2305 statements, i.e. 19 deleted and all 19
covered, and the guard failed it as -0.19%. Nothing was less tested.

All nine PHP apps ship this identical stale copy with no local edits, so the
refresh is wholesale rather than patched. The ratchet is NOT disabled or
baselined — a real coverage loss still fails.
@github-actions

Copy link
Copy Markdown
Contributor

Quality Report — ConductionNL/openbuild @ e7f891c

Check PHP Vue Security License Tests
lint
phpcs
phpmd
psalm
phpstan
phpmetrics
eslint
stylelint
build
check-manifest
test-l10n
check-gitignore
check-nc-floor
format
composer ✅ 106/106
npm ✅ 626/626
app:check-code ⏭️
info.xml
REUSE
PHPUnit
Newman
Playwright
Hydra gates

Quality workflow — 2026-08-20 23:59 UTC

Download the full PDF report from the workflow artifacts.

@rubenvdlinde
rubenvdlinde merged commit 67844f8 into development Aug 21, 2026
78 of 80 checks passed
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