[BUG] FleetView PR chips never clear — keyed by branch name, collide across repos
Preflight Checklist
- [x] I have searched existing issues and this hasn't been reported yet
- [x] This is a single bug report (please file separate reports for different bugs)
- [x] I am using the latest version of Claude Code
What's Wrong?
FleetView PR chips (bottom bar of the desktop app) never clear for PRs that are
already CLOSED/MERGED and whose remote branches were deleted. Clicking × does
not dismiss them; they survive restarts and any local cache clear.
Two chips persist. They correspond to 4 PRs across 2 private repos owned by the
same account, where both repos contain branches with IDENTICAL names:
| Repo | PR | Branch | Real GitHub state |
|--------|------|-------------------------------------|-------------------|
| Repo A | #15 | chore/remove-auto-deploy-workflow | CLOSED |
| Repo A | #16 | fix/remove-auto-deploy-workflow | MERGED |
| Repo B | #236 | chore/remove-auto-deploy-workflow | CLOSED |
| Repo B | #238 | fix/remove-auto-deploy-workflow | MERGED |
Root cause (from the FleetView state snapshot, repo URLs redacted):
{"prNumber":15, "repo":"<repo-A>", "branch":"chore/remove-auto-deploy-workflow", "state":"CLOSED", "dismissed":true}
{"prNumber":236,"repo":"<repo-B>", "branch":"chore/remove-auto-deploy-workflow", "state":"OPEN"}
{"prNumber":16, "repo":"<repo-A>", "branch":"fix/remove-auto-deploy-workflow", "state":"MERGED", "dismissed":true}
{"prNumber":238,"repo":"<repo-B>", "branch":"fix/remove-auto-deploy-workflow", "state":"OPEN"}
1) Chips are de-duplicated / keyed by BRANCH NAME, not by (repo, prNumber).
The identical branch names across the two repos collide: × wrote
dismissed:true on the Repo A records only; the Repo B records (same branch)
were left untouched, so the chips survive. The rendered chip even mixes
fields — Repo A's PR number with Repo B's label — confirming records from
different repos are merged by branch name.
2) The Repo B records are frozen at state "OPEN" although the PRs are
CLOSED/MERGED on GitHub. Their remote branches were deleted, so the status
refresh (which queries by branch) can no longer update them, and they never
satisfy any "hide merged/closed" rule.
Persistence: state is server-side. When the app is fully closed, the local
folders %APPDATA%\Claude\{IndexedDB, Local Storage, claude-code-sessions} do not
exist on disk — they are re-created from the server on launch. Clearing local
storage has no effect; the chips are re-sent on every login.
What Should Happen?
- Dismissing a chip with × should clear that exact chip permanently.
- Chips should be keyed/de-duplicated by (repo, prNumber), never by branch name,
so identically named branches in different repos never collide.
- PRs that are CLOSED/MERGED should auto-clear (not stay shown).
- When a PR's remote branch is deleted, status should be fetched by PR number so
the record can still transition to MERGED/CLOSED instead of being frozen at OPEN.
Error Messages/Logs
No error message — silent UI persistence bug. Evidence is the FleetView state
snapshot (%APPDATA%\Claude\claude-code-sessions\<id>\<id>\local_<id>.json),
repo URLs redacted:
{"prNumber":15, "repo":"<repo-A>", "branch":"chore/remove-auto-deploy-workflow", "state":"CLOSED", "dismissed":true}
{"prNumber":236,"repo":"<repo-B>", "branch":"chore/remove-auto-deploy-workflow", "state":"OPEN"}
{"prNumber":16, "repo":"<repo-A>", "branch":"fix/remove-auto-deploy-workflow", "state":"MERGED", "dismissed":true}
{"prNumber":238,"repo":"<repo-B>", "branch":"fix/remove-auto-deploy-workflow", "state":"OPEN"}
The × dismiss set dismissed:true on the Repo A records only; the Repo B records
(same branch names) stay, frozen at state "OPEN" though they are CLOSED/MERGED
on GitHub.
Steps to Reproduce
- In two repos owned by the same account, create branches with identical names
(e.g. chore/x and fix/x in both Repo A and Repo B).
- Open PRs from those branches so FleetView tracks them.
- Merge/close the PRs and delete the remote branches.
- Click × to dismiss the chips.
Expected: all chips clear.
Actual: the second repo's chips persist forever; × has no effect; they survive
restarts and any local cache clear (state is server-side).
Claude Model
None
Is this a regression?
Yes, this worked in a previous version
Last Working Version
Not sure — no known previously-working version; the chips appeared and have never cleared since.
Claude Code Version
2.1.160
Platform
Anthropic API
Operating System
Windows
Terminal/Shell
PowerShell
Additional Information
State is stored server-side (per account): when the app is fully closed, the
local folders %APPDATA%\Claude\{IndexedDB, Local Storage, claude-code-sessions}
do not exist on disk — they are re-created from the server on launch. So
clearing local storage has no effect; chips are re-sent on every login.
Suggested fixes:
- Key/de-duplicate PR chips by (repo, prNumber), never by branch name.
- Make × dismiss target the exact (repo, prNumber) record.
- When a PR's branch is deleted, fetch status by PR number so it can transition
to MERGED/CLOSED.
- Auto-clear chips for PRs already CLOSED/MERGED.
This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗