Skip to content

[Bug]: Mobile: a follow-up the server queues disappears from the thread until its run starts #25282

Closed as not planned

Description

@jason5545

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. On mobile, open a thread with an active turn.
  2. Send a follow-up that the server queues instead of steering. Two ways to get there:
    • Settings → Follow-ups set to Queue, then send while the turn runs.
    • With the default (Steer), send while the active run is still starting, between provider turns, or running /compact. resolveDeliveryIntent in apps/server/src/orchestration-v2/CommandPolicy.ts queues auto follow-ups in those cases (queue_after_active).
  3. Watch the feed after the send is accepted.

Expected behavior

The follow-up stays in the feed, marked as queued, until its run starts. Web keeps the queued text visible in QueuedRunsControl above the composer.

Actual behavior

The message shows as Pending, then disappears from the feed once the server accepts it. The only trace is the count on the floating working control; the text is visible only after opening the queue sheet. It reappears when its run starts. During a long turn it looks like the message was swallowed.

As far as I can trace it on main @ f88b33a:

  • A queued run's user message has no turn item until the run starts, so the feed built by deriveThreadFeedPresentation does not include it.
  • appendPendingThreadMessages (apps/mobile/src/features/threads/pending-thread-feed.ts) shows the outbox copy only while the outbox holds it, and the outbox drops it once the send succeeds.
  • Mobile reads the server queue only for the count and the sheet (ThreadQueueControl.tsx, floating-working-control.tsx).

Impact

Minor bug or occasional failure

Version or commit

main @ f88b33a (code trace). Seen on a fork build based on 0b42aa9.

Environment

Android app built from source, connected over Tailscale to a Linux x64 server.

Workaround

Open the queue sheet from the floating control to see the message.

For reference, our fork appends each queued run's message after the presented feed, labelled Queued in place of its time, unless the feed already shows it: jason5545@8722a86cb1 (with a test).

Activity

  1. juliusmarminge commented on Nov 12, 2026

    @juliusmarminge
    Member

    I tried to reproduce this on the current build and could not.

    On origin/main 2ed6f10: started an isolated dev server (T3CODE_DEV_SEED=0 vp run dev --host 0.0.0.0, fresh database) and Metro (apps/mobile vp run dev:client). Added a demo git project and started a Replay (dev) thread with the 'question' scenario via node apps/server/src/bin.ts thread start --provider devReplay --model question; thread show confirmed it stays running, waiting for an answer, so it is an active turn to send a follow-up into. (The 'approval' scenario auto-completes in full-access mode.) vp run mobile:install android --prepare and ios --prepare both found cached clients. Leased a Pixel 9 twice and an iPhone 18 Pro once from the device pool. Each time simlock ended the lease ('UNAUTHORIZED: lease ended by simlock') or the daemon reported 'Remote daemon is unavailable' while vp run mobile:install --session was installing the dev client, so the app never ran on a device. Planned next steps were: pair, set Settings → Follow-ups to Queue, open the running thread, send a follow-up, and watch the feed. Code on main matches the report: ThreadFeed.tsx passes only outbox messages to appendPendingThreadMessages; selectPendingAcknowledgedMessages (use-thread-composer-state.ts) drops an acknowledged message once the server queue holds it; nothing adds server-queued runs to the feed.

    Closing as not planned. If it still happens for you, reply with the exact steps and the version you are on and it will be looked at again.

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