Skip to content

[Bug]: Mobile thread list doesn't show Waiting, Woke, or Working time like the web sidebar #15712

Closed

Description

@nekohasekai

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

Connect web and the iOS app to the same server, then create three threads:

  1. Waiting: in a Claude thread, ask the agent to start a Monitor (for example, watch for a file that does not exist yet) and end its turn. The web sidebar shows Waiting.
  2. Woke: snooze a finished thread for one minute (Snooze → Custom… → 1 minute) and let it wake. The web sidebar shows Woke.
  3. Working: in a Codex thread, ask the agent to run sleep 1800 and wait for it. The web sidebar shows Working with the elapsed time.
  4. Open the thread list on mobile. The iPhone Home list and the iPad sidebar use the same row component.

The screenshots below were taken at the same moment from an isolated dev server and a demo project.

Expected behavior

Each mobile row shows the same status as the web sidebar: Waiting, Woke (until the user opens or dismisses it), and Working with the elapsed time.

Actual behavior

Thread Web sidebar Mobile list
Monitor for Restock Completion Waiting Blank: no status and no time
Run Inventory Sync in Background (woke from snooze) Woke Only the relative time ("21m"), like any idle thread
Wait for Checkout Load Test Working 14m Working, without the elapsed time

A thread that wakes from snooze goes back to its original position in the list, so on mobile nothing tells the user it came back. A thread with live background work looks like a row that failed to render.

Investigation (source at 4ee6bfd)

  • Waiting: resolveThreadListV2Status returns "waiting" when the runtime is parked at idle by background work that will wake the agent (a monitor or subagent), but the row's STATUS_LABEL_BY_STATUS table has no waiting entry. The time label is also hidden for every card whose status is not ready, so the slot is empty. Open PR fix(mobile): waiting threads show their status in the thread list #14947 adds the missing entry.
  • Woke: web derives the wake time with threadWokeAt from client-runtime and renders the Woke label from it. Mobile never calls threadWokeAt, so it has no Woke state.
  • Working duration: web renders WorkingDuration next to the Working label; the mobile row renders only the label.

Source references:
https://github.com/pingdotgg/t3code/blob/4ee6bfd50e/apps/mobile/src/features/threads/threadListV2.ts#L200-L202 ;
https://github.com/pingdotgg/t3code/blob/4ee6bfd50e/apps/mobile/src/features/threads/thread-list-v2-items.tsx#L65-L73 ;
https://github.com/pingdotgg/t3code/blob/4ee6bfd50e/apps/mobile/src/features/threads/threadListV2.ts#L464-L468 ;
https://github.com/pingdotgg/t3code/blob/4ee6bfd50e/packages/client-runtime/src/state/threadSettled.ts#L185 ;
https://github.com/pingdotgg/t3code/blob/4ee6bfd50e/apps/web/src/components/Sidebar.tsx#L1241-L1244 ;
https://github.com/pingdotgg/t3code/blob/4ee6bfd50e/apps/web/src/components/Sidebar.tsx#L1299-L1304 ;
https://github.com/pingdotgg/t3code/blob/4ee6bfd50e/apps/web/src/components/Sidebar.tsx#L335-L345

Related reports checked

#14947: open PR that fixes the Waiting label only. #10372: iOS did not show Monitoring; it was closed because V2 maps that state to Waiting on both clients, but the mobile row still has no Waiting label. No existing issue covers Woke or the Working duration on mobile.

Impact

Minor bug or occasional failure

Version or commit

Reproduced at 4ee6bfd (server reports 0.0.45); unmodified mobile, web, and server checkout.

Environment

iOS 26.5 Simulator (iPhone 17 Pro); web in Chrome 154; macOS 27.0.1 (26A434), Apple Silicon; local isolated dev server over loopback; Node 26.9.0; Claude 2.1.289 / Claude Sonnet 5.5 (Waiting thread); Codex 0.160.0 / GPT-6-Astra (Working thread). Android not tested.

Logs or stack traces

No response

Screenshots, recordings, or supporting files

Same server, same moment, isolated demo data only:

Web sidebar Mobile thread list
Web sidebar showing Working 14m, Waiting, and Woke Mobile thread list showing Working without time, a blank Waiting row, and 21m instead of Woke

Workaround

No response

Activity

  1. juliusmarminge commented on Oct 4, 2026

    @juliusmarminge
    Member

    Note

    Grok responding on behalf of Julius.

    Triage

    Thanks for the side-by-side screenshots and the source pointers, @nekohasekai. They made this quick to confirm.

    What I found

    I checked current main (4ee6bfd50e). All three cases use the same status slot on ThreadListV2Row, which the iPhone Home list and the iPad sidebar share. Android uses the same component, so it most likely has the same gaps.

    • Waiting: resolveThreadListV2Status already returns "waiting", but STATUS_LABEL_BY_STATUS has no waiting entry. resolveThreadListV2ItemTimeLabel also clears the timestamp for every card that isn't ready, so the slot ends up empty.
    • Woke: web passes threadWokeAt into the sidebar and shows Woke until the visit watermark catches up. Mobile never calls threadWokeAt, so a woken thread just shows its relative time.
    • Working time: web renders WorkingDuration, counting from resolveThreadWorkingStartedAt. The mobile row shows only Working. The open thread already has a WorkingTimer, but the list doesn't have one, and its format is different from the sidebar's.

    Open PR #14947 adds only the Waiting label, so Woke and the working time would still be missing after it lands. #10372 covered the V1 Monitoring label and can stay closed.

    Likely fix area

    Some options:

    • One status slot in thread-list-v2-items.tsx / threadListV2.ts that mirrors resolveSidebarV2TopStatus: Waiting (as in fix(mobile): waiting threads show their status in the thread list #14947), Woke from an unacknowledged threadWokeAt, and Working plus the elapsed time.
    • Keep the elapsed label ticking inside its own component, like web's WorkingDuration, so the row isn't rebuilt every tick.

    A maintainer will decide on the fix direction.

  2. added
    bugSomething is broken or behaving incorrectly.
    via-triageFiled through npx t3 triage
    on Oct 4, 2026
  3. jlipworth commented on Oct 6, 2026

    @jlipworth

    Also seeing this on iOS 2.0.0 (109) with Claude Opus 5.5 threads. The parent's turn ends while background subagents keep running, and the row shows only its timestamp, like an idle thread. Opening it shows the "Waiting on…" pill. Root cause matches: STATUS_LABEL_BY_STATUS in thread-list-v2-items.tsx:65 has no waiting entry. Closed #16464 as a duplicate of this.

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