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.