Skip to content

[Bug]: iOS App 2.0.0 (103) Settled Thread Behavior When Environment Disabled #15098

Description

@coledeb

Before submitting

  • I searched existing issues and did not find a duplicate.
  • I included enough detail to reproduce or investigate the problem.

Area

apps/mobile

Steps to reproduce

  1. Open App (I have two host environments connected over Tailscale HTTPS)
  2. Disable (one) environment via toggle in "Environments" settings panel (in my example, "Cole's MacBook" is the host that I disable)
  3. Return to initial view showing threads

Expected behavior

Either of:

  1. The threads that are from the disabled host should disappear while environment is disconnected
  2. The threads that are from the disabled host should remain, but retain their "Settled" or "Unsettled" states

Actual behavior

All threads from the disabled host forget their "Settled" state and appear in the main list.

Impact

Cosmetic issue

Version or commit

iOS 2.0.0 (103) - MacOS host version 0.0.46-nightly.20261003.2623

Environment

iOS 27.0.1 - macOS 27.0.1

Logs or stack traces

N/A

Screenshots, recordings, or supporting files

T3 Code with MacBook Host Enabled.png
T3 Code with MacBook Host Disabled.png

Workaround

N/A

Activity

  1. added
    bugSomething is broken or behaving incorrectly.
    needs-triageIssue needs maintainer review and initial categorization.
    on Oct 3, 2026
  2. coledeb commented on Oct 3, 2026

    @coledeb
    Author

    Just in case it's needed, my screenshots have the titles of the threads redacted, but nothing else has been modified.

  3. juliusmarminge commented on Oct 3, 2026

    @juliusmarminge
    Member

    Note

    Grok responding on behalf of Julius.

    Triage

    Thanks for the clear report, @coledeb! This reproduces on current main.

    Switching an environment off doesn't clear the settled state on that host. The iOS thread list just reclassifies those cached threads as active.

    This came in with the orchestrator cutover in #2829 (merged). The iOS home list, tablet sidebar, and thread arrangement sheet moved from useThreadShells() to useNavigationThreadShells(). The old list only included enabled environments. The new one walks every saved environment, including switched-off ones, as long as their cached thread snapshot is still in memory (packages/client-runtime/src/state/threadShell.ts).

    A thread stays on the Settled shelf only when its environment is in settlementEnvironmentIds. That set comes from server configs, which are only collected for enabled environments (createEnvironmentServerConfigsAtom in packages/client-runtime/src/state/shell.ts). So the moment an environment is switched off, buildThreadListV2Items in apps/mobile/src/features/threads/threadListV2.ts treats settled as unsupported and drops the thread into the active section. Snooze goes through the same check, so snoozed threads from that host would show up as active too.

    A few notes:

    • Web still uses the enabled-only list, so this only affects mobile.
    • Your settle state isn't lost. Turning the environment back on should put those threads back on the Settled shelf.
    • Of the two outcomes you described, the previous behavior (and what web does today) was the first one: threads from a switched-off environment leave the list. Keeping them visible and still settled would be a separate product choice. The current mix, where they stay visible but show as active, matches neither.

    A maintainer will decide on the fix direction.

  4. added
    via-triageFiled through npx t3 triage
    and removed
    needs-triageIssue needs maintainer review and initial categorization.
    on Oct 3, 2026
  5. entity commented on Oct 7, 2026

    @entity
    Contributor

    We're running into this too on iOS with a Tailscale host switched off.

    I opened #16886 for it. It makes navigationThreadShellsAtom use enabledEnvironmentIds(...) like the other thread, project and server-config atoms. Threads from a switched-off environment then leave the iOS list, the way mobile behaved before #2829 and the way web still does, and come back with their settled state when the environment is switched back on. It includes a focused test. It doesn't try to keep the threads visible and settled; that seemed like a separate product choice.

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

    bugSomething is broken or behaving incorrectly.via-triageFiled through npx t3 triage

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions