Keep Control UI PR badges and publication progress aligned with scoped GitHub metadata and recorded Gateway outcomes. Separate status reads from publication, recover shared receipts after reconnect, and preserve explicit personal confirmation and unknown-outcome fences without another polling loop.
Retain unbound legacy terminal receipts as history without blocking account choices or inventing lifecycle bindings. Cover retained-state upgrades and complete the qualified-owner options test contract.
Co-authored-by: steipete <58493+steipete@users.noreply.github.com>
Co-authored-by: vincentkoc <25068+vincentkoc@users.noreply.github.com>
Keep page-owned reader intent authoritative for geometric end anchoring, automatic end commands, and typing follow. Preserve explicit Latest/manual returns and standalone transcript behavior. Cover resize-clamped readers with short and long live answers, both motion modes, and existing end-follow contracts.
Co-authored-by: steipete <58493+steipete@users.noreply.github.com>
Co-authored-by: vyctorbrzezowski <51521767+vyctorbrzezowski@users.noreply.github.com>
Co-authored-by: vincentkoc <25068+vincentkoc@users.noreply.github.com>
Preserve the causal schema-preflight diagnostic instead of its generic npm
bypass footer. Check package disk space before registry and schema work and
retain low-space warnings in update history without introducing a hard stop.
Show pending, successful, failed, and disconnected status checks in the update
dialog. Only acknowledge refresh responses that the controller actually applies.
* feat: start remote sessions without a repository
Offer a fresh isolated workspace for cloud and paired-device sessions while preserving explicit and saved repository choices. Use a private empty backing repository per session through the existing managed-worktree lifecycle, retaining reclaim, snapshot restore, and cleanup without copying the agent workspace.
* fix: preserve workspace intent and independent snapshot cleanup
Retain legacy source selections before Git discovery updates availability, keep ordinary snapshot expiry independent of allocation contention, and update the complete source-selection browser flow. Keep request mapping and validation at their existing owners while satisfying import-cycle and export checks.
* fix: retain allocation and cleanup error causes
* test: expect normalized workspace source preferences
* fix(ui): preserve text and image order in assistant replies
* fix(ui): keep recovered message preparation immutable
* fix(ui): preserve caption paragraphs and text direction around media
* fix(ui): preserve attachment-only actions and inline media interaction proofs
Remove the placeholder progress summary from new background exec tasks. The existing Running badge remains the status source, while genuine progress messages still render. Follow-up to #147758.
* fix: limit agent session selection to the requesting browser
Bind screen commands to the browser that requested each turn, preserving the target through queues, CLI tools, and signed worker execution. Report unavailable when that browser disconnects instead of broadcasting navigation to every Control UI.
* fix: keep requester routing contracts acyclic
Separate the requester target type from its Gateway client capture helper, preserve the original behavior in valid client fixtures, and document the intentional standalone-call compatibility change.
* fix: preserve steering when screen control is unavailable
* fix(ui): focus Reply composer after transcript rerenders
Resolve focus through the connected session transcript owner so message menus retain a valid focus target while streamed updates rerender the pane.
* fix(ui): render live drafts as unsent message bubbles
Reuse sent peer-message geometry, sender tint, and avatar placement while keeping drafts literal and ephemeral. Restore the caret and per-person typing dots with an explicit unsent label.
Co-authored-by: steipete <58493+steipete@users.noreply.github.com>
* fix(ui): render live drafts as unsent message bubbles
Worked on by:
- @steipete
Co-authored-by: steipete <58493+steipete@users.noreply.github.com>
OpenClaw-Publication: 9c277653-7b75-4e99-a156-205c961c52ac
* chore: preserve Android wrapper line endings
Undo the managed publisher normalization outside this PR scope; restore the exact reviewed candidate tree.
Co-authored-by: steipete <58493+steipete@users.noreply.github.com>
* test(ui): construct typing fixtures with their session kind
Co-authored-by: steipete <58493+steipete@users.noreply.github.com>
---------
Co-authored-by: steipete <58493+steipete@users.noreply.github.com>
* fix: archive sessions despite failed worker cleanup
Restore immediate optimistic hiding and allow failed, unclaimed placements to archive while retaining their recovery state. Keep deletion and reconstruction guarded, and report a committed archive as successful when later worktree cleanup fails.
* test: scope archive retry to the sidebar menu
The chat header and sidebar can both expose Archive session while the header menu is closing. Select the intended sidebar control without changing assertions, adding waits, or weakening the archive rejection and retry proof.
* fix(ui): load Home and System busyness inside their panels
* chore(ui): record approved immediate-panel startup budgets
* fix(ui): retain System busyness through automatic chunk recovery
* fix(ui): keep automatic diagnostic restores out of Settings
* chore(ui): refresh approved startup baseline against current main
Make plugin sidebar pages reorderable alongside built-in pages through the existing saved order and drag-and-drop owner. Preserve unavailable plugin positions and existing optional/default visibility behavior. No SQLite, schema, or preference-store changes.
Includes browser drag/reload coverage and native plugin activation coverage.
Session: https://team.openclaw.ai/chat/roboclaw/dashboard/680735f5-0060-4384-b1cc-97d7e4325abb
Co-authored-by: steipete <58493+steipete@users.noreply.github.com>
* fix: prevent cloud-session archives from stalling
Allow prepared reclaim ahead of maintenance waiting for unrelated dispatches while preserving admitted work, provider settlement, and later-operation ordering. Keep archive rows visible until confirmation and retain exact pending ownership across retries and reconnects.
* style: name the pending archive ownership token
* test: align archive fixtures with confirmed completion
The Control UI no longer keeps showing a stale Git update prompt after a refresh; the prompt follows the recorded comparison status. Current and ahead comparisons clear cached Git availability across the sidebar, Inbox, and update confirmation. Behind/diverged comparisons use the refreshed distance, while unavailable comparisons retain the announced fallback and active updates/campaigns remain visible.
Thanks @ly85206559 (#142959).
Proof: the current/ahead regressions fail with the production fix reverted and pass with it restored; 100 focused tests, 14 UI E2E tests, and changed-file checks passed. Inspected synthetic before/after screenshots in the PR demonstrate the stale Inbox card disappearing after refresh.
CI run 34789678811 initially hit an unrelated mainline animation-seek race in session-progress-motion.e2e.test.ts:130, introduced by 8a294aebc6. The maintainer-authorized single failed-job rerun passed, and attempt 2 plus the required CI gate completed successfully on the exact refresh head.
The lead review applies to the identical tree across the empty freshness commit. ClawSweeper also completed review of the refreshed head with no actionable findings. No re-review request was posted.
Use an 8px boundary between a user image gallery and its following prompt surface, including avatar-wrapped prompts. Preserve paragraph spacing, assistant spacing, image geometry, and the local-user/right versus peer/left orientation.
Co-authored-by: vyctorbrzezowski <51521767+vyctorbrzezowski@users.noreply.github.com>
Co-authored-by: steipete <58493+steipete@users.noreply.github.com>
* fix(ui): keep Pair a device Node host command inside the dialog
Long `openclaw node run --pair` setup codes inflated `.login-gate__command`
and shoved the centered pair-setup body off the right edge. Match the
Continue-in-terminal / Connect-machine shrink-and-wrap rules so access
choices and the command stay readable.
Closes#147401
* fix(ui): keep device pairing content inside the dialog
---------
Co-authored-by: Vincent Koc <vincentkoc@ieee.org>