[BUG] Desktop App 2.1.111 upgrade: Code session index wiped (recoverable via workaround); Cowork history disappeared (cause unclear)

Resolved 💬 3 comments Opened Apr 21, 2026 by aaliubimov Closed Jun 2, 2026

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?

Environment

  • Desktop App version: 2.1.111
  • OS: Windows 11 (MSIX package: Claude_pzs8sxrjxfjjc, install location C:\Program Files\WindowsApps\Claude_1.3561.0.0_x64__pzs8sxrjxfjjc)
  • Data root: %LOCALAPPDATA%\Packages\Claude_pzs8sxrjxfjjc\LocalCache\Roaming\Claude\
  • Related: #51349 (launch failure on prior version, fixed by this 2.1.111 update — which then caused the data-loss reported here)

Summary

After upgrading to 2.1.111, the sidebar became empty in both Code and Cowork tabs. Investigation uncovered two distinct problems with different severity.

---

Problem 1 — Code: sidebar empty despite all session data intact (recoverable)

CLI session JSONLs in %USERPROFILE%\.claude\projects\*\*.jsonl were untouched — 171 sessions across 7 projects (~830 MB).

However, the sidebar reads a separate wrapper index:

<DataRoot>\claude-code-sessions\<userId>\<profileId>\local_<uuid>.json

After the upgrade only 2 wrapper files remained (for currently open worktrees). The 169 wrappers for historical sessions were gone — and with them, the sidebar.

Workaround: regenerated wrappers from JSONLs with a small Python script (extracting sessionId, cwd, aiTitle, timestamps, worktree metadata). After restart, all 169 sessions reappeared in sidebar and are fully navigable.

Expected behaviour: preserve wrapper index across upgrades, or fall back to rebuilding it from JSONLs on startup when entries are missing / stale.

---

Problem 2 — Cowork: local-only storage, permanently lost (non-recoverable)

Cowork conversations visible pre-upgrade in the sidebar (Test implementation, Dispatch background conversation, etc.) were stored in:

<DataRoot>\IndexedDB\https_claude.ai_0.indexeddb.leveldb
<DataRoot>\IndexedDB\https_claude.ai_0.indexeddb.blob

After upgrade, the cache was unreadable / cleared. Diagnostic steps:

  1. Renamed leveldb/blob to .bak and relaunched the app.
  2. Desktop App rebuilt IndexedDB (active writes observed, ~seconds after launch).
  3. Cowork sidebar remained empty.
  4. Created a fresh Cowork task → it immediately appeared in Recents, confirming the sidebar and network sync are functional.
  5. Conclusion: server returns an empty list for this account's historical Cowork conversations → they were local-only and destroyed by the upgrade.

Expected behaviour: Cowork conversations should sync to the user's cloud account the same way regular Claude.ai conversations do, so they survive client wipes / upgrades. Local-only retention with no warning is a footgun for paying users.

Minimum fix: pre-upgrade backup of IndexedDB\https_claude.ai_* into a timestamped folder inside the data root, so upgrades are reversible.

---

Reproduction

Single-occurrence observation, not reliably reproducible from outside:

  1. Prior version (2.1.110 — could not launch, see #51349) with populated Code sessions and Cowork tasks.
  2. Upgrade to 2.1.111 (via MSIX auto-update).
  3. Open app — both sidebars empty. CLI data on disk intact; IndexedDB effectively reset.

Asks

  1. Confirm whether Cowork conversations are supposed to be persisted server-side. If yes, investigate why sync did not happen for account `ownerAccountId: 88e42502-3852-4037-848a-3f838593b865

restore_session_index.py

`.

  1. Make Code wrapper index self-healing — rebuild from JSONLs on startup if stale or incomplete.
  2. Add an automatic pre-upgrade backup of IndexedDB\ and claude-code-sessions\.
  3. Surface a one-line entry in release notes whenever an upgrade may reset local storage.

Impact

  • Code: zero data lost (workaround available), but first reaction was assuming 171 sessions were gone — bad UX.
  • Cowork: real data loss, unrecoverable for this user. Unknown how widespread.

What Should Happen?

Environment

  • Desktop App version: 2.1.111
  • OS: Windows 11
  • Install type: MSIX package (Claude_pzs8sxrjxfjjc)
  • Install: C:\Program Files\WindowsApps\Claude_1.3561.0.0_x64__pzs8sxrjxfjjc
  • Data root: %LOCALAPPDATA%\Packages\Claude_pzs8sxrjxfjjc\LocalCache\Roaming\Claude\
  • Related: #51349 (launch-failure on prior version, resolved by this 2.1.111 update, which in turn caused the data issues below).

Summary

After updating to 2.1.111, both Code and Cowork sidebars were empty. Investigation revealed two separate issues, with very different recoverability profiles.

---

Problem 1 — Code sidebar empty while session data is intact (recoverable)

CLI session JSONLs under %USERPROFILE%\.claude\projects\*\*.jsonl were untouched — 171 sessions, ~830 MB across 7 projects.

Sidebar reads a separate wrapper index:

<DataRoot>\claude-code-sessions\<userId>\<profileId>\local_<uuid>.json

After the upgrade only 2 wrappers remained (for currently open worktrees). The other 169 were missing, and the sidebar followed the index.

Workaround — I wrote a Python script that scans JSONLs, extracts sessionId, cwd, aiTitle, timestamps, worktree metadata, and emits one wrapper JSON per orphaned session. After relaunch, all 169 sessions reappear in sidebar correctly, with AI-generated titles preserved.

Script attached: restore_session_index.py. Handles both MSIX and legacy Electron install paths; dry-run by default; auto-backup of the wrapper folder before any write; refuses to run while claude.exe is active.

Expected behaviour: the wrapper index should either survive upgrades, or be rebuilt lazily from the JSONLs on startup when entries are missing. The fact that a ~150-line script can reconstruct it end-to-end suggests this is not hard to do in the app itself.

---

Problem 2 — Cowork history disappeared; storage model unclear (recoverability unknown)

Pre-upgrade, the sidebar listed local Cowork conversations (e.g. Test implementation under masterpipeline, Dispatch background conversation under Other). After the upgrade they are all gone.

Diagnostic steps:

  1. Renamed <DataRoot>\IndexedDB\https_claude.ai_0.indexeddb.{leveldb,blob} to .bak.
  2. Relaunched the app. A fresh IndexedDB was created and the app wrote into it within seconds.
  3. Cowork sidebar still empty.
  4. Created a new Cowork task → it immediately appeared in Recents. Confirms the sidebar code path and network sync for new items are functional.
  5. Restored the .bak leveldb and inspected its log file. Found only the empty schema (conversations_v2, clientState, keyval-store, …) — no titles, no conversation UUIDs, no messages.

Critical unknown: I could not determine whether the historical conversations were

  • (a) local-only and truly destroyed by the upgrade, or
  • (b) still present on the server but filtered out / not rendered by the Desktop App.

Without looking at the actual HTTP response to whatever endpoint populates the sidebar, these two cases look identical from the outside. DevTools appear to be locked in the MSIX build, so I could not inspect network traffic.

Expected behaviour: upgrades should never silently destroy user conversations — regardless of which of (a)/(b) applies. If storage is local-only, that itself is a footgun that should be documented and coupled with automatic pre-upgrade backups of IndexedDB\.

---

Steps to reproduce

Single-occurrence observation. Not reliably reproducible from outside.

  1. Prior version (2.1.110 or similar) with populated Code sessions and Cowork conversations.
  2. Upgrade to 2.1.111 via MSIX auto-update.
  3. Launch → both sidebars empty.

Asks

  1. Clarify storage model for Cowork conversations — local-only, server-hosted, or hybrid? This directly determines whether the data loss is permanent. If server-hosted, please investigate why the sidebar renders zero results for account ownerAccountId: 88e42502-3852-4037-848a-3f838593b865 post-upgrade.
  2. Make the Code wrapper index self-healing — on startup, detect missing wrappers whose JSONLs are present and rebuild them (logic is trivial, see attached script).
  3. Automatic pre-upgrade backup of claude-code-sessions\ and IndexedDB\ into a timestamped folder inside the data root. Upgrades should be reversible.
  4. Surface reset/migration events in release notes, so users know to back up data themselves if auto-backup isn't implemented yet.

Impact

  • Code: zero data lost — but first impression was that 171 sessions across months of work were gone. Bad UX for a recovery that took a half-day of reverse-engineering.
  • Cowork: real data loss from the user's perspective, recoverability unknown without access to server logs.

Attachments

  • restore_session_index.py — workaround script for Problem 1. Safe defaults (dry-run by default, auto-backup, refuses to run with app open). CC0.
  • .bak folders of the post-upgrade empty IndexedDB available on request if helpful for forensics.

Error Messages/Logs

Steps to Reproduce

Single-occurrence observation. Not reliably reproducible from outside.

  1. Prior version (2.1.110 or similar) with populated Code sessions and Cowork conversations.
  2. Upgrade to 2.1.111 via MSIX auto-update.
  3. Launch → both sidebars empty.

Claude Model

Opus

Is this a regression?

Yes, this worked in a previous version

Last Working Version

_No response_

Claude Code Version

Version 1.3561.0 (fbc74b) Desktop App

Platform

Anthropic API

Operating System

Windows

Terminal/Shell

Windows Terminal

Additional Information

restore_session_index.py

View original on GitHub ↗

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