Skip to content

bug(mobile): preserve connection catalog when decoding fails #37

Description

@nohat

Problem

On 2026-10-05, saved app configuration and the connection list reportedly appeared empty on iPad immediately after opening T3 Code, shortly after 15:58 UTC. The exact UTC minute and installed app/update identity were not captured. Not verified on the physical iPad.

What the code shows

In apps/mobile/src/connection/catalog-store.ts, if the primary t3code.connection-catalog.v1 value exists but fails JSON/schema decoding, the loader logs that it is discarding the catalog, deletes the saved value, then tries legacy storage. If legacy storage is absent, it returns an empty catalog. The catalog contains saved connection targets and related local configuration.

Likely trigger

Not yet known. The iOS production OTA published at 2026-10-05 15:58 UTC (update ID 01a10cc9-e74a-702c-a572-813869e0dff5, source commit 68802a48f9a8f7f7db5ca4d605bdc818be62a804) is temporally close. That commit changed the environment routes UI and did not change catalog persistence; timing alone does not establish it as the cause. No physical-device trace confirms the decode failure path ran.

Proposed fixes

  1. Preserve the primary and legacy catalog values when decoding fails; surface a recoverable error instead of deleting saved configuration.
  2. Add focused regression coverage proving corrupt or incompatible data remains available for recovery.
  3. Add sanitized diagnostics for the decode failure and app/update identity without recording catalog contents or credentials.

Diagnostic for next time

Capture the catalog load phase and sanitized decode error, plus app version, runtime version, and update ID. Do not include raw local storage values.

Related

Production mobile workflow · iOS Expo update

Severity: High (potential loss of saved local configuration).

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    questionFurther information is requested

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions