ci(changeset): make coverage gaps a visible non-blocking check#170
Merged
PaulNewling merged 1 commit intoMay 28, 2026
Merged
Conversation
check-coverage ran as a step with continue-on-error: true, so a gap exited 1 but the step was reported success — the gap showed only as an annotation on a green run, which reviewers miss. Move it to its own 'changeset coverage (diagnostic)' job: the step drops continue-on-error (a gap turns the job red), the job sets continue-on-error: true (run stays green, merge not blocked). The native 'changeset status' gate in check-changesets is unchanged. Only node-simple-pnpm.yaml uses check-coverage.
Comment on lines
+593
to
+594
| continue-on-error: true | ||
| if: github.event_name == 'pull_request' || github.event_name == 'merge_group' |
There was a problem hiding this comment.
The
changeset-coverage job has continue-on-error: true hardcoded, unlike every sibling preflight job which conditionally enforces on merge_group. On a merge_group event a coverage gap is therefore fully silent to the merge queue — the queue sees the job's conclusion as success. If the team ever wants coverage to be enforced in the merge queue, the existing pattern used by check-changesets and preflight-* jobs would need to be adopted here.
Suggested change
| continue-on-error: true | |
| if: github.event_name == 'pull_request' || github.event_name == 'merge_group' | |
| continue-on-error: ${{ github.event_name != 'merge_group' }} | |
| if: github.event_name == 'pull_request' || github.event_name == 'merge_group' |
Prompt To Fix With AI
This is a comment left during a code review.
Path: .github/workflows/node-simple-pnpm.yaml
Line: 593-594
Comment:
The `changeset-coverage` job has `continue-on-error: true` hardcoded, unlike every sibling preflight job which conditionally enforces on `merge_group`. On a `merge_group` event a coverage gap is therefore fully silent to the merge queue — the queue sees the job's **conclusion** as `success`. If the team ever wants coverage to be enforced in the merge queue, the existing pattern used by `check-changesets` and `preflight-*` jobs would need to be adopted here.
```suggestion
continue-on-error: ${{ github.event_name != 'merge_group' }}
if: github.event_name == 'pull_request' || github.event_name == 'merge_group'
```
How can I resolve this? If you propose a fix, please make it concise.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem
check-coverageran as a step insidecheck-changesetswithcontinue-on-error: true. A coverage gap exits 1, but GitHub forces the stepconclusiontosuccess(onlyoutcomeisfailure). So a real gap showed only as an::error::annotation on an otherwise-green run — reviewers miss it.Change
Move check-coverage into its own
changeset coverage (diagnostic)job:continue-on-error→ a gap turns the job red;continue-on-error: true→ the run stays green and the merge is not blocked.Net: a gap surfaces as a red
changeset coverage (diagnostic)check, while never blocking. The nativechangeset statusgate incheck-changesetsis unchanged.Scope
Only
node-simple-pnpm.yamlconsumes check-coverage;node-matrix-pnpm.yamlhas no coverage step. Keep thechangeset coverage (diagnostic)check out of required status checks so it stays non-blocking.Verification
Canary against platforma-open/antibody-sequence-liabilities#63 (model covered by a changeset, software package edited without one) — expect a red diagnostic job with a green run.
Greptile Summary
This PR extracts the
check-coveragestep fromcheck-changesetsinto a new top-levelchangeset-coveragejob. The key insight is that step-levelcontinue-on-error: truehides failures by forcing the step'sconclusiontosuccess, while job-levelcontinue-on-error: truekeeps the workflow run green but surfaces the job's check as red — giving reviewers a visible signal without blocking the merge.changeset-coveragejob correctly restricts topull_request/merge_groupevents, needs onlymetadata, and removescontinue-on-errorfrom the step level so a gap fails the job.changeset-coverage, keeping it purely diagnostic as intended.Confidence Score: 4/5
Safe to merge; the change correctly moves a diagnostic check into its own job and the core changeset gate is untouched.
The restructuring is sound — job-level continue-on-error: true achieves the visible-but-non-blocking goal. The one open question is whether continue-on-error should remain unconditional on merge_group events, since every other preflight job in this workflow conditionally enforces on merge_group. If coverage is intended to be permanently advisory even in the merge queue, the current code is correct as-is.
.github/workflows/node-simple-pnpm.yaml — specifically the changeset-coverage job's continue-on-error value and the duplicated pnpm setup steps.
Important Files Changed
Flowchart
%%{init: {'theme': 'neutral'}}%% flowchart TD metadata([metadata]) --> check-changesets metadata --> changeset-coverage check-changesets["check-changesets\n(blocking on merge_group)"] check-changesets --> step_status["pnpm changeset status"] changeset-coverage["changeset-coverage\n(continue-on-error: true)"] changeset-coverage -->|if: pull_request OR merge_group| setup["checkout + pnpm prepare + pnpm install"] setup --> step_coverage["check-coverage action"] step_status -->|fail| job_cs_red["❌ check-changesets\n(blocks merge)"] step_status -->|pass| job_cs_green["✅ check-changesets\n(gate cleared)"] step_coverage -->|fail| job_cov_red["🔴 changeset coverage check = red\n(workflow stays green)"] step_coverage -->|pass| job_cov_green["✅ changeset coverage check = green"]Prompt To Fix All With AI
Reviews (1): Last reviewed commit: "ci(changeset): make coverage gaps a visi..." | Re-trigger Greptile