# Issue #23917: Nightly catalogs saved by 0.1.1-nightly.20261020.3399 under the 'T3 Code (Nightly)' safe-storage name # Linux x86_64 VM, Xvfb + dbus-run-session + isolated gnome-keyring (gnome_libsecret), isolated HOME per run, Electron 44.9.3. # Fixture: synthetic ConnectionCatalogDocument {disabledEnvironmentIds:["env-written-by-3399"]}, encrypted with safeStorage after app.setName() before ready (write-3399-catalog/main.cjs). # Packaged app.asar package.json of Nightly .3386, .3553 (macOS arm64 zip) = {name: 't3code'}, no productName; CFBundleName 'T3 Code (Nightly)'. ## Identity per real Nightly (fresh HOME, keyring 'application' attribute after launch) .3386 (pre-#20907): application = t3code .3553 (reporter's build): application = t3code ################################################################ ## A. BEFORE, real Nightly .3553 AppImage, catalog under 'T3 Code (Nightly)' (reporter's state) == 1. fixture: catalog under safe-storage name 'T3 Code (Nightly)' wrote $HOME/.t3/userdata/connection-catalog.json backend gnome_libsecret under safe-storage name "T3 Code (Nightly)", prefix v11 == 2. launch app-0.1.3-nightly.20261023.3553 for 50s == 3. keyring identities now present == 4. catalog read results in desktop trace trace: $HOME/.t3/userdata/logs/desktop.trace.ndjson 2x desktop.connectionCatalogStore.get {"_tag": "Failure", "cause": "DesktopCon 2x desktop.ipc.connectionCatalog.get {"_tag": "Failure", "cause": "DesktopCon errors seen: ['ElectronSafeStorageDecryptError', 'decrypt-catalog'] == 5. catalog file unchanged by the run: yes ################################################################ ## B. BEFORE, real Nightly .3754 AppImage (latest), catalog under 'T3 Code (Nightly)' == 1. fixture: catalog under safe-storage name 'T3 Code (Nightly)' wrote $HOME/.t3/userdata/connection-catalog.json backend gnome_libsecret under safe-storage name "T3 Code (Nightly)", prefix v11 == 2. launch app-0.1.3-nightly.20261027.3754 for 50s == 3. keyring identities now present attribute.application = T3 Code (Nightly) attribute.application = t3code == 4. catalog read results in desktop trace trace: $HOME/.t3/userdata/logs/desktop.trace.ndjson 1x desktop.connectionCatalogStore.get {"_tag": "Failure", "cause": "DesktopCon 1x desktop.ipc.connectionCatalog.get {"_tag": "Failure", "cause": "DesktopCon errors seen: ['ElectronSafeStorageDecryptError', 'decrypt-catalog'] == 5. catalog file unchanged by the run: yes ################################################################ ## C. CONTROL, real Nightly .3553, catalog under 't3code' == 1. fixture: catalog under safe-storage name 't3code' wrote $HOME/.t3/userdata/connection-catalog.json backend gnome_libsecret under safe-storage name "t3code", prefix v11 == 2. launch app-0.1.3-nightly.20261023.3553 for 50s == 3. keyring identities now present attribute.application = t3code == 4. catalog read results in desktop trace trace: $HOME/.t3/userdata/logs/desktop.trace.ndjson 2x desktop.connectionCatalogStore.get {"_tag": "Success"} 2x desktop.ipc.connectionCatalog.get {"_tag": "Success"} errors seen: none == 5. catalog file unchanged by the run: yes ################################################################ ## D. BEFORE, Nightly .3754 with desktop bundle from main a86c05f977 swapped in, catalog under 'T3 Code (Nightly)' == 1. fixture: catalog under safe-storage name 'T3 Code (Nightly)' wrote $HOME/.t3/userdata/connection-catalog.json backend gnome_libsecret under safe-storage name "T3 Code (Nightly)", prefix v11 == 2. launch swap-main-a86c05f977 for 50s == 3. keyring identities now present attribute.application = T3 Code (Nightly) attribute.application = t3code == 4. catalog read results in desktop trace trace: $HOME/.t3/userdata/logs/desktop.trace.ndjson 1x desktop.connectionCatalogStore.get {"_tag": "Failure", "cause": "DesktopCon 1x desktop.ipc.connectionCatalog.get {"_tag": "Failure", "cause": "DesktopCon errors seen: ['ElectronSafeStorageDecryptError', 'decrypt-catalog'] == 5. catalog file unchanged by the run: yes ################################################################ ## E. CONTROL, Nightly .3754 + main a86c05f977 bundle, catalog under 't3code' == 1. fixture: catalog under safe-storage name 't3code' wrote $HOME/.t3/userdata/connection-catalog.json backend gnome_libsecret under safe-storage name "t3code", prefix v11 == 2. launch swap-main-a86c05f977 for 50s == 3. keyring identities now present attribute.application = t3code == 4. catalog read results in desktop trace trace: $HOME/.t3/userdata/logs/desktop.trace.ndjson 1x desktop.connectionCatalogStore.get {"_tag": "Success"} 1x desktop.ipc.connectionCatalog.get {"_tag": "Success"} errors seen: none == 5. catalog file unchanged by the run: yes ################################################################ ## F. AFTER, Nightly .3754 + fix d4ab07e4d7 bundle, catalog under 'T3 Code (Nightly)', two launches == 1. fixture: catalog under safe-storage name 'T3 Code (Nightly)' wrote $HOME/.t3/userdata/connection-catalog.json backend gnome_libsecret under safe-storage name "T3 Code (Nightly)", prefix v11 ######## launch 1 of 2 == 2. launch swap-fix-d4ab07e4d7 for 50s == 3. keyring identities now present attribute.application = T3 Code (Nightly) attribute.application = t3code == 4. catalog read results in desktop trace trace: $HOME/.t3/userdata/logs/desktop.trace.ndjson 1x desktop.connectionCatalogStore.decryptWithOldNightlyKey {"_tag": "Success"} 1x desktop.connectionCatalogStore.get {"_tag": "Success"} 1x desktop.connectionCatalogStore.recoverOldNightlyCatalog {"_tag": "Success"} 1x desktop.connectionCatalogStore.writeCatalog {"_tag": "Success"} 1x desktop.connectionCatalogStore.writeDocument {"_tag": "Success"} 1x desktop.ipc.connectionCatalog.get {"_tag": "Success"} errors seen: none == 5. catalog file unchanged since the fixture was written: no ######## launch 2 of 2 == 2. launch swap-fix-d4ab07e4d7 for 50s == 3. keyring identities now present attribute.application = T3 Code (Nightly) attribute.application = t3code == 4. catalog read results in desktop trace trace: $HOME/.t3/userdata/logs/desktop.trace.ndjson 1x desktop.connectionCatalogStore.get {"_tag": "Success"} 1x desktop.ipc.connectionCatalog.get {"_tag": "Success"} errors seen: none == 5. catalog file unchanged since the fixture was written: no == 6. decrypt the final catalog file with plain Electron under the current name 't3code' read-catalog under "t3code": ok, disabledEnvironmentIds=["env-written-by-3399"] ################################################################ ## G. CONTROL AFTER, Nightly .3754 + fix d4ab07e4d7 bundle, catalog under 't3code' == 1. fixture: catalog under safe-storage name 't3code' wrote $HOME/.t3/userdata/connection-catalog.json backend gnome_libsecret under safe-storage name "t3code", prefix v11 ######## launch 1 of 1 == 2. launch swap-fix-d4ab07e4d7 for 50s == 3. keyring identities now present attribute.application = t3code == 4. catalog read results in desktop trace trace: $HOME/.t3/userdata/logs/desktop.trace.ndjson 1x desktop.connectionCatalogStore.get {"_tag": "Success"} 1x desktop.ipc.connectionCatalog.get {"_tag": "Success"} errors seen: none == 5. catalog file unchanged since the fixture was written: yes == 6. decrypt the final catalog file with plain Electron under the current name 't3code' read-catalog under "t3code": ok, disabledEnvironmentIds=["env-written-by-3399"] ################################################################ ## H. AFTER (final head), Nightly .3754 + fix 2e14f35f5e bundle, catalog under 'T3 Code (Nightly)', two launches == 1. fixture: catalog under safe-storage name 'T3 Code (Nightly)' wrote $HOME/.t3/userdata/connection-catalog.json backend gnome_libsecret under safe-storage name "T3 Code (Nightly)", prefix v11 ######## launch 1 of 2 == 2. launch swap-fix-2e14f35f5e for 45s == 3. keyring identities now present attribute.application = T3 Code (Nightly) attribute.application = t3code == 4. catalog read results in desktop trace trace: $HOME/.t3/userdata/logs/desktop.trace.ndjson 1x desktop.connectionCatalogStore.decryptWithOldNightlyKey {"_tag": "Success"} 1x desktop.connectionCatalogStore.get {"_tag": "Success"} 1x desktop.connectionCatalogStore.recoverOldNightlyCatalog {"_tag": "Success"} 1x desktop.connectionCatalogStore.writeCatalog {"_tag": "Success"} 1x desktop.connectionCatalogStore.writeDocument {"_tag": "Success"} 1x desktop.ipc.connectionCatalog.get {"_tag": "Success"} errors seen: none == 5. catalog file unchanged since the fixture was written: no ######## launch 2 of 2 == 2. launch swap-fix-2e14f35f5e for 45s == 3. keyring identities now present attribute.application = T3 Code (Nightly) attribute.application = t3code == 4. catalog read results in desktop trace trace: $HOME/.t3/userdata/logs/desktop.trace.ndjson 1x desktop.connectionCatalogStore.get {"_tag": "Success"} 1x desktop.ipc.connectionCatalog.get {"_tag": "Success"} errors seen: none == 5. catalog file unchanged since the fixture was written: no == 6. decrypt the final catalog file with plain Electron under the current name 't3code' read-catalog under "t3code": ok, disabledEnvironmentIds=["env-written-by-3399"]