Skip to content

fix(sidebar): show Input for every pending question, including async ones - #57

Merged
alexcstark merged 1 commit into
mainfrom
stark/async-question-input
Oct 9, 2026
Merged

alexcstark merged 1 commit into
mainfrom
stark/async-question-input

Conversation

@alexcstark

Copy link
Copy Markdown
Owner

Problem

When Codex asks a question without stopping (delivery: "async", stored as a message-mode runtime request), the sidebar, status pill, and mobile thread list kept showing Working for as long as the run continued. The question was only visible inside the thread. In practice this hid real decisions (e.g. a position-sizing question) behind a long "Working 19m" badge, while the agent kept going on a guess.

#53 made blocking (live) questions show Input during a running turn, but deliberately left async ones on Working (upstream pingdotgg#15258).

Fix

An unanswered question now always wins over Working: hasPendingUserInput alone decides Input (approvals still outrank it). That makes the response-capability distinction unnecessary on clients, so this also removes the plumbing #53 added for it:

  • packages/client-runtime: delete threadHasBlockingPendingUserInput and the pendingUserInputResponseCapability shell field; isThreadWorking no longer folds threads with a pending question into the Working section.
  • apps/web Sidebar.logic.ts and apps/mobile threadListV2.ts: check hasPendingUserInput directly.
  • packages/contracts / apps/server ProjectionStore.ts / apps/mobile use-thread-selection.ts: drop the optional responseCapabilityType from the pending-request shell summary (it was fork-only and only fed this rule; it was optionalKey, so older peers are unaffected).

Net: 20 insertions, 242 deletions. The agent still keeps running on async questions; only the label changes.

Verification

  • vp test run on entities.test.ts, Sidebar.logic.test.ts, threadListV2.test.ts, ProjectionStore.test.ts: 305 passed. Tests that asserted Working for a pending question during a live run now assert Input / Awaiting Input; they passed with the opposite expectation on main.
  • tsc --noEmit clean for contracts, client-runtime, web, mobile, server. Lint: no new warnings.
  • Not verified in a running client.

🤖 Generated with Claude Code (Opus 5.5)

@github-actions github-actions Bot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:M labels Oct 9, 2026
@alexcstark
alexcstark merged commit de96f28 into main Oct 9, 2026
23 checks passed
@alexcstark
alexcstark deleted the stark/async-question-input branch October 9, 2026 17:50
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

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