feat(mobile): show when an existing thread has a message waiting in the outbox#10405

merged3
t3code/queue-with-uploads
t3code/queued-thread-indicator
openedSep 6, 2026byJJulius Marminge
View on GitHubTwo-way sync enabledPR last imported 4d ago

Stacked on #10404.

Existing threads with messages in the mobile outbox were invisible from the thread list, and settled threads could remain hidden in history. Show a 12-point outbox icon beside the normal status or timestamp, without adding a pill, subtitle, count, or row height. The icon remains visible while a thread is working, awaiting approval/input, or showing an error.

Both the default and legacy lists use the same icon, including Home and the iPad sidebar. Screen readers announce queued messages. Android maps the SF Symbol to its upload icon. The outbox-derived thread keys keep settled threads active, retain older threads in the legacy list, and keep reorder planning in sync. Delivery or deletion removes the indicator.

The icon describes this device's unsent outbox. Once connected, messages can send while an agent is working and steer the turn; this does not indicate a provider-side queue or promise to wait until the turn finishes.

Verification: 82 focused tests passed across threadListV2.test.ts, homeThreadList.test.ts, and thread-order.test.ts. Mobile typecheck passes. Targeted lint reports only two existing dependency warnings in thread-list-v2-items.tsx.

These iPhone 17 Pro screenshots render the actual native row components with controlled fixtures: idle, working, approval, input, and failed with queued messages, then working and idle without queued messages. They verify presentation, not end-to-end delivery. Android and iPad were checked in code, not on a device. Before is the original text indicator in this PR; after is the compact icon.

Model: GPT-6 · Harness: Codex in T3 Code

Synced from GitHub

Thread transfer impact

✅ Thread transfer remains within every enforced ceiling.

ℹ️ No successful main baseline artifact is available yet. This run establishes the initial measurement.

ProviderMetricMain baselineThis PRImpactPR ceiling
CodexTotal thread wire—13.6 KiB—15.1 KiB✅
CodexThread snapshot wire—7.0 KiB—7.3 KiB✅
CodexLive turn WebSocket wire—6.5 KiB—7.8 KiB✅
CodexLive turn WebSocket decoded—57.0 KiB—66.4 KiB✅
CodexLive turn messages—8—21✅
ClaudeTotal thread wire—13.6 KiB—15.1 KiB✅
ClaudeThread snapshot wire—7.0 KiB—7.3 KiB✅
ClaudeLive turn WebSocket wire—6.5 KiB—7.8 KiB✅
ClaudeLive turn WebSocket decoded—57.8 KiB—66.4 KiB✅
ClaudeLive turn messages—9—21✅

Baseline: unavailable · PR result: a177efd · Source CI: success

Scenario and decoded snapshot size

10 historical turns, 5 command tools per turn, 878.9 KiB retained MCP result per historical turn, and a 1.05 MiB retained result in the measured turn.

  • Codex decoded thread snapshot: 113.9 KiB
  • Claude decoded thread snapshot: 114.6 KiB

Updated in place by a trusted workflow. PR artifacts are strictly validated and never executed.

Added 1 commit

  • feat(mobile): show when an existing thread has a message waiting in the outboxef21dce
Synced from GitHub

Bugbot is paused — on-demand spend limit reached

Bugbot uses usage-based billing for this team and has hit its on-demand spend limit.

A team admin can raise the spend limit in the Cursor dashboard, or wait for the next billing cycle to continue.

Synced from GitHub

Approvability

Verdict: Not approved

Macroscope's review found this PR not approvable — The mobile outbox state now changes default thread visibility, settled/active partitioning, reorder planning, and row accessibility/iconography across both list implementations. Focused tests and the absence of schema or server changes reduce risk, but the automatic behavior spans multiple runtime surfaces rather than being a self-contained UI tweak.

Not approved because:

  • Monthly spending limit reached (workspace setting). Approvability relies on correctness review in order to determine eligibility

Review your spending limits in Billing settings. You can add or adjust custom eligibility rules. Learn more.

Added 2 commits

  • test(mobile): mock the outbox atom in the thread-order suite0a32f09
  • fix(mobile): use a compact icon for queued follow-upsa177efd