Inline PR status badges in long-lived sessions don't refresh after PRs merge
Environment
- macOS 26.4.1 (Build 25E253)
- Claude Code 2.1.141
- Claude desktop app 1.7196.0
What's wrong
In a single Claude Code session that opens many PRs over time (some via the main agent, some via subagents), the inline PR cards in the transcript keep showing "Open" status even after the PRs are merged on GitHub. The CI pill on the right side of each card updates fine; only the status badge is stale.
Repro
- Start a Claude Code session and open multiple PRs from it over time (mix of agent-created and subagent-created)
- Merge the PRs on GitHub via rebase merge
- Scroll back through the session transcript
Expected: badges reflect current PR state (Merged/Closed).
Actual: badges remain "Open" indefinitely.
Screenshot
A session transcript showing ~20 PR cards (beryl 157–178, with some gaps) all displaying green "Open" status badges. CI pills on the right side of each card are up to date; only the left-side status badge is stale.
<img width="896" height="1362" alt="Image" src="https://github.com/user-attachments/assets/eb5f6e41-ba52-4b2f-892e-5a7296a8b82a" />
Tried, did not work
- Re-authenticating GitHub connection
- Closing and reopening the session
- Quitting and relaunching the app
- /compact
Why archiving isn't a fix
The session is still active; I'm continuing to work in it and open more PRs. Per-session archive isn't applicable, and there's no documented per-card refresh.
Related issues
- #11176 (conversation-to-PR linking immutable once established)
- #54022 (branch label stale, restart doesn't refresh)
- #25512 (status bar shows merged/closed PR)
4 Comments
Found 3 possible duplicate issues:
This issue will be automatically closed as a duplicate in 3 days.
🤖 Generated with Claude Code
Additional info — root cause + reliable repro
Today's session pinned this down to a GitHub repo-transfer + cached full_name problem, not just stale UI state.
What happened on the GitHub side:
Original repo: mpartipilo/beryl (personal)
Transferred to: beryl-io/beryl (org)
GitHub preserved every PR number across the transfer and now serves a permanent 301 from mpartipilo/beryl/pull/N → beryl-io/beryl/pull/N
What the Desktop UI shows (incorrect):
20 cards in the Sessions / Pull requests panel pinned to mpartipilo/beryl, all marked "Ready for review", PR numbers #157–#178.
What's actually true on GitHub (verified via gh pr view <N> --repo beryl-io/beryl):
Every one of #157–#178 is MERGED. Examples:
PR # State Merged
#157 MERGED 2026-05-06 — BRY-EVID-009
#158 MERGED 2026-05-07 — BRY-DB-001
#160 MERGED 2026-05-07 — BRY-UC-001
#161 MERGED 2026-05-07 — BRY-RENDER-001
#162 MERGED 2026-05-07 — BRY-PLUG-001
#178 MERGED 2026-05-10 — BRY-RPC-006
gh pr list --state open --repo beryl-io/beryl returns 0 open PRs. Same answer if I query by old or new path — GitHub redirects both to the canonical repo.
Diagnosis:
The Desktop UI's session-card → PR binding caches the pre-transfer mpartipilo/beryl repo full_name (or its numeric repo ID from before the transfer, possibly invalidated on the transfer). When it refreshes PR status, the request either:
(a) follows the redirect but the status-cache key still uses the old path, so the refreshed MERGED state never overwrites the cached "Ready for review", or
(b) hits the old repo ID, gets a 404 / silent failure, and falls back to the stale cached state.
Either way: the UI never picks up that the PRs are merged, and there's no per-card or bulk dismiss action exposed to the user.
What didn't fix it:
cmd-R / reload
cmd-Q + relaunch
No "Clear completed" / "Archive all" control found in Settings → Sessions
Workaround (none clean): dismissing each card individually if a ⋯ menu is available, otherwise stuck.
Suggested fix on Anthropic's side:
When the session/PR card binding fails to refresh against its cached repo path, follow GitHub's 301 redirect chain and update the binding's stored repo full_name + ID to the canonical post-transfer value. Or, simpler: when a cached PR status is "Ready for review" but the underlying PR is closed/merged, archive the card automatically (status reconciliation runs at refresh time).
The latest version of claude desktop allows me to dismiss the PR banners. Thanks! This issue is fixed.
This issue has been automatically locked since it was closed and has not had any activity for 7 days. If you're experiencing a similar issue, please file a new issue and reference this one if it's relevant.