Repository navigation
Description
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
- In a thread, have an agent delegate work with
delegate_task, then mention the child in a reply using the returnedlink. - Let the child's run finish, so the child is idle. Don't archive it.
- 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, whichapps/server/src/ws.ts:1840turns on. SeeomitIdleSubagentShellsWithinapps/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:69says 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 mobilethreadFamiliescalls cover outbox delivery, search results and the older-settled shelf. relabelThreadLinks(packages/shared/src/threadLinks.ts) then usesunknownThreadLinkLabel, 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
- fix(mobile): links to finished subagent threads show their title and open #29494 fixes this report. It doesn't change the labeled
[label](<t3-thread://…>)form, which also needs fix(mobile): thread links written as [label](<t3-thread://…>) no longer turn into broken text #28476. Results for both are in a comment on fix(mobile): links to finished subagent threads show their title and open #29494. - Mobile: thread links written as [label](<t3-thread://…>) render as broken text #28473 is the separate broken-text bug for
[label](<t3-thread://…>). fix(mobile): thread links written as [label](<t3-thread://…>) no longer turn into broken text #28476 (open) stops the literal brackets and keeps the written label, but on its own the link still doesn't open when the title is missing. - Links to older settled threads show "Thread no longer available" #26467 has the same symptom for older settled threads. fix(web): links to older settled threads show their title #26472 (open) adds an on-demand family read on web, and its hook fires for any missing row, so it should cover idle children there too (read, not run). It doesn't touch mobile.
- fix(mobile): a thread link that can't be found shows as an unavailable chip, like web #28498 (open) shows an unavailable chip. It conflicts with fix(mobile): links to finished subagent threads show their title and open #29494 in
apps/mobile/src/state/entities.ts, and on its own it would still mark an existing idle child as unavailable. - [Bug]: Newly created running thread renders as “Thread no longer available” in iPhone message #27977 is the
matchAlllookup failure, which fix(mobile): thread links show their thread's title #26485 addresses for threads already in the store. This report is about idle children missing from the store.
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
heyitstarek commentedon Nov 3, 2026
Additional real-user observation on iPhone versus Windows desktop, reported 3 November 2026.
The same conversation renders thread references differently across clients:
Purrfect owner:lines, Windows displays that title as a teal thread link with an icon.Purrfect owner: Thread no longer available, without the named link.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_readcurrently 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:
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) andimage.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.
amihos commentedon Nov 4, 2026
Android occurrence, 4 November 2026. Desktop renders the same links correctly.
Environment
com.t3tools.t3code2.2.0 (versionCode 735, APK installed 30 October; OTA state unknown), OnePlus 7 Pro. Connected through the managed relay.0.1.7-nightly.20261103.4138.delegate_tasktoclaudeAgent/deepseek-v4.1-flash.What the data shows
<t3-thread://v2/<local envId>/thread:delegated-task:command%3Amcp%3A…%3Adelegate-task%3A…>. The environment ID is the server's own.orchestration_v2_projection_threads, are not archived or deleted, and havelineage.relationshipToParent: "subagent". They were created 8 and 13 seconds before the message.Two things that may be useful for #29494
omitIdleSubagentspath 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 HermesmatchAllproblem 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.subscribeShellat 15:07:20.742Z, thenorchestration.getThreadFamilyat 15:07:21.111Z, thenthread.visitandsubscribeThreadon the parent. Something on mobile does callgetThreadFamilyaround 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 (all127.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.
Blazenetic commentedon Nov 5, 2026
Additional occurrence reported on 5 November 2026, with user-confirmed mobile version and navigation impact.
Environment and impact
t3_environment_readand the running executable path.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_readsucceeded 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.
juliusmarminge commentedon Nov 9, 2026
Fixed by #32830 (23e3465ec6): mobile now reads metadata for unloaded threads and keeps scoped links navigable. Thanks for the detailed report!