Repository navigation
Conversation
Contributor
ApprovabilityVerdict: Not approved Macroscope's review found this PR not approvable — This PR adds a new mobile Stop action that can terminate background tasks after a turn settles, invoking an existing interrupt path with meaningful runtime effects. The change is localized and access-controlled, but the new user-facing capability warrants human review. You can add or adjust custom eligibility rules. Learn more. |
macroscopeapp
Bot
dismissed
their stale review
October 2, 2026 17:25
Dismissing prior approval to re-evaluate d8abb52
tris203
force-pushed
the
t3code/mobile-stop-background-work-1
branch
from
October 2, 2026 21:37
d8abb52 to
2e31bf9
Compare
macroscopeapp
Bot
dismissed
their stale review
October 2, 2026 21:38
Dismissing prior approval to re-evaluate 2e31bf9
tris203
force-pushed
the
t3code/mobile-stop-background-work-1
branch
2 times, most recently
from
October 7, 2026 13:51
f149308 to
4ddc3e3
Compare
tris203
force-pushed
the
t3code/mobile-stop-background-work-1
branch
from
October 8, 2026 18:14
4ddc3e3 to
98c205b
Compare
tris203
force-pushed
the
t3code/mobile-stop-background-work-1
branch
from
October 10, 2026 10:33
98c205b to
7c1360c
Compare
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
After a turn completes, background tasks can keep running while mobile has no way to stop them. Add a separate Stop action to the existing “Waiting on…” pill, preserving the composer draft.
Fixes #14655. Replaces #14661 with the requested interaction evidence. Rebased onto main at
c77a7b7eeb.V2 implementation
Use the existing
pendingBackgroundTasks/presentPendingBackgroundWorkmodel and its task labels. The thread-only shared interrupt command resolves the settled run with pending work and sends V2run.interrupt; no server, contract, or provider changes are needed.Stop is one more segment of the existing pill, built like the agents and queue segments beside it; the status label itself is unchanged from main. It is hidden when the client lacks the orchestration operate scope.
Pending behavior now matches V2 web: Stop is disabled as Stopping… while the interrupt request is pending. It becomes available after acceptance or failure if tasks remain visible; acceptance is not proof of termination. The pill disappears when the pending-task roster clears. This deliberately replaces the previous V1 implementation's “disabled until liveness clears” behavior.
Request state is scoped to the environment/thread and the individual request, so an older completion cannot clear a newer request. Only the separate Stop button interrupts work. Existing status priority, queue/agent/device controls, and foreground-turn Stop behavior are preserved. Long task labels truncate while Stop remains visible.
Approval and scope
Three mobile files. Web/desktop already provide this path. Shared iOS/Android code; native verification is Android/Claude only. Other providers retain their existing interrupt semantics. iOS and relay/tunnel were not device-tested.
Evidence
Current layout
Android 16 Pixel emulator against an isolated worktree-local server, on head
7c1360cd5f(main atc77a7b7eebplus this change). A real Claude Sonnet 4.6 session started each piece of background work and completed its turn.Command left running (
sleep 3600withrun_in_background=true). Tapping Stop ended thesleep, cleared the pill, and left the draft in place.running-stop.mp4
Work the agent is waiting on (a monitor described as "Evidence file ready"). The middle image is a frame from the recording below, taken while the interrupt was in flight.
bolt-stop.mp4
Connection without operate permission (paired with
orchestration:readonly). The pill names the running work and has no Stop segment.Not captured on the current layout: a failed interrupt and retry (see below), Stop alongside the queue, agents, or preview segments, and iOS.
Pending and failure behavior (earlier layout)
The material below was recorded before Stop became a pill segment. The Stop text sat in a separate label component then; the request handling it exercises is unchanged. The retry and failure states have not been re-recorded on the current layout.
Android 16 Pixel emulator, compatible current development client, V2 main plus this change. A fresh worktree-local
.t3and manufactured project/thread were created through server commands; no live user data was copied. A real Claude Sonnet 4.6 session startedsleep 3600withrun_in_background=true, completed its turn, and left a command inpendingBackgroundTasks. No separate runtime prerequisite patch was needed.22-second continuous recording, normal speed, with explanatory captions:
verification-v2.mp4
Original recording without captions.
A test-only WebSocket proxy rejects the first interrupt with
OrchestrationV2DispatchCommandError. On retry it forwards the real interrupt, holds the successful response and subscription updates separately, then releases each. This makes the transient states observable without modifying production code or fabricating task completion.enabled: falsein the native tree). The extra tap sends no new interrupt: count remains 2 total, including the rejected attempt.enabled: true) while the task roster is still held. This is the V2 web behavior.Keep this draft while stopping background work.stays unchanged.Checks
git diff --checkpassed.Implemented and verified with GPT-6-Astra through the Codex harness in T3 Code. Rebased, reworked to reuse the pill's segment UI, and re-verified with Opus 5.5 through the Claude Code harness in T3 Code.