Ran into this on novus-power/hive PR #1979 (a trivial 4-line diagnostic-logging change). The review job (mode: review, workflow_run trigger) took over an hour end to end -- it hit a context-compaction/resume partway through, which pushed the run well past the GitHub App installation token's TTL.
By the time the agent got to submitting the review, every mcp__github__ call started failing with:
failed to get current user: non-200 OK status code: 401 Unauthorized body: "{\r\n \"message\": \"Bad credentials\",\r\n \"documentation_url\": \"https://docs.github.com/rest\",\r\n \"status\": \"401\"\r\n}"
It had already called create_pending_pull_request_review successfully (token still valid then), then add_comment_to_pending_review failed on an unrelated GraphQL validation error (missing subjectType), then after the compaction/resume, submit_pending_pull_request_review failed twice with the 401 above. The job's own top-level conclusion was still "success" -- nothing surfaced this failure anywhere a human or the calling workflow could see it. The PR sat with reviewDecision: REVIEW_REQUIRED indefinitely, with zero reviews ever actually posted, and no comment/error visible anywhere on the PR itself.
Two separate things worth fixing:
- The App token should be refreshed if it's stale before the final review-submission call, not just minted once at job start -- the reusable action already has an OIDC exchange for the App token (this exact repo's claude-review.yml comment mentions
id-token: write for it), so a mid-run refresh should be mechanically possible.
- Regardless of (1), a submit_pending_pull_request_review failure (or any core review-submission tool failure) should make the job itself fail rather than reporting success -- silent failure here means the calling repo's own claude-review.yml can never distinguish "genuinely nothing to say" from "the review never actually happened."
Workaround used on the affected PR: manually re-ran the same review job (gh run rerun), which completed within the token's TTL the second time.
Triage summary
- Kind: Bug report.
- Area: Review mode's App-identity (OIDC) path in
action.yml -- specifically the pinned anthropics/claude-code-action call's token minting/TTL, and the lack of a post-hoc check confirming a review was actually submitted.
- Duplicates: None found among this repo's open/closed issues.
- Severity: Silent failure (green run, no review posted, no visible error) on a narrow but real path -- App-identity review, long session with a compaction/resume,
workflow_run-triggered timing. First-hand reproduction with real tool-call logs from novus-power/hive, not just a claim of urgency.
- Two separable asks: (1) mid-session App-token refresh -- likely an upstream (
anthropics/claude-code-action) concern, not fixable in this wrapper's action.yml alone; (2) failing the job when submit_pending_pull_request_review never succeeds -- addressable here, e.g. a review-mode analogue of the existing triage-only "verify actual output" check around action.yml:2121.
- Missing info: confirmation of which trigger (
workflow_run vs. the documented pull_request) is required to reproduce the token-TTL timing.
- Labelled:
bug.
Ran into this on novus-power/hive PR #1979 (a trivial 4-line diagnostic-logging change). The review job (mode: review, workflow_run trigger) took over an hour end to end -- it hit a context-compaction/resume partway through, which pushed the run well past the GitHub App installation token's TTL.
By the time the agent got to submitting the review, every mcp__github__ call started failing with:
It had already called create_pending_pull_request_review successfully (token still valid then), then add_comment_to_pending_review failed on an unrelated GraphQL validation error (missing subjectType), then after the compaction/resume, submit_pending_pull_request_review failed twice with the 401 above. The job's own top-level conclusion was still "success" -- nothing surfaced this failure anywhere a human or the calling workflow could see it. The PR sat with reviewDecision: REVIEW_REQUIRED indefinitely, with zero reviews ever actually posted, and no comment/error visible anywhere on the PR itself.
Two separate things worth fixing:
id-token: writefor it), so a mid-run refresh should be mechanically possible.Workaround used on the affected PR: manually re-ran the same review job (
gh run rerun), which completed within the token's TTL the second time.Triage summary
action.yml-- specifically the pinnedanthropics/claude-code-actioncall's token minting/TTL, and the lack of a post-hoc check confirming a review was actually submitted.workflow_run-triggered timing. First-hand reproduction with real tool-call logs fromnovus-power/hive, not just a claim of urgency.anthropics/claude-code-action) concern, not fixable in this wrapper'saction.ymlalone; (2) failing the job whensubmit_pending_pull_request_reviewnever succeeds -- addressable here, e.g. a review-mode analogue of the existing triage-only "verify actual output" check aroundaction.yml:2121.workflow_runvs. the documentedpull_request) is required to reproduce the token-TTL timing.bug.