[BUG] FleetView PR chips never clear — keyed by branch name, collide across repos

Open 💬 3 comments Opened Jun 7, 2026 by Stassy

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

  1. 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).

  1. Open PRs from those branches so FleetView tracks them.
  2. Merge/close the PRs and delete the remote branches.
  3. 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.

View original on GitHub ↗

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