> ## Documentation Index
> Fetch the complete documentation index at: https://docs2.openclaw.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# v2026.8.2

> Detailed OpenClaw v2026.8.2 release notes covering conversations, the Control UI, agent work, voice and media, channels, browser and cloud work, setup, models, plugins, updates, recovery, and Gateway operations.

# v2026.8.2

v2026.8.2 adds a Home button to the Control UI that opens your personal Home agent beside whatever you are working on, instead of making you leave it to start another conversation. It also brings a Linux desktop companion, background sessions you can start without switching pages, browser control that can stay available without a running Gateway, four new looks for the Control UI, and a long tail of fixes for replies, voice, updates, and recovery.

**Release scale:** 784 pull requests, 10 direct commits, and 134 contributors.

## Installation and Onboarding

Installation and first-run setup now do a better job of preserving the system and model choices people already made. Linux and macOS recovery paths fail more clearly, guided setup keeps the selected agent and model through reconnects, and required runtime plugins can be reviewed, installed, and verified without sending people to Terminal.

<AccordionGroup>
  <Accordion title="Installing and Updating OpenClaw">
    Installation now follows the path each system actually began with. Fedora and other affected RPM-based Linux systems can keep their distro-owned Node packages while OpenClaw selects a managed runtime that meets its SQLite requirements, and the shell installer once again exposes the npm errors it needs to recover from supported stale launchers and install directories. On macOS, Install and Relaunch stops after one failed relocation retry and points to the Applications copy instead of looping. Linux Gateway installation also refuses an unsafe sudo-to-root setup before it writes root-owned configuration or credentials, without changing genuine root installs or ordinary sudo lifecycle commands.

    Updates keep more of the working installation intact. pnpm-owned installs stay with pnpm across the updater handoff, interrupted package lifecycle work can finish before the new package starts, and hardened npm hosts can update without enabling unrelated package scripts. Doctor now migrates a readable active configuration before considering an older last-known-good copy, preserving rejected bytes when fallback recovery is still necessary. ClawDock helpers are retired, so existing users need to remove the helper source line themselves and move to the documented Docker Compose and OpenClaw CLI commands, with their deployment state left in place.

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

      **Improvements**

      * Made Windows worker and scheduling checks tolerate slow PowerShell startup while retaining bounded identity checks ([#124293](https://github.com/openclaw/openclaw/pull/124293)). Thanks @Chinmayrawat15 and @obviyus.
      * Published readable package inventory metadata for installation validation and bundled-plugin cleanup ([#133549](https://github.com/openclaw/openclaw/pull/133549)). Thanks @RomneyDa.
      * Kept installer dry runs from downloading or preparing the optional Gum interface ([#134388](https://github.com/openclaw/openclaw/pull/134388)). Thanks @ly85206559.

      **Bug fixes**

      * Preserved quoted and escaped arguments in Windows Canvas builds through pnpm command shims ([#133395](https://github.com/openclaw/openclaw/pull/133395)). Thanks @ly85206559.
      * Honored custom published host ports in Docker Compose dashboard and authenticated health commands ([#133504](https://github.com/openclaw/openclaw/pull/133504))
      * Clarified the difference between an installed CLI and the optional background Gateway service ([#133530](https://github.com/openclaw/openclaw/pull/133530)). Thanks @romneyda.
      * Retired ClawDock helpers in favor of maintained Docker Compose and CLI workflows, with manual migration for existing users ([#133594](https://github.com/openclaw/openclaw/pull/133594))
      * Preserved PowerShell profile encoding when installing Windows completions ([#133729](https://github.com/openclaw/openclaw/pull/133729)). Thanks @ly85206559.
      * Persisted the Unix npm global path and surfaced installer finalization failures ([#133869](https://github.com/openclaw/openclaw/pull/133869)). Thanks @steipete.
      * Completed interrupted pnpm 11 package lifecycle work before packaged startup ([#133908](https://github.com/openclaw/openclaw/pull/133908)). Thanks @obviyus.
      * Preserved valid legacy agent rosters while changing root-file session-store ownership ([#133920](https://github.com/openclaw/openclaw/pull/133920))
      * Migrated readable active configuration before considering last-known-good recovery ([#134025](https://github.com/openclaw/openclaw/pull/134025)). Thanks @obviyus and @stuart-minion-ai.
      * Stopped macOS Install and Relaunch after one failed relocation retry ([#134074](https://github.com/openclaw/openclaw/pull/134074)). Thanks @VACInc and @Sedrak-Hovhannisyan.
      * Preserved pnpm ownership through updater respawn and refused ambiguous package ownership before mutation ([#134075](https://github.com/openclaw/openclaw/pull/134075)). Thanks @obviyus and @YogevKr.
      * Preserved distro-owned Node packages on affected RPM Linux systems while selecting a SQLite-safe runtime ([#134166](https://github.com/openclaw/openclaw/pull/134166)). Thanks @sallyom and @beedell-roke.
      * Completed dependency installation in Docker source and cleanup-smoke builds with lifecycle checks enabled ([#134231](https://github.com/openclaw/openclaw/pull/134231)). Thanks @steipete.
      * Restored actionable npm errors and supported stale-file recovery in the shell installer ([#134236](https://github.com/openclaw/openclaw/pull/134236)). Thanks @SunnyShu0925 and @mohamedelrefaiy.
      * Recognized staged metadata-free global npm installs in update status ([#134475](https://github.com/openclaw/openclaw/pull/134475)). Thanks @Patrick-Erichsen and @vyctorbrzezowski.
      * Removed obsolete version stamps only from proven legacy OpenClaw-managed Linux service units ([#134482](https://github.com/openclaw/openclaw/pull/134482)). Thanks @Patrick-Erichsen and @vyctorbrzezowski.

      **Security and trust boundaries**

      * Removed or process-hashed explicitly private macOS diagnostic values while leaving public and unannotated fields unchanged ([#133739](https://github.com/openclaw/openclaw/pull/133739)). Thanks @steipete.
      * Refused unsafe Linux sudo-to-root user-manager installations before writing root-owned state ([#134084](https://github.com/openclaw/openclaw/pull/134084)). Thanks @obviyus and @itanyplus.
      * Allowed the exact known OpenClaw lifecycle guard on hardened npm hosts while continuing to reject unrelated package scripts and unexpected contents ([#134193](https://github.com/openclaw/openclaw/pull/134193)). Thanks @obviyus and reporter @botatdovly.

      **Documentation**

      * Explained signing identities for Android source and fork builds without changing build behavior ([#124286](https://github.com/openclaw/openclaw/pull/124286)). Thanks @santhiprakash and @minoosara5426-prog.
      * Directed Docker deployments to mount the whole state directory so replacement saves reach the running container ([#124688](https://github.com/openclaw/openclaw/pull/124688)). Thanks @ericcaiwx-star.
      * Distinguished OpenClaw configuration substitution from literal dotenv values ([#127524](https://github.com/openclaw/openclaw/pull/127524)). Thanks @dkling-it.
      * Documented the existing Node service `--no-tls` installation option ([#130258](https://github.com/openclaw/openclaw/pull/130258)). Thanks @qingminglong.
      * Documented enable and disable flags for macOS installed-app sharing ([#131684](https://github.com/openclaw/openclaw/pull/131684)). Thanks @qingminglong.
    </details>
  </Accordion>

  <Accordion title="Guided Setup and Provider Sign-In">
    First-run setup now waits for the thing it just configured to become real. Model Setup keeps the chosen model through a reconnect, stays pending until the saved settings are active, and shows the actual recovery reason when the running Gateway is not ready yet. Guided CLI setup asks for an agent only when a step actually belongs to one, keeps that choice through the rest of the flow, and lets people add an agent without copying credentials when that is not what they want.

    When a model needs a runtime plugin, macOS onboarding and the Control UI can show where the plugin comes from and which capabilities it requests, ask for explicit approval, install it, and verify the model in the same flow. Declining or cancelling leaves the configured model unchanged and stops the attempt. Mac users can also finish ChatGPT Login after a same-route reconnect when the original callback was proven unsent, cancel a stalled provider sign-in, or quit onboarding without a late result taking over a replacement attempt.

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

      **Improvements**

      * Kept one explicit agent selection through guided setup and made credential copying optional ([#133983](https://github.com/openclaw/openclaw/pull/133983)). Thanks @msipes and @JunfXiao.

      **Bug fixes**

      * Kept valid first-run inference routes from being rejected after the default agent roster was created ([#130370](https://github.com/openclaw/openclaw/pull/130370)). Thanks @RomneyDa.
      * Kept first-run Model Setup pending until saved settings were active ([#133434](https://github.com/openclaw/openclaw/pull/133434))
      * Stopped absent optional SecretRef environment variables from producing misleading repair warnings ([#133582](https://github.com/openclaw/openclaw/pull/133582)). Thanks @pengzh1, @vincentkoc, and @jodok.
      * Recognized configured file-backed and managed SecretRef API keys without resolving or exposing them ([#133596](https://github.com/openclaw/openclaw/pull/133596)). Thanks @mateu and @Patrick-Erichsen.
      * Required real Gateway protocol evidence during setup readiness checks ([#133989](https://github.com/openclaw/openclaw/pull/133989))
      * Finished macOS ChatGPT Login after a proven unsent callback and same-route Gateway reconnect ([#134268](https://github.com/openclaw/openclaw/pull/134268)). Thanks @obviyus and @Sedrak-Hovhannisyan.
      * Allowed stalled macOS provider sign-in to be cancelled without a late result replacing a newer attempt ([#134380](https://github.com/openclaw/openclaw/pull/134380)). Thanks @VACInc and @Sedrak-Hovhannisyan.
      * Restored two macOS onboarding messages across configured native locales ([#134492](https://github.com/openclaw/openclaw/pull/134492))

      **Security and trust boundaries**

      * Restored explicit in-app capability review before installing a required runtime plugin ([#134101](https://github.com/openclaw/openclaw/pull/134101)). Thanks @VACInc, @coygeek, @hannesrudolph, and @Sedrak-Hovhannisyan.

      **Documentation**

      * Replaced unsupported custom main-session-key guidance with the actual primary-session choices ([#133804](https://github.com/openclaw/openclaw/pull/133804)). Thanks @senorsen.
    </details>
  </Accordion>
</AccordionGroup>

## The New Web UI

The [Control UI](/web/control-ui) is easier to use when several conversations are moving at once. A New Session can start in the background, Home can stay beside the work already on screen, messages and drafts keep their place more reliably, long histories do less repeated work, and four opt-in themes make the workspace easier to make your own.

<AccordionGroup>
  <Accordion title="Starting and composing conversations">
    A New Session can now begin in the background while you stay on the setup page and prepare something else, then open from its completion notice when it is ready. Plain folders and fresh repositories remain usable without pretending they support a worktree, project and checkout choices survive temporary discovery failures, and startup progress keeps moving forward instead of hiding newer tool or approval activity. Typing from an unfocused part of New Session also sends the first printable character to the composer.

    On iPhone, model, effort, permission, context, attachment, skill, connector, and tool controls now live in the composer when the connected Gateway and operator access support them. Queued messages stay bound to the settings that were reviewed before sending, older or stale queue entries stop for review, and Control UI prompts keep one visible identity through preparation, completion, and reload. Selecting text can open an editable side-chat draft without adding the side question to the main history.

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

      **Limits and compatibility notes**

      * Background start applies to New Session, not an already active Chat session.
      * Pressing the number for an already selected model can still be captured as message text.
      * iPhone composer controls require support reported by the connected Gateway and the operator's access scope, while stale or older queued messages require review before retrying.
      * A separate hard-refresh image-hydration observation remains unresolved, and very short Home dock prompts may still have titles influenced by their trailing work context.

      **Improvements**

      * Start New Session drafts in the background [#128050](https://github.com/openclaw/openclaw/pull/128050) — with thanks to [@Takhoffman](https://github.com/Takhoffman)
      * Bring model, permission, context, attachment, skill, connector, and tool controls to the iOS composer [#132683](https://github.com/openclaw/openclaw/pull/132683) — by [@Solvely-Colin](https://github.com/Solvely-Colin)
      * Present Goal creation and editing in one composer surface [#132787](https://github.com/openclaw/openclaw/pull/132787) — by [@vyctorbrzezowski](https://github.com/vyctorbrzezowski)
      * Unify the light-theme task, queue, Goal, and composer surface [#132799](https://github.com/openclaw/openclaw/pull/132799) — by [@vyctorbrzezowski](https://github.com/vyctorbrzezowski)
      * Distinguish session startup from confirmed concurrency waits [#133470](https://github.com/openclaw/openclaw/pull/133470) — by [@steipete](https://github.com/steipete)
      * Standardize Read Only and Full Access permission labels [#133657](https://github.com/openclaw/openclaw/pull/133657) — by [@steipete](https://github.com/steipete)
      * Preserve numeric and boolean values across native Apple object payloads [#133707](https://github.com/openclaw/openclaw/pull/133707) — by [@steipete](https://github.com/steipete)
      * Reuse edited New Session workspace choices through temporary discovery failures [#133744](https://github.com/openclaw/openclaw/pull/133744) — by [@steipete](https://github.com/steipete)
      * Let selected chat text open as an editable side-chat question [#134596](https://github.com/openclaw/openclaw/pull/134596) — by [@Patrick-Erichsen](https://github.com/Patrick-Erichsen)

      **Bug fixes**

      * Preserve the first printable character typed into an unfocused New Session page [#132773](https://github.com/openclaw/openclaw/pull/132773) — by [@vyctorbrzezowski](https://github.com/vyctorbrzezowski)
      * Keep typing responsive in long Control UI conversations [#133465](https://github.com/openclaw/openclaw/pull/133465) — with thanks to [@VACInc](https://github.com/VACInc)
      * Preserve generated titles and monotonic progress through worktree retries [#133489](https://github.com/openclaw/openclaw/pull/133489) — by [@steipete](https://github.com/steipete)
      * Keep queued prompts as one bubble through completion and reload [#133542](https://github.com/openclaw/openclaw/pull/133542) — by [@steipete](https://github.com/steipete)
      * Keep plain folders and fresh repositories usable in New Session [#133664](https://github.com/openclaw/openclaw/pull/133664) — by [@steipete](https://github.com/steipete)
      * Restore valid New Session placement preferences after repository discovery [#133705](https://github.com/openclaw/openclaw/pull/133705) — by [@steipete](https://github.com/steipete)
      * Restore registered projects after Control UI sign-in resolves [#133817](https://github.com/openclaw/openclaw/pull/133817) — by [@steipete](https://github.com/steipete)
      * Keep a first image prompt visible once while workspace preparation finishes [#133861](https://github.com/openclaw/openclaw/pull/133861) — by [@steipete](https://github.com/steipete)
      * Put the user's Home dock request before generated context when naming a conversation [#134591](https://github.com/openclaw/openclaw/pull/134591) — by [@steipete](https://github.com/steipete)
      * Keep the loading model picker grouped with composer controls [#134594](https://github.com/openclaw/openclaw/pull/134594) — by [@Patrick-Erichsen](https://github.com/Patrick-Erichsen)

      **Documentation and localization**

      * Localize session-permission guidance and change feedback [#133708](https://github.com/openclaw/openclaw/pull/133708)
      * Localize assistant-sidebar controls across supported Control UI locales [#134301](https://github.com/openclaw/openclaw/pull/134301)
      * Refresh pending-message and navigation wording across supported Control UI locales [#134567](https://github.com/openclaw/openclaw/pull/134567)
    </details>
  </Accordion>

  <Accordion title="Messages and context that keep their place">
    Queued, interrupted, and cancelled input now returns to the point where it was accepted instead of dropping below newer replies, and prompts that the Control UI has already handed off stay gone through refreshes, pagination, and remounts. Cross-session messages show which conversation they came from and link back to it, while recovery after a long conversation runs out of room keeps the latest active text request ahead of superseded work.

    The command surface is simpler around those handoffs too. Manual docking and focus commands are gone without compatibility aliases, and `/session unbind` is now the supported way to detach a bound conversation without ending its agent session.

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

      **Limits and compatibility notes**

      * The recovery repair covers active requests with text, while a newer image-only request can still yield to an older text task.
      * Retired-prompt display repairs do not establish duplicate model execution, extra cost, or permanent transcript corruption.
      * Hidden export records remain available under All and in raw HTML and JSONL archives, and separate channel persistence and cross-channel binding-ID concerns remain outside these fixes.
      * Same-agent forwarded-message avatar behavior is owned by a different section and is not claimed here.

      **Improvements**

      * Show cross-session messages as linked, attributed conversation bubbles [#132054](https://github.com/openclaw/openclaw/pull/132054) — by [@steipete](https://github.com/steipete)

      **Bug fixes**

      * Keep the latest active text request ahead of superseded work during context-overflow recovery [#123737](https://github.com/openclaw/openclaw/pull/123737) — with thanks to [@wangyan2026](https://github.com/wangyan2026), [@obviyus](https://github.com/obviyus), and [@andersonjeccel](https://github.com/andersonjeccel)
      * Stop oversized retained transcripts from repeating ineffective byte compaction on every turn [#127110](https://github.com/openclaw/openclaw/pull/127110) — with thanks to [@yu-xin-c](https://github.com/yu-xin-c), [@obviyus](https://github.com/obviyus), and [@fede-kamel](https://github.com/fede-kamel)
      * Preserve plugin-owned bindings and valid subagent task control [#127147](https://github.com/openclaw/openclaw/pull/127147) — by [@steipete](https://github.com/steipete)
      * Replace manual docking and focus commands with `/session unbind` [#133153](https://github.com/openclaw/openclaw/pull/133153) — by [@steipete](https://github.com/steipete)
      * Reject conflicting compaction identities before either transcript changes [#133678](https://github.com/openclaw/openclaw/pull/133678) — by [@steipete](https://github.com/steipete)
      * Keep accepted and retired prompts from reappearing after history refresh [#134059](https://github.com/openclaw/openclaw/pull/134059) — by [@steipete](https://github.com/steipete)
      * Restore queued, interrupted, and cancelled inputs to their accepted timeline position [#134261](https://github.com/openclaw/openclaw/pull/134261) — with thanks to [@VACInc](https://github.com/VACInc)
      * Keep hidden continuation input out of ordinary-user HTML export views [#134561](https://github.com/openclaw/openclaw/pull/134561) — by [@steipete](https://github.com/steipete)
    </details>
  </Accordion>

  <Accordion title="Sessions you can organize and share">
    Session menus now keep everyday organization, appearance, copying, navigation, and destructive actions in clearer groups, with icon and color editing in one place and supported destinations available without hunting through the interface. Empty group headings can be hidden locally without losing their membership or move targets, nested menus keep their parent row highlighted, and ordinary operational text can be selected and copied again.

    Beam transcript shares now use shorter readable links while keeping existing catalog links and normal authorization intact. Returning to an existing Control UI tab after an update or abrupt restart also reconnects without making you open another tab, preserving the route and unsent draft you already had open.

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

      **Limits and compatibility notes**

      * Copied session links and Beam shares keep their normal authorization and are not public links; existing Beam catalog links remain supported.
      * Hide empty groups is an off-by-default browser-local preference.
      * Suspended-tab recovery was verified with Chromium and Playwright WebKit rather than physical Safari.

      **Improvements**

      * Add readable Beam transcript share links [#125755](https://github.com/openclaw/openclaw/pull/125755) — by [@steipete](https://github.com/steipete)
      * Organize session actions and combine icon and color editing [#133490](https://github.com/openclaw/openclaw/pull/133490) — by [@steipete](https://github.com/steipete)
      * Show each visible participant or viewer once in session chrome [#133519](https://github.com/openclaw/openclaw/pull/133519) — by [@steipete](https://github.com/steipete)
      * Make operational text selectable and add a Copy code action to GitHub device setup [#133536](https://github.com/openclaw/openclaw/pull/133536) — with thanks to [@RomneyDa](https://github.com/RomneyDa) and [@Grynn](https://github.com/Grynn)
      * Explain conversation branch and editor controls beside their buttons [#133556](https://github.com/openclaw/openclaw/pull/133556) — by [@steipete](https://github.com/steipete)
      * Let users hide empty session-group headings locally [#133638](https://github.com/openclaw/openclaw/pull/133638) — by [@steipete](https://github.com/steipete)
      * Keep parent session rows highlighted while nested menus are open [#133718](https://github.com/openclaw/openclaw/pull/133718) — by [@steipete](https://github.com/steipete)

      **Bug fixes**

      * Recover suspended Control UI tabs after Gateway updates [#134189](https://github.com/openclaw/openclaw/pull/134189) — with thanks to [@Takhoffman](https://github.com/Takhoffman)
    </details>
  </Accordion>

  <Accordion title="Long conversations and history">
    Long Control UI conversations now open with up to 800 recent messages and keep older pages capped at 1,000, so more of the current conversation is ready before another history load. The initial render and older-page prepend paths repeat less work while keeping visible content and scroll behavior the same.

    Importing or returning to a large retained history also requires less local work in the affected paths, while the conversation and its search results remain unchanged.

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

      **Limits and compatibility notes**

      * Existing byte and entry caps can reduce the 800-message initial and 1,000-message older-page windows.
      * Measurements cover specific Control UI, SQLite, Linux, sanitizer, title-cache, and synthetic workloads, not every browser, network, provider, Gateway, or scrolling delay.
      * Smaller import cases were noisy, replay time was approximately unchanged, and mixed startup measurements do not establish a universal speedup.
      * The long-session correctness unit does not receive sole credit for the broader history outcome.

      **Improvements**

      * Reduce local formatting work for Markdown-heavy messages [#133483](https://github.com/openclaw/openclaw/pull/133483) — by [@steipete](https://github.com/steipete)
      * Load long chats in larger history windows [#133565](https://github.com/openclaw/openclaw/pull/133565) — by [@steipete](https://github.com/steipete)
      * Reduce repeated work while preparing long chat histories [#133635](https://github.com/openclaw/openclaw/pull/133635) — by [@steipete](https://github.com/steipete)
      * Open long conversations with up to 800 recent messages and defer closed-tooltip layout work [#133734](https://github.com/openclaw/openclaw/pull/133734) — by [@steipete](https://github.com/steipete)
      * Reduce CPU and allocation work during large session imports [#133742](https://github.com/openclaw/openclaw/pull/133742) — by [@steipete](https://github.com/steipete)
      * Load and scroll long chat histories with less repeated work [#133798](https://github.com/openclaw/openclaw/pull/133798) — by [@steipete](https://github.com/steipete)
      * Reduce projection work during large session imports and rebuilds [#133802](https://github.com/openclaw/openclaw/pull/133802) — by [@steipete](https://github.com/steipete)
      * Load and prepend long Control UI histories with less browser blocking [#133870](https://github.com/openclaw/openclaw/pull/133870) — by [@steipete](https://github.com/steipete)
      * Reduce local preparation work for large external content [#134064](https://github.com/openclaw/openclaw/pull/134064) — by [@steipete](https://github.com/steipete)
      * Reduce Control UI startup and history-processing work [#134209](https://github.com/openclaw/openclaw/pull/134209) — by [@steipete](https://github.com/steipete)
      * Reduce repeated tool-card, title, chrome, and settings work in large histories [#134369](https://github.com/openclaw/openclaw/pull/134369) — by [@steipete](https://github.com/steipete)

      **Bug fixes**

      * Keep the earlier-history action stable while loading [#132445](https://github.com/openclaw/openclaw/pull/132445) — with thanks to [@RomneyDa](https://github.com/RomneyDa)
      * Read large retained histories more efficiently without changing returned messages [#133680](https://github.com/openclaw/openclaw/pull/133680) — by [@steipete](https://github.com/steipete)
      * Release unused backing data from cached session-title previews [#133988](https://github.com/openclaw/openclaw/pull/133988) — by [@steipete](https://github.com/steipete)
      * Bound long-session history copies and preserve Codex fork provenance [#134238](https://github.com/openclaw/openclaw/pull/134238) — by [@steipete](https://github.com/steipete)
    </details>
  </Accordion>

  <Accordion title="Usage, settings, and operator guidance">
    Usage and status views now carry cumulative output-token totals through tool calls, retries, approvals, reconnects, and the final recap, while selected models report their prepared context windows instead of falling back to a generic number. Cost estimates keep models from different providers apart, preserve explicit custom and zero prices, and avoid applying hosted rates to private endpoints.

    Settings also preserve separate changes when two OpenClaw processes make their first save at the same time, and the Control UI moves setup bookkeeping out of everyday Appearance settings while leaving consent choices editable.

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

      **Limits and compatibility notes**

      * Provider-billed totals remain authoritative, and the prepared pricing evidence is not invoice reconciliation.
      * Persisted Codex tool-loop billing undercount and the broader Gateway CPU report remain separate.
      * The historical package-number correction was not freshly verified against registry or tag state in the prepared evidence.

      **Improvements**

      * Simplify appearance settings and clarify machine-owned history [#133643](https://github.com/openclaw/openclaw/pull/133643) — by [@steipete](https://github.com/steipete)
      * Preserve intentional provider-prefixed, zero, and private-endpoint usage rates [#133699](https://github.com/openclaw/openclaw/pull/133699) — by [@steipete](https://github.com/steipete)

      **Bug fixes**

      * Correct cached long-context and multi-call cost estimates [#133349](https://github.com/openclaw/openclaw/pull/133349) — by [@steipete](https://github.com/steipete)
      * Use the prepared model's actual context window in status views [#133452](https://github.com/openclaw/openclaw/pull/133452) — with thanks to [@vincentkoc](https://github.com/vincentkoc), [@Finn763](https://github.com/Finn763), and [@ahmedsaed](https://github.com/ahmedsaed)
      * Keep cumulative output-token totals through tool calls, retries, approvals, and reconnects [#133605](https://github.com/openclaw/openclaw/pull/133605) — by [@steipete](https://github.com/steipete)
      * Refresh native provider prices without overwriting custom prices [#133695](https://github.com/openclaw/openclaw/pull/133695) — with thanks to [@samson1357924](https://github.com/samson1357924)
      * Preserve concurrent first-save changes from separate OpenClaw processes [#134072](https://github.com/openclaw/openclaw/pull/134072) — with thanks to [@MrSwagatRathod](https://github.com/MrSwagatRathod) and [@obviyus](https://github.com/obviyus)

      **Documentation and localization**

      * Add configuration, backup, restore, verification, and scheduled-backup commands to the CLI map [#122632](https://github.com/openclaw/openclaw/pull/122632) — by [@Adkid-Zephyr](https://github.com/Adkid-Zephyr)
      * Redirect retired implementation plans to maintained product guidance [#133404](https://github.com/openclaw/openclaw/pull/133404) — by [@steipete](https://github.com/steipete)
      * Clarify the separate Gateway transport and node invocation timeouts [#133766](https://github.com/openclaw/openclaw/pull/133766) — by [@qingminglong](https://github.com/qingminglong)
      * Add Fleet and its primary subcommands to the CLI index [#133940](https://github.com/openclaw/openclaw/pull/133940) — by [@qingminglong](https://github.com/qingminglong)
      * Restore the structured v2026.8.1 documentation release page [#134195](https://github.com/openclaw/openclaw/pull/134195) — by [@hannesrudolph](https://github.com/hannesrudolph)
      * Correct guidance for the mistakenly numbered 2026.9.1-beta.1 package [#134512](https://github.com/openclaw/openclaw/pull/134512) — by [@hannesrudolph](https://github.com/hannesrudolph)
    </details>
  </Accordion>

  <Accordion title="Appearance and everyday interface polish">
    Each new appearance choice works in light or dark mode and follows your profile, while Manuscript adds the first built-in light-first design and Claw remains the default. An explicitly selected appearance also stays in place while the Gateway reconnects instead of briefly yielding to the browser's system theme.

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

      **Limits and compatibility notes**

      * CRT is opt-in, and a remote dark profile preference can still arrive after a first paint based on the local system theme.
      * Several visual changes were supported by shipped diffs or deterministic browser coverage without physical-device screenshots.
      * Locale artifacts establish generated catalog coverage without independent native-speaker review of every translation.

      **Improvements**

      * Keep Inbox headers and category tabs aligned across empty and populated views [#132798](https://github.com/openclaw/openclaw/pull/132798) — by [@vyctorbrzezowski](https://github.com/vyctorbrzezowski)
      * Use preview-shaped loading states for GitHub links, including reduced-motion behavior [#133363](https://github.com/openclaw/openclaw/pull/133363) — by [@steipete](https://github.com/steipete)
      * Keep chosen appearance settings stable through Gateway reconnects [#133417](https://github.com/openclaw/openclaw/pull/133417) — by [@vyctorbrzezowski](https://github.com/vyctorbrzezowski)
      * Simplify microphone and camera device settings [#133437](https://github.com/openclaw/openclaw/pull/133437) — by [@steipete](https://github.com/steipete)
      * Add an opt-in CRT console theme [#133495](https://github.com/openclaw/openclaw/pull/133495) — by [@steipete](https://github.com/steipete)
      * Add Manuscript, Rosé, and Miami appearance themes [#133593](https://github.com/openclaw/openclaw/pull/133593) — by [@steipete](https://github.com/steipete)
      * Align the working indicator with elapsed-time and token status [#133682](https://github.com/openclaw/openclaw/pull/133682) — by [@Patrick-Erichsen](https://github.com/Patrick-Erichsen)
      * Keep Chat Rewind confirmation controls usable above message menus [#133791](https://github.com/openclaw/openclaw/pull/133791) — by [@steipete](https://github.com/steipete)
      * Keep CRT monochrome while preserving Phosphor's green palette [#133857](https://github.com/openclaw/openclaw/pull/133857) — by [@steipete](https://github.com/steipete)

      **Bug fixes**

      * Paint light mode immediately on fresh Control UI loads [#132789](https://github.com/openclaw/openclaw/pull/132789) — by [@vyctorbrzezowski](https://github.com/vyctorbrzezowski)
      * Prevent compact GitHub links from showing overlapping previews [#133402](https://github.com/openclaw/openclaw/pull/133402) — by [@steipete](https://github.com/steipete)
      * Center the sidebar account row and keep its divider stable [#134432](https://github.com/openclaw/openclaw/pull/134432) — by [@steipete](https://github.com/steipete)

      **Documentation and localization**

      * Localize the CRT theme label and description across supported Control UI locales [#133544](https://github.com/openclaw/openclaw/pull/133544)
      * Refresh conversation, permission, setup, appearance, and Logbook translations [#133672](https://github.com/openclaw/openclaw/pull/133672)
      * Localize the Manuscript, Rosé, and Miami theme names and descriptions [#133761](https://github.com/openclaw/openclaw/pull/133761)
    </details>
  </Accordion>

  <Accordion title="Keeping the Home Agent Beside Your Work">
    The Home agent can now stay docked beside current Control UI work with its normal conversation history, tools, approvals, queue, attachments, and draft-preserving handoff to the full page, so asking for help no longer means leaving the thing you are working on.

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

      One Dashboard route that already shows the selected Home conversation retains an unresolved risk of presenting both the page and dock composers. A live development-Gateway walkthrough was still outstanding in the prepared evidence.

      **Improvements**

      * Keep the Home agent beside active Control UI work [#133676](https://github.com/openclaw/openclaw/pull/133676) by @steipete
    </details>
  </Accordion>

  <Accordion title="Forwarded messages that show who sent them">
    Forwarded messages in the [Control UI](/web/control-ui) now show which agent sent them through that agent's avatar or stable initials, including in direct conversations where the identity used to disappear.

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

      **Improvements**

      * Localize forwarded-message labels across supported Control UI locales [#133326](https://github.com/openclaw/openclaw/pull/133326)
      * Identify sending agents on forwarded messages [#133439](https://github.com/openclaw/openclaw/pull/133439) — thanks @steipete

      **Scope notes**

      * Same-agent forwards use the current assistant avatar, although the shipped documentation still describes the forward icon and needs correction.
      * The locale refresh proves generated catalog content rather than the rendered appearance or linguistic quality of every locale.
    </details>
  </Accordion>
</AccordionGroup>

## Updates and Maintenance

Updates now preserve more of the working installation and leave a clearer recovery path when something goes wrong. Doctor can coordinate supported offline repairs with the managed Gateway, busy systems give status and Control UI requests more room to run, and recovery messages retain useful redacted detail without turning uncertain work into a false success.

<AccordionGroup>
  <Accordion title="Updates That Preserve a Recovery Path">
    Automatic updates now keep their chosen channel and final result across reconnects, reloads, disabled checks, one-off installs, and managed-service handoff. Unattended installation remains limited to managed Gateway services, while a foreground Gateway stays running until you follow the stop, update, and launch path yourself.

    Restart-enabled updates also refuse to replace files when service ownership cannot be inspected, preserve rollback information when a failed update can be recovered, and stop before claiming success if session migration is incomplete. Installing a newer package no longer migrates shared state before that version actually runs, though databases already changed by an affected package still need a compatible backup restore, and none of these paths turns the whole update into one reversible transaction. Verified legacy migration originals can now be previewed and removed after the selected Gateway is stopped, but that cleanup is explicit and irreversible because it permanently removes the files an older installation could otherwise use for rollback.

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

      **Improvements**

      * Made update help and read-only planning start sooner [#133698](https://github.com/openclaw/openclaw/pull/133698) — thanks @steipete
      * Reduced update preflight work and unattended prompts [#133801](https://github.com/openclaw/openclaw/pull/133801) — thanks @steipete
      * Added explicit cleanup for verified legacy migration recovery files [#133864](https://github.com/openclaw/openclaw/pull/133864)

      **Bug fixes**

      * Recovered a managed Gateway after a safely recoverable CLI update failure [#119516](https://github.com/openclaw/openclaw/pull/119516) — thanks @zyw02
      * Kept package installation from migrating shared operator state before first run [#129475](https://github.com/openclaw/openclaw/pull/129475) — thanks @BryanTegomoh, @obviyus, and @BillVerhelle
      * Stopped restart-enabled updates before mutation when Gateway service state is unknown [#132853](https://github.com/openclaw/openclaw/pull/132853) — thanks @jason-allen-oneal and @obviyus
      * Allowed an older CLI to stop a managed Gateway after newer state migration [#133595](https://github.com/openclaw/openclaw/pull/133595) — thanks @RomneyDa
      * Made update progress, timing, diagnostics, and final outcomes durable [#133622](https://github.com/openclaw/openclaw/pull/133622)
      * Kept printed and persisted update completion durations consistent [#133809](https://github.com/openclaw/openclaw/pull/133809) — thanks @steipete
      * Retained the shipped v2026.8.1 fixes while moving beyond that release [#134045](https://github.com/openclaw/openclaw/pull/134045) — thanks @shakkernerd
      * Failed updates before success when legacy session migration remained incomplete [#134228](https://github.com/openclaw/openclaw/pull/134228) — thanks @shakkernerd
      * Kept `update --no-restart` from transferring restart ownership to Doctor [#134470](https://github.com/openclaw/openclaw/pull/134470)
      * Preserved automatic update policy and outcomes through managed-service handoff [#134566](https://github.com/openclaw/openclaw/pull/134566)

      **Documentation**

      * Added backup and SQLite downgrade limits to the historical v2026.8.1 release page [#133591](https://github.com/openclaw/openclaw/pull/133591) — thanks @hannesrudolph
      * Expanded historical failed-update recovery guidance [#133896](https://github.com/openclaw/openclaw/pull/133896) — thanks @steipete
    </details>
  </Accordion>

  <Accordion title="Doctor Repairs and State Migration">
    Doctor can now take explicit ownership of more offline repair work by stopping the matching managed Gateway, completing supported repairs, checking the result, and restarting the same service. It can recover supported legacy approvals and databases, preserve valid scheduled jobs and current Voice Call settings during migration, and explain which original material remains available when a repair cannot finish.

    That ownership remains narrow on purpose. Plain diagnostics stay online, an already stopped service stays stopped, and ambiguous or foreign service ownership, unreadable configuration, unrelated database drift, active writers, and incomplete workspace migration remain fail-closed. This is a clearer repair path rather than a promise that every platform or damaged state can be repaired automatically.

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

      The native service-manager paths outside Linux were simulated rather than proven on live installations.

      **Improvements**

      * Reduced legacy session import, compaction, and Control UI startup overhead [#133446](https://github.com/openclaw/openclaw/pull/133446) — thanks @steipete
      * Sped up legacy session transcript imports [#133496](https://github.com/openclaw/openclaw/pull/133496)
      * Reused database operations for legacy imports and transcript replacement [#133546](https://github.com/openclaw/openclaw/pull/133546) — thanks @steipete
      * Reduced legacy transcript scanning overhead [#133611](https://github.com/openclaw/openclaw/pull/133611) — thanks @steipete
      * Sped up targeted legacy session transcript imports [#133641](https://github.com/openclaw/openclaw/pull/133641) — thanks @steipete
      * Reduced duplicate-detection work during deep and legacy session imports [#133689](https://github.com/openclaw/openclaw/pull/133689) — thanks @steipete
      * Reused prepared transcript batch writers for large SQLite histories [#134252](https://github.com/openclaw/openclaw/pull/134252)

      **Bug fixes**

      * Recovered historical execution approvals with null usage metadata through Doctor [#118282](https://github.com/openclaw/openclaw/pull/118282) — thanks @obviyus and @sercada
      * Isolated failed channel migration plans while preserving retry state [#119201](https://github.com/openclaw/openclaw/pull/119201) — thanks @ruel225
      * Preserved disabled shared-heartbeat ownership during Doctor migration [#133444](https://github.com/openclaw/openclaw/pull/133444) — thanks @PollyBot13 and @obviyus
      * Fenced automatic per-agent database migrations behind renewable stopped-writer authority [#133563](https://github.com/openclaw/openclaw/pull/133563) — thanks @omarshahine
      * Kept failed session deletions out of successful cleanup accounting [#133668](https://github.com/openclaw/openclaw/pull/133668) — thanks @steipete
      * Counted successful zero-byte artifact deletions in cleanup summaries [#133697](https://github.com/openclaw/openclaw/pull/133697) — thanks @steipete
      * Allowed Doctor to import supported legacy execution approvals while runtime access stays fail-closed [#133773](https://github.com/openclaw/openclaw/pull/133773) — thanks @dailytrap and @obviyus
      * Preserved valid scheduled jobs through SQLite migration and added explicit Doctor recovery [#133858](https://github.com/openclaw/openclaw/pull/133858) — thanks @fuller-stack-dev, @ejc3, @LiuwqGit, and @zhangguiping-xydt
      * Preserved files created independently while Doctor restores archived sessions [#133921](https://github.com/openclaw/openclaw/pull/133921) — thanks @steipete
      * Refreshed SQLite planner statistics after bulk session cleanup [#133925](https://github.com/openclaw/openclaw/pull/133925) — thanks @VACInc
      * Named malformed legacy approval fields without exposing their values [#133952](https://github.com/openclaw/openclaw/pull/133952) — thanks @obviyus, @sercada, and @steipete
      * Removed misleading Git-backup warnings for nested or symlinked agent workspaces [#133964](https://github.com/openclaw/openclaw/pull/133964) — thanks @obviyus and @jeffsteinbok-openclaw
      * Refused readiness while incomplete workspace migration state could block agents [#133982](https://github.com/openclaw/openclaw/pull/133982)
      * Reported interrupted authentication-archive recovery outcomes [#134009](https://github.com/openclaw/openclaw/pull/134009) — thanks @angeliti999 and @shakkernerd
      * Preserved current Voice Call settings during legacy migration [#134018](https://github.com/openclaw/openclaw/pull/134018) — thanks @steipete
      * Let explicit Doctor repair coordinate safely with the matching managed Gateway [#134031](https://github.com/openclaw/openclaw/pull/134031)
      * Refreshed bounded SQLite planner statistics after Doctor database migration [#134062](https://github.com/openclaw/openclaw/pull/134062) — thanks @VACInc
      * Reported repairs blocked by invalid configuration writes and preserved their sources [#134078](https://github.com/openclaw/openclaw/pull/134078) — thanks @obviyus and @YogevKr
      * Stopped false legacy-memory warnings for verified canonical database links [#134087](https://github.com/openclaw/openclaw/pull/134087) — thanks @obviyus and @02-dino
      * Repaired supported legacy v17 agent databases through Doctor [#134208](https://github.com/openclaw/openclaw/pull/134208) — thanks @EthDing, @obviyus, and @abacha
      * Preserved Hermes model ownership, provider settings, and activation policy during migration [#134426](https://github.com/openclaw/openclaw/pull/134426)
      * Released Doctor database ownership before restarting the managed Gateway [#134429](https://github.com/openclaw/openclaw/pull/134429)
      * Reduced Doctor memory pressure by avoiding unused plugin runtime graphs [#134541](https://github.com/openclaw/openclaw/pull/134541)
      * Rejected malformed legacy migration JSON before claims or canonical writes [#134577](https://github.com/openclaw/openclaw/pull/134577) — thanks @vincentkoc

      **Documentation**

      * Corrected Doctor-owned session migration and discovery guidance [#133818](https://github.com/openclaw/openclaw/pull/133818)
      * Corrected SQLite downgrade restore guidance [#133831](https://github.com/openclaw/openclaw/pull/133831) — thanks @steipete
      * Aligned managed-service replacement guidance with Doctor maintenance ownership [#134358](https://github.com/openclaw/openclaw/pull/134358)
    </details>
  </Accordion>

  <Accordion title="Gateway Responsiveness and Shutdown">
    Busy Gateways now spend less time repeating work while sessions are renamed, histories are opened, task pages are listed, scheduled work is checked, or several agent turns are running at once. Large session listings retain less memory, unusually branched histories no longer repeat the same ancestry work, and bounded operator requests get a fairer chance to start before returning a retryable overload result.

    Shutdown also stops admitting outbound retries that have not started yet, leaving them queued for the next process while an already started provider attempt can finish. These improvements are limited to these Gateway paths and do not remove every delay under sustained load.

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

      The performance evidence is scoped to the recorded SQLite, Control UI, history, cron, session-list, and Gateway workloads. Broader synchronous-database bottlenecks, sustained CPU pressure, signed-in Chrome degradation, and long-tail latency remain outside the claim.

      **Improvements**

      * Reused prepared facts across Gateway control-plane reads [#133477](https://github.com/openclaw/openclaw/pull/133477) — thanks @steipete
      * Reduced repeated preparation before concurrent Gateway turns [#133782](https://github.com/openclaw/openclaw/pull/133782)
      * Reused owned history snapshots for Gateway chat and startup requests [#133903](https://github.com/openclaw/openclaw/pull/133903)
      * Reduced retained memory in large session listings and cleanup scans [#134395](https://github.com/openclaw/openclaw/pull/134395) — thanks @steipete

      **Bug fixes**

      * Kept large branched session histories from blocking the Gateway event loop [#123541](https://github.com/openclaw/openclaw/pull/123541) — thanks @njuboy11 and @obviyus
      * Bounded task-page selection against large histories [#132903](https://github.com/openclaw/openclaw/pull/132903) — thanks @jason-allen-oneal and @obviyus
      * Reduced Gateway and Control UI stalls during concurrent session updates [#133061](https://github.com/openclaw/openclaw/pull/133061)
      * Named active root-work holders in delayed shutdown diagnostics [#133154](https://github.com/openclaw/openclaw/pull/133154) — thanks @VACInc
      * Reduced control-plane stalls and cleaned up early timeouts during concurrent turns [#133429](https://github.com/openclaw/openclaw/pull/133429) — thanks @steipete
      * Suppressed repeated state-database warnings until the error changes or recovers [#133502](https://github.com/openclaw/openclaw/pull/133502) — thanks @RomneyDa
      * Kept cron reads and idle wakes from repeatedly blocking the Gateway [#133552](https://github.com/openclaw/openclaw/pull/133552) — thanks @vincentkoc and @josephbergvinson
      * Gave readiness and Control UI requests more opportunities to run during turn bursts [#133683](https://github.com/openclaw/openclaw/pull/133683) — thanks @steipete
      * Started bounded operator requests more promptly under load [#133873](https://github.com/openclaw/openclaw/pull/133873)
      * Avoided migration work for truly pristine CLI startup [#134090](https://github.com/openclaw/openclaw/pull/134090) — thanks @steipete
      * Stopped admitting unstarted outbound retries during Gateway shutdown [#134381](https://github.com/openclaw/openclaw/pull/134381) — thanks @VACInc

      **Documentation**

      * Defined startup, refusal, and replacement acceptance rules for external Gateway supervisors [#130961](https://github.com/openclaw/openclaw/pull/130961) — thanks @1052326311 and @josephbergvinson
    </details>
  </Accordion>

  <Accordion title="Recovery Messages and Operator Diagnostics">
    When recovery needs a person, OpenClaw now does a better job of saying what happened without exposing the thing it is trying to protect. Offline triage can still produce a sanitized archive, embedded triage stays bound to the installation and paths being diagnosed, status and log commands retain the actual redacted failure, and short Control UI errors no longer repeat themselves in empty detail panels.

    Recovery inside the Control UI is clearer too. A stale unconfirmed browser message can be discarded so later queued input can continue, offline split-pane drafts remain recoverable, and canceling a queued-message edit after reconnect resumes the original queue without replacing the composer draft. Discarding the browser copy cannot prove or reverse work the Gateway may already have accepted, so the interface treats it as local recovery rather than rollback.

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

      **Bug fixes**

      * Rejected contradictory all-agent and single-agent usage queries [#125269](https://github.com/openclaw/openclaw/pull/125269) — thanks @zyw02 and @obviyus
      * Preserved newly written Gateway diagnostic bundles during retention cleanup [#132626](https://github.com/openclaw/openclaw/pull/132626) — thanks @Alix-007
      * Rejected blank node RPC timeout values before connecting [#132641](https://github.com/openclaw/openclaw/pull/132641) — thanks @xydt-juyaohui
      * Made `sessions tail --follow` fail when its trajectory store becomes unreadable [#132660](https://github.com/openclaw/openclaw/pull/132660) — thanks @Alix-007
      * Recovered agent turns after exactly settled failed-tool batches [#133300](https://github.com/openclaw/openclaw/pull/133300) — thanks @VACInc
      * Removed duplicate decorative emoji from Control UI error alerts [#133342](https://github.com/openclaw/openclaw/pull/133342) — thanks @vyctorbrzezowski
      * Rejected malformed approval grant limits before contacting the Gateway [#133361](https://github.com/openclaw/openclaw/pull/133361) — thanks @qingminglong
      * Hid redundant Control UI error details while retaining useful diagnostics [#133369](https://github.com/openclaw/openclaw/pull/133369) — thanks @vyctorbrzezowski
      * Kept `sessions tail` columns aligned for Unicode session keys [#133422](https://github.com/openclaw/openclaw/pull/133422)
      * Let Control UI users discard an unconfirmed local message blocking the queue [#133440](https://github.com/openclaw/openclaw/pull/133440)
      * Refreshed localized queue-recovery guidance in the Control UI [#133458](https://github.com/openclaw/openclaw/pull/133458)
      * Clarified the all-agent default in memory command help [#133560](https://github.com/openclaw/openclaw/pull/133560) — thanks @steipete
      * Retained useful redacted headers in Undici debug captures [#133586](https://github.com/openclaw/openclaw/pull/133586)
      * Preserved offline split-pane drafts and resumed canceled queue edits safely [#133628](https://github.com/openclaw/openclaw/pull/133628)
      * Recovered once from authoritatively invalidated control-only CLI resumes [#133684](https://github.com/openclaw/openclaw/pull/133684) — thanks @vincentkoc and @jakestenger
      * Kept Unicode attach-session choices and task tables aligned [#133758](https://github.com/openclaw/openclaw/pull/133758)
      * Preserved readable prefixes in oversized escaped Code Mode output [#133777](https://github.com/openclaw/openclaw/pull/133777)
      * Rejected blank channel-capability timeout values [#133781](https://github.com/openclaw/openclaw/pull/133781) — thanks @marmar9615-cloud and @SunnyShu0925
      * Kept tool-progress summaries from treating shell destinations as search targets [#133783](https://github.com/openclaw/openclaw/pull/133783) — thanks @darioandyoshi-tech
      * Preserved sanitized triage diagnostics while the Gateway is offline [#133842](https://github.com/openclaw/openclaw/pull/133842)
      * Rejected blank Gateway probe timeout values before discovery [#134040](https://github.com/openclaw/openclaw/pull/134040) — thanks @SunnyShu0925
      * Preserved bounded native or SQLite error detail from memory vector workers [#134106](https://github.com/openclaw/openclaw/pull/134106) — thanks @klabir and @steipete
      * Stopped advertising the inert message-read thread option while preserving parsing compatibility [#134212](https://github.com/openclaw/openclaw/pull/134212) — thanks @marmar9615-cloud
      * Kept offline TLS diagnostics from creating or repairing Gateway certificates [#134223](https://github.com/openclaw/openclaw/pull/134223)
      * Kept embedded triage commands on the installation being diagnosed [#134244](https://github.com/openclaw/openclaw/pull/134244) — thanks @obviyus
      * Omitted hidden commands and options from generated shell completions [#134247](https://github.com/openclaw/openclaw/pull/134247) — thanks @marmar9615-cloud
      * Honored usage and agent-scope options in full status reports [#134269](https://github.com/openclaw/openclaw/pull/134269)
      * Reported declared agents, plugins, channels, and Tailscale mode accurately in triage archives [#134416](https://github.com/openclaw/openclaw/pull/134416) — thanks @steipete
      * Preserved safe mixed-stream diagnostics from failed managed-worktree setup [#134428](https://github.com/openclaw/openclaw/pull/134428) — thanks @vincentkoc
      * Removed the confusing retained-message inventory banner [#134456](https://github.com/openclaw/openclaw/pull/134456) — thanks @RomneyDa
      * Put the actual redacted failure reason in JSON log errors [#134534](https://github.com/openclaw/openclaw/pull/134534)

      **Documentation**

      * Retired redundant guides and corrected stable Gateway package guidance [#133722](https://github.com/openclaw/openclaw/pull/133722) — thanks @steipete
    </details>
  </Accordion>
</AccordionGroup>

## Messaging

Voice, media, and channel conversations now do a better job of reaching a clear ending and staying with the person and chat that started them. Spoken replies survive more delivery handoffs, calls and Browser Talk keep turns in order, attachments and plain text retain their intended shape, and account-specific failures no longer have to take every healthy channel down with them.

<AccordionGroup>
  <Accordion title="Browser Talk Conversations">
    Browser Talk now waits for microphone permission before opening its connection and explains what it is waiting for instead of appearing stuck. Once the conversation begins, spoken questions and answers stay in order when transcription arrives late, a transcription failure can be shown without closing the call, and interrupting a Google Live response no longer ends the next turn by mistake.

    Default sessions also keep the configured agent, transcript, and consultation together, generated consultation instructions no longer appear as a second message from the user, and later spoken requests can continue after the first exchange.

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

      **Improvements**

      * Refresh voice and microphone guidance across 20 Control UI locales [#133352](https://github.com/openclaw/openclaw/pull/133352)

      **Bug fixes**

      * Explain pending microphone access in Browser Talk and dictation [#133353](https://github.com/openclaw/openclaw/pull/133353)
      * Keep Google Live turns aligned after an interruption [#133365](https://github.com/openclaw/openclaw/pull/133365)
      * Wait for microphone access before creating a Browser Talk provider session [#133384](https://github.com/openclaw/openclaw/pull/133384)
      * Leave failed Browser Talk restarts in a coherent stopped or error state [#133410](https://github.com/openclaw/openclaw/pull/133410)
      * Show Browser Talk input-transcription failures without ending the call [#133473](https://github.com/openclaw/openclaw/pull/133473) — thanks @steipete
      * Preserve OpenAI WebRTC conversation order in Browser Talk [#133493](https://github.com/openclaw/openclaw/pull/133493) — thanks @vmbbz
      * Keep generated Browser Talk consultation text out of visible user history [#133947](https://github.com/openclaw/openclaw/pull/133947) — thanks @chelsealong, @lsr911, @obviyus, @ZengWen-DT, @SebTardif, and @Conan-Scott
      * Honor configured owners for default Browser Talk sessions [#133958](https://github.com/openclaw/openclaw/pull/133958) — thanks @astra-openclaw
      * Treat generated Browser Talk consultation questions as literal input [#134093](https://github.com/openclaw/openclaw/pull/134093) — thanks @lsr911
      * Keep later Browser Talk turns admitted after call setup [#134138](https://github.com/openclaw/openclaw/pull/134138) — thanks @mastertyko

      **Scope and verification**

      The transcript-order repair is specific to OpenAI WebRTC, while Google Live has a separate interruption repair. Default-session ownership and current-connection controls do not establish the broader completion, history, cancellation, or mobile edges identified for later work. Browser and provider coverage used synthetic fixtures rather than physical microphones or authenticated voice sessions.
    </details>
  </Accordion>

  <Accordion title="Spoken Reply Delivery">
    Spoken replies now make it through more of the places where successful synthesis could previously disappear or be mistaken for an unfinished answer. Private Discord and Telegram replies can deliver one permitted built-in TTS voice note while keeping private final text hidden, long replies leave internal reasoning and known tool-status text out of the audio, and delivered speech can finish the turn without a misleading warning or an unnecessary second request.

    Speech created during Code Mode, Tool Search, or Codex work also has a clearer path into the final reply, while audio that finishes only after the request has timed out stays withheld.

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

      **Bug fixes**

      * Deliver built-in TTS audio in private Discord and Telegram replies [#133324](https://github.com/openclaw/openclaw/pull/133324) — thanks @obviyus, @TurboTheTurtle, @clawSean, and @Conan-Scott
      * Keep tagged reasoning and known tool scaffolding out of spoken summaries [#133615](https://github.com/openclaw/openclaw/pull/133615) — thanks @camball-strategies
      * Finish turns cleanly after a spoken reply is delivered [#133968](https://github.com/openclaw/openclaw/pull/133968)
      * Preserve speech delivery and process output through nested tools [#134056](https://github.com/openclaw/openclaw/pull/134056)
      * Preserve accepted Codex speech through media delivery [#134170](https://github.com/openclaw/openclaw/pull/134170)

      **Scope and verification**

      Existing send policies and stale-run authority remain unchanged. Delivery proof used synthetic speech services and protocol data rather than authenticated synthesis or audible external playback, and a queued media send that later fails remains outside the clean-turn-finalization repair.
    </details>
  </Accordion>

  <Accordion title="Voice Call Turn-Taking and History">
    Voice Call now drops an obsolete automatic answer when the caller starts speaking again, and an old call stream can no longer disrupt the current reply. Late provider updates stay attached to the original call with its transcript, duration, and agent, while a failed first save no longer dials or consumes the only call slot, so restoring storage access is enough to try again.

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

      **Bug fixes**

      * Preserve Voice Call capacity after an initial storage failure [#129847](https://github.com/openclaw/openclaw/pull/129847) — thanks @aniruddhaadak80
      * Stop obsolete Voice Call replies from talking over resumed speech [#133484](https://github.com/openclaw/openclaw/pull/133484) — thanks @DonShelly
      * Keep late provider callbacks attached to the original Voice Call [#133811](https://github.com/openclaw/openclaw/pull/133811) — thanks @ruel225 and @jackatagenticforce

      **Scope and verification**

      Already-issued carrier playback and later post-dial storage failures remain outside these repairs. Covered failure paths used the shipped mock carrier and synthetic carrier operations rather than authenticated phone calls or audible playback.
    </details>
  </Accordion>

  <Accordion title="Images, Audio, Video, and Text Attachments">
    Images already visible in a Control UI conversation now remain in place through a hard refresh instead of flashing out and shifting the thread while history reloads, while removed or inaccessible images still disappear. Empty local text files show that there was no text to extract without hiding later attachment explanations, and text files with quoted or escaped character-set labels decode as their intended text instead of replacement characters.

    Affected AVI video and ASF or WMA audio also return to their existing playback-conversion paths instead of falling back as unsupported.

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

      **Bug fixes**

      * Restore AVI filenames and existing playback conversion [#133329](https://github.com/openclaw/openclaw/pull/133329)
      * Preserve Matroska filenames after byte detection [#133383](https://github.com/openclaw/openclaw/pull/133383) — thanks @ly85206559
      * Restore existing ASF and WMA audio conversion [#133386](https://github.com/openclaw/openclaw/pull/133386) — thanks @ly85206559
      * Keep empty text attachments from hiding later attachment explanations [#133424](https://github.com/openclaw/openclaw/pull/133424)
      * Decode quoted and escaped text-attachment charsets correctly [#133610](https://github.com/openclaw/openclaw/pull/133610)
      * Honor configured image dimensions for Slack downloads [#134242](https://github.com/openclaw/openclaw/pull/134242) — thanks @marmar9615-cloud
      * Keep conversation images visible during a hard refresh [#134310](https://github.com/openclaw/openclaw/pull/134310)

      **Documentation**

      * Clarify configured fallback selection for image, music, and video generation [#134574](https://github.com/openclaw/openclaw/pull/134574)

      **Scope and verification**

      AVI and ASF or WMA handling restores existing bounded conversion paths and does not newly admit every format or open default allowlists. Matroska changes preserve detected filenames only. Hard-refresh coverage is limited to Chromium with synthetic media, and Slack download coverage does not establish an authenticated Slack round trip.
    </details>
  </Accordion>

  <Accordion title="Plain-Text Message Formatting">
    Plain-text replies now keep visible code in the right place when surrounding formatting contains hidden code-like text, and paragraph or section formatting keeps its intended breaks instead of running adjacent text together. That makes affected default Telegram and direct text or media replies easier to read without changing their rich-message path.

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

      **Bug fixes**

      * Keep visible code in place when HTML is converted to plain text [#125184](https://github.com/openclaw/openclaw/pull/125184) — thanks @wanyongstar
      * Keep long IMAP email prompts valid at Unicode boundaries [#132170](https://github.com/openclaw/openclaw/pull/132170) — thanks @harjothkhara
      * Keep bounded runtime messages valid at Unicode boundaries [#132366](https://github.com/openclaw/openclaw/pull/132366) — thanks @ly85206559
      * Preserve paragraph boundaries in plain-text outbound messages [#132998](https://github.com/openclaw/openclaw/pull/132998) — thanks @pengzh1 and @yifanxiong272
      * Keep astral Unicode letters separate during model-token cleanup on Node 26 [#134357](https://github.com/openclaw/openclaw/pull/134357)
      * Preserve intentional trailing spaces in terminal inline code [#134451](https://github.com/openclaw/openclaw/pull/134451)

      **Scope and verification**

      Rich Telegram rendering and attributed line-break handling remain outside the shared plain-text repairs. The IMAP, bounded-runtime, Node 26, and terminal-inline-code entries are narrow text-boundary fixes and do not establish universal formatting behavior across every channel.
    </details>
  </Accordion>

  <Accordion title="Replies that reach a clear ending">
    When a turn has already finished its tool work, OpenClaw now makes another attempt to produce the final answer and, if the model still gives it nothing usable, leaves one clear fallback without rerunning completed actions. Accepted channel turns that fail before an answer also end with one compact error instead of a progress marker followed by silence.

    In [Discord](/channels/discord) and [Slack](/channels/slack), long turns are calmer too, with one stable acknowledgement, useful milestones, and prompt approvals or failures instead of a running list of every tool action.

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

      **Improvements**

      * Quiet Discord and Slack progress updates [#133516](https://github.com/openclaw/openclaw/pull/133516) — thanks @steipete

      **Bug fixes**

      * Always return a final reply after settled tool work [#133520](https://github.com/openclaw/openclaw/pull/133520) — thanks @fuller-stack-dev
      * Recognize visible subagent answers delivered to parent sessions [#133543](https://github.com/openclaw/openclaw/pull/133543)
      * Return one visible error after an accepted channel turn fails [#133979](https://github.com/openclaw/openclaw/pull/133979)

      **Scope notes**

      * Completed actions are not rerun, and cancellation or intentionally silent helper behavior remains unchanged.
      * Internal and nested parent-session answers can settle from their visible transcript, while external destinations still require delivery evidence.
      * Final Telegram provider delivery and the Discord and Slack presentation were not exercised in authenticated live clients.
    </details>
  </Accordion>

  <Accordion title="Replies and approvals in the right chat">
    [iMessage](/channels/imessage) direct replies and actions such as polls now stay with the conversation that requested them when the service setting is unset, while a redacted display value is no longer retried as though it were a real destination. In multi-bot [Discord](/channels/discord) rooms, the opt-in other-mention filter also keeps OpenClaw out of replies aimed at another bot unless someone explicitly mentions it.

    [Telegram](/channels/telegram) keeps rich-button labels in reply context and keeps its model picker usable after a configuration reload, while long [WhatsApp](/channels/whatsapp) replies keep their formatting and quote context across split messages. Slack Enterprise Grid plugin approvals now stay with the intended workspace from the direct message through the approval click.

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

      **Bug fixes**

      * Keep Discord bots out of replies intended for another bot [#130327](https://github.com/openclaw/openclaw/pull/130327) — thanks @PollyBot13 and @obviyus
      * Recover Telegram model browsing after configuration reload [#133221](https://github.com/openclaw/openclaw/pull/133221) — thanks @chelsealong, @vincentkoc, and @r3n3x
      * Preserve Telegram rich-button labels in reply context [#133307](https://github.com/openclaw/openclaw/pull/133307) — thanks @obviyus
      * Keep formatting and reply context across split WhatsApp replies [#133407](https://github.com/openclaw/openclaw/pull/133407)
      * Keep iMessage replies and targetless actions in the requesting conversation [#133499](https://github.com/openclaw/openclaw/pull/133499) — thanks @omarshahine
      * Expire iMessage poll-vote echo suppression at its exact boundary [#133996](https://github.com/openclaw/openclaw/pull/133996) — thanks @qingminglong
      * Keep Slack Enterprise plugin approvals in the intended workspace [#134251](https://github.com/openclaw/openclaw/pull/134251) — thanks @obviyus and @marmar9615-cloud

      **Scope notes**

      * Discord's other-mention filter is opt-in and stays permissive if Discord cannot identify the author being replied to.
      * Telegram rich messages remain opt-in, and WhatsApp media, voice-caption, retry, account-limit, and deadline behavior is unchanged.
      * The iMessage route was accepted for coordinated beta validation without a post-fix installed send, and the Slack boundary was verified without a live two-workspace approval click.
    </details>
  </Accordion>

  <Accordion title="LINE groups, rooms, and replies">
    [LINE](/channels/line) now stays quiet when another connected service controls the chat, and a bot joining a group or room responds only where it is allowed to serve. Shared group rules also carry into named groups and rooms unless that conversation has its own setting.

    The conversation itself carries more of what the person sent and what the operator configured. Inline emoji no longer collapse into bare parentheses, multi-part replies follow the selected agent's pacing, and configured users, groups, and rooms are available when choosing where to send a message.

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

      **Bug fixes**

      * Preserve readable LINE inline emoji in agent context [#132083](https://github.com/openclaw/openclaw/pull/132083) — thanks @edenfunf
      * Keep LINE bots silent in rooms they may not serve [#132628](https://github.com/openclaw/openclaw/pull/132628) — thanks @edenfunf
      * Offer the LINE card command only where it is supported [#132895](https://github.com/openclaw/openclaw/pull/132895) — thanks @edenfunf
      * Apply LINE wildcard defaults to named groups and rooms [#132918](https://github.com/openclaw/openclaw/pull/132918) — thanks @edenfunf
      * Honor the routed agent's human delay in LINE block replies [#133443](https://github.com/openclaw/openclaw/pull/133443) — thanks @edenfunf
      * Ignore LINE standby events before they start competing work [#133577](https://github.com/openclaw/openclaw/pull/133577) — thanks @edenfunf
      * List configured LINE users, groups, and rooms in the directory [#133599](https://github.com/openclaw/openclaw/pull/133599) — thanks @edenfunf
      * Honor disabled quote-only activation in LINE groups [#133619](https://github.com/openclaw/openclaw/pull/133619) — thanks @edenfunf
      * Show loading feedback for Gateway-driven replies in direct LINE chats [#133679](https://github.com/openclaw/openclaw/pull/133679) — thanks @edenfunf

      **Documentation**

      * Correct LINE loading-animation guidance for groups and rooms [#132151](https://github.com/openclaw/openclaw/pull/132151) — thanks @edenfunf

      **Scope notes**

      * On upgrade, review wildcard `enabled` and `allowFrom` restrictions because they can begin applying to named groups and rooms that previously did not inherit them.
      * Directory results come from OpenClaw's configuration rather than LINE's live contact roster or pairing approvals.
      * Reply pacing is fixed only for LINE, and loading feedback remains limited to one-to-one chats.
    </details>
  </Accordion>

  <Accordion title="Channel accounts that can recover independently">
    One unavailable or disabled channel account no longer has to hide the health and status of every other channel, and recovery now explains whether an account start was handed off, left busy, or skipped. When repeated startup failures put OpenClaw into safe mode, an operator can manually restart a configured account without first running an undocumented repair step.

    That separation carries through the rest of the channel's work. [Matrix](/channels/matrix) can finish room activity while an account stops or restarts, Doctor preserves the supported QQBot multi-account layout, and SMS work stops when its credential disappears or is replaced. Messages and actions from an installed channel plugin also stay with the plugin the operator selected.

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

      **Bug fixes**

      * Include nested channel diagnostics in channel-specific logs [#133601](https://github.com/openclaw/openclaw/pull/133601)
      * Keep Matrix verification settled after saved sync history returns [#133616](https://github.com/openclaw/openclaw/pull/133616)
      * Preserve valid QQBot multi-account configuration during Doctor repair [#133948](https://github.com/openclaw/openclaw/pull/133948) — thanks @obviyus and @yubingjiaocn
      * Explain skipped, busy, and handed-off channel recovery starts [#133973](https://github.com/openclaw/openclaw/pull/133973) — thanks @steipete
      * Drain Matrix room work before retiring an account client [#134033](https://github.com/openclaw/openclaw/pull/134033) — thanks @lsr911, @obviyus, @chelsealong, @ZengWen-DT, and @SebTardif
      * Isolate unavailable channel accounts from Gateway diagnostics [#134044](https://github.com/openclaw/openclaw/pull/134044)
      * Stop SMS work when account credentials become unavailable [#134145](https://github.com/openclaw/openclaw/pull/134145) — thanks @shakkernerd
      * Restore manual channel recovery during crash-loop safe mode [#134165](https://github.com/openclaw/openclaw/pull/134165) — thanks @shakkernerd
      * Keep channel-switch handoff on the verified installation [#134397](https://github.com/openclaw/openclaw/pull/134397)
      * Skip disabled channel accounts before credential resolution [#134418](https://github.com/openclaw/openclaw/pull/134418)
      * Keep channel sends and actions on the selected plugin [#134564](https://github.com/openclaw/openclaw/pull/134564) — thanks @steipete

      **Documentation**

      * Document account-scoped channel recovery and WhatsApp self-chat behavior [#128151](https://github.com/openclaw/openclaw/pull/128151) — thanks @LiuwqGit and @markswitch83

      **Scope notes**

      * Safe mode still suppresses automatic channel startup, and enabled or unknown accounts still require valid credentials.
      * The selected-plugin and Twilio paths were not proven with an external provider delivery.
      * The channel-switch source covers only the handoff to the verified installation here, leaving broader update and rollback behavior to its owning release section.
    </details>
  </Accordion>
</AccordionGroup>

## Memory

Memory and large retained histories now avoid more unnecessary work without changing the information available to the paths that need it. Memory Wiki rejects invalid operations before changing a page, local scans stop importing generated copies of their own vault content, and several long-session paths hold less transient data while they prepare context or inspect history.

<AccordionGroup>
  <Accordion title="Memory and Large Session Histories">
    Memory Wiki now rejects unknown operations before changing or synchronizing a page, and local scans stop importing generated copies of its own vault pages again. Canceled Memory requests return the original cancellation error, while the optional database-backed memory plugin starts with less memory and keeps the same three tools.

    Long native Codex conversations and detached Skill Workshop reviews also prepare the context they need without loading as much history that the model will never see. Resuming, listing, cleaning up, and checking large session stores does less unnecessary work while keeping the full history available to the paths that need it.

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

      The LanceDB result comes from a contributor-supplied measurement on one host, while the long-history reductions come from specific fixtures and workloads. They do not establish universal steady-state Gateway memory savings, browser-memory savings, resolution of the broader CPU investigation, or a fix for every long-session failure. Full-fidelity replay, export, and diagnostic readers remain unchanged.

      **Improvements**

      * Reduce startup memory for the optional LanceDB memory plugin [#132830](https://github.com/openclaw/openclaw/pull/132830) by @jason-allen-oneal

      **Bug fixes**

      * Reject invalid Memory Wiki operations before synchronizing or changing pages [#123448](https://github.com/openclaw/openclaw/pull/123448) by @wanyongstar
      * Stop Memory Wiki unsafe-local scans from re-importing generated vault pages [#125160](https://github.com/openclaw/openclaw/pull/125160) by @rajmp999, @obviyus, and @YouBeerMe
      * Reduce avoidable context-preparation memory growth for long native Codex and Skill Workshop sessions [#133753](https://github.com/openclaw/openclaw/pull/133753) by @steipete
      * Release evicted saved-chat payloads and avoid full-history reads for timestamp checks [#133965](https://github.com/openclaw/openclaw/pull/133965) by @steipete
      * Bound session payload reads for health and status checks while retaining exact totals [#134488](https://github.com/openclaw/openclaw/pull/134488) by @steipete and @elikampf
      * Reduce transient Gateway memory during session lookup, cleanup, and long-transcript inspection [#134554](https://github.com/openclaw/openclaw/pull/134554) by @steipete
      * Preserve original cancellation errors for pending Memory response reads and uploads [#134562](https://github.com/openclaw/openclaw/pull/134562) by @steipete
    </details>
  </Accordion>
</AccordionGroup>

## Skills

Skills added after OpenClaw starts are easier to pick up on the next turn, including new project and workspace skill directories that no longer require a Gateway restart. Skill metadata remains strict but more readable, and malformed Skill Workshop proposals can be rejected or quarantined without trusting or applying them.

<AccordionGroup>
  <Accordion title="Creating and Loading Skills">
    Skills added after OpenClaw starts are easier to bring into the next turn. A new project or workspace `.agents/skills` directory is detected without restarting the Gateway, Windows path casing no longer changes which source a skill belongs to, and colon-rich plain text in the approved `description`, `read_when`, and `summary` fields remains readable without relaxing structured metadata.

    Skill Workshop can also reject or quarantine a malformed proposal without trusting its draft, while actions that would revise, evaluate, or apply that content still fail closed. That makes disposal possible when a proposal is missing, altered, oversized, or linked somewhere unsafe without turning the recovery path into permission to use it.

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

      **Improvements**

      * Detected new project and workspace skill directories on later turns without a restart ([#134136](https://github.com/openclaw/openclaw/pull/134136)). Thanks @shakkernerd.

      **Bug fixes**

      * Kept colon-rich approved skill metadata readable while preserving strict structured metadata ([#122884](https://github.com/openclaw/openclaw/pull/122884)). Thanks @xydt-tanshanshan and @obviyus.
      * Kept Windows path case differences from changing the source scope of prompts, skills, and session resources ([#134052](https://github.com/openclaw/openclaw/pull/134052)). Thanks @vincentkoc.

      **Security and trust boundaries**

      * Rejected or quarantined malformed Skill Workshop proposals while keeping apply-like actions fail closed ([#124488](https://github.com/openclaw/openclaw/pull/124488)). Thanks @woodym-dotcom and @obviyus.
    </details>
  </Accordion>
</AccordionGroup>

## Native Apps

Linux users now have a desktop companion for x86-64 systems, available as a `.deb` or AppImage, that connects to a local or remote Gateway and puts Quick Chat in the system tray or behind an X11 keyboard shortcut. Native Codex sessions can also be continued, opened, viewed, or archived with less unrelated discovery work, and compatible conversations survive app-server restarts more reliably.

<AccordionGroup>
  <Accordion title="Native Codex sessions that continue">
    Known local Codex sessions in a large home can now be continued, opened in a terminal, viewed, or archived without scanning unrelated rollout history first, and compatible conversations can return to the same thread after the app server restarts. A fresh Codex thread also carries forward facts preserved only in a saved compaction or branch summary, while token counts and the effective context window recover after `/new` instead of looking like a fresh zero.

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

      **Limits and compatibility notes**

      * Initial full catalog discovery can still be slow, and remote, pathless, and native Swift verification are unchanged.
      * Existing context limits still apply, and context already omitted from an existing native thread cannot be reconstructed.
      * The linked OAuth refresh TypeError remains unresolved; restart proof used synthetic authentication and loopback services.

      **Bug fixes**

      * Refresh native Codex token counts and context windows after `/new` [#133441](https://github.com/openclaw/openclaw/pull/133441) — by [@steipete](https://github.com/steipete)
      * Improve native Codex startup and reconnect readiness on Linux [#133485](https://github.com/openclaw/openclaw/pull/133485) — by [@steipete](https://github.com/steipete)
      * Avoid import timeouts when opening known native Codex sessions in large homes [#134073](https://github.com/openclaw/openclaw/pull/134073) — by [@steipete](https://github.com/steipete)
      * Preserve compatible Codex conversations across app-server restarts [#134098](https://github.com/openclaw/openclaw/pull/134098) — with thanks to [@climbingNight](https://github.com/climbingNight)
      * Preserve saved summaries when switching a conversation to a fresh Codex thread [#134259](https://github.com/openclaw/openclaw/pull/134259) — by [@steipete](https://github.com/steipete)
    </details>
  </Accordion>
</AccordionGroup>

## Models and Providers

Model and speech-provider setup now stays more closely aligned with the provider, login, voice, and transport that actually own the request. Catalog failures retain the last healthy information, pinned models use their intended retry budget, configured private speech endpoints stay scoped to their origin, and automatic language detection no longer inserts an English instruction when no language was chosen.

<AccordionGroup>
  <Accordion title="Speech Providers and Transcription">
    Voice and transcription settings now reach the service they were meant for more consistently. OpenRouter and DeepInfra speech honor the configured voice, Voice Call and Talk can find eligible configured providers, Talk clients can use advertised transcription models, and TTS personas can use credentials stored through SecretRefs without borrowing another provider's key.

    For multilingual voice notes, leaving the language unset now uses automatic language detection without inserting an English instruction into the transcript. xAI transcription can accept silence as an empty result and continue to a configured fallback, while private or self-hosted xAI setups can use their configured address for voice discovery and buffered speech.

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

      **Bug fixes**

      * Honor canonical voices for OpenRouter and DeepInfra speech [#117527](https://github.com/openclaw/openclaw/pull/117527)
      * Report malformed MiniMax speech responses clearly [#123245](https://github.com/openclaw/openclaw/pull/123245) — thanks @coaiMax
      * Discover eligible configured voice and transcription providers [#133507](https://github.com/openclaw/openclaw/pull/133507) — thanks @itkdm
      * Honor advertised Talk transcription-model selections [#133613](https://github.com/openclaw/openclaw/pull/133613) — thanks @lsr911
      * Avoid implicit English prompts during audio language detection [#133674](https://github.com/openclaw/openclaw/pull/133674) — thanks @synthalorian and @aleps001
      * Scope private xAI TTS access to the configured origin [#134214](https://github.com/openclaw/openclaw/pull/134214) — thanks @marmar9615-cloud
      * Accept silent xAI transcripts so configured fallback can continue [#134377](https://github.com/openclaw/openclaw/pull/134377) — thanks @lordstryfe
      * Resolve SecretRef credentials for TTS personas [#89636](https://github.com/openclaw/openclaw/pull/89636) — thanks @SebTardif and @pablonunoutande-source

      **Scope and verification**

      Private xAI endpoint support here covers discovery and buffered synthesis, not native WebSocket streaming. Provider availability, recognition quality, entitlements, and broad authenticated operation are not established by the local and synthetic coverage for these repairs.
    </details>
  </Accordion>

  <Accordion title="Models, Provider Failures, and Fallbacks">
    The model list and the request it starts now agree more often about which provider and login own the work. Authenticated Claude CLI models found in the full catalog can be selected before the first turn, native Claude login remains in charge when an unrelated Anthropic credential is stored, and simple completions retain the provider transport chosen during preparation instead of borrowing a different connection at dispatch.

    When a provider fails, OpenClaw keeps more of the useful context needed to recover. Chat, the terminal UI, and Gateway history can use guidance for the provider that actually handled the run, malformed catalog responses no longer replace the last healthy OpenRouter capability data, and pinned models use their full same-model retry and profile-rotation budget without quietly switching models. Chutes and Cerebras catalog estimates can refresh without overwriting operator-set rates, but catalog entries and estimated prices are not proof of account entitlement, paid inference, or a provider invoice.

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

      **Improvements**

      * Started exact-model work from prepared model facts without waiting for provider-wide discovery ([#123432](https://github.com/openclaw/openclaw/pull/123432)). Thanks @xialonglee and @obviyus.
      * Refreshed Chutes and Cerebras catalog estimates without overwriting operator-set rates ([#134311](https://github.com/openclaw/openclaw/pull/134311)). Thanks @steipete.
      * Made authenticated Claude CLI catalog models selectable before the first turn ([#134463](https://github.com/openclaw/openclaw/pull/134463)). Thanks @fuller-stack-dev and @goslingmanagment.

      **Bug fixes**

      * Migrated eligible retired xAI image-model entries without touching unrelated media settings ([#126495](https://github.com/openclaw/openclaw/pull/126495)). Thanks @Schimuneck, @obviyus, and @tiniecookie.
      * Distinguished empty Gemini search answers from malformed responses while retaining automatic fallback ([#130583](https://github.com/openclaw/openclaw/pull/130583)). Thanks @Darren2030 and @jailbirt.
      * Gave Codex bridge users accurate recovery guidance for an unavailable selected auth profile ([#133355](https://github.com/openclaw/openclaw/pull/133355)). Thanks @vincentkoc and @Jeehut.
      * Rejected malformed OpenRouter catalog responses without replacing the last healthy capability cache ([#133399](https://github.com/openclaw/openclaw/pull/133399)). Thanks @vincentkoc.
      * Distinguished valid empty xAI search and code-execution results from malformed JSON ([#133667](https://github.com/openclaw/openclaw/pull/133667))
      * Kept tooltip dismissal from closing the Control UI control beneath it and retained specific provider guidance ([#133772](https://github.com/openclaw/openclaw/pull/133772)). Thanks @steipete.
      * Reused prepared or loaded provider hooks when reporting failures and deciding fallbacks ([#133970](https://github.com/openclaw/openclaw/pull/133970))
      * Used the provider that owned a run when showing failure guidance ([#134029](https://github.com/openclaw/openclaw/pull/134029))
      * Kept healthy native Claude login routes from being displaced by unrelated Anthropic credentials ([#134030](https://github.com/openclaw/openclaw/pull/134030)). Thanks @obviyus and @rayseling.
      * Preserved safe provider and model facts in chat failure guidance without exposing raw responses ([#134103](https://github.com/openclaw/openclaw/pull/134103)). Thanks @obviyus.
      * Used the full same-model retry budget for pinned models without changing their fallback policy ([#134111](https://github.com/openclaw/openclaw/pull/134111)). Thanks @obviyus.
      * Preserved the prepared provider transport and authentication through simple-completion dispatch ([#134521](https://github.com/openclaw/openclaw/pull/134521))

      **Documentation**

      * Explained eligible model-not-found fallback behavior and the fields used to diagnose it ([#130663](https://github.com/openclaw/openclaw/pull/130663)). Thanks @MonkeyLeeT and @geekforlife.
    </details>
  </Accordion>
</AccordionGroup>

## Automations and Scheduling

Longer-running work is easier to steer without losing track of who owns it. Supported active tasks can accept permission changes, human approvals and corrections move ahead of agent-to-agent traffic, Stop catches more selected child work, and scheduled jobs report the outcome that actually settled instead of treating dispatch alone as success.

<AccordionGroup>
  <Accordion title="Changing, Steering, and Stopping Active Work">
    Supported native and Codex work can now take a permission change from the Control UI while it is active. The interface shows that the change is being applied, closes old approvals, and keeps the conversation in place instead of making you manually stop and continue the task.

    Human approvals and corrections also move ahead of agent-to-agent traffic in busy sessions, while Stop catches the selected running and waiting helper-agent work beneath the task you chose. Finished helper work that cannot deliver its result leaves one recoverable follow-up alert, and messages sent between sessions say whether they were queued or added to work already in progress.

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

      Permission changes do not replay the original request or undo effects that already completed. Active CLI-backed and whole-agent worker runs still need to be stopped first. Swarm cancellation acknowledgement does not promise immediate cleanup, and queued or steered admission does not prove the target task completed.

      **Bug fixes**

      * Apply supported permission changes to active native and Codex work [#132407](https://github.com/openclaw/openclaw/pull/132407) by @steipete and @jalehman
      * Give human messages priority over agent-to-agent traffic in busy sessions [#132738](https://github.com/openclaw/openclaw/pull/132738) by @sylvesterkaczmarek, @obviyus, and @ewrurwteurwU
      * Stop selected running and queued Swarm collectors with their exact parent [#133076](https://github.com/openclaw/openclaw/pull/133076) by @steipete
      * Persist one recoverable alert when detached subagent completion delivery is exhausted [#133192](https://github.com/openclaw/openclaw/pull/133192) by @shojikumaru, @vincentkoc, and @potterdigital
      * Distinguish queued session sends from active-session steering and later announcement state [#133926](https://github.com/openclaw/openclaw/pull/133926) with contributions from @VACInc and @RichChen01

      **Documentation**

      * Clarify how Swarm progress appears and clears across Control UI and native clients [#133916](https://github.com/openclaw/openclaw/pull/133916) by @steipete
    </details>
  </Accordion>

  <Accordion title="Keeping Work with the Right Agent">
    When several agents share one OpenClaw installation, replies, commands, tasks, plugins, media, and connected conversations now stay with the agent that owns them more consistently. The same ownership follows work into shortened conversations, detached reviews, and coding tools, so one agent is less likely to answer with another agent's context or permissions.

    Unattended work can now find and organize other sessions owned by the same agent without extra setup, and connected coding sessions keep same-named work separate when different agents resume, control, cancel, or clean it up.

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

      Unsandboxed session tools now default to visibility across the same agent. On a shared agent, that can expose another user's conversations, so operators needing isolation should choose `tree` or `self`, or use separate agents. Policy ownership does not add execution-level isolation when separate runs share an unscoped policy key. Older bare ACPX histories require the Gateway to be stopped before `openclaw doctor --fix`, and ambiguous records remain unmoved.

      **Improvements**

      * Let unsandboxed automation work across sessions owned by the same agent by default [#133469](https://github.com/openclaw/openclaw/pull/133469) by @steipete

      **Bug fixes**

      * Keep conversation unbinds, plugin routing, and numbered subagent commands with their intended owner [#133461](https://github.com/openclaw/openclaw/pull/133461) by @steipete
      * Move rebound conversations to their new session and scope global subagent views to the selected agent [#133578](https://github.com/openclaw/openclaw/pull/133578) by @steipete
      * Preserve agent ownership across global sessions, task delivery, plugins, media, and channel bindings [#133715](https://github.com/openclaw/openclaw/pull/133715) by @steipete
      * Preserve the originating agent's sandbox and tool-policy owner through reviews and compaction [#133912](https://github.com/openclaw/openclaw/pull/133912) by @steipete
      * Keep ACP operations and same-named sessions with the selected agent [#134314](https://github.com/openclaw/openclaw/pull/134314) by @steipete
    </details>
  </Accordion>

  <Accordion title="Scheduled Work and Its Results">
    Automation results now line up more closely with the work that actually finished. Scripts waiting for a scheduled run receive the complete machine-readable result before the command exits, jobs that wake an agent record the result of the work rather than treating the wake-up itself as success, and screen readers and tooltips name the scheduled job behind each row action.

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

      Ordinary system-event cron remains dispatch-only. Waiting for the settled result applies to heartbeat-backed work and does not change scheduling, run-history, or exit-code semantics elsewhere.

      **Bug fixes**

      * Flush complete waited cron JSON before preserving the command's success or failure exit [#133661](https://github.com/openclaw/openclaw/pull/133661) by @steipete
      * Include the scheduled job name in Cron row action labels and tooltips [#134225](https://github.com/openclaw/openclaw/pull/134225) by @SunnyShu0925
      * Record heartbeat-backed scheduled jobs from the settled heartbeat outcome [#134464](https://github.com/openclaw/openclaw/pull/134464) by @fuller-stack-dev and @goslingmanagment
      * Localize named scheduled-automation actions across supported Control UI locales [#134600](https://github.com/openclaw/openclaw/pull/134600)
    </details>
  </Accordion>
</AccordionGroup>

## Browser and Computer Use

Browser control can stay available through a paired local relay on supported macOS and Linux builds even when the Gateway is not running, while managed pages expose useful controls sooner. Cloud and remote work can reuse prepared projects, stop and clean up more deliberately, recover edits after a restart, and report failed sandbox or worker stages more clearly.

<AccordionGroup>
  <Accordion title="Agent Requests, File Edits, and Search">
    When an agent edits or searches a workspace, more of what was actually on disk now survives the trip. Patches preserve untouched content and line endings, formatting-only edits are no longer silently discarded, search results keep readable context from files that previously looked garbled and from unusual filenames, and local names beginning with `@` stay literal when that file or directory exists.

    Normal replies also respect how much tool progress each agent is set to show, and ordinary requests are less likely to be diverted into an irrelevant answer about the current model.

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

      Literal replacement-line indentation remains outside the patch repair, and the grep work does not claim general protection from extremely large context requests. `@` shorthand still applies when no literal local target exists, while remote and sandbox backends retain their prior path behavior. Raw shell-command text remains a separate display control, and the focused MiniMax evidence does not eliminate provider variability.

      **Bug fixes**

      * Preserve untouched bytes, line endings, and final-newline state during agent patching [#124418](https://github.com/openclaw/openclaw/pull/124418) by @synthalorian, @obviyus, and @yetval
      * Reuse unchanged agent tool-description digests while keeping Code Mode descriptions current [#129145](https://github.com/openclaw/openclaw/pull/129145) by @quangtran88
      * Preserve decoded UTF-16 context and accurate paths in agent grep results [#131621](https://github.com/openclaw/openclaw/pull/131621) by @xialonglee
      * Apply and preview formatting-only edits while retaining genuine no-op detection [#133320](https://github.com/openclaw/openclaw/pull/133320) by @steipete
      * Remove ignored permission and archive options from agent tool contracts [#133336](https://github.com/openclaw/openclaw/pull/133336) by @steipete
      * Reject bundled language-server requests after an agent run starts closing [#133340](https://github.com/openclaw/openclaw/pull/133340) by @qingminglong
      * Retain grep matches from filenames reported in byte form [#133358](https://github.com/openclaw/openclaw/pull/133358) by @ly85206559
      * Honor each agent's tool-progress detail setting during normal replies [#133788](https://github.com/openclaw/openclaw/pull/133788) by @marmar9615-cloud
      * Preserve literal local session paths beginning with `@` [#133815](https://github.com/openclaw/openclaw/pull/133815) by @qingminglong
      * Keep model-identity guidance from diverting ordinary agent requests [#134504](https://github.com/openclaw/openclaw/pull/134504) by @steipete
    </details>
  </Accordion>

  <Accordion title="Chrome extension relay and page control">
    On supported macOS and Linux extension builds, a paired Chrome extension can wake an authenticated local relay even when the Gateway is not running, and the Gateway can join that relay later without taking the browser session away from other authenticated clients. This is not yet established for Chrome Web Store v2.2.0, Windows still requires manual relay setup, and commands through the browser CLI still need a running Gateway.

    Once connected, managed Chromium can return actionable page controls without spending the whole request waiting, and browser automation keeps more nested workers and frames attached while a page is running.

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

      **Improvements**

      * Let supported Chrome extension builds wake a local relay without a running Gateway [#128379](https://github.com/openclaw/openclaw/pull/128379) by [@steipete](https://github.com/steipete)

      **Bug fixes**

      * Preserve nested browser worker and iframe sessions [#133571](https://github.com/openclaw/openclaw/pull/133571) by [@steipete](https://github.com/steipete)
      * Return actionable controls from eligible managed Chromium role snapshots [#133614](https://github.com/openclaw/openclaw/pull/133614) by [@vincentkoc](https://github.com/vincentkoc), with the issue report from [@josephbergvinson](https://github.com/josephbergvinson)
      * Partition Browser Relay sign-in capacity by connection source [#134241](https://github.com/openclaw/openclaw/pull/134241) by [@mmaps](https://github.com/mmaps)

      **Evidence limits**

      The managed snapshot shortcut applies only to eligible main-frame requests, the missing-context browser case was reproduced through fault injection, and unusually large legitimate connection bursts sharing one source may still need to be staggered.
    </details>
  </Accordion>

  <Accordion title="Reusing prepared cloud projects">
    Cloud sessions can prepare a Git project and runtime once, then let later sessions reuse verified pieces while still receiving current edits, attachments, and fresh enrollment. The first session still does the preparation and capture work, so the improvement is less repeated setup for later sessions rather than a promised startup time.

    Crabbox project snapshots now wait for the prepared image to settle before a worker enrolls, keeping failed or uncertain capture in recovery instead of letting work continue against an image that may not be ready.

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

      **Improvements**

      * Reuse prepared cloud projects for later sessions [#133447](https://github.com/openclaw/openclaw/pull/133447) by [@steipete](https://github.com/steipete)
      * Reduce redundant preparation for the first cloud runtime archive [#133725](https://github.com/openclaw/openclaw/pull/133725) by [@steipete](https://github.com/steipete)
      * Shrink cloud bootstrap archives and peak memory use [#133822](https://github.com/openclaw/openclaw/pull/133822) by [@steipete](https://github.com/steipete)
      * Reuse validated hashes during prepared workspace activation [#134026](https://github.com/openclaw/openclaw/pull/134026) by [@steipete](https://github.com/steipete)
      * Reuse verified worker archives from warm project snapshots [#134326](https://github.com/openclaw/openclaw/pull/134326) by [@steipete](https://github.com/steipete)

      **Bug fixes**

      * Streamline prepared-worker startup and preserve bootstrap archive permissions [#134043](https://github.com/openclaw/openclaw/pull/134043) by [@steipete](https://github.com/steipete)
      * Settle Crabbox project snapshots before worker enrollment [#134181](https://github.com/openclaw/openclaw/pull/134181) by [@steipete](https://github.com/steipete)

      **Evidence limits**

      Cloud timing evidence either uses synthetic projects or combines local preparation with provider work, so it does not establish a particular end-to-end startup reduction. Coordinator-retained `checkpoint_pending` responses still depend on a separate Crabbox CLI repair that was not established as released here.
    </details>
  </Accordion>

  <Accordion title="Stopping cloud work">
    Stop now closes queued and new work earlier, interrupts supported provisioning, waits for the resources it owns to finish cleanup before reporting success, and can resume accepted cleanup after a Gateway restart.

    An initial message that never reached the worker stays marked as not sent for a deliberate retry, while repeated Stop requests share the same cleanup instead of starting competing teardown work.

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

      **Bug fixes**

      * Stop queued cloud work and preserve cancelled turns across restart [#133241](https://github.com/openclaw/openclaw/pull/133241) by [@steipete](https://github.com/steipete)
      * Release idle cloud desktops and await cleanup before reuse [#133451](https://github.com/openclaw/openclaw/pull/133451) by [@steipete](https://github.com/steipete)
      * Wait for pending SSH workspace cleanup during Stop [#133472](https://github.com/openclaw/openclaw/pull/133472) by [@steipete](https://github.com/steipete)
      * Stop cloud work before unrelated provider inspection finishes [#133476](https://github.com/openclaw/openclaw/pull/133476) by [@steipete](https://github.com/steipete)
      * Cancel supported cloud provisioning when a worker is stopped [#133735](https://github.com/openclaw/openclaw/pull/133735) by [@steipete](https://github.com/steipete)
      * Fence cancelled worker-bundle installation and publication [#133976](https://github.com/openclaw/openclaw/pull/133976) by [@steipete](https://github.com/steipete)
      * Expire unused standard-catalog Crabbox snapshots after the retention window [#134088](https://github.com/openclaw/openclaw/pull/134088) by [@steipete](https://github.com/steipete)

      **Evidence limits**

      Provider teardown remains asynchronous, so providers that cannot interrupt promptly stay owned until their callback settles and final release can take time. Stop does not promise that every provider or machine disappears immediately.
    </details>
  </Accordion>

  <Accordion title="Recovering cloud sessions after a restart">
    Cloud sessions can recover legitimate workspace edits after a Gateway restart, and stale results now settle into a recoverable outcome or a clear failure instead of leaving the session stuck waiting to finish. Archive, delete, and recovery actions can also complete without getting trapped behind an earlier worker move.

    Accepted browser follow-ups survive a restart or reload, and delivery receipts can confirm input that the Gateway already consumed. Input whose delivery remains uncertain is held for an explicit resend instead of being replayed automatically, while cloud execution errors keep the original failure visible and report workspace-recovery trouble separately when remote edits may not have returned.

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

      **Bug fixes**

      * Honor Gateway session policies in cloud-worker session operations [#131669](https://github.com/openclaw/openclaw/pull/131669) by [@anyech](https://github.com/anyech) and [@sallyom](https://github.com/sallyom)
      * Settle recoverable results during stale cloud-worker teardown [#132128](https://github.com/openclaw/openclaw/pull/132128) by [@jalehman](https://github.com/jalehman)
      * Retain accepted browser follow-ups across Gateway restarts [#133457](https://github.com/openclaw/openclaw/pull/133457) by [@steipete](https://github.com/steipete)
      * Keep cloud-session lifecycle actions from hanging behind worker moves [#133551](https://github.com/openclaw/openclaw/pull/133551) by [@steipete](https://github.com/steipete)
      * Recover cloud sessions across Gateway restarts and revoked parent authority [#133728](https://github.com/openclaw/openclaw/pull/133728) with a contribution from [@shakkernerd](https://github.com/shakkernerd)
      * Preserve cloud execution failures and report additional recovery failures [#134200](https://github.com/openclaw/openclaw/pull/134200) with a contribution from [@Takhoffman](https://github.com/Takhoffman)
      * Scope failed-worker recovery to the requested cloud worker [#134448](https://github.com/openclaw/openclaw/pull/134448) by [@steipete](https://github.com/steipete)

      **Evidence limits**

      Several recovery paths have focused, loopback, or synthetic provider coverage rather than fresh live cloud-provider proof. The evidence supports the session custody and recovery behavior described above, not broad provider reliability.
    </details>
  </Accordion>

  <Accordion title="Remote sandbox files and worker errors">
    Remote sandboxes running on supported Python 3.9 environments now preserve complete file and attachment bytes, while guarded HTTP 308 redirects from Codex sandbox requests keep their request body and the existing destination checks.

    When optional container hosting or Crabbox bootstrap fails, operators also get a redacted error that identifies the failed stage instead of a worker that looks ready or a generic aborted message.

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

      **Bug fixes**

      * Preserve remote sandbox files and guarded HTTP 308 redirects on Python 3.9 [#133580](https://github.com/openclaw/openclaw/pull/133580) by [@steipete](https://github.com/steipete)
      * Report redacted container-hosting startup failures from the native macOS worker [#133655](https://github.com/openclaw/openclaw/pull/133655) by [@steipete](https://github.com/steipete)
      * Identify the failed phase of Crabbox worker bootstrap [#133663](https://github.com/openclaw/openclaw/pull/133663) by [@steipete](https://github.com/steipete)

      **Evidence limits**

      These fixes stay scoped to the supported Python 3.9 remote sandbox and optional macOS or Crabbox hosting paths rather than broadening the supported sandbox or provider matrix. The container-hosting diagnostic was validated through controlled failures rather than a native app and live container-daemon run.
    </details>
  </Accordion>
</AccordionGroup>

## Plugins and Integrations

Plugins now load and update more reliably across common package layouts while preserving explicit pins and capability review. Doctor and the registry give more useful repair guidance without guessing, and Beam transcript sharing keeps conversation order, publisher identity, and receiver changes clearer.

<AccordionGroup>
  <Accordion title="Installing and Updating Plugins">
    Packaged TypeScript plugins now choose a runnable compiled entry more consistently across common build layouts, and file-URL entry points can load and refresh through the native loader, including the Windows path that previously failed. Exact beta updates keep eligible official plugins aligned with the beta core that was actually installed, while explicit selectors and third-party pins stay in place and a missing matching artifact remains a visible warning rather than proof of alignment.

    A managed update waiting for capability review keeps the previous plugin and stops before restarting, while npm failures that produced no output now identify the timeout, signal, or exit that ended the command. Published Plugin SDK imports and older command categories also remain compatible across the upgrade, without bringing retired docking features back.

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

      **Improvements**

      * Normalized legacy plugin command categories in Gateway catalogs ([59512b4](https://github.com/openclaw/openclaw/commit/59512b43d41845fb34b02e445384b4c13af90004))
      * Preserved published plugin SDK imports and legacy command categories across upgrades ([d405013](https://github.com/openclaw/openclaw/commit/d405013f4fadbe00374b61f116b2ec6bb3e1ac14))
      * Allowed plugin package authoring commands to run while an unrelated host configuration is being repaired ([#133304](https://github.com/openclaw/openclaw/pull/133304)). Thanks @ruel225.
      * Reused prepared plugin metadata during Gateway runs while retaining environment-aware refreshes ([#133651](https://github.com/openclaw/openclaw/pull/133651))
      * Imported declared provider and channel environment keys for configured load-path plugins ([#134437](https://github.com/openclaw/openclaw/pull/134437))

      **Bug fixes**

      * Loaded packaged TypeScript plugins across common compiled layouts and explained missing runtime entries ([#117199](https://github.com/openclaw/openclaw/pull/117199)). Thanks @steipete.
      * Kept eligible official plugins aligned with the exact beta core version during updates ([#124415](https://github.com/openclaw/openclaw/pull/124415)). Thanks @synthalorian and @chac4l.
      * Preserved explicit npm pins while Doctor repaired stale runtime-plugin records ([#128250](https://github.com/openclaw/openclaw/pull/128250)). Thanks @SunnyShu0925, @obviyus, and @sblindt.
      * Loaded file-URL plugin entry points through the native loader, including cache refresh behavior ([#133337](https://github.com/openclaw/openclaw/pull/133337)). Thanks @sunlit-deng and @easyteacher.
      * Resolved internationalized, relative, escaped, and nested references in MCP structured-output schemas ([#133572](https://github.com/openclaw/openclaw/pull/133572)). Thanks @steipete.
      * Reported the timeout, signal, or exit behind silent npm plugin failures ([#133845](https://github.com/openclaw/openclaw/pull/133845)). Thanks @aniruddhaadak80.

      **Security and trust boundaries**

      * Stopped managed updates and Gateway restarts while plugin capability consent remained unresolved ([#134183](https://github.com/openclaw/openclaw/pull/134183)). Thanks @obviyus and @BrunoCerberus.

      **Documentation**

      * Clarified which plugin provider surface owns model identity, transport, normalization, and fallback eligibility ([#133401](https://github.com/openclaw/openclaw/pull/133401))
    </details>
  </Accordion>

  <Accordion title="Plugin Diagnostics and Trust">
    Plugin repair is more useful when it refuses to guess. Doctor and the registry CLI now show which persisted plugin records differ, verify a manual refresh before reporting success, and only suggest an exact npm repair target that exists. A verified stale linked-plugin record can also be removed after the healthy configured-path replacement is confirmed, without weakening uninstall ownership checks.

    Two trust boundaries remain important. Migrated compatibility allowlists preserve bundled providers and explicit denies, but the landed repair retains an automated-review concern around mixed eligibility and scoped environment propagation. A bundled plugin selected through a configured path also keeps its bundled behavior across built and unbuilt states, but ignored `dist` or `node_modules` descendants beneath a bundled tree may still inherit bundled trust, so this release does not establish that nested path boundary as safe.

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

      **Improvements**

      * Made plugin health checks return reliable shell exit statuses in human and JSON modes ([#133431](https://github.com/openclaw/openclaw/pull/133431)). Thanks @PollyBot13 and @obviyus.

      **Bug fixes**

      * Limited plugin repair commands to registry-confirmed exact targets ([#133617](https://github.com/openclaw/openclaw/pull/133617)). Thanks @vladimirkrdzic and @anaman.
      * Reported plugin-registry persistence differences and verified refreshes before declaring recovery ([#133963](https://github.com/openclaw/openclaw/pull/133963)). Thanks @obviyus and @yubingjiaocn.
      * Removed verified stale linked-plugin records after a healthy configured-path replacement was confirmed ([#133991](https://github.com/openclaw/openclaw/pull/133991)). Thanks @ZengWen-DT and @obviyus.

      **Security and trust boundaries**

      * Restored bundled provider compatibility for migrated allowlists while preserving explicit denies, with a retained automated-review concern around eligibility and scoped environment propagation ([#123416](https://github.com/openclaw/openclaw/pull/123416)). Thanks @lonexreb, @obviyus, and @bradenmcleish.
      * Preserved bundled-plugin behavior for configured paths across build states, with an unresolved trust concern for ignored `dist` or `node_modules` descendants beneath a bundled tree ([#133584](https://github.com/openclaw/openclaw/pull/133584))
    </details>
  </Accordion>

  <Accordion title="Sharing and reading Beam transcripts">
    Shared [Beam](/plugins/beam) transcripts now keep questions before their answers and show the verified person who published the snapshot instead of borrowing the viewer's identity.

    Automatic shares keep the conversation readable while leaving out reasoning and tool details, masking known credentials, and showing when part of the transcript was left out. Changing the receiver starts fresh delivery to the new destination without carrying unfinished updates across, and readable links can use the session title while old links still open the same transcript.

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

      **Improvements**

      * Localize shared-session link errors across supported Control UI locales [#133433](https://github.com/openclaw/openclaw/pull/133433)
      * Use readable session names in Beam share links [#133463](https://github.com/openclaw/openclaw/pull/133463)

      **Bug fixes**

      * Preserve conversation order across Beam, Pi, and OpenCode catalogs [#133382](https://github.com/openclaw/openclaw/pull/133382)
      * Preserve the verified publisher on shared Beam transcripts [#133425](https://github.com/openclaw/openclaw/pull/133425)
      * Omit Claude reasoning and tool content from automatic Beam shares [#133460](https://github.com/openclaw/openclaw/pull/133460)
      * Restart Beam sharing cleanly when its receiver changes [#133533](https://github.com/openclaw/openclaw/pull/133533) — thanks @steipete

      **Scope notes**

      * Publisher attribution does not identify the author of every message, and older anonymous snapshots require an authenticated reupload to gain attribution.
      * Automatic masking is narrower than Beam's manual publication sanitizer, and older paired nodes need an update for mixed Claude transcripts.
      * Receiver-change behavior was verified with synthetic stores and authorization, and the newer link behavior does not establish that the Team server was deployed with it.
    </details>
  </Accordion>
</AccordionGroup>

## Security and Privacy

Several lower-level safeguards now fail earlier and reveal less. Oversized MCP responses and events are bounded before parsing, routine diagnostics keep ClawDock credentials out, long-secret redaction stays safe within its supported size, and optional image components move to patched dependency versions without making them mandatory.

<AccordionGroup>
  <Accordion title="Runtime and Dependency Safeguards">
    Gateway integrations now reject an oversized MCP HTTP response or individual SSE event before parsing it, while healthy long-lived streams can continue beyond that amount in total. ClawDock inspection keeps credential values and prefixes out of ordinary diagnostics, and redaction handles accepted long secrets without crashing.

    Optional image decoding now uses patched Sharp 0.35.4 and libheif 1.23.2 components without making Sharp mandatory. A standalone `@openclaw/memory-lancedb` installation can still resolve an older Sharp through its optional Transformers path, so the dependency repair should not be read as universal coverage. Bun 1.4 Gateway connections also use the installed npm WebSocket receiver.

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

      The Bun native-package proof is bounded to the prepared release candidate, and the bracketed IPv6 route was proven through URL construction and a synthetic round trip rather than a complete authenticated browser flow.

      **Bug fixes**

      * Kept plugin-hosted surfaces reachable through bracketed IPv6 hosts [#134050](https://github.com/openclaw/openclaw/pull/134050) — thanks @yangxiansheng
      * Used the installed npm WebSocket receiver for Gateway connections under Bun 1.4 [#134282](https://github.com/openclaw/openclaw/pull/134282) — thanks @steipete

      **Security and dependency updates**

      * Bounded individual MCP HTTP responses and SSE events before parsing [#123194](https://github.com/openclaw/openclaw/pull/123194) — thanks @SebTardif, @obviyus, and @aniruddhaadak80
      * Kept ClawDock credentials out of routine configuration diagnostics [#133547](https://github.com/openclaw/openclaw/pull/133547)
      * Made long-secret diagnostic redaction safe within its supported size [#134168](https://github.com/openclaw/openclaw/pull/134168)
      * Patched optional image components while retaining the standalone memory-plugin Sharp boundary [`b3c92c4`](https://github.com/openclaw/openclaw/commit/b3c92c465943fed97be26969200190560165e78f)
    </details>
  </Accordion>
</AccordionGroup>

## Maintainer and Internal Changes

Another 382 changes in v2026.8.2 primarily affect the people who build, test, document, and release OpenClaw rather than the everyday product experience. They cover CI and test maintenance, internal refactors, release and package validation, generated metadata, documentation upkeep, and other behind-the-scenes work, so they stay out of the release story above while remaining part of the complete record.

<AccordionGroup>
  <Accordion title="All 382 Maintainer and Internal Changes">
    This completes the accounting for all 794 analyzed PRs and commits in v2026.8.2. The collapsed list below contains the 382 maintainer-only changes that do not belong in the user-facing product sections.

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

      **Maintainer and internal changes**

      * Plugin and client developers gain a bounded presentation contract for external verification choices, but no complete user flow exists yet. [#113517](https://github.com/openclaw/openclaw/pull/113517) — thanks to [@Guardiola31337](https://github.com/Guardiola31337)
      * Generated documentation maps stop treating headings inside longer nested code fences as page sections. [#130207](https://github.com/openclaw/openclaw/pull/130207) — thanks to [@qingminglong](https://github.com/qingminglong)
      * Maintainers have one behavior-preserving error-cause reader shared by unhandled-error and retry paths. [#130280](https://github.com/openclaw/openclaw/pull/130280) — thanks to [@vincentkoc](https://github.com/vincentkoc)
      * Finite source-test runs compile one private subprocess generation per invocation while preserving operator runtime behavior. [#132716](https://github.com/openclaw/openclaw/pull/132716) — thanks to [@steipete](https://github.com/steipete)
      * Plugin hook dispatch shares one internal binder without changing plugin registration or runtime behavior. [#133293](https://github.com/openclaw/openclaw/pull/133293) — thanks to [@steipete](https://github.com/steipete)
      * Supported multi-process Vitest runs retain and merge complete report evidence instead of overwriting all but the final child report. [#133309](https://github.com/openclaw/openclaw/pull/133309) — thanks to [@steipete](https://github.com/steipete)
      * History-heavy reads reuse prepared facts and reduce repeated work while preserving results. [#133316](https://github.com/openclaw/openclaw/pull/133316) — thanks to [@steipete](https://github.com/steipete)
      * The 2026.8.1 release workflow can record an owner-approved Telegram waiver as waived rather than passed. [#133321](https://github.com/openclaw/openclaw/pull/133321) — thanks to [@steipete](https://github.com/steipete)
      * Directory-filtered Vitest runs retain project ownership and isolate shared state between non-isolated files. [#133322](https://github.com/openclaw/openclaw/pull/133322) — thanks to [@steipete](https://github.com/steipete)
      * Planner tests restore scoped environment flags reliably without changing planner behavior. [#133325](https://github.com/openclaw/openclaw/pull/133325) — thanks to [@steipete](https://github.com/steipete)
      * Text-command handlers now have one authoritative internal ordering with no command behavior change. [#133332](https://github.com/openclaw/openclaw/pull/133332) — thanks to [@steipete](https://github.com/steipete)
      * Doctor transcript imports avoid hashing accepted events twice while preserving stored data and duplicate semantics. [#133350](https://github.com/openclaw/openclaw/pull/133350) — thanks to [@steipete](https://github.com/steipete)
      * Performance-workflow tests reuse repositories and preserve cancellation signals without changing product behavior. [#133356](https://github.com/openclaw/openclaw/pull/133356) — thanks to [@steipete](https://github.com/steipete)
      * Completed Telegram release tests are advisory while their real outcomes remain visible and non-Telegram gates remain strict. [#133357](https://github.com/openclaw/openclaw/pull/133357) — thanks to [@steipete](https://github.com/steipete)
      * Prompt and plugin metadata preparation reuses available work without changing prompt bytes or catalogs. [#133362](https://github.com/openclaw/openclaw/pull/133362) — thanks to [@steipete](https://github.com/steipete)
      * Plugin registration lifecycle policy is simpler while retaining the same supported calls and compatibility path. [#133364](https://github.com/openclaw/openclaw/pull/133364) — thanks to [@steipete](https://github.com/steipete)
      * Plugin publication waits for Git subprocess trees to drain before trust checks and package readback. [#133368](https://github.com/openclaw/openclaw/pull/133368) — thanks to [@steipete](https://github.com/steipete)
      * Testbox rejects misleading no-sync runs before lease or remote checkout work begins. [#133373](https://github.com/openclaw/openclaw/pull/133373) — thanks to [@steipete](https://github.com/steipete)
      * Crabbox guidance has one portable source plus repository-specific setup, and task-owned worktrees no longer require extra confirmation. [#133375](https://github.com/openclaw/openclaw/pull/133375) — thanks to [@steipete](https://github.com/steipete)
      * Transcript imports update initialized session windows with less database work while preserving stored-data semantics. [#133378](https://github.com/openclaw/openclaw/pull/133378) — thanks to [@steipete](https://github.com/steipete)
      * Large transcript imports reduce watermark database overhead while preserving history, identity, search, and migration results. [#133403](https://github.com/openclaw/openclaw/pull/133403) — thanks to [@steipete](https://github.com/steipete)
      * Control UI outbox custody and draft persistence share simpler internal ownership while preserving existing offline, reload, and multi-tab behavior. [#133409](https://github.com/openclaw/openclaw/pull/133409) — thanks to [@steipete](https://github.com/steipete)
      * Maintainer squashes fail closed when rewritten contributor history could expose a contributor email address. [#133411](https://github.com/openclaw/openclaw/pull/133411) — thanks to [@vincentkoc](https://github.com/vincentkoc)
      * Settings use one locked storage-load path for supported product workflows. [#133413](https://github.com/openclaw/openclaw/pull/133413) — thanks to [@obviyus](https://github.com/obviyus)
      * Plugin registry snapshot tests reuse one canonical fixture without changing production behavior. [#133420](https://github.com/openclaw/openclaw/pull/133420) — thanks to [@steipete](https://github.com/steipete)
      * Release checklists can carry a validated protected-tag npm preflight source into publish command generation without switching to main. [#133423](https://github.com/openclaw/openclaw/pull/133423) — thanks to [@steipete](https://github.com/steipete)
      * Full Release Validation writes large complete evidence manifests from files instead of exceeding operating-system argument limits. [#133426](https://github.com/openclaw/openclaw/pull/133426) — thanks to [@steipete](https://github.com/steipete)
      * Git workflow fixture tests run much faster and expose better failure text without changing product behavior. [#133427](https://github.com/openclaw/openclaw/pull/133427) — thanks to [@steipete](https://github.com/steipete)
      * Publish-workflow tests reuse isolated repository snapshots for faster setup without changing workflow behavior. [#133438](https://github.com/openclaw/openclaw/pull/133438) — thanks to [@steipete](https://github.com/steipete)
      * Skill Workshop actions reuse one internal text-result envelope without changing visible or structured results. [#133453](https://github.com/openclaw/openclaw/pull/133453) — thanks to [@steipete](https://github.com/steipete)
      * Large npm releases can package all editorial notes while linking an oversized contribution record to the exact tag and restoring the source changelog byte-for-byte. [#133454](https://github.com/openclaw/openclaw/pull/133454) — thanks to [@steipete](https://github.com/steipete)
      * Diagnostic lifecycle bookkeeping performs fewer repeated scans while preserving behavior. [#133466](https://github.com/openclaw/openclaw/pull/133466) — thanks to [@steipete](https://github.com/steipete)
      * Extended-stable performance validation uses the repaired Kova evaluator contract. [#133467](https://github.com/openclaw/openclaw/pull/133467) — thanks to [@RomneyDa](https://github.com/RomneyDa)
      * Core release publication can finish independently of separately approved Android publication. [#133471](https://github.com/openclaw/openclaw/pull/133471) — thanks to [@steipete](https://github.com/steipete)
      * Chat rendering and uncertain-send recovery share fewer duplicated internal paths with intended behavior unchanged. [#133474](https://github.com/openclaw/openclaw/pull/133474) — thanks to [@steipete](https://github.com/steipete)
      * Grouped command-queue selection reuses capacity facts with scheduling behavior preserved. [#133491](https://github.com/openclaw/openclaw/pull/133491) — thanks to [@steipete](https://github.com/steipete)
      * Performance documentation correctly distinguishes skipped credential-ineligible candidates from missing-key failures and concurrent source probes. [#133492](https://github.com/openclaw/openclaw/pull/133492) — thanks to [@steipete](https://github.com/steipete)
      * Failed Control UI builds preserve their original actionable error instead of masking it with missing-assets output. [#133494](https://github.com/openclaw/openclaw/pull/133494) — thanks to [@steipete](https://github.com/steipete)
      * Release operators can use guarded Docker-only recovery for already-published regular stable releases. [#133498](https://github.com/openclaw/openclaw/pull/133498) — thanks to [@steipete](https://github.com/steipete)
      * Failed Docker self-upgrade verification retains redacted phase and RPC evidence without masking the original failure. [#133505](https://github.com/openclaw/openclaw/pull/133505) — thanks to [@steipete](https://github.com/steipete)
      * Extended-stable plugin prerelease checks retain frozen branch context across both validation phases. [#133506](https://github.com/openclaw/openclaw/pull/133506) — thanks to [@RomneyDa](https://github.com/RomneyDa)
      * Control UI chat rendering has fewer overlapping internal implementations with intended behavior unchanged. [#133508](https://github.com/openclaw/openclaw/pull/133508) — thanks to [@steipete](https://github.com/steipete)
      * Claw update rollback failures share ordered collection logic without changing rollback policy or reporting. [#133509](https://github.com/openclaw/openclaw/pull/133509) — thanks to [@steipete](https://github.com/steipete)
      * Agent runs avoid preparing unconsumed tool text and resolving unused skill paths while preserving visible behavior. [#133512](https://github.com/openclaw/openclaw/pull/133512) — thanks to [@steipete](https://github.com/steipete)
      * Loaded plugin registry reads avoid eager loader imports in focused provider and read-only workflows. [#133518](https://github.com/openclaw/openclaw/pull/133518) — thanks to [@steipete](https://github.com/steipete)
      * Compaction accounting is simpler while writer fencing, usage, and context semantics remain intact. [#133521](https://github.com/openclaw/openclaw/pull/133521) — thanks to [@steipete](https://github.com/steipete)
      * Trusted release checks select entrypoints and build profiles supplied by older frozen candidates. [#133523](https://github.com/openclaw/openclaw/pull/133523) — thanks to [@RomneyDa](https://github.com/RomneyDa)
      * Installer-smoke validation derives package identity and size from a sealed frozen-candidate archive. [#133524](https://github.com/openclaw/openclaw/pull/133524) — thanks to [@RomneyDa](https://github.com/RomneyDa)
      * Release validation detects whether an older frozen target provides the Agent Plugin Gateway E2E script and fails closed unless omissions are explicitly allowed. [#133525](https://github.com/openclaw/openclaw/pull/133525) — thanks to [@RomneyDa](https://github.com/RomneyDa)
      * The shared-workspace deletion E2E fixture remains compatible with frozen targets by omitting an unrelated newer heartbeat field. [#133526](https://github.com/openclaw/openclaw/pull/133526) — thanks to [@RomneyDa](https://github.com/RomneyDa)
      * Terminal helpers perform fewer repeated control scans while preserving sanitization and visible output. [#133527](https://github.com/openclaw/openclaw/pull/133527) — thanks to [@steipete](https://github.com/steipete)
      * Memory-flush tests receive model capabilities up front and avoid fixture stalls without runtime changes. [#133532](https://github.com/openclaw/openclaw/pull/133532) — thanks to [@steipete](https://github.com/steipete)
      * Control UI avatar lists avoid redundant presence work while preserving visible presentation. [#133548](https://github.com/openclaw/openclaw/pull/133548) — thanks to [@steipete](https://github.com/steipete)
      * Multi-project Vitest cache reuse and freshness now have behavioral regression coverage. [#133554](https://github.com/openclaw/openclaw/pull/133554) — thanks to [@steipete](https://github.com/steipete)
      * A draft historical v2026.8.1 docs page and navigation were added for editorial review. [#133557](https://github.com/openclaw/openclaw/pull/133557) — thanks to [@hannesrudolph](https://github.com/hannesrudolph)
      * Four maturity-policy fixture cases clean up roughly 70 seconds faster with product behavior unchanged. [#133566](https://github.com/openclaw/openclaw/pull/133566) — thanks to [@steipete](https://github.com/steipete)
      * Control UI chat rendering and lifecycle ownership are simplified without intended visual or behavioral change. [#133567](https://github.com/openclaw/openclaw/pull/133567) — thanks to [@steipete](https://github.com/steipete)
      * Runner and Gateway health tests use isolated temporary session stores instead of interfering through machine-wide state. [#133568](https://github.com/openclaw/openclaw/pull/133568) — thanks to [@steipete](https://github.com/steipete)
      * Model-normalization and plugin-metadata tests share consolidated fixtures with runtime behavior unchanged. [#133570](https://github.com/openclaw/openclaw/pull/133570) — thanks to [@steipete](https://github.com/steipete)
      * Release validation waits for restored and cleared draft states, avoiding a slow-runner false failure. [#133575](https://github.com/openclaw/openclaw/pull/133575) — thanks to [@vincentkoc](https://github.com/vincentkoc)
      * Static provider catalog registration avoids eagerly loading live discovery code while preserving provider behavior. [#133579](https://github.com/openclaw/openclaw/pull/133579) — thanks to [@steipete](https://github.com/steipete)
      * Documentation sync tests cover the already-existing v2026.8.1 route across English and localized navigation. [#133581](https://github.com/openclaw/openclaw/pull/133581) — thanks to [@fuller-stack-dev](https://github.com/fuller-stack-dev)
      * The historical v2026.8.1 page gains a closed maintainer inventory completing its release record. [#133585](https://github.com/openclaw/openclaw/pull/133585) — thanks to [@hannesrudolph](https://github.com/hannesrudolph)
      * One workflow-sanity fixture cleans up synthetic processes roughly ten seconds faster while retaining failure and fallback assertions. [#133588](https://github.com/openclaw/openclaw/pull/133588) — thanks to [@steipete](https://github.com/steipete)
      * Release operators can reuse approved waived validation evidence without a false decision block. [#133589](https://github.com/openclaw/openclaw/pull/133589) — thanks to [@steipete](https://github.com/steipete)
      * Browser snapshot preparation reuses internal work while preserving targeting and screenshot output. [#133598](https://github.com/openclaw/openclaw/pull/133598) — thanks to [@steipete](https://github.com/steipete)
      * Source configuration imports avoid evaluating type-only modules. [#133604](https://github.com/openclaw/openclaw/pull/133604) — thanks to [@steipete](https://github.com/steipete)
      * Terminal table rendering performs less repeated internal formatting while producing the same output. [#133607](https://github.com/openclaw/openclaw/pull/133607) — thanks to [@steipete](https://github.com/steipete)
      * Release maintainers get faster source Gateway live shards and more deterministic cleanup checks. [#133609](https://github.com/openclaw/openclaw/pull/133609) — thanks to [@steipete](https://github.com/steipete)
      * Readers of the prior release page gain a link to its companion release story. [#133620](https://github.com/openclaw/openclaw/pull/133620) — thanks to [@hannesrudolph](https://github.com/hannesrudolph)
      * The prior release page no longer carries an obsolete draft warning. [#133623](https://github.com/openclaw/openclaw/pull/133623) — thanks to [@hannesrudolph](https://github.com/hannesrudolph)
      * Maintainer PR and release workflows preserve the selected protected GitHub CLI route and revalidate privileged evidence. [#133624](https://github.com/openclaw/openclaw/pull/133624) — thanks to [@steipete](https://github.com/steipete)
      * Autoreview no longer requires a local TruffleHog scan before dispatch. [#133626](https://github.com/openclaw/openclaw/pull/133626) — thanks to [@Patrick-Erichsen](https://github.com/Patrick-Erichsen)
      * SQLite schema comparison performs less repeated internal work without changing schemas or migrations. [#133627](https://github.com/openclaw/openclaw/pull/133627) — thanks to [@steipete](https://github.com/steipete)
      * Shared-worker repository tests retire completed files' test-only APIs after teardown. [#133631](https://github.com/openclaw/openclaw/pull/133631) — thanks to [@steipete](https://github.com/steipete)
      * A focused managed-process regression completes faster while preserving its cleanup checks. [#133634](https://github.com/openclaw/openclaw/pull/133634) — thanks to [@steipete](https://github.com/steipete)
      * Generated translation memory tracks the revised output-token terminology. [#133639](https://github.com/openclaw/openclaw/pull/133639) — thanks to [@openclaw-mantis](https://github.com/openclaw-mantis)
      * Repository agents route routine Gateway updates to the installation-specific workflow that owns them. [#133640](https://github.com/openclaw/openclaw/pull/133640) — thanks to [@steipete](https://github.com/steipete)
      * Parallel provider tests remove a duplicate normalization seam while retaining provider-boundary coverage. [#133644](https://github.com/openclaw/openclaw/pull/133644) — thanks to [@RomneyDa](https://github.com/RomneyDa)
      * Documentation spellcheck tests no longer mirror harmless wrapper source formatting. [#133645](https://github.com/openclaw/openclaw/pull/133645) — thanks to [@RomneyDa](https://github.com/RomneyDa)
      * Cron tests retain one authoritative Shanghai year-rollback regression instead of duplicate assertions. [#133646](https://github.com/openclaw/openclaw/pull/133646) — thanks to [@RomneyDa](https://github.com/RomneyDa)
      * Release navigation tests accept new version pages without losing route-shape checks. [#133652](https://github.com/openclaw/openclaw/pull/133652) — thanks to [@steipete](https://github.com/steipete)
      * Plugin registry reuse tests exercise the real active-registry seam. [#133656](https://github.com/openclaw/openclaw/pull/133656) — thanks to [@steipete](https://github.com/steipete)
      * Diagnostic state preparation avoids repeated internal scans while preserving labels and lifecycle tracking. [#133659](https://github.com/openclaw/openclaw/pull/133659) — thanks to [@steipete](https://github.com/steipete)
      * The prior release page links its feature summaries to maintained guides. [#133665](https://github.com/openclaw/openclaw/pull/133665) — thanks to [@hannesrudolph](https://github.com/hannesrudolph)
      * Routine release validation tests upgrades from the current stable package while preserving explicit historical replays. [#133666](https://github.com/openclaw/openclaw/pull/133666) — thanks to [@steipete](https://github.com/steipete)
      * Forwarded-message presentation uses consolidated internal display and avatar rules. [#133669](https://github.com/openclaw/openclaw/pull/133669) — thanks to [@steipete](https://github.com/steipete)
      * Compiler and managed-process test fixtures launch and stop with less overhead. [#133670](https://github.com/openclaw/openclaw/pull/133670) — thanks to [@steipete](https://github.com/steipete)
      * Generated configuration documentation baselines match already merged settings while retaining drift checks. [#133671](https://github.com/openclaw/openclaw/pull/133671) — thanks to [@steipete](https://github.com/steipete)
      * Post-upgrade Doctor tests and production use the same SQLite-backed installed-plugin index. [#133673](https://github.com/openclaw/openclaw/pull/133673) — thanks to [@steipete](https://github.com/steipete)
      * Release publication can consume strictly verified historical validation and npm preflight evidence after trusted tooling changes. [#133675](https://github.com/openclaw/openclaw/pull/133675) — thanks to [@steipete](https://github.com/steipete)
      * Release dependency audits can detect matching public upstream advisories omitted by npm while retaining partial-coverage evidence. [#133688](https://github.com/openclaw/openclaw/pull/133688) — thanks to [@steipete](https://github.com/steipete)
      * Opaque session-key normalization and bounded-map pruning perform less internal work without changing results. [#133691](https://github.com/openclaw/openclaw/pull/133691) — thanks to [@steipete](https://github.com/steipete)
      * Non-isolated runner fixtures are easier to review and cover in-flight mock registration. [#133696](https://github.com/openclaw/openclaw/pull/133696) — thanks to [@steipete](https://github.com/steipete)
      * CJK estimator tests live at one authoritative owner without duplicate coverage. [#133701](https://github.com/openclaw/openclaw/pull/133701) — thanks to [@steipete](https://github.com/steipete)
      * Browser relay lifecycle helpers and ingress tests have clearer internal ownership with preserved behavior. [#133706](https://github.com/openclaw/openclaw/pull/133706) — thanks to [@steipete](https://github.com/steipete)
      * Shared normalization reuses schema and JSON traversal preparation while preserving exact output and APIs. [#133710](https://github.com/openclaw/openclaw/pull/133710) — thanks to [@steipete](https://github.com/steipete)
      * No runtime change; redundant LINE adapter and webhook tests were removed while stronger behavior coverage remains. [#133712](https://github.com/openclaw/openclaw/pull/133712) — thanks to [@steipete](https://github.com/steipete)
      * No visible Control UI change; working-status rendering now has one internal presentation path. [#133713](https://github.com/openclaw/openclaw/pull/133713) — thanks to [@steipete](https://github.com/steipete)
      * Discord and Slack quiet-progress behavior is unchanged while duplicated rendering paths were consolidated. [#133714](https://github.com/openclaw/openclaw/pull/133714)
      * Maintainers get stricter evidence that non-isolated runner cleanup tests completed normally. [#133717](https://github.com/openclaw/openclaw/pull/133717)
      * Managed-worktree test fixtures run faster with no product behavior change. [#133726](https://github.com/openclaw/openclaw/pull/133726) — thanks to [@steipete](https://github.com/steipete)
      * Internal repository guards complete more reliably and with less repeated work. [#133732](https://github.com/openclaw/openclaw/pull/133732) — thanks to [@steipete](https://github.com/steipete)
      * Token-formatting tests now have one canonical owner with no runtime formatting change. [#133737](https://github.com/openclaw/openclaw/pull/133737)
      * Developers can build the macOS app with custom SwiftPM scratch paths without the frozen dependency-resolution failure. [#133740](https://github.com/openclaw/openclaw/pull/133740) — thanks to [@steipete](https://github.com/steipete)
      * QA Lab summary tests retain coverage with fewer duplicate file-reader cases. [#133741](https://github.com/openclaw/openclaw/pull/133741) — thanks to [@steipete](https://github.com/steipete)
      * Copilot and Teams test suites retain stronger behavior coverage after redundant smoke checks were removed. [#133745](https://github.com/openclaw/openclaw/pull/133745) — thanks to [@steipete](https://github.com/steipete)
      * Conflict-marker regression tests now exercise the same Git-backed scanner as workflow checks. [#133746](https://github.com/openclaw/openclaw/pull/133746) — thanks to [@steipete](https://github.com/steipete)
      * Apply-patch byte-preservation tests have one authoritative home with no runtime change. [#133748](https://github.com/openclaw/openclaw/pull/133748) — thanks to [@steipete](https://github.com/steipete)
      * Control UI chat internals are split into smaller owner modules while visible behavior remains unchanged. [#133751](https://github.com/openclaw/openclaw/pull/133751) — thanks to [@steipete](https://github.com/steipete)
      * Meeting-audio command splitting is shared internally with startup and failure behavior preserved. [#133754](https://github.com/openclaw/openclaw/pull/133754)
      * Duplicate macOS onboarding tests were removed while exact page-order coverage remains. [#133756](https://github.com/openclaw/openclaw/pull/133756)
      * Four duplicate core test fixtures were removed without changing runtime coverage. [#133759](https://github.com/openclaw/openclaw/pull/133759) — thanks to [@steipete](https://github.com/steipete)
      * Filesystem-safety default-mode tests no longer fail or erase inherited mode settings from developer and CI launchers. [#133760](https://github.com/openclaw/openclaw/pull/133760)
      * Control UI title and working-phrase tests run fewer duplicate renders with no interface change. [#133762](https://github.com/openclaw/openclaw/pull/133762)
      * Gateway startup performs less obsolete plugin discovery and repeated policy preparation. [#133763](https://github.com/openclaw/openclaw/pull/133763) — thanks to [@steipete](https://github.com/steipete)
      * The changelog gained a link to the already published 2026.8.1 release notes. [#133764](https://github.com/openclaw/openclaw/pull/133764)
      * An unreachable xAI web-search credential seam was removed with authentication behavior preserved. [#133765](https://github.com/openclaw/openclaw/pull/133765) — thanks to [@steipete](https://github.com/steipete)
      * Localization and plugin-verifier tests now exercise owning workflows instead of private exports. [#133768](https://github.com/openclaw/openclaw/pull/133768) — thanks to [@steipete](https://github.com/steipete)
      * Filesystem-safety boundary tests avoid duplicate repository scans while preserving coverage and order. [#133769](https://github.com/openclaw/openclaw/pull/133769) — thanks to [@steipete](https://github.com/steipete)
      * Duplicate agent transport, model, retry, and recovery fixtures were removed without runtime changes. [#133770](https://github.com/openclaw/openclaw/pull/133770) — thanks to [@steipete](https://github.com/steipete)
      * CLI parser tests now prove only their independently verifiable contract instead of self-comparing formatter output. [#133771](https://github.com/openclaw/openclaw/pull/133771) — thanks to [@steipete](https://github.com/steipete)
      * Release wizard rendering tests clean up progress handles and terminal listeners deterministically. [#133774](https://github.com/openclaw/openclaw/pull/133774)
      * Audio contract tests are smaller and clearer while retaining transcode and voice-format coverage. [#133779](https://github.com/openclaw/openclaw/pull/133779) — thanks to [@steipete](https://github.com/steipete)
      * The Control UI build fits its existing stylesheet budget after duplicate skeleton styles were consolidated. [#133787](https://github.com/openclaw/openclaw/pull/133787)
      * The already published 2026.8.1 notes and verified Mac ZIP were finalized in docs and Sparkle. [#133790](https://github.com/openclaw/openclaw/pull/133790)
      * WhatsApp formatting tests use simpler oracles while preserving all 41 expected formatting outcomes. [#133794](https://github.com/openclaw/openclaw/pull/133794) — thanks to [@steipete](https://github.com/steipete)
      * Control UI builds pass the existing stylesheet budget while attachment-card appearance remains intended to be unchanged. [#133796](https://github.com/openclaw/openclaw/pull/133796) — thanks to [@steipete](https://github.com/steipete)
      * The 2026.8.1 release page was updated with verified Mac ZIP and DMG links. [#133807](https://github.com/openclaw/openclaw/pull/133807) — thanks to [@steipete](https://github.com/steipete)
      * The slowest embedded-agent CI group is split into three balanced stripes for faster contributor feedback. [#133812](https://github.com/openclaw/openclaw/pull/133812) — thanks to [@steipete](https://github.com/steipete)
      * QA Lab deadline-unwind tests coordinate cleanup directly instead of relying on fixed sleeps. [#133816](https://github.com/openclaw/openclaw/pull/133816) — thanks to [@steipete](https://github.com/steipete)
      * QA release-verification fixtures preserve primary failures and finish owner shutdown before removing resources. [#133821](https://github.com/openclaw/openclaw/pull/133821)
      * Redundant helper probes were removed while consumer-level Gateway, provider, file, and Telegram coverage remains. [#133824](https://github.com/openclaw/openclaw/pull/133824)
      * Duplicate Control UI model-label tests were removed while canonical picker-state coverage remains. [#133826](https://github.com/openclaw/openclaw/pull/133826)
      * Focused environment-key tests start faster by importing their package owner directly. [#133830](https://github.com/openclaw/openclaw/pull/133830) — thanks to [@steipete](https://github.com/steipete)
      * Native scripts/pr review operations finish promptly instead of waiting for detached Git maintenance to drain. [#133832](https://github.com/openclaw/openclaw/pull/133832) — thanks to [@steipete](https://github.com/steipete)
      * Docker-pull retry tests use fewer fixtures and subprocesses while preserving production helper behavior. [#133833](https://github.com/openclaw/openclaw/pull/133833) — thanks to [@steipete](https://github.com/steipete)
      * Conflict-marker test fixtures are batched for faster feedback with scanner coverage preserved. [#133834](https://github.com/openclaw/openclaw/pull/133834) — thanks to [@steipete](https://github.com/steipete)
      * Docs-list CLI tests use fewer fixture setups and process launches while retaining supported frontmatter and heading coverage. [#133835](https://github.com/openclaw/openclaw/pull/133835) — thanks to [@steipete](https://github.com/steipete)
      * Session read and write renderers share trailing-empty-line trimming with visible output preserved. [#133837](https://github.com/openclaw/openclaw/pull/133837)
      * The formatter timeout test inspects one simulated failure instead of running it twice. [#133838](https://github.com/openclaw/openclaw/pull/133838) — thanks to [@steipete](https://github.com/steipete)
      * Retry-After rules have one scheduler-owned test suite while production retry behavior remains unchanged. [#133839](https://github.com/openclaw/openclaw/pull/133839) — thanks to [@steipete](https://github.com/steipete)
      * Queue diagnostics do less duplicate work while bounded session tracking remains correct. [#133840](https://github.com/openclaw/openclaw/pull/133840) — thanks to [@steipete](https://github.com/steipete)
      * CLI help caching has one internal owner with unchanged output and fallback behavior. [#133841](https://github.com/openclaw/openclaw/pull/133841) — thanks to [@steipete](https://github.com/steipete)
      * QR wrapper tests use smaller, faster loader-boundary fixtures without product changes. [#133846](https://github.com/openclaw/openclaw/pull/133846) — thanks to [@steipete](https://github.com/steipete)
      * The prior release-note link is labeled with its exact version. [#133851](https://github.com/openclaw/openclaw/pull/133851) — thanks to [@hannesrudolph](https://github.com/hannesrudolph)
      * Plugin lifecycle lease contention tests run deterministically with virtual time. [#133853](https://github.com/openclaw/openclaw/pull/133853) — thanks to [@steipete](https://github.com/steipete)
      * Process-heavy tooling checks are distributed more evenly in CI. [#133854](https://github.com/openclaw/openclaw/pull/133854) — thanks to [@steipete](https://github.com/steipete)
      * Gateway execution-notification suppression tests now exercise real authorization lifecycles. [#133859](https://github.com/openclaw/openclaw/pull/133859) — thanks to [@steipete](https://github.com/steipete)
      * Browser-extension Chromium proof avoids an unnecessary full declaration build while retaining its runtime assertions. [#133863](https://github.com/openclaw/openclaw/pull/133863) — thanks to [@steipete](https://github.com/steipete)
      * Release verification uses existing runners more efficiently and retains more diagnostics after credential preflight failure. [#133865](https://github.com/openclaw/openclaw/pull/133865) — thanks to [@steipete](https://github.com/steipete)
      * Signal control-lane tests run faster and deterministically without wall-clock waits. [#133866](https://github.com/openclaw/openclaw/pull/133866) — thanks to [@steipete](https://github.com/steipete)
      * Measured slow split test groups receive accurate CI planning weights. [#133867](https://github.com/openclaw/openclaw/pull/133867) — thanks to [@steipete](https://github.com/steipete)
      * Feishu concurrent-send tests prove independent behavior without real-time delays. [#133872](https://github.com/openclaw/openclaw/pull/133872) — thanks to [@steipete](https://github.com/steipete)
      * Redundant Control UI sanitizer, cache, and toast tests were consolidated. [#133874](https://github.com/openclaw/openclaw/pull/133874) — thanks to [@steipete](https://github.com/steipete)
      * IRC socket fixtures share lifecycle cleanup and no longer leak listeners after rejected setup. [#133875](https://github.com/openclaw/openclaw/pull/133875) — thanks to [@steipete](https://github.com/steipete)
      * Plugin slot-selection tests call the canonical owner directly with clearer local assertions. [#133876](https://github.com/openclaw/openclaw/pull/133876) — thanks to [@steipete](https://github.com/steipete)
      * Logging tests restore inherited environment values and no longer leak altered setup to later tests. [#133877](https://github.com/openclaw/openclaw/pull/133877) — thanks to [@steipete](https://github.com/steipete)
      * Slack thread-root predicate tests use a smaller equivalent decision matrix. [#133878](https://github.com/openclaw/openclaw/pull/133878) — thanks to [@steipete](https://github.com/steipete)
      * Logging subsystem tests wait for queued writes before deleting their temporary files. [#133879](https://github.com/openclaw/openclaw/pull/133879) — thanks to [@steipete](https://github.com/steipete)
      * Gradium speech tests use smaller equivalent environment and URL-rejection fixtures. [#133880](https://github.com/openclaw/openclaw/pull/133880) — thanks to [@steipete](https://github.com/steipete)
      * Restart verification and install attribution share the same Git commit-prefix rule. [#133887](https://github.com/openclaw/openclaw/pull/133887) — thanks to [@vincentkoc](https://github.com/vincentkoc)
      * Logging tests cover real tilde-path expansion while removing redundant checks. [#133890](https://github.com/openclaw/openclaw/pull/133890) — thanks to [@steipete](https://github.com/steipete)
      * Parallel extension tests verify the complete outbound User-Agent at the request boundary. [#133891](https://github.com/openclaw/openclaw/pull/133891) — thanks to [@steipete](https://github.com/steipete)
      * Two tests that only replayed native Promise behavior were removed. [#133892](https://github.com/openclaw/openclaw/pull/133892) — thanks to [@steipete](https://github.com/steipete)
      * Discord proxy request signal coverage no longer duplicates a successful request fixture. [#133893](https://github.com/openclaw/openclaw/pull/133893) — thanks to [@steipete](https://github.com/steipete)
      * Task-registry benchmark tests assert worker arguments at the real launch boundary. [#133894](https://github.com/openclaw/openclaw/pull/133894) — thanks to [@steipete](https://github.com/steipete)
      * Approval text preparation reuses redaction views and bounded checks while preserving decisions and prompt bytes. [#133904](https://github.com/openclaw/openclaw/pull/133904) — thanks to [@steipete](https://github.com/steipete)
      * The PR landing wrapper can materialize a verified origin/main trust anchor when worktree wrapper versions differ. [#133913](https://github.com/openclaw/openclaw/pull/133913) — thanks to [@steipete](https://github.com/steipete)
      * Brave Search tests import shared normalization owners directly. [#133914](https://github.com/openclaw/openclaw/pull/133914) — thanks to [@steipete](https://github.com/steipete)
      * Image helper tests use clearer direct assertions and input names. [#133915](https://github.com/openclaw/openclaw/pull/133915) — thanks to [@steipete](https://github.com/steipete)
      * Bound-account routing fixtures remove repeated envelope setup while preserving cases. [#133917](https://github.com/openclaw/openclaw/pull/133917) — thanks to [@steipete](https://github.com/steipete)
      * Mocked Control UI browser proof reruns retain each attempt's screenshots, recordings, reports, and diagnostics in separate directories. [#133918](https://github.com/openclaw/openclaw/pull/133918) — thanks to [@steipete](https://github.com/steipete)
      * Long mixed-format iMessage replies use less formatter work while preserving text and style ranges. [#133919](https://github.com/openclaw/openclaw/pull/133919) — thanks to [@steipete](https://github.com/steipete)
      * Direct and isolated plugin runtimes share one private LLM completion error constructor. [#133927](https://github.com/openclaw/openclaw/pull/133927) — thanks to [@vincentkoc](https://github.com/vincentkoc)
      * Workspace-icon test failures now identify a safe request category instead of only an excess fetch count. [#133942](https://github.com/openclaw/openclaw/pull/133942) — thanks to [@steipete](https://github.com/steipete)
      * Feishu retry tests exercise the production backoff schedule with virtual time and less duplication. [#133943](https://github.com/openclaw/openclaw/pull/133943) — thanks to [@steipete](https://github.com/steipete)
      * Cron delivery planning tests use focused routing inputs instead of oversized job fixtures. [#133944](https://github.com/openclaw/openclaw/pull/133944) — thanks to [@steipete](https://github.com/steipete)
      * Automatic documentation translation repairs rerun the checker-supplied validation that originally failed. [#133945](https://github.com/openclaw/openclaw/pull/133945) — thanks to [@steipete](https://github.com/steipete)
      * Control UI proof captures wait for rendered content, settled animation, and desktop layout before taking screenshots. [#133949](https://github.com/openclaw/openclaw/pull/133949) — thanks to [@steipete](https://github.com/steipete)
      * Daemon inspection tests share temporary-directory cleanup while retaining Linux and macOS coverage. [#133961](https://github.com/openclaw/openclaw/pull/133961) — thanks to [@steipete](https://github.com/steipete)
      * Microsoft speech tests share synthesis setup and table-drive equivalent voice cases. [#133966](https://github.com/openclaw/openclaw/pull/133966) — thanks to [@steipete](https://github.com/steipete)
      * Tool-manager tests restore the native OS module after Windows-specific cases. [#133967](https://github.com/openclaw/openclaw/pull/133967) — thanks to [@steipete](https://github.com/steipete)
      * Link-understanding runner tests consolidate guarded-fetch and timeout cases without losing coverage. [#133969](https://github.com/openclaw/openclaw/pull/133969) — thanks to [@steipete](https://github.com/steipete)
      * Broad tooling-routing assertions for directory and glob inputs share one test table. [#133971](https://github.com/openclaw/openclaw/pull/133971) — thanks to [@steipete](https://github.com/steipete)
      * Build-stamp tests import shared writers directly and are selected when the build-stamp script changes. [#133974](https://github.com/openclaw/openclaw/pull/133974) — thanks to [@steipete](https://github.com/steipete)
      * An unused SearXNG private test hook was removed while search behavior remains intact. [#133975](https://github.com/openclaw/openclaw/pull/133975) — thanks to [@steipete](https://github.com/steipete)
      * Package inventory filtering and subtree pruning share one externalized-plugin exclusion policy. [#133980](https://github.com/openclaw/openclaw/pull/133980) — thanks to [@steipete](https://github.com/steipete)
      * No shipped behavior change; three identical UTF-16-safe truncation paths now share one private implementation. [#133986](https://github.com/openclaw/openclaw/pull/133986) — thanks to [@vincentkoc](https://github.com/vincentkoc)
      * Package-patch guard tests share one fixture while retaining their production-policy coverage. [#133993](https://github.com/openclaw/openclaw/pull/133993) — thanks to [@steipete](https://github.com/steipete)
      * Stable-upgrade validation can exercise older installations without false fixture, readiness, or lifecycle failures. [#134002](https://github.com/openclaw/openclaw/pull/134002) — thanks to [@steipete](https://github.com/steipete)
      * Concrete plugin-state stores expose their always-present atomic update and conditional-delete capabilities at compile time. [#134005](https://github.com/openclaw/openclaw/pull/134005) — thanks to [@steipete](https://github.com/steipete)
      * Heartbeat queue selection and diagnostic snapshot collection perform fewer repeated scans without changing scheduling results. [#134007](https://github.com/openclaw/openclaw/pull/134007) — thanks to [@steipete](https://github.com/steipete)
      * Failure presentation avoids unnecessary provider classification when only an error code is needed or no model patch can be rolled back. [#134008](https://github.com/openclaw/openclaw/pull/134008) — thanks to [@steipete](https://github.com/steipete)
      * Session and trajectory exports share the same permissive entry-admission rule without changing stored or exported data. [#134011](https://github.com/openclaw/openclaw/pull/134011) — thanks to [@vincentkoc](https://github.com/vincentkoc)
      * Bounded-concurrency tests wait on direct task-start signals instead of polling. [#134013](https://github.com/openclaw/openclaw/pull/134013) — thanks to [@steipete](https://github.com/steipete)
      * Maintainer PR refreshes and CI preparation avoid shared-ref collisions and preserve required history, while Anthropic registration defers unused setup work. [#134014](https://github.com/openclaw/openclaw/pull/134014) — thanks to [@shakkernerd](https://github.com/shakkernerd)
      * SDK export-registration tests avoid duplicate stability cycles while retaining write and check-mode validation. [#134017](https://github.com/openclaw/openclaw/pull/134017) — thanks to [@steipete](https://github.com/steipete)
      * WhatsApp outbound-policy tests now exercise real target normalization with less mocked setup. [#134019](https://github.com/openclaw/openclaw/pull/134019) — thanks to [@steipete](https://github.com/steipete)
      * Package self-upgrade verification accepts the current structured setup-busy response without mistaking a successful upgrade for failure. [#134023](https://github.com/openclaw/openclaw/pull/134023) — thanks to [@steipete](https://github.com/steipete)
      * macOS release packaging avoids fixed DMG sizing, finds current dSYMs, and renders large release notes more efficiently. [#134027](https://github.com/openclaw/openclaw/pull/134027) — thanks to [@steipete](https://github.com/steipete)
      * Browser accessibility snapshot preparation avoids redundant allocations while preserving the exact snapshot and CDP contract. [#134028](https://github.com/openclaw/openclaw/pull/134028) — thanks to [@steipete](https://github.com/steipete)
      * Hosted macOS Swift tests use bounded concurrency to avoid both serial timeouts and unlimited resource pressure. [#134035](https://github.com/openclaw/openclaw/pull/134035) — thanks to [@vincentkoc](https://github.com/vincentkoc)
      * CI shares safe preparation and balances complete test workloads using measured costs, reducing repeated setup while preserving inventory and trust boundaries. [#134038](https://github.com/openclaw/openclaw/pull/134038) — thanks to [@steipete](https://github.com/steipete)
      * Package-distribution import tests batch equivalent fixtures while preserving every diagnostic and allowed-probe case. [#134039](https://github.com/openclaw/openclaw/pull/134039) — thanks to [@steipete](https://github.com/steipete)
      * Release operators can stage ClawHub packages and later verify parent authorization, package provenance, and public registry bytes after the parent release succeeds. [#134053](https://github.com/openclaw/openclaw/pull/134053) — thanks to [@shakkernerd](https://github.com/shakkernerd)
      * OpenGrep resolves one actual pull-request diff base and uses it consistently for history preparation and scanning. [#134054](https://github.com/openclaw/openclaw/pull/134054) — thanks to [@lsr911](https://github.com/lsr911), [@obviyus](https://github.com/obviyus), [@chelsealong](https://github.com/chelsealong), [@ZengWen-DT](https://github.com/ZengWen-DT), and [@SebTardif](https://github.com/SebTardif)
      * JSON parser tests live beside their implementation and avoid initializing unrelated runtime infrastructure. [#134080](https://github.com/openclaw/openclaw/pull/134080) — thanks to [@steipete](https://github.com/steipete)
      * Shared text tests use more direct assertions while retaining distinct behavior coverage. [#134082](https://github.com/openclaw/openclaw/pull/134082) — thanks to [@steipete](https://github.com/steipete)
      * Model-utility tests now follow the AI package implementation and avoid loading unrelated provider and transport runtime code. [#134086](https://github.com/openclaw/openclaw/pull/134086) — thanks to [@steipete](https://github.com/steipete)
      * Gateway scope-upgrade cancellation tests wait on explicit signals and fully verify both cancelled operations. [#134091](https://github.com/openclaw/openclaw/pull/134091) — thanks to [@steipete](https://github.com/steipete)
      * iOS signing tests exercise the real developer-team selector instead of a copied implementation. [#134092](https://github.com/openclaw/openclaw/pull/134092) — thanks to [@steipete](https://github.com/steipete)
      * A sandbox-policy prompt test derives provider and model identity from one prepared fixture, avoiding unrelated provider discovery. [#134094](https://github.com/openclaw/openclaw/pull/134094) — thanks to [@steipete](https://github.com/steipete)
      * Exa, MiniMax, and Moonshot provider tests use their colocated testing bindings with less duplicated fixture plumbing. [#134095](https://github.com/openclaw/openclaw/pull/134095) — thanks to [@steipete](https://github.com/steipete)
      * Hosted CI distributes three expensive lifecycle suites across separate tooling stripes while preserving the full inventory. [#134100](https://github.com/openclaw/openclaw/pull/134100) — thanks to [@steipete](https://github.com/steipete)
      * Bounded-concurrency tests fail quickly with task-specific startup diagnostics instead of waiting for the overall deadline. [#134102](https://github.com/openclaw/openclaw/pull/134102) — thanks to [@steipete](https://github.com/steipete)
      * Environment-option logging tests await the logger callback directly with bounded failure and cleaner mock isolation. [#134104](https://github.com/openclaw/openclaw/pull/134104) — thanks to [@steipete](https://github.com/steipete)
      * Terminal session renderers reuse one shared text-component implementation without changing their output. [#134105](https://github.com/openclaw/openclaw/pull/134105) — thanks to [@vincentkoc](https://github.com/vincentkoc)
      * Changed-files verification typechecks only compiler-proven consuming test graphs for isolated test changes and falls back conservatively otherwise. [#134107](https://github.com/openclaw/openclaw/pull/134107) — thanks to [@steipete](https://github.com/steipete)
      * APNs race tests use explicit bounded lifecycle signals for faster, clearer cancellation and session-error coverage. [#134108](https://github.com/openclaw/openclaw/pull/134108) — thanks to [@steipete](https://github.com/steipete)
      * HTTP response-reader tests use direct assertions while retaining success, error, and timeout behavior coverage. [#134112](https://github.com/openclaw/openclaw/pull/134112) — thanks to [@steipete](https://github.com/steipete)
      * Ratchet test fixtures set Git identity per invocation and avoid repeated repository setup. [#134117](https://github.com/openclaw/openclaw/pull/134117) — thanks to [@steipete](https://github.com/steipete)
      * Package compatibility tests call the capability-consent parser directly for parser-only cases while retaining CLI integration coverage. [#134118](https://github.com/openclaw/openclaw/pull/134118) — thanks to [@steipete](https://github.com/steipete)
      * Android localization tests share one catalog and now fail on any unexpected UI-literal scanner result. [#134121](https://github.com/openclaw/openclaw/pull/134121) — thanks to [@steipete](https://github.com/steipete)
      * Dated-TODO scanner tests verify each protected exclusion independently instead of allowing one leaked file to hide behind others. [#134122](https://github.com/openclaw/openclaw/pull/134122) — thanks to [@steipete](https://github.com/steipete)
      * The macOS native test suite removes one permissive duplicate shell smoke test while retaining stronger execution coverage. [#134123](https://github.com/openclaw/openclaw/pull/134123) — thanks to [@steipete](https://github.com/steipete)
      * CI retry-command tests share fixture counters and avoid redundant external reads while preserving all retry cases. [#134128](https://github.com/openclaw/openclaw/pull/134128) — thanks to [@steipete](https://github.com/steipete)
      * Docker resource-ceiling tests batch accepted stats formats while retaining exact peaks, rejection cases, and streaming safeguards. [#134133](https://github.com/openclaw/openclaw/pull/134133) — thanks to [@steipete](https://github.com/steipete)
      * Grep truncation tests now protect the advertised 500-character boundary exactly. [#134135](https://github.com/openclaw/openclaw/pull/134135) — thanks to [@steipete](https://github.com/steipete)
      * Nostr cursor recovery tests use virtual time and the production retry cadence without changing Nostr runtime behavior. [#134139](https://github.com/openclaw/openclaw/pull/134139) — thanks to [@steipete](https://github.com/steipete)
      * Release validation removes one redundant runner queue hop while retaining fail-closed candidate acquisition. [#134140](https://github.com/openclaw/openclaw/pull/134140) — thanks to [@steipete](https://github.com/steipete)
      * Teams Meetings prerequisite tests reuse module imports while preserving scenario isolation and runtime behavior. [#134146](https://github.com/openclaw/openclaw/pull/134146) — thanks to [@steipete](https://github.com/steipete)
      * Control UI tests remove duplicate coverage and strengthen timer-cleanup verification without changing production behavior. [#134147](https://github.com/openclaw/openclaw/pull/134147) — thanks to [@steipete](https://github.com/steipete)
      * iMessage RPC client tests avoid repeated module loading while preserving fresh per-case client and process fixtures. [#134149](https://github.com/openclaw/openclaw/pull/134149) — thanks to [@steipete](https://github.com/steipete)
      * Browser trash tests consolidate generic filesystem behavior under the shared SDK owner without changing trash authority. [#134151](https://github.com/openclaw/openclaw/pull/134151) — thanks to [@steipete](https://github.com/steipete)
      * Mistral realtime-transcription terminal tests observe actual WebSocket closure for more deterministic completion checks. [#134157](https://github.com/openclaw/openclaw/pull/134157) — thanks to [@steipete](https://github.com/steipete)
      * IMAP protocol tests wait for committed cursor state instead of indirect polling where cursor completion owns the signal. [#134162](https://github.com/openclaw/openclaw/pull/134162)
      * Telegram network tests isolate module reloads to WSL cache cases and directly protect cached detection behavior. [#134164](https://github.com/openclaw/openclaw/pull/134164) — thanks to [@steipete](https://github.com/steipete)
      * Telegram buffered-media tests await actual queued task completion rather than fixed sleeps. [#134171](https://github.com/openclaw/openclaw/pull/134171) — thanks to [@steipete](https://github.com/steipete)
      * DeepInfra and xAI video transport tests share provider imports while retaining fresh operations and real transport checks. [#134174](https://github.com/openclaw/openclaw/pull/134174) — thanks to [@steipete](https://github.com/steipete)
      * Plugin command consumers read from one canonical active registry without changing listing, matching, execution, or channel menus. [#134175](https://github.com/openclaw/openclaw/pull/134175)
      * Gateway session snapshot assembly performs less repeated copying while returning the same client-visible fields. [#134176](https://github.com/openclaw/openclaw/pull/134176) — thanks to [@steipete](https://github.com/steipete)
      * Chat text internals remove unsupported synthetic callback recovery and duplicate envelope metadata without changing valid chats. [#134184](https://github.com/openclaw/openclaw/pull/134184)
      * Model-catalog tests import pricing URLs from their owning module instead of an unused publisher forwarding layer. [#134205](https://github.com/openclaw/openclaw/pull/134205)
      * Channel-recovery test fixtures regain clean lint and type validation without changing recovery behavior. [#134207](https://github.com/openclaw/openclaw/pull/134207) — thanks to [@steipete](https://github.com/steipete)
      * Plugin lint uses a bounded extension-owned TypeScript project while preserving type-aware diagnostics. [#134216](https://github.com/openclaw/openclaw/pull/134216)
      * Release validation removes two redundant image-readiness jobs while image producers remain blocking prerequisites for consumers. [#134232](https://github.com/openclaw/openclaw/pull/134232) — thanks to [@steipete](https://github.com/steipete)
      * Auto-reply media tests avoid real provider catalog discovery by supplying prepared image-capability metadata. [#134245](https://github.com/openclaw/openclaw/pull/134245)
      * Warm agent turns perform less repeated policy, tool, model, and session preparation while retaining existing behavior. [#134246](https://github.com/openclaw/openclaw/pull/134246)
      * Tavily response parsing removes an unused wrapper while keeping the same bounds, errors, cancellation, and results. [#134255](https://github.com/openclaw/openclaw/pull/134255)
      * Plugin-status release verification expects the existing structured stale-registry diagnostic without weakening strict equality. [#134260](https://github.com/openclaw/openclaw/pull/134260) — thanks to [@steipete](https://github.com/steipete)
      * Signal transport-readiness tests exercise the real shared backoff behavior instead of a test-only wait implementation. [#134263](https://github.com/openclaw/openclaw/pull/134263) — thanks to [@steipete](https://github.com/steipete)
      * Abort-relay coverage moves to the fetch-timeout owner while retaining default-reason and listener-removal checks. [#134266](https://github.com/openclaw/openclaw/pull/134266) — thanks to [@steipete](https://github.com/steipete)
      * LLM Core event-stream tests batch exact sequence assertions while consuming and checking every ordered result. [#134270](https://github.com/openclaw/openclaw/pull/134270)
      * Package-root discovery stops scanning after the first valid root for single-root lookups while Doctor retains complete-inventory fallback. [#134271](https://github.com/openclaw/openclaw/pull/134271) — thanks to [@steipete](https://github.com/steipete)
      * GitHub activity helper tests remove artificial response delays while retaining the output-order regression proof. [#134273](https://github.com/openclaw/openclaw/pull/134273) — thanks to [@steipete](https://github.com/steipete)
      * Apple release source-check fixtures set Git identity directly on commit commands, reducing subprocesses without changing provenance guards. [#134277](https://github.com/openclaw/openclaw/pull/134277) — thanks to [@steipete](https://github.com/steipete)
      * Duration-format tests move to their formatter owner while session-warning behavior coverage remains intact. [#134280](https://github.com/openclaw/openclaw/pull/134280) — thanks to [@steipete](https://github.com/steipete)
      * Successful UI E2E runs record complete, hook-inclusive per-file timings for future shard planning. [#134283](https://github.com/openclaw/openclaw/pull/134283) — thanks to [@steipete](https://github.com/steipete)
      * Approval shutdown-race tests synchronize on callback entry instead of scheduler timing. [#134284](https://github.com/openclaw/openclaw/pull/134284) — thanks to [@steipete](https://github.com/steipete)
      * iOS Watch approval tests remove broad implementation mirrors while retaining focused identity, retry, and snapshot invariants. [#134285](https://github.com/openclaw/openclaw/pull/134285)
      * iOS localization tests remove a duplicate call-site inventory while retaining independent localization guards. [#134286](https://github.com/openclaw/openclaw/pull/134286)
      * Model catalogs and plugin-health summaries share one private first-record-wins deduplication helper without changing outputs. [#134287](https://github.com/openclaw/openclaw/pull/134287)
      * macOS profile tests drop a brittle source-layout invariant while executable isolation and readiness coverage remains. [#134288](https://github.com/openclaw/openclaw/pull/134288)
      * Feishu backoff classifier coverage moves to a clearly owned table-driven suite. [#134289](https://github.com/openclaw/openclaw/pull/134289)
      * Concurrent Gateway turns reuse stable prepared plugin metadata while continuing to evaluate current trust and activation. [#134290](https://github.com/openclaw/openclaw/pull/134290)
      * Windows runtime-import tests consolidate duplicate absolute-path coverage into one authoritative case. [#134291](https://github.com/openclaw/openclaw/pull/134291) — thanks to [@steipete](https://github.com/steipete)
      * Android and iOS release renderer tests use in-memory value fixtures while retaining separate file-backed and CLI coverage. [#134293](https://github.com/openclaw/openclaw/pull/134293) — thanks to [@steipete](https://github.com/steipete)
      * Node test shards use runtime-only prerequisite builds while full UI and SDK artifact validation remains separately owned. [#134294](https://github.com/openclaw/openclaw/pull/134294)
      * CLI startup benchmark state cases run in one ordered driver invocation with stronger HOME isolation checks. [#134296](https://github.com/openclaw/openclaw/pull/134296) — thanks to [@steipete](https://github.com/steipete)
      * Changed-file validation reports type failures before spending time on broad repository audits, while successful gates still run every audit. [#134298](https://github.com/openclaw/openclaw/pull/134298)
      * Maintainer PR operations keep repository-state queries joined to their locks and reject failed reads, while compiled-worker tests use less scaffolding. [#134300](https://github.com/openclaw/openclaw/pull/134300)
      * Bun release smoke can validate historical frozen packages that predate bundled @openclaw/ai without rewriting them or weakening malformed-package checks. [#134309](https://github.com/openclaw/openclaw/pull/134309)
      * xAI OAuth tests now prove runtime imports remain lazy until authentication work begins. [#134315](https://github.com/openclaw/openclaw/pull/134315)
      * Usage filtering prepares query predicates once per filter call while preserving results. [#134318](https://github.com/openclaw/openclaw/pull/134318)
      * Execution-policy tests avoid repeated real-module loading without changing policy behavior. [#134319](https://github.com/openclaw/openclaw/pull/134319)
      * LM Studio oversized-response tests reuse an immutable source chunk and retain the same size-limit behavior. [#134322](https://github.com/openclaw/openclaw/pull/134322)
      * Browser profile-allocation coverage is kept at the service boundary after duplicate demonstrations were removed. [#134324](https://github.com/openclaw/openclaw/pull/134324)
      * Release validation preserves Git update fixture identity through package post-install lifecycle checks. [#134328](https://github.com/openclaw/openclaw/pull/134328)
      * Conversation deadline tests now prove a reply was claimed and await the existing owner settlement. [#134335](https://github.com/openclaw/openclaw/pull/134335)
      * Plugin blob and keyed stores share option-policy implementation while retaining independent contracts. [#134339](https://github.com/openclaw/openclaw/pull/134339)
      * Profiler argument variants are tested at the parser with fewer subprocess launches. [#134345](https://github.com/openclaw/openclaw/pull/134345)
      * Periphery workflow tests reuse immutable parsed and compiled fixtures while keeping mutable state isolated. [#134350](https://github.com/openclaw/openclaw/pull/134350)
      * Capacity-group tests observe admission directly instead of polling timer turns. [#134355](https://github.com/openclaw/openclaw/pull/134355)
      * Media Core tests place existing expectations directly in each case for clearer maintenance. [#134356](https://github.com/openclaw/openclaw/pull/134356)
      * Linux companion bundles can be published from canonical stable release branches after validating the immutable tag SHA. [#134359](https://github.com/openclaw/openclaw/pull/134359)
      * Frozen extended-stable checks select an earlier published baseline from the same release line. [#134363](https://github.com/openclaw/openclaw/pull/134363)
      * CLI policy tests scope module reset and cleanup to the cases that install mocks. [#134364](https://github.com/openclaw/openclaw/pull/134364)
      * Materialized trusted PR anchors include the helper closure needed by review and landing workflows. [#134366](https://github.com/openclaw/openclaw/pull/134366)
      * Mobile release-reference tests share a cleanup-tracked repository lifecycle and retain existing validation. [#134367](https://github.com/openclaw/openclaw/pull/134367)
      * Native-link routing tests now expose modified-click and post-disposal listener failures. [#134370](https://github.com/openclaw/openclaw/pull/134370)
      * Compaction fallback tests drive retry clocks deterministically while retaining cancellation and exhaustion coverage. [#134371](https://github.com/openclaw/openclaw/pull/134371)
      * Non-secret Tool Search counter scopes use lowercase hexadecimal so redaction cannot alter persisted replay data. [#134372](https://github.com/openclaw/openclaw/pull/134372)
      * Tool Search ranks only documents present in term postings while preserving scores and ordering. [#134374](https://github.com/openclaw/openclaw/pull/134374)
      * Nostr metrics coverage now lives with its owner and redundant copied relay demonstrations are removed. [#134378](https://github.com/openclaw/openclaw/pull/134378)
      * WhatsApp profile-directory tests share one controlled import lifecycle while retaining three existing contracts. [#134382](https://github.com/openclaw/openclaw/pull/134382)
      * Deepgram realtime transcription tests await final provider callbacks and clean sessions on failure. [#134383](https://github.com/openclaw/openclaw/pull/134383)
      * ElevenLabs realtime transcription tests finish from provider events and reliably close sessions. [#134384](https://github.com/openclaw/openclaw/pull/134384)
      * Terminal regression fixtures retain stack-limit and broken-pipe coverage with less duplicate work. [#134387](https://github.com/openclaw/openclaw/pull/134387)
      * Tlon authorization tests now exercise the real resolver for defaults, allowlists, open policy, and precedence. [#134393](https://github.com/openclaw/openclaw/pull/134393)
      * OpenGrep tests reuse one immutable synthetic source history while preserving isolated shallow clones per scenario. [#134399](https://github.com/openclaw/openclaw/pull/134399)
      * OpenAI realtime transcription bounds tests reuse one terminal-history lifecycle without changing retained limits. [#134401](https://github.com/openclaw/openclaw/pull/134401)
      * Opt-in Control UI agent-file screenshots and videos are retained with other real-Gateway CI proof. [#134402](https://github.com/openclaw/openclaw/pull/134402)
      * Workboard avoids lifecycle lookups for filters that do not use them and retains failed-copy recordings more safely. [#134405](https://github.com/openclaw/openclaw/pull/134405)
      * Realtime Talk smoke tests advance mocked pacing and close clocks deterministically. [#134408](https://github.com/openclaw/openclaw/pull/134408)
      * Packaged upgrade validation initializes and authenticates the published baseline before adding candidate migration fixtures. [#134410](https://github.com/openclaw/openclaw/pull/134410)
      * Equivalent full, package, and CI builds can reuse validated plugin SDK declarations. [#134414](https://github.com/openclaw/openclaw/pull/134414)
      * Upgrade recovery decisions are consolidated under their established onboarding, reply, readiness, and Doctor owners. [#134415](https://github.com/openclaw/openclaw/pull/134415)
      * Package-derived Git release fixtures remain clean after transient lifecycle markers are retired. [#134417](https://github.com/openclaw/openclaw/pull/134417)
      * Gateway requests reuse prepared plugin model policies while preserving model and provider behavior. [#134419](https://github.com/openclaw/openclaw/pull/134419)
      * Release validators can verify canonical skill freshness and separate private tooling failures from candidate results. [#134420](https://github.com/openclaw/openclaw/pull/134420)
      * Release checks now expect Doctor's retired transcript archive and Plugin SDK cleanup only within its owned temporary root. [#134422](https://github.com/openclaw/openclaw/pull/134422)
      * Completed isolated CLI and cold-entrypoint QA runs cancel unused deadline timers promptly. [#134424](https://github.com/openclaw/openclaw/pull/134424)
      * System-event handling avoids snapshots for callers that need only status, receipts, or text. [#134433](https://github.com/openclaw/openclaw/pull/134433)
      * The shared Home and Ask OpenClaw assistant dock uses one clearer implementation while retaining saved layout compatibility. [#134435](https://github.com/openclaw/openclaw/pull/134435)
      * CI watcher fixture tests separate simulated polling time from real subprocess startup time. [#134436](https://github.com/openclaw/openclaw/pull/134436)
      * Upgrade verification seeds legacy cron jobs only after baseline configuration so the candidate migration is reached. [#134441](https://github.com/openclaw/openclaw/pull/134441)
      * Upgrade-survivor E2E proof keeps legacy fixtures offline until candidate ownership and verifies managed Gateway replacement. [#134442](https://github.com/openclaw/openclaw/pull/134442)
      * Successful Oxlint shards remain green when descendants exit during graceful cleanup, while forced termination still fails the job. [#134449](https://github.com/openclaw/openclaw/pull/134449)
      * Text-mode web fetches skip Readability HTML serialization that would be discarded. [#134452](https://github.com/openclaw/openclaw/pull/134452)
      * Selected macOS CI fixtures overlap within ownership boundaries and UI shards emit better timing and resource evidence. [#134459](https://github.com/openclaw/openclaw/pull/134459)
      * Transcript projection rebuilds reuse one prepared selected-path query per visit while preserving results. [#134465](https://github.com/openclaw/openclaw/pull/134465)
      * The macOS Codex queue-deadline test keeps its blocker alive and cleans it up after proving queued expiration. [#134469](https://github.com/openclaw/openclaw/pull/134469)
      * CI recovery guidance prioritizes retrying failed jobs on the original attached run before full redispatch. [#134474](https://github.com/openclaw/openclaw/pull/134474)
      * macOS CI can warm dependency caches and run isolated signing fixtures with bounded overlap. [#134476](https://github.com/openclaw/openclaw/pull/134476)
      * The maintainer PR wrapper uses the exact pinned anchor's dependency inventory for extraction and verification. [#134481](https://github.com/openclaw/openclaw/pull/134481)
      * Linked-worktree script typechecks resolve the typed pako dependency from root tooling. [#134484](https://github.com/openclaw/openclaw/pull/134484) — thanks to [@vincentkoc](https://github.com/vincentkoc)
      * Shared-helper tests now exercise the remote-platform and invalid-Tailscale paths their names describe. [#134485](https://github.com/openclaw/openclaw/pull/134485) — thanks to [@steipete](https://github.com/steipete)
      * Ordinary SQLite table schema inspection avoids an unnecessary normalization pass. [#134486](https://github.com/openclaw/openclaw/pull/134486) — thanks to [@steipete](https://github.com/steipete)
      * Borrowed agent-database reads perform less repeated admission work while preserving compatibility checks. [#134489](https://github.com/openclaw/openclaw/pull/134489) — thanks to [@steipete](https://github.com/steipete)
      * Codex extension startup-cleanup tests accept the launcher's expected signal-based termination. [#134491](https://github.com/openclaw/openclaw/pull/134491) — thanks to [@steipete](https://github.com/steipete)
      * CI reuses valid Swift build products, balances slow Node groups, and better uses Mac fixture capacity. [#134493](https://github.com/openclaw/openclaw/pull/134493) — thanks to [@steipete](https://github.com/steipete)
      * Declaration builds no longer inventory sibling managed worktrees or spread huge inventories through function arguments. [#134501](https://github.com/openclaw/openclaw/pull/134501) — thanks to [@steipete](https://github.com/steipete)
      * Setup migration staging and promotion share one fail-closed destination-path check. [#134503](https://github.com/openclaw/openclaw/pull/134503) — thanks to [@vincentkoc](https://github.com/vincentkoc)
      * Local Docker release package preparation skips one redundant structural validation while retaining identity checks. [#134505](https://github.com/openclaw/openclaw/pull/134505) — thanks to [@steipete](https://github.com/steipete)
      * Filesystem case detection and safe-bin trust reuse one tested low-level identity implementation. [#134511](https://github.com/openclaw/openclaw/pull/134511) — thanks to [@vincentkoc](https://github.com/vincentkoc)
      * Media alias tests now fail if provider recognition or normalization regresses. [#134513](https://github.com/openclaw/openclaw/pull/134513) — thanks to [@steipete](https://github.com/steipete)
      * Extended-stable validation recognizes the frozen candidate's legacy subagent live-test opt-in path. [#134518](https://github.com/openclaw/openclaw/pull/134518) — thanks to [@RomneyDa](https://github.com/RomneyDa)
      * iOS CI reuses Watch build products and more accurately recognizes finished process groups. [#134523](https://github.com/openclaw/openclaw/pull/134523) — thanks to [@steipete](https://github.com/steipete)
      * Frozen Docker candidates create their own agent roster so deletion smoke tests cross configuration generations. [#134526](https://github.com/openclaw/openclaw/pull/134526) — thanks to [@RomneyDa](https://github.com/RomneyDa)
      * Control UI checks shard across bounded workers and unchanged SDK compiler inputs can reuse validated declarations. [#134528](https://github.com/openclaw/openclaw/pull/134528) — thanks to [@steipete](https://github.com/steipete)
      * Declaration caches rebuild when the selected bundled-plugin graph changes. [#134529](https://github.com/openclaw/openclaw/pull/134529) — thanks to [@steipete](https://github.com/steipete)
      * Gateway-local authentication and status fallback share one loopback URL policy. [#134535](https://github.com/openclaw/openclaw/pull/134535) — thanks to [@vincentkoc](https://github.com/vincentkoc)
      * Native boundary caches ignore unrelated root managed-worktree churn while retaining relevant nested and aliased inputs. [#134538](https://github.com/openclaw/openclaw/pull/134538) — thanks to [@steipete](https://github.com/steipete)
      * Outbound target-normalization tests reuse the production-aligned registry generation lifecycle. [#134539](https://github.com/openclaw/openclaw/pull/134539) — thanks to [@steipete](https://github.com/steipete)
      * Plugin prerelease cancellation tests retain the selected agent identity. [#134540](https://github.com/openclaw/openclaw/pull/134540) — thanks to [@vincentkoc](https://github.com/vincentkoc)
      * Swift cache timestamp fixtures batch same-time updates into fewer processes. [#134543](https://github.com/openclaw/openclaw/pull/134543) — thanks to [@steipete](https://github.com/steipete)
      * Command-queue publication tests observe lane admission and task entry without imprecise timer flushing. [#134545](https://github.com/openclaw/openclaw/pull/134545) — thanks to [@steipete](https://github.com/steipete)
      * Nostr key-validation cases are consolidated under the current owner without duplicated coverage. [#134546](https://github.com/openclaw/openclaw/pull/134546) — thanks to [@steipete](https://github.com/steipete)
      * Nostr channel tests exercise the plugin contract OpenClaw actually registers. [#134551](https://github.com/openclaw/openclaw/pull/134551) — thanks to [@steipete](https://github.com/steipete)
      * Fireworks Kimi tests now prove the resolver applies the required reasoning override. [#134553](https://github.com/openclaw/openclaw/pull/134553) — thanks to [@steipete](https://github.com/steipete)
      * The CI shard-runner test now proves exactly two workers overlap without timer sleeps. [#134556](https://github.com/openclaw/openclaw/pull/134556) — thanks to [@steipete](https://github.com/steipete)
      * CI timing tests validate malformed fields through the schema owner while retaining loader behavior coverage. [#134563](https://github.com/openclaw/openclaw/pull/134563) — thanks to [@steipete](https://github.com/steipete)
      * Changed-benchmark parser errors are tested directly without five cold CLI launches. [#134565](https://github.com/openclaw/openclaw/pull/134565) — thanks to [@steipete](https://github.com/steipete)
      * MiniMax OAuth tests clear authorization and token-polling observation deadlines after settlement. [#134569](https://github.com/openclaw/openclaw/pull/134569) — thanks to [@steipete](https://github.com/steipete)
      * The standalone Firecrawl regression test checks the complete documented 1-to-100 count diagnostic. [#134571](https://github.com/openclaw/openclaw/pull/134571) — thanks to [@steipete](https://github.com/steipete)
      * Provider-flow tests initialize stateless owners once per isolated suite. [#134578](https://github.com/openclaw/openclaw/pull/134578) — thanks to [@steipete](https://github.com/steipete)
      * Live tests provide stronger evidence for Codex automatic compaction and OpenAI Responses checkpoint replay. [#134580](https://github.com/openclaw/openclaw/pull/134580) — thanks to [@steipete](https://github.com/steipete)
      * Claw bootstrap and workspace file actions share one strict path-containment policy. [#134582](https://github.com/openclaw/openclaw/pull/134582) — thanks to [@vincentkoc](https://github.com/vincentkoc)
      * Process-supervisor tests reuse factories while retaining fresh state and cleanup per case. [#134583](https://github.com/openclaw/openclaw/pull/134583) — thanks to [@steipete](https://github.com/steipete)
      * Frozen npm package validation uses bundled Telegram and trusted tooling instead of an absent external Matrix plugin. [#134592](https://github.com/openclaw/openclaw/pull/134592) — thanks to [@steipete](https://github.com/steipete)
      * Execution-identity audit admission and persistence share one canonical ordering policy. [#134597](https://github.com/openclaw/openclaw/pull/134597) — thanks to [@vincentkoc](https://github.com/vincentkoc)
      * Plugin SDK API-diff cancellation tests clear their completed observation deadline. [#134599](https://github.com/openclaw/openclaw/pull/134599) — thanks to [@steipete](https://github.com/steipete)
      * Azure Speech malformed-response tests clear their socket-close observation deadline after settlement. [#134602](https://github.com/openclaw/openclaw/pull/134602) — thanks to [@steipete](https://github.com/steipete)
      * Microsoft Teams parent-context tests combine sequential cache and deduplication lifecycle phases without losing assertions. [#134606](https://github.com/openclaw/openclaw/pull/134606) — thanks to [@steipete](https://github.com/steipete)
      * Media provider registry tests reuse their stateless graph while retaining per-case mock isolation. [#134609](https://github.com/openclaw/openclaw/pull/134609) — thanks to [@steipete](https://github.com/steipete)
      * Changelog attribution fixtures avoid redundant persistent Git configuration processes. [#134611](https://github.com/openclaw/openclaw/pull/134611) — thanks to [@steipete](https://github.com/steipete)
      * Memory tests no longer exercise retired copied hash and completion helpers. [#134618](https://github.com/openclaw/openclaw/pull/134618) — thanks to [@steipete](https://github.com/steipete)
      * Release ZIP fixtures use native checksums and directly prove corrupted payload bytes are rejected. [#134620](https://github.com/openclaw/openclaw/pull/134620) — thanks to [@steipete](https://github.com/steipete)
      * Native build-cache mutation tests restore one verified pristine generation instead of recompiling identical setup. [#134623](https://github.com/openclaw/openclaw/pull/134623) — thanks to [@steipete](https://github.com/steipete)
      * Memory Host SDK tests retain the stronger nested batch-error case and remove a duplicate. [#134624](https://github.com/openclaw/openclaw/pull/134624) — thanks to [@steipete](https://github.com/steipete)
      * Docker artifact fixtures precompute fixed image identities while retaining archive and post-load drift checks. [#134628](https://github.com/openclaw/openclaw/pull/134628) — thanks to [@steipete](https://github.com/steipete)
      * Frozen npm checks take static assets and the public SDK fixture from trusted sparse tooling while validating the frozen target. [#134629](https://github.com/openclaw/openclaw/pull/134629) — thanks to [@steipete](https://github.com/steipete)
      * OpenAI realtime transcription tests observe fake socket construction and own reconnect cleanup between cases. [#134635](https://github.com/openclaw/openclaw/pull/134635) — thanks to [@steipete](https://github.com/steipete)
      * Hermes migration reuses shared provider discovery and configuration-conflict plumbing. [#134640](https://github.com/openclaw/openclaw/pull/134640) — thanks to [@steipete](https://github.com/steipete)
      * Compact CI timing hints better balance six previously underestimated test groups. [2f18e20](https://github.com/openclaw/openclaw/commit/2f18e202d39bbfa882161d884eb4ecccc8733ca9)
      * Measured compact CI weights now outrank stale pinned hints when packing jobs. [1197203](https://github.com/openclaw/openclaw/commit/119720344a871a667f973d5e4eb2ead8935466ed) — thanks to [@steipete](https://github.com/steipete)
      * Application, package, extension, compatibility, and generated catalog metadata consistently identify the 2026.8.2 candidate. [47c295c](https://github.com/openclaw/openclaw/commit/47c295c89cf1459019d5bbf19397efd76c424554) — thanks to [@steipete](https://github.com/steipete)
      * Android version and store metadata plus generated Apple and Control UI locale catalogs align with the frozen 2026.8.2 cut. [5a40f47](https://github.com/openclaw/openclaw/commit/5a40f4756e6170914a28402a6845335ed2bcd09d)
      * The draft changelog is promoted into the dated 2026.8.2 release record with the full-notes link. [71901c9](https://github.com/openclaw/openclaw/commit/71901c92802baf52e4913f76107f3e2d75af2ec4)
      * Vercel CLI release materialization accepts the reviewed js-yaml 4.3.2 lock while retaining integrity guards. [e01f53c](https://github.com/openclaw/openclaw/commit/e01f53cfa01302f03fed4797b0715d11945ddd41)
      * Final changelog metadata records the image dependency security note, remaining caveat, endpoint, and 784-PR accounting. [0965053](https://github.com/openclaw/openclaw/commit/0965053fe6b9341776df147a6934b7485c60b5ca)
    </details>
  </Accordion>
</AccordionGroup>
