Confirmed the same failure on Windows with T3 Code Alpha 0.0.42 on 2026-09-25.
After an apparent app crash, the sidebar showed no threads. Local diagnosis found:
state.sqlitepassedPRAGMA quick_check; the saved threads and messages were still present.- The local environment discovery HTTP endpoint responded with 200.
DesktopConnectionCatalogStore.getrepeatedly failed withDesktopConnectionCatalogStoreProtectionError(decrypt-catalog), caused byElectronSafeStorageDecryptError, thenError while decrypting the ciphertext provided to safeStorage.decryptString.- After a consistent SQLite backup, closing the desktop app, and renaming only
connection-catalog.jsonaside, restart logs showed successful catalog reads. Thread/message counts were unchanged. Visual sidebar recovery has not been independently verified.
The initial crash and reason decryption stopped working remain unconfirmed. In this case the Electron Local State file predates the catalog, so we cannot establish the profile-recreation trigger described above from timestamps alone.
Current main (e5a46d6c5d00b89afba5274a94d42428c8d79763) still propagates this failure. A focused recovery patch is now prepared and validated locally: preserve the encrypted catalog under a unique backup filename before returning an empty catalog, allowing local discovery to proceed. Preservation failures should remain errors. This addresses the overwrite/data-loss concern on the closed #4454 rather than simply swallowing the error. No plaintext credential fallback is needed.
Validation of the local two-file patch:
- All 10 DesktopConnectionCatalogStore tests pass, including concurrent recovery, byte-for-byte preservation, a subsequent encrypted save, and refusal to recover if the backup rename fails.
- The two new regression cases fail against unmodified main; the recovery case reproduces the same decrypt-catalog error chain.
- Desktop TypeScript check, targeted lint, formatting, and git diff --check pass.
- Catalog get/set/clear operations share a semaphore so recovery cannot rename a concurrent replacement save within the store.
Scope is the decrypt-catalog failure only. Malformed documents, filesystem errors, and legacy migration failures retain their existing error behavior. This has not been validated in a newly packaged desktop binary, and no PR has been opened yet.