Uh oh!
There was an error while loading. Please reload this page.
fix(ci): a required check cannot be path-filtered — drop paths on the PR trigger (backend#1681) - #665
Merged
Merged
Conversation
… PR trigger (backend#1681) `Source-of-truth drift` is a REQUIRED status check on develop and on main, but `drift-checks.yaml` only fires on PRs touching scripts/, client/ or itself. A PR outside those paths therefore never produces the check, GitHub leaves it at "Expected - waiting for status to be reported", and the PR is unmergeable with no failing check to point at. Measured on 2026-08-11 this was blocking three open PRs at once - client#651 (org-standards sync), #657 (Makefile) and #660 (docs) - none of which touch the filtered paths. Two of the three had already been approved. `pull_request` loses its paths filter so the required check always reports. The job is ~10s (measured across its last three runs), which is nothing next to a permanently stuck PR. `push` keeps its filter: pushes are not gated by required checks, so path-scoping there is free and correct. The repo already documents this hazard in standard-checks.yml's header; this is the same rule applied to the workflow that broke it. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
divyasinghds
approved these changes
Aug 11, 2026
divyasinghds
left a comment
Contributor
There was a problem hiding this comment.
Approving — textbook-correct fix for a real, active blocker (three PRs stuck at 'Expected — waiting for status to be reported'). The diff does exactly the right thing:
pull_requestlosespaths:, keepsbranches:→ the requiredSource-of-truth driftcheck now reports on every PR to the protected branches.pushkeeps itspaths:filter — correct, since pushes aren't gated by required checks.- No rename, so the required-check name mapping is preserved.
Checked beyond the diff: the drift job inspects the committed scripts/↔client/ state (not the PR diff), so a docs-only PR passes when no drift exists — confirmed by it passing green on this PR itself. Cost is ~10s (5s here), negligible next to a permanently stuck PR.
Good call documenting why there's deliberately no paths on pull_request inline at the site that broke it, so it won't be tidied back. ✅
Uh oh!
There was an error while loading. Please reload this page.
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 freeto 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.
The bug
Source-of-truth driftis a required status check ondevelopandmain, butdrift-checks.yamlonly fires on PRs touchingscripts/**,client/**or itself.A PR outside those paths therefore never produces the check. GitHub leaves it at "Expected — waiting for status to be reported", and the PR is unmergeable — with no failing check to point at, which is why it reads as "approved but stuck".
It is blocking three PRs right now
Measured 2026-08-11, all on
develop, none touching the filtered paths:The fix
pull_requestloses itspaths:filter, so the required check always reports. The job is ~10s (measured across its last three runs) — nothing next to a permanently stuck PR.pushkeeps its filter: pushes aren't gated by required checks, so path-scoping there is free and correct.Note
This repo already documents the exact hazard, in
standard-checks.yml's own header:This applies that rule to the workflow that broke it.
Test plan
yaml.safe_loadconfirmspull_requestnow carries onlybranches, andpushstill carriespaths.actionlintclean..github/workflows/drift-checks.yaml, which is in the old filter — so to verify the fix, check that chore(devex): install amake checkpre-push hook viamake setup(backend#1606) #657 (which touches neither path) reportsSource-of-truth driftonce this merges.Found by the round-2 pipeline audit, backend#1681. Parent epic: backend#1680.
Note
Low Risk
CI trigger-only change; the drift job still runs the same script, with slightly more PR runs (~10s each).
Overview
Fixes PRs stuck at Expected — waiting for status to be reported when they do not touch
scripts/**,client/**, or the workflow file. Source-of-truth drift is required ondevelopandmain, but a path-filtered workflow never runs on out-of-scope PRs, so GitHub never gets a status.The
pull_requesttrigger in.github/workflows/drift-checks.yamlnow only lists branches; thepathsfilter is removed. Inline comments document why required checks must not be path-scoped on PRs.pushstill usespathsbecause pushes are not blocked by that required-check behavior.Reviewed by Cursor Bugbot for commit f9691d4. Bugbot is set up for automated code reviews on this repo. Configure here.