fix(ui): prevent false busy state in Control UI webchat after response completion#87474
fix(ui): prevent false busy state in Control UI webchat after response completion#87474bladin wants to merge 3 commits into
Conversation
|
Codex review: needs real behavior proof before merge. Reviewed June 8, 2026, 10:36 PM ET / 02:36 UTC. Summary PR surface: Source +3, Tests +158. Total +161 across 5 files. Reproducibility: yes. from source: current Review metrics: 1 noteworthy metric.
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:
Mantis proof suggestion Risk before merge
Maintainer options:
Next step before merge
Security Review findings
Review detailsBest possible solution: Keep the WebChat busy-state fix narrow, remove the unrelated exec security-policy change, and land only one coordinated fix path with current-head real behavior proof. Do we have a high-confidence way to reproduce the issue? Yes from source: current Is this the best way to solve the issue? No as submitted: the UI guard is a plausible narrow fix, but the branch also changes exec security policy and overlaps another open implementation for the same bug. Full review comments:
Overall correctness: patch is incorrect AGENTS.md: found and applied where relevant. Codex review notes: model gpt-5.5, reasoning high; reviewed against aef1fad58d25. Label changesLabel justifications:
Evidence reviewedPR surface: Source +3, Tests +158. Total +161 across 5 files. View PR surface stats
Security concerns:
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
|
|
ClawSweeper PR egg: 🎁 locked until real behavior proof passes. Details
|
|
thank you very much ! |
a8f3b0b to
f3d0796
Compare
|
@clawsweeper re-review |
|
🦞🧹 I asked ClawSweeper to review this item again. Re-review progress:
|
This comment was marked as spam.
This comment was marked as spam.
Fixes issue openclaw#91283 where minSecurity() had the security rank order backwards, treating 'full' as the most restrictive instead of the least restrictive. The order is now correct: - full: 0 (least restrictive - allows all commands) - allowlist: 1 (medium restriction - allows only whitelisted commands) - deny: 2 (most restrictive - denies all commands) This allows session overrides with security='full' to properly override agent defaults with security='allowlist'. Also fixes the test cases that were asserting the incorrect behavior.
f3d0796 to
3bff74a
Compare
3bff74a to
e5c2967
Compare
…e completion Only show in-progress badge and Stop button when there is an active stream or sending operation, not just based on stale session state. This fixes issue openclaw#87387 where Control UI would continue displaying busy/abortable state after the assistant response had completed. - Modified ui/src/ui/views/chat.ts: - Added showLocalAbortableUi to require isBusy in addition to showAbortableUi - Updated renderChatQueue canAbort to include isBusy - Updated renderChatRunControls canAbort to include isBusy - Added tests: - e2e test for stale session state not forcing busy UI - unit tests for idle composer with stale session state and active stream Real behavior proof: - UI build: successful - TypeScript compilation: no errors - Tests: 58 chat.view tests passed, 8 run-controls tests passed - No regression in existing functionality Fixes openclaw#87387
e5c2967 to
ec94a74
Compare
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.