fix(ui): prevent false busy state in Control UI webchat#91606
Conversation
- Added showLocalAbortableUi to gate busy UI on actual stream activity - Only show in-progress badge and Stop button when there is active stream or sending - Added e2e test for stale session state not forcing busy UI - Added unit tests for idle composer with stale session state and active stream Fixes openclaw#87387
|
Codex review: needs real behavior proof before merge. Reviewed June 30, 2026, 4:53 PM ET / 20:53 UTC. Summary PR surface: Source +3, Tests +128. Total +131 across 3 files. Reproducibility: yes. at source level: current main still lets combined Review metrics: 1 noteworthy metric.
Root-cause cluster Members:
Proposal only: this assessment does not dispatch repair, suppress jobs, mutate sibling items, close, or merge anything. Merge readiness Overall follows the weaker of proof and patch quality, so missing proof can cap an otherwise strong patch. Rank-up moves:
Proof guidance:
Proof path suggestion Risk before merge
Maintainer options:
Next step before merge
Security Review findings
Review detailsBest possible solution: Rebase and repair the Control UI split so session-list-only stale rows do not drive composer busy UI, while genuine local active runs still keep Stop, Queue, and Steer available; then provide redacted real browser/gateway proof. Do we have a high-confidence way to reproduce the issue? Yes, at source level: current main still lets combined Is this the best way to solve the issue? No. Splitting session-list-only abortability from visible composer state is the right direction, but Full review comments:
Overall correctness: patch is incorrect AGENTS.md: found and applied where relevant. Codex review notes: model internal, reasoning high; reviewed against 9f07b21e6231. Label changesLabel justifications:
Evidence reviewedPR surface: Source +3, Tests +128. Total +131 across 3 files. View PR surface stats
What I checked:
Likely related people:
What the crustacean ranks mean
Shiny media proof means a screenshot, video, or linked artifact directly shows the changed behavior. Runtime, network, CSP, and security claims still need visible diagnostics. How this review workflow works
Review history (1 earlier review cycle)
|
Summary
Fixes #87387: Control UI webchat could keep showing a false "In progress" status and "Stop" button after the assistant response completed because the main composer consumed session-list abortability even when local send/stream state was idle.
Changes
ui/src/ui/views/chat.ts.sending || stream !== null).Real behavior proof
Behavior addressed: Control UI webchat no longer shows a false
In progressbadge,Stopbutton, or queue steer affordance after response completion when only stale session-list active-run state remains.Real environment tested: Local OpenClaw checkout on rebased PR head
f3d079672376a36eee90452d2a6f7d947d87234c, mocked Control UI Gateway E2E in Chromium, Node/Vitest throughscripts/run-vitest.mjs.Exact steps or command run after this patch:
Evidence after fix:
Observed result after fix: Unit regression fails on the old behavior, then passes with the split. The mocked browser flow sends a WebChat message, receives the final assistant event, waits for the done status to clear, injects stale
sessions.changedactive-run state, and confirms noIn progress, noStop generating, noQueue message, with the composer back onSend message.What was not tested: Broad remote
pnpm check:changeddid not run locally. The delegated Testbox path failed before execution because.github/workflows/crabbox-hydrate.ymldoes not contain a Testbox step, and direct AWS Crabbox is not configured in this environment (crabbox login --url https://crabbox.openclaw.ai --provider awsrequired). Fresh PR CI was triggered by the push tof3d079672376a36eee90452d2a6f7d947d87234c.AI Assistance
This PR was originally created with AI assistance (iCodemate). Maintainer follow-up added regression and mocked browser proof.