Conversation
…s the turn
The server already reports backgroundLiveness on the thread shell and the web
sidebar reads it, but mobile resolved status from the parent session only. A
thread whose turn settled while subagents or watch loops kept running looked
idle in the list and in the open thread.
Map backgroundLiveness in resolveThreadListV2Status ("working" -> Working,
"monitoring" -> Monitoring) after approval, input, running, and error, and add
a background variant to the floating status pill in the open thread. No
contract or server change.
Fixes pingdotgg#10372
Fixes pingdotgg#4962
Co-authored-by: Guillermo Casanova <guillermo.casanova.b@gmail.com>
ApprovabilityVerdict: Approved at Macroscope's review found this PR approvable — This is a small, self-contained mobile UI bug fix that surfaces an existing background-liveness state in the thread list and open-thread status pill. It preserves existing status precedence, adds focused coverage, and introduces no schema, server, default, or production-workflow changes. Notes:
You can add or adjust custom eligibility rules. Learn more. |
|
Navigate logical layers of code changes, visualize relationships, and explore their blast radius. No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Repository: pingdotgg/t3code/.coderabbit.yaml Review profile: CHILL Plan: Advanced Run ID: 📒 Files selected for processing (6)
Included review availability: This review used your included allowance. Your plan provides up to 10 included reviews per hour; 9 remain after this review. 📝 WalkthroughWalkthroughMobile thread-list and open-thread status handling now includes background liveness. The list resolves and labels monitoring after higher-priority statuses. The open-thread floating status displays Monitoring or Working, with an activity indicator for Working. ChangesBackground status presentation
Priority: ➖ Normal Estimated code review effort: 2 (Simple) | ~10 minutes Change: Bug fix · Severity of issue fixed: Medium Suggested reviewers: Merge Risk: ⚪ Minimal · up to The mobile thread list and open thread now distinguish Working from Monitoring. No actionable merge-blocking risk is established; merge after normal checks. 🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
kvnloo
left a comment
There was a problem hiding this comment.
This is the right projection boundary: mobile consumes the existing canonical backgroundLiveness instead of inventing a second task-liveness model. The precedence matrix is the important part — approvals/input/active session/error stay authoritative, then settled-parent background work can project Working / Monitoring. That should also keep iOS and Android behavior aligned because the state owner is shared.
Dismissing prior approval to re-evaluate 3d3d072
|
Thanks for working on this. We merged the orchestrator V2 rewrite in #2829, and we are closing this PR as part of that transition. This PR adds mobile backgroundLiveness handling for the old thread shell. V2 replaced that shell and background-work presentation. Verify the current mobile behavior before refiling. Sorry for the extra work this creates. If the change is still needed on V2, please rebuild it on current main, verify it there, and open a new PR linking back here. We're closing the current implementation without assuming the underlying request is resolved. |
What Changed
Mobile now reads
thread.backgroundLiveness, the field the server already puts on the thread shell and the web sidebar already uses:resolveThreadListV2Statusmaps"working"to Working and"monitoring"to Monitoring. Approval, input, a running/starting session, and error still take priority, as they do inresolveThreadStatusPillon web.backgroundvariant: Working with the activity indicator, or Monitoring with no spinner (calm, like the web pill). It only shows when there is no active turn to time.No contract, server, or schema change. 6 files, +92/-6, about half of it tests.
This is the fix suggested in the triage on #10372, ported from #10436 by @Gigioxx (credited as co-author). #10436 no longer applies after #13183 retired the legacy list and
threadPresentation.ts, so this version touches only the v2 list and the open-thread pill.Fixes #10372
Fixes #4962
Why
The parent turn settles as soon as the agent fans work out to background subagents, so mobile showed the thread as idle while the subagents were still running for minutes. The desktop sidebar shows Working for exactly this case since #5219. From the phone, the thread read as finished or dead when the correct answer was "working" (see the reports on #4962 and #10372, on iOS and on two Android devices).
UI Changes
iOS Simulator (iPhone 17 Pro Max), the repo's own showcase fixture (
scripts/mobile-showcase.ts). Both threads have a completed parent turn and areadysession. For the capture only, the server was patched locally to reportbackgroundLivenessfor them (workingfor "Make remote coding feel local",monitoringfor "Make boot logs oddly beautiful"). That patch is not part of this PR. Same fixture and same server patch for both columns; only the mobile code differs.Thread list: on
mainthe rows show only a timestamp, so the thread reads as finished.Open thread: "Worked for 2m" says the turn ended; after the fix the floating pill still shows Working while subagents run.
Verification
threadListV2.test.ts: new cases for settled turn +working/monitoring/null, and for approval, input, running, starting, and error keeping priority over both liveness values. The first case fails onmainand passes with the fix (89/89).tsc --noEmitinapps/mobile: clean.vp fmt --check: clean.vp lint: no new warnings in the touched files (28 before, the same 28 after).Checklist
🤖 Generated with Claude Code
Summary by CodeRabbit