fix(ui): show coalesced update restarts#93082
Conversation
|
Codex review: needs maintainer review before merge. Reviewed July 6, 2026, 12:18 AM ET / 04:18 UTC. Summary PR surface: Source +10, Tests +103. Total +113 across 3 files. Reproducibility: yes. Source inspection shows current main's gateway returns Review metrics: none identified. 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. Next step before merge
Security Review detailsBest possible solution: Land the focused overlay change after normal maintainer and CI gates; keep backend restart scheduling and broader update recovery behavior out of this PR. Do we have a high-confidence way to reproduce the issue? Yes. Source inspection shows current main's gateway returns Is this the best way to solve the issue? Yes. Consuming the existing gateway metadata in the Control UI overlay layer is the narrowest maintainable fix for the visible feedback gap; backend restart scheduling and stale-token repair remain adjacent work. AGENTS.md: found and applied where relevant. Codex review notes: model internal, reasoning high; reviewed against 37f96bde4d90. Label changesLabel changes:
Label justifications:
Evidence reviewedPR surface: Source +10, Tests +103. Total +113 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 (3 earlier review cycles) |
ee827f3 to
4f06077
Compare
|
Maintainer refresh complete at What changed:
Verification:
Remote proof: Blacksmith Testbox through Crabbox, Thanks @goutamadwant for the original diagnosis and fix direction. Exact-head land-ready update: d58ecf3 is the clean current-main-plus-reviewed-patch head. Hosted CI run https://github.com/openclaw/openclaw/actions/runs/28767168091 passed at that exact SHA. The rebase changed ancestry only; the tested diff and Testbox/browser/PTY proof above are unchanged. Known proof gaps: none. |
6e46d54 to
1232b7b
Compare
Co-authored-by: goutamadwant <[email protected]>
|
Merged via squash.
|
Summary
This PR fixes a Control UI update feedback gap where
update.runcan returnok: truewithrestart.coalesced, but the UI treated that as a normal silent success.This matters now because the gateway already exposes the in-progress restart signal, and hiding it makes the Update button appear idle even though an update restart is already pending.
The intended outcome is that users see an info banner telling them the update is waiting on an already in-progress gateway restart, while the existing reconnect verification still tracks the expected post-update version.
Out of scope: changing gateway restart scheduling, update handoff behavior, package update logic, or recovery policy.
Success looks like the Control UI preserving reconnect verification and surfacing the coalesced restart state instead of leaving the user with no visible feedback.
Reviewers should focus on the
runUpdatesuccess path and whether the banner state interacts correctly with existing post-update reconnect verification.Linked context
Closes #78481
Related: none beyond the linked issue.
Was this requested by a maintainer or owner?
No direct maintainer request. The issue is labeled queueable/source-repro/fix-shape-clear and has ClawSweeper guidance pointing to this UI/controller path.
Real behavior proof (required for external PRs)
update.runresponses withok: trueandrestart.coalescedno longer get treated as a silent success in the Control UI.node scripts/run-vitest.mjs ui/src/ui/controllers/config.test.ts ui/src/ui/app-gateway.node.test.tspendingUpdateExpectedVersion, keeps managed-service handoff false, and sets an info banner whenrestart: { coalesced: true }is returned.okupdate path before surfacingrestart.coalesced, leaving the UI with no visible feedback for an already in-progress restart.Tests and validation
Which commands did you run?
node scripts/run-vitest.mjs ui/src/ui/controllers/config.test.ts ui/src/ui/app-gateway.node.test.tspnpm exec oxfmt --check --threads=1 ui/src/ui/controllers/config.ts ui/src/ui/controllers/config.test.tsgit diff --checkWhat regression coverage was added or updated?
Added a focused
runUpdateregression test coveringrestart: { coalesced: true }.What failed before this fix, if known?
The new regression would fail before this change because
runUpdatereturned from the successful update path without settingupdateStatusBanner.If no test was added, why not?
A regression test was added.
Risk checklist
Did user-visible behavior change? (
Yes/No)Yes.
Did config, environment, or migration behavior change? (
Yes/No)No.
Did security, auth, secrets, network, or tool execution behavior change? (
Yes/No)No.
What is the highest-risk area?
The update success path in the Control UI.
How is that risk mitigated?
The change only reads existing gateway metadata and leaves restart scheduling unchanged. The regression test verifies that reconnect verification state is preserved while the banner is shown.
Current review state
What is the next action?
Maintainer review.
What is still waiting on author, maintainer, CI, or external proof?
Waiting on maintainer review and CI. Live browser proof was not run.
Which bot or reviewer comments were addressed?
No PR bot/reviewer comments yet. This implements the ClawSweeper issue guidance on #78481.