fix(ci): Claude Review never ran on draft→ready PRs#12
Merged
Conversation
pr-review.yml listed `types:` without `ready_for_review`. The reusable it calls (ci-workflows/claude-review.yml) gates its job on `draft == false`, so a PR opened as a draft skips the review at `opened` — and with no `ready_for_review` trigger, `gh pr ready` fires nothing this workflow listens for. The review never runs. `review / Claude Review` then sits at `skipped` forever, and GitHub counts a skipped required status check as SATISFIED. The PR merges green, unreviewed. That is a fail-open on a required check. It hit the PRs that matter most: fleet policy makes DRAFT the standard auto-merge opt-out, so every manual-merge PR is draft→ready — the recommended workflow was the one guaranteed to skip the review. Root cause was the shared caller template (fixed in dotclaude#156); every repo installed from it inherited this. Fleet audit 2026-07-15 (YAML-parsed, not grepped): 43 of the 91 repos with workflows were live-vulnerable. Evidence: wxa-mcp-server#339 went ready_for_review → merged 7 seconds later with `review / Claude Review: skipping`; attaxion_dev#344 merged 3s after ready, same skip. Precedent: wxa_vpn#983/#984 fixed this independently on 2026-07-04; wxa-jake-ai#879 fixed it there. RULE: if a workflow gates on `draft == false` — in its own jobs OR in a reusable it calls — its `types:` MUST include `ready_for_review`. Auto-Merge-Risk: high Co-Authored-By: Claude Opus 4.8 <[email protected]>
topcoder1
marked this pull request as ready for review
July 16, 2026 05:44
|
Auto-merge blocked — risk-tier paths touched. This Claude-authored PR modifies files matching the risk-tier patterns Matched files: |
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.
What
One line: add
ready_for_reviewtopr-review.yml's trigger types.Why — a required check was failing open
ci-workflows/claude-review.yml(the reusable) gates its job ondraft == false. So:openedfires → review skips (correct)gh pr ready→ firesready_for_review→ this workflow isn't listening → nothing runsreview / Claude Reviewsits atskippedforever — and GitHub counts a skipped required check as SATISFIEDThe PR merges green, unreviewed.
This hit the PRs that matter most. Fleet policy makes DRAFT the standard auto-merge opt-out, so every manual-merge PR is draft→ready — the recommended workflow was the one guaranteed to skip the review.
Root cause is upstream, not this repo
The shared caller template shipped without
ready_for_review; every repo installed from it inherited the bug. Template fixed in dotclaude#156 — that stops new installs, but can't retroactively fix already-installed repos. Hence this PR.A fleet audit on 2026-07-15 (YAML-parsed, not grepped) found 43 of the 91 repos with workflows live-vulnerable, 38 byte-identical.
Real merged evidence:
wxa-mcp-server#339ready_for_review→ merged 7 seconds later,review / Claude Review: skippingattaxion_dev#344wxa_vpn#983/#984fixed this independently on 2026-07-04 and nobody swept the fleet — the fix existed for 11 days while the rest stayed exposed.The rule
If a workflow gates on
draft == false— in its own jobs or in a reusable it calls — itstypes:MUST includeready_for_review. An explicittypes:list is a denylist by omission. (ready_for_reviewis not a GitHub default; the defaults areopened, synchronize, reopened.)Verification
pr-review.ymlYAML-parses totypes: ['opened', 'synchronize', 'reopened', 'ready_for_review']. No other change.Auto-merge rationale: MANUAL MERGE —
.github/workflows/**is ablocked:privilege-escalation path by design. Opened as a draft deliberately. Pushed withunset GH_TOKEN(harness token lacksworkflowscope).HUMAN_READABLE_SUMMARY: Our required AI code review was silently never running on any pull request that started as a draft — which, given how our merge policy works, is most PRs a human approves by hand. The workflow wasn't listening for the "draft is now ready" signal, so the check reported "skipped," and GitHub treats a skipped required check as a passing one. This makes it listen.
🤖 Generated with Claude Code