Repository navigation
Sentinel: stop waiting on reviews the review lane never runs - #22445
Merged
Merged
Conversation
G1 asked for a review on PRs the review lane skips by policy, so they sat red until someone waived them or forced a full review: - review:frontmatter-only had no G1 branch at all (#22417, a one-line `date:` bump, was waived). - A clean review:trivial PR needed triage's prose comment, which triage only posts when it finds something. Trivial isn't mechanical (the claims signal, the deletions cap), so #22429, a "two" -> "three" fix, sat red. - pulumi-bot PRs outside content-review/, fix/broken-links-, and vale/brand-sync- (the editions sync) never get a review. G1 now passes those lanes on a PR that never got a review, and G3 still needs the human approver. The skip labels can be applied by hand, so the Sentinel re-derives the shape from the diff with triage's own classify_pr and stays red, pointing at /new-review, when the diff doesn't fit. A prose-flagged PR whose triage comment is gone stays red, and a review card at any head keeps a PR on the review track. Also: - A PR with no changed files is red in every lane. A fork PR with an empty file list used to skip G1, G2, and G3 and conclude success. - The Sentinel's label filter wakes on review:frontmatter-only, and triage re-dispatches the Sentinel when frontmatter-only or prose-flagged moves, since its GITHUB_TOKEN label writes fire no events. - Tests pin the bot-skip lists to both claude-code-review.yml and claude-triage.yml. Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_012JFCv9URLXVVabm6YieHZG
Contributor
Sentinel — merge gate status2 of 5 gates need attention before this can merge.
Break glass: a member of a routing team ( Evaluated at head Need help, or think a gate got it wrong? Ask in |
Collaborator
|
Your site preview for commit faccb35 is ready! 🎉 http://www-testing-pulumi-docs-origin-pr-22445-faccb35b.s3-website.us-west-2.amazonaws.com |
CamSoper
marked this pull request as ready for review
October 22, 2026 22:31
This branch was successfully deployed
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.
Proposed changes
G1 (review-ran) was demanding a review on PRs the review lane skips on purpose. Those PRs sat red until someone waived them or forced a full review of a one-line change. #22417 is what started this: Chris waived a
date:bump becausereview:frontmatter-onlyhad no G1 branch at all, so waiving was the only sane move. I audited every skip reason inclaude-code-review.ymlagainst the G1 ladder and found three dead ends plus one fail-open.review:frontmatter-only(#22417)date:is outside the mechanical bar's{updated, tags}review:trivialthat misses the mechanical bar (#22429, open now: "two ways" → "three ways")content-review/,fix/broken-links-,vale/brand-sync-(e.g., the marketing-web editions sync, #22204)successwith nobody involved (and on a transiently empty files read, over a real diff)Guardrails:
review:trivial/review:frontmatter-only, so the Sentinel re-runs triage's ownclassify_pron the diff and only passes G1 when the shape really fits. If it doesn't, G1 stays red and points at/new-review. A file GitHub sends without a patch reads as binary, so it never fits.review:prose-flaggedwith the triage comment missing stays red. The label promises nits that only the comment can show.Plumbing:
review-sentinel.yml: the label-event filter wakes onreview:frontmatter-only.claude-triage.yml: triage re-dispatches the Sentinel whenreview:frontmatter-onlyorreview:prose-flaggedmoves, not justreview:trivial. Its GITHUB_TOKEN label writes fire no events.REVIEW_LANE_SKIPPED_BOTS/REVIEW_LANE_REVIEWED_BOT_BRANCHESmirror the review lane's bot-author rule. A test pins them to bothclaude-code-review.ymland triage'sif:, so a branch added in one place and not the others fails the suite instead of creating a new dead end.sentinel.pydocstring,scripts/review-v3/README.mdgate table, and CONTRIBUTING §short-circuits.Testing
test_sentinel.py, including verbatim-shape regressions for Update the date for the AICR blog #22417 and Content review: content/docs/iac/guides/migration/_index.md #22429. All 9 behavior tests fail against the oldsentinel.pyand pass now.review-routing.yml: each is red until someone with write access approves, then green.make test-review-pipeline: all suites pass (613 inscripts/review-v3/).make lint: clean.Worth a look
The "approver is the review" call means a trivial PR carrying a factual claim (like #22429's count fix) now clears G1 without a model review. Before, it needed
/new-reviewor a waive. That matches what the review lane already decided by skipping it, and content-review PRs like #22429 were fact-checked by their own pipeline. If you'd rather claims get a model pass, the place to change it is the lane's skip bar (or swapping the v2 shortcuts for the mechanical bar, whichreplay-mechanical.pywas built to evaluate), not a G1 that can never pass.Related issues (optional)
#22417 (waived over this), #22429 (stuck on it right now), #22204 (bot-author shape).
Generated by Claude Code