---
title: "v2026.9.7"
summary: "Snappier under load, smoother long conversations, update recovery, OpenAI Agents API, and Sign in with ChatGPT (Beta)."
description: "OpenClaw v2026.9.7 improves busy-chat responsiveness, long conversations, update backups and rollback, upgrades from 2026.9.5, and chat on Mac, iPhone and iPad, with OpenAI Agents API, ChatGPT Beta sign-in, and restart recovery."
keywords:
  - OpenClaw
  - v2026.9.7
  - release notes
---

# v2026.9.7

AI agents and tools can read these release notes as [plain Markdown](https://raw.githubusercontent.com/openclaw/openclaw/main/CHANGELOG/2026.9.7.md).

OpenClaw 2026.9.7 is snappier under load and smoother in long conversations, with better update backups and rollback protection, plus fixes for upgrading from 2026.9.5. It also adds OpenAI’s [Agents API](https://docs.openclaw.ai/providers/openai/runtimes) and [Sign in with ChatGPT (Beta)](https://docs.openclaw.ai/providers/openai/authentication), alongside better chat on Mac, iPhone and iPad, and help picking up work after a restart.

**Release scale:** 2,818 pull requests, 518 direct commits, and 344 contributors.

## Installation and Onboarding

Setup reaches the first question sooner and gives clearer guidance when sign-in, pairing, or installation needs attention.

<AccordionGroup>

<Accordion title="First-run setup">

[Onboarding](https://docs.openclaw.ai/cli/onboard) starts sooner and explains invalid options and workspace paths more clearly. If you want a workspace without generated starter files, `openclaw setup --baseline --skip-bootstrap` now remembers that choice and preserves existing files.

If a shared configuration file sets the opposite choice, edit that file directly. For remote setup, omit an unused `--workspace` path if it is invalid on the computer running setup.

In browser setup, arriving suggestions no longer interrupt your typing. Reloading first-run Model Setup returns to its pending question while the same Gateway stays running, but unsubmitted answers are lost. Cancelling the attempt frees the provider choices once cancellation is confirmed.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Improvements**

- Load only the selected guided, classic, or unattended setup flow [#160169](https://github.com/openclaw/openclaw/pull/160169).
- Shorten the animated banner before the first setup prompt [#160250](https://github.com/openclaw/openclaw/pull/160250).
- Use one authenticated reachability check when unattended setup explicitly skips daemon installation, retaining health checks for a running Gateway [#160168](https://github.com/openclaw/openclaw/pull/160168).

**Bug fixes**

- Honor and remember baseline skip-bootstrap choices while preserving existing files and shared configuration includes [275d0d4](https://github.com/openclaw/openclaw/commit/275d0d497bf27daf0c908597522b5f7ce4827842). Thanks @vincentkoc.
- Preserve numbers, booleans, objects, and null in plugin setup choices without losing neighboring numeric-keyed settings [c762b23](https://github.com/openclaw/openclaw/commit/c762b23736449d9de045d052acaba26bcd3e21e7). Thanks @moerai.
- Keep temporary model-verification runs out of ordinary chat and session events [#155777](https://github.com/openclaw/openclaw/pull/155777). Thanks @mertbasar0, @obviyus, and @axiom-ncis.
- Open and focus the destination chat after an Ask OpenClaw handoff, without transferring the conversation or starting work [#155907](https://github.com/openclaw/openclaw/pull/155907). Thanks @romneyda.
- Report unknown or incomplete root options instead of opening setup or terminal chat [#159213](https://github.com/openclaw/openclaw/pull/159213).
- Skip startup polling when interactive service installation is declined and no temporary Gateway exists; managed starts and explicit Gateway reuse retain their waits [#160307](https://github.com/openclaw/openclaw/pull/160307).
- Reject unusable workspace paths before reset or setup, and identify workspace or Gateway failures without blaming successful AI access [#160373](https://github.com/openclaw/openclaw/pull/160373).
- Keep focus on the composer or another active control when onboarding suggestions arrive [#160677](https://github.com/openclaw/openclaw/pull/160677).
- Label skipped AI setup as Local setup, reserving Inference ready for a verified model connection [#160713](https://github.com/openclaw/openclaw/pull/160713).
- Restore the pending first-run model question after a browser reload on the same running Gateway and release provider choices after confirmed cancellation; unsubmitted answers are not saved, and Gateway restarts retain guarded recovery [#160774](https://github.com/openclaw/openclaw/pull/160774).

**Documentation**

- Clarify setup prerequisites, caller-supplied example inputs, and links to pairing, memory-provider, and recovery instructions [4c9869c](https://github.com/openclaw/openclaw/commit/4c9869c6fd012b94123f0cae4554e1d605c5c846). Thanks @vincentkoc.
- Show `setup --baseline` in the CLI help example for unattended baseline setup [#159214](https://github.com/openclaw/openclaw/pull/159214).

</details>

</Accordion>

<Accordion title="Model account sign-in">

First-run setup shows detected API keys and tokens again, with clearer sign-in choices. **Connect & verify** checks your credentials and can select the agent's model. Device-code sign-in no longer ends early because of OpenClaw's shorter timer, though the provider's code can still expire. Custom model addresses must use HTTP or HTTPS, and automated [LM Studio setup](https://docs.openclaw.ai/providers/lmstudio) now explains connection and model-check failures.

You can restart your abandoned sign-in for the same provider and setup target using the same sign-in method. Use the newest sign-in link. Model verification also stops on connection failures without the repeated retries used in ordinary chat, so retry setup yourself after a temporary outage clears.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Bug fixes**

- Keep setup activation alive through the provider's device-code sign-in window [#156440](https://github.com/openclaw/openclaw/pull/156440).
- Restore first-run provider cards, detected manual credentials, and distinct login choices [#159412](https://github.com/openclaw/openclaw/pull/159412). Thanks @stevenlee-oai.
- Return structured LM Studio setup failures with recovery guidance, a nonzero exit status, and no application of the proposed provider settings [#160196](https://github.com/openclaw/openclaw/pull/160196).
- Reject malformed or non-HTTP(S) custom model addresses before interactive credential selection and verification [#160301](https://github.com/openclaw/openclaw/pull/160301).
- Replace an abandoned matching provider sign-in for the same owner and setup target, accepting only the latest retry and rejecting old callbacks; protected preparation and credential-saving work remain busy [#160574](https://github.com/openclaw/openclaw/pull/160574). Thanks @stevenlee-oai.
- Stop setup verification on refused connections or unreachable names and networks, with recovery guidance for configured provider URLs; routes without an explicit provider base URL may still report a timeout [#160813](https://github.com/openclaw/openclaw/pull/160813).

</details>

</Accordion>

<Accordion title="Device pairing and permissions">

OpenClaw can use your configured public HTTPS address for [device join links and QR setup](https://docs.openclaw.ai/cli/devices). Used or expired dashboard links now explain how to get a fresh one with `openclaw dashboard` on the computer running OpenClaw. Links remain single-use and expire after ten minutes. When a browser requests admin access, its Inbox now shows the exact approval command to run on the computer hosting OpenClaw.

Browser access also uses that public address when no allowed-address list is set, including in existing setups. Existing lists still take precedence. Before removing a list, check any other browser addresses you need. If you run OpenClaw in a container, check that its localhost dashboard still opens.

On Android, **Request all** lets you review optional permissions together and finish setup even if you deny SMS access. Camera and location still have separate on/off switches, and notification-listener access needs a separate Settings step. SMS requires a supported third-party build, a phone-capable device, and Gateway approval. Google Play builds do not support SMS.

Shared networks have more room for simultaneous connection attempts, with the default allowance rising from 32 to 128 pending, unauthenticated connections per IP. That permits more sockets to consume server resources; administrators can [lower the allowance](https://docs.openclaw.ai/gateway/security/rate-limiting#unauthenticated-websocket-connections). A retry countdown shows when the browser will try again after OpenClaw answers an HTTP check. The busy message does not diagnose the failed connection, so persistent problems still need [connection troubleshooting](https://docs.openclaw.ai/web/control-ui/offline-and-reconnect).

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Improvements**

- Inherit `gateway.publicOrigin` for browser access only when `allowedOrigins` is omitted; explicit lists, including an empty list, override inheritance without disabling other local-origin exceptions, and public-origin changes revoke browser connections no longer allowed [#157170](https://github.com/openclaw/openclaw/pull/157170).
- Request eligible Android permissions together without automatically enabling camera or location, and allow setup to finish after SMS denial [#159727](https://github.com/openclaw/openclaw/pull/159727). Thanks @iwhatsskill.
- Show commands to reconnect a previously paired node when `openclaw connect` has no target; the user still runs the commands, and stale pairing needs fresh enrollment [#159810](https://github.com/openclaw/openclaw/pull/159810).

**Bug fixes**

- Use the configured public address as the loopback pairing fallback while preserving explicit, remote, Tailscale, and LAN routes; remote QR setup retains its separate prerequisites [#159465](https://github.com/openclaw/openclaw/pull/159465).
- Describe rejected Android and Apple setup codes as no longer valid, with fresh-code guidance instead of assuming expiration [#159745](https://github.com/openclaw/openclaw/pull/159745). Thanks @iwhatsskill.
- Distinguish partial SMS read/send access and explain when Android restrictions may prevent granting the missing permission [#159747](https://github.com/openclaw/openclaw/pull/159747). Thanks @iwhatsskill.
- Preserve pending node pairing requests when unchanged permission keys arrive in a different order [#159759](https://github.com/openclaw/openclaw/pull/159759).
- Show denied users administrator role guidance instead of describing a reachable Gateway as unavailable [#159948](https://github.com/openclaw/openclaw/pull/159948).
- Clear rejected dashboard pairing tokens before manual-credential retries and explain fresh-link recovery, including `openclaw dashboard --json` when browser or clipboard access is unavailable [#160684](https://github.com/openclaw/openclaw/pull/160684).
- Show `openclaw devices approve <requestId>` for a pending browser admin-access request, retaining existing approval rules [#160685](https://github.com/openclaw/openclaw/pull/160685).
- Raise the default pending unauthenticated connection allowance per resolved IP from 32 to 128 and show existing retry timing after a verified same-origin HTTP liveness check; restore the old allowance with `OPENCLAW_MAX_PREAUTH_CONNECTIONS_PER_IP=32` and restart the Gateway [#160814](https://github.com/openclaw/openclaw/pull/160814).

</details>

</Accordion>

<Accordion title="Channel setup and settings">

You can ask setup chat to remove a setting override and return to the inherited default without changing neighboring settings. Existing approvals still apply. Remote rescue messages cannot make this change, so use your regular agent or the local CLI. Automated [channel setup](https://docs.openclaw.ai/cli/channels) also points to options your selected channel supports when something goes wrong.

After dismissing a completed channel setup, you can start the next without the previous dialog leaving setup occupied. Channel cards refresh automatically once settings are applied, so you do not need to refresh the page to see the updated status.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Bug fixes**

- Give channel-specific help when noninteractive setup cannot use `--use-env`, while keeping guided setup's interactive-terminal requirement [#157551](https://github.com/openclaw/openclaw/pull/157551). Thanks @sxh313 and @obviyus.
- Let the Gateway handle other work while channel setup checks policy after selecting an agent, with configuration ownership rechecked before proceeding [#158783](https://github.com/openclaw/openclaw/pull/158783).
- Remove approved configuration overrides through setup or delegated chat, preserve sibling settings, and refuse remote rescue deletion [#158873](https://github.com/openclaw/openclaw/pull/158873). Thanks @vacinc.
- Close the completed channel wizard before starting another and wait for pending cancellation without aborting committed setup work [#160705](https://github.com/openclaw/openclaw/pull/160705).
- Refresh channel cards after configuration is accepted and prevent slow probes from replacing newer status [#160853](https://github.com/openclaw/openclaw/pull/160853).

</details>

</Accordion>

<Accordion title="Installation and platform support">

Fresh npm installs include a missing dependency that could prevent OpenClaw from starting. Existing services using a supported Bun version keep it during reinstalls and updates unless you have explicitly selected another runtime. The [Bun compatibility guide](https://docs.openclaw.ai/install/bun-compatibility) also covers installation on Bun-only machines. Node remains the default for fresh installs when available.

On Windows, the installer reports failure if the terminal still cannot find OpenClaw. Open a new terminal and run `openclaw doctor` as advised. For Windows source checkouts running under Bun, a startup fix lets OpenClaw open its databases and save device tokens. The [FreeBSD installation guide](https://docs.openclaw.ai/install/installer) explains the missing native Codex binary and the OpenAI API alternative, which requires an API key and explicit OpenClaw runtime selection. API usage is billed separately from a ChatGPT or Codex subscription. Administrators can also follow a new [team server deployment guide](https://docs.openclaw.ai/gateway/team-server).

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Bug fixes**

- Report an unusable Windows PATH as an installation failure, preserving catchable PowerShell scriptblock errors and recovery guidance [#134406](https://github.com/openclaw/openclaw/pull/134406). Thanks @ly85206559 and @fuller-stack-dev.
- Select source-worker loaders from the running runtime's identity when reusing a renamed Bun or Node executable [#158521](https://github.com/openclaw/openclaw/pull/158521).
- Bundle the required Undici dependency alongside patched Proxyline so fresh npm installs and staged update candidates can start [#160015](https://github.com/openclaw/openclaw/pull/160015).
- Retain supported recorded Bun service runtimes during reinstalls and update refreshes, with an automatic Bun-only first-install fallback [#160189](https://github.com/openclaw/openclaw/pull/160189).
- Open SQLite stores and save device tokens when running TypeScript source under Bun on Windows, without adding Node’s unnecessary loader; built installations were unaffected [#160310](https://github.com/openclaw/openclaw/pull/160310).

**Documentation**

- Explain FreeBSD's native Codex limitation, explicit API runtime selection, and separate API billing [#155980](https://github.com/openclaw/openclaw/pull/155980). Thanks @vincentkoc and @lucarinaorg.
- Add a Linux team-server walkthrough covering Cloudflare sign-in, identities, roles, public session links, backups, and verification [#157085](https://github.com/openclaw/openclaw/pull/157085).

</details>

</Accordion>

<Accordion title="Building from source">

You can build and lint an OpenClaw checkout inside another Node.js project using its own dependencies. Failed builds can be retried without manually removing stale locks, and cancelling `pnpm openclaw` during a rebuild no longer launches the CLI afterward.

The prerelease compiler now supports build hosts on macOS arm64/x64, Linux arm/arm64/x64, and Windows arm64/x64. BSD, AIX, SunOS, and other Linux architectures no longer have compiler packages, so check your build host before upgrading. This restriction concerns building OpenClaw, not running an installed copy.

Local macOS packaging restores the committed Swift dependency versions before preparing each build, avoiding dependency drift when reusing a build cache. If a later step changes a dependency, the error names the changed version.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Bug fixes**

- Finish Linux help generation when owned descendants have exited but await reaping, while still refusing live or unobservable work [#158448](https://github.com/openclaw/openclaw/pull/158448). Thanks @vincentkoc.
- Explain uncomparable installer versions before replacement and reject linked plugin-build output paths that could redirect writes or cleanup outside `dist` [#159199](https://github.com/openclaw/openclaw/pull/159199).
- Release source-build ownership after completed failures and reject invalid build arguments without starting work [#160059](https://github.com/openclaw/openclaw/pull/160059).
- Honor cancellation during source rebuilds and lock waits, without launching the CLI or recording cancelled preparation as complete [#160172](https://github.com/openclaw/openclaw/pull/160172). Thanks @romneyda, @vyctorbrzezowski, and @jalehman.
- Restore committed Swift dependency pins before creating the local macOS package snapshot and identify later pin changes in errors [#160809](https://github.com/openclaw/openclaw/pull/160809).

**Limits and compatibility**

- Support nested source builds with checkout-owned declaration inputs, using TypeScript `7.1.0-dev.20260917.1` and its narrower native build-host coverage [#158674](https://github.com/openclaw/openclaw/pull/158674).

</details>

</Accordion>

</AccordionGroup>

## Web UI

Long conversations in the [Control UI](https://docs.openclaw.ai/web/control-ui) scroll more smoothly and load older messages with fewer pauses, alongside improvements to writing and navigating between chats.

<AccordionGroup>

<Accordion title="Conversation sidebar">

The sidebar’s [Filter & sort panel](https://docs.openclaw.ai/web/control-ui/sessions-and-sidebar) brings filtering and display choices together. Pinned chats stay in Pages across agents, and saved forks stay beneath their parent conversation after a restart. Unnamed heartbeat chats are hidden unless you choose Show system sessions.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Improvements**

- Organize sidebar filters and display settings together [#150605](https://github.com/openclaw/openclaw/pull/150605). Thanks @vyctorbrzezowski.
- Keep chat search compact and centered [#155963](https://github.com/openclaw/openclaw/pull/155963). Thanks @vyctorbrzezowski.
- Avoid blocking disk reads during agent-list refreshes [#158404](https://github.com/openclaw/openclaw/pull/158404).
- Show agent identity in dashboard conversation tabs [#158547](https://github.com/openclaw/openclaw/pull/158547). Thanks @vyctorbrzezowski.
- Refresh conversation branches without rescanning ordinary appends [#159309](https://github.com/openclaw/openclaw/pull/159309).
- Bound waits for slow session-catalog providers [#159457](https://github.com/openclaw/openclaw/pull/159457). Thanks @giangthb.

**Bug fixes**

- Keep renamed conversations visible after confirmation, even when an older refresh arrives [#160579](https://github.com/openclaw/openclaw/pull/160579).
- Correct unusual-name fallbacks and clear removed-IP location details [4f62a433](https://github.com/openclaw/openclaw/commit/4f62a433acb72506d050a0fa3faa5d0a977896bf).
- Clarify sidebar loading and empty personal filters [#146968](https://github.com/openclaw/openclaw/pull/146968). Thanks @vincentkoc.
- Keep deleted session groups from reappearing [#155288](https://github.com/openclaw/openclaw/pull/155288). Thanks @vyctorbrzezowski, @fuller-stack-dev, @vincentkoc, @shakkernerd.
- Center workspace preview icons and the now-retired Task Stop control [#155857](https://github.com/openclaw/openclaw/pull/155857). Thanks @hxy91819.
- Show live activity for directly loaded sessions [#156462](https://github.com/openclaw/openclaw/pull/156462). Thanks @vincentkoc.
- Allow selecting groups named `__new-group__` [#156822](https://github.com/openclaw/openclaw/pull/156822). Thanks @vyctorbrzezowski, @fuller-stack-dev, @vincentkoc, @shakkernerd.
- Keep queued messages and live activity in conversation order [#156843](https://github.com/openclaw/openclaw/pull/156843).
- Show full failures in compact session hover cards [#156918](https://github.com/openclaw/openclaw/pull/156918). Thanks @patrick-erichsen.
- Keep bulk deletion tied to selected conversations across refreshes [#157035](https://github.com/openclaw/openclaw/pull/157035).
- Preserve agent pins when another tab resizes the sidebar [#157049](https://github.com/openclaw/openclaw/pull/157049).
- Remove stale child counts after archiving conversations [#157068](https://github.com/openclaw/openclaw/pull/157068).
- Discard stale session previews after metadata changes [#157122](https://github.com/openclaw/openclaw/pull/157122). Thanks @vincentkoc.
- Preserve split-pane titles across agent switches [#157482](https://github.com/openclaw/openclaw/pull/157482).
- Align sidebar counts and preserve label space [#157890](https://github.com/openclaw/openclaw/pull/157890). Thanks @vincentkoc.
- Suppress stale outbox errors and handle unusual device capabilities [#158683](https://github.com/openclaw/openclaw/pull/158683).
- Keep saved forks beneath their parent conversation [#158835](https://github.com/openclaw/openclaw/pull/158835).
- Prevent duplicate explicit session labels and rejected-fork history [#158839](https://github.com/openclaw/openclaw/pull/158839).
- Keep sidebar menus closed when returning from Settings [#158870](https://github.com/openclaw/openclaw/pull/158870).
- Keep parent conversation links in Incognito forks [#158927](https://github.com/openclaw/openclaw/pull/158927).
- Refresh open session hovercards when displayed details change [#159557](https://github.com/openclaw/openclaw/pull/159557).
- Keep pinned sessions in Pages when showing all agents [#160225](https://github.com/openclaw/openclaw/pull/160225). Thanks @vyctorbrzezowski.
- Hide unnamed heartbeat sessions from conversation lists [#160367](https://github.com/openclaw/openclaw/pull/160367). Thanks @liuwqgit, @obviyus, @wanweiinmod.

</details>

</Accordion>

<Accordion title="New chat settings">

New chats can start with the selected agent’s [configured model and reasoning defaults](https://docs.openclaw.ai/gateway/config-gateway), while still letting you choose different settings for a draft. This is optional; remembering your last choice remains the default. Update the Gateway and UI together, then refresh or reconnect before enabling it.

Guests with [session-write access](https://docs.openclaw.ai/gateway/operator-scopes) can create and control their own chats. Full permission mode, sandbox changes, and changes to an existing chat’s context window still require an administrator.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Improvements**

- Start fresh sessions from configured agent defaults [#156866](https://github.com/openclaw/openclaw/pull/156866). Thanks @vincentkoc.
- Avoid repeated history rendering during session startup [#159562](https://github.com/openclaw/openclaw/pull/159562).

**Bug fixes**

- Preserve the chosen runtime in Auto and new-worktree sessions, and distinguish retained drafts from already-created sessions in recovery errors [#160547](https://github.com/openclaw/openclaw/pull/160547). Thanks @vincentkoc.
- Preserve chat settings during session creation [#154807](https://github.com/openclaw/openclaw/pull/154807).
- Enable permitted Guest session creation, settings and Stop controls [#155565](https://github.com/openclaw/openclaw/pull/155565). Thanks @shakkernerd.
- Wait for current agent defaults before starting sessions [#156281](https://github.com/openclaw/openclaw/pull/156281). Thanks @vincentkoc.
- Save Current checkout defaults before the first Git commit; managed Worktrees still require one [#156516](https://github.com/openclaw/openclaw/pull/156516).
- Keep named worktrees visible after closing the picker [#157570](https://github.com/openclaw/openclaw/pull/157570). Thanks @romneyda.
- Accept simultaneous first messages in shared conversations [#159371](https://github.com/openclaw/openclaw/pull/159371). Thanks @chopin-op60, @obviyus, @vyctorbrzezowski.

</details>

</Accordion>

<Accordion title="Long conversations and tables">

Long conversations have fewer pauses when you type, scroll, or load older messages, and preserve your reading position as content arrives. [Chat tables](https://docs.openclaw.ai/web/control-ui/chat) wrap more clearly, with Copy and Expand below the content. Resumed work keeps consecutive tool activity in one expandable log.

Block-streamed replies keep table headers and rows together when the table fits the configured streaming size limit. Larger tables can still split, and individual channels retain their own message limits.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Improvements**

- Reduce browser styling work as replies stream, without changing the interface appearance [#160833](https://github.com/openclaw/openclaw/pull/160833).
- Reuse unchanged conversation structure while long replies stream [#160837](https://github.com/openclaw/openclaw/pull/160837).
- Reduce extra rendering while typing and streaming [#156355](https://github.com/openclaw/openclaw/pull/156355).
- Make chat tables easier to read [#156750](https://github.com/openclaw/openclaw/pull/156750).
- Remove redundant completed-compaction subtitles [#157169](https://github.com/openclaw/openclaw/pull/157169).
- Skip unnecessary history scans for voice-caption reconciliation [#157179](https://github.com/openclaw/openclaw/pull/157179). Thanks @vincentkoc.
- Reuse completed Markdown blocks in long streamed replies [#158439](https://github.com/openclaw/openclaw/pull/158439).
- Reduce repeated display processing of long streamed replies [#158489](https://github.com/openclaw/openclaw/pull/158489).
- Reduce pauses when switching table-heavy chats [#158930](https://github.com/openclaw/openclaw/pull/158930).
- Cache completed lists while long replies stream [#158943](https://github.com/openclaw/openclaw/pull/158943).
- Reduce browser restyling during chat updates and switches [#159293](https://github.com/openclaw/openclaw/pull/159293).
- Reduce scrolling stalls in long conversations [#159400](https://github.com/openclaw/openclaw/pull/159400).
- Reduce browser work while chat replies stream [#159806](https://github.com/openclaw/openclaw/pull/159806).
- Reduce position-rail restyling during chat updates [#159910](https://github.com/openclaw/openclaw/pull/159910).
- Move table controls below content and retain latest-reply visibility [#159924](https://github.com/openclaw/openclaw/pull/159924). Thanks @vyctorbrzezowski.
- Reduce stalls when loading older tool-heavy chat history [#160030](https://github.com/openclaw/openclaw/pull/160030).
- Reduce repeated link-preview work in long chats [#160050](https://github.com/openclaw/openclaw/pull/160050).
- Reduce repeated preparation when loading older chat history [#160215](https://github.com/openclaw/openclaw/pull/160215).
- Reduce Control UI styling work during chat and navigation [#160241](https://github.com/openclaw/openclaw/pull/160241).
- Reduce repeated work when rendering chat Markdown [#160294](https://github.com/openclaw/openclaw/pull/160294).
- Reduce initial conversation rendering work [#160298](https://github.com/openclaw/openclaw/pull/160298).

**Bug fixes**

- Keep fitting tables together during block streaming; oversized tables can still have headerless continuations [#160701](https://github.com/openclaw/openclaw/pull/160701). Thanks @obviyus, @giodl73-repo.
- Keep long-chat typing responsive and preserve reading position [d51f3607](https://github.com/openclaw/openclaw/commit/d51f3607b9789cb3d354ecce35fbced7485575e0). Thanks @marvinthebored, @jalehman, @peetiegonzalez, Peter Steinberger.
- Align chat spacing and mobile message footers [#151453](https://github.com/openclaw/openclaw/pull/151453). Thanks @vyctorbrzezowski, @iwhatsskill.
- Keep reading position while older activity loads [#151736](https://github.com/openclaw/openclaw/pull/151736). Thanks @vyctorbrzezowski, @romneyda.
- Preserve reading positions across retained conversations [#154554](https://github.com/openclaw/openclaw/pull/154554). Thanks @vincentkoc.
- Size desktop chat tables to their content [#156874](https://github.com/openclaw/openclaw/pull/156874). Thanks @vyctorbrzezowski.
- Remove blank gaps in nested tool activity [#156921](https://github.com/openclaw/openclaw/pull/156921). Thanks @vyctorbrzezowski, @iwhatsskill.
- Preserve column order in expanded chat tables [#156947](https://github.com/openclaw/openclaw/pull/156947).
- Prevent chat freezes from unfinished reply markers [#158337](https://github.com/openclaw/openclaw/pull/158337). Thanks @fuller-stack-dev.
- Preserve input-method Escape while tooltips are open [#159171](https://github.com/openclaw/openclaw/pull/159171).
- Keep short values readable in narrow chat tables [#159283](https://github.com/openclaw/openclaw/pull/159283).
- Restore smooth scrolling in long conversations [#159294](https://github.com/openclaw/openclaw/pull/159294).
- Keep transcript end-follow state current while scrolling [#159469](https://github.com/openclaw/openclaw/pull/159469).
- Keep completed answer timestamps stable after reload [#159581](https://github.com/openclaw/openclaw/pull/159581).
- Keep late-growing replies above the composer dock [#159955](https://github.com/openclaw/openclaw/pull/159955).
- Keep resumed task activity in one expandable work log [#159997](https://github.com/openclaw/openclaw/pull/159997).
- Prevent chat jumps and prompt flicker when sending [#160109](https://github.com/openclaw/openclaw/pull/160109). Thanks @vyctorbrzezowski.
- Fix rapid clicks on chat expand controls [#160249](https://github.com/openclaw/openclaw/pull/160249). Thanks @vyctorbrzezowski.
- Keep chat navigation markers visible in right-to-left interfaces [#160681](https://github.com/openclaw/openclaw/pull/160681).
- Keep the history rail highlighted over its preview [#160722](https://github.com/openclaw/openclaw/pull/160722). Thanks @vyctorbrzezowski.

</details>

</Accordion>

<Accordion title="Live reply streaming">

Live replies use less network traffic by sending new text instead of repeatedly sending the whole answer. Updated bundled clients assemble the reply as it arrives.

Third-party raw clients must adopt the [updated streaming contract](https://docs.openclaw.ai/gateway/protocol/rpc-bootstrap-and-events), even though the protocol still reports version 4. Custom SDK transports also need the documented event-ordering changes. Older clients can lose reply text, and reconnect recovery cannot always restore a complete answer.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Limits and compatibility**

- Send incremental live text and require raw-client reconstruction and reconnect migration [#158587](https://github.com/openclaw/openclaw/pull/158587).

</details>

</Accordion>

<Accordion title="Conversation recovery">

Split panes restore their own conversations after reload, and chats follow history changes made in another tab while keeping unsent drafts. Quoted reply drafts also retain their selected quote. Removed queued messages stay hidden after reconnect, though their stored content is not erased.

If OpenClaw warns that a stopped reply could not be saved, [copy its visible text before leaving](https://docs.openclaw.ai/web/control-ui/offline-and-reconnect).

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Improvements**

- Move archived-history preparation off the Gateway thread [d0d95b6b](https://github.com/openclaw/openclaw/commit/d0d95b6bcd1fbb3d92b85ce4b73785eff2c534b4).
- Reduce work in archived conversation searches [#156665](https://github.com/openclaw/openclaw/pull/156665).
- Hide the empty outbox notice while drafting offline [#156914](https://github.com/openclaw/openclaw/pull/156914). Thanks @patrick-erichsen.
- Avoid sorting stalls for large pending chat inputs [#158449](https://github.com/openclaw/openclaw/pull/158449).
- Move artifact and durable transcript reads off the Gateway thread [#158450](https://github.com/openclaw/openclaw/pull/158450).
- Reduce repeated byte-counting during chat-history catch-up [#158469](https://github.com/openclaw/openclaw/pull/158469).
- Stagger automatic Gateway reconnection attempts [#158536](https://github.com/openclaw/openclaw/pull/158536).
- Keep session lists responsive during large history reads [#159328](https://github.com/openclaw/openclaw/pull/159328).
- Load saved conversations earlier on reload [#159408](https://github.com/openclaw/openclaw/pull/159408).
- Reduce large-history allocation, with slower completion in the measured workload [#159585](https://github.com/openclaw/openclaw/pull/159585).
- Prepare history workers for first reads; an in-flight warmup can delay shutdown [#159818](https://github.com/openclaw/openclaw/pull/159818).
- Request fresh chat history sooner on reload [#159877](https://github.com/openclaw/openclaw/pull/159877).

**Bug fixes**

- Avoid duplicate chat lookups during connection [da1cb32b](https://github.com/openclaw/openclaw/commit/da1cb32b14073e45bdd2971307f6b3a22c6abd68). Thanks Peter Steinberger.
- Warn when a stopped reply cannot be saved [#133194](https://github.com/openclaw/openclaw/pull/133194). Thanks @zengwen-dt, @shakkernerd, @ruel225, @marvinthebored.
- Show restart recovery as a system notice while resuming [#155269](https://github.com/openclaw/openclaw/pull/155269). Thanks @jalehman, @vyctorbrzezowski, @vincentkoc.
- Keep context-usage popups visible beyond narrow chat panes [#155616](https://github.com/openclaw/openclaw/pull/155616).
- Recover brief session contention and explain chat busy states [#156067](https://github.com/openclaw/openclaw/pull/156067). Thanks @jalehman.
- Keep completed answers visible above collapsed work [#156474](https://github.com/openclaw/openclaw/pull/156474).
- Prevent duplicate replies after Stop [#156623](https://github.com/openclaw/openclaw/pull/156623).
- Preserve steering after reconnect and expose queued follow-ups [#157135](https://github.com/openclaw/openclaw/pull/157135).
- Show one clear outcome after interrupted restart recovery [#157210](https://github.com/openclaw/openclaw/pull/157210).
- Place the working indicator below a restored first message [#157708](https://github.com/openclaw/openclaw/pull/157708). Thanks @fuller-stack-dev.
- Label saved interrupted replies; an earlier completed reply in the same run can still be mislabeled [#158206](https://github.com/openclaw/openclaw/pull/158206).
- Restore quoted replies with WebChat drafts [#158335](https://github.com/openclaw/openclaw/pull/158335).
- Ask before binding ambiguous restored split-pane conversations [#158639](https://github.com/openclaw/openclaw/pull/158639).
- Ignore unrelated pending-request data during paired reconnects [#158665](https://github.com/openclaw/openclaw/pull/158665).
- Wait for Gateway resume before retrying identity reads [#158779](https://github.com/openclaw/openclaw/pull/158779).
- Preserve composing drafts when browser tabs become hidden [#158801](https://github.com/openclaw/openclaw/pull/158801).
- Keep verified interface assets and unchanged session baselines [#158825](https://github.com/openclaw/openclaw/pull/158825).
- Restore conversation history in every split pane after reload [#158953](https://github.com/openclaw/openclaw/pull/158953).
- Recover chat history after resets and rebuilds [#159163](https://github.com/openclaw/openclaw/pull/159163).
- Keep transcript reads available during agent-registry refreshes [#159208](https://github.com/openclaw/openclaw/pull/159208).
- Keep history reads valid when agent databases reopen [#159248](https://github.com/openclaw/openclaw/pull/159248).
- Keep open chats synchronized after another tab changes history [#159318](https://github.com/openclaw/openclaw/pull/159318).
- Keep deleted-session cleanup on its Gateway; switches or timeouts leave drafts, and an initially unknown identity retains a reconnect limitation [#159341](https://github.com/openclaw/openclaw/pull/159341).
- Hide confirmed removed queue items after reconnect while retaining stored cancellation records [#159503](https://github.com/openclaw/openclaw/pull/159503).
- Release closed chat panes and refresh once on reconnect [#160079](https://github.com/openclaw/openclaw/pull/160079).

**Documentation**

- Translate restart-recovery outcome notices [#157244](https://github.com/openclaw/openclaw/pull/157244).

</details>

</Accordion>

<Accordion title="Background chat previews">

Sidebar previews send fewer updates while your open chat keeps its full live reply stream. Hidden browser tabs also stop receiving sidebar-only activity. If you use a custom SDK client, [update the Gateway alongside the SDK](https://docs.openclaw.ai/gateway/protocol/rpc-bootstrap-and-events) to keep live subscriptions working.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Improvements**

- Keep cached session lists when adding, changing, or removing the Talk realtime model [#159545](https://github.com/openclaw/openclaw/pull/159545).
- Reuse pending sidebar preview timers without delaying the latest text [#160769](https://github.com/openclaw/openclaw/pull/160769).
- Reuse automation reads and CPU identity; CPU topology changes require a restart [#155686](https://github.com/openclaw/openclaw/pull/155686). Thanks @vincentkoc.
- Reduce Control UI work during session updates and streaming [#156196](https://github.com/openclaw/openclaw/pull/156196).
- Share ten-second status polls; disk samples can be thirty seconds old after refresh [#156335](https://github.com/openclaw/openclaw/pull/156335).
- Avoid redundant session-list requests for placement updates [#157562](https://github.com/openclaw/openclaw/pull/157562).
- Reduce Git subprocesses during session PR polling [#158065](https://github.com/openclaw/openclaw/pull/158065).
- Reduce repeated session-update work across concurrent viewers [#158408](https://github.com/openclaw/openclaw/pull/158408).
- Reduce paired-device database work during reconnect [#158425](https://github.com/openclaw/openclaw/pull/158425).
- Spread automatic session-list refreshes across browsers [#158589](https://github.com/openclaw/openclaw/pull/158589).
- Pause sidebar activity streams in hidden browser tabs [#158751](https://github.com/openclaw/openclaw/pull/158751).
- Reuse unchanged session metadata across active views [#158756](https://github.com/openclaw/openclaw/pull/158756).
- Keep sidebar live subscriptions stable as recency changes [#158985](https://github.com/openclaw/openclaw/pull/158985).
- Avoid repeated comparisons of unchanged session rows [#159069](https://github.com/openclaw/openclaw/pull/159069).
- Reduce repeated parent-session data in live updates [#159152](https://github.com/openclaw/openclaw/pull/159152).
- Reduce session-list polling work during streamed replies [#159153](https://github.com/openclaw/openclaw/pull/159153).
- Avoid rebuilding session lists after unrelated configuration changes [#159155](https://github.com/openclaw/openclaw/pull/159155).
- Reuse identical authorized session updates across recipients [#159456](https://github.com/openclaw/openclaw/pull/159456).
- Skip unchanged model observations in session-list updates [#159460](https://github.com/openclaw/openclaw/pull/159460).
- Avoid blocking the Gateway during successful cold PATH discovery [#159472](https://github.com/openclaw/openclaw/pull/159472).
- Reuse ancestor preparation across Control UI viewers [#159475](https://github.com/openclaw/openclaw/pull/159475).
- Reduce repeated session lookups across connected clients [#159595](https://github.com/openclaw/openclaw/pull/159595).
- Keep member lists independent of large history reads and repair the subsequently retired Task publication path [#159710](https://github.com/openclaw/openclaw/pull/159710).
- Prioritize hovered-session prefetch; canceled hover can still accelerate unrelated warming [#159878](https://github.com/openclaw/openclaw/pull/159878).
- Reuse session catalog planning across unchanged polls [#159900](https://github.com/openclaw/openclaw/pull/159900).
- Reduce chat-rendering work with large session lists [#160045](https://github.com/openclaw/openclaw/pull/160045).
- Reduce duplicate session-detail requests during chat navigation [#160148](https://github.com/openclaw/openclaw/pull/160148).
- Reduce redundant Control UI reply streaming [#160186](https://github.com/openclaw/openclaw/pull/160186).
- Use confirmed read receipts without roster reloads, with remaining ordering risk if a change event is lost [#160328](https://github.com/openclaw/openclaw/pull/160328).

**Bug fixes**

- Stop status timers when sidebars are removed [d73dab32](https://github.com/openclaw/openclaw/commit/d73dab32b7d782ed44d6f1228e4c8a68b2717bed).
- Avoid redundant sidebar refreshes after rapid updates [f00add28](https://github.com/openclaw/openclaw/commit/f00add28e38a7408c784e1d6f6ecdae06ad4378a). Thanks Peter Steinberger.
- Retry failed sidebar subscription cleanup without losing ownership [#158794](https://github.com/openclaw/openclaw/pull/158794).
- Keep chat metadata available through ordinary session updates [#158979](https://github.com/openclaw/openclaw/pull/158979).
- Reserve request capacity for message-subscription bursts [#159467](https://github.com/openclaw/openclaw/pull/159467).
- Pace sidebar narration retries after temporary failures [#159495](https://github.com/openclaw/openclaw/pull/159495).
- Pace failed sidebar cleanup and renew returning subscriptions [#159564](https://github.com/openclaw/openclaw/pull/159564).
- Reduce repeated session-list refreshes and restore parent context [#159647](https://github.com/openclaw/openclaw/pull/159647).
- Preserve the newest session sidebar on warm reload [#159880](https://github.com/openclaw/openclaw/pull/159880).
- Avoid repeated session-list reloads after recap updates [#159994](https://github.com/openclaw/openclaw/pull/159994).

**Limits and compatibility**

- Prepare initial session rows before readiness; later row-read failures can prevent startup [#159286](https://github.com/openclaw/openclaw/pull/159286).
- Stop idle sidebar Git polling; unopened sessions can lack PR badges until viewed [#159390](https://github.com/openclaw/openclaw/pull/159390).
- Pace background previews while preserving full foreground streams; update the Gateway alongside newer SDK clients [#160002](https://github.com/openclaw/openclaw/pull/160002). Thanks @iwhatsskill.

</details>

</Accordion>

<Accordion title="Steering and Stop controls">

You can [steer active work](https://docs.openclaw.ai/concepts/queue-steering) even when an older message is waiting as a follow-up. People with the same permissions can also steer shared turns, including across devices using the same shared Owner token. Steering does not interrupt running tools and remains unavailable for Incognito and cloud-worker turns. A ready follow-up replaces Stop with Send, Queue, or Steer; clear the draft to bring Stop back. Stop remains available for drafts that cannot send, except during active dictation.

In shared turns, specify whose [screen](https://docs.openclaw.ai/tools/screen) or [theme](https://docs.openclaw.ai/tools/theme) should change. Other personal settings need a new personal turn. The original owner’s permissions, approvals, and provider account still apply.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Improvements**

- Let equal-permission participants steer shared turns [#159850](https://github.com/openclaw/openclaw/pull/159850).

**Bug fixes**

- Restore shared-token Owner steering across devices and progress refresh into the active parent turn [#160830](https://github.com/openclaw/openclaw/pull/160830).
- Keep pending inputs below saved conversation history [#155897](https://github.com/openclaw/openclaw/pull/155897).
- Restore contrast for mobile composer action icons [#155951](https://github.com/openclaw/openclaw/pull/155951). Thanks @vyctorbrzezowski.
- Keep preparing Home attachments across page and dock switches [#157013](https://github.com/openclaw/openclaw/pull/157013).
- Recover chat drafts from stalled attachments [#157019](https://github.com/openclaw/openclaw/pull/157019). Thanks @masterswords1, @brucemccurdy, @obviyus.
- Keep Stop available while attachments or drafts cannot send [#157703](https://github.com/openclaw/openclaw/pull/157703). Thanks @vincentkoc.
- Preserve live output while clearing abandoned chat state [#158434](https://github.com/openclaw/openclaw/pull/158434).
- Restore eligible active-turn steering and clear consumed queued messages [#158699](https://github.com/openclaw/openclaw/pull/158699). Thanks @nianjiuzst, @sxh313, @anyech, @aatreya, @geokec.
- Preserve consecutive pending chat message order [#160240](https://github.com/openclaw/openclaw/pull/160240). Thanks @vyctorbrzezowski.
- Recover Stop targeting when chat retains an inactive run [#160596](https://github.com/openclaw/openclaw/pull/160596). Thanks @vyctorbrzezowski.

</details>

</Accordion>

<Accordion title="Work summaries and progress cards">

Agent commentary stays beside its tool activity, and work summaries distinguish skipped tools from failures or approval requests. During a run, the activity row keeps a readable tool purpose visible between calls, normally giving you three seconds to read it. Failures, blocks, and completion appear immediately.

[Progress cards](https://docs.openclaw.ai/tools/progress-card) remember whether you left them open during the current visit. With write access, you can dismiss any card, including unfinished or note-only progress, without stopping the agent; later progress may create another one.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Improvements**

- Keep tool purposes readable between calls, with immediate failure and completion feedback [#160881](https://github.com/openclaw/openclaw/pull/160881).
- Coalesce progress refreshes and preserve dismissal ordering [#153213](https://github.com/openclaw/openclaw/pull/153213). Thanks @jjjhenriksen, @patrick-erichsen, @noelillinger.
- Keep agent narration inline and avatars top-aligned [#156926](https://github.com/openclaw/openclaw/pull/156926). Thanks @vyctorbrzezowski, @vincentkoc.
- Show filesystem paths in tool details and diagnostics while retaining credential masking [#157059](https://github.com/openclaw/openclaw/pull/157059).
- Show total tool calls alongside failures [#157904](https://github.com/openclaw/openclaw/pull/157904). Thanks @romneyda.
- Align chat composer status bar heights [#160016](https://github.com/openclaw/openclaw/pull/160016).

**Bug fixes**

- Remove unfinished and note-only progress cards when dismissed, preserving newer agent updates [#160867](https://github.com/openclaw/openclaw/pull/160867). Thanks @laurencebrown.
- Preserve progress around questions and avoid false drafts from read-only file searches [#152665](https://github.com/openclaw/openclaw/pull/152665). Thanks @vyctorbrzezowski, @vincentkoc.
- Keep progress cards as the reader left them [#155326](https://github.com/openclaw/openclaw/pull/155326). Thanks @vyctorbrzezowski.
- Clarify tool preview availability and loading states [#156887](https://github.com/openclaw/openclaw/pull/156887).
- Count nested tool operations once in activity summaries [#157438](https://github.com/openclaw/openclaw/pull/157438).
- Collapse progress cards after delayed scroll observations [#158153](https://github.com/openclaw/openclaw/pull/158153).
- Distinguish skipped tools from blocked or failed activity [#159502](https://github.com/openclaw/openclaw/pull/159502).
- Avoid redundant comment-pin layout and show disabled state [#159559](https://github.com/openclaw/openclaw/pull/159559).
- Dismiss saved progress in every card state [#160126](https://github.com/openclaw/openclaw/pull/160126).

**Limits and compatibility**

- Historical queued-subagent status updates in the subsequently retired Tasks interface [#156681](https://github.com/openclaw/openclaw/pull/156681). Thanks @vincentkoc.

</details>

</Accordion>

<Accordion title="Goal controls">

[Goal controls](https://docs.openclaw.ai/tools/goal) stay with the right conversation while it opens and explain rejected changes or failed outcome checks. Starting a new Goal also keeps older failed messages separate, with their own Retry action.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Bug fixes**

- Keep mobile goal controls above expanded objectives [#155789](https://github.com/openclaw/openclaw/pull/155789). Thanks @vyctorbrzezowski.
- Display rejected goal-action errors and refresh dependencies [#156363](https://github.com/openclaw/openclaw/pull/156363).
- Show errors when checking unconfirmed goal changes [#158021](https://github.com/openclaw/openclaw/pull/158021). Thanks @olli0103, @matuno, @obviyus.
- Keep older failed messages out of new Goal drafts [#158382](https://github.com/openclaw/openclaw/pull/158382).
- Reduce session-list allocations and preserve Goal recovery during startup [#160198](https://github.com/openclaw/openclaw/pull/160198).

</details>

</Accordion>

<Accordion title="Personal instructions">

On shared Gateways with at least two individual profiles, you can edit your [personal instructions](https://docs.openclaw.ai/concepts/user-model) in Profile or through authenticated chat. Individual sign-in is required for separate personal files; a shared Owner login edits the shared profile. This works in local agent workspaces, with a 4,000-character limit and existing prompt limits. Single-user setups still use the main `USER.md` file. Save before closing the browser, and avoid editing the same file elsewhere at the same time.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Improvements**

- Edit personal instructions in Profile settings or chat [#155256](https://github.com/openclaw/openclaw/pull/155256). Thanks @vacinc.

</details>

</Accordion>

<Accordion title="Settings errors and drafts">

When Settings rejects a change, it explains why and keeps your edits available to correct or retry. [Discard draft and reload](https://docs.openclaw.ai/web/control-ui/settings) restores saved settings and removes **all unsaved configuration edits**. If a save’s result is uncertain, return to the original Gateway to retry or discard it. Follow any Apply or restart instructions before expecting a saved change to take effect.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Improvements**

- Discard rejected Settings drafts from the notice [#157742](https://github.com/openclaw/openclaw/pull/157742).

**Bug fixes**

- Show inherited automation and plugin defaults correctly [#141548](https://github.com/openclaw/openclaw/pull/141548). Thanks @nkeil, @obviyus, @johnfink8.
- Return to the previous workspace when leaving Settings [#156204](https://github.com/openclaw/openclaw/pull/156204).
- Preserve forbidden fields in composed configuration schemas [#156436](https://github.com/openclaw/openclaw/pull/156436).
- Preserve uncertain Settings writes and bind retries to their Gateway [#157053](https://github.com/openclaw/openclaw/pull/157053).
- Retry saved Settings changes without stale revision conflicts [#157065](https://github.com/openclaw/openclaw/pull/157065).
- Explain rejected Settings changes without losing drafts [#157549](https://github.com/openclaw/openclaw/pull/157549). Thanks @shakkernerd, @donniefi.
- Keep rejected settings explanations when opening saved configuration [#157731](https://github.com/openclaw/openclaw/pull/157731). Thanks @shakkernerd.
- Remove duplicate headings from named plugin maps; standalone root maps can still lose their heading [#157732](https://github.com/openclaw/openclaw/pull/157732). Thanks @patrick-erichsen.
- Keep settings editable and focused after saves [#157737](https://github.com/openclaw/openclaw/pull/157737). Thanks @patrick-erichsen.
- Correct proposal date groups and tool-access displays [#158846](https://github.com/openclaw/openclaw/pull/158846).

</details>

</Accordion>

<Accordion title="File drafts and previews">

If an update blocks the editor, [Review file drafts](https://docs.openclaw.ai/web/control-ui/offline-and-reconnect) lets you copy or download unsaved work. Keep anything you need before explicitly discarding drafts and refreshing. Copying alone does not unlock refresh, and a manual browser reload or tab closure still loses these drafts. Incognito drafts have the same memory-only limit.

File editing also preserves multiline paste and updates Review after saving. Remote workspace files can be previewed, but those previews are read-only.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Improvements**

- Speed up agent-file editing with Preview closed [#159902](https://github.com/openclaw/openclaw/pull/159902). Thanks @vyctorbrzezowski.

**Bug fixes**

- Block application-controlled reloads while file edits remain unsaved [#156208](https://github.com/openclaw/openclaw/pull/156208).
- Reduce chat layout work and false unsaved-file drafts [#156210](https://github.com/openclaw/openclaw/pull/156210). Thanks @vincentkoc.
- Refresh file details and Review diffs after saving workspace edits [#156327](https://github.com/openclaw/openclaw/pull/156327).
- Clear hidden drafts after read-only file reloads [#156340](https://github.com/openclaw/openclaw/pull/156340). Thanks @vincentkoc.
- Protect drafts during competing file creation; unsupported remote providers require an update or host-side creation [#157020](https://github.com/openclaw/openclaw/pull/157020).
- Preserve file line endings when pasting multiline text [#157998](https://github.com/openclaw/openclaw/pull/157998).
- Preserve unsent Incognito drafts during automatic updates [#158213](https://github.com/openclaw/openclaw/pull/158213).
- Recover unsaved file drafts before refreshing after an update [#159414](https://github.com/openclaw/openclaw/pull/159414).
- Avoid no-changes claims for incomplete Review results [#159529](https://github.com/openclaw/openclaw/pull/159529).
- Preview remote files read-only; later directory pages may outlive revoked access and older nodes can require extra listing work [#159895](https://github.com/openclaw/openclaw/pull/159895). Thanks @kimiyu-186.

**Documentation**

- Correct Files panel navigation guidance [#130596](https://github.com/openclaw/openclaw/pull/130596).

**Limits and compatibility**

- Move file-edit planning to workers; unavailable planning fails before writes and active rename scans may delay quota detection [#158443](https://github.com/openclaw/openclaw/pull/158443).

</details>

</Accordion>

<Accordion title="PDFs and image attachments">

[PDF attachments](https://docs.openclaw.ai/web/control-ui/chat) hosted by your OpenClaw instance can open beside chat, keeping your page and zoom when their link renews. Preview supports files up to 16 MiB; external PDFs, Office files, and unavailable previews use downloads. Oversized static PNGs up to 25 megapixels can be [resized locally](https://docs.openclaw.ai/web/webchat) for upload while keeping transparency. Oversized animated PNGs are rejected rather than converted to a still image.

Ordinary chat and new-chat submissions now check the combined attachment size before sending and keep your draft if it is too large. PNGs being resized can reserve more space than they eventually need, so try a smaller batch if they are rejected. Large pasted-text cards also have a visible X to remove an accidental paste without disturbing the rest of your draft.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Improvements**

- Remove pasted-text attachments directly from their composer cards [#160834](https://github.com/openclaw/openclaw/pull/160834). Thanks @patrick-erichsen.
- Read PDF attachments beside your conversation [#148399](https://github.com/openclaw/openclaw/pull/148399). Thanks @jjjhenriksen, @vyctorbrzezowski.
- Move between expanded videos in one chat turn [#154051](https://github.com/openclaw/openclaw/pull/154051). Thanks @vyctorbrzezowski.
- Defer offscreen chat image requests [#155370](https://github.com/openclaw/openclaw/pull/155370). Thanks @vincentkoc.
- Load offscreen file-card details on demand without losing keyboard focus [#155623](https://github.com/openclaw/openclaw/pull/155623). Thanks @vincentkoc.
- Avoid unnecessary parsing when listing conversation images [#158371](https://github.com/openclaw/openclaw/pull/158371).
- Move large-upload preparation to workers and honor cancellation; automatic overload retry remains unsupported [#158420](https://github.com/openclaw/openclaw/pull/158420).
- Share audio/video inspections and preserve outgoing attachments under load [#158548](https://github.com/openclaw/openclaw/pull/158548).
- Prepare large artifact downloads outside the Gateway thread [#158583](https://github.com/openclaw/openclaw/pull/158583).
- Speed up repeated artifact lists for unchanged sessions [#159537](https://github.com/openclaw/openclaw/pull/159537).
- Resize oversized static PNG attachments in chat [#159960](https://github.com/openclaw/openclaw/pull/159960). Thanks @vyctorbrzezowski.

**Bug fixes**

- Check combined attachment sizes and preserve ordinary drafts; recovered startup and pending-placement New Session submissions remain excluded [#160071](https://github.com/openclaw/openclaw/pull/160071).
- Preserve protected egress for attachments with international filenames [#156166](https://github.com/openclaw/openclaw/pull/156166). Thanks @siri1410, @obviyus, @lisheguo.
- Preserve original attachment download names [#156588](https://github.com/openclaw/openclaw/pull/156588).
- Restore pasted-text previews before sending [#157390](https://github.com/openclaw/openclaw/pull/157390).
- Keep startup file cards separate from the text bubble [#158700](https://github.com/openclaw/openclaw/pull/158700). Thanks @vyctorbrzezowski.
- Restore reply previews for media-only assistant messages [#158701](https://github.com/openclaw/openclaw/pull/158701). Thanks @vyctorbrzezowski.
- Preserve uploaded image filenames in chat history [#159216](https://github.com/openclaw/openclaw/pull/159216).
- Reuse loaded chat images when scrolling back [#159486](https://github.com/openclaw/openclaw/pull/159486). Thanks @vyctorbrzezowski.

</details>

</Accordion>

<Accordion title="Camera preview">

Take photo opens a [local camera preview](https://docs.openclaw.ai/web/control-ui) so you can capture, retake, and confirm a photo before attaching it. Confirmation adds it to your draft without sending it. Live preview needs HTTPS or localhost and camera permission; if permission is denied, choose Retry or Upload photo.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Improvements**

- Preview, capture and confirm camera photos; permission denial offers retry or upload rather than native capture [#160253](https://github.com/openclaw/openclaw/pull/160253).

</details>

</Accordion>

<Accordion title="Copying messages and opening links">

You can copy your prompts as Markdown, and conversation exports skip empty speaker sections. The optional [Open links outside OpenClaw setting](https://docs.openclaw.ai/web/control-ui/settings) now also applies to browser-preview cards. It is off by default and saved per Gateway in the current browser or app, without syncing across devices.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Improvements**

- Give GitHub references neutral theme backgrounds while retaining status colors and keyboard focus [#160844](https://github.com/openclaw/openclaw/pull/160844). Thanks @vyctorbrzezowski.
- Copy user messages as Markdown [#156563](https://github.com/openclaw/openclaw/pull/156563). Thanks @vacinc.
- Choose to open links outside OpenClaw [#159887](https://github.com/openclaw/openclaw/pull/159887). Thanks @vacinc.
- Keep GitHub item identity in failed link previews [#160219](https://github.com/openclaw/openclaw/pull/160219). Thanks @vyctorbrzezowski.

**Bug fixes**

- Improve GitHub reference contrast, focus, and wrapping in chat [72b76842](https://github.com/openclaw/openclaw/commit/72b76842012f405400a2b6b694f46bd62b7bca1c). Thanks @vyctorbrzezowski.
- Preserve typing focus while GitHub documents load [#157202](https://github.com/openclaw/openclaw/pull/157202).
- Omit empty sections from conversation exports [#157590](https://github.com/openclaw/openclaw/pull/157590).
- Preserve repository context in GitHub folder-link labels [#157619](https://github.com/openclaw/openclaw/pull/157619). Thanks @vyctorbrzezowski.
- Use neutral labels for messages without recorded authors [#160257](https://github.com/openclaw/openclaw/pull/160257). Thanks @vyctorbrzezowski.
- Make browser preview cards follow external-opening preferences [#160410](https://github.com/openclaw/openclaw/pull/160410). Thanks @vacinc.

</details>

</Accordion>

<Accordion title="Side chat selections and images">

Select a passage and choose Ask in side chat to add an optional, editable comment without replacing your existing draft. The passage and comment share a 16,000-character limit and accompany only the current question, so select the passage again for a later question.

You can drop or paste images into [Side chat](https://docs.openclaw.ai/web/control-ui/chat) for the current question. Choose an image-capable utility model, then use Retry if the previous model could not read the image. Images are not saved in restored history, so reattach them for later questions. Compatible CLI setups without direct provider credentials also gain a text-only fallback, without tools or images.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Improvements**

- Add editable comments to selected passages for the current Side chat question [#160747](https://github.com/openclaw/openclaw/pull/160747). Thanks @patrick-erichsen.
- Ask Side chat about dropped or pasted images [#156840](https://github.com/openclaw/openclaw/pull/156840). Thanks @patrick-erichsen.
- Remove automatic summaries from Side chat [#156892](https://github.com/openclaw/openclaw/pull/156892). Thanks @patrick-erichsen.

**Bug fixes**

- Explain unsupported Side chat images and preserve Retry [#156900](https://github.com/openclaw/openclaw/pull/156900). Thanks @patrick-erichsen.
- Preserve Side chat input during delayed updates [#156990](https://github.com/openclaw/openclaw/pull/156990).
- Offer Side chat fallback without direct API credentials [#157474](https://github.com/openclaw/openclaw/pull/157474). Thanks @rogeriochaves, @obviyus, @sidboswell.

</details>

</Accordion>

<Accordion title="Model picker and usage">

Large model lists are more responsive to search, and the picker opens to the selected model’s provider. [Usage](https://docs.openclaw.ai/web/control-ui/feature-reference) keeps previous totals visible while refreshing and lets you retry failures. [Doctor](https://docs.openclaw.ai/cli/doctor) reports incomplete totals; request usage again to retry. If Cmd+K returns no models, check model settings for provider-refresh problems.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Improvements**

- Group Decision model choices by provider [#155301](https://github.com/openclaw/openclaw/pull/155301). Thanks @jalehman.
- Keep model caches across unrelated metadata updates [#157254](https://github.com/openclaw/openclaw/pull/157254).
- Remove routine model-picker hover tooltips [#158697](https://github.com/openclaw/openclaw/pull/158697). Thanks @vyctorbrzezowski.
- Reduce pauses when searching large model lists [#159905](https://github.com/openclaw/openclaw/pull/159905). Thanks @vyctorbrzezowski.

**Bug fixes**

- Show model search results while other categories load [#151022](https://github.com/openclaw/openclaw/pull/151022). Thanks @obviyus.
- Bound memory use when refreshing large-session usage totals [#156937](https://github.com/openclaw/openclaw/pull/156937). Thanks @conan-scott.
- Keep usage totals visible through background refresh [#157270](https://github.com/openclaw/openclaw/pull/157270). Thanks @vincentkoc.
- Keep metadata and model lists available during unrelated session changes [#158576](https://github.com/openclaw/openclaw/pull/158576).
- Align model-picker search text with reading direction [#159937](https://github.com/openclaw/openclaw/pull/159937). Thanks @vyctorbrzezowski.
- Show the selected model when opening the chat model picker [#160132](https://github.com/openclaw/openclaw/pull/160132).

**Limits and compatibility**

- Remove catalog-refresh warnings from Cmd+K, including empty results; diagnostics remain on model pages [#160221](https://github.com/openclaw/openclaw/pull/160221). Thanks @vyctorbrzezowski.

</details>

</Accordion>

<Accordion title="Online people and running chats">

The [Online sidebar](https://docs.openclaw.ai/concepts/presence) distinguishes recent interaction from simply being connected and now includes your own account. Compact rows show each person’s accessible open and running conversations. The expanded list orders Active, Idle, then unknown activity, with people running work first and names alphabetical within each group. Count sorting, the running-only filter, and aggregate totals have been removed. Quiet reading can show as Idle, and Running excludes queued work and work running only in child conversations.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Improvements**

- Show compact Online rows with fixed presence and running-work ordering [#160140](https://github.com/openclaw/openclaw/pull/160140). Thanks @vyctorbrzezowski, @vacinc.
- Reduce database work for human-mention suggestions [#158481](https://github.com/openclaw/openclaw/pull/158481).
- Reduce repeated presence work for concurrent viewers [#158497](https://github.com/openclaw/openclaw/pull/158497).
- Reuse prepared assistant identities and prevent stale avatar cache replacement [#158597](https://github.com/openclaw/openclaw/pull/158597).
- Reduce unrelated typing-state scans and expire idle groups [#158649](https://github.com/openclaw/openclaw/pull/158649).
- Reduce presence traffic when many tabs connect [#158942](https://github.com/openclaw/openclaw/pull/158942).
- Distinguish online connectivity from recent person activity [#159493](https://github.com/openclaw/openclaw/pull/159493).
- Show open and running conversations beside online people [#160022](https://github.com/openclaw/openclaw/pull/160022).
- Reduce presence traffic during browser join bursts [#160150](https://github.com/openclaw/openclaw/pull/160150).

**Bug fixes**

- Keep idle dots amber in Online, session groups, Activity, and person cards across light and dark themes [#160759](https://github.com/openclaw/openclaw/pull/160759). Thanks @vyctorbrzezowski, @obviyus.
- Align chat mention avatars with names [#155969](https://github.com/openclaw/openclaw/pull/155969). Thanks @vyctorbrzezowski.
- Recover chat viewer presence after a lost acknowledgement [#156255](https://github.com/openclaw/openclaw/pull/156255). Thanks @vincentkoc.
- Publish client presence after the handshake succeeds [#159554](https://github.com/openclaw/openclaw/pull/159554).
- Include your own account in the Online sidebar [#160618](https://github.com/openclaw/openclaw/pull/160618). Thanks @vacinc.

</details>

</Accordion>

<Accordion title="Shared draft previews">

Shared chats show [two full draft previews](https://docs.openclaw.ai/web/control-ui/chat) and summarize additional people typing in a compact row. Paused previews fade away, and resumed typing keeps its place. These are temporary previews of unsent text, not saved messages.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Improvements**

- Pace collaborator previews and discard obsolete queued drafts [#158552](https://github.com/openclaw/openclaw/pull/158552).
- Simplify collaborator draft labels and idle expiry [#159235](https://github.com/openclaw/openclaw/pull/159235). Thanks @vyctorbrzezowski.
- Keep collaborator typing previews compact in busy chats [#159263](https://github.com/openclaw/openclaw/pull/159263). Thanks @vyctorbrzezowski, @shakkernerd.

**Bug fixes**

- Keep collaborator drafts visible during typing pauses [#157100](https://github.com/openclaw/openclaw/pull/157100). Thanks @patrick-erichsen.

</details>

</Accordion>

<Accordion title="Profile access">

[Profile](https://docs.openclaw.ai/concepts/user-model) explains your current access and offers Reconnect after an administrator changes it. Guests can view and refresh their own profile without gaining editing rights or access to the People roster. Some guests still see initials because profile photos have separate permissions.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Improvements**

- Explain current connection access in Profile [#156304](https://github.com/openclaw/openclaw/pull/156304). Thanks @vincentkoc.
- Improve sign-in pages, disabled-button styling, Mac reconnect and voice controls, and Approvals layout [#157251](https://github.com/openclaw/openclaw/pull/157251).
- Load saved avatars through workers, retaining the distinct-profile overload limit [#158445](https://github.com/openclaw/openclaw/pull/158445).

**Bug fixes**

- Reuse saved avatars and return retryable overload responses; automatic browser retry is not added [#158676](https://github.com/openclaw/openclaw/pull/158676).
- Keep long hostnames inside the sign-in card [#159899](https://github.com/openclaw/openclaw/pull/159899). Thanks @iwhatsskill.
- Show guests their own Control UI profile [#160503](https://github.com/openclaw/openclaw/pull/160503). Thanks @shakkernerd.

</details>

</Accordion>

<Accordion title="Unread chats and notifications">

A conversation can gain an unread marker when work finishes after your last read. Inbox mentions and update cards have consistent expand and dismiss controls, and [browser notification settings](https://docs.openclaw.ai/web/notifications) avoid a background-loading delay that could leave them waiting.

Reviewing a failed-delivery alert clears its Inbox entry and badge while keeping the draft for an explicit retry or discard. Check the draft after retrying, since a later failure may not produce a fresh alert; a dismissed alert can also return after a full reload.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Improvements**

- Align Inbox notification ages and controls [#156560](https://github.com/openclaw/openclaw/pull/156560). Thanks @vincentkoc.
- Batch Web Push recipient preparation [#158595](https://github.com/openclaw/openclaw/pull/158595).

**Bug fixes**

- Correct heading size and spacing in empty Inbox tabs [#160724](https://github.com/openclaw/openclaw/pull/160724). Thanks @vyctorbrzezowski.
- Clear reviewed delivery alerts without resending or deleting drafts; reload and failed-retry alert handling retain known limitations [#160822](https://github.com/openclaw/openclaw/pull/160822). Thanks @stevenlee-oai.
- Mark newly completed visible sessions unread [#155690](https://github.com/openclaw/openclaw/pull/155690). Thanks @hxy91819.
- Keep approval state scoped to the current Gateway and omit undiscovered model setup options [#158032](https://github.com/openclaw/openclaw/pull/158032).
- Reschedule mention expiry after clock rollback [#158614](https://github.com/openclaw/openclaw/pull/158614).
- Keep chat subscriptions stable during unrelated approval activity [#158633](https://github.com/openclaw/openclaw/pull/158633).
- Keep notification settings responsive during background preparation [#159709](https://github.com/openclaw/openclaw/pull/159709).

</details>

</Accordion>

<Accordion title="Today overview and Live Activity">

Activity’s [Today overview](https://docs.openclaw.ai/web/control-ui/settings) follows your filters and counts matching sessions beyond the first page, placing each at its latest activity hour.

Live Activity now records only while its view and browser tab are visible, for up to 100 accessible active sessions. It misses activity while you are elsewhere and starts empty after you leave the page and return. Raw Debug history likewise starts when diagnostics open and disappears when the last diagnostic view closes.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Improvements**

- Avoid unnecessary Activity rendering outside Live [#156206](https://github.com/openclaw/openclaw/pull/156206).
- Reduce Live Activity rendering overhead [#157952](https://github.com/openclaw/openclaw/pull/157952).
- Reuse resident recap facts; matching keys in multiple stores can still select the wrong store [#158803](https://github.com/openclaw/openclaw/pull/158803).
- Add a Today overview to Activity sessions [#159611](https://github.com/openclaw/openclaw/pull/159611).

**Bug fixes**

- Preserve Activity recaps across session-list refreshes [8cea9e99](https://github.com/openclaw/openclaw/commit/8cea9e995769d86ec33b36d60bcdf82f5e092b60). Thanks Peter Steinberger.
- Publish ready Activity recaps during unrelated refreshes [#154907](https://github.com/openclaw/openclaw/pull/154907).
- Generate Activity recaps for visible agent-created chats [#159458](https://github.com/openclaw/openclaw/pull/159458).

**Limits and compatibility**

- Capture raw Debug events only while diagnostics are open, with no earlier-event lookback [#158533](https://github.com/openclaw/openclaw/pull/158533).
- Capture Live Activity only while visible, without off-page backfill or retention across page visits [#158574](https://github.com/openclaw/openclaw/pull/158574).

</details>

</Accordion>

<Accordion title="Working branch and pull request">

[PR previews](https://docs.openclaw.ai/web/control-ui/chat) follow the chat’s working branch, so an incidental PR link no longer creates a banner. Branch and CI previews disappear on detached or default-branch checkouts. Sidebar badges may not appear until you open a chat, and mobile chat now shows the working branch before a PR exists.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Improvements**

- Reduce repeated work in pull-request updates [#158302](https://github.com/openclaw/openclaw/pull/158302).
- Reuse unchanged worktree branch suggestions [#158399](https://github.com/openclaw/openclaw/pull/158399).
- Skip redundant Git ancestry checks for matching branch tips [#159301](https://github.com/openclaw/openclaw/pull/159301).

**Bug fixes**

- Recover stalled pull-request status subscriptions [#156310](https://github.com/openclaw/openclaw/pull/156310). Thanks @vincentkoc.
- Release PR-panel caches when preparing viewers leave [#157776](https://github.com/openclaw/openclaw/pull/157776).
- Show the working branch in mobile chat [#160597](https://github.com/openclaw/openclaw/pull/160597). Thanks @vyctorbrzezowski.

**Limits and compatibility**

- Show branch-owned PR banners only; detached and default checkouts no longer retain them [#158578](https://github.com/openclaw/openclaw/pull/158578). Thanks @vyctorbrzezowski.

</details>

</Accordion>

<Accordion title="Worker failure recovery">

After a worker fails, you can [continue the same conversation](https://docs.openclaw.ai/gateway/cloud-sessions) by sending another message once cleanup and workspace recovery finish. The replacement uses the original device or cloud profile and keeps the history and last saved workspace. The interrupted turn is not replayed, and unsynced files may be lost. Setup failures or unavailable destinations still need the displayed recovery steps; use Restart session to choose another destination.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Bug fixes**

- Continue conversations after recoverable worker failures [a7ded174](https://github.com/openclaw/openclaw/commit/a7ded174bd966dcbc78e5eae1c059b65b5ecb80c).

</details>

</Accordion>

<Accordion title="Cloud worker pool">

Administrators can open [Cloud workers → Pool](https://docs.openclaw.ai/gateway/cloud-workers/warm-images) in Settings → Connections to see which workers are ready, preparing, or need attention, and how much reserve capacity is occupied. Cleanup can keep a slot occupied after use. Change limits in Profiles.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Improvements**

- Show cloud worker readiness and occupied capacity in Settings [#157200](https://github.com/openclaw/openclaw/pull/157200).

</details>

</Accordion>

<Accordion title="Dashboards, desktops, and widgets">

Returning to a chat can reopen its existing desktop or live browser tab. [Dashboard gallery navigation](https://docs.openclaw.ai/web/dashboards) also keeps widget interactions when you return, though a browser reload still clears unsaved state. Self-contained [HTML and SVG widgets](https://docs.openclaw.ai/tools/show-widget) can now use up to 10 MiB including their wrapper; registered-source widgets and Discord keep their smaller limits.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Improvements**

- Reveal existing desktops and browsers when returning to chat [b8929c45](https://github.com/openclaw/openclaw/commit/b8929c456559af2ea7d1b0d366c4e8df53a13798). Thanks @vincentkoc, Peter Steinberger.
- Allow wrapped HTML and SVG widgets up to 10 MiB while retaining smaller registered-source and Discord limits [#159970](https://github.com/openclaw/openclaw/pull/159970).

**Bug fixes**

- Stop repeated canvas refresh requests when permission is denied, while retaining retries for temporary failures [#160808](https://github.com/openclaw/openclaw/pull/160808).
- Reduce Workboard stalls when loading or refreshing labeled cards [#156150](https://github.com/openclaw/openclaw/pull/156150). Thanks @sunlit-deng, @obviyus, @sonofakel.
- Preserve dashboard widget state when returning through the gallery [#156288](https://github.com/openclaw/openclaw/pull/156288).
- Align desktop headers with sidebar controls [#156432](https://github.com/openclaw/openclaw/pull/156432). Thanks @vincentkoc.
- Keep HTML widget padding when maximized [#157203](https://github.com/openclaw/openclaw/pull/157203).
- Keep session previews available during unchanged metadata updates [#157943](https://github.com/openclaw/openclaw/pull/157943).
- Correct Desktop panel fullscreen ownership [#160277](https://github.com/openclaw/openclaw/pull/160277).

</details>

</Accordion>

<Accordion title="Browser Talk">

Browser Talk can continue through brief connection stalls and asks you to repeat speech if audio was dropped. The in-call voice dropdown has been removed. Set future-call defaults in [Settings → Talk](https://docs.openclaw.ai/nodes/talk/realtime-sessions), or ask the assistant to change the current call’s voice. Native iOS and Android voice controls are unchanged.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Bug fixes**

- Open microphone setup while chat history loads; starting Talk still waits for history [#160686](https://github.com/openclaw/openclaw/pull/160686).
- Keep Talk calls running through brief stalls and explain dropped speech [#155839](https://github.com/openclaw/openclaw/pull/155839). Thanks @marvinthebored, @peetiegonzalez, @obviyus.

**Limits and compatibility**

- Remove the browser in-call voice dropdown; Settings chooses future defaults and the assistant can change an active call [#159441](https://github.com/openclaw/openclaw/pull/159441).

</details>

</Accordion>

<Accordion title="Plugin pages and settings">

Installed plugins open directly from command-palette results, and installation status stays visible during catalog refreshes. If Plugins Advanced settings fail to load after connecting, Reload can try again. Opening a disabled plugin’s page does not enable it.

Installed plugin pages now show [account and credential setup](https://docs.openclaw.ai/cli/mcp/control-ui), with Connect, Configure, and Edit actions for supported shared MCP sign-ins and web-search or web-fetch credentials. Sign-in requires administrator access, and Connect is disabled when browser sign-in is unavailable. Connected and Configured describe saved setup, not a live service or working-key check.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Improvements**

- Show supported account sign-ins and declared web-search or web-fetch credentials on installed plugin pages [#160092](https://github.com/openclaw/openclaw/pull/160092). Thanks @patrick-erichsen.
- Give official plugin logos consistent white tiles [#158745](https://github.com/openclaw/openclaw/pull/158745). Thanks @patrick-erichsen.

**Bug fixes**

- Disable plugin Connect when the Gateway cannot start browser sign-in [#160761](https://github.com/openclaw/openclaw/pull/160761). Thanks @patrick-erichsen.
- Keep plugin installation status open during catalog refresh [14a1f931](https://github.com/openclaw/openclaw/commit/14a1f931382ba542f8e8008b36354201ec1f73c0). Thanks @joshavant.
- Place plugin hub titles above navigation tabs [#155192](https://github.com/openclaw/openclaw/pull/155192). Thanks @patrick-erichsen.
- Open installed plugin overviews from command palette results [#157405](https://github.com/openclaw/openclaw/pull/157405).
- Keep plugin sidebar selection aligned with navigation [#157717](https://github.com/openclaw/openclaw/pull/157717). Thanks @patrick-erichsen, @jalehman.
- Recover Plugins Advanced settings after connection or schema failures [#158734](https://github.com/openclaw/openclaw/pull/158734). Thanks @nianjiuzst, @obviyus, @nz365guy.
- Use the OpenAI company icon for Agents API [#158744](https://github.com/openclaw/openclaw/pull/158744). Thanks @patrick-erichsen.

</details>

</Accordion>

<Accordion title="Themes and keyboard controls">

More menus, panels, and embedded apps follow your selected colors. Keyboard users get clearer focus and shortcut hints, with improved access to sidebar, file, and media controls. High-contrast indicators also improve in the affected controls; imported palettes still use their supplied colors.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Improvements**

- Improve keyboard access, screen-reader feedback and contrast across the Control UI [#156050](https://github.com/openclaw/openclaw/pull/156050).
- Align close and dismiss icons across web interfaces [#159914](https://github.com/openclaw/openclaw/pull/159914). Thanks @vyctorbrzezowski.
- Soften sidebar, queued-message and conversation edges [#159915](https://github.com/openclaw/openclaw/pull/159915). Thanks @vyctorbrzezowski.
- Align and clarify keyboard shortcut hints [#159925](https://github.com/openclaw/openclaw/pull/159925). Thanks @vyctorbrzezowski.
- Soften artwork behind chat side-panel cards [#160234](https://github.com/openclaw/openclaw/pull/160234). Thanks @vyctorbrzezowski.

**Bug fixes**

- Release popup listeners after removal [#156725](https://github.com/openclaw/openclaw/pull/156725).
- Remove a tooltip exception retention path [#157226](https://github.com/openclaw/openclaw/pull/157226). Thanks @vincentkoc.
- Keep chat progress-card focus corners visible [#157829](https://github.com/openclaw/openclaw/pull/157829). Thanks @romneyda.
- Match inactive switches to the theme and center their thumbs [#159868](https://github.com/openclaw/openclaw/pull/159868). Thanks @vyctorbrzezowski.
- Make menu and control details follow the selected theme [#160555](https://github.com/openclaw/openclaw/pull/160555). Thanks @vyctorbrzezowski.
- Make Desktop viewer margins follow theme changes [#160557](https://github.com/openclaw/openclaw/pull/160557). Thanks @vyctorbrzezowski.
- Keep chat context warnings in sync with theme colors [#160564](https://github.com/openclaw/openclaw/pull/160564). Thanks @vyctorbrzezowski.
- Refresh embedded app colors after theme loading [#160565](https://github.com/openclaw/openclaw/pull/160565). Thanks @vyctorbrzezowski.
- Keep action colors and indicators readable across themes [#160568](https://github.com/openclaw/openclaw/pull/160568). Thanks @vyctorbrzezowski.
- Keep panels and content on the selected palette [#160569](https://github.com/openclaw/openclaw/pull/160569). Thanks @vyctorbrzezowski.

</details>

</Accordion>

<Accordion title="Mobile chat layout">

Phone layouts give conversation titles more room and keep the New Session message box within reach. Menus and composers adapt to the space your browser reports around the keyboard, as explained in the [mobile layout guidance](https://docs.openclaw.ai/web/control-ui/connect-and-pair). Filter sheets also stay open when you tap their headings or padding.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Bug fixes**

- Give mobile sidebar session titles more room [#160366](https://github.com/openclaw/openclaw/pull/160366). Thanks @vyctorbrzezowski.
- Align mobile margins and keyboard-aware safe areas [#160388](https://github.com/openclaw/openclaw/pull/160388). Thanks @hxy91819.
- Keep mobile filters open and preserve command suggestions [#160600](https://github.com/openclaw/openclaw/pull/160600). Thanks @vyctorbrzezowski.
- Keep the New Session message box reachable on phones [#160603](https://github.com/openclaw/openclaw/pull/160603). Thanks @vyctorbrzezowski.

</details>

</Accordion>

<Accordion title="Page loading and diagrams">

The interface downloads less page-specific content at startup, and automatic chat titles wait until the first reply is underway. Diagrams return to Mermaid 11.17.2, so Mermaid 12-only diagram types and built-in ELK layout are unavailable, and some connectors may look different.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Improvements**

- Load file-detail text with file previews [1c9ffa53](https://github.com/openclaw/openclaw/commit/1c9ffa5348a46e8bd1d96ac973764be93761ff2b). Thanks Peter Steinberger.
- Prepare common Control UI requests during idle time [430ea3c6](https://github.com/openclaw/openclaw/commit/430ea3c67159f741fa45be691a7f867895f28558).
- Defer Profile editor text until its page loads [46b698a6](https://github.com/openclaw/openclaw/commit/46b698a66d7aec2812e8b0e851f13dff2ad3a4d3). Thanks Peter Steinberger.
- Load focused browser views on demand [ec00e584](https://github.com/openclaw/openclaw/commit/ec00e5842d3b4cc65a666a9d58050689dfa3c531). Thanks Peter Steinberger.
- Load Labs descriptions only when needed [#157297](https://github.com/openclaw/openclaw/pull/157297).
- Defer MCP text from initial Control UI loading [#157942](https://github.com/openclaw/openclaw/pull/157942).
- Defer full command-palette styles until opening [#157973](https://github.com/openclaw/openclaw/pull/157973).
- Share bundled UI assets and move cold reads to workers [#158464](https://github.com/openclaw/openclaw/pull/158464).
- Load automation starter text when needed [#158482](https://github.com/openclaw/openclaw/pull/158482). Thanks @romneyda.
- Avoid duplicate reads while preparing automatic session titles [#158648](https://github.com/openclaw/openclaw/pull/158648).
- Avoid redundant theme updates when switching chats [#159269](https://github.com/openclaw/openclaw/pull/159269).
- Defer automatic chat titles until reply progress [#160251](https://github.com/openclaw/openclaw/pull/160251).

**Bug fixes**

- Make dashboard loading feedback visible across themes [#158096](https://github.com/openclaw/openclaw/pull/158096). Thanks @vincentkoc.

**Limits and compatibility**

- Defer Settings labels and restore Mermaid 11.17.2, removing Mermaid 12-only diagrams and built-in ELK layout [#157161](https://github.com/openclaw/openclaw/pull/157161). Thanks @vincentkoc.

</details>

</Accordion>

<Accordion title="Updated translations">

Translation records for 20 existing languages include current settings, camera, and chat guidance, including messages for recovering unsaved drafts. No new languages are added.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Documentation**

- Refresh localized inbound-message batching help [5807e3bb](https://github.com/openclaw/openclaw/commit/5807e3bbbe426789c66d7b23ba3b0c438fd485ff). Thanks Peter Steinberger.
- Refresh localized update-reporting instructions [#155912](https://github.com/openclaw/openclaw/pull/155912).
- Translate current UI help and controls in 20 existing languages [#156005](https://github.com/openclaw/openclaw/pull/156005).
- Clarify localized webhook URL error guidance [#156159](https://github.com/openclaw/openclaw/pull/156159).
- Translate the unsaved-file reload warning [#156260](https://github.com/openclaw/openclaw/pull/156260).
- Refresh Control UI translations in 20 languages [#156404](https://github.com/openclaw/openclaw/pull/156404).
- Refresh session-access translations [#156559](https://github.com/openclaw/openclaw/pull/156559).
- Refresh access and browser-help translations; the Simplified Chinese Profile details label still contains an internal identifier [#156596](https://github.com/openclaw/openclaw/pull/156596).
- Refresh tool-preview and Side chat translations [#156960](https://github.com/openclaw/openclaw/pull/156960).
- Refresh Control UI translations in existing languages [#157573](https://github.com/openclaw/openclaw/pull/157573).
- Translate Settings rejection feedback into 20 languages [#157710](https://github.com/openclaw/openclaw/pull/157710).
- Translate file-draft recovery and pane-position messages [#159461](https://github.com/openclaw/openclaw/pull/159461).
- Refresh translations for online and recent activity [#159519](https://github.com/openclaw/openclaw/pull/159519).
- Refresh translated upload controls and chat preferences [#160031](https://github.com/openclaw/openclaw/pull/160031).
- Translate Gateway access-denial guidance in 20 locales [#160104](https://github.com/openclaw/openclaw/pull/160104).
- Refresh Control UI camera translation records [#160357](https://github.com/openclaw/openclaw/pull/160357).
- Translate the browser card's Open in OpenClaw label [#160578](https://github.com/openclaw/openclaw/pull/160578).
- Refresh translations for pairing recovery and chat labels [#160726](https://github.com/openclaw/openclaw/pull/160726).

</details>

</Accordion>

<Accordion title="Log filtering">

Filtering large diagnostic logs takes less browser work, helping the Logs view stay responsive while you search. Downloads and automatic following keep their existing behavior.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Bug fixes**

- Keep Logs filtering responsive with many entries [#151822](https://github.com/openclaw/openclaw/pull/151822). Thanks @vyctorbrzezowski.

</details>

</Accordion>

</AccordionGroup>

## Updates and Maintenance

Verified backups cover more agent databases, and automatic database rollback is available for eligible updates that fail before the new version is allowed to start. Check the migration notes below if you use an older installation or a retired feature.

<AccordionGroup>

<Accordion title="Backups and rollback">

New [verified backups](https://docs.openclaw.ai/cli/backup) check that every database recorded during capture is present, including discovered custom and moved agent databases. Older archives may have unknown completeness. Make and verify a full backup before updating; a config-only export is not a recovery backup. Automatic [rollback](https://docs.openclaw.ai/install/updating/rollback-and-recovery) has limits. Database restoration requires a capture made while OpenClaw was stopped, with the new version never started and no unaccounted later writes. Changed or incompletely captured configuration files may also need manual recovery.

The new updater removes its database snapshots after a verified successful update. Failed or unverified updates retain them and may leave OpenClaw stopped. Check the update reports before manually deleting older snapshots; Doctor only reports them. Snapshot capture needs substantial free disk space and can block an otherwise compatible update. These protections cannot add missing backups to an update already run by an older updater.

<details class="release-source-toggle">

<summary>Sources and complete change list</summary>

**Improvements**

- Verify that new backups contain every database recorded at capture [#156211](https://github.com/openclaw/openclaw/pull/156211) — Thanks @fuller-stack-dev.
- Reduce redundant backup database-discovery work while preserving worktree files [#156465](https://github.com/openclaw/openclaw/pull/156465) — Thanks @patrick-erichsen.
- Avoid per-file durability work for disposable plugin rehearsal copies [#156793](https://github.com/openclaw/openclaw/pull/156793)
- Retain verified database snapshots for eligible pre-start package rollback and expand agent-backup coverage [#158163](https://github.com/openclaw/openclaw/pull/158163) — Thanks @blyszcz, @mmartoccia, @joshbunker.
- Clone disposable plugin snapshots where supported while retaining copy fallback [#159427](https://github.com/openclaw/openclaw/pull/159427)
- Remove current-update database snapshots only after verified successful activation and report older copies [#160348](https://github.com/openclaw/openclaw/pull/160348)

**Bug fixes**

- Rehearse legacy execution approvals before activation when the installed updater supports it [#153406](https://github.com/openclaw/openclaw/pull/153406) — Thanks @romneyda.
- Keep new POSIX package-to-Git builds on destination storage [#155689](https://github.com/openclaw/openclaw/pull/155689) — Thanks @vincentkoc.
- Retry backup scratch allocation after concurrent temporary-directory cleanup [#155947](https://github.com/openclaw/openclaw/pull/155947)
- Preserve private recovery receipts across update progress writes without exposing them in public reports [#156298](https://github.com/openclaw/openclaw/pull/156298) — Thanks @fuller-stack-dev.
- Create and verify Windows backups with equivalent database path aliases [#157301](https://github.com/openclaw/openclaw/pull/157301) — Thanks @ericcaiwx-star, @takhoffman, @tsw-uop.
- Take consistent update snapshots while WAL-mode databases receive writes and expose copy progress [#158317](https://github.com/openclaw/openclaw/pull/158317) — Thanks @nickfost.
- Find older pnpm updater copies and managed-service temporary directories for Doctor review [#160164](https://github.com/openclaw/openclaw/pull/160164) — Thanks @vincentkoc.
- Restore eligible Doctor-edited config includes after package-update failure [#160443](https://github.com/openclaw/openclaw/pull/160443) — Thanks @fuller-stack-dev.

**Documentation**

- Clarify config-only exports and their exclusions when active configuration is malformed [#159259](https://github.com/openclaw/openclaw/pull/159259)

</details>

</Accordion>

<Accordion title="Tasks and TaskFlow removal">

Tasks and TaskFlow panels, commands, and APIs are removed. Use [subagent controls](https://docs.openclaw.ai/tools/subagents/tool-reference), ACP sessions, background processes, Cron history, or Lobster pipelines for their respective work. Conversation transcripts, Workboard, and generated-media completion remain available. Plugin authors must migrate from the [removed Task interfaces](https://docs.openclaw.ai/plugins/sdk-migration/removed-surfaces); subagent wait and cancel calls now use `runId` and `runIds`. TaskFlow Webhooks have no equivalent HTTP replacement.

After replacing OpenClaw manually, run `openclaw doctor --fix` before starting it. Existing Task and Flow records are preserved, but some Codex assignments need [manual migration](https://docs.openclaw.ai/gateway/doctor/config-migrations). Review plugin permissions after Webhooks repair. If repair disables plugins or reports conflicting IDs, choose the allowed plugins before re-enabling them.

<details class="release-source-toggle">

<summary>Sources and complete change list</summary>

Earlier Tasks-specific changes below describe work superseded by the final retirement. Their source records remain included for the complete change list.

**Limits and compatibility**

- Historical Tasks notification fix for concurrent updates, superseded by Tasks retirement [ce1ab3d624f4](https://github.com/openclaw/openclaw/commit/ce1ab3d624f404b31beef6dc3761bdfd27d581c4) — Thanks Peter Steinberger.
- Historical Tasks list concurrency repair, superseded by Tasks retirement [#156030](https://github.com/openclaw/openclaw/pull/156030)
- Historical completed-Task listener cleanup, superseded by Tasks retirement [#156111](https://github.com/openclaw/openclaw/pull/156111)
- Historical reduction of unrelated Tasks-history reads, superseded by Tasks retirement [#156183](https://github.com/openclaw/openclaw/pull/156183)
- Historical reduction of repeated Tasks maintenance checks, superseded by Tasks retirement [#156321](https://github.com/openclaw/openclaw/pull/156321)
- Historical Task transcript source-attribution repair, superseded by Tasks-panel retirement [#156487](https://github.com/openclaw/openclaw/pull/156487)
- Historical Tasks pagination reason codes, superseded by Tasks API retirement [#156631](https://github.com/openclaw/openclaw/pull/156631)
- Historical compact Task-detail Back button, superseded by Tasks-panel retirement [#156927](https://github.com/openclaw/openclaw/pull/156927) — Thanks @patrick-erichsen.
- Bound historical Task-completion navigation to its original Gateway and account [#157103](https://github.com/openclaw/openclaw/pull/157103)
- Historical retained Task-transcript previews after child cleanup, superseded by Tasks retirement [#157247](https://github.com/openclaw/openclaw/pull/157247)
- Historical Codex background-command Tasks integration and Stop controls, superseded by Tasks retirement [#158038](https://github.com/openclaw/openclaw/pull/158038)
- Retire global Tasks navigation; preserve prompt handoff, navigation-retry attachments, and modified-arrow editing fixes [#158217](https://github.com/openclaw/openclaw/pull/158217)
- Remove TaskFlow Webhooks endpoints and repair stale settings while retaining explicit plugin grants for review [#158225](https://github.com/openclaw/openclaw/pull/158225)
- Historical asynchronous harness Task-completion repair, superseded by Tasks runtime retirement [#158520](https://github.com/openclaw/openclaw/pull/158520) — Thanks @vincentkoc.
- Remove Tasks and TaskFlow commands, APIs, SDK surfaces, and panels; migrate native subagents to run selectors [#159179](https://github.com/openclaw/openclaw/pull/159179)
- Historical active-only running-Task preview, superseded by Tasks-panel retirement [#159388](https://github.com/openclaw/openclaw/pull/159388)

</details>

</Accordion>

<Accordion title="Tool Search migration">

[Tool Search](https://docs.openclaw.ai/tools/tool-search) now uses separate search, description, and call tools. Its older JavaScript tool, `tool_search_code`, is removed; use [Code Mode](https://docs.openclaw.ai/tools/code-mode) for JavaScript orchestration. Normal updates migrate the retired settings. After a manual upgrade or deferred repair, run `openclaw doctor --fix` before restarting, or the old settings will prevent startup. Disabled Tool Search stays disabled.

<details class="release-source-toggle">

<summary>Sources and complete change list</summary>

**Documentation**

- Clarify deferred Tool Search repair and use current nested-call names [#159962](https://github.com/openclaw/openclaw/pull/159962)

**Limits and compatibility**

- Retire Tool Search code mode and migrate its settings to structured controls [#159398](https://github.com/openclaw/openclaw/pull/159398)

</details>

</Accordion>

<Accordion title="Upgrading pre-June installations">

Installations older than June 2026 must upgrade through [2026.9.5](https://docs.openclaw.ai/install/updating#upgrading-very-old-versions) before installing the latest version. Make and verify a backup, stop OpenClaw, and follow that guide using the same account, profile, and installation paths. Run `openclaw doctor --fix` in 2026.9.5 and resolve import problems before continuing. Required plugins and channels must be enabled for their imports. If a newer version has already changed your databases, follow the compatible-backup recovery steps before downgrading.

Manual upgrades and custom container entrypoints need a Doctor repair step before startup; official container entrypoints handle it automatically. If repair is deferred, resolve the reported problem and rerun `openclaw update repair`.

<details class="release-source-toggle">

<summary>Sources and complete change list</summary>

**Bug fixes**

- Report safe pre-write repair deferrals and stop repeating completed migration warnings; historical Tasks event ordering is superseded by retirement [#155389](https://github.com/openclaw/openclaw/pull/155389) — Thanks @johnnyjrizzo, @mattash.
- Preserve and flush legacy workspace setup archives correctly on Windows [#156704](https://github.com/openclaw/openclaw/pull/156704)

**Limits and compatibility**

- Move legacy repair to Doctor, with automatic activation in official containers [2a1402cd3e39](https://github.com/openclaw/openclaw/commit/2a1402cd3e3914352820a24961087f1de0c736d9)
- Require the 2026.9.5 bridge for pre-June installations; remove MCP attachments_fetch limit and its history fallback [#156285](https://github.com/openclaw/openclaw/pull/156285)
- Migrate retired heartbeat, llm, embeddedPi, embeddedHarness, and sandbox.perSession settings through 2026.9.5 [#156859](https://github.com/openclaw/openclaw/pull/156859)
- Retire pre-June channel-state and shared credentials/oauth.json imports with the 2026.9.5 bridge; retain supported auth JSON imports [#157165](https://github.com/openclaw/openclaw/pull/157165)

</details>

</Accordion>

<Accordion title="Interrupted package updates">

Supported POSIX npm updates print a [recovery command](https://docs.openclaw.ai/install/updating) before replacing OpenClaw. If the updater disappears, that command can repair the package and launcher. Stop other package managers first, then start OpenClaw and check it after recovery. The helper does not restore your data or plugins and does not support Windows, pnpm, or Bun update paths.

Updates now keep a successfully verified installation if only the final report fails. Update work also has no default time limit when `--timeout` is omitted, so stalled work may need cancellation. These changes apply when the new updater is running.

<details class="release-source-toggle">

<summary>Sources and complete change list</summary>

**Improvements**

- Let supported staged packages assess update compatibility, with an installed-check override [#155632](https://github.com/openclaw/openclaw/pull/155632)
- Provide external recovery for supported POSIX npm package publication and recognize bunfig.toml global roots [#158491](https://github.com/openclaw/openclaw/pull/158491) — Thanks @fuller-stack-dev, @cjn119-ui.

**Bug fixes**

- Load update-recovery service code only when needed [5de949fc4620](https://github.com/openclaw/openclaw/commit/5de949fc4620b4c62d05d780caa11870dad506ac) — Thanks Peter Steinberger.
- Preserve remaining update recovery files after filesystem ownership refusal [#148890](https://github.com/openclaw/openclaw/pull/148890) — Thanks @vincentkoc.
- Preserve a confirmed predecessor Gateway exit during update handoff [#156056](https://github.com/openclaw/openclaw/pull/156056)
- Retain updater files on suitable source storage, handle mixed links and copies, and clarify step progress [#156227](https://github.com/openclaw/openclaw/pull/156227) — Thanks @vincentkoc.
- Skip unnecessary startup polling when an update fails before activation [#156523](https://github.com/openclaw/openclaw/pull/156523) — Thanks @vincentkoc.
- Preserve original CLI errors after installation replacement, including cleanup failures [#156646](https://github.com/openclaw/openclaw/pull/156646)
- Release automatic repair-agent resources before requested maintenance [#157733](https://github.com/openclaw/openclaw/pull/157733) — Thanks @fuller-stack-dev, @donniefi.
- Clean recognized retained updater runtimes and avoid hardlinking plugin safety files [#157752](https://github.com/openclaw/openclaw/pull/157752) — Thanks @donniefi.
- Prevent false process-cleanup failures and reconcile saved update reports [#157970](https://github.com/openclaw/openclaw/pull/157970) — Thanks @fuller-stack-dev.
- Clear applying status when its exact update run finishes [#158006](https://github.com/openclaw/openclaw/pull/158006) — Thanks @vincentkoc.
- Keep verified installations in place when final reporting fails [#159072](https://github.com/openclaw/openclaw/pull/159072)
- Finish already-current updates with explicit deferred-maintenance warnings and retain cleanup leftovers [#159193](https://github.com/openclaw/openclaw/pull/159193) — Thanks @sarahliyanage, @xiaozishan, @dragomirdimitrov-mmrndm, @journey417, @h94916, @fulgerulnegru.
- Keep automatic-update campaigns with their originating Gateway lifecycle [#159306](https://github.com/openclaw/openclaw/pull/159306)
- Refuse stale update-lock release without disturbing the replacement record [#160288](https://github.com/openclaw/openclaw/pull/160288)

**Limits and compatibility**

- Make update work deadlines opt-in while retaining bounded safety checks [#153236](https://github.com/openclaw/openclaw/pull/153236) — Thanks @fuller-stack-dev.
- Stop update schema checks when their owned inspection snapshot cannot be cleaned up [#156265](https://github.com/openclaw/openclaw/pull/156265) — Thanks @fuller-stack-dev.
- Expose previous-Gateway verification and cleanup waits with their timeout and rollback limits [#157329](https://github.com/openclaw/openclaw/pull/157329) — Thanks @wg-mojo, @romneyda.
- Extend progressing candidate startup within a finite ceiling and retain stricter readiness refusals [#159504](https://github.com/openclaw/openclaw/pull/159504) — Thanks @securecloudprojo, @jefrh1.

</details>

</Accordion>

<Accordion title="Source installation updates">

[Source updates](https://docs.openclaw.ai/cli/update/how-updates-run) now rebuild missing or stale program files even when the source is already current. They also check for build locks and conflicting worktrees before stopping OpenClaw. If an older updater gets stuck, use the [manual source-update procedure](https://docs.openclaw.ai/install/updating/update-methods) from an external terminal. Confirm all associated compiler processes have stopped before releasing a build lock. Rollback may leave OpenClaw stopped when local changes prevent restoring the previous source.

When the installed updater includes this fix, an eligible failed Git update can restore the previous version even without usable branch history. It leaves the checkout detached at the previous commit and the branch at the failed candidate. Follow the [branch repair instructions](https://docs.openclaw.ai/cli/update/how-updates-run) in the rollback report before continuing work on that branch.

<details class="release-source-toggle">

<summary>Sources and complete change list</summary>

**Improvements**

- Reduce allocation work in native build artifact validation [#156219](https://github.com/openclaw/openclaw/pull/156219) — Thanks @jalehman.
- Reduce source-loading work during legacy channel ownership repair [#156238](https://github.com/openclaw/openclaw/pull/156238)
- Reduce name-lookup work in Git source-build artifact checks [#157480](https://github.com/openclaw/openclaw/pull/157480)
- Reduce reference-staging work during Git update inspection [#157567](https://github.com/openclaw/openclaw/pull/157567)
- Generate parent node-command help from available metadata during source builds [#157586](https://github.com/openclaw/openclaw/pull/157586)
- Reuse shared JavaScript import scans during candidate-build validation [#158296](https://github.com/openclaw/openclaw/pull/158296)

**Bug fixes**

- Run fresh verification after same-commit Git rebuilds [3813c048eb7b](https://github.com/openclaw/openclaw/commit/3813c048eb7bc84874743976e34fb9ea8aa4f0cd) — Thanks @mikywang.
- Protect discovered live Gateways during source rebuilds and re-enable verified Windows tasks on explicit start [d09ffd222826](https://github.com/openclaw/openclaw/commit/d09ffd222826fcd4545431f24056de42373f6e69) — Thanks @donniefi.
- Reject changed configuration before unnecessary Git candidate checks [#155656](https://github.com/openclaw/openclaw/pull/155656) — Thanks @vincentkoc.
- Rebuild stale Git runtimes even when the source revision is already current [#156996](https://github.com/openclaw/openclaw/pull/156996) — Thanks @donniefi.
- Limit Git update checks to the intended upstream and preserve truthful comparison results [#157432](https://github.com/openclaw/openclaw/pull/157432)
- Check npm update ownership at the resolved installation rather than an unrelated shell prefix [#158285](https://github.com/openclaw/openclaw/pull/158285) — Thanks @nomisfi.
- Exclude incidental abandoned runtime staging from Git dependency scans while preserving its files [#158338](https://github.com/openclaw/openclaw/pull/158338) — Thanks @jalehman.
- Check relevant Git worktree branch reservations before candidate preparation and shutdown [#158446](https://github.com/openclaw/openclaw/pull/158446) — Thanks @patrick-erichsen.
- Check retained source-build locks before stopping the Gateway [#158849](https://github.com/openclaw/openclaw/pull/158849) — Thanks @hannesrudolph.
- Rebuild incomplete current-source runtimes and expose local artifact readiness [#158931](https://github.com/openclaw/openclaw/pull/158931) — Thanks @shakkernerd.
- Retain source updater dependencies across eligible retired workspace links [#159035](https://github.com/openclaw/openclaw/pull/159035) — Thanks @shakkernerd.
- Preserve local work and worktree-held branches during retained Git rollback [#160170](https://github.com/openclaw/openclaw/pull/160170)
- Retain build ownership when recording uncertain compiler cleanup fails [#160176](https://github.com/openclaw/openclaw/pull/160176) — Thanks @vincentkoc.
- Restore eligible Git updates on a detached checkout when branch history is unavailable, with guarded branch repair guidance [#160828](https://github.com/openclaw/openclaw/pull/160828)

**Documentation**

- Tell source-rebuild callers to retry their original command [#160206](https://github.com/openclaw/openclaw/pull/160206)

**Limits and compatibility**

- Refuse the macOS live-updater helper on other platforms before changing Git [34757eb29845](https://github.com/openclaw/openclaw/commit/34757eb298452ac4dc05fab3d222a682aaf0c3f9) — Thanks @donniefi.

</details>

</Accordion>

<Accordion title="Bun and Node updates">

Bun installations running the new updater can update, repair, and run Doctor without adding Node, while keeping an explicitly selected Bun runtime. Follow the [Bun setup guide](https://docs.openclaw.ai/install/bun-compatibility) for a first installation. Updaters through 2026.9.6 still need the documented workaround for their first Bun-only upgrade. Run Doctor and repair from the installation used by your Gateway.

On macOS and Linux, Bun headless nodes running the fixed updater can prepare later automatic updates without Node or npm. Windows still requires npm. Bun release discovery and OpenClaw package downloads use public npm even when npm is configured with a private mirror. If your installation requires that mirror, disable `nodeHost.autoUpdate.enabled` and use your normal update process. Node-based services can also recover from a missing Node executable by selecting a supported replacement; custom wrappers need their own repair.

Headless nodes using the default plugins can now activate a prepared update when idle. Nodes running published 2026.9.6 need one manual `openclaw update` followed by `openclaw node restart` to receive this repair. For foreground nodes, stop and restart `openclaw node run` instead. Follow the [node update recovery guidance](https://docs.openclaw.ai/install/update-troubleshooting); running work, plugins that cannot report whether they are idle, and database compatibility checks can still defer automatic activation.

<details class="release-source-toggle">

<summary>Sources and complete change list</summary>

The npm requirement in the earlier Bun discovery change below is superseded on macOS and Linux by the later preparation fix.

**Improvements**

- Refresh dependencies, preserve plugin and Teams compatibility, and update rootless Node provisioning [#157238](https://github.com/openclaw/openclaw/pull/157238)

**Bug fixes**

- Select a supported replacement for a missing direct-Node update runtime [#158016](https://github.com/openclaw/openclaw/pull/158016) — Thanks @olli0103, @obviyus, @coygeek.
- Keep Bun-invoked repair maintenance on the invoking Bun executable [#158195](https://github.com/openclaw/openclaw/pull/158195)
- Prevent recursive Bun config-reader children and preserve synchronous read results [#158451](https://github.com/openclaw/openclaw/pull/158451) — Thanks @hannesrudolph.
- Support fixed Bun-only maintenance and correct Bun/pnpm candidate staging [#159431](https://github.com/openclaw/openclaw/pull/159431)
- Preserve a managed Bun Gateway’s installation and runtime pin across supported updates [#160495](https://github.com/openclaw/openclaw/pull/160495)
- Prepare subsequent Bun headless-node updates without npm on macOS and Linux; Windows retains the npm requirement [#160575](https://github.com/openclaw/openclaw/pull/160575)
- Let idle headless nodes with default plugins activate prepared updates after the one-time manual update and restart from 2026.9.6 [#160790](https://github.com/openclaw/openclaw/pull/160790)

**Limits and compatibility**

- Discover Bun headless-node releases through the public registry while installation still requires npm [#160154](https://github.com/openclaw/openclaw/pull/160154)

</details>

</Accordion>

<Accordion title="Plugin installation repair">

Doctor keeps existing plugin files until their replacements are recorded and can finish deferred migrations after installing missing plugins. It can also repair [archive-installed plugin links](https://docs.openclaw.ai/cli/plugins/install) without the original archive. If an older updater hits the affected `import.meta` error, follow the [disable, update, and re-enable steps](https://docs.openclaw.ai/install/update-troubleshooting). After an update, run `openclaw completion --write-state` if you want plugin commands included in shell completion.

After a completed plugin migration, `openclaw doctor --fix` can clear repeated warnings about retained source files by archiving leftover history pointers. The imported conversations stay in place, and the archived files remain recoverable.

<details class="release-source-toggle">

<summary>Sources and complete change list</summary>

**Improvements**

- Identify differing session metadata fields during retained-source recovery [#156162](https://github.com/openclaw/openclaw/pull/156162) — Thanks @redxzeta, @zhiyuan82-tech, @liuxb553-panda, @alexanderfyuan-design.
- Inspect declared plugin migration data before legacy update rehearsals [#156326](https://github.com/openclaw/openclaw/pull/156326) — Thanks @fuller-stack-dev.
- Prepare plugin-snapshot parent directories once before copying [#158562](https://github.com/openclaw/openclaw/pull/158562) — Thanks @vincentkoc.
- Avoid repeated directory work in portable plugin snapshot copying [#159245](https://github.com/openclaw/openclaw/pull/159245)

**Bug fixes**

- Complete workspace migration after repairing legacy plugin installation records [d069a6cfd884](https://github.com/openclaw/openclaw/commit/d069a6cfd884286a0599e10e34a6bf6f35966e09) — Thanks @fuller-stack-dev.
- Keep read-only Doctor inspections from leaving later native plugin loads dependent on deleted diagnostic files [25df9ed0f581](https://github.com/openclaw/openclaw/commit/25df9ed0f5815bdd613aaeb0344418777ba729e7)
- Repair missing runtime plugins using release policy and reject mismatched npm packages [#119857](https://github.com/openclaw/openclaw/pull/119857) — Thanks @vincentkoc, @mrclawfield, @thoth-ctl, @brokemac79, @romneyda, @haldana88, @agentsolomon, @jumpunder, @reyesadrian.
- Preserve existing plugin files until replacement records commit [#147827](https://github.com/openclaw/openclaw/pull/147827) — Thanks @vincentkoc, @fuller-stack-dev.
- Refresh deferred session-migration plans after installing missing plugins [#155827](https://github.com/openclaw/openclaw/pull/155827) — Thanks @vincentkoc.
- Keep completed core session imports available while preserving conflicting plugin sources [#156052](https://github.com/openclaw/openclaw/pull/156052) — Thanks @liuxb553-panda, @zhiyuan82-tech, @ozp, @redxzeta, @funklawfirm-dotcom.
- Distinguish verified unrelated Node services during eligible plugin-capture cleanup [#157102](https://github.com/openclaw/openclaw/pull/157102) — Thanks @xilopaint.
- Retain the selected plugin inventory through startup session repair [#157479](https://github.com/openclaw/openclaw/pull/157479) — Thanks @jscd98, @torsie.
- Inspect valid import.meta assignments in plugin dependencies and name remaining parse failures [#157862](https://github.com/openclaw/openclaw/pull/157862) — Thanks @obviyus.
- Repair registered archive-plugin host links without the original archive [#158002](https://github.com/openclaw/openclaw/pull/158002)
- Restore configured model limits without a discovery deadlock after failed plugin publication [#158194](https://github.com/openclaw/openclaw/pull/158194)
- Defer external Reef migration data during rehearsal and preserve malformed Workboard attachment records [#158847](https://github.com/openclaw/openclaw/pull/158847)
- Permit eligible macOS capture cleanup beside unreadable foreign-account processes [#159370](https://github.com/openclaw/openclaw/pull/159370) — Thanks @bdjben.
- Avoid false WhatsApp source-change refusals from capture-owned hardlinks [#159650](https://github.com/openclaw/openclaw/pull/159650)
- Prefer explicitly bundled matching plugins over eligible stale managed npm copies [#160099](https://github.com/openclaw/openclaw/pull/160099)
- Archive leftover history pointers after successful plugin migration so retained-source warnings clear [#160755](https://github.com/openclaw/openclaw/pull/160755) — Thanks @obviyus, @spikewillcocks.

**Limits and compatibility**

- Avoid duplicate completion plugin loading; automatic update refresh remains core-only [#160546](https://github.com/openclaw/openclaw/pull/160546)

</details>

</Accordion>

<Accordion title="Conversation history recovery">

[Doctor](https://docs.openclaw.ai/cli/doctor/sqlite-maintenance) can recover more saved conversation history, including verified transcripts whose old index is missing. Reimporting a restored index preserves newer conversation names, pins, and history. Stop OpenClaw and make a verified backup before repairing history. Keep recovery manifests with the original files and follow Doctor's instructions when it reports conflicts or unknown deletion history; damaged or missing history is not always recoverable.

<details class="release-source-toggle">

<summary>Sources and complete change list</summary>

**Improvements**

- Repair eligible database index damage explicitly with Doctor [edf43e816304](https://github.com/openclaw/openclaw/commit/edf43e81630451bc6080779ea3040ed4d871016e) — Thanks @martinxomag.
- Avoid repeated Doctor media-repair detection and aggregate scans [#156299](https://github.com/openclaw/openclaw/pull/156299)

**Bug fixes**

- Preserve held databases when deletion history is missing [c6b21f6f086a](https://github.com/openclaw/openclaw/commit/c6b21f6f086a8f3c16bbd37eb143906c9035a09e) — Thanks @joshpetras.
- Preserve legacy ACP session ownership and refuse conflicting imports [#155791](https://github.com/openclaw/openclaw/pull/155791) — Thanks @vincentkoc.
- Keep unreadable legacy session history in place for explicit repair [#156105](https://github.com/openclaw/openclaw/pull/156105) — Thanks @joshavant.
- Summarize repeated historical archive warnings while retaining complete JSON findings [#156551](https://github.com/openclaw/openclaw/pull/156551) — Thanks @nianjiuzst, @aalmann.
- Require valid ownership configuration before rebuilding missing deletion history [#157037](https://github.com/openclaw/openclaw/pull/157037) — Thanks @joshpetras.
- Resume history-budget cleanup after temporary database contention [#157064](https://github.com/openclaw/openclaw/pull/157064)
- Retry brief database maintenance contention and expose observed Linux holder details [#157121](https://github.com/openclaw/openclaw/pull/157121)
- Preserve current session metadata during recorded restored-index reimport [#157615](https://github.com/openclaw/openclaw/pull/157615) — Thanks @vincentkoc.
- Import eligible legacy device identities without native filesystem moves [#157690](https://github.com/openclaw/openclaw/pull/157690) — Thanks @masterswords1, @iwhatsskill, @bappamp4.
- Deduplicate session actions, skip malformed legacy media rows, and verify the selected plugin runtime artifact [#158487](https://github.com/openclaw/openclaw/pull/158487)
- Discover configured historical agent stores before Doctor migration and refuse unverified deletion history [#158584](https://github.com/openclaw/openclaw/pull/158584) — Thanks @609nft.
- Keep unchanged retained session archives usable after volume remounts [#158842](https://github.com/openclaw/openclaw/pull/158842) — Thanks @leon-sk668, @auriga-agents.
- Settle legacy transcripts already contained in SQLite and import only safe missing suffixes [#158857](https://github.com/openclaw/openclaw/pull/158857) — Thanks @timothyfs.
- Restore unchanged retained archives after device-number changes [#159176](https://github.com/openclaw/openclaw/pull/159176)
- Reclaim provably dead process-bound migration leases when Doctor repair resumes [#159345](https://github.com/openclaw/openclaw/pull/159345) — Thanks @desksk, @noblevision, @islandpreneur007.
- Recover verified indexless history and preserve imported originals [#159561](https://github.com/openclaw/openclaw/pull/159561) — Thanks @pmika, @caseyjustus, @as76, @609nft, @wzkagms.
- Refuse retired database paths instead of recreating old files [#159834](https://github.com/openclaw/openclaw/pull/159834)
- Retire stale database workers before replacement work without replaying writes [#159944](https://github.com/openclaw/openclaw/pull/159944) — Thanks @vincentkoc.
- Retain Doctor ownership while relocating a legacy state directory [#159965](https://github.com/openclaw/openclaw/pull/159965)

**Limits and compatibility**

- Hold legacy session imports into existing databases when deletion history is unknown [#160129](https://github.com/openclaw/openclaw/pull/160129)

</details>

</Accordion>

<Accordion title="Gateway service recovery">

Service checks distinguish a slow start from a stopped or unverified Gateway, and Linux systemd recovery handles more services left offline after updates. Recheck deep status when startup is still pending. System-wide Linux package updates still require you to restart the service yourself. Standalone [`doctor --fix`](https://docs.openclaw.ai/cli/doctor/recovery) may now start a service for the current installation even if you deliberately stopped it before repair.

On macOS, updates can refresh a recognized old service PATH. This may remove `~/bin`, `~/.nix-profile/bin`, `~/.volta/bin`, `~/.asdf/shims`, and fnm alias directories unless they contain the active runtime. If a CLI tool, MCP server, or skill stops finding a command, give it the command's absolute path. Custom PATH settings remain protected.

<details class="release-source-toggle">

<summary>Sources and complete change list</summary>

**Improvements**

- Separate routine selection notices from warnings, group paused Crabbox captures, and identify failed Team Reports sources [#157075](https://github.com/openclaw/openclaw/pull/157075)
- Report observed slow Gateway startup as still-starting with exit code 2 [#157596](https://github.com/openclaw/openclaw/pull/157596) — Thanks @obviyus, @pollybot13.
- Reduce repeated macOS process-launch work during updater retention [#157954](https://github.com/openclaw/openclaw/pull/157954) — Thanks @fuller-stack-dev.

**Bug fixes**

- Inspect registered Gateway services and report incomplete discovery [244d44197232](https://github.com/openclaw/openclaw/commit/244d4419723259463411c8c89fdeaf1c657b9bd7)
- Share service-inspection deadlines and distinguish unknown from stopped [47a9e77007f7](https://github.com/openclaw/openclaw/commit/47a9e77007f7872171325eda53f659517a0c51d0) — Thanks @vincentkoc, @jalehman, @romneyda.
- Respect external Gateway ownership in Doctor health checks [8e2b3edec608](https://github.com/openclaw/openclaw/commit/8e2b3edec608198e1fbaa6104430fdd0711361ba) — Thanks Peter Steinberger.
- Avoid repeated unchanged-database copies during Gateway restoration [942a27def95d](https://github.com/openclaw/openclaw/commit/942a27def95d224a72794e3641f63b4889f85259) — Thanks @fuller-stack-dev, Peter Steinberger.
- Keep Linux service actions and duplicate cleanup on the selected installation [#119674](https://github.com/openclaw/openclaw/pull/119674) — Thanks @sebtardif, @fuller-stack-dev, @jordannewell.
- Handle protected macOS service definitions during supported activation checks [#149307](https://github.com/openclaw/openclaw/pull/149307) — Thanks @pollybot13, @patrick-erichsen, @bitkylin, @texasaggie1.
- Report verified local Gateway absence without spending the startup wait [#154637](https://github.com/openclaw/openclaw/pull/154637)
- Verify attempted update restarts and preserve Linux service PATH order [#155355](https://github.com/openclaw/openclaw/pull/155355)
- Preserve restart intent when the updated macOS controller stops the Gateway [#155433](https://github.com/openclaw/openclaw/pull/155433) — Thanks @fuller-stack-dev.
- Stop supported predecessor Gateways for candidate Doctor and restore the matching service, including with no-restart [#156138](https://github.com/openclaw/openclaw/pull/156138)
- Wait for admitted Doctor work and service restoration after handled interruptions [#156854](https://github.com/openclaw/openclaw/pull/156854) — Thanks @cbhawthorne84.
- Carry verified updater authority into macOS service activation [#156972](https://github.com/openclaw/openclaw/pull/156972) — Thanks @hannesrudolph.
- Explain when update repair leaves an already-stopped Gateway offline [#157134](https://github.com/openclaw/openclaw/pull/157134) — Thanks @romneyda.
- Prevent installation-watcher restarts from competing with suspended host updates [#157213](https://github.com/openclaw/openclaw/pull/157213) — Thanks @jalehman, @vincentkoc, @romneyda.
- Preserve authenticated suspension-progress polling during supported restart phases [#157258](https://github.com/openclaw/openclaw/pull/157258)
- Retain safe Windows Task Scheduler failure details in update reports [#157719](https://github.com/openclaw/openclaw/pull/157719)
- Recover managed updates from specifically verified stale June Gateways [#157756](https://github.com/openclaw/openclaw/pull/157756)
- Report known causes of managed Gateway restart-health failures [#157892](https://github.com/openclaw/openclaw/pull/157892) — Thanks @vincentkoc.
- Report remaining matching Linux user services after confirmed duplicate cleanup [#158034](https://github.com/openclaw/openclaw/pull/158034)
- Continue Gateway status probing when native service files are unreadable [#158218](https://github.com/openclaw/openclaw/pull/158218)
- Preserve authorized managed-helper run identity during candidate inspection [#159010](https://github.com/openclaw/openclaw/pull/159010) — Thanks @obviyus.
- Allow delayed heartbeat workers up to 60 seconds to initialize within valid lease limits [#159405](https://github.com/openclaw/openclaw/pull/159405)
- Keep unavailable startup reads eligible for supervisor retry without treating them as empty configuration [#159598](https://github.com/openclaw/openclaw/pull/159598)
- Require explicit updater-cleanup confirmation before system-service replacement [#160135](https://github.com/openclaw/openclaw/pull/160135) — Thanks @fuller-stack-dev.
- Preserve network health-check time after slow update-recovery inspection [#160393](https://github.com/openclaw/openclaw/pull/160393)
- Restore Gateway startup with `--force` on Linux hosts whose IPv6 loopback is disabled, while retaining checks for actual listeners [#160802](https://github.com/openclaw/openclaw/pull/160802) — Thanks @obviyus, @aicyberg.

**Limits and compatibility**

- Permit writable Linux system-service package updates with an operator-managed restart [#156584](https://github.com/openclaw/openclaw/pull/156584) — Thanks @ion-developing.
- Recover eligible managed services and start an already-stopped current-installation Gateway after standalone Doctor repair [#159577](https://github.com/openclaw/openclaw/pull/159577) — Thanks @matuno, @donniefi, @navras98, @dmwtech.
- Refresh exactly recognized historical macOS service PATH values with tool-path migration guidance [#160424](https://github.com/openclaw/openclaw/pull/160424) — Thanks @ayushdevo, @obviyus, @lukewd.

</details>

</Accordion>

<Accordion title="Windows service updates">

Windows updates and Doctor handle Scheduled Tasks more consistently, including graceful restart and recovery from temporary database sharing errors. If a restart result says it is unverified, check the Gateway before assuming it is online. An update stranded by an older updater may still need `openclaw update repair` from the installed version.

<details class="release-source-toggle">

<summary>Sources and complete change list</summary>

**Bug fixes**

- Find Windows Startup-folder Gateways by their exact launchers [733ceac1a7ea](https://github.com/openclaw/openclaw/commit/733ceac1a7ea340f8c766b73e33782426dca5794) — Thanks @donniefi.
- Avoid old-runtime state reads during Windows update finalizer handoff [#157262](https://github.com/openclaw/openclaw/pull/157262) — Thanks @joshbunker.
- Recognize omitted Windows Scheduled Task defaults during Doctor and refresh checks [#158422](https://github.com/openclaw/openclaw/pull/158422)
- Attempt graceful Windows restart and retry recognized SQLite sharing errors, reporting unverified activation [#159347](https://github.com/openclaw/openclaw/pull/159347) — Thanks @eddiekk.
- Retain Windows Doctor maintenance context through Scheduled Task restoration [#160457](https://github.com/openclaw/openclaw/pull/160457)

</details>

</Accordion>

<Accordion title="Container and OCM updates">

Replacement containers can wait for a previous startup to finish instead of repeatedly failing, though the wait can last up to five minutes. The default [container-worker image](https://docs.openclaw.ai/nodes/session-hosting) is now `node:24.21.0-slim`. Offline nodes must preload it or select a cached supported image, such as `node:24.19.0-slim`. A missing image prevents the worker from starting.

Docker installations using OverlayFS do less preparation and cleanup work on updates run by the fixed updater. This reduces waiting around the update, with no demonstrated reduction in Gateway downtime.

With a compatible job-capable OCM manager, you can request an [update](https://docs.openclaw.ai/install/updating) from the Control UI or internal `/update` and follow its progress through a reconnect. OCM handles verification and recovery. Explicit Git targets and unsupported package dev-channel requests are refused.

<details class="release-source-toggle">

<summary>Sources and complete change list</summary>

**Improvements**

- Request and follow compatible OCM-owned update jobs through the Gateway [#158932](https://github.com/openclaw/openclaw/pull/158932) — Thanks @shakkernerd.

**Bug fixes**

- Preserve worker environments during no-op Doctor checks and settle reconciliation errors [#156160](https://github.com/openclaw/openclaw/pull/156160)
- Preserve verified already-current outcomes and use checked copies on OverlayFS [#157770](https://github.com/openclaw/openclaw/pull/157770) — Thanks @romneyda.
- Wait for a prior container’s startup lease to release or expire [#160266](https://github.com/openclaw/openclaw/pull/160266) — Thanks @kimiyu-186.
- Reduce redundant checks and disposable-file syncing during OverlayFS update preparation and cleanup; broader update delays remain under investigation [#160845](https://github.com/openclaw/openclaw/pull/160845)

**Limits and compatibility**

- Change the default container-worker image to Node 24.21.0-slim with offline preparation guidance [#159401](https://github.com/openclaw/openclaw/pull/159401)

</details>

</Accordion>

<Accordion title="Settings reloads">

Saved settings apply without waiting for a file-change notification, and temporary database contention no longer leaves supported changes waiting for another edit. Changing channel connection settings also preserves unaffected conversation lists and model choices. [Configuration errors](https://docs.openclaw.ai/gateway/configuration/hot-reload) now explain whether a file could not be read, a setting is invalid, or a rejected edit saved nothing.

<details class="release-source-toggle">

<summary>Sources and complete change list</summary>

**Improvements**

- Explain definite pre-write configuration refusals and how to retry [#157548](https://github.com/openclaw/openclaw/pull/157548) — Thanks @shakkernerd, @donniefi.

**Bug fixes**

- Preserve unrelated environment changes when configuration validation fails [30c911eb33f9](https://github.com/openclaw/openclaw/commit/30c911eb33f9cc71016dc8a38cb862789d2168bf) — Thanks @vincentkoc.
- Retry stale secret reloads after a clean plugin rollback [71cc18ae186d](https://github.com/openclaw/openclaw/commit/71cc18ae186d5f73fcf243ed955fe237cbd40335) — Thanks @joshavant.
- Avoid include-resolver stack overflow for deeply nested values while keeping the ten-file include-chain limit [#152889](https://github.com/openclaw/openclaw/pull/152889) — Thanks @ruel225, @altaywtf, @hpyhandsome.
- Prevent deep include-detection stack overflows without changing other configuration depth limits [#153711](https://github.com/openclaw/openclaw/pull/153711) — Thanks @ruel225, @altaywtf.
- Avoid false Doctor secret warnings for known local-provider markers [#156216](https://github.com/openclaw/openclaw/pull/156216) — Thanks @iwhatsskill.
- Apply committed Gateway settings without waiting for file events and preserve pending restarts [#157372](https://github.com/openclaw/openclaw/pull/157372)
- Preserve literal configuration keys in unmatched patch-path errors [#157384](https://github.com/openclaw/openclaw/pull/157384) — Thanks @sxh313, @obviyus.
- Apply settings despite delayed duplicate file notifications [#157906](https://github.com/openclaw/openclaw/pull/157906)
- Preserve actionable configuration-field and loading-failure details in update reports [#158455](https://github.com/openclaw/openclaw/pull/158455) — Thanks @mohit, @liunan12345678-spec, @blyszcz.
- Distinguish unreadable configuration from invalid settings in CLI guidance [#158671](https://github.com/openclaw/openclaw/pull/158671) — Thanks @fuller-stack-dev.
- Retry saved hot-reloadable settings after typed pre-entry state-store contention [#159700](https://github.com/openclaw/openclaw/pull/159700)
- Return JSON failures for config patch/unset --json, including refusal without --dry-run; preserve config set parsing semantics [#159760](https://github.com/openclaw/openclaw/pull/159760)
- Retain unaffected session lists and model catalogs during channel transport reloads [#160274](https://github.com/openclaw/openclaw/pull/160274)
- Admit fully Doctor-repairable legacy plugin settings with unchanged preflight bytes [#160304](https://github.com/openclaw/openclaw/pull/160304)
- Preserve agent purpose and agent-specific model targets through rescue confirmation [#160454](https://github.com/openclaw/openclaw/pull/160454)

</details>

</Accordion>

<Accordion title="Shutdown and restart">

Restarts handle active settings changes and plugin reloads more carefully, fixing several shutdown stalls. Clients waiting for results or approvals can disconnect and reconnect without cancelling the underlying work. These fixes take effect once the new Gateway is running; they cannot change a shutdown already handled by an older version.

<details class="release-source-toggle">

<summary>Sources and complete change list</summary>

**Bug fixes**

- Reuse existing paired local credentials for update drain [#156147](https://github.com/openclaw/openclaw/pull/156147)
- Fit macOS shutdown work to the loaded launchd deadline; short custom deadlines leave less cleanup time, and edited service files must be reloaded to take effect [#157007](https://github.com/openclaw/openclaw/pull/157007) — Thanks @etzelm, @patrick-erichsen.
- Avoid shutdown wait cycles during plugin reload [#157979](https://github.com/openclaw/openclaw/pull/157979)
- Cancel cooperative model acquisition before final Gateway shutdown waits [#158047](https://github.com/openclaw/openclaw/pull/158047)
- Skip bundle preparation for nodes without bundle-retention support [#158490](https://github.com/openclaw/openclaw/pull/158490)
- Stop optional prewarm admission when the Gateway scheduler closes [#158666](https://github.com/openclaw/openclaw/pull/158666) — Thanks @fuller-stack-dev.
- Reset host-wake sampling baselines after recovery completes [#159111](https://github.com/openclaw/openclaw/pull/159111)
- Release passive result and decision waits during disconnect or committed shutdown [#159699](https://github.com/openclaw/openclaw/pull/159699)
- Prevent canceled cloud-worker turns from starting tunnels and observe late failures [#160062](https://github.com/openclaw/openclaw/pull/160062)
- Join active restart-recovery retries and cancel pending retries on shutdown [#160335](https://github.com/openclaw/openclaw/pull/160335)
- Join admitted Activity recap work and continuations during shutdown [#160340](https://github.com/openclaw/openclaw/pull/160340)
- Join configuration recovery and prevent closed owners emitting stale restart retries [#160375](https://github.com/openclaw/openclaw/pull/160375)

</details>

</Accordion>

<Accordion title="Workspace cleanup and recovery">

Automatic [worktree cleanup](https://docs.openclaw.ai/concepts/managed-worktrees) starts one hour after OpenClaw starts. Frequent restarts can delay it, so use `openclaw worktrees gc` when you need immediate cleanup. Moved or unreadable worktrees are kept for inspection, and session-cleanup dry runs avoid changing records.

For an interrupted clean removal, `openclaw worktrees recover-removal` can recover from the original snapshot. Stop other programs writing to that worktree first and leave space to rebuild missing files. Use `retire-snapshot` only when you no longer need that snapshot's managed restore option; retirement permanently removes it. Orphans without a snapshot require manual recovery in a separate checkout.

<details class="release-source-toggle">

<summary>Sources and complete change list</summary>

**Improvements**

- Recover interrupted ordinary clean worktree removals from their original snapshot [#156529](https://github.com/openclaw/openclaw/pull/156529) — Thanks @fuller-stack-dev.
- Reduce shared-state write contention during managed-worktree cleanup [#156821](https://github.com/openclaw/openclaw/pull/156821)
- Skip removed-worktree history during cleanup limit checks [#159004](https://github.com/openclaw/openclaw/pull/159004)

**Bug fixes**

- Preserve moved worktrees and report all retained orphan-recovery paths [#157112](https://github.com/openclaw/openclaw/pull/157112)
- Use a fixed operational reserve plus estimated writes for managed worktrees [#157356](https://github.com/openclaw/openclaw/pull/157356) — Thanks @vincentkoc.
- Retain permission-denied managed worktrees for later cleanup [#157566](https://github.com/openclaw/openclaw/pull/157566)
- Select exact session/agent sandboxes before probing backends; --force still skips confirmation only [#157808](https://github.com/openclaw/openclaw/pull/157808) — Thanks @vincentkoc.
- Keep session-cleanup dry runs free of registry and integrity-receipt writes [#159316](https://github.com/openclaw/openclaw/pull/159316) — Thanks @desksk.

**Limits and compatibility**

- Allow explicit early retirement of an eligible removed-worktree snapshot, permanently forfeiting managed restore [#156464](https://github.com/openclaw/openclaw/pull/156464) — Thanks @fuller-stack-dev.
- Delay automatic worktree cleanup until one hour after startup while preserving manual cleanup [#158989](https://github.com/openclaw/openclaw/pull/158989)

</details>

</Accordion>

<Accordion title="Database and history cleanup">

Background cleanup can continue while you use other conversations, and older conversations can open between cleanup steps. Opening large databases already in the current format also does less repeated checking. Those [startup checks](https://docs.openclaw.ai/reference/database-schemas/integrity-and-recovery) are narrower and can miss some corruption; Doctor, daily verification, migrations, and repairs still run full checks.

<details class="release-source-toggle">

<summary>Sources and complete change list</summary>

**Improvements**

- Move session-maintenance planning and archive metadata queries into workers [#155988](https://github.com/openclaw/openclaw/pull/155988)
- Reduce session-cleanup reference work on the Gateway thread [#156830](https://github.com/openclaw/openclaw/pull/156830)
- Remove repeated foreground reference scans during history cleanup [#157572](https://github.com/openclaw/openclaw/pull/157572)
- Avoid duplicate healthy-database integrity scans during Doctor media migration [#158366](https://github.com/openclaw/openclaw/pull/158366)
- Reuse transaction-local schema inspection during managed-node database admission [#158385](https://github.com/openclaw/openclaw/pull/158385)
- Run periodic database checkpoints and bounded reclamation in existing writer workers [#158570](https://github.com/openclaw/openclaw/pull/158570)
- Reuse eligible idle Node readers after exact session-database cleanup [#158763](https://github.com/openclaw/openclaw/pull/158763)
- Reuse verification after clean same-version managed restarts and report incomplete cleanup [#159753](https://github.com/openclaw/openclaw/pull/159753)

**Bug fixes**

- Allow session writes between archive cleanup units while preserving recovery copies [#156014](https://github.com/openclaw/openclaw/pull/156014)
- Read SQLite schema checks from a consistent snapshot and release failed inspection cursors [#156108](https://github.com/openclaw/openclaw/pull/156108) — Thanks @galiniliev.
- Allow archived conversations to load between unrelated cleanup units [#156338](https://github.com/openclaw/openclaw/pull/156338)
- Wait for quiet writes and bound automatic session-cleanup retries [#156583](https://github.com/openclaw/openclaw/pull/156583) — Thanks @abuegab1-spec.
- Yield Gateway events while periodic database maintenance waits for coordination [#157484](https://github.com/openclaw/openclaw/pull/157484)
- Retain maintenance ownership through valid slow heartbeat renewal [#157696](https://github.com/openclaw/openclaw/pull/157696) — Thanks @fuller-stack-dev, @ludwigtheo0815, @laurentschwartz.
- Allow bounded cleanup after complete checkpoints even when WAL truncation stays blocked [#158773](https://github.com/openclaw/openclaw/pull/158773)
- Allow session cleanup during unrelated writes while rechecking selected history [#159083](https://github.com/openclaw/openclaw/pull/159083)
- Keep eligible session-cleanup plans through unrelated activity while rechecking active and protected history [#160815](https://github.com/openclaw/openclaw/pull/160815)

**Limits and compatibility**

- Shorten current-schema agent admission using narrower checks while retaining full verification paths [#159445](https://github.com/openclaw/openclaw/pull/159445)

</details>

</Accordion>

<Accordion title="Gateway diagnostics">

[Diagnostics](https://docs.openclaw.ai/gateway/diagnostics) show more detail about worker memory use and failed operations. Deep status and Doctor warn when the running Gateway has lost its Node executable and needs a restart. For monitoring, use [`/readyz`](https://docs.openclaw.ai/gateway/health) to detect recorded terminal database failures; `/healthz` only shows that the process is alive.

Administrators can opt into [heap snapshots](https://docs.openclaw.ai/gateway/diagnostics#full-heap-snapshot) to investigate memory growth. A snapshot pauses the Gateway, cannot be cancelled once capture starts, and may need roughly twice its heap memory plus disk space. It covers the main Node process, not workers. Capture during a quiet period without other profilers running. Files and comparison results may contain credentials or messages, so keep them private and delete them manually.

<details class="release-source-toggle">

<summary>Sources and complete change list</summary>

**Improvements**

- Expose session-catalog stage timing through enabled diagnostics [#155786](https://github.com/openclaw/openclaw/pull/155786) — Thanks @grynn.
- Attribute message and execution traces to the known agent [#156018](https://github.com/openclaw/openclaw/pull/156018) — Thanks @patrick-erichsen, @ryan-dyer-sp.
- Add completed agent commentary to supported diagnostic traces with content capture opt-in [#156343](https://github.com/openclaw/openclaw/pull/156343) — Thanks @vincentkoc.
- Show plugin-state failure causes and the originating runtime identity [#157004](https://github.com/openclaw/openclaw/pull/157004) — Thanks @fuma2013.
- Warn when the running Gateway retains a removed Node executable [#157190](https://github.com/openclaw/openclaw/pull/157190) — Thanks @olli0103, @obviyus, @jihoon-ernesto.
- Explain state-database contention without sending users to the same blocked Doctor path [#157588](https://github.com/openclaw/openclaw/pull/157588)
- Summarize expected retained-subagent recovery notices at startup [#157594](https://github.com/openclaw/openclaw/pull/157594)
- Expose CPU-profiler startup blocking time as a separate diagnostic [#158361](https://github.com/openclaw/openclaw/pull/158361)
- Identify supplied run, session, and requester identity in queue wait and failure logs [#158549](https://github.com/openclaw/openclaw/pull/158549)
- Show live tracked JavaScript Worker counts by pool [#158561](https://github.com/openclaw/openclaw/pull/158561)
- Move diagnostic-capture storage to workers and drain admitted captures on orderly exit [#158848](https://github.com/openclaw/openclaw/pull/158848)
- Expose the next scheduled wake in coordinated diagnostic sampling [#159389](https://github.com/openclaw/openclaw/pull/159389)
- Add opt-in collected-object heap samples, with additional profiler memory use [#159892](https://github.com/openclaw/openclaw/pull/159892)
- Capture administrator-only Node main-isolate heap snapshots and compare same-process retained objects offline [#160040](https://github.com/openclaw/openclaw/pull/160040)

**Bug fixes**

- Release Doctor inspection handles, preserve completed findings, and detect replaced macOS skill folders [f53cce01b45a](https://github.com/openclaw/openclaw/commit/f53cce01b45aef0af95b22c543d32739f99fa990) — Thanks @giodl73-repo, @fuller-stack-dev, Peter Steinberger.
- Retain Mac Node-worker dependencies during Bun-driven packaging and expose nested diagnostic errors [#155292](https://github.com/openclaw/openclaw/pull/155292)
- Release waiting SQLite lease snapshots and identify slow-operation context [#156390](https://github.com/openclaw/openclaw/pull/156390)
- Report terminal shared-state database failures through Gateway readiness [#156700](https://github.com/openclaw/openclaw/pull/156700) — Thanks @martinxomag, @liemnhoang.
- Keep unrelated Gateway requests moving during System-agent Doctor checks [#157228](https://github.com/openclaw/openclaw/pull/157228) — Thanks @todddickerson.
- Preserve state-migration maintenance error classification across workers [#157458](https://github.com/openclaw/openclaw/pull/157458)
- Report superseded maintenance as expected retries rather than Worker failures [#157834](https://github.com/openclaw/openclaw/pull/157834) — Thanks @obviyus.
- Distinguish SQLite worker launch and permission errors from capacity failures [#157841](https://github.com/openclaw/openclaw/pull/157841) — Thanks @vincentkoc.
- Report leftover paths and reasons after offline agent Trash failures [#158052](https://github.com/openclaw/openclaw/pull/158052) — Thanks @sebtardif.
- Keep absent state uncreated during failed-channel-event health checks [#158288](https://github.com/openclaw/openclaw/pull/158288)
- Reuse unchanged catalog workspace contexts and report direct-worker memory coverage [#158323](https://github.com/openclaw/openclaw/pull/158323) — Thanks @highfly-hi, @zl0nline, @oleagui, @goslingmanagment.
- Move ingress-pressure health queries to a read worker without creating absent state [#158412](https://github.com/openclaw/openclaw/pull/158412)
- Move optional diagnostic transcript enrichment off the Gateway thread and skip disabled log levels [#158530](https://github.com/openclaw/openclaw/pull/158530)
- Retain underlying Doctor state-lock failure causes [#158993](https://github.com/openclaw/openclaw/pull/158993) — Thanks @kirylh.
- Restore authentication-expiry alerts, including the final usable hour; stop Podman setup and launch before saving a token or starting a container if its random source fails [#160798](https://github.com/openclaw/openclaw/pull/160798)
- Report the unreadable configuration path and read error in health commands, including JSON output [#160885](https://github.com/openclaw/openclaw/pull/160885)

**Documentation**

- Distinguish slow successful SQLite steps from actual lock errors [#155607](https://github.com/openclaw/openclaw/pull/155607)
- Add native startup diagnostics and manual Linux core-capture guidance for sensitive crash files [#157055](https://github.com/openclaw/openclaw/pull/157055)

**Limits and compatibility**

- Return failure for blank or missing explicitly requested session-tail keys [#159704](https://github.com/openclaw/openclaw/pull/159704)

</details>

</Accordion>

<Accordion title="Update progress and reports">

Update progress and [history](https://docs.openclaw.ai/cli/update/status-and-history) show more of the steps that ran and what failed. Choose **Settings → Updates → Diagnose update** when you want help; opening the dashboard no longer starts diagnosis automatically. Named administrators can review a sanitized failure report and open a GitHub issue draft to submit with their own account. Failed uploads keep the report for retry, while uncertain submissions offer a status check to avoid duplicates.

<details class="release-source-toggle">

<summary>Sources and complete change list</summary>

**Improvements**

- Show elapsed update waits and date saved update outcomes [417bc5ba7c1d](https://github.com/openclaw/openclaw/commit/417bc5ba7c1d1a30911e91058e2369cbe16554a0) — Thanks @romneyda.
- Show Git runtime-staging progress, duration, and failures [#155671](https://github.com/openclaw/openclaw/pull/155671) — Thanks @vincentkoc, @romneyda.
- Let named administrators review failed-update reports and open a browser issue draft [#155932](https://github.com/openclaw/openclaw/pull/155932) — Thanks @hannesrudolph.
- List retained recovery sets and their recorded status in update status [#156366](https://github.com/openclaw/openclaw/pull/156366) — Thanks @fuller-stack-dev.
- Start failed-update diagnosis only when the operator requests it [#157359](https://github.com/openclaw/openclaw/pull/157359) — Thanks @fuller-stack-dev.
- Record runtime-retention stage durations and file counts in update history [#157386](https://github.com/openclaw/openclaw/pull/157386) — Thanks @vincentkoc.
- Expose preferred stable or beta Git release targets in eligible JSON status [#158926](https://github.com/openclaw/openclaw/pull/158926) — Thanks @shakkernerd.

**Bug fixes**

- Explain Doctor refusals in failed update reports [0a6f1fa28b73](https://github.com/openclaw/openclaw/commit/0a6f1fa28b7312b767bd25e6cfef01e25bd75414) — Thanks @vincentkoc.
- Move update-history reads into database workers and refuse lightweight repair success when new maintenance requirements appear [5ff5fb278348](https://github.com/openclaw/openclaw/commit/5ff5fb278348bb6d2280bfbfb7e5cd3a66e74712)
- Preserve original update failure causes and mark truncated npm excerpts [#156189](https://github.com/openclaw/openclaw/pull/156189) — Thanks @shadesurgeon, @potterdigital.
- Keep Git update counts, links, and confirmation details on the same comparison [#156410](https://github.com/openclaw/openclaw/pull/156410)
- Preserve original migration failures and timestamps in SQLite recovery reports [#156431](https://github.com/openclaw/openclaw/pull/156431) — Thanks @s93101179, @vishubh043-dev.
- Explain stale local Git tracking information during dry-run previews [#156447](https://github.com/openclaw/openclaw/pull/156447) — Thanks @patrick-erichsen.
- Distinguish unresolved recorded update ownership from a resumed updater [#156472](https://github.com/openclaw/openclaw/pull/156472) — Thanks @patrick-erichsen.
- Preserve prepared failed-update reports for explicit retry or status-only reconciliation [#156633](https://github.com/openclaw/openclaw/pull/156633) — Thanks @eleqtrizit, @iwhatsskill, @obviyus, @stevenlee-oai, @galiniliev.
- Prevent recursive Doctor authority checks during chat-triggered updates [#157273](https://github.com/openclaw/openclaw/pull/157273) — Thanks @yoyo837, @gr33n93, @hensarj, @gisk0, @dasx.
- Report known automatic-update policy before installation discovery completes [#158301](https://github.com/openclaw/openclaw/pull/158301)
- Distinguish verified external update callers and retain specific service-refusal reasons [#158314](https://github.com/openclaw/openclaw/pull/158314) — Thanks @romneyda, @sarahliyanage, @xiaozishan, @dragomirdimitrov-mmrndm.
- Record reached phases and causes for unexpected update failures before report handoff [#158354](https://github.com/openclaw/openclaw/pull/158354) — Thanks @cp7553479.
- Retain failed npm attempts and sanitize Git checkout error references [#158877](https://github.com/openclaw/openclaw/pull/158877) — Thanks @iwhatsskill.
- Retain recognized missing GLIBC versions in sanitized update reports [#159310](https://github.com/openclaw/openclaw/pull/159310) — Thanks @pennyvibe.
- Keep generic worker diagnostics on stderr so Doctor JSON remains parseable [#159351](https://github.com/openclaw/openclaw/pull/159351)
- Report validation-created source edits as a failed candidate clean check [#159397](https://github.com/openclaw/openclaw/pull/159397)
- Skip misleading shutdown advice when optional CLI capture cleanup meets expected ownership contention [#159717](https://github.com/openclaw/openclaw/pull/159717)
- Show Unknown for missing Git installation dates without promising a future timestamp [#159907](https://github.com/openclaw/openclaw/pull/159907) — Thanks @shakkernerd.
- Log Dashboard update failures with recognized safe reasons [#160091](https://github.com/openclaw/openclaw/pull/160091) — Thanks @chopin-op60, @obviyus, @boatangle.
- Keep nonfatal Doctor warnings visible on stderr without corrupting JSON reports or falsely blocking updates [#160184](https://github.com/openclaw/openclaw/pull/160184)
- Retain named warning and failure identities in compacted update history [#160430](https://github.com/openclaw/openclaw/pull/160430)
- Identify database, approval, or plugin phases in snapshot failures [#160436](https://github.com/openclaw/openclaw/pull/160436)

**Documentation**

- Clarify release channels, validation, and independent native-app availability [348bd81b553b](https://github.com/openclaw/openclaw/commit/348bd81b553b97e32022dc052c21490c34367321) — Thanks @romneyda.

</details>

</Accordion>

<Accordion title="Update preparation">

Update preparation avoids repeated file copying and checks, reducing work before installation. Most of these savings begin with later updates run by the new updater. The time saved depends on your installation, and required repairs and final checks still run.

Candidate compatibility checks also preserve the original profile and agent database files, including when an incompatible update is refused.

<details class="release-source-toggle">

<summary>Sources and complete change list</summary>

**Improvements**

- Reduce copying while retaining the running updater [#155977](https://github.com/openclaw/openclaw/pull/155977)
- Reduce repeated path lookups in update preparation and preserve directory self-links [#156748](https://github.com/openclaw/openclaw/pull/156748) — Thanks @fuller-stack-dev.
- Reuse updater ownership readers while checking current authority on each observation [#156757](https://github.com/openclaw/openclaw/pull/156757) — Thanks @fuller-stack-dev.
- Reuse private database snapshots during update preparation [#157115](https://github.com/openclaw/openclaw/pull/157115)
- Copy independent plugin-preparation files concurrently and settle started copies before cleanup [#157199](https://github.com/openclaw/openclaw/pull/157199)
- Reuse packaged CLI compile caches with seven-day age and 512 MiB best-effort cleanup targets [#157528](https://github.com/openclaw/openclaw/pull/157528) — Thanks @wlassalle724, @freshxiaoyao.
- Avoid repeated directory preparation during retained-runtime materialization [#158340](https://github.com/openclaw/openclaw/pull/158340)
- Skip metadata probes already known absent during update inventory [#158522](https://github.com/openclaw/openclaw/pull/158522)
- Overlap independent retained-runtime file work while joining started writes before failure cleanup [#158766](https://github.com/openclaw/openclaw/pull/158766)
- Reduce copied-state Doctor startup work and verify captured compiler input bytes [#159044](https://github.com/openclaw/openclaw/pull/159044)
- Reuse selected npm registry metadata during update preparation [#159392](https://github.com/openclaw/openclaw/pull/159392)
- Defer duplicated advisory Doctor inspections during recognized private rehearsals [#159443](https://github.com/openclaw/openclaw/pull/159443)
- Reduce the state-reader bundle by keeping unrelated update-writing and Gateway setup code out of it [#160975](https://github.com/openclaw/openclaw/pull/160975)

**Bug fixes**

- Reduce repeated directory preparation while retaining update files [aadc8ba7d782](https://github.com/openclaw/openclaw/commit/aadc8ba7d782b0242b37aece798714069899ffdd) — Thanks Peter Steinberger.
- Preserve profile database and SQLite sidecar files during read-only candidate admission [#161117](https://github.com/openclaw/openclaw/pull/161117)
- Preserve default, configured, and registered agent database files during compatibility checks, including newer-schema refusal [#161203](https://github.com/openclaw/openclaw/pull/161203)

</details>

</Accordion>

<Accordion title="FreeBSD maintenance">

FreeBSD update errors identify the failed package check more clearly. When Doctor cannot determine service status, it points to FreeBSD's package-service or foreground instructions instead of suggesting unavailable OpenClaw service commands.

<details class="release-source-toggle">

<summary>Sources and complete change list</summary>

**Bug fixes**

- Identify the failing FreeBSD package-inspection operation [#157147](https://github.com/openclaw/openclaw/pull/157147) — Thanks @vincentkoc, @lucarinaorg.

**Documentation**

- Show FreeBSD package-service or foreground recovery guidance in Doctor [#157154](https://github.com/openclaw/openclaw/pull/157154) — Thanks @vincentkoc, @lucarinaorg.

</details>

</Accordion>

<Accordion title="Work after a restart">

[Restart recovery](https://docs.openclaw.ai/gateway/restart-recovery) shows interrupted child runs separately from failures and helps the parent agent find unfinished work. Children are not automatically relaunched. Before repeating an action, the parent must check that the earlier run stopped and whether it already changed anything outside OpenClaw.

Graceful restarts also preserve completed workspace edits and the same machine for node-backed cloud and paired-device sessions. Interrupted tool calls are not replayed. This does not recover edits already lost in an older version or provide the same protection after abrupt machine loss or for SSH-backed sessions.

<details class="release-source-toggle">

<summary>Sources and complete change list</summary>

**Improvements**

- Show Interrupted status and give resumed parents up to 32 current unfinished children plus guidance to inspect the remainder [#159492](https://github.com/openclaw/openclaw/pull/159492)

**Bug fixes**

- Retain node-backed machines and completed workspace edits across graceful Gateway restarts [#159565](https://github.com/openclaw/openclaw/pull/159565)
- Settle pending subagent completions against their original owner before cleanup [#159943](https://github.com/openclaw/openclaw/pull/159943)

</details>

</Accordion>

</AccordionGroup>
## Messaging

Messaging fixes cover replies, attachments, and conversations that continue after an interruption. Some channel settings change on upgrade, with the required steps explained below.

<AccordionGroup>

<Accordion title="Telegram formatting">

[Telegram rich replies](https://docs.openclaw.ai/channels/telegram/rich-messages) keep tables aligned and display code blocks without stray formatting tags. Scheduled posts also get formatting guidance for the account sending them.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Bug fixes**

- Keep quoted streamed replies in place when implicit reply threading is off [#155040](https://github.com/openclaw/openclaw/pull/155040). Thanks @obviyus.
- Preserve rich `/status` tables and show unsupported control labels once during partial-stream finalization [#155088](https://github.com/openclaw/openclaw/pull/155088). Thanks @pollybot13, @obviyus, @alekstodo, and @ruel225.
- Render standard preformatted HTML as code blocks in rich replies, retaining authored spacing [#157858](https://github.com/openclaw/openclaw/pull/157858). Thanks @obviyus.
- Apply the delivering account's rich or plain formatting guidance to replies and announcements [#158028](https://github.com/openclaw/openclaw/pull/158028). Thanks @obviyus.
- Give eligible scheduled posts account-specific formatting guidance and preserve table spacing around removed reply or audio directives [#159442](https://github.com/openclaw/openclaw/pull/159442). Thanks @obviyus.

**Security and trust**

- Display labels for complete unsupported Markdown links without exposing their file destinations; bare paths and literal code remain outside this filtering [#137810](https://github.com/openclaw/openclaw/pull/137810). Thanks @chelsealong, @novaunboundai, @gaoanze888, and @xxg0dlessxx.

</details>

</Accordion>

<Accordion title="Telegram delivery and retries">

Telegram keeps progress visible or shows a warning when a final answer fails to arrive. If delivery is uncertain, check OpenClaw chat history before retrying, since the answer may already have reached the chat. OpenClaw does not automatically resend uncertain answers, to avoid duplicates.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Improvements**

- Move topic-binding storage off the message-handling thread while retaining ordered startup and shutdown [#156688](https://github.com/openclaw/openclaw/pull/156688).

**Bug fixes**

- Retain progress or a delivery warning after a failed final answer, without replaying accepted text or completed tools; unavailable edits can leave old progress visible [#155906](https://github.com/openclaw/openclaw/pull/155906). Thanks @obviyus.
- Coordinate bot-wide rate-limit waits and give final sends a bounded accumulated wait budget while previews yield [#157349](https://github.com/openclaw/openclaw/pull/157349). Thanks @obviyus.
- Recognize confirmed replies to the current forum topic, avoiding an extra final reply and missing transcript entry [#158054](https://github.com/openclaw/openclaw/pull/158054). Thanks @sanjays2402, @obviyus, and @yangmanbobo.
- Keep conflicting updates ordered after a preceding handler fails while independent topics continue [#158573](https://github.com/openclaw/openclaw/pull/158573).
- Close transport resources after failed webhook setup and retry polling errors with an HTTP 502 JSON-null response [#159258](https://github.com/openclaw/openclaw/pull/159258).
- Hand completed final replies to the current Telegram runtime after unrelated plugin reloads, provided the original sender and channel remain valid [#160009](https://github.com/openclaw/openclaw/pull/160009). Thanks @vacinc and @obviyus.

**Security and trust**

- Close membership-audit connections and refuse Mini App sign-in handoffs when owner access or bot configuration changes during the request [#160032](https://github.com/openclaw/openclaw/pull/160032).

**Limits and compatibility**

- Use fresh connections for new text sends and withhold retries after ambiguous delivery failures, adding a connection handshake and leaving some uncertain sends undelivered [#156842](https://github.com/openclaw/openclaw/pull/156842). See the [retry behavior](https://docs.openclaw.ai/concepts/retry).

</details>

</Accordion>

<Accordion title="Webhook setup on the Gateway port">

Telegram, Feishu, Teams, and Nextcloud Talk can receive webhooks on the Gateway's HTTP port. Follow [Doctor's migration guidance](https://docs.openclaw.ai/gateway/doctor/config-migrations#channel-webhook-listeners), update your external callback or proxy, and verify incoming messages before setting `legacyWebhook` to `false`. Keep that setting to leave the old port closed. Telegram polling and Feishu WebSocket connections are unchanged.

The setup guides for [Telegram](https://docs.openclaw.ai/channels/telegram/transports), [Feishu](https://docs.openclaw.ai/channels/feishu/configuration-reference#gateway-webhook-route), [Teams](https://docs.openclaw.ai/channels/msteams/configuration), and [Nextcloud Talk](https://docs.openclaw.ai/channels/nextcloud-talk) cover each channel's requirements. Avoid conflicting callback paths and use distinct secrets for accounts sharing a route. A Teams path conflict can stop its old listener too. On 2026.9.6, separately installed Telegram and Feishu plugins need distinct endpoints per account. If Feishu uses old host/port settings, update core before explicitly updating a pinned Feishu plugin; updating core keeps the pin.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Improvements**

- Receive Telegram callbacks on the Gateway port while retaining the default `127.0.0.1:8787` listener until explicit cutover [#158732](https://github.com/openclaw/openclaw/pull/158732).
- Receive Feishu callbacks on Gateway routes while retaining existing endpoints, including the default `127.0.0.1:3000` listener [#158861](https://github.com/openclaw/openclaw/pull/158861).
- Receive Teams callbacks on Gateway routes with existing JWT authentication and port 3978 forwarding; migrate `webhook.port` with Doctor and resolve route collisions before cutover [#158939](https://github.com/openclaw/openclaw/pull/158939).
- Receive Nextcloud Talk callbacks on Gateway routes, retaining `0.0.0.0:8788` until disabled; use distinct account secrets to avoid ambiguous routing during account shutdown [#159067](https://github.com/openclaw/openclaw/pull/159067).

**Limits and compatibility**

- Restore separately installed Telegram plugin delivery and per-account legacy listeners on supported 2026.9.6 hosts [#159844](https://github.com/openclaw/openclaw/pull/159844).
- Bind Feishu legacy endpoints before reporting ready on supported 2026.9.6 hosts, with core-first migration guidance for old listener keys [#160455](https://github.com/openclaw/openclaw/pull/160455).

</details>

</Accordion>

<Accordion title="Replacing a Telegram bot">

A replacement Telegram bot can receive new messages without the old bot's message history blocking them. Replacing a bot permanently deletes its old queued messages, even if the new bot fails to start; restoring the old token will not bring those messages back. Rotating a token for the same bot keeps its queue. See [Telegram transport guidance](https://docs.openclaw.ai/channels/telegram/transports).

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Limits and compatibility**

- Clear old-account queue records on a confirmed bot replacement so overlapping update IDs can be accepted; same-bot rotations and unknown legacy identities retain their records [#158612](https://github.com/openclaw/openclaw/pull/158612). Thanks @obviyus, @yangmanbobo, and @dankarization.
- Prepare bot identity before webhook delivery while retaining the permanent old-queue deletion and failed-startup recovery limitation [#159219](https://github.com/openclaw/openclaw/pull/159219).

</details>

</Accordion>

<Accordion title="Slack replies and progress">

Top-level Slack chats in progress mode now show a temporary reaction followed by one final answer. You can keep progress previews through [Slack messaging settings](https://docs.openclaw.ai/channels/slack/messaging). Finished cards show that work is complete and link directly to visible sessions created for the work, with separate links when there are several.

Slack proxy connections work again on Node; the separate Bun limitation remains. [Slack users linked to administrator profiles](https://docs.openclaw.ai/channels/slack/access-control) can also ask the agent to assign visible sessions to themselves.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Bug fixes**

- Restore Slack Socket Mode event reception through configured HTTP and HTTPS proxies on Node [#155841](https://github.com/openclaw/openclaw/pull/155841). Thanks @bill-starfoundry.
- Give ordinary Slack replies correct Markdown instructions for bold text and links while retaining native formatting for raw Block Kit fields [#155938](https://github.com/openclaw/openclaw/pull/155938). Thanks @pash-openai and @drtony1.
- Keep repeated cleanup of an old webhook registration from removing its replacement [#158085](https://github.com/openclaw/openclaw/pull/158085).
- Quiet top-level progress by default, retain explicit preview choices, and correct finished-card labels, accessible fallback text, and session links [#159657](https://github.com/openclaw/openclaw/pull/159657).
- Carry verified linked administrator authority through session self-assignment from native Slack messages and app mentions, with visibility and revocation checks retained [#159694](https://github.com/openclaw/openclaw/pull/159694).
- Link finished native and Block Kit progress cards to up to five visible work sessions in acceptance order, retaining the conversation link when no usable work-session link exists; hidden subagents do not replace it [#160088](https://github.com/openclaw/openclaw/pull/160088).

</details>

</Accordion>

<Accordion title="Discord threads and bot messages">

Discord replies retain the messages you quoted, including when several incoming messages are combined into one turn. You can also opt in to [follow-ups without mentions in threads the bot starts](https://docs.openclaw.ai/channels/groups#bot-created-threads), while keeping mentions required elsewhere. This needs the channel permissions described in the guide.

Discord and Slack now accept messages from other bots when `allowBots` is omitted, including after an upgrade. Set `allowBots` to `false` to keep the previous behavior. Existing access and mention rules still apply, but bot conversations can still loop.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Improvements**

- Move Discord conversation-binding storage off the Gateway thread while preserving account ordering and accepted shutdown work [#156627](https://github.com/openclaw/openclaw/pull/156627).
- Add `requireMentionInBotThreads` on supported channels so bot-created threads can use a separate mention rule [#157713](https://github.com/openclaw/openclaw/pull/157713). Thanks @seaurching.

**Bug fixes**

- Accept emoji-containing Discord Activity titles within the existing 80-code-point limit [#156096](https://github.com/openclaw/openclaw/pull/156096). Thanks @superdiaodiao and @obviyus.
- Remove late-created progress drafts when queued follow-ups settle; settlement alone does not confirm final delivery [#156186](https://github.com/openclaw/openclaw/pull/156186). Thanks @siri1410, @obviyus, and @revision-co-ltd.
- Restore direct Discord REST lookups under Bun without changing proxy selection [#156965](https://github.com/openclaw/openclaw/pull/156965). Thanks @vincentkoc.
- Restore native reply references for grouped incoming messages in batched reply mode [#158886](https://github.com/openclaw/openclaw/pull/158886).
- Learn the Discord Activity application ID supplied at startup before checking availability [#159842](https://github.com/openclaw/openclaw/pull/159842).

**Limits and compatibility**

- Preserve Discord parent-message context and change omitted Discord/Slack `allowBots` settings to enabled, with explicit opt-out retained [#157091](https://github.com/openclaw/openclaw/pull/157091).
- Restore Discord plugin loading and direct API compatibility with supported OpenClaw 2026.9.6 hosts [#159773](https://github.com/openclaw/openclaw/pull/159773).
- Restore Discord voice loading on 2026.9.6 hosts, retaining profile-only context there rather than the newer multi-session instructions [#159831](https://github.com/openclaw/openclaw/pull/159831).

</details>

</Accordion>

<Accordion title="Matrix login and approvals">

Matrix login and logout fixes prevent account changes from incorrectly marking a restarted account as stopped. Authorized reviewers can also use reactions on [Matrix approval prompts](https://docs.openclaw.ai/channels/matrix/rich-messages), including prompts restored after a restart.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Bug fixes**

- Move operational Matrix credential reads to workers and preserve completed logout results without stopping successor accounts [#156267](https://github.com/openclaw/openclaw/pull/156267).
- Accept system-agent approval reactions and restored targets under the existing approver rules [#158164](https://github.com/openclaw/openclaw/pull/158164).

</details>

</Accordion>

<Accordion title="Feishu documents and duplicate posts">

Feishu reports successful cleanup accurately and lets the agent continue editing a newly created document table. Reconnecting also stops matching rich-text posts without attachments from starting duplicate replies.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Bug fixes**

- Suppress matching attachment-free rich-text redeliveries after reconnect while preserving distinct posts and topics [#152679](https://github.com/openclaw/openclaw/pull/152679). Thanks @leilei3167, @obviyus, and @yetval.
- Correct Feishu cleanup counts and ordered table cell IDs; make failed Matrix snapshot restores settle and close storage, and pass resolved configuration to Matrix profile and verification operations [#158923](https://github.com/openclaw/openclaw/pull/158923).

</details>

</Accordion>

<Accordion title="WhatsApp login and media uploads">

WhatsApp starts a fresh login attempt instead of returning a QR code from one that already ended. [Media uploads through HTTP and HTTPS proxies](https://docs.openclaw.ai/channels/whatsapp) work again, honoring your proxy exceptions. An invalid proxy setting stops the upload instead of bypassing it.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Bug fixes**

- Retain verified WhatsApp participant identity in new opt-in execution audit records without backfilling historical unknowns [#156730](https://github.com/openclaw/openclaw/pull/156730). Thanks @joshavant.
- Release QR-login deadline timers when login completes or the QR code refreshes [#158272](https://github.com/openclaw/openclaw/pull/158272).
- Restore media uploads through HTTP/HTTPS proxies with per-destination bypass and certificate handling [#159851](https://github.com/openclaw/openclaw/pull/159851). Thanks @joshavant, @choury, and @yangmanbobo.
- Start fresh login attempts after settlement and preserve recorded connection warnings without alarming untouched first-time setups [#67820](https://github.com/openclaw/openclaw/pull/67820). Thanks @mcaxtr.

</details>

</Accordion>

<Accordion title="iMessage conversation routing">

iMessage sends conversations to their assigned agent even when other routing settings conflict. If OpenClaw cannot check that assignment, it stops routing instead of choosing another agent. A known harmless Contacts message also stops appearing as an error.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Bug fixes**

- Honor existing iMessage conversation assignments before ambiguous or conflicting ordinary routes [#123159](https://github.com/openclaw/openclaw/pull/123159). Thanks @vincentkoc.
- Move uncached reply and action reference checks to the Messages database worker while retaining conversation checks [#155981](https://github.com/openclaw/openclaw/pull/155981). Thanks @summitoperations26.
- Keep the known harmless Contacts reconciliation message in verbose logs while preserving surrounding or unrelated errors [#156334](https://github.com/openclaw/openclaw/pull/156334). Thanks @olli0103, @altaywtf, @prashantkamani, and @omarshahine.

</details>

</Accordion>

<Accordion title="Mattermost commands and reactions">

Mattermost can replace an outdated slash command even when the deletion response is interrupted. Reactions also reach the reacted-to message's thread when it can be found, falling back to the parent conversation if it cannot.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Bug fixes**

- Continue slash-command recreation after a successful deletion loses its unused response body [#149458](https://github.com/openclaw/openclaw/pull/149458). Thanks @masatohoshino and @altaywtf.
- Route reactions using the resolved message's thread rather than always using the parent conversation [#155812](https://github.com/openclaw/openclaw/pull/155812). Thanks @wangmiao0668000666 and @obviyus.
- Avoid first-send stalls caused by loading Mattermost incoming-message monitoring while preparing an outgoing message [b88e53d](https://github.com/openclaw/openclaw/commit/b88e53deec73ce3faf0694075cf08314f0bff117). Thanks @romneyda and @vincentkoc.

</details>

</Accordion>

<Accordion title="Channel setup and access">

Channels now need explicit configuration to connect. If yours previously worked from an environment bot token alone, [add its channel configuration](https://docs.openclaw.ai/cli/gateway/running); it can still use that token. A foreground Gateway can use `--ambient-channels` instead, but managed services need the configuration.

Choosing Disabled in [Twitch setup](https://docs.openclaw.ai/channels/twitch) now blocks chat. If an older setup was meant to deny access, reselect Disabled or set `allowFrom` to `[]`. Open and Disabled erase the saved allowlist, so switching back requires entering those user IDs again.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Bug fixes**

- Make the official AgentMail ClawHub channel discoverable and allow correctly recorded installations to load its required storage and incoming-message APIs. Legacy recovery needs a recorded digest matching the catalog pin; a package specification alone remains untrusted, and matching metadata does not verify installed bytes [#155097](https://github.com/openclaw/openclaw/pull/155097). Thanks @patrick-erichsen, @kai0126-claw, and @eduherranz. See the [AgentMail setup guide](https://www.agentmail.to/docs/integrations/openclaw).
- Move Zalo Personal credential operations off the Gateway thread, reject stale QR setup writes, and wait for saved logout before replacement login [#156003](https://github.com/openclaw/openclaw/pull/156003).
- Accept correctly bracketed Tlon IPv6 origins and remove downloaded MMS files when access is revoked before dispatch; private IPv6 still requires its existing opt-in [#157825](https://github.com/openclaw/openclaw/pull/157825).
- Make Twitch Disabled setup deny chat using the existing empty allowlist rule, preserving mention requirements and explicit legacy repair [#157881](https://github.com/openclaw/openclaw/pull/157881). Thanks @vincentkoc.
- Route bound LINE direct and group conversations to their selected agent without requiring a channel-wide default [#159116](https://github.com/openclaw/openclaw/pull/159116). Thanks @sunlit-deng, @obviyus, and @superdiaodiao.
- Resolve Discord and Slack bindings before ambiguous agent selection and retain the bound agent's main-session identity; retained Slack bindings can still select an agent removed from the roster [#159533](https://github.com/openclaw/openclaw/pull/159533).

**Limits and compatibility**

- Require authored channel configuration or process-level ambient-channel opt-in rather than treating inherited bot tokens as consent [#157387](https://github.com/openclaw/openclaw/pull/157387).

</details>

</Accordion>

<Accordion title="Typing and progress updates">

Supported channels show typing again when the main assistant resumes work after a subagent finishes. Waiting no longer produces a false failure message. With [tool progress enabled](https://docs.openclaw.ai/concepts/progress-drafts), you can still follow recent work and plans after a tool fails.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Bug fixes**

- Preserve commentary and avoid false abort errors after a successful wait for a child agent [#154881](https://github.com/openclaw/openclaw/pull/154881). Thanks @romneyda.
- Let old named-tool failures roll out of Telegram and Slack progress while retaining plans, recent activity, and priority approval/error states [#156649](https://github.com/openclaw/openclaw/pull/156649). Thanks @obviyus.
- Restore Discord typing for resumed parent work through its guarded typing adapter [#157271](https://github.com/openclaw/openclaw/pull/157271). Thanks @obviyus and reporter Fabio Ponta.
- Retain completed native Claude CLI Bash command details in Telegram's existing opt-in progress display while hiding unconfirmed MCP commands [#158636](https://github.com/openclaw/openclaw/pull/158636). Thanks @obviyus.
- Avoid overlapping provider typing requests when a keepalive restarts before its earlier request finishes [#158830](https://github.com/openclaw/openclaw/pull/158830).
- Flush visible failed-tool status before final-reply cleanup without changing quiet mode or rolling retention [#158970](https://github.com/openclaw/openclaw/pull/158970).
- Start typing when a public top-level parent actually resumes execution, using its configured cadence and stopping on completion, cancellation, or lost authority [#160039](https://github.com/openclaw/openclaw/pull/160039). Thanks @vacinc.

</details>

</Accordion>

<Accordion title="Attachments in replies">

The agent can [resend available attachments from chat history](https://docs.openclaw.ai/reference/rich-output-protocol) with their captions and reply targets. Telegram also stops rejecting reply attachments at an accidental 5 MiB cutoff, using its existing 100 MiB default unless you set a smaller limit. Telegram's own upload limits still apply.

Image, video, and music requests can run in the background again in chats that share the agent's main conversation history. Each chat keeps its own media tasks and status, and results return to the person who asked.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Bug fixes**

- Preserve recognizable comparison prose in affected plain-text replies without removing text between comparison operators [#152671](https://github.com/openclaw/openclaw/pull/152671). Thanks @leilei3167, @obviyus, and @yetval.
- Count successful final uploads, attachments, and effect sends as replies only when their destination evidence matches the requesting chat [#156807](https://github.com/openclaw/openclaw/pull/156807). Thanks @joshavant.
- Keep later attachments from inheriting the first file's legacy URL; already-canonical saved metadata is unchanged [#157822](https://github.com/openclaw/openclaw/pull/157822). Thanks @yangmanbobo and @obviyus.
- Resolve stored inbound attachment references for resending, retaining existing file-read and sandbox restrictions [#158720](https://github.com/openclaw/openclaw/pull/158720). Thanks @vyctorbrzezowski and @obviyus.
- Apply Telegram's existing default media limit during reply staging while honoring smaller configured limits [#159491](https://github.com/openclaw/openclaw/pull/159491). Thanks @sunlit-deng, @obviyus, and @kassol.
- Prevent the identified database-lock failure when staging local attachments while background work writes shared state [#160783](https://github.com/openclaw/openclaw/pull/160783).
- Restore background image, video, and music generation for channel chats sharing the main conversation history [#160998](https://github.com/openclaw/openclaw/pull/160998).
- Keep those chats' media tasks, duplicate detection, and status separate while delivering results to the requester; detailed lifecycle coverage is image-specific, with video and music using the shared implementation [#161034](https://github.com/openclaw/openclaw/pull/161034).

**Improvements**

- Move managed-image writes and cleanup off the Gateway thread and wait for accepted attachment metadata before publishing affected messages [#159348](https://github.com/openclaw/openclaw/pull/159348).

**Documentation**

- Explain the host-side `ffmpeg` requirement for voice-note conversion, Feishu's attachment fallback, and WhatsApp's failed-send behavior [4383e8f](https://github.com/openclaw/openclaw/commit/4383e8f1584969ead7cc2a854423a3c50c5db17d). Thanks @vincentkoc. See [voice output requirements](https://docs.openclaw.ai/tools/tts/output).

</details>

</Accordion>

<Accordion title="Delegated work and side questions">

Native Codex can answer side questions in Discord and Slack while continuing the original task. Native child agents can also return follow-up answers after waiting for delegated work, within the same running OpenClaw process. See [session messaging](https://docs.openclaw.ai/concepts/session-tool).

Persistent workers created by an agent now need a separate thread, as supported by Discord and Matrix. On Telegram and other affected channels, use one-shot `mode="run"` instead. Telegram rejects `thread=true` and ignores `defaultSpawnContext` for these spawns. Deliberate ACP binding commands remain available; see [thread-bound sessions](https://docs.openclaw.ai/tools/subagents/thread-bound-sessions).

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Bug fixes**

- Keep quoted and forwarded context attached to each reply that steers an active embedded response [#145338](https://github.com/openclaw/openclaw/pull/145338). Thanks @fransqaas.
- Finish an explicitly requested, successfully delivered reaction-only answer to the current message without extra fallback text [#156790](https://github.com/openclaw/openclaw/pull/156790). Thanks @joshavant.
- Preserve a native child follow-up's final result across accepted yielded continuations; the historical Task-receipt implementation is superseded by native execution ownership [#156919](https://github.com/openclaw/openclaw/pull/156919). Thanks @jalehman.
- Keep delayed self-replies in their original conversation and retain completed queued results across in-place restart; unfinished runs are excluded and backup restoration omits pending delivery records [#156984](https://github.com/openclaw/openclaw/pull/156984). Thanks @joshavant and @vincentkoc.
- Mark later rejected or aborted subagent-result chunks as incomplete and stop whole-result retries that would duplicate sent parts; silent non-send outcomes are not comprehensively detected [#159185](https://github.com/openclaw/openclaw/pull/159185).
- Deliver independent native Codex side answers without suppressing the original task's later final reply in Discord and Slack [#159416](https://github.com/openclaw/openclaw/pull/159416).

**Limits and compatibility**

- Restrict agent-created persistent bindings to child threads and ignore legacy system bindings on current-chat placements while preserving their records and history; later adapter-placement changes remain a routing limitation [#158992](https://github.com/openclaw/openclaw/pull/158992). Thanks @obviyus and @joshavant.

</details>

</Accordion>

<Accordion title="Approvals in chat">

Authorized users can approve or deny OpenClaw changes in the chat where they requested them, using supported buttons or [`/approve`](https://docs.openclaw.ai/tools/slash-commands). Existing approver rules still apply, and typing “yes” does not approve a change. Reaction approvals also work on iMessage, Signal, and WhatsApp prompts; forwarded Signal reactions remain opt-in.

Administrators can [choose Slack reviewers for individual plugins and tools](https://docs.openclaw.ai/plugins/plugin-permission-requests). Update the Gateway before adding these settings. Scoped requests go through native Slack DMs, so reconnect the bot if that route is unavailable. Choosing reviewers does not make a tool ask for approval.

Removing a reviewer stops their approval decisions, but request details on already queued cards can still reach them, including after a restart.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Bug fixes**

- Deliver delegated change approvals and their recorded outcomes to the requesting chat, with Allow once and Deny choices and current-authority checks [#157947](https://github.com/openclaw/openclaw/pull/157947). Thanks @obviyus.
- Restore system-agent approval reactions on iMessage, Signal, and WhatsApp, including persisted iMessage targets; Signal forwarding reactions remain opt-in [#159132](https://github.com/openclaw/openclaw/pull/159132).
- Stop admitting new distinct Tlon approval requests when 100 or more are pending, preserving existing requests and attempting an owner notice; resolve pending decisions before rejected requesters retry [#160679](https://github.com/openclaw/openclaw/pull/160679). Thanks @eleqtrizit.

**Improvements**

- Coordinate native approval-handler startup retries with Gateway wake-up and shutdown while retaining the existing retry delay and approval policy [#160315](https://github.com/openclaw/openclaw/pull/160315).
- Select Slack approval reviewers by exact tool, then native plugin, then default, with an explicit empty list denying Slack decisions for that scope. Native reviewer DMs cannot fall back to generic forwarding; buttons can work without ordinary bot DM access, while typed `/approve` still requires it [#159525](https://github.com/openclaw/openclaw/pull/159525). Thanks @stevenlee-oai.

</details>

</Accordion>

<Accordion title="Incoming message queues">

Incoming messages keep their order when processing resumes after a failure. OpenClaw reports uncertain saves instead of treating them as successful or automatically repeating them. Shutdown may wait if message storage does not finish.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Improvements**

- Reduce database queries and temporary allocations when pruning large channel backlogs without changing retention rules [#159050](https://github.com/openclaw/openclaw/pull/159050).
- Move operational incoming-message queue reads and writes to workers and prevent a released lane head from being overtaken [#159073](https://github.com/openclaw/openclaw/pull/159073).

**Bug fixes**

- Keep message claims owned through pending completion, retry, and failure writes during shutdown [#158637](https://github.com/openclaw/openclaw/pull/158637).
- Stop expired channel repairs before commit and surface uncertain writes without automatic replay or false durable acknowledgment [#159161](https://github.com/openclaw/openclaw/pull/159161).
- Recheck current conversation-lane eligibility before a queued claim commits, leaving newly blocked messages pending [#159197](https://github.com/openclaw/openclaw/pull/159197).

</details>

</Accordion>

<Accordion title="Queued replies after restart">

Completed replies saved for delivery can survive a restart if sending has not begun and the original permissions still apply. Delayed replies also keep their original chat and thread. Answers that were not saved, were partly sent, or have uncertain delivery cannot be automatically recovered this way.

Check the [storage and backup limits](https://docs.openclaw.ai/reference/database-schemas/storage-changes) before downgrading. Older versions may leave replies pending, and restoring a backup does not restore pending deliveries.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Bug fixes**

- Recover eligible queued replies after recognized restarts while rechecking original-owner authority; removed grants do not revive old queued authority when restored [39183ae](https://github.com/openclaw/openclaw/commit/39183aef1d3eab85b8b46753270853ba16867ba6). Thanks @joshavant.
- Preserve captured, wholly unsent final replies interrupted by update restart before dispatch [#156102](https://github.com/openclaw/openclaw/pull/156102). Thanks @fuller-stack-dev.
- Keep delayed cross-session continuation destinations and reject results for reset or replaced requester conversations [#156802](https://github.com/openclaw/openclaw/pull/156802). Thanks @joshavant.
- Preserve earlier delivery-retry wakes across clock rollback or stale reads while rechecking current queue eligibility [#159275](https://github.com/openclaw/openclaw/pull/159275).

</details>

</Accordion>

<Accordion title="Channel status and errors">

[Channel diagnostics](https://docs.openclaw.ai/cli/channels) show whether a plugin is installed but disabled, and expose errors that were missing from channel logs. Rejected status requests now report failure to scripts. Chat errors also distinguish recognized local timeouts from model-provider failures.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Bug fixes**

- Identify local worker timeouts in channel warnings without changing genuine provider HTTP errors or retry policy [#155675](https://github.com/openclaw/openclaw/pull/155675). Thanks @gokay-ai, @obviyus, and @endeavorpioneer.
- Report installed disabled channel plugins as installed without activating or reinstalling them [#159242](https://github.com/openclaw/openclaw/pull/159242).
- Preserve Gateway rejection errors and return failure instead of a successful config-only status fallback [#159243](https://github.com/openclaw/openclaw/pull/159243).
- Include canonical channel runtime namespaces and descendants in filtered text and JSON logs [#159244](https://github.com/openclaw/openclaw/pull/159244).

**Improvements**

- Skip unnecessary local migration preparation for explicit-channel message commands handled by a reachable Gateway [#157448](https://github.com/openclaw/openclaw/pull/157448). Thanks @wlassalle724.

</details>

</Accordion>

<Accordion title="Voice questions about other work">

Talk, Discord, FaceTime, and Voice Call now guide the voice model to consult your agent about its other work when that option is available. This does not give the voice model direct access to other conversations. Talk also removes redundant confirmations for read-only Code Mode lookups, while keeping approvals for changes.

Voice Call's `maxChars` setting now limits profile files only, so total [voice context](https://docs.openclaw.ai/plugins/voice-call/realtime-and-streaming#agent-voice-context) can be longer.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Bug fixes**

- Avoid redundant outer voice confirmations for read-only Code Mode lookups while preserving confirmation for shell commands and mutating nested actions [#159474](https://github.com/openclaw/openclaw/pull/159474).
- Share agent-context instructions across realtime voice, retaining the paragraph when optional profile context is disabled; `toolPolicy` set to `none` still prevents consultation despite that guidance [#159548](https://github.com/openclaw/openclaw/pull/159548).

</details>

</Accordion>

<Accordion title="Channel settings during a conversation">

Changing channel settings during a chat no longer causes the reported Matrix disconnect after a reload. Google Chat applies reply-visibility changes to the next message without restarting. Credentials, callback routes, and other settings that require a restart still need one.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Bug fixes**

- Keep replacement channels independent of completed configuration-writing requests and preserve the current Gateway's owner across in-process restart [055db0c](https://github.com/openclaw/openclaw/commit/055db0c631bfb01598ae311015e928013bccdd4c). Thanks @ycmjason and @vincentkoc.
- Read current Google Chat reply-visibility settings for the next runtime-owned incoming turn without replacing explicitly scoped monitor configuration [#160323](https://github.com/openclaw/openclaw/pull/160323). Thanks @rileyjjy, @obviyus, and @scientificprogrammer.

</details>

</Accordion>

<Accordion title="Messages with buttons">

OpenClaw avoids preparing the same buttons twice when they fit a channel's limits. The buttons and fallback text stay the same.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Improvements**

- Skip duplicate global button preparation when the authored controls fit within channel capacity [#157050](https://github.com/openclaw/openclaw/pull/157050). Thanks @vincentkoc.

</details>

</Accordion>

</AccordionGroup>

## Memory

OpenClaw fixes missed memory updates and search failures, with repairs for older Dreaming schedules and protection for standalone QMD files.

<AccordionGroup>

<Accordion title="Memory search">

[Memory search](https://docs.openclaw.ai/concepts/memory-search) can fall back to existing keyword matches when an optional embedding service fails. A working keyword index is required, and explicitly selected remote providers still report errors. Searches also keep English terms in mixed Chinese-English questions, and Active Memory recognizes more Russian questions about past conversations.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Improvements**

- Initialize Memory Core retrieval during idle time so later requests can reuse the warmed worker, without starting indexing or embeddings [#158563](https://github.com/openclaw/openclaw/pull/158563)

**Bug fixes**

- Return indexed keyword matches after optional query-embedding failures, including exhausted retries [#157032](https://github.com/openclaw/openclaw/pull/157032) — @myagizmaktav, @team-contractorscale
- Accept `min_score` and `max_results` in memory searches while preserving canonical-key precedence and other validation [#158308](https://github.com/openclaw/openclaw/pull/158308) — @obviyus, @blackdiamondcyber-png, @he-yufeng
- Keep English technical terms in Chinese queries without spaces between languages [#159076](https://github.com/openclaw/openclaw/pull/159076) — @yigtwxx, @takhoffman
- Recognize supported Russian past-conversation questions for default-mode deep recall [#159785](https://github.com/openclaw/openclaw/pull/159785) — @ericcaiwx-star, @obviyus, @alexph-dev

**Documentation**

- Repair links to the Active Memory policy-disabled and first-recall-timeout troubleshooting sections [#156899](https://github.com/openclaw/openclaw/pull/156899) — @linzeshi

</details>

</Accordion>

<Accordion title="Memory indexing">

With memory watching enabled, notes edited during an update are picked up in a follow-up pass. Large folders configured as [extra memory paths](https://docs.openclaw.ai/reference/memory-config) also avoid unnecessary rescans when unrelated files change.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Improvements**

- Release references to completed indexing vectors while later files are still being written, preserving shared cached vectors [#156173](https://github.com/openclaw/openclaw/pull/156173) — @vincentkoc
- Select transcripts for multi-session updates in one pass while preserving target order and filters [#158364](https://github.com/openclaw/openclaw/pull/158364)
- Limit built-in SQLite provenance and Dreaming reads to the selected workspace, so malformed records elsewhere do not block healthy data [#159190](https://github.com/openclaw/openclaw/pull/159190)

**Bug fixes**

- Index edits received during an active pass and let folder scans yield to other work [#157163](https://github.com/openclaw/openclaw/pull/157163) — @vincentkoc
- Retain only needed event data during long-session indexing and check recall reset boundaries without loading message bodies [#157278](https://github.com/openclaw/openclaw/pull/157278) — @sahilsatralkar, @jalehman, @conan-scott
- Filter unrelated extra-path deletes and renames, scan shared roots once, and skip directories proven irrelevant to configured patterns [#158998](https://github.com/openclaw/openclaw/pull/158998) — @nianjiuzst, @obviyus, @s1gv4rd

</details>

</Accordion>

<Accordion title="Dreaming notes and schedules">

[Dreaming](https://docs.openclaw.ai/concepts/dreaming) stops adding its own nested reflections to new memories from daily notes. Newly saved snippets also favor complete words and mark shortened text with an ellipsis. Existing entries remain unchanged.

If prompted, run `openclaw doctor --fix` to repair older Dreaming schedules before creating or updating them. The repair makes a backup and preserves custom jobs and the surviving schedule’s history. Entries it cannot safely repair remain with warnings.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Bug fixes**

- Use the configured memory owner for Dream Diary reads and maintenance writes when older clients omit an agent, while retaining explicit selection and ambiguity errors [#156437](https://github.com/openclaw/openclaw/pull/156437) — @orionation, @sundaydriver, @cyb3rb1ade
- Prefer nearby sentence or word boundaries and mark shortened deep-consolidation snippets without rewriting existing entries [#157322](https://github.com/openclaw/openclaw/pull/157322) — @yun-0000, @ada-kvr, @obviyus, @holny
- Preserve historical Dreaming jobs for explicit Doctor repair and remove recognized duplicates only where a valid survivor exists [#157616](https://github.com/openclaw/openclaw/pull/157616)
- Exclude nested inline Dreaming reflections from new daily recall while preserving surrounding user notes [#157879](https://github.com/openclaw/openclaw/pull/157879) — @obviyus, @mariorivas1, @eric-basketbot

</details>

</Accordion>

<Accordion title="Memory Wiki searches and imports">

[Memory Wiki](https://docs.openclaw.ai/plugins/memory-wiki) avoids unnecessary work when searching or opening pages with many links. Open Knowledge Format imports also preserve links inside code examples instead of rewriting them.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Improvements**

- Skip unused Markdown link extraction during Wiki queries while retaining link graphs for compilation and lint [#152487](https://github.com/openclaw/openclaw/pull/152487) — @kchuang1015, @context-down, @etzelm

**Bug fixes**

- Preserve literal links inside fenced, indented, and inline code during OKF imports [#159262](https://github.com/openclaw/openclaw/pull/159262)

</details>

</Accordion>

<Accordion title="Long conversations and Codex memory">

[Conversation compaction](https://docs.openclaw.ai/concepts/compaction) keeps already-summarized messages out of affected later summaries and loads saved history in the background so other work can continue. Messages arriving as a summary finishes use the updated conversation, and recovery stops when the run times out. If a model exhausts its output budget without producing a summary, OpenClaw stops repeating the same request and suggests lowering thinking or increasing `maxTokens` before retrying. Saved history remains intact.

Context-engine plugins that store completed turns now give the current conversation priority over retries from other sessions, preventing stale work elsewhere from holding up new context.

Desktop Codex Computer Use sessions launched and connected directly by OpenClaw now keep their configured persona and memory-plugin guidance. Restart the Gateway to load the fix. Native child agents do not automatically inherit this guidance.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Improvements**

- Load saved history for compaction in the background so other Gateway work can continue [#160314](https://github.com/openclaw/openclaw/pull/160314)

**Bug fixes**

- Preserve selected memory-plugin and persona guidance in managed Desktop Codex Computer Use turns, including deferred recall tools [873dbf9](https://github.com/openclaw/openclaw/commit/873dbf97afbda5524b8e5f4617dcf76da726c1ae) — @jalehman
- Refuse steering when compaction state cannot be read, queue chat follow-ups, and continue cancellation checks for other eligible runs [#154868](https://github.com/openclaw/openclaw/pull/154868) — @sxh313, @obviyus, @yunligou711-commits
- Let completed embedded-harness turns reach durable context engines through cache-TTL bookkeeping markers, without changing the separate pending-commit drain behavior [#156611](https://github.com/openclaw/openclaw/pull/156611) — @holny, @obviyus, @kaspnov, @superandylin
- Refresh incoming chat identity and metadata when compaction finishes during reply admission [#156858](https://github.com/openclaw/openclaw/pull/156858)
- Cancel automatic overflow and timeout compaction recovery when the admitted run times out [#159105](https://github.com/openclaw/openclaw/pull/159105)
- Preserve reset and compaction boundaries in the tool-only safeguard fallback, keeping already-compacted messages out of later summaries [#160211](https://github.com/openclaw/openclaw/pull/160211) — @obviyus, @neyudo
- Prioritize saving the newly completed context-engine turn before retrying other sessions, without repairing older abandoned work [#160153](https://github.com/openclaw/openclaw/pull/160153) — @ericcaiwx-star, @obviyus, @kaspnov, @abacha, @flakedict, @superandylin
- Stop identical summary retries after an empty response exhausts the output budget, with guidance to adjust thinking or `maxTokens`; separate oversized-message fallback remains available and settings do not change automatically [#160650](https://github.com/openclaw/openclaw/pull/160650) — @olli0103, @jackten, @obviyus

</details>

</Accordion>

<Accordion title="QMD files and archived answers">

Doctor now preserves standalone QMD settings and indexes, removing only empty QMD folders. This does not restore previously deleted data or bring back OpenClaw’s retired QMD backend. Before deleting retained files yourself, [back them up and check that standalone QMD no longer uses them](https://docs.openclaw.ai/concepts/memory-builtin).

Recovery of archived child-agent answers now runs its initial database checks in the background.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Bug fixes**

- Preserve standalone QMD configuration, indexes, and mixed directory contents during update and Doctor cleanup [#158569](https://github.com/openclaw/openclaw/pull/158569) — @obviyus, @billverhelle
- Move durable child-answer archive discovery and registration checks to the history worker, retaining empty-store and Incognito behavior [#160238](https://github.com/openclaw/openclaw/pull/160238)

</details>

</Accordion>

</AccordionGroup>

## Skills

This release fixes how agents pick up edited skills and how you browse and revisit skill suggestions.

<AccordionGroup>

<Accordion title="Skill loading and updates">

Agents pick up edited [skills](https://docs.openclaw.ai/tools/skills) more consistently after folders are replaced or file watching fails. Keep skill watching enabled to use the fallback refresh. Sessions in managed worktrees also use the intended skills from your configured workspace and project.

Self-hosted Agents API sessions can use [skills installed on the executor](https://docs.openclaw.ai/plugins/sdk-agent-harness/runtime-config). Install the skills and their dependencies there, then choose their folders in settings. All skills in those folders become available for discovery, without per-agent filtering. This is opt-in, excludes hosted sessions, and requires a session reset when you change a nonempty folder list.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Improvements**

- Reuse an agent's discovered skills across execution workspaces while preserving precedence and refresh behavior. Initial discovery remains synchronous. [#158609](https://github.com/openclaw/openclaw/pull/158609)
- Group skill-collision logs by source directory, with counts and example names. Some collisions now log at info level, and separate worktrees can report separately. [#158092](https://github.com/openclaw/openclaw/pull/158092)
- Reuse parsed YAML within freeform skill and hook metadata recovery, without changing the accepted syntax. [#158374](https://github.com/openclaw/openclaw/pull/158374)
- Add optional self-hosted Agents API discovery from up to 32 unique absolute executor paths, retaining Gateway function policies. [#159363](https://github.com/openclaw/openclaw/pull/159363) Thanks @sjf-oa and @sjf.

**Bug fixes**

- Restore eligible skill catalogs on Codex fallback connections and refresh edited or removed skills in ongoing conversations. Managed relay delivery stays parent-only; after incognito compaction, the current catalog is restored for the following request. [b875c537](https://github.com/openclaw/openclaw/commit/b875c537be3b1a3816a1566a683ab91c6de7abb7) Thanks @Colton-Harris, @jalehman, and @serialx.
- Skip binary checks for excluded skills. The same change adds private, owner-authorized repair turns with bounded execution, without enabling the deferred whole-loop update-repair route. [df15ee3a](https://github.com/openclaw/openclaw/commit/df15ee3a68a0912a779fccd0032e315716b9a5a9) Thanks @RomneyDa and coauthor Peter Steinberger.
- Prepare pinned Library skills through background database reads while retaining selected revisions and rejecting late results for retired callers. [#148822](https://github.com/openclaw/openclaw/pull/148822)
- Refresh affected skill sources during preparation after watching loses coverage, while retaining healthy caches. [#155901](https://github.com/openclaw/openclaw/pull/155901) Thanks @vincentkoc.
- Avoid unnecessary skill refreshes from unrelated same-name child folders on affected Linux layouts. [#156201](https://github.com/openclaw/openclaw/pull/156201) Thanks @vincentkoc.
- Keep observing later skill edits after folder replacement on non-polling Node Linux and Windows. macOS, Bun, and polling retain their existing transport. [#156324](https://github.com/openclaw/openclaw/pull/156324) Thanks @vincentkoc.
- Keep preparation-time refresh active until watcher coverage is verified, and wait for retired watcher work during shutdown. Failed retirement remains unavailable, and `skills.load.watch=false` disables both watching and this fallback. [#157591](https://github.com/openclaw/openclaw/pull/157591) Thanks @vincentkoc.
- Close idle remote Skills subscriptions when Gateway shutdown begins. The fix applies once the updated Gateway is running; supervisors still need the normal shutdown allowance. [#157592](https://github.com/openclaw/openclaw/pull/157592) Thanks @Kimiyu-186.
- Preserve configured workspace precedence in managed worktree sessions, including normal precedence for a worktree deliberately configured as the agent workspace. [#158110](https://github.com/openclaw/openclaw/pull/158110)
- Preserve prompt-cache identity and stable references to unchanged delivered skills across paired-node and cloud-worker turns. Changed content gets new paths, and old randomized transcript paths are not migrated. [#160179](https://github.com/openclaw/openclaw/pull/160179)

</details>

</Accordion>

<Accordion title="Skill Workshop suggestions">

[Skill Workshop](https://docs.openclaw.ai/tools/skill-workshop/proposals) refreshes suggestions when you return and removes Apply buttons from outdated proposals. If a revision request fails, your saved instructions return to the editor so you can try again. Comparison labels now make clear which saved version you are viewing changes against.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Improvements**

- Move Workshop storage operations off the caller thread while preserving proposal approval and recovery. Update rehearsal cleanup retains its copy if closing the copied database fails. [#156110](https://github.com/openclaw/openclaw/pull/156110)
- Inspect completed proposals without taking target write leases, while retaining ownership and fresh file-integrity checks. [#157563](https://github.com/openclaw/openclaw/pull/157563)
- Reduce repeated decoding of completed proposal history while retaining pending recovery and the final complete listing. [#158757](https://github.com/openclaw/openclaw/pull/158757)

**Bug fixes**

- Preserve the original reason for a failed background review in operator logs while keeping revoked work stopped. [#157069](https://github.com/openclaw/openclaw/pull/157069) Thanks @obviyus and @Conan-Scott.
- Correct the earlier English elapsed-time badge wording, subsequently refined to identify the saved comparison baseline. [#157536](https://github.com/openclaw/openclaw/pull/157536) Thanks @RomneyDa.
- Read saved review outcomes from the selected state database instead of the default store. [#157774](https://github.com/openclaw/openclaw/pull/157774) Thanks @RomneyDa.
- Restore the Skills settings heading and group Search, Workshop, Create, and Import actions in a toolbar that wraps on narrow screens. [#157931](https://github.com/openclaw/openclaw/pull/157931) Thanks @Patrick-Erichsen.
- Refresh suggestions on first return and restore saved revision instructions after failure. Failed list requests are not automatically retried. [#158208](https://github.com/openclaw/openclaw/pull/158208)
- Label English comparison badges “Changes since” to describe the saved baseline, without changing timestamps or comparisons. [#158250](https://github.com/openclaw/openclaw/pull/158250)
- Clarify tool arguments for personal skills and workspace proposals, and explain rejected fields without echoing their supplied values. Existing list and search limits remain unchanged. [#158255](https://github.com/openclaw/openclaw/pull/158255)

</details>

</Accordion>

<Accordion title="Skills menus and Code Mode">

Large Skills menus open with less delay, and choosing an action no longer unexpectedly moves focus to the message box. Agents using Code Mode can find and read personal skills again, with the same access permissions and content limits.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Improvements**

- Reduce layout work when opening large Skills menus and preserve menu-click focus behavior. The complete list is still constructed. [#159917](https://github.com/openclaw/openclaw/pull/159917) Thanks @vyctorbrzezowski.

**Bug fixes**

- Restore authorized personal-skill list and read results for Code Mode, retaining the 20-entry list, 32-file support manifest, and 16,000-character whole-text inclusion limits. Also remove a disposal callback that kept replacement plugin registries alive through an old registry. [#160213](https://github.com/openclaw/openclaw/pull/160213) Thanks @VACInc.

</details>

</Accordion>

<Accordion title="Skill scan reports">

Skill security scans now correctly count matches left out of a long report, fixing inflated totals when detection rules overlap. The checks themselves are unchanged.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Security and trust**

- Correct omitted dangerous-command match counts when literal and imported-alias detections overlap beyond the reporting limit. [#158906](https://github.com/openclaw/openclaw/pull/158906)

</details>

</Accordion>

<Accordion title="tmux session details">

The tmux skill now lists session names and creation times correctly, including names containing a pipe character. It also correctly shows sessions with one attached client as attached. Sessions with multiple attached clients can still show the wrong status.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Bug fixes**

- Fix tmux session-name separators and creation-time formatting, restoring the demonstrated single-client attachment state while keeping existing socket options. [#145928](https://github.com/openclaw/openclaw/pull/145928) Thanks @RileyJJY, @obviyus, and @mrzeepek.

</details>

</Accordion>

</AccordionGroup>

## Native Apps

The Mac app brings the web conversation into its native window, while Apple chat adds document and audio attachments.

The Android APK was skipped for this release, and official verification lists app version 2026.8.2. The Android items below describe changes in the tagged source.

<AccordionGroup>

<Accordion title="Web chat in the Mac app">

Full [Mac chat windows](https://docs.openclaw.ai/platforms/mac/webchat) now use the web chat interface by default on compatible Gateways, including for existing Native users. Rich replies and conversation controls sit alongside the Mac sidebar, menus and Cmd-K search. Quick Chat and iOS keep their native interface. The Mac window also keeps it while native drafts or queued messages need attention, or if web chat cannot load.

The sidebar now shows newest-created threads first and hides message previews, automation chats and system chats. Use **View options** beside Threads to bring them back or sort by recent activity.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Improvements**

- Find agents, active threads and common actions with the native Cmd-K palette [#159350](https://github.com/openclaw/openclaw/pull/159350)
- Supply the embeddable web conversation and its native-host coordination [#159739](https://github.com/openclaw/openclaw/pull/159739)
- Share one titlebar row between the Mac window and conversation header [#159932](https://github.com/openclaw/openclaw/pull/159932)
- Save Mac sidebar sorting, preview and background-conversation choices [#160141](https://github.com/openclaw/openclaw/pull/160141)

**Bug fixes**

- Include declared plugin dependency assets in Mac app packages using shared dependency layouts [#156188](https://github.com/openclaw/openclaw/pull/156188)

**Limits and compatibility**

- Make the web conversation the full Mac window's default with native-work and loading fallbacks. A web-originated navigation race involving pending native outbox work remains [#159946](https://github.com/openclaw/openclaw/pull/159946)

</details>

</Accordion>

<Accordion title="Embedded dashboard approval">

Dashboards opened inside the Android or Mac app can use the app's existing device approval, avoiding a second approval prompt. The Linux/Tauri companion supports this for its remote Primary Gateway dashboard. Update both the app and the Gateway-hosted Control UI to use it. On Mac, the Primary dashboard also keeps that approval through refreshes and reconnects.

This reuses the app's existing permissions. iPhone and iPad, standalone browsers and saved non-Primary Tauri connections keep their separate sign-in.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Bug fixes**

- Reuse native approval in supported embedded dashboards, including Android Terminal and Desktop views, with both updated app and hosted UI required [28e16ee](https://github.com/openclaw/openclaw/commit/28e16eedc374234f8d71ac28ee204d99fa91504a) — @fuller-stack-dev
- Keep the Mac Primary dashboard's approved native connection usable after route or URL refresh and reconnect, including without a shared startup token or password [#160763](https://github.com/openclaw/openclaw/pull/160763) — @fuller-stack-dev

</details>

</Accordion>

<Accordion title="iPhone and iPad drafts">

On iOS, typing and your first sent message stay visible while the app finishes finding your agent. On iPad, resizing the window or opening the sidebar keeps your chat and unsent draft in place.

If [iOS setup](https://docs.openclaw.ai/platforms/ios) reports a storage problem when switching Gateways, it keeps your setup code and existing connection. Fix the storage problem before retrying.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Bug fixes**

- Preserve newly typed iOS characters during a reentrant screen refresh [7f43b35](https://github.com/openclaw/openclaw/commit/7f43b351149930f7db5b4545ad4df4693fe168fc) — Peter Steinberger
- Keep iPad chat and draft state while resizing or changing sidebar visibility [#156683](https://github.com/openclaw/openclaw/pull/156683) — @solvely-colin, @vincentkoc
- Recover stored replies in Swift chat after temporary history overload [#156772](https://github.com/openclaw/openclaw/pull/156772)
- Preserve iOS drafts during initial discovery and submitted messages during stale history refreshes [#159065](https://github.com/openclaw/openclaw/pull/159065) — @joshavant
- Keep iOS typing and keyboard focus through the initial agent handoff [#159296](https://github.com/openclaw/openclaw/pull/159296) — @joshavant
- Retain the first accepted iOS send while automatic agent discovery completes [#159404](https://github.com/openclaw/openclaw/pull/159404) — @joshavant
- Expose actual composer readiness to accessibility and respect disabled parent views [#159496](https://github.com/openclaw/openclaw/pull/159496) — @joshavant
- Preserve iOS setup input and existing connection settings after offline-data preparation refuses replacement; overlapping setup-attempt races remain outside this repair [#160218](https://github.com/openclaw/openclaw/pull/160218)

</details>

</Accordion>

<Accordion title="Files and replies in Apple chat">

[Apple chat](https://docs.openclaw.ai/platforms/ios) can now attach documents and audio, including PDFs, Office files and ZIP archives. Use **Attach**, drag-and-drop or Finder paste on Mac, and **+ → File** on iOS. Size limits still apply, and an oversized send keeps your draft. What the agent can read depends on the model.

Replies keep their paragraph breaks and related tool activity together, and show message times and the answering model when recorded. Scrolling also avoids a stall that could happen after repeated sends.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Improvements**

- Avoid rebuilding unchanged native streaming reply snapshots during tool updates [#158492](https://github.com/openclaw/openclaw/pull/158492) — @vincentkoc
- Skip unused word-reveal preparation for earlier streaming prose blocks [#158534](https://github.com/openclaw/openclaw/pull/158534) — @vincentkoc
- Show completed-message times and recorded originating models, with exact-date accessibility details [#159366](https://github.com/openclaw/openclaw/pull/159366)
- Show resolved Mac agent names and text avatars, and update Apple New Thread choices without resetting selection [#159528](https://github.com/openclaw/openclaw/pull/159528)
- Attach documents and audio through Apple file pickers, drops and Mac Finder paste, with draft-preserving size checks [#159667](https://github.com/openclaw/openclaw/pull/159667)

**Bug fixes**

- Stop a canceled native media operation before starting an unnecessary byte request [4368865](https://github.com/openclaw/openclaw/commit/4368865c48b5f86b3274350c76d5349b95381261) — Peter Steinberger
- Prevent chat scrolling from stalling after repeated sends [#147770](https://github.com/openclaw/openclaw/pull/147770) — @vincentkoc
- Keep Apple narration, tool work and final replies grouped with their own input [#156944](https://github.com/openclaw/openclaw/pull/156944) — @iwhatsskill, @solvely-colin, @vyctorbrzezowski, @vacinc
- Preserve preview and run metadata and display oversized tool-read ranges without crashing [#158509](https://github.com/openclaw/openclaw/pull/158509)
- Handle oversized speech options, rebuild audio conversion after input changes and cancel stale chat-settings requests [#159386](https://github.com/openclaw/openclaw/pull/159386)
- Preserve paragraph breaks before lists and neighboring blocks in Apple replies [#159517](https://github.com/openclaw/openclaw/pull/159517)
- Prevent malformed-health and extreme-usage crashes and retain native model-scope metadata [#159778](https://github.com/openclaw/openclaw/pull/159778)

</details>

</Accordion>

<Accordion title="Mac startup and Gateway settings">

Mac startup changes address the crash reported with 2026.9.6 and show clearer errors when a profile cannot start. Enabling or refreshing an installed [Gateway from the Mac app](https://docs.openclaw.ai/platforms/mac/bundled-gateway) also keeps your choice of the program that runs it. If that saved choice is invalid, reinstall explicitly with `--runtime` or `--runtime-path`. Disabling the Gateway removes both its service and that saved choice.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Bug fixes**

- Avoid falsely rejecting a valid Developer ID signature during Mac cloud-worker setup [#156301](https://github.com/openclaw/openclaw/pull/156301)
- Show the original named-profile startup failure when no process is listening [#156441](https://github.com/openclaw/openclaw/pull/156441)
- Address async-sleep paths implicated in Mac launch crashes and add a bounded ARM64 packaging audit [#156881](https://github.com/openclaw/openclaw/pull/156881) — @coygeek, @davidcittadini
- Handle reversed braces in CLI diagnostics without crashing [#158516](https://github.com/openclaw/openclaw/pull/158516)
- Preserve saved runtime choices during Mac Gateway enable or refresh and require explicit replacement of invalid choices [#160127](https://github.com/openclaw/openclaw/pull/160127)

**Improvements**

- Clarify Dashboard sign-in and connection-recovery buttons and allow dragging the surrounding background [#157096](https://github.com/openclaw/openclaw/pull/157096)

**Limits and compatibility**

- Record the temporary withdrawal of the affected 2026.9.6 Mac in-app update, which did not repair already-installed copies [01a8055](https://github.com/openclaw/openclaw/commit/01a8055a214bcc73dd1fcb89fd8036d7bbc79bf2) — Peter Steinberger
- Refresh historical 2026.9.6 feeds for rebuilt archives; feed metadata alone does not establish successful launch or same-version automatic recovery [#157194](https://github.com/openclaw/openclaw/pull/157194)

</details>

</Accordion>

<Accordion title="Mac sign-in and Keychain prompts">

The Mac app can renew saved Cloudflare Access sign-ins before they expire while you are using the app and computer. Your browser may open to finish signing in. If you deny a [saved-Gateway Keychain prompt](https://docs.openclaw.ai/platforms/mac/remote), background refreshes stop asking for that app session. Choose **Connect** or **Reconnect**, or restart the app, to try again.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Bug fixes**

- Stop repeated background Keychain prompts after denial while retaining credentials and an explicit retry path [#157951](https://github.com/openclaw/openclaw/pull/157951) — @stevenlee-oai

**Improvements**

- Renew same-account saved Cloudflare Access sessions before expiry, with browser interaction when needed [#159381](https://github.com/openclaw/openclaw/pull/159381)

</details>

</Accordion>

<Accordion title="Voice Wake edits and Swabble triggers">

Mac Voice Wake uses your edited transcript, and clearing the text cancels the request. Swabble now honors its configured minimum length and cooldown, so short commands may stop triggering hooks. The default minimum is 24 characters. An early partial transcript can trigger a hook and prevent its corrected final text from triggering another during the cooldown; manual `test-hook` remains exempt from the length limit.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Bug fixes**

- Keep Voice Wake's pending message synchronized with edits and dismiss whitespace-only sends [#159031](https://github.com/openclaw/openclaw/pull/159031)

**Limits and compatibility**

- Enforce Swabble's existing minimum length and cooldown, including their effect on short inputs and partial-to-final speech [#159406](https://github.com/openclaw/openclaw/pull/159406)

</details>

</Accordion>

<Accordion title="Android setup and permissions">

[Android setup](https://docs.openclaw.ai/platforms/android) groups optional permissions under a shorter initial list and **Additional features**. You can skip all of them. Camera and Location still need to be enabled separately after permission is granted. If your account allows it, you can approve the phone's requested access directly during setup.

Use **Manage Gateways → Rename** to give saved connections recognizable names, even offline. Names stay on that phone and may be lost if you downgrade to an older app.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Improvements**

- Simplify optional setup permissions and offer Android Settings recovery for blocked requests [#157701](https://github.com/openclaw/openclaw/pull/157701) — @iwhatsskill
- Offer explicit, authorized phone-capability approval during setup and verify effective access before continuing [#157830](https://github.com/openclaw/openclaw/pull/157830) — @joshavant
- Save phone-local Gateway names without changing server identities or connection details [#159714](https://github.com/openclaw/openclaw/pull/159714) — @iwhatsskill
- Explain nodes, paired devices, offline retention and overlapping device lists in Settings [#159732](https://github.com/openclaw/openclaw/pull/159732) — @iwhatsskill

**Bug fixes**

- Preserve pairing's credential handoff during setup permission changes [#157569](https://github.com/openclaw/openclaw/pull/157569) — @fuller-stack-dev
- Correct release and debug App Actions package metadata [#159060](https://github.com/openclaw/openclaw/pull/159060) — @joshavant
- Preserve an open QR-pairing exchange when another network becomes available [#159719](https://github.com/openclaw/openclaw/pull/159719) — @iwhatsskill
- Add spacing around Nodes & Devices rows while retaining their management actions [#159728](https://github.com/openclaw/openclaw/pull/159728) — @iwhatsskill
- Keep the Gateway picker open while scrolling; use Back, an outside tap or accessibility dismissal to close it [#159744](https://github.com/openclaw/openclaw/pull/159744) — @iwhatsskill

**Documentation**

- Explain protocol compatibility, why release numbers need not match, and why pairing does not prove every feature works [#157467](https://github.com/openclaw/openclaw/pull/157467) — @iwhatsskill, @tomdailey55

</details>

</Accordion>

<Accordion title="Android pages and conversations">

Android's [Pages menu](https://docs.openclaw.ai/platforms/android) lets you open and pin work pages such as Agents, Automations and Terminal. Settings is now on the footer gear, available even offline, and can no longer be pinned. Ordinary chats appear separately in Threads; find automation conversations under **Threads → Automations** and manage schedules on the **Automations** work page. Existing conversations and their saved pins are kept.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Improvements**

- Present node availability as one readable online count while preserving approval and pairing information [#157746](https://github.com/openclaw/openclaw/pull/157746) — @iwhatsskill
- Use consistent Android phone text sizes, compact dialog headings and an animated floating host label [#159676](https://github.com/openclaw/openclaw/pull/159676) — @iwhatsskill
- Put the offline-accessible Settings gear beside the Gateway selector and introduce conversation-first defaults [#159718](https://github.com/openclaw/openclaw/pull/159718) — @iwhatsskill
- Separate automation conversations from ordinary lists while preserving their transcripts, pins and selected-chat access [#159737](https://github.com/openclaw/openclaw/pull/159737) — @iwhatsskill
- Put existing work pages in the Pages pin menu and make Settings footer-only, superseding earlier Settings-pin behavior [#159961](https://github.com/openclaw/openclaw/pull/159961) — @iwhatsskill

**Bug fixes**

- Match sidebar and pinned-page labels to the Overview screen [#157434](https://github.com/openclaw/openclaw/pull/157434) — @iwhatsskill
- Retry explicitly temporary history refusals so Android conversations can catch up after overload [#157865](https://github.com/openclaw/openclaw/pull/157865) — @romneyda
- Move Android camera snapshot processing off the UI thread without changing JPEG settings or capture limits [#158189](https://github.com/openclaw/openclaw/pull/158189) — @vincentkoc
- Show ordinary Android chats independently without changing their stored parent or inherited model settings [#159984](https://github.com/openclaw/openclaw/pull/159984) — @iwhatsskill

</details>

</Accordion>

<Accordion title="Android messages and camera attachments">

Android has a full-width writing field with compact controls underneath. Use **+ → Camera** to add a photo or video to your draft; camera permission is required, plus microphone permission for video. Completed replies stay visible when you collapse the tool activity, with counts of failed or blocked tools.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Improvements**

- Remove the badge covering Android image thumbnails while retaining tap-to-preview and its accessible label [#156828](https://github.com/openclaw/openclaw/pull/156828) — @iwhatsskill
- Show individual tool-outcome counts in collapsed completed work [#156950](https://github.com/openclaw/openclaw/pull/156950) — @iwhatsskill
- Add a full-width draft, compact controls and staged camera attachments; named models pin a choice and Default model clears the override [#157799](https://github.com/openclaw/openclaw/pull/157799) — @iwhatsskill, @jiangzhao2121-debug

**Bug fixes**

- Collapse an expanded link preview without opening its link [#158252](https://github.com/openclaw/openclaw/pull/158252) — @masterswords1, @iwhatsskill
- Keep the first draft line at the same height when more lines are added [#159720](https://github.com/openclaw/openclaw/pull/159720) — @iwhatsskill
- Identify the bound agent in the empty message field, with neutral wording while routing is unresolved [#159721](https://github.com/openclaw/openclaw/pull/159721) — @iwhatsskill
- Resume queued-message processing after the affected send/reconciliation handoff without changing persistence or order [#160121](https://github.com/openclaw/openclaw/pull/160121) — @romneyda, @vyctorbrzezowski, @jalehman

</details>

</Accordion>

<Accordion title="Android model and context controls">

Android model search supports multiple words and small spelling mistakes in longer words. The Effort gauge follows your adjustments even with Fast mode on, shown by a separate bolt. To check token use and costs, open **Chat actions → Context**; the usage ring has moved out of the writing area.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Bug fixes**

- Preview Effort changes immediately during a drag and restore the saved value after cancellation or rejection [#156728](https://github.com/openclaw/openclaw/pull/156728) — @iwhatsskill, @pluviobyte
- Keep the Effort needle responsive with Fast enabled and show Fast through a separate bolt [#156860](https://github.com/openclaw/openclaw/pull/156860) — @iwhatsskill

**Improvements**

- Find Android models with multiple required terms and limited typo tolerance, ranking search relevance ahead of the default [#159725](https://github.com/openclaw/openclaw/pull/159725) — @iwhatsskill
- Move the live context ring and existing usage panel to Chat actions while preserving unknown values when usage is unavailable [#159733](https://github.com/openclaw/openclaw/pull/159733) — @iwhatsskill

</details>

</Accordion>

<Accordion title="Android Talk setup">

Android Talk keeps error messages open until you dismiss them, giving you time to read what needs fixing. Granting microphone permission can now start Listening on the first attempt. Missing providers or invalid credentials still need to be corrected in Gateway setup.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Bug fixes**

- Keep Talk setup and failure dialogs visible until dismissed without hiding later failures [1ed6408](https://github.com/openclaw/openclaw/commit/1ed6408675e4b7c48b8f870e7b4d9178fe28b7f9) — @ivankuznetsov, @iwhatsskill
- Preserve the Talk startup connection when microphone permission is granted [#157971](https://github.com/openclaw/openclaw/pull/157971) — @joshavant

</details>

</Accordion>

<Accordion title="Wear OS display and controls">

The Wear OS companion shows its full startup icon and keeps the watch background black in Light appearance. Voice controls and permission guidance can scroll when translated text or larger text sizes need more room. The watch still needs a paired Android phone running OpenClaw and connected to the Gateway.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Bug fixes**

- Show the complete circular Wear OS icon during cold startup [#157316](https://github.com/openclaw/openclaw/pull/157316) — @iwhatsskill
- Keep Wear backgrounds black while preserving light panels and readable controls [#157357](https://github.com/openclaw/openclaw/pull/157357) — @iwhatsskill
- Keep translated Voice controls and permission feedback readable on small round watches [#157358](https://github.com/openclaw/openclaw/pull/157358) — @iwhatsskill

**Documentation**

- Explain existing Wear Tile voice/chat shortcuts and the paired-phone requirement in English store-description source [#157317](https://github.com/openclaw/openclaw/pull/157317) — @iwhatsskill

</details>

</Accordion>

<Accordion title="Linux Quick Chat and desktop updates">

Linux fixes a Quick Chat widget crash on X11 and shows clearer update instructions. On opt-in Windows `desktop-test` builds, the updater keeps the app and downloaded update available if the installer fails to launch, so you can retry.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Bug fixes**

- Show Linux update status without raw release-note markup and clear stale download-page errors after retry [#158037](https://github.com/openclaw/openclaw/pull/158037) — @vincentkoc
- Initialize X11 threading before GTK to prevent the reproduced Quick Chat widget crash [#158041](https://github.com/openclaw/openclaw/pull/158041) — @vincentkoc

**Limits and compatibility**

- Upgrade the desktop updater while preserving failed-installer retry for opt-in Windows test builds [#158230](https://github.com/openclaw/openclaw/pull/158230)

</details>

</Accordion>

<Accordion title="Native app translations">

More Android and Apple app controls, settings and error messages follow your chosen language. These updates refresh existing supported languages, including attachment controls, sidebar options and connection guidance.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Improvements**

- Localize Android's failed, blocked and unknown tool-outcome counts [#157337](https://github.com/openclaw/openclaw/pull/157337)
- Refresh Android optional-permission, approval and node-status translations [#157850](https://github.com/openclaw/openclaw/pull/157850)
- Refresh Android camera, model-search and usage text [#158377](https://github.com/openclaw/openclaw/pull/158377)
- Translate Android's Collapse link preview label [#158599](https://github.com/openclaw/openclaw/pull/158599)
- Refresh native command-palette labels and keyboard hints [#159501](https://github.com/openclaw/openclaw/pull/159501)
- Refresh native permission, connection-recovery, Gateway-name and status translations [#159853](https://github.com/openclaw/openclaw/pull/159853)
- Translate Apple attachment controls and filename-specific errors [#159934](https://github.com/openclaw/openclaw/pull/159934)
- Translate Android browser controls and offline, access and version guidance [#159969](https://github.com/openclaw/openclaw/pull/159969)
- Refresh Android Settings labels and connection prompts in 21 existing locales [#160008](https://github.com/openclaw/openclaw/pull/160008)
- Translate native sidebar sorting and view controls in 21 existing locales [#160270](https://github.com/openclaw/openclaw/pull/160270)
- Refresh native conversation-view labels and recovery guidance [#160345](https://github.com/openclaw/openclaw/pull/160345)

**Documentation**

- Restore notices for parser dependencies still bundled with the native Mermaid renderer [#157461](https://github.com/openclaw/openclaw/pull/157461)

</details>

</Accordion>

<Accordion title="iOS sidebar animation">

The iPhone and iPad sidebar mascot pauses while hidden and resumes when you open the sidebar, avoiding animation work you cannot see.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Bug fixes**

- Pause the hidden sidebar mascot without changing other mascot animations [#160607](https://github.com/openclaw/openclaw/pull/160607)

</details>

</Accordion>

</AccordionGroup>

## Models and Providers

The optional OpenAI Agents API runs chats in hosted workspaces, while Sign in with ChatGPT (Beta) gives eligible accounts another way to connect. Model and video-generation choices also expand.

<AccordionGroup>

<Accordion title="Agents API hosted workspaces">

The optional [Agents API runtime](https://docs.openclaw.ai/providers/openai/runtimes) runs chats in a persistent hosted Linux workspace, with web search, OpenClaw tools, and file transfers on supported Linux storage. It requires an OpenAI API key with access to the chosen model. [Self-hosted execution](https://docs.openclaw.ai/plugins/sdk-agent-harness/runtime-config) needs your own controller and matching workspace path, and does not support file transfers.

Use this runtime only on a single-user Gateway, with OpenClaw as the sole controller of the session. Start a new or reset chat after changing its instructions, tools, model, credentials, or execution environment. Resetting or deleting the local chat does not delete hosted history or files. Check that returned attachments arrived. Choose another runtime if you need per-turn tool restrictions from prompt hooks, restrictions on native shell/file/web access, or strictly tool-free background calls.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Improvements**

- Add explicitly selected hosted Agents API conversations, with API-key permissions and remote-history retention [#151176](https://github.com/openclaw/openclaw/pull/151176) — Thanks @sjf-oa, @sjf.
- Use OpenClaw tools in hosted Agents API sessions [f80fef13](https://github.com/openclaw/openclaw/commit/f80fef130a97de2129105ed37d7154b55c632450) — Thanks @sjf-oa, @sjf.
- Transfer hosted Agents API files with Linux-native or Docker-managed state; Windows and macOS bind-mounted state remain unsupported [b5e55716](https://github.com/openclaw/openclaw/commit/b5e5571675c910b3ee0f60e83b5192b1e37c6c04) — Thanks @sjf-oa, @sjf.
- Show Agents API activity and preserve native tool history [#156182](https://github.com/openclaw/openclaw/pull/156182) — Thanks @sjf-oa, @sjf.
- Enable live web search in new Agents API sessions [#156306](https://github.com/openclaw/openclaw/pull/156306) — Thanks @sjf-oa, @sjf.
- Offer self-hosted Agents API execution with an external controller, matching workspace, and a shared 60-second submission deadline [#158307](https://github.com/openclaw/openclaw/pull/158307) — Thanks @sjf-oa, @sjf.
- Generate dream narratives and restricted completions; a lost creation response can prevent remote session cleanup [#159246](https://github.com/openclaw/openclaw/pull/159246) — Thanks @sjf-oa, @sjf.

**Bug fixes**

- Supply workspace rules and persona to new Agents API sessions [099220cc](https://github.com/openclaw/openclaw/commit/099220cc937ad0b3ee24fee60cfd45e24e091e41) — Thanks @sjf.
- Report Agents API token usage from settled native turns [#156092](https://github.com/openclaw/openclaw/pull/156092) — Thanks @sjf-oa, @sjf.
- Honor model-supported Agents API reasoning on new and reused sessions [#156116](https://github.com/openclaw/openclaw/pull/156116) — Thanks @sjf-oa, @sjf.
- Preserve conversation context in Agents API messages [#156167](https://github.com/openclaw/openclaw/pull/156167) — Thanks @sjf-oa, @sjf.
- Retry Agents API submissions after temporary server errors [#158775](https://github.com/openclaw/openclaw/pull/158775) — Thanks @sjf-oa, @sjf.
- Deliver plugin prompt context on ordinary Agents API turns, without enforcing hook tool lists [#159375](https://github.com/openclaw/openclaw/pull/159375) — Thanks @sjf-oa, @sjf.

</details>

</Accordion>

<Accordion title="Sign in with ChatGPT (Beta) and OpenAI accounts">

OpenAI setup makes Codex login, Sign in with ChatGPT (Beta), and API keys easier to distinguish, with model choices tied to the selected account. ChatGPT sign-in requires registration and consent to share tokens. It does not cover every model or media tool, and OpenClaw cannot show its quota or set per-app limits. The [authentication comparison](https://docs.openclaw.ai/providers/openai/authentication) explains which credentials you need.

Signing back into the same verified account preserves conversation choices. Missing older account selections may still need reconnection or an explicit choice. ChatGPT Beta sign-in supports automatic compaction in native Codex, but not manual compaction or remote execution; see the [setup guide](https://docs.openclaw.ai/providers/openai/setup).

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Improvements**

- Add Sign in with ChatGPT preview [#148567](https://github.com/openclaw/openclaw/pull/148567) — Thanks @stevenlee-oai, @kevinlin-openai.
- Share model sign-in preparation across clients [#156784](https://github.com/openclaw/openclaw/pull/156784) — Thanks @grynn.
- Show the selected ChatGPT sign-in identity [#157629](https://github.com/openclaw/openclaw/pull/157629) — Thanks @stevenlee-oai.
- Clarify OpenAI connection methods and their allowance boundaries during the initial sign-in ordering update [#157792](https://github.com/openclaw/openclaw/pull/157792) — Thanks @stevenlee-oai.
- Mark Sign in with ChatGPT as Beta across setup surfaces [#160011](https://github.com/openclaw/openclaw/pull/160011) — Thanks @stevenlee-oai.
- Show Codex login before ChatGPT beta sign-in [#160078](https://github.com/openclaw/openclaw/pull/160078) — Thanks @stevenlee-oai.

**Bug fixes**

- Keep conversation account choices after OAuth sign-in [#149591](https://github.com/openclaw/openclaw/pull/149591) — Thanks @zachisfine, @obviyus.
- Clear covered deleted-account selections and offer verified replacements, with recovery gaps for unreadable stores and providers lacking setup methods [#157745](https://github.com/openclaw/openclaw/pull/157745) — Thanks @stevenlee-oai.
- Refresh Profile accounts after changes elsewhere [#157950](https://github.com/openclaw/openclaw/pull/157950) — Thanks @stevenlee-oai.
- Keep model pickers usable during provider sign-in [#158132](https://github.com/openclaw/openclaw/pull/158132) — Thanks @obviyus.
- Separate sign-in problems from model refresh failures [#158207](https://github.com/openclaw/openclaw/pull/158207)
- Refresh retained Codex ChatGPT credentials across turns [#158458](https://github.com/openclaw/openclaw/pull/158458) — Thanks @fuller-stack-dev, @hannesrudolph.
- Match OpenAI media tools to compatible credentials [#159920](https://github.com/openclaw/openclaw/pull/159920) — Thanks @stevenlee-oai.
- Discover model choices for the selected ChatGPT account [#160027](https://github.com/openclaw/openclaw/pull/160027) — Thanks @stevenlee-oai.

**Documentation**

- Clarify ChatGPT sign-in capabilities, usage limits and credential boundaries [#160023](https://github.com/openclaw/openclaw/pull/160023) — Thanks @stevenlee-oai.

</details>

</Accordion>

<Accordion title="GPT-6 Sol and Luna">

GPT-6 Sol and Luna appear for accounts with access through supported OpenAI API, ChatGPT, and native Codex connections. Discovery fixes help subscription accounts find them without changing existing model choices. To use OpenClaw's own runtime, select it explicitly in the [runtime settings](https://docs.openclaw.ai/providers/openai/runtimes); choosing the model alone does not switch runtimes.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Improvements**

- Support GPT-6 Sol and Luna on API and embedded OpenClaw routes [#155967](https://github.com/openclaw/openclaw/pull/155967) — Thanks @fduch-stranger.

**Bug fixes**

- Restore eligible GPT-6 Sol and Luna subscription discovery and native Codex execution [#155989](https://github.com/openclaw/openclaw/pull/155989) — Thanks @fduch-stranger.

</details>

</Accordion>

<Accordion title="Claude Opus 5.5">

[Claude Opus 5.5](https://docs.openclaw.ai/providers/anthropic) becomes the default for new Anthropic and Claude CLI setups and the rolling `opus` choice. Explicit Opus 5 selections stay unchanged. Opus 5.5 always uses thinking, even when you hide it. Automatic PDF analysis can use 5.5 independently of your chat model; set a PDF model explicitly to keep a particular version.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Improvements**

- Add Claude Opus 5.5 with its thinking and pricing rules [#155966](https://github.com/openclaw/openclaw/pull/155966)
- Use Opus 5.5 for rolling defaults while preserving explicit Claude selections [#156093](https://github.com/openclaw/openclaw/pull/156093) — Thanks @fuller-stack-dev.

**Bug fixes**

- Restore Opus 5.5 requests with Claude subscription authentication [#156062](https://github.com/openclaw/openclaw/pull/156062) — Thanks @serg0x, @aleps001, @kiiatkin.

</details>

</Accordion>

<Accordion title="Claude Sonnet 5.5">

[Claude Sonnet 5.5](https://docs.openclaw.ai/providers/anthropic) is available through Anthropic, and the rolling `sonnet` choice now selects it. Explicit version selections, including `sonnet-5`, stay pinned, while fresh setup still defaults to Opus 5.5. Thinking defaults to high; choosing off still permits notes between tool calls.

Claude Code 2.1.277 rejects the new model ID. Use an explicit `sonnet-5` selection to keep Sonnet 5 on that version.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Improvements**

- Add Claude Sonnet 5.5 and advance the rolling `sonnet` alias, with a one-million-token context window, 128,000-token output limit, and Sonnet 5 API rates [#160847](https://github.com/openclaw/openclaw/pull/160847)

Fast mode and Priority Tier remain unavailable. Forced tool choices become automatic. Reasoning can carry from Sonnet 5 or Claude 4.x into Sonnet 5.5, but not from Opus 5/5.5, Fable, or Mythos; other models cannot reuse Sonnet 5.5 reasoning. Eligible direct Anthropic API-key requests may fall back to Sonnet 5 after safety refusals at the same rates. This change does not add Bedrock, Vertex, Foundry, or Mantle catalog entries or establish a minimum compatible Claude Code version.

</details>

</Accordion>

<Accordion title="Video generation providers">

[Video generation](https://docs.openclaw.ai/tools/video-generation) adds Kie AI, Z.AI, and Novita for text prompts and supported image inputs. Qwen and Alibaba Wan can also animate local images. Kie is enabled by default but needs an API key, and Z.AI video uses general API billing even if you use a Coding Plan for chat. Input and output limits vary by model; Kie AI, Z.AI, and Novita do not accept reference videos.

Sora and the bundled custom OpenAI-compatible video connection have been removed following Sora's retirement. Replace saved `openai/sora-2` or `openai/sora-2-pro` selections with another configured provider. They are not changed automatically and can keep failing.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Improvements**

- Add Kie AI, Z.AI, and Novita video models and allow Kie/Runway credential-only configuration [#160080](https://github.com/openclaw/openclaw/pull/160080)

**Bug fixes**

- Show failed video and music providers in warning logs [#158914](https://github.com/openclaw/openclaw/pull/158914) — Thanks @ayushdevo, @obviyus, @kybrcore.
- Animate local images with Qwen and Alibaba Wan within tool intake and model-specific limits [#160123](https://github.com/openclaw/openclaw/pull/160123)

**Limits and compatibility**

- Remove the retired OpenAI Sora video provider [#159543](https://github.com/openclaw/openclaw/pull/159543) — Thanks @kybrcore.

</details>

</Accordion>

<Accordion title="Codex command results and conversations">

The managed Codex runtime moves to 0.158.0, fixing missing output from completed commands. Parent agents can continue when workers finish, and conversation forks and compaction retain their context more consistently. These fixes need the updated runtime and do not replay previously failed deliveries. [Model discovery](https://docs.openclaw.ai/plugins/codex-harness-reference/model-discovery) also waits longer for slow responses, unless you configured a shorter timeout.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Improvements**

- Reduce Codex relay processing for unchanged requests [#155987](https://github.com/openclaw/openclaw/pull/155987)
- Release idle Codex catalog decoder memory [#156202](https://github.com/openclaw/openclaw/pull/156202)
- Clarify deferred Codex catalog refresh warnings [#157352](https://github.com/openclaw/openclaw/pull/157352) — Thanks @shakkernerd, @mrzeepek, @flyto168, @zl0nline, @brennan-scott, @msobrosa, @safrano9999.
- Stop full Codex history scans while catalogs are idle [#157565](https://github.com/openclaw/openclaw/pull/157565) — Thanks @pollybot13, @siskoyu.

**Bug fixes**

- Keep Codex conversations usable after compaction [b4d60fa5](https://github.com/openclaw/openclaw/commit/b4d60fa5edfc2713a5cb3643fa1c936fec3c3cd0) — Thanks @jjjhenriksen, @jalehman.
- Respect Codex compaction cancellation and close progress [#132343](https://github.com/openclaw/openclaw/pull/132343)
- Recover stale heartbeat calls in ordinary Codex turns [#148547](https://github.com/openclaw/openclaw/pull/148547) — Thanks @romneyda.
- Report Codex connection failures and timeouts correctly [#155710](https://github.com/openclaw/openclaw/pull/155710) — Thanks @vincentkoc.
- Keep Codex plugin discovery deadlines stable across clock changes [#155863](https://github.com/openclaw/openclaw/pull/155863) — Thanks @sunnyshu0925, @altaywtf.
- Prevent duplicate Codex replies and stale Activity previews after streaming [#156144](https://github.com/openclaw/openclaw/pull/156144) — Thanks @galiniliev.
- Verify configured remote Codex services for Ask OpenClaw [#156671](https://github.com/openclaw/openclaw/pull/156671) — Thanks @sjf-oa, @sjf.
- Preserve unknown outcomes for running Codex commands [#156764](https://github.com/openclaw/openclaw/pull/156764)
- Wait for Codex process cleanup after failed startup [#157229](https://github.com/openclaw/openclaw/pull/157229) — Thanks @mmartoccia.
- Restore caller-authorized native compaction, requiring compatible host and plugin versions [#157977](https://github.com/openclaw/openclaw/pull/157977)
- Keep native sessions responsive during database contention [#158396](https://github.com/openclaw/openclaw/pull/158396) — Thanks @fuller-stack-dev.
- Use configured transport for remote Codex finalization [#159331](https://github.com/openclaw/openclaw/pull/159331) — Thanks @kevinlin-openai.
- Preserve saved conversation text in Codex forks [#159651](https://github.com/openclaw/openclaw/pull/159651)
- Stop native terminals when canceling unsandboxed Codex runs [#159841](https://github.com/openclaw/openclaw/pull/159841)
- Allow slow Codex model discovery to finish [#160363](https://github.com/openclaw/openclaw/pull/160363) — Thanks @kimiyu-186.
- Retain completed command output with Codex 0.158.0 [#160487](https://github.com/openclaw/openclaw/pull/160487) — Thanks @kimiyu-186.
- Resume Codex parent sessions after workers finish [#160608](https://github.com/openclaw/openclaw/pull/160608) — Thanks @fuller-stack-dev.

**Limits and compatibility**

- Repair Codex child-result delivery after parent yield in the earlier Tasks-backed implementation, before its retirement [#156247](https://github.com/openclaw/openclaw/pull/156247) — Thanks @vincentkoc.
- Repair native completion persistence and acknowledgements under contention in the earlier Tasks-backed implementation [#158286](https://github.com/openclaw/openclaw/pull/158286) — Thanks @fuller-stack-dev.
- Repair saved Codex child-assignment recovery before the shared Tasks runtime was retired [#159735](https://github.com/openclaw/openclaw/pull/159735)

</details>

</Accordion>

<Accordion title="Codex files, tools, and Ultrafast">

Local Codex can read full uploaded documents beyond their shortened previews when running without a sandbox and with read permission. Optional plugin tools already granted to the agent remain available. You can opt into [Ultrafast](https://docs.openclaw.ai/plugins/codex-harness/config-fields) with `appServer.enableUltrafast`; it is off by default and requires account and model support.

[User-home Codex connections](https://docs.openclaw.ai/plugins/codex-harness/app-server) now follow the provider configured in that Codex home, including when an existing chat resumes or forks. Check that it supports your model. To keep built-in OpenAI routing, set `model_provider = "openai"` there and restart the app-server, or use an agent-home setup with suitable credentials.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Improvements**

- Opt into model-aware Codex Ultrafast tier selection [#158703](https://github.com/openclaw/openclaw/pull/158703) — Thanks @sjf-oa, @sjf.

**Bug fixes**

- Honor the native home's configured provider for user-home Codex chats, including cold resume and side questions [#156226](https://github.com/openclaw/openclaw/pull/156226) — Thanks @galiniliev.
- Let local Codex read complete uploaded documents [#156758](https://github.com/openclaw/openclaw/pull/156758)
- Restore Codex model-reference validation in Docker [#157175](https://github.com/openclaw/openclaw/pull/157175) — Thanks @sandra-peach.
- Honor configured tool PATH in local Codex commands [#157290](https://github.com/openclaw/openclaw/pull/157290) — Thanks @vincentkoc.
- Exit normally after Codex model validation [#157323](https://github.com/openclaw/openclaw/pull/157323) — Thanks @obviyus.
- Preserve compact argument schemas for Codex plugin tools [#157734](https://github.com/openclaw/openclaw/pull/157734) — Thanks @jalehman, @flyto168.
- Restore granted optional plugin tools in Codex runs [#157840](https://github.com/openclaw/openclaw/pull/157840) — Thanks @shootingsyh, @obviyus.

**Limits and compatibility**

- Restore local Codex admission through the earlier detached-task owner, before that Tasks surface was retired [#156624](https://github.com/openclaw/openclaw/pull/156624)

</details>

</Accordion>

<Accordion title="Claude CLI conversations and tools">

Foreground Claude CLI subagents can work beyond fifteen minutes while they continue making progress; silent work still has a timeout. Manual compaction keeps the conversation connected, and permitted shell tools keep working after a plugin refresh.

Claude CLI turns managed by the local plugin now allow quiet time while Claude shortens a long conversation. The overall run deadline still applies, and sessions running on a node keep their previous timeout behavior.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Improvements**

- Reduce memory retained by Claude Desktop session listings [#156266](https://github.com/openclaw/openclaw/pull/156266) — Thanks @goslingmanagment, @moerai.
- Avoid duplicate concurrent Claude history imports [#158232](https://github.com/openclaw/openclaw/pull/158232)

**Bug fixes**

- Keep working foreground Claude subagents alive beyond fifteen minutes [#157248](https://github.com/openclaw/openclaw/pull/157248) — Thanks @olli0103, @obviyus, @openclawkobian99.
- Keep plugin-owned Claude CLI turns active during silent compaction, within the existing outstanding-work allowance; stalled compaction can take longer to stop [#157498](https://github.com/openclaw/openclaw/pull/157498) — Thanks @etzelm, @Patrick-Erichsen, @cipp-ashe.
- Preserve Claude CLI conversation context during manual compaction [#157870](https://github.com/openclaw/openclaw/pull/157870) — Thanks @obviyus, @amarsmission.
- Keep Claude CLI shell tools working after plugin refresh [#159000](https://github.com/openclaw/openclaw/pull/159000) — Thanks @vacinc.

</details>

</Accordion>

<Accordion title="Anthropic sign-in and prompt caching">

[Anthropic connections](https://docs.openclaw.ai/providers/anthropic) handle stored subscription credentials and custom beta settings more consistently, avoiding related request failures. Prompt caching also follows the provider's context settings, and rewinding no longer changes an otherwise identical prompt unnecessarily.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Improvements**

- Reduce repeated configuration comparisons in model authentication [#156054](https://github.com/openclaw/openclaw/pull/156054)

**Bug fixes**

- Honor Anthropic transport session-affinity opt-in [6fea6820](https://github.com/openclaw/openclaw/commit/6fea682068473d2f4795a172b917669117518343)
- Keep prompt bytes stable across conversation rewind [#155749](https://github.com/openclaw/openclaw/pull/155749) — Thanks @holny, @obviyus, @lennartack.
- Honor installed Claude identity for stored subscription credentials [#157595](https://github.com/openclaw/openclaw/pull/157595) — Thanks @serg0x.
- Align Anthropic caching with provider context retention [#157662](https://github.com/openclaw/openclaw/pull/157662) — Thanks @romneyda.
- Keep required Anthropic fallback beta with custom betas [#158300](https://github.com/openclaw/openclaw/pull/158300) — Thanks @romneyda.
- Keep Active Memory recall prompts stable on Claude CLI so unchanged inputs can reuse the provider cache, without changing ordinary resumable turns [#160768](https://github.com/openclaw/openclaw/pull/160768) — Thanks @obviyus, @ndakota79.

</details>

</Accordion>

<Accordion title="Copilot accounts and saved history">

Copilot keeps credentials for different organizations separate during repair, refresh, and logout. If an agent relied on another organization's credentials, sign in for the intended organization. Newly saved conversations also preserve valid encrypted reasoning, and each agent keeps its own Code Mode controls without gaining extra tool permissions.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Bug fixes**

- Preserve separate Copilot tenant credentials during Doctor repair [104e67f5](https://github.com/openclaw/openclaw/commit/104e67f55edc7dc38bb81420a95895f9edb77e9e) — Thanks @vasubansal7576.
- Allow Copilot client creation to recover after immediate failure [6392e847](https://github.com/openclaw/openclaw/commit/6392e8474f32e956f5319e253f4c0076b23c5f54)
- Preserve valid long-ID Copilot reasoning in newly stored transcripts without repairing earlier damage [#155994](https://github.com/openclaw/openclaw/pull/155994) — Thanks @yashas-13, @obviyus, @baiwei0427.
- Keep Copilot Code Mode controls with the executing agent [#157044](https://github.com/openclaw/openclaw/pull/157044)

</details>

</Accordion>

<Accordion title="Model menus">

[Model menus](https://docs.openclaw.ai/concepts/models) show known choices while the full list loads and keep your current model easy to find. Repeated background refreshes no longer stall native agent runs. Reopen the menu to see newly discovered models; your account and role restrictions still apply.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Improvements**

- Reuse configured-model fallback preparation [#156076](https://github.com/openclaw/openclaw/pull/156076) — Thanks @vincentkoc.
- Keep current models visible in large pickers [#157869](https://github.com/openclaw/openclaw/pull/157869) — Thanks @obviyus.
- Show chat model menus while discovery continues [#157899](https://github.com/openclaw/openclaw/pull/157899) — Thanks @obviyus.
- Open model pickers during startup loading [#158128](https://github.com/openclaw/openclaw/pull/158128) — Thanks @obviyus.
- Preserve provider ordering in the first model picker [#158130](https://github.com/openclaw/openclaw/pull/158130) — Thanks @obviyus.

**Bug fixes**

- Keep starter models available after initial discovery failure [36def8be](https://github.com/openclaw/openclaw/commit/36def8be398b15248fb7fc05d51617fa40f7aae6)
- Respect role restrictions in model pickers [#154839](https://github.com/openclaw/openclaw/pull/154839) — Thanks @shakkernerd.
- Keep custom endpoint capabilities separate from canonical catalog assumptions [#156017](https://github.com/openclaw/openclaw/pull/156017)
- Identify native app sign-in failures in Models [#156278](https://github.com/openclaw/openclaw/pull/156278)
- Keep catalog updates flowing when one provider disappears [#156352](https://github.com/openclaw/openclaw/pull/156352) — Thanks @obviyus.
- Warn and retain saved model selections when Doctor finds retired or route-incompatible replacements [#156435](https://github.com/openclaw/openclaw/pull/156435) — Thanks @orionation, @bruce-yii, @sundaydriver, @shadesurgeon.
- Recover model listings after interrupted credential refresh [#156561](https://github.com/openclaw/openclaw/pull/156561) — Thanks @captain69g.
- Keep shared catalog requests alive for remaining callers [#157191](https://github.com/openclaw/openclaw/pull/157191) — Thanks @vincentkoc.
- Stop repeated catalog refreshes from stalling agent runs [#157459](https://github.com/openclaw/openclaw/pull/157459) — Thanks @mmartoccia, @goslingmanagment.
- Return rejected direct session pins to the configured primary [#157472](https://github.com/openclaw/openclaw/pull/157472) — Thanks @quinszouls, @polaris-arch, @obviyus.
- Use primary for refused inherited or unavailable model pins [#157556](https://github.com/openclaw/openclaw/pull/157556) — Thanks @obviyus, @quinszouls.
- Refresh host-only model entries during account renewal [#157772](https://github.com/openclaw/openclaw/pull/157772) — Thanks @romneyda.
- Preserve legacy model catalogs after failed refreshes [#158113](https://github.com/openclaw/openclaw/pull/158113)
- Preserve model discovery failures across provider aliases [#158139](https://github.com/openclaw/openclaw/pull/158139)
- Explain unknown model-provider filters as invalid requests [#159237](https://github.com/openclaw/openclaw/pull/159237)
- Reset session model overrides to the configured default, including already queued follow-ups [#159587](https://github.com/openclaw/openclaw/pull/159587) — Thanks @obviyus, @dh-js.
- Reduce model-catalog memory growth when switching providers [#160055](https://github.com/openclaw/openclaw/pull/160055) — Thanks @cyb3rb1ade, @eliasopolski.

</details>

</Accordion>

<Accordion title="Provider errors and retries">

OpenClaw avoids repeatedly sending requests that a provider has already rejected, while temporary failures keep their normal [retry handling](https://docs.openclaw.ai/concepts/retry). Plugin background requests can use your configured fallback models unless you explicitly chose a model. Before retrying a failed turn, check whether its tools already completed any actions.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Improvements**

- Avoid plugin discovery when preparing local-model context guidance [#155505](https://github.com/openclaw/openclaw/pull/155505) — Thanks @romneyda.

**Bug fixes**

- Keep Qwen token throttling from disabling saved profiles [#152521](https://github.com/openclaw/openclaw/pull/152521) — Thanks @leon-sk668, @altaywtf, @apple2345-pixel.
- Preserve model parameters in utility completions [#153451](https://github.com/openclaw/openclaw/pull/153451) — Thanks @alix-007, @obviyus, @dwalthour.
- Avoid write contention when selecting CLI fallback [#156703](https://github.com/openclaw/openclaw/pull/156703) — Thanks @vacinc, @fuller-stack-dev.
- Keep TypeSafe input rejections from blocking valid decisions [#156746](https://github.com/openclaw/openclaw/pull/156746) — Thanks @jalehman.
- Show provider recovery guidance when ACP returns no reply [#156879](https://github.com/openclaw/openclaw/pull/156879)
- Preserve runtime publication errors without provider fallback [#157218](https://github.com/openclaw/openclaw/pull/157218) — Thanks @gokay-ai, @wg-mojo, @obviyus.
- Honor configured fallbacks for plugin background completions [#157398](https://github.com/openclaw/openclaw/pull/157398) — Thanks @obviyus, @olli0103, @paweldrozd.
- Recover proxy reasoning sessions with exhausted answer budgets [#157673](https://github.com/openclaw/openclaw/pull/157673) — Thanks @obviyus, @name5566.
- Skip repeated requests for provider rejections with misleading retry codes [#159221](https://github.com/openclaw/openclaw/pull/159221) — Thanks @obviyus, @novaunboundai.
- Return actionable errors from the embeddings API [#159224](https://github.com/openclaw/openclaw/pull/159224)
- Stop replaying bodyless nontransient client errors [#160584](https://github.com/openclaw/openclaw/pull/160584) — Thanks @obviyus, @bogdandragosvasile.

</details>

</Accordion>

<Accordion title="Streaming replies">

OpenClaw does less repeated work when receiving long replies and preparing large model requests. Buffered Anthropic replies also give other conversations time to respond.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Improvements**

- Yield between buffered Anthropic stream events [#158410](https://github.com/openclaw/openclaw/pull/158410)
- Avoid full-prefix rescans in cumulative Responses streams [#158526](https://github.com/openclaw/openclaw/pull/158526)
- Combine queued text fragments before agent delivery [#158837](https://github.com/openclaw/openclaw/pull/158837)
- Skip unused extension dispatch during reply streaming [#158859](https://github.com/openclaw/openclaw/pull/158859)
- Move provider-request hashing off the Gateway thread [#159463](https://github.com/openclaw/openclaw/pull/159463)
- Encode eligible OpenAI-compatible HTTP requests once [#159574](https://github.com/openclaw/openclaw/pull/159574)
- Reduce repeated inspection of streamed plugin replies across nested consumers [fd17d340](https://github.com/openclaw/openclaw/commit/fd17d340ad9e69e4fcecd9c2be2931657eed29de)
- Reduce repeated plugin wrappers and processing overhead during OpenAI streaming [#160894](https://github.com/openclaw/openclaw/pull/160894)

**Bug fixes**

- Decode CR-only Anthropic events and reduce repeated framing scans; mixed-ending support remains incomplete [#158503](https://github.com/openclaw/openclaw/pull/158503)

</details>

</Accordion>

<Accordion title="Gemini and Grok voice conversations">

Gemini 3.8 Live keeps spoken turns in history and handles requests for agent help more consistently. Grok Talk avoids duplicate saved utterances and supports longer playback. Speaking over Talk replies interrupts playback again during agent consults unless you disabled interruption; Gemini Extended Thinking may still resume speaking after an interruption.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Bug fixes**

- Repair Gemini 3.8 Live consults, thinking settings, and response completion [0ba669ef](https://github.com/openclaw/openclaw/commit/0ba669ef0bc6c9cc95cb4d34c575e4778738c0d4) — Thanks @saariuslystoned, @iwhatsskill, @fuller-stack-dev.
- Restore Gemini 3.8 Live spoken turns and consults [cf982200](https://github.com/openclaw/openclaw/commit/cf982200a2a33624022251e49a2f44bb93118b1b) — Thanks @saariuslystoned, @iwhatsskill.
- Restore Gemini 3.8 Live and Extended Thinking replies when clients keep sending silent audio frames after speech; the bridge does not generate missing audio [#152844](https://github.com/openclaw/openclaw/pull/152844) — Thanks @saariuslystoned.
- Restore Talk interruption during forced agent consults [#153727](https://github.com/openclaw/openclaw/pull/153727) — Thanks @saariuslystoned, @dreamer-hit, @destinedenergy.
- Let GPT-Live start after recoverable provider warnings [#155534](https://github.com/openclaw/openclaw/pull/155534) — Thanks @alix-007, @obviyus, @rmyers64.
- Preserve Grok utterances, confirmed-action retry context, and longer playback within a 60-second queued-audio limit [#155838](https://github.com/openclaw/openclaw/pull/155838) — Thanks @marvinthebored, @peetiegonzalez, @vacinc, @obviyus.

</details>

</Accordion>

<Accordion title="Gemini speech and two-voice dialogue">

You can choose Gemini 3.8 Flash or Flash-Lite to [generate speech](https://docs.openclaw.ai/providers/google), with delivery instructions kept separate from the words spoken. Gemini 3.1 Flash TTS Preview remains the default.

For dialogue, select a 3.8 speech model and [configure exactly two voices](https://docs.openclaw.ai/tools/tts/field-reference), each with a distinct speaker name. Put the name and words on the same line, such as `Puck: Hello`, to choose that voice. Unrecognized labels are read aloud, and text without recognized labels uses the single-voice path.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Improvements**

- Add optional Gemini 3.8 Flash and Flash-Lite speech models with separate delivery-style metadata [#157331](https://github.com/openclaw/openclaw/pull/157331) — Thanks @saariuslystoned.
- Generate Gemini dialogue with two explicitly configured voices and inline speaker labels [#157465](https://github.com/openclaw/openclaw/pull/157465) — Thanks @saariuslystoned.

Set `tts.providers.google.model` to `gemini-3.8-flash-tts` or `gemini-3.8-flash-lite-tts`, and configure dialogue through `tts.providers.google.speakers`. Speaker names are case-sensitive, and a bare name without words on the same line does not switch voices. Lead-in text belongs to the first labeled speaker encountered. Older preview models reject recognized dialogue. These additions generate audio from text and do not change realtime voice conversations or automatically cast speakers.

</details>

</Accordion>

<Accordion title="Gemini Interactions">

You can opt into [Gemini Interactions](https://docs.openclaw.ai/providers/google) for streamed replies, reasoning, images, and tools. Google defaults stay unchanged. This connection sends the needed history with each request without asking the API to store it, and can recover interrupted replies under the normal retry rules. Cached-content handles and video clipping offsets are not supported.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Improvements**

- Add opt-in Gemini Interactions and fix pending thinking-level edits and rollback in the Control UI [#149880](https://github.com/openclaw/openclaw/pull/149880) — Thanks @markmcd, @romneyda, @rboy1.

**Bug fixes**

- Recover interrupted Google Interactions replies and release readers [#159198](https://github.com/openclaw/openclaw/pull/159198)

</details>

</Accordion>

<Accordion title="PDFs and unreadable images">

[PDF analysis](https://docs.openclaw.ai/tools/pdf) works with valid OpenAI credentials when Codex is enabled and can fall back to your active vision model when other choices are unavailable. The image viewer can skip unreadable images while keeping valid ones in the same request, preventing them from breaking a new reply.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Bug fixes**

- Skip unused discovery for configured image models [#156482](https://github.com/openclaw/openclaw/pull/156482)
- Fix PDF authentication with OpenAI and Codex [#156929](https://github.com/openclaw/openclaw/pull/156929)
- Use the active vision model as a final PDF fallback [#159593](https://github.com/openclaw/openclaw/pull/159593) — Thanks @zyz619963502zyz, @obviyus, @dh-js.
- Skip unreadable viewed images before they break replies [#159668](https://github.com/openclaw/openclaw/pull/159668) — Thanks @obviyus, @chaolawo-byte.

</details>

</Accordion>

<Accordion title="Usage estimates and Ultra">

Cost estimates now use the provider handling the request, and total CLI token counts are kept separate from the current conversation's context usage. Missing SuperGrok usage percentages are explained rather than shown as zero. You can also choose [Ultra](https://docs.openclaw.ai/tools/thinking) for planning and verification guidance across OpenClaw and Claude Code models. It uses only the reasoning the model supports; native Codex needs supported reasoning choices. Cost figures remain estimates.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Improvements**

- Extend Ultra planning and verification across supported runtimes [#155393](https://github.com/openclaw/openclaw/pull/155393) — Thanks @vincentkoc.

**Bug fixes**

- Use provider-specific price estimates and preserve compatible downloaded catalogs; refreshed data activates after restart [f1f18d72](https://github.com/openclaw/openclaw/commit/f1f18d72dec0ce36c4d8bcdb5c20ec3d8d0a7f5f) — Thanks @vincentkoc, @obviyus.
- Separate CLI token totals from current context usage [f3857241](https://github.com/openclaw/openclaw/commit/f38572419507b23de4ffaa0f4e55175b07e2e65a) — Thanks @vincentkoc, @yuxin-qiao.
- Explain missing SuperGrok usage percentages without inventing zero usage [#155790](https://github.com/openclaw/openclaw/pull/155790) — Thanks @saariuslystoned, @obviyus.
- Reject inherited keys in Moonshot and Tencent thinking policies [#158437](https://github.com/openclaw/openclaw/pull/158437)
- Show the selected model's Fast Mode policy in status [#158934](https://github.com/openclaw/openclaw/pull/158934) — Thanks @vacinc.
- Preserve supported extra-high reasoning alongside configured context budgets on standard OpenRouter connections; already prepared models can still retain stale effort settings after a catalog refresh [#160651](https://github.com/openclaw/openclaw/pull/160651) — Thanks @Olli0103, @obviyus, @AXEG0.

</details>

</Accordion>

<Accordion title="Decision model evaluations">

Agents can use a configured [Decision model](https://docs.openclaw.ai/concepts/decision-models) to answer yes/no questions, choose between alternatives, or score supplied evidence. That evidence goes to your selected local or hosted provider, with its normal limits and charges. Results do not authorize actions, and the default-off Labs preference does not start automatic evaluations. Private or nightly setups using the old TypeSafe tool or model setting must move to the shared Decision selection.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Improvements**

- Add explicit Decision evaluation, a Labs preference without automatic work, and replacement of the old TypeSafe-specific tool and model setting [#155134](https://github.com/openclaw/openclaw/pull/155134) — Thanks @jjjhenriksen, @jalehman, @mertbasar0.

**Bug fixes**

- Preserve runtime context after provider review [efd9b981](https://github.com/openclaw/openclaw/commit/efd9b9811e065d7a082ef8b8169dcdfd8fcf21ec)

</details>

</Accordion>

<Accordion title="ACP and OpenClaw model settings">

ACP agents now keep their external agent's model choice separate from OpenClaw's own model calls. After updating, check `agents.defaults.model` and its credentials. This can change the provider and account used for those calls, who bills you, and where your data goes. Signing in to the external agent does not sign you in to that provider. The [model guide](https://docs.openclaw.ai/concepts/models) explains the settings.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Bug fixes**

- Separate ACP harness models from native model calls [#153756](https://github.com/openclaw/openclaw/pull/153756) — Thanks @saariuslystoned, @shakkernerd, @ajmtrz.
- Keep active turns working through configuration reloads [#154462](https://github.com/openclaw/openclaw/pull/154462) — Thanks @treylawrence, @vacinc, @oldrich333.
- Keep Gateway model commands out of local state preparation [#158136](https://github.com/openclaw/openclaw/pull/158136) — Thanks @vacinc.

**Documentation**

- Clarify that ACP steering queues a follow-up; cancel first when work needs immediate redirection [#154372](https://github.com/openclaw/openclaw/pull/154372) — Thanks @saariuslystoned, @ubehera.

</details>

</Accordion>

<Accordion title="Responses API conversation continuity">

Applications using the [Responses API](https://docs.openclaw.ai/gateway/openresponses-http-api) can continue non-Incognito conversations after a restart. Continuation lasts up to 30 days, subject to storage limits and the conversation's lifetime. If `previous_response_id` is unknown or expired, the API now returns an error instead of silently starting a new chat. Resend the full history without that ID. IDs from before this update are lost when the old Gateway exits; live Incognito chats need an authorized session key without a response ID.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Bug fixes**

- Avoid false aborted results for running async tools [#157212](https://github.com/openclaw/openclaw/pull/157212) — Thanks @obviyus.
- Keep delayed tool results matched to their original calls across eligible Responses continuations, falling back to full history when the match is ambiguous [906dccdd](https://github.com/openclaw/openclaw/commit/906dccdd6aeb7969d9ccacab256d602d3d41e577) — Thanks @hartmark and Patrick Erichsen.
- Retain provider usage and error details after rejected tool calls in the built-in OpenAI Responses transport while blocking later calls [a1a0ec6c](https://github.com/openclaw/openclaw/commit/a1a0ec6c5b553edca48d8d64f645dd0a8ae9bbc3) — Thanks @RomneyDa.

**Limits and compatibility**

- Persist response continuations and reject unresolved IDs [#159227](https://github.com/openclaw/openclaw/pull/159227)

</details>

</Accordion>

<Accordion title="Telnyx setup">

Connect Telnyx by installing its official provider with `openclaw plugins install telnyx`, then adding your API key. The [Telnyx guide](https://docs.openclaw.ai/providers/telnyx) covers setup and model selection. The plugin is installed separately, and available models depend on your account.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Improvements**

- Add official Telnyx inference provider setup [#116016](https://github.com/openclaw/openclaw/pull/116016) — Thanks @dynamite-bud, @jalehman, @patrick-erichsen, @dmmc12.

</details>

</Accordion>

<Accordion title="Ollama tool calls">

Ollama agents no longer lose free-form tool arguments because of how OpenClaw describes them. This fixes affected Tool Search calls that repeatedly failed with missing-input errors.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Bug fixes**

- Preserve free-form tool inputs in native Ollama requests [#157564](https://github.com/openclaw/openclaw/pull/157564) — Thanks @hmache, @obviyus, @markomiric, @holny.

</details>

</Accordion>

<Accordion title="Fireworks default model">

New [Fireworks setups](https://docs.openclaw.ai/providers/fireworks) use GLM 5.3 Fast instead of the retired GLM 5.2 Fast. If you saved the old model, choose a replacement yourself. The bundled cached-input cost estimate rises from $0.21 to $0.39 per million tokens.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Limits and compatibility**

- Replace Fireworks' retired default with GLM 5.3 Fast [#160102](https://github.com/openclaw/openclaw/pull/160102)

</details>

</Accordion>

<Accordion title="Grok and DeepSeek thinking controls">

Supported newer standard Grok models get thinking controls and image-input support without waiting for each model name to be added. Grok 4.20 and variants such as Fast are excluded. DeepSeek Flash also honors thinking settings on affected OpenAI-compatible connections.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Bug fixes**

- Recognize thinking and images for newer standard Grok releases [#156397](https://github.com/openclaw/openclaw/pull/156397) — Thanks @serg0x.
- Restore canonical DeepSeek Flash fallback thinking support [#157304](https://github.com/openclaw/openclaw/pull/157304) — Thanks @sahilsatralkar, @obviyus, @anarchia-99.

</details>

</Accordion>

</AccordionGroup>

## Automations and Scheduling

Automations gain clearer setup, run history, and delivery status, alongside fixes for interrupted and delegated work.

<AccordionGroup>

<Accordion title="Schedule settings">

Jobs scheduled for a named conversation now run in its saved project directory or managed Git worktree. If the worktree is missing or no longer matches the conversation, the job stops. Restore its binding or recreate the job from a valid bound conversation before retrying. New unbound sessions still use the agent's configured workspace, while current and isolated jobs stay detached.

The Automations editor catches invalid webhook addresses before saving and correctly saves the default timing window for hourly jobs. The [schedule guide](https://docs.openclaw.ai/automation/cron-jobs/schedules) explains exact timing and staggered starts.

If your scripts create system-event jobs, remove `--timeout-seconds` from those commands. [Cron add and create](https://docs.openclaw.ai/cli/cron) now reject that previously ignored option. Agent and command jobs keep timeout support; script jobs use `--script-timeout-seconds`.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Improvements**

- Reuse unchanged automation list results and look up pending-message names in the selected store [#158077](https://github.com/openclaw/openclaw/pull/158077).
- Reduce loading-related browser style work when searching expanded Automations lists [#159901](https://github.com/openclaw/openclaw/pull/159901). Thanks @vyctorbrzezowski.

**Bug fixes**

- Reject malformed webhook URLs and embedded credentials in the editor before saving [#146706](https://github.com/openclaw/openclaw/pull/146706). Thanks @pengzh1, @obviyus, and @aniruddhaadak80.
- Preserve hourly default staggering when saving and reopening timing choices [#156974](https://github.com/openclaw/openclaw/pull/156974).
- Let agents read automation jobs and update results containing scheduler error counts [#157497](https://github.com/openclaw/openclaw/pull/157497). Thanks @he-yufeng, @obviyus, @nicolasderito, and @xiaozishan.
- Use saved project directories for named-session schedules and retain workspace and tool restrictions across rollover, with conversation and worktree ownership checks [#159444](https://github.com/openclaw/openclaw/pull/159444). Thanks @vyctorbrzezowski.
- Identify invalid timezones separately from invalid timestamps and nonexistent daylight-saving times [#159756](https://github.com/openclaw/openclaw/pull/159756).

**Limits and compatibility**

- Reject unsupported timeout flags on system-event creation without changing stored jobs [#159716](https://github.com/openclaw/openclaw/pull/159716).

</details>

</Accordion>

<Accordion title="Announcement recipients and delivery status">

Announcement setup suggests known conversations after you select a channel and enter its Account ID, with manual entry still available. Scheduled announcements receive the channel's formatting instructions, and command or script announcements sent to an explicit destination can appear in chat history for follow-up replies.

[Webhook delivery](https://docs.openclaw.ai/automation/cron-jobs/delivery) shows Unknown when the request may have arrived but no response confirms it. OpenClaw does not retry these sends. A successful job is not confirmation of delivery, including when best-effort delivery lets the job finish.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Improvements**

- Suggest account-scoped announcement targets, preserve manual entry, and clear stale topics after routing changes; failure-alert suggestions remain separate [05af7bc](https://github.com/openclaw/openclaw/commit/05af7bc4b306987f15b83092d4c8b366dc8f194b). Thanks @zeroaltitude.
- Reduce session-processing work for delivery previews and scheduled destination lookups while preserving routing choices and reading route changes afresh [#160216](https://github.com/openclaw/openclaw/pull/160216).

**Bug fixes**

- Record successful explicit-destination command and script announcements in chat context when destination lookup and session admission succeed [#156962](https://github.com/openclaw/openclaw/pull/156962). Thanks @obviyus and @fourestfire.
- Supply scheduled chat announcements with the delivering channel and account's formatting rules [#157877](https://github.com/openclaw/openclaw/pull/157877). Thanks @obviyus.
- Accept disabled failure alerts through the automations tool while keeping auto-disable safety notices; restricted-schema providers retain object-only settings [#158325](https://github.com/openclaw/openclaw/pull/158325). Thanks @obviyus and @joshpetras.
- Preserve unknown webhook delivery after timeouts, interrupted responses, and ambiguous redirects without replaying the send [#159840](https://github.com/openclaw/openclaw/pull/159840). Thanks @joshavant.

</details>

</Accordion>

<Accordion title="Automation run transcripts">

Choose [View transcript](https://docs.openclaw.ai/automation/cron-jobs/managing-jobs) on a run to read its conversation and load earlier messages. Isolated runs show their own conversation; custom-session jobs show the conversation shared across runs. Run history remains available after Tasks retirement, and the [sessions CLI](https://docs.openclaw.ai/cli/sessions) can archive or delete a stored run by its exact key. Retention limits are unchanged, and previously deleted history is not restored.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Improvements**

- Give conversation-history reads a separate queue from cron retention scans, with an extra on-demand reader and memory and cold-start tradeoffs [#155998](https://github.com/openclaw/openclaw/pull/155998).
- Move scheduled-job history reads off the Gateway thread while preserving filters, pagination, and current access checks [#158222](https://github.com/openclaw/openclaw/pull/158222).
- Open and page the recorded automation transcript directly through Cron, preserving the selected session generation and checking access on every page [#158776](https://github.com/openclaw/openclaw/pull/158776).

**Bug fixes**

- Resolve exact cron-run session keys for CLI deletion, archiving, and dry runs while retaining confirmation and identity checks [#158212](https://github.com/openclaw/openclaw/pull/158212). Thanks @obviyus and @abacha.
- Recheck cron history grouping and current rank before overflow deletion; this change's managed-flow cancellation repair preceded the later TaskFlow removal [#159064](https://github.com/openclaw/openclaw/pull/159064).
- Close old transcripts when switching automation panels and ignore their delayed replies while retaining same-panel selections [#159160](https://github.com/openclaw/openclaw/pull/159160).

</details>

</Accordion>

<Accordion title="Recovery after temporary failures">

A temporary database error during startup no longer leaves future jobs unscheduled after the problem clears. Jobs using supported local Ollama or OpenAI-compatible endpoints also [check the provider again on their next run](https://docs.openclaw.ai/automation/cron-jobs/payloads) after a connection check times out. The affected run may still be skipped.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Improvements**

- Avoid redundant database snapshots during cron receipt checks without changing admission or deletion checks [#156801](https://github.com/openclaw/openclaw/pull/156801).

**Bug fixes**

- Preserve command output, exit status, and timeout details when cleanup fails; uncertain cleanup still reports an error and keeps backup write ownership held [c6709b4](https://github.com/openclaw/openclaw/commit/c6709b460e637f7c0c5cf6eda4c97a17c6fc5933). Thanks @masatohoshino.
- Stop caching client-side local-provider probe timeouts for five minutes, allowing the next isolated run to probe again [#156237](https://github.com/openclaw/openclaw/pull/156237). Thanks @obviyus and @charlie-morrison.
- Resume future scheduling after transient startup catch-up failure, including subsequent suspension and resume [#159086](https://github.com/openclaw/openclaw/pull/159086). Thanks @obviyus and @yetval.
- Move manual, scheduled, and startup catch-up reservations to the database worker; execution still waits for a durable reservation [#159792](https://github.com/openclaw/openclaw/pull/159792).

</details>

</Accordion>

<Accordion title="Permissions for delegated work">

Scheduled jobs can launch workers with their already-approved permissions without a mistaken administrator-permission error. Configured channel owners can also manage automations again after delegated work finishes. Existing restrictions still apply, and explicitly requesting Full Access still requires administrator permission.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Bug fixes**

- Recognize existing one-use automation management grants after subagent completion while retaining handler validation [#157404](https://github.com/openclaw/openclaw/pull/157404). Thanks @obviyus.
- Preserve the parent's effective execution mode for newly spawned workers without granting administrator identity or rewriting existing sessions [#158270](https://github.com/openclaw/openclaw/pull/158270). Thanks @fuller-stack-dev and Jason Sy.
- Read scheduled-job child status and answers through the database worker while retaining successor, paused-work, queued-delivery, and cancellation handling [#160508](https://github.com/openclaw/openclaw/pull/160508).
- Omit tool discovery and delegation instructions from Codex runs with an explicitly empty tool allowlist, including scheduled jobs; this corrects the prompt without adding permission enforcement [#160840](https://github.com/openclaw/openclaw/pull/160840).

</details>

</Accordion>

<Accordion title="Heartbeat alerts and restarts">

When a completed [heartbeat](https://docs.openclaw.ai/gateway/heartbeat) decides no notification is needed, it also suppresses tool-failure warnings and attachments. Later runner failures still produce alerts. Restarting no longer hangs on a queued heartbeat job; that waiting job is marked skipped during shutdown.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Bug fixes**

- Settle queued heartbeat jobs as skipped during shutdown to avoid a circular restart wait [24babfe](https://github.com/openclaw/openclaw/commit/24babfe94446197e4d9dd35dac8a14556943d7f5). Credit Peter Steinberger.
- Honor completed quiet heartbeat decisions and suppress their exact unsent warning records; already queued or ambiguous sends keep their recovery handling [#156174](https://github.com/openclaw/openclaw/pull/156174). Thanks @pash-openai.
- Correct Doctor's create and update summaries for disabled monitors without changing their stored enabled state [#159711](https://github.com/openclaw/openclaw/pull/159711).

</details>

</Accordion>

<Accordion title="Workboard completion triggers">

Enabled automations attached to a [Workboard](https://docs.openclaw.ai/plugins/workboard) can now run when linked workers finish, fixing cases where they had to wait for the next scheduled run. Disabled jobs stay off, and the normal schedule remains a fallback. Older hosts without this trigger support report that it is unavailable.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Bug fixes**

- Let the active Workboard service request completion-triggered runs while retaining disabled-job, cron-origin, and stopped-service exclusions [#156130](https://github.com/openclaw/openclaw/pull/156130). Thanks @joshavant.

</details>

</Accordion>

<Accordion title="Gmail watch renewal">

[Gmail watches](https://docs.openclaw.ai/automation/cron-jobs/gmail) renew once after an overdue wake and avoid overlapping renewal attempts. Stopping or replacing a watcher also stops its unfinished renewal. The renewal schedule and mail forwarding behavior are unchanged.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Improvements**

- Coordinate Gmail watch renewal with scheduling, replacement, and shutdown in the Gateway and standalone Gmail service [#158913](https://github.com/openclaw/openclaw/pull/158913).

</details>

</Accordion>

<Accordion title="Scheduled-session cleanup">

Cleanup of old scheduled sessions does more work in the background and uses less temporary memory, reducing interruptions to other activity. Retention rules and transcript archiving are unchanged, and cleanup can still take longer overall in custom stores. The [scheduling guide](https://docs.openclaw.ai/concepts/architecture#timed-work-and-shutdown) explains late starts, startup catch-up, and shutdown.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Improvements**

- Discover expired cron-run sessions in a worker while retaining shared-store ownership and deletion safeguards [#155414](https://github.com/openclaw/openclaw/pull/155414).
- Reduce temporary allocation during cleanup and previews without making previews persistent or changing retention policy [#160510](https://github.com/openclaw/openclaw/pull/160510).

**Documentation**

- Explain coalesced late timer wakes, Cron's own execution and catch-up policy, and shutdown waiting for registered work [#160477](https://github.com/openclaw/openclaw/pull/160477).

</details>

</Accordion>

</AccordionGroup>

## Browser and Computer Use

The chat Browser panel shows tabs related to your conversation, and attached or cloud-session desktops let you hand control back to the agent after a manual step.

<AccordionGroup>

<Accordion title="Lightpanda browser profiles">

Experimental [Lightpanda profiles](https://docs.openclaw.ai/tools/browser/lightweight) let your agent read pages and fill forms. Lightpanda needs separate setup with a protected connection and supports one temporary page at a time. After a disconnect, reopen the page and take a new snapshot. Chromium remains the default for screenshots, PDFs, file transfers, saved sign-ins, multiple tabs, and unsupported sites.

Check the guide's licensing requirements before deploying or redistributing Lightpanda. Version 0.4.1 uses AGPL-3.0-or-later; OpenClaw's adapter remains MIT-licensed.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Improvements**

- Add explicitly selected, externally started Lightpanda profiles with capability checks and connection-owned pages. [b7eb012](https://github.com/openclaw/openclaw/commit/b7eb012f643b24b561fe67d974c1b643788114b5) — @vincentkoc
- Show supported browser engines and their session and screenshot capabilities in status, without implying an engine is installed or running. [0a5178c](https://github.com/openclaw/openclaw/commit/0a5178c483b5aecfc4a27ecffccf69323c2d52fd) — @vincentkoc
- Add an optional Chromium headless-shell benchmark selection with distinct result labels; this does not change the production browser or establish resource savings. [f5cf1b3](https://github.com/openclaw/openclaw/commit/f5cf1b31e1fc988b1dc225cb6152f2d683ee9e2e) — @vincentkoc

**Documentation**

- Add pinned native Linux/macOS and Linux-container setup examples, plus an opt-in text-and-form benchmark; Windows guidance uses containers or WSL. [645f1bc](https://github.com/openclaw/openclaw/commit/645f1bc4ef49f9056b54d39b9c4ab7219776c1b3) — @vincentkoc
- Document engine licensing, artifact provenance, and redistribution obligations in the September 21 audit, without treating checksums as permission to redistribute. [322e358](https://github.com/openclaw/openclaw/commit/322e358bb0ca00ce92ebe2ddc8ce9d23f652c8f1) — @vincentkoc

</details>

</Accordion>

<Accordion title="Browser tabs in chat">

The chat [Browser panel](https://docs.openclaw.ai/tools/browser/profiles) now shows tabs related to that conversation. The tagged [Android](https://docs.openclaw.ai/platforms/android#agent-browser-in-chat) source lets you interact with the agent's tab inside chat and return to your draft (see [Native Apps](#native-apps) for release availability). This requires administrator access and an updated Gateway with its bundled Control UI enabled. Closing the Android card leaves the tab open. New tabs opened through the Browser panel close when you reset or delete the conversation; older tabs remain in the Browser dock.

[Session browser dashboards](https://docs.openclaw.ai/web/dashboards) also let people with conversation write access interact without browser administrator access. They start without your saved sign-ins and require Playwright with local managed Chromium. Conversation access limits still apply, and read-only, sandbox-required, or locked-model sessions are excluded. Stopping the dashboard, resetting the conversation, or restarting OpenClaw loses its page state.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Improvements**

- Limit chat Browser tab listings to session-owned and conversation-referenced tabs, with session cleanup for newly panel-opened tabs and the full Browser dock still available. [#159891](https://github.com/openclaw/openclaw/pull/159891)
- Add Android in-chat remote browser control, touch and keyboard input, collapse, and reopening under existing administrator access. [#159767](https://github.com/openclaw/openclaw/pull/159767) — @iwhatsskill, @ivankuznetsov
- Let eligible session writers interact with isolated managed-Chromium dashboards, separate from administrator browsing; remote, attached, personal, node, and Lightpanda profiles are unsupported, and dashboard records remain in memory with a 64-record limit. [#156371](https://github.com/openclaw/openclaw/pull/156371) — @vincentkoc

**Bug fixes**

- Open the browser card's selected page after the panel finishes delayed rendering. [#153253](https://github.com/openclaw/openclaw/pull/153253) — @vyctorbrzezowski
- Give browser streaming one startup window of up to 30 seconds before cancelling a stalled attempt and falling back to a screenshot, followed by the existing retry. [#156323](https://github.com/openclaw/openclaw/pull/156323) — @vincentkoc
- Keep ordinary Chrome tabs usable when Chrome Web Store or another recognized protected page refuses control; the protected page stays excluded and no extension update is required. [#156890](https://github.com/openclaw/openclaw/pull/156890) — @holny, @obviyus, @liyoulu
- Refit visible shared browser views after remote resizing and discard late native-browser errors from a previous tab or session. [#157087](https://github.com/openclaw/openclaw/pull/157087)

</details>

</Accordion>

<Accordion title="Shared desktop control">

After you sign in or finish a manual step on a [conversation-attached or cloud-session desktop](https://docs.openclaw.ai/gateway/cloud-workers/desktop), you can ask the agent to continue without separately releasing control in the viewer. It uses its existing permission, takes a fresh screenshot, and does not replay interrupted input. You can take control back at any time. This handoff is limited to attached and cloud-session desktops.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Improvements**

- Add explicit agent takeover after manual control, invalidate old observations, preserve human reclaim, and show a neutral reconnect message after a clean viewer disconnect. [#159923](https://github.com/openclaw/openclaw/pull/159923)
- Update macOS desktop automation to Peekaboo 4.6.0 for capture and input fixes; contended actions time out if they cannot start within 15 seconds, while already executing actions keep their locks. [#158022](https://github.com/openclaw/openclaw/pull/158022)

**Bug fixes**

- Treat blank optional computer selectors as omitted while retaining errors for invalid or unknown nonblank selections. [#155072](https://github.com/openclaw/openclaw/pull/155072) — @ceckert, @obviyus
- When tool-loop detection is enabled, recognize repeated reads of an unchanged window despite fresh element references and apply the existing no-progress stop. [#160019](https://github.com/openclaw/openclaw/pull/160019) — @obviyus, @grape404

</details>

</Accordion>

<Accordion title="Linux desktop audio">

[Managed Linux desktop views](https://docs.openclaw.ai/gateway/config-browser-ui-desktop) now have an Unmute control for listening to application sound, including with view-only access. Audio starts muted, stops when you hide or disconnect the view, and stays muted after reconnecting. It carries no microphone audio, uses about 1.5 Mbit/s, and may not stay in sync with the picture.

If sound is unavailable, use the Audio unavailable control for setup help. Install `pulseaudio` and `pulseaudio-utils`, then restart the managed desktop. Successful setup replaces its existing PulseAudio route with a private output; failed setup leaves the old route in place without capturing it.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Improvements**

- Add optional audio availability information to desktop observations while preserving screen-only clients. [#157718](https://github.com/openclaw/openclaw/pull/157718) — @vincentkoc
- Capture a private managed-Linux application output and recover audio independently of healthy desktop applications; exhausted recovery leaves audio disabled with restart guidance. [#157720](https://github.com/openclaw/openclaw/pull/157720) — @vincentkoc
- Report the current audio source after recovery, with setup guidance and sanitized failure information. [#157723](https://github.com/openclaw/openclaw/pull/157723) — @vincentkoc
- Add explicit Unmute and Mute controls to embedded and docked desktop panels, with stop-on-hide and muted reconnect behavior. [#157724](https://github.com/openclaw/openclaw/pull/157724) — @vincentkoc
- Add the same audio controls to the standalone Desktop view and keep its toolbar usable on narrow screens. [#157726](https://github.com/openclaw/openclaw/pull/157726) — @vincentkoc
- Move optional audio setup guidance into the Audio unavailable control while retaining playback-error alerts. [#159487](https://github.com/openclaw/openclaw/pull/159487)

**Security and trust**

- Require screen authentication and explicit start before audio capture, using expiring one-use bearer tickets, and end audio with its screen observation. [#157722](https://github.com/openclaw/openclaw/pull/157722) — @vincentkoc

</details>

</Accordion>

<Accordion title="Codex Computer Use on Mac">

[Codex Computer Use](https://docs.openclaw.ai/plugins/codex-computer-use) works with the replacement plugin and newer Desktop app layouts on Mac. Restart the Gateway after updating OpenClaw to load the fix. macOS permissions and your existing tool restrictions still apply; custom legacy policies may need updating.

If you disabled the old Computer Use plugin, automatic replacement now respects that choice. An owner or authorized administrator can run `/codex computer-use install` explicitly. To restore automatic setup, re-enable the old plugin setting as well.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Bug fixes**

- Prepare the replacement macOS Computer Use runtime and refresh changed desktop assets and sibling plugins while respecting custom identities and native policy. [#156556](https://github.com/openclaw/openclaw/pull/156556) — @bdjben, @shakkernerd
- Recognize newer signed Desktop executable layouts and create writable isolated launch configuration without changing the signed app or its permissions. [#158480](https://github.com/openclaw/openclaw/pull/158480) — @jalehman
- Honor an explicit native disable during automatic setup, preserve explicit owner/admin installation, and fix symlinked cache discovery and stale launchers. [#160133](https://github.com/openclaw/openclaw/pull/160133) — @bdjben

</details>

</Accordion>

<Accordion title="Browser and desktop support on Bun">

Bun installations no longer need a separate Node installation for the packaged Chrome connector or managed-desktop control helper. Custom browser commands keep their existing behavior, and Windows extension connections still need `node.exe`.

[Terminals on Bun](https://docs.openclaw.ai/install/bun-compatibility#known-limitations) have separate requirements. Node-free terminals on macOS and Linux need a compatible Bun build; stock Bun 1.4.2 still needs Node. This update does not change the apps' Bun versions. Some Bun builds can also take about 30 seconds to close a desktop command that launched an app.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Bug fixes**

- Launch packaged Chrome MCP with OpenClaw's current runtime on the next browser session, preserving custom commands. [#159422](https://github.com/openclaw/openclaw/pull/159422)
- Avoid the packaged Chrome server's npm startup update probe while retaining custom servers' existing checks. [#160226](https://github.com/openclaw/openclaw/pull/160226)
- Run managed desktop control with the Gateway's executable, removing that helper's separate Node requirement. [#159462](https://github.com/openclaw/openclaw/pull/159462)

**Limits and compatibility**

- Enable native terminals on compatible macOS/Linux Bun builds, retaining the Node helper for stock Bun and node-pty for Windows and Node runtimes. [#159447](https://github.com/openclaw/openclaw/pull/159447)

</details>

</Accordion>

<Accordion title="Desktop cleanup and shutdown">

Desktops prepared for a cancelled or rejected action are now released when the run ends, with cleanup failures reported. Browser activity also avoids pauses caused by saving tab records to a busy database. [Node shutdown](https://docs.openclaw.ai/nodes/node-host) waits for cleanup to finish, so a stuck plugin can still block shutdown or an automatic node update indefinitely.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Bug fixes**

- Await node and desktop-worker cleanup before reporting shutdown complete, and require reconnecting after failed plugin disconnect cleanup. [#156995](https://github.com/openclaw/openclaw/pull/156995)
- Retain responsibility for releasing an attached desktop when setup is cancelled, without sending the cancelled input. [#157997](https://github.com/openclaw/openclaw/pull/157997) — @vincentkoc
- Release every attached-desktop preparation at run end after rejected actions, including preparations that were never selected for use. [#158546](https://github.com/openclaw/openclaw/pull/158546) — @vincentkoc
- Move an in-root Browser symlink to Trash without moving its outside or missing destination, while continuing to refuse escaped parent directories. [#158640](https://github.com/openclaw/openclaw/pull/158640)
- Move Browser tab database work off the main thread while preserving tab ownership, retention, and completion of accepted work during shutdown. [#159599](https://github.com/openclaw/openclaw/pull/159599)

</details>

</Accordion>

<Accordion title="Search accounts and browser connections">

Automatic [web search](https://docs.openclaw.ai/tools/web) now uses an available xAI sign-in before a Tavily key, falling back to Tavily if Grok fails. A provider you selected explicitly keeps its existing behavior. Browser connection fixes also preserve supplied login credentials and correctly detect Windows browsers installed in paths with spaces.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Bug fixes**

- Restore OAuth-aware Grok-before-Tavily automatic search selection while preserving explicit provider pins and their no-fallback behavior. [#156048](https://github.com/openclaw/openclaw/pull/156048) — @holny, @obviyus, @darkjuanfra
- Preserve CDP authorization supplied as Headers objects or header tuples, including explicit-header precedence over URL credentials. [#159430](https://github.com/openclaw/openclaw/pull/159430)
- Detect Windows browser versions in paths with spaces and keep failed probes quiet, retaining the existing conditional directory fallback. [#160432](https://github.com/openclaw/openclaw/pull/160432) — @irish-joseph, @obviyus, @avirtudazo-officeconnect, @ayushdevo

</details>

</Accordion>

</AccordionGroup>

## Plugins and Integrations

Plugin pages now explain what an integration does and how to set it up, alongside fixes for plugin updates, cloud sessions, and connected coding agents.

<AccordionGroup>

<Accordion title="Cloud sessions and recovery">

Stopping one cloud session no longer blocks unrelated sessions from starting. Interrupted downloads can resume, and compatible [warm images](https://docs.openclaw.ai/gateway/cloud-workers/warm-images) skip unnecessary snapshot preparation. An interrupted Stop can also [resume saving your workspace](https://docs.openclaw.ai/gateway/cloud-workers/session-lifecycle) after a restart or update, provided the original machine is still available.

Messages sent during a cloud worker runtime update wait for it to finish before starting. Slow setup downloads get longer windows based on archive size and can continue while data is arriving, but initial pairing credentials still expire after ten minutes, so a slow first setup can still fail at pairing.

A lost machine leaves only the last saved workspace, and forced destruction discards unsaved edits. Failed cleanup can leave a machine running and charging you. If automatic cleanup gives up, inspect and stop the Crabbox lease, then retry Stop in the conversation.

All Crabbox providers now require **0.67.0 or newer**. If your host cannot download updates, install a supported executable before updating OpenClaw or inspection and cleanup may fail. Azure, Daytona, and GCP operators should check the [Crabbox migration notes](https://github.com/openclaw/crabbox/releases/tag/v0.67.0).

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Improvements**

- Defer replacement snapshots for compatible changed-commit warm starts; disabling reserves also disables automatic image refresh [#156380](https://github.com/openclaw/openclaw/pull/156380)
- Reduce remote snapshot-preparation commands and allow slower configured CLI probes [#156767](https://github.com/openclaw/openclaw/pull/156767)
- Prepare first-dispatch runtime and worker archives concurrently [#159520](https://github.com/openclaw/openclaw/pull/159520)
- Negotiate completion waits with paired nodes while older nodes retain polling [#160162](https://github.com/openclaw/openclaw/pull/160162)
- Reduce paired POSIX host startup loading; update and restart the node host to use it [#160163](https://github.com/openclaw/openclaw/pull/160163)
- Avoid full file application when both remote and local workspaces remain unchanged [#160231](https://github.com/openclaw/openclaw/pull/160231)

**Bug fixes**

- Keep active worker history and Stop requests tied to their original session store [#156452](https://github.com/openclaw/openclaw/pull/156452)
- Preserve unfinished recovery work when its selected session store or authority changes [#156543](https://github.com/openclaw/openclaw/pull/156543)
- Resume worker event delivery from saved acknowledgments and reject stale completion replay [#156612](https://github.com/openclaw/openclaw/pull/156612)
- Bound failed environment cleanup retries while retaining unconfirmed, potentially billed leases [#158867](https://github.com/openclaw/openclaw/pull/158867)
- Allow coordinator inspection retries more time within provisioning deadlines [#159399](https://github.com/openclaw/openclaw/pull/159399)
- Release unrelated cloud starts after Stop or cancellation of an unstarted Move [#159482](https://github.com/openclaw/openclaw/pull/159482)
- Resume workspace saving for an interrupted Stop across restarts and updates [#159484](https://github.com/openclaw/openclaw/pull/159484)
- Retry temporary bootstrap download failures within existing authorization limits [#159546](https://github.com/openclaw/openclaw/pull/159546)
- Resume partial Crabbox bootstrap downloads with final size and hash verification; separate node-host bundle downloads remain unchanged [#160655](https://github.com/openclaw/openclaw/pull/160655)
- Wait for an in-progress worker runtime update before starting new messages, with transfer activity reported for node-based updates [#160248](https://github.com/openclaw/openclaw/pull/160248)
- Keep bootstrap downloads authorized through their size-based setup window while retaining cancellation and ownership checks [#160687](https://github.com/openclaw/openclaw/pull/160687)
- Retain newly installed worker bundles while provisioning records which environment needs them [#160730](https://github.com/openclaw/openclaw/pull/160730)
- Align setup deadlines with archive size and detect stalled downloads by inactivity; initial pairing credentials still expire after ten minutes [#160904](https://github.com/openclaw/openclaw/pull/160904)

**Documentation**

- Correct profile reload guidance; new provisioning uses edited settings while running workers retain their settings, and reload-off mode retains its restart requirements [#159640](https://github.com/openclaw/openclaw/pull/159640)

**Limits and compatibility**

- Raise the minimum to Crabbox 0.67.0 for every cloud-worker provider and remote-proof backend [#160560](https://github.com/openclaw/openclaw/pull/160560)

</details>
</Accordion>

<Accordion title="Application previews on attached workers">

You can open interactive [application previews](https://docs.openclaw.ai/gateway/portals) on a conversation's dedicated attached secondary worker when your write and tool permissions allow it. Sessions that require a sandbox or lock model selection are excluded. Anyone with the preview link can use it while it is open, even if the person who created it loses access. Close the preview to withdraw the link.

Foreground apps on supported Linux workers can also use [host-held model API keys](https://docs.openclaw.ai/gateway/secrets/secret-store-and-egress#model-credentials-for-crabbox-commands) without copying the real key to the worker. This needs a supported API-key connection and a proxy-compatible app; OAuth and detached apps are unsupported. If cleanup fails, check the remote app before reusing the worker. Revoking its key access does not stop the app.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Improvements**

- Run prepared foreground Crabbox applications with command-scoped host credentials; source and dependencies must already be present, and the grant does not contain network access or restrict model operations [#156207](https://github.com/openclaw/openclaw/pull/156207)
- Open, list, and close previews on the conversation's dedicated attached worker; reconnect or update an unavailable node before retrying [#156373](https://github.com/openclaw/openclaw/pull/156373) — @vincentkoc

</details>
</Accordion>

<Accordion title="Plugin details and setup">

Plugin pages show capabilities, setup guides, and the inputs their tools expect, so you can understand an integration before using it. Enabled image, video, and music providers also appear under Media. [Customize UI](https://docs.openclaw.ai/plugins/feature-plugins) is now in Advanced settings, with `/settings/plugins?tab=advanced` available to restore the built-in interface. A capability listing does not mean your account is connected or access is granted.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Improvements**

- Load category navigation independently of catalog cards, with loading status and retry [#155280](https://github.com/openclaw/openclaw/pull/155280) — @patrick-erichsen
- Show trusted built-in attribution, local plugin overviews, and stable loading artwork [#157716](https://github.com/openclaw/openclaw/pull/157716) — @patrick-erichsen
- Open eligible catalog details directly from search and show plugin artwork [#157915](https://github.com/openclaw/openclaw/pull/157915) — @patrick-erichsen
- Preview top-level tool inputs and required fields without executing tools or loading disabled plugins [#157946](https://github.com/openclaw/openclaw/pull/157946) — @patrick-erichsen
- Add capability sections, bundled setup guides, and inline interface customization [#157956](https://github.com/openclaw/openclaw/pull/157956) — @patrick-erichsen
- Support coordinated curated ordering and Computer use browsing without changing Featured publication or adding computer-control capabilities [#158686](https://github.com/openclaw/openclaw/pull/158686) — @patrick-erichsen

**Bug fixes**

- Surface configured plugin failures and unavailable installations in health and deep-status text [#118013](https://github.com/openclaw/openclaw/pull/118013) — @xiaov1024
- Preserve provider model-selection choices during setup and remove included-file plugin settings without an unrelated root-config change during uninstall [#159945](https://github.com/openclaw/openclaw/pull/159945)
- Standardize bundled icon tiles and correct product logos [#155259](https://github.com/openclaw/openclaw/pull/155259) — @patrick-erichsen
- Correct Agents API artwork and its Agent runtimes category [#156549](https://github.com/openclaw/openclaw/pull/156549)
- Keep enabled image, video, and music providers visible under Media [#160473](https://github.com/openclaw/openclaw/pull/160473) — @vacinc
- Supply missing Kie artwork before the later branding correction [#160529](https://github.com/openclaw/openclaw/pull/160529) — @vincentkoc
- Replace Kie's fallback artwork with its own provider mark [aa8f6c7](https://github.com/openclaw/openclaw/commit/aa8f6c79450d5413e5b53b3051a5435d9e4f8b2a) — Peter Steinberger

**Documentation**

- Explain enabled versus actively used plugins and their credential requirements [#144397](https://github.com/openclaw/openclaw/pull/144397) — @vincentkoc

</details>
</Accordion>

<Accordion title="Plugin installation and updates">

You can install a package without changing whether it is enabled by using `openclaw plugins install <package> --no-enable`. Bun-only installations can manage npm plugins without separately installing Node or npm. When an install fails, the interface shows whether to retry or check its status first.

[Plugin updates](https://docs.openclaw.ai/cli/plugins/uninstall-and-update) can apply supported settings repairs before activation, but check migrated listener settings afterward. Data migrations still need `openclaw doctor --fix`, and disabled plugins keep their pending changes. If an older updater rejects legacy settings, update OpenClaw itself first. An unconfirmed rollback leaves the matching package in place and reports the failure.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Improvements**

- Install without changing allowlists, denylists, enabled entries, or exclusive slots; hook packs do not accept this option [#152020](https://github.com/openclaw/openclaw/pull/152020) — @stevenlee-oai
- Reuse one extraction for ClawHub file verification and installation [#156246](https://github.com/openclaw/openclaw/pull/156246)
- Keep local TypeScript plugins usable without a production compiler; published plugins still ship JavaScript [#156829](https://github.com/openclaw/openclaw/pull/156829)
- Reuse unchanged native binaries and complete companion directories during startup [#158414](https://github.com/openclaw/openclaw/pull/158414) — @yyds-xxxx, @jb168
- Use bundled npm for plugin management under Bun; Node installations keep using PATH npm [#160224](https://github.com/openclaw/openclaw/pull/160224)

**Bug fixes**

- Cancel downloads and clean staging when temporary archive creation fails [#156184](https://github.com/openclaw/openclaw/pull/156184)
- Verify legacy ZIP filenames using the extractor's canonical paths [#156322](https://github.com/openclaw/openclaw/pull/156322)
- Preserve installed-host SDK identity for resolved plugin imports [#156427](https://github.com/openclaw/openclaw/pull/156427) — @fchaudhryspear, @dwonshin, @salmunclaw, @zsh20000414, @ld5201d, @clode2026
- Show rejected, saved, and uncertain install outcomes with appropriate recovery actions [#157721](https://github.com/openclaw/openclaw/pull/157721) — @patrick-erichsen
- Recreate a missing capture payload directory when its original parent and coordinator remain intact; deleted files are not restored [#158769](https://github.com/openclaw/openclaw/pull/158769) — @yihan331313
- Preserve newer installation records and source ownership during overlapping repairs [#159033](https://github.com/openclaw/openclaw/pull/159033)
- Load current plugins while Git rollback trees remain; incidental scans also omit ordinary entries with matching transaction names [#159052](https://github.com/openclaw/openclaw/pull/159052)
- Exclude unfinished, backed-up, quarantined, and substituted npm projects from recovery [#159303](https://github.com/openclaw/openclaw/pull/159303) — @vincentkoc, @fuller-stack-dev
- Ignore missing development dependencies of unused nested benchmark and example projects [#159354](https://github.com/openclaw/openclaw/pull/159354) — @obviyus
- Preserve package-relative companion libraries for native plugins such as Sharp [#159536](https://github.com/openclaw/openclaw/pull/159536) — @fuller-stack-dev
- Report invalid workspace filenames and portable ZIP collisions; rename affected host entries or republish corrected archives [#159882](https://github.com/openclaw/openclaw/pull/159882)
- Reverify installed plugin files when saved capture directories have disappeared [#160291](https://github.com/openclaw/openclaw/pull/160291)
- Keep plugin captures outside Doctor's disposable inspection snapshots [#160446](https://github.com/openclaw/openclaw/pull/160446)
- Independently copy dependency manifests in new captures; earlier preview receipts are not repaired [#160519](https://github.com/openclaw/openclaw/pull/160519) — @vincentkoc
- Avoid false source-change errors for unchanged companion files after hardlink activity [68442a8](https://github.com/openclaw/openclaw/commit/68442a868e8741fa0a59f8dc58da67a37111af96) — Peter Steinberger
- Apply supported config repairs before activation, including pending config-only retries for already-current packages [#160682](https://github.com/openclaw/openclaw/pull/160682)

</details>
</Accordion>

<Accordion title="Plugin reloads and removal">

[Plugin reloads](https://docs.openclaw.ai/cli/plugins/uninstall-and-update) can wait for work already in progress. Use `openclaw plugins reload <ids...> --wait` outside a conversation currently using that plugin to wait beyond the usual 60 seconds. Cancelling after the replacement takes effect does not undo it. Reload does not rebuild code, and some compiled changes still require a restart; browser-only changes can use **Reload plugin UI**.

After a forced stop during startup or plugin reload, OpenClaw can avoid an abandoned operation’s five-minute wait once it confirms the old process has exited on the same machine. Older operations without that process information and package installs still wait for their existing expiry.

Removal stops if settings reference the plugin again. Remove those references before retrying. Interrupted removal can leave the plugin disabled with cleanup still pending, and files already deleted are not restored.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Improvements**

- Show the selected executable entry in reload JSON and CLI output [#156902](https://github.com/openclaw/openclaw/pull/156902) — @loganwoooof
- Let busy reloads wait for admitted work under the ordinary deadline [#157796](https://github.com/openclaw/openclaw/pull/157796)
- Add explicit long-running wait and cancellation while retaining cleanup deadlines [#158688](https://github.com/openclaw/openclaw/pull/158688) — @patrick-erichsen, @hannesrudolph
- Move post-activation cleanup index reads off the caller thread [#159254](https://github.com/openclaw/openclaw/pull/159254)
- Prepare cleanup migration facts in a worker while rechecking current config and source ownership [#159338](https://github.com/openclaw/openclaw/pull/159338)

**Bug fixes**

- Preserve request context across reloaded or duplicated plugin modules [#155925](https://github.com/openclaw/openclaw/pull/155925)
- Report when changed compiled bundled code still requires a restart [#156827](https://github.com/openclaw/openclaw/pull/156827) — @loganwoooof
- Preserve valid tool output after middleware removal; its historical shared Task settlement changes are superseded by Tasks retirement [#157339](https://github.com/openclaw/openclaw/pull/157339) — @obviyus
- Avoid false missing-plugin banners during uninstall [#157728](https://github.com/openclaw/openclaw/pull/157728) — @patrick-erichsen
- Avoid false busy replies after a failed reload [#157771](https://github.com/openclaw/openclaw/pull/157771) — @jalehman
- Keep unchanged sibling quarantine from blocking a healthy plugin's reload [#157907](https://github.com/openclaw/openclaw/pull/157907) — @patrick-erichsen
- Stop further cleanup when ownership or configuration references change [#159563](https://github.com/openclaw/openclaw/pull/159563)
- Retain unchanged backends after UI rebuilds and avoid duplicate origin warnings [#159883](https://github.com/openclaw/openclaw/pull/159883)
- Report busy-work completion once, after the full wait finishes [449fc2e](https://github.com/openclaw/openclaw/commit/449fc2e6c5700ead4e9ac5eaa59a2850e210c8ae)
- Recover startup and reload operations held by a proven-dead process on the same host, and explain remaining waits; older unidentified operations and package installs retain expiry protection [#160795](https://github.com/openclaw/openclaw/pull/160795)

**Documentation**

- Correct rebuild and restart instructions in plugin management and RPC guides [#157052](https://github.com/openclaw/openclaw/pull/157052) — @loganwoooof

</details>
</Accordion>

<Accordion title="Plugin files and temporary storage">

OpenClaw keeps loaded native plugin files until it exits, then can reclaim retired copies at a later startup. Cleanup of older temporary files can still disrupt an older running process if OpenClaw cannot identify it. Plugin authors must replace shared temporary roots such as `/tmp` with a private, user-owned directory that others cannot write to, using the existing secure-root helper.

[LanceDB statistics](https://docs.openclaw.ai/plugins/memory-lancedb) now limit database reads to 60 seconds and return zero when the memory table is missing. Plugin startup can take additional time.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Bug fixes**

- Remove capture payloads before ownership metadata and reclaim eligible aged scratch after interrupted cleanup [#157727](https://github.com/openclaw/openclaw/pull/157727) — @yyds-xxxx
- Enforce existing Team Reports and Google Chat file limits while files are being read [#158181](https://github.com/openclaw/openclaw/pull/158181)
- Retain loaded native addons through process exit and bound nonmutating LanceDB statistics reads [#158950](https://github.com/openclaw/openclaw/pull/158950) — @blackeyes-boy

**Limits and compatibility**

- Require private supplied temporary roots for backup, installation, and SDK workspace callers [#159327](https://github.com/openclaw/openclaw/pull/159327)

</details>
</Accordion>

<Accordion title="MCP tool discovery">

[MCP servers](https://docs.openclaw.ai/tools/mcp) get more time to list their tools, helping slower servers make them available in new chats and scheduled runs. Repeated startup failures show when to retry instead of making every run wait again. After signing in, tools may still take up to ten minutes to reappear unless you explicitly reload MCP in the process using it.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Bug fixes**

- Accept grouped valid messages on strict subprocess connections while retaining per-message limits [#156165](https://github.com/openclaw/openclaw/pull/156165)
- Preserve plugin refusal reasons in Code Mode MCP calls instead of a result-projection error [#156771](https://github.com/openclaw/openclaw/pull/156771) — @donniefi, @obviyus, @rmyers64
- Wait for an already-closing idle connection during session reset or deletion [#157041](https://github.com/openclaw/openclaw/pull/157041)
- Extend the default tool-listing deadline without changing normal request or connection timeouts [#157855](https://github.com/openclaw/openclaw/pull/157855) — @obviyus, @baumus, @laisonamarante
- Back off repeated startup failures and expose unavailable-server retry times [#158088](https://github.com/openclaw/openclaw/pull/158088)
- Identify malformed OAuth metadata URLs as configuration field errors [#158295](https://github.com/openclaw/openclaw/pull/158295)
- Retire session resources after failed CLI preparation without interrupting active borrowers [#159421](https://github.com/openclaw/openclaw/pull/159421)
- Tie idle cleanup to the owning Gateway or command and preserve combined command/cleanup errors [#159481](https://github.com/openclaw/openclaw/pull/159481)

</details>
</Accordion>

<Accordion title="ACP sessions and recovery">

Connected ACP coding agents accept prompts again after a settings-triggered restart, and [Stop](https://docs.openclaw.ai/tools/acp-agents/runbook) waits for work and cleanup to finish. Some cancellation and reset paths can still affect a replacement session. Codex and Claude can recover from missing adapter files; restart OpenClaw after updating to refresh their launchers. Recovery may need internet access to download an uncached adapter.

[ACPX session storage](https://docs.openclaw.ai/tools/acp-agents/quickstart) moves to a writable location. Existing sessions move automatically only when that destination is empty. Check your sessions after updating; if they disappear from view, their old files may still be present, and the existing `stateDir` setting lets you keep using that location.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Improvements**

- Avoid unrelated first-use module loading during ACP reply dispatch [28da46e](https://github.com/openclaw/openclaw/commit/28da46e08fd1f00765b7ed8617db9a28fa0ee6e5) — Peter Steinberger
- Move file-backed ACP listings to database workers while preserving detached metadata [#158782](https://github.com/openclaw/openclaw/pull/158782)
- Move ordinary ACP metadata work to workers and recheck authority before effects; the intermediate shared Task tracking repair is superseded by retirement [#159084](https://github.com/openclaw/openclaw/pull/159084)

**Bug fixes**

- Restore prompt delivery after configuration-triggered Gateway restarts [#157658](https://github.com/openclaw/openclaw/pull/157658) — @mertbasar0, @obviyus, @olyapop
- Use writable reset storage, with empty-destination legacy adoption and repeated-warning suppression [#158551](https://github.com/openclaw/openclaw/pull/158551)
- Format tool titles containing unset optional arguments [#159417](https://github.com/openclaw/openclaw/pull/159417)
- Wait for Stop cleanup and protect replacement state on owner-qualified cancellation paths [#160035](https://github.com/openclaw/openclaw/pull/160035)
- Fall back from missing captured Codex and Claude adapters to their pinned packages [#160156](https://github.com/openclaw/openclaw/pull/160156) — @bruce-yii, @obviyus, @keysersozeh

</details>
</Accordion>

<Accordion title="OpenCode sessions">

You can browse [OpenCode v2 sessions](https://docs.openclaw.ai/plugins/reference/opencode), read their transcripts, and track activity again, with v1 still supported. Activity tracking also works for initially empty sessions. If listing takes too long, OpenClaw reports an error instead of showing a misleading empty list.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Bug fixes**

- Restore v2 session listing, transcripts, and upstream activity reads [#158056](https://github.com/openclaw/openclaw/pull/158056) — @obviyus, @paweldrozd
- Treat an absent sequence as the empty-session baseline while rejecting invalid supplied values [#160138](https://github.com/openclaw/openclaw/pull/160138) — @shakkernerd

</details>
</Accordion>

<Accordion title="Meeting captions and transcripts">

Meeting captions and saved transcripts can keep speaker labels and information about where each caption came from. Those labels help you follow the conversation but do not verify a speaker's identity. Transcript saving and lookup do less repeated work, and failed audio startup cleans up any output process it already started. The experimental Google Meet interface does not yet provide native chat, reactions, or hand raising.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Improvements**

- Retain caption provenance and expose experimental participation interfaces without enabling native Google Meet actions [#152327](https://github.com/openclaw/openclaw/pull/152327) — @canvrno-oai
- Move transcript save and export bookkeeping into the database worker while preserving recovery ownership [#154965](https://github.com/openclaw/openclaw/pull/154965)
- Reuse prepared transcript lookup queries without caching results or authorization [#159074](https://github.com/openclaw/openclaw/pull/159074)

**Bug fixes**

- Clean up output processes when local or paired-node meeting input startup fails [#157982](https://github.com/openclaw/openclaw/pull/157982)
- Correct Teams transcribe-mode readiness text for its existing live-caption support [#158441](https://github.com/openclaw/openclaw/pull/158441)

**Limits and compatibility**

- Add source-stage opt-in participation in active Slack huddles, requiring OpenClaw and plugin API **2026.9.8 or newer**; package publication and live Slack operation remain unverified [c432db8](https://github.com/openclaw/openclaw/commit/c432db8665317d377d9e1763253dcbcacac62dd2)
- Add missing icon and activity artwork for that source-stage Slack Huddles plugin, with the same 2026.9.8 host requirement [053c156](https://github.com/openclaw/openclaw/commit/053c156d05acee201cf19e58ad3ecf6bd837f99a) — Peter Steinberger

</details>
</Accordion>

<Accordion title="Team Reports collection">

[Team Reports](https://docs.openclaw.ai/plugins/team-reports) keeps existing daily, weekly, and monthly reports when GitHub or Discord collection fails. A first failed collection leaves the affected period unpublished. Check status warnings and regenerate the affected day once access returns. Report generation moves more work into the background. After changing Discord channels or collection filters, manually regenerate affected days so those changes are included.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Bug fixes**

- Preserve accepted reports on acquisition failure while allowing healthy zero-activity replacements [#157933](https://github.com/openclaw/openclaw/pull/157933) — @vincentkoc

**Improvements**

- Move collection and aggregation into workers with bounded payload batches [#159101](https://github.com/openclaw/openclaw/pull/159101)
- Reduce repeated aggregation queries while retaining report ordering and deduplication [#159148](https://github.com/openclaw/openclaw/pull/159148)

</details>
</Accordion>

<Accordion title="Plugin development tools">

Plugin authors can reuse [workspace-context helpers](https://docs.openclaw.ai/plugins/sdk-entrypoints) and utilities for handling models and replies. Plugins using the new exports must declare a compatible OpenClaw version through `openclaw.compat.pluginApi`. Visitor-management tools also return usable lists and invitation links in Code Mode. Revoke existing visitor grants before changing their configured account, application, or policy.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Improvements**

- Let plugins opt into Gateway-owned listeners that preserve existing webhook callback ports [11a11ef](https://github.com/openclaw/openclaw/commit/11a11ef164d7caaf01e6f089324a8482c28168b3)
- Publish the existing node cancellation message contract with invocation and node identifiers [#115390](https://github.com/openclaw/openclaw/pull/115390) — @giodl73-repo, @patrick-erichsen
- Reduce primitive iterator-read overhead during streamed replies [#158346](https://github.com/openclaw/openclaw/pull/158346)
- Expose shared workspace-context and root-instruction preparation to harness developers [#158389](https://github.com/openclaw/openclaw/pull/158389) — @sjf-oa, @sjf
- Reuse prototype checks within each streamed message graph [#158501](https://github.com/openclaw/openclaw/pull/158501)
- Reuse prepared HTTP route paths while preserving request validation and routing precedence [#158591](https://github.com/openclaw/openclaw/pull/158591)
- Reduce redundant processing of nested plugin stream results [#158799](https://github.com/openclaw/openclaw/pull/158799)
- Expose five model-normalization, stream-transform, prefill, and assistant-message helpers [#160038](https://github.com/openclaw/openclaw/pull/160038)

**Bug fixes**

- Reject explicitly blank native-hook relay timeouts while preserving the omitted-value default [f62a5c8](https://github.com/openclaw/openclaw/commit/f62a5c8e9e064e6daeb03ce4877c51ed30dd124f) — @hugenshen
- Stop the agent-session SDK from treating an empty environment variable's name as a credential [#155558](https://github.com/openclaw/openclaw/pull/155558) — @alix-007, @obviyus, @aniruddhaadak80
- Contain asynchronous reply-observer failures without holding up delivery receipts [#155691](https://github.com/openclaw/openclaw/pull/155691) — @sunnyshu0925, @obviyus
- Return normal aborted results for in-flight plugin completion cancellation [#156565](https://github.com/openclaw/openclaw/pull/156565)
- Preserve stable permission-denial codes for direct and isolated completions [#156604](https://github.com/openclaw/openclaw/pull/156604) — @shakkernerd
- Restore URL validation and annotation-only email and UUID handling [#156855](https://github.com/openclaw/openclaw/pull/156855)
- Keep plugin-provided environments through repeated command preparation [#158378](https://github.com/openclaw/openclaw/pull/158378)
- Bundle the standalone SDK's private session-URL dependency [#159279](https://github.com/openclaw/openclaw/pull/159279)
- Let affected channel and voice paths operate without optional async diagnostics on older hosts; Telegram's separate 2026.9.6 Doctor dependency was addressed by the later repair under Messaging / Webhook setup on the Gateway port [#159280](https://github.com/openclaw/openclaw/pull/159280)
- Permit replacement login after cancellation, settle throwing channel cleanup, release failed media readers, retain remote-skill labels, and redact cyclic migration reports [#159299](https://github.com/openclaw/openclaw/pull/159299)
- Connect selected agent tools to services in their admitting Gateway [#159410](https://github.com/openclaw/openclaw/pull/159410)
- Return structured visitor lists, invitation links, and revoke outcomes to Code Mode [#159453](https://github.com/openclaw/openclaw/pull/159453)
- Preserve the standard completion-failure error when an isolated adapter rejects without a value [#159600](https://github.com/openclaw/openclaw/pull/159600)
- Retain valid falsy targets in generic webhook matching, detect multiple matches, and omit empty-key anomaly logs; null or undefined targets in auth-or-reject wrappers retain an unresolved response limitation [#160883](https://github.com/openclaw/openclaw/pull/160883)

</details>
</Accordion>

<Accordion title="Paired nodes and remote Codex">

Already-paired nodes can reconnect with `--pair-if-needed` after their setup code expires, provided their saved credentials still match the selected Gateway. New pairing still needs a fresh code. If you use a saved certificate fingerprint, verify the selected fingerprint before reconnecting because this recovery path does not compare it. [Remote Codex connections](https://docs.openclaw.ai/plugins/codex-harness/app-server) can also retry brief connection failures before sending work; model and tool requests already sent are not replayed.

Chat now shows download and installation progress when preparing a paired session host, and setup failures point to the needed repair. Older 2026.9.6 hosts can keep running turns with their supported tools; update OpenClaw on the node and restart it to use newer tools such as presence.

Compatible [paired hosts](https://docs.openclaw.ai/nodes/session-hosting) can keep up to two idle workers loaded for two minutes to reduce startup work for follow-up messages. Those workers continue to use memory while idle. Stop or reclaim the placement to release them sooner; Chat Stop without an active turn does not release them.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Improvements**

- Await prepared node workspace storage and release late acquisitions after cancellation; async SDK callers need a supporting host [2e9a2ec](https://github.com/openclaw/openclaw/commit/2e9a2eceb11bd937a64dc01fb7894ff23eb80ef7)
- Reuse idle workers when the Gateway, node, and bundle support it, retaining up to two workers for two minutes and making their capacity reclaimable [968a08c](https://github.com/openclaw/openclaw/commit/968a08c6d0eee2835f87b034d7dde37660a591cc)
- Show runtime transfer and installation progress for interactive paired-host setup; use Gateway logs for background reconciliation [#160110](https://github.com/openclaw/openclaw/pull/160110)

**Bug fixes**

- Reuse saved scoped node credentials after fallback code expiry without sending the expired bootstrap token [#159360](https://github.com/openclaw/openclaw/pull/159360) — @kevinlin-openai
- Retry transient unopened remote Codex connections up to three times during harness replacement [#159466](https://github.com/openclaw/openclaw/pull/159466) — @kimiyu-186
- Limit launches to each node’s supported tools, with a 2026.9.6 fallback; update and restart older nodes for newer tools [#160147](https://github.com/openclaw/openclaw/pull/160147)
- Explain session-host setup failures while retaining other approved node functions and retrying pending pairing; permission repairs remain manual, and already-paused clients may need one restart [#160188](https://github.com/openclaw/openclaw/pull/160188)

</details>
</Accordion>

<Accordion title="Session Share and collaboration">

Chat can start while [Session Share](https://docs.openclaw.ai/plugins/session-share) waits for a slow paired source, with available sessions appearing when the list arrives. Resetting or deleting a session no longer shuts down ClickClack discussions elsewhere, and Workboard action menus size themselves to their contents.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Improvements**

- Share matching Session Share catalog requests and publish later results; targeted reads and pagination keep complete responses [#156400](https://github.com/openclaw/openclaw/pull/156400)

**Bug fixes**

- Keep ClickClack discussions running after session cleanup and repair bundled setup loading [#157098](https://github.com/openclaw/openclaw/pull/157098) — @masatohoshino
- Size Workboard card action rows and menus to their contents [#157913](https://github.com/openclaw/openclaw/pull/157913) — @patrick-erichsen

</details>
</Accordion>

<Accordion title="GitHub dates and connections">

GitHub badges show when an item was merged or closed in your browser's local time, and closed draft pull requests are correctly marked **Closed**. Personal GitHub connections also skip unnecessary background checks while their tokens are fresh.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Bug fixes**

- Match reader badge dates to merge or closure events, with creation-date fallback [#158081](https://github.com/openclaw/openclaw/pull/158081) — @vincentkoc

**Improvements**

- Skip periodic refresh coordination for fresh personal GitHub tokens [#158525](https://github.com/openclaw/openclaw/pull/158525)

</details>
</Accordion>

<Accordion title="1Password approvals">

[1Password requests](https://docs.openclaw.ai/plugins/onepassword) save approvals in the background. Secret access still waits for a successfully saved approval, with the existing expiry and single-use rules.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Bug fixes**

- Move pending approval storage into a worker while preserving single-use consumption and failed-write denial [#156000](https://github.com/openclaw/openclaw/pull/156000)

</details>
</Accordion>

<Accordion title="QA Lab keyboard navigation">

QA Lab skips hidden sidebar controls when you navigate with the keyboard. Dashboard refreshes keep your selected tab, keyboard focus, and horizontal scroll position.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Bug fixes**

- Make collapsed and Evidence Archive sidebars inactive for keyboard navigation [#152189](https://github.com/openclaw/openclaw/pull/152189) — @vincentkoc
- Preserve tab focus and scroll through polling refreshes and width changes [#155284](https://github.com/openclaw/openclaw/pull/155284) — @vincentkoc

</details>
</Accordion>

<Accordion title="Plugin loading">

Hermes migration, LLM Task, and TypeSafe now wait until first use to load their execution code, reducing work when those features are available but unused. Large plugin tool sets also avoid repeated setup work. When prepared plugins cover a turn’s needs, OpenClaw reuses them instead of copying and registering them again.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Improvements**

- Reuse declared membership when registering and resolving large tool sets [#156205](https://github.com/openclaw/openclaw/pull/156205) — @vincentkoc
- Load Hermes detection, planning, and application code when requested [#157231](https://github.com/openclaw/openclaw/pull/157231) — @vincentkoc
- Keep LLM Task metadata available while deferring execution code [#157233](https://github.com/openclaw/openclaw/pull/157233) — @vincentkoc
- Load TypeSafe's evaluator on its first decision within the existing deadline [#157380](https://github.com/openclaw/openclaw/pull/157380) — @vincentkoc

**Bug fixes**

- Reuse the prepared plugin registry when it covers a turn’s needs while preserving separate model-catalog preparation [#160658](https://github.com/openclaw/openclaw/pull/160658) — @ekinnee, @oxen-horse, @RomneyDa, @vincentkoc

</details>
</Accordion>

<Accordion title="Beam sidebar refreshes">

The [Beam sidebar](https://docs.openclaw.ai/plugins/beam) does less work when refreshing its session list. Local changes trigger a refresh, while changes from other processes are checked periodically. Ongoing uploads can still delay a fresh listing.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Improvements**

- Share Beam metadata refreshes while keeping transcript reads on canonical storage [#158394](https://github.com/openclaw/openclaw/pull/158394)

</details>
</Accordion>

<Accordion title="MXC sandbox cleanup">

When MXC cannot prepare a command, it removes the temporary sandbox directory instead of leaving it behind. The original error remains available to help diagnose the failure.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Bug fixes**

- Clean failed MXC preparation and correct documentation of Obsidian search's existing write-scoped RPC [#158532](https://github.com/openclaw/openclaw/pull/158532)

</details>
</Accordion>

<Accordion title="Voice Call compatibility">

[Voice Call](https://docs.openclaw.ai/plugins/voice-call/realtime-and-streaming) loads again on OpenClaw 2026.9.6. Optional identity and workspace context remains off unless you enable it on that version.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Bug fixes**

- Restore supported-host loading and bound older-host optional context without changing its settings [#159987](https://github.com/openclaw/openclaw/pull/159987)

</details>
</Accordion>

</AccordionGroup>

## Security and Privacy

You have more control over who can use OpenClaw, which models they can use, and whether they can upload files.

<AccordionGroup>

<Accordion title="Incognito conversations">

[Incognito conversations](https://docs.openclaw.ai/concepts/session) now expire 24 hours after creation or when the Gateway restarts, whichever comes first. Activity does not extend the deadline. Expiry stops active work and discards the conversation without an archive, so save anything you need beforehand. Reloading or closing the tab also discards unsent drafts and attachments.

Incognito skips automatic memory and learning, and keeps conversation content out of saved browser copies and supported diagnostic logs and plugin observers. Tabs left open from the older UI must reload after updating to apply this browser protection, so save anything you need first. Older logs remain. Tools can still write files, and model providers can still retain messages.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Security and trust**

- Exclude Incognito from persistent browser snapshots and permanently remove older private snapshots and metadata without backup. Reload already-open older tabs; an older-UI rollback may reset disposable ordinary browser cache. [#154656](https://github.com/openclaw/openclaw/pull/154656) — @vincentkoc
- Skip automatic session-memory capture, Skill Workshop learning, and LanceDB recall embeddings for Incognito conversations. [#155594](https://github.com/openclaw/openclaw/pull/155594) — @vincentkoc
- Suppress private content in cache traces, Anthropic payload logs, raw model-stream logs, and WebSocket previews while retaining operational metadata and live delivery. [#155595](https://github.com/openclaw/openclaw/pull/155595) — @vincentkoc
- Withhold Incognito LLM observations from plugins and send content-free completion callbacks for cleanup; policy, provider, approval, and explicit tool hooks remain active. [#156417](https://github.com/openclaw/openclaw/pull/156417) — @vincentkoc
- Remove private content from subsequent delegated Task and TaskFlow record writes before those runtimes were retired; older stored records were not scrubbed. [#156446](https://github.com/openclaw/openclaw/pull/156446) — @vincentkoc
- Suppress CLI and Gateway agent reply content in ordinary diagnostics, alongside prospective Task-record filtering implemented before Task retirement. Earlier recorded content remains. [#157543](https://github.com/openclaw/openclaw/pull/157543)

**Improvements**

- Add the fixed 24-hour Incognito lifetime, stopping active work and deleting history without an archive. Failed cleanup retries while new work remains blocked, so physical deletion can lag expiry. [#155596](https://github.com/openclaw/openclaw/pull/155596) — @vincentkoc

**Bug fixes**

- Discard unsent Incognito drafts on reload while preserving same-page Settings/Back navigation and separate recovery for already-submitted tab-only outbox messages. [#156398](https://github.com/openclaw/openclaw/pull/156398)
- Offer a fresh Incognito conversation after expiry, retain failed unsent text for copying or discarding, and keep private attachments out of persistent browser storage. [#156544](https://github.com/openclaw/openclaw/pull/156544)
- Drain exact-session terminals before Incognito reset deletes state; failed drainage keeps the session for retry. Controller, worker, and worktree teardown remain separate. [#159207](https://github.com/openclaw/openclaw/pull/159207)

**Documentation**

- Explain the 24-hour-or-restart limit in the English Incognito tooltip and notice. [#156478](https://github.com/openclaw/openclaw/pull/156478)
- Align the Control UI guide with the creation-based lifetime and existing privacy limits. [#156485](https://github.com/openclaw/openclaw/pull/156485)

</details>
</Accordion>

<Accordion title="Model limits and Visitor access">

Administrators can [choose which models each role can use](https://docs.openclaw.ai/gateway/operator-scopes#named-operator-roles), including in supported native Codex runs. Removing a model stops affected requests. Visitor Access now requires an explicit `modelPolicy`; `{}` uses the source agent's models. Restricted Codex runs are refused if their connection cannot enforce the policy.

Invalid Codex network-proxy settings can now prevent startup. Run `openclaw doctor --fix` for blank `networkProxy.profileName` or `remoteWorkspaceRoot` values; other invalid fields need manual correction.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Improvements**

- Add optional named-role model limits across selection, retries, child work, and live policy changes. Staff roles without a policy retain existing access; this is not a spending budget. [#156346](https://github.com/openclaw/openclaw/pull/156346) — @shakkernerd

**Security and trust**

- Extend role limits to actual native Codex inference and require explicit Visitor model policies. [17d2faf6](https://github.com/openclaw/openclaw/commit/17d2faf6b710196f699b351b2fdbb09ff11932e2) — @shakkernerd
- Filter disallowed structured model and provider metadata from authorized historical session responses without rewriting conversation text, tool payloads, or stored data. [#157821](https://github.com/openclaw/openclaw/pull/157821) — @vincentkoc

**Bug fixes**

- Reject invalid enabled-proxy settings and provide Doctor repairs for the two supported blank fields while preserving the domain map. [#156906](https://github.com/openclaw/openclaw/pull/156906) — @kevinlin-openai
- Correct false below-GPT-5 audit warnings for matching newer GPT generations, including GPT-6. Older-model and separate small-model warnings remain; this classification does not establish model safety. [#140012](https://github.com/openclaw/openclaw/pull/140012) — @holny, @IWhatsskill, @boycez, @Niriakot, @PollyBot13

**Limits and compatibility**

Restricted native execution excludes unowned attachments, local native models, AWS-signed requests, system proxies, custom native certificates, and incompatible proxy settings. Custom providers need explicit `base_url` and `query_params`; selecting beyond eight projected routes requires a fresh managed connection. Guardian and configured memory processing retain their service authority. Without qualified hooks, unrestricted staff work with ambiguous mixed-input attribution can continue under a valid receiver; this is not universal original-sender revocation. Historical metadata filtering does not cover every live event or model name in message text.

</details>
</Accordion>

<Accordion title="File and image upload controls">

Operators can [turn off client file and image uploads](https://docs.openclaw.ai/gateway/config-gateway#disable-file-and-image-uploads) with `gateway.uploads.enabled=false` while text chat keeps working, without a restart. Uploads are enabled by default. Turning them off preserves draft attachments and lets already accepted uploads finish; downloads, channel media, and agent-created files follow their own settings.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Improvements**

- Add live upload controls across documented chat, companion, terminal, avatar, skill, Workboard, node/tool, and OpenAI-compatible API inputs, with final-write checks and accepted-request retry handling. [#158567](https://github.com/openclaw/openclaw/pull/158567)

**Limits and compatibility**

The switch does not revoke shell, filesystem, administration, or arbitrary plugin capabilities. Third-party tools that persist client bytes must carry the provided final-write callback themselves.

</details>
</Accordion>

<Accordion title="Tool approvals and permissions">

Approval handling now preserves the original permissions through waits and recovery. [Approval diagnostics](https://docs.openclaw.ai/cli/approvals) also explain why terminal tools are unavailable. If you used **Disable All**, repeat it and **Save** to include previously omitted GitHub and transcript tools.

Native Codex apps keep their configured approval settings, and permitted reads can ask for consent. Check [explicit tool exceptions](https://docs.openclaw.ai/plugins/codex-native-plugins#approval-decision-order) separately. Do not rely on the interactive destructive-action setting alone to disable explicitly enabled native tools.

Shell approvals now reject combined options that read commands from standard input instead of the reviewed script. If a command such as `bash -se job.sh` is refused, invoke the script directly when that is the code you intend to run.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Bug fixes**

- Preserve native Codex app approval modes and reviewers across new, resumed, and side-question threads. This configuration repair does not establish complete destructive-denial enforcement for saved-enabled native tools. [1a7ba53b](https://github.com/openclaw/openclaw/commit/1a7ba53b45ed87ba93b5ee7bf986861b4068ddfe) — @stevenlee-oai
- Restore Allow once/Deny consent for recognized native app reads and bound-app side questions; exact-tool eligibility remains a separate, unresolved enforcement limit. [#152085](https://github.com/openclaw/openclaw/pull/152085) — @stevenlee-oai
- Include GitHub identity, GitHub publishing, and transcript tools in Disable All without changing saved permission-group membership. [#156865](https://github.com/openclaw/openclaw/pull/156865)
- Retain captured permissions and cancellation checks when rebuilding tool hooks, including authorized Crabbox portal presentation. [#159532](https://github.com/openclaw/openclaw/pull/159532)
- Keep original owner access after successful or failed child follow-ups in the same conversation, while retaining revocation, reassignment, and replacement-turn checks. [#160018](https://github.com/openclaw/openclaw/pull/160018) — @vacinc

**Security and trust**

- Recheck approval authority through database waits and recover definite storage refusals without extending deadlines or blindly replaying uncertain writes. Disconnection alone does not revoke accepted work. [#150237](https://github.com/openclaw/openclaw/pull/150237)
- Bind worker approvals to the original live claim and cancel pending approvals when that claim is invalidated. [#155898](https://github.com/openclaw/openclaw/pull/155898)
- Preserve original request permissions when Gateway handlers validate and dispatch requests. [#156521](https://github.com/openclaw/openclaw/pull/156521)
- Reject combined shell stdin flags during script-file approval binding, while preserving ordinary arguments after the script filename. This is a scoped parser repair, not a general ban on stdin execution. [#160698](https://github.com/openclaw/openclaw/pull/160698) — @eleqtrizit

**Improvements**

- Explain missing terminal tools in Agent Tools and `exec-policy show`, with local `--agent` inspection and read-only saved-session `--session` previews. A preview does not prove execution access; remote previews still show local approval facts. [#157014](https://github.com/openclaw/openclaw/pull/157014) — @joshavant, @pegorim

**Documentation**

- Explain native app admission, tool exceptions, approval modes, reviewers, and stricter scheduled-run authority. [#155089](https://github.com/openclaw/openclaw/pull/155089) — @stevenlee-oai
- Correct exec-denial directions and Gateway-versus-node inspection commands. Missing TUI approval cards should not be confused with the manual `/approve` path for an authorized pending request. [#159266](https://github.com/openclaw/openclaw/pull/159266)

</details>
</Accordion>

<Accordion title="Browser connections and access errors">

Closing a browser tab no longer causes false server errors. If access expires while a request is waiting, OpenClaw returns an access error or closes a response already in progress. Operators investigating connection failures on a shared network can use the [connection rate-limit guide](https://docs.openclaw.ai/gateway/security/rate-limiting).

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Bug fixes**

- Handle disconnected and revoked HTTP requests without false unhandled errors, while retaining logs for genuine exceptions. [#157501](https://github.com/openclaw/openclaw/pull/157501)
- Close partially registered connections after initial handshake failure and discard queued requests. [#158504](https://github.com/openclaw/openclaw/pull/158504)
- Remove abandoned response headers so authorization changes produce correctly framed, uncached denials while preserving security and CORS headers. [#158669](https://github.com/openclaw/openclaw/pull/158669)
- Return complete HTTP rejection responses, including oversized-upload errors and queued HEAD rejections, on affected newer Bun builds instead of premature connection resets. Node and older Bun behavior and the selected runtime version are unchanged. [#160329](https://github.com/openclaw/openclaw/pull/160329)

**Documentation**

- Explain the existing 32 unauthenticated sockets per resolved IP and configurable override, plus bounded queue scheduling slices. Raising the socket budget admits more unauthenticated connections and requires restart; the 128-socket example is not a new default. [#158535](https://github.com/openclaw/openclaw/pull/158535)

That documentation describes the earlier limit. The final default in this release is 128 pending unauthenticated sockets per resolved IP. To restore 32, set `OPENCLAW_MAX_PREAUTH_CONNECTIONS_PER_IP=32` and restart the Gateway.

</details>
</Accordion>

<Accordion title="Session resets and deletion">

[Resets that include sessions](https://docs.openclaw.ai/cli/reset) now remove SQLite conversation history and its archives. Check the dry-run first, because the selected scope also removes configuration and OAuth credentials. Legacy JSON/JSONL import files remain. An incomplete reset reports failure without restoring anything it already deleted.

Failed remote agent deletion or session cleanup now leaves the computer running the command untouched. Restore the remote connection or run the command on the Gateway host before retrying.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Bug fixes**

- Allow intentional configuration shrinkage during authenticated agent deletion without weakening unrelated write protections. [#156853](https://github.com/openclaw/openclaw/pull/156853) — @fuller-stack-dev
- Finish database resource cleanup before reporting agent deletion complete, retaining failed closure for retry. [#157631](https://github.com/openclaw/openclaw/pull/157631)
- Continue valid bulk session actions after an individual key lookup fails; transport and credential failures remain command-wide. [#159170](https://github.com/openclaw/openclaw/pull/159170)
- Prevent failed remote `agents delete` and `sessions cleanup --enforce` from falling back to local mutations. Explicit local-store and dry-run operations retain their own scope. [#159223](https://github.com/openclaw/openclaw/pull/159223)
- Return a failing exit status for incomplete resets and omit the premature onboarding hint. [#159250](https://github.com/openclaw/openclaw/pull/159250)
- Remove canonical SQLite session history during session-inclusive resets, subject to exclusive ownership and archive-identity checks. This does not erase legacy import files. [#159419](https://github.com/openclaw/openclaw/pull/159419)

</details>
</Accordion>

<Accordion title="Permission changes and restart recovery">

Changing another user's identity permissions preserves your unrelated connections, accepted chat work, HTTP requests, and pending approvals. Changes to your own effective grants or global access policy still revoke affected work, and restoring grants does not revive it. Revoking Guest access cancels its registered commands and stops private containers dedicated to that guest. [Restart recovery](https://docs.openclaw.ai/gateway/restart-recovery) also checks whether work is still authorized; stopped delegated work may need `/new` or `/reset`, while its transcript remains.

Back up your data before upgrading, including SQLite's write-ahead log. This change upgrades shared state from schema 18 to 19. Downgrading requires a matching pre-upgrade backup in a separate state directory and can lose later permission revocations and receipts. Never lower schema markers to force a downgrade.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Improvements**

- Let session-only readers browse authorized conversations and progress, and session writers organize their own chats, without broad Gateway access. Other people's visible chats remain read-only; deletion, sharing, diagnostics, and artifact downloads require separate permissions. [#155184](https://github.com/openclaw/openclaw/pull/155184) — @shakkernerd

**Security and trust**

- Require surviving source authority before restart dispatch and retain eligible pending work when transcript reading fails. Existing queue-owned delivery keeps its separate owner. [#150702](https://github.com/openclaw/openclaw/pull/150702) — @vincentkoc, @pgondhi987
- Keep private child-session references out of unauthorized event projections while reusing eligible large-message encodings. [#155997](https://github.com/openclaw/openclaw/pull/155997)
- Cancel commands after original Guest access is revoked and stop qualifying private containers. Workspace files and writable layers survive; process and temporary-filesystem state do not. Shared, preexisting, mixed-use, and unclassified containers are excluded from whole-container shutdown. [#156106](https://github.com/openclaw/openclaw/pull/156106) — @shakkernerd
- Preserve channel-owner revoke-and-restore history across recovery without automatically granting existing links recovery authority. [#157709](https://github.com/openclaw/openclaw/pull/157709) — @joshavant
- Require recorded human origin for internal restart recovery, including prepared replies, while retaining separate legacy channel, Control UI, and child-completion checks. Unverified internal work is skipped without dispatch or a recovery notice. [#160130](https://github.com/openclaw/openclaw/pull/160130) — @vincentkoc, @romneyda

**Bug fixes**

- Preserve verified WebSocket connections and accepted runs through unrelated identity-permission edits or equivalent scope reordering. Pending handshakes and HTTP/cookie authority retain their existing rules. [#159939](https://github.com/openclaw/openclaw/pull/159939) — @vacinc
- Extend unrelated identity-permission continuity to pending handshakes, token/password and node connections, HTTP requests, plugin cookies, queued work, and approvals. Own-grant and global-policy revocation remain; separate approval invalidation from agent/store inventory edits is outside this fix. [#160136](https://github.com/openclaw/openclaw/pull/160136) — @Nakagawa-master

**Limits and compatibility**

If Guest access ends during container setup, inspect and preserve needed data before explicitly recreating the incomplete container. Container shutdown does not cover arbitrary detached descendants in shared or unclassified environments.

</details>
</Accordion>

<Accordion title="SSH connections and saved credentials">

Paired diagnostics regain their expected access, and [SSH Gateway connections](https://docs.openclaw.ai/gateway/remote) keep using the right saved credential when a forwarding port changes. Existing `sshTarget` setups now manage forwarding automatically unless `transport=direct` is selected. Older URL-only setups need route configuration and one-time token or password enrollment with pairing approval. Use a new SSH alias for a different Gateway, or its saved token could go to the new destination.

Plugin authors must handle credentials becoming unavailable during reload and avoid caching them across reloads. If the managed-secret forwarding worker fails, restart the Gateway to restore forwarding.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Security and trust**

- Reject late worker SSH identities before host credential preparation after cancellation, replacement, or timeout; provider-internal effects still depend on cooperation with the optional currentness callback. [#150621](https://github.com/openclaw/openclaw/pull/150621) — @sallyom, @vincentkoc
- Stop stale plugin credential reads and self-waiting reload cleanup. Prepared-secret access ends as soon as the exact instance retires, including admitted callbacks; already returned values are not erased and vendor credentials are not revoked. [#153187](https://github.com/openclaw/openclaw/pull/153187) — @jb510, @jalehman, @patrick-erichsen
- Reject whitespace-only Copilot enterprise credential scope during copying, adoption, and shared-owner checks without rewriting malformed stored values. [#160171](https://github.com/openclaw/openclaw/pull/160171) — @patrick-erichsen

**Improvements**

- Move managed-secret transfer processing to a dedicated worker while retaining destination restrictions and closing revoked streams. [#156354](https://github.com/openclaw/openclaw/pull/156354)
- Reuse TLS trust and protected HTTPS connections within each process grant, with separate pools and revocation for other grants. [#156357](https://github.com/openclaw/openclaw/pull/156357)

**Bug fixes**

- Accept trusted Windows secret-plan directories using structured owner and ACL facts while retaining stricter executable-parent checks. [#158785](https://github.com/openclaw/openclaw/pull/158785)
- Restore paired diagnostics and bind managed SSH credentials to the selected route; unpinned manual-loopback diagnostics still need explicit credentials. [#159169](https://github.com/openclaw/openclaw/pull/159169) — @iwhatsskill

**Documentation**

- Clarify [trusted IMAP authentication headers](https://docs.openclaw.ai/automation/imap). Before enabling this trust option, the receiving mail server must strip or replace incoming headers claiming the trusted server identity. The option can admit mail despite local DMARC none or fail; OpenClaw cannot determine the originating hop from the message alone. Runtime behavior and defaults are unchanged. [#160676](https://github.com/openclaw/openclaw/pull/160676) — @eleqtrizit

</details>
</Accordion>

<Accordion title="Workspace files and sandboxes">

Memory reads stay within their authorized folder when retrying, and canceled delegated work stops starting new workspace transfers. Required sandboxing now applies from the first request through the OpenAI-compatible APIs. If the required sandbox is unavailable, the run is refused.

Podman follows your selected connection and SSH identity. If an existing sandbox stops working after upgrading, follow the [Podman recovery guide](https://docs.openclaw.ai/gateway/sandboxing/podman-backend). Restore its original connection and save needed container data before recreating it. Mounted workspace files remain, but data inside the old container is not transferred.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Security and trust**

- Enforce role-required sandboxing before the first HTTP session run and reject restricted callers attempting to run existing unsandboxed sessions. [#155964](https://github.com/openclaw/openclaw/pull/155964)
- Keep memory reads inside the original authorized directory when that directory is replaced during a read. [#156222](https://github.com/openclaw/openclaw/pull/156222)
- Retain original session sources during asynchronous sandbox reporting and reject changed aliases or databases without granting new permissions. [#156686](https://github.com/openclaw/openclaw/pull/156686)
- Recheck run authority around final workspace creation. Revocation detected after an already-started directory operation does not roll back its effects. [#157505](https://github.com/openclaw/openclaw/pull/157505)
- Stop guarded later workspace and transport operations after delegated cancellation while preserving independently owned tunnels, accepted transfers, and cleanup. [#159087](https://github.com/openclaw/openclaw/pull/159087) — @sallyom, @vincentkoc

**Bug fixes**

- Honor Podman connection precedence and matching SSH identity, with explicit recovery for existing sandboxes and refusal when competing selectors cannot be resolved. [041bbac5](https://github.com/openclaw/openclaw/commit/041bbac5ca25b471eb7c625d82b485a34f000892) — @vincentkoc
- Reject stale prompt refreshes and skip unused elevation-policy preparation when elevation is disabled. [#157021](https://github.com/openclaw/openclaw/pull/157021)
- Refresh security-scan coverage, recheck workspace writes, complete short attachment reads, clean failed cookie snapshots, and preserve symlink chains and literal tilde paths. Scans remain bounded. [#157524](https://github.com/openclaw/openclaw/pull/157524)
- Settle failed workspace transfers before returning and honor guarded agent-file metadata checks. [#158313](https://github.com/openclaw/openclaw/pull/158313) — @lovelefeng-glitch
- Preserve newline-bearing remote sandbox paths and allowed parent aliases, and accept structured-input choices with padded labels. SSH targets require GNU-compatible `readlink -f` and `-n`. [#159346](https://github.com/openclaw/openclaw/pull/159346)
- Restore creation of new memory files in OpenShell mirror mode by recognizing wrapped missing-file errors, while retaining write provenance and rejecting permission or boundary errors. [#160697](https://github.com/openclaw/openclaw/pull/160697) — @sunlit-deng, @jtatum, @obviyus
- Preserve browser upload staging quotas when a queued upload is canceled, and hold memory-write locks until pending rollback, checkpoint, or rewind writes finish. Cancellation still returns promptly; partial write failures are not made atomic. [#160810](https://github.com/openclaw/openclaw/pull/160810)

</details>
</Accordion>

<Accordion title="File permissions during repairs">

[Doctor](https://docs.openclaw.ai/gateway/doctor/checks) preserves compatible POSIX file permissions when moving retired `TOOLS.md` notes into `AGENTS.md`. If it cannot do so safely, it warns and keeps both originals. Fix the permissions or merge the notes manually, because agents no longer read `TOOLS.md` at startup. Cleanup of legacy temporary plugin files on macOS and Linux also skips files belonging to another account.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Bug fixes**

- Preserve POSIX owner, group, and mode during compatible tool-note migration, creating missing destinations privately and refusing unsafe imports. This does not establish ACL preservation or Windows equivalence. [#159194](https://github.com/openclaw/openclaw/pull/159194)
- Recheck ownership before removing eligible tokenless legacy plugin and model-catalog temporary directories on macOS and Linux. Windows keeps its existing age and rename checks. [#160155](https://github.com/openclaw/openclaw/pull/160155) — @romneyda, @vyctorbrzezowski, @jalehman

</details>
</Accordion>

<Accordion title="Plugin command permissions">

Plugin commands are now rejected if their permission declarations are invalid. Public commands also cannot pass along the private permission used to author skills. Valid plugin commands keep their existing behavior.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Security and trust**

- Reject invalid plugin command permission scopes, including falsy entries and sparse-array holes. [#158638](https://github.com/openclaw/openclaw/pull/158638)
- Strip private skill-authoring capability from public command input at runtime instead of relying on its TypeScript type. [#159220](https://github.com/openclaw/openclaw/pull/159220)

</details>
</Accordion>

<Accordion title="Duplicate user profiles">

Administrators can [merge duplicate user profiles](https://docs.openclaw.ai/cli/users), including profiles without email addresses, with `openclaw users merge <source-profile-id> --into <target-profile-id>`. The target keeps its role and conflicting preferences; old permissions do not transfer and historical records keep their original identities. Move personal `USER.md` files manually and expect affected clients to reconnect. The shared Owner profile cannot be merged.

Configured [Cloudflare OIDC sign-in](https://docs.openclaw.ai/gateway/cloudflare-access) now recognizes GitHub identities in authenticated custom claims. If optional GitHub details are missing or lookup fails, otherwise authorized email sign-in can continue. Existing account conflicts still require an administrator to link the email explicitly with `users.linkEmail`; profiles are not merged automatically.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Improvements**

- Add explicit administrator-only profile merging with exact live IDs, inherited alias/account transfer rules, safe repeat handling, and rejection of attempts to redirect a retired source. This does not automatically match people or rewrite historical access records. [#159889](https://github.com/openclaw/openclaw/pull/159889)

**Bug fixes**

- Read Cloudflare OIDC GitHub claims from `custom` when `oidc_fields` is absent, preserving existing roles, co-author preferences, access requirements, and account-binding checks. A present `oidc_fields` container takes precedence; optional enrichment failures do not grant a GitHub identity or credit. [#160661](https://github.com/openclaw/openclaw/pull/160661) — @shakkernerd

</details>
</Accordion>

<Accordion title="Execution audit identities">

Optional [execution audits](https://docs.openclaw.ai/gateway/audit) now keep track of who started Control UI work through queued replies, retries, and ACP turns. Enable them with `logging.audit.executionIdentity`. Missing or ambiguous identities remain unknown.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Bug fixes**

- Carry authenticated chat identity into execution audits while preserving the original queued identity through profile changes. The in-memory carrier does not restore identity from durable queue state. [#159843](https://github.com/openclaw/openclaw/pull/159843) — @joshavant

</details>
</Accordion>

</AccordionGroup>

## Quality-of-Life Improvements

You can handle more everyday settings and shared work through chat, with updates to terminal controls and busy conversations.

<AccordionGroup>

<Accordion title="Settings and skills in chat">

You can ask your agent to change [OpenClaw settings](https://docs.openclaw.ai/cli/config) and update skills you own. Existing approvals still apply.

If your settings or tokens contain environment-variable expressions, check the [configuration guidance](https://docs.openclaw.ai/gateway/config-secrets-env) before updating. Some values now change meaning and can break access.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

Existing `${VAR:-fallback}` text now expands to an environment value or fallback. Use `$${VAR:-fallback}` when you intend literal text, and check existing credentials before updating. These defaults are ordinary configuration text, not secret storage.

Keys saved through chat go into shared team storage. Pasting a key has already exposed it to the model provider and transcript; use masked setup to keep it out of that context.

**Improvements**

- Configure secret references and edit owner-controlled skills through chat [8fd72da](https://github.com/openclaw/openclaw/commit/8fd72da7f2212ce86b77a36d95880b6a6eef8180). Thanks @obviyus.
- Reduce repeated environment scans during configuration changes [#156457](https://github.com/openclaw/openclaw/pull/156457). Thanks @vincentkoc.

**Bug fixes**

- Reject unsupported secret-reference targets during configuration previews, retaining plain-value preview limits [#157960](https://github.com/openclaw/openclaw/pull/157960). Thanks @olli0103, @obviyus, and @azakharko.
- Make OC Path Markdown writes honor numbered, first, and last item selectors, including the selected duplicate key and positions after multiline edits [#160552](https://github.com/openclaw/openclaw/pull/160552).

**Limits and compatibility**

- Add inline environment defaults and literal escaping; existing fallback-shaped credentials require attention [fcfa4bf](https://github.com/openclaw/openclaw/commit/fcfa4bf0c121c30a33d4aa57bc41c1fffa84ba85). Thanks @etzelm and @jalehman.

</details>

</Accordion>

<Accordion title="Connected people and shared sessions">

You can ask your agent [who is connected and which device was recently used](https://docs.openclaw.ai/concepts/presence), within your existing access. Connected tabs may be idle, and any reported location is approximate.

With `operator.write` permission, you can also ask the agent to [archive, restore, or stop sessions](https://docs.openclaw.ai/concepts/session-tool) you can access and created or were assigned to. Stop normally clears queued follow-ups, so request `clearQueued: false` if you want to keep them.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Improvements**

- Query connected people and device activity with the original caller's read authority [#159117](https://github.com/openclaw/openclaw/pull/159117).
- Give write operators limited archive, restore, and Stop controls for accessible creator or human-assignee sessions; assignment or `operator.sessions.write` alone is insufficient [#160296](https://github.com/openclaw/openclaw/pull/160296). Thanks @vacinc.

**Documentation**

- Add a [Team-server development walkthrough](https://docs.openclaw.ai/gateway/team-server#how-we-build-openclaw-with-openclaw) covering existing collaboration and PR review, with deployment handled separately [#157675](https://github.com/openclaw/openclaw/pull/157675).

</details>

</Accordion>

<Accordion title="Larger Swarms and parallel agents">

[Swarms](https://docs.openclaw.ai/tools/swarm) now default to 32 collectors per group, up from eight, and no longer compete with ordinary subagents for the same running slots. Ordinary subagent limits also apply separately to each spawning conversation. This can increase resource use; set `tools.swarm.maxConcurrent=8` to keep the previous Swarm cap.

Agents also get guidance to avoid repeatedly asking permission for work you already requested. Existing approvals still apply, and [verified human contributor credit](https://docs.openclaw.ai/concepts/user-model) can follow new delegations with the person's consent.

By default, zero-wait messages to an agent’s own running child now try to guide its current work. Choose `mode: "followup"` when you need a separate turn and completion. Acceptance does not confirm the child has read it, and queued guidance can be lost on restart.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Improvements**

- Give each immediate spawning session its own ordinary subagent execution budget [#156381](https://github.com/openclaw/openclaw/pull/156381).
- Separate Swarm group capacity from ordinary children and raise the group default to 32 [#158616](https://github.com/openclaw/openclaw/pull/158616).
- Clarify bounded research delegation and diagnosis of missing results without restarting cancelled work [#141209](https://github.com/openclaw/openclaw/pull/141209). Thanks @hartmark and @jalehman.
- Preserve consenting, verified human coauthor eligibility through delegation, with up to 32 inherited profiles and forward-only credit repair [#157268](https://github.com/openclaw/openclaw/pull/157268). Thanks @vincentkoc.
- Reduce repeated confirmations for requested work, update new-workspace guidance, and preserve useful fetched-text previews [#157447](https://github.com/openclaw/openclaw/pull/157447). Thanks @obviyus, @jalehman, and @joshavant.
- Reduce history scanning during subagent capacity checks without changing which children count [#155695](https://github.com/openclaw/openclaw/pull/155695). Thanks @vincentkoc.
- Expose the existing zero-to-60-second wait range, 30-second default, and immediate-snapshot option to models [#156542](https://github.com/openclaw/openclaw/pull/156542).
- Avoid whole-store reloads for active-subagent context and selected lists [#158397](https://github.com/openclaw/openclaw/pull/158397).
- Avoid unrelated registry work when waiting for known collectors [51ec968](https://github.com/openclaw/openclaw/commit/51ec96836f768c07c80e9d11af872014e7436d69). Thanks @fuller-stack-dev.
- Update subagent list indexes when displayed facts change [#158792](https://github.com/openclaw/openclaw/pull/158792).
- Reduce repeated recovery reads, with unresolved rows backing off from one second to one minute [#159082](https://github.com/openclaw/openclaw/pull/159082).
- Move durable requester lookup during native, visible, and ACP spawning to database workers [#159135](https://github.com/openclaw/openclaw/pull/159135).
- Replace existing subagent registry entries without scanning unrelated siblings; the position indexes add some resident memory, and deletion still shifts later entries [#160800](https://github.com/openclaw/openclaw/pull/160800).
- Move native completion-binding and ACP notice lookups off the Gateway thread [#157033](https://github.com/openclaw/openclaw/pull/157033).

**Limits and compatibility**

- Historical subagent Task-ledger completion writes moved to workers before the Tasks retirement; this is not a retained Task-ledger capability [#156467](https://github.com/openclaw/openclaw/pull/156467).
- Default `sessions_send` calls with `timeoutSeconds: 0` and no mode try steering the caller’s own active child; idle children and rejected steering fall through to a new turn on the same child. Accepted steering skips separate announcement delivery and does not confirm transcript persistence or model consumption; explicit modes, positive waits, and other targets retain their behavior [#160842](https://github.com/openclaw/openclaw/pull/160842). Thanks @CarotaWealth.

</details>

</Accordion>

<Accordion title="Unfinished checklist reminders">

Before ending a reply, the built-in agent gets one chance to revisit an unfinished [checklist it saved during that run](https://docs.openclaw.ai/tools/progress-card). It can continue the work or explain a blocker, which may use another model response. This does not restart old tasks or override cancellation and approval waits.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Bug fixes**

- Add one current-run completion check for successfully saved unfinished checklists, preserving visible checkpoints and normal stopping exceptions [#160297](https://github.com/openclaw/openclaw/pull/160297). Thanks @vacinc.

</details>

</Accordion>

<Accordion title="Terminal models and conversations">

The [terminal model picker](https://docs.openclaw.ai/web/tui) opens while choices load and keeps your search as it refreshes. Startup and session refreshes also preserve the conversation you selected. Text submitted while a conversation loads stays editable until you press Enter again; a startup `--message` that was not sent is reported and is not retried automatically.

Selecting bare `global` now opens Home, including saved selections, while older history remains stored. Terminal math display and Tab completion for Chinese, Japanese, and Korean attachment names also improve.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Improvements**

- Open model pickers immediately and refresh choices while preserving search and selection [#157839](https://github.com/openclaw/openclaw/pull/157839). Thanks @obviyus.
- Use the consistent `openclaw` process title for ordinary CLI commands [#157118](https://github.com/openclaw/openclaw/pull/157118).
- Reuse pinned configuration during proxy validation [#158071](https://github.com/openclaw/openclaw/pull/158071).
- Keep inference help and completion free of execution-only runtime loading [#158624](https://github.com/openclaw/openclaw/pull/158624).
- Improve terminal math display and explicit Tab completion for CJK attachment names; automatic completion triggers stay unchanged [#160085](https://github.com/openclaw/openclaw/pull/160085).

**Bug fixes**

- Keep session descriptions and remembered-session restoration with the selected agent [#158240](https://github.com/openclaw/openclaw/pull/158240).
- Preserve choices made during startup restore and join accepted remembered-session writes on normal exit [#158845](https://github.com/openclaw/openclaw/pull/158845).
- Keep history and sends on the selected conversation, falling back from qualified global to Home only after confirmed absence [#159166](https://github.com/openclaw/openclaw/pull/159166).
- Correct image and video timeout guidance to use `--timeout-ms` [#157419](https://github.com/openclaw/openclaw/pull/157419). Thanks @obviyus and @sxh313; the source also records the name sxh without establishing another person.
- Exit after plugin-sensitive help output has drained [#158024](https://github.com/openclaw/openclaw/pull/158024). Thanks @obviyus and @ryanjkelly.
- Return parseable JSON errors for rejected agent `/compact` messages, pointing to `sessions compact` [#159212](https://github.com/openclaw/openclaw/pull/159212).
- Tell operators to review a mismatched conditional config expectation rather than repeat the same command; expectation flags still cannot combine with `--dry-run` [#159708](https://github.com/openclaw/openclaw/pull/159708).

**Limits and compatibility**

- Let CLI commands exit during compile-cache cleanup; retention targets remain soft and Node permission mode skips maintenance [#157884](https://github.com/openclaw/openclaw/pull/157884). Thanks @romneyda.
- Reduce eligible Linux broker and service-anchor launch overhead; missing executables on that path now report `ENOENT` instead of shell status 127 [#158367](https://github.com/openclaw/openclaw/pull/158367).

</details>

</Accordion>

<Accordion title="Code Mode activity and errors">

[Code Mode](https://docs.openclaw.ai/tools/code-mode/tool-surface) shows a purpose title for new executions, and its [error reports](https://docs.openclaw.ai/tools/code-mode/troubleshooting) distinguish a failed tool from a later JavaScript error. A failed script may already have sent a message or taken another action, so check before retrying. Optional [loop detection](https://docs.openclaw.ai/tools/loop-detection) also recognizes more repeated work and remains off by default.

Shell commands can use more of the current Code Mode call’s remaining time to finish, reducing unnecessary follow-up checks for short commands. Longer commands still return a process handle, and explicit background requests keep their behavior.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Improvements**

- Require a nonblank title for new Code Mode calls while retaining older untitled history [#157150](https://github.com/openclaw/openclaw/pull/157150).
- Reduce Node execution overhead and retain bounded output when a worker times out [#156066](https://github.com/openclaw/openclaw/pull/156066).
- Extend bounded warm-worker reuse and expose per-script start and retirement counters [#156387](https://github.com/openclaw/openclaw/pull/156387).
- Reuse up to four compatible completed Code Mode workers, each with five-minute idle retention [#156800](https://github.com/openclaw/openclaw/pull/156800).
- Reduce temporary allocations in OpenClaw Tool Search catalog preparation [#158805](https://github.com/openclaw/openclaw/pull/158805).
- Reuse search terms for unchanged tool descriptions across Code Mode cells while refreshing changed entries and keeping visibility-specific results [#160811](https://github.com/openclaw/openclaw/pull/160811).

**Bug fixes**

- Skip spoken confirmation for supported read-only Talk file counts, listings, and composed commands whose every stage is read-only [#156151](https://github.com/openclaw/openclaw/pull/156151). Thanks @obviyus, @peetiegonzalez, @vacinc, and @marvinthebored.
- Explain when disabled exec exit notifications require polling or another continuation for needed results [#158884](https://github.com/openclaw/openclaw/pull/158884). Thanks @vacinc.
- Preserve explanatory text for supported explicit nested tool-error shapes [#159359](https://github.com/openclaw/openclaw/pull/159359).
- Avoid logging-import memory exhaustion before Code Mode programs start [#159615](https://github.com/openclaw/openclaw/pull/159615).
- Recognize repeated Code Mode work despite changing execution bookkeeping when loop detection is enabled [#159864](https://github.com/openclaw/openclaw/pull/159864). Thanks @vacinc.
- Distinguish JavaScript errors from original tool rejections across execution and waits, independently of replay safety [#160217](https://github.com/openclaw/openclaw/pull/160217). Thanks @vacinc.
- Give default shell commands the remaining Code Mode wait window minus a settlement margin instead of a one-second cap; explicit timing stays in effect, and slow settlement may still require another wait [#160841](https://github.com/openclaw/openclaw/pull/160841).

</details>

</Accordion>

<Accordion title="Uploaded documents and PDF pages">

The assistant keeps the filenames of uploaded documents and is told when extraction leaves out known pages, text, or images. [PDF page selections](https://docs.openclaw.ai/tools/pdf) now count the pages you request, so a small page limit no longer rules out a page near the end of a file. Recognized binary documents also return reading or conversion guidance instead of garbled text.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Bug fixes**

- Report observed partial extraction and apply PDF limits to the number of selected pages [2a5cda2](https://github.com/openclaw/openclaw/commit/2a5cda2715be235e41824251ec22154f21aa0f1f). Thanks @vyctorbrzezowski.
- Recognize binary document bytes and return parser or conversion guidance, without adding automatic extraction [5cc0d5b](https://github.com/openclaw/openclaw/commit/5cc0d5b8a0a41c7de40876becd662ace63b2a7b5). Thanks @vincentkoc and reporter @xx77yy.
- Preserve uploaded filenames through storage and sandbox staging into model context [#156696](https://github.com/openclaw/openclaw/pull/156696).
- Preserve emoji and following embedding text under tiny byte caps, allowing one indivisible character to exceed the cap; stop cancelled browser permission-upgrade waits and reconnects while finishing storage of already-approved rotated credentials [#158571](https://github.com/openclaw/openclaw/pull/158571).

</details>

</Accordion>

<Accordion title="Release notes and documentation">

Release pages and plain-Markdown copies link to each other, so you can choose the format you prefer. Documentation navigation includes existing Persian and Thai translations, and old docs Showcase links point to the [website Showcase](https://openclaw.ai/showcase). Contributors can also preview edits with the current website renderer.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Documentation**

- Add the prior release's plain-Markdown changelog and contribution record [#156875](https://github.com/openclaw/openclaw/pull/156875). Thanks @hannesrudolph.
- Give formatted release pages and Markdown mirrors reciprocal reading-format links [#156916](https://github.com/openclaw/openclaw/pull/156916). Thanks @hannesrudolph.
- Use current-site local previews and include Persian and Thai in publishing navigation; Windows preview handoff remains unverified [#157544](https://github.com/openclaw/openclaw/pull/157544). Thanks @hannesrudolph.
- Retire the stale docs Showcase and configure old bookmarks to reach the existing website destination [#158575](https://github.com/openclaw/openclaw/pull/158575). Thanks @hannesrudolph.

</details>

</Accordion>

<Accordion title="Managed workspace setup and cleanup">

[Managed workspaces](https://docs.openclaw.ai/concepts/managed-worktrees) skip unnecessary setup for empty checkouts and repeated cleanup scans of unchanged checkouts that cannot be removed. If you repair one outside OpenClaw, run `openclaw worktrees gc` to retry cleanup; otherwise it may remain deferred until OpenClaw records further activity or a lifecycle change.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Improvements**

- Batch file-metadata checks when preparing large worktree snapshots [6fce79b](https://github.com/openclaw/openclaw/commit/6fce79bffd93a99a13f76d06983ad941c0426543). Credit to Peter Steinberger.
- Save workspace safety records through the state worker while preserving durable timestamps and the 24-hour disappearance guard [#158797](https://github.com/openclaw/openclaw/pull/158797).
- Move managed-worktree run admission off the Gateway thread, retaining uncertain-outcome custody until recovery [#159437](https://github.com/openclaw/openclaw/pull/159437).
- Skip template creation for known-empty workspace trees while retaining normal checkout and capacity checks [#159544](https://github.com/openclaw/openclaw/pull/159544).

**Limits and compatibility**

- Remember worktree cleanup deferrals and reduce ordinary PR-polling Git work; external repairs require an explicit cleanup retry [#158892](https://github.com/openclaw/openclaw/pull/158892).

</details>

</Accordion>

<Accordion title="Conversation history and lists">

Opening conversation history and refreshing session lists require fewer repeated checks and reads. Lists also avoid unpacking large saved snapshots they do not need, and browsing a parent’s child conversations skips unrelated sessions. Large session-group changes do less background work, though the effect on loading time depends on your setup.

Back up your databases before updating and verify the backup. This update automatically moves agent databases to [schema 24](https://docs.openclaw.ai/reference/database-schemas/agent-schema-history), which older builds cannot open. To downgrade, restore a verified pre-upgrade backup with its matching build; do not lower database version markers.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Improvements**

- Reuse unchanged session placement information after transcript writes [08e5e35](https://github.com/openclaw/openclaw/commit/08e5e350d35e88f091040357d5ac6367fdefcecb).
- Reuse completed placement reads during overlapping archived-session preparation [63fa1d2](https://github.com/openclaw/openclaw/commit/63fa1d2dedac5eb6ffa5ec690457d41e8ac22cd0). Credit to Peter Steinberger.
- Separate large saved snapshots from frequently read session metadata in agent schema 24, preserving full reads and transcript bytes. Reported allocation reductions apply to isolated metadata-read fixtures, not total Gateway memory [ae6a884](https://github.com/openclaw/openclaw/commit/ae6a88438de360932c02007849e6727fa6fe1848).
- Narrow eligible child-session lists through existing parent indexes while preserving visibility, ownership, counts, and paging; person-profile searches retain the full visible roster [#160404](https://github.com/openclaw/openclaw/pull/160404).
- Reuse authentication readers across connection and scheduled-work callbacks [#155779](https://github.com/openclaw/openclaw/pull/155779).
- Prepare operator profiles away from the Gateway request thread [#155800](https://github.com/openclaw/openclaw/pull/155800).
- Retain prepared session rows across refresh pauses [#155957](https://github.com/openclaw/openclaw/pull/155957). Thanks @vincentkoc.
- Avoid rebuilding rosters for progress and preview updates [#155995](https://github.com/openclaw/openclaw/pull/155995).
- Reuse prepared session information when loading conversation history [#156055](https://github.com/openclaw/openclaw/pull/156055).
- Reuse roster selection within session-list preparation [#156221](https://github.com/openclaw/openclaw/pull/156221).
- Reuse admitted database schema facts during session reads [#156643](https://github.com/openclaw/openclaw/pull/156643).
- Share overlapping same-row session reads during refresh [#156791](https://github.com/openclaw/openclaw/pull/156791).
- Remove repeated schema probes from warm session metadata reads [#156817](https://github.com/openclaw/openclaw/pull/156817).
- Share freshness checks within one synchronous read while later independent reads recheck for foreign commits [#156922](https://github.com/openclaw/openclaw/pull/156922).
- Avoid repeated schema inspection after data-only writes [#157030](https://github.com/openclaw/openclaw/pull/157030).
- Share pending validation across concurrent session readers [#157043](https://github.com/openclaw/openclaw/pull/157043).
- Avoid unrelated row-validation waits for targeted access after store admission [#157113](https://github.com/openclaw/openclaw/pull/157113).
- Avoid copying the process environment for resident subagent identity checks [#157120](https://github.com/openclaw/openclaw/pull/157120).
- Reuse session facts after model metadata changes [#157129](https://github.com/openclaw/openclaw/pull/157129).
- Reuse unchanged related rows during parent and child relationship refreshes [#157552](https://github.com/openclaw/openclaw/pull/157552).
- Reuse current participant facts when publishing session writes [#157582](https://github.com/openclaw/openclaw/pull/157582).
- Reuse current participant facts during warm transcript appends [#157622](https://github.com/openclaw/openclaw/pull/157622).
- Reduce temporary filtering arrays during session status reads [#158326](https://github.com/openclaw/openclaw/pull/158326).
- Batch exact reads for session-group changes involving at least ten members [#158345](https://github.com/openclaw/openclaw/pull/158345).
- Preserve unrelated placement facts after participant updates [#158395](https://github.com/openclaw/openclaw/pull/158395).
- Avoid repeated path normalization during warm session reads [#158444](https://github.com/openclaw/openclaw/pull/158444).
- Reuse prepared database-admission facts during session updates [#158627](https://github.com/openclaw/openclaw/pull/158627).
- Reuse resident session facts during mutation checks [#158833](https://github.com/openclaw/openclaw/pull/158833).
- Reuse resident exact rows during tool-policy preparation [#158872](https://github.com/openclaw/openclaw/pull/158872).
- Reuse healthy cleanup workers after settled commit refusals without replaying refused work [#158878](https://github.com/openclaw/openclaw/pull/158878).
- Reduce cleanup planning work and time occupying the writer [#158885](https://github.com/openclaw/openclaw/pull/158885).
- Decode exact session rows once for both use and validation [#158961](https://github.com/openclaw/openclaw/pull/158961).
- Avoid schema rescans caused by mistaking SQL expression endings for transaction boundaries [#158973](https://github.com/openclaw/openclaw/pull/158973).
- Route run events through existing session identities instead of repeatedly scanning full stores [#159742](https://github.com/openclaw/openclaw/pull/159742).
- Reduce duplicate ownership checks within uninterrupted state-read work [#159876](https://github.com/openclaw/openclaw/pull/159876).

**Limits and compatibility**

- Reuse dedicated-read ownership proof for less than one second, including after an out-of-band lock-sidecar replacement or directory-alias change; expired proof is checked before dispatch [#160139](https://github.com/openclaw/openclaw/pull/160139).

</details>

</Accordion>

<Accordion title="Saving conversations">

More conversation saving can wait for storage without holding up unrelated requests. Large messages and tool results also need less duplicate processing when saved, although individual saves can still take longer.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Improvements**

- Move selected session writes off the request thread and let foreground writes progress between cleanup units [#155631](https://github.com/openclaw/openclaw/pull/155631).
- Move durable history and selected session-detail reads off the request thread [#155740](https://github.com/openclaw/openclaw/pull/155740).
- Reuse valid integrity proof across same-process database workers while retaining conservative cold-open checks [#155785](https://github.com/openclaw/openclaw/pull/155785).
- Move streamed transcript and runtime-report writes to workers while preserving commit ordering [#156095](https://github.com/openclaw/openclaw/pull/156095).
- Reduce large-message storage preparation without changing transcript bytes [#158402](https://github.com/openclaw/openclaw/pull/158402).
- Reduce host-side preparation for SQLite worker operations [#158655](https://github.com/openclaw/openclaw/pull/158655).
- Reuse warm agent-database execution context and reduce repeated host checks [#158750](https://github.com/openclaw/openclaw/pull/158750).
- Create fresh canonical durable sessions with one atomic transcript-header and entry write; alias, fork, and Incognito paths remain distinct [#158771](https://github.com/openclaw/openclaw/pull/158771).
- Reduce host CPU spent publishing small agent-state changes [#158843](https://github.com/openclaw/openclaw/pull/158843).
- Avoid transferring duplicate parsed tool calls and results to the database worker [#159449](https://github.com/openclaw/openclaw/pull/159449).
- Copy prior session-update context only when a callback reads it [#159780](https://github.com/openclaw/openclaw/pull/159780).
- Avoid unpacking unrelated large tool results during guarded writes and prior-answer matching, with clearer write diagnostics [#159898](https://github.com/openclaw/openclaw/pull/159898).

</details>

</Accordion>

<Accordion title="Starting replies in parallel">

Independent conversations can prepare replies at the same time through more paths, reducing waits behind other chats. Starting a new conversation also avoids unnecessary history scans. Busy setups can still experience pauses.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Improvements**

- Remove redundant session-metadata reads during chat admission [7dc4905](https://github.com/openclaw/openclaw/commit/7dc4905d61a8544001c84c8794c6b24e985fd7d5).
- Move conversation-index publication and selected startup reads into workers [e0d8000](https://github.com/openclaw/openclaw/commit/e0d80000067d224e93af6107ed093a21e046879f). Thanks @fuller-stack-dev and @joshavant.
- Move managed-worktree snapshot reads off the calling thread [#156315](https://github.com/openclaw/openclaw/pull/156315). Thanks @todddickerson.
- Share simultaneous approval-replay preparation for matching session and reviewer bindings, retaining per-client checks and bounded retries [#156358](https://github.com/openclaw/openclaw/pull/156358).
- Batch worker-machine metadata refreshes through background database reads [#157079](https://github.com/openclaw/openclaw/pull/157079).
- Skip device-storage setup for eligible implicit local loopback CLI calls with authentication disabled [#157166](https://github.com/openclaw/openclaw/pull/157166).
- Read opt-in CLI timeline settings without opening shared state [#157252](https://github.com/openclaw/openclaw/pull/157252).
- Reuse healthy discovery workers during session creation and expose slow-create phase diagnostics [#158433](https://github.com/openclaw/openclaw/pull/158433).
- Avoid empty archive-recovery waits before replies when the committed database identity still matches [#158559](https://github.com/openclaw/openclaw/pull/158559).
- Reuse sandbox classification and avoid duplicate workspace-directory preparation [#158610](https://github.com/openclaw/openclaw/pull/158610).
- Skip unnecessary archive preparation when adopting existing sessions [#158660](https://github.com/openclaw/openclaw/pull/158660).
- Read targeted rows and label occupancy instead of unrelated session inventory during conversation creation [#158809](https://github.com/openclaw/openclaw/pull/158809).
- Prepare personal-account authority once for concurrent chat work; running installations require profile changes through Gateway RPCs [#158941](https://github.com/openclaw/openclaw/pull/158941).
- Yield between session-publication batches and combine pending activity recaps within the same session generation [#159102](https://github.com/openclaw/openclaw/pull/159102).
- Allow audited operations on independent session keys to prepare replies concurrently while overlapping operations keep their ordering [#160183](https://github.com/openclaw/openclaw/pull/160183).

**Limits and compatibility**

- Historical Task-owner startup persistence moved off the Gateway thread before the Tasks system was retired [#156064](https://github.com/openclaw/openclaw/pull/156064).

</details>

</Accordion>

<Accordion title="Live replies and progress updates">

OpenClaw does less repeated processing while displaying replies and sharing progress updates. Very large updates also avoid extra work once they exceed what can be replayed after a reconnect.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Improvements**

- Skip full runtime-context cleanup scans when recognized removable headers are absent [#153211](https://github.com/openclaw/openclaw/pull/153211). Thanks @jjjhenriksen, @patrick-erichsen, and @noelillinger.
- Stop capturing oversized progress at the existing replay limit and retain compact tool metadata [#158572](https://github.com/openclaw/openclaw/pull/158572).
- Reuse unchanged tool-definition projections while applying current diagnostic redaction [#158871](https://github.com/openclaw/openclaw/pull/158871).
- Reduce repeated identity resolution and allocation in session-activity broadcasts [#159182](https://github.com/openclaw/openclaw/pull/159182).
- Encode matching multi-client broadcasts once while retaining JSON text frames and recipient restrictions; retained delivery and recipient-specific projections keep their existing paths [#160787](https://github.com/openclaw/openclaw/pull/160787).
- Reuse exact measurements of unchanged long text within an agent’s diagnostic recording attempt, while observing edits and compaction and leaving provider requests unchanged [#160807](https://github.com/openclaw/openclaw/pull/160807).

</details>

</Accordion>

<Accordion title="Memory use during busy chats">

Busy chats release large pieces of data they no longer need. Related memory-management changes reduced long pauses in tests with many simultaneous replies, though pauses can still occur.

Closing Control UI terminal tabs also releases memory that could remain held after the tab closed, while other open terminals keep working.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Improvements**

- Move managed-worktree lease cleanup off the Gateway thread; the accompanying Task-backed maintenance settlement is historical after Tasks retirement [#156640](https://github.com/openclaw/openclaw/pull/156640).
- Prepare worktree cleanup workers earlier; the accompanying Task-backed maintenance-start transition was subsequently retired [#156872](https://github.com/openclaw/openclaw/pull/156872).
- Retain one idle agent-database executor for up to thirty minutes, with cross-agent eviction unchanged [#158405](https://github.com/openclaw/openclaw/pull/158405).
- Release unneeded large event payloads retained by live-chat ownership checks [#158643](https://github.com/openclaw/openclaw/pull/158643).
- Reduce plugin ownership bookkeeping behind long garbage-collection pauses during concurrent streaming [#159103](https://github.com/openclaw/openclaw/pull/159103).
- Reduce repeated tool-classification allocation during agent preparation [#159464](https://github.com/openclaw/openclaw/pull/159464).

**Bug fixes**

- Remove the listener retaining closed Control UI terminals’ canvas and WebAssembly memory. Browser tests cover this specific leak, without establishing recovery from native-app renderer crashes [#160748](https://github.com/openclaw/openclaw/pull/160748). Thanks @fuller-stack-dev.

</details>

</Accordion>

</AccordionGroup>

## Other Bug Fixes

This release fixes several causes of stalled conversations, missing results, and interrupted worker chats.

<AccordionGroup>

<Accordion title="Database and conversation history">

Conversation lists keep refreshing while other chats save changes. The release also fixes temporary-file buildup that could block updates despite free disk space, and lets an agent accept new requests after a temporary database cleanup failure clears. Failed requests are not automatically repeated.

Busy installations may use more memory for queued database input, with its allowance rising from 64 to 256 MiB. If a `global` or `unknown` session address is rejected as ambiguous, choose a specific conversation. Existing history is kept without merging or renaming it.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Bug fixes**

- Keep archived-session search, terminal history, Talk, and shared PR updates current. [0bbad56f](https://github.com/openclaw/openclaw/commit/0bbad56fa80945db4323771873c9944e67454679) Thanks @galiniliev, @steipete.
- Keep history reads working during concurrent agent registration. [3d903819](https://github.com/openclaw/openclaw/commit/3d903819c5641ed8735aebe55c86844957009952) Thanks Peter Steinberger.
- Avoid database-worker contention during Gateway authentication recovery. [3f341061](https://github.com/openclaw/openclaw/commit/3f341061594210e824b05aa20826af23ec0c5c76) Thanks Peter Steinberger.
- Preserve concurrent session metadata while storage becomes ready. [526f67dc](https://github.com/openclaw/openclaw/commit/526f67dc6382bae28cb26231b0813ce755521d80) Thanks Peter Steinberger.
- Release memory-pressure listeners after database-worker cleanup. [8a5386d6](https://github.com/openclaw/openclaw/commit/8a5386d63e0472ad081c0533badde6a5a174394a) Thanks @steipete.
- Prevent temporary-file exhaustion from SQLite coordination, retain Cron result writes during shutdown, and stop retired Wear audio frames changing the current animation. [8b16e532](https://github.com/openclaw/openclaw/commit/8b16e5328ecde96f7fe48aa637fec18cfde3fd47) Thanks @steipete.
- Explain when a database path disappears during access checks, without treating the file as recovered. [9512a28b](https://github.com/openclaw/openclaw/commit/9512a28b6fe6520a5377d38a287494b70cf2e55a) Thanks Peter Steinberger.
- Release database access after a command reaches a closed worker. [a53728bd](https://github.com/openclaw/openclaw/commit/a53728bd3b61b38049cb875103ed455cc44e87fe) Thanks David Stephens.
- Preserve stored session addresses, history, and family links through alias changes; reject stale queued writes. [#155886](https://github.com/openclaw/openclaw/pull/155886) Thanks @steipete.
- Preserve saved sessions, ACP metadata, and existing literal parent links when the main-session alias changes; absent parents retain the existing alias fallback. [#156109](https://github.com/openclaw/openclaw/pull/156109) Thanks @vincentkoc.
- Stop counting a completed request as active while background participant details are saved. [#156172](https://github.com/openclaw/openclaw/pull/156172) Thanks @steipete.
- End refresh loops for absent subagent runs and reuse unchanged run information. [#156268](https://github.com/openclaw/openclaw/pull/156268) Thanks @steipete.
- Keep session lists refreshing while unrelated sessions are being written. [#156286](https://github.com/openclaw/openclaw/pull/156286) Thanks @steipete.
- Avoid rebuilding unchanged session lists after identity-permission changes. [#156339](https://github.com/openclaw/openclaw/pull/156339) Thanks @steipete.
- Reject session and Cron metadata invalidated while their database reader closes. [#156519](https://github.com/openclaw/openclaw/pull/156519) Thanks @steipete.
- Restore sharing and transcript notes for custom session-store locators backed by symlinked databases. [#156684](https://github.com/openclaw/openclaw/pull/156684) Thanks @steipete.
- Show another connection's committed database changes on the next independent read, preserving an active read snapshot. [#156824](https://github.com/openclaw/openclaw/pull/156824) Thanks @vincentkoc, @steipete.
- Keep a healthy SQLite connection usable after a pre-commit automatic rollback; the failed write still fails. [#157241](https://github.com/openclaw/openclaw/pull/157241) Thanks @steipete.
- Save durable session activity through the database worker, preserving event order and stopping replay when a write's outcome is unknown; the first flush may take longer, and Incognito retains its existing handling. [#157598](https://github.com/openclaw/openclaw/pull/157598) Thanks @steipete.
- Keep older child-answer lookups and selected Cron database waits off the Gateway thread; accompanying Tasks and TaskFlow read paths were later retired. [#157634](https://github.com/openclaw/openclaw/pull/157634) Thanks @fuller-stack-dev.
- Reuse valid same-process database integrity checks after the last writer closes. [#157666](https://github.com/openclaw/openclaw/pull/157666) Thanks @marinabotobs, @steipete.
- Attempt tool-resource cleanup when agent setup fails, preserving the original error and reporting uncertain cleanup. [#157678](https://github.com/openclaw/openclaw/pull/157678) Thanks @vincentkoc.
- Resolve dangling workspace symlinks correctly during agent deletion and close File Transfer handles after identity-check errors; terminal uploads now remove some forbidden filename characters and use names such as `CON_.txt`. [#158008](https://github.com/openclaw/openclaw/pull/158008) Thanks @steipete.
- Let Gateway requests proceed while session cleanup and cold-storage commits settle. [#158073](https://github.com/openclaw/openclaw/pull/158073) Thanks @steipete.
- Prevent the reply-startup lock cycle caused by overlapping read-marker updates with a durable context engine. [#158209](https://github.com/openclaw/openclaw/pull/158209) Thanks @iwhatsskill.
- Skip malformed non-object Claude CLI history rows and retain the original abort error for already-aborted node work. [#158228](https://github.com/openclaw/openclaw/pull/158228) Thanks @steipete.
- Avoid chat-send lock waits when the needed device identity is already cached. [#158259](https://github.com/openclaw/openclaw/pull/158259) Thanks @fuller-stack-dev.
- Allow session creation through database directory aliases such as macOS /tmp. [#158401](https://github.com/openclaw/openclaw/pull/158401) Thanks @joshavant.
- Finish releasing a failed-startup turn claim after temporary database contention, allowing the next message without replaying the failed input. [#158486](https://github.com/openclaw/openclaw/pull/158486) Thanks @fuller-stack-dev, @steipete.
- Share agent database access across directory aliases and reject queued writes after an alias is retargeted. [#158611](https://github.com/openclaw/openclaw/pull/158611) Thanks @joshavant.
- Release completed-run diagnostic references after queued events drain. [#158949](https://github.com/openclaw/openclaw/pull/158949) Thanks @steipete.
- Allow the next request after a transient failed-operation database-cleanup fault clears, while explicit revocation remains terminal. [#159451](https://github.com/openclaw/openclaw/pull/159451) Thanks @aspalagin and @obviyus; related issue report by @desksk.
- Keep persistent reply startup and Stop responsive during database admission waits, joining cleanup before a queued successor. [#159632](https://github.com/openclaw/openclaw/pull/159632) Thanks @steipete.
- Restore the loaded conversation after a rejected nested transcript write, preserving selected branches and valid message ancestry. [#159807](https://github.com/openclaw/openclaw/pull/159807) Thanks @steipete.
- Let other Gateway work continue while a session update waits to begin its database write; the transaction itself remains synchronous. [#160801](https://github.com/openclaw/openclaw/pull/160801) Thanks @steipete.
- Retain the normal bounded commit wait after write admission, so brief competing reads do not immediately fail session updates on rollback-journal storage. Commit waits remain synchronous. [#160887](https://github.com/openclaw/openclaw/pull/160887) Thanks @steipete.
- Reject asynchronous transcript messages carrying stale writer or session-lifecycle claims before saving them. [#160893](https://github.com/openclaw/openclaw/pull/160893) Thanks @steipete.

**Limits and compatibility**

- Earlier asynchronous Tasks retention cleanup, superseded by the removal of Tasks and TaskFlow. [ac9b848d](https://github.com/openclaw/openclaw/commit/ac9b848d2f0bb7126759d06046727cf1d24e4d5d) Thanks @steipete.
- Keep admitted chat writes attached to their original conversation and database; refuse ambiguous raw session aliases without merging history. [#156819](https://github.com/openclaw/openclaw/pull/156819) Thanks @steipete.
- Give independent database workers separate request slots and raise their shared queued-input allowance from 64 to 256 MiB. [#157230](https://github.com/openclaw/openclaw/pull/157230) Thanks @steipete; issue report by @todddickerson.

</details>

</Accordion>

<Accordion title="Subagent results and restarts">

A finished [subagent batch](https://docs.openclaw.ai/tools/subagents/announce) can now return its results while an unrelated earlier batch keeps working. It still waits for its own helpers and their nested tasks. The release also fixes cases where helper results restarted work you had stopped, or an interrupted task could not find its original request after a restart. An agent resuming after its helpers finish can also keep using its authorized tools.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Bug fixes**

- Preserve successful child completion timing when publishing its reply. [53f7e5fd](https://github.com/openclaw/openclaw/commit/53f7e5fd46f5ac44b9d690549b73def4d7b526ba) Thanks Peter Steinberger.
- Reserve collector queue order before requester lookup and retain the original completion destination. [5cf18de3](https://github.com/openclaw/openclaw/commit/5cf18de3d103a6bea797cbfe52fa8f51dce8c596) Thanks Peter Steinberger.
- Resume an agent after a clean sessions_yield instead of mistaking a stale synthetic message for cancellation. [66791fc1](https://github.com/openclaw/openclaw/commit/66791fc10e964525496b22be50013e694e51ffe2) Thanks @steipete.
- Finish failed-launch cancellation before deleting a collector session or advancing its queue, including restored queues. [d00524c2](https://github.com/openclaw/openclaw/commit/d00524c295776a673d1450ed44b95021976539e3) Thanks @vincentkoc.
- Report cancellation before cleaning up a collector stopped during startup. [d65bc76d](https://github.com/openclaw/openclaw/commit/d65bc76d60daaa16078748bd2f2a9c090564d2ee) Thanks Peter Steinberger.
- Wait for the original replayable reply before agent.wait reports completion; replay remains limited to the existing process-local cache. [#156078](https://github.com/openclaw/openclaw/pull/156078) Thanks @joshavant.
- Prevent selected completed helpers from automatically restarting stopped work, retaining their results and allowing new human instructions. [#156124](https://github.com/openclaw/openclaw/pull/156124) Thanks @shakkernerd.
- Release a failed restart-recovery attempt so the conversation can retry within its existing recovery budget. [#157214](https://github.com/openclaw/openclaw/pull/157214) Thanks @steipete.
- Preserve completion input through compaction and stop futile retries for the specific closed-turn transcript mismatch. [#157571](https://github.com/openclaw/openclaw/pull/157571) Thanks @steipete.
- Limit repeated identical settlement-write warnings while keeping the existing retry cadence and reporting suppressed counts. [#157871](https://github.com/openclaw/openclaw/pull/157871) Thanks @etzelm, @amesgit, @jalehman.
- Record native subagent and ACP terminal outcomes without blocking unrelated Gateway events during database contention. [#158118](https://github.com/openclaw/openclaw/pull/158118) Thanks @steipete.
- Recover an interrupted request and saved tool results when large internal records obscure the loaded history window. [#158363](https://github.com/openclaw/openclaw/pull/158363) Thanks @jalehman; related issue reports by @hannesrudolph and @simonspid.
- Refresh optional parent-session attribution after creation, replacement, or deletion. [#158581](https://github.com/openclaw/openclaw/pull/158581) Thanks @steipete.
- Preserve a successful nested subagent result after restart when its exact pending continuation still owns the work. [#158585](https://github.com/openclaw/openclaw/pull/158585) Thanks @jalehman.
- Await orphaned-subagent database admission without blocking startup's main thread on integrity scans. [#158620](https://github.com/openclaw/openclaw/pull/158620) Thanks @fuller-stack-dev.
- Deliver a finished yielded batch without waiting for unrelated older work, retaining waits for its own nested children and cleanup. [#158642](https://github.com/openclaw/openclaw/pull/158642) Thanks @obviyus; report by @potterdigital and independent diagnosis by @sxh313.
- Avoid waiting again for results already being processed, show scheduled agents only permitted automation actions, and tolerate harmless session updates during publication-permission preparation. [#160036](https://github.com/openclaw/openclaw/pull/160036) Thanks @steipete.
- Move database work for stopping active or queued file-backed native subagents to workers, preserving the intended child and waiting for completion writes before follow-ups. [#160203](https://github.com/openclaw/openclaw/pull/160203) Thanks @steipete; integration work by @vincentkoc and @Kimiyu-186.
- Restore a parent's verified tool policy when it resumes after its helpers finish; missing or conflicting policies keep the restricted fallback, and revoked access stays revoked. [#160786](https://github.com/openclaw/openclaw/pull/160786) Thanks @joshavant; related issue report by @andersonjeccel.

**Limits and compatibility**

- Earlier missing-Task completion retirement and inspection, superseded by Tasks removal; this historical change discarded delivery rather than restoring it. [#157061](https://github.com/openclaw/openclaw/pull/157061) Thanks @steipete.

</details>

</Accordion>

<Accordion title="Queued messages and steering">

Canceling a [queued message](https://docs.openclaw.ai/concepts/queue) before it starts now leaves the current reply and goal running. Follow-ups sent after a reply finishes go to the next turn, and recovery from stuck loops can let waiting messages proceed. [Steering](https://docs.openclaw.ai/concepts/session-tool) sent to a busy built-in agent stays queued, but its acceptance does not mean it has been read or saved. Queued steering is lost on restart.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Bug fixes**

- Route late follow-ups to the next turn after completion or handoff, while current-turn retries can still accept steering. [2fd61364](https://github.com/openclaw/openclaw/commit/2fd61364420671efcd6b6c1d57bbd6e59b561863) Thanks @steipete.
- Prevent new input and reset confirmations from canceled or replaced requests and preserve recorded reset retry outcomes; already-adopted resets and child input may finish, and an unstarted follow-up needs a separate submission. [#150640](https://github.com/openclaw/openclaw/pull/150640) Thanks @sallyom, @vincentkoc.
- Keep exact session-description requests moving during unrelated bulk refreshes, within existing capacity bounds. [#155471](https://github.com/openclaw/openclaw/pull/155471) Thanks @steipete.
- Keep one redacted failed-image recovery note across same-run retries without reinserting compacted history; disk-backed internal writes use a worker. [#155721](https://github.com/openclaw/openclaw/pull/155721) Thanks @steipete.
- Retain the owning agent when resuming by session ID in partitioned custom stores; ambiguous shared-store sessions still require agent selection. [#155741](https://github.com/openclaw/openclaw/pull/155741) Thanks @steipete.
- Move file-backed reply-recovery reads to workers, preserve follow-ups across compaction, and keep successor sessions from hiding an interrupted run's warning. [#155982](https://github.com/openclaw/openclaw/pull/155982) Thanks @steipete.
- Report canceled queued chats as aborted to waiting and replaying clients. [#156638](https://github.com/openclaw/openclaw/pull/156638) Thanks @joshavant.
- Complete accepted self-archiving after the agent finishes; revoked authority still prevents it, and pending archives do not survive a Gateway restart. [#156978](https://github.com/openclaw/openclaw/pull/156978) Thanks Vincent Koc (reporter and requester).
- List saved conversation branches despite concurrent label or activity updates. [#157060](https://github.com/openclaw/openclaw/pull/157060) Thanks @steipete.
- Recognize unchanged progress-card content when loop detection is enabled, without changing defaults or thresholds. [#157578](https://github.com/openclaw/openclaw/pull/157578) Thanks @jalehman.
- Keep a canceled or expired waiting message from failing the active conversation, pausing its goal, or adding a false timeout entry. [#157958](https://github.com/openclaw/openclaw/pull/157958) Thanks @steipete.
- Recover from unchanged wait loops and repeated model requests without semantic progress, retaining legitimate tool and provider-retry allowances. [#158428](https://github.com/openclaw/openclaw/pull/158428) Thanks @steipete.
- Keep accepted explicit steering queued beyond the sender's reply deadline and remove only its unconsumed guidance when the receiving run ends. [#160490](https://github.com/openclaw/openclaw/pull/160490) Thanks @vacinc.

</details>

</Accordion>

<Accordion title="Command completion and cleanup">

A completed command keeps its result when a busy OpenClaw processes the finish notification late, instead of incorrectly reporting a timeout. Windows commands can finish their cleanup before exiting, and Linux [background-process cleanup](https://docs.openclaw.ai/gateway/background-process) handles more leftover processes that have already exited. Commands still running keep their existing deadlines and operating-system restrictions.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Bug fixes**

- Keep terminal input and resize callbacks in the running CLI's context. [3067f9cf](https://github.com/openclaw/openclaw/commit/3067f9cf01ae8b3ce3ec6bb5b80d58f89989ad48) Thanks Peter Steinberger.
- Request command-group termination before an oversized control message causes the relay to lose cancellation authority. [b8a66645](https://github.com/openclaw/openclaw/commit/b8a666452976c2b922e2655eca54719591139ced) Thanks Peter Steinberger.
- Treat permission-denied process probes as existing processes and fully exited single-thread Linux zombies as dead, including eligible Doctor recovery. [#151107](https://github.com/openclaw/openclaw/pull/151107) Thanks @ekinnee, @altaywtf.
- Keep Windows command cleanup alive until its awaited result settles. [#157042](https://github.com/openclaw/openclaw/pull/157042) Thanks @steipete.
- Collect eligible adopted Linux command descendants through longer configured shutdown grace periods without taking unrelated exit statuses. [#157863](https://github.com/openclaw/openclaw/pull/157863) Thanks @steipete.
- Preserve observed command exits and output during delayed timeout handling; completed results may survive slightly beyond the nominal deadline. [#159578](https://github.com/openclaw/openclaw/pull/159578) Thanks @steipete.

**Limits and compatibility**

- Earlier background-command registration and completion ordering protected fast-exit handles, exit results, and cleanup; its Tasks bookkeeping was later retired. [#157177](https://github.com/openclaw/openclaw/pull/157177) Thanks @steipete.

</details>

</Accordion>

<Accordion title="Worker chats and workspaces">

Worker chats keep their workspace through automatic daily or idle resets, so they can continue replying there. This does not change `/new` or `/reset`, or restore workspaces already disconnected from a chat. A stuck cloud worker also no longer blocks unrelated sessions, though work sharing a session or environment may still wait.

Wait for active work to finish before changing a chat's workspace. [Worker shutdown](https://docs.openclaw.ai/cli/worker) now waits for accepted work that can still save data, so it can remain pending if a provider never finishes.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Bug fixes**

- Identify the Docker or Podman operation and deadline in container timeout messages without displaying private arguments; check the selected daemon before retrying. [136cfdc7](https://github.com/openclaw/openclaw/commit/136cfdc7a6cf0338a41ffb9523273d7f07a3b42f) Thanks Peter Steinberger.
- Keep inbound worker-transfer staging filenames stable during quota checks, preserving validation before publication. [a9760fd9](https://github.com/openclaw/openclaw/commit/a9760fd99f9700efc4f228a02d7680eb25c4b569) Thanks Peter Steinberger.
- Reject new checkpoint imports or publication after a cloud edit loses authority, preserving pending results for recovery. [#150611](https://github.com/openclaw/openclaw/pull/150611) Thanks @sallyom, @vincentkoc.
- Keep admitted worker inventory usable after an independent database-open refusal, while terminal failure and quarantine still disable it. [#155875](https://github.com/openclaw/openclaw/pull/155875) Thanks @meska, @vincentkoc, @obviyus.
- Complete worker workspace verification and result uploads without the missing `__name` helper error under source-loader transforms. [#156068](https://github.com/openclaw/openclaw/pull/156068) Thanks @joshavant.
- Allow prepared-worker Git verification up to ten minutes per operation within the provider deadline, with specific failure diagnostics and unchanged integrity checks. [#156212](https://github.com/openclaw/openclaw/pull/156212) Thanks @steipete.
- Move worker inference persistence off the request thread, save admission before acknowledgment, and join accepted writes and provider work during cancellation and shutdown. [#157422](https://github.com/openclaw/openclaw/pull/157422) Thanks @steipete.
- Preserve worktree and repository-workspace bindings across automatic daily or idle resets, leaving explicit reset behavior unchanged. [#159506](https://github.com/openclaw/openclaw/pull/159506) Thanks @chelsealong, @obviyus, @dimonnld.
- Let independent sessions proceed during stuck cloud-worker operations and begin Stop cancellation before final cleanup waits. [#160299](https://github.com/openclaw/openclaw/pull/160299) Thanks @steipete.
- Return a fresh node launch's invalid-request diagnostic without canceling work never registered; update the older Gateway or node component for a descriptor-version mismatch. [#160380](https://github.com/openclaw/openclaw/pull/160380) Thanks @steipete.
- Finish Crabbox teardown for qualifying absent leases and release warm-image allocation holds; coordinator Stop requires matching read and release absence responses for that lease. [#160571](https://github.com/openclaw/openclaw/pull/160571) Thanks @steipete.
- Accept complete bundled CommonJS dependencies during cloud-session bootstrap validation; affected source installs need a rebuild and restart. [#160583](https://github.com/openclaw/openclaw/pull/160583) Thanks @steipete.
- Recognize Crabbox 0.67 lease-read query strings during absent-lease cleanup without treating inspection alone as Stop confirmation. [#160660](https://github.com/openclaw/openclaw/pull/160660) Thanks @steipete.

**Limits and compatibility**

- Require an idle session before workspace changes or preparation callbacks, preserving its conversation history when adoption succeeds. [#157259](https://github.com/openclaw/openclaw/pull/157259) Thanks @vincentkoc.

</details>

</Accordion>

</AccordionGroup>

## Maintainer and Internal Changes

This release includes 1,620 changes to contributor tools, automated tests and internal code.

<AccordionGroup>

<Accordion title="Tests, build tools and code maintenance">

Contributors get fixes for test setup and build tools, alongside code cleanup. The [testing guide](https://docs.openclaw.ai/help/testing/suites) and [local proof guide](https://docs.openclaw.ai/ci/local-proof) explain how to check changes before submitting them.

<details class="release-source-toggle">
<summary>Sources and complete change list</summary>

**Improvements**

- Align Nextcloud Talk webhook test callbacks. [007822d8](https://github.com/openclaw/openclaw/commit/007822d8693cb8d9474e7df773610123e1da1e02) Thanks Peter Steinberger.
- Share Android phone compilation between tests and lint. [02cc444a](https://github.com/openclaw/openclaw/commit/02cc444aca6a32a293d6929e4270144710e7867a) Thanks Peter Steinberger.
- Start additional CI checks directly after preflight. [0345e454](https://github.com/openclaw/openclaw/commit/0345e4543da87ca6a69807833911c0a97351b677) Thanks Peter Steinberger.
- Share temporary-directory cleanup in QA CLI tests. [057a032f](https://github.com/openclaw/openclaw/commit/057a032fe19ee653bfba4d323bdd09bf7ecaa98d) Thanks @steipete.
- Consolidate shared skills, terminal UI, and setup internals. [0aed154b](https://github.com/openclaw/openclaw/commit/0aed154ba8dbb1791830edf71130d122fa24b703) Thanks @steipete.
- Consolidate sandbox registry read dispatch. [0dca2516](https://github.com/openclaw/openclaw/commit/0dca2516a7f809579468afcb2b22b528ece324b8) Thanks @steipete.
- Overlap eligible Telegram CI test processes. [116a1571](https://github.com/openclaw/openclaw/commit/116a1571b916f0119cedb3f0bad787eaef9b0ff8) Thanks Peter Steinberger.
- Move channel-ingress account discovery to the read worker. [15a0f344](https://github.com/openclaw/openclaw/commit/15a0f34487b5d57205cdc1cdf75a8e16e37b7989) Thanks @steipete.
- Reuse completed extension boundary compilations in CI. [15acf91c](https://github.com/openclaw/openclaw/commit/15acf91cb9bab3c1823d5c6a9766b2415148d06d) Thanks Peter Steinberger.
- Test SDK artifact preservation after declaration-emission errors. [1636f620](https://github.com/openclaw/openclaw/commit/1636f620d8dcb78794d66983d89cd149d21e5082) Thanks Peter Steinberger.
- Route critical CI checks away from hosted queue delays. [183595e7](https://github.com/openclaw/openclaw/commit/183595e7c7b3723e4fd1fe9c90d73f106c2c7460) Thanks @steipete.
- Keep the fat64 fixture with macOS signing tests. [1a2cda64](https://github.com/openclaw/openclaw/commit/1a2cda64d1a0ced8870ac73bef022ebf15298d37) Thanks @steipete.
- Avoid recompiling unchanged declaration-test types. [1a956c8a](https://github.com/openclaw/openclaw/commit/1a956c8afe52c425111f08518081224512b54d49) Thanks Peter Steinberger.
- Reduce CI control-job and completion observation delays. [1ea24b2d](https://github.com/openclaw/openclaw/commit/1ea24b2dc36f809ff2113965ef4ca6ba6c1387f9) Thanks Peter Steinberger.
- Remove a progress-snapshot numeric-coercion lint suppression. [20f3170d](https://github.com/openclaw/openclaw/commit/20f3170d3672de0d491c5bb9cf9bf7e22e9658a7) Thanks Peter Steinberger.
- Simplify theme RPC tests within existing lint limits. [25d771cb](https://github.com/openclaw/openclaw/commit/25d771cb8203f5afeea7b7c9dc8060210db8e43d) Thanks Peter Steinberger.
- Verify installed payloads in same-version upgrade tests. [286b9b07](https://github.com/openclaw/openclaw/commit/286b9b0780256d8496369f876eb796358734cbf0) Thanks @steipete.
- Refresh Workboard generated Control UI asset references. [2871aef0](https://github.com/openclaw/openclaw/commit/2871aef000cb639f2811ec79b0ca13062adb719e) Thanks Peter Steinberger.
- Retain Control UI test hang diagnostics in CI. [2968ae94](https://github.com/openclaw/openclaw/commit/2968ae94e4c1f40b1decbed3681872c2be99a838) Thanks Peter Steinberger.
- Strengthen Gateway reload tests and failure diagnostics. [2998a881](https://github.com/openclaw/openclaw/commit/2998a881c7bca2d0d336bc9933dbbd82cca701d8) Thanks @steipete.
- Apply shared Node arguments to CLI help-exit fixtures. [2ca9f7b7](https://github.com/openclaw/openclaw/commit/2ca9f7b710f797052a6f8a2b27b9906956f57c0f) Thanks Peter Steinberger.
- Separate session and first-tool resource measurements. [2d94121b](https://github.com/openclaw/openclaw/commit/2d94121bb0ac7a4404e8a81fc00ffd735a89eac5) Thanks @vincentkoc.
- Reuse iOS screenshot builds and simulators. [340cb1c8](https://github.com/openclaw/openclaw/commit/340cb1c8402ad1630ac350dc0a4b31daeb238cfa) Thanks Peter Steinberger.
- Move Side Chat cleanup scheduling into the Gateway kernel. [362cee12](https://github.com/openclaw/openclaw/commit/362cee12114d8a41b2b5eff42e96d973b6cfc327) Thanks @steipete.
- Exercise public Gateway startup in catalog tests. [3735aba0](https://github.com/openclaw/openclaw/commit/3735aba0d5cf5ea4058f08c17c133695fbf278c9) Thanks Peter Steinberger.
- Decouple UI scenario context types from Vitest instances. [3d66eb56](https://github.com/openclaw/openclaw/commit/3d66eb5656736343b00a156329fda9cc6054a4c1) Thanks Peter Steinberger.
- Isolate runner lifecycle tests from native services. [3e9e4cdd](https://github.com/openclaw/openclaw/commit/3e9e4cdde3dbffc34366b17dd3a1714173e30c79) Thanks Peter Steinberger.
- Support documented pre-existing CI failures in approved admin landings. [42c49835](https://github.com/openclaw/openclaw/commit/42c498353a601f6d985baa1506f98fbda2bf3673) Thanks Peter Steinberger.
- Retain plugin metadata across Gateway handler tests. [51b995e1](https://github.com/openclaw/openclaw/commit/51b995e18df4ebb6dd549c02b7d595522f21f39a) Thanks Peter Steinberger.
- Separate UI component tests into a type-check shard. [52ae7e31](https://github.com/openclaw/openclaw/commit/52ae7e314dc2bf704449a3526abb4e3423649376) Thanks Peter Steinberger.
- Run independent declaration test commands concurrently. [53cc262c](https://github.com/openclaw/openclaw/commit/53cc262cc61983bfdf5a187d6e78485a206d9ba3) Thanks @steipete.
- Split CI planner tests by ownership. [54d19ff2](https://github.com/openclaw/openclaw/commit/54d19ff2cae3b90df5159cf2474316838162be59) Thanks Peter Steinberger.
- Apply Go memory defaults to architecture CI checks. [57a30515](https://github.com/openclaw/openclaw/commit/57a305156cad62872ee1975115b190107972e412) Thanks Peter Steinberger.
- Use direct matching for literal CI policy paths. [58661920](https://github.com/openclaw/openclaw/commit/5866192050b17b7744d93a66b575a6ac2a016d6e) Thanks Peter Steinberger.
- Avoid duplicate native declaration transforms. [614aa3ac](https://github.com/openclaw/openclaw/commit/614aa3acffd2757326094317d4130af0ebdbd3d2) Thanks Peter Steinberger.
- Add real-Gateway session pacing and lifecycle fixture coverage. [63f1dec2](https://github.com/openclaw/openclaw/commit/63f1dec2b57e6883b65eaa108cd287bd29d6d551) Thanks @pollybot13, @romneyda.
- Preserve boxed-number coercion without a misleading type assertion. [66b812f2](https://github.com/openclaw/openclaw/commit/66b812f26e725cd709e08860d2cb46ba496cd308) Thanks Peter Steinberger.
- Restore Codex terminal cleanup protocol assertions. [687ab1d1](https://github.com/openclaw/openclaw/commit/687ab1d10197c2cf946d869bc8acffa6143f44d5) Thanks Peter Steinberger.
- Use job-local hard links for Linux CI dependency installs. [69232a16](https://github.com/openclaw/openclaw/commit/69232a161af9fe6f1161f3f60477ba59b878106d) Thanks Peter Steinberger.
- Select PR tests by changed owners and protected coverage. [6a501796](https://github.com/openclaw/openclaw/commit/6a501796576dff045049e0056491054f729fc4a2) Thanks Peter Steinberger.
- Group command-palette fixture writes by agent. [6a6f8a6e](https://github.com/openclaw/openclaw/commit/6a6f8a6ecec2d1d3d587a94009ecf08d276d83f3) Thanks Peter Steinberger.
- Extract agent database worker shutdown logic. [6c732509](https://github.com/openclaw/openclaw/commit/6c7325097fae2af3f09b729c7ff4db13476ecf80) Thanks Peter Steinberger.
- Separate extension test estimates from runtime preparation. [6fdaf084](https://github.com/openclaw/openclaw/commit/6fdaf084f6f8b09a19e72aee68150a8db2be4adb) Thanks Peter Steinberger.
- Test CI matrix limits for mixed plugin and core changes. [73da00a2](https://github.com/openclaw/openclaw/commit/73da00a20970e8883fbb8859cb03ec71fab166ae) Thanks Peter Steinberger.
- Test runtime plugin cleanup completion and failure reporting. [74351493](https://github.com/openclaw/openclaw/commit/7435149323e949dc4c7dcba3a5c4732218901c4b) Thanks Peter Steinberger.
- Prepare iOS Cloudflare Access session handling for later activation. [79cc65fd](https://github.com/openclaw/openclaw/commit/79cc65fd2ef35e4c391ca7315fed2af21caadb6d) Thanks @vincentkoc.
- Reuse pinned PR heads and verify main advances during admin admission. [809b62cc](https://github.com/openclaw/openclaw/commit/809b62cc7e49b9e34720eff64a2170c3d1ae1b54) Thanks Peter Steinberger.
- Verify committed writes during cold session maintenance validation. [80d6f078](https://github.com/openclaw/openclaw/commit/80d6f078b24d7d677197aed959bd7aaf1876a4d6) Thanks @steipete.
- Restore independent type ownership and native database test routing. [818b0092](https://github.com/openclaw/openclaw/commit/818b0092d2ee65080b53a57e8949b0f8b4e03ff9) Thanks @joshavant.
- Validate deferred bundled MCP tools in release smoke tests. [837fad12](https://github.com/openclaw/openclaw/commit/837fad120fbab0c0df0dd7bc7009dd90decfbd38) Thanks @steipete.
- Recognize verified inherited main failures in PR checks. [83fb6a3a](https://github.com/openclaw/openclaw/commit/83fb6a3aa8ce8ff4e3abaa03bee96742248c83af) Thanks Peter Steinberger.
- Test separate authorized TUI turns in FIFO order. [84742e3d](https://github.com/openclaw/openclaw/commit/84742e3d0e7f1e705ceab6523dab01351e3f6c66) Thanks Peter Steinberger.
- Test borrowed and foreign plugin-state lifecycle ownership. [8ce411c1](https://github.com/openclaw/openclaw/commit/8ce411c1aedf128cd63f46189eb1204c3a0d9fc1) Thanks Peter Steinberger.
- Refresh qualified CI test timing weights. [90b45949](https://github.com/openclaw/openclaw/commit/90b4594999ea643e1aee44b83465eba1e234d39d) Thanks Peter Steinberger.
- Diagnose missing PR wrapper imports before extraction tests. [932572ac](https://github.com/openclaw/openclaw/commit/932572acb256fa743d30bcf991e32cbf28812a31) Thanks Peter Steinberger.
- Prepare Apple transport response-header probes for later ingress integration. [96c05e6b](https://github.com/openclaw/openclaw/commit/96c05e6bce1ad2414450eb4368a4e0f87e588861) Thanks @vincentkoc.
- Cover historical asynchronous task content projection. [9aa26763](https://github.com/openclaw/openclaw/commit/9aa26763b8de8d8350220e5bb9002448db707422) Thanks Peter Steinberger.
- Prepare missing AI declarations before CI consumer tests. [9c69495d](https://github.com/openclaw/openclaw/commit/9c69495d6f0c63da6535cb0408dcbd0d7b8927c0) Thanks Peter Steinberger.
- Keep ACPX filesystem imports within the plugin SDK. [9d5ab59b](https://github.com/openclaw/openclaw/commit/9d5ab59b5af88ccfac7af258a5a872caee5eeaf5) Thanks Peter Steinberger.
- Speed up exhaustive CI inventory checks. [9db8c45b](https://github.com/openclaw/openclaw/commit/9db8c45b26bd645788a86424c0edf489d354c9c0) Thanks Peter Steinberger.
- Tune resources for bounded Linux lint shards. [a1ba139b](https://github.com/openclaw/openclaw/commit/a1ba139b5697bef432ad0d2d28e0aba75b8a43a6) Thanks Peter Steinberger.
- Isolate compiled lint tests from loader services. [a53efa5e](https://github.com/openclaw/openclaw/commit/a53efa5e72513169c225c3fab8495c9e8c16eae4) Thanks Peter Steinberger.
- Isolate archive worker database dependencies. [a759f770](https://github.com/openclaw/openclaw/commit/a759f770a9dbe876c915311dfe2e349192de157c) Thanks Peter Steinberger.
- Consolidate complete hybrid extension lint jobs. [af17bf3b](https://github.com/openclaw/openclaw/commit/af17bf3be57ad06ade39073f8636b8c21bea5d5a) Thanks Peter Steinberger.
- Preserve complete CI inputs and reviewed landing evidence. [b2e0e562](https://github.com/openclaw/openclaw/commit/b2e0e5627cb470108a86dd4c6d332006ee34d5a4) Thanks Peter Steinberger.
- Reduce recovery test fixture overhead. [b3b78c42](https://github.com/openclaw/openclaw/commit/b3b78c42caba45c6b78b44e16bf606db795af8c9) Thanks Peter Steinberger.
- Balance CI jobs using measured test costs. [b3f4c0aa](https://github.com/openclaw/openclaw/commit/b3f4c0aa540be135b722bec27922f105611b598d) Thanks Peter Steinberger.
- Extract maintenance parameter declarations. [b67e6e0b](https://github.com/openclaw/openclaw/commit/b67e6e0ba37ae4ff4e1eae03efa66ad1755ea868) Thanks Peter Steinberger.
- Split slow hourly hosted test groups. [b7d2a8b7](https://github.com/openclaw/openclaw/commit/b7d2a8b73bb9a8670d051afc611e6d9d22fbef57) Thanks @steipete.
- Retain native package-test failure details. [c16f2979](https://github.com/openclaw/openclaw/commit/c16f2979b0ff76c59e4e2a6a1f5618d3dfe9cdb7) Thanks @vincentkoc.
- Rebalance agent session typecheck roots. [d07b710d](https://github.com/openclaw/openclaw/commit/d07b710d85220c18b2186d57cd33e2276ba2da38) Thanks Peter Steinberger.
- Retry transient pnpm archive downloads during CI setup. [d9ba3895](https://github.com/openclaw/openclaw/commit/d9ba38955764f04f1149d7c01e2ed5f6acc3da6e) Thanks Peter Steinberger.
- Remove duplicate MiniMax speech-response tests. [da49c7e4](https://github.com/openclaw/openclaw/commit/da49c7e45c4cbc65642911ebaf05b4b46b0371ae) Thanks @vincentkoc.
- Capture complete compiler and lint failure evidence. [decfd9ab](https://github.com/openclaw/openclaw/commit/decfd9abba980996bf50fb1fd96599d88597639b) Thanks Peter Steinberger.
- Align WhatsApp admission and history finalization. [df47b734](https://github.com/openclaw/openclaw/commit/df47b734490bc32beaf4e1568d9232d9d0a9b929) Thanks @mcaxtr.
- Fit hourly test plans within the row cap. [df582a40](https://github.com/openclaw/openclaw/commit/df582a4010d5d244ff100b2c8d363ebee43a0fcf) Thanks Peter Steinberger.
- Refresh tooling test timing weights. [e072e5af](https://github.com/openclaw/openclaw/commit/e072e5af596bfe39394e3638d45e1945354bc0d5) Thanks @steipete.
- Start Node tests alongside baseline checks. [e337075d](https://github.com/openclaw/openclaw/commit/e337075dd7c0b60e164e78cbad75ac722dc5fbd9) Thanks Peter Steinberger.
- Focus PR lint on changed files and dependent code. [e3afd941](https://github.com/openclaw/openclaw/commit/e3afd941d9c802e14a891437b0fef0d508b04b34) Thanks Peter Steinberger.
- Consolidate configuration and state helpers. [e5478ff3](https://github.com/openclaw/openclaw/commit/e5478ff3585db9d54debbad9906a645337d1b1c0) Thanks @steipete.
- Simplify Gateway HTTP admission helpers. [e693324a](https://github.com/openclaw/openclaw/commit/e693324ad36ff113bd378afd9ca1f67ff90ad40f) Thanks @steipete.
- Reuse completed lint work for hosted SDK caches. [e912d7cd](https://github.com/openclaw/openclaw/commit/e912d7cd27b7973724f48942d4d416a3f05629b0) Thanks Peter Steinberger.
- Isolate session model override state. [ea400438](https://github.com/openclaw/openclaw/commit/ea40043818202d5fb767f11a7ff9d2d6a2bc3c98) Thanks Peter Steinberger.
- Show CI infrastructure recovery warnings. [eac43f0c](https://github.com/openclaw/openclaw/commit/eac43f0cff4b666f2765ffb66fd90e6a3b47159b) Thanks Peter Steinberger.
- Remove real-time waits from skill-refresh tests. [ec4e102c](https://github.com/openclaw/openclaw/commit/ec4e102c8720ca386929100c0150cdb965346a13) Thanks Peter Steinberger.
- Record completed Node test-shard execution. [eedec20b](https://github.com/openclaw/openclaw/commit/eedec20b104d27684541949ca9b2bf1b314a397a) Thanks Peter Steinberger.
- Collect precise PR test timing samples. [ef681882](https://github.com/openclaw/openclaw/commit/ef681882ffe9781c814dc5b374dc10ddfe414e37) Thanks Peter Steinberger.
- Use public SDK error helpers in Codex. [f2532a05](https://github.com/openclaw/openclaw/commit/f2532a051f7a2c73731f7725184bff33b3b14f1f) Thanks Peter Steinberger.
- Avoid duplicate CI coercion scans. [f45ac182](https://github.com/openclaw/openclaw/commit/f45ac1829883cf3525015d105aa9a51972f86193) Thanks Peter Steinberger.
- Extract session roster projection helpers. [f8ae4fc4](https://github.com/openclaw/openclaw/commit/f8ae4fc466a98cb028bf2b1b644067166a8b9d8a) Thanks Peter Steinberger.
- Verify session identity in thinking-setting tests. [fbaafc38](https://github.com/openclaw/openclaw/commit/fbaafc381f79e28035d6e6feb0dafd9d214ec8e8) Thanks Peter Steinberger.
- Simplify widget test handle notation. [fde9ed68](https://github.com/openclaw/openclaw/commit/fde9ed68b1d4be572e43e519816c3c27c2f88708) Thanks Peter Steinberger.
- Verify follow-up completion waits for cleanup. [#115969](https://github.com/openclaw/openclaw/pull/115969) Thanks @vincentkoc.
- Simplify temporary-directory cleanup in auth tests. [#118084](https://github.com/openclaw/openclaw/pull/118084) Thanks @steipete.
- Share exclusive QA smoke workers consistently. [#120374](https://github.com/openclaw/openclaw/pull/120374) Thanks @vincentkoc, @xyrolle.
- Preserve failed Gateway benchmark reports. [#138016](https://github.com/openclaw/openclaw/pull/138016) Thanks @steipete.
- Replace audit timeout sleeps with budget coverage. [#138203](https://github.com/openclaw/openclaw/pull/138203) Thanks @steipete.
- Prepare dormant Android Cloudflare Access session foundations. [#147061](https://github.com/openclaw/openclaw/pull/147061) Thanks @vincentkoc.
- Prepare Apple connections for asynchronous authorization. [#147070](https://github.com/openclaw/openclaw/pull/147070) Thanks @vincentkoc.
- Prepare Android connections for later access reauthentication. [#147094](https://github.com/openclaw/openclaw/pull/147094) Thanks @vincentkoc.
- Test thread-binding duration text boundaries. [#148154](https://github.com/openclaw/openclaw/pull/148154) Thanks @vincentkoc.
- Reuse Android TalkMode synthesis fixtures. [#148326](https://github.com/openclaw/openclaw/pull/148326) Thanks @vincentkoc, @steipete.
- Centralize tool-description exclusion rules. [#148966](https://github.com/openclaw/openclaw/pull/148966) Thanks @vincentkoc.
- Prepare corrections without rewriting incoming review verdicts. [#149068](https://github.com/openclaw/openclaw/pull/149068) Thanks @fuller-stack-dev.
- Share configuration documentation wildcard traversal. [#149094](https://github.com/openclaw/openclaw/pull/149094) Thanks @vincentkoc.
- Run MCP checks for tool-owner changes. [#149696](https://github.com/openclaw/openclaw/pull/149696) Thanks @steipete.
- Avoid unnecessary tool-validation lookup sets. [#152066](https://github.com/openclaw/openclaw/pull/152066) Thanks @vincentkoc.
- Share JSONL line selection for reads and edits. [#152323](https://github.com/openclaw/openclaw/pull/152323) Thanks @vincentkoc.
- Reduce locale catalog hashing overhead. [#152355](https://github.com/openclaw/openclaw/pull/152355) Thanks @vincentkoc.
- Reuse source hashes across bulk translation checks. [#152657](https://github.com/openclaw/openclaw/pull/152657) Thanks @vincentkoc.
- Move legacy sandbox imports to the shared writer. [#153652](https://github.com/openclaw/openclaw/pull/153652) Thanks @steipete.
- Centralize session-group default replacement. [#154017](https://github.com/openclaw/openclaw/pull/154017) Thanks @vyctorbrzezowski, @steipete, @fuller-stack-dev, @vincentkoc, @shakkernerd.
- Share native host-tool execution helpers. [#154217](https://github.com/openclaw/openclaw/pull/154217) Thanks @sjf-oa, @sjf.
- Share MCP and scheduled-job change construction. [#154680](https://github.com/openclaw/openclaw/pull/154680) Thanks @vincentkoc.
- Assert exact Codex interrupt identity in tests. [#154853](https://github.com/openclaw/openclaw/pull/154853) Thanks @steipete.
- Share QA Lab HTTP readiness polling. [#154879](https://github.com/openclaw/openclaw/pull/154879) Thanks @vincentkoc.
- Reuse prepared schema-version statements. [#154946](https://github.com/openclaw/openclaw/pull/154946) Thanks @steipete.
- Consolidate channel registry tests. [#155014](https://github.com/openclaw/openclaw/pull/155014) Thanks @steipete.
- Reduce unnecessary memory-helper imports. [#155043](https://github.com/openclaw/openclaw/pull/155043) Thanks @steipete.
- Reduce Vite test setup and preserve mock roster metadata. [#155044](https://github.com/openclaw/openclaw/pull/155044) Thanks @steipete.
- Share sandbox allowlist diagnostic checks. [#155074](https://github.com/openclaw/openclaw/pull/155074) Thanks @vincentkoc.
- Consolidate cron policy-field normalization. [#155076](https://github.com/openclaw/openclaw/pull/155076) Thanks @vincentkoc.
- Share Slack chart and table QA scenario construction. [#155096](https://github.com/openclaw/openclaw/pull/155096) Thanks @vincentkoc.
- Move SDK and Workboard type tests into compiler contracts. [#155099](https://github.com/openclaw/openclaw/pull/155099) Thanks @steipete.
- Exclude non-runnable tests before process planning. [#155107](https://github.com/openclaw/openclaw/pull/155107) Thanks @steipete.
- Share Signal transport port reservation logic. [#155166](https://github.com/openclaw/openclaw/pull/155166) Thanks @vincentkoc.
- Share Doctor preview warning aggregation. [#155261](https://github.com/openclaw/openclaw/pull/155261) Thanks @vincentkoc.
- Explain Vitest cache restoration and invalidation. [#155444](https://github.com/openclaw/openclaw/pull/155444) Thanks @freeqaz-openai, @steipete.
- Register existing Mattermost delivery tests. [#155470](https://github.com/openclaw/openclaw/pull/155470) Thanks @romneyda.
- Register existing Teams restart-reply coverage. [#155472](https://github.com/openclaw/openclaw/pull/155472) Thanks @romneyda.
- Simplify Channels view state wiring. [#155485](https://github.com/openclaw/openclaw/pull/155485) Thanks @romneyda.
- Simplify Skills view state wiring. [#155487](https://github.com/openclaw/openclaw/pull/155487) Thanks @romneyda.
- Reduce waits in ACP ordering tests. [#155504](https://github.com/openclaw/openclaw/pull/155504) Thanks @romneyda.
- Reuse dependency parsing in import-boundary tests. [#155506](https://github.com/openclaw/openclaw/pull/155506) Thanks @romneyda.
- Reuse the Git coauthor test database fixture. [#155507](https://github.com/openclaw/openclaw/pull/155507) Thanks @romneyda.
- Narrow UI CI selection and stabilize cancellation tests. [#155566](https://github.com/openclaw/openclaw/pull/155566) Thanks @steipete.
- Remove redundant CI planning test assertions. [#155637](https://github.com/openclaw/openclaw/pull/155637) Thanks @steipete.
- Limit Security Review checkout to required inputs. [#155743](https://github.com/openclaw/openclaw/pull/155743) Thanks @steipete.
- Export plugin inventory from an exact Git commit with Git 2.45 or newer. [#155775](https://github.com/openclaw/openclaw/pull/155775) Thanks @vincentkoc.
- Remove test-only subagent registry dependency overrides. [#155796](https://github.com/openclaw/openclaw/pull/155796) Thanks @steipete.
- Expose bounded Windows Testbox subprocess failure details. [#155866](https://github.com/openclaw/openclaw/pull/155866) Thanks @vincentkoc.
- Add opt-in Crabline Slack callback integration coverage. [#155890](https://github.com/openclaw/openclaw/pull/155890) Thanks @vincentkoc.
- Add deterministic Telegram delivery-failure testing. [#155899](https://github.com/openclaw/openclaw/pull/155899) Thanks @obviyus, @steipete.
- Retain Windows wrapper startup diagnostics on assertion failure. [#155905](https://github.com/openclaw/openclaw/pull/155905) Thanks @vincentkoc.
- Explicitly allow fresh npm fixtures in install-smoke packing. [#155917](https://github.com/openclaw/openclaw/pull/155917) Thanks @steipete.
- Prepare the large-index worktree cleanup test runtime. [#155928](https://github.com/openclaw/openclaw/pull/155928) Thanks @steipete.
- Record Doctor fixture settlement diagnostics. [#155944](https://github.com/openclaw/openclaw/pull/155944) Thanks @vincentkoc.
- Reuse the prepared CLI in backup process tests. [#155945](https://github.com/openclaw/openclaw/pull/155945) Thanks @steipete.
- Check plugin compatibility deadlines before release validation. [#155971](https://github.com/openclaw/openclaw/pull/155971) Thanks @RomneyDa.
- Remove unused package acceptance profile test setup. [#155972](https://github.com/openclaw/openclaw/pull/155972) Thanks @steipete.
- Prepare snapshot ownership test subprocess imports. [#155973](https://github.com/openclaw/openclaw/pull/155973) Thanks @steipete.
- Consolidate chat failure transcript test fixtures. [#155974](https://github.com/openclaw/openclaw/pull/155974) Thanks @steipete.
- Reuse Gateway setup and readbacks in UI tests. [#155979](https://github.com/openclaw/openclaw/pull/155979) Thanks @steipete.
- Reduce test fixture overhead and rebalance Node CI jobs. [#155985](https://github.com/openclaw/openclaw/pull/155985) Thanks @steipete.
- Move tool configuration checks to compiler contracts. [#156004](https://github.com/openclaw/openclaw/pull/156004) Thanks @steipete.
- Synchronize Android resources for the existing English Decision Evaluation label. [#156006](https://github.com/openclaw/openclaw/pull/156006)
- Reduce complete-buffer assertion cost in llama.cpp tests. [#156010](https://github.com/openclaw/openclaw/pull/156010) Thanks @steipete.
- Prepare test children before execution deadlines. [#156011](https://github.com/openclaw/openclaw/pull/156011) Thanks @steipete.
- Move Kysely type checks into compiler contracts. [#156012](https://github.com/openclaw/openclaw/pull/156012) Thanks @steipete.
- Emit elapsed per-file tooling test timings. [#156013](https://github.com/openclaw/openclaw/pull/156013) Thanks @steipete.
- Reduce readiness polling delays in image-loading tests. [#156022](https://github.com/openclaw/openclaw/pull/156022) Thanks @steipete.
- Move shared harness tests beside their implementation. [#156027](https://github.com/openclaw/openclaw/pull/156027) Thanks @sjf-oa, @sjf.
- Make Doctor's existing legacy main-session repair choice explicit. [#156034](https://github.com/openclaw/openclaw/pull/156034) Thanks @steipete.
- Reuse prepared session-store lookup keys. [#156035](https://github.com/openclaw/openclaw/pull/156035) Thanks @steipete.
- Run independent activity-icon browser tests concurrently. [#156042](https://github.com/openclaw/openclaw/pull/156042) Thanks @steipete.
- Share voice-call realtime handler test fixtures. [#156045](https://github.com/openclaw/openclaw/pull/156045) Thanks @steipete.
- Share the Docker package build-context test probe. [#156047](https://github.com/openclaw/openclaw/pull/156047) Thanks @steipete.
- Split long lint and test-type checks across CI jobs. [#156059](https://github.com/openclaw/openclaw/pull/156059) Thanks @steipete.
- Consolidate existing Gateway session-method policy. [#156071](https://github.com/openclaw/openclaw/pull/156071) Thanks @steipete.
- Reuse Ollama stream fixtures and remove a redundant simulation. [#156073](https://github.com/openclaw/openclaw/pull/156073) Thanks @steipete.
- Match Node CI capacity to test memory requirements. [#156079](https://github.com/openclaw/openclaw/pull/156079) Thanks @steipete.
- Remove duplicate OpenAI request tests. [#156083](https://github.com/openclaw/openclaw/pull/156083) Thanks @fuller-stack-dev.
- Reuse Gradle caches and redistribute Android CI work with retained coverage. [#156084](https://github.com/openclaw/openclaw/pull/156084) Thanks @steipete.
- Test media-history trimming through agent subscriptions. [#156087](https://github.com/openclaw/openclaw/pull/156087) Thanks @steipete.
- Reduce Workboard notification replay test setup. [#156114](https://github.com/openclaw/openclaw/pull/156114) Thanks @steipete.
- Reuse a verified cold-storage lifecycle test fixture. [#156128](https://github.com/openclaw/openclaw/pull/156128) Thanks @steipete.
- Reduce large-buffer comparison overhead in plugin tests. [#156141](https://github.com/openclaw/openclaw/pull/156141) Thanks @steipete.
- Report local commit availability when merge receipt verification fails. [#156143](https://github.com/openclaw/openclaw/pull/156143) Thanks @steipete.
- Share repeated Talk relay test setup. [#156149](https://github.com/openclaw/openclaw/pull/156149) Thanks @steipete.
- Shorten deliberate cleanup waits in memory ownership tests. [#156152](https://github.com/openclaw/openclaw/pull/156152) Thanks @RomneyDa.
- Skip bundled plugin discovery in isolated cron tests. [#156153](https://github.com/openclaw/openclaw/pull/156153) Thanks @RomneyDa.
- Reuse a committed Git seed in plugin installation tests. [#156154](https://github.com/openclaw/openclaw/pull/156154) Thanks @RomneyDa.
- Link the compiled SDK fixture in native-loader tests. [#156156](https://github.com/openclaw/openclaw/pull/156156) Thanks @RomneyDa.
- Reuse Google Live bridge test fixtures. [#156161](https://github.com/openclaw/openclaw/pull/156161) Thanks @steipete.
- Simplify Dashboard defaults and pane navigation internals. [#156164](https://github.com/openclaw/openclaw/pull/156164) Thanks @steipete.
- Consolidate native model-selection rollback tests. [#156169](https://github.com/openclaw/openclaw/pull/156169) Thanks @steipete.
- Introduce the Astra/high Autoreview default, later replaced by GPT-6 Sol. [#156175](https://github.com/openclaw/openclaw/pull/156175) Thanks @vincentkoc.
- Share native harness output and transcript helpers. [#156187](https://github.com/openclaw/openclaw/pull/156187) Thanks @sjf-oa, @sjf.
- Reduce Control UI test overhead and Bun diagnostic memory growth. [#156220](https://github.com/openclaw/openclaw/pull/156220) Thanks @steipete.
- Batch pattern matching to reduce cold test-planning work. [#156234](https://github.com/openclaw/openclaw/pull/156234) Thanks @steipete.
- Shorten mock draft-proof shell waits. [#156242](https://github.com/openclaw/openclaw/pull/156242) Thanks @RomneyDa.
- Shorten CLI cleanup test delays. [#156243](https://github.com/openclaw/openclaw/pull/156243) Thanks @RomneyDa.
- Shorten Parallels test deadlines with descendant-readiness guards. [#156244](https://github.com/openclaw/openclaw/pull/156244) Thanks @RomneyDa.
- Shorten plugin release deadline test delays. [#156245](https://github.com/openclaw/openclaw/pull/156245) Thanks @RomneyDa.
- Reduce synthetic backup archive test setup. [#156261](https://github.com/openclaw/openclaw/pull/156261) Thanks @steipete.
- Update fs-safe and matching native helpers to 0.18.2. [#156262](https://github.com/openclaw/openclaw/pull/156262) Thanks @steipete.
- Consolidate plugin subsystem contracts and helpers. [#156274](https://github.com/openclaw/openclaw/pull/156274) Thanks @steipete.
- Use independent provider-picker test expectations. [#156275](https://github.com/openclaw/openclaw/pull/156275) Thanks @steipete.
- Skip irrelevant repository automation before runner allocation. [#156293](https://github.com/openclaw/openclaw/pull/156293) Thanks @steipete.
- Consolidate Codex and provider plugin internals. [#156297](https://github.com/openclaw/openclaw/pull/156297) Thanks @steipete.
- Consolidate agent execution and tool helpers. [#156311](https://github.com/openclaw/openclaw/pull/156311) Thanks @steipete.
- Remove duplicate Gateway node-admission coverage. [#156325](https://github.com/openclaw/openclaw/pull/156325) Thanks @steipete.
- Remove duplicated Doctor mock cases. [#156337](https://github.com/openclaw/openclaw/pull/156337) Thanks @steipete.
- Remove duplicate session-history sanitizer tests. [#156351](https://github.com/openclaw/openclaw/pull/156351) Thanks @steipete.
- Consolidate existing model-provider diagnostic checks. [#156361](https://github.com/openclaw/openclaw/pull/156361) Thanks @vincentkoc.
- Share session-tool schemas and derive their type contracts. [#156365](https://github.com/openclaw/openclaw/pull/156365) Thanks @RomneyDa.
- Derive channel configuration types from existing schemas. [#156367](https://github.com/openclaw/openclaw/pull/156367) Thanks @RomneyDa.
- Derive auth and security authoring types from existing schemas. [#156368](https://github.com/openclaw/openclaw/pull/156368) Thanks @RomneyDa.
- Derive root configuration authoring types from existing schemas. [#156369](https://github.com/openclaw/openclaw/pull/156369) Thanks @RomneyDa.
- Cancel remaining eligible PR checks while preserving failure evidence. [#156375](https://github.com/openclaw/openclaw/pull/156375) Thanks @steipete.
- Simplify automatic-reply and channel internals. [#156377](https://github.com/openclaw/openclaw/pull/156377) Thanks @steipete.
- Strengthen and consolidate Mattermost adapter tests. [#156388](https://github.com/openclaw/openclaw/pull/156388) Thanks @vincentkoc, @steipete.
- Verify older npm candidates with historical plugin ownership and sanitize packed declarations. [#156391](https://github.com/openclaw/openclaw/pull/156391) Thanks @RomneyDa.
- Retry individual release-validation jobs before unrelated workflows finish. [#156395](https://github.com/openclaw/openclaw/pull/156395) Thanks @steipete.
- Verify Anthropic rejection details in streaming tests. [#156403](https://github.com/openclaw/openclaw/pull/156403) Thanks @steipete.
- Consolidate media provider internals. [#156406](https://github.com/openclaw/openclaw/pull/156406) Thanks @steipete.
- Shorten Telegram media retry tests with controlled timers. [#156413](https://github.com/openclaw/openclaw/pull/156413) Thanks @steipete.
- Reuse single-turn agent-loop test streams. [#156414](https://github.com/openclaw/openclaw/pull/156414) Thanks @steipete.
- Run report ownership tests with bounded concurrency. [#156418](https://github.com/openclaw/openclaw/pull/156418) Thanks @steipete.
- Use HTTP completion to synchronize Telegram typing tests. [#156454](https://github.com/openclaw/openclaw/pull/156454) Thanks @steipete.
- Strengthen late-abort regression synchronization. [#156460](https://github.com/openclaw/openclaw/pull/156460) Thanks @steipete.
- Allow one automatic retry wave for predeclared intermittent validation jobs. [#156463](https://github.com/openclaw/openclaw/pull/156463) Thanks @steipete.
- Consolidate Doctor lint selection tests. [#156488](https://github.com/openclaw/openclaw/pull/156488) Thanks @steipete.
- Use strict byte equality in Matrix archive tests. [#156490](https://github.com/openclaw/openclaw/pull/156490) Thanks @steipete.
- Share existing canonical session-row selection. [#156495](https://github.com/openclaw/openclaw/pull/156495) Thanks @steipete.
- Retain Settings entrance test failure diagnostics. [#156500](https://github.com/openclaw/openclaw/pull/156500) Thanks @steipete.
- Consolidate repeated infrastructure logic. [#156511](https://github.com/openclaw/openclaw/pull/156511) Thanks @steipete.
- Define the catalog v2 schema with inline pricing. [#156518](https://github.com/openclaw/openclaw/pull/156518) Thanks @vincentkoc.
- Run independent publication test fixtures concurrently. [#156527](https://github.com/openclaw/openclaw/pull/156527) Thanks @steipete.
- Add opt-in catalog v2 generation alongside unchanged v1 output. [#156530](https://github.com/openclaw/openclaw/pull/156530) Thanks @vincentkoc.
- Register existing English Android personal-instructions strings. [#156534](https://github.com/openclaw/openclaw/pull/156534)
- Reuse shared CLI process-exit test fixtures. [#156550](https://github.com/openclaw/openclaw/pull/156550) Thanks @steipete.
- Avoid unnecessary worker compilation in local audio tests. [#156557](https://github.com/openclaw/openclaw/pull/156557) Thanks @steipete.
- Consolidate LM Studio preload tests and join cleanup. [#156558](https://github.com/openclaw/openclaw/pull/156558) Thanks @vincentkoc, @steipete.
- Strengthen Twitch tests and remove redundant cases. [#156573](https://github.com/openclaw/openclaw/pull/156573) Thanks @vincentkoc, @steipete.
- Consolidate Discord transport and interaction internals. [#156579](https://github.com/openclaw/openclaw/pull/156579) Thanks @steipete.
- Remove repeated Cron and Gateway test setup. [#156586](https://github.com/openclaw/openclaw/pull/156586) Thanks @steipete.
- Run isolated Git workflow tests two at a time. [#156587](https://github.com/openclaw/openclaw/pull/156587) Thanks @steipete.
- Verify session reclamation worker completion directly. [#156591](https://github.com/openclaw/openclaw/pull/156591) Thanks @steipete.
- Consolidate filesystem reads and durable file creation. [#156607](https://github.com/openclaw/openclaw/pull/156607) Thanks @steipete.
- Reuse package manifests during managed npm plugin recovery. [#156618](https://github.com/openclaw/openclaw/pull/156618) Thanks @vincentkoc.
- Reuse shared SMS account test fixtures. [#156619](https://github.com/openclaw/openclaw/pull/156619) Thanks @steipete.
- Consolidate Doctor diagnostics and CLI internals. [#156622](https://github.com/openclaw/openclaw/pull/156622) Thanks @steipete.
- Reuse Gateway fixtures for config-read and rejection tests. [#156637](https://github.com/openclaw/openclaw/pull/156637) Thanks @steipete.
- Remove unused session-abort run exclusions. [#156639](https://github.com/openclaw/openclaw/pull/156639) Thanks @steipete.
- Share QA confidence-report test fixtures. [#156644](https://github.com/openclaw/openclaw/pull/156644) Thanks @steipete.
- Reduce skill-upload test assertion overhead. [#156655](https://github.com/openclaw/openclaw/pull/156655) Thanks @steipete.
- Share session lifecycle persistence test fixtures. [#156658](https://github.com/openclaw/openclaw/pull/156658) Thanks @steipete.
- Use native byte equality in APFS clone tests. [#156662](https://github.com/openclaw/openclaw/pull/156662) Thanks @steipete.
- Split large tests and extract project-state worker dispatch. [#156677](https://github.com/openclaw/openclaw/pull/156677) Thanks @steipete.
- Batch catalog-publication test fixture writes. [#156679](https://github.com/openclaw/openclaw/pull/156679) Thanks @steipete.
- Simplify migration and upgrade compatibility internals. [#156682](https://github.com/openclaw/openclaw/pull/156682) Thanks @steipete.
- Run intact source-version upgrade checks in parallel. [#156717](https://github.com/openclaw/openclaw/pull/156717) Thanks @steipete.
- Reuse GitHub Actions board test setup. [#156718](https://github.com/openclaw/openclaw/pull/156718) Thanks @steipete.
- Select PR tests by affected source and dependency consumers. [#156729](https://github.com/openclaw/openclaw/pull/156729) Thanks @steipete.
- Consolidate Comfy and Fal provider tests. [#156731](https://github.com/openclaw/openclaw/pull/156731) Thanks @vincentkoc, @steipete.
- Consolidate shared Control UI components and libraries. [#156740](https://github.com/openclaw/openclaw/pull/156740) Thanks @steipete.
- Consolidate Browser plugin helpers and remove private forwarding modules. [#156742](https://github.com/openclaw/openclaw/pull/156742) Thanks @steipete.
- Shorten the child-session error browser test with controlled time. [#156745](https://github.com/openclaw/openclaw/pull/156745) Thanks @steipete.
- Consolidate Telegram and WhatsApp transport helpers. [#156752](https://github.com/openclaw/openclaw/pull/156752) Thanks @steipete.
- Consolidate Gateway and worker internals. [#156759](https://github.com/openclaw/openclaw/pull/156759) Thanks @steipete.
- Set Autoreview to GPT-6 Sol/high with Luna retry for access failures. [#156768](https://github.com/openclaw/openclaw/pull/156768) Thanks @vincentkoc.
- Consolidate Slack event and delivery internals. [#156773](https://github.com/openclaw/openclaw/pull/156773) Thanks @steipete.
- Refresh generated chat-status translation records. [#156775](https://github.com/openclaw/openclaw/pull/156775)
- Consolidate Matrix account, verification and delivery internals. [#156777](https://github.com/openclaw/openclaw/pull/156777) Thanks @steipete.
- Introduce hourly main CI with opt-in per-push validation. [#156783](https://github.com/openclaw/openclaw/pull/156783) Thanks @vincentkoc.
- Move transcript reconciliation coordination into existing workers. [#156788](https://github.com/openclaw/openclaw/pull/156788) Thanks @steipete.
- Restore strict lint for maintenance and state modules. [#156809](https://github.com/openclaw/openclaw/pull/156809) Thanks @steipete.
- Consolidate CLI TCP port parsing. [#156815](https://github.com/openclaw/openclaw/pull/156815) Thanks @steipete.
- Avoid unrelated model preparation in the Gateway reload context test. [#156823](https://github.com/openclaw/openclaw/pull/156823) Thanks @steipete.
- Consolidate Feishu registration and delivery internals. [#156832](https://github.com/openclaw/openclaw/pull/156832) Thanks @steipete.
- Share existing Feishu chat-read authorization. [#156846](https://github.com/openclaw/openclaw/pull/156846) Thanks @vincentkoc.
- Skip dependency setup for proven npm-lock CI no-ops. [#156857](https://github.com/openclaw/openclaw/pull/156857) Thanks @freeqaz-openai, @steipete.
- Consolidate shared memory plugin implementation. [#156867](https://github.com/openclaw/openclaw/pull/156867) Thanks @steipete.
- Align prior-release metadata and updater compatibility bridges. [#156869](https://github.com/openclaw/openclaw/pull/156869) Thanks @steipete, @coygeek.
- Reuse session fixtures in finalize integration tests. [#156877](https://github.com/openclaw/openclaw/pull/156877) Thanks @steipete.
- Reuse SQLite readers in node provisioning tests. [#156889](https://github.com/openclaw/openclaw/pull/156889) Thanks @steipete.
- Reuse Active Memory summary test fixtures. [#156894](https://github.com/openclaw/openclaw/pull/156894) Thanks @steipete.
- Reuse SQLite readers across worker RPC tests. [#156913](https://github.com/openclaw/openclaw/pull/156913) Thanks @steipete.
- Refresh generated Control UI translation memory. [#156915](https://github.com/openclaw/openclaw/pull/156915)
- Avoid full deadline waits in invalid anchor-receipt tests. [#156928](https://github.com/openclaw/openclaw/pull/156928) Thanks @steipete.
- Simplify command implementations and shared diagnostics. [#156931](https://github.com/openclaw/openclaw/pull/156931) Thanks @steipete.
- Shorten intentional Code Mode metadata timeout tests. [#156942](https://github.com/openclaw/openclaw/pull/156942) Thanks @steipete.
- Consolidate five bundled chat transports. [#156952](https://github.com/openclaw/openclaw/pull/156952) Thanks @steipete.
- Consolidate duplicate idle-flush tests. [#156963](https://github.com/openclaw/openclaw/pull/156963) Thanks @steipete.
- Consolidate MCP stdio shutdown tests. [#156973](https://github.com/openclaw/openclaw/pull/156973) Thanks @steipete.
- Consolidate auto-reply internals. [#157000](https://github.com/openclaw/openclaw/pull/157000) Thanks @steipete.
- Share existing meeting audio write-completion logic. [#157006](https://github.com/openclaw/openclaw/pull/157006) Thanks @vincentkoc.
- Advance virtual time in bulk-delete browser tests. [#157017](https://github.com/openclaw/openclaw/pull/157017) Thanks @steipete.
- Split updater CLI tests for independent scheduling. [#157018](https://github.com/openclaw/openclaw/pull/157018) Thanks @steipete.
- Split Gateway session-creation tests into focused suites. [#157022](https://github.com/openclaw/openclaw/pull/157022) Thanks @steipete.
- Introduce an intermediate Kova CPU-accounting evaluator pin, later updated. [#157029](https://github.com/openclaw/openclaw/pull/157029) Thanks @RomneyDa.
- Share declaration validation in boundary lint checks. [#157040](https://github.com/openclaw/openclaw/pull/157040) Thanks @vincentkoc.
- Reduce descendant-session and Codex recovery test overhead. [#157045](https://github.com/openclaw/openclaw/pull/157045) Thanks @steipete.
- Consolidate infrastructure helpers. [#157048](https://github.com/openclaw/openclaw/pull/157048) Thanks @steipete.
- Share Wear chat-history test fixtures. [#157058](https://github.com/openclaw/openclaw/pull/157058) Thanks @steipete.
- Qualify plugin cold-import CPU and memory reports. [#157071](https://github.com/openclaw/openclaw/pull/157071) Thanks @vincentkoc.
- Refresh generated translation metadata. [#157072](https://github.com/openclaw/openclaw/pull/157072)
- Consolidate Codex harness helpers. [#157080](https://github.com/openclaw/openclaw/pull/157080) Thanks @steipete.
- Record intentional macOS update withdrawals during release closeout. [#157082](https://github.com/openclaw/openclaw/pull/157082) Thanks @steipete, @coygeek.
- Split Doctor health integration tests into smaller suites. [#157083](https://github.com/openclaw/openclaw/pull/157083) Thanks @steipete.
- Batch more paths in staged-content checks. [#157084](https://github.com/openclaw/openclaw/pull/157084) Thanks @steipete.
- Test existing provider ownership during plugin replacement. [#157090](https://github.com/openclaw/openclaw/pull/157090) Thanks @steipete.
- Remove stale Android Talk translation resources. [#157094](https://github.com/openclaw/openclaw/pull/157094)
- Simplify LINE, Voice Call, Reef and Workboard internals. [#157099](https://github.com/openclaw/openclaw/pull/157099) Thanks @steipete.
- Refresh generated translation memory for Settings recovery. [#157110](https://github.com/openclaw/openclaw/pull/157110)
- Retry temporary notarization failures with bounded waits and retained submission identity. [#157116](https://github.com/openclaw/openclaw/pull/157116) Thanks @steipete, @coygeek.
- Refresh generated paused-draft translation records. [#157125](https://github.com/openclaw/openclaw/pull/157125)
- Separate transcript media checks from transport-host imports. [#157136](https://github.com/openclaw/openclaw/pull/157136) Thanks @steipete, @Kimiyu-186, Free Wortley.
- Consolidate service, node-host, task and terminal internals. [#157137](https://github.com/openclaw/openclaw/pull/157137) Thanks @steipete.
- Refresh generated agent-tool translation memory. [#157139](https://github.com/openclaw/openclaw/pull/157139)
- Consolidate configuration, secrets and transcript helpers. [#157146](https://github.com/openclaw/openclaw/pull/157146) Thanks @steipete.
- Consolidate QA Lab scenarios and reporting helpers. [#157155](https://github.com/openclaw/openclaw/pull/157155) Thanks @steipete.
- Refresh generated session-filter empty-state translation records. [#157156](https://github.com/openclaw/openclaw/pull/157156)
- Share existing memory-pressure threshold selection. [#157164](https://github.com/openclaw/openclaw/pull/157164) Thanks @vincentkoc.
- Share existing active-run status priority. [#157168](https://github.com/openclaw/openclaw/pull/157168) Thanks @steipete.
- Simplify Discord and Slack reply-context handling. [#157185](https://github.com/openclaw/openclaw/pull/157185) Thanks @steipete.
- Remove obsolete compaction translation records. [#157188](https://github.com/openclaw/openclaw/pull/157188)
- Share existing command-approval rule identity logic. [#157198](https://github.com/openclaw/openclaw/pull/157198) Thanks @vincentkoc.
- Share CLI diagnostics test setup. [#157201](https://github.com/openclaw/openclaw/pull/157201) Thanks @steipete.
- Consolidate channel, routing, pairing and hook helpers. [#157208](https://github.com/openclaw/openclaw/pull/157208) Thanks @steipete.
- Use focused ElevenLabs test setup. [#157217](https://github.com/openclaw/openclaw/pull/157217) Thanks @steipete.
- Reuse existing Feishu group session-scope policy. [#157246](https://github.com/openclaw/openclaw/pull/157246) Thanks @vincentkoc.
- Share Matrix direct-room CLI output projection. [#157260](https://github.com/openclaw/openclaw/pull/157260) Thanks @vincentkoc.
- Centralize existing SQLite checkpoint execution. [#157263](https://github.com/openclaw/openclaw/pull/157263) Thanks @steipete.
- Reuse compiler state and reduce selected guard and UI test overhead. [#157265](https://github.com/openclaw/openclaw/pull/157265) Thanks @steipete.
- Remove pacing waits from Telegram HTTP conformance fixtures. [#157281](https://github.com/openclaw/openclaw/pull/157281) Thanks @steipete.
- Package private QA Gateway fixtures for installed candidates. [#157286](https://github.com/openclaw/openclaw/pull/157286) Thanks @steipete.
- Consolidate agent execution and recovery helpers. [#157294](https://github.com/openclaw/openclaw/pull/157294) Thanks @steipete.
- Add a local review-artifact ignore entry. [#157296](https://github.com/openclaw/openclaw/pull/157296) Thanks @steipete.
- Test catalog capture reuse, credential isolation and physical footprints. [#157300](https://github.com/openclaw/openclaw/pull/157300) Thanks @htuyer121, @RomneyDa, @goslingmanagment, @podulator, @chac4l, @villemac, @mmartoccia, @hurtlovewow, @msobrosa, @benlaube.
- Reuse existing Matrix startup account-key normalization. [#157310](https://github.com/openclaw/openclaw/pull/157310) Thanks @vincentkoc.
- Refresh locale metadata hashes and timestamps. [#157311](https://github.com/openclaw/openclaw/pull/157311)
- Prepare plugin storage commands independently. [#157333](https://github.com/openclaw/openclaw/pull/157333) Thanks @steipete.
- Skip futile skill-description fitting searches. [#157343](https://github.com/openclaw/openclaw/pull/157343) Thanks @vincentkoc.
- Consolidate overlapping MCP lifecycle tests. [#157360](https://github.com/openclaw/openclaw/pull/157360) Thanks @steipete.
- Retire LINE's unused private Express webhook adapter. [#157369](https://github.com/openclaw/openclaw/pull/157369) Thanks @steipete.
- Preserve selective type checks across hosted CI stripes. [#157373](https://github.com/openclaw/openclaw/pull/157373) Thanks @steipete.
- Refresh generated Diagnose update translation records. [#157378](https://github.com/openclaw/openclaw/pull/157378)
- Consolidate model-selection transcript routing. [#157382](https://github.com/openclaw/openclaw/pull/157382) Thanks @vincentkoc.
- Consolidate unavailable cron delivery-target construction. [#157393](https://github.com/openclaw/openclaw/pull/157393) Thanks @vincentkoc.
- Advance the earlier Kova evaluator pin before its later CPU-accounting update. [#157402](https://github.com/openclaw/openclaw/pull/157402) Thanks @RomneyDa.
- Restore failover test lint compliance. [#157406](https://github.com/openclaw/openclaw/pull/157406) Thanks @steipete.
- Reduce Firecrawl and Parallel test fixture startup work. [#157429](https://github.com/openclaw/openclaw/pull/157429) Thanks @steipete.
- Share bounded Claw metadata and manifest reading. [#157436](https://github.com/openclaw/openclaw/pull/157436) Thanks @vincentkoc.
- Refresh Control UI locale provenance metadata. [#157437](https://github.com/openclaw/openclaw/pull/157437)
- Retain PowerShell completion test startup diagnostics. [#157439](https://github.com/openclaw/openclaw/pull/157439) Thanks @vincentkoc.
- Share Feishu attachment test fixtures. [#157440](https://github.com/openclaw/openclaw/pull/157440) Thanks @steipete.
- Consolidate existing ACP runtime option validation. [#157446](https://github.com/openclaw/openclaw/pull/157446) Thanks @vincentkoc.
- Reuse Doctor's existing legacy vLLM parameter detector. [#157453](https://github.com/openclaw/openclaw/pull/157453) Thanks @vincentkoc.
- Add Apple transport handling for future browser-authorization requirements. [#157454](https://github.com/openclaw/openclaw/pull/157454) Thanks @vincentkoc.
- Share LINE message-context test defaults. [#157488](https://github.com/openclaw/openclaw/pull/157488) Thanks @steipete.
- Share Google Meet Doctor output handling. [#157490](https://github.com/openclaw/openclaw/pull/157490) Thanks @vincentkoc.
- Remove unused Android Work translation resources. [#157495](https://github.com/openclaw/openclaw/pull/157495)
- Defer session-cleanup imports until stateful test fixtures are entered. [#157515](https://github.com/openclaw/openclaw/pull/157515) Thanks @steipete.
- Relocate unchanged Apple Gateway error conversion for native lint. [#157516](https://github.com/openclaw/openclaw/pull/157516) Thanks @vincentkoc.
- Separate diagnostic liveness sampling from heartbeat ownership. [#157517](https://github.com/openclaw/openclaw/pull/157517) Thanks @steipete.
- Advance virtual time in chat lifecycle browser tests. [#157520](https://github.com/openclaw/openclaw/pull/157520) Thanks @steipete.
- Reduce historical Tasks maintenance snapshot construction overhead. [#157527](https://github.com/openclaw/openclaw/pull/157527) Thanks @steipete.
- Capture bounded integrity diagnostics for failed upgrade tests. [#157535](https://github.com/openclaw/openclaw/pull/157535) Thanks @vincentkoc.
- Share completed media response test fixtures. [#157540](https://github.com/openclaw/openclaw/pull/157540) Thanks @steipete.
- Skip empty database resets in historical native-task custody fixtures. [#157561](https://github.com/openclaw/openclaw/pull/157561) Thanks @steipete.
- Verify IRC Unicode chunking through loopback tests. [#157580](https://github.com/openclaw/openclaw/pull/157580) Thanks @steipete.
- Make background-exec regression coverage deterministic. [#157581](https://github.com/openclaw/openclaw/pull/157581) Thanks @steipete.
- Consolidate existing directory CLI table formatting. [#157585](https://github.com/openclaw/openclaw/pull/157585) Thanks @vincentkoc.
- Tighten prepared-reply media regression tests. [#157604](https://github.com/openclaw/openclaw/pull/157604) Thanks @steipete.
- Share wizard selection request construction. [#157607](https://github.com/openclaw/openclaw/pull/157607) Thanks @vincentkoc.
- Reuse existing Codex marketplace-reference selection. [#157621](https://github.com/openclaw/openclaw/pull/157621) Thanks @vincentkoc.
- Consolidate existing process error-handler registries. [#157632](https://github.com/openclaw/openclaw/pull/157632) Thanks @vincentkoc.
- Reuse native localization branch extraction. [#157636](https://github.com/openclaw/openclaw/pull/157636) Thanks @vincentkoc.
- Consolidate existing slash-command failure-result construction. [#157649](https://github.com/openclaw/openclaw/pull/157649) Thanks @vincentkoc.
- Shorten progress-test waits and align requester settlement fixtures. [#157653](https://github.com/openclaw/openclaw/pull/157653) Thanks @RomneyDa.
- Shorten artificial compiler waits in watchdog tests. [#157654](https://github.com/openclaw/openclaw/pull/157654) Thanks @RomneyDa.
- Shorten historical background-task browser proof recording pauses. [#157655](https://github.com/openclaw/openclaw/pull/157655) Thanks @RomneyDa.
- Shorten the worker-lifetime timeout test fixture. [#157656](https://github.com/openclaw/openclaw/pull/157656) Thanks @RomneyDa.
- Consolidate existing Mistral streaming text handling. [#157664](https://github.com/openclaw/openclaw/pull/157664) Thanks @vincentkoc.
- Reuse worktree recovery fixtures and qualify their Bun test route. [#157674](https://github.com/openclaw/openclaw/pull/157674) Thanks @steipete.
- Explain compiler and process-cleanup build failures. [#157677](https://github.com/openclaw/openclaw/pull/157677) Thanks @vincentkoc.
- Reuse prepared fixtures in selected slow core tests. [#157685](https://github.com/openclaw/openclaw/pull/157685) Thanks @steipete.
- Reduce MCP archive and worker test-fixture preparation. [#157689](https://github.com/openclaw/openclaw/pull/157689) Thanks @steipete.
- Consolidate existing Teams approval-card labels. [#157705](https://github.com/openclaw/openclaw/pull/157705) Thanks @vincentkoc.
- Consolidate stored Teams service-URL validation. [#157706](https://github.com/openclaw/openclaw/pull/157706) Thanks @vincentkoc.
- Skip empty-database clearing in historical completion-ownership tests. [#157707](https://github.com/openclaw/openclaw/pull/157707) Thanks @steipete.
- Reduce repeated Gateway and state test setup. [#157711](https://github.com/openclaw/openclaw/pull/157711) Thanks @steipete.
- Isolate existing desktop audio buffering for direct tests. [#157725](https://github.com/openclaw/openclaw/pull/157725) Thanks @vincentkoc.
- Reuse selected private Feishu requester bindings. [#157729](https://github.com/openclaw/openclaw/pull/157729) Thanks @vincentkoc.
- Select narrow PR checks from affected inputs. [#157740](https://github.com/openclaw/openclaw/pull/157740) Thanks @steipete.
- Consolidate CLI, ACP and logging internals. [#157748](https://github.com/openclaw/openclaw/pull/157748) Thanks @steipete.
- Restore the workspace test lint gate. [#157750](https://github.com/openclaw/openclaw/pull/157750) Thanks @steipete.
- Keep new CI runs admitted during release validation. [#157757](https://github.com/openclaw/openclaw/pull/157757) Thanks @RomneyDa.
- Skip empty historical task-ledger clearing in cron tests. [#157767](https://github.com/openclaw/openclaw/pull/157767) Thanks @steipete.
- Reuse Matrix bounded direct-room cache insertion. [#157775](https://github.com/openclaw/openclaw/pull/157775) Thanks @vincentkoc.
- Share existing pending Signal migration results. [#157777](https://github.com/openclaw/openclaw/pull/157777) Thanks @vincentkoc.
- Honor advertised Code Mode interfaces in live qualification prompts. [#157779](https://github.com/openclaw/openclaw/pull/157779) Thanks @RomneyDa.
- Reuse existing Twitch setup account selection. [#157787](https://github.com/openclaw/openclaw/pull/157787) Thanks @vincentkoc.
- Simplify existing Tlon group-summary notice handling. [#157789](https://github.com/openclaw/openclaw/pull/157789) Thanks @vincentkoc.
- Retain baseline startup diagnostics in upgrade tests. [#157793](https://github.com/openclaw/openclaw/pull/157793) Thanks @steipete.
- Reuse existing Mattermost DM retry-option selection. [#157800](https://github.com/openclaw/openclaw/pull/157800) Thanks @vincentkoc.
- Remove redundant Synology loopback-test pacing waits. [#157804](https://github.com/openclaw/openclaw/pull/157804) Thanks @steipete.
- Keep authentication test fixtures within existing file limits. [#157805](https://github.com/openclaw/openclaw/pull/157805) Thanks @steipete.
- Reuse shared Codex app-server contracts. [#157810](https://github.com/openclaw/openclaw/pull/157810) Thanks @sjf-oa, @sjf.
- Share model-catalog reads between New Session and command search. [#157832](https://github.com/openclaw/openclaw/pull/157832) Thanks @obviyus.
- Consolidate plugin control and runtime helpers. [#157833](https://github.com/openclaw/openclaw/pull/157833) Thanks @steipete.
- Reuse Node promisification for diff compression. [#157835](https://github.com/openclaw/openclaw/pull/157835) Thanks @vincentkoc.
- Keep one hosted pricing context per usage operation. [#157838](https://github.com/openclaw/openclaw/pull/157838) Thanks @obviyus.
- Show redacted nested causes for PR worktree allocation failures. [#157889](https://github.com/openclaw/openclaw/pull/157889) Thanks @fuller-stack-dev.
- Select publication tooling by commit SHA and preserve candidate tag identity on resume. [#157896](https://github.com/openclaw/openclaw/pull/157896) Thanks @steipete.
- Reduce Linux Node coverage-discovery matching work. [#157901](https://github.com/openclaw/openclaw/pull/157901) Thanks @steipete.
- Refresh generated plugin-installation translation records. [#157908](https://github.com/openclaw/openclaw/pull/157908)
- Extend reserved runners to eligible release jobs and remove automatic priority writes. [#157910](https://github.com/openclaw/openclaw/pull/157910) Thanks @steipete.
- Reuse verified parent approval for ClawHub publishing before later npm approval consolidation. [#157911](https://github.com/openclaw/openclaw/pull/157911) Thanks @steipete.
- Refresh optional Lit analyzers to TypeScript 5.9.3. [#157914](https://github.com/openclaw/openclaw/pull/157914) Thanks @steipete.
- Introduce nightly stable-profile qualification, later replaced by three-hourly pinned checks. [#157917](https://github.com/openclaw/openclaw/pull/157917) Thanks @steipete.
- Share repeated web-tool credential test fixtures. [#157924](https://github.com/openclaw/openclaw/pull/157924) Thanks @steipete.
- Add saved progress and resume controls for stable releases, with recovery gaps retained. [#157941](https://github.com/openclaw/openclaw/pull/157941) Thanks @steipete.
- Refresh Control UI locale generation metadata without changing translations. [#157955](https://github.com/openclaw/openclaw/pull/157955)
- Add QA coverage for private operator credential handoff. [#157966](https://github.com/openclaw/openclaw/pull/157966) Thanks @Patrick-Erichsen.
- Consolidate Gateway validation and shared helpers. [#157976](https://github.com/openclaw/openclaw/pull/157976) Thanks @steipete.
- Refresh generated account-selection translation records. [#157978](https://github.com/openclaw/openclaw/pull/157978)
- Split Codex lifecycle and provider helpers to meet preparation limits. [#157980](https://github.com/openclaw/openclaw/pull/157980) Thanks @steipete.
- Centralize existing new-session draft restoration checks. [#157983](https://github.com/openclaw/openclaw/pull/157983) Thanks @vincentkoc.
- Repeat an already-present upgrade-survivor fixture baseline assignment. [#157996](https://github.com/openclaw/openclaw/pull/157996) Thanks @vincentkoc.
- Reduce full-buffer assertion cost in spawn broker tests. [#158003](https://github.com/openclaw/openclaw/pull/158003) Thanks @steipete.
- Reuse complete recent CI proof for unchanged inputs and scope scheduled checks. [#158018](https://github.com/openclaw/openclaw/pull/158018) Thanks @vincentkoc.
- Run qualified Gateway client tests on Bun and reuse drained history fixtures. [#158019](https://github.com/openclaw/openclaw/pull/158019) Thanks @steipete.
- Consolidate agent runtime internals and synchronize lifecycle fixtures. [#158020](https://github.com/openclaw/openclaw/pull/158020) Thanks @steipete.
- Reuse unchanged Quick Chat area-selection geometry. [#158029](https://github.com/openclaw/openclaw/pull/158029) Thanks @vincentkoc.
- Reuse browser Gateway handshake test fixtures. [#158031](https://github.com/openclaw/openclaw/pull/158031) Thanks @steipete.
- Remove unused Claw package-update manifest plumbing. [#158036](https://github.com/openclaw/openclaw/pull/158036) Thanks @vincentkoc.
- Consolidate shared text tests and remove unused internal separator options. [#158040](https://github.com/openclaw/openclaw/pull/158040) Thanks @vincentkoc, @steipete.
- Remove real-time waiting from release-verifier retry tests. [#158048](https://github.com/openclaw/openclaw/pull/158048) Thanks @steipete.
- Add safe context to macOS Gateway settings test failures. [#158049](https://github.com/openclaw/openclaw/pull/158049) Thanks @vincentkoc.
- Extract Gateway chat metadata authentication fixtures. [#158050](https://github.com/openclaw/openclaw/pull/158050) Thanks @steipete.
- Consolidate backup EOF retry tests while preserving retry checks. [#158066](https://github.com/openclaw/openclaw/pull/158066) Thanks @steipete.
- Reuse prepared restart-marking test fixtures. [#158078](https://github.com/openclaw/openclaw/pull/158078) Thanks @steipete.
- Test shutdown waiting for admitted cron work within the existing drain budget. [#158080](https://github.com/openclaw/openclaw/pull/158080) Thanks @vincentkoc.
- Share FaceTime RPC test startup fixtures. [#158107](https://github.com/openclaw/openclaw/pull/158107) Thanks @steipete.
- Reuse Android call-log JSON parameter parsing. [#158111](https://github.com/openclaw/openclaw/pull/158111) Thanks @vincentkoc.
- Share CLI no-output timeout test fixtures. [#158117](https://github.com/openclaw/openclaw/pull/158117) Thanks @steipete.
- Defer jsdom initialization for Node tests that do not need a DOM. [#158125](https://github.com/openclaw/openclaw/pull/158125) Thanks @steipete.
- Reuse trajectory recorder test fixtures. [#158133](https://github.com/openclaw/openclaw/pull/158133) Thanks @steipete.
- Centralize existing macOS status icon overrides. [#158137](https://github.com/openclaw/openclaw/pull/158137) Thanks @vincentkoc.
- Remove unused prompt-composition fixture metadata. [#158151](https://github.com/openclaw/openclaw/pull/158151) Thanks @vincentkoc, @steipete.
- Consolidate browser and memory-core internals. [#158172](https://github.com/openclaw/openclaw/pull/158172) Thanks @steipete.
- Extract unchanged sidebar session error feedback. [#158173](https://github.com/openclaw/openclaw/pull/158173) Thanks @vincentkoc.
- Use virtual timers in mocked session-placement startup tests. [#158175](https://github.com/openclaw/openclaw/pull/158175) Thanks @steipete.
- Remove duplicate Cron lifecycle tests and unused fixture support. [#158176](https://github.com/openclaw/openclaw/pull/158176) Thanks @vincentkoc.
- Reuse process-result fixtures in Windows Scheduled Task stop tests. [#158184](https://github.com/openclaw/openclaw/pull/158184) Thanks @steipete.
- Consolidate retry timer regression tests beside their shared owner. [#158185](https://github.com/openclaw/openclaw/pull/158185) Thanks @vincentkoc.
- Refresh generated desktop-audio translation records. [#158186](https://github.com/openclaw/openclaw/pull/158186)
- Precompile the SQLite idle-worker test fixture. [#158188](https://github.com/openclaw/openclaw/pull/158188) Thanks @steipete.
- Consolidate QA Lab helpers and shared contracts. [#158192](https://github.com/openclaw/openclaw/pull/158192) Thanks @steipete.
- Batch infrastructure tests within existing full-run capacity and isolate installer fixtures. [#158197](https://github.com/openclaw/openclaw/pull/158197) Thanks @steipete.
- Strengthen full-output normalization serialization tests. [#158200](https://github.com/openclaw/openclaw/pull/158200) Thanks @vincentkoc.
- Separate channel ingress record types ahead of worker integration. [#158203](https://github.com/openclaw/openclaw/pull/158203) Thanks @steipete.
- Remove unused iOS host-stats encoding and test the existing payload directly. [#158204](https://github.com/openclaw/openclaw/pull/158204) Thanks @vincentkoc.
- Consolidate infrastructure helpers under existing owners. [#158210](https://github.com/openclaw/openclaw/pull/158210) Thanks @steipete.
- Share Discord lifecycle test manager fixtures. [#158215](https://github.com/openclaw/openclaw/pull/158215) Thanks @steipete.
- Remove duplicate Google model alias tests. [#158220](https://github.com/openclaw/openclaw/pull/158220) Thanks @vincentkoc.
- Extract shared inbound-message record decoders without activating workers. [#158233](https://github.com/openclaw/openclaw/pull/158233) Thanks @steipete.
- Consolidate agent ID validation tests. [#158234](https://github.com/openclaw/openclaw/pull/158234) Thanks @vincentkoc.
- Refresh generated Incognito draft-review translation records. [#158236](https://github.com/openclaw/openclaw/pull/158236)
- Reuse compiled database workers in Logbook batch-image tests. [#158238](https://github.com/openclaw/openclaw/pull/158238) Thanks @steipete.
- Share Codex work-profile test fixtures. [#158249](https://github.com/openclaw/openclaw/pull/158249) Thanks @steipete.
- Strengthen independent tool-argument validation tests. [#158254](https://github.com/openclaw/openclaw/pull/158254) Thanks @vincentkoc.
- Synchronize Workshop comparison translation metadata. [#158264](https://github.com/openclaw/openclaw/pull/158264)
- Distinguish the internal Gateway auth-limiter name while retaining the public SDK alias. [#158275](https://github.com/openclaw/openclaw/pull/158275) Thanks @steipete.
- Reduce repeated name lookup in large JavaScript artifact validation. [#158278](https://github.com/openclaw/openclaw/pull/158278) Thanks @steipete.
- Expand qualified Bun tests and streamline IRC import smoke. [#158280](https://github.com/openclaw/openclaw/pull/158280) Thanks @steipete.
- Test both Anthropic prefix-binding predicate outcomes. [#158289](https://github.com/openclaw/openclaw/pull/158289) Thanks @vincentkoc.
- Share Docker installation-proof readiness polling without changing budgets. [#158291](https://github.com/openclaw/openclaw/pull/158291) Thanks @vincentkoc.
- Hash Crabbox source bundles in bounded chunks. [#158294](https://github.com/openclaw/openclaw/pull/158294) Thanks @vincentkoc.
- Use resource-aware workers and compact output for protected PR gates. [#158297](https://github.com/openclaw/openclaw/pull/158297) Thanks @vincentkoc.
- Refresh dependencies and preserve integration compatibility. [#158298](https://github.com/openclaw/openclaw/pull/158298) Thanks @steipete.
- Strengthen nested URL redaction cutoff tests. [#158304](https://github.com/openclaw/openclaw/pull/158304) Thanks @vincentkoc.
- Reuse typed Talk relay provider test fixtures. [#158309](https://github.com/openclaw/openclaw/pull/158309) Thanks @steipete.
- Consolidate non-Error cause tests with their shared implementation. [#158321](https://github.com/openclaw/openclaw/pull/158321) Thanks @vincentkoc.
- Use bounded copies when staging Crabbox source files. [#158327](https://github.com/openclaw/openclaw/pull/158327) Thanks @vincentkoc.
- Avoid unrelated synchronous test discovery during narrow CI planning. [#158336](https://github.com/openclaw/openclaw/pull/158336) Thanks @steipete.
- Separate pure Talk relay checks from storage fixtures. [#158343](https://github.com/openclaw/openclaw/pull/158343) Thanks @steipete.
- Reuse isolated Git seed copies in publication recovery tests. [#158349](https://github.com/openclaw/openclaw/pull/158349) Thanks @steipete.
- Consolidate session projection regression fixtures. [#158355](https://github.com/openclaw/openclaw/pull/158355) Thanks @vincentkoc.
- Remove unused MCP command-test workspaces. [#158381](https://github.com/openclaw/openclaw/pull/158381) Thanks @vincentkoc.
- Reuse streaming text segments within each Apple chat view update. [#158393](https://github.com/openclaw/openclaw/pull/158393) Thanks @vincentkoc.
- Consolidate shared logic across provider plugins. [#158403](https://github.com/openclaw/openclaw/pull/158403) Thanks @steipete.
- Share Parallels dev-update acceptance checks. [#158427](https://github.com/openclaw/openclaw/pull/158427) Thanks @vincentkoc.
- Consolidate Azure voice-discovery timeout tests at the HTTP boundary. [#158430](https://github.com/openclaw/openclaw/pull/158430) Thanks @vincentkoc, @steipete.
- Consolidate ElevenLabs HTTP diagnostic tests. [#158462](https://github.com/openclaw/openclaw/pull/158462) Thanks @vincentkoc, @steipete.
- Refresh generated plugin-capability translation records. [#158466](https://github.com/openclaw/openclaw/pull/158466)
- Reuse the existing macOS overlay dismissal implementation. [#158476](https://github.com/openclaw/openclaw/pull/158476) Thanks @vincentkoc.
- Avoid loading the agent execution runtime for xAI attribution. [#158488](https://github.com/openclaw/openclaw/pull/158488) Thanks @steipete.
- Remove duplicate Deepgram JSON syntax coverage. [#158493](https://github.com/openclaw/openclaw/pull/158493) Thanks @vincentkoc, @steipete.
- Synchronize generated Control UI translation metadata and memory. [#158498](https://github.com/openclaw/openclaw/pull/158498)
- Consolidate iOS routing, storage and presentation internals. [#158512](https://github.com/openclaw/openclaw/pull/158512) Thanks @steipete.
- Consolidate CLI command handling and update maintenance. [#158514](https://github.com/openclaw/openclaw/pull/158514) Thanks @steipete.
- Schedule event-loop health sampling through the Gateway kernel. [#158531](https://github.com/openclaw/openclaw/pull/158531) Thanks @steipete.
- Extract interrupted-replay test fixtures to meet existing lint limits. [#158538](https://github.com/openclaw/openclaw/pull/158538) Thanks @steipete.
- Consolidate Android and Wear app internals. [#158539](https://github.com/openclaw/openclaw/pull/158539) Thanks @steipete.
- Remove duplicate Inworld diagnostic and timeout tests. [#158560](https://github.com/openclaw/openclaw/pull/158560) Thanks @vincentkoc.
- Share ClawHub external-install assertions between E2E entrypoints. [#158580](https://github.com/openclaw/openclaw/pull/158580) Thanks @vincentkoc.
- Consolidate Gradium speech regression tests. [#158590](https://github.com/openclaw/openclaw/pull/158590) Thanks @vincentkoc.
- Consolidate auto-reply command and lifecycle helpers. [#158598](https://github.com/openclaw/openclaw/pull/158598) Thanks @steipete.
- Reuse streaming-response fixtures in speech tests. [#158602](https://github.com/openclaw/openclaw/pull/158602) Thanks @vincentkoc.
- Reduce redundant scope entries for plain plugin-stream chunks. [#158604](https://github.com/openclaw/openclaw/pull/158604) Thanks @steipete.
- Consolidate Codex helpers and reject stale cache publication after reset. [#158613](https://github.com/openclaw/openclaw/pull/158613) Thanks @steipete.
- Pack selected CI tests into fewer compatible jobs. [#158621](https://github.com/openclaw/openclaw/pull/158621) Thanks @steipete.
- Consolidate Nostr Gateway test fixtures. [#158623](https://github.com/openclaw/openclaw/pull/158623) Thanks @vincentkoc.
- Extract reusable ingress queue mutations while retaining native callers. [#158628](https://github.com/openclaw/openclaw/pull/158628) Thanks @steipete.
- Remove unused Microsoft Teams send-test fixtures. [#158635](https://github.com/openclaw/openclaw/pull/158635) Thanks @vincentkoc.
- Refresh generated localized Swarm concurrency hints. [#158644](https://github.com/openclaw/openclaw/pull/158644)
- Use exact native buffer comparison in Agents API attachment tests. [#158645](https://github.com/openclaw/openclaw/pull/158645) Thanks @steipete.
- Consolidate benchmark child-process teardown tests. [#158654](https://github.com/openclaw/openclaw/pull/158654) Thanks @vincentkoc.
- Remove duplicate Gateway roster and test-fixture code. [#158656](https://github.com/openclaw/openclaw/pull/158656) Thanks @steipete.
- Move placement maintenance under Gateway scheduling. [#158662](https://github.com/openclaw/openclaw/pull/158662) Thanks @steipete.
- Remove redundant core tests and consolidate retained fixtures. [#158663](https://github.com/openclaw/openclaw/pull/158663) Thanks @steipete.
- Reuse Doctor's existing blocked-plugin ID collector. [#158664](https://github.com/openclaw/openclaw/pull/158664) Thanks @vincentkoc.
- Refresh generated Activity empty-state translation records. [#158670](https://github.com/openclaw/openclaw/pull/158670)
- Remove obsolete Nextcloud Talk replay-test scaffolding. [#158677](https://github.com/openclaw/openclaw/pull/158677) Thanks @vincentkoc.
- Extract mention helpers and historical Tasks cleanup to meet lint limits. [#158684](https://github.com/openclaw/openclaw/pull/158684) Thanks @fuller-stack-dev.
- Refresh Control UI locale metadata without changing translations. [#158689](https://github.com/openclaw/openclaw/pull/158689)
- Move unchanged Incognito expiry deadlines to Gateway scheduling. [#158690](https://github.com/openclaw/openclaw/pull/158690) Thanks @steipete.
- Consolidate runtime, UI and tooling tests and internal helper visibility. [#158691](https://github.com/openclaw/openclaw/pull/158691) Thanks @steipete.
- Remove redundant Tlon SSE test bookkeeping. [#158692](https://github.com/openclaw/openclaw/pull/158692) Thanks @vincentkoc.
- Consolidate duplicate core, plugin and chat tests. [#158698](https://github.com/openclaw/openclaw/pull/158698) Thanks @steipete.
- Move follow-up reply ownership into session completion ahead of Tasks retirement. [#158702](https://github.com/openclaw/openclaw/pull/158702) Thanks @steipete.
- Remove obsolete Synology Chat integration-test mocks. [#158711](https://github.com/openclaw/openclaw/pull/158711) Thanks @vincentkoc.
- Use exact native buffer comparisons in integration tests. [#158713](https://github.com/openclaw/openclaw/pull/158713) Thanks @steipete.
- Consolidate repeated core, plugin and UI tests. [#158714](https://github.com/openclaw/openclaw/pull/158714) Thanks @steipete.
- Schedule independent GitHub OAuth maintenance jobs through the Gateway owner. [#158717](https://github.com/openclaw/openclaw/pull/158717) Thanks @steipete.
- Consolidate runtime and provider tests and remove private test-only exposure. [#158721](https://github.com/openclaw/openclaw/pull/158721) Thanks @steipete.
- Remove unused Google Chat adapter test mocks. [#158722](https://github.com/openclaw/openclaw/pull/158722) Thanks @vincentkoc.
- Remove duplicate tests and consolidate current fixtures. [#158725](https://github.com/openclaw/openclaw/pull/158725) Thanks @steipete.
- Schedule secret expiry and publication recovery under Gateway ownership. [#158727](https://github.com/openclaw/openclaw/pull/158727) Thanks @steipete.
- Use typed deferred helpers in Gateway and draft tests. [#158729](https://github.com/openclaw/openclaw/pull/158729) Thanks @fuller-stack-dev.
- Simplify ZaloUser directory-test fixtures. [#158736](https://github.com/openclaw/openclaw/pull/158736) Thanks @vincentkoc.
- Refresh generated split-pane recovery translation records. [#158741](https://github.com/openclaw/openclaw/pull/158741)
- Remove an obsolete generated Android index placeholder. [#158743](https://github.com/openclaw/openclaw/pull/158743)
- Consolidate audited channel, infrastructure and SDK tests. [#158764](https://github.com/openclaw/openclaw/pull/158764) Thanks @steipete.
- Share filesystem permission and atomic-write helpers. [#158772](https://github.com/openclaw/openclaw/pull/158772) Thanks @steipete.
- Consolidate Gateway request and lifecycle helpers. [#158786](https://github.com/openclaw/openclaw/pull/158786) Thanks @steipete.
- Consolidate shared Control UI components and helpers. [#158787](https://github.com/openclaw/openclaw/pull/158787) Thanks @steipete.
- Skip redundant typechecks for conservatively verified inert TypeScript edits. [#158796](https://github.com/openclaw/openclaw/pull/158796) Thanks @steipete.
- Consolidate repeated tests and private test tooling. [#158802](https://github.com/openclaw/openclaw/pull/158802) Thanks @steipete.
- Consolidate core, plugin and tooling tests. [#158811](https://github.com/openclaw/openclaw/pull/158811) Thanks @steipete.
- Schedule worker-environment maintenance through the Gateway owner. [#158812](https://github.com/openclaw/openclaw/pull/158812) Thanks @steipete.
- Use the shared Gateway scheduler for session PR refreshes. [#158821](https://github.com/openclaw/openclaw/pull/158821) Thanks @steipete.
- Move historical cron Tasks recovery off-thread before Tasks retirement. [#158827](https://github.com/openclaw/openclaw/pull/158827) Thanks @steipete.
- Remove a duplicate Crabbox mirror scan and reject unrecorded allocations. [#158828](https://github.com/openclaw/openclaw/pull/158828) Thanks @steipete.
- Simplify unchanged-file edit planning. [#158831](https://github.com/openclaw/openclaw/pull/158831) Thanks @steipete.
- Simplify artifact history types and cursor pruning. [#158834](https://github.com/openclaw/openclaw/pull/158834) Thanks @steipete.
- Await plugin batch inventory preparation while retaining lifecycle authority. [#158836](https://github.com/openclaw/openclaw/pull/158836) Thanks @steipete.
- Consolidate core, channel and UI tests. [#158856](https://github.com/openclaw/openclaw/pull/158856) Thanks @steipete.
- Pass Telegram ingress queue account and state scope directly. [#158860](https://github.com/openclaw/openclaw/pull/158860) Thanks @steipete.
- Reserve dormant ordered provider recommendations in catalog v2. [#158863](https://github.com/openclaw/openclaw/pull/158863) Thanks @obviyus.
- Consolidate shared CLI and embedded-runner logic. [#158879](https://github.com/openclaw/openclaw/pull/158879) Thanks @steipete.
- Consolidate core, Control UI and plugin tests. [#158882](https://github.com/openclaw/openclaw/pull/158882) Thanks @steipete.
- Share ingress test cleanup and await queue settlement. [#158887](https://github.com/openclaw/openclaw/pull/158887) Thanks @steipete.
- Consolidate agent tool, sandbox and harness implementation. [#158891](https://github.com/openclaw/openclaw/pull/158891) Thanks @steipete.
- Share the ingress queue contract and failure decoder. [#158896](https://github.com/openclaw/openclaw/pull/158896) Thanks @steipete.
- Consolidate core, plugin and UI-support tests. [#158907](https://github.com/openclaw/openclaw/pull/158907) Thanks @steipete.
- Consolidate duplicate tests and fixtures across runtime components. [#158919](https://github.com/openclaw/openclaw/pull/158919) Thanks @steipete.
- Extract ingress listing and recovery operations with duplicate pending-row decoding retained. [#158928](https://github.com/openclaw/openclaw/pull/158928) Thanks @steipete.
- Await completed ingress work and preserve teardown errors in channel tests. [#158933](https://github.com/openclaw/openclaw/pull/158933) Thanks @steipete.
- Consolidate internal code across six messaging plugins. [#158937](https://github.com/openclaw/openclaw/pull/158937) Thanks @steipete.
- Consolidate CLI and Doctor command helpers. [#158940](https://github.com/openclaw/openclaw/pull/158940) Thanks @steipete.
- Consolidate test fixtures across core, UI and plugins. [#158948](https://github.com/openclaw/openclaw/pull/158948) Thanks @steipete.
- Consolidate repeated tests across nine groups. [#158960](https://github.com/openclaw/openclaw/pull/158960) Thanks @steipete.
- Shorten intentional CLI metadata failure-test waits. [#158962](https://github.com/openclaw/openclaw/pull/158962) Thanks @steipete.
- Consolidate core and plugin tests, with the OpenRouter lint mismatch later repaired. [#158964](https://github.com/openclaw/openclaw/pull/158964) Thanks @steipete.
- Consolidate core and plugin test fixtures. [#158965](https://github.com/openclaw/openclaw/pull/158965) Thanks @steipete.
- Add an overlapping Signal stream test suite that was later removed. [#158978](https://github.com/openclaw/openclaw/pull/158978) Thanks @steipete.
- Share channel ingress shutdown fixtures and await settlement. [#158980](https://github.com/openclaw/openclaw/pull/158980) Thanks @steipete.
- Run audit retention maintenance on its lifecycle scheduler. [#158982](https://github.com/openclaw/openclaw/pull/158982) Thanks @steipete.
- Consolidate duplicated core runtime helpers and types. [#158984](https://github.com/openclaw/openclaw/pull/158984) Thanks @steipete.
- Await channel ingress timing and shutdown boundaries in tests. [#158987](https://github.com/openclaw/openclaw/pull/158987) Thanks @steipete.
- Isolate Telegram polling test clocks from database workers. [#159006](https://github.com/openclaw/openclaw/pull/159006) Thanks @steipete.
- Wait for Telegram webhook test work to settle before cleanup. [#159008](https://github.com/openclaw/openclaw/pull/159008) Thanks @steipete.
- Isolate agent preparation and selected Codex test timing. [#159027](https://github.com/openclaw/openclaw/pull/159027) Thanks @steipete.
- Move historical Tasks maintenance onto Gateway scheduling before retirement. [#159038](https://github.com/openclaw/openclaw/pull/159038) Thanks @steipete.
- Schedule delayed Gateway startup work through the shared owner. [#159042](https://github.com/openclaw/openclaw/pull/159042) Thanks @steipete.
- Move post-ready Gateway timing into the kernel scheduler. [#159047](https://github.com/openclaw/openclaw/pull/159047) Thanks @steipete.
- Consolidate configuration and session storage internals. [#159054](https://github.com/openclaw/openclaw/pull/159054) Thanks @steipete.
- Avoid unnecessary declaration parsing and tolerate vanished nonleader test threads. [#159068](https://github.com/openclaw/openclaw/pull/159068) Thanks @steipete.
- Move historical Copilot Task mirroring off-thread before Tasks retirement. [#159071](https://github.com/openclaw/openclaw/pull/159071) Thanks @steipete.
- Remove idle waits from Android queued-action tests. [#159077](https://github.com/openclaw/openclaw/pull/159077) Thanks @steipete.
- Schedule unchanged approval expiry and cleanup through the Gateway owner. [#159081](https://github.com/openclaw/openclaw/pull/159081) Thanks @steipete.
- Schedule existing transcript cold-storage maintenance through the Gateway. [#159088](https://github.com/openclaw/openclaw/pull/159088) Thanks @steipete.
- Consolidate core and plugin tests and private release-helper access. [#159090](https://github.com/openclaw/openclaw/pull/159090) Thanks @steipete.
- Simplify iOS and Watch internals and remove obsolete previews. [#159091](https://github.com/openclaw/openclaw/pull/159091) Thanks @steipete.
- Remove the duplicate Signal container WebSocket test suite. [#159092](https://github.com/openclaw/openclaw/pull/159092) Thanks @steipete.
- Consolidate core, plugin and Control UI tests. [#159093](https://github.com/openclaw/openclaw/pull/159093) Thanks @steipete.
- Move outbound delivery recovery onto the Gateway scheduler. [#159096](https://github.com/openclaw/openclaw/pull/159096) Thanks @steipete.
- Consolidate core, plugin and UI tests and QA fixtures. [#159097](https://github.com/openclaw/openclaw/pull/159097) Thanks @steipete.
- Shorten POSIX local-provider shutdown recovery tests. [#159098](https://github.com/openclaw/openclaw/pull/159098) Thanks @steipete.
- Move cron due wakes and suspended-admission cancellation into Gateway scheduling. [#159099](https://github.com/openclaw/openclaw/pull/159099) Thanks @steipete.
- Consolidate plugin, model-picker and terminal tests. [#159108](https://github.com/openclaw/openclaw/pull/159108) Thanks @steipete.
- Consolidate plugin, SDK, project and Telegram QA tests. [#159113](https://github.com/openclaw/openclaw/pull/159113) Thanks @steipete.
- Schedule existing cron foreign-run receipt checks through the Gateway. [#159114](https://github.com/openclaw/openclaw/pull/159114) Thanks @steipete.
- Refresh generated scheduled-run transcript translation records. [#159122](https://github.com/openclaw/openclaw/pull/159122)
- Share state read-context and diagnostic recovery types. [#159128](https://github.com/openclaw/openclaw/pull/159128) Thanks @steipete.
- Share scheduling for existing system-job reconciliation retries. [#159129](https://github.com/openclaw/openclaw/pull/159129) Thanks @steipete.
- Simplify Gateway presence and profile request code. [#159130](https://github.com/openclaw/openclaw/pull/159130) Thanks @steipete.
- Simplify Android and Wear app internals. [#159154](https://github.com/openclaw/openclaw/pull/159154) Thanks @steipete.
- Consolidate cron, provider and utility tests. [#159165](https://github.com/openclaw/openclaw/pull/159165) Thanks @steipete.
- Distinguish ACP execution instances in historical Tasks completion notices. [#159173](https://github.com/openclaw/openclaw/pull/159173) Thanks @steipete.
- Consolidate internal Gateway helpers and type contracts. [#159177](https://github.com/openclaw/openclaw/pull/159177) Thanks @steipete.
- Consolidate provider and network-policy tests. [#159181](https://github.com/openclaw/openclaw/pull/159181) Thanks @steipete.
- Consolidate repository maintenance scripts. [#159183](https://github.com/openclaw/openclaw/pull/159183) Thanks @steipete.
- Remove obsolete generated Android node-approval locale entries. [#159191](https://github.com/openclaw/openclaw/pull/159191)
- Reuse Crabbox mirrors across concurrent worktrees with recoverable eviction. [#159195](https://github.com/openclaw/openclaw/pull/159195) Thanks @steipete.
- Reuse prepared runtime modules in supervisor process tests. [#159210](https://github.com/openclaw/openclaw/pull/159210) Thanks @steipete.
- Remove obsolete generated native-app localization entries. [#159211](https://github.com/openclaw/openclaw/pull/159211)
- Consolidate repeated Codex harness implementation. [#159225](https://github.com/openclaw/openclaw/pull/159225) Thanks @steipete.
- Run qualified memory-plugin PR tests on Bun while retaining dual-runtime release coverage. [#159236](https://github.com/openclaw/openclaw/pull/159236) Thanks @steipete.
- Consolidate OpenAI, Anthropic and llama.cpp internals. [#159239](https://github.com/openclaw/openclaw/pull/159239) Thanks @steipete.
- Refresh generated locale records for chat draft states. [#159241](https://github.com/openclaw/openclaw/pull/159241)
- Add dormant earliest-deadline mode to the Gateway scheduler. [#159260](https://github.com/openclaw/openclaw/pull/159260) Thanks @steipete.
- Reuse worker setup in subsequently retired Tasks maintenance. [#159271](https://github.com/openclaw/openclaw/pull/159271) Thanks @steipete.
- Guard against two costly Control UI CSS selector patterns. [#159290](https://github.com/openclaw/openclaw/pull/159290) Thanks @steipete.
- Move update-watcher wakeups onto the shared Gateway scheduler. [#159291](https://github.com/openclaw/openclaw/pull/159291) Thanks @steipete.
- Consolidate provider, media and localization tests. [#159292](https://github.com/openclaw/openclaw/pull/159292) Thanks @steipete.
- Consolidate provider and core regression tests. [#159298](https://github.com/openclaw/openclaw/pull/159298) Thanks @steipete.
- Consolidate provider, model-validation and UI tests. [#159308](https://github.com/openclaw/openclaw/pull/159308) Thanks @steipete.
- Consolidate provider, retry and media tests. [#159312](https://github.com/openclaw/openclaw/pull/159312) Thanks @steipete.
- Move historical Codex Tasks tracking off-thread before retirement. [#159325](https://github.com/openclaw/openclaw/pull/159325) Thanks @steipete.
- Simplify plugin and core regression tests. [#159337](https://github.com/openclaw/openclaw/pull/159337) Thanks @steipete.
- Consolidate Crabbox cloud-worker command handling. [#159357](https://github.com/openclaw/openclaw/pull/159357) Thanks @steipete.
- Simplify existing one-turn update triage and retained recovery validation. [#159358](https://github.com/openclaw/openclaw/pull/159358) Thanks @steipete.
- Consolidate helpers across nine bundled plugins. [#159364](https://github.com/openclaw/openclaw/pull/159364) Thanks @steipete.
- Run eligible CI plans concurrently around exclusive-plan barriers. [#159368](https://github.com/openclaw/openclaw/pull/159368) Thanks @vincentkoc.
- Share MCP requester and transcript test fixtures. [#159372](https://github.com/openclaw/openclaw/pull/159372) Thanks @steipete.
- Avoid unnecessary storage setup in ACPX policy tests. [#159374](https://github.com/openclaw/openclaw/pull/159374) Thanks @steipete.
- Remove redundant in-place sorting lint exceptions. [#159379](https://github.com/openclaw/openclaw/pull/159379) Thanks @steipete.
- Split routing binding cache and tests to remove file-size exceptions. [#159382](https://github.com/openclaw/openclaw/pull/159382) Thanks @steipete.
- Consolidate Codex plugin tests and fixtures. [#159383](https://github.com/openclaw/openclaw/pull/159383) Thanks @steipete.
- Consolidate durable session persistence bookkeeping. [#159384](https://github.com/openclaw/openclaw/pull/159384) Thanks @steipete.
- Consolidate duplicated runtime helpers and type contracts. [#159409](https://github.com/openclaw/openclaw/pull/159409) Thanks @steipete.
- Consolidate update error handling and service recovery. [#159415](https://github.com/openclaw/openclaw/pull/159415) Thanks @steipete.
- Consolidate Codex and Telegram helper tests. [#159418](https://github.com/openclaw/openclaw/pull/159418) Thanks @steipete.
- Simplify shared Control UI helpers and flows. [#159436](https://github.com/openclaw/openclaw/pull/159436) Thanks @steipete.
- Detect exercised Node dependencies in advisory Linux Bun release validation. [#159439](https://github.com/openclaw/openclaw/pull/159439) Thanks @steipete, @Patrick-Erichsen.
- Move authentication cleanup to Gateway scheduler ownership. [#159455](https://github.com/openclaw/openclaw/pull/159455) Thanks @steipete.
- Consolidate plugin and Vitest tests. [#159494](https://github.com/openclaw/openclaw/pull/159494) Thanks @steipete.
- Consolidate plugin tests and fixtures. [#159518](https://github.com/openclaw/openclaw/pull/159518) Thanks @steipete.
- Remove an unused iOS Gateway controller import. [#159534](https://github.com/openclaw/openclaw/pull/159534) Thanks @steipete.
- Refresh generated diff-preview translation records. [#159580](https://github.com/openclaw/openclaw/pull/159580)
- Consolidate Android phone and Wear helpers. [#159589](https://github.com/openclaw/openclaw/pull/159589) Thanks @steipete.
- Simplify embedded agent runner internals. [#159597](https://github.com/openclaw/openclaw/pull/159597) Thanks @steipete.
- Reuse fs-safe directory scans while preserving caller policies. [#159603](https://github.com/openclaw/openclaw/pull/159603) Thanks @steipete.
- Delegate guarded config writes to fs-safe. [#159605](https://github.com/openclaw/openclaw/pull/159605) Thanks @steipete.
- Consolidate extension tests and remove redundant cases. [#159607](https://github.com/openclaw/openclaw/pull/159607) Thanks @steipete.
- Run isolated Doctor migration-order process tests concurrently. [#159609](https://github.com/openclaw/openclaw/pull/159609) Thanks @steipete.
- Share capability CLI agent-selection test cases. [#159616](https://github.com/openclaw/openclaw/pull/159616) Thanks @vincentkoc.
- Reuse subagent announcement test fixtures. [#159618](https://github.com/openclaw/openclaw/pull/159618) Thanks @vincentkoc.
- Share typed image-provider test fixtures. [#159620](https://github.com/openclaw/openclaw/pull/159620) Thanks @vincentkoc.
- Add the English Presence label to generated Android resources. [#159635](https://github.com/openclaw/openclaw/pull/159635)
- Consolidate shared agent-tool internals. [#159639](https://github.com/openclaw/openclaw/pull/159639) Thanks @steipete.
- Reuse fs-safe traversal for skill snapshots. [#159641](https://github.com/openclaw/openclaw/pull/159641) Thanks @steipete.
- Consolidate duplicate shared-package tests. [#159645](https://github.com/openclaw/openclaw/pull/159645) Thanks @steipete.
- Consolidate protocol, channel, memory, AI and Workboard tests. [#159648](https://github.com/openclaw/openclaw/pull/159648) Thanks @steipete.
- Share assistant failover test inputs. [#159655](https://github.com/openclaw/openclaw/pull/159655) Thanks @vincentkoc.
- Show sanitized Docker upgrade failure coordinates in GitHub checks. [#159659](https://github.com/openclaw/openclaw/pull/159659) Thanks @RomneyDa.
- Consolidate ACP, MCP, Code Mode and agent tests. [#159703](https://github.com/openclaw/openclaw/pull/159703) Thanks @steipete.
- Consolidate sidebar narration stream state. [#159705](https://github.com/openclaw/openclaw/pull/159705) Thanks @steipete.
- Consolidate agent and model tests. [#159713](https://github.com/openclaw/openclaw/pull/159713) Thanks @steipete.
- Remove duplicate recap publication test fixtures. [#159724](https://github.com/openclaw/openclaw/pull/159724) Thanks @steipete.
- Simplify Codex plugin internals. [#159726](https://github.com/openclaw/openclaw/pull/159726) Thanks @steipete.
- Consolidate repeated agent tests and fixtures. [#159741](https://github.com/openclaw/openclaw/pull/159741) Thanks @steipete.
- Distinguish recovery failure stages in upgrade acceptance diagnostics. [#159751](https://github.com/openclaw/openclaw/pull/159751) Thanks @RomneyDa.
- Consolidate agent, authentication and CLI-runner tests. [#159763](https://github.com/openclaw/openclaw/pull/159763) Thanks @steipete.
- Update an earlier Kova release-performance pin, later superseded by the census repair. [#159766](https://github.com/openclaw/openclaw/pull/159766) Thanks @RomneyDa.
- Share prompt preparation and context policies across harnesses. [#159779](https://github.com/openclaw/openclaw/pull/159779) Thanks @sjf-oa, @sjf.
- Refresh generated translation metadata for interrupted status. [#159795](https://github.com/openclaw/openclaw/pull/159795)
- Simplify browser and memory plugin internals. [#159798](https://github.com/openclaw/openclaw/pull/159798) Thanks @steipete.
- Consolidate agent, audit, worktree and reply tests. [#159802](https://github.com/openclaw/openclaw/pull/159802) Thanks @steipete.
- Synchronize generated Control UI locale records after Tasks retirement. [#159808](https://github.com/openclaw/openclaw/pull/159808)
- Consolidate channel-core admission and helpers without changing delivery behavior. [#159811](https://github.com/openclaw/openclaw/pull/159811) Thanks @steipete.
- Remove the retired Task selector from artifact lookup tests. [#159819](https://github.com/openclaw/openclaw/pull/159819) Thanks @steipete.
- Refresh generated translation records for Dashboard navigation errors. [#159821](https://github.com/openclaw/openclaw/pull/159821)
- Consolidate overlapping core tests and fixtures. [#159829](https://github.com/openclaw/openclaw/pull/159829) Thanks @steipete.
- Add database-relocation regressions and worker-access documentation. [#159835](https://github.com/openclaw/openclaw/pull/159835) Thanks @steipete.
- Synchronize generated Activity translation records. [#159837](https://github.com/openclaw/openclaw/pull/159837)
- Consolidate worktree, reply and authorization tests. [#159838](https://github.com/openclaw/openclaw/pull/159838) Thanks @steipete.
- Diagnose exited Linux test helpers, with an unbounded regression-test wait remaining. [#159849](https://github.com/openclaw/openclaw/pull/159849) Thanks @steipete.
- Reduce CI workflow size and add an early file-size guard. [#159855](https://github.com/openclaw/openclaw/pull/159855) Thanks @steipete.
- Consolidate CLI, updater and Doctor tests. [#159874](https://github.com/openclaw/openclaw/pull/159874) Thanks @steipete.
- Move worker-placement recovery selection reads off the Gateway thread. [#159881](https://github.com/openclaw/openclaw/pull/159881) Thanks @steipete.
- Use native readiness waits and a larger paid runner for iOS qualification. [#159890](https://github.com/openclaw/openclaw/pull/159890) Thanks @joshavant.
- Refresh generated translation metadata for unknown installation dates. [#159922](https://github.com/openclaw/openclaw/pull/159922)
- Consolidate shared package parsing and provider request helpers. [#159933](https://github.com/openclaw/openclaw/pull/159933) Thanks @steipete.
- Move unchanged omitted-media rendering to the attachment-status owner. [#159938](https://github.com/openclaw/openclaw/pull/159938) Thanks @steipete.
- Consolidate updater, backup and Doctor tests, with revoked-owner coverage removed. [#159952](https://github.com/openclaw/openclaw/pull/159952) Thanks @steipete.
- Refresh generated Tool Search and browser-message translations. [#159954](https://github.com/openclaw/openclaw/pull/159954)
- Consolidate updater and Doctor test fixtures. [#159963](https://github.com/openclaw/openclaw/pull/159963) Thanks @steipete.
- Prepare an Android Play icon for later upload and repair installer smoke coverage. [#159964](https://github.com/openclaw/openclaw/pull/159964) Thanks @iwhatsskill.
- Refresh generated provider-setup translation metadata. [#159967](https://github.com/openclaw/openclaw/pull/159967)
- Consolidate shared helpers across six messaging plugins. [#159998](https://github.com/openclaw/openclaw/pull/159998) Thanks @steipete.
- Update selected CI Bun lanes for package installation by multiple accounts. [#160012](https://github.com/openclaw/openclaw/pull/160012) Thanks @steipete.
- Add an opt-in Linux process-tree memory limit without activating tooling callers. [#160024](https://github.com/openclaw/openclaw/pull/160024) Thanks @vincentkoc.
- Reuse iOS qualification setup while retaining pairing, relaunch and transcript checks. [#160025](https://github.com/openclaw/openclaw/pull/160025) Thanks @joshavant.
- Request more memory for manual Testbox validation while retaining resource admission. [#160034](https://github.com/openclaw/openclaw/pull/160034) Thanks @steipete.
- Refresh generated worker-container-image locale records. [#160051](https://github.com/openclaw/openclaw/pull/160051)
- Add cancellation-safe artifact waits for callers supplying a signal. [#160057](https://github.com/openclaw/openclaw/pull/160057) Thanks @vincentkoc.
- Remove unused Gateway node-presence timer bookkeeping. [#160068](https://github.com/openclaw/openclaw/pull/160068) Thanks @steipete.
- Refresh generated session-count translation records. [#160077](https://github.com/openclaw/openclaw/pull/160077)
- Consolidate core tests, with agent-auth, provider-streaming and LAN-denial coverage removed. [#160084](https://github.com/openclaw/openclaw/pull/160084) Thanks @steipete.
- Add shared compiler and lint memory admission without activating commands. [#160094](https://github.com/openclaw/openclaw/pull/160094) Thanks @vincentkoc.
- Split root-test typechecking into four serial compiler runs. [#160098](https://github.com/openclaw/openclaw/pull/160098) Thanks @vincentkoc.
- Use a fast identity-scope test in routine CI and retain targeted full-process coverage. [#160111](https://github.com/openclaw/openclaw/pull/160111) Thanks @steipete.
- Select a smaller compiler project for script-test lint. [#160142](https://github.com/openclaw/openclaw/pull/160142) Thanks @vincentkoc.
- Reduce the compiler graph for session-source lint. [#160143](https://github.com/openclaw/openclaw/pull/160143) Thanks @vincentkoc.
- Restore attachment-module lint compliance by moving an unchanged image helper. [#160159](https://github.com/openclaw/openclaw/pull/160159) Thanks @steipete.
- Forward-port cached disclosure callback rebinding for a synthetic lifecycle case. [#160166](https://github.com/openclaw/openclaw/pull/160166) Thanks @steipete, @RomneyDa, @vyctorbrzezowski, @jalehman.
- Bound mobile store-note generation to five minutes and stop before unapproved upload. [#160194](https://github.com/openclaw/openclaw/pull/160194) Thanks @joshavant.
- Refresh generated collaboration translation records. [#160199](https://github.com/openclaw/openclaw/pull/160199)
- Cap retained lint reports at 1 MiB and stream overflow without annotations. [#160204](https://github.com/openclaw/openclaw/pull/160204) Thanks @vincentkoc.
- Consolidate internal tests with unresolved exec-cleanup and migration coverage gaps. [#160205](https://github.com/openclaw/openclaw/pull/160205) Thanks @steipete.
- Consolidate regression tests with OAuth and corrupt-archive refusal coverage removed. [#160223](https://github.com/openclaw/openclaw/pull/160223) Thanks @steipete.
- Test configured heartbeat typing refresh during an in-flight reply. [#160229](https://github.com/openclaw/openclaw/pull/160229) Thanks @steipete.
- Select relevant retention-helper tests in CI. [#160260](https://github.com/openclaw/openclaw/pull/160260) Thanks @steipete.
- Use a smaller fallback compiler graph for package lint. [#160281](https://github.com/openclaw/openclaw/pull/160281) Thanks @vincentkoc.
- Consolidate agent and worktree tests with default cleanup-cap coverage removed. [#160308](https://github.com/openclaw/openclaw/pull/160308) Thanks @steipete.
- Consolidate agent and Codex tests with producer-origin authorization coverage removed. [#160309](https://github.com/openclaw/openclaw/pull/160309) Thanks @steipete.
- Reduce source lint compiler graphs while retaining shared declarations. [#160311](https://github.com/openclaw/openclaw/pull/160311) Thanks @vincentkoc.
- Remove obsolete internal MCP timer overrides. [#160326](https://github.com/openclaw/openclaw/pull/160326) Thanks @steipete.
- Narrow the core plugin source lint project. [#160327](https://github.com/openclaw/openclaw/pull/160327) Thanks @vincentkoc.
- Schedule question deadlines and retained-delivery cleanup with shutdown ownership. [#160334](https://github.com/openclaw/openclaw/pull/160334) Thanks @steipete.
- Move cron stream retry and stability deadlines into the shared scheduler. [#160341](https://github.com/openclaw/openclaw/pull/160341) Thanks @steipete.
- Consolidate shared feature-plugin helpers while preserving existing contracts. [#160362](https://github.com/openclaw/openclaw/pull/160362) Thanks @steipete, @vincentkoc.
- Schedule presence publication and await active preparation during shutdown. [#160369](https://github.com/openclaw/openclaw/pull/160369) Thanks @steipete.
- Schedule retained device permission-result cleanup. [#160370](https://github.com/openclaw/openclaw/pull/160370) Thanks @steipete.
- Remove unused internal Side chat timer overrides. [#160371](https://github.com/openclaw/openclaw/pull/160371) Thanks @steipete.
- Schedule node connection notices with shared shutdown ownership. [#160374](https://github.com/openclaw/openclaw/pull/160374) Thanks @steipete.
- Schedule cron exit-watcher retries and join startup settlement. [#160381](https://github.com/openclaw/openclaw/pull/160381) Thanks @steipete.
- Pin Kova for the process-census repair before later resource-budget calibration. [#160385](https://github.com/openclaw/openclaw/pull/160385) Thanks @RomneyDa.
- Refresh generated shortcut-hint translation memory. [#160390](https://github.com/openclaw/openclaw/pull/160390)
- Use the scheduler for session-write retention while preserving pending writes. [#160391](https://github.com/openclaw/openclaw/pull/160391) Thanks @steipete.
- Give TLS renewal shared scheduler shutdown ownership. [#160395](https://github.com/openclaw/openclaw/pull/160395) Thanks @steipete.
- Share unchanged worker identity checks and test cleanup. [#160402](https://github.com/openclaw/openclaw/pull/160402) Thanks @steipete.
- Use the existing single-pass matcher for large CI ownership searches. [#160408](https://github.com/openclaw/openclaw/pull/160408) Thanks @steipete.
- Consolidate workspace transfer lifecycle and test fixtures. [#160415](https://github.com/openclaw/openclaw/pull/160415) Thanks @steipete.
- Consolidate Gateway placement lifecycle fixtures and remove an unused reader. [#160439](https://github.com/openclaw/openclaw/pull/160439) Thanks @steipete.
- Share cloud-worker fixtures and existing readiness error handling. [#160445](https://github.com/openclaw/openclaw/pull/160445) Thanks @steipete.
- Avoid repeated directory checks in CI test planning. [#160458](https://github.com/openclaw/openclaw/pull/160458) Thanks @steipete.
- Reuse equivalent CI planner fixture snapshots within a test suite. [#160466](https://github.com/openclaw/openclaw/pull/160466) Thanks @steipete.
- Cover existing Android catalog chat creation without terminal or admin requirements. [#160475](https://github.com/openclaw/openclaw/pull/160475) Thanks @IWhatsskill.
- Simplify Android and Wear internals and stabilize synthetic screenshots. [#160478](https://github.com/openclaw/openclaw/pull/160478) Thanks @steipete.
- Consolidate core, QA Lab and tooling regression tests. [#160480](https://github.com/openclaw/openclaw/pull/160480) Thanks @steipete.
- Consolidate Discord and setup tests with committed config-edit recovery coverage removed. [#160481](https://github.com/openclaw/openclaw/pull/160481) Thanks @steipete.
- Remove duplicate Zalo prefix coverage while retaining loopback delivery tests. [#160512](https://github.com/openclaw/openclaw/pull/160512) Thanks @vincentkoc.
- Skip unmatched source import parsing in targeted CI ownership checks. [#160517](https://github.com/openclaw/openclaw/pull/160517) Thanks @steipete.
- Reuse CI ownership inventories and avoid redundant planner scans. [#160531](https://github.com/openclaw/openclaw/pull/160531) Thanks @steipete.
- Simplify Mattermost reaction test response helpers. [#160556](https://github.com/openclaw/openclaw/pull/160556) Thanks @vincentkoc.
- Consolidate session, agent, migration and cron tests. [#160576](https://github.com/openclaw/openclaw/pull/160576) Thanks @steipete.
- Restore local update-planning lint by extracting an unchanged Node helper. [#160591](https://github.com/openclaw/openclaw/pull/160591) Thanks @fuller-stack-dev.
- Refresh generated desktop-state translation memory. [#160594](https://github.com/openclaw/openclaw/pull/160594)
- Reuse the shared package-root test fixture. [#160595](https://github.com/openclaw/openclaw/pull/160595) Thanks @vincentkoc.
- Consolidate agent and channel tests with command-level Nix uninstall refusal coverage removed. [#160605](https://github.com/openclaw/openclaw/pull/160605) Thanks @steipete.
- Simplify shared helper use across ten channel plugins. [#160639](https://github.com/openclaw/openclaw/pull/160639) Thanks @steipete.
- Remove obsolete backup-capture test branches. [#160648](https://github.com/openclaw/openclaw/pull/160648) Thanks @vincentkoc.
- Reuse backup runtime fixtures and remove an unused verifier mock. [#160692](https://github.com/openclaw/openclaw/pull/160692) Thanks @vincentkoc.
- Scan frozen product and trusted release-tool dependencies separately; update canonical and live Kova pins while retaining the earlier legacy-list pin. [#160694](https://github.com/openclaw/openclaw/pull/160694) Thanks @RomneyDa.
- Refresh generated preview and worktree translation records. [#160704](https://github.com/openclaw/openclaw/pull/160704)
- Share caller-mode migration setup while retaining suite-owned teardown. [#160714](https://github.com/openclaw/openclaw/pull/160714) Thanks @vincentkoc.

- Reuse unchanged Crabbox source mirrors across commits on the same retained ref. [039b32a6](https://github.com/openclaw/openclaw/commit/039b32a68a063dda1e0c81f7da19d131330f2f22) Thanks Peter Steinberger.
- Select the full test-retention sweep for relevant PR changes and retain hourly and release coverage. [7d0c9758](https://github.com/openclaw/openclaw/commit/7d0c9758f1625a265f4c24d662ba1a0e778cb860) Thanks Peter Steinberger.
- Consolidate configuration and session-storage internals. [b4d93d20](https://github.com/openclaw/openclaw/commit/b4d93d200e5d2f4de54c458bb9b67235142db9af) Thanks @steipete.
- Consolidate command and Doctor internals. [d45a5b9a](https://github.com/openclaw/openclaw/commit/d45a5b9aa71551ea7cad815b5a4900a0028b6203) Thanks @steipete.
- Remove redundant CI planner scans and reduce source-matching work. [#160586](https://github.com/openclaw/openclaw/pull/160586) Thanks @steipete.
- Consolidate wizard, CLI, browser, Code Mode and Codex tests. [#160606](https://github.com/openclaw/openclaw/pull/160606) Thanks @steipete.
- Reduce database-image assertion overhead in preflight lifecycle tests. [#160728](https://github.com/openclaw/openclaw/pull/160728) Thanks @steipete.
- Refresh generated browser-approval translation records. [#160753](https://github.com/openclaw/openclaw/pull/160753)
- Share the LINE carousel delivery test fixture. [#160754](https://github.com/openclaw/openclaw/pull/160754) Thanks @vincentkoc.
- Remove an unused read after final-delivery receipt persistence. [#160764](https://github.com/openclaw/openclaw/pull/160764) Thanks @steipete.
- Refresh generated plugin-account and session-count translation records. [#160771](https://github.com/openclaw/openclaw/pull/160771)
- Consolidate overlapping tests and update their CI routing. [#160776](https://github.com/openclaw/openclaw/pull/160776) Thanks @steipete.
- Remove the duplicate QA Lab Gateway agent and artifact API test. [#160779](https://github.com/openclaw/openclaw/pull/160779) Thanks @vincentkoc.
- Consolidate cron service, storage and isolated-agent internals. [#160788](https://github.com/openclaw/openclaw/pull/160788) Thanks @steipete.
- Remove redundant Windows Scheduler tests and unused fixture overrides. [#160794](https://github.com/openclaw/openclaw/pull/160794) Thanks @vincentkoc.
- Remove redundant LINE tests and unused fixtures. [#160829](https://github.com/openclaw/openclaw/pull/160829) Thanks @vincentkoc.
- Consolidate SQLite recovery file checks and cleanup error handling. [#160835](https://github.com/openclaw/openclaw/pull/160835) Thanks @steipete.
- Consolidate ingress queue dispatch and existing pressure checks. [#160848](https://github.com/openclaw/openclaw/pull/160848) Thanks @steipete.
- Share cron stream line assembly, batching and dispatch settlement. [#160849](https://github.com/openclaw/openclaw/pull/160849) Thanks @steipete.
- Remove unused Windows daemon test fixture controls. [#160854](https://github.com/openclaw/openclaw/pull/160854) Thanks @vincentkoc.
- Refresh generated Gateway retry-message translation records. [#160855](https://github.com/openclaw/openclaw/pull/160855)
- Simplify existing Gateway suspension and restart state tracking. [#160862](https://github.com/openclaw/openclaw/pull/160862) Thanks @steipete.
- Remove unused Unix daemon test fixture controls. [#160874](https://github.com/openclaw/openclaw/pull/160874) Thanks @vincentkoc.
- Consolidate core, Codex and chat UI tests and their CI fixtures. [#160879](https://github.com/openclaw/openclaw/pull/160879) Thanks @steipete.
- Refresh generated session-recovery and Cloudflare Access translation records. [#160880](https://github.com/openclaw/openclaw/pull/160880)
- Consolidate regression tests and shared fixtures. [#160892](https://github.com/openclaw/openclaw/pull/160892) Thanks @steipete.
- Simplify existing cron model precedence and fallback selection. [#160903](https://github.com/openclaw/openclaw/pull/160903) Thanks @steipete.
- Refresh generated worker-progress, Side chat and Slack reviewer translation records. [#160905](https://github.com/openclaw/openclaw/pull/160905)
- Align 2026.9.7 package, catalog and macOS metadata and prepare release records. [#160937](https://github.com/openclaw/openclaw/pull/160937) Thanks @steipete.

**Bug fixes**

- Count only catalog workers in the captures integration test, avoiding false failures alongside other tests. [#161348](https://github.com/openclaw/openclaw/pull/161348)
- Warn about valid unused Apple translations in CI. [0033a497](https://github.com/openclaw/openclaw/commit/0033a497e5ba794ec0e03225e2f3fdd220660a4b) Thanks Peter Steinberger.
- Preserve UI development command exit results during shutdown. [017d224a](https://github.com/openclaw/openclaw/commit/017d224a025772e3492a0cc70e34e3287b3aee8a) Thanks Peter Steinberger.
- Accept valid CI plans after job repacking. [01c8d36b](https://github.com/openclaw/openclaw/commit/01c8d36b1f9abbb77e91217766f401fd0bd1b911) Thanks Peter Steinberger.
- Update PR wrapper expectations for admin evidence arguments. [02c68e2a](https://github.com/openclaw/openclaw/commit/02c68e2a0cca157d5fab8b12d6346e234828ae29) Thanks Peter Steinberger.
- Wait for Slack test acknowledgement readiness. [02fd4869](https://github.com/openclaw/openclaw/commit/02fd486956c72604877bdfc584e705d12634e175) Thanks Peter Steinberger.
- Restore required SQLite modules in PR tooling. [0338fa2f](https://github.com/openclaw/openclaw/commit/0338fa2f6d837616d10c6ffba665458a0b596127) Thanks Peter Steinberger.
- Place CLI authority integration tests in the database worker. [0437c689](https://github.com/openclaw/openclaw/commit/0437c689a0d576309db22b1bd4243919c0c5d434)
- Wait for configuration writes in identity reload tests. [055d97a0](https://github.com/openclaw/openclaw/commit/055d97a052479d38bcb9197f715cd5fc5adbad5a) Thanks Peter Steinberger.
- Initialize native-assignment state in upgrade test fixtures. [069a974b](https://github.com/openclaw/openclaw/commit/069a974b7317302f08f9cab48e71bb55ea599840) Thanks Peter Steinberger.
- Preserve qualified CI timing estimates across shard renaming. [06e0673c](https://github.com/openclaw/openclaw/commit/06e0673c0d8cf791fcfb878dfcbded41bc394b13) Thanks Peter Steinberger.
- Avoid deleting executed Windows binaries during test cleanup. [074198a6](https://github.com/openclaw/openclaw/commit/074198a6341afae646f7ffcfca83ae2616c001a2) Thanks Peter Steinberger.
- Supply a scheduler to cron startup recovery tests. [0830a3fa](https://github.com/openclaw/openclaw/commit/0830a3fa459ab358e59ce7a5084f3bb5fcad971a) Thanks @joshavant.
- Complete the session-placement test policy fixture. [09012603](https://github.com/openclaw/openclaw/commit/0901260323567d1587b59b027b5bc7d9ccfbdcad) Thanks Peter Steinberger.
- Restore model-provider categories for Z.AI and Novita. [09bea762](https://github.com/openclaw/openclaw/commit/09bea762930f9876acb86103a93dc15c4eb648c5) Thanks Peter Steinberger.
- Include the session-configuration dependency in PR tooling. [0a9fa7da](https://github.com/openclaw/openclaw/commit/0a9fa7dafabec7ce52c5dac5bd71b9e3c1bcc784) Thanks Peter Steinberger.
- Handle workspace retention in portal integration fixtures. [0c5fd66f](https://github.com/openclaw/openclaw/commit/0c5fd66fa8331534c1853d90b39a73b75edaa20a) Thanks Peter Steinberger.
- Register the prior-CI verifier for unused-code analysis. [0d02ab7a](https://github.com/openclaw/openclaw/commit/0d02ab7aaf657c1872a5dac32369e88504e3bd5c) Thanks Peter Steinberger.
- Retain current model owners in minimal Gateway validation. [0fffd0de](https://github.com/openclaw/openclaw/commit/0fffd0de2e78fb86458dab11d2ec047e5144776f) Thanks Peter Steinberger.
- Include shared plugin-loader dependencies in PR archives. [10145049](https://github.com/openclaw/openclaw/commit/10145049f8170010d12c239b945fddb741ec67b7) Thanks Peter Steinberger.
- Synchronize session-read role-revocation tests. [135ebe6e](https://github.com/openclaw/openclaw/commit/135ebe6e60d4ea8de6d07420b34d2cd30bbdff10) Thanks Peter Steinberger.
- Scale app-server test cost assertions with chunk size. [15ab76c3](https://github.com/openclaw/openclaw/commit/15ab76c3b680688031b0ec7e7189035bfdd6dd70) Thanks Peter Steinberger.
- Keep the advisory test-shard limit private. [1619aff4](https://github.com/openclaw/openclaw/commit/1619aff4781603cb998646f5ac8068603dbd3e20) Thanks Peter Steinberger.
- Repair Doctor state-directory migration mocks. [162dea17](https://github.com/openclaw/openclaw/commit/162dea17b03112d48c0f5c6f4b73f0da7a025233) Thanks Peter Steinberger.
- Close skills watchers during Gateway test teardown. [17c64c0f](https://github.com/openclaw/openclaw/commit/17c64c0f0f945fb1fbc25351639e484a1a8b703d) Thanks @saariuslystoned.
- Distinguish owner-count refreshes in session roster tests. [1820ff93](https://github.com/openclaw/openclaw/commit/1820ff934610d4fc19e7ffcf1175c4086e1cf85e) Thanks Peter Steinberger.
- Repair QA scenario protocol source references. [18b0130a](https://github.com/openclaw/openclaw/commit/18b0130a21b9b9aa6856b419ca0d22897f960c25) Thanks Peter Steinberger.
- Preserve Gateway network tests in owner watch selections. [18ce5c82](https://github.com/openclaw/openclaw/commit/18ce5c82559a2b83f4aec5af0e4adc5035b3c13d) Thanks Peter Steinberger.
- Split full release UI and Gateway tests into bounded jobs. [19ab2d03](https://github.com/openclaw/openclaw/commit/19ab2d0375b3d4e623b1788c1f7bb2c35eea7e63) Thanks Peter Steinberger.
- Preserve worker policy in selected-test CI timing records. [1a8f1d14](https://github.com/openclaw/openclaw/commit/1a8f1d1472a8743c3a1ea814ec04c46223ba821a) Thanks Peter Steinberger.
- Wait for the target session in progress widget tests. [1a94ee9e](https://github.com/openclaw/openclaw/commit/1a94ee9ed7e277eb98439d5ceecc6ab2b7411fa9) Thanks Peter Steinberger.
- Keep Codex QA mock catalogs out of live discovery. [1ad43659](https://github.com/openclaw/openclaw/commit/1ad43659b94d2fcb4b4590d5985f3f9fc338df0a) Thanks Peter Steinberger.
- Apply code-owner review requirements to relevant PRs. [1ca6a5d0](https://github.com/openclaw/openclaw/commit/1ca6a5d0a801e59e2a3bb0767f45fc8b70cb449d) Thanks Peter Steinberger.
- Align fake clocks in session-change event tests. [1cc14e5d](https://github.com/openclaw/openclaw/commit/1cc14e5d1c269288fa98dfd1123c3aa5a571f1a5) Thanks Peter Steinberger, Vincent Koc.
- Sequence queued-collector test admission and dispatch waits. [1e13fc8a](https://github.com/openclaw/openclaw/commit/1e13fc8abcd942ca398a89ca5560da11a1d46c41) Thanks Peter Steinberger.
- Wait for subagent cleanup before test assertions. [1f067fa0](https://github.com/openclaw/openclaw/commit/1f067fa03de2bd02fb00057353f48a1f74e3428f) Thanks Peter Steinberger.
- Capture live operator authority in guest-question fixtures. [229ab8a1](https://github.com/openclaw/openclaw/commit/229ab8a1fe957d3d4822309a39ddf9c7ec616395) Thanks @steipete.
- Observe actual subagent recovery readiness in tests. [22e8095b](https://github.com/openclaw/openclaw/commit/22e8095bdec1db6c13126674d5cc161390af186c) Thanks @steipete.
- Pin Windows CI to Node 24.20.0. [23834722](https://github.com/openclaw/openclaw/commit/238347227b08df23859c3e366bf2cfbb1aa42d3a) Thanks Peter Steinberger.
- Await macOS Cron test setup before background polling. [2542df6c](https://github.com/openclaw/openclaw/commit/2542df6cc0d10022c811aef384b57f5b6141283d) Thanks Peter Steinberger.
- Remove a retired lint-suppression test allowance. [256abd76](https://github.com/openclaw/openclaw/commit/256abd76af375fe02ef0e28af23d68e3a4bdd1f0) Thanks Peter Steinberger.
- Wait for configuration publication in command-palette tests. [25f07e88](https://github.com/openclaw/openclaw/commit/25f07e880f5d4e05375d14f07bfb6cc416295aeb) Thanks Peter Steinberger.
- Preserve setup and cleanup failures in cloud browser tests. [276537bf](https://github.com/openclaw/openclaw/commit/276537bf8dbb202e3de366f287307153d252a696) Thanks @vincentkoc.
- Resolve unknown prior-CI mergeability with complete REST observations. [28340c41](https://github.com/openclaw/openclaw/commit/28340c41f8b88ae6d11488e523808315319747b5) Thanks Peter Steinberger.
- Include the limit helper in packaging test fixtures. [2989020e](https://github.com/openclaw/openclaw/commit/2989020eca79f6abb4ea3c78f2216c5a70b29f59) Thanks Peter Steinberger.
- Restore selective iOS screenshots and hourly simulator tests. [29b4f90b](https://github.com/openclaw/openclaw/commit/29b4f90bb6b813eeb72a07d034c57784b6f91077) Thanks Peter Steinberger.
- Restore deferred PR checks across large release pauses. [2a7b059f](https://github.com/openclaw/openclaw/commit/2a7b059f4ef38adf1a221320f6c48e61b4e0c728) Thanks @steipete.
- Restore late source-mutation coverage in SDK baseline tests. [2b2ae319](https://github.com/openclaw/openclaw/commit/2b2ae319c923751bc9621af6942867ccf4f3302e) Thanks Peter Steinberger.
- Make fallback birthtime tests deterministic. [2da0e9a4](https://github.com/openclaw/openclaw/commit/2da0e9a4c85b4976d0c6ac56b3dab57e88f859f6) Thanks Peter Steinberger.
- Preserve large tracked test inventories during discovery. [31587f12](https://github.com/openclaw/openclaw/commit/31587f12b69e3a6bf4ade37a1fb8b254c609acfe) Thanks Peter Steinberger.
- Correct discovery outcomes in model lifecycle fixtures. [3241d947](https://github.com/openclaw/openclaw/commit/3241d9473856449e9c59d164c67aff3e0d66df24) Thanks Peter Steinberger.
- Measure worker heap after startup collection. [32ba81a4](https://github.com/openclaw/openclaw/commit/32ba81a40d9d57065280aef6a25fed0b39223f21) Thanks Peter Steinberger.
- Allow independent task completions in either order in tests. [346219cf](https://github.com/openclaw/openclaw/commit/346219cf52cedd7e2e2ff2360ef3c9dd357fa572) Thanks Peter Steinberger.
- Wait for Gateway readiness in iOS document tests. [34e8976a](https://github.com/openclaw/openclaw/commit/34e8976a346f8291cc9cbca00fd07ab2d49d480f) Thanks Peter Steinberger.
- Remove webhook deadline coupling from Telegram admission tests. [36030c61](https://github.com/openclaw/openclaw/commit/36030c6156ba95edc30eae25dad939631d8b5322) Thanks Peter Steinberger.
- Preserve the first Vitest timeout failure. [36baa2cd](https://github.com/openclaw/openclaw/commit/36baa2cd98d034612d43ca57873ebdda366f0ec3) Thanks Peter Steinberger.
- Correct CI base-recovery fetch assertions. [380a77a8](https://github.com/openclaw/openclaw/commit/380a77a86f6a1e877cb3876c6c67d2759455edde) Thanks Peter Steinberger.
- Make daemon lazy loaders recognizable to source checks. [385ac289](https://github.com/openclaw/openclaw/commit/385ac2893544a1bb3d5da790a38d6eaabbbeeb53) Thanks Peter Steinberger.
- Supply sealed npm artifacts to release writer tests. [3928d51b](https://github.com/openclaw/openclaw/commit/3928d51bf8eeca51e409ab2bfd31928cbbfcd539) Thanks Peter Steinberger.
- Repair the upgrade-survivor no-op test handover. [39db93e0](https://github.com/openclaw/openclaw/commit/39db93e000b738897ae2ee0d33e6b0d1037e4bde) Thanks Peter Steinberger.
- Isolate progress hovercard tests from native catalog discovery. [3a129a7c](https://github.com/openclaw/openclaw/commit/3a129a7c469a9e5aec879e89a6dcdd98cbdc5143) Thanks Peter Steinberger.
- Repair worktree QA scenario test references. [3a300c65](https://github.com/openclaw/openclaw/commit/3a300c650a5b87c4f84afeea7c2ff3a1df70e4ee) Thanks Peter Steinberger.
- Include missing SQLite reader dependencies in PR wrappers. [3a4bbc68](https://github.com/openclaw/openclaw/commit/3a4bbc6882af351b653670a74b64779423ed96df) Thanks Peter Steinberger.
- Wait for maintenance startup in ownership tests. [3b1f0372](https://github.com/openclaw/openclaw/commit/3b1f03721439cf9231822d8da4190b46b02d8810) Thanks Peter Steinberger.
- Stop scheduling focused CI work after a test failure. [3b8ed47b](https://github.com/openclaw/openclaw/commit/3b8ed47b09e61e165ac7ac95e1a03a379d791609) Thanks Peter Steinberger.
- Remove stale worktree test references from CI metadata. [3e0def14](https://github.com/openclaw/openclaw/commit/3e0def1451b31ce1208c5b3665cd13f19e2ea029) Thanks Peter Steinberger.
- Recover cancelled auto-merge requests with replacement-head evidence. [3e4e9cd4](https://github.com/openclaw/openclaw/commit/3e4e9cd4aeee2b51b586661354f6b879261700f1) Thanks Peter Steinberger.
- Supply required titles in QA Code Mode calls. [412eb6e8](https://github.com/openclaw/openclaw/commit/412eb6e8b803bf7cdda0a7938cd61433cd2922b9) Thanks Peter Steinberger.
- Wait for maintenance lifecycle signals in shutdown tests. [441c3df8](https://github.com/openclaw/openclaw/commit/441c3df8b7e2f6316ede9e6f6f75f16abaadd068) Thanks @joshavant.
- Await Talk test storage cleanup before removing fixtures. [444f09ee](https://github.com/openclaw/openclaw/commit/444f09ee66b17735ce61a6062db06613d209f485) Thanks Peter Steinberger.
- Wait for Watch receipt publication in regression tests. [44c58430](https://github.com/openclaw/openclaw/commit/44c584305f671dc983809b173362d9d96340c438) Thanks Peter Steinberger.
- Stabilize cron tests and retain no-op upgrade diagnostics. [45061103](https://github.com/openclaw/openclaw/commit/45061103986a0ce555cdb433e42a4e21349b47b6) Thanks Peter Steinberger.
- Avoid missing proof uploads after CI cancellation. [45765010](https://github.com/openclaw/openclaw/commit/4576501026a834d9a9d7445624648e45d56565b4) Thanks Peter Steinberger.
- Isolate nested worker-artifact test caches. [45e3fb02](https://github.com/openclaw/openclaw/commit/45e3fb028078ab104231f20c0249114bb5a2ca15) Thanks Peter Steinberger.
- Wait for observed Android Gateway handoff state in tests. [46a01b1b](https://github.com/openclaw/openclaw/commit/46a01b1b665cee1ff93376f3dc6efcc3f913f8a1) Thanks Peter Steinberger.
- Repair concurrent session-group defaults test sequencing. [46dfea6a](https://github.com/openclaw/openclaw/commit/46dfea6a42010c942345d684b6dc23752d1f2cbe) Thanks Peter Steinberger.
- Keep sidebar reconnect test data consistent. [470c69ce](https://github.com/openclaw/openclaw/commit/470c69ced0f6310e8cfbe137eaacda0360f580ba) Thanks Peter Steinberger.
- Stage missing diagnostics support for frozen upgrade tests. [47b36e51](https://github.com/openclaw/openclaw/commit/47b36e516adb4ffe681d65d1721a5ee3dae84da9) Thanks Peter Steinberger.
- Isolate CLI process-title test state. [481045d4](https://github.com/openclaw/openclaw/commit/481045d44bee713446fa7c7a0d4c56e376d34993) Thanks Peter Steinberger.
- Wait for stable widget pointer routing in UI tests. [48c6a318](https://github.com/openclaw/openclaw/commit/48c6a3188cc96827fdf855e70e830920ef687da9) Thanks Peter Steinberger.
- Use the Settings agent selector in Memory browser tests. [4b225bae](https://github.com/openclaw/openclaw/commit/4b225bae6349b81429c74675a7b98b3e1a2a9053) Thanks Peter Steinberger.
- Supply the scheduler in config-commit projection tests. [4bd10540](https://github.com/openclaw/openclaw/commit/4bd105408ccdac229eee8f719f082ba143f0c26c) Thanks Peter Steinberger.
- Answer refreshed Talk configuration requests in Android tests. [4c4fc7b7](https://github.com/openclaw/openclaw/commit/4c4fc7b79f42d60a555b1e8fa9ad97c95f37f2e2) Thanks Peter Steinberger.
- Control media deadlines in Slack history-policy tests. [4c88390c](https://github.com/openclaw/openclaw/commit/4c88390c72d79ff11e1b450c697d473e8a2ebf5a) Thanks Peter Steinberger.
- Preserve Node library paths in update test fixtures. [4e455c29](https://github.com/openclaw/openclaw/commit/4e455c298b3aaa6d589f49ab3891af58c1f34472) Thanks Peter Steinberger.
- Wait for profile preference requests in UI tests. [4e4b5c5c](https://github.com/openclaw/openclaw/commit/4e4b5c5c515bc1cdd44c854e7ac3bc131ba0f97f) Thanks Peter Steinberger.
- Initialize the update registry-order test baseline. [4fa09e93](https://github.com/openclaw/openclaw/commit/4fa09e93bc311eab23066418c073999c8b6675cb) Thanks Peter Steinberger.
- Await abort-event publication in Gateway tests. [5046031a](https://github.com/openclaw/openclaw/commit/5046031a32c1aaf22562c59aa7e80f7365159fbe) Thanks Peter Steinberger.
- Include Android Access checks in release coordination. [533664f8](https://github.com/openclaw/openclaw/commit/533664f8825e81439e3aac28bab594aba34a4111) Thanks Peter Steinberger.
- Await Telegram test-worker acknowledgements directly. [547bb312](https://github.com/openclaw/openclaw/commit/547bb312f4098cd0f28f71cc45a7e351e944b1ff) Thanks Peter Steinberger, chopin-op60.
- Recognize verified CI deadlines reported as cancellations. [548a1b89](https://github.com/openclaw/openclaw/commit/548a1b899fd09d7adc1580fabe6c8cfd3643ff82) Thanks Peter Steinberger.
- Register workflow script entrypoints in Knip. [54a9d03d](https://github.com/openclaw/openclaw/commit/54a9d03dcf01436c1b671a6567d7d84381fecedc) Thanks Peter Steinberger.
- Find collapsed session rows in thinking-metadata tests. [54bd2d6f](https://github.com/openclaw/openclaw/commit/54bd2d6f42e4085e2da172dc1d5dc59f444c6cea) Thanks Peter Steinberger.
- Refresh Workboard Control UI bundle paths. [559b4f84](https://github.com/openclaw/openclaw/commit/559b4f84f6150781523bd2b66b2c08fcdc15220f) Thanks Peter Steinberger.
- Recognize the current CI cancellation step. [56376753](https://github.com/openclaw/openclaw/commit/56376753f832ae823dcecd8fffc4f35d76bf3083) Thanks Peter Steinberger.
- Prepare the paired iPhone for Watch simulator tests. [56c64394](https://github.com/openclaw/openclaw/commit/56c643947272575869cb051d020a7fc419eb8ac0) Thanks Peter Steinberger.
- Restore the node-provisioning return type. [57f12db9](https://github.com/openclaw/openclaw/commit/57f12db99ee3dd53f265170cb1ae7bbe089a8eed) Thanks Peter Steinberger.
- Repair CI static-evidence test fixtures. [57f1abec](https://github.com/openclaw/openclaw/commit/57f1abecc191ea0a54a9af93a6ccb97e6eb87700) Thanks @joshavant.
- Fix MCP Code Mode test fixture arguments. [596280a1](https://github.com/openclaw/openclaw/commit/596280a1f42dfdd916e7469e04a0b757ec78c655) Thanks Peter Steinberger.
- Include config snapshot dependencies in PR tooling archives. [5b210a8e](https://github.com/openclaw/openclaw/commit/5b210a8eea758c654ba2fe07bd834805936a9df8) Thanks Peter Steinberger.
- Warn on verified obsolete native translation rows in CI. [5b384871](https://github.com/openclaw/openclaw/commit/5b384871ea6231ca9e960a883e7a0bcc7beb7a85) Thanks Peter Steinberger.
- Tolerate exited helper threads in process test snapshots. [5b3cb698](https://github.com/openclaw/openclaw/commit/5b3cb698b677235c266ba88ce4e33671e8cbf2a1) Thanks Peter Steinberger.
- Prepare compaction test handlers before timed event observation. [5ea791a8](https://github.com/openclaw/openclaw/commit/5ea791a841ee8f64da3096c790c71b947d31fa21) Thanks Peter Steinberger.
- Preserve native lint configuration validation in CI. [5ebe0d43](https://github.com/openclaw/openclaw/commit/5ebe0d43798ad8159400becd5821029889729544) Thanks Peter Steinberger.
- Reconcile the lint suppression test inventory. [5f99e4b2](https://github.com/openclaw/openclaw/commit/5f99e4b29a479db193a1c598d585a4e6ec23812a) Thanks @joshavant.
- Align image ticket tests with existing larger previews. [5f9fa811](https://github.com/openclaw/openclaw/commit/5f9fa811f8f90669d35a02fd4400c51c2a3b3a62) Thanks Peter Steinberger.
- Prepare Watch pairing fixtures before the invoke deadline. [60237157](https://github.com/openclaw/openclaw/commit/60237157f17a24a92c183d292966e726db37abf5) Thanks Peter Steinberger.
- Wait for stdin closure in Codex lifecycle tests. [619405d4](https://github.com/openclaw/openclaw/commit/619405d49ddd3b3745ba93f42e195c70a8e4d31b) Thanks Peter Steinberger.
- Stabilize media download tests during image reload. [63410c30](https://github.com/openclaw/openclaw/commit/63410c305c358bd646fa79a18d0b35ec6b75fc54) Thanks Peter Steinberger.
- Keep Gateway test configuration identity stable. [636e5611](https://github.com/openclaw/openclaw/commit/636e56110695278f07b5ec2337c4e49f8b2bffe9) Thanks Peter Steinberger.
- Restore QA mock session identity from transport metadata. [6386dc46](https://github.com/openclaw/openclaw/commit/6386dc4665d182b37282012ed7d6511465015c31) Thanks Peter Steinberger.
- Route Gateway network tests to the host-broker owner. [63d299c3](https://github.com/openclaw/openclaw/commit/63d299c31b06150cc5fbff90c3b8123290608e13) Thanks Vincent Koc.
- Disable unrelated reloads in completion test fixtures. [659f4b73](https://github.com/openclaw/openclaw/commit/659f4b73d8e24cc8513f6b7f2f3075140df02655) Thanks Peter Steinberger.
- Prepare retention-test readers before measuring contention. [65e3eeca](https://github.com/openclaw/openclaw/commit/65e3eecabd84876e6e32ac858aa8ce83e9d25674) Thanks Peter Steinberger.
- Align CLI tests with current provider error messages. [66898a63](https://github.com/openclaw/openclaw/commit/66898a633464e85e4aea8fd5a0fd2043c88025af) Thanks Peter Steinberger.
- Load real filesystem dependencies in update swap fixtures. [691d2e5c](https://github.com/openclaw/openclaw/commit/691d2e5cd48c0ddda650123b8b9ee0089fa39004) Thanks @steipete.
- Await database cleanup in Gateway startup race tests. [696987cb](https://github.com/openclaw/openclaw/commit/696987cbfe52773ffe8848a9778e4f078d463424) Thanks Peter Steinberger.
- Include mobile release evidence in CLI test fixtures. [69a2b509](https://github.com/openclaw/openclaw/commit/69a2b5094badde281f943a399f1f36807d0acf80) Thanks Peter Steinberger.
- Check maintenance refusals through plugin-state error causes. [6ad6f1fb](https://github.com/openclaw/openclaw/commit/6ad6f1fbe84619ca08620e45cff039aefc04452b) Thanks Peter Steinberger.
- Wait for the initial session roster in sidebar tests. [6b9da9dc](https://github.com/openclaw/openclaw/commit/6b9da9dc02879a2e27abac0318d65bd9b25b0f4b) Thanks Peter Steinberger.
- Stabilize database and timing test fixtures. [6c7544ad](https://github.com/openclaw/openclaw/commit/6c7544adc9826fa637425a2fa967389e0507a800) Thanks Peter Steinberger.
- Match compaction QA requests by session identity. [6cf4b810](https://github.com/openclaw/openclaw/commit/6cf4b810c00d5d0eb9265874ecfb44105e57f209) Thanks Peter Steinberger.
- Wait for database release in heartbeat replacement tests. [6d1826f1](https://github.com/openclaw/openclaw/commit/6d1826f1ad1f7993a252e94b60b2da3469747186) Thanks Peter Steinberger.
- Match CI concurrency expectations to the runner profile. [6d18cb7c](https://github.com/openclaw/openclaw/commit/6d18cb7cd9f494d39b0d5541843eb6965486ece8) Thanks Peter Steinberger.
- Isolate Doctor rollback fixtures from bundled plugins. [6d204ed2](https://github.com/openclaw/openclaw/commit/6d204ed22bb671e1b850a44a170c84ff07d21acf) Thanks Peter Steinberger.
- Await attribution fixture cleanup in its owning lifecycle. [6d327782](https://github.com/openclaw/openclaw/commit/6d327782172c15c569422d29b776a9876a791a34) Thanks Peter Steinberger.
- Wait for model availability updates in Android tests. [6d684b94](https://github.com/openclaw/openclaw/commit/6d684b94eae486bc4cc8ee4d7e2f5847f21d4ae3) Thanks Peter Steinberger.
- Stop checkout test actors when lease reads are denied. [6d8d7772](https://github.com/openclaw/openclaw/commit/6d8d77725f717b39714f555b13d8c2b578a434cf) Thanks Peter Steinberger.
- Wait for parent completion in subagent QA fixtures. [6dc9d864](https://github.com/openclaw/openclaw/commit/6dc9d864474e38c62d4c49b48f5988e5d9fb6736) Thanks Peter Steinberger.
- Initialize the MCP scheduler in Workshop review tests. [6dd3011e](https://github.com/openclaw/openclaw/commit/6dd3011e9f56118d09aa562ee49d7fbcd75e99bc) Thanks Peter Steinberger.
- Account for the Bun launcher variable in validation budgets. [6e0d8aa1](https://github.com/openclaw/openclaw/commit/6e0d8aa1a0c42db176cc886e72a53699d77745b8) Thanks Peter Steinberger.
- Await lifecycle completion before registry test assertions. [6efe0434](https://github.com/openclaw/openclaw/commit/6efe0434c9cadf6a7c84780baed2392dceb8938b) Thanks Peter Steinberger.
- Align native text inventory tests with existing permission wording. [6f325d20](https://github.com/openclaw/openclaw/commit/6f325d2037dcada7e05110ed653863a44b5a5e44) Thanks Peter Steinberger.
- Preserve native sockets in upgrade-lane tests. [716cec26](https://github.com/openclaw/openclaw/commit/716cec266619efc6bec3937ef551eadfb82bd627) Thanks Peter Steinberger.
- Wait for delivery readiness in reconnect tests. [74b00d7d](https://github.com/openclaw/openclaw/commit/74b00d7de1b288a57bc70103833e592c3ea9b858) Thanks Peter Steinberger.
- Check pending Crabbox work without ripgrep. [752571ec](https://github.com/openclaw/openclaw/commit/752571eca0237f7e432a8dc61c8aa2a8d30adbae) Thanks Peter Steinberger.
- Apply jsdom compatibility to the active test worker. [7526f600](https://github.com/openclaw/openclaw/commit/7526f600cf104b51ee1ba60a4cf533d9e1449a01) Thanks Peter Steinberger.
- Preserve serial Control UI CI workers. [75fe4fec](https://github.com/openclaw/openclaw/commit/75fe4fec44f3415689cca448b5d69b1fb0ff8316) Thanks Peter Steinberger.
- Wait for complete TUI test log records. [764c3e39](https://github.com/openclaw/openclaw/commit/764c3e39e2f004623f9351a5210e46503ccb6405) Thanks Peter Steinberger.
- Remove obsolete clock overrides from Workshop tests. [764c9331](https://github.com/openclaw/openclaw/commit/764c9331a31b4b87bdc06b95f39c6870c5aca2f3) Thanks Peter Steinberger.
- Wait for resumed Gateway work to settle in tests. [765ec334](https://github.com/openclaw/openclaw/commit/765ec33485b24238a0b2bc8a25710096ae3a1723) Thanks Peter Steinberger.
- Settle chat test fixtures before closing session stores. [77b32334](https://github.com/openclaw/openclaw/commit/77b3233487a8e3fdb7d9a433ae72b3088033ff53) Thanks Peter Steinberger.
- Wait for preflight test commands before cleanup. [789e24c3](https://github.com/openclaw/openclaw/commit/789e24c34020cd01f360c58241acd19ca3841920) Thanks Peter Steinberger.
- Recognize complete legacy-migration refusals in lifecycle tests. [78e3b5cc](https://github.com/openclaw/openclaw/commit/78e3b5cc97eb4a60f52d21d98e06749a322754c0) Thanks Peter Steinberger.
- Repair Team Reports scheduler test imports. [7c4866c7](https://github.com/openclaw/openclaw/commit/7c4866c73b31f9a4e4ee24d2323f179aa7c531ff) Thanks Peter Steinberger.
- Update the Google realtime assertion baseline. [80c3c742](https://github.com/openclaw/openclaw/commit/80c3c7424677dbc86dd79c188a8c4f62940a1451) Thanks Peter Steinberger.
- Preserve typed ownership checks in chat route resolution. [813a10e7](https://github.com/openclaw/openclaw/commit/813a10e7deb628a71d11c883636e9281a7911ac3) Thanks Peter Steinberger.
- Repair CI type checks and database test routing. [82411a34](https://github.com/openclaw/openclaw/commit/82411a34c8b9a41c4635acb0bed24b48e33e90cf) Thanks Peter Steinberger.
- Honor the workflow Node pin on hosted CI runners. [84bf30fe](https://github.com/openclaw/openclaw/commit/84bf30fecf13c1c288fdb7d005152095c7230e88) Thanks Peter Steinberger.
- Remove stream-ordering races from legacy update tests. [85af7152](https://github.com/openclaw/openclaw/commit/85af71525401a493a3fd39fd3aaecf44e3253943) Thanks Peter Steinberger.
- Finish native parser fixture provisioning before execution. [85ca5a54](https://github.com/openclaw/openclaw/commit/85ca5a544f6debbcc758ca4325210ee8c11b278c) Thanks Peter Steinberger.
- Include read-only reuse support in PR wrappers. [86d36530](https://github.com/openclaw/openclaw/commit/86d3653041c3d5e5ce96d10007b38f03120330d1) Thanks Peter Steinberger.
- Align CI planner assertions with precise target inventory. [88e2ebef](https://github.com/openclaw/openclaw/commit/88e2ebeff4f9d1de7fa9a1c535f8b71764b3dfc8) Thanks Peter Steinberger.
- Wait for Gateway request settlement before test cleanup. [88f60ff9](https://github.com/openclaw/openclaw/commit/88f60ff9bcbf6e0ee5dba571e25a4a1fd4bd5cc4) Thanks Peter Steinberger.
- Wait for claim settlement in Gateway persistence tests. [897b8e90](https://github.com/openclaw/openclaw/commit/897b8e9016d63b63edda7f60a277fd4669f4e16b) Thanks Peter Steinberger.
- Separate iOS screenshot logs from capture evidence. [89f9250f](https://github.com/openclaw/openclaw/commit/89f9250feaf726a306a9191480203f8f7978f732) Thanks Peter Steinberger.
- Isolate first-turn chat tests from background wakes. [8a14f266](https://github.com/openclaw/openclaw/commit/8a14f266fcc907b0f1fecae9882caeb1b565c06a) Thanks Peter Steinberger.
- Align ClawHub approval tests with parent approval receipts. [8a73a178](https://github.com/openclaw/openclaw/commit/8a73a178205f4cb7d519d39b981dd4221f505e01) Thanks Peter Steinberger.
- Use the active runtime in post-core update tests. [8b549de1](https://github.com/openclaw/openclaw/commit/8b549de1e0c7559756178ddf328d3f6c6aad06ba) Thanks Peter Steinberger.
- Recognize completed deletion cancellation in SQLite lifecycle tests. [8ba18cf1](https://github.com/openclaw/openclaw/commit/8ba18cf19ad11e6171b2fbbb30e536b865f02f91) Thanks Peter Steinberger.
- Prevent port-allocation races in model inventory tests. [8c65491b](https://github.com/openclaw/openclaw/commit/8c65491b79b3d3a2b615879c3e5c4658c9480d1d) Thanks Peter Steinberger.
- Restore pane identity in footer scroll tests. [91ee6aa3](https://github.com/openclaw/openclaw/commit/91ee6aa3de1072401b2ff6eb2dd724c276061dbc) Thanks Peter Steinberger.
- Align catalog lifecycle tests with selected-first ordering. [93ed0fac](https://github.com/openclaw/openclaw/commit/93ed0facc86a2a3978e70f8f33469dd0a15bc46d) Thanks Peter Steinberger.
- Isolate session-path performance tests from extra Gateway work. [9423fbd9](https://github.com/openclaw/openclaw/commit/9423fbd9abaa52d75d9855997281ba37963653b9) Thanks Peter Steinberger.
- Wait for the owner roster before keyboard navigation tests. [94cbd133](https://github.com/openclaw/openclaw/commit/94cbd1335dfb64f80a010965151e9130312b35e7) Thanks Peter Steinberger.
- Isolate source-installer validation from shared image dependencies. [9a6a5376](https://github.com/openclaw/openclaw/commit/9a6a5376956d7cfa3c59c154587be80770acde92) Thanks @vincentkoc.
- Remove duplicate extension inventory from CI coverage tests. [9a7e90e7](https://github.com/openclaw/openclaw/commit/9a7e90e76f7c1f2362194da9b29893787112adf7) Thanks Peter Steinberger.
- Avoid package repair in channel presentation tests. [9b730f0c](https://github.com/openclaw/openclaw/commit/9b730f0cfb47281b51a01bdd3415e7c645e61b3a) Thanks Peter Steinberger.
- Stabilize Android voice-note lifecycle tests. [9d561769](https://github.com/openclaw/openclaw/commit/9d5617695c09874ead0669cfb9cc51d9a39c4a04) Thanks Peter Steinberger.
- Avoid core-collector delays in Linux abort tests. [9f4b6e97](https://github.com/openclaw/openclaw/commit/9f4b6e9714f5debef41cdb77206f666896fa430c) Thanks Peter Steinberger.
- Bound simulated time in recovery tests. [9fe93a20](https://github.com/openclaw/openclaw/commit/9fe93a204e3bb81080e5bca5b8fcef5c2480b4d0) Thanks Peter Steinberger.
- Register Codex attempt tests with database workers. [a018e414](https://github.com/openclaw/openclaw/commit/a018e414bb9d27a276217810ca81f540dc428c6b) Thanks Peter Steinberger.
- Keep selected CI coverage within matrix planning limits. [a08479ac](https://github.com/openclaw/openclaw/commit/a08479ace1d4773ca93c7b6d89d7f8eb0edfddf3) Thanks Peter Steinberger.
- Repair isolated QA routing and evidence collection. [a19ae3ed](https://github.com/openclaw/openclaw/commit/a19ae3eda4066a72b96a39684f72b02b07fad99a) Thanks @joshavant.
- Target roster requests in follow-up tests. [a2792b9a](https://github.com/openclaw/openclaw/commit/a2792b9a40bb7b3de538b21c01215fc8044d8e6a) Thanks Peter Steinberger.
- Prepare Google Chat runtime before setup tests. [a3dcaa1a](https://github.com/openclaw/openclaw/commit/a3dcaa1a68c01c77fbbab1dd851309ba1c705d90) Thanks @teacup404, Peter Steinberger.
- Remove duplicate timing declaration in upgrade tests. [a46cde88](https://github.com/openclaw/openclaw/commit/a46cde88785df6aa867e35f98aa5fabce6cd45e9) Thanks Peter Steinberger.
- Separate lifecycle test timing from fixture startup. [a4f6aa28](https://github.com/openclaw/openclaw/commit/a4f6aa281d3caadf3c0b9618e681faa49c8edd32) Thanks Peter Steinberger.
- Load staged swap targets in restart fixtures. [a61b5214](https://github.com/openclaw/openclaw/commit/a61b5214bc8352533215db48db228e35a9278e35) Thanks Peter Steinberger.
- Prepare native UI fixtures before compilation. [ab165b4e](https://github.com/openclaw/openclaw/commit/ab165b4e26a05a2d7e922911e16b63eb32a0eb85) Thanks Peter Steinberger.
- Align lint planning fixtures with file selection. [ac00c476](https://github.com/openclaw/openclaw/commit/ac00c476d1b9c09df331db70cbf809d29ed35e9f) Thanks Peter Steinberger.
- Place the schema exception where lint reads it. [af545bf3](https://github.com/openclaw/openclaw/commit/af545bf3b6add3f90825e1532bfeac884a4a3c0c) Thanks Vincent Koc.
- Stabilize the Discord retry-budget test clock. [af9ffedc](https://github.com/openclaw/openclaw/commit/af9ffedca38769ede95c47d2fe043e3427d0eee8) Thanks Peter Steinberger.
- Drain historical task-history readers before fixture reset. [b21237a9](https://github.com/openclaw/openclaw/commit/b21237a93c4005427261b1a75fc61e95eacefdb5) Thanks Peter Steinberger.
- Refresh preview-session browser fixtures. [b2452cb2](https://github.com/openclaw/openclaw/commit/b2452cb2119924a1459efc2ff665d2c5dc225681) Thanks Peter Steinberger.
- Correct interrupted-subagent test expectations. [b459eb60](https://github.com/openclaw/openclaw/commit/b459eb600f238d38f8b7156675e5868751f52c54) Thanks Peter Steinberger.
- Remove the stale Copilot test baseline entry. [b7cf7d90](https://github.com/openclaw/openclaw/commit/b7cf7d9098538044d2e65fbde916458f013c7b73) Thanks Peter Steinberger.
- Match mock session sampling clocks. [b7e2666e](https://github.com/openclaw/openclaw/commit/b7e2666e6b0e5d01be6611086170b99f83ca6b8a) Thanks Peter Steinberger.
- Avoid false iOS typing-focus test timeouts. [b8d9869f](https://github.com/openclaw/openclaw/commit/b8d9869fba0488ade885f0d1b40d3c0a94dbb226) Thanks Peter Steinberger.
- Isolate Gateway health in update lease tests. [b9a42793](https://github.com/openclaw/openclaw/commit/b9a42793fc4d8df1a8e9a4df1541ad80d9b31439) Thanks Peter Steinberger.
- Remove a duplicate chat clipboard helper. [bb05e779](https://github.com/openclaw/openclaw/commit/bb05e779e2a7cef13417cdc7cd06291627cb2cb0) Thanks Peter Steinberger.
- Prevent database lock stalls in worker recovery tests. [bbbb3b46](https://github.com/openclaw/openclaw/commit/bbbb3b464a9fe6094a65cc391ce3db94a1c29c07) Thanks Peter Steinberger.
- Recover known base-change admin merge refusals. [bff74e5f](https://github.com/openclaw/openclaw/commit/bff74e5f0b6d57d9bb383bbadbfed799bd371af6) Thanks Peter Steinberger.
- Wait for assignment menus to render in tests. [c05b74fb](https://github.com/openclaw/openclaw/commit/c05b74fbe1530db933c65e3319e5876ebc5e1423) Thanks Peter Steinberger.
- Close configured databases before deleting test homes. [c07f1eb4](https://github.com/openclaw/openclaw/commit/c07f1eb4a626276486596626418142b868981757) Thanks Peter Steinberger.
- Align cron fixtures with Gateway scheduling. [c0e6951d](https://github.com/openclaw/openclaw/commit/c0e6951d6f02d3eabd4bc13cf8e9fa9e77d290ac) Thanks Peter Steinberger.
- Correct widget frame types in browser tests. [c21a63f7](https://github.com/openclaw/openclaw/commit/c21a63f766c5443c2f19b23161a47166daf43913) Thanks Peter Steinberger.
- Wait for announcements before test history reads. [c2256122](https://github.com/openclaw/openclaw/commit/c225612220e94aab792e2b81e692051f5340c06e) Thanks Peter Steinberger.
- Avoid webhook deadlines in Telegram pipeline tests. [c582939c](https://github.com/openclaw/openclaw/commit/c582939c018c065528bda3ebc519071d3b94f29e) Thanks Peter Steinberger.
- Await worktree test cleanup. [c65004f9](https://github.com/openclaw/openclaw/commit/c65004f98b92f9ac3c7c62a9f70507c8ff22b30d) Thanks Peter Steinberger.
- Wait for historical maintenance-task publication in disposal tests. [c947420a](https://github.com/openclaw/openclaw/commit/c947420a323614f7b0d637652d238f2c5db965bd) Thanks Peter Steinberger.
- Await historical task-history scope cleanup. [c9651107](https://github.com/openclaw/openclaw/commit/c965110752c638c747b14bcf98fea79968961da7) Thanks Peter Steinberger.
- Isolate release baseline fetches from freshness settings. [cac0c021](https://github.com/openclaw/openclaw/commit/cac0c021273af695cb257492b3c2b4b20075b665) Thanks @romneyda.
- Repair schema and CI planning fixtures. [cb3e6df6](https://github.com/openclaw/openclaw/commit/cb3e6df656769034268df9331fcde9f21d19946f) Thanks @joshavant.
- Stabilize subagent deadline and completion tests. [cff310fe](https://github.com/openclaw/openclaw/commit/cff310fec7a574e4bdf7f0bbbde7bacb87bafb74) Thanks Peter Steinberger.
- Isolate prepared provider-catalog tests. [d204850d](https://github.com/openclaw/openclaw/commit/d204850dec61cb4215a8d39a72384f0cf502bc94) Thanks Peter Steinberger.
- Isolate authentication test identity stores. [d21edfe3](https://github.com/openclaw/openclaw/commit/d21edfe3f88ba7e837765fab3a63452ce9efa992) Thanks Peter Steinberger.
- Align progress-widget test session state. [d6aa710c](https://github.com/openclaw/openclaw/commit/d6aa710c509166efda9e92ca7df80c84b4def35f) Thanks Peter Steinberger.
- Account for historical snapshot coercion in lint tests. [d6dc69c0](https://github.com/openclaw/openclaw/commit/d6dc69c02dfbf8a261787255d9c7a803c34796ae) Thanks Peter Steinberger.
- Isolate parent requests and replacement heartbeat tests. [d94eac54](https://github.com/openclaw/openclaw/commit/d94eac5484a9c9cb59572640e065ff9351480fe4) Thanks Peter Steinberger.
- Stabilize heartbeat and session-title tests. [d9569745](https://github.com/openclaw/openclaw/commit/d9569745764fa53d540dbfe3a0b536975bc69a7d) Thanks Peter Steinberger.
- Preserve native animation behavior in splash tests. [d9fc2556](https://github.com/openclaw/openclaw/commit/d9fc2556e8f1aff06bbf6f65b2e8f933e8fda09f) Thanks Peter Steinberger.
- Restore the reliability helper export for tests. [da2efd83](https://github.com/openclaw/openclaw/commit/da2efd83b8a689572803d31c740fd700d0f0a907) Thanks Peter Steinberger.
- Correct the retained-assets UI test type import. [da8149b8](https://github.com/openclaw/openclaw/commit/da8149b8ba7d88d76dbe7979986e307a4542e6f0) Thanks Peter Steinberger.
- Wait for session fixture reads before cleanup. [db8095d7](https://github.com/openclaw/openclaw/commit/db8095d7ce450a12b6bea243157f5f6a0221d5da) Thanks Peter Steinberger.
- Scope desktop retry tests to the selected worker. [dbd7453f](https://github.com/openclaw/openclaw/commit/dbd7453fd2ff2db7192fdbef4515404d80be7cc2) Thanks Peter Steinberger.
- Supply Gateway context in HTTP tests. [dd3fb2bd](https://github.com/openclaw/openclaw/commit/dd3fb2bd9cf2aedf1a86eebc388e4f3386b35b98) Thanks Peter Steinberger.
- Isolate legacy-listener test connections. [df3ea62f](https://github.com/openclaw/openclaw/commit/df3ea62faa2fbc6134bcbc0a8825354890979bfd) Thanks Peter Steinberger.
- Synchronize voice and side-chat browser tests. [e256cbef](https://github.com/openclaw/openclaw/commit/e256cbef8ae0b6dd82b295fc6c18b1fb6eecadb1) Thanks Peter Steinberger.
- Prepare historical task readers before test barriers. [e3560607](https://github.com/openclaw/openclaw/commit/e3560607f63c9a2511c5d49323488ed182ae84c3) Thanks Peter Steinberger.
- Add launcher provenance to Windows service tests. [e36b63c1](https://github.com/openclaw/openclaw/commit/e36b63c106a6df8e173cb091dbef8158a96e20a0) Thanks Peter Steinberger.
- Load timing helpers in upgrade reset tests. [e5fae567](https://github.com/openclaw/openclaw/commit/e5fae567e3ba6e2218fd09f53bb522c6946cae16) Thanks Peter Steinberger.
- Register intentional plugin ownership suppressions. [e6fae686](https://github.com/openclaw/openclaw/commit/e6fae68631f87f1894557f40a48b8c8f7a9acd1e) Thanks Peter Steinberger.
- Update ACP test observer calls. [e9af8ebc](https://github.com/openclaw/openclaw/commit/e9af8ebcde6b25813d2fdb45662fe40dd4452089) Thanks Peter Steinberger.
- Synchronize UI fixtures with imports and deliveries. [e9df7063](https://github.com/openclaw/openclaw/commit/e9df70639592b85e6c6f15e609b5a4a1c53b1b18) Thanks Peter Steinberger.
- Complete ACP dispatch metadata mocks. [ea6bf83e](https://github.com/openclaw/openclaw/commit/ea6bf83e821f4808e081f8ff1ffa30b34414edd7) Thanks Peter Steinberger.
- Remove deleted paths from test inventories. [ed0a056c](https://github.com/openclaw/openclaw/commit/ed0a056ce113f680f99bbb78ba23c30ad0134074) Thanks Peter Steinberger.
- Remove timing races from CLI and process fixtures. [ee15d2ba](https://github.com/openclaw/openclaw/commit/ee15d2ba1da50ba5e4337de470aa078d9830afee) Thanks Peter Steinberger.
- Register prebuilt UI assets in root test types. [ee558121](https://github.com/openclaw/openclaw/commit/ee558121d1be00d0b1396a1f08d6393c85e4226b) Thanks Peter Steinberger.
- Observe lifecycle events in Codex authentication tests. [eed9d9bf](https://github.com/openclaw/openclaw/commit/eed9d9bf225e517e4be07048bb66bec604eb2bb7) Thanks Peter Steinberger.
- Align UI fixtures with startup readiness. [f03d64f6](https://github.com/openclaw/openclaw/commit/f03d64f6a56e0206cfdc34ad8e9dfaeb07932c2c) Thanks Peter Steinberger.
- Remove obsolete Gateway test-routing entries. [f46cdd41](https://github.com/openclaw/openclaw/commit/f46cdd41884dfbbef79aaea119036d5ffa9fbe37) Thanks Peter Steinberger.
- Stabilize historical ACPX cancellation test lifetimes. [f4a796a2](https://github.com/openclaw/openclaw/commit/f4a796a2b2af5abc9337df87b753e4cc8bb4f8bd) Thanks @steipete.
- Remove obsolete merge-recovery test rejection. [f9cb2891](https://github.com/openclaw/openclaw/commit/f9cb2891ed05f892d75482d3b12a708232752c43) Thanks Peter Steinberger.
- Align retained-custody tests with existing errors. [fa90c83d](https://github.com/openclaw/openclaw/commit/fa90c83d1ab83cb73a10d2bb24cc08af20fd2683) Thanks Peter Steinberger.
- Isolate extension fixtures from compiler discovery. [fad9fc56](https://github.com/openclaw/openclaw/commit/fad9fc56cc371834cbc7cad0c1a9824f024fb787) Thanks Peter Steinberger.
- Wait for sidebar hovercard readiness in motion tests. [fc255f85](https://github.com/openclaw/openclaw/commit/fc255f8588689302e215a44e024ebb8a79210192) Thanks Peter Steinberger.
- Align legacy updater test refusal wording. [fd28e926](https://github.com/openclaw/openclaw/commit/fd28e926dcb17e8ed4c286b465b71febfe125216) Thanks Peter Steinberger.
- Restore UI test diagnostic context typing. [ffa7c2ba](https://github.com/openclaw/openclaw/commit/ffa7c2ba0547a5b1b2300d0f18e38246378887b1) Thanks Peter Steinberger.
- Stabilize native patch and subagent QA evidence. [#120353](https://github.com/openclaw/openclaw/pull/120353) Thanks @vincentkoc, @romneyda.
- Await readiness in Tailscale worker tests. [#125396](https://github.com/openclaw/openclaw/pull/125396) Thanks @steipete.
- Recover distant PR bases in shallow CI checkouts. [#129492](https://github.com/openclaw/openclaw/pull/129492) Thanks @steipete.
- Await Google Chat media cleanup in tests. [#136768](https://github.com/openclaw/openclaw/pull/136768) Thanks @leilei3167, @wangmiao0668000666.
- Wait for captured output before releasing managed commands. [#147781](https://github.com/openclaw/openclaw/pull/147781) Thanks @vincentkoc, @fuller-stack-dev.
- Preserve line-cap allowances in JetBrains terminals. [#151755](https://github.com/openclaw/openclaw/pull/151755) Thanks @alix-007, @obviyus.
- Preserve higher plugin API requirements during release sync. [#154640](https://github.com/openclaw/openclaw/pull/154640) Thanks @steipete.
- Correct Computer Use cancellation test replies. [#154911](https://github.com/openclaw/openclaw/pull/154911) Thanks @steipete.
- Align Workshop tests with validated deferred calls. [#154915](https://github.com/openclaw/openclaw/pull/154915) Thanks @steipete.
- Wait for avatar readiness in sidebar tests. [#155578](https://github.com/openclaw/openclaw/pull/155578) Thanks @steipete.
- Isolate base64 memory measurements from previous tests. [#155638](https://github.com/openclaw/openclaw/pull/155638) Thanks @steipete.
- Wait for maintenance completion in SDK retention tests. [#155659](https://github.com/openclaw/openclaw/pull/155659) Thanks @steipete.
- Honor explicit worker caps in CI allocation expectations. [#155735](https://github.com/openclaw/openclaw/pull/155735) Thanks @steipete.
- Keep native locale refresh independent of UI-only changes. [#155738](https://github.com/openclaw/openclaw/pull/155738) Thanks @steipete.
- Settle background subagent test work before teardown. [#155888](https://github.com/openclaw/openclaw/pull/155888) Thanks @steipete.
- Wait for subagent notification delivery before test cleanup. [#155910](https://github.com/openclaw/openclaw/pull/155910) Thanks @vincentkoc.
- Wait for Gateway abort-test deliveries before teardown. [#155913](https://github.com/openclaw/openclaw/pull/155913) Thanks @vincentkoc.
- Recover Security Review checkout and report setup failures. [#155919](https://github.com/openclaw/openclaw/pull/155919) Thanks @joshavant.
- Retry Security Review when GitHub diff data is temporarily inconsistent. [#155921](https://github.com/openclaw/openclaw/pull/155921) Thanks @joshavant.
- Wait for Doctor corpus work and cleanup before removing fixtures. [#155922](https://github.com/openclaw/openclaw/pull/155922) Thanks @vincentkoc.
- Accept supported process snapshots in operation-lock tests. [#155923](https://github.com/openclaw/openclaw/pull/155923) Thanks @vincentkoc.
- Finish persistence-test deliveries before fixture cleanup. [#155934](https://github.com/openclaw/openclaw/pull/155934) Thanks @vincentkoc.
- Finish asynchronous UI fixture work before cleanup. [#155936](https://github.com/openclaw/openclaw/pull/155936) Thanks @steipete.
- Run installed-package channel checks on plain Node. [#155940](https://github.com/openclaw/openclaw/pull/155940) Thanks @steipete.
- Limit the storage job file-count assertion to GitHub CI. [#155943](https://github.com/openclaw/openclaw/pull/155943) Thanks @steipete.
- Assign picker fixture cleanup to its owning test. [#155949](https://github.com/openclaw/openclaw/pull/155949) Thanks @steipete.
- Wait for queued-turn admission in the Telegram retry test. [#155955](https://github.com/openclaw/openclaw/pull/155955) Thanks @steipete.
- Finalize retired subagent test fixtures after directory-removal errors. [#155962](https://github.com/openclaw/openclaw/pull/155962) Thanks @vincentkoc.
- Synchronize Discord retry tests with committed queue outcomes. [#155965](https://github.com/openclaw/openclaw/pull/155965) Thanks @vincentkoc.
- Dispose shared session fixtures after UI tests. [#155968](https://github.com/openclaw/openclaw/pull/155968) Thanks @steipete.
- Recognize nested Code Mode tools in QA transcript checks. [#155976](https://github.com/openclaw/openclaw/pull/155976) Thanks @steipete.
- Preserve Git identity for hydrated Linux AWS test commands. [#156021](https://github.com/openclaw/openclaw/pull/156021) Thanks @vincentkoc.
- Reload historical Tasks pagination fixtures without closing live test storage. [#156028](https://github.com/openclaw/openclaw/pull/156028) Thanks @steipete.
- Isolate update-executor test handoff state. [#156037](https://github.com/openclaw/openclaw/pull/156037) Thanks @fuller-stack-dev.
- Compare dependency changes against the PR common ancestor. [#156040](https://github.com/openclaw/openclaw/pull/156040) Thanks @joshavant.
- Capture large changed-path lists for correction reviews. [#156043](https://github.com/openclaw/openclaw/pull/156043) Thanks @fuller-stack-dev.
- Repair Windows census lease-rejection fault injection. [#156049](https://github.com/openclaw/openclaw/pull/156049) Thanks @steipete.
- Isolate filesystem mode in Claw project tests. [#156058](https://github.com/openclaw/openclaw/pull/156058) Thanks @steipete.
- Shorten macOS worker test socket paths. [#156081](https://github.com/openclaw/openclaw/pull/156081) Thanks @steipete.
- Keep PR provisioning tests on private handoff stores. [#156100](https://github.com/openclaw/openclaw/pull/156100) Thanks @fuller-stack-dev.
- Restore compact CI test-failure annotations. [#156119](https://github.com/openclaw/openclaw/pull/156119) Thanks @steipete.
- Allow additional worktree cleanup result fields in lifecycle tests. [#156127](https://github.com/openclaw/openclaw/pull/156127) Thanks @RomneyDa.
- Await SQLite cleanup before historical Tasks registry test reloads. [#156131](https://github.com/openclaw/openclaw/pull/156131) Thanks @RomneyDa.
- Remove namespace dependence from the Codex output-fidelity test. [#156132](https://github.com/openclaw/openclaw/pull/156132) Thanks @steipete.
- Complete Gateway test cleanup and repair CI fixtures. [#156136](https://github.com/openclaw/openclaw/pull/156136) Thanks @steipete.
- Repair Gateway identity and presence integration fixtures. [#156142](https://github.com/openclaw/openclaw/pull/156142) Thanks @RomneyDa.
- Restore lockfiles from the PR merge base during cleanup. [#156171](https://github.com/openclaw/openclaw/pull/156171) Thanks @joshavant.
- Recover Security Review after temporary GitHub read timeouts. [#156176](https://github.com/openclaw/openclaw/pull/156176) Thanks @joshavant.
- Finish Gateway persistence test cleanup after cancellation. [#156197](https://github.com/openclaw/openclaw/pull/156197) Thanks @obviyus, @vincentkoc, @areslp.
- Keep one-worker test budgets under moderate host load. [#156258](https://github.com/openclaw/openclaw/pull/156258) Thanks @steipete.
- Close agent-test databases before removing temporary storage. [#156284](https://github.com/openclaw/openclaw/pull/156284) Thanks @steipete.
- Honor explicitly declared exact test exclusions in frozen release validation. [#156300](https://github.com/openclaw/openclaw/pull/156300) Thanks @steipete.
- Tolerate temporary duplicate jobs while reading release-validation retry evidence. [#156302](https://github.com/openclaw/openclaw/pull/156302) Thanks @steipete.
- Accept frozen stable MCP contracts and larger SDK evidence. [#156309](https://github.com/openclaw/openclaw/pull/156309) Thanks @RomneyDa.
- Dispose sidebar test sessions when tests finish. [#156320](https://github.com/openclaw/openclaw/pull/156320) Thanks @steipete.
- Keep release tooling outside npm candidate source checks. [#156332](https://github.com/openclaw/openclaw/pull/156332) Thanks @RomneyDa.
- Preserve request details in Discord smoke-test timeout errors. [#156347](https://github.com/openclaw/openclaw/pull/156347) Thanks @RomneyDa.
- Start native Talk test readiness after preparation. [#156376](https://github.com/openclaw/openclaw/pull/156376) Thanks @steipete.
- Disconnect sidebar indicator test fixtures during teardown. [#156408](https://github.com/openclaw/openclaw/pull/156408) Thanks @steipete.
- Recognize host-installed SwiftLint in dependency checks. [#156415](https://github.com/openclaw/openclaw/pull/156415) Thanks @RomneyDa.
- Align thinking-metadata tests with existing Ultra mode. [#156422](https://github.com/openclaw/openclaw/pull/156422) Thanks @steipete.
- Keep Docker advisory warning relays nonfatal. [#156444](https://github.com/openclaw/openclaw/pull/156444) Thanks @steipete.
- Start credential-test cooldowns when fixtures execute. [#156449](https://github.com/openclaw/openclaw/pull/156449) Thanks @fuller-stack-dev.
- Prevent idle-socket races in Telegram HTTP tests. [#156466](https://github.com/openclaw/openclaw/pull/156466) Thanks @steipete, @obviyus.
- Wait for browser-context routes before test cleanup. [#156473](https://github.com/openclaw/openclaw/pull/156473) Thanks @steipete.
- Synchronize update progress scrollback tests with disclosure events. [#156546](https://github.com/openclaw/openclaw/pull/156546) Thanks @steipete.
- Avoid caller process IDs in Doctor test fixtures. [#156564](https://github.com/openclaw/openclaw/pull/156564) Thanks @vincentkoc.
- Retire finished composer fixtures and settle browser-test network failures. [#156566](https://github.com/openclaw/openclaw/pull/156566) Thanks @steipete.
- Preserve explicit Testbox test concurrency settings. [#156620](https://github.com/openclaw/openclaw/pull/156620) Thanks @steipete.
- Fix macOS update-feed filenames for architecture-specific release builds. [#156645](https://github.com/openclaw/openclaw/pull/156645) Thanks @steipete.
- Synchronize dashboard identity tests with reconnect completion. [#156653](https://github.com/openclaw/openclaw/pull/156653) Thanks @steipete.
- Preserve live browser-test timeout diagnostics before teardown. [#156659](https://github.com/openclaw/openclaw/pull/156659) Thanks @steipete.
- Reject incomplete required release-verifier results. [#156661](https://github.com/openclaw/openclaw/pull/156661) Thanks @steipete.
- Await owned completion in disposed-requester tests. [#156685](https://github.com/openclaw/openclaw/pull/156685) Thanks @steipete.
- Avoid false watchdog test receipt timeouts. [#156708](https://github.com/openclaw/openclaw/pull/156708) Thanks @steipete.
- Restore WhatsApp QA actions through catalog tool search. [#156719](https://github.com/openclaw/openclaw/pull/156719) Thanks @joshavant.
- Restore WhatsApp sticker replies in QA mock fixtures. [#156722](https://github.com/openclaw/openclaw/pull/156722) Thanks @joshavant.
- Skip republishing superseded package versions during npm preflight. [#156724](https://github.com/openclaw/openclaw/pull/156724) Thanks @steipete.
- Restore WhatsApp status-reaction QA configuration. [#156727](https://github.com/openclaw/openclaw/pull/156727) Thanks @joshavant.
- Restore WhatsApp broadcast QA configuration. [#156733](https://github.com/openclaw/openclaw/pull/156733) Thanks @joshavant.
- Preserve full WhatsApp QA silence windows after connection setup. [#156734](https://github.com/openclaw/openclaw/pull/156734) Thanks @joshavant.
- Require a genuine current-message batch in WhatsApp reply-quote QA. [#156735](https://github.com/openclaw/openclaw/pull/156735) Thanks @joshavant.
- Accept superseded already-published plugin versions during final verification. [#156737](https://github.com/openclaw/openclaw/pull/156737) Thanks @steipete.
- Stop obsolete Security Reviews between reads and eligible recovery waits. [#156798](https://github.com/openclaw/openclaw/pull/156798) Thanks @VACInc, @vincentkoc.
- Wait for child completion and SQLite shutdown in Gateway tests. [#156805](https://github.com/openclaw/openclaw/pull/156805) Thanks @steipete.
- Wait for every initial skill-watcher generation in integration tests. [#156833](https://github.com/openclaw/openclaw/pull/156833) Thanks @steipete.
- Isolate session-list test databases. [#156837](https://github.com/openclaw/openclaw/pull/156837) Thanks @steipete.
- Wait for compaction disposal events in tests. [#156850](https://github.com/openclaw/openclaw/pull/156850) Thanks @steipete.
- Preserve PR preparation evidence when gate settings are invalid. [#156851](https://github.com/openclaw/openclaw/pull/156851) Thanks @vincentkoc.
- Keep WebChat cron preview tests on synthetic channel plugins. [#156863](https://github.com/openclaw/openclaw/pull/156863) Thanks @steipete.
- Recognize the published Node recovery bootstrap in compatibility recording. [#156873](https://github.com/openclaw/openclaw/pull/156873) Thanks @vincentkoc.
- Preserve root dependency checks in legacy plugin bundles. [#156886](https://github.com/openclaw/openclaw/pull/156886) Thanks @RomneyDa.
- Target native inventory CI tests and synchronize maintenance test startup. [#156991](https://github.com/openclaw/openclaw/pull/156991) Thanks @IWhatsskill.
- Settle session-test reads before removing temporary databases. [#156997](https://github.com/openclaw/openclaw/pull/156997) Thanks @steipete.
- Clarify lockfile cleanup fallback when write access is unavailable. [#157008](https://github.com/openclaw/openclaw/pull/157008) Thanks @joshavant.
- Settle maintenance test work before cleanup. [#157009](https://github.com/openclaw/openclaw/pull/157009) Thanks @fuller-stack-dev.
- Seal frozen npm declarations after prepack. [#157026](https://github.com/openclaw/openclaw/pull/157026) Thanks @RomneyDa.
- Validate bundled native bindings in eligible frozen packages. [#157027](https://github.com/openclaw/openclaw/pull/157027) Thanks @RomneyDa.
- Match frozen-candidate validation to supported tests and package layouts. [#157034](https://github.com/openclaw/openclaw/pull/157034) Thanks @RomneyDa.
- Test compaction disposal order without a machine-speed threshold. [#157036](https://github.com/openclaw/openclaw/pull/157036) Thanks @obviyus, Ayaan.
- Stream large Crabbox proof plans without argument-size failures. [#157051](https://github.com/openclaw/openclaw/pull/157051) Thanks @vincentkoc.
- Check cron timer cleanup independently of unrelated Gateway work. [#157081](https://github.com/openclaw/openclaw/pull/157081) Thanks @steipete.
- Observe ONNX test progress without filesystem notifications. [#157104](https://github.com/openclaw/openclaw/pull/157104) Thanks @steipete.
- Preserve dependencies in relocated Doctor test fixtures. [#157130](https://github.com/openclaw/openclaw/pull/157130) Thanks @steipete.
- Restore dependencies in extracted PR wrappers. [#157133](https://github.com/openclaw/openclaw/pull/157133) Thanks @vincentkoc.
- Stabilize Gateway lifecycle and sidebar archive tests. [#157159](https://github.com/openclaw/openclaw/pull/157159) Thanks @vincentkoc.
- Scope normalization package builds to their own sources. [#157174](https://github.com/openclaw/openclaw/pull/157174) Thanks @vincentkoc.
- Publish complete private Telegram QA handoff requests atomically. [#157176](https://github.com/openclaw/openclaw/pull/157176) Thanks @steipete.
- Clean up media-authority tests after setup failures. [#157178](https://github.com/openclaw/openclaw/pull/157178) Thanks @freeqaz-openai.
- Render empty-tuple defaults in SDK API reports. [#157183](https://github.com/openclaw/openclaw/pull/157183) Thanks @freeqaz-openai.
- Prevent preflight HTTP test mocks from leaking into shared workers. [#157207](https://github.com/openclaw/openclaw/pull/157207) Thanks @vincentkoc.
- Keep scoped checks for both sides of file renames. [#157219](https://github.com/openclaw/openclaw/pull/157219) Thanks @vincentkoc.
- Synchronize macOS Gateway test fixtures. [#157224](https://github.com/openclaw/openclaw/pull/157224) Thanks @steipete.
- Preserve original PowerShell completion test errors during cleanup. [#157267](https://github.com/openclaw/openclaw/pull/157267) Thanks @vincentkoc.
- Let canceled development checks finish owned child cleanup. [#157272](https://github.com/openclaw/openclaw/pull/157272) Thanks @vincentkoc.
- Restore live-media release test discovery. [#157282](https://github.com/openclaw/openclaw/pull/157282) Thanks @steipete.
- Repair sandbox and session-reload release-test fixtures. [#157285](https://github.com/openclaw/openclaw/pull/157285) Thanks @steipete.
- Remove tracked scratch blocking remote source capture. [#157308](https://github.com/openclaw/openclaw/pull/157308) Thanks @steipete.
- Synchronize Git backoff cancellation test fixtures. [#157315](https://github.com/openclaw/openclaw/pull/157315) Thanks @steipete.
- Keep package declaration builds independent of unrelated test types. [#157318](https://github.com/openclaw/openclaw/pull/157318) Thanks @steipete.
- Synchronize Codex and Signal tests under load. [#157334](https://github.com/openclaw/openclaw/pull/157334) Thanks @steipete.
- Prevent retained-restart test handshake deadlocks. [#157342](https://github.com/openclaw/openclaw/pull/157342) Thanks @steipete.
- Reuse prepared runtime in changed-target E2E jobs. [#157365](https://github.com/openclaw/openclaw/pull/157365) Thanks @steipete.
- Synchronize pasted-text rendering and late-child test fixtures. [#157375](https://github.com/openclaw/openclaw/pull/157375) Thanks @vincentkoc, @steipete.
- Restore cold maintainer PR worktree provisioning. [#157394](https://github.com/openclaw/openclaw/pull/157394) Thanks @vincentkoc.
- Isolate Android obsolete-translation test fixtures. [#157397](https://github.com/openclaw/openclaw/pull/157397) Thanks @steipete.
- Wait for CLI test fixture readiness and managed cleanup. [#157424](https://github.com/openclaw/openclaw/pull/157424) Thanks @steipete.
- Release retired plugin caches in shared test workers. [#157470](https://github.com/openclaw/openclaw/pull/157470) Thanks @steipete.
- Avoid heap exhaustion in large-bundle import checks. [#157471](https://github.com/openclaw/openclaw/pull/157471) Thanks @steipete.
- Separate launcher signal tests from build setup. [#157478](https://github.com/openclaw/openclaw/pull/157478) Thanks @steipete.
- Restore stable release manifest performance controls. [#157486](https://github.com/openclaw/openclaw/pull/157486) Thanks @steipete.
- Restore model-probe test fixtures after rejected work. [#157487](https://github.com/openclaw/openclaw/pull/157487) Thanks @vincentkoc.
- Wait for widget menu animations in browser tests. [#157494](https://github.com/openclaw/openclaw/pull/157494) Thanks @vincentkoc.
- Remove request-arrival assumptions from update deadline tests. [#157504](https://github.com/openclaw/openclaw/pull/157504) Thanks @vincentkoc.
- Wait for account-history test turns to settle before compaction. [#157530](https://github.com/openclaw/openclaw/pull/157530) Thanks @steipete.
- Recover browser relay fixtures from initial port collisions. [#157550](https://github.com/openclaw/openclaw/pull/157550) Thanks @RomneyDa.
- Avoid false Projects upgrade acceptance failures from forwarding exports. [#157579](https://github.com/openclaw/openclaw/pull/157579) Thanks @steipete.
- Wait for historical task-notification fixture cleanup. [#157589](https://github.com/openclaw/openclaw/pull/157589) Thanks @steipete.
- Retain test runtimes when child cleanup cannot be verified. [#157602](https://github.com/openclaw/openclaw/pull/157602) Thanks @steipete.
- Restore TypeScript loading in frozen upgrade checks. [#157609](https://github.com/openclaw/openclaw/pull/157609) Thanks @RomneyDa.
- Use candidate-owned UI test planning for frozen releases. [#157610](https://github.com/openclaw/openclaw/pull/157610) Thanks @RomneyDa.
- Avoid redundant sealed-worker parsing in npm verification. [#157618](https://github.com/openclaw/openclaw/pull/157618) Thanks @RomneyDa.
- Finish SDK dependency preparation before API rendering. [#157620](https://github.com/openclaw/openclaw/pull/157620) Thanks @RomneyDa.
- Preserve outer test storage during Talk relay cleanup. [#157623](https://github.com/openclaw/openclaw/pull/157623) Thanks @vincentkoc.
- Find onboarding prompts throughout long terminal logs. [#157624](https://github.com/openclaw/openclaw/pull/157624) Thanks @RomneyDa.
- Retry recognized interrupted Security Review response reads. [#157651](https://github.com/openclaw/openclaw/pull/157651) Thanks @joshavant.
- Isolate Security Review checkout retry directories. [#157652](https://github.com/openclaw/openclaw/pull/157652) Thanks @joshavant.
- Repair npm package helper type imports. [#157659](https://github.com/openclaw/openclaw/pull/157659) Thanks @steipete, @fuller-stack-dev.
- Isolate first-hop update validation controls by source release. [#157680](https://github.com/openclaw/openclaw/pull/157680) Thanks @RomneyDa.
- Settle announcement cleanup within its registry test. [#157681](https://github.com/openclaw/openclaw/pull/157681) Thanks @steipete.
- Use native scheduled-event policies for hourly main CI. [#157751](https://github.com/openclaw/openclaw/pull/157751) Thanks @vincentkoc.
- Align Windows MCP packaging success-test budgets. [#157754](https://github.com/openclaw/openclaw/pull/157754) Thanks @vincentkoc.
- Isolate maintainer test fixtures from outer PR controls. [#157755](https://github.com/openclaw/openclaw/pull/157755) Thanks @steipete, @fuller-stack-dev.
- Avoid probing child-private Telegram QA state during parent cleanup. [#157764](https://github.com/openclaw/openclaw/pull/157764) Thanks @RomneyDa.
- Wait for historical task-completion publication in requester tests. [#157768](https://github.com/openclaw/openclaw/pull/157768) Thanks @steipete.
- Align release-validation fixtures with current CLI and Doctor contracts. [#157780](https://github.com/openclaw/openclaw/pull/157780) Thanks @RomneyDa.
- Authenticate the worktree-successor test creator. [#157785](https://github.com/openclaw/openclaw/pull/157785) Thanks @RomneyDa.
- Avoid redundant npm version startup during package checks. [#157809](https://github.com/openclaw/openclaw/pull/157809) Thanks @steipete.
- Restore automatic signing identities for macOS distribution builds and ad-hoc smoke tests. [#157861](https://github.com/openclaw/openclaw/pull/157861) Thanks @RomneyDa.
- Isolate Git maintenance tests from inherited settings. [#157893](https://github.com/openclaw/openclaw/pull/157893) Thanks @steipete.
- Reuse Crabbox Testboxes with custom state directories while preserving repository claims. [#157898](https://github.com/openclaw/openclaw/pull/157898) Thanks @steipete.
- Prevent CI selection stalls in large scans and unfinished Unicode escapes. [#157900](https://github.com/openclaw/openclaw/pull/157900) Thanks @steipete.
- Keep explicitly watched policy checks in changed-file CI. [#157902](https://github.com/openclaw/openclaw/pull/157902) Thanks @RomneyDa.
- Preserve running stable closeouts and tag serialization, with waiver replay later retired. [#157905](https://github.com/openclaw/openclaw/pull/157905) Thanks @steipete.
- Synchronize cancellation test fixtures with retry backoff. [#157909](https://github.com/openclaw/openclaw/pull/157909) Thanks @steipete.
- Wait for config reconciliation in plugin lifecycle tests. [#157918](https://github.com/openclaw/openclaw/pull/157918) Thanks @steipete.
- Prepare the Windows CLI test runtime before test deadlines begin. [#157928](https://github.com/openclaw/openclaw/pull/157928) Thanks @steipete.
- Add bounded publishing recovery for transient reads, registry delays and eligible stale children. [#157937](https://github.com/openclaw/openclaw/pull/157937) Thanks @steipete.
- Isolate docs audit tests from sibling checkouts. [#157962](https://github.com/openclaw/openclaw/pull/157962) Thanks @steipete.
- Synchronize deferred-restart tests with reload completion. [#157964](https://github.com/openclaw/openclaw/pull/157964) Thanks @vincentkoc.
- Reuse compatible test-job capacity in hosted push CI. [#157967](https://github.com/openclaw/openclaw/pull/157967) Thanks @vincentkoc.
- Accept unchanged declaration-build inputs at clock boundaries while checking file identity. [#157968](https://github.com/openclaw/openclaw/pull/157968) Thanks @steipete.
- Scope popup resize cleanup assertions to the popup. [#157988](https://github.com/openclaw/openclaw/pull/157988) Thanks @steipete.
- Wait for cancelled backup-test processes before cleaning fixtures. [#157991](https://github.com/openclaw/openclaw/pull/157991) Thanks @vincentkoc.
- Isolate release test fixtures from compiler inputs. [#158005](https://github.com/openclaw/openclaw/pull/158005) Thanks @steipete.
- Preserve Git executable names in macOS test fixtures. [#158015](https://github.com/openclaw/openclaw/pull/158015) Thanks @steipete.
- Wait for the actual reload lease in deferred-restart tests. [#158027](https://github.com/openclaw/openclaw/pull/158027) Thanks @steipete.
- Restore strict macOS readiness lint compliance without changing behavior. [#158033](https://github.com/openclaw/openclaw/pull/158033) Thanks @vincentkoc.
- Prevent text-busy failures in systemd test fixtures. [#158045](https://github.com/openclaw/openclaw/pull/158045) Thanks @steipete.
- Invalidate CI dependency caches when imported install helpers change. [#158069](https://github.com/openclaw/openclaw/pull/158069) Thanks @vincentkoc.
- Repair Gateway lint limits and Doctor test observer cleanup. [#158074](https://github.com/openclaw/openclaw/pull/158074) Thanks @vincentkoc, @steipete.
- Let hourly core CI proceed while scheduled iOS checks serialize separately. [#158075](https://github.com/openclaw/openclaw/pull/158075) Thanks @vincentkoc.
- Prepare Crabbox wrapper dependencies before test child deadlines. [#158086](https://github.com/openclaw/openclaw/pull/158086) Thanks @steipete.
- Validate frozen packages against trusted exact Chrome MCP version contracts. [#158098](https://github.com/openclaw/openclaw/pull/158098) Thanks @RomneyDa, @vyctorbrzezowski, @steipete, @jalehman.
- Correct profile-specific model discovery outcomes in integration fixtures. [#158115](https://github.com/openclaw/openclaw/pull/158115) Thanks @steipete.
- Check durable release markers in ONNX test workers. [#158146](https://github.com/openclaw/openclaw/pull/158146) Thanks @steipete.
- Restore targeted Control UI test planning and browser-runner selection. [#158149](https://github.com/openclaw/openclaw/pull/158149) Thanks @vincentkoc.
- Prepare Gateway modules before timed catalog integration cases. [#158157](https://github.com/openclaw/openclaw/pull/158157) Thanks @steipete, @vincentkoc.
- Await verifier child lifecycle events instead of premature test polling deadlines. [#158171](https://github.com/openclaw/openclaw/pull/158171) Thanks @steipete.
- Resume interrupted PR preparation from verified successful-push receipts. [#158174](https://github.com/openclaw/openclaw/pull/158174) Thanks @vincentkoc.
- Reject previously captured notifications in the memory watcher test. [#158193](https://github.com/openclaw/openclaw/pull/158193) Thanks @steipete.
- Drain session-sharing test resources before deleting state. [#158205](https://github.com/openclaw/openclaw/pull/158205) Thanks @steipete.
- Isolate browser and worker lifecycle test fixtures. [#158221](https://github.com/openclaw/openclaw/pull/158221) Thanks @steipete.
- Keep streaming backup test directories private under group-writable umasks. [#158223](https://github.com/openclaw/openclaw/pull/158223) Thanks @steipete.
- Establish shared skill watcher test roots before watcher admission. [#158258](https://github.com/openclaw/openclaw/pull/158258) Thanks @steipete.
- Drain database readers before update-history cold-cache tests. [#158279](https://github.com/openclaw/openclaw/pull/158279) Thanks @steipete, @giodl73-repo.
- Stabilize Doctor OAuth-isolation and repair-command argument fixtures. [#158282](https://github.com/openclaw/openclaw/pull/158282) Thanks @steipete.
- Remove a single-event dependency from catalog watcher test readiness. [#158283](https://github.com/openclaw/openclaw/pull/158283) Thanks @steipete.
- Restore stream-test and Telegram file-size lint compliance. [#158292](https://github.com/openclaw/openclaw/pull/158292) Thanks @RomneyDa.
- Identify missing cached Convex launchers in QA diagnostics. [#158311](https://github.com/openclaw/openclaw/pull/158311) Thanks @steipete.
- Wait for subagent completion before test assertions. [#158344](https://github.com/openclaw/openclaw/pull/158344) Thanks @steipete.
- Synchronize queued-RPC restart tests with terminal admission evidence. [#158347](https://github.com/openclaw/openclaw/pull/158347) Thanks @steipete.
- Share runtime helpers and return QA response-size errors without waiting for cancellation. [#158365](https://github.com/openclaw/openclaw/pull/158365) Thanks @steipete.
- Use the captured candidate/main fork for native PR growth checks. [#158368](https://github.com/openclaw/openclaw/pull/158368) Thanks @steipete.
- Include generated SQLite fixture dependencies in changed-test selection. [#158409](https://github.com/openclaw/openclaw/pull/158409) Thanks @RomneyDa.
- Avoid an unhandled rejection in Gateway catalog startup tests. [#158440](https://github.com/openclaw/openclaw/pull/158440) Thanks @vincentkoc.
- Restore exact file-approval transport test coverage. [#158453](https://github.com/openclaw/openclaw/pull/158453) Thanks @RomneyDa.
- Recognize native Codex truncation markers in cache-stability QA. [#158454](https://github.com/openclaw/openclaw/pull/158454) Thanks @RomneyDa.
- Supply default close reasons in WhatsApp connection tests. [#158456](https://github.com/openclaw/openclaw/pull/158456) Thanks @romneyda.
- Enable required debug transport logs in managed ClawRouter tests. [#158457](https://github.com/openclaw/openclaw/pull/158457) Thanks @RomneyDa.
- Restore Gateway steering test fixture contracts. [#158478](https://github.com/openclaw/openclaw/pull/158478) Thanks @RomneyDa.
- Preserve iOS signing failures after transient process-group errors and confirmed cleanup. [#158483](https://github.com/openclaw/openclaw/pull/158483) Thanks @steipete.
- Require session identity for history-bearing QA utility requests. [#158496](https://github.com/openclaw/openclaw/pull/158496) Thanks @RomneyDa.
- Skip redactor startup for empty E2E logs. [#158508](https://github.com/openclaw/openclaw/pull/158508) Thanks @steipete.
- Prevent onboarding test FIFO startup hangs. [#158605](https://github.com/openclaw/openclaw/pull/158605) Thanks @steipete.
- Restore config-apply restart wake-up QA coverage. [#158608](https://github.com/openclaw/openclaw/pull/158608) Thanks @joshavant.
- Stabilize startup generation-race test preparation. [#158619](https://github.com/openclaw/openclaw/pull/158619) Thanks @steipete.
- Use the configured owner in approval QA. [#158622](https://github.com/openclaw/openclaw/pull/158622) Thanks @joshavant.
- Restore existing core lint line limits without relaxing thresholds. [#158625](https://github.com/openclaw/openclaw/pull/158625) Thanks @steipete, @fuller-stack-dev.
- Use exact session reports for instruction-injection QA. [#158634](https://github.com/openclaw/openclaw/pull/158634) Thanks @joshavant.
- Recognize validated nested tool results in QA evidence checks. [#158641](https://github.com/openclaw/openclaw/pull/158641) Thanks @joshavant.
- Extract profile authority reads to meet the worker lint limit. [#158661](https://github.com/openclaw/openclaw/pull/158661) Thanks @fuller-stack-dev.
- Make removed-skill-root watcher assertions portable. [#158693](https://github.com/openclaw/openclaw/pull/158693) Thanks @steipete.
- Close outbound test resources before fixture removal. [#158730](https://github.com/openclaw/openclaw/pull/158730) Thanks @fuller-stack-dev.
- Restore Docs Agent Git fallback fixture coverage. [#158739](https://github.com/openclaw/openclaw/pull/158739) Thanks @fuller-stack-dev.
- Accept valid terminal capability output in TUI tests. [#158748](https://github.com/openclaw/openclaw/pull/158748) Thanks @fuller-stack-dev.
- Run the CI watcher from worktrees using an installed tooling root. [#158754](https://github.com/openclaw/openclaw/pull/158754) Thanks @steipete.
- Stabilize browser-test dependencies and session fixtures. [#158755](https://github.com/openclaw/openclaw/pull/158755) Thanks @steipete.
- Retain subprocess test inputs until canceled work settles. [#158767](https://github.com/openclaw/openclaw/pull/158767) Thanks @fuller-stack-dev.
- Join timed-out UI page cleanup before successor tests. [#158774](https://github.com/openclaw/openclaw/pull/158774) Thanks @steipete.
- Restore sidebar navigation lint compliance. [#158778](https://github.com/openclaw/openclaw/pull/158778) Thanks @steipete.
- Settle SDK fixture lifecycle writes before artifact discovery. [#158790](https://github.com/openclaw/openclaw/pull/158790) Thanks @steipete.
- Make SQLite snapshot allocation tests independent of watch-event delivery. [#158798](https://github.com/openclaw/openclaw/pull/158798) Thanks @steipete.
- Split read-worker settlement tests to restore lint compliance. [#158820](https://github.com/openclaw/openclaw/pull/158820) Thanks @fuller-stack-dev.
- Recognize nested tool receipts in instruction-profile QA. [#158838](https://github.com/openclaw/openclaw/pull/158838) Thanks @joshavant.
- Reuse prepared Corepack cache in Crabbox transport tests. [#158850](https://github.com/openclaw/openclaw/pull/158850) Thanks @steipete.
- Accept historical Android upload codes while requiring public-build source records. [#158864](https://github.com/openclaw/openclaw/pull/158864) Thanks @joshavant.
- Use installed compatible simulators for iOS release checks. [#158865](https://github.com/openclaw/openclaw/pull/158865) Thanks @joshavant.
- Share QA Matrix completion outcomes and clean failed setup resources. [#158889](https://github.com/openclaw/openclaw/pull/158889) Thanks @steipete.
- Separate Signal container WebSocket and REST tests to restore lint compliance. [#158955](https://github.com/openclaw/openclaw/pull/158955) Thanks @steipete.
- Stabilize asynchronous regression fixtures across five suites. [#158994](https://github.com/openclaw/openclaw/pull/158994) Thanks @steipete.
- Isolate test inputs and await asynchronous observations. [#158996](https://github.com/openclaw/openclaw/pull/158996) Thanks @steipete.
- Stabilize scheduling and observation in test fixtures. [#159009](https://github.com/openclaw/openclaw/pull/159009) Thanks @steipete.
- Stabilize ACP and cron test initialization. [#159014](https://github.com/openclaw/openclaw/pull/159014) Thanks @steipete.
- Restore OpenRouter test line-limit checks. [#159039](https://github.com/openclaw/openclaw/pull/159039) Thanks @shakkernerd.
- Resume interrupted protected PR preparation from its exact proof run. [#159045](https://github.com/openclaw/openclaw/pull/159045) Thanks @vincentkoc.
- Stabilize test readiness and fixture cleanup. [#159046](https://github.com/openclaw/openclaw/pull/159046) Thanks @steipete.
- Reduce timing and mock-isolation races in lifecycle tests. [#159049](https://github.com/openclaw/openclaw/pull/159049) Thanks @steipete.
- Remove invocation-owned CI scratch after verified resource cleanup. [#159051](https://github.com/openclaw/openclaw/pull/159051) Thanks @steipete.
- Wait for actual process-group disappearance in ownership tests. [#159061](https://github.com/openclaw/openclaw/pull/159061) Thanks @MuseTeaParty, @steipete.
- Make occupied webhook-port test fixtures portable. [#159063](https://github.com/openclaw/openclaw/pull/159063) Thanks @steipete.
- Synchronize lifecycle test fixtures and isolate setup. [#159078](https://github.com/openclaw/openclaw/pull/159078) Thanks @steipete.
- Stabilize Gateway and plugin test setup and cleanup. [#159095](https://github.com/openclaw/openclaw/pull/159095) Thanks @steipete.
- Make WhatsApp shutdown-drain test schedules explicit. [#159115](https://github.com/openclaw/openclaw/pull/159115) Thanks @steipete.
- Preserve scoped dependency rules in plugin release locks. [#159124](https://github.com/openclaw/openclaw/pull/159124) Thanks @RomneyDa.
- Restore update restart-outcome test inputs. [#159127](https://github.com/openclaw/openclaw/pull/159127) Thanks @steipete.
- Reorganize Cron tests and Web Push dispatch to meet existing lint limits. [#159133](https://github.com/openclaw/openclaw/pull/159133) Thanks @steipete.
- Reuse retained iOS screenshot evidence after verified partial retries. [#159149](https://github.com/openclaw/openclaw/pull/159149) Thanks @steipete.
- Accept valid Android screenshot metadata from ImageMagick 7. [#159158](https://github.com/openclaw/openclaw/pull/159158) Thanks @steipete.
- Wait for reply delivery in the Feishu replay test. [#159168](https://github.com/openclaw/openclaw/pull/159168) Thanks @steipete.
- Isolate Azure Speech unit tests from worker compilation. [#159180](https://github.com/openclaw/openclaw/pull/159180) Thanks @steipete.
- Isolate maintainer and scheduled-message test fixtures. [#159200](https://github.com/openclaw/openclaw/pull/159200) Thanks @steipete.
- Preserve original HTML translation and browser smoke-test failures. [#159218](https://github.com/openclaw/openclaw/pull/159218) Thanks @steipete.
- Consolidate E2E helpers and repair pairing, discovery and recovery fixtures. [#159247](https://github.com/openclaw/openclaw/pull/159247) Thanks @steipete.
- Check WhatsApp send-timer cleanup by its exact handle. [#159270](https://github.com/openclaw/openclaw/pull/159270) Thanks @steipete.
- Explain missing asynchronous capture support in QA tools. [#159277](https://github.com/openclaw/openclaw/pull/159277) Thanks @steipete.
- Use canonical paths for temporary test-state cleanup. [#159281](https://github.com/openclaw/openclaw/pull/159281) Thanks @steipete.
- Keep Telegram QA probes in the selected conversation and topic. [#159284](https://github.com/openclaw/openclaw/pull/159284) Thanks @vincentkoc, @RomneyDa.
- Isolate Control UI proxy tests from host addresses. [#159287](https://github.com/openclaw/openclaw/pull/159287) Thanks @altaywtf.
- Keep the QA launcher executable immutable in process tests. [#159307](https://github.com/openclaw/openclaw/pull/159307) Thanks @steipete.
- Refresh publication authority after long protected Crabbox proofs. [#159321](https://github.com/openclaw/openclaw/pull/159321) Thanks @vincentkoc.
- Restore WhatsApp invalid-input test cast form. [#159340](https://github.com/openclaw/openclaw/pull/159340) Thanks @steipete.
- Align requester-wake tests with independent yielded batches. [#159352](https://github.com/openclaw/openclaw/pull/159352) Thanks @steipete.
- Refresh repeated config checks and consolidate script helpers. [#159362](https://github.com/openclaw/openclaw/pull/159362) Thanks @steipete.
- Accept valid plugin locks with multiple dependency versions while enforcing authored overrides. [#159376](https://github.com/openclaw/openclaw/pull/159376) Thanks @RomneyDa.
- Acquire first-hop compatibility inventory for sparse release validation. [#159391](https://github.com/openclaw/openclaw/pull/159391) Thanks @RomneyDa.
- Preserve unchanged session-list publication identities. [#159394](https://github.com/openclaw/openclaw/pull/159394) Thanks @steipete.
- Reuse shared write options to restore deferred-migration worker lint compliance. [#159426](https://github.com/openclaw/openclaw/pull/159426) Thanks @steipete.
- Correct the mock preview's pending-question fixture. [#159435](https://github.com/openclaw/openclaw/pull/159435) Thanks @steipete.
- Accept retained v1 release-validation evidence without rewriting its immutable digests. [#159440](https://github.com/openclaw/openclaw/pull/159440) Thanks @RomneyDa.
- Preserve active SQLite writer queues during test cleanup. [#159450](https://github.com/openclaw/openclaw/pull/159450) Thanks @steipete.
- Release compiler resources after canceling type-check shards. [#159454](https://github.com/openclaw/openclaw/pull/159454) Thanks @steipete.
- Simplify session-row refresh to satisfy the existing lint limit. [#159473](https://github.com/openclaw/openclaw/pull/159473) Thanks @steipete.
- Keep same-version candidate and baseline packages distinct in installer smoke tests. [#159490](https://github.com/openclaw/openclaw/pull/159490) Thanks @steipete.
- Restore automatic-restart upgrade-test coverage with real fixture service membership. [#159498](https://github.com/openclaw/openclaw/pull/159498) Thanks @steipete.
- Isolate canary deadline tests from host disk capacity. [#159508](https://github.com/openclaw/openclaw/pull/159508) Thanks @RomneyDa.
- Suppress the Screen Time teardown race in macOS test views. [#159535](https://github.com/openclaw/openclaw/pull/159535) Thanks @steipete.
- Restore frozen-validation ClawHub security-mode checks. [#159547](https://github.com/openclaw/openclaw/pull/159547) Thanks @RomneyDa.
- Remove the native-completion test observer lint suppression. [#159553](https://github.com/openclaw/openclaw/pull/159553) Thanks @steipete.
- Keep paused SSH QA fixtures alive until deliberate termination. [#159572](https://github.com/openclaw/openclaw/pull/159572) Thanks @steipete.
- Repair QA evidence linking, Matrix cleanup and remote profile handling. [#159582](https://github.com/openclaw/openclaw/pull/159582) Thanks @steipete.
- Split subagent settlement test support to meet existing lint limits. [#159584](https://github.com/openclaw/openclaw/pull/159584) Thanks @steipete.
- Apply an exact-candidate test-clock repair during frozen release CI. [#159594](https://github.com/openclaw/openclaw/pull/159594) Thanks @RomneyDa.
- Prevent iOS typing tests from resuming inside keyboard updates. [#159622](https://github.com/openclaw/openclaw/pull/159622) Thanks @steipete, @joshavant.
- Prepare matching Control UI assets before selected browser tests. [#159624](https://github.com/openclaw/openclaw/pull/159624) Thanks @vincentkoc.
- Isolate diagnostic reporting tests from session recovery. [#159628](https://github.com/openclaw/openclaw/pull/159628) Thanks @steipete.
- Restore worker installation union typing. [#159629](https://github.com/openclaw/openclaw/pull/159629) Thanks @altaywtf.
- Stabilize SQLite integrity diagnostic fixtures. [#159643](https://github.com/openclaw/openclaw/pull/159643) Thanks @steipete.
- Settle Codex catalog startup scanning before recovery tests. [#159664](https://github.com/openclaw/openclaw/pull/159664) Thanks @steipete.
- Surface early worktree creation errors in hook tests. [#159685](https://github.com/openclaw/openclaw/pull/159685) Thanks @steipete.
- Prepare runtime prerequisites for supported root-directory test runs. [#159723](https://github.com/openclaw/openclaw/pull/159723) Thanks @steipete.
- Replace invalid PNG fixture data in the Windows media test. [#159771](https://github.com/openclaw/openclaw/pull/159771) Thanks @obviyus.
- Isolate the session-catalog privacy test deadline clock. [#159788](https://github.com/openclaw/openclaw/pull/159788) Thanks @steipete.
- Keep iOS release source clean by separating qualification from signing. [#159797](https://github.com/openclaw/openclaw/pull/159797) Thanks @joshavant.
- Allow failed-job release retries to reuse verified earlier-attempt packages. [#159813](https://github.com/openclaw/openclaw/pull/159813) Thanks @RomneyDa.
- Prepare Telegram webhook test storage before starting request deadlines. [#159828](https://github.com/openclaw/openclaw/pull/159828) Thanks @steipete.
- Build the host SDK before standalone TUI identity tests. [#159832](https://github.com/openclaw/openclaw/pull/159832) Thanks @steipete.
- Update ACP, media and Gateway recovery test fixtures. [#159836](https://github.com/openclaw/openclaw/pull/159836) Thanks @IWhatsskill.
- Await Plugin SDK test database cleanup within each case. [#159846](https://github.com/openclaw/openclaw/pull/159846) Thanks @steipete.
- Allow Crabbox recovery past unattached claims while retaining independent holds. [#159848](https://github.com/openclaw/openclaw/pull/159848) Thanks @steipete.
- Await SQLite worker shutdown before test schema downgrades. [#159885](https://github.com/openclaw/openclaw/pull/159885) Thanks @steipete.
- Resolve maintainer merge evidence paths from the caller directory. [#159936](https://github.com/openclaw/openclaw/pull/159936) Thanks @vyctorbrzezowski.
- Prime plugin lease test children before starting contention. [#159959](https://github.com/openclaw/openclaw/pull/159959) Thanks @steipete.
- Handle split terminal codes and both observed frozen-onboarding prompt sequences. [#159973](https://github.com/openclaw/openclaw/pull/159973) Thanks @RomneyDa.
- Isolate refresh intervals in heartbeat typing tests. [#159980](https://github.com/openclaw/openclaw/pull/159980) Thanks @steipete.
- Discover manifest-only plugins in contributor test routing. [#159981](https://github.com/openclaw/openclaw/pull/159981) Thanks @steipete.
- Keep session fixture maintenance out of Codex fake-clock tests. [#159986](https://github.com/openclaw/openclaw/pull/159986) Thanks @steipete.
- Verify large or cluttered Crabbox recovery witnesses with bounded explicit budgets. [#159989](https://github.com/openclaw/openclaw/pull/159989) Thanks @steipete.
- Run the unchanged reply-preview retention proof on Node in PR CI. [#159991](https://github.com/openclaw/openclaw/pull/159991) Thanks @vyctorbrzezowski.
- Isolate Doctor migration test fixtures from retention maintenance. [#159992](https://github.com/openclaw/openclaw/pull/159992) Thanks @steipete.
- Respect loaded stop policy and uncertain process settlement in upgrade fixtures. [#160000](https://github.com/openclaw/openclaw/pull/160000) Thanks @RomneyDa.
- Remove scheduling races from session-history broadcast worker tests. [#160005](https://github.com/openclaw/openclaw/pull/160005) Thanks @steipete.
- Package frozen plugins without importing newer absent source helpers. [#160007](https://github.com/openclaw/openclaw/pull/160007) Thanks @romneyda.
- Synchronize sandbox HTTP cancellation tests with actual response readiness. [#160029](https://github.com/openclaw/openclaw/pull/160029) Thanks @steipete.
- Respect named exports available in frozen plugin sources. [#160033](https://github.com/openclaw/openclaw/pull/160033) Thanks @RomneyDa.
- Use recorded session dates in transcript tests across UTC midnight. [#160042](https://github.com/openclaw/openclaw/pull/160042) Thanks @steipete.
- Test frozen targets against their supported restart contract. [#160043](https://github.com/openclaw/openclaw/pull/160043) Thanks @RomneyDa.
- Prevent Vitest preload inheritance in packaged-worker test launches. [#160069](https://github.com/openclaw/openclaw/pull/160069) Thanks @joshavant.
- Await SQLite worker shutdown before raw database access in tests. [#160090](https://github.com/openclaw/openclaw/pull/160090) Thanks @steipete.
- Join placement recovery test work before database teardown. [#160124](https://github.com/openclaw/openclaw/pull/160124) Thanks @vincentkoc, @steipete.
- Prepare both model catalogs and retain recovery files after interrupted publication; a mixed pair needs manual reconciliation and one publisher. [#160157](https://github.com/openclaw/openclaw/pull/160157) Thanks @steipete, @vincentkoc.
- Forward-port host-credential isolation for linked-plugin update tests. [#160165](https://github.com/openclaw/openclaw/pull/160165) Thanks @steipete, @RomneyDa, @vyctorbrzezowski, @jalehman.
- Enable approved first-time ClawHub publication recovery without claiming completed publication. [#160180](https://github.com/openclaw/openclaw/pull/160180) Thanks @steipete.
- Avoid duplicate prerelease tests and preserve successor source mirrors during recovery. [#160187](https://github.com/openclaw/openclaw/pull/160187) Thanks @vincentkoc.
- Isolate Gateway waiter fixtures and Bun plugin-retention collection timing. [#160200](https://github.com/openclaw/openclaw/pull/160200) Thanks @steipete.
- Join scheduled database closes between tests, with retry-setup ordering limits. [#160258](https://github.com/openclaw/openclaw/pull/160258) Thanks @steipete.
- Keep OOM test allocations alive until kernel termination. [#160276](https://github.com/openclaw/openclaw/pull/160276) Thanks @steipete.
- Share packed CI compilers across groups with different scheduling limits. [#160290](https://github.com/openclaw/openclaw/pull/160290) Thanks @steipete.
- Repair Docker harness scheduler dependencies and service-reset setup. [#160306](https://github.com/openclaw/openclaw/pull/160306) Thanks @steipete.
- Make update-repair test clocks independent of runner load. [#160319](https://github.com/openclaw/openclaw/pull/160319) Thanks @steipete.
- Preserve plugin test ownership to avoid unnecessary CI jobs. [#160324](https://github.com/openclaw/openclaw/pull/160324) Thanks @VACInc.
- Repair release-test request selection, update timing, Windows paths and Telegram mock dispatch. [#160346](https://github.com/openclaw/openclaw/pull/160346) Thanks @steipete.
- Align test fixtures with canonical skill sources and database-worker ownership. [#160349](https://github.com/openclaw/openclaw/pull/160349) Thanks @vincentkoc, @steipete.
- Separate uninstall deletion-lock assertions from later configuration publication. [#160360](https://github.com/openclaw/openclaw/pull/160360) Thanks @vincentkoc.
- Restore ACP command test collection with a partial metadata mock. [#160365](https://github.com/openclaw/openclaw/pull/160365) Thanks @steipete.
- Move UI fixture typechecks to their existing owner without raising budgets. [#160368](https://github.com/openclaw/openclaw/pull/160368) Thanks @steipete.
- Control install-policy test deadlines, with a missing-callback cleanup risk remaining. [#160372](https://github.com/openclaw/openclaw/pull/160372) Thanks @steipete.
- Recognize marked delegated update workers in release-test evidence. [#160384](https://github.com/openclaw/openclaw/pull/160384) Thanks @steipete.
- Join Gateway completion test work before assertions and teardown. [#160387](https://github.com/openclaw/openclaw/pull/160387) Thanks @vincentkoc.
- Prepare tests without unrelated service permissions while checking output separation; a service can still start after admission. [#160392](https://github.com/openclaw/openclaw/pull/160392) Thanks @VACInc.
- Join requester retry work before advancing the remaining test clock. [#160407](https://github.com/openclaw/openclaw/pull/160407) Thanks @vincentkoc.
- Recognize definitively exited children in UI wrapper tests. [#160412](https://github.com/openclaw/openclaw/pull/160412) Thanks @vincentkoc.
- Await major garbage collection in heap-profile tests and retain failure output. [#160414](https://github.com/openclaw/openclaw/pull/160414) Thanks @steipete.
- Remove an invalid original-owner timing ceiling from CI planner tests. [#160456](https://github.com/openclaw/openclaw/pull/160456) Thanks @vincentkoc.
- Keep unknown Discord QA cleanup state unverified while consolidating QA helpers. [#160460](https://github.com/openclaw/openclaw/pull/160460) Thanks @steipete.
- Align canonical session state in progress-widget browser fixtures. [#160463](https://github.com/openclaw/openclaw/pull/160463) Thanks @vincentkoc.
- Compact npm release manifests within the unchanged verification size limit. [#160464](https://github.com/openclaw/openclaw/pull/160464) Thanks @RomneyDa.
- Preserve sampled session rows across rename-test metadata invalidation. [#160476](https://github.com/openclaw/openclaw/pull/160476) Thanks @steipete.
- Join chat test execution before checking final status. [#160479](https://github.com/openclaw/openclaw/pull/160479) Thanks @VACInc.
- Publish complete PID markers before Gateway startup tests observe them. [#160482](https://github.com/openclaw/openclaw/pull/160482) Thanks @steipete.
- Prepare missing sandbox images for selected Linux Node CI tests. [#160489](https://github.com/openclaw/openclaw/pull/160489) Thanks @VACInc.
- Remove incomplete lifecycle-error mocks from state-lease tests. [#160493](https://github.com/openclaw/openclaw/pull/160493) Thanks @steipete.
- Check smooth-scroll intent and destination instead of sampled frame counts. [#160506](https://github.com/openclaw/openclaw/pull/160506) Thanks @VACInc.
- Isolate artifact-preflight fixtures from host service discovery. [#160515](https://github.com/openclaw/openclaw/pull/160515) Thanks @vincentkoc.
- Remove the retired private Voice Call barrel from contract-test expectations. [#160526](https://github.com/openclaw/openclaw/pull/160526) Thanks @vincentkoc.
- Model successful AI declaration builds in clean-checkout E2E fixtures. [#160532](https://github.com/openclaw/openclaw/pull/160532) Thanks @VACInc.
- Wait for child identity binding before reading update-test receipts. [#160545](https://github.com/openclaw/openclaw/pull/160545) Thanks @steipete.
- Recognize transparent literal lazy-import forwarders in export checks. [#160558](https://github.com/openclaw/openclaw/pull/160558) Thanks @vincentkoc.
- Commit mock Gateway activity changes before post-Stop reads. [#160563](https://github.com/openclaw/openclaw/pull/160563) Thanks @VACInc.
- Wait for the full session roster before testing sidebar overflow. [#160570](https://github.com/openclaw/openclaw/pull/160570) Thanks @VACInc.
- Size capacity-aware automatic lint plans to effective memory limits. [#160581](https://github.com/openclaw/openclaw/pull/160581) Thanks @vincentkoc.
- Complete correction preparation after its own first branch publication. [#160587](https://github.com/openclaw/openclaw/pull/160587) Thanks @vincentkoc.
- Route literal package-directory tests to their existing specialized runners. [#160653](https://github.com/openclaw/openclaw/pull/160653) Thanks @steipete.
- Wait for initial roster rendering in mocked UI navigation tests. [#160657](https://github.com/openclaw/openclaw/pull/160657) Thanks @steipete.
- Await actual fixture completion in state, Skills and update-WAL tests. [#160711](https://github.com/openclaw/openclaw/pull/160711) Thanks @steipete.

- Isolate plugin packaging test builds from shared checkout outputs. [172043bb](https://github.com/openclaw/openclaw/commit/172043bbac46e1ac45d25ac1fd8123e213261299) Thanks Peter Steinberger.
- Keep hybrid hourly test plans within the existing job cap. [2e7f4f8f](https://github.com/openclaw/openclaw/commit/2e7f4f8fcd1f596e8551ab4c2fb5065b00a2a0b0) Thanks Peter Steinberger.
- Isolate E2E build-path tests from inherited build-skipping flags. [3b504305](https://github.com/openclaw/openclaw/commit/3b5043053a919701056cf7c089abd467db54929f) Thanks Peter Steinberger.
- Remove the unused 1Password dependency declaration after the resolver migration. [4ed0cb36](https://github.com/openclaw/openclaw/commit/4ed0cb36ac3297b0bbd0896b7529f95fc42082ab) Thanks Peter Steinberger.
- Remove retired plugin runtime API files from the test inventory. [5b76930a](https://github.com/openclaw/openclaw/commit/5b76930a9b6fa1819361588e109417db6f7e0ab1) Thanks Peter Steinberger.
- Stage the candidate provider catalog for frozen upgrade-test planning. [682ffe55](https://github.com/openclaw/openclaw/commit/682ffe55a9f0ce73694975c8d2dc9c5b315bfb21) Thanks Peter Steinberger.
- Initialize shared credential ownership in OAuth test fixtures. [70d7e7ab](https://github.com/openclaw/openclaw/commit/70d7e7abf6e4792b6aaf2452df6420036b73adeb) Thanks Peter Steinberger.
- Include extracted configuration helpers in the PR review wrapper. [73182e75](https://github.com/openclaw/openclaw/commit/73182e751e075e891f3df9a1163cf7e18cb3e7f9) Thanks Peter Steinberger.
- Align release-test fixtures with current completion, request and scheduler contracts. [78c83b53](https://github.com/openclaw/openclaw/commit/78c83b538c5e7460954b1d5d511e3f853b05647e) Thanks Peter Steinberger.
- Align upgrade-survivor test expectations with the existing startup budget. [8799587f](https://github.com/openclaw/openclaw/commit/8799587f34360d9630ed6f49dffc878d3b013e5c) Thanks Peter Steinberger.
- Stage unpublished candidate providers for legacy-operator upgrade tests. [ac59199a](https://github.com/openclaw/openclaw/commit/ac59199ad3fd438f35315554b5628a6945ca400a) Thanks Peter Steinberger.
- Include missing planner dependencies in frozen release tooling and test fixtures. [ae1d3da7](https://github.com/openclaw/openclaw/commit/ae1d3da7a612c8d3eab24cc45749725be5746b63) Thanks Peter Steinberger.
- Update the Synology context-builder caller test expectation. [c4845a61](https://github.com/openclaw/openclaw/commit/c4845a61b485b5b701dad48013916519fb71dd8e) Thanks Peter Steinberger.
- Isolate Gateway spawn receipts and utility requests in live-test fixtures. [cdf60f45](https://github.com/openclaw/openclaw/commit/cdf60f452fa3e9d2e8886de9309b18b69f7d0e6c) Thanks Peter Steinberger.
- Retry the narrowly identified older Windows updater failure in release checks. [db5f2df5](https://github.com/openclaw/openclaw/commit/db5f2df56cffd2d041e83e37bd2142697f9fb93a) Thanks Peter Steinberger.
- Isolate QA startup scenarios and select the Voice Call fixture's mock model. [#157695](https://github.com/openclaw/openclaw/pull/157695) Thanks @RomneyDa.
- Wait for queued delivery to finish in near-limit Telegram webhook tests. [#160588](https://github.com/openclaw/openclaw/pull/160588) Thanks @steipete.
- Restore Doctor plugin-repair lint compliance through an internal extraction. [#160715](https://github.com/openclaw/openclaw/pull/160715) Thanks @steipete.
- Recognize eligible retry-aware CI cancellation in maintainer landing checks. [#160721](https://github.com/openclaw/openclaw/pull/160721) Thanks @steipete.
- Restore the environment-variable count check while preserving Windows browser path handling. [#160756](https://github.com/openclaw/openclaw/pull/160756) Thanks @steipete.
- Wait for WebKit and app-link events in macOS dashboard tests. [#160816](https://github.com/openclaw/openclaw/pull/160816) Thanks @steipete.
- Retire the actual shared SQLite worker owner between Gateway test files. [#160838](https://github.com/openclaw/openclaw/pull/160838) Thanks @jalehman.
- Restore configuration and node-adapter lint limits through helper and fixture extraction. [#160843](https://github.com/openclaw/openclaw/pull/160843) Thanks @steipete.
- Stop obsolete Security Reviews and preserve scheduled same-revision findings after merge. [#160890](https://github.com/openclaw/openclaw/pull/160890) Thanks @joshavant.
- Retain upgrade-test repair diagnostics and restore deadline-hook selection. [#160896](https://github.com/openclaw/openclaw/pull/160896) Thanks @steipete.
- Check service-file contents at the launchd bootstrap boundary in restart tests. [#160898](https://github.com/openclaw/openclaw/pull/160898) Thanks @vincentkoc.
- Settle pending zero-delay wait callbacks before subagent test cleanup. [#161038](https://github.com/openclaw/openclaw/pull/161038) Thanks @steipete, @giodl73.
- Wait for reply-recovery fixture cleanup before deleting databases and restore cancellation and restart-adoption tests. [#161177](https://github.com/openclaw/openclaw/pull/161177) Thanks @steipete.

**Security and trust**

- Guard QA session observer requests. [3e53db71](https://github.com/openclaw/openclaw/commit/3e53db714d2ecb305a541a9891cc7374c3c62d02) Thanks @joshavant.
- Verify tested merge contents before prior-CI admission. [54a0ea67](https://github.com/openclaw/openclaw/commit/54a0ea673bb1b79fe063836951751f67b9a3150c) Thanks Peter Steinberger.
- Preserve security authority when admitting baseline CI failures. [824982ca](https://github.com/openclaw/openclaw/commit/824982caa6907dd9531e001ff40ac3d2ad0eb572) Thanks Peter Steinberger.
- Recheck evidence before same-head merge recovery. [bc635fc9](https://github.com/openclaw/openclaw/commit/bc635fc9400da428818ceb9e736de26336ee8f96) Thanks @steipete.
- Sync autoreview Git isolation and incomplete-review reporting. [#156039](https://github.com/openclaw/openclaw/pull/156039) Thanks @vincentkoc.
- Require full CI validation for automatic Docs Agent writes. [#157852](https://github.com/openclaw/openclaw/pull/157852) Thanks @RomneyDa.
- Authenticate package-owned modules throughout Windows repair probes. [#157856](https://github.com/openclaw/openclaw/pull/157856) Thanks @RomneyDa.

- Validate both main revisions and unchanged policy during eligible prior-CI REST admission. [d5447648](https://github.com/openclaw/openclaw/commit/d5447648d4190e3b73c365d730515b3fa722274e) Thanks Peter Steinberger.

**Documentation**

- Shorten contributor guidance on hourly main CI. [040e0416](https://github.com/openclaw/openclaw/commit/040e04167212c444dffeca0f749902c56fbc84ae) Thanks Peter Steinberger.
- Document GitHub release activation after npm publication. [1738e9d1](https://github.com/openclaw/openclaw/commit/1738e9d14258effdb88d00ad212b2639263c5982) Thanks Peter Steinberger.
- Clarify release tooling propagation, cleanup, and CI checks. [18d218fa](https://github.com/openclaw/openclaw/commit/18d218fa61ff917636ae57eb93d84042cff6196a) Thanks Peter Steinberger.
- Prefer focused local validation over additional CI proof runs. [3880bb13](https://github.com/openclaw/openclaw/commit/3880bb1394c2da9d3c67cdfaff648e023dcd863f) Thanks Peter Steinberger.
- Refresh the iPhone App Review walkthrough. [41d076f3](https://github.com/openclaw/openclaw/commit/41d076f30b32737723a3410af395d43c1b6dd00c) Thanks @joshavant.
- Clarify full and targeted extension lint layouts. [55a7756d](https://github.com/openclaw/openclaw/commit/55a7756d1e5eca5996edf38b4e19f09786936788) Thanks Peter Steinberger.
- Align planner checks and CI budget documentation. [57dfbc31](https://github.com/openclaw/openclaw/commit/57dfbc31429c495f3f9e8353e61c88325a062cb9) Thanks Peter Steinberger.
- Adopt Apple-specific iOS App Review notes. [932abb0a](https://github.com/openclaw/openclaw/commit/932abb0a841b522ebaa5b81921119a61b6a80b21) Thanks @joshavant.
- Document release publishing approvals and recovery. [948115ac](https://github.com/openclaw/openclaw/commit/948115ac6b2262f698e58566bdd96f4bff1c49e1) Thanks Peter Steinberger.
- Document bounded landing exceptions. [a48bd1c4](https://github.com/openclaw/openclaw/commit/a48bd1c4f3702ad2dbde3f2f0faca66e64ecba2a) Thanks Peter Steinberger.
- Condense CI workflow comments. [be535fd2](https://github.com/openclaw/openclaw/commit/be535fd24beec95cb5e44cc43f4bfe7110b092ef) Thanks Peter Steinberger.
- Document PR selection and hourly coverage. [bf9162b5](https://github.com/openclaw/openclaw/commit/bf9162b53cea9e20eddf81bb401131c5ef75da0f) Thanks Peter Steinberger.
- Correct plugin publication recovery guidance. [cbb40268](https://github.com/openclaw/openclaw/commit/cbb40268a653c59ec0bcfcb894e1c3e1ac720466) Thanks Peter Steinberger.
- Clarify hourly main validation guidance. [ea9f5939](https://github.com/openclaw/openclaw/commit/ea9f5939fe37423d5adb8ce8d62995ec576307aa) Thanks Peter Steinberger.
- Restore the npm-publication documentation bookmark. [eb223579](https://github.com/openclaw/openclaw/commit/eb2235795995433f3483815a5f759c87aa8cb147) Thanks @vincentkoc.
- Remove redundant CI comments. [f9861b1a](https://github.com/openclaw/openclaw/commit/f9861b1aea42a88384ae839235c2409c0525817a) Thanks Peter Steinberger.
- Record historical release flake-waiver guidance. [fc1d9ce8](https://github.com/openclaw/openclaw/commit/fc1d9ce863718d206c0c6073b6a16ee6d558eb53) Thanks Peter Steinberger.
- Add the v2026.9.6 release documentation page. [#155225](https://github.com/openclaw/openclaw/pull/155225) Thanks @hannesrudolph.
- Clarify completion publication and plugin authority guidance. [#156140](https://github.com/openclaw/openclaw/pull/156140) Thanks @joshavant.
- Clarify native Team updater acceptance guidance. [#156199](https://github.com/openclaw/openclaw/pull/156199) Thanks @steipete, @jalehman.
- Clarify npm and ClawHub release priority while retaining required gates. [#156272](https://github.com/openclaw/openclaw/pull/156272) Thanks @steipete.
- Document an earlier stable-release fast path before stricter publication gates. [#156295](https://github.com/openclaw/openclaw/pull/156295) Thanks @steipete.
- Strengthen test-authoring guidance and subsystem audits. [#156316](https://github.com/openclaw/openclaw/pull/156316) Thanks @obviyus.
- Clarify release-owner control of candidate bases. [#156577](https://github.com/openclaw/openclaw/pull/156577) Thanks @steipete.
- Document database admission ownership and add a preparatory query-budget guard. [#156610](https://github.com/openclaw/openclaw/pull/156610) Thanks @steipete.
- Document source-reply completion rules. [#157057](https://github.com/openclaw/openclaw/pull/157057) Thanks @joshavant.
- Document recipient evidence for source-reply completion. [#157070](https://github.com/openclaw/openclaw/pull/157070) Thanks @joshavant.
- Retain authorized Team update ownership through verified acceptance. [#157195](https://github.com/openclaw/openclaw/pull/157195) Thanks @steipete, @jalehman, @vincentkoc, @romneyda.
- Remove completed Mintlify migration cleanup from docs sync. [#157583](https://github.com/openclaw/openclaw/pull/157583) Thanks @hannesrudolph.
- Correct historical release-priority recovery guidance. [#157853](https://github.com/openclaw/openclaw/pull/157853) Thanks @RomneyDa.
- Update macOS promotion guidance with remaining checkpoint-precedence inconsistencies. [#157897](https://github.com/openclaw/openclaw/pull/157897) Thanks @steipete.
- Exclude root repository instructions from public docs sync while preserving workspace templates. [#158253](https://github.com/openclaw/openclaw/pull/158253) Thanks @hannesrudolph.
- Require public Gateway session-creation proof for ownership changes. [#158315](https://github.com/openclaw/openclaw/pull/158315) Thanks @joshavant.
- Keep requested PR handoffs draft and allow adapted maintainer workflows. [#159859](https://github.com/openclaw/openclaw/pull/159859) Thanks @vacinc.
- Document temporary source-checkout fs-safe recovery and restoration. [#160101](https://github.com/openclaw/openclaw/pull/160101) Thanks @steipete.

- Explain the existing Node assignment for plugin retention tests. [632b150d](https://github.com/openclaw/openclaw/commit/632b150d462f7b88219010ca2bc8958b879dacb8) Thanks Peter Steinberger.
- Clarify existing SimSlim use in iOS qualification comparisons. [#160784](https://github.com/openclaw/openclaw/pull/160784) Thanks @steipete.

**Limits and compatibility**

- Stop replaying canceled CI workflows automatically. [0708f975](https://github.com/openclaw/openclaw/commit/0708f975ab3ee8a20d1fe08b87b3ac3fedaf30d8) Thanks Peter Steinberger.
- Revert special worker-retirement signaling after schema scopes end. [1664e4cf](https://github.com/openclaw/openclaw/commit/1664e4cf262616c48268e67dda0532f638ece9a7) Thanks Peter Steinberger.
- Treat Swift generic type-name length as a lint warning. [460bce50](https://github.com/openclaw/openclaw/commit/460bce50dc6e336730ea2cf61fe4d3adcce1b14b) Thanks Peter Steinberger.
- Reverted worker-retirement signaling for ended schema scopes. [601bb5ba](https://github.com/openclaw/openclaw/commit/601bb5ba37e5f578a35b2d7a176cd24bfde38135) Thanks Peter Steinberger.
- Restore backend-aware CI routing after hosted saturation. [8ab43884](https://github.com/openclaw/openclaw/commit/8ab43884177ddbdcbe4b21907e4bbb0ec134c751) Thanks Peter Steinberger.
- Move channel-health checks to the Gateway scheduler with unresolved shutdown risk. [8ccd3f58](https://github.com/openclaw/openclaw/commit/8ccd3f581c1e07f00ac224ce38c0b25d1d1e546b) Thanks @steipete.
- Revert broadly applied Gateway session fixture settlement changes. [9bb3ccca](https://github.com/openclaw/openclaw/commit/9bb3ccca699058b17196d803f14c6da1f8ae5d29) Thanks Peter Steinberger.
- Report numeric CI budgets as Actions warnings while retaining strict local checks. [9ed5a04a](https://github.com/openclaw/openclaw/commit/9ed5a04a6551ff9ca3d1274077a4b6c6fea0b504) Thanks Peter Steinberger.
- Move adopted-session probes into Gateway scheduling with unresolved shutdown risk. [9f6554c1](https://github.com/openclaw/openclaw/commit/9f6554c164c4df0df47caa512fc5ecb415dfc7e7) Thanks @steipete.
- Reverted hosted-first PR verification placement. [ab416e26](https://github.com/openclaw/openclaw/commit/ab416e262cb97e8ca49505d903ec57c566c09bb1) Thanks Peter Steinberger.
- Revert cached-worker retirement changes. [af9e273f](https://github.com/openclaw/openclaw/commit/af9e273f63468f527ac3f59c3309dd90d777e18f) Thanks Peter Steinberger.
- Use Podman's native init helper to reap detached children in isolated tests. [b29a7f67](https://github.com/openclaw/openclaw/commit/b29a7f67c0f89759912945705f64386e39a79ce4) Thanks @vincentkoc.
- Preserve the first iOS screenshot capture failure. [b8a3ca30](https://github.com/openclaw/openclaw/commit/b8a3ca30a70c07379cf94017f5018434d11aaf31) Thanks Peter Steinberger.
- Preserve failed release-validation attempts. [c93c3e0b](https://github.com/openclaw/openclaw/commit/c93c3e0b5588322b0c68c856c3195f92578fa17d) Thanks Peter Steinberger.
- Reverted universal Gateway fixture read and cleanup waits. [cb13cf88](https://github.com/openclaw/openclaw/commit/cb13cf88e41d8db0fd8036a2d3378d127f697b22) Thanks Peter Steinberger.
- Record reverted stale-worker retirement work. [e52420e1](https://github.com/openclaw/openclaw/commit/e52420e1eea6c614ba7730d3d36980167478c6df) Thanks Peter Steinberger.
- Defer unrelated slow integrations to hourly and release CI. [e68cfe26](https://github.com/openclaw/openclaw/commit/e68cfe26f13a747ec5ef3d5371dfe2b27c64b52b) Thanks @steipete.
- Allow upgrade compatibility tests enough time to finish. [f0280ee9](https://github.com/openclaw/openclaw/commit/f0280ee9c3c91c62b177e5e1f909b4b560a2654f) Thanks Peter Steinberger.
- Allow validation to start with locale drift warnings while keeping strict checks. [f4a5f852](https://github.com/openclaw/openclaw/commit/f4a5f85241ca921998099f54748f6412f22d93a0) Thanks Peter Steinberger.
- Keep prebuilt test readers from rebuilding AI artifacts. [f6c237fd](https://github.com/openclaw/openclaw/commit/f6c237fd0d3534ba91e0538315dede7b14961572) Thanks Peter Steinberger.
- Record reverted Gateway abort-test timing changes. [fc574daa](https://github.com/openclaw/openclaw/commit/fc574daa9adf5efef42b5e36f5823033134f1aad) Thanks Peter Steinberger.
- Share native agent coordination through matching host and plugin versions. [#152181](https://github.com/openclaw/openclaw/pull/152181) Thanks @sjf-oa, @sjf.
- Add scheduled CI gate recovery with a remaining PR/head publication race. [#155392](https://github.com/openclaw/openclaw/pull/155392) Thanks @steipete.
- Pack CI jobs and add RunsOn qualification; GitHub-only settings may still select paid runners. [#155403](https://github.com/openclaw/openclaw/pull/155403) Thanks @steipete.
- Record superseded baseline-before-tests CI scheduling. [#155443](https://github.com/openclaw/openclaw/pull/155443) Thanks @freeqaz-openai.
- Reuse tooling fixtures and conditionally schedule historical updater tests. [#155731](https://github.com/openclaw/openclaw/pull/155731) Thanks @steipete.
- Separate native plugin-loader tests and correct FaceTime expectations; direct project selection can omit loader coverage. [#155892](https://github.com/openclaw/openclaw/pull/155892) Thanks @steipete.
- Extend selected browser package-test subprocess timeouts before the later outer-budget repair. [#155931](https://github.com/openclaw/openclaw/pull/155931) Thanks @steipete.
- Extend the shared subagent test cleanup wait without adding delivery-result capture. [#155960](https://github.com/openclaw/openclaw/pull/155960) Thanks @steipete.
- Give Docker channel-switch tests a separate 900-second timeout budget. [#155961](https://github.com/openclaw/openclaw/pull/155961) Thanks @steipete.
- Move six real-Gateway UI suites from ordinary main CI to release validation. [#155996](https://github.com/openclaw/openclaw/pull/155996) Thanks @steipete.
- Expand execution-identity QA; private-app topic validation and live qualification remain incomplete. [#156033](https://github.com/openclaw/openclaw/pull/156033) Thanks @joshavant.
- Rebalance Node CI and transcript fixtures; defer seven specialized MCP cases to release validation. [#156061](https://github.com/openclaw/openclaw/pull/156061) Thanks @steipete.
- Reduce routine UI shards and defer six exhaustive browser tours to release validation. [#156065](https://github.com/openclaw/openclaw/pull/156065) Thanks @steipete.
- Move three costly lifecycle suites to release verification. [#156077](https://github.com/openclaw/openclaw/pull/156077) Thanks @steipete.
- Defer nine native-process test files to release validation. [#156085](https://github.com/openclaw/openclaw/pull/156085) Thanks @steipete.
- Run a streamlined upgrade survivor check on admitted main CI; defer broader Docker scenarios. [#156097](https://github.com/openclaw/openclaw/pull/156097) Thanks @steipete.
- Defer ten expensive tooling matrices and reuse compiler fixtures. [#156104](https://github.com/openclaw/openclaw/pull/156104) Thanks @steipete.
- Move release-tooling process tests out of PR checks; native Windows coverage remains incomplete. [#156123](https://github.com/openclaw/openclaw/pull/156123) Thanks @steipete.
- Isolate macOS Quick Chat tests and report unmet host-deactivation preconditions. [#156134](https://github.com/openclaw/openclaw/pull/156134) Thanks @steipete.
- Defer 40 integration files to release validation. [#156254](https://github.com/openclaw/openclaw/pull/156254) Thanks @steipete.
- Split real-Gateway UI validation and defer additional browser tours. [#156270](https://github.com/openclaw/openclaw/pull/156270) Thanks @steipete.
- Introduce historical release-priority admission and advisory native-check reporting. [#156305](https://github.com/openclaw/openclaw/pull/156305) Thanks @steipete.
- Raise the Docker compatibility-lane budget; enclosing job deadlines may still truncate it. [#156336](https://github.com/openclaw/openclaw/pull/156336) Thanks @steipete.
- Record permission-root test cleanup with an empty shipped delta. [#156438](https://github.com/openclaw/openclaw/pull/156438) Thanks @RomneyDa.
- Record transcript fixture repair with no new shipped delta. [#156450](https://github.com/openclaw/openclaw/pull/156450) Thanks @RomneyDa.
- Prepare selected database-worker tests before deadlines; bracketed checkout paths remain a selector concern. [#156489](https://github.com/openclaw/openclaw/pull/156489) Thanks @steipete.
- Extend selected hosted validation job timeouts from 20 to 35 minutes. [#156570](https://github.com/openclaw/openclaw/pull/156570) Thanks @steipete.
- Retire obsolete skills downgrade test support. [#156575](https://github.com/openclaw/openclaw/pull/156575) Thanks @steipete.
- Repair selected Bun test fixtures and subprocess launches; key proof uses a patched runtime. [#156581](https://github.com/openclaw/openclaw/pull/156581) Thanks @steipete.
- Record the subsequently removed general release lane-waiver policy. [#156585](https://github.com/openclaw/openclaw/pull/156585) Thanks @steipete.
- Allow four hours for delegated Testbox validation. [#156614](https://github.com/openclaw/openclaw/pull/156614) Thanks @steipete.
- Move catalog startup tests from routine CI to release validation. [#156676](https://github.com/openclaw/openclaw/pull/156676) Thanks @steipete.
- Record the superseded commentary-status layout repair. [#156680](https://github.com/openclaw/openclaw/pull/156680) Thanks @steipete.
- Handle disappearing DMG mounts during packaging without proving device detachment. [#156702](https://github.com/openclaw/openclaw/pull/156702) Thanks @steipete.
- Retry plugin publication preparation with up to two fresh children; terminal-state checks remain incomplete. [#156760](https://github.com/openclaw/openclaw/pull/156760) Thanks @steipete.
- Remove an earlier general release waiver before the final strict publication policy. [#156811](https://github.com/openclaw/openclaw/pull/156811) Thanks @RomneyDa.
- Reuse bound release evidence, with publication exceptions later removed. [#156812](https://github.com/openclaw/openclaw/pull/156812) Thanks @steipete.
- Record the historical release lane-waiver forwarding repair. [#156816](https://github.com/openclaw/openclaw/pull/156816) Thanks @steipete.
- Record v2026.9.6 macOS feed metadata later withdrawn. [#156852](https://github.com/openclaw/openclaw/pull/156852) Thanks @steipete.
- Require stable publication validation before later exceptions were fully retired. [#156934](https://github.com/openclaw/openclaw/pull/156934) Thanks @RomneyDa.
- Raise Vercel mirror layer-size preflight to the documented 2 GB cap. [#156954](https://github.com/openclaw/openclaw/pull/156954) Thanks @steipete.
- Record the superseded updater inventory proposal with no shipped delta. [#156987](https://github.com/openclaw/openclaw/pull/156987) Thanks @steipete.
- Introduce Windows repair-worker checks whose transitive authentication was later repaired. [#157047](https://github.com/openclaw/openclaw/pull/157047) Thanks @steipete.
- Checkpoint signed macOS artifacts before notarization, with automatic signing selection later restored. [#157117](https://github.com/openclaw/openclaw/pull/157117) Thanks @steipete.
- Use ordinary operational file reads without promising atomic snapshots of in-place edits. [#157171](https://github.com/openclaw/openclaw/pull/157171) Thanks @steipete.
- Use main-tier validation for hourly CI. [#157186](https://github.com/openclaw/openclaw/pull/157186) Thanks @steipete.
- Recover uncertain auto-merge requests with a remaining delayed-submission risk. [#157193](https://github.com/openclaw/openclaw/pull/157193) Thanks @steipete.
- Allow longer native Windows task-state test probes. [#157289](https://github.com/openclaw/openclaw/pull/157289) Thanks @vincentkoc.
- Reduce Node fixture overhead and defer seven matrices in broad PR plans. [#157341](https://github.com/openclaw/openclaw/pull/157341) Thanks @steipete.
- Defer the session-row scale benchmark to full validation. [#157576](https://github.com/openclaw/openclaw/pull/157576) Thanks @steipete.
- Use recorded compatibility files in update-validation fixtures. [#157608](https://github.com/openclaw/openclaw/pull/157608) Thanks @RomneyDa.
- Defer eight slow runtime suites from routine CI to full validation. [#157611](https://github.com/openclaw/openclaw/pull/157611) Thanks @steipete.
- Require blocking release checks and retire waiver-bearing publication recovery. [#157864](https://github.com/openclaw/openclaw/pull/157864) Thanks @RomneyDa.
- Offer eligible release-tooling PRs an opt-in reduced-coverage CI lane. [#157921](https://github.com/openclaw/openclaw/pull/157921) Thanks @steipete.
- Require the pinned actionlint build for local workflow checks. [#157932](https://github.com/openclaw/openclaw/pull/157932) Thanks @vincentkoc.
- Move heavier hourly iOS checks to full validation and distinguish canceled-job proof. [#158413](https://github.com/openclaw/openclaw/pull/158413) Thanks @steipete.
- Allow supported sessionless QA utility completions, with history admission later narrowed. [#158452](https://github.com/openclaw/openclaw/pull/158452) Thanks @RomneyDa.
- Cache unchanged diagnostic text with an unresolved plaintext-retention concern. [#158471](https://github.com/openclaw/openclaw/pull/158471) Thanks @steipete.
- Use parent approval receipts for npm children and protected tags for direct recovery. [#158500](https://github.com/openclaw/openclaw/pull/158500) Thanks @steipete.
- Reuse retained Testbox source mirrors with bounded slots and an unresolved crash-recovery gap. [#158681](https://github.com/openclaw/openclaw/pull/158681) Thanks @steipete.
- Reuse Doctor ingress authority checks with promise rejection for expired async calls. [#158768](https://github.com/openclaw/openclaw/pull/158768) Thanks @steipete.
- Replace mobile beta preparation with store-release workflows and retained recovery plans. [#158807](https://github.com/openclaw/openclaw/pull/158807) Thanks @joshavant.
- Consolidate browser and memory helpers with a padded snapshot-reference compatibility gap. [#158829](https://github.com/openclaw/openclaw/pull/158829) Thanks @steipete.
- Schedule registered update-check work with a remaining minimal-Gateway startup race. [#158909](https://github.com/openclaw/openclaw/pull/158909) Thanks @steipete.
- Consolidate tests with unresolved media-alias and credential-redaction coverage concerns. [#158911](https://github.com/openclaw/openclaw/pull/158911) Thanks @steipete.
- Schedule Gateway and CLI capture cleanup with a recurring-cleanup gap for direct hosts. [#158959](https://github.com/openclaw/openclaw/pull/158959) Thanks @steipete.
- Consolidate core and plugin tests with a retained WhatsApp voice-note coverage concern. [#158975](https://github.com/openclaw/openclaw/pull/158975) Thanks @steipete.
- Stabilize lifecycle fixtures with an unresolved frozen-clock acquisition deadline. [#159015](https://github.com/openclaw/openclaw/pull/159015) Thanks @steipete.
- Add narrowly pinned iOS beta record recovery with an external-group compatibility gap. [#159109](https://github.com/openclaw/openclaw/pull/159109) Thanks @vincentkoc.
- Consolidate provider and channel tests with retained Alibaba coverage concerns. [#159120](https://github.com/openclaw/openclaw/pull/159120) Thanks @steipete.
- Schedule media cleanup with whole-Gateway shutdown proof still unresolved. [#159126](https://github.com/openclaw/openclaw/pull/159126) Thanks @steipete.
- Keep older published upgrade baselines usable while marking unsupported recovery coverage. [#159150](https://github.com/openclaw/openclaw/pull/159150) Thanks @steipete.
- Skip verbose Xcode diagnostics in screenshot and qualification tests while retaining ordinary evidence. [#159261](https://github.com/openclaw/openclaw/pull/159261) Thanks @joshavant.
- Read package handoff facts once and require supplied timestamps for inferred backup recovery. [#159361](https://github.com/openclaw/openclaw/pull/159361) Thanks @steipete.
- Consolidate extension tests with a retained Codex idle-refresh coverage concern. [#159369](https://github.com/openclaw/openclaw/pull/159369) Thanks @steipete.
- Remove the guest deadline from a persistence test while narrowing its execution coverage. [#159377](https://github.com/openclaw/openclaw/pull/159377) Thanks @steipete.
- Adapt release checks to verified frozen candidates with explicit omitted coverage. [#159505](https://github.com/openclaw/openclaw/pull/159505) Thanks @RomneyDa.
- Consolidate bundled-plugin tests with a retained PDF render-failure coverage concern. [#159513](https://github.com/openclaw/openclaw/pull/159513) Thanks @steipete.
- Consolidate bundled-plugin tests with a retained advertised-schema coverage concern. [#159530](https://github.com/openclaw/openclaw/pull/159530) Thanks @steipete.
- Consolidate plugin tests with a retained denied-child authorization coverage concern. [#159552](https://github.com/openclaw/openclaw/pull/159552) Thanks @steipete.
- Consolidate plugin tests with a retained revoked-token fallback coverage concern. [#159568](https://github.com/openclaw/openclaw/pull/159568) Thanks @steipete.
- Consolidate provider, policy and QA tests with retained RTP coverage concerns. [#159573](https://github.com/openclaw/openclaw/pull/159573) Thanks @steipete.
- Consolidate channel and QA tests with retained parent-settlement coverage concerns. [#159627](https://github.com/openclaw/openclaw/pull/159627) Thanks @steipete.
- Restore File Transfer's SDK filesystem boundary with a retained wide-directory scan concern. [#159654](https://github.com/openclaw/openclaw/pull/159654) Thanks @steipete.
- Await Doctor fixture plugin retirement with a retained failure-path cleanup concern. [#159754](https://github.com/openclaw/openclaw/pull/159754) Thanks @steipete.
- Consolidate agent tests with a retained persisted-model invalidation coverage concern. [#159774](https://github.com/openclaw/openclaw/pull/159774) Thanks @steipete.
- Record the reverted Codex cancellation test expectation change. [#159852](https://github.com/openclaw/openclaw/pull/159852) Thanks @VACInc.
- Offer default-off authorized omission of unsupported frozen-target Tool Search recipes. [#159996](https://github.com/openclaw/openclaw/pull/159996) Thanks @RomneyDa.
- Require memory-control qualification on opted-in Linux CI runners. [#160014](https://github.com/openclaw/openclaw/pull/160014) Thanks @vincentkoc.
- Require Crabbox 0.67.0 and task-bound Testbox receipts; stop and reallocate old leases, with no stale override or enforced provider TTL. [#160052](https://github.com/openclaw/openclaw/pull/160052) Thanks @vincentkoc.
- Omit unavailable-fixture Telegram identity QA from implicit release defaults. [#160072](https://github.com/openclaw/openclaw/pull/160072) Thanks @RomneyDa.
- Pin scheduled release checks to one commit every three hours; queued triggers and the hosted six-hour watcher limit still apply. [#160106](https://github.com/openclaw/openclaw/pull/160106) Thanks @steipete.
- Record the duplicate attachment-helper merge later corrected by the direct cleanup commit. [#160177](https://github.com/openclaw/openclaw/pull/160177) Thanks @steipete.
- Repair frozen Telegram checks and use absolute UI budgets when historical builds fail. [#160190](https://github.com/openclaw/openclaw/pull/160190) Thanks @RomneyDa.
- Record a duplicate clipboard-image repair proposal with no landed source delta. [#160210](https://github.com/openclaw/openclaw/pull/160210) Thanks @vyctorbrzezowski.
- Use one release-validation transport branch; require pushed targets and older tooling to reconcile old request records. [#160212](https://github.com/openclaw/openclaw/pull/160212) Thanks @steipete.
- Retire new Tideclaw alpha releases while preserving historical version readback. [#160261](https://github.com/openclaw/openclaw/pull/160261) Thanks @steipete.
- Audit narrowly eligible unavailable context links without omitting required release evidence. [#160305](https://github.com/openclaw/openclaw/pull/160305) Thanks @steipete.
- Schedule remote skill refresh and join shutdown work, with slow-node wait concerns. [#160318](https://github.com/openclaw/openclaw/pull/160318) Thanks @steipete.
- Capture iOS screenshots on fresh sequential simulators; require an idle local pool and retain the shared release-workflow queue. [#160347](https://github.com/openclaw/openclaw/pull/160347) Thanks @joshavant.
- Pack broad CI selections under the row cap, with low-capacity rows still able to exceed the estimated workflow duration. [#160376](https://github.com/openclaw/openclaw/pull/160376) Thanks @steipete.
- Raise six Kova acceptance budgets, including five shared smoke and diagnostic limits; later pins further revise CPU limits. [#160573](https://github.com/openclaw/openclaw/pull/160573) Thanks @steipete.
- Raise Kova Gateway CPU acceptance budgets for reported variation; later canonical and live pins differ from the legacy list. [#160616](https://github.com/openclaw/openclaw/pull/160616) Thanks @steipete.
- Record the assigned-owner header correction later fully reverted, with no surviving display improvement. [#160673](https://github.com/openclaw/openclaw/pull/160673) Thanks @Patrick-Erichsen.
- Fully revert the assigned-owner header change; shared headers again hide the assignee, while the Owner menu can show the creator. [#160709](https://github.com/openclaw/openclaw/pull/160709) Thanks @Patrick-Erichsen.
- Admit the sealed recovery bundle and reviewed plugin inventory; the helper import-check gap and unpacked-size warning remain. [#160717](https://github.com/openclaw/openclaw/pull/160717) Thanks @steipete.

- Extend hosted upgrade-validation budgets while retaining the shared command timeout. [0eb4ad70](https://github.com/openclaw/openclaw/commit/0eb4ad70c44171559714c9115bf3a08bc4926a15) Thanks Peter Steinberger.
- Extend upgrade-test startup waits and honor configured readiness budgets. [1fd2ad9b](https://github.com/openclaw/openclaw/commit/1fd2ad9b56a67dcc1e9430ea9451d9ae2efab30d) Thanks Peter Steinberger.
- Pin the OpenCode Go release smoke test to one accessible model pending workspace region changes. [6d644f27](https://github.com/openclaw/openclaw/commit/6d644f2780502b3e760e869f4cfa33407e9b7585) Thanks Peter Steinberger.
- Warn on untouched file-length overages in eligible local changed-file checks while retaining strict changed-file and correctness checks. [7c1838a4](https://github.com/openclaw/openclaw/commit/7c1838a41810165c28033e886afcef0140ce8dfb) Thanks @steipete.
- Consolidate Gateway tests with unresolved authentication, session and delivery coverage gaps. [#160115](https://github.com/openclaw/openclaw/pull/160115) Thanks @steipete.
- Fully revert the separate Stop button; a ready follow-up replaces Stop until cleared, with dictation retaining priority. [#160725](https://github.com/openclaw/openclaw/pull/160725) Thanks @vyctorbrzezowski.
- Consolidate agent, channel and CLI tests with unresolved Telegram authorization and model-picker coverage gaps. [#160766](https://github.com/openclaw/openclaw/pull/160766) Thanks @steipete.
- Rename the iOS release workflow to ios-store-release.yml and retire one-time reconciliation; external dispatch callers must update the old filename. [#160791](https://github.com/openclaw/openclaw/pull/160791) Thanks @joshavant.
- Extend future extended-stable npm verification waits while retaining exact-version and channel checks. [#160796](https://github.com/openclaw/openclaw/pull/160796) Thanks @RomneyDa.
- Consolidate webhook limiter and body-reader ownership with an unresolved Feishu rejection Content-Type concern. [#160846](https://github.com/openclaw/openclaw/pull/160846) Thanks @steipete.
- Wait longer for queued release-validation receipts and advance eligible GitHub release activation while retaining publication approvals and verification. [#160859](https://github.com/openclaw/openclaw/pull/160859) Thanks @steipete.
- Record three temporary E2E waivers; restart-adoption coverage was later restored, while child-timeout and memory-consolidation cases remain skipped. [#161143](https://github.com/openclaw/openclaw/pull/161143) Thanks @steipete.
- Reverted change: Keep Stop available while drafting a follow-up [#160233](https://github.com/openclaw/openclaw/pull/160233). Thanks @vyctorbrzezowski.

</details>

</Accordion>

</AccordionGroup>
