Skip to content

[Bug]: iOS composer cannot change project, so only the inherited project's environment is offered #25933

Closed

Description

@iniTwakkie

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. Link two environments to the same account over T3 Connect (e.g. blackbox at server 0.1.3 and pve2code at 0.0.43-nightly). Both show Connected under Settings → Environments.
  2. Somewhere in a thread on the second environment, start a thread so it becomes the current project (the project picker on iOS also defaults to the oldest project on whichever environment you're viewing).
  3. Go to Threads and tap the compose button (bottom right) to start a new thread.
  4. Tap the Environment row in that sheet.

Expected behavior

Same as the desktop app: tapping compose shows a project picker listing every project across the linked environments, with the most recently used project first. Picking a project selects its environment, so a thread can be started on any linked environment directly from the composer.

Actual behavior

The composer inherits a single project and the Environment row only lists the environment that owns that project. On iPhone there is no way to change the project from inside the composer, so:

  • the other linked environment never appears in the Environment list, even while it reports Connected and its threads list fine;
  • the only way to start a thread there is to leave the composer, open the project from the project list, and create the thread from that project's screen.

No thread.create command is ever sent to the server while this is happening — the client blocks before it sends anything, so this is composer UI state rather than a connection or scope problem.

A second-order effect: the composer's default project is the oldest project on the environment rather than the most recently used one. If that oldest project's workspace no longer exists, the environment becomes unselectable in the composer entirely (this is how I first hit the problem — the environment was "Connected" everywhere but absent from compose).

Environment

Mobile iOS app 2.1.0 (App Store build of 23 Oct, the current release)
Desktop macOS app 0.1.3 — same account, same environments, shows the full project list
Server A T3 0.1.3, Ubuntu 24.04 x64, reached over T3 Connect (tunnel healthy, 4 QUIC connections, loopback and tailnet return 200)
Server B T3 0.0.43-nightly.20260916.1811
Auth T3 Connect, owner account; session holds orchestration:read/operate and the environment scopes

Additional context

Server side looks healthy for the affected environment: t3_project_list returns all projects, project workspace normalisation succeeds, and thread reads/writes work fine from the desktop client and the same phone once a thread is open. The only observable difference is the composer UI on iOS, which is what this report is about.

This is reproducible with a single linked environment too — the Environment row lists that environment or nothing depending on the inherited project — so it is not specific to having two environments.

Activity

  1. juliusmarminge commented on Oct 27, 2026

    @juliusmarminge
    Member

    Checked on current main (30f4d63) with the mobile dev client against two paired environments, one with four projects and one with one.

    • Changing the project from the composer works. The project name in "What should we build in ?" is a button (it is underlined). Tapping it opens Choose project, which lists every project across all paired environments, most recently updated first. Picking a project from the other environment moves the draft to that environment, and its branches load. This also works when the draft inherited its project from the thread you last opened.
    • The Environment row is by design. "on " picks which machine runs this project, so it only lists environments that have a copy of the same repository. To start a thread on another environment, change the project instead.
    • The default project is fixed on main. Your build opened the composer on the first project in the list when there was no current project, which is how the oldest project (or one whose folder is gone) ended up preselected. c976a09 (feat(mobile): add a "Use last project" preference for new threads #24741) changed this. Compose now opens the project you last used, or the project picker when there is none. A new Use last project setting under Settings → Threads makes compose always start at the picker. It ships in the next mobile release.

    Closing as fixed on main. If the project name in the composer doesn't open the picker for you after updating, reply with a screen recording and we'll reopen.

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

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions