anthropics / anthropics/claude-code-action

Claude Code Review check_runs silently abandoned, time out at GitHub's 2hr stale limit

Open
#1,361 0 comments 0 reactions 0 assignees View on GitHub
bug experimental-review p2
Dominant language
TypeScript
Stars
8.9k
Forks
2.1k
Avg merge
3d 9h
Merged PRs (30d)
10

Description

## Summary

Across multiple PRs in our repo (Nurture-Bio/GenomeHub, private), the Claude Code Review check is created on the PR, sits in `status: in_progress` indefinitely, and is eventually closed by **GitHub's 2-hour stale-check timeout** (not the App). The check completes with `conclusion: neutral` and no comments — or, in some cases, with partial comments mid-review and then nothing further.

## Evidence

Nine recent check_runs across four PRs in the same repo, all with `App.slug: claude` / `App.owner: anthropics`:

| PR | SHA | Started (UTC) | Ended (UTC) | Duration | Conclusion | Comments posted |
|----|-----|-------------|-----------|----------|------------|-----------------|
| #28 | (success) | 2026-05-12 18:58:23 | 2026-05-12 19:07:04 | **8.7 min** | neutral | **4** (full review) |
| #33 | ef7cf04d | 2026-05-15 18:44:05 | 2026-05-15 20:44:07 | **2:00:02** | neutral | 0 |
| #34 | ef434245 | 2026-05-18 20:44:50 | 2026-05-18 22:44:56 | **2:00:06** | neutral | 0 |
| #34 | 85e1cd20 | 2026-05-19 00:33:20 | 2026-05-19 02:33:24 | **2:00:04** | neutral | 0 |
| #34 | 3b4b2c82 | 2026-05-19 18:10:28 | 2026-05-19 20:10:28 | **2:00:00** | neutral | 0 |
| #34 | 91ffa5de | 2026-05-19 19:15:46 | 2026-05-19 21:15:46 | **2:00:00** | neutral | 0 |
| #34 | 314c02b7 | 2026-05-19 20:21:36 | 2026-05-19 22:21:40 | **2:00:04** | neutral | 0 |
| #34 | 576ca022 | 2026-05-19 21:27:25 | 2026-05-19 23:27:28 | **2:00:03** | neutral | 0 |
| #34 | 6c6e5487 | 2026-05-19 22:33:20 | 2026-05-20 00:33:23 | **2:00:03** | neutral | 0 |
| #37 | ee657930 | 2026-05-26 17:22:29 | 2026-05-26 17:38:16 | **15.78 min** | neutral | **2** (partial) |
| #37 | a4038a1c | 2026-05-26 17:43:39 | 2026-05-26 19:43:40 | **2:00:01** | neutral | 0 |
| #38 | a1adc56 | 2026-05-27 22:42:19 | (in_progress, still as of writing) | — | — | 0 |
| #38 | 3c0a5d0 (empty commit retry) | 2026-05-27 23:48:07 | (in_progress) | — | — | 0 |

## Why this is the GitHub stale timeout, not an App timeout

- The end times consistently land at `start + 2:00:00 ± 0:00:06`. GitHub's documented behavior is to auto-stale check_runs with no update for **exactly 2 hours**.
- The `conclusion: neutral` matches GitHub's stale-out default rather than a deliberate App-side outcome.
- The App's `external_id` field on every run we've inspected (including the **successful** ones — PR #28, PR #37 first run) is **empty**, so that's just how this App always works and isn't a failure signal — withdrawing.
- PR #37 first run on `ee657930` succeeded (4 comments, 15.78 min). The second run on the very next commit `a4038a1c` (same PR, same repo, same diff scope plus one trivial commit) silently abandoned. Not a content/size issue.

## Additional symptom

The empty-commit retry on PR #38 (commit `3c0a5d0` at 23:34) took **13 minutes** for the App to even register the check_run (23:48:07). Webhook → check_run creation is normally seconds. This suggests significant backend queue latency.

## What we ruled out

- Not a config gap on our side. We don't have a workflow file for the App; the App's defaults work on small PRs, demonstrated by PR #28
- Not a permissions/installation issue. Check_runs are being created, partial comments do post on the runs that don't hang at zero
- Not a size limit. PR #34 (which silently abandoned 7 times in 24 hours) and PR #38 (this report) are in completely different size regimes
- Not deterministic by PR or by commit content. Same PR succeeded then failed on the next commit

## What we believe is happening

After receiving the `pull_request` webhook and creating the check_run, the App's review worker is crashing or hanging on initialization for a significant fraction of invocations. The check_run stays at `status: in_progress` indefinitely until GitHub's 2-hour stale-check timer expires and closes it with `neutral`.

## Repro

Open a PR in a repo where the App is installed and the diff is more than a few files. Watch the check_run go in_progress and either complete normally within ~15 min OR stay in_progress for exactly 2 hours and then close `neutral` with zero/partial comments. With repeated commits the failure rate appears to climb over time.

## Asks

1. Confirm whether this matches a known issue
2. Surface a way for installers to see the App-side worker logs for our installation
3. Cause the App to set a clear failure state when its worker dies, so the check doesn't stay in_progress for 2 hours

Contributor guide

Open the contributing guide

Research direction

No repository files, tests, or entry points are identified; begin by reproducing the reported pull_request webhook and check_run behavior in an installed repository. Compare successful and stale runs, then determine whether the worker failure can be surfaced as a clear check failure before GitHub's two-hour timeout.

Written by the indexing model from the issue text.

Assessment

Tech stack
github, typescript
Domain
devops
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Quiet
Clarity
Needs clarification
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.