---
title: "v2026.10.3"
summary: "Update and Doctor repairs, Mac setup, conversation continuation, Muse Wonder and MiniMax fixes."
description: "OpenClaw v2026.10.3 patch release notes covering updates, saved data during repairs, Mac apps, model providers and plugins."
keywords:
  - OpenClaw
  - v2026.10.3
  - release notes
---

# v2026.10.3

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

OpenClaw 2026.10.3 fixes several update blockers, preserves saved sign-ins and memory files during affected Doctor repairs, and helps the Mac app connect during local setup, with fixes that let conversations continue after compaction or interrupted provider replies.

**Release scale:** 79 pull requests, 8 direct commits, and 97 contributors.

## Updates and Maintenance

- **Blocked updates.** Updates can clear eligible leftover recovery work and archive completed update records that previously blocked the next upgrade. Already-blocked older updaters need the [manual installation or recovery first step](https://docs.openclaw.ai/install/updating#package-publication-recovery); an [independent recovery helper](https://docs.openclaw.ai/install/updating#recover-a-completed-receipt-with-an-older-updater) can preserve the completed record and unblock the original updater. [#168388](https://github.com/openclaw/openclaw/pull/168388), [#169038](https://github.com/openclaw/openclaw/pull/169038), thanks to [@steipete](https://github.com/steipete), [@k94118](https://github.com/k94118), [@kimjinsuhh](https://github.com/kimjinsuhh), [@GoldenrodScript](https://github.com/GoldenrodScript), [@neilofneils404](https://github.com/neilofneils404), [@mkdelta221](https://github.com/mkdelta221), [@waynegault](https://github.com/waynegault), [@clawdgawd](https://github.com/clawdgawd), [@yoyo837](https://github.com/yoyo837), [@lishewen](https://github.com/lishewen), [@nukk-pain](https://github.com/nukk-pain), [@jullianatolentino](https://github.com/jullianatolentino), [@joshpetras](https://github.com/joshpetras) and [@creanet-64](https://github.com/creanet-64).
- **Interrupted 2026.9.8 updates.** The updated CLI can settle supported aborted records that prevented another update. This legacy recovery path warns when package contents could not be rechecked, so keep the recovery evidence and follow the [repair guidance](https://docs.openclaw.ai/cli/update/repair-and-recovery). [#169027](https://github.com/openclaw/openclaw/pull/169027), thanks to [@steipete](https://github.com/steipete) and [@chedong](https://github.com/chedong).
- **FreeBSD package recovery.** Recovery helpers produced by the fixed updater can repair or retire interrupted npm package updates on FreeBSD. Older helpers still support status only, and package recovery remains separate from restarting or verifying the Gateway. See the [updating guide](https://docs.openclaw.ai/install/updating). [#168775](https://github.com/openclaw/openclaw/pull/168775), thanks to [@steipete](https://github.com/steipete).
- **Leftover updater copies.** Doctor can remove an eligible abandoned npm updater copy that prevents the next update. Wait for updater workers to finish, run `openclaw doctor --fix` from the affected installation, then retry. Keep the recovery journal and its permissions intact; see [update troubleshooting](https://docs.openclaw.ai/install/update-troubleshooting). [#170170](https://github.com/openclaw/openclaw/pull/170170), thanks to [@steipete](https://github.com/steipete), [@sunnyshu0925](https://github.com/sunnyshu0925) and [@warhangel](https://github.com/warhangel).
- **Candidate checks with older updaters.** A newer candidate is no longer rejected solely because Doctor would update version, setup or migration bookkeeping. Real settings repairs and substantive migrations still follow their existing handling. See the [update guide](https://docs.openclaw.ai/cli/update). [#170195](https://github.com/openclaw/openclaw/pull/170195), thanks to [@steipete](https://github.com/steipete), [@maestrokling](https://github.com/maestrokling) and [@frxiaobei](https://github.com/frxiaobei).
- **Older Node updaters.** Updates avoid an unnecessary rollback when older and newer update processes measure time differently and mistake a valid update for a lost one. [#169915](https://github.com/openclaw/openclaw/pull/169915), thanks to [@vincentkoc](https://github.com/vincentkoc).
- **Updates requested in chat.** Fixed a Doctor cleanup check that falsely refused permission and rolled back chat-requested updates, sometimes leaving plugin upgrades unfinished. [#170218](https://github.com/openclaw/openclaw/pull/170218), thanks to [@RomneyDa](https://github.com/RomneyDa), [@hannesrudolph](https://github.com/hannesrudolph), [@ezimerman](https://github.com/ezimerman), [@yoyo837](https://github.com/yoyo837), [@aia007731-lab](https://github.com/aia007731-lab), [@justinforsound](https://github.com/justinforsound) and [@steipete](https://github.com/steipete).
- **Doctor during updates.** Doctor can continue after a later process check fails when it already verified the updater. If recording a newly started command fails, Doctor can clean it up after confirming it stopped, avoiding leftover work that blocks later repairs. [#169563](https://github.com/openclaw/openclaw/pull/169563), [#169665](https://github.com/openclaw/openclaw/pull/169665), thanks to [@RomneyDa](https://github.com/RomneyDa) and [@steipete](https://github.com/steipete).
- **Windows service accounts.** Updates recognize different Task Scheduler names for the same service account and can restart the Gateway without rewriting a service owned by somebody else. See the [update guide](https://docs.openclaw.ai/cli/update). [#169481](https://github.com/openclaw/openclaw/pull/169481), thanks to [@steipete](https://github.com/steipete).
- **Windows update and recovery paths.** Updater workers recognize short names and different capitalization for the same installation folder. Recovery snapshots also stop rejecting their own Windows temporary directory. The path correction requires the fixed updater to be installed before it starts the upgrade. [#169292](https://github.com/openclaw/openclaw/pull/169292), [#169397](https://github.com/openclaw/openclaw/pull/169397), thanks to [@RomneyDa](https://github.com/RomneyDa) and [@steipete](https://github.com/steipete).
- **pnpm service commands.** New or repaired Gateway service commands use pnpm's durable installation link, so replacing a versioned package folder does not break them. Update planning also recognizes installations reached through nested pnpm paths. Existing commands pinned to an old folder need repair or replanning; see [update methods](https://docs.openclaw.ai/install/updating/update-methods). [#170003](https://github.com/openclaw/openclaw/pull/170003), thanks to [@steipete](https://github.com/steipete), [@xilopaint](https://github.com/xilopaint) and [@k-sekula](https://github.com/k-sekula).
- **pnpm 12 launchers.** Fixed native pnpm updates keep the `openclaw` command usable after staging cleanup, including with a symlinked global bin folder. The updater must already contain this fix. Already-broken commands need manual repair or a [same-version pnpm reinstall](https://docs.openclaw.ai/install/updating/update-methods#alternative-manual-npm-pnpm-or-bun) after backup, using the same account and global directories. [#170131](https://github.com/openclaw/openclaw/pull/170131), thanks to [@steipete](https://github.com/steipete), [@goutamadwant](https://github.com/goutamadwant) and [@k-sekula](https://github.com/k-sekula).
- **Service refresh refusals.** An update can restart the preserved Gateway service after safely refusing to rewrite its definition. Restart still requires the existing definition and service ownership to pass revalidation, preserving customizations. See [how updates run](https://docs.openclaw.ai/cli/update/how-updates-run). [#169658](https://github.com/openclaw/openclaw/pull/169658), thanks to [@steipete](https://github.com/steipete).
- **Busy state databases.** Optional progress logging no longer aborts an update solely because the database is briefly busy, and update-history writes spend less time blocking Gateway work. Required recovery writes remain mandatory. These driver-side improvements require the fixed updater to start the upgrade; see the [update guide](https://docs.openclaw.ai/cli/update). [#168210](https://github.com/openclaw/openclaw/pull/168210), [#169283](https://github.com/openclaw/openclaw/pull/169283), thanks to [@steipete](https://github.com/steipete), [@jlapenna](https://github.com/jlapenna) and [@DonnieFi](https://github.com/DonnieFi).
- **Unrelated dependency copying.** Updates avoid copying dependencies from unrelated enclosing installations and scanning unrelated npm-global tools. The updater starting the upgrade must already contain these fixes; see the [updating guide](https://docs.openclaw.ai/install/updating). [#168927](https://github.com/openclaw/openclaw/pull/168927), [#169551](https://github.com/openclaw/openclaw/pull/169551), thanks to [@steipete](https://github.com/steipete), [@RomneyDa](https://github.com/RomneyDa), [@goutamadwant](https://github.com/goutamadwant) and [@holgergruenhagen](https://github.com/holgergruenhagen).
- **Configured update memory limits.** Update commands using captured service settings retain configured Node memory limits, including memory-only overrides from your shell. This requires the fixed updater to be installed before the upgrade starts; see the [update guide](https://docs.openclaw.ai/cli/update). [#168889](https://github.com/openclaw/openclaw/pull/168889), thanks to [@steipete](https://github.com/steipete) and [@bluet](https://github.com/bluet).
- **Repair outcomes and next steps.** Unfinished Doctor maintenance is reported as pending with a useful next action. Failures after data migration also point to the supported repair command. Keep the new installation and recovery snapshots, and follow warnings to keep the Gateway stopped while repair workers remain unsettled. See [update repair](https://docs.openclaw.ai/cli/update/repair-and-recovery#update-repair). [#167714](https://github.com/openclaw/openclaw/pull/167714), [#168905](https://github.com/openclaw/openclaw/pull/168905), thanks to [@steipete](https://github.com/steipete), [@ruicozibon](https://github.com/ruicozibon) and [@ezimerman](https://github.com/ezimerman).
- **Update handoff reports.** An already reported update outcome no longer produces a second misleading failure, and an update accepted by the background helper stays pending. Use the printed status and health commands to check its eventual result; see [restart handoff](https://docs.openclaw.ai/cli/update/how-updates-run#restart-handoff). [#168587](https://github.com/openclaw/openclaw/pull/168587), [#168993](https://github.com/openclaw/openclaw/pull/168993), thanks to [@steipete](https://github.com/steipete) and [@sayitfast](https://github.com/sayitfast).
- **Update warning details.** Recovery-copy warnings identify the affected database, while a failed candidate configuration read explains the error and leaves the service definition unchanged. See [recovery captures](https://docs.openclaw.ai/cli/update/repair-and-recovery#original-state-captures) and the [updating guide](https://docs.openclaw.ai/install/updating). [#169282](https://github.com/openclaw/openclaw/pull/169282), [#169284](https://github.com/openclaw/openclaw/pull/169284), thanks to [@DonnieFi](https://github.com/DonnieFi) and [@RomneyDa](https://github.com/RomneyDa).
- **Git update cleanup.** Temporary worktree cleanup continues when progress reporting fails, and the original update error remains visible alongside secondary diagnostics. If OpenClaw cannot confirm that update processes stopped, it keeps the recovery files and refuses to continue. This requires the fixed installed updater; see the [repair guide](https://docs.openclaw.ai/cli/update/repair-and-recovery). [#169454](https://github.com/openclaw/openclaw/pull/169454), thanks to [@hannesrudolph](https://github.com/hannesrudolph).
- **Migration warnings and verification timers.** Completed plugin migrations stop showing obsolete unfinished warnings. Package verification also keeps its deadline when the system clock changes. Genuine pending migrations still need attention; see the [repair guide](https://docs.openclaw.ai/cli/update/repair-and-recovery). [#169004](https://github.com/openclaw/openclaw/pull/169004), thanks to [@steipete](https://github.com/steipete), [@adenzhou1350](https://github.com/adenzhou1350) and [@wg-mojo](https://github.com/wg-mojo).
- **Recovery copies before repairs.** New recovery copies include older Canvas documents and Memory Core files before migration. Doctor and update recovery no longer reject a copy because scheduled background database maintenance changes files while it is being made. Update checks also work when the configured agent list is empty. Existing copies do not gain missing files retroactively. [#169436](https://github.com/openclaw/openclaw/pull/169436), [#170022](https://github.com/openclaw/openclaw/pull/170022), [c01331a](https://github.com/openclaw/openclaw/commit/c01331a76beb292d1c05f22409c71a20c5cc9085), thanks to [@RomneyDa](https://github.com/RomneyDa) and [@steipete](https://github.com/steipete).

## Messaging

- **Channel tools after restart.** Messaging accounts started or restarted by a chat or operator task keep using channel tools after that task finishes, with each later turn's permissions still enforced. [#159396](https://github.com/openclaw/openclaw/pull/159396), thanks to [@ceckert](https://github.com/ceckert), [@RomneyDa](https://github.com/RomneyDa), [@slinkoff](https://github.com/slinkoff), [@fuller-stack-dev](https://github.com/fuller-stack-dev) and [@sjf-oa](https://github.com/sjf-oa).
- **Messages already being sent.** Recovery scanning leaves a message with its active sender, preventing the reported race that left queued messages unsent. [#169010](https://github.com/openclaw/openclaw/pull/169010), thanks to [@RomneyDa](https://github.com/RomneyDa).
- **Steered conversations after restart.** Human conversations can resume after a correction and Gateway restart when their original authorized source survives. Already-failed sessions are not reopened, and missing sender permissions are not reconstructed. See [restart recovery](https://docs.openclaw.ai/gateway/restart-recovery). [#170252](https://github.com/openclaw/openclaw/pull/170252), thanks to [@steipete](https://github.com/steipete).

## Memory

- **Memory-file repairs.** Doctor preserves the original bytes when malformed UTF-8 prevents merging `MEMORY.md` and the older `memory.md`. Keep the originals or preserved archive, and repair or convert a copy to UTF-8 before retrying. See [workspace repair guidance](https://docs.openclaw.ai/gateway/doctor/workspace-and-dreams). [#169029](https://github.com/openclaw/openclaw/pull/169029), thanks to [@steipete](https://github.com/steipete) and [@wangmiao0668000666](https://github.com/wangmiao0668000666).

## Native Apps

- **On this Mac setup.** The Mac app can connect in eligible “On this Mac” setups that previously failed with “Gateway rejected auth”, with less unnecessary preparation and waiting. If a required new token cannot be saved, setup stops with a retryable error. See the [bundled Gateway guide](https://docs.openclaw.ai/platforms/mac/bundled-gateway). [#169403](https://github.com/openclaw/openclaw/pull/169403), thanks to [@steipete](https://github.com/steipete).
- **Mac reconnection after renewal.** The Mac app reconnects automatically after a trusted Gateway certificate renewal. Learned fingerprints can renew after normal trust checks; explicitly configured fingerprints stay fixed. See [remote connection guidance](https://docs.openclaw.ai/platforms/mac/remote). [#168151](https://github.com/openclaw/openclaw/pull/168151), thanks to [@steipete](https://github.com/steipete) and [@fuller-stack-dev](https://github.com/fuller-stack-dev).
- **Mac update and recovery checks.** The app recognizes its protected Bun Gateway command, addressing a cause of a stuck recovery screen despite a healthy Gateway. The protective launch option and ownership checks remain in place. [#170006](https://github.com/openclaw/openclaw/pull/170006), thanks to [@steipete](https://github.com/steipete), [@jokerman1302-eng](https://github.com/jokerman1302-eng), [@davidmackrory-byte](https://github.com/davidmackrory-byte) and [@josephsilvagnoli](https://github.com/josephsilvagnoli).

## Models and Providers

- **Muse Wonder.** Meta users can select Muse Wonder with text and image input and max thinking. Spark 1.3 Standard also supports max thinking and remains the setup default. The API supports Wonder Standard; max effort does not select Wonder Full. See the [Meta guide](https://docs.openclaw.ai/providers/meta). [#170232](https://github.com/openclaw/openclaw/pull/170232), thanks to [@RomneyDa](https://github.com/RomneyDa).
- **MiniMax M3.1 Flash Preview.** Eligible Token Plan or MiniMax Code users can select the preview model and choose low, medium, high, xhigh or max thinking effort. The preview defaults to max, including saved off or adaptive selections. M3 remains the default model. Missing published catalog rates do not mean free use; see the [MiniMax guide](https://docs.openclaw.ai/providers/minimax). [#160089](https://github.com/openclaw/openclaw/pull/160089), thanks to [@NianJiuZst](https://github.com/NianJiuZst), [@RomneyDa](https://github.com/RomneyDa), [@steipete](https://github.com/steipete), [@Takhoffman](https://github.com/Takhoffman), [@php737](https://github.com/php737), [@ns-spec](https://github.com/ns-spec), [@Hansen1018](https://github.com/Hansen1018) and [@olveww-dot](https://github.com/olveww-dot).
- **MiniMax sign-in renewal.** Global and CN OAuth sign-ins renew expired tokens at their issuing regional account endpoint. Older saved sign-ins and region changes require one new login with `openclaw models auth login --provider minimax-portal`. See the [MiniMax guide](https://docs.openclaw.ai/providers/minimax). [#160459](https://github.com/openclaw/openclaw/pull/160459), thanks to [@masatohoshino](https://github.com/masatohoshino), [@RomneyDa](https://github.com/RomneyDa), [@rongtianhua](https://github.com/rongtianhua) and [@mychataa](https://github.com/mychataa).
- **Replies after native compaction.** The next message waits for saved conversation history to become readable instead of failing while that history is rebuilding. See [OpenAI guidance](https://docs.openclaw.ai/providers/openai/advanced). [#169583](https://github.com/openclaw/openclaw/pull/169583), thanks to [@obviyus](https://github.com/obviyus).
- **Interrupted ChatGPT replies.** An unfinished ChatGPT reply can continue from the saved conversation when a normal connection close interrupts it, within the existing retry limits. See [model failover guidance](https://docs.openclaw.ai/concepts/model-failover). [#167512](https://github.com/openclaw/openclaw/pull/167512), thanks to [@ericcurtin](https://github.com/ericcurtin), [@obviyus](https://github.com/obviyus), [@mightyx](https://github.com/mightyx) and [@aleps001](https://github.com/aleps001).
- **Codex follow-up messages.** Compatible follow-ups can continue after failed conversation preparation while an existing background command keeps running. Incompatible permission or policy changes remain refused while protected work runs. [#169431](https://github.com/openclaw/openclaw/pull/169431), thanks to [@jjjhenriksen](https://github.com/jjjhenriksen) and [@RomneyDa](https://github.com/RomneyDa).
- **Switching back to OpenAI.** OpenAI models can use the existing built-in runtime when Codex is disabled and that runtime can run them. An explicitly configured Codex runtime still needs the Codex plugin enabled. [#169412](https://github.com/openclaw/openclaw/pull/169412), thanks to [@obviyus](https://github.com/obviyus).
- **Claude CLI tool discovery.** Claude CLI receives the registered OpenClaw tool names and guidance for replies that must be sent through a tool, reducing failed lookups. This guidance applies to tools actually available to the conversation. See the [CLI backend guide](https://docs.openclaw.ai/gateway/cli-backends). [#153032](https://github.com/openclaw/openclaw/pull/153032), thanks to [@kiranvk-2011](https://github.com/kiranvk-2011), [@RomneyDa](https://github.com/RomneyDa), [@lakemike](https://github.com/lakemike), [@philknows](https://github.com/philknows), [@destinedenergy](https://github.com/destinedenergy) and [@wbumgardner-max](https://github.com/wbumgardner-max).
- **Claude CLI session tools.** Later turns keep their authorized session, history and admin tools after the turn that started the shared connection ends. Each caller retains its own permissions and revocation checks. See the [CLI backend guide](https://docs.openclaw.ai/gateway/cli-backends). [#165432](https://github.com/openclaw/openclaw/pull/165432), thanks to [@Oldrich333](https://github.com/Oldrich333), [@Leit-motif](https://github.com/Leit-motif), [@steipete](https://github.com/steipete), [@XX441](https://github.com/XX441), [@aaajiao](https://github.com/aaajiao), [@alexph-dev](https://github.com/alexph-dev), [@Claynetic](https://github.com/Claynetic), [@N4DH](https://github.com/N4DH), [@Jeehut](https://github.com/Jeehut), [@S1gv4rd](https://github.com/S1gv4rd), [@arifarai](https://github.com/arifarai), [@davidevelyn](https://github.com/davidevelyn), [@marl0n](https://github.com/marl0n) and [@Mydudeclaps](https://github.com/Mydudeclaps).
- **Copilot prompt capacity.** Models with missing native limits can use the account's reported prompt capacity instead of the 128K estimate, while real limits and configured caps remain effective. Refresh discovery to replace previously cached estimates. [#156636](https://github.com/openclaw/openclaw/pull/156636), thanks to [@saju01](https://github.com/saju01), [@RomneyDa](https://github.com/RomneyDa), [@snotty](https://github.com/snotty), [@vinaycodeaxe](https://github.com/vinaycodeaxe), [@zhangguiping-xydt](https://github.com/zhangguiping-xydt) and [@Yigtwxx](https://github.com/Yigtwxx).
- **DeepSeek replies and tool actions.** Recognized internal tool markup stays out of replies, and managed turns can recover valid marked-up tool actions, including the `calls` wrapper. Direct provider calls and final replies filter the markup without recovering tools; malformed or unfinished recognized blocks stay hidden without execution. See the [DeepSeek guide](https://docs.openclaw.ai/providers/deepseek). [#169728](https://github.com/openclaw/openclaw/pull/169728), thanks to [@steipete](https://github.com/steipete) and [@TOMUIV](https://github.com/TOMUIV).
- **IPv6 provider fallback.** Guarded model requests can try a working IPv6 address when IPv4 is unreachable and Node address-family autoselection is enabled. Configured network security checks still apply. See [connectivity troubleshooting](https://docs.openclaw.ai/gateway/local-models#troubleshooting). [#168973](https://github.com/openclaw/openclaw/pull/168973), thanks to [@steipete](https://github.com/steipete), [@an2in](https://github.com/an2in), [@georgenaz](https://github.com/georgenaz), [@motookoyama](https://github.com/motookoyama) and [@orthogonalistic](https://github.com/orthogonalistic).

## Automations and Scheduling

- **Unchanged one-shot jobs.** Doctor stops making redundant recovery copies for one-shot jobs whose saved timestamps are already correct. Genuine repairs keep their backup protections. [#168938](https://github.com/openclaw/openclaw/pull/168938), thanks to [@harshitgupta31415](https://github.com/harshitgupta31415) and [@wg-mojo](https://github.com/wg-mojo).

## Plugins and Integrations

- **Blocked local plugin settings.** Doctor and updates preserve enablement, settings and policy for installed or linked plugins blocked by a path safety check. The plugin stays blocked until its path is repaired; see [blocked-plugin guidance](https://docs.openclaw.ai/gateway/doctor/config-migrations#blocked-local-plugins). [#168111](https://github.com/openclaw/openclaw/pull/168111), thanks to [@obviyus](https://github.com/obviyus).
- **oc-path file edits.** The opt-in oc-path plugin refuses `openclaw path set` edits on invalid UTF-8 before rewriting the file, preserving the original bytes. Back up and repair or convert the file before retrying. [#168491](https://github.com/openclaw/openclaw/pull/168491), thanks to [@wangmiao0668000666](https://github.com/wangmiao0668000666), [@yetval](https://github.com/yetval) and [@Takhoffman](https://github.com/Takhoffman).
- **Webhook callbacks during upgrades.** Existing official webhook-channel callbacks can be preserved before a deferred plugin replacement is activated, including the affected Microsoft Teams path. Authored callbacks and opt-outs remain respected; see [webhook migration guidance](https://docs.openclaw.ai/gateway/doctor/config-migrations#channel-webhook-listeners). [#169035](https://github.com/openclaw/openclaw/pull/169035), thanks to [@steipete](https://github.com/steipete) and [@sirius1024](https://github.com/sirius1024).
- **Native plugin catalogs.** Catalog changes avoid repeatedly loading an unchanged installed native plugin, removing that source of growing memory use. After a failed refresh, the next request can use its requested configuration. [#169272](https://github.com/openclaw/openclaw/pull/169272), [#169321](https://github.com/openclaw/openclaw/pull/169321), thanks to [@obviyus](https://github.com/obviyus), [@mcooks-cmd](https://github.com/mcooks-cmd), [@svdinu-jpg](https://github.com/svdinu-jpg), [@eduherranz](https://github.com/eduherranz) and [@RomneyDa](https://github.com/RomneyDa).
- **Commands on paired nodes.** An unchanged connected node keeps handling commands, requests and events while unrelated pairing information is updated or another device's pairing is being written. Actual revocation and token rotation still reject the old connection. [#169486](https://github.com/openclaw/openclaw/pull/169486), [#169575](https://github.com/openclaw/openclaw/pull/169575), thanks to [@steipete](https://github.com/steipete) and [@gisk0](https://github.com/gisk0).
- **Codex plugin compatibility.** Official external Codex packages older than 2026.9.7 are reported unavailable before they break replies. Eligible official updates follow the core release, and failures show useful reasons. Use `openclaw update repair` or `openclaw plugins update codex`; linked copies need their source updated or load-path override removed. Finish Doctor before restarting when migrations are pending. See [plugin update guidance](https://docs.openclaw.ai/cli/plugins/uninstall-and-update). [#170306](https://github.com/openclaw/openclaw/pull/170306), thanks to [@RomneyDa](https://github.com/RomneyDa), [@steipete](https://github.com/steipete) and [@ezimerman](https://github.com/ezimerman).
- **Plugin package repairs.** A replacement package can be saved while its data migration is unfinished, allowing Doctor to continue. **Finish `openclaw doctor --fix` before restarting or reloading the replacement.** Unavailable automatically selected official ClawHub versions can use trusted same-version npm packages, or keep compatible installed code with a retry warning. Removing the plugin's entry preserves its backup and pending migration obligations. See the [updating guide](https://docs.openclaw.ai/install/updating). [#170339](https://github.com/openclaw/openclaw/pull/170339), thanks to [@RomneyDa](https://github.com/RomneyDa), [@steipete](https://github.com/steipete), [@h6y3](https://github.com/h6y3), [@CodeForcer](https://github.com/CodeForcer), [@waynegault](https://github.com/waynegault) and [@rauf543](https://github.com/rauf543).

## Security and Privacy

- **Saved sign-ins during Doctor repairs.** An unreadable legacy auth file no longer causes the affected cleanup to discard saved OAuth profiles. Doctor identifies the file to inspect or restore before retrying, while unrelated repairs can continue. Previously deleted profiles and retired credential imports are not restored. See [Doctor state recovery guidance](https://docs.openclaw.ai/gateway/doctor/state-and-sessions). [#170256](https://github.com/openclaw/openclaw/pull/170256), thanks to [@steipete](https://github.com/steipete) and [@nosmile99](https://github.com/nosmile99).

## Quality-of-Life Improvements

- **Restart with an unreachable cloud worker.** The Gateway can stop or restart while deferring the stop of an unreachable stored cloud worker and reporting that deferral. The remote machine is not immediately stopped or deleted; later cleanup remains required. [#168907](https://github.com/openclaw/openclaw/pull/168907), thanks to [@steipete](https://github.com/steipete).

## Other Bug Fixes

- **Deleting an unfinished conversation.** Deleting a session records cancellation before stopping its unfinished reply, allowing chat clients to receive the cancelled status. [e115a6a](https://github.com/openclaw/openclaw/commit/e115a6ac739eb5a86292c177f1886115ea0cbb3a).
