Skip to content

[Bug]: Links to finished subagent threads say "Thread no longer available" on mobile #29458

Closed

Description

@skyfallstatus

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. In a thread, have an agent delegate work with delegate_task, then mention the child in a reply using the returned link.
  2. Let the child's run finish, so the child is idle. Don't archive it.
  3. Force-quit and reopen the mobile app, or otherwise start a new connection, then open the parent thread.

I traced this from the code and one local database, and didn't run it on a device. #29494 has since reproduced it on Android.

Expected behavior

The link shows the child thread's title and opens it. A thread that still exists shouldn't be described as gone.

Actual behavior

The link has no title, so it falls back to "Thread no longer available", and tapping it does nothing. The thread exists and t3_thread_read can read it.

Cause

  • The server leaves idle subagent threads out of the shell snapshot when the client uses shellThreadFamilies, which apps/server/src/ws.ts:1840 turns on. See omitIdleSubagentShellsWith in apps/server/src/orchestration-v2/ShellStream.ts:141. The live stream isn't filtered this way, so an app that stays connected keeps the row until its next full snapshot.
  • packages/client-runtime/src/state/threadFamilies.ts:69 says those rows are left to on-demand reads.
  • On mobile, useLiveThreadLinkLabels (apps/mobile/src/state/entities.ts:210) only reads titles from rows already in the store. Nothing loads a missing thread for a link. The mobile threadFamilies calls cover outbox delivery, search results and the older-settled shelf.
  • relabelThreadLinks (packages/shared/src/threadLinks.ts) then uses unknownThreadLinkLabel, which treats a thread missing from the client as a thread that's no longer available.

getThreadFamily does return delegated children. Emulating its SQL against a local database returned the child in question.

This probably started with #26762, which removed the mobile useThreadFamily mounts that used to load these rows (diff read, not bisected).

Impact

Minor bug or occasional failure

A link to a delegated child loses its title and stops opening when the child is idle and the app doesn't have its row, for example after a cold start. In one local database, 107 of 109 distinct delegated threads linked from messages were idle. That's how many could be affected, not a failure rate.

Version or commit

main @ d833184, server 0.1.7-nightly.20261101.4048

Environment

macOS 27.2 host, Claude agent (delegate_task). The iPhone that prompted this report is on App Store build 202, whose last OTA predates #26762, so what that phone showed comes from #27977 and #28473 rather than from this bug.

Related


Filed by Claude (Opus 5.5) in T3 Code at the user's request. Edited on 2 November after a re-check: corrected the steps, impact, environment and Related sections.

Activity

  1. heyitstarek commented on Nov 3, 2026

    @heyitstarek

    Additional real-user observation on iPhone versus Windows desktop, reported 3 November 2026.

    The same conversation renders thread references differently across clients:

    • Parent conversation: Orchestrate All Active Chats, under No project.
    • Referenced thread title on Windows: Analyze Three Chat Threads.
    • In the assistant's repeated Purrfect owner: lines, Windows displays that title as a teal thread link with an icon.
    • On the iPhone, the corresponding lines instead read exactly Purrfect owner: Thread no longer available, without the named link.
    • The surrounding assistant messages render normally on both clients. The two matching messages are identifiable by their Worked for 1m 12s and Worked for 1m 26s durations. The iPhone shows message times 4:23 AM and 4:35 AM, with a 04:39 status-bar time.
    • A separate rounded delegated-task card on mobile still displays a title beginning Analyze Three Chat Thre... above the later reply. The inline reference fails even while that other surface has a readable title. The card's target has not been independently confirmed to be identical to the inline link's target.

    Expected: the inline reference should show the actual thread title, consistently with Windows, and remain usable when the target exists.

    Observed impact: misleading unavailable-thread text and lost title/context on mobile. The reporter did not test tapping the unavailable text, so this report does not independently establish a navigation failure or deletion.

    Environment: iPhone mobile UI (exact iOS version, mobile app build and OTA unknown); Windows x64 desktop. The Windows host's T3 MCP t3_environment_read currently reports server version 0.1.7-nightly.20261102.4080. That is the version read while filing, not proof of either client's version at screenshot time. Connection transport and reconnect/cold-start history are unknown.

    Reproduction scenario from the user's observation:

    1. Open a conversation containing assistant replies with inline links to another thread.
    2. View the same replies on Windows desktop and iPhone.
    3. Compare the inline thread title: Windows resolves it, while iPhone substitutes “Thread no longer available”.

    This is screenshot-backed user evidence, not a fresh controlled reproduction. The screenshots do not establish whether the target was idle, settled or archived, nor the underlying link spelling. The symptoms are consistent with this issue and possibly the related label-resolution issues already listed here; no additional root-cause claim is being made.

    Screenshot evidence supplied by the reporter: IMG_1003.PNG (iPhone) and image.png (Windows), compared above. The image bytes are not attached to this comment: the available GitHub connector/CLI can post text, but offers no issue-image upload, and the task browser is signed out. No private thread URLs, machine identifiers or unrelated chat contents have been published.

    This adds an iPhone/Windows comparison to the existing report. Please include this scenario when validating #29494 and any related label fix, since its current device evidence covers Android and says iOS was not run.

  2. amihos commented on Nov 4, 2026

    @amihos

    Android occurrence, 4 November 2026. Desktop renders the same links correctly.

    Android: two delegated-task links render as "Thread no longer available" while the subagent card above shows both threads as Working

    Environment

    • Android app com.t3tools.t3code 2.2.0 (versionCode 735, APK installed 30 October; OTA state unknown), OnePlus 7 Pro. Connected through the managed relay.
    • Server and Ubuntu desktop app: 0.1.7-nightly.20261103.4138.
    • Parent agent: Claude, delegating with delegate_task to claudeAgent / deepseek-v4.1-flash.

    What the data shows

    • The assistant message has two autolinks of the form <t3-thread://v2/<local envId>/thread:delegated-task:command%3Amcp%3A…%3Adelegate-task%3A…>. The environment ID is the server's own.
    • Both targets exist in orchestration_v2_projection_threads, are not archived or deleted, and have lineage.relationshipToParent: "subagent". They were created 8 and 13 seconds before the message.
    • The Ubuntu desktop app shows both links with their titles. Android shows "Thread no longer available", while the subagent card in the same message lists both threads by title.

    Two things that may be useful for #29494

    1. The screenshot was taken while both children were still running (the card says "Working", 1m and 54s). They were not idle yet, so the omitIdleSubagents path doesn't obviously explain this first failure. The app had been connected throughout. Unless this phone's bundle has the fix(mobile): thread links show their thread's title #26485 fix, the Hermes matchAll problem in [Bug]: Newly created running thread renders as “Thread no longer available” in iPhone message #27977 could explain it instead. I couldn't confirm which JS bundle is running.
    2. After both children finished, I force-quit and reopened the app, then opened the parent. The links still failed. The server trace for that cold start shows subscribeShell at 15:07:20.742Z, then orchestration.getThreadFamily at 15:07:21.111Z, then thread.visit and subscribeThread on the parent. Something on mobile does call getThreadFamily around opening the parent. The span doesn't record which thread it was for, and the links didn't resolve afterwards. Spans can't tell clients apart behind the relay (all 127.0.0.1), so I matched them to the phone by timing. The desktop wasn't on that thread during the test.

    Reported by Claude (Opus 5.5) in T3 Code at the user's request.

  3. Blazenetic commented on Nov 5, 2026

    @Blazenetic

    Additional occurrence reported on 5 November 2026, with user-confirmed mobile version and navigation impact.

    Environment and impact

    • T3 mobile app 2.2.0 on Android 16 / NothingOS 4.1, confirmed by the user. Numeric native build and installed JS/OTA fingerprint were not captured.
    • Connected Linux server: 0.1.8-nightly.20261104.4165, verified during investigation with t3_environment_read and the running executable path.
    • The mobile app connects to the environment through NetBird VPN. The user reports that this connection usually works well for other T3 functionality; no VPN cause is established.
    • The user confirms the affected references are plain text, not usable links; tapping does not open the threads. This is more than a misleading title.
    • The user confirms that the same thread references display as correct links and open normally in the T3 desktop app used for this conversation. For these reported examples, the failure is visible only on mobile. This desktop/mobile comparison is user-reported, not an automated client test.

    Backend and message evidence
    A parent reply contained two exact v2 autolinks returned for delegated assessments. Mobile displayed “Thread no longer available” for both. During investigation, t3_thread_read succeeded for both exact opaque IDs and reported completed, unarchived, unsettled children of that parent. The links named the same environment where the reads succeeded; no speculative ID decoding was needed.

    A separate newly announced review also rendered as broken, untappable text while its target was RUNNING, unarchived and unsettled at readback. Its saved Markdown was [review label](<t3-thread://v2/ENV/thread:delegated-task:command%3Amcp%3A…>), matching the separate labelled-destination case in #28473. Idle-child snapshot omission alone therefore does not explain all of this user's observations.

    These are user-reported rendering/tap results plus agent-verified saved Markdown and backend existence checks. No controlled cold-start reproduction, agent-run desktop/mobile test, device automation or screenshot capture was performed. The installed mobile JS bundle remains unknown, so this does not establish which combination of #27977/#28473/#29458 applies. No cache reset, restart, update or source patch was performed.

    Private thread IDs, project contents, machine paths and logs have been omitted.

    Posted by GPT-6.1 Sol through the Codex harness in T3 Code, at the user's explicit request.

  4. juliusmarminge commented on Nov 9, 2026

    @juliusmarminge
    Member

    Fixed by #32830 (23e3465ec6): mobile now reads metadata for unloaded threads and keeps scoped links navigable. Thanks for the detailed report!

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