Skip to content

fix(clients): a running session shows Working only while a turn is active - #267

Merged
rynfar merged 1 commit into
pylonfrom
fix/working-label-requires-turn
Sep 4, 2026
Merged

fix(clients): a running session shows Working only while a turn is active#267
rynfar merged 1 commit into
pylonfrom
fix/working-label-requires-turn

Conversation

@rynfar

@rynfar rynfar commented Sep 4, 2026

Copy link
Copy Markdown
Collaborator

Problem

Web and mobile both derive "Working" from session.status === "running" alone. A provider can report running between turns with nothing in flight (Claude's system/status, fixed server-side in #265), and when that happened the sidebar, the mobile thread list, and the mobile status pill all showed a pulsing "Working" for an idle thread. The same assumption leaked into two adjacent decisions: the "latest turn settled" helpers that gate Plan Ready treated any running session as unsettled, and the mobile composer switched its send button to "Queue follow-up" on running alone, while its sibling clear and remove conditions already required an active turn.

This is the client half of the incident from 2026-09-04: the thread that dropped the user's message sat in exactly this state for seven hours, labelled Working.

Fix

A running session is "working" only when it has an active turn. Applied to every derivation that used status alone:

  • web: resolveSidebarThreadStatus, resolveThreadStatusPill, isLatestTurnSettled
  • mobile: resolveThreadListV2Status, resolveThreadStatus, both settled helpers, and the composer's queue-follow-up condition

With no active turn the status falls through to the honest signals that already exist: background liveness (Delegating, Monitoring), Plan Ready, Completed, or nothing.

Surfaces walked: web sidebar and flat sidebar pill, mobile thread list and status pill, mobile composer. LegacySidebar and ChatView already required an active turn and are unchanged. Desktop wraps web.

Verification

  • Five new tests, each watched failing first, across Sidebar.logic.test.ts, session-logic.test.ts, threadListV2.test.ts, and threadPresentation.test.ts. One pre-existing mobile test asserted Working for a running session that named no turn; it now names one.
  • Web unit tests for the two files: 206 passed. Mobile tests for the two files: 49 passed.
  • vp run -F @t3tools/web typecheck and vp run -F @t3tools/mobile typecheck: clean. vp fmt --check and vp lint on all touched files: clean.

Companion PRs: #264, #265, #266 fix the server side of the same incident.

Model: Claude Fable 5.1. Harness: Pylon (Claude Code provider).


View with [code]smith Autofix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need. Autofix is disabled.

@github-actions github-actions Bot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:S labels Sep 4, 2026
@rynfar
rynfar merged commit f839aea into pylon Sep 4, 2026
17 checks passed
@rynfar
rynfar deleted the fix/working-label-requires-turn branch September 4, 2026 17:48
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:S 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