Coverage of changed lines, not of the codebase

Total coverage moves so slowly that it says nothing about the change in front of you, and the question a reviewer has is whether the new code is tested.

$ vendor/bin/phpunit --coverage-clover=coverage.xml
$ git diff origin/main --unified=0 > changes.diff
$ php coverage-checker.php coverage.xml changes.diff 90

src/Billing/Vat.php      12 of 14 changed lines covered
src/Http/Controller.php   0 of  9 changed lines covered   ← fails

It changes the conversation in review from a percentage nobody can act on to a list of lines. The threshold needs an escape hatch, because a controller genuinely covered by a feature test rather than a unit test shows as uncovered under some configurations, and fighting that produces worse tests. Coverage still measures execution rather than verification, which is what mutation testing is for.