Skip to content

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

Merged
juliusmarminge merged 3 commits into
t3code/queue-with-uploadsfrom
t3code/queued-thread-indicator
Sep 6, 2026
Merged

feat(mobile): show when an existing thread has a message waiting in the outbox#10405
juliusmarminge merged 3 commits into
t3code/queue-with-uploadsfrom
t3code/queued-thread-indicator

Conversation

@juliusmarminge

@juliusmarminge juliusmarminge commented Sep 6, 2026

Copy link
Copy Markdown
Member

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.

Default list: before Default list: after
Before: text on idle rows and no queue indicator alongside live states After: outbox icon alongside timestamps and every live status
Legacy list: before Legacy list: after
Before: Pending pill and Sends on reconnect subtitle After: small outbox icon with no queue pill or subtitle

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

@github-actions github-actions Bot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:L 100-499 changed lines (additions + deletions). labels Sep 6, 2026
@github-actions

github-actions Bot commented Sep 6, 2026

Copy link
Copy Markdown
Contributor

Thread transfer impact

✅ Thread transfer remains within every enforced ceiling.

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

Provider Metric Main baseline This PR Impact PR ceiling
Codex Total thread wire 13.6 KiB 15.1 KiB
Codex Thread snapshot wire 7.0 KiB 7.3 KiB
Codex Live turn WebSocket wire 6.5 KiB 7.8 KiB
Codex Live turn WebSocket decoded 57.0 KiB 66.4 KiB
Codex Live turn messages 8 21
Claude Total thread wire 13.6 KiB 15.1 KiB
Claude Thread snapshot wire 7.0 KiB 7.3 KiB
Claude Live turn WebSocket wire 6.5 KiB 7.8 KiB
Claude Live turn WebSocket decoded 57.8 KiB 66.4 KiB
Claude Live 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.

…he outbox

A follow-up queued offline for an existing thread was invisible from the
thread list: the row looked idle and, if the server had settled the
thread, sat collapsed in the Settled shelf. Only opening the thread showed
"1 queued message will send automatically".

Threads with a queued message now read "Sends on reconnect" in the v2
status slot (same wording as a queued new task) and a neutral "Pending"
pill with the same subtitle in the v1 grouped list. A settled thread with
queued work is pulled back into the active block, and the v1 recency
window never trims it. Reorder planners see the same active set so Move
up/down stays consistent. Live states (approval, input, working, failed)
still outrank the queued one.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@juliusmarminge
juliusmarminge force-pushed the t3code/queued-thread-indicator branch from a586c0d to ef21dce Compare September 6, 2026 22:25
@cursor

cursor Bot commented Sep 6, 2026

Copy link
Copy Markdown
Contributor

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.

@macroscopeapp

macroscopeapp Bot commented Sep 6, 2026

Copy link
Copy Markdown
Contributor

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.

juliusmarminge and others added 2 commits September 6, 2026 15:52
The pending-order refresh now reads queuedThreadKeysAtom, whose module
reaches expo storage. The suite already mocks its other native-backed
inputs; give this one the same treatment.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@juliusmarminge
juliusmarminge merged commit d6aa179 into main Sep 6, 2026
26 checks passed
@juliusmarminge
juliusmarminge deleted the t3code/queued-thread-indicator branch September 6, 2026 23:40
BarretoDiego pushed a commit to BarretoDiego/t3code that referenced this pull request Sep 7, 2026
…he outbox (pingdotgg#10405)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
github-actions Bot added a commit to omarcresp/t3code-flake that referenced this pull request Sep 7, 2026
## What's Changed
* fix(clients): show feedback results in composer banners by @juliusmarminge in pingdotgg/t3code#10398
* fix(server): stop Windows terminal polling from spiking CPU by @UtkarshUsername in pingdotgg/t3code#9476
* fix(web): onboarding installs agents without needing Node or npm by @t3dotgg in pingdotgg/t3code#10402
* fix(server): allow settling threads with unanswered async questions by @t3dotgg in pingdotgg/t3code#10400
* feat(ci): ship stable releases from the latest nightly commit by @t3dotgg in pingdotgg/t3code#10410
* feat(marketing): add a nightly channel to the download page by @t3dotgg in pingdotgg/t3code#10408
* fix(web): keep settings inputs focused during IME composition by @Lucenx9 in pingdotgg/t3code#10262
* fix(server): preserve Codex reset credits during usage updates by @yashranaway in pingdotgg/t3code#10308
* docs: link the repository security reporting policy by @yashranaway in pingdotgg/t3code#10303
* fix(web): only show auto balance errors after failed checks by @maria-rcks in pingdotgg/t3code#10407
* fix(web): improve preview recording frame delivery by @maria-rcks in pingdotgg/t3code#10403
* fix(server): preserve inline provider secrets on redacted saves by @maxwellyoung in pingdotgg/t3code#10054
* fix(web, mobile): replace Apple desktop machine labels by @extoci in pingdotgg/t3code#10396
* fix(web): hide browser when the right panel starts closing by @Neel2107 in pingdotgg/t3code#10385
* fix(web): keep settings section headings description-free by @maria-rcks in pingdotgg/t3code#10415
* fix(usage): read and redeem hub reset credits through CLIProxyAPI by @juliusmarminge in pingdotgg/t3code#10395
* fix(web): deduplicate expanded tool labels and keep errors expandable by @Yash-Singh1 in pingdotgg/t3code#10420
* fix(server): skip git status scans while the index is locked by @Gigioxx in pingdotgg/t3code#9845
* fix(mcp): allow text-only preview snapshots by @juliusmarminge in pingdotgg/t3code#10232
* fix(claude): name the expired login or usage limit instead of a generic API error by @vitalyiegorov in pingdotgg/t3code#10321
* feat(mobile): queue a message while its attachment is still uploading by @juliusmarminge in pingdotgg/t3code#10404
* feat(mobile): show when an existing thread has a message waiting in the outbox by @juliusmarminge in pingdotgg/t3code#10405
* fix(codex): accept misalignment policy errors on thread resume by @realbakari in pingdotgg/t3code#10373
* fix(server): skip disabled settlement lookups by @t3dotgg in pingdotgg/t3code#10424
* fix(server): run OpenCode CLI commands sequentially by @t3dotgg in pingdotgg/t3code#10427
* feat(web): name the drop action while dragging sidebar threads by @SunkenInTime in pingdotgg/t3code#10378
* perf(web): keep the sidebar responsive during bulk thread updates by @t3dotgg in pingdotgg/t3code#10413
* fix(web): onboarding wizard now supports light mode by @t3dotgg in pingdotgg/t3code#10432
* feat(threads): dismiss async questions without replying by @t3dotgg in pingdotgg/t3code#10431
* fix(web): stop collapsing the composer when it loses focus by @t3dotgg in pingdotgg/t3code#10437
* fix(server): keep interrupted threads resumable after restarts by @maria-rcks in pingdotgg/t3code#10421

## New Contributors
* @Neel2107 made their first contribution in pingdotgg/t3code#10385
* @realbakari made their first contribution in pingdotgg/t3code#10373

**Full Changelog**: pingdotgg/t3code@v0.0.39-nightly.20260906.1316...v0.0.39-nightly.20260907.1325

Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.39-nightly.20260907.1325
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:L 100-499 changed lines (additions + deletions). vouch:trusted PR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant