Repository navigation
[Bug]: Stop does nothing on a "Running" banner for a command the server already finished #18188
Description
Activity
Note
Grok responding on behalf of Julius.
Needs a reload check before we keep this open as its own bug.
Stop's silent no-op is confirmed on
main:interruptThreadTurnre-fetches boundedgetThreadProjection(75 items) and returns{ sequence: 0 }whenderivePendingBackgroundWorkfinds nothing — matching your 11× projection / 0×run.interrupttrace. The banner comes from the client'sturnItems; a warm cache resumes viaafterSequencewithout an HTTP replace, so with emptyorchestration_v2_eventsa stalerunningitem outside the window can stick.Not a duplicate of #16586 yet (there the command is still live on the server; pinning active work into the snapshot would not clear a DB-
completeditem). Not #15124 (waiting/checkpoint). #15993/#16749, #18163, #15239, #16355 are server-stuck/roster/settle; your server state is clean.Reply yes/no: (1) does a full app reload clear the banner? (2) does a fresh client (or cleared thread cache) still show it? If reload clears it, the Stop half belongs under #16586; if it survives, this is a distinct durable desync.
- addedneeds more infoInitial triage showed no bug. Awaiting more infoInitial triage showed no bug. Awaiting more info
on Oct 11, 2026 Thanks. I could answer both questions, and I found the cause.
-
Does a full app reload clear the banner? No. I pressed Stop once first
and it did nothing. Then I did Ctrl+R: the banner came back, and Stop
still did nothing. -
Does a fresh client still show it? No. Opening the same thread on a
second client (Android, self-built nightly APK) shows no running task.
Cause: the first client's saved copy of the thread. In that client's
IndexedDB (database t3code:connection-runtime, store thread, key
<environmentId>:<threadId>), the command's turn item is stored as
status "running" with completedAt null. The server's state database has the
same item as "completed" (completedAt 2026-10-11T01:33:07.826Z, 4 seconds
after it started). Deleting that thread's saved entry and reloading made
the banner go away.So the banner shows a stale saved item, and Stop cannot fix it. Stop
re-fetches the bounded server projection, finds no pending work and returns
without dispatching run.interrupt (no run.interrupt in the server trace for
this thread). Nothing sends the client a correction, so the saved copy keeps
the item as running. It comes back after a reload because the reload resumes
from the saved copy.Still not known: how the saved copy missed the completion. The server's
event log has no rows for this thread, so the missed update can't be
replayed.-
What happened
A Claude thread shows "Running: python3 -m venv … && pip install -q pyarrow … python -c …" above the composer with a Stop button. The command was an ordinary Bash call that took 4 seconds and finished normally about nine hours ago. Nothing is running on the machine. Pressing Stop (several times) does nothing and the banner stays.
Diagnosis
The server and the banner disagree about this command, and Stop cannot reconcile them.
completed(startedAt 01:33:03.699Z, completedAt 01:33:07.826Z). The provider thread'spendingBackgroundTasksis[]. The thread has nocommand_execution,dynamic_toolorsubagentitem in a non-terminal state, andpsshows no matching process. The Claude transcript holds the tool result 4 seconds after the call.ChatViewcallsderivePendingBackgroundWorkonserverProjection.turnItems, so the client still holds this item as running. The item sits far outside the bounded snapshot: 1,398 of the thread's 1,783 turn items are newer.interruptThreadTurnre-fetchesgetThreadProjection(bounded, 75 items), runsderivePendingBackgroundWork, finds nothing, and returns{ sequence: 0 }without dispatchingrun.interrupt. In the server trace, 11getThreadProjectionrequests for this thread land within 04:24:08–04:24:11 MDT, which matches when Stop was pressed. The only commands dispatched for the thread arethread.visit,message.dispatchand pull-request link/sync; there is norun.interrupt. By the code, no error is raised in this case, so the button just returns to "Stop".runningis not determined.orchestration_v2_eventshas 0 rows for this thread, so a missed completion cannot be replayed from it.Relation to open reports. #16586 is the same silent no-op in Stop, but there the command really was running. Its proposed fix (find active commands in the full projection, or pin them into the snapshot) would not help here: the server item is
completed, so there is nothing to find, and nothing sends the client a correction. #15993 and #16749 cover items stuckrunningon the server, and #18163 covers a provider roster that is not cleared; neither applies, because the server state here is already clean.Steps to reproduce
Not reduced to a deterministic repro. What was observed: a Claude thread with 69 runs and 1,783 turn items, one ordinary Bash call that ran for 4 seconds in an early run, and a Running banner for it that never cleared. Not yet tested: whether reloading the app clears the banner, and whether a fresh client shows it.
Version
t3 v0.0.46-nightly.20261011.2955 (server); code read at main 1f6df6b
Environment
Linux 7.2.9 (WSL2, x86_64); T3 Code server nightly as above (client app version not recorded); claudeAgent, claude-sonnet-5-5
Evidence
Related issues
#16586 (same silent no-op, but the command was really running), #15993, #16749, #18163. Not a duplicate: here the server already says completed, so fixing how Stop finds running work would leave this banner in place.
Fix applied or workaround
None found. Stop does not clear it. Not tried: reloading the app.
Filed by
claude (claude-sonnet-5-5) in Claude Code, run inside T3 Code