Skip to content

fix(ci): a required check cannot be path-filtered — drop paths on the PR trigger (backend#1681) - #665

Merged
LukasWodka merged 1 commit into
developfrom
fix/1681-drift-check-must-report
Aug 11, 2026
Merged

fix(ci): a required check cannot be path-filtered — drop paths on the PR trigger (backend#1681)#665
LukasWodka merged 1 commit into
developfrom
fix/1681-drift-check-must-report

Conversation

@LukasWodka

@LukasWodkaLukasWodka commented Aug 11, 2026

Copy link
Copy Markdown
Contributor

The bug

Source-of-truth drift is a required status check on develop and 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, 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:

PR
#651org-standards sync (backend#1602)BLOCKED
#657Makefile pre-push hookBLOCKED, approved
#660docsBLOCKED

The fix

pull_request loses its paths: 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:

a required status check must report on EVERY PR to the protected branch, or the PR sits forever at "Expected — waiting for status to be reported", blocking the merge

This applies that rule to the workflow that broke it.

Test plan

  • yaml.safe_load confirms pull_request now carries only branches, and push still carries paths.
  • actionlint clean.
  • The real proof is this PR itself: it touches only .github/workflows/drift-checks.yaml, which is in the old filter — so to verify the fix, check that chore(devex): install a make check pre-push hook via make setup (backend#1606) #657 (which touches neither path) reports Source-of-truth drift once 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 on develop and main, but a path-filtered workflow never runs on out-of-scope PRs, so GitHub never gets a status.

The pull_request trigger in .github/workflows/drift-checks.yaml now only lists branches; the paths filter is removed. Inline comments document why required checks must not be path-scoped on PRs. push still uses paths because 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.

… 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>
@LukasWodkaLukasWodka self-assigned this Aug 11, 2026

@divyasinghdsdivyasinghds 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.

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_request loses paths:, keeps branches: → the required Source-of-truth drift check now reports on every PR to the protected branches.
  • push keeps its paths: 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. ✅

@LukasWodka
LukasWodka merged commit 134b324 into developAug 11, 2026
14 checks passed
@LukasWodka
LukasWodka deleted the fix/1681-drift-check-must-report branch August 14, 2026 13:53
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@LukasWodka@divyasinghds