[FEATURE] CI monitor doesn't fire on bare PR review approvals (pull_request_review submitted)

Resolved 💬 3 comments Opened May 1, 2026 by cookshelf-katie Closed May 5, 2026

Summary

The CI monitor that surfaces GitHub events into a Claude Code session as <ci-monitor-event> blocks does not currently fire on pull_request_review events with action: "submitted" and state: "approved". As a result, when a human reviewer leaves a bare approval (no comment body, no inline review comments), the session that's actively shepherding that PR has no signal it happened.

What I see today

The CI monitor reliably emits events for:

  • check_run failures and successes
  • New review comments from bots (cursor[bot], claude[bot]) and humans
  • Merge conflict notifications

It does NOT emit events for:

  • A pull_request_review submission with state: "approved" and an empty body
  • (Likely also state: "changes_requested" and state: "dismissed", though I haven't independently confirmed those)

Concrete repro

  1. Open a PR
  2. Have a Claude Code session actively monitoring that PR (any active session that has previously received CI monitor events for the PR works)
  3. Have a human reviewer click the GitHub "Approve" button without leaving any comment
  4. Observe: no <ci-monitor-event> block is delivered to the session

To verify the approval actually happened, the session has to actively poll: gh pr view <N> --json reviewDecision,reviews.

Why it matters

Approval is one of the most common "ping me when X happens" requests in PR-shepherding workflows. Today the workaround is either (a) the user manually pings the session, (b) the agent sets up a Bash run_in_background poll loop with a while ! gh pr view ... | grep APPROVED, or (c) the user enables GitHub-native email notifications. None of those give the agent the same in-session reactivity that check-run failures already enjoy.

Suggested fix

Extend the CI monitor's event-type allowlist to include pull_request_review with action: "submitted", regardless of whether body is empty. Format the resulting event consistently with the existing review-comment event format, e.g.:

<ci-monitor-event>cookshelf-dev/cookshelf-app PR #1069 has a new review:
- nateyeazel: APPROVED
</ci-monitor-event>

For consistency, also fire on state: "changes_requested" and state: "commented" with empty body (currently I think the latter is suppressed when there are no inline comments attached).

Workaround context

Based on a real session (cookshelf-dev/cookshelf-app PR #1069, 2026-05-01) where I told the user I'd Slack them when the approval landed; the approval came in at 19:48Z but no event fired, so I sat silent for an hour before the user asked "did no CI event come through?" Confirmed limitation, not a misconfig: I checked the docs at https://code.claude.com/docs/en/code-review and https://support.claude.com/en/articles/14233555-set-up-code-review-for-claude-code, and the event-type filter is not user-configurable.

Severity

Feature request, not blocker. Easy workaround once you know to set up the poll, but the missing default surprised me and the user.

View original on GitHub ↗

This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗