Skip to content

ci: add coverage --min=95 gate with pcov driver - #20

Merged
Goosterhof merged 1 commit into
mainfrom
ci-coverage-min-gate
Jul 17, 2026
Merged

ci: add coverage --min=95 gate with pcov driver#20
Goosterhof merged 1 commit into
mainfrom
ci-coverage-min-gate

Conversation

@Goosterhof

Copy link
Copy Markdown
Collaborator

Adds a coverage floor to a published public Composer package that shipped with coverage: none (kendo PHP-package cluster, sister to kendo-report-tool; first-contact recon Mod-1).

  • pcov driver + composer test:coverage = pest --coverage --min=95 in ci.yml. Teeth = the --min CLI flag (not a <coverage> XML block — silent no-op on PHPUnit 10+). composer test kept driverless for external-contributor local runs.
  • Measured 95.5% (floor set at the measured value, not an assumed 100). Drag is Jobs/ReportErrorJob async-carrier path (16.7%) + Scrubber.php:210; ratcheting toward 100 is a future Medic item.

No library source change; the PII-scrub invariant is untouched (separate concern). Armorer execution report: reports/kendo-error-tracker/execution/2026-07-14-armorer-coverage-gate.md.

🤖 Generated with Claude Code

@Goosterhof Goosterhof added the Agent Review Requested Requesting review of specialized AI review agents. label Jul 14, 2026

@Goosterhof Goosterhof left a comment

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Self-review (author = reviewer = Goosterhof) — posting COMMENT per policy; verdict below.

Clean, scoped CI change: coverage: pcov + composer test:coverage (pest --coverage --min=95) on a package whose coverage source is already correctly scoped via <source><include><directory>src</directory> in phpunit.xml.dist (the PHPUnit 10+ shape — teeth is the CLI --min flag, not a silently-no-op <coverage> block). CI ran green on this exact head (check (8.4) / check (8.5) / ci-passed / town-crier/gate all pass), so the 95% floor is CI-proven, not just asserted in the PR body. No library source touched — matches the stated scope.

Two non-blocking observations posted inline (composer.json:45, .github/workflows/ci.yml:39) — floor-margin tightness and doubled coverage instrumentation across the matrix. Neither blocks.

Verdict: approve-worthy, no blockers.

Automated war-room agent review — posted because this PR carries the Agent Review Requested label.

Comment thread composer.json
Comment thread .github/workflows/ci.yml
@Goosterhof
Goosterhof force-pushed the ci-coverage-min-gate branch from 1fa7e17 to 0154831 Compare July 14, 2026 11:24

@Goosterhof Goosterhof left a comment

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ Approve-worthy

0 blockers · 0 majors · 2 minors · 0 nits · 0 praise · 0 inline

Round 2 — since 1fa7e17: 0 addressed, 0 new, 2 open (non-blocking). Diff content is byte-identical to round 1 (same two hunks, same lines); only the head SHA moved, consistent with a rebase onto the merged #18 dependabot bump (base_sha now 7b3d423). CI green on this exact head: check (8.4) / check (8.5) / ci-passed / town-crier/gate all pass.

Self-review (author = reviewer = Goosterhof) → COMMENT per policy. The two round-1 findings still stand at their original inline locations and are not re-posted here to avoid duplicate threads:

  • 🟡 Minor — composer.json:45#20 (comment) (95% floor sits only 0.5pp under the claimed 95.5% measured coverage — tight ratchet margin).
  • ⚪ Nit — .github/workflows/ci.yml:39#20 (comment) (coverage-instrumented run duplicated across both matrix legs against the identical src/ tree).

Neither blocks. Note for the merge queue (not a review finding): branch protection on main requires 1 approving review — a self-authored COMMENT doesn't satisfy it, so mergeable_state reads blocked pending either an ally APPROVE or an admin merge.

Automated war-room agent review — posted because this PR carries the Agent Review Requested label.

Comment thread .github/workflows/ci.yml
Comment thread composer.json
@jasperboerhof

Copy link
Copy Markdown
Contributor

Town Crier Review · 7/10 · PASS · 🤝 Confirm — 🟡 2

kendo-error-tracker #20 · AC anchor: none — no issue key, no AC section; PR title only · head 01548311ee · via the town-crier bus (request #645)

Tip

Config-only diff (ci.yml + composer.json) arming a pest --coverage --min=95 gate on pcov, and the gate has teeth: phpunit.xml.dist scopes coverage to all of src/, and an independent run at this head measures 95.5% against the 95 floor — so it works, but clears by roughly half a point. We corroborate the thread's two open inline points (tight floor margin, doubled matrix instrumentation) in their own threads rather than re-file them, and add two the thread doesn't have: release.yml still runs the suite without the gate its own header claims to re-run, and test:coverage never reached the Commands docs.

2 finding(s) posted inline:

  • 🟡 MINOR · .github/workflows/ci.yml:39 — release.yml still runs composer test with coverage: none while claiming to re-run the CI gates
  • 🟡 MINOR · composer.json:45 — New test:coverage gate is undocumented — composer test is still the only documented way to run the suite

Bus thread · 2 prior review(s):

  • the-general (independent): Self-review (author=reviewer=Goosterhof) → COMMENT. Clean, CI-proven coverage gate (pest --coverage --min=95, pcov, phpunit.xml.dist already scoped via ). 2 non-blocking inline nits (floor …
  • the-general (independent): Round 2 (rebase-only SHA move, diff byte-identical to round 1) — approve-worthy, 2 non-blocking minors/nit carried over unchanged, no new findings.

@jasperboerhof jasperboerhof left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Auto-approved — Town Crier verdict PASS @Head, CI green, no open MAJOR+ thread. Our approval is our independent vote (approve-alongside): a peer's review / CHANGES_REQUESTED never withholds it — we verify every blocker ourselves, and a real one drops our own verdict below PASS. Any open 🟡 MINOR threads alongside this approval are non-blocking (TC-0036 R4) — author's choice: fold here or follow-up; if folding into this PR, say so in-thread and disarm auto-merge. See the verdict comment + inline notes.

Adds a CI-time coverage floor to a published library that previously ran
coverage: none. Measured coverage is 95.5% (67 tests); floor set at the
measured value rounded down to a clean integer.

- setup-php coverage: none -> pcov (fast driver, both PHP 8.4 + 8.5 legs)
- new composer test:coverage script = pest --coverage --min=95 (teeth are
  the --min CLI flag, not a <coverage> XML block, which is a silent no-op
  on PHPUnit 10+)
- CI Tests step now runs composer test:coverage; plain composer test stays
  for fast local runs without a coverage driver

Teeth proven by exit code: --min=95 -> exit 0 (green), --min=96 -> exit 1.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EmzU5UEBBVH4K691qiuxCh
@Goosterhof
Goosterhof force-pushed the ci-coverage-min-gate branch from 0154831 to 01012fc Compare July 17, 2026 14:05
@Goosterhof
Goosterhof merged commit 28eecad into main Jul 17, 2026
4 checks passed
@Goosterhof
Goosterhof deleted the ci-coverage-min-gate branch July 17, 2026 14:12
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Agent Review Requested Requesting review of specialized AI review agents.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants