The JaCoCo parsing logic was duplicated across 3 workflow files
(pull_request.yml, master.yml, pr-report.yml). Extract it into
.github/scripts/parse-jacoco.js.
Also fixes a regex bug where self-closing <class .../> tags (interfaces,
annotations — 141 of them) would match and steal the next class's
coverage counters. This caused phantom coverage entries, e.g.
QueryDirectives$Builder showing QueryDirectivesImpl's coverage. The fix
uses a negative lookbehind (?<!\/) to skip self-closing tags.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Summary
Test plan
🤖 Generated with Claude Code