Uh oh!
There was an error while loading. Please reload this page.
fix(conformance-gate): the gate was not in its own GUARDED list (backend#1681) - #213
Merged
Conversation
…end#1681) A PR touching ONLY `.github/workflows/conformance-gate.yml` matched nothing in GUARDED, took the "does not touch the repo contract" branch and exited 0. So the gate could be defanged on a green check -- drop `repo-inventory.yml` from the list, or replace the poll with `exit 0` -- and a FOLLOW-UP PR then edited the contract against a gate that no longer guarded it. Two PRs, both green, no audit ever demanded. Adding the file to its own list closes that path: a change to the gate now requires caller-drift to have PASSED on that exact head, the same as a change to the inventory or the checker. Verified offline against the real matcher (`grep -qxF` over the changed-file list), both directions: a gate-only PR now yields TOUCHED=conformance-gate.yml, an unrelated PR still yields nothing, and a near-miss path (`workflows/conformance-gate.yml`) correctly does not match, since the comparison is whole-line. This PR is also its own live test - it touches the file it adds, so the gate must now demand the audit on it. NOT claimed, and written into the file so nobody reads more into it: `pull_request` workflows run from the PR's merge ref, so the gate evaluating a PR is that PR's version of the gate, and caller-drift.py is likewise supplied by the head. This family's integrity still rests on the required human review. This removes the SILENT path; it does not make the gate self-hosting. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Uh oh!
There was an error while loading. Please reload this page.
LukasWodka
commented
Aug 11, 2026
ContributorAuthor
bugbot run |
There was a problem hiding this comment.
✅ Bugbot reviewed your changes and found no new issues!
Comment @cursor review or bugbot run to trigger another review on this PR
Reviewed by Cursor Bugbot for commit a21d7c9. Configure here.
saadqbal
approved these changes
Aug 11, 2026
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 hole
A PR touching only
.github/workflows/conformance-gate.ymlmatched nothing inGUARDED, so it took the "This PR does not touch the repo contract — nothing to verify" branch and exited 0.That means the gate could be defanged on a green check — drop
repo-inventory.ymlfrom the list, or replace the poll withexit 0— and a follow-up PR could then edit the contract against a gate that no longer guarded it. Two PRs, both green, no audit ever demanded.The fix
One line: the gate is now in its own list. A change to it requires
caller-driftto have passed on that exact head, the same as a change to the inventory or the checker.Test plan
Verified offline against the real matcher (
grep -qxFover the changed-file list), in both directions:.github/workflows/conformance-gate.ymlrepo-inventory.ymlREADME.md,docs/thing.mdworkflows/conformance-gate.yml(near miss)actionlintclean.This PR is also its own live test: it touches the file it adds to the list, so the gate must now demand the audit on this very PR. If
gategoes green withoutaudithaving passed on the head, the fix didn't work.What this does NOT claim
pull_requestworkflows run from the PR's merge ref, so the gate evaluating a PR is that PR's version of the gate — andcaller-drift.pyis likewise supplied by the head. This family's integrity still rests on the required human review. This closes the silent path; it does not make the gate self-hosting. That caveat is written into the file rather than left for a reader to discover.Found by the round-2 pipeline audit, backend#1681. Parent epic: backend#1680.
Note
Low Risk
CI guardrail tightening with no runtime or data-path changes; slightly increases when caller-drift runs on PRs that touch the gate file.
Overview
Closes a bypass where a PR that changed only
conformance-gate.ymldid not matchGUARDED, so the conformance gate exited green without requiringcaller-drifton that head—allowing the gate to be weakened in one PR and contract files edited in a follow-up with no audit.conformance-gate.ymlnow lists itself inGUARDED(same treatment asrepo-inventory.ymlandcaller-drift.yml), and adds inline comments documenting the hole (backend#1681) and thatpull_requeststill runs the PR’s version of the workflow (human review remains the backstop).caller-drift.ymlpull_requestandpushpathsfilters now includeconformance-gate.ymlso edits to the gate trigger the drift audit on that change, not only inventory/checker changes.Reviewed by Cursor Bugbot for commit a21d7c9. Bugbot is set up for automated code reviews on this repo. Configure here.