Problem
Today, .github/workflows/claude-review.yml only runs when a PR is opened or marked ready_for_review. By the time a Contributor+ (C+) reviews the PR, additional commits may have landed since the initial Claude pass, so C+ reviewers miss out on a fresh Claude review of the latest code.
Solution
Extend the workflow to also re-run on pull_request_review (state: approved) when the approver is a member of the contributor-plus GitHub team. The existing opened / ready_for_review trigger is preserved.
Implementation outline
- Add
pull_request_review: types: [submitted] to the workflow triggers.
- Gate the existing author-authorization
validate job on github.event_name == 'pull_request_target'.
- Add a parallel
checkCPlusApproval job that uses OS_BOTIFY_TOKEN to call gh api /orgs/Expensify/teams/contributor-plus/memberships/<reviewer> --silent (same pattern as validateActor/action.yml).
- Update the
review job's needs and if so it runs when either gate passes.
- The existing
concurrency group + cancel-in-progress: true already debounces rapid re-approvals.
Notes
- Re-runs on every C+ approval (intentional; concurrency group keeps cost bounded).
- No change to Claude prompts, allowed tools, or the docs review path.
Issue Owner
Current Issue Owner: @mountiny
Problem
Today,
.github/workflows/claude-review.ymlonly runs when a PR isopenedor markedready_for_review. By the time a Contributor+ (C+) reviews the PR, additional commits may have landed since the initial Claude pass, so C+ reviewers miss out on a fresh Claude review of the latest code.Solution
Extend the workflow to also re-run on
pull_request_review(state:approved) when the approver is a member of thecontributor-plusGitHub team. The existingopened/ready_for_reviewtrigger is preserved.Implementation outline
pull_request_review: types: [submitted]to the workflow triggers.validatejob ongithub.event_name == 'pull_request_target'.checkCPlusApprovaljob that usesOS_BOTIFY_TOKENto callgh api /orgs/Expensify/teams/contributor-plus/memberships/<reviewer> --silent(same pattern asvalidateActor/action.yml).reviewjob'sneedsandifso it runs when either gate passes.concurrencygroup +cancel-in-progress: truealready debounces rapid re-approvals.Notes
Issue Owner
Current Issue Owner: @mountiny