---
title: "v2026.8.1 (AKA OpenClaw 2.0)"
summary: "A rebuilt web experience, simpler onboarding, stronger memory and session continuity, and a very large reliability pass across OpenClaw."
description: "Detailed OpenClaw v2026.8.1 release notes covering the new web UI, onboarding, updates, messaging, memory, skills, native apps, models, automations, browser and computer use, plugins, security, reliability, and maintainer changes."
keywords:
  - OpenClaw
  - v2026.8.1
  - release notes
  - OpenClaw 2.0
  - Control UI
  - onboarding
  - memory
---

# v2026.8.1 (AKA OpenClaw 2.0)

<Warning>
**Draft release notes**

This page is under active editorial review and does not represent the final v2026.8.1 release notes. Content, grouping, wording, and source lists may change.
</Warning>

This update touches every part of OpenClaw, including installation, messaging, memory, skills, models, automations, the browser and native apps, plugins, security, and a very long tail of fixes.

The sections below describe the user-facing result, with the complete PR and commit record available inside each subsection when someone wants to dig into it.

## The New Web UI

The rebuilt Control UI puts conversations at the centre of OpenClaw, with files, approvals, settings, and live work close to the conversation so you can set up a Claw, follow what it is doing, and keep working without bouncing between separate tools.

<AccordionGroup>

<Accordion title="Navigation and sidebar">

The web-based experience in OpenClaw now feels more familiar to anyone who uses apps like ChatGPT, Claude, Gemini, or Perplexity, with conversations in the sidebar and the one you are working in at the centre instead of opening on a separate Overview page. Settings and Inbox keep setup details and alerts out of the way until you need them, conversations can open in real browser tabs or windows, and even little things like the sidebar remembering its width make it feel less like developer tooling.

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

**Improvements**

- Make the Control UI sidebar resizable [#102491](https://github.com/openclaw/openclaw/pull/102491)
- Simplify desktop navigation and add Mac back and forward controls [#102808](https://github.com/openclaw/openclaw/pull/102808)
- Redesign Control UI navigation and add dockable session files [#103426](https://github.com/openclaw/openclaw/pull/103426)
- Restore sidebar navigation and simplify chat workspace chrome [#103561](https://github.com/openclaw/openclaw/pull/103561)
- Make Control UI chat-first and retire Overview [#104819](https://github.com/openclaw/openclaw/pull/104819)
- Put the active agent at the center of the sidebar footer [#105777](https://github.com/openclaw/openclaw/pull/105777)
- Show sessions only for the selected agent in the sidebar [#105832](https://github.com/openclaw/openclaw/pull/105832)
- Move agent-menu help links into a localized flyout [#106191](https://github.com/openclaw/openclaw/pull/106191)
- Dismiss Control UI attention chips until their state changes [#106223](https://github.com/openclaw/openclaw/pull/106223)
- Expand child sessions in the Control UI sidebar [#108838](https://github.com/openclaw/openclaw/pull/108838)
- Streamline Control UI sidebar navigation [#109694](https://github.com/openclaw/openclaw/pull/109694)
- Reorganize the Control sidebar around agents and work zones [#110259](https://github.com/openclaw/openclaw/pull/110259)
- Keep the OpenClaw custodian reachable after onboarding [#110269](https://github.com/openclaw/openclaw/pull/110269)
- Customize the sidebar with reordered pages, pinned chats, and icons [#110682](https://github.com/openclaw/openclaw/pull/110682)
- Rename chat creation to threads and simplify the sidebar [#110933](https://github.com/openclaw/openclaw/pull/110933)
- Show sessions that need attention in the sidebar [#111035](https://github.com/openclaw/openclaw/pull/111035)
- Simplify desktop sidebar controls and session presence [#112936](https://github.com/openclaw/openclaw/pull/112936)
- Add readable, stable Control UI session URLs [#113883](https://github.com/openclaw/openclaw/pull/113883)
- Remember each thread's Chat or Dashboard view [#114262](https://github.com/openclaw/openclaw/pull/114262)
- Make session links remember their view and support readable slugs [#114422](https://github.com/openclaw/openclaw/pull/114422)
- Show project identity first in the chat header [#121734](https://github.com/openclaw/openclaw/pull/121734)
- Align the sidebar and simplify owner presence [#123938](https://github.com/openclaw/openclaw/pull/123938)
- Make session references clickable with previews [#125014](https://github.com/openclaw/openclaw/pull/125014)
- improve(ui): unify sidebar footer and issues panel [#125070](https://github.com/openclaw/openclaw/pull/125070)
- Explain Control UI alerts through Ask OpenClaw [#126155](https://github.com/openclaw/openclaw/pull/126155)
- Compact mobile Control UI chat header [#126788](https://github.com/openclaw/openclaw/pull/126788)
- feat(ui): search sessions and catalogs from command palette [#128356](https://github.com/openclaw/openclaw/pull/128356)
- feat(ui): open sessions in real browser tabs and keep sidebar visibility per-tab [#128474](https://github.com/openclaw/openclaw/pull/128474)
- feat(ui): make mobile navigation a draggable drawer [#130319](https://github.com/openclaw/openclaw/pull/130319)
- Delay scrolling for truncated session titles [#104392](https://github.com/openclaw/openclaw/pull/104392)
- Paginate long Control UI session lists [#104617](https://github.com/openclaw/openclaw/pull/104617)
- Make the sidebar agent chip open the agent menu [#105861](https://github.com/openclaw/openclaw/pull/105861)
- Replace the sidebar More section with a popup menu [#105906](https://github.com/openclaw/openclaw/pull/105906)
- Remove duplicate New Session rows from the agent switcher [#107198](https://github.com/openclaw/openclaw/pull/107198)
- Merge mobile chat navigation into one title bar [#109635](https://github.com/openclaw/openclaw/pull/109635)
- Clarify Home, Pages, and identity actions in the sidebar [#110295](https://github.com/openclaw/openclaw/pull/110295)
- Render pinned sessions as headerless sidebar shortcuts [#110476](https://github.com/openclaw/openclaw/pull/110476)
- Keep large child-session trees compact in the sidebar [#110604](https://github.com/openclaw/openclaw/pull/110604)
- Remove resting age labels from the sidebar [#110800](https://github.com/openclaw/openclaw/pull/110800)
- Show named sidebar threads without the Subagent prefix [#110891](https://github.com/openclaw/openclaw/pull/110891)
- Simplify the sidebar footer and enlarge Settings [#110892](https://github.com/openclaw/openclaw/pull/110892)
- Give sidebar session titles the full row width [#110959](https://github.com/openclaw/openclaw/pull/110959)
- Complete the Control UI session-to-thread rename [#110973](https://github.com/openclaw/openclaw/pull/110973)
- Show active context and connection status in dashboard titles [#112929](https://github.com/openclaw/openclaw/pull/112929)
- Separate sidebar agent and account menus and fix presence tooltips [#113046](https://github.com/openclaw/openclaw/pull/113046)
- Unify the Control UI sidebar footer into an account card [#113156](https://github.com/openclaw/openclaw/pull/113156)
- Paginate each sidebar session section independently [#113343](https://github.com/openclaw/openclaw/pull/113343)
- Use session-link slugs to resolve short-ID collisions [#114486](https://github.com/openclaw/openclaw/pull/114486)
- Unify sidebar thread density and contrast [#115646](https://github.com/openclaw/openclaw/pull/115646)
- Unify Control UI navigation tabs [#115934](https://github.com/openclaw/openclaw/pull/115934)
- Clean up sidebar menus and hide session sections [#118217](https://github.com/openclaw/openclaw/pull/118217)
- Resolve short session links through the Gateway [#120512](https://github.com/openclaw/openclaw/pull/120512)
- Add Undo when hiding sidebar sections [#121385](https://github.com/openclaw/openclaw/pull/121385)
- Show a pencil beside sessions with unsent drafts [#121476](https://github.com/openclaw/openclaw/pull/121476)
- Remove the redundant bubble from pinned sessions [#121719](https://github.com/openclaw/openclaw/pull/121719)
- Declutter narrow Control UI session headers [#121935](https://github.com/openclaw/openclaw/pull/121935)
- Unify Control UI resize handles [#125066](https://github.com/openclaw/openclaw/pull/125066)
- improve(ui): make agent switching faster and more visual [#126968](https://github.com/openclaw/openclaw/pull/126968)
- feat(ui): let admins dismiss the sidebar update indicator [#128365](https://github.com/openclaw/openclaw/pull/128365)
- improve(ui): open short session links without extra lookup [#128778](https://github.com/openclaw/openclaw/pull/128778)
- refactor(ui): simplify sidebar hover stability [#128973](https://github.com/openclaw/openclaw/pull/128973)
- Move Sessions into Settings [73da94f](https://github.com/openclaw/openclaw/commit/73da94f)
- Clean up the sidebar’s More section [#102531](https://github.com/openclaw/openclaw/pull/102531)
- Add a keyboard shortcut for Control UI Settings [#103870](https://github.com/openclaw/openclaw/pull/103870)
- Separate the sidebar build label from the status dot [#104411](https://github.com/openclaw/openclaw/pull/104411)
- Polish Control UI sidebar overflow cues and alignment [#104586](https://github.com/openclaw/openclaw/pull/104586)
- Use filled pills for active sidebar sessions [#104680](https://github.com/openclaw/openclaw/pull/104680)
- Add help, community, and changelog links to the agent menu [#105850](https://github.com/openclaw/openclaw/pull/105850)
- Align sidebar headings and simplify row counts [#110448](https://github.com/openclaw/openclaw/pull/110448)
- Align parent session titles with the sidebar grid [#110459](https://github.com/openclaw/openclaw/pull/110459)
- Use a clear dashboard glyph in session rows [#111975](https://github.com/openclaw/openclaw/pull/111975)
- Clarify project hierarchy and activity in the sidebar [#112924](https://github.com/openclaw/openclaw/pull/112924)
- Quiet sidebar catalog headers [#113798](https://github.com/openclaw/openclaw/pull/113798)
- Add spacing between Coding session groups [#113840](https://github.com/openclaw/openclaw/pull/113840)
- Align Control UI sidebar sessions on one visual rail [#120473](https://github.com/openclaw/openclaw/pull/120473)
- Align sidebar session titles without empty icon columns [#123505](https://github.com/openclaw/openclaw/pull/123505)
- improve(ui): fold the sidebar update action into the Inbox [#129977](https://github.com/openclaw/openclaw/pull/129977)

**Bug fixes**

- fix: preserve unread reminder for open sessions [#129386](https://github.com/openclaw/openclaw/pull/129386)
- improve(ui): stop sidebar rows rearranging themselves on hover (#125820) [dea053e](https://github.com/openclaw/openclaw/commit/dea053e)
- Unify native and external sessions in one sidebar scroller [#104808](https://github.com/openclaw/openclaw/pull/104808)
- Open a clean start screen from the sidebar brand [#105046](https://github.com/openclaw/openclaw/pull/105046)
- Keep the Control UI shell fixed while inner panes scroll [#107102](https://github.com/openclaw/openclaw/pull/107102)
- Pin sessions dropped into the Pinned group [#107854](https://github.com/openclaw/openclaw/pull/107854)
- Keep sidebar session titles aligned [#111698](https://github.com/openclaw/openclaw/pull/111698)
- Synchronize Control UI sidebar preferences [#111929](https://github.com/openclaw/openclaw/pull/111929)
- Keep Threads and Worktrees tabs stationary [#112039](https://github.com/openclaw/openclaw/pull/112039)
- Restore scoped Control UI navigation from notification clicks [#113951](https://github.com/openclaw/openclaw/pull/113951)
- Show each agent's main session as Main Thread [#114120](https://github.com/openclaw/openclaw/pull/114120)
- Move the stale-client refresh prompt into the sidebar update card [#120483](https://github.com/openclaw/openclaw/pull/120483)
- Restore session terminology across the Control UI [#120667](https://github.com/openclaw/openclaw/pull/120667)
- Make Control UI session pinning respond immediately [#121254](https://github.com/openclaw/openclaw/pull/121254)
- Move Control UI selector checks to the trailing edge [#122158](https://github.com/openclaw/openclaw/pull/122158)
- Show configured agent names in the switcher [#122302](https://github.com/openclaw/openclaw/pull/122302)
- Show local project icons in the chat header [#122406](https://github.com/openclaw/openclaw/pull/122406)
- Keep running-session subtitles visible when opened [#123284](https://github.com/openclaw/openclaw/pull/123284)
- Restore saved sidebar ordering and tool-bound turn dispatch [#123530](https://github.com/openclaw/openclaw/pull/123530)
- Show sidebar warnings only for delivery problems [#125003](https://github.com/openclaw/openclaw/pull/125003)
- fix(ui): restore approved inbox panel layout after lazy-chunk split [#128201](https://github.com/openclaw/openclaw/pull/128201)
- fix(ui): restore floating sidebar attention cluster on collapsed nav [#128419](https://github.com/openclaw/openclaw/pull/128419)
- fix(ui): sidebar menus open in Safari [#128426](https://github.com/openclaw/openclaw/pull/128426)
- fix(ui): move limited access into Inbox [#128941](https://github.com/openclaw/openclaw/pull/128941)
- fix(ui): explain why updates are unavailable [#128958](https://github.com/openclaw/openclaw/pull/128958)
- fix: show unread activity on never-opened sessions [#128986](https://github.com/openclaw/openclaw/pull/128986)
- fix(ui): scope Inbox automation alerts to selected agent [#129379](https://github.com/openclaw/openclaw/pull/129379)
- fix(ui): model Inbox alert dismissibility [#129495](https://github.com/openclaw/openclaw/pull/129495)
- fix(ui): palette selections open the wrong agent and skip result rows [#130344](https://github.com/openclaw/openclaw/pull/130344)
- Collapse the desktop sidebar on the first click after resize [#102463](https://github.com/openclaw/openclaw/pull/102463)
- Keep long sidebar session lists scrollable in short windows [#104447](https://github.com/openclaw/openclaw/pull/104447)
- Hide pinned-session action until hover [#104622](https://github.com/openclaw/openclaw/pull/104622)
- Keep direct-message labels valid when peer IDs contain emoji [#104930](https://github.com/openclaw/openclaw/pull/104930)
- Show enabled plugin pages in the sidebar [#111995](https://github.com/openclaw/openclaw/pull/111995)
- Drop the sidebar agent switcher below its card [#113719](https://github.com/openclaw/openclaw/pull/113719)
- Align sidebar pin-editor checkmarks [#113848](https://github.com/openclaw/openclaw/pull/113848)
- Keep grouped-thread sidebar controls accessible [#113867](https://github.com/openclaw/openclaw/pull/113867)
- Show workspace agent identities in the sidebar [#114126](https://github.com/openclaw/openclaw/pull/114126)
- Anchor the thread-branches menu to its button [#115352](https://github.com/openclaw/openclaw/pull/115352)
- Keep slow sidebar build-link clicks working [#120334](https://github.com/openclaw/openclaw/pull/120334)
- Keep sidebar session text stable when actions appear [#120450](https://github.com/openclaw/openclaw/pull/120450)
- Normalize Control UI session links consistently [#120945](https://github.com/openclaw/openclaw/pull/120945)
- Distinguish sidebar group headers from sessions [#121372](https://github.com/openclaw/openclaw/pull/121372)
- Align Control UI sidebar menu rows [#121705](https://github.com/openclaw/openclaw/pull/121705)
- Prevent duplicate history entries for the active page [#123205](https://github.com/openclaw/openclaw/pull/123205)
- Preserve unread indicators for background chat sessions [#123247](https://github.com/openclaw/openclaw/pull/123247)
- Retry clearing unread badges after an unsent patch [#123252](https://github.com/openclaw/openclaw/pull/123252)
- Show command-palette chat search failures clearly [#124648](https://github.com/openclaw/openclaw/pull/124648)
- Align Control UI update-status card spacing [#124878](https://github.com/openclaw/openclaw/pull/124878)
- Keep unsent draft indicators visible on active sessions [#125649](https://github.com/openclaw/openclaw/pull/125649)
- Center session-row actions across two-line sidebar entries [#126041](https://github.com/openclaw/openclaw/pull/126041)
- Keep categorized child sessions visible in the sidebar [#126388](https://github.com/openclaw/openclaw/pull/126388)
- Remove duplicate mobile Control UI alerts [#127235](https://github.com/openclaw/openclaw/pull/127235)
- fix(ui): keep Home status clear of Pages editor [#127642](https://github.com/openclaw/openclaw/pull/127642)
- fix(ui): align page titles with page content [#127738](https://github.com/openclaw/openclaw/pull/127738)
- fix(ui): size agent menu grid to content [#127969](https://github.com/openclaw/openclaw/pull/127969)
- fix(ui): sidebar collapse keeps pointer tooltips quiet [#128070](https://github.com/openclaw/openclaw/pull/128070)
- fix(ui): delay build chip hovercard until intent [#128230](https://github.com/openclaw/openclaw/pull/128230)
- fix(ui): align Inbox popover tabs with hub tabs and theme the mascot icon [#128256](https://github.com/openclaw/openclaw/pull/128256)
- fix(ui): align sidebar unread dot with pull-request rows [#129477](https://github.com/openclaw/openclaw/pull/129477)
- fix(ui): do not count informational updates in Inbox badges [#129786](https://github.com/openclaw/openclaw/pull/129786)
- fix(ui): clarify the sidebar update action [#129813](https://github.com/openclaw/openclaw/pull/129813)
- fix(ui): keep mobile updates in Inbox [#129864](https://github.com/openclaw/openclaw/pull/129864)
- fix(ui): align sidebar dashboard badge sizes [#129933](https://github.com/openclaw/openclaw/pull/129933)
- fix(ui): keep limited-access dismissal through reconnect [#130127](https://github.com/openclaw/openclaw/pull/130127)

</details>

</Accordion>

<Accordion title="Starting and managing conversations">

Starting a new conversation is now a proper setup screen instead of a blank chat that inherits whatever defaults happen to be active. Before anything begins, you can choose the agent, model, reasoning level, opening message or image, workspace, and the computer that should run it, then use groups, transcript search, status, and batch actions to manage the work later. Supported Codex conversations can also branch from an earlier message without changing the original.

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

**Improvements**

- Make the Sessions page easier to scan and triage [#102523](https://github.com/openclaw/openclaw/pull/102523)
- Add drag-managed session groups to the Control UI [#102558](https://github.com/openclaw/openclaw/pull/102558)
- Add a session actions menu to the Sessions page [#102564](https://github.com/openclaw/openclaw/pull/102564)
- Add session worktree targeting and server-managed session groups [#103432](https://github.com/openclaw/openclaw/pull/103432)
- Redesign Control UI sessions with agent sections and targeted creation [#103498](https://github.com/openclaw/openclaw/pull/103498)
- Add a full-page New session screen with folder browsing [#104238](https://github.com/openclaw/openclaw/pull/104238)
- Multi-select sidebar sessions for batch actions [#104416](https://github.com/openclaw/openclaw/pull/104416)
- Add sidebar session indicators and stop schedules on archive [#104730](https://github.com/openclaw/openclaw/pull/104730)
- Unify the New Session and start-screen layouts [#105069](https://github.com/openclaw/openclaw/pull/105069)
- Browse Gateway and node folders from one picker [#105114](https://github.com/openclaw/openclaw/pull/105114)
- Replace New session target fields with compact menus [#105265](https://github.com/openclaw/openclaw/pull/105265)
- Search session transcripts from Control UI [#105635](https://github.com/openclaw/openclaw/pull/105635)
- Add images and model selection to new sessions [#107358](https://github.com/openclaw/openclaw/pull/107358)
- Add undo and restore flows for archived sessions [#110605](https://github.com/openclaw/openclaw/pull/110605)
- Fork Codex-backed sessions from a selected message [#111149](https://github.com/openclaw/openclaw/pull/111149)
- Show Claude Desktop custom groups in the session catalog [#111644](https://github.com/openclaw/openclaw/pull/111644)
- Combine new-thread folder and destination selection [#112035](https://github.com/openclaw/openclaw/pull/112035)
- Show real machine identity in the place picker [#112162](https://github.com/openclaw/openclaw/pull/112162)
- Show pull-request status on Claude catalog threads [#112180](https://github.com/openclaw/openclaw/pull/112180)
- Make archived sessions a durable, first-class workspace [#112554](https://github.com/openclaw/openclaw/pull/112554)
- Remember valid workspace and model choices for new sessions [#113884](https://github.com/openclaw/openclaw/pull/113884)
- Persist draggable Control UI sidebar sections [#113930](https://github.com/openclaw/openclaw/pull/113930)
- Group session locations and show running placement [#120804](https://github.com/openclaw/openclaw/pull/120804)
- Add CLI agent targets to the new-session picker [#120949](https://github.com/openclaw/openclaw/pull/120949)
- Start CLI agent sessions in the terminal from New Session [#121126](https://github.com/openclaw/openclaw/pull/121126)
- Browse and start sessions inside agent workspaces [#121417](https://github.com/openclaw/openclaw/pull/121417)
- Add session management to the chat header [#121452](https://github.com/openclaw/openclaw/pull/121452)
- Start sessions from registered projects [#121465](https://github.com/openclaw/openclaw/pull/121465)
- Sync new-session preferences and recents by identity [#121816](https://github.com/openclaw/openclaw/pull/121816)
- Clone GitHub projects from the session picker [#121818](https://github.com/openclaw/openclaw/pull/121818)
- Keep new-session destinations live and grouped [#122531](https://github.com/openclaw/openclaw/pull/122531)
- Split new-session setup into Where, What, and Detail [#122938](https://github.com/openclaw/openclaw/pull/122938)
- Save new-session defaults for folder groups [#123276](https://github.com/openclaw/openclaw/pull/123276)
- Add persistent emoji icons for sessions [#124034](https://github.com/openclaw/openclaw/pull/124034)
- Add named and custom session icons [#124629](https://github.com/openclaw/openclaw/pull/124629)
- Move live sessions between Gateway and runners [#125036](https://github.com/openclaw/openclaw/pull/125036)
- feat(ui): add session hovercards [#125068](https://github.com/openclaw/openclaw/pull/125068)
- Choose machine size when moving cloud sessions [#125292](https://github.com/openclaw/openclaw/pull/125292)
- Add an always-visible Sessions toolbar [#125690](https://github.com/openclaw/openclaw/pull/125690)
- Start and move sessions on paired devices from Control UI [#126187](https://github.com/openclaw/openclaw/pull/126187)
- feat(ui): configure capabilities before session start [AI-assisted] [#128081](https://github.com/openclaw/openclaw/pull/128081)
- feat: make full session actions available from chat header [#128995](https://github.com/openclaw/openclaw/pull/128995)
- Simplify the Sessions roster and move runtime details [#102664](https://github.com/openclaw/openclaw/pull/102664)
- Flatten Sessions page visual surfaces [#102760](https://github.com/openclaw/openclaw/pull/102760)
- Drag whole sidebar group headers to reorder [#103997](https://github.com/openclaw/openclaw/pull/103997)
- Add PR, editor, and group shortcuts to session menus [#104154](https://github.com/openclaw/openclaw/pull/104154)
- Match the New session draft to the chat composer [#104448](https://github.com/openclaw/openclaw/pull/104448)
- Collapse sidebar session groups by project [#109648](https://github.com/openclaw/openclaw/pull/109648)
- Quiet session rows while keeping last-active details [#110524](https://github.com/openclaw/openclaw/pull/110524)
- Add device-family icons and consistent platform labels to Places [#112209](https://github.com/openclaw/openclaw/pull/112209)
- Give unnamed Codex sessions readable sidebar labels [#112497](https://github.com/openclaw/openclaw/pull/112497)
- Show who archived collaborative sessions [#113116](https://github.com/openclaw/openclaw/pull/113116)
- Speed up multi-select session actions [#113623](https://github.com/openclaw/openclaw/pull/113623)
- Group Coding sessions by person and expose people filtering [#113943](https://github.com/openclaw/openclaw/pull/113943)
- Make Codex and Claude Code sidebar groups reorderable [#114074](https://github.com/openclaw/openclaw/pull/114074)
- Move transient session status beside row actions [#119560](https://github.com/openclaw/openclaw/pull/119560)
- Add an in-app session rename dialog [#121255](https://github.com/openclaw/openclaw/pull/121255)
- Add People sorting to the Control UI session sidebar [#121470](https://github.com/openclaw/openclaw/pull/121470)
- Hide system and probe sessions from the default sidebar [#121855](https://github.com/openclaw/openclaw/pull/121855)
- Show useful environment facts in the new-session picker [#122923](https://github.com/openclaw/openclaw/pull/122923)
- Add a compact keyboard-friendly session icon grid [#124335](https://github.com/openclaw/openclaw/pull/124335)
- Move session status to a fixed second row [#124960](https://github.com/openclaw/openclaw/pull/124960)
- Show Worktree defaults only for Git folders [#125280](https://github.com/openclaw/openclaw/pull/125280)
- Paginate grouped session lists for faster rendering [#125572](https://github.com/openclaw/openclaw/pull/125572)
- Show session ownership, PR, diff, and timing details on hover [#125678](https://github.com/openclaw/openclaw/pull/125678)
- Add compact sidebar rows and a preview toggle [#126190](https://github.com/openclaw/openclaw/pull/126190)
- feat(ui): add Person grouping mode for sessions sidebar and sessions page [#127346](https://github.com/openclaw/openclaw/pull/127346)
- improve(ui): simplify Sessions visual hierarchy [#127793](https://github.com/openclaw/openclaw/pull/127793)
- Quiet expanded child-session controls [#110470](https://github.com/openclaw/openclaw/pull/110470)
- Retire custom session icons and duplicate menu navigation [#121263](https://github.com/openclaw/openclaw/pull/121263)
- Copy session IDs from the Control UI [#124059](https://github.com/openclaw/openclaw/pull/124059)
- Label the New Session picker menus [#126045](https://github.com/openclaw/openclaw/pull/126045)
- feat(ui): link session hovercard identities to their activity feed [#128313](https://github.com/openclaw/openclaw/pull/128313)

**Bug fixes**

- Control UI catalog sessions select in place and resume Claude Desktop work [#106074](https://github.com/openclaw/openclaw/pull/106074)
- Add reasoning selection to new cloud sessions [#108679](https://github.com/openclaw/openclaw/pull/108679)
- Create session groups in an OpenClaw dialog [#121249](https://github.com/openclaw/openclaw/pull/121249)
- Guard session deletion against same-key replacements [#124097](https://github.com/openclaw/openclaw/pull/124097)
- Explain why a new session cannot start yet [#124613](https://github.com/openclaw/openclaw/pull/124613)
- Show progress cards from titled chat session links [#125733](https://github.com/openclaw/openclaw/pull/125733)
- fix(ui): show sessions while remote projects clone [#130192](https://github.com/openclaw/openclaw/pull/130192)
- Keep hidden sessions out of configured-only Control UI lists [#103101](https://github.com/openclaw/openclaw/pull/103101)
- Keep filtered sessions out of live Control UI lists [#103134](https://github.com/openclaw/openclaw/pull/103134)
- Keep session sidebar names readable and sections separated [#104062](https://github.com/openclaw/openclaw/pull/104062)
- Contain native session lists in the sidebar [#104587](https://github.com/openclaw/openclaw/pull/104587)
- Discover interactive Claude Code sessions in the session catalog [#105162](https://github.com/openclaw/openclaw/pull/105162)
- Preserve the first message when session startup is rejected [#105261](https://github.com/openclaw/openclaw/pull/105261)
- Clear stale worktree branches when switching repositories [#105331](https://github.com/openclaw/openclaw/pull/105331)
- Preserve manually entered worktree base branches [#105351](https://github.com/openclaw/openclaw/pull/105351)
- Keep sidebar menus above the resize divider [#105598](https://github.com/openclaw/openclaw/pull/105598)
- Keep Worktree create edits from disappearing during save [#105626](https://github.com/openclaw/openclaw/pull/105626)
- Lock New Session controls while creation is pending [#105702](https://github.com/openclaw/openclaw/pull/105702)
- Allow manual folders on exec-only nodes [#106012](https://github.com/openclaw/openclaw/pull/106012)
- Preserve collapsed groups when sidebar mutations fail [#106152](https://github.com/openclaw/openclaw/pull/106152)
- Show session catalog pagination failures [#106518](https://github.com/openclaw/openclaw/pull/106518)
- Let failed cloud drafts recover after worker teardown [#107759](https://github.com/openclaw/openclaw/pull/107759)
- Remove empty offline nodes from native session groups [#108620](https://github.com/openclaw/openclaw/pull/108620)
- Keep session catalogs on the Gateway-bound runtime [#109248](https://github.com/openclaw/openclaw/pull/109248)
- Generate dashboard titles from the first request [#111613](https://github.com/openclaw/openclaw/pull/111613)
- Dismiss the New Session model picker on outside click [#111988](https://github.com/openclaw/openclaw/pull/111988)
- Keep new worktree sessions in Coding during creation [#113834](https://github.com/openclaw/openclaw/pull/113834)
- Preserve readable session titles after sidebar changes [#114474](https://github.com/openclaw/openclaw/pull/114474)
- Keep Gateway metadata out of session titles [#114642](https://github.com/openclaw/openclaw/pull/114642)
- Explain empty session groups for the selected agent [#115407](https://github.com/openclaw/openclaw/pull/115407)
- Remove duplicate Gateway-native session hosts from the sidebar [#116285](https://github.com/openclaw/openclaw/pull/116285)
- Prevent hidden sessions from being bulk-deleted [#117015](https://github.com/openclaw/openclaw/pull/117015)
- Keep transcript search complete while active sessions reorder [#117016](https://github.com/openclaw/openclaw/pull/117016)
- Keep filtered session lists consistent across Control UI views [#117158](https://github.com/openclaw/openclaw/pull/117158)
- Archive active sessions after safely stopping their work [#120892](https://github.com/openclaw/openclaw/pull/120892)
- Make destructive sidebar session actions work in embedded WebViews [#121286](https://github.com/openclaw/openclaw/pull/121286)
- Move session-group rename and delete into app dialogs [#121738](https://github.com/openclaw/openclaw/pull/121738)
- Keep session titles stable during archive transitions [#121868](https://github.com/openclaw/openclaw/pull/121868)
- Make category moves back to Groups visibly reversible [#122303](https://github.com/openclaw/openclaw/pull/122303)
- Keep archived chats read-only after navigation [#122641](https://github.com/openclaw/openclaw/pull/122641)
- Remove archived sessions from the sidebar after navigation [#122876](https://github.com/openclaw/openclaw/pull/122876)
- Defer GitHub project cloning until Start Session [#122906](https://github.com/openclaw/openclaw/pull/122906)
- Remove duplicate adopted-session rows from the sidebar [#123250](https://github.com/openclaw/openclaw/pull/123250)
- Keep first-use session groups visible on connected clients [#123336](https://github.com/openclaw/openclaw/pull/123336)
- Keep adopted sessions visible when catalogs are hidden [#123481](https://github.com/openclaw/openclaw/pull/123481)
- Disambiguate multi-account session labels in Control UI [#124228](https://github.com/openclaw/openclaw/pull/124228)
- Use the selected model for managed-worktree titles [#124902](https://github.com/openclaw/openclaw/pull/124902)
- Add sidebar menus for child sessions [#125033](https://github.com/openclaw/openclaw/pull/125033)
- Show clean prose in session list previews [#125113](https://github.com/openclaw/openclaw/pull/125113)
- Hide OpenClaw-managed Codex sessions from the native catalog [#125424](https://github.com/openclaw/openclaw/pull/125424)
- Harden shared session menus and hovercards [#125478](https://github.com/openclaw/openclaw/pull/125478)
- Simplify remote New Session setup [#125720](https://github.com/openclaw/openclaw/pull/125720)
- Restore composite session link hovercards [#125968](https://github.com/openclaw/openclaw/pull/125968)
- Keep New Session folder pickers usable during overlapping menu hides [#126032](https://github.com/openclaw/openclaw/pull/126032)
- Show explicitly named CLI sessions in the sidebar [#126043](https://github.com/openclaw/openclaw/pull/126043)
- Restore session hovercards in the sidebar [#126222](https://github.com/openclaw/openclaw/pull/126222)
- Disable incompatible cloud destinations before session start [#126585](https://github.com/openclaw/openclaw/pull/126585)
- fix(sessions): render archive attribution as an event [AI-assisted] [#128206](https://github.com/openclaw/openclaw/pull/128206)
- fix: archived threads leave the sidebar immediately [#129153](https://github.com/openclaw/openclaw/pull/129153)
- fix(ui): stop cloud tasks from silently switching to local execution [#129440](https://github.com/openclaw/openclaw/pull/129440)
- fix: session owner filters reset after reload [#130143](https://github.com/openclaw/openclaw/pull/130143)
- fix(ui): restore person grouping for multiple session owners [#130326](https://github.com/openclaw/openclaw/pull/130326)
- fix(sessions): keep archived actions inert [#130642](https://github.com/openclaw/openclaw/pull/130642)
- fix(ui): preserve session identity through rename and group actions [#130936](https://github.com/openclaw/openclaw/pull/130936)
- fix(ui): group sessions by local calendar days [#130945](https://github.com/openclaw/openclaw/pull/130945)
- fix: worktree option missing when starting a session on a new GitHub repo [#131100](https://github.com/openclaw/openclaw/pull/131100)
- fix(ui): hide group submenu separator when New group is the only entry [#104370](https://github.com/openclaw/openclaw/pull/104370)
- Show the current branch for local worktrees [#105304](https://github.com/openclaw/openclaw/pull/105304)
- Preserve current Worktrees branch options [#105313](https://github.com/openclaw/openclaw/pull/105313)
- Explain disabled rows in the new-session folder picker [#105605](https://github.com/openclaw/openclaw/pull/105605)
- Keep sessions visible when deletion does nothing [#105778](https://github.com/openclaw/openclaw/pull/105778)
- Hide empty native session categories without masking errors [#106119](https://github.com/openclaw/openclaw/pull/106119)
- Keep Worktree operation errors visible [#106196](https://github.com/openclaw/openclaw/pull/106196)
- Show sidebar session action failures [#106435](https://github.com/openclaw/openclaw/pull/106435)
- Show custom-group creation failures on the Sessions page [#106451](https://github.com/openclaw/openclaw/pull/106451)
- Reject malformed numeric values in Sessions filters [#107072](https://github.com/openclaw/openclaw/pull/107072)
- Show older stored sessions by default [#108249](https://github.com/openclaw/openclaw/pull/108249)
- Hide placement badges for local sessions [#108615](https://github.com/openclaw/openclaw/pull/108615)
- Keep dashboard titles on the session's selected model and account [#111757](https://github.com/openclaw/openclaw/pull/111757)
- Keep archived sessions selected in the Control UI [#113882](https://github.com/openclaw/openclaw/pull/113882)
- Let users clear a stuck Worktree choice after Git lookup failure [#114947](https://github.com/openclaw/openclaw/pull/114947)
- Show and label the correct Threads page size [#116349](https://github.com/openclaw/openclaw/pull/116349)
- Stabilize session creator facets across row order [#116624](https://github.com/openclaw/openclaw/pull/116624)
- Show New thread instead of machine-generated session titles [#120160](https://github.com/openclaw/openclaw/pull/120160)
- Archive eligible sessions from mixed selections [#120835](https://github.com/openclaw/openclaw/pull/120835)
- Hide sidebar group controls after the pointer leaves [#121118](https://github.com/openclaw/openclaw/pull/121118)
- Align session-menu icons, labels, shortcuts, and chevrons [#121383](https://github.com/openclaw/openclaw/pull/121383)
- Keep Control UI worktree base branches stable [#121649](https://github.com/openclaw/openclaw/pull/121649)
- Remove the inert new-session sidebar row [#122259](https://github.com/openclaw/openclaw/pull/122259)
- Show nested session parents in Chat headers [#122335](https://github.com/openclaw/openclaw/pull/122335)
- Show resolved agent names when starting a session [#122463](https://github.com/openclaw/openclaw/pull/122463)
- Remove duplicate projects from the What picker [#123072](https://github.com/openclaw/openclaw/pull/123072)
- Explain folder browsing that requires admin access [#123074](https://github.com/openclaw/openclaw/pull/123074)
- Keep archive Undo working after navigation [#123749](https://github.com/openclaw/openclaw/pull/123749)
- Keep newly created sessions above Show more [#123828](https://github.com/openclaw/openclaw/pull/123828)
- Keep the session sidebar sort choice across reloads [#124277](https://github.com/openclaw/openclaw/pull/124277)
- Keep account suffixes out of stored chat labels [#125097](https://github.com/openclaw/openclaw/pull/125097)
- Show session hovercards beside every sidebar row [#125563](https://github.com/openclaw/openclaw/pull/125563)
- Stop sidebar tooltips from covering session progress cards [#125594](https://github.com/openclaw/openclaw/pull/125594)
- Dismiss session hovercards before menus open [#126345](https://github.com/openclaw/openclaw/pull/126345)
- Show channel avatars in session hovercards [#126372](https://github.com/openclaw/openclaw/pull/126372)
- Keep empty sidebar groups compact [#126565](https://github.com/openclaw/openclaw/pull/126565)
- Preserve sidebar status icons in compact rows [#126567](https://github.com/openclaw/openclaw/pull/126567)
- Dismiss sidebar session tooltip when its menu opens [#127044](https://github.com/openclaw/openclaw/pull/127044)
- fix: owner filter resets when gateway reconnects [#127676](https://github.com/openclaw/openclaw/pull/127676)
- fix(ui): keep unrelated activity out of session filters [#128540](https://github.com/openclaw/openclaw/pull/128540)
- fix(ui): align owner avatars with filter labels [#129133](https://github.com/openclaw/openclaw/pull/129133)
- fix(ui): keep generated session titles editable [#129529](https://github.com/openclaw/openclaw/pull/129529)
- fix(ui): prevent deleting replacement sessions after confirmation [#129628](https://github.com/openclaw/openclaw/pull/129628)
- fix(gateway): rank project picker GitHub search by relevance [#129752](https://github.com/openclaw/openclaw/pull/129752)
- fix(ui): show Draft mode once in new-session composer [#129858](https://github.com/openclaw/openclaw/pull/129858)
- fix(ui): clear stale transcript results when session filters change [#130378](https://github.com/openclaw/openclaw/pull/130378)
- fix(ui): avoid duplicate Draft control on desktop [#130842](https://github.com/openclaw/openclaw/pull/130842)

</details>

</Accordion>

<Accordion title="Chat and history">

Chat now feels much more alive while a Claw is working. Replies take on Markdown as they stream, older messages load without knocking you out of place, and recent conversations can appear before the Gateway finishes refreshing.

The composer is easier to use during long-running work. You can change the model, reasoning, or speed before sending, edit and reorder queued follow-ups, and use dictation without accidentally sending the result.

One of the more useful additions is `/btw`, which opens a separate multi-turn conversation so you can ask a side question without derailing the work or filling the main history. Faster initial history uses a bounded transcript snapshot stored unencrypted in the browser profile.

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

**Improvements**

- Show live microphone activity in Control UI Talk [#102559](https://github.com/openclaw/openclaw/pull/102559)
- Ask side questions from selected Control UI chat text [#104205](https://github.com/openclaw/openclaw/pull/104205)
- Redesign the chat welcome with animated Clawd and recent chats [#104276](https://github.com/openclaw/openclaw/pull/104276)
- Redesign queued messages as compact composer rows [#104445](https://github.com/openclaw/openclaw/pull/104445)
- Turn `/btw` answers into a floating multi-turn side chat [#104749](https://github.com/openclaw/openclaw/pull/104749)
- Auto-load older external-session history on scroll [#105209](https://github.com/openclaw/openclaw/pull/105209)
- Add automatic scroll-back to native chat sessions [#105688](https://github.com/openclaw/openclaw/pull/105688)
- Replace chat settings popover with focused controls [#105904](https://github.com/openclaw/openclaw/pull/105904)
- feat(ui): render streaming chat markdown live instead of plain text [#106062](https://github.com/openclaw/openclaw/pull/106062)
- Steer active-run follow-ups by default with a Queue opt-out [#108032](https://github.com/openclaw/openclaw/pull/108032)
- Add animated Clawd to the welcome screen [#108825](https://github.com/openclaw/openclaw/pull/108825)
- Add mascot reactions and first-reply confetti [#109118](https://github.com/openclaw/openclaw/pull/109118)
- Reply to specific WebChat messages with full context [#110791](https://github.com/openclaw/openclaw/pull/110791)
- Copy or download web-chat widgets as PNG images [#110992](https://github.com/openclaw/openclaw/pull/110992)
- Add hold-to-record dictation to the web chat composer [#111114](https://github.com/openclaw/openclaw/pull/111114)
- Drag files into the new-thread composer safely [#111530](https://github.com/openclaw/openclaw/pull/111530)
- Collapse long user prompts in chat [#111866](https://github.com/openclaw/openclaw/pull/111866)
- Add Reply and consistent chat message actions [#111968](https://github.com/openclaw/openclaw/pull/111968)
- Inspect chat images in an accessible in-app lightbox [#112442](https://github.com/openclaw/openclaw/pull/112442)
- Show queued messages across Control UI [#112649](https://github.com/openclaw/openclaw/pull/112649)
- Add a session rail and read-only session companion [#113698](https://github.com/openclaw/openclaw/pull/113698)
- Let Ask OpenClaw understand the current Control UI page [#114943](https://github.com/openclaw/openclaw/pull/114943)
- Add a composer menu for session capabilities [#115800](https://github.com/openclaw/openclaw/pull/115800)
- Expand truncated assistant messages inline [#117936](https://github.com/openclaw/openclaw/pull/117936)
- Add searchable model and separate effort pickers [#120495](https://github.com/openclaw/openclaw/pull/120495)
- Preview pasted text and documents directly in chat [#121400](https://github.com/openclaw/openclaw/pull/121400)
- Reorder queued chat messages from the composer [#121682](https://github.com/openclaw/openclaw/pull/121682)
- Edit queued Control UI messages in place [#121692](https://github.com/openclaw/openclaw/pull/121692)
- Make project file links easier to scan in Control UI chat [#121775](https://github.com/openclaw/openclaw/pull/121775)
- Separate model shortcuts from numeric search input [#122316](https://github.com/openclaw/openclaw/pull/122316)
- Unify channel and model pickers across the Control UI [#122964](https://github.com/openclaw/openclaw/pull/122964)
- Edit queued messages in place [#124298](https://github.com/openclaw/openclaw/pull/124298)
- improve(control-ui): restructure the composer as a multiline surface [#124301](https://github.com/openclaw/openclaw/pull/124301)
- Simplify Control UI chat composer actions [#124799](https://github.com/openclaw/openclaw/pull/124799)
- Load recent Control UI transcripts instantly from browser snapshots [#125128](https://github.com/openclaw/openclaw/pull/125128)
- Standardize interactive fenced code behavior [#125229](https://github.com/openclaw/openclaw/pull/125229)
- Add copy and fullscreen controls to chat tables [#125245](https://github.com/openclaw/openclaw/pull/125245)
- improve(control-ui): attach the message queue to the composer [#127823](https://github.com/openclaw/openclaw/pull/127823)
- Compact large pasted text in the chat composer [#100929](https://github.com/openclaw/openclaw/pull/100929)
- Make Talk and response stop controls easy to distinguish [#102786](https://github.com/openclaw/openclaw/pull/102786)
- Apply chat model-picker changes immediately [#102871](https://github.com/openclaw/openclaw/pull/102871)
- Compact WebChat model picker reasoning controls [#103127](https://github.com/openclaw/openclaw/pull/103127)
- Mark the default model on its catalog row [#103484](https://github.com/openclaw/openclaw/pull/103484)
- Render assistant replies as a flat web chat stream [#104016](https://github.com/openclaw/openclaw/pull/104016)
- Reduce chat metadata clutter with on-demand relative timestamps [#104035](https://github.com/openclaw/openclaw/pull/104035)
- Remove redundant avatars from direct chats [#104092](https://github.com/openclaw/openclaw/pull/104092)
- Center Control UI chats on a shared conversation frame [#104646](https://github.com/openclaw/openclaw/pull/104646)
- Make the Control UI send action visually primary [#106046](https://github.com/openclaw/openclaw/pull/106046)
- Blend chat headers with window chrome and restore outline icons [#109888](https://github.com/openclaw/openclaw/pull/109888)
- Add a microphone picker to the Control UI talk button [#111043](https://github.com/openclaw/openclaw/pull/111043)
- Format Markdown in Control UI chat notices [#113450](https://github.com/openclaw/openclaw/pull/113450)
- Show provider-ranked models first in the Control UI [#115380](https://github.com/openclaw/openclaw/pull/115380)
- Preview reasoning and provider choices as you explore [#115477](https://github.com/openclaw/openclaw/pull/115477)
- Clarify current and default models in the picker [#115632](https://github.com/openclaw/openclaw/pull/115632)
- Show runtime labels only for explicitly configured models [#120646](https://github.com/openclaw/openclaw/pull/120646)
- Improve Markdown table readability in Control UI [#121390](https://github.com/openclaw/openclaw/pull/121390)
- Remove repeated assistant avatars from main chat [#121405](https://github.com/openclaw/openclaw/pull/121405)
- GitHub link markers and URL wrapping in Control UI chat [#121728](https://github.com/openclaw/openclaw/pull/121728)
- Add privacy-conscious favicons to Control UI chat links [#121906](https://github.com/openclaw/openclaw/pull/121906)
- Unify Control UI system notices [#122144](https://github.com/openclaw/openclaw/pull/122144)
- Simplify the Control UI command picker [#122237](https://github.com/openclaw/openclaw/pull/122237)
- Align chat Markdown markers and disclosures [#122286](https://github.com/openclaw/openclaw/pull/122286)
- Give adjacent chat Markdown blocks consistent spacing [#122289](https://github.com/openclaw/openclaw/pull/122289)
- Open composer image attachments in the lightbox [#123693](https://github.com/openclaw/openclaw/pull/123693)
- Add an immediate-steer composer shortcut [#124826](https://github.com/openclaw/openclaw/pull/124826)
- Simplify chat widget preview chrome [#124883](https://github.com/openclaw/openclaw/pull/124883)
- Make Markdown transcripts easier to scan [#125242](https://github.com/openclaw/openclaw/pull/125242)
- Unify Control UI code-block styling and copy controls [#125249](https://github.com/openclaw/openclaw/pull/125249)
- Refine chat widget layout and image actions [#125250](https://github.com/openclaw/openclaw/pull/125250)
- Use a compact chevron for long user prompts [#125553](https://github.com/openclaw/openclaw/pull/125553)
- Compact bare GitHub links in chat [#125746](https://github.com/openclaw/openclaw/pull/125746)
- Show link favicons by default in Control UI chat [#126109](https://github.com/openclaw/openclaw/pull/126109)
- improve(control-ui): redesign composer slash and skill invocations [#129707](https://github.com/openclaw/openclaw/pull/129707)
- Control UI: unify composer attachment chip layout [#130312](https://github.com/openclaw/openclaw/pull/130312)
- Even out Control UI chat spacing and overlay hover details [#104201](https://github.com/openclaw/openclaw/pull/104201)
- Place assistant actions beside message metadata [#104884](https://github.com/openclaw/openclaw/pull/104884)
- Highlight the chat pane receiving a file drop [#105330](https://github.com/openclaw/openclaw/pull/105330)
- Restyle chat errors as compact centered alerts [#111681](https://github.com/openclaw/openclaw/pull/111681)
- Give Markdown lists more breathing room in chat [#111693](https://github.com/openclaw/openclaw/pull/111693)
- Show reconnecting chat messages as calm retry status [#111703](https://github.com/openclaw/openclaw/pull/111703)
- Show agent runtimes in model picker rows [#120617](https://github.com/openclaw/openclaw/pull/120617)
- Remove model and effort picker chevrons [#120673](https://github.com/openclaw/openclaw/pull/120673)
- Remove local-only chat message hiding [#120681](https://github.com/openclaw/openclaw/pull/120681)
- Blend the Control UI chat header into the transcript [#122220](https://github.com/openclaw/openclaw/pull/122220)
- Shorten bare GitHub issue and pull request links in chat [#122285](https://github.com/openclaw/openclaw/pull/122285)
- Make the chat effort slider easier to see and use [#123380](https://github.com/openclaw/openclaw/pull/123380)
- Give queued messages a distinct outbox icon [#124842](https://github.com/openclaw/openclaw/pull/124842)
- Simplify Markdown table styling in Control UI transcripts [#125219](https://github.com/openclaw/openclaw/pull/125219)
- Refine transcript status and duplicate markers [#125237](https://github.com/openclaw/openclaw/pull/125237)
- Simplify Control UI message bubbles and action chrome [#125241](https://github.com/openclaw/openclaw/pull/125241)
- Group microphone controls apart from the Stop action [#125669](https://github.com/openclaw/openclaw/pull/125669)
- improve(ui): even out transcript turn and run block spacing [#128298](https://github.com/openclaw/openclaw/pull/128298)
- improve(ui): remove redundant reset buttons from chat controls [#128562](https://github.com/openclaw/openclaw/pull/128562)
- improve(ui): simplify chat image preview overlay [#129990](https://github.com/openclaw/openclaw/pull/129990)

**Bug fixes**

- Keep streaming Talk transcripts readable [#102573](https://github.com/openclaw/openclaw/pull/102573)
- Queue Control UI chat input during reconnects [#102781](https://github.com/openclaw/openclaw/pull/102781)
- Apply selected chat settings before sending [#103253](https://github.com/openclaw/openclaw/pull/103253)
- Keep steered messages visible until chat history catches up [#111540](https://github.com/openclaw/openclaw/pull/111540)
- Keep Codex commentary after Control UI runs [#111648](https://github.com/openclaw/openclaw/pull/111648)
- Preserve repeated pending messages during chat history refresh [#113690](https://github.com/openclaw/openclaw/pull/113690)
- Keep loading attachments with their original chat [#114568](https://github.com/openclaw/openclaw/pull/114568)
- Explain chat-only model limits before tool-dependent requests [#116730](https://github.com/openclaw/openclaw/pull/116730)
- Preserve accurate and accessible Control UI chat state [#116929](https://github.com/openclaw/openclaw/pull/116929)
- Restore queued Control UI messages to the correct agent [#117084](https://github.com/openclaw/openclaw/pull/117084)
- Make Control UI chat delivery and recovery consistent [#117387](https://github.com/openclaw/openclaw/pull/117387)
- Allow WebChat follow-ups after background transcript updates [#121332](https://github.com/openclaw/openclaw/pull/121332)
- Preserve staged chat attachments across remounts [#121577](https://github.com/openclaw/openclaw/pull/121577)
- Preserve WebChat reply context across reloads [#122169](https://github.com/openclaw/openclaw/pull/122169)
- Ground session companion answers in selected-session history [#122329](https://github.com/openclaw/openclaw/pull/122329)
- fix(ui): support slash commands and skills inside normal drafts [#122425](https://github.com/openclaw/openclaw/pull/122425)
- Restore the searchable composer model picker [#123090](https://github.com/openclaw/openclaw/pull/123090)
- Add a visible way to reveal earlier session history [#124866](https://github.com/openclaw/openclaw/pull/124866)
- Keep streamed replies ordered around steering messages [#125197](https://github.com/openclaw/openclaw/pull/125197)
- fix(codex): prevent steered answers from disappearing or crossing threads [#128257](https://github.com/openclaw/openclaw/pull/128257)
- Harden Control UI BTW side-question interactions [c071fcf](https://github.com/openclaw/openclaw/commit/c071fcf)
- Keep live side-chat questions intact across panes and preserve multiline drafts [c48cbab](https://github.com/openclaw/openclaw/commit/c48cbab)
- prevent local microphone feedback in realtime Talk [e4450ae](https://github.com/openclaw/openclaw/commit/e4450ae)
- Control UI speed picker becomes one fast-mode toggle [#103104](https://github.com/openclaw/openclaw/pull/103104)
- Show queued Control UI follow-ups only once [#105603](https://github.com/openclaw/openclaw/pull/105603)
- Send idle stop words as normal chat messages [#105742](https://github.com/openclaw/openclaw/pull/105742)
- Keep submitted prompts visible during active runs [#106001](https://github.com/openclaw/openclaw/pull/106001)
- Apply model-dependent chat settings in the right order [#106095](https://github.com/openclaw/openclaw/pull/106095)
- Add selected-text Copy to chat message actions [#107137](https://github.com/openclaw/openclaw/pull/107137)
- Let all WebChat content use the configured width [#107261](https://github.com/openclaw/openclaw/pull/107261)
- Align new-session composer controls with chat [#107862](https://github.com/openclaw/openclaw/pull/107862)
- Explicit Control UI steering overrides the stored queue mode [#108121](https://github.com/openclaw/openclaw/pull/108121)
- Make Control UI follow Gateway queue policy [#109441](https://github.com/openclaw/openclaw/pull/109441)
- Prevent appended Control UI chat rows from overlapping [#110525](https://github.com/openclaw/openclaw/pull/110525)
- Rename local-only message deletion to Hide [#110801](https://github.com/openclaw/openclaw/pull/110801)
- Hide late-media scaffolding from transcripts [#111293](https://github.com/openclaw/openclaw/pull/111293)
- Prevent stray file drops from leaving Control UI [#111531](https://github.com/openclaw/openclaw/pull/111531)
- Prevent duplicate and lingering steered-message chips [#111610](https://github.com/openclaw/openclaw/pull/111610)
- Keep full chat transcripts outside dashboard sessions [#111640](https://github.com/openclaw/openclaw/pull/111640)
- Keep Control UI sends visible through the history handoff [#112567](https://github.com/openclaw/openclaw/pull/112567)
- Steer active Codex tasks from the Control UI [#112858](https://github.com/openclaw/openclaw/pull/112858)
- Stop commentary repeating after task steering [#112859](https://github.com/openclaw/openclaw/pull/112859)
- Render managed chat images once under Control UI base paths [#113163](https://github.com/openclaw/openclaw/pull/113163)
- Keep chat rows aligned when switching UI faces [#113356](https://github.com/openclaw/openclaw/pull/113356)
- Let new-session prompts grow before scrolling [#113842](https://github.com/openclaw/openclaw/pull/113842)
- Restore new-session prompts and retry state in Control UI [#114377](https://github.com/openclaw/openclaw/pull/114377)
- Keep first Control UI messages visible [#114498](https://github.com/openclaw/openclaw/pull/114498)
- Keep chat reasoning controls stable during refresh [#115009](https://github.com/openclaw/openclaw/pull/115009)
- Keep streamed media pinned to the newest chat response [#115060](https://github.com/openclaw/openclaw/pull/115060)
- Preserve strongest-first model ordering after live discovery [#115406](https://github.com/openclaw/openclaw/pull/115406)
- Preserve provider model ranking in startup catalogs [#115425](https://github.com/openclaw/openclaw/pull/115425)
- Hide credential profiles from Control UI model labels [#115480](https://github.com/openclaw/openclaw/pull/115480)
- Keep startup errors beside the Ask OpenClaw composer [#115720](https://github.com/openclaw/openclaw/pull/115720)
- Keep message-hide confirmations inside the viewport [#115928](https://github.com/openclaw/openclaw/pull/115928)
- Harden Control UI chat and session interactions [#115967](https://github.com/openclaw/openclaw/pull/115967)
- fix(gateway): deliver queued WebChat replies after source completion [#116649](https://github.com/openclaw/openclaw/pull/116649)
- Preserve chat attachments and visible run ownership [#116752](https://github.com/openclaw/openclaw/pull/116752)
- Keep failed chat commands with their session [#116947](https://github.com/openclaw/openclaw/pull/116947)
- Centralize Control UI chat outbox state [#117284](https://github.com/openclaw/openclaw/pull/117284)
- Prevent chat rows from overlapping after panel resize [#117687](https://github.com/openclaw/openclaw/pull/117687)
- Restore sandbox image previews in Control UI [#117689](https://github.com/openclaw/openclaw/pull/117689)
- Align expanded message actions with visible text [#117983](https://github.com/openclaw/openclaw/pull/117983)
- Queue separate repeated Control UI messages [#118884](https://github.com/openclaw/openclaw/pull/118884)
- Deliver Control UI steering into active turns [#119287](https://github.com/openclaw/openclaw/pull/119287)
- Keep active-run steering reliable during tool work [#120083](https://github.com/openclaw/openclaw/pull/120083)
- Keep Control UI questions visible without losing reading position [#120695](https://github.com/openclaw/openclaw/pull/120695)
- Rank slash commands by search relevance [#120790](https://github.com/openclaw/openclaw/pull/120790)
- Keep browser annotation context with its screenshot [#120848](https://github.com/openclaw/openclaw/pull/120848)
- Make the microphone picker show one truthful state [#121397](https://github.com/openclaw/openclaw/pull/121397)
- Stabilize Control UI transcript search layout and focus [#121910](https://github.com/openclaw/openclaw/pull/121910)
- Keep reasoning effort aligned after model switches [#122125](https://github.com/openclaw/openclaw/pull/122125)
- Always show complete stored assistant responses [#122207](https://github.com/openclaw/openclaw/pull/122207)
- Keep the new-session identity anchored while typing [#122242](https://github.com/openclaw/openclaw/pull/122242)
- Keep short JSON replies visible in Control UI [#122313](https://github.com/openclaw/openclaw/pull/122313)
- Simplify and harden Control UI session companion context [#122380](https://github.com/openclaw/openclaw/pull/122380)
- Retry failed steers as new turns when idle [#122919](https://github.com/openclaw/openclaw/pull/122919)
- fix: chat jumps from latest as composer grows [#122985](https://github.com/openclaw/openclaw/pull/122985)
- Keep GitHub marks with wrapped chat links [#123355](https://github.com/openclaw/openclaw/pull/123355)
- Stop streaming replies from duplicating assistant text [#123515](https://github.com/openclaw/openclaw/pull/123515)
- Preserve attachments when continuing catalog sessions [#123581](https://github.com/openclaw/openclaw/pull/123581)
- Prevent dashboard chat messages from overlapping [#123713](https://github.com/openclaw/openclaw/pull/123713)
- Clear landed WebChat steer notices and preserve message order [#123908](https://github.com/openclaw/openclaw/pull/123908)
- Clear stale delivery warnings after exact history proof [#123927](https://github.com/openclaw/openclaw/pull/123927)
- Restore chat transcripts after switching back to Split view [#123974](https://github.com/openclaw/openclaw/pull/123974)
- Prevent queue double-clicks from removing the next message [#124150](https://github.com/openclaw/openclaw/pull/124150)
- Distinguish active and maximum context in the model picker [#124207](https://github.com/openclaw/openclaw/pull/124207)
- Surface terminal chat-send failures everywhere [#124473](https://github.com/openclaw/openclaw/pull/124473)
- Surface hidden-session steer failures and reduce gateway log noise [#124560](https://github.com/openclaw/openclaw/pull/124560)
- Preserve Control UI steer order and accurate shortcut hints [#124915](https://github.com/openclaw/openclaw/pull/124915)
- Fill short transcripts with earlier history [#125080](https://github.com/openclaw/openclaw/pull/125080)
- Restore complete cached chat history in the Control UI [#125536](https://github.com/openclaw/openclaw/pull/125536)
- Add skill mentions to the new-session composer [#125554](https://github.com/openclaw/openclaw/pull/125554)
- Keep model selection available after UI preference changes [#125636](https://github.com/openclaw/openclaw/pull/125636)
- Match fullscreen Markdown tables to their inline presentation [#125692](https://github.com/openclaw/openclaw/pull/125692)
- Prevent Control UI transcript overlap during MCP app teardown [#125837](https://github.com/openclaw/openclaw/pull/125837)
- Let the Gateway choose the active run for Control UI steering [#125862](https://github.com/openclaw/openclaw/pull/125862)
- fix(ui): recover queued follow-ups from settled runs [#126180](https://github.com/openclaw/openclaw/pull/126180)
- Keep steered Control UI replies in causal order [#126230](https://github.com/openclaw/openclaw/pull/126230)
- Keep long plain-text and Markdown fences fully visible [#126346](https://github.com/openclaw/openclaw/pull/126346)
- Remove duplicate final replies after streaming [#126367](https://github.com/openclaw/openclaw/pull/126367)
- Keep Codex steering activity in transcript order [#126997](https://github.com/openclaw/openclaw/pull/126997)
- fix(gateway): keep side chat available for tool-heavy sessions [#127294](https://github.com/openclaw/openclaw/pull/127294)
- fix(ui): keep visible chat messages authoritative over late snapshot hydration [#128146](https://github.com/openclaw/openclaw/pull/128146)
- fix(gateway): fill older chat pages without duplicate transcript storage [#128810](https://github.com/openclaw/openclaw/pull/128810)
- fix(chat): keep embedded and HTTP history visible across silent tails [#128844](https://github.com/openclaw/openclaw/pull/128844)
- fix(chat): fill sparse history pages with lightweight performance coverage [#129047](https://github.com/openclaw/openclaw/pull/129047)
- fix(gateway): prevent assistant commentary leaking into session history [#129070](https://github.com/openclaw/openclaw/pull/129070)
- fix(gateway): preserve replies after hidden user turns [#129426](https://github.com/openclaw/openclaw/pull/129426)
- fix(gateway): stop persisting passive chat greetings into the durable logbook [#129506](https://github.com/openclaw/openclaw/pull/129506)
- fix(ui): dictation duplicates words on Stop and retains canceled speech [#130395](https://github.com/openclaw/openclaw/pull/130395)
- fix(webchat): CLI skill and harness-injected turns render as operator-sent messages [#130427](https://github.com/openclaw/openclaw/pull/130427)
- fix(ui): allow selecting side chat text [#130496](https://github.com/openclaw/openclaw/pull/130496)
- fix(ui): keep chat messages separated after scroll interruptions [#130758](https://github.com/openclaw/openclaw/pull/130758)
- fix(ui): preserve literal JSON in chat and tool details [#131064](https://github.com/openclaw/openclaw/pull/131064)
- fix(ui): reconnect-uncertain sends stay inline and prove delivery by run id [#131171](https://github.com/openclaw/openclaw/pull/131171)
- fix(ui): keep transcript disclosures anchored (#126272) [39cff92](https://github.com/openclaw/openclaw/commit/39cff92)
- fix(ui): hide oversized history markers (#113980) [a237bc1](https://github.com/openclaw/openclaw/commit/a237bc1)
- fix(ui): keep annotated slash commands local (#121191) [a7a68cf](https://github.com/openclaw/openclaw/commit/a7a68cf)
- Preserve zero VAD thresholds in Realtime Talk launch state [#102161](https://github.com/openclaw/openclaw/pull/102161)
- Render Unicode line breaks correctly in Control UI chat [#102169](https://github.com/openclaw/openclaw/pull/102169)
- Center the chat scroll-to-latest button and show it sooner [#104724](https://github.com/openclaw/openclaw/pull/104724)
- Keep the scroll-to-latest button from shrinking chat history [#104744](https://github.com/openclaw/openclaw/pull/104744)
- Keep large pasted-text previews Unicode-safe [#106328](https://github.com/openclaw/openclaw/pull/106328)
- Steer restored queued messages in Control UI [#107836](https://github.com/openclaw/openclaw/pull/107836)
- Show sub-minute quota resets as less than one minute [#108009](https://github.com/openclaw/openclaw/pull/108009)
- Stop stalled local attachment checks from hanging [#109230](https://github.com/openclaw/openclaw/pull/109230)
- Keep Control UI chat updating past malformed tool entries [#111145](https://github.com/openclaw/openclaw/pull/111145)
- Prevent malformed chat entries from disrupting Control UI updates [#111494](https://github.com/openclaw/openclaw/pull/111494)
- Preserve the native context menu for chat links [#111618](https://github.com/openclaw/openclaw/pull/111618)
- Keep the Control UI chat row steady while replies begin [#111642](https://github.com/openclaw/openclaw/pull/111642)
- Handle chat events without message payloads [#111918](https://github.com/openclaw/openclaw/pull/111918)
- Dismiss pinned message details with Escape or an outside click [#112066](https://github.com/openclaw/openclaw/pull/112066)
- Stop stale text-selection toolbars from reappearing [#112290](https://github.com/openclaw/openclaw/pull/112290)
- Refresh the Control UI composer after input-history recall [#112634](https://github.com/openclaw/openclaw/pull/112634)
- Keep chat table labels readable and separate post-list summaries [#113865](https://github.com/openclaw/openclaw/pull/113865)
- Restore the close icon in the Control UI image lightbox [#113913](https://github.com/openclaw/openclaw/pull/113913)
- Keep catalog continuations in their originating chat [#114731](https://github.com/openclaw/openclaw/pull/114731)
- Show recovery guidance after unrecoverable context overflow [#114909](https://github.com/openclaw/openclaw/pull/114909)
- Match both halves of the disabled microphone control [#115472](https://github.com/openclaw/openclaw/pull/115472)
- Keep model-picker scrolling inside the picker [#115473](https://github.com/openclaw/openclaw/pull/115473)
- Hide repaired stream-error artifacts in chat history [#117699](https://github.com/openclaw/openclaw/pull/117699)
- Show clipboard failures in Control UI [#118608](https://github.com/openclaw/openclaw/pull/118608)
- Show nominal 1M context labels in the model picker [#120369](https://github.com/openclaw/openclaw/pull/120369)
- Clarify the pasted-text attachment action [#120799](https://github.com/openclaw/openclaw/pull/120799)
- Keep punctuation attached to inline code in chat [#122291](https://github.com/openclaw/openclaw/pull/122291)
- Fit chat table cards to their columns [#122297](https://github.com/openclaw/openclaw/pull/122297)
- Show unsafe Markdown link labels as plain text [#122311](https://github.com/openclaw/openclaw/pull/122311)
- Match chat transcript letter spacing to the reading prototype [#122328](https://github.com/openclaw/openclaw/pull/122328)
- Restore new-session image attachment previews [#122905](https://github.com/openclaw/openclaw/pull/122905)
- Prevent transcript crashes on sparse attachments [#123054](https://github.com/openclaw/openclaw/pull/123054)
- Show a warning when attachments cannot be read [#123274](https://github.com/openclaw/openclaw/pull/123274)
- Align transcript search corners [#123299](https://github.com/openclaw/openclaw/pull/123299)
- Keep transcript content visible above question cards [#123301](https://github.com/openclaw/openclaw/pull/123301)
- Keep the Control UI chat scrollbar visible under the header fade [#123308](https://github.com/openclaw/openclaw/pull/123308)
- Keep Control UI chat file links together when wrapping [#123310](https://github.com/openclaw/openclaw/pull/123310)
- Preserve staged chat files across Gateway client rotation [#123628](https://github.com/openclaw/openclaw/pull/123628)
- Show companion-clear failures in the current Control UI session [#123724](https://github.com/openclaw/openclaw/pull/123724)
- Retire persisted WebChat steers from the composer [#123744](https://github.com/openclaw/openclaw/pull/123744)
- Keep the Control UI model picker in sync with external changes [#124005](https://github.com/openclaw/openclaw/pull/124005)
- Keep chat transcripts anchored during pane resizing [#124013](https://github.com/openclaw/openclaw/pull/124013)
- Preserve destination-specific labels for GitHub deep links [#124252](https://github.com/openclaw/openclaw/pull/124252)
- Make queued-message reordering atomically durable [#124266](https://github.com/openclaw/openclaw/pull/124266)
- Keep sent images visible during chat history handoff [#124839](https://github.com/openclaw/openclaw/pull/124839)
- Keep long-message links and text stable when expanding [#124898](https://github.com/openclaw/openclaw/pull/124898)
- Align session suggestions with the chat composer [#125225](https://github.com/openclaw/openclaw/pull/125225)
- Avoid false delivery warnings for acknowledged WebChat sends [#125426](https://github.com/openclaw/openclaw/pull/125426)
- Let idle parent chats send while subagents run [#125428](https://github.com/openclaw/openclaw/pull/125428)
- Keep the composer microphone steady on hover [#125565](https://github.com/openclaw/openclaw/pull/125565)
- Prevent duplicate Control UI replies after turn completion [#126382](https://github.com/openclaw/openclaw/pull/126382)
- Keep sidebar chat messages separated while resizing [#126610](https://github.com/openclaw/openclaw/pull/126610)
- fix(ui): explain blocked Talk microphone access [#127673](https://github.com/openclaw/openclaw/pull/127673)
- fix(ui): prevent duplicate selected-text actions on context clicks [#127776](https://github.com/openclaw/openclaw/pull/127776)
- fix(web): keep short multiline user messages expanded [#128085](https://github.com/openclaw/openclaw/pull/128085)
- fix(ui): remove Safari bars around chat file links [#128398](https://github.com/openclaw/openclaw/pull/128398)
- fix(ui): unify disconnected chat queue state [#128701](https://github.com/openclaw/openclaw/pull/128701)
- fix(ui): keep message context hover above transcript rows [#128739](https://github.com/openclaw/openclaw/pull/128739)
- fix(ui): enable slash commands in new-session composer [#128969](https://github.com/openclaw/openclaw/pull/128969)
- fix(ui): explain empty chat exports [#129881](https://github.com/openclaw/openclaw/pull/129881)
- fix(ui): prevent horizontal model picker scrolling [#129928](https://github.com/openclaw/openclaw/pull/129928)
- fix(ui): side chat composer controls are misaligned [#130119](https://github.com/openclaw/openclaw/pull/130119)
- fix(ui): remove context compact button [#130775](https://github.com/openclaw/openclaw/pull/130775)

**Documentation**

- Document Ask OpenClaw context, docking, and guided setup [#115182](https://github.com/openclaw/openclaw/pull/115182)
- Document the composer capability menu [#115858](https://github.com/openclaw/openclaw/pull/115858)

</details>

</Accordion>

<Accordion title="Follow the Work and Approve Actions">

Following a Claw while it works is much easier. Tool calls now pair clearly with their results, command activity is easier to read, file changes show focused diffs, and larger screens can keep running background tasks beside the conversation with elapsed time and recent activity. People with permission to change the conversation can stop work there, while the full Tasks page covers work across conversations.

If you have used approval gates in ChatGPT or Claude Desktop, this should feel familiar. Requests appear inside the conversation that triggered them, other conversations show a quiet indicator when something needs attention, and closing the approval queue leaves the request pending instead of accidentally approving or denying it. A rolling 30-day history is available when you need to look back.

Once a turn finishes, intermediate commentary and tools fold into a **Worked for** summary you can reopen. Live activity, search results, attachment-only replies, and unresolved errors stay visible instead of being tidied away before they are actually finished.

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

**Improvements**

- Redesign Control UI tool activity with readable rows and inline diffs [#103748](https://github.com/openclaw/openclaw/pull/103748)
- Add opt-in AI purpose titles for tool calls [#103989](https://github.com/openclaw/openclaw/pull/103989)
- Add background task controls beside Control UI chats [#104010](https://github.com/openclaw/openclaw/pull/104010)
- Show background-task activity before opening the chat rail [#104776](https://github.com/openclaw/openclaw/pull/104776)
- Collapse completed turn details behind a Worked for rollup [#105012](https://github.com/openclaw/openclaw/pull/105012)
- Show still-running background tasks after a chat turn [#106115](https://github.com/openclaw/openclaw/pull/106115)
- Add pending approval alerts and approval history [#108776](https://github.com/openclaw/openclaw/pull/108776)
- Add inline, queued, and keyboard-friendly approvals [#110989](https://github.com/openclaw/openclaw/pull/110989)
- Show live agent activity in running sidebar sessions [#111221](https://github.com/openclaw/openclaw/pull/111221)
- Show live Swarm progress on the session dashboard [#111297](https://github.com/openclaw/openclaw/pull/111297)
- Let agents post expiring sidebar status and attention [#111583](https://github.com/openclaw/openclaw/pull/111583)
- Redesign the session observer and gate hidden digests [#112594](https://github.com/openclaw/openclaw/pull/112594)
- Show live Swarm progress inside Chat [#113619](https://github.com/openclaw/openclaw/pull/113619)
- Reduce visual noise in chat activity [#120371](https://github.com/openclaw/openclaw/pull/120371)
- Float task suggestions and add Copy prompt [#121259](https://github.com/openclaw/openclaw/pull/121259)
- Make approval requests passive and easier to review [#124767](https://github.com/openclaw/openclaw/pull/124767)
- Make Control UI tool activity lighter and easier to scan [#125240](https://github.com/openclaw/openclaw/pull/125240)
- Simplify background task status rows [#104074](https://github.com/openclaw/openclaw/pull/104074)
- Animate active Control UI tool rows [#104266](https://github.com/openclaw/openclaw/pull/104266)
- Move active-run feedback into the chat transcript [#104768](https://github.com/openclaw/openclaw/pull/104768)
- Preview recent background tasks from the chat status row [#107297](https://github.com/openclaw/openclaw/pull/107297)
- Show when a chat run is waiting for approval [#111445](https://github.com/openclaw/openclaw/pull/111445)
- Show live output-token usage during active chat runs [#112333](https://github.com/openclaw/openclaw/pull/112333)
- Show chat startup phases in Control UI [#112339](https://github.com/openclaw/openclaw/pull/112339)
- Prioritize running work in the background-tasks rail [#113928](https://github.com/openclaw/openclaw/pull/113928)
- Show cron errors in sidebar tooltips [#114224](https://github.com/openclaw/openclaw/pull/114224)
- Polish task-suggestion actions into a compact top-right control [#121246](https://github.com/openclaw/openclaw/pull/121246)
- Keep tool-chain failures scoped to individual calls [#122681](https://github.com/openclaw/openclaw/pull/122681)
- Align Home activity with session-row indicators [#123813](https://github.com/openclaw/openclaw/pull/123813)
- Match standalone approval pages to redesigned approval cards [#124816](https://github.com/openclaw/openclaw/pull/124816)
- Make chat activity and tool disclosures compact [#124832](https://github.com/openclaw/openclaw/pull/124832)
- Redesign suggested task cards [#125231](https://github.com/openclaw/openclaw/pull/125231)
- feat(ui): dock the session progress card beside a wide composer [#129141](https://github.com/openclaw/openclaw/pull/129141)
- improve(ui): calm the task progress card with relative time and clear terminal states [#130183](https://github.com/openclaw/openclaw/pull/130183)
- Clarify Control UI chat startup labels [#115044](https://github.com/openclaw/openclaw/pull/115044)
- Simplify the live chat token status [#120676](https://github.com/openclaw/openclaw/pull/120676)
- Use one token and cost formatter across Control UI [#123472](https://github.com/openclaw/openclaw/pull/123472)
- Slow the active-session spinner [#124058](https://github.com/openclaw/openclaw/pull/124058)
- Remove the visible question expiry countdown [#124063](https://github.com/openclaw/openclaw/pull/124063)
- Remove the repeated summary from transcript plan cards [#124895](https://github.com/openclaw/openclaw/pull/124895)
- Add spacing between suggested task actions [#124900](https://github.com/openclaw/openclaw/pull/124900)
- Slow the new-session submit spinner [#126044](https://github.com/openclaw/openclaw/pull/126044)

**Bug fixes**

- Make Control UI tool activity deterministic and private [#103821](https://github.com/openclaw/openclaw/pull/103821)
- Make Codex Guardian review activity compact and durable [#125395](https://github.com/openclaw/openclaw/pull/125395)
- Show sessions waiting for concurrency slots [#125654](https://github.com/openclaw/openclaw/pull/125654)
- Keep background tasks usable in narrow chat panes [#104107](https://github.com/openclaw/openclaw/pull/104107)
- Keep tool-only turn results visible [#106791](https://github.com/openclaw/openclaw/pull/106791)
- Restore branded progress phrases in Control UI runs [#107111](https://github.com/openclaw/openclaw/pull/107111)
- Fix chat timers and crowded background task sections [#107229](https://github.com/openclaw/openclaw/pull/107229)
- Show failed runs as composer alerts instead of agent replies [#108509](https://github.com/openclaw/openclaw/pull/108509)
- Show tool input when results precede calls [#110868](https://github.com/openclaw/openclaw/pull/110868)
- Stop selected channel sessions from the Control UI [#111108](https://github.com/openclaw/openclaw/pull/111108)
- Restore subagent spawning from dashboard sessions [#112527](https://github.com/openclaw/openclaw/pull/112527)
- Restore subagent spawning from dashboard forks [#112535](https://github.com/openclaw/openclaw/pull/112535)
- Keep the live output-token counter updating [#114213](https://github.com/openclaw/openclaw/pull/114213)
- Refresh completed subagents in Control UI [#114786](https://github.com/openclaw/openclaw/pull/114786)
- fix(ui): stop the home session ring after a run ends [#120327](https://github.com/openclaw/openclaw/pull/120327)
- Clear recovered errors from the current activity header [#120391](https://github.com/openclaw/openclaw/pull/120391)
- Keep background-task transcripts in the Control UI sidebar [#120463](https://github.com/openclaw/openclaw/pull/120463)
- Show one task row for each native subagent run [#121274](https://github.com/openclaw/openclaw/pull/121274)
- Show continuous progress when starting a Control UI session [#122713](https://github.com/openclaw/openclaw/pull/122713)
- fix(ui): show one session activity indicator [#123288](https://github.com/openclaw/openclaw/pull/123288)
- Show actionable session attention on Home [#123759](https://github.com/openclaw/openclaw/pull/123759)
- Keep Codex task lists active after compaction [#123921](https://github.com/openclaw/openclaw/pull/123921)
- Keep session status icons visible [#125096](https://github.com/openclaw/openclaw/pull/125096)
- Disable approval decisions for review-only operators [#125732](https://github.com/openclaw/openclaw/pull/125732)
- Restore Control UI tool activity interactions [#125790](https://github.com/openclaw/openclaw/pull/125790)
- fix(ui): stop completed chats staying in progress [#125823](https://github.com/openclaw/openclaw/pull/125823)
- Require exact active-run ownership in Control UI [#126116](https://github.com/openclaw/openclaw/pull/126116)
- fix(ui): keep one agent run in one transcript response [#126278](https://github.com/openclaw/openclaw/pull/126278)
- Contain narrated tool details and add Diff/Raw views [#126348](https://github.com/openclaw/openclaw/pull/126348)
- Keep pending approvals visible in Settings [#126698](https://github.com/openclaw/openclaw/pull/126698)
- Keep one-off visualizations inline and expanded work readable [#126729](https://github.com/openclaw/openclaw/pull/126729)
- Keep active WebChat progress visible while steering [#126886](https://github.com/openclaw/openclaw/pull/126886)
- fix(ui): clarify permission changes apply to the next run [#126893](https://github.com/openclaw/openclaw/pull/126893)
- Preserve Codex compaction activity in session history [#127230](https://github.com/openclaw/openclaw/pull/127230)
- fix: settle terminal transcript projections [#127646](https://github.com/openclaw/openclaw/pull/127646)
- fix(ui): pool reply-less wake activity into one chat rollup [#128442](https://github.com/openclaw/openclaw/pull/128442)
- fix(ui): keep restart-resumed tool activity together [#128726](https://github.com/openclaw/openclaw/pull/128726)
- fix(chat): show native commentary progress [#128793](https://github.com/openclaw/openclaw/pull/128793)
- Compact tool rows on touch devices [#128839](https://github.com/openclaw/openclaw/pull/128839)
- fix(ui): show delegated work on selected threads [#129328](https://github.com/openclaw/openclaw/pull/129328)
- feat(ui): stack the docked progress card under the suggestion tray [#129443](https://github.com/openclaw/openclaw/pull/129443)
- fix(ui): show accessible last activity on session progress cards [#129520](https://github.com/openclaw/openclaw/pull/129520)
- fix(codex): keep live commentary tables and code blocks readable [#129828](https://github.com/openclaw/openclaw/pull/129828)
- fix(ui): show cloud session startup progress in chat [#130669](https://github.com/openclaw/openclaw/pull/130669)
- fix(ui): make cloud failure diagnostics readable and copyable [#130672](https://github.com/openclaw/openclaw/pull/130672)
- Preserve desktop lobster run outcomes [#103501](https://github.com/openclaw/openclaw/pull/103501)
- fix(chat): tool titles corrupt boundary emoji in long inputs [#104464](https://github.com/openclaw/openclaw/pull/104464)
- Show accurate line ranges for read tool calls [#105105](https://github.com/openclaw/openclaw/pull/105105)
- Preserve message-only terminal output in Control UI chats [#111493](https://github.com/openclaw/openclaw/pull/111493)
- Pin session observer to the chat pane header [#112866](https://github.com/openclaw/openclaw/pull/112866)
- Keep sidebar run indicators in one left-side column [#113645](https://github.com/openclaw/openclaw/pull/113645)
- Give running sessions a distinct status color [#113688](https://github.com/openclaw/openclaw/pull/113688)
- Stop false critical alerts for the current session [#113932](https://github.com/openclaw/openclaw/pull/113932)
- Keep active chat status inside one assistant turn [#114039](https://github.com/openclaw/openclaw/pull/114039)
- Center the running-task preview over its link [#114069](https://github.com/openclaw/openclaw/pull/114069)
- Scope Chat background tasks to the current session [#114433](https://github.com/openclaw/openclaw/pull/114433)
- Show aborted-run diagnostics in Control UI [#117497](https://github.com/openclaw/openclaw/pull/117497)
- Keep chat rail status and headline text readable [#119397](https://github.com/openclaw/openclaw/pull/119397)
- Simplify tool-group styling and hover feedback [#120674](https://github.com/openclaw/openclaw/pull/120674)
- Label created and deleted files accurately in tool activity [#122287](https://github.com/openclaw/openclaw/pull/122287)
- Keep live tool cards incomplete during partial output [#123510](https://github.com/openclaw/openclaw/pull/123510)
- Show the current turn's token count in chat recaps [#123712](https://github.com/openclaw/openclaw/pull/123712)
- Restore the background-task count badge in the chat rail [#124840](https://github.com/openclaw/openclaw/pull/124840)
- Dismiss completed progress cards in Control UI [#126102](https://github.com/openclaw/openclaw/pull/126102)
- Balance completed-work spacing in chat transcripts [#126303](https://github.com/openclaw/openclaw/pull/126303)
- Refresh approval history as decisions resolve [#126579](https://github.com/openclaw/openclaw/pull/126579)
- Remove extra spacing from Guardian review details [#126778](https://github.com/openclaw/openclaw/pull/126778)
- fix(ui): keep native tool runs in one history group [#128645](https://github.com/openclaw/openclaw/pull/128645)
- fix(ui): center completed progress marker [#128911](https://github.com/openclaw/openclaw/pull/128911)
- fix(ui): stop claiming queued sessions need a slot [#129081](https://github.com/openclaw/openclaw/pull/129081)
- fix(control-ui): keep task progress full width on hover [#129832](https://github.com/openclaw/openclaw/pull/129832)
- fix(ui): fill collapsed progress-card selection to the composer edge [#129869](https://github.com/openclaw/openclaw/pull/129869)
- fix(ui): keep progress in main chat when side chat opens [#130109](https://github.com/openclaw/openclaw/pull/130109)
- fix(ui): pause progress cards without active runs [#130271](https://github.com/openclaw/openclaw/pull/130271)
- fix(ui): show frozen elapsed time for stopped goals [#130501](https://github.com/openclaw/openclaw/pull/130501)

</details>

</Accordion>

<Accordion title="Files, Git, browser, and terminal">

OpenClaw can now keep the work beside the conversation instead of making you bounce between tools. On supported administrator connections, you can open and edit eligible existing text or Markdown files from Chat, and if a Claw changes the same file while you are working, the editor stops with a conflict instead of overwriting the newer version. The Changes panel shows branch commits and working-tree edits, while eligible GitHub checkouts add pull-request status, CI summaries, and a link to start a pull request on GitHub.

A docked Browser panel can navigate, click, type, scroll, inspect elements, and mark up a screenshot before attaching that screenshot and page context to the conversation, but it requires advertised browser support and an administrator connection, and whatever appears in the page or capture may be sensitive.

Chat, Details, and Discussion can sit in resizable columns or merge into tabs, while the dashboard, terminal, and desktop can open in focused views when you need more room. The file editor still cannot create or delete files, Changes stays read-only, and Create PR hands off to GitHub rather than submitting inside OpenClaw.

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

**Improvements**

- Show session pull request status in Control UI chat [#103600](https://github.com/openclaw/openclaw/pull/103600)
- Collapse session PR chips and show CI details in chat [#103853](https://github.com/openclaw/openclaw/pull/103853)
- Add a browser panel with annotation and element inspection [#104012](https://github.com/openclaw/openclaw/pull/104012)
- Add a git-backed session changes panel to Control UI [#104184](https://github.com/openclaw/openclaw/pull/104184)
- Edit workspace files safely from the Control UI [#104757](https://github.com/openclaw/openclaw/pull/104757)
- Add a Create PR branch row to session chat [#105116](https://github.com/openclaw/openclaw/pull/105116)
- Add chat title bars and workspace actions [#109422](https://github.com/openclaw/openclaw/pull/109422)
- Add full-bleed single-widget Workspace tabs [#109627](https://github.com/openclaw/openclaw/pull/109627)
- Pin interactive MCP apps to session dashboards [#111524](https://github.com/openclaw/openclaw/pull/111524)
- Pin inline MCP Apps to the dashboard [#111748](https://github.com/openclaw/openclaw/pull/111748)
- Reveal dashboard widget controls on interaction [#111914](https://github.com/openclaw/openclaw/pull/111914)
- Add dashboard widget presentation and auto height [#111977](https://github.com/openclaw/openclaw/pull/111977)
- Add flexible multi-sidebar chat columns [#113712](https://github.com/openclaw/openclaw/pull/113712)
- Add a full-screen web terminal and claw intro [#121451](https://github.com/openclaw/openclaw/pull/121451)
- Add commit-scoped session diffs and richer Control UI review tools [#122470](https://github.com/openclaw/openclaw/pull/122470)
- Make Control UI chat rails full-height resizable columns [#122475](https://github.com/openclaw/openclaw/pull/122475)
- Resize the remote browser to fit the Control UI dock [#123104](https://github.com/openclaw/openclaw/pull/123104)
- Unify chat tools in one tabbed side panel [#123874](https://github.com/openclaw/openclaw/pull/123874)
- Unify shell-free dashboard, terminal, and desktop focus routes [#126143](https://github.com/openclaw/openclaw/pull/126143)
- Preview session workspace images and show safe metadata for other binaries [#95956](https://github.com/openclaw/openclaw/pull/95956)
- Unify split-chat controls in one toolbar [#102492](https://github.com/openclaw/openclaw/pull/102492)
- Add a keyboard shortcut for the Chat session workspace rail [#103064](https://github.com/openclaw/openclaw/pull/103064)
- Move the split-view opener into the chat toggle row [#104341](https://github.com/openclaw/openclaw/pull/104341)
- Show session branch details for local changed files [#106835](https://github.com/openclaw/openclaw/pull/106835)
- Unify browser and terminal panel tab controls [#108651](https://github.com/openclaw/openclaw/pull/108651)
- Make dashboard widgets fit content and preserve action corners [#114012](https://github.com/openclaw/openclaw/pull/114012)
- Unify dashboard chat visibility controls [#120487](https://github.com/openclaw/openclaw/pull/120487)
- Open the Session companion in one click [#121652](https://github.com/openclaw/openclaw/pull/121652)
- Add header scope switching and expandable context to session diffs [#122711](https://github.com/openclaw/openclaw/pull/122711)
- Click the remote desktop to take control [#123096](https://github.com/openclaw/openclaw/pull/123096)
- Center dashboard widget controls without blocking content [#126076](https://github.com/openclaw/openclaw/pull/126076)
- Soften Control UI split-pane emphasis [#126714](https://github.com/openclaw/openclaw/pull/126714)
- fix(ui): highlight source code in chat and session diffs [#130578](https://github.com/openclaw/openclaw/pull/130578)
- Make the active split-pane indicator align at any pane size [#102511](https://github.com/openclaw/openclaw/pull/102511)
- Align chat rail buttons and split-view opener [#102639](https://github.com/openclaw/openclaw/pull/102639)
- Add breathing room above workspace summary chips [#104331](https://github.com/openclaw/openclaw/pull/104331)
- Align Control UI chat controls [#104574](https://github.com/openclaw/openclaw/pull/104574)
- Align desktop session PR rows with the composer [#105604](https://github.com/openclaw/openclaw/pull/105604)
- Align the chat scrollbar with the Changes sidebar [#106775](https://github.com/openclaw/openclaw/pull/106775)
- Add breathing room around dashboard widgets [#111876](https://github.com/openclaw/openclaw/pull/111876)
- Add breathing room above the collapsed session rail [#120838](https://github.com/openclaw/openclaw/pull/120838)
- Replace the widget pin text action with an icon button [#121419](https://github.com/openclaw/openclaw/pull/121419)
- Clarify and align the chat header controls [#121739](https://github.com/openclaw/openclaw/pull/121739)
- Use a clearer Diff icon for session changes [#122399](https://github.com/openclaw/openclaw/pull/122399)
- Widen the code review sidebar by default [#125116](https://github.com/openclaw/openclaw/pull/125116)
- Align branch and pull-request rows above chat [#125232](https://github.com/openclaw/openclaw/pull/125232)

**Bug fixes**

- Keep Control UI chat usable in narrow panes [#104033](https://github.com/openclaw/openclaw/pull/104033)
- Harden Control UI workspace file editing [#104885](https://github.com/openclaw/openclaw/pull/104885)
- Recover Control UI terminals after missed output or stale connections [#107419](https://github.com/openclaw/openclaw/pull/107419)
- Refresh stale Control UI tabs before restoring terminals [#123660](https://github.com/openclaw/openclaw/pull/123660)
- Restore Browser screenshots on routed Control UI pages [#126290](https://github.com/openclaw/openclaw/pull/126290)
- fix(ui): activate stored sidebar tabs (#123482) [db08f93](https://github.com/openclaw/openclaw/commit/db08f93)
- Polish workspace controls and bottom-docked file browsing [#103601](https://github.com/openclaw/openclaw/pull/103601)
- Draw Control UI resize dividers as thin lines [#104013](https://github.com/openclaw/openclaw/pull/104013)
- Hide external files from the session workspace rail [#105015](https://github.com/openclaw/openclaw/pull/105015)
- Preserve agent file edits typed while saving [#105359](https://github.com/openclaw/openclaw/pull/105359)
- Prevent blank Agent Files editors during rapid tab switches [#105366](https://github.com/openclaw/openclaw/pull/105366)
- Restore palette-aware TUI colors in the embedded terminal [#108057](https://github.com/openclaw/openclaw/pull/108057)
- Prevent fullscreen terminal exceptions before the first tab exists [#108317](https://github.com/openclaw/openclaw/pull/108317)
- Show dead restored terminal tabs as exited [#109281](https://github.com/openclaw/openclaw/pull/109281)
- Keep long Markdown and file previews scrollable [#113465](https://github.com/openclaw/openclaw/pull/113465)
- Remove stale Create PR prompts and refresh PR chips mid-turn [#113944](https://github.com/openclaw/openclaw/pull/113944)
- Hide unusable Chat controls on read-only boards [#113947](https://github.com/openclaw/openclaw/pull/113947)
- Add drop targets for empty chat sidebar sides [#114005](https://github.com/openclaw/openclaw/pull/114005)
- Hide docked panels while Settings owns the viewport [#114737](https://github.com/openclaw/openclaw/pull/114737)
- Reduce embedded terminal clipping with a denser default layout [#115931](https://github.com/openclaw/openclaw/pull/115931)
- Keep the hidden session rail from reopening [#116951](https://github.com/openclaw/openclaw/pull/116951)
- Decode workspace artifact previews as UTF-8 [#117657](https://github.com/openclaw/openclaw/pull/117657)
- Show sidebar clipboard failures and clear stale feedback [#118632](https://github.com/openclaw/openclaw/pull/118632)
- Restore the terminal button in the chat header [#120436](https://github.com/openclaw/openclaw/pull/120436)
- Keep narrow split panes closable [#120460](https://github.com/openclaw/openclaw/pull/120460)
- Restore Desktop panel launchers in the Control UI [#121322](https://github.com/openclaw/openclaw/pull/121322)
- Show the full web terminal intro [#121501](https://github.com/openclaw/openclaw/pull/121501)
- Prevent terminal garble after Gateway reconnect [#121637](https://github.com/openclaw/openclaw/pull/121637)
- Keep existing discussions closed until users open them [#122072](https://github.com/openclaw/openclaw/pull/122072)
- Hide cloud-worker Desktop controls for local sessions [#122145](https://github.com/openclaw/openclaw/pull/122145)
- Hide Session changes outside Git checkouts [#122152](https://github.com/openclaw/openclaw/pull/122152)
- Restore the previous terminal dock after fill mode [#122464](https://github.com/openclaw/openclaw/pull/122464)
- Consolidate chat panel buttons in the pane header [#122507](https://github.com/openclaw/openclaw/pull/122507)
- Make the Control UI terminal readable in light mode [#123184](https://github.com/openclaw/openclaw/pull/123184)
- Keep remote-panel typing out of the chat composer [#123293](https://github.com/openclaw/openclaw/pull/123293)
- Refresh stale Control UI tabs before restoring terminals [#123526](https://github.com/openclaw/openclaw/pull/123526)
- Preserve terminal actions during Control UI updates [#123578](https://github.com/openclaw/openclaw/pull/123578)
- Show when a Control UI terminal session is no longer available [#124046](https://github.com/openclaw/openclaw/pull/124046)
- Load Agent Files content and preserve failed-save errors [#124140](https://github.com/openclaw/openclaw/pull/124140)
- Keep GitHub preview cards open and interactive [#124274](https://github.com/openclaw/openclaw/pull/124274)
- Show session changes automatically in Review [#124824](https://github.com/openclaw/openclaw/pull/124824)
- Diagnose and retry failed Control UI terminal opens [#124890](https://github.com/openclaw/openclaw/pull/124890)
- Open empty-session Files panels on the project browser [#125138](https://github.com/openclaw/openclaw/pull/125138)
- Restore visible side-panel tab labels [#125511](https://github.com/openclaw/openclaw/pull/125511)
- fix(ui): keep expanded panel tabs clear of shell controls [#128262](https://github.com/openclaw/openclaw/pull/128262)
- fix(ui): stop offering Open in editor for remote checkouts [#128420](https://github.com/openclaw/openclaw/pull/128420)
- fix(ui): make dashboard side panels enter split view [#130426](https://github.com/openclaw/openclaw/pull/130426)
- Align split-view toolbar segments with chat columns [#102675](https://github.com/openclaw/openclaw/pull/102675)
- Keep chat rail buttons clear of messages [#104247](https://github.com/openclaw/openclaw/pull/104247)
- Preserve emoji in browser annotation prompts [#104396](https://github.com/openclaw/openclaw/pull/104396)
- Harden Control UI Create PR row reliability [#105594](https://github.com/openclaw/openclaw/pull/105594)
- Prevent Control UI browser screenshot hangs [#107703](https://github.com/openclaw/openclaw/pull/107703)
- Center and enlarge the terminal tab close control [#107777](https://github.com/openclaw/openclaw/pull/107777)
- Repaint the Control UI terminal after hide and show [#107970](https://github.com/openclaw/openclaw/pull/107970)
- Attach terminal close controls to their tabs [#108611](https://github.com/openclaw/openclaw/pull/108611)
- Bypass broken Claude npm shims for catalog terminals [#108627](https://github.com/openclaw/openclaw/pull/108627)
- Release failed browser screenshot response streams [#110399](https://github.com/openclaw/openclaw/pull/110399)
- Show newly created pull requests in the session sidebar [#111783](https://github.com/openclaw/openclaw/pull/111783)
- Auto-show open session discussions in Control UI [#111871](https://github.com/openclaw/openclaw/pull/111871)
- Keep agent workspace files readable when unfocused [#111963](https://github.com/openclaw/openclaw/pull/111963)
- Open agent files with AGENTS.md selected [#111967](https://github.com/openclaw/openclaw/pull/111967)
- Close GitHub hovercards when routed links disappear [#112291](https://github.com/openclaw/openclaw/pull/112291)
- Remove the redundant session discussion header [#112574](https://github.com/openclaw/openclaw/pull/112574)
- Make the Discussion button close its sidebar on second click [#112671](https://github.com/openclaw/openclaw/pull/112671)
- Disable thread changes for non-Git workspaces [#112914](https://github.com/openclaw/openclaw/pull/112914)
- Keep fresh-thread diffs free of inherited checkout changes [#115708](https://github.com/openclaw/openclaw/pull/115708)
- Show errors when workspace copy actions fail [#118432](https://github.com/openclaw/openclaw/pull/118432)
- Detect merged session PRs beyond the Control UI display cap [#119204](https://github.com/openclaw/openclaw/pull/119204)
- Stop chat sidebars flashing while opening [#121464](https://github.com/openclaw/openclaw/pull/121464)
- Hide the dashboard switcher without real board content [#121480](https://github.com/openclaw/openclaw/pull/121480)
- Give dock tabs a contained active state [#124875](https://github.com/openclaw/openclaw/pull/124875)
- Open Review immediately for workspace files [#124990](https://github.com/openclaw/openclaw/pull/124990)
- Balance side-panel tab pill padding [#125368](https://github.com/openclaw/openclaw/pull/125368)
- Keep Chat side panel tab labels legible [#125505](https://github.com/openclaw/openclaw/pull/125505)
- Keep empty side panels closed after Board chat hides [#126047](https://github.com/openclaw/openclaw/pull/126047)
- Keep open Terminals synchronized with live theme changes [#126297](https://github.com/openclaw/openclaw/pull/126297)
- Let the dashboard side panel stay closed [#126397](https://github.com/openclaw/openclaw/pull/126397)
- Keep Side chat selected in dashboard split view [#126511](https://github.com/openclaw/openclaw/pull/126511)
- Refresh active Agent Files content without losing drafts [#127086](https://github.com/openclaw/openclaw/pull/127086)
- fix(ui): prevent second touches from hijacking resize drags [#127760](https://github.com/openclaw/openclaw/pull/127760)
- fix(ui): restore selected dashboard side tab [#128867](https://github.com/openclaw/openclaw/pull/128867)
- fix(ui): show workspace copy-path outcomes [#129727](https://github.com/openclaw/openclaw/pull/129727)
- fix(ui): show session diff path copy feedback [#129999](https://github.com/openclaw/openclaw/pull/129999)
- fix(ui): collapse chat side panel after final tab closes [#130102](https://github.com/openclaw/openclaw/pull/130102)
- fix(ui): keep PR chip above transcript rows [#130224](https://github.com/openclaw/openclaw/pull/130224)
- fix(ui): resize empty chat side panel [#130366](https://github.com/openclaw/openclaw/pull/130366)
- fix(ui): keep agent file saves intact during refresh [#130468](https://github.com/openclaw/openclaw/pull/130468)

**Documentation**

- Add a user guide for session dashboards [#111834](https://github.com/openclaw/openclaw/pull/111834)

</details>

</Accordion>

<Accordion title="Settings and connected services">

Settings is much easier to find your way around now. It has its own full-page workspace, searches both destinations and individual controls, separates common from advanced options, and keeps panel URLs bookmarkable. If a value is incomplete or invalid, the draft stays on screen so you can fix it, and settings the normal form cannot represent safely open in Raw mode instead of being silently lost.

Major controls also have clearer homes. Connection details, agent identity and memory, Plugins, MCP servers, devices, channels, and pairing are organized around where you actually manage them, while Model Providers brings together the credential health, available models, quota, balance, budget, and spending data each provider reports. That provider view is read-only, and guided MCP management still lives in Plugins while Settings keeps diagnostics and raw editing.

A browser with limited access can request administrator scope, but another administrator still has to approve the signed request from that device. Trusted dashboard links and the native pairing flow can help eligible administrators recover access without turning a shared token into a bypass.

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

**Improvements**

- Give Control UI settings a dedicated full-page workspace [#102549](https://github.com/openclaw/openclaw/pull/102549)
- Add search to the Settings sidebar [#103138](https://github.com/openclaw/openclaw/pull/103138)
- Add a consolidated Model Providers settings page [#104061](https://github.com/openclaw/openclaw/pull/104061)
- Simplify Control UI navigation and feature ownership [#104604](https://github.com/openclaw/openclaw/pull/104604)
- Search inside Control UI Settings pages [#104675](https://github.com/openclaw/openclaw/pull/104675)
- feat(control-ui): agent identity editor, Settings-homed Agents page, scalable chip switcher [#106058](https://github.com/openclaw/openclaw/pull/106058)
- Unify the Control UI settings design language [#106470](https://github.com/openclaw/openclaw/pull/106470)
- Auto-save Control UI settings with one clear restart action [#107458](https://github.com/openclaw/openclaw/pull/107458)
- Add a Labs page for experimental features [#110359](https://github.com/openclaw/openclaw/pull/110359)
- Reorganize Settings and expand approved agent controls [#110445](https://github.com/openclaw/openclaw/pull/110445)
- Add an Apps and extensions discovery page [#110563](https://github.com/openclaw/openclaw/pull/110563)
- Sync more Control UI preferences and refresh semantic config changes live [#110581](https://github.com/openclaw/openclaw/pull/110581)
- Manage MCP servers directly from Settings [#110654](https://github.com/openclaw/openclaw/pull/110654)
- Create and hatch new agents from the Control UI [#111052](https://github.com/openclaw/openclaw/pull/111052)
- Use one avatar-aware agent picker across the Control UI [#112488](https://github.com/openclaw/openclaw/pull/112488)
- Organize Control UI settings into common and advanced groups [#112538](https://github.com/openclaw/openclaw/pull/112538)
- Add three experimental controls to Labs [#114233](https://github.com/openclaw/openclaw/pull/114233)
- Bookmark and share specific agent settings panels [#115673](https://github.com/openclaw/openclaw/pull/115673)
- Move settings save feedback into the sidebar footer [#115679](https://github.com/openclaw/openclaw/pull/115679)
- Control individual MCP tools per session from the composer [#115907](https://github.com/openclaw/openclaw/pull/115907)
- Add MCP servers from the composer Connectors menu [#115921](https://github.com/openclaw/openclaw/pull/115921)
- Show inherited settings defaults and restore inheritance [#116621](https://github.com/openclaw/openclaw/pull/116621)
- Open bare /pair in the native pairing modal [#120855](https://github.com/openclaw/openclaw/pull/120855)
- Let limited Control UI browsers request administrator access [#121459](https://github.com/openclaw/openclaw/pull/121459)
- Simplify Control UI settings for non-admin operators [#125492](https://github.com/openclaw/openclaw/pull/125492)
- feat(ui): environment differentiation for the Control UI (gateway.controlUi.environment) [#127711](https://github.com/openclaw/openclaw/pull/127711)
- Simplify Quick Settings by removing context presets [#102748](https://github.com/openclaw/openclaw/pull/102748)
- Add agent avatars to the Agents page selector [#102817](https://github.com/openclaw/openclaw/pull/102817)
- Show Control UI build identity in the sidebar [#104350](https://github.com/openclaw/openclaw/pull/104350)
- Redesign the Control UI About page with community links [#106508](https://github.com/openclaw/openclaw/pull/106508)
- Align settings controls to a consistent height [#106898](https://github.com/openclaw/openclaw/pull/106898)
- Simplify Control UI page headers [#106954](https://github.com/openclaw/openclaw/pull/106954)
- Improve live preferences and settings clarity [#110494](https://github.com/openclaw/openclaw/pull/110494)
- Link mobile pairing to the apps page [#110622](https://github.com/openclaw/openclaw/pull/110622)
- Highlight JSON across Control UI debug views [#110806](https://github.com/openclaw/openclaw/pull/110806)
- Put secret reveal controls inside every sensitive field [#110810](https://github.com/openclaw/openclaw/pull/110810)
- Distinguish Apps navigation and link back to device pairing [#110909](https://github.com/openclaw/openclaw/pull/110909)
- Add a Swarm toggle to Settings Labs [#111267](https://github.com/openclaw/openclaw/pull/111267)
- Preview Lobster sounds when enabled [#111996](https://github.com/openclaw/openclaw/pull/111996)
- Tighten Control UI Labs page spacing [#112038](https://github.com/openclaw/openclaw/pull/112038)
- Keep WhatsApp QR actions visible and readable [#114708](https://github.com/openclaw/openclaw/pull/114708)
- Clean up Channels DM access requests and remove raw health JSON [#114717](https://github.com/openclaw/openclaw/pull/114717)
- Explain channel settings and link their documentation [#114844](https://github.com/openclaw/openclaw/pull/114844)
- Simplify Communications settings and add a Voice tab [#114948](https://github.com/openclaw/openclaw/pull/114948)
- Consolidate gateway controls and status on one settings page [#114971](https://github.com/openclaw/openclaw/pull/114971)
- Add contextual guides throughout Control UI Settings [#115560](https://github.com/openclaw/openclaw/pull/115560)
- Add contextual help links across Settings [#115665](https://github.com/openclaw/openclaw/pull/115665)
- Expose MCP identity in effective tool inventory [#115870](https://github.com/openclaw/openclaw/pull/115870)
- Add documentation links across Control UI Settings [#115874](https://github.com/openclaw/openclaw/pull/115874)
- Add tool-loop detection controls to Control UI Labs [#115983](https://github.com/openclaw/openclaw/pull/115983)
- Show custom build provenance and commit age in the sidebar [#120388](https://github.com/openclaw/openclaw/pull/120388)
- Hide redundant agent selectors in single-agent setups [#121826](https://github.com/openclaw/openclaw/pull/121826)
- Collapse the Control UI limited-access notice [#123735](https://github.com/openclaw/openclaw/pull/123735)
- improve: use agent identity as the sole assistant identity [#129067](https://github.com/openclaw/openclaw/pull/129067)
- feat(ui): group advanced settings by messaging channel [#130591](https://github.com/openclaw/openclaw/pull/130591)
- Show non-main gateway branches in the Control UI [#104262](https://github.com/openclaw/openclaw/pull/104262)
- Add the official X link to the Control UI About page [#110449](https://github.com/openclaw/openclaw/pull/110449)
- Highlight Channel health JSON in the Control UI [#110613](https://github.com/openclaw/openclaw/pull/110613)
- Show commit age on the Control UI About page [#111495](https://github.com/openclaw/openclaw/pull/111495)
- Tighten About screen build-detail spacing [#111532](https://github.com/openclaw/openclaw/pull/111532)
- Give every settings sidebar row a distinct icon [#111974](https://github.com/openclaw/openclaw/pull/111974)
- Align Settings search with navigation rows [#112172](https://github.com/openclaw/openclaw/pull/112172)
- Move strict tool-policy controls behind Show advanced [#114941](https://github.com/openclaw/openclaw/pull/114941)
- Move Agent Defaults into the Agents page [#115836](https://github.com/openclaw/openclaw/pull/115836)
- Remove redundant reset buttons from Labs settings [#121427](https://github.com/openclaw/openclaw/pull/121427)

**Bug fixes**

- Prevent custom MCP server configuration errors [#111761](https://github.com/openclaw/openclaw/pull/111761)
- Prevent MCP config conflicts and diagnostic credential leaks [#113026](https://github.com/openclaw/openclaw/pull/113026)
- Enforce session MCP controls in Codex [#116054](https://github.com/openclaw/openclaw/pull/116054)
- Preserve schema-backed settings edits [#116282](https://github.com/openclaw/openclaw/pull/116282)
- Recover Control UI access with one trusted-host command [#118231](https://github.com/openclaw/openclaw/pull/118231)
- Restore administrator access from host-issued Control UI links [#119785](https://github.com/openclaw/openclaw/pull/119785)
- Keep read-only Control UI preferences browser-local [#120036](https://github.com/openclaw/openclaw/pull/120036)
- Scope Control UI model data to the selected agent [#123415](https://github.com/openclaw/openclaw/pull/123415)
- Keep terminals and model setup bound to the selected agent [#123429](https://github.com/openclaw/openclaw/pull/123429)
- Preserve 64-bit identifiers in Control UI settings [#126402](https://github.com/openclaw/openclaw/pull/126402)
- fix(ui): preserve external config edits after Raw revert [#130935](https://github.com/openclaw/openclaw/pull/130935)
- Render workspace avatars in the Control UI Personal card [#102892](https://github.com/openclaw/openclaw/pull/102892)
- Harden Control UI workspace avatar delivery [#103657](https://github.com/openclaw/openclaw/pull/103657)
- Keep Control UI configuration edits from disappearing during operations [#105555](https://github.com/openclaw/openclaw/pull/105555)
- Make device cleanup work across host apps [#107123](https://github.com/openclaw/openclaw/pull/107123)
- Show restart status from the active Gateway config [#107577](https://github.com/openclaw/openclaw/pull/107577)
- Polish Control UI settings and status presentation [#110845](https://github.com/openclaw/openclaw/pull/110845)
- Request media permission from empty Control UI pickers [#112037](https://github.com/openclaw/openclaw/pull/112037)
- Keep system agents out of shared page filters [#112889](https://github.com/openclaw/openclaw/pull/112889)
- Simplify advanced settings and repair dev gateway configuration [#113160](https://github.com/openclaw/openclaw/pull/113160)
- Remove the duplicate raw IDENTITY.md editor [#114470](https://github.com/openclaw/openclaw/pull/114470)
- Keep Control UI Fast mode selections saved after reload [#114489](https://github.com/openclaw/openclaw/pull/114489)
- Restore protected assistant avatars in Control UI [#114503](https://github.com/openclaw/openclaw/pull/114503)
- Stop advanced-settings toggles from prompting a restart [#114937](https://github.com/openclaw/openclaw/pull/114937)
- Explain unavailable MCP tool catalogs in Control UI [#115994](https://github.com/openclaw/openclaw/pull/115994)
- Prevent Control UI settings changes from racing [#116029](https://github.com/openclaw/openclaw/pull/116029)
- Prevent Control UI actions from racing pending settings saves [#116031](https://github.com/openclaw/openclaw/pull/116031)
- Recover reliable curated Settings controls [#116032](https://github.com/openclaw/openclaw/pull/116032)
- Preserve valid mixed-union settings in the Control UI [#116602](https://github.com/openclaw/openclaw/pull/116602)
- Match Settings errors to visible row numbers [#118077](https://github.com/openclaw/openclaw/pull/118077)
- Prevent Labs configuration refresh races [#119115](https://github.com/openclaw/openclaw/pull/119115)
- Preserve avatars under Control UI base paths [#119308](https://github.com/openclaw/openclaw/pull/119308)
- Show the correct Control UI login recovery guidance [#120069](https://github.com/openclaw/openclaw/pull/120069)
- Show provider-usage outages instead of silent empty panels [#120309](https://github.com/openclaw/openclaw/pull/120309)
- Show in-app confirmations for Devices security actions [#121279](https://github.com/openclaw/openclaw/pull/121279)
- Make native command settings editable outside Raw mode [#121832](https://github.com/openclaw/openclaw/pull/121832)
- Hide unusable models from the Control UI picker [#121852](https://github.com/openclaw/openclaw/pull/121852)
- Show quota for the active session provider [#122053](https://github.com/openclaw/openclaw/pull/122053)
- Show friendly catalog names in hidden-session settings [#122320](https://github.com/openclaw/openclaw/pull/122320)
- Keep multi-agent requests with the selected agent [#122889](https://github.com/openclaw/openclaw/pull/122889)
- Stop limited Custodian access from prompting Gateway updates [#123011](https://github.com/openclaw/openclaw/pull/123011)
- Keep limited-access guidance clear of Control UI controls [#123128](https://github.com/openclaw/openclaw/pull/123128)
- Keep partial numeric input from clearing saved settings [#123210](https://github.com/openclaw/openclaw/pull/123210)
- Preserve config form drafts across autosave acknowledgements [#123502](https://github.com/openclaw/openclaw/pull/123502)
- Block secret-map key renames that could corrupt credentials [#123571](https://github.com/openclaw/openclaw/pull/123571)
- Refresh Models after Gateway reconnect [#124065](https://github.com/openclaw/openclaw/pull/124065)
- Restore spacing across embedded settings sections [#126541](https://github.com/openclaw/openclaw/pull/126541)
- fix(ui): restore editable map-valued settings [#127336](https://github.com/openclaw/openclaw/pull/127336)
- fix: stop limited access status from shifting page layouts [#127704](https://github.com/openclaw/openclaw/pull/127704)
- fix(ui): show agent config errors and hydrated identity avatars [#129868](https://github.com/openclaw/openclaw/pull/129868)
- fix(ui): restore visible gateway status in the sidebar footer and announce restarts [#130025](https://github.com/openclaw/openclaw/pull/130025)
- Preserve focused settings edits during config refreshes [60babdd](https://github.com/openclaw/openclaw/commit/60babdd)
- Fix Quick Config thinking-level saves [#104523](https://github.com/openclaw/openclaw/pull/104523)
- Remove nested scrolling from settings pages [#104652](https://github.com/openclaw/openclaw/pull/104652)
- Align Settings headlines with their content columns [#106521](https://github.com/openclaw/openclaw/pull/106521)
- Hide Form-mode warning in Raw config editor [#107116](https://github.com/openclaw/openclaw/pull/107116)
- Show a fallback when Personal avatars fail [#109690](https://github.com/openclaw/openclaw/pull/109690)
- Hide setup agents from the normal agent roster [#111677](https://github.com/openclaw/openclaw/pull/111677)
- Generalize the external session opening label [#113759](https://github.com/openclaw/openclaw/pull/113759)
- Show the configured primary model in General Settings [#113769](https://github.com/openclaw/openclaw/pull/113769)
- Show each agent's actual model fallback chain [#113812](https://github.com/openclaw/openclaw/pull/113812)
- Keep successful Settings autosaves quiet [#114957](https://github.com/openclaw/openclaw/pull/114957)
- Identify source-built Control UI versions in Settings [#116134](https://github.com/openclaw/openclaw/pull/116134)
- Consolidate Control UI channel cards and setup controls [#117499](https://github.com/openclaw/openclaw/pull/117499)
- Show OpenAI plan usage with the correct provider and window [#120846](https://github.com/openclaw/openclaw/pull/120846)
- Stop Settings search from leading to hidden update fields [#123211](https://github.com/openclaw/openclaw/pull/123211)
- Preserve fallback-only model settings in the Agents UI [#123995](https://github.com/openclaw/openclaw/pull/123995)
- Show accurate save state for read-only Agents [#126568](https://github.com/openclaw/openclaw/pull/126568)
- fix(ui): surface config open-file failures [#127498](https://github.com/openclaw/openclaw/pull/127498)
- fix(ui): prevent settings save action from overlapping build info [#127597](https://github.com/openclaw/openclaw/pull/127597)
- fix(ui): keep limited access status clear of session titles [#128024](https://github.com/openclaw/openclaw/pull/128024)
- fix(ui): make Settings Escape contextual [#128099](https://github.com/openclaw/openclaw/pull/128099)
- fix(ui): show channel configuration save errors inside the editor [#129654](https://github.com/openclaw/openclaw/pull/129654)
- fix(ui): display resolved agent workspace and effective model consistently [#129701](https://github.com/openclaw/openclaw/pull/129701)
- fix(ui): show rejected WhatsApp actions without stalled refreshes [#129800](https://github.com/openclaw/openclaw/pull/129800)
- fix(ui): preserve Settings navigation selection and workspace fragments [#129888](https://github.com/openclaw/openclaw/pull/129888)
- refactor(ui): remove retired chat control styles [#130201](https://github.com/openclaw/openclaw/pull/130201)
- fix(ui): clarify gateway disconnect status in tab title [#130364](https://github.com/openclaw/openclaw/pull/130364)
- fix(ui): discarded config edits return after reverting Raw [#130521](https://github.com/openclaw/openclaw/pull/130521)
- fix(ui): keep settings footer aligned with main sidebar [#130715](https://github.com/openclaw/openclaw/pull/130715)

**Documentation**

- Replace retired Control UI insecure-auth guidance [#120295](https://github.com/openclaw/openclaw/pull/120295)
- Document Docker networking for the Telegram dashboard Mini App [#102805](https://github.com/openclaw/openclaw/pull/102805)
- Fix the custom Control UI home-directory example [#112691](https://github.com/openclaw/openclaw/pull/112691)
- Expand Telegram Dashboard Mini App setup guidance [#115981](https://github.com/openclaw/openclaw/pull/115981)

</details>

</Accordion>

<Accordion title="Sharing and Incognito">

On a multi-user Gateway, a conversation now keeps its creator and each identified person's prompts visible, while owners or administrators can choose whether someone else may read, suggest changes, work in a draft, or participate directly. Drafts can be created and published without a race, suggestions keep their author, and lightweight presence and typing cues make it easier to tell who is there without cluttering a solo setup.

People can manage their own display name and avatar, and permitted Online cards can show what someone is working on without exposing IP addresses or conversations the viewer cannot open. These controls make collaboration understandable, but they are not tenant isolation or a security boundary, and revoked access can briefly look available until the UI refreshes or the Gateway rejects the action.

Incognito is off by default and deliberately narrower. Its conversation stays in process memory, does not write the normal transcript or automatic OpenClaw memory to disk, and disappears when the Gateway restarts, but the model provider still receives the messages, tools can still write files or affect external services, content-free audit metadata remains, and whoever operates the Gateway can see live work.

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

**Improvements**

- Show who sent prompts on shared gateways [#111207](https://github.com/openclaw/openclaw/pull/111207)
- Show author avatars on user chat messages and queued prompts [#111309](https://github.com/openclaw/openclaw/pull/111309)
- Shared-gateway users can edit and see their own identity [#111371](https://github.com/openclaw/openclaw/pull/111371)
- Add self-service profile avatars across the Control UI [#111421](https://github.com/openclaw/openclaw/pull/111421)
- Add stable per-user chat bubble colors [#112070](https://github.com/openclaw/openclaw/pull/112070)
- Add session creator attribution and person filtering [#112658](https://github.com/openclaw/openclaw/pull/112658)
- Add session visibility, membership, and participation controls [#112787](https://github.com/openclaw/openclaw/pull/112787)
- Make multi-user Control UI chats easier to follow [#112938](https://github.com/openclaw/openclaw/pull/112938)
- Add web Control UI Incognito sessions [#113006](https://github.com/openclaw/openclaw/pull/113006)
- Create and publish draft sessions from the Control UI [#113127](https://github.com/openclaw/openclaw/pull/113127)
- Add shared-session suggestions and typing indicators [#113173](https://github.com/openclaw/openclaw/pull/113173)
- Add session ownership, participant tracking, and spawn receipts [#125057](https://github.com/openclaw/openclaw/pull/125057)
- Show online people and their session activity [#125695](https://github.com/openclaw/openclaw/pull/125695)
- Stream shared-session draft previews while teammates type [#126994](https://github.com/openclaw/openclaw/pull/126994)
- feat(ui): show activity cards for online people [#130664](https://github.com/openclaw/openclaw/pull/130664)
- Show Gravatar fallbacks for Control UI teammates [#111418](https://github.com/openclaw/openclaw/pull/111418)
- Simplify creator identity and filtering in the sidebar [#113150](https://github.com/openclaw/openclaw/pull/113150)
- Unify Draft and Incognito controls in the new-thread composer [#113799](https://github.com/openclaw/openclaw/pull/113799)
- Simplify new-session mode controls [#121407](https://github.com/openclaw/openclaw/pull/121407)
- Move Incognito to the new-session privacy rail [#124352](https://github.com/openclaw/openclaw/pull/124352)
- Move shared-session typing into the transcript [#125244](https://github.com/openclaw/openclaw/pull/125244)
- Make the ONLINE sidebar section collapsible [#125963](https://github.com/openclaw/openclaw/pull/125963)
- feat(ui): link chat and presence identities to their activity feed [#128369](https://github.com/openclaw/openclaw/pull/128369)
- Open the online-user roster from the Control UI footer [#111501](https://github.com/openclaw/openclaw/pull/111501)
- Polish the online-roster menu [#111668](https://github.com/openclaw/openclaw/pull/111668)
- Add breathing room to presence roster rows [#111689](https://github.com/openclaw/openclaw/pull/111689)
- Show the chat owner once and reflect live presence [#124006](https://github.com/openclaw/openclaw/pull/124006)

**Bug fixes**

- Make session viewer presence reflect what people actually view [#116001](https://github.com/openclaw/openclaw/pull/116001)
- Refresh attributed chat avatars after profile changes [#120381](https://github.com/openclaw/openclaw/pull/120381)
- Preserve avatars for global-scope chat aliases [#104155](https://github.com/openclaw/openclaw/pull/104155)
- Show the correct sender identity in multi-user chat [#111537](https://github.com/openclaw/openclaw/pull/111537)
- Show the current profile name on chat messages [#111987](https://github.com/openclaw/openclaw/pull/111987)
- Keep chat authors readable with one avatar and durable identity [#112357](https://github.com/openclaw/openclaw/pull/112357)
- Keep attributed avatars beside sent messages [#112472](https://github.com/openclaw/openclaw/pull/112472)
- Load user avatars consistently across the Control UI [#114444](https://github.com/openclaw/openclaw/pull/114444)
- Show consistent user avatars across the Control UI [#114496](https://github.com/openclaw/openclaw/pull/114496)
- Show session-sharing failures without leaking them across chats [#118135](https://github.com/openclaw/openclaw/pull/118135)
- Improve Control UI avatar fallbacks and visual alignment [#118337](https://github.com/openclaw/openclaw/pull/118337)
- Load Control UI avatars with Tailscale identity auth [#118353](https://github.com/openclaw/openclaw/pull/118353)
- Refresh saved profile identity across live Control UI sessions [#120791](https://github.com/openclaw/openclaw/pull/120791)
- Keep collaborator typing status from moving the chat composer [#121438](https://github.com/openclaw/openclaw/pull/121438)
- Keep long chat-sharing menus compact [#122322](https://github.com/openclaw/openclaw/pull/122322)
- Contain long member names in the sharing menu [#123017](https://github.com/openclaw/openclaw/pull/123017)
- Keep non-person principals out of session owners [#125579](https://github.com/openclaw/openclaw/pull/125579)
- Align session filtering with current ownership [#125645](https://github.com/openclaw/openclaw/pull/125645)
- Restore Control UI user avatar changes [#107327](https://github.com/openclaw/openclaw/pull/107327)
- Handle unset identities in Profile settings [#112046](https://github.com/openclaw/openclaw/pull/112046)
- Hide avatar initials when a profile photo loads [#112523](https://github.com/openclaw/openclaw/pull/112523)
- Show resolved avatars on session owner chips [#114682](https://github.com/openclaw/openclaw/pull/114682)
- Preserve initials when Control UI users have no avatar [#115976](https://github.com/openclaw/openclaw/pull/115976)
- Keep missing profile avatars on initials after rerenders [#120370](https://github.com/openclaw/openclaw/pull/120370)
- Keep own-message sender names still on hover [#121406](https://github.com/openclaw/openclaw/pull/121406)
- Keep the web chat model picker stable during remote typing [#122809](https://github.com/openclaw/openclaw/pull/122809)
- Make active new-session visibility pills visually distinct [#123173](https://github.com/openclaw/openclaw/pull/123173)
- Clear deleted incognito sessions across connected clients [#123333](https://github.com/openclaw/openclaw/pull/123333)
- Render sharing members from their recorded identity type [#124257](https://github.com/openclaw/openclaw/pull/124257)
- Make Assign to me update session ownership [#126031](https://github.com/openclaw/openclaw/pull/126031)
- Identify the signed-in user in session owner filters [#126052](https://github.com/openclaw/openclaw/pull/126052)
- Keep peer identity fixed when message actions appear [#126287](https://github.com/openclaw/openclaw/pull/126287)
- fix(ui): surface session owner assignment failures [#127431](https://github.com/openclaw/openclaw/pull/127431)
- fix(ui): announce session sharing failures [#127801](https://github.com/openclaw/openclaw/pull/127801)
- fix(ui): make multi-user session avatars legible [#128040](https://github.com/openclaw/openclaw/pull/128040)

</details>

</Accordion>

<Accordion title="Appearance, language, accessibility, and mobile">

The Control UI is easier to navigate without a mouse. Keyboard and focus behavior is more consistent across navigation, dialogs, tabs, Settings, plugins, skills, Usage, Workboards, the terminal, and the browser, with skip links, clearer assistive-technology labels, and focus returning to the right place after menus and dialogs close.

On phones and tablets, text sizing now reaches navigation and sidebar content. Inputs no longer trigger iOS zoom, touch devices avoid desktop-style hover highlights, and Send or Stop responds to the first tap on the documented Android Chrome and installed-PWA layouts while desktop hover behavior stays intact.

Appearance now includes seven built-in themes, with offline-safe bundled fonts for Absolutely, Tide, Beacon, and Phosphor. All 20 maintained non-English Control UI locales load only when selected and fill previously missing strings.

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

**Improvements**

- Localize remaining Control UI copy [#105008](https://github.com/openclaw/openclaw/pull/105008)
- Standardize accessible controls across Control UI [#106865](https://github.com/openclaw/openclaw/pull/106865)
- Build Control UI locales from canonical translation memory [#117157](https://github.com/openclaw/openclaw/pull/117157)
- Apply Control UI text sizing across sidebars and navigation [#121087](https://github.com/openclaw/openclaw/pull/121087)
- Improve the Control UI experience on phones and tablets [#122492](https://github.com/openclaw/openclaw/pull/122492)
- Add continuous corner curvature to Control UI [#124129](https://github.com/openclaw/openclaw/pull/124129)
- feat(control-ui): Cmd+/ keyboard shortcuts overview from a declarative catalog [#128563](https://github.com/openclaw/openclaw/pull/128563)
- feat(control-ui): add the Absolutely theme with self-hosted typography [#129885](https://github.com/openclaw/openclaw/pull/129885)
- feat(control-ui): add the Tide, Beacon, and Phosphor themes [#130232](https://github.com/openclaw/openclaw/pull/130232)
- feat(ui): refine the mobile composer [#130308](https://github.com/openclaw/openclaw/pull/130308)
- feat(ui): refine the mobile chat topbar [#130318](https://github.com/openclaw/openclaw/pull/130318)
- feat(ui): give every theme family its own typeface and refine palettes [#130767](https://github.com/openclaw/openclaw/pull/130767)
- Add single-key shortcuts to Control UI context menus [#103090](https://github.com/openclaw/openclaw/pull/103090)
- Compact the New session screen on phones [#105177](https://github.com/openclaw/openclaw/pull/105177)
- Center the Control UI composer footer controls [#105866](https://github.com/openclaw/openclaw/pull/105866)
- Restore usable content scrollbars and text selection boundaries [#107349](https://github.com/openclaw/openclaw/pull/107349)
- Localize the New session attachment-reading status [#107372](https://github.com/openclaw/openclaw/pull/107372)
- Preview real theme colors in Appearance settings [#110626](https://github.com/openclaw/openclaw/pull/110626)
- Unify Control UI tooltips and improve sidebar hover details [#112602](https://github.com/openclaw/openclaw/pull/112602)
- Unify sidebar footer tooltips [#112639](https://github.com/openclaw/openclaw/pull/112639)
- Move Language into Appearance and retire General settings [#115798](https://github.com/openclaw/openclaw/pull/115798)
- Focus and highlight the capabilities prompt [#117279](https://github.com/openclaw/openclaw/pull/117279)
- Add accessible in-app confirmations across Control UI workflows [#118250](https://github.com/openclaw/openclaw/pull/118250)
- Soften Control UI dark-mode body text [#121409](https://github.com/openclaw/openclaw/pull/121409)
- Unify Control UI menu styling [#122109](https://github.com/openclaw/openclaw/pull/122109)
- Standardize Control UI responsive breakpoints [#123160](https://github.com/openclaw/openclaw/pull/123160)
- Standardize scrollbars across the Control UI [#124285](https://github.com/openclaw/openclaw/pull/124285)
- Unify Control UI tooltip styling and keyboard descriptions [#125061](https://github.com/openclaw/openclaw/pull/125061)
- Unify Control UI transient-surface elevation [#125065](https://github.com/openclaw/openclaw/pull/125065)
- Keep mobile session actions reachable [#126124](https://github.com/openclaw/openclaw/pull/126124)
- Add zoom and pan to mobile image previews [#126528](https://github.com/openclaw/openclaw/pull/126528)
- improve(ui): collapse mobile composer controls [#129853](https://github.com/openclaw/openclaw/pull/129853)
- improve(ui): clarify Appearance theme controls [#130844](https://github.com/openclaw/openclaw/pull/130844)
- Make Control UI corner radius theme-owned [#102641](https://github.com/openclaw/openclaw/pull/102641)
- Refine Control UI shadows and identify dev builds [#104215](https://github.com/openclaw/openclaw/pull/104215)
- Move language selection into Settings > General [#104638](https://github.com/openclaw/openclaw/pull/104638)
- Use the arrow cursor on Control UI menus [#110469](https://github.com/openclaw/openclaw/pull/110469)
- Give the theme Import card a clear action icon [#110807](https://github.com/openclaw/openclaw/pull/110807)
- Polish the chat composer at narrow widths [#111150](https://github.com/openclaw/openclaw/pull/111150)
- Align Control UI fallback colors with the current palette [#113684](https://github.com/openclaw/openclaw/pull/113684)
- chore(ui): refresh control ui locales [#130896](https://github.com/openclaw/openclaw/pull/130896)

**Bug fixes**

- Improve Control UI keyboard accessibility [#106320](https://github.com/openclaw/openclaw/pull/106320)
- Localize remaining Control UI surfaces [#115730](https://github.com/openclaw/openclaw/pull/115730)
- Restore keyboard navigation across macOS and Control UI [#115942](https://github.com/openclaw/openclaw/pull/115942)
- Keep mobile chat actions responsive [#116104](https://github.com/openclaw/openclaw/pull/116104)
- Restore Control UI sidebar and Appearance accessibility [#121360](https://github.com/openclaw/openclaw/pull/121360)
- fix(ui): keep effort in the composer row [#130788](https://github.com/openclaw/openclaw/pull/130788)
- Show readable session titles with accessible sidebar navigation [#96267](https://github.com/openclaw/openclaw/pull/96267)
- Use the default cursor in the sessions sidebar [#103357](https://github.com/openclaw/openclaw/pull/103357)
- Dismiss stale topbar menus and restore keyboard focus [#103508](https://github.com/openclaw/openclaw/pull/103508)
- Stop hidden session menu shortcuts after navigation collapse [#103514](https://github.com/openclaw/openclaw/pull/103514)
- Restore keyboard controls in sidebar menus [#103612](https://github.com/openclaw/openclaw/pull/103612)
- Restore Control UI autosave translations [#107477](https://github.com/openclaw/openclaw/pull/107477)
- Restore WCAG AA contrast for muted dark-theme chat text [#110195](https://github.com/openclaw/openclaw/pull/110195)
- Fix the Control UI language picker styling [#110621](https://github.com/openclaw/openclaw/pull/110621)
- Bring dark-theme coral buttons to WCAG AA [#110957](https://github.com/openclaw/openclaw/pull/110957)
- Improve Openknot and Dash dark-theme button contrast [#111003](https://github.com/openclaw/openclaw/pull/111003)
- Repair Control UI focus and run cancellation [#111036](https://github.com/openclaw/openclaw/pull/111036)
- Keep narrow web chat layouts readable [#112012](https://github.com/openclaw/openclaw/pull/112012)
- Let Escape close the new-session model picker [#112071](https://github.com/openclaw/openclaw/pull/112071)
- Make Hide and Rewind confirmations keyboard-accessible [#112108](https://github.com/openclaw/openclaw/pull/112108)
- Load pinned and base-path Control UI pages on mobile [#112175](https://github.com/openclaw/openclaw/pull/112175)
- Fix Control UI fonts, theme state, and status colors [#113724](https://github.com/openclaw/openclaw/pull/113724)
- Restore missing Control UI theme colors [#113726](https://github.com/openclaw/openclaw/pull/113726)
- Restore Control UI E2E coverage and fix uncovered UI regressions [#114554](https://github.com/openclaw/openclaw/pull/114554)
- Restore WCAG AA contrast for muted theme text [#114586](https://github.com/openclaw/openclaw/pull/114586)
- Match ClickClack discussion sidebars to Control UI themes [#114812](https://github.com/openclaw/openclaw/pull/114812)
- Synchronize Control UI language and text direction metadata [#115047](https://github.com/openclaw/openclaw/pull/115047)
- Refresh non-English Control UI translations [#115065](https://github.com/openclaw/openclaw/pull/115065)
- Keep modal focus on the field a user selected [#115168](https://github.com/openclaw/openclaw/pull/115168)
- Make the terminal session picker keyboard accessible [#116026](https://github.com/openclaw/openclaw/pull/116026)
- Restore mobile task navigation and accessible usage controls [#116751](https://github.com/openclaw/openclaw/pull/116751)
- Restore usable previews and modal sizing on narrow screens [#116885](https://github.com/openclaw/openclaw/pull/116885)
- Restore accessible controls and alerts in Sessions [#117019](https://github.com/openclaw/openclaw/pull/117019)
- Preserve newer Appearance choices during delayed theme imports [#117292](https://github.com/openclaw/openclaw/pull/117292)
- Restore pointer cursors in browser-hosted Control UI [#121258](https://github.com/openclaw/openclaw/pull/121258)
- Restore monospace styling in the Control UI [#121320](https://github.com/openclaw/openclaw/pull/121320)
- Hide assistive status text without removing screen-reader access [#121847](https://github.com/openclaw/openclaw/pull/121847)
- Keep toasts visible above mobile drawers and dialogs [#121858](https://github.com/openclaw/openclaw/pull/121858)
- Keep chat composer pickers usable on mobile [#121881](https://github.com/openclaw/openclaw/pull/121881)
- fix(ui): reach identity-menu footer controls with keyboard [#122066](https://github.com/openclaw/openclaw/pull/122066)
- Keep composer capability menus within the viewport [#122296](https://github.com/openclaw/openclaw/pull/122296)
- Keep model and effort pickers inside the viewport [#123386](https://github.com/openclaw/openclaw/pull/123386)
- Improve chat-link contrast across every Control UI theme [#123824](https://github.com/openclaw/openclaw/pull/123824)
- Hide mobile chat metadata until a message is tapped [#124936](https://github.com/openclaw/openclaw/pull/124936)
- Make expanded mobile side panels fill the workspace [#126111](https://github.com/openclaw/openclaw/pull/126111)
- Keep mobile sidebar session menus within reach [#126355](https://github.com/openclaw/openclaw/pull/126355)
- Label Chat and New Session message fields for screen readers [#126952](https://github.com/openclaw/openclaw/pull/126952)
- fix(ui): announce custom theme import results [#127380](https://github.com/openclaw/openclaw/pull/127380)
- fix(ui): align Activity sessions across viewports [#127686](https://github.com/openclaw/openclaw/pull/127686)
- fix(ui): let keyboard users choose a profile avatar [#128095](https://github.com/openclaw/openclaw/pull/128095)
- fix(ui): balance mobile model and effort controls [#128240](https://github.com/openclaw/openclaw/pull/128240)
- fix(ui): show more chat text on mobile [#128944](https://github.com/openclaw/openclaw/pull/128944)
- fix(android): preserve gateway context paths in control pages [#129087](https://github.com/openclaw/openclaw/pull/129087)
- fix(ui): chat file copy hides successful and failed outcomes [#129617](https://github.com/openclaw/openclaw/pull/129617)
- fix(ui): Control UI smooth scrolling ignores the reduced-motion preference [#130428](https://github.com/openclaw/openclaw/pull/130428)
- fix(ui): report failed copies and retire stale clipboard actions [#130612](https://github.com/openclaw/openclaw/pull/130612)
- Close the session sort menu on a second click [#102448](https://github.com/openclaw/openclaw/pull/102448)
- Keep macOS Settings below window controls [#102663](https://github.com/openclaw/openclaw/pull/102663)
- Refresh mounted Control UI translations [#103293](https://github.com/openclaw/openclaw/pull/103293)
- Use the arrow cursor for Control UI controls [#103411](https://github.com/openclaw/openclaw/pull/103411)
- Restore the default cursor on mount-fallback controls [#103448](https://github.com/openclaw/openclaw/pull/103448)
- Hide tooltips that only repeat visible labels [#104193](https://github.com/openclaw/openclaw/pull/104193)
- fix(ui): stop chat welcome suggestion text overflowing chips on phones [#104579](https://github.com/openclaw/openclaw/pull/104579)
- Preserve emoji in Control UI agent initials [#104912](https://github.com/openclaw/openclaw/pull/104912)
- Preserve emoji in plugin fallback initials [#105240](https://github.com/openclaw/openclaw/pull/105240)
- Restore outline icons on the New session screen [#106193](https://github.com/openclaw/openclaw/pull/106193)
- Keep only history controls in the Settings titlebar [#106228](https://github.com/openclaw/openclaw/pull/106228)
- Match Control UI Settings controls to the active scene [#107109](https://github.com/openclaw/openclaw/pull/107109)
- Center paired-node external session conversations [#107781](https://github.com/openclaw/openclaw/pull/107781)
- Center New Session failures in an accessible alert [#107997](https://github.com/openclaw/openclaw/pull/107997)
- Localize tool group and profile names in the Control UI [#109063](https://github.com/openclaw/openclaw/pull/109063)
- Make Usage Overview hints interactive [#109247](https://github.com/openclaw/openclaw/pull/109247)
- Preserve complete Unicode graphemes in provider icons [#109509](https://github.com/openclaw/openclaw/pull/109509)
- Preserve Unicode in usage session filters [#109860](https://github.com/openclaw/openclaw/pull/109860)
- Restore settings chevrons in dark mode [#110446](https://github.com/openclaw/openclaw/pull/110446)
- Match chat message action buttons in light mode [#111230](https://github.com/openclaw/openclaw/pull/111230)
- Restore the outlined archived-sidebar icon [#111867](https://github.com/openclaw/openclaw/pull/111867)
- Prevent Logs controls overlapping at larger text scales [#112170](https://github.com/openclaw/openclaw/pull/112170)
- Keep Model Provider select arrows on the right [#112530](https://github.com/openclaw/openclaw/pull/112530)
- Keep Control UI user-message footer actions in reading order [#112836](https://github.com/openclaw/openclaw/pull/112836)
- Improve Control UI status-label contrast [#113526](https://github.com/openclaw/openclaw/pull/113526)
- Prevent a white flash while the Dashboard theme loads [#113558](https://github.com/openclaw/openclaw/pull/113558)
- Align Settings dropdown chevrons across themes [#114923](https://github.com/openclaw/openclaw/pull/114923)
- Prevent mobile new-chat controls from overlapping [#116607](https://github.com/openclaw/openclaw/pull/116607)
- Show complete Unicode initials in session owner chips [#117350](https://github.com/openclaw/openclaw/pull/117350)
- Label Gateway connection settings for accessibility [#118000](https://github.com/openclaw/openclaw/pull/118000)
- Contain the transcript keyboard focus ring [#120693](https://github.com/openclaw/openclaw/pull/120693)
- Keep dashboard widgets themed while loading [#120820](https://github.com/openclaw/openclaw/pull/120820)
- Fix theme import screen-reader semantics [#120836](https://github.com/openclaw/openclaw/pull/120836)
- Make chat code readable on dark themes [#121376](https://github.com/openclaw/openclaw/pull/121376)
- Stop inline MCP App cards flashing white after scrolling [#121435](https://github.com/openclaw/openclaw/pull/121435)
- Open session menus with keyboard context-menu shortcuts [#121628](https://github.com/openclaw/openclaw/pull/121628)
- Space compound duration units in the Control UI [#121857](https://github.com/openclaw/openclaw/pull/121857)
- Use a neutral focus treatment for the chat composer [#122232](https://github.com/openclaw/openclaw/pull/122232)
- Prevent composer accessory clicks from taking focus [#122243](https://github.com/openclaw/openclaw/pull/122243)
- Let short Canvas previews fit their content [#122294](https://github.com/openclaw/openclaw/pull/122294)
- Keep picker labels readable on phones [#123085](https://github.com/openclaw/openclaw/pull/123085)
- Keep schedule pickers inside phone-width grid cells [#123175](https://github.com/openclaw/openclaw/pull/123175)
- Fix raw and untranslated Control UI option labels [#123238](https://github.com/openclaw/openclaw/pull/123238)
- Stop repeated screen-reader announcements in web chat [#123240](https://github.com/openclaw/openclaw/pull/123240)
- Restore chat keyboard controls after interrupted IME input [#123249](https://github.com/openclaw/openclaw/pull/123249)
- Show “Default” instead of a raw translation key [#123279](https://github.com/openclaw/openclaw/pull/123279)
- Keep Control UI notifications above the chat composer [#123423](https://github.com/openclaw/openclaw/pull/123423)
- Keep mobile lightbox images inside the viewport [#123840](https://github.com/openclaw/openclaw/pull/123840)
- Keep session menus on dragged sessions [#124344](https://github.com/openclaw/openclaw/pull/124344)
- Keep mobile Side chat contained and interactive [#124785](https://github.com/openclaw/openclaw/pull/124785)
- Make light-theme diff syntax readable [#124814](https://github.com/openclaw/openclaw/pull/124814)
- Inset the limited-access badge from the chat edge [#125012](https://github.com/openclaw/openclaw/pull/125012)
- Keep chat composer footer controls readable [#125445](https://github.com/openclaw/openclaw/pull/125445)
- Hide tooltips that duplicate visible Control UI labels [#125684](https://github.com/openclaw/openclaw/pull/125684)
- Reserve the hand cursor for links and new-window actions [#126153](https://github.com/openclaw/openclaw/pull/126153)
- Announce Worktrees operation failures to assistive technology [#127114](https://github.com/openclaw/openclaw/pull/127114)
- Keep segmented settings selections visible in forced-colors mode [#127165](https://github.com/openclaw/openclaw/pull/127165)
- Expose the active split pane to assistive technology [#127213](https://github.com/openclaw/openclaw/pull/127213)
- fix(ui): align narrow chat composer spacing [#127717](https://github.com/openclaw/openclaw/pull/127717)
- fix(ui): avoid duplicate main landmark on Activity [#127789](https://github.com/openclaw/openclaw/pull/127789)
- fix(ui): expose Advanced Settings accordion state [#127960](https://github.com/openclaw/openclaw/pull/127960)
- fix(ui): show busy avatar chooser as disabled [#128059](https://github.com/openclaw/openclaw/pull/128059)
- fix(ui): remove visible widget scrollbar tracks [#128538](https://github.com/openclaw/openclaw/pull/128538)
- fix(ui): shorten the composer prefill cue [#128677](https://github.com/openclaw/openclaw/pull/128677)
- fix(control-ui): chat Markdown preview renders RTL documents left-to-right [#129129](https://github.com/openclaw/openclaw/pull/129129)
- fix(ui): preserve modal keyboard ownership across shadow roots [#129747](https://github.com/openclaw/openclaw/pull/129747)
- fix(canvas): reflow generated visualizations on narrow screens [#129856](https://github.com/openclaw/openclaw/pull/129856)
- fix(ui): align mobile toast actions [#129909](https://github.com/openclaw/openclaw/pull/129909)
- fix(ui): center compact permission icons [#130137](https://github.com/openclaw/openclaw/pull/130137)
- fix(ui): join collapsed mobile question to composer [#130179](https://github.com/openclaw/openclaw/pull/130179)
- fix(control-ui): darken the Absolutely surface ramp [#130239](https://github.com/openclaw/openclaw/pull/130239)
- fix(android): inline widgets fail behind gateway proxy paths [#130535](https://github.com/openclaw/openclaw/pull/130535)
- fix(ui): straighten the Online sidebar divider [#130646](https://github.com/openclaw/openclaw/pull/130646)
- fix(ui): allow copying error callout text [#130717](https://github.com/openclaw/openclaw/pull/130717)
- fix(ui): remove model-loading gap from new-session composer [#130829](https://github.com/openclaw/openclaw/pull/130829)
- fix(android): blank widgets on mapped-address pinned gateways [#130835](https://github.com/openclaw/openclaw/pull/130835)
- Keep the new-session composer within easy reach on mobile [#130858](https://github.com/openclaw/openclaw/pull/130858)
- fix(ui): make composer text sizing consistent [#131154](https://github.com/openclaw/openclaw/pull/131154)

**Documentation**

- Document Control UI lobster visits and controls [#103175](https://github.com/openclaw/openclaw/pull/103175)

</details>

</Accordion>

<Accordion title="Control UI Latency and Responsiveness">

The Control UI now gets to Chat with much less work. In a simulated default-chat test with a mocked Gateway and 50 millisecond HTTP/1.1 latency, JavaScript requests fell from 140 to 45 and startup fell from about 1.6 seconds to 575 milliseconds.

It also stays lighter the longer you leave it open. Hidden panels stop fetching data they do not show, retained state is bounded, and returning to a conversation repeats less rendering.

Reconnects reject stale responses and keep the right conversation selected as the connection changes. If the page bundle loads but never renders, OpenClaw now shows recovery guidance and a Try again action, while interrupted updates reconcile with the replacement Gateway and confirm success only after it reports the expected version.

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

**Improvements**

- Compress and cache bundled Control UI assets [#105890](https://github.com/openclaw/openclaw/pull/105890)
- Load Control UI styles with lazy routes [#106183](https://github.com/openclaw/openclaw/pull/106183)
- Reduce Control UI chat render stutter [#110472](https://github.com/openclaw/openclaw/pull/110472)
- Unify Control UI offline status and queued-message guidance [#112600](https://github.com/openclaw/openclaw/pull/112600)
- Speed up common Gateway dashboard reads [#114754](https://github.com/openclaw/openclaw/pull/114754)
- Keep Control UI chats stable when switching sessions [#115059](https://github.com/openclaw/openclaw/pull/115059)
- Make Control UI session switching feel immediate [#115129](https://github.com/openclaw/openclaw/pull/115129)
- Speed up provider session catalog polling [#115259](https://github.com/openclaw/openclaw/pull/115259)
- Push session pull request indicators to Control UI clients [#115643](https://github.com/openclaw/openclaw/pull/115643)
- Speed up Control UI config and session reads [#115930](https://github.com/openclaw/openclaw/pull/115930)
- Speed up the first dashboard session list [#118434](https://github.com/openclaw/openclaw/pull/118434)
- Make recent Control UI session switches nearly instant [#121625](https://github.com/openclaw/openclaw/pull/121625)
- Make warm Control UI session switches settle faster [#121792](https://github.com/openclaw/openclaw/pull/121792)
- Restore unsent Control UI drafts after browser restarts [#125332](https://github.com/openclaw/openclaw/pull/125332)
- Refresh cached chat sessions with small cursor deltas [#125606](https://github.com/openclaw/openclaw/pull/125606)
- perf(ui): consolidate Control UI boot chunk graph for HTTP/1.1 gateways [#128514](https://github.com/openclaw/openclaw/pull/128514)
- improve(ui): faster session switching and smoother chat rendering [#129548](https://github.com/openclaw/openclaw/pull/129548)
- perf(ui): bootstrap session rosters in one request [#130294](https://github.com/openclaw/openclaw/pull/130294)
- Load optional Control UI tools only when needed [#106243](https://github.com/openclaw/openclaw/pull/106243)
- Reduce repeated rendering during streamed chat replies [#106353](https://github.com/openclaw/openclaw/pull/106353)
- Reduce Control UI startup by lazy-loading the approval page [#110528](https://github.com/openclaw/openclaw/pull/110528)
- Show sidebar status only during sustained disconnects [#110567](https://github.com/openclaw/openclaw/pull/110567)
- Reduce Control UI startup JavaScript [#110623](https://github.com/openclaw/openclaw/pull/110623)
- Reduce Control UI startup CSS [#110687](https://github.com/openclaw/openclaw/pull/110687)
- Refresh queued-message badges across tabs and unify sidebar tooltips [#112780](https://github.com/openclaw/openclaw/pull/112780)
- Speed up Control UI session switching [#114338](https://github.com/openclaw/openclaw/pull/114338)
- Center the animated mascot while pages load [#114481](https://github.com/openclaw/openclaw/pull/114481)
- Share one node snapshot across session catalog providers [#114646](https://github.com/openclaw/openclaw/pull/114646)
- Bound session-list title and preview reads for large transcripts [#114647](https://github.com/openclaw/openclaw/pull/114647)
- Reduce pairing-table scans for gateway node reads [#114657](https://github.com/openclaw/openclaw/pull/114657)
- Reduce repeated work in session list requests [#114659](https://github.com/openclaw/openclaw/pull/114659)
- Coalesce duplicate Control UI chat startup requests [#114743](https://github.com/openclaw/openclaw/pull/114743)
- Reduce session catalog cloning for faster loading [#114829](https://github.com/openclaw/openclaw/pull/114829)
- Speed up Control UI session loading and catalog polling [#114837](https://github.com/openclaw/openclaw/pull/114837)
- Reduce repeated session catalog work [#114961](https://github.com/openclaw/openclaw/pull/114961)
- Speed Gateway chat startup and session switching [#115007](https://github.com/openclaw/openclaw/pull/115007)
- Make Codex session catalog polling respond from cache [#115403](https://github.com/openclaw/openclaw/pull/115403)
- Prewarm dashboard data caches after gateway startup [#115710](https://github.com/openclaw/openclaw/pull/115710)
- Keep session lists fast with retained subagent history [#116533](https://github.com/openclaw/openclaw/pull/116533)
- Bound session-list transcript validation work [#118380](https://github.com/openclaw/openclaw/pull/118380)
- Format sidebar timestamps only when displayed [#121819](https://github.com/openclaw/openclaw/pull/121819)
- Speed up large Markdown session switches [#122150](https://github.com/openclaw/openclaw/pull/122150)
- Show cached models while chat metadata refreshes [#124868](https://github.com/openclaw/openclaw/pull/124868)
- Coalesce New Session draft writes while preserving durability [#125868](https://github.com/openclaw/openclaw/pull/125868)
- feat(ui): load owner sessions before shared roster [#128767](https://github.com/openclaw/openclaw/pull/128767)
- Control UI: parallelize session roster loads [#129175](https://github.com/openclaw/openclaw/pull/129175)
- improve(ui): speed up session loading and chat rendering [#129656](https://github.com/openclaw/openclaw/pull/129656)
- improve(ui): make session switching and transcript rendering faster [#129834](https://github.com/openclaw/openclaw/pull/129834)
- perf(control-ui): load built-in theme palettes on demand [#130473](https://github.com/openclaw/openclaw/pull/130473)
- Speed up large session lists without changing results [#114842](https://github.com/openclaw/openclaw/pull/114842)
- Reduce redundant Control UI session refreshes [#115374](https://github.com/openclaw/openclaw/pull/115374)
- Reduce redundant work in session listing [#115384](https://github.com/openclaw/openclaw/pull/115384)

**Bug fixes**

- Keep Control UI state current across reconnects and navigation [#102745](https://github.com/openclaw/openclaw/pull/102745)
- Preserve accepted Control UI turns across Gateway restarts [#106151](https://github.com/openclaw/openclaw/pull/106151)
- Refresh New Session state after Gateway reconnects [#106595](https://github.com/openclaw/openclaw/pull/106595)
- Stabilize long Control UI chat transcripts [#107893](https://github.com/openclaw/openclaw/pull/107893)
- Show retryable Usage and Logs request failures [#108689](https://github.com/openclaw/openclaw/pull/108689)
- Show new-task prompts immediately without duplicate bubbles [#111953](https://github.com/openclaw/openclaw/pull/111953)
- Start the Control UI without strict-CSP eval violations [#113617](https://github.com/openclaw/openclaw/pull/113617)
- Speed up Control UI startup data [#114605](https://github.com/openclaw/openclaw/pull/114605)
- Harden Control UI state, permissions, and navigation lifecycles [#115110](https://github.com/openclaw/openclaw/pull/115110)
- Make Control UI state, permissions, media, and mobile navigation reliable [#115364](https://github.com/openclaw/openclaw/pull/115364)
- Keep web and terminal conversations synchronized [#115377](https://github.com/openclaw/openclaw/pull/115377)
- Keep web and terminal chats synchronized [#115429](https://github.com/openclaw/openclaw/pull/115429)
- Unify browser chat session projection paths [#115461](https://github.com/openclaw/openclaw/pull/115461)
- Recover Control UI sessions after prolonged outages [#115654](https://github.com/openclaw/openclaw/pull/115654)
- Restore active chat responses after reconnect [#115691](https://github.com/openclaw/openclaw/pull/115691)
- Reconcile Control UI updates after lost responses [#116098](https://github.com/openclaw/openclaw/pull/116098)
- Prevent stale Control UI Gateway connections from resurfacing [#117017](https://github.com/openclaw/openclaw/pull/117017)
- Stabilize Control UI memory, plugin, and model setup state [#117047](https://github.com/openclaw/openclaw/pull/117047)
- Keep Control UI sessions and navigation current across reconnects [#117103](https://github.com/openclaw/openclaw/pull/117103)
- Preserve Control UI session, tool, archive, and focus ownership [#117191](https://github.com/openclaw/openclaw/pull/117191)
- Restore active chat progress after navigation and reconnect [#118472](https://github.com/openclaw/openclaw/pull/118472)
- Clear resolved questions across split Control UI panes [#118787](https://github.com/openclaw/openclaw/pull/118787)
- Recover New Session models through Gateway startup [#119120](https://github.com/openclaw/openclaw/pull/119120)
- Preserve Control UI history and active-run timing after recovery [#119729](https://github.com/openclaw/openclaw/pull/119729)
- Recover Control UI startup routes and preserve unsent drafts [#120960](https://github.com/openclaw/openclaw/pull/120960)
- Restore model availability in New Session after Gateway startup [#121057](https://github.com/openclaw/openclaw/pull/121057)
- Send images with known-capable models without catalog delay [#123476](https://github.com/openclaw/openclaw/pull/123476)
- Show when Settings autosave pauses after reconnect [#123663](https://github.com/openclaw/openclaw/pull/123663)
- Recover stale Control UI sessions after Gateway updates [#124772](https://github.com/openclaw/openclaw/pull/124772)
- Show recovery when the Control UI never renders [#124861](https://github.com/openclaw/openclaw/pull/124861)
- Refresh Control UI checkout side panels [#125785](https://github.com/openclaw/openclaw/pull/125785)
- Preserve committed session results across reconnects [#125904](https://github.com/openclaw/openclaw/pull/125904)
- Recover failed optional Control UI surfaces [#126409](https://github.com/openclaw/openclaw/pull/126409)
- Recover Control UI chat from stalled subscriptions [#126760](https://github.com/openclaw/openclaw/pull/126760)
- perf(ui): stop running full setup detection on every Control UI connect [#128135](https://github.com/openclaw/openclaw/pull/128135)
- fix(ui): show chat before startup metadata finishes [#128652](https://github.com/openclaw/openclaw/pull/128652)
- fix(ui): resume session starts after Gateway reconnects [#128661](https://github.com/openclaw/openclaw/pull/128661)
- fix: keep Control UI routes usable across updates [#129922](https://github.com/openclaw/openclaw/pull/129922)
- Keep sidebar sessions visible during Gateway reconnects [#102424](https://github.com/openclaw/openclaw/pull/102424)
- Recover Control UI panels after gateway updates [#104305](https://github.com/openclaw/openclaw/pull/104305)
- Prevent stale Worktrees actions during refreshes [#105384](https://github.com/openclaw/openclaw/pull/105384)
- Unblock Control UI recovery when a document probe hangs [#105795](https://github.com/openclaw/openclaw/pull/105795)
- Make panel load failures easier to recover from [#106033](https://github.com/openclaw/openclaw/pull/106033)
- Retry transient Control UI session-group catalog failures [#106169](https://github.com/openclaw/openclaw/pull/106169)
- Restore Control UI transcripts after reload and bundled icons [#106981](https://github.com/openclaw/openclaw/pull/106981)
- Stop stalled generated-image previews from hanging chat rows [#108116](https://github.com/openclaw/openclaw/pull/108116)
- Keep Control UI recovery retrying after stalled probes [#108163](https://github.com/openclaw/openclaw/pull/108163)
- Keep Workspaces on the newest loaded state [#108204](https://github.com/openclaw/openclaw/pull/108204)
- Stop Control UI usage reloads on reconnect [#108726](https://github.com/openclaw/openclaw/pull/108726)
- Stop reconnects from repeatedly reloading Control UI usage data [#108904](https://github.com/openclaw/openclaw/pull/108904)
- Time out stalled Control UI WebSocket openings [#109037](https://github.com/openclaw/openclaw/pull/109037)
- Keep Control UI connected through brief Gateway stalls [#109317](https://github.com/openclaw/openclaw/pull/109317)
- Keep slow session hosts from blocking the sidebar [#110106](https://github.com/openclaw/openclaw/pull/110106)
- Prevent stale sidebar health alerts [#111061](https://github.com/openclaw/openclaw/pull/111061)
- Recover stalled Nostr profile requests [#111093](https://github.com/openclaw/openclaw/pull/111093)
- Refresh the Control UI agent roster on config changes [#111395](https://github.com/openclaw/openclaw/pull/111395)
- Restore responsive slash commands in long WebChat sessions [#111539](https://github.com/openclaw/openclaw/pull/111539)
- Prompt stale Control UI tabs to refresh after gateway upgrades [#111619](https://github.com/openclaw/openclaw/pull/111619)
- Recover Control UI reloads during gateway restarts [#111670](https://github.com/openclaw/openclaw/pull/111670)
- Keep dashboard MCP Apps within lease capacity [#111691](https://github.com/openclaw/openclaw/pull/111691)
- Keep Control UI plugin tabs and widgets after agent turns [#112471](https://github.com/openclaw/openclaw/pull/112471)
- Keep Control UI session updates live across chat switches [#112526](https://github.com/openclaw/openclaw/pull/112526)
- Keep reconnect replays visible and fresh branch lists empty [#112756](https://github.com/openclaw/openclaw/pull/112756)
- Prevent duplicate image prompts and flicker [#113113](https://github.com/openclaw/openclaw/pull/113113)
- Preserve session-specific assistant identity across snapshots [#113322](https://github.com/openclaw/openclaw/pull/113322)
- Keep Coding sessions visible after reconnect [#113981](https://github.com/openclaw/openclaw/pull/113981)
- Keep new-task prompts visible through Gateway reconnects [#114042](https://github.com/openclaw/openclaw/pull/114042)
- Recover the Control UI after configured agents change [#114048](https://github.com/openclaw/openclaw/pull/114048)
- Stop selecting a nonexistent main agent during startup [#114257](https://github.com/openclaw/openclaw/pull/114257)
- Back off unavailable session pull-request polling [#114266](https://github.com/openclaw/openclaw/pull/114266)
- Preserve Control UI settings across reconnects and concurrent tabs [#114286](https://github.com/openclaw/openclaw/pull/114286)
- Keep Control UI session catalogs on a valid agent [#114303](https://github.com/openclaw/openclaw/pull/114303)
- Recover offline language selections after reconnect [#114378](https://github.com/openclaw/openclaw/pull/114378)
- Keep new-session drafts through Gateway reconnects [#114415](https://github.com/openclaw/openclaw/pull/114415)
- Keep agent identity aligned across session switches [#114439](https://github.com/openclaw/openclaw/pull/114439)
- Keep cold transcript file folds from freezing Gateway requests [#114478](https://github.com/openclaw/openclaw/pull/114478)
- Avoid duplicate session-list refreshes at Control UI startup [#114764](https://github.com/openclaw/openclaw/pull/114764)
- Restore question state safely after reconnects [#114794](https://github.com/openclaw/openclaw/pull/114794)
- Preserve Control UI navigation during startup [#114828](https://github.com/openclaw/openclaw/pull/114828)
- Keep Control UI state with the correct run, agent, and locale [#114896](https://github.com/openclaw/openclaw/pull/114896)
- Keep Control UI state consistent across reconnects and browser changes [#115221](https://github.com/openclaw/openclaw/pull/115221)
- Prevent dashboard subscription leaks during pane changes [#115457](https://github.com/openclaw/openclaw/pull/115457)
- Keep browser and terminal chat history tied to the right session [#115511](https://github.com/openclaw/openclaw/pull/115511)
- Recover deleted chats without endless route retries [#115974](https://github.com/openclaw/openclaw/pull/115974)
- Load dynamic Control UI deep links once [#116197](https://github.com/openclaw/openclaw/pull/116197)
- Preserve Control UI session refresh requests [#116713](https://github.com/openclaw/openclaw/pull/116713)
- Keep stale agent picker closed after refresh failure [#116715](https://github.com/openclaw/openclaw/pull/116715)
- Preserve scoped Control UI session state [#116772](https://github.com/openclaw/openclaw/pull/116772)
- Recover Control UI session updates after observer failures [#116887](https://github.com/openclaw/openclaw/pull/116887)
- Stop canceled Control UI Gateway waits cleanly [#117048](https://github.com/openclaw/openclaw/pull/117048)
- Prevent stale child sessions after sidebar filter changes [#117090](https://github.com/openclaw/openclaw/pull/117090)
- Show the right login state after switching Gateways [#117125](https://github.com/openclaw/openclaw/pull/117125)
- Refresh time-sensitive Gateway session-list results [#118875](https://github.com/openclaw/openclaw/pull/118875)
- Show truthful model availability for new sessions [#119462](https://github.com/openclaw/openclaw/pull/119462)
- Keep the session list visible during transcript rebuilds [#120159](https://github.com/openclaw/openclaw/pull/120159)
- Keep the session sidebar usable and self-healing during transcript rebuilds [#120165](https://github.com/openclaw/openclaw/pull/120165)
- fix(ui): Model Providers usage cards stay empty after a failed usage.status [#120301](https://github.com/openclaw/openclaw/pull/120301)
- Consolidate Control UI protocol types and helpers [#120348](https://github.com/openclaw/openclaw/pull/120348)
- Keep open Dashboards pages current [#120627](https://github.com/openclaw/openclaw/pull/120627)
- Preserve Control UI dashboards across view switches [#120640](https://github.com/openclaw/openclaw/pull/120640)
- fix(ui): distinguish inherited model defaults from session pins [#120805](https://github.com/openclaw/openclaw/pull/120805)
- Remove auth delays from valid Control UI device-token reads [#120849](https://github.com/openclaw/openclaw/pull/120849)
- Keep SecretRef-backed models available in chat [#121090](https://github.com/openclaw/openclaw/pull/121090)
- Recover session rosters after stalled subscriptions [#121164](https://github.com/openclaw/openclaw/pull/121164)
- Preserve new-session text while catalog routes load [#121182](https://github.com/openclaw/openclaw/pull/121182)
- Preserve Control UI commentary order after steering and refresh [#121449](https://github.com/openclaw/openclaw/pull/121449)
- Prevent duplicate first prompts in new Control UI sessions [#121498](https://github.com/openclaw/openclaw/pull/121498)
- Restore older chat images after Control UI reload [#122031](https://github.com/openclaw/openclaw/pull/122031)
- Prevent stale recovery work after Control UI reconnects [#122944](https://github.com/openclaw/openclaw/pull/122944)
- Stop Control UI icon authentication churn [#123199](https://github.com/openclaw/openclaw/pull/123199)
- Automation badges refresh after cron changes [#123253](https://github.com/openclaw/openclaw/pull/123253)
- Refresh terminal session status after run-end persistence [#123259](https://github.com/openclaw/openclaw/pull/123259)
- Refresh session previews after new messages [#123290](https://github.com/openclaw/openclaw/pull/123290)
- Recover long assistant messages after load failures [#123324](https://github.com/openclaw/openclaw/pull/123324)
- Restore in-flight replies for non-default agents after reconnect [#123539](https://github.com/openclaw/openclaw/pull/123539)
- Stop stale Control UI tabs from acting after Gateway updates [#123882](https://github.com/openclaw/openclaw/pull/123882)
- Stop stale Control UI tabs from reconnecting forever [#123932](https://github.com/openclaw/openclaw/pull/123932)
- Clear stale Session companion state after resets [#123941](https://github.com/openclaw/openclaw/pull/123941)
- Retire stale chat-header errors after navigation [#123958](https://github.com/openclaw/openclaw/pull/123958)
- Avoid repeated history reads for queued sends behind active runs [#123966](https://github.com/openclaw/openclaw/pull/123966)
- Keep the Control UI agent roster current during delayed startup [#124103](https://github.com/openclaw/openclaw/pull/124103)
- Align Control UI session reconciliation with Gateway state [#124104](https://github.com/openclaw/openclaw/pull/124104)
- Keep queued messages moving across agents [#124121](https://github.com/openclaw/openclaw/pull/124121)
- Cancel stale destructive confirmations after reconnects [#124254](https://github.com/openclaw/openclaw/pull/124254)
- Stop workspace icons delaying chat startup [#124269](https://github.com/openclaw/openclaw/pull/124269)
- Recover authorized deep links after Control UI updates [#124328](https://github.com/openclaw/openclaw/pull/124328)
- Refresh Control UI config after reconnect [#124360](https://github.com/openclaw/openclaw/pull/124360)
- Keep web chat available during config reloads [#124435](https://github.com/openclaw/openclaw/pull/124435)
- Stop duplicate Sessions page queries [#125018](https://github.com/openclaw/openclaw/pull/125018)
- Refresh Sessions lists when runs finish [#125040](https://github.com/openclaw/openclaw/pull/125040)
- Stop hidden chat tabs from repainting in the background [#125088](https://github.com/openclaw/openclaw/pull/125088)
- Recover the New Session model picker after a missing catalog owner [#125450](https://github.com/openclaw/openclaw/pull/125450)
- Show catalog freshness errors instead of model-auth failures [#125513](https://github.com/openclaw/openclaw/pull/125513)
- Keep model pickers usable after refresh failures [#125661](https://github.com/openclaw/openclaw/pull/125661)
- Remove persistent drafts after confirmed session deletion [#125665](https://github.com/openclaw/openclaw/pull/125665)
- Refresh existing session controls after dynamic model discovery [#125847](https://github.com/openclaw/openclaw/pull/125847)
- Preserve typed text during new-session draft restore [#125884](https://github.com/openclaw/openclaw/pull/125884)
- Refresh Browser when its sidebar tab becomes visible [#126058](https://github.com/openclaw/openclaw/pull/126058)
- Disconnect hidden Desktop sidebar sessions [#126203](https://github.com/openclaw/openclaw/pull/126203)
- Keep warmed Control UI dashboards visible when switching sessions [#126339](https://github.com/openclaw/openclaw/pull/126339)
- Keep Control UI device tokens correct after reconnects [#126362](https://github.com/openclaw/openclaw/pull/126362)
- Preserve conversation preferences on reset [#126575](https://github.com/openclaw/openclaw/pull/126575)
- Retry failed new-session navigation without duplicate tasks [#126873](https://github.com/openclaw/openclaw/pull/126873)
- fix(ui): keep loaded older history after switching sessions [#126979](https://github.com/openclaw/openclaw/pull/126979)
- fix(ui): surface newly available account models in picker [#127725](https://github.com/openclaw/openclaw/pull/127725)
- perf(ui): stop rescanning whole replies on every streamed chunk [#127749](https://github.com/openclaw/openclaw/pull/127749)
- perf(ui): skip highlighting unfinished code blocks while streaming [#127754](https://github.com/openclaw/openclaw/pull/127754)
- perf(ui): stop long-lived request and session caches from growing forever [#127818](https://github.com/openclaw/openclaw/pull/127818)
- perf(ui): stop hidden split panes from fetching data they never show [#127821](https://github.com/openclaw/openclaw/pull/127821)
- perf(ui): batch chat stream and outbox work into one frame [#127826](https://github.com/openclaw/openclaw/pull/127826)
- perf(ui): stop rescanning the whole snapshot cache on every write [#127831](https://github.com/openclaw/openclaw/pull/127831)
- fix(ui): preserve other chat transcripts when deleting a session [#128109](https://github.com/openclaw/openclaw/pull/128109)
- fix(ui): keep mount recovery working when the service worker is broken [#128167](https://github.com/openclaw/openclaw/pull/128167)
- fix(ui): terminal messages no longer reload the session roster [#128397](https://github.com/openclaw/openclaw/pull/128397)
- fix(ui): preserve new composer state across reconnects [#128620](https://github.com/openclaw/openclaw/pull/128620)
- fix(ui): preserve routable models across reconnect [#128694](https://github.com/openclaw/openclaw/pull/128694)
- fix(ui): show when connected chats cannot receive live messages [#128865](https://github.com/openclaw/openclaw/pull/128865)
- fix(chat): faster, reliable older history and live updates [#128964](https://github.com/openclaw/openclaw/pull/128964)
- fix(ui): retain cloud profiles after refresh failure [#128996](https://github.com/openclaw/openclaw/pull/128996)
- fix(ui): update the new-session model picker when catalogs load [#129019](https://github.com/openclaw/openclaw/pull/129019)
- fix(ui): make session switching and history loading faster [#129111](https://github.com/openclaw/openclaw/pull/129111)
- fix(ui): stabilize the sidebar session list with a single projection owner [#129150](https://github.com/openclaw/openclaw/pull/129150)
- fix: New Session adopts discovered models [#129307](https://github.com/openclaw/openclaw/pull/129307)
- fix(ui): keep pinned sidebar pages visible during reconnect [#129517](https://github.com/openclaw/openclaw/pull/129517)
- fix(ui): stop warm sidebar refreshes from blanking foreign-owned rows [#129558](https://github.com/openclaw/openclaw/pull/129558)
- fix(ui): keep hidden session files cold [#129620](https://github.com/openclaw/openclaw/pull/129620)
- fix(ui): keep active commentary after session navigation [#129640](https://github.com/openclaw/openclaw/pull/129640)
- fix(ui): own chat history issuance with a closed state machine [#129776](https://github.com/openclaw/openclaw/pull/129776)
- fix(ui): model picker no longer collapses to one model after refresh [#129878](https://github.com/openclaw/openclaw/pull/129878)
- fix: older chat history loads slowly in tool-heavy conversations [#129946](https://github.com/openclaw/openclaw/pull/129946)
- fix(ui): show dashboard refresh failures with a retry action [#130376](https://github.com/openclaw/openclaw/pull/130376)
- fix(ui): preserve first startup errors across session navigation [#130593](https://github.com/openclaw/openclaw/pull/130593)
- fix(ui): stop repeated reply preview requests after temporary failures [#130737](https://github.com/openclaw/openclaw/pull/130737)
- fix(ui): stop dismissed lazy retries from reloading the page [#130988](https://github.com/openclaw/openclaw/pull/130988)
- fix(ui): keep Gateway place labels current [#131118](https://github.com/openclaw/openclaw/pull/131118)
- fix(ui): coalesce session catalog refreshes (#123535) [4bf0bd3](https://github.com/openclaw/openclaw/commit/4bf0bd3)
- fix(ui): preserve created session effort (#125822) [f49742b](https://github.com/openclaw/openclaw/commit/f49742b)
- Keep Control UI state and translated link menus current [#102848](https://github.com/openclaw/openclaw/pull/102848)
- Prevent Control UI CSP eval warnings on startup [#103665](https://github.com/openclaw/openclaw/pull/103665)
- Recover Worktrees creation after Gateway reconnect [#105285](https://github.com/openclaw/openclaw/pull/105285)
- Allow Control UI session creation during list refresh [#106045](https://github.com/openclaw/openclaw/pull/106045)
- Restore custom avatars after chat session switches [#106553](https://github.com/openclaw/openclaw/pull/106553)
- Preserve Model Providers route connection provenance [#106872](https://github.com/openclaw/openclaw/pull/106872)
- Recover stalled agent avatars in Control UI [#108368](https://github.com/openclaw/openclaw/pull/108368)
- Bound chat avatar metadata and image loading [#110010](https://github.com/openclaw/openclaw/pull/110010)
- Bound Control UI generated-image memory retention [#110305](https://github.com/openclaw/openclaw/pull/110305)
- Pause session catalog polling in hidden tabs [#110705](https://github.com/openclaw/openclaw/pull/110705)
- Send proxy credentials with Control UI manifest requests [#111053](https://github.com/openclaw/openclaw/pull/111053)
- Recover Control UI connections after browser handshake failures [#113689](https://github.com/openclaw/openclaw/pull/113689)
- Keep Control UI widgets rendering in long-lived chats [#113702](https://github.com/openclaw/openclaw/pull/113702)
- Load dashboard icons and manifest from nested routes [#114061](https://github.com/openclaw/openclaw/pull/114061)
- Keep sidebar catalogs stable after empty refresh responses [#114394](https://github.com/openclaw/openclaw/pull/114394)
- Keep Control UI settings deep links connected [#115186](https://github.com/openclaw/openclaw/pull/115186)
- Preserve explicit Control UI navigation during chat route resolution [#115366](https://github.com/openclaw/openclaw/pull/115366)
- Show actionable Gateway opening-timeout diagnostics [#117078](https://github.com/openclaw/openclaw/pull/117078)
- Prevent stale Gateway event-log updates in Control UI [#117169](https://github.com/openclaw/openclaw/pull/117169)
- Refresh sidebar automation alerts on changes [#117648](https://github.com/openclaw/openclaw/pull/117648)
- Refresh time-sensitive session lists as entries expire [#118768](https://github.com/openclaw/openclaw/pull/118768)
- Hide the connection form while initial authentication resolves [#120372](https://github.com/openclaw/openclaw/pull/120372)
- Release failed plugin icon network streams [#121129](https://github.com/openclaw/openclaw/pull/121129)
- Restore startup prewarming for derived session titles [#122368](https://github.com/openclaw/openclaw/pull/122368)
- Preserve mixed-case Control UI deep links [#123207](https://github.com/openclaw/openclaw/pull/123207)
- Preserve New Session drafts across navigation [#123697](https://github.com/openclaw/openclaw/pull/123697)
- Show connection errors for interrupted session actions [#123771](https://github.com/openclaw/openclaw/pull/123771)
- Recheck agent model lists and clarify catalog errors [#124019](https://github.com/openclaw/openclaw/pull/124019)
- Match active sessions across legacy key aliases [#124020](https://github.com/openclaw/openclaw/pull/124020)
- Prevent Control UI stalls on file-heavy Markdown [#124258](https://github.com/openclaw/openclaw/pull/124258)
- Prevent stale chat-header failures after navigation [#124442](https://github.com/openclaw/openclaw/pull/124442)
- Prevent stale Labs errors after reconnect [#124578](https://github.com/openclaw/openclaw/pull/124578)
- Wait for the agent roster before loading New Session catalogs [#125339](https://github.com/openclaw/openclaw/pull/125339)
- Restore New Session text drafts after reload [#125637](https://github.com/openclaw/openclaw/pull/125637)
- Retry CLI-agent catalog discovery in the New Session picker [#125943](https://github.com/openclaw/openclaw/pull/125943)
- Recover newer Control UI builds after stale probes [#126628](https://github.com/openclaw/openclaw/pull/126628)
- Recover Cloud Workers profile saves after Gateway reconnects [#127150](https://github.com/openclaw/openclaw/pull/127150)
- fix(ui): restore drafts before expiry maintenance [#127766](https://github.com/openclaw/openclaw/pull/127766)
- perf(ui): stop re-comparing the whole session catalog on every live event [#127819](https://github.com/openclaw/openclaw/pull/127819)
- perf(ui): keep split divider drag within frame budget [#127840](https://github.com/openclaw/openclaw/pull/127840)
- perf(ui): stop a pending approval countdown from re-rendering the whole chat every second [#127844](https://github.com/openclaw/openclaw/pull/127844)
- fix(ui): stop terminal panel teardown from leaking liveness probes [#128147](https://github.com/openclaw/openclaw/pull/128147)
- fix(ui): keep panel load errors compact [#128225](https://github.com/openclaw/openclaw/pull/128225)
- fix(ui): show failed child-session loading and retry [#128418](https://github.com/openclaw/openclaw/pull/128418)
- fix(ui): preserve agent prompts when the default session is already open [#128638](https://github.com/openclaw/openclaw/pull/128638)
- fix(ui): preserve confirmed cloud profile deletion across reconnects [#129245](https://github.com/openclaw/openclaw/pull/129245)
- fix(ui): refresh stale filtered session lists after thread actions [#129484](https://github.com/openclaw/openclaw/pull/129484)
- fix(ui): preserve configured models when catalog requests fail [#129767](https://github.com/openclaw/openclaw/pull/129767)
- fix(ui): preserve chat URL state during session draft cleanup [#129949](https://github.com/openclaw/openclaw/pull/129949)
- fix(ui): clear stale session-list errors after Gateway recovery [#130004](https://github.com/openclaw/openclaw/pull/130004)
- fix(ui): show dashboard replies when final events omit messages [#130417](https://github.com/openclaw/openclaw/pull/130417)

</details>

</Accordion>

</AccordionGroup>

## Installation and Onboarding

OpenClaw now gives new Mac, Linux, and Windows installs a clearer path from download to a first useful conversation, while iPhone, iPad, and Android put pairing and permissions where people need them. Guided setup can reuse supported subscriptions, API keys, and local models already available, verifies the chosen model before saving it, and hands off to the web app or terminal when the connection is ready.

<AccordionGroup>

<Accordion title="Installing OpenClaw">

The supported install path now keeps the app or command available after setup. A Mac app opened from Downloads or a disk image can offer to move itself into Applications, where updates and launch at login work properly. On Linux and other Unix systems, the installer makes `openclaw` available in new terminal sessions without asking you to edit shell startup files by hand.

Network installations that would expose OpenClaw without authentication are stopped before anything changes. Reinstalling also protects an existing working setup when preparation is cancelled or fails, and gives OpenClaw time to start before reporting whether it is reachable.

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

**Improvements**

- Install temporary macOS launches in Applications [#104661](https://github.com/openclaw/openclaw/pull/104661)
- Clarify onboarding security guidance in plain language [#120172](https://github.com/openclaw/openclaw/pull/120172)

**Bug fixes**

- Prevent fresh-state Gateway startup timeouts [#111701](https://github.com/openclaw/openclaw/pull/111701)
- Keep Gateway startup responsive during model-runtime preparation [#112262](https://github.com/openclaw/openclaw/pull/112262)
- Add safe Gateway token recovery for onboarding [#118051](https://github.com/openclaw/openclaw/pull/118051)
- Keep OpenClaw available in fresh Unix shells after installation [#124779](https://github.com/openclaw/openclaw/pull/124779)
- Honor remote flags in interactive onboarding [#111517](https://github.com/openclaw/openclaw/pull/111517)
- Remove stale remote passwords when switching to token auth [#112544](https://github.com/openclaw/openclaw/pull/112544)
- Let first-boot loopback CLI calls connect after Gateway readiness [#114380](https://github.com/openclaw/openclaw/pull/114380)
- Avoid first-boot delays for canonical internal hooks [#117493](https://github.com/openclaw/openclaw/pull/117493)
- Honor external Gateway supervision during onboarding [#119846](https://github.com/openclaw/openclaw/pull/119846)
- Honor Gateway passwords during noninteractive setup [#126690](https://github.com/openclaw/openclaw/pull/126690)
- Add remote Gateway password authentication to onboarding [#126768](https://github.com/openclaw/openclaw/pull/126768)
- fix: preserve Gateway when setup Reinstall is cancelled [#130617](https://github.com/openclaw/openclaw/pull/130617)
- fix: share managed Gateway startup readiness across setup [#130682](https://github.com/openclaw/openclaw/pull/130682)
- Prevent piped installer subprocesses from consuming the install script [#87799](https://github.com/openclaw/openclaw/pull/87799)
- Block unauthenticated network Gateway service installs [#98022](https://github.com/openclaw/openclaw/pull/98022)
- Update fresh CLI installs to Node 22.22.2 [#104073](https://github.com/openclaw/openclaw/pull/104073)
- Wait for Gateway warnings before service installation [#104173](https://github.com/openclaw/openclaw/pull/104173)
- Validate Docker timezones in the selected runtime image [#116153](https://github.com/openclaw/openclaw/pull/116153)
- Keep shell-completion permission errors from failing onboarding [#125263](https://github.com/openclaw/openclaw/pull/125263)
- Persist configure changes before gateway side effects [#125751](https://github.com/openclaw/openclaw/pull/125751)
- fix(installer): avoid restarting the gateway twice after source installs [#130900](https://github.com/openclaw/openclaw/pull/130900)

**Documentation**

- Correct README setup guidance and contributor avatar sizing [#113547](https://github.com/openclaw/openclaw/pull/113547)
- Streamline the README for first-time setup [#118376](https://github.com/openclaw/openclaw/pull/118376)
- Add a ChromeOS and Crostini installation guide [#107663](https://github.com/openclaw/openclaw/pull/107663)
- Stop telling hosted-installer users to onboard twice [#125246](https://github.com/openclaw/openclaw/pull/125246)

</details>

</Accordion>

<Accordion title="Connecting a subscription, API key, or local model">

Guided setup now starts by looking for AI access you may already have. It can reuse verified Codex, ChatGPT, or Claude CLI sign-ins, accept an API key, run a supported provider's own sign-in, or find qualifying Ollama and LM Studio models, then prove that the exact choice can answer before it keeps that model and credential. Access already working on the machine can become part of setup instead of another thing to configure.

For OpenAI accounts, setup uses the models the signed-in account can actually access while preserving routes you configured yourself, and administrators can prepare supported local models with live progress. Finding or downloading a local model is only the start, so the supported local-model screens do not show Start chatting until that exact choice passes activation.

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

**Improvements**

- Default fresh OpenAI setups to GPT-5.6 [#103581](https://github.com/openclaw/openclaw/pull/103581)
- Add provider sign-in to onboarding [#104502](https://github.com/openclaw/openclaw/pull/104502)
- Configure model providers from the Control UI [#106490](https://github.com/openclaw/openclaw/pull/106490)
- Discover installed local models during onboarding [#108605](https://github.com/openclaw/openclaw/pull/108605)
- Add guided model setup to the Control UI [#108868](https://github.com/openclaw/openclaw/pull/108868)
- Verify the current model connection from Control UI [#109183](https://github.com/openclaw/openclaw/pull/109183)
- Prefer stronger local models during guided onboarding [#109250](https://github.com/openclaw/openclaw/pull/109250)
- Add in-process local GGUF text inference [#109444](https://github.com/openclaw/openclaw/pull/109444)
- Use Gemma 4 as the RAM-gated llama.cpp default [#109585](https://github.com/openclaw/openclaw/pull/109585)
- Add unified AI setup recommendations [#109681](https://github.com/openclaw/openclaw/pull/109681)
- Stream provider preparation progress across setup surfaces [#109764](https://github.com/openclaw/openclaw/pull/109764)
- Automatically use the lean tool surface for verified local models [#110596](https://github.com/openclaw/openclaw/pull/110596)
- Add one-click local model setup on web and macOS [#113476](https://github.com/openclaw/openclaw/pull/113476)
- Add verified LM Studio and local-model onboarding [#116606](https://github.com/openclaw/openclaw/pull/116606)
- Replace node-llama-cpp with managed llama-server [#123105](https://github.com/openclaw/openclaw/pull/123105)
- Improve macOS device-code sign-in [#104766](https://github.com/openclaw/openclaw/pull/104766)
- Align macOS AI connection choices with CLI onboarding [#107642](https://github.com/openclaw/openclaw/pull/107642)
- Clarify provider credential setup and CLI login recovery [#108739](https://github.com/openclaw/openclaw/pull/108739)
- Report installed Pi and OpenCode tools during guided setup [#109624](https://github.com/openclaw/openclaw/pull/109624)
- Refresh DeepSeek, Together, and Venice setup defaults [#113973](https://github.com/openclaw/openclaw/pull/113973)
- Default fresh Cerebras setup to Gemma 4 31B [#114015](https://github.com/openclaw/openclaw/pull/114015)
- Unify Ollama model inspection across setup and discovery [#115879](https://github.com/openclaw/openclaw/pull/115879)
- Verify llama.cpp setup before opening chat [#116308](https://github.com/openclaw/openclaw/pull/116308)
- Simplify recovery for configured local models [#117165](https://github.com/openclaw/openclaw/pull/117165)
- Scope onboarding model browsing to the selected provider [#125373](https://github.com/openclaw/openclaw/pull/125373)
- Skip discarded workspace loading during first-run setup [#126967](https://github.com/openclaw/openclaw/pull/126967)
- Faster first-run model detection [#127053](https://github.com/openclaw/openclaw/pull/127053)

**Bug fixes**

- Make fresh AI onboarding reliable and transparent [#103962](https://github.com/openclaw/openclaw/pull/103962)
- Reuse Codex CLI login during fresh Mac setup [#104150](https://github.com/openclaw/openclaw/pull/104150)
- Restore grouped provider sign-in during guided onboarding [#107038](https://github.com/openclaw/openclaw/pull/107038)
- Harden OpenAI onboarding and Crestodian handoff [#107041](https://github.com/openclaw/openclaw/pull/107041)
- Keep Gateway health responsive during setup detection [#110625](https://github.com/openclaw/openclaw/pull/110625)
- Unblock Model Setup on configless gateways [#111841](https://github.com/openclaw/openclaw/pull/111841)
- Require viable imported and local AI routes during onboarding [#112028](https://github.com/openclaw/openclaw/pull/112028)
- Prevent onboarding crashes and prioritize subscription logins [#112378](https://github.com/openclaw/openclaw/pull/112378)
- Show account-available OpenAI models after API-key onboarding [#114258](https://github.com/openclaw/openclaw/pull/114258)
- Fix OpenAI model discovery and installed-package onboarding [#114288](https://github.com/openclaw/openclaw/pull/114288)
- Make Ollama and LM Studio onboarding reliable [#114405](https://github.com/openclaw/openclaw/pull/114405)
- Keep local model discovery, retries, and cloud timeouts correct [#114582](https://github.com/openclaw/openclaw/pull/114582)
- Guide Control UI users through unavailable AI setup [#115716](https://github.com/openclaw/openclaw/pull/115716)
- Make model setup the primary recovery action when no model is available [#116079](https://github.com/openclaw/openclaw/pull/116079)
- Choose an available GitHub Copilot onboarding model [#116590](https://github.com/openclaw/openclaw/pull/116590)
- Route Google setup through supported authentication [#116611](https://github.com/openclaw/openclaw/pull/116611)
- Honor Ollama model and pull-completion contracts [#117171](https://github.com/openclaw/openclaw/pull/117171)
- Activate the exact local model prepared during setup [#119050](https://github.com/openclaw/openclaw/pull/119050)
- Complete ChatGPT subscription setup on macOS [#120782](https://github.com/openclaw/openclaw/pull/120782)
- OpenCode onboarding chooses usable models and preserves coding tools [#121414](https://github.com/openclaw/openclaw/pull/121414)
- Make Ollama guided setup choose and verify a working model [#123190](https://github.com/openclaw/openclaw/pull/123190)
- Raise the llama.cpp default context to 64K [#123701](https://github.com/openclaw/openclaw/pull/123701)
- Complete macOS Codex setup and account model discovery [#124829](https://github.com/openclaw/openclaw/pull/124829)
- Detect CLI model logins when setup scans run long [#125114](https://github.com/openclaw/openclaw/pull/125114)
- Keep Claude CLI OAuth available after restart [#125471](https://github.com/openclaw/openclaw/pull/125471)
- Scope onboarding model hooks to the selected provider [#126427](https://github.com/openclaw/openclaw/pull/126427)
- fix: keep Claude CLI authentication native [#129052](https://github.com/openclaw/openclaw/pull/129052)
- fix(anthropic): native Claude models show incorrect availability [#129346](https://github.com/openclaw/openclaw/pull/129346)
- fix(auth): make Codex logout recovery actionable [#130866](https://github.com/openclaw/openclaw/pull/130866)
- Preserve GitHub Copilot device-login backoff [#103434](https://github.com/openclaw/openclaw/pull/103434)
- Stop stalled GitHub Copilot token exchanges from hanging [#104488](https://github.com/openclaw/openclaw/pull/104488)
- Find model-probe credentials stored under provider aliases [#106736](https://github.com/openclaw/openclaw/pull/106736)
- Complete the Codex OAuth handoff during onboarding [#107174](https://github.com/openclaw/openclaw/pull/107174)
- Remove the duplicate Codex provider setup choice [#107979](https://github.com/openclaw/openclaw/pull/107979)
- Preserve fresh-install ChatGPT OAuth credentials [#108617](https://github.com/openclaw/openclaw/pull/108617)
- Prevent Codex login lookup from hanging the TUI [#109452](https://github.com/openclaw/openclaw/pull/109452)
- Ignore blank environment credentials during provider auth [#109691](https://github.com/openclaw/openclaw/pull/109691)
- Let Ollama setup continue past broken local models [#109895](https://github.com/openclaw/openclaw/pull/109895)
- Stop broken Ollama models from claiming tool support [#109921](https://github.com/openclaw/openclaw/pull/109921)
- fix(onboarding): stop recommending tools setup cannot activate [#109951](https://github.com/openclaw/openclaw/pull/109951)
- Stop advertising Ollama tools when model inspection fails [#109971](https://github.com/openclaw/openclaw/pull/109971)
- Allow OpenAI OAuth token exchange behind fake-IP proxies [#110096](https://github.com/openclaw/openclaw/pull/110096)
- Keep failed onboarding retries from overwriting working setup [#111558](https://github.com/openclaw/openclaw/pull/111558)
- Let OpenAI model login exit after browser callback [#112211](https://github.com/openclaw/openclaw/pull/112211)
- Keep Control UI setup responsive during stalled discovery [#112338](https://github.com/openclaw/openclaw/pull/112338)
- Stop stalled Microsoft Foundry device-code logins from hanging onboarding [#112369](https://github.com/openclaw/openclaw/pull/112369)
- Reuse active Codex API-key authentication during onboarding [#112770](https://github.com/openclaw/openclaw/pull/112770)
- Keep web model-download progress updating [#113613](https://github.com/openclaw/openclaw/pull/113613)
- Refresh provider onboarding model defaults [#113870](https://github.com/openclaw/openclaw/pull/113870)
- Keep OpenAI onboarding choices within account access [#114356](https://github.com/openclaw/openclaw/pull/114356)
- Prevent false provider failures in Doctor [#114533](https://github.com/openclaw/openclaw/pull/114533)
- Preserve the onboarding inference probe's in-memory session [#115452](https://github.com/openclaw/openclaw/pull/115452)
- Preserve selected Ollama model capabilities during onboarding [#115467](https://github.com/openclaw/openclaw/pull/115467)
- Keep verified Codex setup active through activation [#115704](https://github.com/openclaw/openclaw/pull/115704)
- Make Gemini CLI setup recovery actionable [#115835](https://github.com/openclaw/openclaw/pull/115835)
- Retry Ollama setup without restarting the wizard [#116210](https://github.com/openclaw/openclaw/pull/116210)
- Coordinate Settings and model-setup writes [#116940](https://github.com/openclaw/openclaw/pull/116940)
- Stop scraping Gemini CLI OAuth credentials [#117167](https://github.com/openclaw/openclaw/pull/117167)
- Use only loaded LM Studio models during setup [#117919](https://github.com/openclaw/openclaw/pull/117919)
- Detect reachable Ollama services during onboarding [#118020](https://github.com/openclaw/openclaw/pull/118020)
- Remove unsupported Google auth and quota guidance [#118034](https://github.com/openclaw/openclaw/pull/118034)
- Avoid loading idle Ollama models during guided setup [#118183](https://github.com/openclaw/openclaw/pull/118183)
- Detect running LM Studio during guided setup without a loaded model [#119134](https://github.com/openclaw/openclaw/pull/119134)
- Restore provider authentication in installed local TUI mode [#119283](https://github.com/openclaw/openclaw/pull/119283)
- Fix macOS AI onboarding visuals and Keychain fallback [#120907](https://github.com/openclaw/openclaw/pull/120907)
- Fix no-auth local models and prompt-template error handling [#121790](https://github.com/openclaw/openclaw/pull/121790)
- Make macOS onboarding candidate rows fully clickable [#121928](https://github.com/openclaw/openclaw/pull/121928)
- Show a retryable error when AI access detection times out [#121940](https://github.com/openclaw/openclaw/pull/121940)
- Remove the duplicate GPT-5.6 picker entry [#122178](https://github.com/openclaw/openclaw/pull/122178)
- Keep long OAuth setup links inside the Model Setup dialog [#122892](https://github.com/openclaw/openclaw/pull/122892)
- fix(openai): return structured failure for malformed OAuth token JSON [#122962](https://github.com/openclaw/openclaw/pull/122962)
- Show configured models when sign-in is unavailable [#123130](https://github.com/openclaw/openclaw/pull/123130)
- Make Codex Test & use complete from Model Setup [#123141](https://github.com/openclaw/openclaw/pull/123141)
- Choose the smallest capable local Ollama model during CLI setup [#123382](https://github.com/openclaw/openclaw/pull/123382)
- Keep model setup alive after provider authorization [#123418](https://github.com/openclaw/openclaw/pull/123418)
- Read Claude CLI Keychain auth during scripted macOS onboarding [#123839](https://github.com/openclaw/openclaw/pull/123839)
- fix(system-agent): leave reasoning room in local model setup probes [#124405](https://github.com/openclaw/openclaw/pull/124405)
- Keep OpenRouter sign-in waiting after invalid callbacks [#124922](https://github.com/openclaw/openclaw/pull/124922)
- Keep onboarding provider metadata scoped to the selected provider [#125379](https://github.com/openclaw/openclaw/pull/125379)
- Show accurate OpenAI OAuth recovery status without masking provider failures [#125515](https://github.com/openclaw/openclaw/pull/125515)
- Make llama-server authentication changes reproducible [#126498](https://github.com/openclaw/openclaw/pull/126498)
- Keep OpenRouter API keys with OpenRouter during onboarding [#126578](https://github.com/openclaw/openclaw/pull/126578)
- fix(ui): Model Setup stuck on "Checking this Gateway" for fresh clients [#127695](https://github.com/openclaw/openclaw/pull/127695)
- fix(ollama): defer local service lookup until stream creation [#128399](https://github.com/openclaw/openclaw/pull/128399)
- fix(ui): keep Model Setup visible while checking AI access [#128636](https://github.com/openclaw/openclaw/pull/128636)
- fix(macos): allow cold ChatGPT Codex probes [#128819](https://github.com/openclaw/openclaw/pull/128819)
- fix(agents): preserve setup CLI model resolution [#129128](https://github.com/openclaw/openclaw/pull/129128)
- fix(onboarding): OpenAI setup installs mismatched Codex plugin [#129195](https://github.com/openclaw/openclaw/pull/129195)
- fix: report native Claude CLI models as available [#129332](https://github.com/openclaw/openclaw/pull/129332)
- fix(ollama): cancelled cloud setup continues and returns credentials [#129541](https://github.com/openclaw/openclaw/pull/129541)
- fix(onboard): reject unavailable required runtimes [#129855](https://github.com/openclaw/openclaw/pull/129855)
- fix(ollama): retain advertised context and tools when model inspection is unavailable [#130000](https://github.com/openclaw/openclaw/pull/130000)
- fix(llama-cpp): stop recommending failed models during setup [#130136](https://github.com/openclaw/openclaw/pull/130136)
- fix(anthropic): prevent retired Claude CLI profile from breaking setup [#130225](https://github.com/openclaw/openclaw/pull/130225)
- fix(ollama): cloud models vanish from discovery when inspection returns nothing [#130240](https://github.com/openclaw/openclaw/pull/130240)
- fix: honor fresh provider catalog discovery [#130412](https://github.com/openclaw/openclaw/pull/130412)
- fix(ollama): keep local setup local and skip embedding chat defaults [#130459](https://github.com/openclaw/openclaw/pull/130459)
- fix(setup): treat superseded catalog refresh as activation success [#130795](https://github.com/openclaw/openclaw/pull/130795)
- Clean up OpenAI Codex OAuth callbacks and stale prompts [#89491](https://github.com/openclaw/openclaw/pull/89491)
- Accept helper-managed Claude CLI authentication [#97492](https://github.com/openclaw/openclaw/pull/97492)
- Omit empty provider request settings during onboarding [aad9974](https://github.com/openclaw/openclaw/commit/aad9974)
- Bound MiniMax OAuth requests with 30-second timeouts [#102862](https://github.com/openclaw/openclaw/pull/102862)
- Stop GitHub Copilot device login from hanging indefinitely [#103255](https://github.com/openclaw/openclaw/pull/103255)
- Suppress trust warnings for explicitly enabled plugins [#104097](https://github.com/openclaw/openclaw/pull/104097)
- Show OpenRouter OAuth denial errors accurately [#105448](https://github.com/openclaw/openclaw/pull/105448)
- Clean up GitHub Copilot login polling listeners [#106453](https://github.com/openclaw/openclaw/pull/106453)
- Remove placeholder text from guided onboarding candidates [#110084](https://github.com/openclaw/openclaw/pull/110084)
- Release Ollama setup connections after responses [#111802](https://github.com/openclaw/openclaw/pull/111802)
- Explain how to recover from GitHub Copilot 403 errors [#112025](https://github.com/openclaw/openclaw/pull/112025)
- Honor the Azure device-code login window [#113741](https://github.com/openclaw/openclaw/pull/113741)
- Refresh Qianfan onboarding default and isolate OpenAI live tests [#113999](https://github.com/openclaw/openclaw/pull/113999)
- Reject malformed OpenAI OAuth token responses cleanly [#120685](https://github.com/openclaw/openclaw/pull/120685)
- Fix provider-key tests with the Codex runtime selected [#121500](https://github.com/openclaw/openclaw/pull/121500)
- Let users switch AI candidates during macOS onboarding [#121613](https://github.com/openclaw/openclaw/pull/121613)
- Make Codex onboarding tolerate inherited loader paths [#122731](https://github.com/openclaw/openclaw/pull/122731)
- Stop false missing-auth warnings after API key entry [#122756](https://github.com/openclaw/openclaw/pull/122756)
- Keep OpenAI setup authentication choices consistent [#124729](https://github.com/openclaw/openclaw/pull/124729)
- Retry transient first-run model detection [#125212](https://github.com/openclaw/openclaw/pull/125212)
- Stop false provider setup warnings [#125523](https://github.com/openclaw/openclaw/pull/125523)
- Recognize ambient CLI login for configured model availability [#125772](https://github.com/openclaw/openclaw/pull/125772)
- Fix Web UI provider probes for direct credentials [#125816](https://github.com/openclaw/openclaw/pull/125816)
- Stop false plugin warnings during non-interactive onboarding [#126734](https://github.com/openclaw/openclaw/pull/126734)
- fix: report native Claude CLI auth in status [#129364](https://github.com/openclaw/openclaw/pull/129364)
- fix: clean retired Claude auth before Doctor health [#129375](https://github.com/openclaw/openclaw/pull/129375)
- fix(llama-cpp): existing-server setup chooses ready models first [#129509](https://github.com/openclaw/openclaw/pull/129509)
- fix(ollama): setup picks a huge model despite explicit non-thinking capabilities [#129611](https://github.com/openclaw/openclaw/pull/129611)
- fix(ollama): allow setup reset with any installed local model [#129934](https://github.com/openclaw/openclaw/pull/129934)

**Documentation**

- docs(onboarding): preserve the selected model in setup guide [#128547](https://github.com/openclaw/openclaw/pull/128547)

</details>

</Accordion>

<Accordion title="Starting your first conversation">

Successful setup now hands off directly to a first conversation. Graphical Mac, Linux, and Windows sessions can open the web app, while SSH and other headless setups provide an authenticated link with port-forward instructions and keep terminal chat available.

From there, the setup conversation can finish supported skill and web-search configuration, then offer an external channel as an optional next step instead of another prerequisite for first use. The classic wizard can still continue without AI because its live model check remains optional.

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

**Improvements**

- Guided CLI setup verifies AI access before saving [#101880](https://github.com/openclaw/openclaw/pull/101880)
- Recommend plugins and skills from installed apps [#109668](https://github.com/openclaw/openclaw/pull/109668)
- Make guided onboarding the local custodian flow [#109841](https://github.com/openclaw/openclaw/pull/109841)
- Add browser-first handoff after guided macOS onboarding [#110054](https://github.com/openclaw/openclaw/pull/110054)
- Add conversational custodian onboarding [#110141](https://github.com/openclaw/openclaw/pull/110141)
- Persist onboarding recommendations and shorten first-run identity setup [#110173](https://github.com/openclaw/openclaw/pull/110173)
- Add typed onboarding questions with live option cards [#110242](https://github.com/openclaw/openclaw/pull/110242)
- Hand fresh setup into the agent's first chat [#110331](https://github.com/openclaw/openclaw/pull/110331)
- Extend browser onboarding and refresh app recommendations [#110484](https://github.com/openclaw/openclaw/pull/110484)
- Add rich setup controls to Custodian chat [#114631](https://github.com/openclaw/openclaw/pull/114631)
- Configure skills and web search inside Ask OpenClaw [#115130](https://github.com/openclaw/openclaw/pull/115130)
- Guide local Gateway configuration in Ask OpenClaw [#115363](https://github.com/openclaw/openclaw/pull/115363)
- Guide optional channel setup after first-run model setup [#116078](https://github.com/openclaw/openclaw/pull/116078)
- Name the first agent during onboarding [#123521](https://github.com/openclaw/openclaw/pull/123521)
- Add opt-in keyless Firecrawl search and richer search controls [#97078](https://github.com/openclaw/openclaw/pull/97078)
- Let users name new agents [#112009](https://github.com/openclaw/openclaw/pull/112009)
- Clarify web search setup choices [#112199](https://github.com/openclaw/openclaw/pull/112199)
- Show live progress during onboarding app scans [#112414](https://github.com/openclaw/openclaw/pull/112414)
- Constrain system-agent planner JSON at generation time [#113482](https://github.com/openclaw/openclaw/pull/113482)
- Offer optional workspace files without false missing warnings [#114559](https://github.com/openclaw/openclaw/pull/114559)

**Bug fixes**

- Make Gateway onboarding inference-first and route-safe [#102883](https://github.com/openclaw/openclaw/pull/102883)
- Make conversational setup practical on local models [#109445](https://github.com/openclaw/openclaw/pull/109445)
- Show actionable option cards in macOS onboarding [#110584](https://github.com/openclaw/openclaw/pull/110584)
- Keep Custodian health nudges out of hosted-wizard answers [#111430](https://github.com/openclaw/openclaw/pull/111430)
- Make first-run browser onboarding reliable [#111465](https://github.com/openclaw/openclaw/pull/111465)
- Isolate onboarding recommendations by workspace [#111560](https://github.com/openclaw/openclaw/pull/111560)
- Attach fresh agent hatches to the running Gateway [#122210](https://github.com/openclaw/openclaw/pull/122210)
- Keep guided agent credentials aligned with creation [#126096](https://github.com/openclaw/openclaw/pull/126096)
- Back navigation within terminal channel setup [#108007](https://github.com/openclaw/openclaw/pull/108007)
- Require decimal menu numbers in setup chats [#108140](https://github.com/openclaw/openclaw/pull/108140)
- Return setup inference repair to chat [#109938](https://github.com/openclaw/openclaw/pull/109938)
- Make setup wizard Copy buttons work over plain HTTP [#110139](https://github.com/openclaw/openclaw/pull/110139)
- Align Ask OpenClaw framing and confirmation defaults [#111263](https://github.com/openclaw/openclaw/pull/111263)
- Keep system-agent model changes on the verified route [#111431](https://github.com/openclaw/openclaw/pull/111431)
- Exit onboarding immediately when setup is skipped [#112165](https://github.com/openclaw/openclaw/pull/112165)
- Label onboarding fields and mask Matrix credentials [#112233](https://github.com/openclaw/openclaw/pull/112233)
- Avoid catalog preparation during verified TUI startup [#113136](https://github.com/openclaw/openclaw/pull/113136)
- Fresh installs find external search plugins and honor first tasks [#114327](https://github.com/openclaw/openclaw/pull/114327)
- Wait for a real new browser during onboarding [#117431](https://github.com/openclaw/openclaw/pull/117431)
- Keep channel setup moving through Gateway installation progress [#117877](https://github.com/openclaw/openclaw/pull/117877)
- Report failed browser launches during setup [#117979](https://github.com/openclaw/openclaw/pull/117979)
- Build Control UI before onboarding handoff [#118038](https://github.com/openclaw/openclaw/pull/118038)
- Show clipboard failures during onboarding and pairing [#118651](https://github.com/openclaw/openclaw/pull/118651)
- fix(tui): close setup gateway before exit fallback [#121183](https://github.com/openclaw/openclaw/pull/121183)
- Restore setup chat on development Gateway rosters [#121784](https://github.com/openclaw/openclaw/pull/121784)
- Split system-agent chat ownership and preserve handoff state [#121884](https://github.com/openclaw/openclaw/pull/121884)
- Keep agent bootstrap on the Gateway's OpenClaw CLI [#122765](https://github.com/openclaw/openclaw/pull/122765)
- Add recovery when Custodian channel setup checks fail [#124680](https://github.com/openclaw/openclaw/pull/124680)
- Open browser handoff in display-less WSL [#124704](https://github.com/openclaw/openclaw/pull/124704)
- Finalize guided agent creation safely [#125768](https://github.com/openclaw/openclaw/pull/125768)
- fix(onboard): recover manual handoff after browser launch failure [#130272](https://github.com/openclaw/openclaw/pull/130272)
- Reject invalid numeric values in plugin setup [#107346](https://github.com/openclaw/openclaw/pull/107346)
- Preserve emoji in onboarding recommendation explanations [#110401](https://github.com/openclaw/openclaw/pull/110401)
- Skip blank locale overrides in the setup wizard [#111076](https://github.com/openclaw/openclaw/pull/111076)
- Preserve the first-turn hatch for fresh named agents [#111553](https://github.com/openclaw/openclaw/pull/111553)
- Keep system care under Settings [#111686](https://github.com/openclaw/openclaw/pull/111686)
- Stop onboarding progress spinners from flooding narrow terminals [#112413](https://github.com/openclaw/openclaw/pull/112413)
- Show the setup cancel hint once when it applies [#113731](https://github.com/openclaw/openclaw/pull/113731)
- Keep skip-UI setup on guided onboarding [#118737](https://github.com/openclaw/openclaw/pull/118737)
- Accept agent names during setup [#124740](https://github.com/openclaw/openclaw/pull/124740)
- Keep named agents in guided onboarding [#126365](https://github.com/openclaw/openclaw/pull/126365)
- Keep token suppression in guided onboarding [#126580](https://github.com/openclaw/openclaw/pull/126580)
- fix(ollama): start local services for native chat [#128034](https://github.com/openclaw/openclaw/pull/128034)
- fix(onboard): scope hatch timeout to initial turn [#130010](https://github.com/openclaw/openclaw/pull/130010)
- fix(onboard): terminal hatch connects after guided setup [#130082](https://github.com/openclaw/openclaw/pull/130082)
- fix(onboarding): --skip-bootstrap still creates identity files [#130153](https://github.com/openclaw/openclaw/pull/130153)

**Documentation**

- Document Ask OpenClaw Gateway and memory wizards [#115487](https://github.com/openclaw/openclaw/pull/115487)
- Refresh the docs hero and complete the quick-start grid [#102880](https://github.com/openclaw/openclaw/pull/102880)
- Align classic onboarding documentation [#124712](https://github.com/openclaw/openclaw/pull/124712)
- Correct the classic onboarding step order in docs [#125454](https://github.com/openclaw/openclaw/pull/125454)

</details>

</Accordion>

<Accordion title="Setting Up OpenClaw on Mac, Windows, and Linux">

On Mac, the main guide points directly to the app, and the local or remote Gateway you choose stays selected even if older startup or cleanup work finishes late. The app waits through the Local Network prompt and legitimate first-run data upgrades, authenticates the exact remote Gateway before moving on, and opens the dashboard only when the connection is ready.

On Windows, the guide points to the latest signed x64 and Arm64 Hub installers. The PowerShell installer now recognizes a supported Node runtime correctly and can continue in the same session after Winget installs Node.js. Windows Hub updates independently, so its standalone stable build can be newer than the mirror included with an OpenClaw release.

On Linux, desktop setup can repair or reinstall OpenClaw, connect to a local or remote Gateway directly or through SSH, verify eligible AI access already on the machine, and resume an interrupted activation. Direct certificate-pinned connections remain unavailable inside the desktop app.

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

**Improvements**

- Shorten macOS onboarding and hand off to Custodian [#117921](https://github.com/openclaw/openclaw/pull/117921)
- Open the dashboard immediately after macOS AI setup [#120950](https://github.com/openclaw/openclaw/pull/120950)
- feat: bring Linux desktop onboarding to macOS parity [#129815](https://github.com/openclaw/openclaw/pull/129815)
- Let macOS onboarding use taller windows [#104004](https://github.com/openclaw/openclaw/pull/104004)

**Bug fixes**

- Make macOS AI onboarding follow the connected Gateway [#102637](https://github.com/openclaw/openclaw/pull/102637)
- Open the macOS dashboard for configured Gateways [#102677](https://github.com/openclaw/openclaw/pull/102677)
- Make fresh macOS local setup start and activate reliably [#108764](https://github.com/openclaw/openclaw/pull/108764)
- Make macOS onboarding permissions scroll on short screens [#112507](https://github.com/openclaw/openclaw/pull/112507)
- Gate macOS remote onboarding on Gateway authentication [#117904](https://github.com/openclaw/openclaw/pull/117904)
- Unblock macOS first-launch Gateway setup [#119831](https://github.com/openclaw/openclaw/pull/119831)
- Let first-run macOS gateway migrations finish [#121012](https://github.com/openclaw/openclaw/pull/121012)
- Recover macOS onboarding during shared-state migration [#121313](https://github.com/openclaw/openclaw/pull/121313)
- fix(linux): truthful install failures, post-install repair, and reachable reinstall in the desktop companion [#128614](https://github.com/openclaw/openclaw/pull/128614)
- fix(linux): first-run desktop onboarding automatically connects working AI [#129211](https://github.com/openclaw/openclaw/pull/129211)
- fix(state): canonically bootstrap fresh state before startup-checkpoint tables [#129850](https://github.com/openclaw/openclaw/pull/129850)
- Start an existing CLI Gateway during macOS onboarding [#104051](https://github.com/openclaw/openclaw/pull/104051)
- Let Return advance macOS onboarding and clarify missing CLI recovery [#104705](https://github.com/openclaw/openclaw/pull/104705)
- Prevent macOS onboarding installer output hangs [#104827](https://github.com/openclaw/openclaw/pull/104827)
- Prevent clipped and stalled macOS onboarding [#107598](https://github.com/openclaw/openclaw/pull/107598)
- Reject public plaintext Gateway profiles on macOS [#112161](https://github.com/openclaw/openclaw/pull/112161)
- Keep macOS setup polling through Gateway progress steps [#114383](https://github.com/openclaw/openclaw/pull/114383)
- Reduce idle CPU use on macOS onboarding [#115896](https://github.com/openclaw/openclaw/pull/115896)
- Keep macOS onboarding waiting for Local Network permission [#120859](https://github.com/openclaw/openclaw/pull/120859)
- Wait for concurrent first-run migrations during Gateway startup [#120959](https://github.com/openclaw/openclaw/pull/120959)
- Show Gateway startup failure reasons during macOS onboarding [#121306](https://github.com/openclaw/openclaw/pull/121306)
- Keep macOS profile onboarding inside its managed CLI [#121651](https://github.com/openclaw/openclaw/pull/121651)
- Isolate named profiles on stable Gateway ports [#122751](https://github.com/openclaw/openclaw/pull/122751)
- Report terminal macOS Gateway startup failures promptly [#126697](https://github.com/openclaw/openclaw/pull/126697)
- Auto-install the CLI during remote macOS onboarding [#126723](https://github.com/openclaw/openclaw/pull/126723)
- Isolate macOS profiles and report direct Gateway endpoints [#127007](https://github.com/openclaw/openclaw/pull/127007)
- Recover macOS remote onboarding after a local Gateway failure [#127033](https://github.com/openclaw/openclaw/pull/127033)
- Keep first-run macOS onboarding visible after Gateway changes [#127038](https://github.com/openclaw/openclaw/pull/127038)
- fix(macos): preserve remote tunnels when switching connection modes [#127665](https://github.com/openclaw/openclaw/pull/127665)
- fix: macOS onboarding waits for Gateway restart [#127713](https://github.com/openclaw/openclaw/pull/127713)
- fix(mac): keep remote Gateway connected after a delayed local failure [#127723](https://github.com/openclaw/openclaw/pull/127723)
- fix(macos): make OpenClaw settings pane responsive [#128177](https://github.com/openclaw/openclaw/pull/128177)
- fix(macos): show the correct first-run onboarding progress [#129435](https://github.com/openclaw/openclaw/pull/129435)
- fix(macos): confirm closing onboarding during API key verification [#129447](https://github.com/openclaw/openclaw/pull/129447)
- fix(macos): select a supported Node version during onboarding [#129564](https://github.com/openclaw/openclaw/pull/129564)
- fix(macos): stop remote onboarding from installing a local gateway [#129572](https://github.com/openclaw/openclaw/pull/129572)
- fix(macos): show save failures instead of endless onboarding loading [#129959](https://github.com/openclaw/openclaw/pull/129959)
- fix(onboard): preserve the remote gateway TLS pin for an unchanged endpoint [#131042](https://github.com/openclaw/openclaw/pull/131042)
- Keep Swift device pairing compatible with older gateways [#80656](https://github.com/openclaw/openclaw/pull/80656)
- Prevent false Node rejection in the Windows installer [#106252](https://github.com/openclaw/openclaw/pull/106252)
- Continue Windows setup after winget installs Node.js [#106862](https://github.com/openclaw/openclaw/pull/106862)
- Correct named-profile Gateway guidance during macOS onboarding [#121614](https://github.com/openclaw/openclaw/pull/121614)
- fix(macos): prevent stale mode switches from stopping a new Gateway [#127609](https://github.com/openclaw/openclaw/pull/127609)
- fix(mac): keep node service aligned with the latest connection mode [#127732](https://github.com/openclaw/openclaw/pull/127732)
- fix(macos): resolve the onboarding install prompt when the gateway is already running [#128273](https://github.com/openclaw/openclaw/pull/128273)
- fix(macos): stop reporting broken Gateway executables as ready [#129453](https://github.com/openclaw/openclaw/pull/129453)
- fix(linux): keep first-run onboarding alive when the gateway restarts [#129502](https://github.com/openclaw/openclaw/pull/129502)
- fix(macos): paused Gateway setup loses recovery after CLI installation [#129566](https://github.com/openclaw/openclaw/pull/129566)
- fix: macOS setup closes without warning while verifying an existing AI connection [#129790](https://github.com/openclaw/openclaw/pull/129790)
- fix: macOS onboarding retry silently rechecks a failed AI connection [#129863](https://github.com/openclaw/openclaw/pull/129863)
- fix(macos): onboarding setup rows ignore clicks across their blank areas [#130273](https://github.com/openclaw/openclaw/pull/130273)
- fix(onboard): SSH tunnel hints use HTTPS for TLS gateways [#130313](https://github.com/openclaw/openclaw/pull/130313)
- Correct macOS remote gateway URL guidance [#98548](https://github.com/openclaw/openclaw/pull/98548)
- Honor custom config paths in the macOS CLI [#98631](https://github.com/openclaw/openclaw/pull/98631)
- Preserve custom OpenClaw profiles when the macOS app launches at login [#99752](https://github.com/openclaw/openclaw/pull/99752)

**Documentation**

- Point Windows users to the latest standalone Hub installers [#104774](https://github.com/openclaw/openclaw/pull/104774)
- Link macOS onboarding to the app download [#111361](https://github.com/openclaw/openclaw/pull/111361)
- docs(install): surface desktop app download links for normal-app installs [#127991](https://github.com/openclaw/openclaw/pull/127991)

</details>

</Accordion>

<Accordion title="Setting Up OpenClaw on iPhone, iPad, and Android">

Mobile setup now puts QR and setup-code pairing first because that is what most people were trying to find anyway, while discovered Gateways and manual host and credential entry remain available. Secure official pairing shows whether the phone has Full or Limited access, and an unencrypted connection to another machine is automatically kept Limited.

On iPhone and iPad, OpenClaw explains pairing before asking for Local Network access, lets you decide on optional permissions one at a time, and gives eligible administrators a dedicated Settings conversation for Gateway setup and repair without exposing that privileged assistant in ordinary Chat.

On Android, pairing stays usable in landscape, on narrow screens, and with larger system text. Public Gateways can use normal certificate checks while LAN and IP connections keep explicit pinning, and pairing again preserves saved location and notification choices instead of quietly changing consent; revoked permissions remain revoked, and Google Play builds still use foreground location only.

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

**Improvements**

- Full-access mobile pairing with an explicit limited mode [#105928](https://github.com/openclaw/openclaw/pull/105928)
- Put iOS gateway QR pairing front and center [#106111](https://github.com/openclaw/openclaw/pull/106111)
- Guide iOS first launch through pairing and permissions [#106129](https://github.com/openclaw/openclaw/pull/106129)
- Make Android gateway pairing prominent in Settings [#106211](https://github.com/openclaw/openclaw/pull/106211)
- Add Android system trust and manual Gateway pinning [#110976](https://github.com/openclaw/openclaw/pull/110976)
- Add an OpenClaw settings assistant to iOS [#112420](https://github.com/openclaw/openclaw/pull/112420)
- Make iOS onboarding connection status clear [#101921](https://github.com/openclaw/openclaw/pull/101921)
- Refresh native translations for access-status screens [#106260](https://github.com/openclaw/openclaw/pull/106260)

**Bug fixes**

- Replace dead-end iOS gateway connections [#103289](https://github.com/openclaw/openclaw/pull/103289)
- Preserve Android gateway hostnames during TLS checks [#105072](https://github.com/openclaw/openclaw/pull/105072)
- Make Android onboarding responsive in landscape and large text [#108405](https://github.com/openclaw/openclaw/pull/108405)
- Keep fresh iOS setup connected after pairing [#108779](https://github.com/openclaw/openclaw/pull/108779)
- Keep Android onboarding actions reachable with large text [#111747](https://github.com/openclaw/openclaw/pull/111747)
- Connect Android to pasted gateway hosts and ports [#113722](https://github.com/openclaw/openclaw/pull/113722)
- fix(gateway): stop secure link creation from hanging [#128545](https://github.com/openclaw/openclaw/pull/128545)
- fix(android): prevent unavailable SMS from reopening onboarding approval [#129077](https://github.com/openclaw/openclaw/pull/129077)
- fix(android): preserve background location during onboarding [#129543](https://github.com/openclaw/openclaw/pull/129543)
- fix(android): preserve notification forwarding consent [#129715](https://github.com/openclaw/openclaw/pull/129715)
- fix(android): preserve disabled location consent during onboarding [#129961](https://github.com/openclaw/openclaw/pull/129961)
- fix(android): serialize legacy gateway discovery [#131001](https://github.com/openclaw/openclaw/pull/131001)
- Allow Android onboarding permission text to wrap [#103649](https://github.com/openclaw/openclaw/pull/103649)
- Keep iOS gateway errors visible during reconnects [#105875](https://github.com/openclaw/openclaw/pull/105875)
- fix(android): skip scoped IPv6 discovery addresses [#130165](https://github.com/openclaw/openclaw/pull/130165)
- fix(ios): stop blaming device storage for incomplete Gateway setup [#130407](https://github.com/openclaw/openclaw/pull/130407)
- Focus the missing gateway credential during iOS onboarding [#98189](https://github.com/openclaw/openclaw/pull/98189)

**Documentation**

- Separate phone browser recovery from native node pairing [#123767](https://github.com/openclaw/openclaw/pull/123767)

</details>

</Accordion>

<Accordion title="Moving, Importing, or Resetting an Existing Setup">

Imports from Claude, Codex, and Hermes now happen in a temporary staging area, where OpenClaw verifies or repairs the model route before making the new setup active. If the source, import plan, or destination changes along the way, promotion stops rather than replaying a half-finished import against different data.

Rerunning onboarding keeps the workspace you already use unless you approve a move, and named agents keep the credentials they own through supported creation and configuration-only resets. OpenClaw validates the provider, Gateway, migration, and workspace choices before a reset can move existing data to Trash, but a valid confirmed reset is still destructive.

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

**Improvements**

- Stage onboarding migrations before publishing them [#112798](https://github.com/openclaw/openclaw/pull/112798)
- Allow safe reuse of main as an agent ID [#123609](https://github.com/openclaw/openclaw/pull/123609)

**Bug fixes**

- Make failed Hermes onboarding imports retryable [#103290](https://github.com/openclaw/openclaw/pull/103290)
- Import current Hermes state and provider contracts [#106758](https://github.com/openclaw/openclaw/pull/106758)
- Validate onboarding reset before deleting state [#111348](https://github.com/openclaw/openclaw/pull/111348)
- Keep onboarding effects on the configured default agent [#112738](https://github.com/openclaw/openclaw/pull/112738)
- Allow first-run imports after state initialization [#122967](https://github.com/openclaw/openclaw/pull/122967)
- Keep multi-agent CLI operations with their owning agent [#123871](https://github.com/openclaw/openclaw/pull/123871)
- fix(onboard): keep provider credentials with named first agents [#127572](https://github.com/openclaw/openclaw/pull/127572)
- Preserve plugin ownership during Codex onboarding [#103372](https://github.com/openclaw/openclaw/pull/103372)
- Preserve Gateway settings when rerunning onboarding [#111569](https://github.com/openclaw/openclaw/pull/111569)
- Preserve existing agent workspaces during onboarding reruns [#111787](https://github.com/openclaw/openclaw/pull/111787)
- Honor explicit Gateway options during quickstart onboarding [#112396](https://github.com/openclaw/openclaw/pull/112396)
- Isolate non-default gateway workspaces and skills [#114487](https://github.com/openclaw/openclaw/pull/114487)
- Protect OpenClaw state during headless reset [#116491](https://github.com/openclaw/openclaw/pull/116491)
- Honor explicit provider authentication when keeping the current model [#117883](https://github.com/openclaw/openclaw/pull/117883)
- Honor Gateway CLI settings during manual onboarding [#122961](https://github.com/openclaw/openclaw/pull/122961)
- Let onboarding imports survive runtime state initialization [#123106](https://github.com/openclaw/openclaw/pull/123106)
- Migrate legacy Ollama profiles for guided setup [#123341](https://github.com/openclaw/openclaw/pull/123341)
- Doctor handles explicit multi-agent profiles without false failures [#124010](https://github.com/openclaw/openclaw/pull/124010)
- Stop phantom auth migration notices on fresh installs [#124929](https://github.com/openclaw/openclaw/pull/124929)
- Group agent imports in classic onboarding [#126515](https://github.com/openclaw/openclaw/pull/126515)
- Show retryable errors when onboarding memory import fails [#126738](https://github.com/openclaw/openclaw/pull/126738)
- Honor the configured system agent during onboarding [#126861](https://github.com/openclaw/openclaw/pull/126861)
- fix(doctor): keep Claude CLI overrides selectable after migration [#126866](https://github.com/openclaw/openclaw/pull/126866)
- Honor provider credentials while keeping the existing model [#126946](https://github.com/openclaw/openclaw/pull/126946)
- fix: preserve legacy workspace during onboarding [#127059](https://github.com/openclaw/openclaw/pull/127059)
- fix(onboard): preserve named-agent profiles during config resets [#127716](https://github.com/openclaw/openclaw/pull/127716)
- fix(onboard): provider setup changes the wrong agent model in managed fleets [#128119](https://github.com/openclaw/openclaw/pull/128119)
- fix: doctor skips per-agent legacy model refs [#130725](https://github.com/openclaw/openclaw/pull/130725)
- fix(configure): keep the existing primary model when adding a custom provider [#131034](https://github.com/openclaw/openclaw/pull/131034)
- fix(configure): preserve the primary model across provider auth overrides [#131119](https://github.com/openclaw/openclaw/pull/131119)
- Preserve Anthropic model settings during Claude CLI migration [#103622](https://github.com/openclaw/openclaw/pull/103622)
- Block prototype pollution in migration config imports [#106116](https://github.com/openclaw/openclaw/pull/106116)
- Handle not-directory paths during onboarding migration [#109161](https://github.com/openclaw/openclaw/pull/109161)
- Reset session history for every agent during onboarding [#112610](https://github.com/openclaw/openclaw/pull/112610)
- Protect the default workspace when onboarding config is unreadable [#114110](https://github.com/openclaw/openclaw/pull/114110)
- Reject reset scope when reset is missing [#115554](https://github.com/openclaw/openclaw/pull/115554)
- Hide empty Matrix migration noise on fresh installs [#122808](https://github.com/openclaw/openclaw/pull/122808)
- Preserve system-agent workspace ownership in Configure [#125377](https://github.com/openclaw/openclaw/pull/125377)
- Point legacy model-reference warnings to Doctor's migration command [#125660](https://github.com/openclaw/openclaw/pull/125660)
- Keep named onboarding state on the created agent [#126463](https://github.com/openclaw/openclaw/pull/126463)
- fix(onboard): name the available providers when --import-from is unknown [#127780](https://github.com/openclaw/openclaw/pull/127780)
- fix(stepfun): preserve selected models when repeating onboarding [#129045](https://github.com/openclaw/openclaw/pull/129045)
- fix(onboard): preserve the saved skills package manager [#130438](https://github.com/openclaw/openclaw/pull/130438)

</details>

</Accordion>

<Accordion title="Automating Setup and Recovering from Interruptions">

Non-interactive onboarding now rejects invalid provider, authentication, Gateway, workspace, and conflicting flow choices before it creates an agent or writes configuration. When `--json` is requested, failures return one machine-readable result instead of empty or mixed output, and a concurrent setup for the same profile fails quickly with the current holder when known instead of sitting there looking frozen.

Cancelled or interrupted setup revokes stale work, while failed provider sign-in or local-model preparation can be retried without cancelling a newer attempt. Gateway health failures stay inside setup with the original diagnostic and recovery hints, but `--json` does not waive risk acknowledgement, and deliberately skipping service startup can still finish without a reachable Gateway, so automation must inspect the reported health instead of trusting exit status alone.

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

**Improvements**

- Make setup and doctor repairs follow one safe order [#114375](https://github.com/openclaw/openclaw/pull/114375)
- Add one-click cancellation to Custodian setup [#118953](https://github.com/openclaw/openclaw/pull/118953)

**Bug fixes**

- Recover dashboards and interrupted first-time setup [#118388](https://github.com/openclaw/openclaw/pull/118388)
- Make interrupted onboarding safe to cancel, retry, and resume [#121415](https://github.com/openclaw/openclaw/pull/121415)
- Keep health-check failures inside setup flows [#126758](https://github.com/openclaw/openclaw/pull/126758)
- fix(ui): prevent interrupted model setup from blocking retries [#127657](https://github.com/openclaw/openclaw/pull/127657)
- Reject invalid onboarding options before setup writes [#111680](https://github.com/openclaw/openclaw/pull/111680)
- Preserve invalid config during baseline setup [#112010](https://github.com/openclaw/openclaw/pull/112010)
- Recover expired setup wizards after Gateway restart [#112286](https://github.com/openclaw/openclaw/pull/112286)
- Restore fresh non-interactive onboarding [#113601](https://github.com/openclaw/openclaw/pull/113601)
- Validate non-interactive onboarding before creating setup state [#114823](https://github.com/openclaw/openclaw/pull/114823)
- Keep hosted setup exits from stopping the Gateway [#115671](https://github.com/openclaw/openclaw/pull/115671)
- Prevent overlapping remote setup after cancellation [#115856](https://github.com/openclaw/openclaw/pull/115856)
- Keep hosted wizards alive across Gateway config reloads [#120582](https://github.com/openclaw/openclaw/pull/120582)
- Serialize onboarding and plugin installation [#121482](https://github.com/openclaw/openclaw/pull/121482)
- Gateway setup recovers after lock-release failures [#121915](https://github.com/openclaw/openclaw/pull/121915)
- Allow replacement setup after terminal wizard status [#122054](https://github.com/openclaw/openclaw/pull/122054)
- Fail fast when another onboarding session is active [#122968](https://github.com/openclaw/openclaw/pull/122968)
- Let intentionally unstarted Gateways complete onboarding [#123857](https://github.com/openclaw/openclaw/pull/123857)
- Cancel onboarding cleanly on Ctrl-D or closed stdin [#124780](https://github.com/openclaw/openclaw/pull/124780)
- Report onboarding health failures in JSON summaries [#126801](https://github.com/openclaw/openclaw/pull/126801)
- Reject local Gateway credentials in remote onboarding [#127015](https://github.com/openclaw/openclaw/pull/127015)
- fix(onboard): stop printing two contradictory Fix lines for one failure [#127698](https://github.com/openclaw/openclaw/pull/127698)
- fix(onboard): reject --gateway-bind custom without a valid customBindHost [#127779](https://github.com/openclaw/openclaw/pull/127779)
- fix(onboard): JSON commands return no output without a terminal [#129437](https://github.com/openclaw/openclaw/pull/129437)
- fix(cli): emit JSON failures when existing config is invalid [#129578](https://github.com/openclaw/openclaw/pull/129578)
- Allow immediate setup-wizard replacement after completion [5c308e0](https://github.com/openclaw/openclaw/commit/5c308e0)
- Release setup admission before completing wizard sessions [f3e1efe](https://github.com/openclaw/openclaw/commit/f3e1efe)
- Reject unknown non-interactive onboarding auth choices [#111409](https://github.com/openclaw/openclaw/pull/111409)
- Ignore blank workspace inputs during automated onboarding [#115537](https://github.com/openclaw/openclaw/pull/115537)
- Reject contradictory non-interactive TUI onboarding [#115573](https://github.com/openclaw/openclaw/pull/115573)
- Reject conflicting custom model input flags [#115595](https://github.com/openclaw/openclaw/pull/115595)
- Reject remote-only flags during local onboarding [#115636](https://github.com/openclaw/openclaw/pull/115636)
- Fail onboarding when a requested daemon install fails [#122845](https://github.com/openclaw/openclaw/pull/122845)
- Prevent failed workspace setup from publishing onboarding config [#124092](https://github.com/openclaw/openclaw/pull/124092)
- Reject command-shaped API keys from environment onboarding [#126776](https://github.com/openclaw/openclaw/pull/126776)
- Reject ignored options on onboarding recommendation actions [#126973](https://github.com/openclaw/openclaw/pull/126973)
- Make onboarding auth-choice help match accepted values [#127030](https://github.com/openclaw/openclaw/pull/127030)
- fix(onboard): emit JSON on option-validation failures [#127794](https://github.com/openclaw/openclaw/pull/127794)
- fix(onboard): emit JSON for remaining non-interactive option rejections [#127976](https://github.com/openclaw/openclaw/pull/127976)
- fix(onboarding): preserve JSON output for rejected setup options [#128542](https://github.com/openclaw/openclaw/pull/128542)
- fix(onboard): reject invalid provider choices without silent success [#128574](https://github.com/openclaw/openclaw/pull/128574)
- fix(cli): make managed Gateway and Node recovery hints actionable [#129243](https://github.com/openclaw/openclaw/pull/129243)
- fix(node): broken Node service suggests repairing the Gateway [#129545](https://github.com/openclaw/openclaw/pull/129545)
- fix(onboarding): recovery hints target the wrong Gateway [#129577](https://github.com/openclaw/openclaw/pull/129577)
- fix(setup): emit JSON failure for invalid baseline config [#129867](https://github.com/openclaw/openclaw/pull/129867)
- fix(onboarding): missing ESM package errors omit the repair hint [#130159](https://github.com/openclaw/openclaw/pull/130159)
- fix(onboarding): remote retry hint omits required risk acknowledgment [#130174](https://github.com/openclaw/openclaw/pull/130174)
- fix(cli): return JSON errors for rejected onboarding recommendation options [#130245](https://github.com/openclaw/openclaw/pull/130245)
- fix(onboard): remote setup no longer enables local hooks [#130292](https://github.com/openclaw/openclaw/pull/130292)
- fix(doctor): stop flagging lazily-created session dirs as missing [#130704](https://github.com/openclaw/openclaw/pull/130704)

**Documentation**

- Fix non-interactive onboarding command examples [#121954](https://github.com/openclaw/openclaw/pull/121954)
- Correct onboarding commands and Google Chat credentials [#118936](https://github.com/openclaw/openclaw/pull/118936)
- Correct the onboarding setup command [#126964](https://github.com/openclaw/openclaw/pull/126964)

</details>

</Accordion>

</AccordionGroup>

## Updates and Maintenance

Users could sometimes experience instability after updating OpenClaw. Supported update paths now inspect the installation before replacing it and stop unsafe candidates while leaving the previous CLI runnable. In the Control UI, updates identify the target, ask for confirmation, and keep progress and the final outcome visible.

Maintenance tools now provide clearer recovery paths. Configuration errors point to the setting that needs attention, Doctor focuses on problems and the next action, new backups are checked against the guarded restore path, destructive cleanup stops when ownership is unclear, and supported restarts give tracked work time to finish before handoff.

<AccordionGroup>

<Accordion title="Installing OpenClaw Updates">

Gateway updates started in the Control UI now identify the target, require confirmation, show progress through the update and restart, and report the final outcome. On eligible signed Mac apps, that flow updates the app first and then only the app-managed local Gateway; browser and user-managed installs keep their Gateway-only path.

Supported CLI updates check Node compatibility, package-manager lifecycle rules, and whether npm, pnpm, or Bun owns the installation before replacement. An unsafe candidate stops while leaving the previous CLI runnable, and an exact `openclaw update --dry-run` previews the path without changing configuration, handoff, cleanup, or restart state.

One upgrade path still needs a manual repair. If you are on OpenClaw 2026.7.1 with pnpm 11, run `pnpm add -g openclaw@latest` once. OpenClaw does not upgrade Node for you.

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

**Improvements**

- Add persistent update cards and app-first macOS updates [#104171](https://github.com/openclaw/openclaw/pull/104171)
- Coordinate macOS app and managed runtime updates [#107634](https://github.com/openclaw/openclaw/pull/107634)
- Add signed updates to the Linux companion app [#108770](https://github.com/openclaw/openclaw/pull/108770)
- Add safe extended-stable Docker channels [#112494](https://github.com/openclaw/openclaw/pull/112494)
- Allow experimental OpenClaw use on node:sqlite-capable Bun builds [#114256](https://github.com/openclaw/openclaw/pull/114256)
- Add scheduled update campaigns and an Updates settings page [#120506](https://github.com/openclaw/openclaw/pull/120506)
- Confirm Control UI updates before installing and restarting [#121234](https://github.com/openclaw/openclaw/pull/121234)
- Refresh moving Docker image tags weekly [#123348](https://github.com/openclaw/openclaw/pull/123348)
- Speed up the Bash Git installer with a blobless clone [#123835](https://github.com/openclaw/openclaw/pull/123835)
- Add typed update recovery in the Control UI [#125098](https://github.com/openclaw/openclaw/pull/125098)
- Retire pre-2026.4 compatibility paths [#104650](https://github.com/openclaw/openclaw/pull/104650)
- Standardize update and plugin version ordering with SemVer [#105944](https://github.com/openclaw/openclaw/pull/105944)
- Let Linux development builds choose the install channel [#109242](https://github.com/openclaw/openclaw/pull/109242)
- Add a safe update path for source-checkout Gateway servers [#112557](https://github.com/openclaw/openclaw/pull/112557)
- Recommend and provision Node 26 for new installs [#114399](https://github.com/openclaw/openclaw/pull/114399)
- Move Synthetic to an official external provider plugin [#116720](https://github.com/openclaw/openclaw/pull/116720)
- Move the Xiaomi provider to an official external plugin [#116861](https://github.com/openclaw/openclaw/pull/116861)
- Speed up dev-channel source updates [#117246](https://github.com/openclaw/openclaw/pull/117246)
- Add a separate update channel for macOS and Windows test builds [#109244](https://github.com/openclaw/openclaw/pull/109244)
- Unify plugin installs and retire legacy worktree records [#114749](https://github.com/openclaw/openclaw/pull/114749)
- Reuse macOS Gateway executable search paths [#116323](https://github.com/openclaw/openclaw/pull/116323)

**Bug fixes**

- Make the update card reachable and route macOS updates correctly [#104316](https://github.com/openclaw/openclaw/pull/104316)
- Preserve working installs on unsupported Node versions [#106994](https://github.com/openclaw/openclaw/pull/106994)
- Preserve Codex plugin policy during upgrades [#107285](https://github.com/openclaw/openclaw/pull/107285)
- Clarify Mac app and Gateway update actions [#107793](https://github.com/openclaw/openclaw/pull/107793)
- Preserve pnpm 11 and Bun ownership during updates [#107802](https://github.com/openclaw/openclaw/pull/107802)
- Repair obsolete managed Gateway Node runtimes during update [#108668](https://github.com/openclaw/openclaw/pull/108668)
- Preserve unrelated Node compile caches during install [#113837](https://github.com/openclaw/openclaw/pull/113837)
- Keep update dry runs truly read-only [#114803](https://github.com/openclaw/openclaw/pull/114803)
- Stop macOS app replacement retry storms [#114975](https://github.com/openclaw/openclaw/pull/114975)
- Refuse symlinked build output roots [#116705](https://github.com/openclaw/openclaw/pull/116705)
- Repair stale plugin host packages after upgrades [#118304](https://github.com/openclaw/openclaw/pull/118304)
- Keep extended-stable installs on their update channel [#118518](https://github.com/openclaw/openclaw/pull/118518)
- Keep targeted official plugin updates on the core channel [#119799](https://github.com/openclaw/openclaw/pull/119799)
- Keep node hosts compatible across Gateway protocol v3 and v4 [#119981](https://github.com/openclaw/openclaw/pull/119981)
- show authoritative dev checkout update status [#120769](https://github.com/openclaw/openclaw/pull/120769)
- Complete high-volume stable upgrades without cleanup stalls [#124651](https://github.com/openclaw/openclaw/pull/124651)
- Make package lifecycle trust explicit during install and update [#124727](https://github.com/openclaw/openclaw/pull/124727)
- Keep npm installer retries on the requested channel [#124778](https://github.com/openclaw/openclaw/pull/124778)
- Prevent Gateway polling stalls and unnecessary hidden-tab refreshes [#124891](https://github.com/openclaw/openclaw/pull/124891)
- Make install, update, and uninstall outcomes transactional [#125992](https://github.com/openclaw/openclaw/pull/125992)
- Retry failed npm installs once in the Windows installer [8dd204e](https://github.com/openclaw/openclaw/commit/8dd204e)
- Stop timed-out updater process trees [#103406](https://github.com/openclaw/openclaw/pull/103406)
- Update managed macOS Gateways from validated runtime snapshots [#104946](https://github.com/openclaw/openclaw/pull/104946)
- Preserve ClawHub plugins after core updates [#105405](https://github.com/openclaw/openclaw/pull/105405)
- Let Android connect to Gateway protocol v3 [#106205](https://github.com/openclaw/openclaw/pull/106205)
- Let Apple node sessions connect to protocol v3 gateways [#106294](https://github.com/openclaw/openclaw/pull/106294)
- Reject PATH Node runtimes with broken npm [#107825](https://github.com/openclaw/openclaw/pull/107825)
- Make Windows installs resilient to stale short TEMP paths [#108050](https://github.com/openclaw/openclaw/pull/108050)
- Preserve working installs during pnpm and Bun updates [#108090](https://github.com/openclaw/openclaw/pull/108090)
- Let npm 12 global updates complete safely [#108100](https://github.com/openclaw/openclaw/pull/108100)
- Preserve official plugin config and harden npm metadata installs [#108336](https://github.com/openclaw/openclaw/pull/108336)
- Stop shell installers from hanging on stalled downloads [#108619](https://github.com/openclaw/openclaw/pull/108619)
- Relaunch trusted macOS app replacements [#108991](https://github.com/openclaw/openclaw/pull/108991)
- Fail closed on corrupt post-core update handoffs [#109989](https://github.com/openclaw/openclaw/pull/109989)
- Recover when Control UI styles fail after an update [#110523](https://github.com/openclaw/openclaw/pull/110523)
- Report newer releases for pinned npm plugins [#111169](https://github.com/openclaw/openclaw/pull/111169)
- Verify managed updates and keep Skill Workshop within mobile screens [#112987](https://github.com/openclaw/openclaw/pull/112987)
- Keep source-checkout updates clean after builds [#113094](https://github.com/openclaw/openclaw/pull/113094)
- Repair legacy channel config after plugin installation [#113317](https://github.com/openclaw/openclaw/pull/113317)
- Repair legacy plugin configuration during upgrades [#113324](https://github.com/openclaw/openclaw/pull/113324)
- Reject incomplete Git installer checkouts [#113809](https://github.com/openclaw/openclaw/pull/113809)
- Prevent package cleanup from deleting required runtime modules [#113821](https://github.com/openclaw/openclaw/pull/113821)
- Keep managed Gateway updates in the owning profile [#113901](https://github.com/openclaw/openclaw/pull/113901)
- Finish ClawHub plugin cleanup and unblock immediate retries [#114090](https://github.com/openclaw/openclaw/pull/114090)
- Surface manual Linux update-check results [#114312](https://github.com/openclaw/openclaw/pull/114312)
- Keep bulk official-plugin updates on the installed beta channel [#115083](https://github.com/openclaw/openclaw/pull/115083)
- Finish package and git source switches in a fresh CLI [#115292](https://github.com/openclaw/openclaw/pull/115292)
- Reject invalid plugin installs before mutations [#115427](https://github.com/openclaw/openclaw/pull/115427)
- Let macOS Dev source installs finish cold builds [#116072](https://github.com/openclaw/openclaw/pull/116072)
- Restore installs with an available TypeBox release [#116333](https://github.com/openclaw/openclaw/pull/116333)
- Preserve configured channel plugin access after updates [#116540](https://github.com/openclaw/openclaw/pull/116540)
- Restore runnable builds after failed Git updates [#117294](https://github.com/openclaw/openclaw/pull/117294)
- Reject unknown targeted plugin updates [#117333](https://github.com/openclaw/openclaw/pull/117333)
- Reject cyclic plugin marketplace aliases [#117440](https://github.com/openclaw/openclaw/pull/117440)
- Keep update dry-runs from changing local state [#118856](https://github.com/openclaw/openclaw/pull/118856)
- Report failed Windows migration checks honestly [#120033](https://github.com/openclaw/openclaw/pull/120033)
- Repair cross-OS release checks and legacy node metadata [#120442](https://github.com/openclaw/openclaw/pull/120442)
- Keep pinned dev update campaigns working after restart [#121328](https://github.com/openclaw/openclaw/pull/121328)
- Keep automatic update countdowns stable [#121504](https://github.com/openclaw/openclaw/pull/121504)
- Show truthful Gateway update progress and outcomes [#121686](https://github.com/openclaw/openclaw/pull/121686)
- Avoid duplicate plugin installs during updates [#122161](https://github.com/openclaw/openclaw/pull/122161)
- Prevent stale state from carrying into post-update finalization [#122309](https://github.com/openclaw/openclaw/pull/122309)
- Stop bundled plugin startup convergence loops [#122871](https://github.com/openclaw/openclaw/pull/122871)
- Restore plugin CLI access after retained reinstall [#123043](https://github.com/openclaw/openclaw/pull/123043)
- Install externalized configured plugins after upgrades [#123399](https://github.com/openclaw/openclaw/pull/123399)
- Reject unusable local-prefix installations [#123716](https://github.com/openclaw/openclaw/pull/123716)
- Keep the Codex plugin matched to stable OpenClaw upgrades [#124209](https://github.com/openclaw/openclaw/pull/124209)
- Enforce one cooldown across automatic dev updates [#124626](https://github.com/openclaw/openclaw/pull/124626)
- Align Node version checks across install, launch, and workers [#124812](https://github.com/openclaw/openclaw/pull/124812)
- Keep failed Git clones from poisoning install directories [#124872](https://github.com/openclaw/openclaw/pull/124872)
- Reject invalid Windows installer options before setup [#124882](https://github.com/openclaw/openclaw/pull/124882)
- Restore installs and updates on npm 11.13 through 11.15 [#125452](https://github.com/openclaw/openclaw/pull/125452)
- Schedule dev updates after slower Git fetches [#125705](https://github.com/openclaw/openclaw/pull/125705)
- Validate target config before managed Gateway handoff [#126270](https://github.com/openclaw/openclaw/pull/126270)
- fix(doctor): repair plugin host links before startup migration [#126830](https://github.com/openclaw/openclaw/pull/126830)
- Report Unix installer success only after required checks [#126871](https://github.com/openclaw/openclaw/pull/126871)
- fix: installing an official plugin on a beta gateway lands the stable release [#127791](https://github.com/openclaw/openclaw/pull/127791)
- fix(update): use prepared Gateway install identity [#128187](https://github.com/openclaw/openclaw/pull/128187)
- fix(update): reject incomplete Control UI bundles [#128825](https://github.com/openclaw/openclaw/pull/128825)
- fix(update): bind managed handoffs to exact targets [#128868](https://github.com/openclaw/openclaw/pull/128868)
- fix(plugins): make marketplace installs transactional [#129266](https://github.com/openclaw/openclaw/pull/129266)
- fix(update): keep custom Bun global updates on their original installation [#129589](https://github.com/openclaw/openclaw/pull/129589)
- fix(release): normalize package tarball modes and prove non-root install [#130335](https://github.com/openclaw/openclaw/pull/130335)
- Fix linked hook and nested pack discovery [#130813](https://github.com/openclaw/openclaw/pull/130813)
- fix(update): preserve plugin convergence through package restart [#131062](https://github.com/openclaw/openclaw/pull/131062)
- Verify profile-scoped macOS updater jobs before cleanup [#97264](https://github.com/openclaw/openclaw/pull/97264)
- Clean up CLI installer temporary files after failures [#103725](https://github.com/openclaw/openclaw/pull/103725)
- Remove installer temporary files after commands finish [#104049](https://github.com/openclaw/openclaw/pull/104049)
- Restore July release guards and current-main validation [#107462](https://github.com/openclaw/openclaw/pull/107462)
- Hide the update guide after Mac app-only updates [#108034](https://github.com/openclaw/openclaw/pull/108034)
- Bound update checks when registry response bodies stall [#108606](https://github.com/openclaw/openclaw/pull/108606)
- Stop stalled Windows installer downloads from hanging forever [#108791](https://github.com/openclaw/openclaw/pull/108791)
- Bound sandbox installer downloads before execution [#108805](https://github.com/openclaw/openclaw/pull/108805)
- Split plugin updates and preserve fallback install policy [#108877](https://github.com/openclaw/openclaw/pull/108877)
- Handle live-updater lock creation races and stabilize tooling tests [#109877](https://github.com/openclaw/openclaw/pull/109877)
- Verify ACPX native adapter packages during install [#111682](https://github.com/openclaw/openclaw/pull/111682)
- Add one-click refresh for protocol mismatch [#111772](https://github.com/openclaw/openclaw/pull/111772)
- Hide update divergence for incomparable Git histories [#111946](https://github.com/openclaw/openclaw/pull/111946)
- Report Windows source UI build failures correctly [#112053](https://github.com/openclaw/openclaw/pull/112053)
- Keep versioned plugin installs registry-backed in source checkouts [#112829](https://github.com/openclaw/openclaw/pull/112829)
- Recognize Bun text lockfiles in update status [#114416](https://github.com/openclaw/openclaw/pull/114416)
- Use managed runtime dependencies for Twitch packages [#115147](https://github.com/openclaw/openclaw/pull/115147)
- Label beta updates in the Control UI [#115518](https://github.com/openclaw/openclaw/pull/115518)
- Honor configured channels for targeted plugin updates [#115604](https://github.com/openclaw/openclaw/pull/115604)
- Restore the legacy Docker apt-package fallback [#116466](https://github.com/openclaw/openclaw/pull/116466)
- Accept npm ranges and tags in staged global updates [#116585](https://github.com/openclaw/openclaw/pull/116585)
- Return failure when local changes block an update [#117452](https://github.com/openclaw/openclaw/pull/117452)
- Detect lockless global Bun installations correctly [#118143](https://github.com/openclaw/openclaw/pull/118143)
- Allow plugin update previews in immutable Nix mode [#118431](https://github.com/openclaw/openclaw/pull/118431)
- Select the correct root-help bundle during source builds [#119590](https://github.com/openclaw/openclaw/pull/119590)
- Handle vanished updater process groups correctly [#119614](https://github.com/openclaw/openclaw/pull/119614)
- Preserve startup version during plugin repair [#120085](https://github.com/openclaw/openclaw/pull/120085)
- Retire stale managed shadows of bundled plugins after updates [#121261](https://github.com/openclaw/openclaw/pull/121261)
- Keep dev auto-updates running after failed handoff checks [#121664](https://github.com/openclaw/openclaw/pull/121664)
- Let updated plugins migrate legacy config before validation [#122199](https://github.com/openclaw/openclaw/pull/122199)
- Restore update tracking for detached Dev checkouts [#122415](https://github.com/openclaw/openclaw/pull/122415)
- Keep relative-path CLI installations working after directory changes [#122626](https://github.com/openclaw/openclaw/pull/122626)
- Remove stale Plugin SDK declarations from build caches [#122837](https://github.com/openclaw/openclaw/pull/122837)
- Find the correct checkout when updating from version-managed launchers [#123197](https://github.com/openclaw/openclaw/pull/123197)
- Report Linux build-tool installation failures honestly [#123817](https://github.com/openclaw/openclaw/pull/123817)
- Reject blank required update fields in the Control UI [#124264](https://github.com/openclaw/openclaw/pull/124264)
- Report accurate update status for detached development installs [#124611](https://github.com/openclaw/openclaw/pull/124611)
- Stop reporting valid dependency installs as stale [#124627](https://github.com/openclaw/openclaw/pull/124627)
- Recognize successful Windows installs with deferred PATH refresh [#124678](https://github.com/openclaw/openclaw/pull/124678)
- Defer updater migrations until an update will proceed [#125124](https://github.com/openclaw/openclaw/pull/125124)
- Preserve committed plugin updates when stopping the helper [#125150](https://github.com/openclaw/openclaw/pull/125150)
- Report plugin updates only after they commit [#125739](https://github.com/openclaw/openclaw/pull/125739)
- Fail fast when package users request `--tag main` [#125949](https://github.com/openclaw/openclaw/pull/125949)
- Rebuild incomplete managed-update cache hits [#125954](https://github.com/openclaw/openclaw/pull/125954)
- Keep default plugin slots implicit [#126442](https://github.com/openclaw/openclaw/pull/126442)
- fix(plugins): plugins update reports a version downgrade as a successful update [#127874](https://github.com/openclaw/openclaw/pull/127874)
- fix(cli): installed hook packs cannot update by npm package name [#128281](https://github.com/openclaw/openclaw/pull/128281)
- fix(installer): honor explicit git target inside another checkout [#128407](https://github.com/openclaw/openclaw/pull/128407)
- fix(install): preserve Git command when npm verification fails [#128502](https://github.com/openclaw/openclaw/pull/128502)
- fix(plugins): report Git plugin updates when their package version is unchanged [#128841](https://github.com/openclaw/openclaw/pull/128841)
- fix(update): fail the git updater when the final HEAD verification probe errors [#129036](https://github.com/openclaw/openclaw/pull/129036)
- fix(cli): start under Bun 1.4 without warning filter [#129142](https://github.com/openclaw/openclaw/pull/129142)
- fix(update): retain registry failures in update status [#130931](https://github.com/openclaw/openclaw/pull/130931)

**Documentation**

- Fix pnpm global build approval instructions [#106180](https://github.com/openclaw/openclaw/pull/106180)
- Recommend Node 26 across installation entry guides [#115064](https://github.com/openclaw/openclaw/pull/115064)
- Document npm 12 lifecycle-script approval for global installs [#115224](https://github.com/openclaw/openclaw/pull/115224)
- improve: verify packaged runtime on Bun 1.4 [#129552](https://github.com/openclaw/openclaw/pull/129552)

</details>

</Accordion>

<Accordion title="Configuration Errors and Service Repairs">

Bad configuration now stops with a useful answer instead of quietly starting OpenClaw with something else. Packaged builds, CLI checks, service preflight, and Gateway startup show the file, line, full setting path, allowed values when available, and a safe version of what was received; malformed top-level scalar files fail closed instead of loading defaults.

If you are upgrading a configuration that still contains retired keys, run `openclaw doctor --fix` before September 18, 2026. Doctor keeps canonical values when old and new keys conflict and removes settings that no longer do anything, although explicitly retired tuning values return to the built-in defaults.

Supported Gateway service repairs preserve the installed state directory, config path, port, managed environment, and eligible file-backed credentials instead of silently retargeting the service. Changing those targets intentionally requires `openclaw gateway install --force`; on Linux, service commands also refuse conflicting user and system units and show which unit owns the Gateway.

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

**Improvements**

- Add Fleet cells for isolated multi-tenant hosting [#104527](https://github.com/openclaw/openclaw/pull/104527)
- Harden Fleet cell creation and operator guidance [#104814](https://github.com/openclaw/openclaw/pull/104814)
- Add Fleet cell backups, limits, egress controls, and diagnostics [#104828](https://github.com/openclaw/openclaw/pull/104828)
- Reduce and standardize the configuration surface [#111142](https://github.com/openclaw/openclaw/pull/111142)
- Remove tuning-only configuration knobs with stable built-in defaults [#111382](https://github.com/openclaw/openclaw/pull/111382)
- Consolidate OpenClaw configuration and legacy migrations [#111527](https://github.com/openclaw/openclaw/pull/111527)
- Switch macOS dashboards between gateways [#113965](https://github.com/openclaw/openclaw/pull/113965)
- Scale agent concurrency to the host CPU [#114047](https://github.com/openclaw/openclaw/pull/114047)
- Move macOS gateway settings into the Dashboard [#115999](https://github.com/openclaw/openclaw/pull/115999)
- Add an experimental Cloudflare Containers deployment template [#122768](https://github.com/openclaw/openclaw/pull/122768)
- Add a managed macOS elevation-host workflow [#123569](https://github.com/openclaw/openclaw/pull/123569)
- feat(daemon): support Bun 1.4 managed services [#129593](https://github.com/openclaw/openclaw/pull/129593)
- Add supervisor-owned Fleet cell log streaming [#104669](https://github.com/openclaw/openclaw/pull/104669)
- Make config validation errors easier to locate [#106526](https://github.com/openclaw/openclaw/pull/106526)
- Retire redundant configuration settings [#113174](https://github.com/openclaw/openclaw/pull/113174)
- Retire obsolete diagnostics configuration shapes [#113946](https://github.com/openclaw/openclaw/pull/113946)
- Add multi-gateway controls to the Mac menus [#114038](https://github.com/openclaw/openclaw/pull/114038)
- Show the active Gateway in the Mac sidebar footer [#114059](https://github.com/openclaw/openclaw/pull/114059)
- Reduce repeated macOS config polling work [#115886](https://github.com/openclaw/openclaw/pull/115886)
- Remove unsupported environment-variable overrides [#105970](https://github.com/openclaw/openclaw/pull/105970)
- Compact the native macOS Gateway picker [#115977](https://github.com/openclaw/openclaw/pull/115977)
- Refresh native translations for current gateway settings [#118356](https://github.com/openclaw/openclaw/pull/118356)

**Bug fixes**

- Stop stale device pairing buildup and unify the Nodes inventory [#102810](https://github.com/openclaw/openclaw/pull/102810)
- Restore detailed config errors in packaged builds [#104026](https://github.com/openclaw/openclaw/pull/104026)
- Fix Windows gateway launchers for CJK profile paths [#107751](https://github.com/openclaw/openclaw/pull/107751)
- Restore replies when compaction modes are omitted [#114759](https://github.com/openclaw/openclaw/pull/114759)
- Prevent gateway repairs from retargeting managed services [#115935](https://github.com/openclaw/openclaw/pull/115935)
- Make config patch delete only the requested array entry [#116463](https://github.com/openclaw/openclaw/pull/116463)
- Accept documented configWrites settings across bundled channels [#117206](https://github.com/openclaw/openclaw/pull/117206)
- Preserve file-backed gateway credentials during service updates [#120458](https://github.com/openclaw/openclaw/pull/120458)
- Keep the macOS Gateway supervised during reinstall failures [#120699](https://github.com/openclaw/openclaw/pull/120699)
- Stop false stale-service warnings after upgrades [#120702](https://github.com/openclaw/openclaw/pull/120702)
- Make config validation errors actionable [#124763](https://github.com/openclaw/openclaw/pull/124763)
- Apply documented defaults before the first config file exists [#125110](https://github.com/openclaw/openclaw/pull/125110)
- Restore macOS dashboard auth from gateway service secrets [#101375](https://github.com/openclaw/openclaw/pull/101375)
- Keep inherited values out of configuration writes [#102231](https://github.com/openclaw/openclaw/pull/102231)
- Keep the macOS app running after login launch [#102465](https://github.com/openclaw/openclaw/pull/102465)
- Stop cancelled Gateway configuration reads [#104093](https://github.com/openclaw/openclaw/pull/104093)
- Reject oversized multibyte JSONC in OC Path [#104140](https://github.com/openclaw/openclaw/pull/104140)
- Make macOS LaunchAgent plists readable by launchd [#104228](https://github.com/openclaw/openclaw/pull/104228)
- Respect filesystem case rules for agent directories [#105402](https://github.com/openclaw/openclaw/pull/105402)
- Preserve nested defaults across configuration merges [#105953](https://github.com/openclaw/openclaw/pull/105953)
- Retry config snapshots after transient failures [#106105](https://github.com/openclaw/openclaw/pull/106105)
- Restore environment variables after config-load failures [#106181](https://github.com/openclaw/openclaw/pull/106181)
- Preserve JSONC formatting during OC Path insertion [#106858](https://github.com/openclaw/openclaw/pull/106858)
- Pin Fleet logs to verified container generations and repair restore guidance [#106918](https://github.com/openclaw/openclaw/pull/106918)
- Keep explicit Gateway loopback binds canonical [#107731](https://github.com/openclaw/openclaw/pull/107731)
- Keep suppressed gateways quiet and web terminals interactive [#108871](https://github.com/openclaw/openclaw/pull/108871)
- Fix Windows launchers for non-ASCII profile paths [#108967](https://github.com/openclaw/openclaw/pull/108967)
- Reject ambiguous config paths after bracket segments [#109580](https://github.com/openclaw/openclaw/pull/109580)
- Warn when an already-running Gateway needs restart repair [#110583](https://github.com/openclaw/openclaw/pull/110583)
- Ignore blank gateway credentials during configure wizard probes [#113096](https://github.com/openclaw/openclaw/pull/113096)
- Preserve Control UI question access after upgrades [#113153](https://github.com/openclaw/openclaw/pull/113153)
- Fix forgetting paired gateways on iOS [#114083](https://github.com/openclaw/openclaw/pull/114083)
- Preserve exact ownership for included config writes [#114251](https://github.com/openclaw/openclaw/pull/114251)
- Reject ambiguous config patches and correct auth disconnects [#115579](https://github.com/openclaw/openclaw/pull/115579)
- Preserve config includes during Doctor cleanup [#115723](https://github.com/openclaw/openclaw/pull/115723)
- Prevent Doctor from writing unsupported extension-channel config [#116025](https://github.com/openclaw/openclaw/pull/116025)
- Block conflicting systemd gateway installs [#116162](https://github.com/openclaw/openclaw/pull/116162)
- Let gateway start recover crash-looped systemd services [#116178](https://github.com/openclaw/openclaw/pull/116178)
- Prevent wildcard pairing routes from crashing Gateway upgrades [#116610](https://github.com/openclaw/openclaw/pull/116610)
- Preserve config dry-run errors and reject empty batches [#116833](https://github.com/openclaw/openclaw/pull/116833)
- Preserve quotes and backslashes in generated systemd units [#117375](https://github.com/openclaw/openclaw/pull/117375)
- Preserve custom CA trust across Gateway reinstalls [#117944](https://github.com/openclaw/openclaw/pull/117944)
- Preserve external macOS remote-Gateway config edits [#118046](https://github.com/openclaw/openclaw/pull/118046)
- Migrate redundant native Codex service tiers [#118738](https://github.com/openclaw/openclaw/pull/118738)
- Show remote Gateway authentication failures in macOS status [#118841](https://github.com/openclaw/openclaw/pull/118841)
- Keep macOS gateway recovery working with unlabeled system plists [#119091](https://github.com/openclaw/openclaw/pull/119091)
- Apply managed dotenv changes on systemd Gateway restart [#119441](https://github.com/openclaw/openclaw/pull/119441)
- Make Linux systemd unit cleanup report failures and reload removed legacy units [#120027](https://github.com/openclaw/openclaw/pull/120027)
- Emit valid wide-area DNS configuration [#121392](https://github.com/openclaw/openclaw/pull/121392)
- Require validated Node for managed services [#122070](https://github.com/openclaw/openclaw/pull/122070)
- fix(infra): prevent $-pattern injection in home directory tilde expansion [#122991](https://github.com/openclaw/openclaw/pull/122991)
- Keep valid CoreDNS zones when updates fail [#123928](https://github.com/openclaw/openclaw/pull/123928)
- Reject malformed scalar config files instead of loading defaults [#124945](https://github.com/openclaw/openclaw/pull/124945)
- Distinguish missing environment references from literal placeholders [#125455](https://github.com/openclaw/openclaw/pull/125455)
- fix(doctor): skip host service management in container environments [#125796](https://github.com/openclaw/openclaw/pull/125796)
- Show outcomes for native reconnect, Gateway links, and notifications [#125909](https://github.com/openclaw/openclaw/pull/125909)
- fix(macos): prevent invalid Gateway ports from crashing remote connections [#128260](https://github.com/openclaw/openclaw/pull/128260)
- fix(systemd): report service commands replaced by drop-ins [#128604](https://github.com/openclaw/openclaw/pull/128604)
- fix(systemd): honor effective drop-in configuration [#129170](https://github.com/openclaw/openclaw/pull/129170)
- fix(doctor): preserve managed container services [#129527](https://github.com/openclaw/openclaw/pull/129527)
- fix(daemon): prevent macOS node startup hangs from inherited compile cache [#130097](https://github.com/openclaw/openclaw/pull/130097)
- fix(daemon): preserve structured command termination outcomes [#130634](https://github.com/openclaw/openclaw/pull/130634)
- fix: preserve systemd units when interrupted status cannot authorize cleanup [#131080](https://github.com/openclaw/openclaw/pull/131080)
- fix(cli): preserve authored config during channel auth [#131117](https://github.com/openclaw/openclaw/pull/131117)
- Connect bootstrap clients to self-signed WSS gateways [#80204](https://github.com/openclaw/openclaw/pull/80204)
- Safely resolve conflicting Linux gateway services [#91221](https://github.com/openclaw/openclaw/pull/91221)
- Preserve secure local dashboard access for specific Gateway binds [#98479](https://github.com/openclaw/openclaw/pull/98479)
- Preserve complete Unicode characters in config hints [#102512](https://github.com/openclaw/openclaw/pull/102512)
- Restore environment after invalid config snapshots [#103786](https://github.com/openclaw/openclaw/pull/103786)
- Render identity-avatar array indices correctly [#104935](https://github.com/openclaw/openclaw/pull/104935)
- Reject retired no-op configuration keys [#106031](https://github.com/openclaw/openclaw/pull/106031)
- Warn before config writes strip JSON5 comments [#107604](https://github.com/openclaw/openclaw/pull/107604)
- Parse APNs relay timeouts as decimal values [#107883](https://github.com/openclaw/openclaw/pull/107883)
- Ignore blank Synology Chat account tokens [#108922](https://github.com/openclaw/openclaw/pull/108922)
- Ignore blank Google Chat service-account environment values [#108948](https://github.com/openclaw/openclaw/pull/108948)
- Bound legacy macOS launchd cleanup [#109116](https://github.com/openclaw/openclaw/pull/109116)
- Use the effective daemon port flag [#109294](https://github.com/openclaw/openclaw/pull/109294)
- Ignore blank Synology Chat environment fallbacks [#109495](https://github.com/openclaw/openclaw/pull/109495)
- Include retry timing in rate-limited Gateway authentication errors [#109630](https://github.com/openclaw/openclaw/pull/109630)
- Preserve emoji in truncated config validation errors [#109664](https://github.com/openclaw/openclaw/pull/109664)
- Reject invalid Gateway TCP ports safely [#109875](https://github.com/openclaw/openclaw/pull/109875)
- Ignore blank APNs relay timeout overrides [#110677](https://github.com/openclaw/openclaw/pull/110677)
- Reject unusable Tlon URLs during setup [#111099](https://github.com/openclaw/openclaw/pull/111099)
- Repair the active profile and config location in doctor [#111555](https://github.com/openclaw/openclaw/pull/111555)
- Keep bundled provider overlays valid after revalidation [#112334](https://github.com/openclaw/openclaw/pull/112334)
- Reject and safely migrate sandbox browser network none [#115250](https://github.com/openclaw/openclaw/pull/115250)
- Stop macOS DNS setup from hanging on Homebrew probes [#115782](https://github.com/openclaw/openclaw/pull/115782)
- Hide duplicate SSH Gateways in the macOS dashboard [#115963](https://github.com/openclaw/openclaw/pull/115963)
- Accept documentation URLs in config hints [#116063](https://github.com/openclaw/openclaw/pull/116063)
- Recover the macOS dashboard after Gateway authentication [#116080](https://github.com/openclaw/openclaw/pull/116080)
- Reject trailing escapes in configuration paths [#116738](https://github.com/openclaw/openclaw/pull/116738)
- Correct Linux systemd service environment parsing [#117484](https://github.com/openclaw/openclaw/pull/117484)
- Restore fresh dev gateway startup [#118003](https://github.com/openclaw/openclaw/pull/118003)
- fix(cli): reject Infinity/NaN in config set/batch/patch values [#120156](https://github.com/openclaw/openclaw/pull/120156)
- Let macOS gateway repair skip unreadable foreign daemons [#120481](https://github.com/openclaw/openclaw/pull/120481)
- fix(config): keep core channels keys in the generated config schema [#120736](https://github.com/openclaw/openclaw/pull/120736)
- Reject blank configuration section filters [#121145](https://github.com/openclaw/openclaw/pull/121145)
- Avoid restart hints for unchanged configuration [#122953](https://github.com/openclaw/openclaw/pull/122953)
- Make config.patch failures explain the working next step [#124127](https://github.com/openclaw/openclaw/pull/124127)
- fix(dns): keep wide-area SOA serial monotonic across skew and rollover [#124144](https://github.com/openclaw/openclaw/pull/124144)
- Surface legacy configuration copy failures in Doctor [#124948](https://github.com/openclaw/openclaw/pull/124948)
- Warn when a post-write config reread degrades [#125075](https://github.com/openclaw/openclaw/pull/125075)
- Point local CLI authentication errors to local gateway credentials [#125488](https://github.com/openclaw/openclaw/pull/125488)
- Make config unset fail for missing paths [#125958](https://github.com/openclaw/openclaw/pull/125958)
- fix(cli): tell config get apart a typo from an unset key [#127369](https://github.com/openclaw/openclaw/pull/127369)
- fix(cli): tell operators a racing config set changed nothing [#127554](https://github.com/openclaw/openclaw/pull/127554)
- fix(config): diagnose an unwritable config directory instead of leaking EACCES [#127703](https://github.com/openclaw/openclaw/pull/127703)
- fix(config): match the config directory through symlinks when diagnosing permissions [#127734](https://github.com/openclaw/openclaw/pull/127734)
- fix(macos): escape all login LaunchAgent plist paths [#128378](https://github.com/openclaw/openclaw/pull/128378)
- fix(config): finalize runtime overrides when config is missing [#128600](https://github.com/openclaw/openclaw/pull/128600)
- fix(daemon): detect effective systemd service overrides [#128705](https://github.com/openclaw/openclaw/pull/128705)
- fix(doctor): migrate deprecated bindings match.peer.kind dm to direct [#130553](https://github.com/openclaw/openclaw/pull/130553)
- Restore cross-platform SSH gateway probes [#93030](https://github.com/openclaw/openclaw/pull/93030)
- Retire unsupported diagnostics OTel gRPC configuration [#93087](https://github.com/openclaw/openclaw/pull/93087)

**Documentation**

- Add a Daytona cloud-sandbox hosting guide [#116411](https://github.com/openclaw/openclaw/pull/116411)
- Replace retired configuration keys in documentation [#121330](https://github.com/openclaw/openclaw/pull/121330)
- Keep documented configuration examples aligned with the schema [#121336](https://github.com/openclaw/openclaw/pull/121336)
- Complete the Cloudflare deployment operator guide [#122932](https://github.com/openclaw/openclaw/pull/122932)
- Correct unsafe and nonworking hosting guides [#122971](https://github.com/openclaw/openclaw/pull/122971)
- Clarify missing `config unset` target behavior [#126036](https://github.com/openclaw/openclaw/pull/126036)
- Clarify Fleet's current scope without MVP framing [b573a3b](https://github.com/openclaw/openclaw/commit/b573a3b)
- Align configuration docs with retired keys and current defaults [#113956](https://github.com/openclaw/openclaw/pull/113956)
- Fix the custom Control UI home-directory example [#114594](https://github.com/openclaw/openclaw/pull/114594)
- Correct timezone configuration guidance [#116102](https://github.com/openclaw/openclaw/pull/116102)
- Correct retired Gateway reload settings in the docs [#116975](https://github.com/openclaw/openclaw/pull/116975)
- Add a stable private Gateway URL guide [#118340](https://github.com/openclaw/openclaw/pull/118340)
- Document Cloudflare Tunnel and Access deployment [#126029](https://github.com/openclaw/openclaw/pull/126029)
- docs: align Linux host tuning with managed systemd policy [AI-assisted] [#128752](https://github.com/openclaw/openclaw/pull/128752)
- docs(gateway): clarify independent HTTP endpoint switches [#130690](https://github.com/openclaw/openclaw/pull/130690)

</details>

</Accordion>

<Accordion title="OpenClaw Restarts and Running Work">

Before a supported snapshot or targeted restart, Gateway suspend and resume can pause new ordinary work, report blockers, and drain the agent runs, deliveries, scheduled jobs, queues, sessions, and background commands OpenClaw already tracks. Failed configuration reloads keep the prior coherent state, and rapid configuration writes retain pending restart intent instead of dropping it.

After restart, health checks, the agent list, and core controls become usable before optional catalog, plugin, and migration work finishes. That work is deferred rather than removed, so the first explicit catalog request can still take longer.

The wait covers work OpenClaw tracks. New channel or external ingress, existing plugin connections, unregistered background work, and durable receipt of incoming messages remain outside it, and externally supervised installations must consume the handoff and complete their own restart.

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

**Improvements**

- Add cooperative Gateway suspension for host snapshots [#103618](https://github.com/openclaw/openclaw/pull/103618)
- Speed up same-build Gateway restarts [#105099](https://github.com/openclaw/openclaw/pull/105099)
- Speed up Gateway cold starts and first agent turns [#105801](https://github.com/openclaw/openclaw/pull/105801)
- Speed up pristine plugin-heavy Gateway startup [#106195](https://github.com/openclaw/openclaw/pull/106195)
- Support externally supervised Gateway restarts [#109162](https://github.com/openclaw/openclaw/pull/109162)
- Guard gateway lifecycle commands against accidental disruption [#110323](https://github.com/openclaw/openclaw/pull/110323)
- Defer inactive plugin runtimes for faster Gateway and agent startup [#119733](https://github.com/openclaw/openclaw/pull/119733)
- Let updates proceed with open Gateway terminals [#121601](https://github.com/openclaw/openclaw/pull/121601)
- Start fresh gateways without legacy migration delay [#121639](https://github.com/openclaw/openclaw/pull/121639)
- Add usable Gateway suspend and resume commands [#122100](https://github.com/openclaw/openclaw/pull/122100)
- Add a channel-independent Gateway startup probe [#122477](https://github.com/openclaw/openclaw/pull/122477)
- feat(gateway): add renewable cooperative suspension draining [#130003](https://github.com/openclaw/openclaw/pull/130003)
- Reduce Gateway startup work before readiness [#105913](https://github.com/openclaw/openclaw/pull/105913)
- Make Gateway restart recovery SQLite-owned and replay-safe [#110014](https://github.com/openclaw/openclaw/pull/110014)
- Start fresh Gateways faster with stateless plugin paths [#115578](https://github.com/openclaw/openclaw/pull/115578)
- Skip inactive session stores during gateway restart recovery [#117498](https://github.com/openclaw/openclaw/pull/117498)
- Mark abandoned sessions before model preparation [#117544](https://github.com/openclaw/openclaw/pull/117544)
- Skip empty per-agent session databases during Gateway startup [#117589](https://github.com/openclaw/openclaw/pull/117589)
- Reduce cold first-turn latency after Gateway restart [#120809](https://github.com/openclaw/openclaw/pull/120809)
- Defer non-startup Gateway imports [#121780](https://github.com/openclaw/openclaw/pull/121780)
- Reduce repeated Gateway logging and delivery work [#126147](https://github.com/openclaw/openclaw/pull/126147)
- Scope gateway startup model catalog planning to configured models [#127117](https://github.com/openclaw/openclaw/pull/127117)
- perf(gateway): index targeted connections [#128198](https://github.com/openclaw/openclaw/pull/128198)
- improve(gateway): overlap macOS system-CA warmup with startup [#128422](https://github.com/openclaw/openclaw/pull/128422)
- improve(gateway): cut warm session maintenance latency [#128513](https://github.com/openclaw/openclaw/pull/128513)
- Remove obsolete macOS Gateway startup probing [#121439](https://github.com/openclaw/openclaw/pull/121439)
- Reduce duplicate restart-recovery scans [#125712](https://github.com/openclaw/openclaw/pull/125712)

**Bug fixes**

- Reliably relaunch macOS Gateways after restart [#104637](https://github.com/openclaw/openclaw/pull/104637)
- Make Gateway hot reload transactional [#105289](https://github.com/openclaw/openclaw/pull/105289)
- Prevent gateways from getting permanently stuck in draining mode [#107339](https://github.com/openclaw/openclaw/pull/107339)
- Verify Windows gateway listener ownership before termination [#108023](https://github.com/openclaw/openclaw/pull/108023)
- Harden network errors, session IDs, and extension loading [#110196](https://github.com/openclaw/openclaw/pull/110196)
- Prevent macOS reload restarts from stranding the Gateway [#110213](https://github.com/openclaw/openclaw/pull/110213)
- Prevent macOS Gateway startup freezes during TLS setup [#111473](https://github.com/openclaw/openclaw/pull/111473)
- Preflight gateway restarts for credential migration [#114715](https://github.com/openclaw/openclaw/pull/114715)
- Finish failed Gateway HTTP responses without hanging clients [#116874](https://github.com/openclaw/openclaw/pull/116874)
- Prevent macOS gateway restart from stranding the LaunchAgent [#116875](https://github.com/openclaw/openclaw/pull/116875)
- Let early gateway probes run before background startup work [#117083](https://github.com/openclaw/openclaw/pull/117083)
- Keep large-history Gateways responsive after restart [#117108](https://github.com/openclaw/openclaw/pull/117108)
- Keep large-history Gateways responsive after restart [#117118](https://github.com/openclaw/openclaw/pull/117118)
- Prevent heartbeat settings from blocking gateway startup [#117992](https://github.com/openclaw/openclaw/pull/117992)
- Clear stale runtime state on gateway close and restart [#118271](https://github.com/openclaw/openclaw/pull/118271)
- Prevent stalled live updates from leaving the Gateway offline [#119116](https://github.com/openclaw/openclaw/pull/119116)
- Stop agent roster requests from blocking Gateway startup [#119208](https://github.com/openclaw/openclaw/pull/119208)
- Prevent gateway stalls after queue drop-policy changes [#119331](https://github.com/openclaw/openclaw/pull/119331)
- Keep chat metadata from delaying other Gateway requests [#119369](https://github.com/openclaw/openclaw/pull/119369)
- Stop post-ready session-catalog work from stalling the Gateway [#119377](https://github.com/openclaw/openclaw/pull/119377)
- Keep Gateway requests responsive during context-cache warmup [#119562](https://github.com/openclaw/openclaw/pull/119562)
- Reduce multi-agent gateway stalls after agent turns [#120075](https://github.com/openclaw/openclaw/pull/120075)
- Keep the Gateway reachable when restart state is invalid [#120966](https://github.com/openclaw/openclaw/pull/120966)
- Keep Gateway controls responsive during concurrent turns [#123608](https://github.com/openclaw/openclaw/pull/123608)
- Keep supervised restarts from migrating live Gateway state [#123920](https://github.com/openclaw/openclaw/pull/123920)
- Show Gateway startup progress and harden lifecycle cleanup [#124309](https://github.com/openclaw/openclaw/pull/124309)
- Prevent large retired-agent registries from wedging the gateway [#124516](https://github.com/openclaw/openclaw/pull/124516)
- Keep Gateway readiness responsive under sustained turns [#124528](https://github.com/openclaw/openclaw/pull/124528)
- Stop the macOS idle node setup CPU loop [#124599](https://github.com/openclaw/openclaw/pull/124599)
- Drain all active Gateway work before direct stops [#126024](https://github.com/openclaw/openclaw/pull/126024)
- Avoid Tailscale restart loops after upgrades [#126069](https://github.com/openclaw/openclaw/pull/126069)
- Preserve managed Tailscale Funnel access and cleanup [#126519](https://github.com/openclaw/openclaw/pull/126519)
- fix(gateway): plugin metadata lifecycle staleness in auth-bypass cache and config reload [#127664](https://github.com/openclaw/openclaw/pull/127664)
- perf(gateway): fix event-loop convoys from per-session hot paths under concurrent sessions [#129135](https://github.com/openclaw/openclaw/pull/129135)
- fix(gateway): keep loaded conversations responsive under heavy load [#130071](https://github.com/openclaw/openclaw/pull/130071)
- Release startup migration lease before controlled gateway exit [#103157](https://github.com/openclaw/openclaw/pull/103157)
- Keep session suspensions safe through Gateway restart [#103211](https://github.com/openclaw/openclaw/pull/103211)
- Recover unbounded gateway requests from stalled connections [#103407](https://github.com/openclaw/openclaw/pull/103407)
- Prevent Gateway respawns during managed package updates [#103537](https://github.com/openclaw/openclaw/pull/103537)
- Detect hung channel runs behind disconnected transports [#103793](https://github.com/openclaw/openclaw/pull/103793)
- Keep renamed-checkout macOS gateways running [#103972](https://github.com/openclaw/openclaw/pull/103972)
- Include plugin HTTP work in Gateway suspension readiness [#104112](https://github.com/openclaw/openclaw/pull/104112)
- Keep reconnect delivery recovery inside suspension admission [#104143](https://github.com/openclaw/openclaw/pull/104143)
- Wait for background commands before suspension or restart [#104172](https://github.com/openclaw/openclaw/pull/104172)
- Force-stop stalled managed Mac app processes during restart [#104268](https://github.com/openclaw/openclaw/pull/104268)
- Coordinate channel recovery during gateway reload and shutdown [#104811](https://github.com/openclaw/openclaw/pull/104811)
- Make gateway suspension wait for accepted node work [#105134](https://github.com/openclaw/openclaw/pull/105134)
- Repair managed Gateway port drift and Crestodian cleanup errors [#105153](https://github.com/openclaw/openclaw/pull/105153)
- Restart unmanaged Gateways on their active port [#105241](https://github.com/openclaw/openclaw/pull/105241)
- Prevent false restart failures during startup migrations [#105544](https://github.com/openclaw/openclaw/pull/105544)
- Start the Gateway during banner animation [#105774](https://github.com/openclaw/openclaw/pull/105774)
- Finish session-end hooks before gateway shutdown [#105848](https://github.com/openclaw/openclaw/pull/105848)
- Defer context-cache prewarm until after gateway readiness [#106117](https://github.com/openclaw/openclaw/pull/106117)
- Keep pristine Gateway startup fast and migration-safe [#106282](https://github.com/openclaw/openclaw/pull/106282)
- Hot-apply worktree cleanup limit changes [#106525](https://github.com/openclaw/openclaw/pull/106525)
- Clear restart and suspension state between Gateway lifecycles [#106691](https://github.com/openclaw/openclaw/pull/106691)
- Honor attach-only mode during macOS gateway restart [#107402](https://github.com/openclaw/openclaw/pull/107402)
- Prevent overlapping Signal daemons during Gateway restart [#107409](https://github.com/openclaw/openclaw/pull/107409)
- Stop Bonjour self-probe retry loops [#107710](https://github.com/openclaw/openclaw/pull/107710)
- Skip the macOS post-update window when no Gateway work is needed [#108146](https://github.com/openclaw/openclaw/pull/108146)
- Bound Gateway WebSocket opening waits [#108348](https://github.com/openclaw/openclaw/pull/108348)
- Bound and stage Gateway TLS certificate generation [#109139](https://github.com/openclaw/openclaw/pull/109139)
- Prevent externally supervised Gateway restart timeouts [#109273](https://github.com/openclaw/openclaw/pull/109273)
- Keep config hot-reload active after recovered watcher errors [#109682](https://github.com/openclaw/openclaw/pull/109682)
- Keep the Gateway running when a web provider SecretRef fails [#109687](https://github.com/openclaw/openclaw/pull/109687)
- Continue stale Gateway cleanup after signal errors [#109702](https://github.com/openclaw/openclaw/pull/109702)
- Avoid false macOS Gateway restart failures [#109955](https://github.com/openclaw/openclaw/pull/109955)
- Isolate missing media credentials to the affected model [#110042](https://github.com/openclaw/openclaw/pull/110042)
- Exit cleanly when startup migrations refuse readiness [#110207](https://github.com/openclaw/openclaw/pull/110207)
- Preserve restart intent across coalesced config writes [#110397](https://github.com/openclaw/openclaw/pull/110397)
- Audit managed gateway service starts across platforms [#110497](https://github.com/openclaw/openclaw/pull/110497)
- Reload external config edits after watcher recovery [#111049](https://github.com/openclaw/openclaw/pull/111049)
- Fall back to cmd.exe for blank Windows ComSpec [#111260](https://github.com/openclaw/openclaw/pull/111260)
- Hot-reload changes from included config files [#111511](https://github.com/openclaw/openclaw/pull/111511)
- Keep macOS Gateway startup responsive during trust initialization [#111533](https://github.com/openclaw/openclaw/pull/111533)
- Repair inherited cross-user D-Bus settings during Linux updates [#111534](https://github.com/openclaw/openclaw/pull/111534)
- Keep healthy macOS gateways running for PATH-only advisories [#112381](https://github.com/openclaw/openclaw/pull/112381)
- Prevent Gateway crashes on unreachable pinned addresses [#113905](https://github.com/openclaw/openclaw/pull/113905)
- Preserve click order for Linux Gateway controls [#114291](https://github.com/openclaw/openclaw/pull/114291)
- Stop idle Scheduled Tasks reliably on localized Windows [#114434](https://github.com/openclaw/openclaw/pull/114434)
- Stop completed embedded runs from growing gateway memory [#114767](https://github.com/openclaw/openclaw/pull/114767)
- Keep Gateway teardown running after cron failures [#114848](https://github.com/openclaw/openclaw/pull/114848)
- Reconnect Gateway nodes after temporary socket setup failures [#115539](https://github.com/openclaw/openclaw/pull/115539)
- Prevent startup timeouts with many configured models [#116039](https://github.com/openclaw/openclaw/pull/116039)
- Reset Gateway event ordering after reconnects [#116043](https://github.com/openclaw/openclaw/pull/116043)
- Back off repeated macOS Gateway connection failures [#116114](https://github.com/openclaw/openclaw/pull/116114)
- Prevent stale macOS remote Gateway tunnels from restarting [#116172](https://github.com/openclaw/openclaw/pull/116172)
- Return valid rate-limit responses for WebSocket upgrades [#116557](https://github.com/openclaw/openclaw/pull/116557)
- Avoid false Gateway port-busy reports behind Tailscale Serve [#116579](https://github.com/openclaw/openclaw/pull/116579)
- Keep custom-port Docker containers healthy [#116639](https://github.com/openclaw/openclaw/pull/116639)
- Include standalone MCP App work in Gateway draining [#116727](https://github.com/openclaw/openclaw/pull/116727)
- Verify daemon start and installation outcomes [#116815](https://github.com/openclaw/openclaw/pull/116815)
- Cancel disconnected Gateway requests and retain response error handling [#116835](https://github.com/openclaw/openclaw/pull/116835)
- Allow slower Gateway readiness after live updates [#117032](https://github.com/openclaw/openclaw/pull/117032)
- Allow slower macOS listener scans during gateway restart [#117036](https://github.com/openclaw/openclaw/pull/117036)
- Cancel stale Gateway work during close and restart [#117242](https://github.com/openclaw/openclaw/pull/117242)
- Keep unavailable Gateway routes out of the Control UI fallback [#117436](https://github.com/openclaw/openclaw/pull/117436)
- Make agent-approved Gateway restarts safe and reliable [#117530](https://github.com/openclaw/openclaw/pull/117530)
- Keep channel watchdog failures from crashing the gateway [#117652](https://github.com/openclaw/openclaw/pull/117652)
- Hot-reload automatic compaction settings [#118010](https://github.com/openclaw/openclaw/pull/118010)
- Let transient sender and audio-probe failures recover [#118245](https://github.com/openclaw/openclaw/pull/118245)
- Preserve plugin metadata when no config file exists [#119421](https://github.com/openclaw/openclaw/pull/119421)
- Keep Gateway RPCs responsive during context warmup [#119607](https://github.com/openclaw/openclaw/pull/119607)
- Keep device-pair polling out of Gateway startup [#119936](https://github.com/openclaw/openclaw/pull/119936)
- Bound channel bootstrap memory and preserve workspace lock ownership [#120939](https://github.com/openclaw/openclaw/pull/120939)
- Keep managed updates bound to their originating checkout [#121288](https://github.com/openclaw/openclaw/pull/121288)
- Drain ACP agent processes during gateway shutdown [#121359](https://github.com/openclaw/openclaw/pull/121359)
- Verify the macOS Gateway after launchd bootstrap errors [#121747](https://github.com/openclaw/openclaw/pull/121747)
- Repair deployment probes and Render first boot [#122963](https://github.com/openclaw/openclaw/pull/122963)
- Avoid false Gateway restart failures on systemd probe errors [#123069](https://github.com/openclaw/openclaw/pull/123069)
- Prevent overlapping managed updates across Gateway restarts [#123116](https://github.com/openclaw/openclaw/pull/123116)
- Keep macOS model changes and node shutdown ordered [#123529](https://github.com/openclaw/openclaw/pull/123529)
- Finish canceled macOS node-worker requests promptly [#124151](https://github.com/openclaw/openclaw/pull/124151)
- Allow exact targeted restarts through prepared Gateway suspension [#124157](https://github.com/openclaw/openclaw/pull/124157)
- Keep Gateway readiness truthful during restart [#124514](https://github.com/openclaw/openclaw/pull/124514)
- Keep Gateway shutdown reliable during in-place updates [#124582](https://github.com/openclaw/openclaw/pull/124582)
- Restart disabled installed systemd services [#124786](https://github.com/openclaw/openclaw/pull/124786)
- Prevent false plugin migration failures during Gateway restart [#124924](https://github.com/openclaw/openclaw/pull/124924)
- Let Gateway controls reach schema-ahead processes [#125133](https://github.com/openclaw/openclaw/pull/125133)
- Refresh hook target policy after Gateway hot reload [#125490](https://github.com/openclaw/openclaw/pull/125490)
- Reclaim locks held by Linux zombie processes [#125658](https://github.com/openclaw/openclaw/pull/125658)
- Complete managed updates after late Gateway exits [#125759](https://github.com/openclaw/openclaw/pull/125759)
- Enforce Gateway shutdown deadlines during event-loop stalls [#125863](https://github.com/openclaw/openclaw/pull/125863)
- fix: gateway stop throws when port is busy without identified owner [#126085](https://github.com/openclaw/openclaw/pull/126085)
- Restore Gateway startup for catalog-backed model overrides [#126123](https://github.com/openclaw/openclaw/pull/126123)
- Abort failed partial Gateway HTTP responses [#126130](https://github.com/openclaw/openclaw/pull/126130)
- Stop retrying unsupported Gateway protocol versions [#126600](https://github.com/openclaw/openclaw/pull/126600)
- fix(sessions): avoid startup stalls with many empty agent stores [#126685](https://github.com/openclaw/openclaw/pull/126685)
- Keep Gateway liveness probes healthy during config reload failures [#126736](https://github.com/openclaw/openclaw/pull/126736)
- Prevent provider-auth rewarm from exiting Gateway during restart [#126855](https://github.com/openclaw/openclaw/pull/126855)
- Clean up Bonjour when Gateway startup fails [#127062](https://github.com/openclaw/openclaw/pull/127062)
- fix: /restart restarts the gateway over and over instead of once [#127179](https://github.com/openclaw/openclaw/pull/127179)
- fix(daemon): preserve the Gateway when stopping or restarting a Mac node [#127707](https://github.com/openclaw/openclaw/pull/127707)
- fix(update): keep managed handoff as successor owner [#128212](https://github.com/openclaw/openclaw/pull/128212)
- fix(update): avoid rollback while systemd service is still stopping [#129007](https://github.com/openclaw/openclaw/pull/129007)
- fix: streamed replies rescan the whole accumulated buffer on every delta to test an 8-character silent-reply token [#129130](https://github.com/openclaw/openclaw/pull/129130)
- fix(ios): retire stale foreground gateway health probes [#129194](https://github.com/openclaw/openclaw/pull/129194)
- fix: avoid rebuilding unchanged agent runtimes on reload [#129257](https://github.com/openclaw/openclaw/pull/129257)
- fix(gateway): wait for config hot-apply before acknowledging writes [#129321](https://github.com/openclaw/openclaw/pull/129321)
- fix(macos): failed service commands incorrectly report success [#129615](https://github.com/openclaw/openclaw/pull/129615)
- fix(macos): keep the node channel alive and visible when the node-host worker cannot start [#129925](https://github.com/openclaw/openclaw/pull/129925)
- fix(portals): event streams stall before the first event [#130727](https://github.com/openclaw/openclaw/pull/130727)
- Keep the Gateway online when an auth profile has a stale secret reference [#77213](https://github.com/openclaw/openclaw/pull/77213)
- Allow macOS gateway restart while its LaunchAgent owns the port [#89096](https://github.com/openclaw/openclaw/pull/89096)
- Prevent duplicate macOS gateway managers [#97285](https://github.com/openclaw/openclaw/pull/97285)
- fix(windows): verify Startup fallback launch and readable script (#116570) [e05dae2](https://github.com/openclaw/openclaw/commit/e05dae2)
- Prevent plugin metadata drift from blocking gateway restarts [f7b372a](https://github.com/openclaw/openclaw/commit/f7b372a)
- Speed up sanitizing large chat messages [#102971](https://github.com/openclaw/openclaw/pull/102971)
- Keep the Gateway running when update handoff fails [#103278](https://github.com/openclaw/openclaw/pull/103278)
- Keep macOS Gateway updates safe through launchd teardown [#105022](https://github.com/openclaw/openclaw/pull/105022)
- Stop stalled Mattermost handshakes from blocking reconnects [#105553](https://github.com/openclaw/openclaw/pull/105553)
- Avoid Codex shutdown warnings after live updates [#106418](https://github.com/openclaw/openclaw/pull/106418)
- Cancel deferred provider-error work when the Gateway stops [#108451](https://github.com/openclaw/openclaw/pull/108451)
- Bound port-inspection helpers during forced startup [#108706](https://github.com/openclaw/openclaw/pull/108706)
- Prevent concurrent managed updates from taking the Gateway offline [#108925](https://github.com/openclaw/openclaw/pull/108925)
- Bound macOS metadata probes [#109241](https://github.com/openclaw/openclaw/pull/109241)
- Ignore vanished gateway targets during signaling [#109590](https://github.com/openclaw/openclaw/pull/109590)
- Return failure when a non-gateway owns the gateway port [#110310](https://github.com/openclaw/openclaw/pull/110310)
- fix(gateway): preserve distinct Unicode boot replies [#110641](https://github.com/openclaw/openclaw/pull/110641)
- Stop foreground gateways without a service manager [#111378](https://github.com/openclaw/openclaw/pull/111378)
- Reject malformed Gateway upgrade requests [#115038](https://github.com/openclaw/openclaw/pull/115038)
- Keep forced gateway startup working after listener exit [#115568](https://github.com/openclaw/openclaw/pull/115568)
- Keep gateway shutdown moving when a plugin stalls [#115619](https://github.com/openclaw/openclaw/pull/115619)
- Prevent oversized discovery timeouts from ending Gateway startup early [#117204](https://github.com/openclaw/openclaw/pull/117204)
- Skip deleted agent stores during Gateway restart recovery [#118023](https://github.com/openclaw/openclaw/pull/118023)
- Return truthful statuses for non-HTML gateway probes [#118048](https://github.com/openclaw/openclaw/pull/118048)
- Fix the authenticated Docker Gateway health command [#118996](https://github.com/openclaw/openclaw/pull/118996)
- Add Content-Length to Gateway HEAD responses [#120210](https://github.com/openclaw/openclaw/pull/120210)
- Restore restart-preflight compatibility for Gateway clients [#121757](https://github.com/openclaw/openclaw/pull/121757)
- Report Gateway draining during unfinished startup [#123204](https://github.com/openclaw/openclaw/pull/123204)
- Suppress false chat-metadata warnings during Gateway restart [#123433](https://github.com/openclaw/openclaw/pull/123433)
- Fail absent Gateway and Node service start or restart requests [#124711](https://github.com/openclaw/openclaw/pull/124711)
- Report existing Tailscale route ownership conflicts [#126449](https://github.com/openclaw/openclaw/pull/126449)
- fix(macos): preserve externally owned Gateways in attach-only mode [#128134](https://github.com/openclaw/openclaw/pull/128134)
- fix(gateway): clarify skip-deferral reply drain [#128178](https://github.com/openclaw/openclaw/pull/128178)
- fix(reef): avoid shutdown delays during friend reconciliation [#129016](https://github.com/openclaw/openclaw/pull/129016)
- fix(gateway): preserve portal retry page on target port collision [#129075](https://github.com/openclaw/openclaw/pull/129075)
- fix(http): stop waiting on already disconnected requests [#129588](https://github.com/openclaw/openclaw/pull/129588)
- fix(gateway): stop dispatch after HTTP responses finish [#129619](https://github.com/openclaw/openclaw/pull/129619)
- fix(macos): show how to recover when the Mac node fails to start [#129874](https://github.com/openclaw/openclaw/pull/129874)
- fix(macos): show recovery steps when the Gateway service fails [#129943](https://github.com/openclaw/openclaw/pull/129943)
- fix(gateway): preserve target context in suspension resume hints [#129956](https://github.com/openclaw/openclaw/pull/129956)
- fix(gateway): return complete errors after HTTP route failures [#130383](https://github.com/openclaw/openclaw/pull/130383)
- Skip terminal one-shot ACP sessions during startup reconciliation [#86711](https://github.com/openclaw/openclaw/pull/86711)
- Recover Tailscale Serve hostname after startup races [#91553](https://github.com/openclaw/openclaw/pull/91553)
- Keep source gateways running during rebuilds [#99972](https://github.com/openclaw/openclaw/pull/99972)

**Documentation**

- Document gateway restart and crash recovery [#103985](https://github.com/openclaw/openclaw/pull/103985)
- Document crash-loop safe-mode channel recovery [#113091](https://github.com/openclaw/openclaw/pull/113091)
- docs(install): use managed gateway restart in Ansible guide [#128522](https://github.com/openclaw/openclaw/pull/128522)
- Add a macOS launchd restart-loop recovery runbook [#89816](https://github.com/openclaw/openclaw/pull/89816)

</details>

</Accordion>

<Accordion title="Troubleshooting, System Health, and Logs">

Doctor now spends less time reciting healthy inventory and more time showing what broke and what to do next. A recoverable interactive startup failure can offer one confirmed `doctor --fix` attempt, while an unrecoverable configuration stays unchanged with exact instructions to inspect, edit, or move it aside. Bare `openclaw doctor --json` is a read-only advisory check; use `openclaw doctor --lint --all` when you need the advisory checks omitted from the default run.

Logs now fill their bounded tail window across short reads, preserve Unicode at file boundaries, distinguish line and byte truncation from rollover, and report unavailable storage instead of an empty success. Status keeps its base report when optional health details fail, so missing information remains unknown rather than being shown as healthy.

In the admin Control UI, Ask OpenClaw can turn consequential health state into a diagnostic question and keep the system-care conversation docked as you move around, while the System overlay shows a short history of scheduler pressure, CPU, memory, event-loop delay, and optional disk activity. These controls require admin or operator access and do not appear during onboarding or to read-scoped clients.

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

**Improvements**

- Show exact build identity in every About screen [#103595](https://github.com/openclaw/openclaw/pull/103595)
- Add click-to-diagnose health nudges to OpenClaw system care [#110708](https://github.com/openclaw/openclaw/pull/110708)
- Add system change history to Ask OpenClaw [#111286](https://github.com/openclaw/openclaw/pull/111286)
- Add a state-aware caretaker welcome with quick actions [#111615](https://github.com/openclaw/openclaw/pull/111615)
- Add a dedicated OpenClaw settings chat to Android [#112788](https://github.com/openclaw/openclaw/pull/112788)
- Add a dockable Ask OpenClaw companion in the Control UI [#115123](https://github.com/openclaw/openclaw/pull/115123)
- Reuse plugin metadata throughout Doctor runs [#119482](https://github.com/openclaw/openclaw/pull/119482)
- Add actionable QQBot setup errors [#119780](https://github.com/openclaw/openclaw/pull/119780)
- Show telemetry exporter health in Doctor and status [#119816](https://github.com/openclaw/openclaw/pull/119816)
- Start Doctor migration checks without loading every plugin runtime [#120678](https://github.com/openclaw/openclaw/pull/120678)
- Keep Doctor security conditions as single findings [#124666](https://github.com/openclaw/openclaw/pull/124666)
- Make Ask OpenClaw persistent and globally accessible [#125107](https://github.com/openclaw/openclaw/pull/125107)
- Move Ask OpenClaw to the sidebar footer [#125486](https://github.com/openclaw/openclaw/pull/125486)
- Add live Gateway busyness diagnostics [#125591](https://github.com/openclaw/openclaw/pull/125591)
- feat(ui): add live CPU/memory/delay sparkline graphs to the system busyness overlay [#127650](https://github.com/openclaw/openclaw/pull/127650)
- feat(cli): add openclaw triage for sanitized agent debugging handoffs [#128756](https://github.com/openclaw/openclaw/pull/128756)
- Add at-a-glance gateway resource meters [#102714](https://github.com/openclaw/openclaw/pull/102714)
- Correlate ClickClack agent turns with ClawRouter audits [#103476](https://github.com/openclaw/openclaw/pull/103476)
- Make gateway and channel logs clearer and less repetitive [#104174](https://github.com/openclaw/openclaw/pull/104174)
- Add redacted Gateway startup outcome summaries [#104183](https://github.com/openclaw/openclaw/pull/104183)
- Make regular doctor output shorter and problem-focused [#106968](https://github.com/openclaw/openclaw/pull/106968)
- Consolidate operator diagnostics and migration safeguards [#109211](https://github.com/openclaw/openclaw/pull/109211)
- Offer guided repair after invalid configuration blocks startup [#110533](https://github.com/openclaw/openclaw/pull/110533)
- Give Ask OpenClaw the regular chat experience [#110934](https://github.com/openclaw/openclaw/pull/110934)
- Continue upstream traces through Gateway WebSocket requests [#113189](https://github.com/openclaw/openclaw/pull/113189)
- Configure OpenTelemetry metric name prefixes [#116687](https://github.com/openclaw/openclaw/pull/116687)
- Standardize error messages across core, plugins, and the Control UI [#117818](https://github.com/openclaw/openclaw/pull/117818)
- Track persistent Gateway event-loop degradation [#118193](https://github.com/openclaw/openclaw/pull/118193)
- Expose safe live-updater recovery diagnostics [#119096](https://github.com/openclaw/openclaw/pull/119096)
- Render status as native rich tables on supported channels [#120167](https://github.com/openclaw/openclaw/pull/120167)
- Speed up bundled plugin doctor-contract loading [#120698](https://github.com/openclaw/openclaw/pull/120698)
- Show blocked inbound lanes in health checks [#123234](https://github.com/openclaw/openclaw/pull/123234)
- Include Gateway build identity in status JSON [#123917](https://github.com/openclaw/openclaw/pull/123917)
- Show migration progress during interactive doctor runs [#124692](https://github.com/openclaw/openclaw/pull/124692)
- Report managed update finalization timings [#126107](https://github.com/openclaw/openclaw/pull/126107)
- fix(ui): make login recovery commands copyable [#128047](https://github.com/openclaw/openclaw/pull/128047)
- feat(ui): show disk space in diagnostics overlay [#128552](https://github.com/openclaw/openclaw/pull/128552)
- Include redacted worker stderr in turn failures [b69e047](https://github.com/openclaw/openclaw/commit/b69e047)
- Add acknowledgement state to worker stall errors [f264f45](https://github.com/openclaw/openclaw/commit/f264f45)
- Make default Doctor lint quieter for automation [#100361](https://github.com/openclaw/openclaw/pull/100361)
- Stop reporting superseded config reloads as errors [#106165](https://github.com/openclaw/openclaw/pull/106165)
- Share overlapping macOS Tailscale status refreshes [#116321](https://github.com/openclaw/openclaw/pull/116321)
- Add CLI startup phases to diagnostics timeline [#117702](https://github.com/openclaw/openclaw/pull/117702)
- Make startup migration recovery guidance install-neutral [#119406](https://github.com/openclaw/openclaw/pull/119406)
- Log scheduled update campaign lifecycle events [#120669](https://github.com/openclaw/openclaw/pull/120669)
- Report state-v9 registry migration decisions [#124862](https://github.com/openclaw/openclaw/pull/124862)
- improve(gateway): reduce health snapshot session work [#127744](https://github.com/openclaw/openclaw/pull/127744)
- perf(logging): reuse log level thresholds [#128061](https://github.com/openclaw/openclaw/pull/128061)
- fix(agents): record what agents re-read after auto-compaction [#128148](https://github.com/openclaw/openclaw/pull/128148)
- perf(status): batch text report output [#128168](https://github.com/openclaw/openclaw/pull/128168)
- improve: resolve config once per status scan [#129494](https://github.com/openclaw/openclaw/pull/129494)
- Add actionable recovery steps when node exec approval is unavailable [#91280](https://github.com/openclaw/openclaw/pull/91280)

**Bug fixes**

- Preserve unrecoverable config during doctor repairs [#109362](https://github.com/openclaw/openclaw/pull/109362)
- Stop macOS app probes from hanging [#115938](https://github.com/openclaw/openclaw/pull/115938)
- Record channel account lifecycle states [#117300](https://github.com/openclaw/openclaw/pull/117300)
- Prevent duplicate and leaked diagnostics lifecycle spans [#119791](https://github.com/openclaw/openclaw/pull/119791)
- Keep OpenTelemetry exporting after in-process restarts [#120131](https://github.com/openclaw/openclaw/pull/120131)
- Keep published official plugins loading after core upgrades [#124086](https://github.com/openclaw/openclaw/pull/124086)
- Preserve unknown Gateway service state [#125734](https://github.com/openclaw/openclaw/pull/125734)
- Prevent Gateway out-of-memory crash loops under sustained load [#96250](https://github.com/openclaw/openclaw/pull/96250)
- Warn when open chats expose gateway or cron controls [#100965](https://github.com/openclaw/openclaw/pull/100965)
- Route shared OTLP endpoints by telemetry signal [#101655](https://github.com/openclaw/openclaw/pull/101655)
- Bound mcporter registry reads during security audits [#101772](https://github.com/openclaw/openclaw/pull/101772)
- Preserve characters in truncated HTTP response snippets [#103136](https://github.com/openclaw/openclaw/pull/103136)
- Keep status diagnostics read-only [#103252](https://github.com/openclaw/openclaw/pull/103252)
- Keep truncated support diagnostics Unicode-safe [#103580](https://github.com/openclaw/openclaw/pull/103580)
- Restore clawlog defaults and clear option errors [#104059](https://github.com/openclaw/openclaw/pull/104059)
- Preserve complete log tails across short reads [#105066](https://github.com/openclaw/openclaw/pull/105066)
- Preserve Unicode across session-tail follow reads [#108151](https://github.com/openclaw/openclaw/pull/108151)
- Report each state-schema migration correctly in Doctor [#108947](https://github.com/openclaw/openclaw/pull/108947)
- Bound Node runtime capability probes [#109127](https://github.com/openclaw/openclaw/pull/109127)
- Bound daemon Node binary lookup [#109239](https://github.com/openclaw/openclaw/pull/109239)
- Scan SKILL.md instructions in deep security audits [#109363](https://github.com/openclaw/openclaw/pull/109363)
- Retain diagnostic context across short transcript reads [#109401](https://github.com/openclaw/openclaw/pull/109401)
- Preserve checkout commit identity after short Git metadata reads [#109419](https://github.com/openclaw/openclaw/pull/109419)
- Bound SKILL.md reads during deep security audits [#110589](https://github.com/openclaw/openclaw/pull/110589)
- Repair stale model references after provider deletion [#110648](https://github.com/openclaw/openclaw/pull/110648)
- Preserve doctor config repairs when session maintenance is locked [#111280](https://github.com/openclaw/openclaw/pull/111280)
- Bound Mattermost probe DNS and proxy preflight [#111314](https://github.com/openclaw/openclaw/pull/111314)
- Check every configured agent in doctor [#111758](https://github.com/openclaw/openclaw/pull/111758)
- Doctor checks workspace suggestions for every agent [#111840](https://github.com/openclaw/openclaw/pull/111840)
- Propagate actual exported OpenTelemetry span context [#112283](https://github.com/openclaw/openclaw/pull/112283)
- Separate Gateway logs for named profiles [#112777](https://github.com/openclaw/openclaw/pull/112777)
- Report usable agent config paths in security diagnostics [#113603](https://github.com/openclaw/openclaw/pull/113603)
- Detect CLI-only Tailscale on macOS [#114179](https://github.com/openclaw/openclaw/pull/114179)
- Make system-agent recovery guidance usable from browser and app surfaces [#114633](https://github.com/openclaw/openclaw/pull/114633)
- Persist safe doctor migrations before runtime timeouts [#114703](https://github.com/openclaw/openclaw/pull/114703)
- Move file logging off the Gateway request path [#114769](https://github.com/openclaw/openclaw/pull/114769)
- Scale heap-pressure thresholds with V8 limits [#115153](https://github.com/openclaw/openclaw/pull/115153)
- Exclude provider-private thinking from telemetry [#115261](https://github.com/openclaw/openclaw/pull/115261)
- Reduce health diagnostic noise and refresh churn [#115602](https://github.com/openclaw/openclaw/pull/115602)
- Batch macOS listener checks during multi-port status collection [#115813](https://github.com/openclaw/openclaw/pull/115813)
- Remove subprocess polling from macOS tunnel readiness [#115846](https://github.com/openclaw/openclaw/pull/115846)
- Prevent macOS remote Gateway discovery hangs [#115852](https://github.com/openclaw/openclaw/pull/115852)
- Keep late agent work in one OpenTelemetry trace tree [#116246](https://github.com/openclaw/openclaw/pull/116246)
- fix(channels): attribute zero-payload turn warnings and stop false silent-drop alarms [#116486](https://github.com/openclaw/openclaw/pull/116486)
- Preserve live probes during concurrent Gateway health refreshes [#116681](https://github.com/openclaw/openclaw/pull/116681)
- Make status and provider diagnostics report real failures [#116776](https://github.com/openclaw/openclaw/pull/116776)
- Report real service-removal failures on every platform [#116819](https://github.com/openclaw/openclaw/pull/116819)
- Keep log collection read-only [#116869](https://github.com/openclaw/openclaw/pull/116869)
- Show dead-ingress and busy channel health in status tools [#117236](https://github.com/openclaw/openclaw/pull/117236)
- Align release validation with current runtime contracts [#117494](https://github.com/openclaw/openclaw/pull/117494)
- Separate Debug diagnostics from Manual RPC results [#117546](https://github.com/openclaw/openclaw/pull/117546)
- Keep Gateway status scoped to the active environment [#119015](https://github.com/openclaw/openclaw/pull/119015)
- Keep raw diagnostic write failures from ending agent runs [#119400](https://github.com/openclaw/openclaw/pull/119400)
- Preserve OpenTelemetry diagnostics during shutdown [#119705](https://github.com/openclaw/openclaw/pull/119705)
- Honor per-signal OTLP protocol settings [#119708](https://github.com/openclaw/openclaw/pull/119708)
- Preserve the real OTEL startup error during rollback [#119747](https://github.com/openclaw/openclaw/pull/119747)
- Make OTEL_SDK_DISABLED fully disable OpenClaw telemetry [#119961](https://github.com/openclaw/openclaw/pull/119961)
- Explain unverified Windows SecretRef path security [#120211](https://github.com/openclaw/openclaw/pull/120211)
- Give Gateway connection failures consistent recovery guidance [#120505](https://github.com/openclaw/openclaw/pull/120505)
- Speed up doctor checks and restore Discord repairs [#120882](https://github.com/openclaw/openclaw/pull/120882)
- Restore selected external plugin state migrations in Doctor [#120908](https://github.com/openclaw/openclaw/pull/120908)
- Preserve external plugin session ownership during upgrades [#121082](https://github.com/openclaw/openclaw/pull/121082)
- Preserve legacy plugin runtime-doctor imports [#121220](https://github.com/openclaw/openclaw/pull/121220)
- fix(diagnostics): stalled lanes go unreported while messages keep arriving [#121380](https://github.com/openclaw/openclaw/pull/121380)
- Parse localized Windows process names for port hints [#122126](https://github.com/openclaw/openclaw/pull/122126)
- Make diagnostics ZIP replacement atomic and private [#122130](https://github.com/openclaw/openclaw/pull/122130)
- Stop Doctor after failed migration writes [#123045](https://github.com/openclaw/openclaw/pull/123045)
- Report line-limit truncation in log tails [#123358](https://github.com/openclaw/openclaw/pull/123358)
- Let doctor exit after reporting malformed config [#123430](https://github.com/openclaw/openclaw/pull/123430)
- fix(gateway): preserve worker tunnel exit diagnostics [#123611](https://github.com/openclaw/openclaw/pull/123611)
- Explain stale Gateway files after upgrades [#123842](https://github.com/openclaw/openclaw/pull/123842)
- Stop duplicate root records in file logs [#123936](https://github.com/openclaw/openclaw/pull/123936)
- Report normally stopped services as stopped [#123961](https://github.com/openclaw/openclaw/pull/123961)
- Surface telemetry-exporter probe failures in Doctor [#123971](https://github.com/openclaw/openclaw/pull/123971)
- Explain stale Gateway installs during WebSocket connection failures [#123998](https://github.com/openclaw/openclaw/pull/123998)
- Keep doctor lint from migrating shared state [#124110](https://github.com/openclaw/openclaw/pull/124110)
- Keep Control UI log tails tied to the correct file [#124369](https://github.com/openclaw/openclaw/pull/124369)
- Return typed errors for unserializable Gateway responses [#124375](https://github.com/openclaw/openclaw/pull/124375)
- Report only Doctor fixes that reached disk [#124462](https://github.com/openclaw/openclaw/pull/124462)
- Scale Gateway RSS diagnostics to runtime memory limits [#124914](https://github.com/openclaw/openclaw/pull/124914)
- Diagnose Gateways that cannot host nodes [#125132](https://github.com/openclaw/openclaw/pull/125132)
- Show live Gateway degradation in status commands [#125888](https://github.com/openclaw/openclaw/pull/125888)
- Keep status reports available when enrichment fails [#126072](https://github.com/openclaw/openclaw/pull/126072)
- Show actionable telemetry failures in status output [#126092](https://github.com/openclaw/openclaw/pull/126092)
- Report unavailable log storage instead of empty logs [#126481](https://github.com/openclaw/openclaw/pull/126481)
- Give operators a recovery path for unparseable configs [#126757](https://github.com/openclaw/openclaw/pull/126757)
- Record Discord poll and sticker outbound activity [#126791](https://github.com/openclaw/openclaw/pull/126791)
- Clarify empty channel status and gateway connection failures [#126984](https://github.com/openclaw/openclaw/pull/126984)
- Report degraded Gateway secrets in structured Doctor lint [#126998](https://github.com/openclaw/openclaw/pull/126998)
- fix(cli): reject conflicting read-only doctor postures [#128142](https://github.com/openclaw/openclaw/pull/128142)
- fix(telemetry): report only publicly known plugin identities [#128603](https://github.com/openclaw/openclaw/pull/128603)
- fix(ui): distinguish pending and failed empty states [#128746](https://github.com/openclaw/openclaw/pull/128746)
- fix: keep verbose health available when channel probes stall [#128915](https://github.com/openclaw/openclaw/pull/128915)
- fix(telemetry): suppress reporting from automated environments [#129155](https://github.com/openclaw/openclaw/pull/129155)
- fix(status): preserve service inspection errors in overview [#130365](https://github.com/openclaw/openclaw/pull/130365)
- fix(cli): honor selected port when tailing logs [#130513](https://github.com/openclaw/openclaw/pull/130513)
- fix(doctor): surface unreadable legacy plugin state instead of silently skipping migration [#130956](https://github.com/openclaw/openclaw/pull/130956)
- fix(doctor): repair agent workspace and heartbeat values on the canonical roster shape [#130959](https://github.com/openclaw/openclaw/pull/130959)
- fix(canvas): retire the legacy document root only after migration completes [#131038](https://github.com/openclaw/openclaw/pull/131038)
- fix(status): self-heal status lazy-loader failures and contain render errors [#94806](https://github.com/openclaw/openclaw/pull/94806)
- Keep truncated diagnostics and metadata valid around emoji [0ac8933](https://github.com/openclaw/openclaw/commit/0ac8933)
- Honor custom config paths in Swabble status checks [251f54b](https://github.com/openclaw/openclaw/commit/251f54b)
- Export OpenTelemetry from one-shot local agent runs [#100845](https://github.com/openclaw/openclaw/pull/100845)
- Bound session-maintenance warning deduplication memory [#101643](https://github.com/openclaw/openclaw/pull/101643)
- Keep emoji intact in restart diagnostics [#101934](https://github.com/openclaw/openclaw/pull/101934)
- Keep truncated Doctor errors UTF-16 safe [#102066](https://github.com/openclaw/openclaw/pull/102066)
- Keep truncated Discord gateway close diagnostics readable [#102246](https://github.com/openclaw/openclaw/pull/102246)
- Keep channel log previews UTF-16 safe [#102407](https://github.com/openclaw/openclaw/pull/102407)
- Keep proxy-capture previews on valid UTF-8 boundaries [#102409](https://github.com/openclaw/openclaw/pull/102409)
- Keep emoji intact in truncated Gateway config paths [#102513](https://github.com/openclaw/openclaw/pull/102513)
- Keep Discord deploy error truncation emoji-safe [#102525](https://github.com/openclaw/openclaw/pull/102525)
- Keep truncated log messages valid Unicode [#102560](https://github.com/openclaw/openclaw/pull/102560)
- Keep gateway WebSocket log previews valid Unicode [#102561](https://github.com/openclaw/openclaw/pull/102561)
- Keep cleanup timeout warnings readable [#102565](https://github.com/openclaw/openclaw/pull/102565)
- Keep diagnostic logs valid around emoji [#102570](https://github.com/openclaw/openclaw/pull/102570)
- Keep QQBot debug previews valid around emoji [#102572](https://github.com/openclaw/openclaw/pull/102572)
- Keep Prometheus diagnostic error logs Unicode-safe [#102591](https://github.com/openclaw/openclaw/pull/102591)
- Keep gateway command metadata truncation Unicode-safe [#102816](https://github.com/openclaw/openclaw/pull/102816)
- Reduce MCP loopback schema warning noise [#103171](https://github.com/openclaw/openclaw/pull/103171)
- Stop clean Doctor runs from suggesting unnecessary repairs [#103233](https://github.com/openclaw/openclaw/pull/103233)
- Report the correct JSONL session line after blank rows [#103645](https://github.com/openclaw/openclaw/pull/103645)
- Keep exported diagnostics JSON Unicode-safe [#103646](https://github.com/openclaw/openclaw/pull/103646)
- Keep restart log tails Unicode-safe [#103757](https://github.com/openclaw/openclaw/pull/103757)
- Keep truncated timeout URLs valid Unicode [#104301](https://github.com/openclaw/openclaw/pull/104301)
- Reduce benign macOS startup socket warnings [#104610](https://github.com/openclaw/openclaw/pull/104610)
- Keep worker bootstrap error text UTF-16 safe [#104619](https://github.com/openclaw/openclaw/pull/104619)
- Preserve valid characters in worker SSH tunnel diagnostics [#104621](https://github.com/openclaw/openclaw/pull/104621)
- Demote benign Gateway startup close races [#104625](https://github.com/openclaw/openclaw/pull/104625)
- Avoid false Gateway warnings for clean Mac app startup closes [#104655](https://github.com/openclaw/openclaw/pull/104655)
- Quiet false warnings during successful macOS updates [#104813](https://github.com/openclaw/openclaw/pull/104813)
- Keep channel token hints valid around emoji [#104850](https://github.com/openclaw/openclaw/pull/104850)
- Session migration reports preserve complete Unicode characters [#104851](https://github.com/openclaw/openclaw/pull/104851)
- Preserve Unicode in compact gateway WebSocket log IDs [#105001](https://github.com/openclaw/openclaw/pull/105001)
- Scope managed Gateway restart logs to the active checkout [#105030](https://github.com/openclaw/openclaw/pull/105030)
- Preserve UTF-8 SSH identity output at Windows byte limits [#105274](https://github.com/openclaw/openclaw/pull/105274)
- Return Logs to the newest entry when Auto-follow is re-enabled [#105809](https://github.com/openclaw/openclaw/pull/105809)
- Warn when restart-state persistence fails [#106385](https://github.com/openclaw/openclaw/pull/106385)
- Log failures while reading HTTP error details [#106393](https://github.com/openclaw/openclaw/pull/106393)
- Bound port-inspection process enrichment concurrency [#107121](https://github.com/openclaw/openclaw/pull/107121)
- Keep cloud worker failure details UTF-16 safe [#107718](https://github.com/openclaw/openclaw/pull/107718)
- Clear resolved TaskFlow and OAuth doctor warnings [#108123](https://github.com/openclaw/openclaw/pull/108123)
- Keep capped CLI output diagnostics UTF-8 safe [#108355](https://github.com/openclaw/openclaw/pull/108355)
- Log non-blocking Gateway restart hook failures [#108847](https://github.com/openclaw/openclaw/pull/108847)
- Keep QQBot log exports complete after short file reads [#108955](https://github.com/openclaw/openclaw/pull/108955)
- Bound long-lived config warning caches [#109000](https://github.com/openclaw/openclaw/pull/109000)
- Prevent macOS doctor from hanging on launchctl probes [#109115](https://github.com/openclaw/openclaw/pull/109115)
- Stop Doctor from hanging on stalled GitHub issue creation [#109253](https://github.com/openclaw/openclaw/pull/109253)
- Preserve Unicode in Doctor migration issue reports [#109592](https://github.com/openclaw/openclaw/pull/109592)
- Bound stalled gateway process probes [#109731](https://github.com/openclaw/openclaw/pull/109731)
- Report occupied browser-control ports at startup [#109994](https://github.com/openclaw/openclaw/pull/109994)
- Preserve UTF-8 in APNs response diagnostics [#110483](https://github.com/openclaw/openclaw/pull/110483)
- Ignore blank OTLP protocol environment overrides [#110674](https://github.com/openclaw/openclaw/pull/110674)
- Stop stalled Linux journal lookups from hanging logs [#111215](https://github.com/openclaw/openclaw/pull/111215)
- Keep xdg-open failure messages UTF-16 safe [#111323](https://github.com/openclaw/openclaw/pull/111323)
- Show stopped channels as disconnected [#112518](https://github.com/openclaw/openclaw/pull/112518)
- Doctor preserves active Gateway session locks on Linux [#112855](https://github.com/openclaw/openclaw/pull/112855)
- Clarify unavailable system Node versions in Doctor [#114325](https://github.com/openclaw/openclaw/pull/114325)
- Preserve Windows PATH delimiters in node status [#114505](https://github.com/openclaw/openclaw/pull/114505)
- Prevent active steering from leaving false queued-work diagnostics [#114780](https://github.com/openclaw/openclaw/pull/114780)
- Restore workspace suggestions in openclaw doctor [#115512](https://github.com/openclaw/openclaw/pull/115512)
- Show gateway probe duration in health output [#115520](https://github.com/openclaw/openclaw/pull/115520)
- Show stopped channels in status and doctor [#116781](https://github.com/openclaw/openclaw/pull/116781)
- Replace false Gateway-overload notices for stalled replies [#116959](https://github.com/openclaw/openclaw/pull/116959)
- Correct Control UI asset checks in packaged installs [#117003](https://github.com/openclaw/openclaw/pull/117003)
- Preserve unresolved Doctor findings after incomplete repairs [#117448](https://github.com/openclaw/openclaw/pull/117448)
- Reject conflicting Doctor lint selectors [#117495](https://github.com/openclaw/openclaw/pull/117495)
- Honor explicit status command timeouts [#117519](https://github.com/openclaw/openclaw/pull/117519)
- Preserve runnable Doctor checks when selectors partially overlap [#117543](https://github.com/openclaw/openclaw/pull/117543)
- Preserve channel filters in offline status output [#117570](https://github.com/openclaw/openclaw/pull/117570)
- Bound gateway status service-manager reads [#117636](https://github.com/openclaw/openclaw/pull/117636)
- Surface actionable session-history migration conflicts [#117656](https://github.com/openclaw/openclaw/pull/117656)
- Show complete persisted messages in Gateway Logs [#117666](https://github.com/openclaw/openclaw/pull/117666)
- Surface sanitized WhatsApp media-download failures in normal logs [#117717](https://github.com/openclaw/openclaw/pull/117717)
- Stop exact-limit searches from reporting truncation [#117747](https://github.com/openclaw/openclaw/pull/117747)
- Make channels status show all channels [#118124](https://github.com/openclaw/openclaw/pull/118124)
- Unify Gateway method registration and redact terminal failures [#118232](https://github.com/openclaw/openclaw/pull/118232)
- Mark truncated malformed-row lists in session exports [#119230](https://github.com/openclaw/openclaw/pull/119230)
- Stop labeling stale diagnostic phases as recent [#119625](https://github.com/openclaw/openclaw/pull/119625)
- Show invalid configuration details on separate lines [#119871](https://github.com/openclaw/openclaw/pull/119871)
- Report Prometheus metrics length on HEAD requests [#120212](https://github.com/openclaw/openclaw/pull/120212)
- Enforce strict diagnostics query integers [#120446](https://github.com/openclaw/openclaw/pull/120446)
- Report indeterminate Windows port availability accurately [#120845](https://github.com/openclaw/openclaw/pull/120845)
- Report incomplete legacy cache scans in Doctor [#122585](https://github.com/openclaw/openclaw/pull/122585)
- Make `doctor --json` run the read-only deployment preflight [#122662](https://github.com/openclaw/openclaw/pull/122662)
- Report recovered compaction runs as completed [#122974](https://github.com/openclaw/openclaw/pull/122974)
- Report Signal RPC probe failures accurately [#123001](https://github.com/openclaw/openclaw/pull/123001)
- fix(logs): report truncated channel tails [#123699](https://github.com/openclaw/openclaw/pull/123699)
- Return Doctor machine failures as JSON on stdout [#123752](https://github.com/openclaw/openclaw/pull/123752)
- fix(doctor): follow a macOS cloud symlink when the state dir leaf is absent [#124299](https://github.com/openclaw/openclaw/pull/124299)
- Stop false agent-roster security warnings [#124398](https://github.com/openclaw/openclaw/pull/124398)
- Report aborted unconfirmed steers truthfully in gateway audits [#124409](https://github.com/openclaw/openclaw/pull/124409)
- Guide device approval to the current pairing request [#124637](https://github.com/openclaw/openclaw/pull/124637)
- Warn when session-history disk cleanup fails [#124681](https://github.com/openclaw/openclaw/pull/124681)
- Show config paths in Doctor migration notices [#124719](https://github.com/openclaw/openclaw/pull/124719)
- Give actionable managed Gateway recovery [#124783](https://github.com/openclaw/openclaw/pull/124783)
- Explain best-effort config fallbacks [#125010](https://github.com/openclaw/openclaw/pull/125010)
- Warn when group rooms share the main session [#125054](https://github.com/openclaw/openclaw/pull/125054)
- Report failed remote Gateway health checks [#125203](https://github.com/openclaw/openclaw/pull/125203)
- Report refused Doctor config repairs as incomplete [#125282](https://github.com/openclaw/openclaw/pull/125282)
- Make Doctor fail error gates on critical disk exhaustion [#125644](https://github.com/openclaw/openclaw/pull/125644)
- Bound macOS Gateway status probes [#126394](https://github.com/openclaw/openclaw/pull/126394)
- Show Gateway restart and update probe failures [#126645](https://github.com/openclaw/openclaw/pull/126645)
- Make macOS clawlog JSON output parseable and failure-safe [#126651](https://github.com/openclaw/openclaw/pull/126651)
- Preserve structured details from wrapped error causes [#126654](https://github.com/openclaw/openclaw/pull/126654)
- Stop warning on successful Discord description truncation [#126824](https://github.com/openclaw/openclaw/pull/126824)
- Reject invalid gateway status timeouts [#126977](https://github.com/openclaw/openclaw/pull/126977)
- Prevent stale success from Gateway health checks [#127174](https://github.com/openclaw/openclaw/pull/127174)
- fix(status): surface an invalid config instead of reporting a healthy system [#127402](https://github.com/openclaw/openclaw/pull/127402)
- fix(channels): stop false no-payload warnings for queued replies [#127667](https://github.com/openclaw/openclaw/pull/127667)
- fix(logging): preserve incomplete tail records [#127810](https://github.com/openclaw/openclaw/pull/127810)
- fix(ui): show channel probe progress while refreshing [#127903](https://github.com/openclaw/openclaw/pull/127903)
- fix(doctor): show disabled automations during authority reauthorization [#127998](https://github.com/openclaw/openclaw/pull/127998)
- fix(health): secondary account failures incorrectly appear healthy [#129088](https://github.com/openclaw/openclaw/pull/129088)
- fix(macos): expose channel account failures in settings [#129400](https://github.com/openclaw/openclaw/pull/129400)
- fix(status): scope doctor hints to active profile and container [#129418](https://github.com/openclaw/openclaw/pull/129418)
- fix(gateway): scope crash loop channel recovery hints [#129697](https://github.com/openclaw/openclaw/pull/129697)
- fix(ios): prioritize active gateway errors over connection names [#129709](https://github.com/openclaw/openclaw/pull/129709)
- fix(cli): stop doctor JSON mode from silently filtering health checks [#129919](https://github.com/openclaw/openclaw/pull/129919)
- fix(daemon): recovery hints target the wrong profile or container [#130216](https://github.com/openclaw/openclaw/pull/130216)
- fix: preserve Gateway error reasons in text logs [#130645](https://github.com/openclaw/openclaw/pull/130645)
- refactor(models): simplify picker and thinking projections [#130694](https://github.com/openclaw/openclaw/pull/130694)
- fix(status): show healthy channels as OK in deep health [#130794](https://github.com/openclaw/openclaw/pull/130794)
- fix(cli): honor gateway --port on the status leaf [#130847](https://github.com/openclaw/openclaw/pull/130847)
- fix(otel): preserve trailing slashes in collector query values [#130934](https://github.com/openclaw/openclaw/pull/130934)
- Skip missing lsof warnings during Gateway startup [#76364](https://github.com/openclaw/openclaw/pull/76364)
- Avoid false gateway warnings for shell-wrapped LaunchAgents [#81778](https://github.com/openclaw/openclaw/pull/81778)
- Fix Doctor sandbox repair for symlinked OpenClaw launchers [#90942](https://github.com/openclaw/openclaw/pull/90942)
- Avoid duplicate channel scans in status commands [#95263](https://github.com/openclaw/openclaw/pull/95263)

**Documentation**

- Document the status probe timeout option [#102363](https://github.com/openclaw/openclaw/pull/102363)
- Document managed Gateway heap sizing and repair [#111027](https://github.com/openclaw/openclaw/pull/111027)

</details>

</Accordion>

<Accordion title="Command-Line Output and Shell Completion">

Commands used by scripts now have a more predictable machine interface. The named JSON and JSONL commands keep terminal-reset bytes out of stdout and return a consistent structured error when an invocation fails, so automation no longer has to special-case them.

Shell completion installation and refresh preserve unrelated profile content and permissions while publishing profiles and caches atomically across Bash, Zsh, Fish, and PowerShell. Remote Gateway turns and common read-only commands also skip startup work they do not need, while local probes and human output keep fuller validation; mistyped commands now point to the command tree that rejected them, nearby commands, and the correct help.

The predictable machine-output contract covers the named command paths. Human diagnostics can still appear on stderr, successful degraded results remain command-specific, and raw lifecycle-error redaction is not yet universal.

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

**Improvements**

- Speed up Gateway-backed CLI agent turns [#117705](https://github.com/openclaw/openclaw/pull/117705)
- Add consistent JSON output across CLI reporting commands [#117928](https://github.com/openclaw/openclaw/pull/117928)
- Speed up common read-only CLI commands [#117932](https://github.com/openclaw/openclaw/pull/117932)
- Reduce startup overhead for Gateway-backed CLI commands [#115294](https://github.com/openclaw/openclaw/pull/115294)
- Unify CLI config-guard behavior across dispatch paths [#117880](https://github.com/openclaw/openclaw/pull/117880)
- Speed up cold read-only CLI commands [#117957](https://github.com/openclaw/openclaw/pull/117957)
- Speed up cold CLI status and plugin reads [#118460](https://github.com/openclaw/openclaw/pull/118460)
- Speed up fitting ASCII table rendering [#127221](https://github.com/openclaw/openclaw/pull/127221)
- improve(cli): speed up config help startup [#128113](https://github.com/openclaw/openclaw/pull/128113)
- perf(startup): short-circuit dist-internal ESM resolution with explicit module format [#128541](https://github.com/openclaw/openclaw/pull/128541)
- Improve fuzzy matching in TUI selectors [#107576](https://github.com/openclaw/openclaw/pull/107576)
- Reduce memory for routine status commands [#116668](https://github.com/openclaw/openclaw/pull/116668)
- Keep CLI help from loading inactive provider runtimes [#121997](https://github.com/openclaw/openclaw/pull/121997)
- Speed up `openclaw audit` startup [#124595](https://github.com/openclaw/openclaw/pull/124595)
- improve(tui): speed up unchanged transcript redraws [#127767](https://github.com/openclaw/openclaw/pull/127767)

**Bug fixes**

- Keep JSON console logs structured across CLI routes [#113654](https://github.com/openclaw/openclaw/pull/113654)
- Make CLI commands, completion, and JSON output reliable [#116033](https://github.com/openclaw/openclaw/pull/116033)
- Preserve CLI option values and machine-readable output [#116389](https://github.com/openclaw/openclaw/pull/116389)
- Preserve shell profiles and complete option values [#116906](https://github.com/openclaw/openclaw/pull/116906)
- Restore fast local TUI and embedded-agent startup [#117396](https://github.com/openclaw/openclaw/pull/117396)
- Preserve shell profiles when completion installation fails [#117987](https://github.com/openclaw/openclaw/pull/117987)
- Reuse the prepared runtime across embedded local TUI turns [#120051](https://github.com/openclaw/openclaw/pull/120051)
- Keep terminal chat history visible after silent activity [#121337](https://github.com/openclaw/openclaw/pull/121337)
- Standardize CLI JSON failure output [#124849](https://github.com/openclaw/openclaw/pull/124849)
- Clean terminal exits for logs and hooks CLI errors [#105863](https://github.com/openclaw/openclaw/pull/105863)
- Show clear CLI errors for missing input files [#105874](https://github.com/openclaw/openclaw/pull/105874)
- Move macOS CLI PATH discovery off the main actor [#106089](https://github.com/openclaw/openclaw/pull/106089)
- Preserve literal --update values in CLI subcommands [#106144](https://github.com/openclaw/openclaw/pull/106144)
- Make Git Bash core utilities available on Windows [#108136](https://github.com/openclaw/openclaw/pull/108136)
- Preserve emoji in TUI local shell output [#108268](https://github.com/openclaw/openclaw/pull/108268)
- Prevent Fish completions from truncating a file named `-l` [#109324](https://github.com/openclaw/openclaw/pull/109324)
- Stop repeated TUI searches from retaining stale regexes [#109451](https://github.com/openclaw/openclaw/pull/109451)
- Write CLI JSON results to stdout [#109808](https://github.com/openclaw/openclaw/pull/109808)
- Let one-shot macOS CLI commands exit promptly [#110341](https://github.com/openclaw/openclaw/pull/110341)
- Let the TUI exit cleanly after quitting [#110595](https://github.com/openclaw/openclaw/pull/110595)
- Guarantee TUI exit after Gateway teardown hangs [#111015](https://github.com/openclaw/openclaw/pull/111015)
- Stop command-group help from hanging after output [#111433](https://github.com/openclaw/openclaw/pull/111433)
- Make CLI failures and signals return truthful status [#112210](https://github.com/openclaw/openclaw/pull/112210)
- Restore macOS Keychain CA trust for one-shot commands [#113112](https://github.com/openclaw/openclaw/pull/113112)
- Keep update JSON valid during post-core resume [#113298](https://github.com/openclaw/openclaw/pull/113298)
- Recognize Bash completion installed in login profiles [#113790](https://github.com/openclaw/openclaw/pull/113790)
- Reject empty update timeout arguments [#114700](https://github.com/openclaw/openclaw/pull/114700)
- Install cached shell completions without loading plugins [#114761](https://github.com/openclaw/openclaw/pull/114761)
- Restore PowerShell completion after CLI options [#114950](https://github.com/openclaw/openclaw/pull/114950)
- Speed up machine-readable Gateway health probes [#115244](https://github.com/openclaw/openclaw/pull/115244)
- Keep CLI help, update previews, and plugin pinning correct [#115464](https://github.com/openclaw/openclaw/pull/115464)
- Accept inherited CLI flags after nested commands [#116587](https://github.com/openclaw/openclaw/pull/116587)
- Release the terminal after TUI backend shutdown failures [#116609](https://github.com/openclaw/openclaw/pull/116609)
- fix(cli): restore accurate operator diagnostics and safe input handling [#116652](https://github.com/openclaw/openclaw/pull/116652)
- Show completion-repair failures and stop failed verification progress [#116825](https://github.com/openclaw/openclaw/pull/116825)
- Honor shell-owned completion profile locations [#117002](https://github.com/openclaw/openclaw/pull/117002)
- Keep Unicode terminal-table columns aligned [#117062](https://github.com/openclaw/openclaw/pull/117062)
- Cancel buffered TUI input during shutdown [#117331](https://github.com/openclaw/openclaw/pull/117331)
- Preserve machine-readable CLI output on fatal exits [#117487](https://github.com/openclaw/openclaw/pull/117487)
- Keep JSON channel status startup cold [#117751](https://github.com/openclaw/openclaw/pull/117751)
- Preserve consecutive Backspaces in the terminal UI [#117989](https://github.com/openclaw/openclaw/pull/117989)
- Preserve shell completion caches when refreshes fail [#118715](https://github.com/openclaw/openclaw/pull/118715)
- Show why background processes failed in the TUI [#120724](https://github.com/openclaw/openclaw/pull/120724)
- Return structured errors from system CLI machine-output commands [#123614](https://github.com/openclaw/openclaw/pull/123614)
- Keep CLI table identifiers intact when wider columns can wrap [#123934](https://github.com/openclaw/openclaw/pull/123934)
- Redact caught errors in CLI JSON output [#124075](https://github.com/openclaw/openclaw/pull/124075)
- Remove internal class names from Gateway and CLI failures [#124329](https://github.com/openclaw/openclaw/pull/124329)
- Remove JavaScript class names from proven Gateway RPC errors [#124563](https://github.com/openclaw/openclaw/pull/124563)
- Improve CLI errors and status tables [#124581](https://github.com/openclaw/openclaw/pull/124581)
- Report unknown nested commands even with help [#124707](https://github.com/openclaw/openclaw/pull/124707)
- Keep routine CLI errors concise [#124887](https://github.com/openclaw/openclaw/pull/124887)
- Show actionable guidance for mistyped CLI commands [#124892](https://github.com/openclaw/openclaw/pull/124892)
- Render missing Gateway credentials consistently in the CLI [#125007](https://github.com/openclaw/openclaw/pull/125007)
- Exit the local TUI cleanly during authentication [#126476](https://github.com/openclaw/openclaw/pull/126476)
- fix(tui): stop local shell descendants on exit [#127652](https://github.com/openclaw/openclaw/pull/127652)
- fix(cli): show human errors when required values consume --json [#128557](https://github.com/openclaw/openclaw/pull/128557)
- fix(install): --json preserves valid NDJSON for dynamic values [#128682](https://github.com/openclaw/openclaw/pull/128682)
- fix(tui): keep sentence punctuation out of terminal hyperlink targets [#128727](https://github.com/openclaw/openclaw/pull/128727)
- fix(cli): explain empty capability listings [#128852](https://github.com/openclaw/openclaw/pull/128852)
- fix(cli): return JSON errors when machine-readable commands fail to parse [#128861](https://github.com/openclaw/openclaw/pull/128861)
- fix(cli): render Gateway validation JSON failures [#129043](https://github.com/openclaw/openclaw/pull/129043)
- fix(cli): nested command help stalls while loading routed commands [#129112](https://github.com/openclaw/openclaw/pull/129112)
- fix(channels): keep configured accounts in JSON inventory [#130738](https://github.com/openclaw/openclaw/pull/130738)
- fix(cli): show real options in lazy command help [#130951](https://github.com/openclaw/openclaw/pull/130951)
- Refresh cached CLI help for every build [63f497a](https://github.com/openclaw/openclaw/commit/63f497a)
- Strip C1 OSC metadata from terminal output [#103672](https://github.com/openclaw/openclaw/pull/103672)
- Preserve terminal links and styling across wrapped table cells [#103717](https://github.com/openclaw/openclaw/pull/103717)
- Report blank task JSON filters as absent [#103981](https://github.com/openclaw/openclaw/pull/103981)
- Keep emoji intact when the TUI wraps long text [#104024](https://github.com/openclaw/openclaw/pull/104024)
- Report accurate UTF-8 byte counts from openclaw path set [#104496](https://github.com/openclaw/openclaw/pull/104496)
- Clarify malformed gateway call parameters [#105217](https://github.com/openclaw/openclaw/pull/105217)
- Show a clear error for malformed docs search responses [#108364](https://github.com/openclaw/openclaw/pull/108364)
- Emit absolute config paths from machine-facing CLI output [#109361](https://github.com/openclaw/openclaw/pull/109361)
- Submit exact TUI command arguments with one Enter [#109809](https://github.com/openclaw/openclaw/pull/109809)
- Keep config schema JSON parseable at debug level [#110496](https://github.com/openclaw/openclaw/pull/110496)
- Preserve literal dollar patterns in displayed home paths [#111398](https://github.com/openclaw/openclaw/pull/111398)
- Allow docs search with unrelated invalid config [#111803](https://github.com/openclaw/openclaw/pull/111803)
- Restore public TLS trust for macOS one-shot commands [#112868](https://github.com/openclaw/openclaw/pull/112868)
- Restore short-option completion in Bash [#113811](https://github.com/openclaw/openclaw/pull/113811)
- Restore Ctrl+D forward deletion in the TUI [#113872](https://github.com/openclaw/openclaw/pull/113872)
- Clarify fresh-install exec approval defaults [#114417](https://github.com/openclaw/openclaw/pull/114417)
- Keep config file path queries fast and read-only [#114660](https://github.com/openclaw/openclaw/pull/114660)
- Keep read-only config commands from writing state [#114847](https://github.com/openclaw/openclaw/pull/114847)
- Scope Fish completions to the active command [#115180](https://github.com/openclaw/openclaw/pull/115180)
- Avoid no-op SQLite repair during routine CLI startup [#115193](https://github.com/openclaw/openclaw/pull/115193)
- Restore Fish completions after global CLI options [#115222](https://github.com/openclaw/openclaw/pull/115222)
- Keep JSON CLI stdout valid through process exit [#115315](https://github.com/openclaw/openclaw/pull/115315)
- Keep JSON command stdout free of exit-time diagnostics [#115327](https://github.com/openclaw/openclaw/pull/115327)
- Keep shell completion consistent across Bash, Fish, and PowerShell [#115332](https://github.com/openclaw/openclaw/pull/115332)
- Report the commit embedded in the running CLI build [#115544](https://github.com/openclaw/openclaw/pull/115544)
- Keep Gateway credential failures parseable in JSON [#116597](https://github.com/openclaw/openclaw/pull/116597)
- Keep config file output raw under JSON logging [#116968](https://github.com/openclaw/openclaw/pull/116968)
- Return Canvas control results in JSON mode [#117297](https://github.com/openclaw/openclaw/pull/117297)
- fix(tui): cancel history retries when the Gateway stops [#117318](https://github.com/openclaw/openclaw/pull/117318)
- Preserve Gateway startup policy with parent options [#117675](https://github.com/openclaw/openclaw/pull/117675)
- Reject oversized Gateway TUI history limits early [#117773](https://github.com/openclaw/openclaw/pull/117773)
- Report failed TUI shell commands once and in order [#118452](https://github.com/openclaw/openclaw/pull/118452)
- List supported TUI commands from one shared registry [#118515](https://github.com/openclaw/openclaw/pull/118515)
- Preserve Gateway request errors in health JSON [#118645](https://github.com/openclaw/openclaw/pull/118645)
- Make Gateway RPC calls honor a custom local port [#119046](https://github.com/openclaw/openclaw/pull/119046)
- Keep pairing QR codes within standard terminal widths [#120827](https://github.com/openclaw/openclaw/pull/120827)
- Preserve Windows CLI arguments named node.exe [#121064](https://github.com/openclaw/openclaw/pull/121064)
- Clean version output for the legacy package entrypoint [#121690](https://github.com/openclaw/openclaw/pull/121690)
- Avoid creating profiles for rejected CLI commands [#122970](https://github.com/openclaw/openclaw/pull/122970)
- Bound one-shot CLI exits when stream drains stall [#123134](https://github.com/openclaw/openclaw/pull/123134)
- Emit structured JSON errors from Directory CLI commands [#123390](https://github.com/openclaw/openclaw/pull/123390)
- Return structured Gmail setup errors [#123646](https://github.com/openclaw/openclaw/pull/123646)
- Suggest a valid migration preview command [#124149](https://github.com/openclaw/openclaw/pull/124149)
- Show relevant help for unknown subcommands [#124544](https://github.com/openclaw/openclaw/pull/124544)
- Show accurate errors for mistyped nested CLI commands [#124661](https://github.com/openclaw/openclaw/pull/124661)
- Show each TUI reconnect failure cause [#124700](https://github.com/openclaw/openclaw/pull/124700)
- Explain empty directory lookup results [#124753](https://github.com/openclaw/openclaw/pull/124753)
- Fail clearly when agent creation cannot prompt [#124940](https://github.com/openclaw/openclaw/pull/124940)
- Default Windows shell completion to PowerShell [#125211](https://github.com/openclaw/openclaw/pull/125211)
- Stop repeating cause text in error messages [#125687](https://github.com/openclaw/openclaw/pull/125687)
- Block TUI sends until session events are subscribed [#125928](https://github.com/openclaw/openclaw/pull/125928)
- Return machine-readable JSON when docs search fails [#126331](https://github.com/openclaw/openclaw/pull/126331)
- Accept daemon JSON output before lifecycle subcommands [#126447](https://github.com/openclaw/openclaw/pull/126447)
- Honor custom Gateway ports for usage and stability queries [#126832](https://github.com/openclaw/openclaw/pull/126832)
- Return JSON for QR option validation failures [#126884](https://github.com/openclaw/openclaw/pull/126884)
- Return canonical JSON for sandbox CLI failures [#126915](https://github.com/openclaw/openclaw/pull/126915)
- Return parseable JSON for missing task and flow lookups [#127080](https://github.com/openclaw/openclaw/pull/127080)
- fix(cli): return JSON for invalid status timeouts [#127721](https://github.com/openclaw/openclaw/pull/127721)
- fix(cli): return JSON for task validation failures [#127750](https://github.com/openclaw/openclaw/pull/127750)
- fix(tui): honor system-agent history limit [#127993](https://github.com/openclaw/openclaw/pull/127993)
- fix(cli): return JSON for channel capability failures [#128155](https://github.com/openclaw/openclaw/pull/128155)
- fix(cli): render agent binding JSON failures [#128484](https://github.com/openclaw/openclaw/pull/128484)
- fix(cli): render agents add JSON failures [#128517](https://github.com/openclaw/openclaw/pull/128517)
- fix(cli): render agent identity JSON failures [#128590](https://github.com/openclaw/openclaw/pull/128590)
- fix(cli): write telemetry JSON to stdout [#129003](https://github.com/openclaw/openclaw/pull/129003)
- fix(tui): preserve slash command alias completions [#129039](https://github.com/openclaw/openclaw/pull/129039)
- fix(cli): failing one-shot commands incorrectly exit successfully [#129066](https://github.com/openclaw/openclaw/pull/129066)
- fix(cli): render Gateway health JSON failures [#129106](https://github.com/openclaw/openclaw/pull/129106)
- fix(plugins): report update failures on stderr [#129189](https://github.com/openclaw/openclaw/pull/129189)
- fix(cli): honor reaction listing limits [#129308](https://github.com/openclaw/openclaw/pull/129308)
- fix: report unattended completion install outcomes [#129320](https://github.com/openclaw/openclaw/pull/129320)
- fix(cli): honor container selection in root help [#130403](https://github.com/openclaw/openclaw/pull/130403)
- fix(tui): show agent-scoped session example [#130519](https://github.com/openclaw/openclaw/pull/130519)
- fix(tasks): skip completed deleted-agent stores [#130554](https://github.com/openclaw/openclaw/pull/130554)

**Documentation**

- Show absolute config paths in CLI examples [#114595](https://github.com/openclaw/openclaw/pull/114595)
- docs: correct directory JSON failure envelope [#124989](https://github.com/openclaw/openclaw/pull/124989)
- Document the Zsh completion profile selected by ZDOTDIR [#125247](https://github.com/openclaw/openclaw/pull/125247)

</details>

</Accordion>

<Accordion title="Backup, restore, reset, and uninstall">

Reset and uninstall now refuse to remove data until the Gateway service is torn down and OpenClaw can establish that no other process owns the state. If teardown or ownership checks fail, the state stays put, and a state-only uninstall leaves configured workspaces alone.

New full backups preserve configured agent state roots and safe relative links, avoid mistaking active archive work for a stall, and restore default or custom layouts through the same guarded flow. Managed `dev/` checkouts and local source edits still need a separate backup, while older archives containing absolute generated `plugin-skills/` links remain rejected.

Known-vulnerable Node and SQLite combinations now stop before state opens, with guidance for whether the embedded Node runtime or shared system SQLite library needs upgrading.

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

**Improvements**

- Add scheduled, versioned Git backups with freshness tracking [#122485](https://github.com/openclaw/openclaw/pull/122485)
- Add verify-first staging restore for whole backups [#122750](https://github.com/openclaw/openclaw/pull/122750)
- perf(sqlite): skip schema write lock on current state [#126825](https://github.com/openclaw/openclaw/pull/126825)
- Remove redundant healthy-database integrity scans [#115005](https://github.com/openclaw/openclaw/pull/115005)
- perf(state): avoid duplicate ownership reads in cached transactions [#128161](https://github.com/openclaw/openclaw/pull/128161)

**Bug fixes**

- fix(sqlite): reject runtimes vulnerable to WAL corruption [#106065](https://github.com/openclaw/openclaw/pull/106065)
- Validate exact backups before config recovery [#117100](https://github.com/openclaw/openclaw/pull/117100)
- Migrate and validate config backups before recovery [#120475](https://github.com/openclaw/openclaw/pull/120475)
- Prevent Windows startup stalls during shared-state checks [#122518](https://github.com/openclaw/openclaw/pull/122518)
- Make newly created default-profile backups restorable [#123504](https://github.com/openclaw/openclaw/pull/123504)
- Reject unrestorable symbolic links before publishing backups [#123672](https://github.com/openclaw/openclaw/pull/123672)
- Refuse duplicate Gateway startup before touching live state [#124653](https://github.com/openclaw/openclaw/pull/124653)
- fix(backup): preserve full backups with managed runtime symlinks [#124821](https://github.com/openclaw/openclaw/pull/124821)
- Refuse reset or uninstall while live state is owned [#125253](https://github.com/openclaw/openclaw/pull/125253)
- fix(backup): preserve configured agent state roots [#129773](https://github.com/openclaw/openclaw/pull/129773)
- Keep gateway model probes stateless [#103651](https://github.com/openclaw/openclaw/pull/103651)
- Restore Gateway startup on WSL2 when private-state chmod reports EROFS [#108258](https://github.com/openclaw/openclaw/pull/108258)
- Prevent Gateway outage after remote catalog upgrade [#113875](https://github.com/openclaw/openclaw/pull/113875)
- Preserve user data when Gateway removal fails [#113887](https://github.com/openclaw/openclaw/pull/113887)
- Keep uninstalled npm plugins from returning [#113902](https://github.com/openclaw/openclaw/pull/113902)
- Keep Gateway cleanup hints scoped to detected extra services [#115559](https://github.com/openclaw/openclaw/pull/115559)
- Prevent false backup stalls and sparse verification failures [#122213](https://github.com/openclaw/openclaw/pull/122213)
- Prevent false backup timeouts during large file reads [#122235](https://github.com/openclaw/openclaw/pull/122235)
- Exclude transient state temp files from backups [#122250](https://github.com/openclaw/openclaw/pull/122250)
- Let Windows security gates survive cold PowerShell starts [#123633](https://github.com/openclaw/openclaw/pull/123633)
- Remove isolated npm plugin projects on uninstall [#123973](https://github.com/openclaw/openclaw/pull/123973)
- Restrict npm plugin cleanup to owned roots [#124608](https://github.com/openclaw/openclaw/pull/124608)
- Make backup create output errors actionable [#124894](https://github.com/openclaw/openclaw/pull/124894)
- Repair older placement-move tables during startup [#125583](https://github.com/openclaw/openclaw/pull/125583)
- Prevent partial or raced Fleet backup archives from being lost [#126942](https://github.com/openclaw/openclaw/pull/126942)
- Surface config backup cleanup failures [#105307](https://github.com/openclaw/openclaw/pull/105307)
- Correct SQLite safety guidance for Node builds using a shared library [#107771](https://github.com/openclaw/openclaw/pull/107771)
- Tailor system Node SQLite warnings to the linked SQLite build [#107990](https://github.com/openclaw/openclaw/pull/107990)
- Clarify safe SQLite maintenance lines [#108382](https://github.com/openclaw/openclaw/pull/108382)
- Bound macOS process start-time probes [#109064](https://github.com/openclaw/openclaw/pull/109064)
- Report agent-delete cleanup failures instead of silent success [#110560](https://github.com/openclaw/openclaw/pull/110560)
- Keep legacy workspace attestation rows readable [#113686](https://github.com/openclaw/openclaw/pull/113686)
- Clean managed plugin peers after npm override errors [#116675](https://github.com/openclaw/openclaw/pull/116675)
- Report the real backup tar attempt count [#119197](https://github.com/openclaw/openclaw/pull/119197)
- Stop failed backups from claiming completion [#124135](https://github.com/openclaw/openclaw/pull/124135)
- Explain invalid backup and config file inputs [#124510](https://github.com/openclaw/openclaw/pull/124510)
- fix(plugins): normalize managed npm overrides before peer planning [#124532](https://github.com/openclaw/openclaw/pull/124532)
- Report offline agent deletion failures in JSON [#125715](https://github.com/openclaw/openclaw/pull/125715)
- fix(backup): reject malformed git log limits [#127875](https://github.com/openclaw/openclaw/pull/127875)
- Make path-based proxy-capture cleanup atomic [#98852](https://github.com/openclaw/openclaw/pull/98852)

**Documentation**

- Document verified backup and rollback workflows [#108159](https://github.com/openclaw/openclaw/pull/108159)
- Add a complete operator backups guide [#122196](https://github.com/openclaw/openclaw/pull/122196)
- Document the manual full-archive restore flow [#86971](https://github.com/openclaw/openclaw/pull/86971)
- Document backup volatile-path exclusions [#99007](https://github.com/openclaw/openclaw/pull/99007)

</details>

</Accordion>

</AccordionGroup>

## Messaging

Messaging now keeps more of a conversation intact across the places people already talk to their Claw. Telegram gains richer messages and media, Slack keeps live progress and the final answer together, Discord adds opt-in Activities and voice rooms that understand who is present, and the native apps keep media and pending sends inside the conversation where they belong.

Across supported channels, OpenClaw now holds accepted messages through managed restarts, reports whether a connection is usable, recovering, or blocked, and preserves an uncertain send instead of blindly sending it again. Recovery starts once OpenClaw has accepted the message, and each service still controls what it can confirm beyond that point.

<AccordionGroup>

<Accordion title="Message Delivery and Recovery">

On supported channels, messages OpenClaw has accepted now stay pending through a managed restart, and channel status shows whether a connection is usable, recovering, or blocked. When a send times out without a confirmed result, OpenClaw keeps that outcome uncertain and can warn on the next contact rather than creating a likely duplicate. Recovery begins after local acceptance.

Eligible single-choice questions can use native controls on Telegram, Discord, and Slack, while longer Telegram and Discord turns can show a short status headline with compact tool activity. Multi-select and free-text questions continue through the supported client or text path, and Telegram partial-answer streaming remains a separate opt-in mode.

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

**Improvements**

- Move six channel streaming configurations to the nested format [#105709](https://github.com/openclaw/openclaw/pull/105709)
- Add a unified implicit-mention policy for supported channels [#108829](https://github.com/openclaw/openclaw/pull/108829)
- Add structured ask_user questions across chat surfaces [#109922](https://github.com/openclaw/openclaw/pull/109922)
- Complete ask_user across harnesses, channels, and native apps [#110372](https://github.com/openclaw/openclaw/pull/110372)
- Open MCP App views from channel replies [#111211](https://github.com/openclaw/openclaw/pull/111211)
- Keep channel media out of primary message text [#111665](https://github.com/openclaw/openclaw/pull/111665)
- Render model-authored collapsible sections [#114556](https://github.com/openclaw/openclaw/pull/114556)
- Teach models to use collapsible details on supported surfaces [#114706](https://github.com/openclaw/openclaw/pull/114706)
- Manage audio and video attachments across Gateway chat [#115842](https://github.com/openclaw/openclaw/pull/115842)
- Publish authoritative lifecycle status for ten bundled channels [#118110](https://github.com/openclaw/openclaw/pull/118110)
- Report truthful lifecycle status across fifteen more channels [#118298](https://github.com/openclaw/openclaw/pull/118298)
- Route default heartbeat alerts only to the configured owner [#121988](https://github.com/openclaw/openclaw/pull/121988)
- Recover channel connections promptly after host sleep [#122489](https://github.com/openclaw/openclaw/pull/122489)
- Resume local Gateways promptly after Linux host sleep [#122719](https://github.com/openclaw/openclaw/pull/122719)
- Add structured speech controls to message sends [#124913](https://github.com/openclaw/openclaw/pull/124913)
- feat(channels): custom emoji discovery via emoji-list across Discord, Slack, Telegram [#128435](https://github.com/openclaw/openclaw/pull/128435)
- feat(channels): post a grounded introduction when the bot joins a group room [#130103](https://github.com/openclaw/openclaw/pull/130103)
- Move legacy channel streaming keys to doctor-only migration [#104693](https://github.com/openclaw/openclaw/pull/104693)
- Unify Matrix, Feishu, and QQBot streaming configuration [#105808](https://github.com/openclaw/openclaw/pull/105808)
- Open a selected channel's setup immediately [#113197](https://github.com/openclaw/openclaw/pull/113197)
- Require nested channel streaming configuration [#113533](https://github.com/openclaw/openclaw/pull/113533)
- Migrate retired channel config aliases and remove orphaned shadow trials [#114709](https://github.com/openclaw/openclaw/pull/114709)
- Remove activity digests from finished channel replies [#124972](https://github.com/openclaw/openclaw/pull/124972)

**Bug fixes**

- Release reply lanes when pre-delivery callbacks hang [#104256](https://github.com/openclaw/openclaw/pull/104256)
- Reconcile timed-out message sends without duplicate retries [#104632](https://github.com/openclaw/openclaw/pull/104632)
- Preserve streaming settings through config migration [#105054](https://github.com/openclaw/openclaw/pull/105054)
- Preserve completed replies across post-turn compaction failures [#105156](https://github.com/openclaw/openclaw/pull/105156)
- Keep Codex progress messages from ending active turns [#105365](https://github.com/openclaw/openclaw/pull/105365)
- Show progress drafts only for long tasks with model-written headlines [#106026](https://github.com/openclaw/openclaw/pull/106026)
- Recover message sessions after reply finalization stalls [#106792](https://github.com/openclaw/openclaw/pull/106792)
- Keep post-ack webhook processing admitted [#107734](https://github.com/openclaw/openclaw/pull/107734)
- Preserve completed replies when follow-ups arrive [#107799](https://github.com/openclaw/openclaw/pull/107799)
- Recover channel turns safely after gateway restarts [#108283](https://github.com/openclaw/openclaw/pull/108283)
- Keep queued voice replies alive through retries and restarts [#108502](https://github.com/openclaw/openclaw/pull/108502)
- Restore one cross-channel DM session for fresh installs [#110225](https://github.com/openclaw/openclaw/pull/110225)
- Restore structured ask_user questions in Gateway chats [#110961](https://github.com/openclaw/openclaw/pull/110961)
- Recover failed inbound channel events [#111029](https://github.com/openclaw/openclaw/pull/111029)
- Prevent channel echoes and add native login commands [#111341](https://github.com/openclaw/openclaw/pull/111341)
- Remove media placeholder text from iMessage, Signal, and WhatsApp [#111800](https://github.com/openclaw/openclaw/pull/111800)
- Restore message-channel context after restart [#112548](https://github.com/openclaw/openclaw/pull/112548)
- Reject invalid explicit channel account selections [#113417](https://github.com/openclaw/openclaw/pull/113417)
- Prevent busy gateways from silently dropping queued replies [#114058](https://github.com/openclaw/openclaw/pull/114058)
- Stop socketless channels from restart-looping [#114970](https://github.com/openclaw/openclaw/pull/114970)
- Fail channel startup when durable ingress is unavailable [#114998](https://github.com/openclaw/openclaw/pull/114998)
- Prevent false no-reply fallbacks after handled turns [#115016](https://github.com/openclaw/openclaw/pull/115016)
- Report channels with dead inbound delivery as unhealthy [#115229](https://github.com/openclaw/openclaw/pull/115229)
- Match typed group mentions for decorated agent names [#115278](https://github.com/openclaw/openclaw/pull/115278)
- Release inbound debounce after turn admission [#115603](https://github.com/openclaw/openclaw/pull/115603)
- Run channel reply hooks for restart-recovered replies [#115711](https://github.com/openclaw/openclaw/pull/115711)
- Deliver retried messages after queue teardown [#115891](https://github.com/openclaw/openclaw/pull/115891)
- Preserve Markdown code in plain-text channel replies [#116123](https://github.com/openclaw/openclaw/pull/116123)
- Show tool progress beneath channel status headlines [#116143](https://github.com/openclaw/openclaw/pull/116143)
- Unblock channel turns after Gateway restart recovery [#116728](https://github.com/openclaw/openclaw/pull/116728)
- Send workspace attachments through Matrix and Telegram [#117711](https://github.com/openclaw/openclaw/pull/117711)
- Deliver final replies that quote short interim updates [#118178](https://github.com/openclaw/openclaw/pull/118178)
- Preserve actionable channel failure states and Discord retry behavior [#118251](https://github.com/openclaw/openclaw/pull/118251)
- Restore channel autostart after a Gateway crash-loop window clears [#118311](https://github.com/openclaw/openclaw/pull/118311)
- Standardize channel lifecycle recovery and cleanup [#118795](https://github.com/openclaw/openclaw/pull/118795)
- Let agents send progress before one final message-tool reply [#119605](https://github.com/openclaw/openclaw/pull/119605)
- Route Slack and Discord commentary through one per-turn owner [#121009](https://github.com/openclaw/openclaw/pull/121009)
- Preserve channel plugin reply suppression across delivery paths [#121159](https://github.com/openclaw/openclaw/pull/121159)
- Make ambiguous final delivery loss visible without resending [#121833](https://github.com/openclaw/openclaw/pull/121833)
- Deliver heartbeat alerts to the last conversation by default [#121892](https://github.com/openclaw/openclaw/pull/121892)
- Show failed agent runs as errors across channels [#122009](https://github.com/openclaw/openclaw/pull/122009)
- Make headless channel setup fail fast [#122530](https://github.com/openclaw/openclaw/pull/122530)
- Stop Gateways from auto-starting channels from inherited credentials [#123174](https://github.com/openclaw/openclaw/pull/123174)
- Visible chat replies supersede same-session heartbeats [#123458](https://github.com/openclaw/openclaw/pull/123458)
- Keep failed sends from rebinding the main session [#124459](https://github.com/openclaw/openclaw/pull/124459)
- Preserve replies when channel turns overlap [#124623](https://github.com/openclaw/openclaw/pull/124623)
- Base reply visibility on settled delivery outcomes [#124773](https://github.com/openclaw/openclaw/pull/124773)
- Preserve ambiguous message delivery outcomes [#124825](https://github.com/openclaw/openclaw/pull/124825)
- Report queued replies that fail after a status update [#125325](https://github.com/openclaw/openclaw/pull/125325)
- Preserve accepted channel messages across Gateway restarts [#125919](https://github.com/openclaw/openclaw/pull/125919)
- Prevent large base64 attachments from exhausting Gateway memory [#126017](https://github.com/openclaw/openclaw/pull/126017)
- Recover queued deliveries in explicit multi-agent fleets [#126377](https://github.com/openclaw/openclaw/pull/126377)
- Stop route identifiers from being treated as delivery receipts [#126385](https://github.com/openclaw/openclaw/pull/126385)
- fix(gateway): keep conversation delivery within agent bindings [#126424](https://github.com/openclaw/openclaw/pull/126424)
- Unblock replies after recovery-owner release conflicts [#126507](https://github.com/openclaw/openclaw/pull/126507)
- Prevent Gateway readiness stalls during channel startup [#126555](https://github.com/openclaw/openclaw/pull/126555)
- Keep durable inbound messages admitted after pump release [#126590](https://github.com/openclaw/openclaw/pull/126590)
- fix(channels): retry timed-out ingress messages [#127090](https://github.com/openclaw/openclaw/pull/127090)
- fix(plugins): bind tool delivery to current turn [#127098](https://github.com/openclaw/openclaw/pull/127098)
- fix(channels): preserve gateway context for inbound turns [#127962](https://github.com/openclaw/openclaw/pull/127962)
- fix(cron): scheduled job results disappear after temporary network failures [#128184](https://github.com/openclaw/openclaw/pull/128184)
- fix(outbound): prevent remote gateway duplicate sends [#128202](https://github.com/openclaw/openclaw/pull/128202)
- fix(media): stop silently skipping attachments with opaque download URLs [#128220](https://github.com/openclaw/openclaw/pull/128220)
- fix(channels): preserve long presentation text [#130368](https://github.com/openclaw/openclaw/pull/130368)
- fix(auto-reply): clarify unaddressed ambient room events [#130901](https://github.com/openclaw/openclaw/pull/130901)
- Recover undelivered message-tool replies with one guarded retry [#99536](https://github.com/openclaw/openclaw/pull/99536)
- fix(channels): bundled channels reject the documented responsePrefix override (#118148) [1f2e998](https://github.com/openclaw/openclaw/commit/1f2e998)
- Keep active messages out of queue overflow drops [#103284](https://github.com/openclaw/openclaw/pull/103284)
- Split Unicode paragraph separators into message chunks [#103518](https://github.com/openclaw/openclaw/pull/103518)
- Restore trusted startup for official ClawHub plugins [#103836](https://github.com/openclaw/openclaw/pull/103836)
- Preserve messages when Codex steering cannot confirm adoption [#103916](https://github.com/openclaw/openclaw/pull/103916)
- Preserve attributed formatting in outbound messages [#104118](https://github.com/openclaw/openclaw/pull/104118)
- Make channel nack callbacks idempotent [#104919](https://github.com/openclaw/openclaw/pull/104919)
- Quarantine corrupt channel ingress rows [#105259](https://github.com/openclaw/openclaw/pull/105259)
- Preserve inherited Discord streaming settings during Doctor migration [#105636](https://github.com/openclaw/openclaw/pull/105636)
- Prevent duplicate generated-media delivery on the same route [#105717](https://github.com/openclaw/openclaw/pull/105717)
- Surface empty message-tool-only completions [#105765](https://github.com/openclaw/openclaw/pull/105765)
- Preserve who said what across group chat turns [#107025](https://github.com/openclaw/openclaw/pull/107025)
- Hide model fallback notices in shared conversations [#107209](https://github.com/openclaw/openclaw/pull/107209)
- Reduce unrelated fields in channel message tools [#107474](https://github.com/openclaw/openclaw/pull/107474)
- Preserve queued MEDIA attachments across retries [#108969](https://github.com/openclaw/openclaw/pull/108969)
- Honor rejected inbound conversation claims [#109857](https://github.com/openclaw/openclaw/pull/109857)
- Prevent route-cache collisions from selecting the wrong agent [#110001](https://github.com/openclaw/openclaw/pull/110001)
- Let Channel Setup recover after a timed-out start [#110146](https://github.com/openclaw/openclaw/pull/110146)
- Lock Channel Wizard answers while a step is running [#110163](https://github.com/openclaw/openclaw/pull/110163)
- Scope setup-wizard credentials to the selected account [#110969](https://github.com/openclaw/openclaw/pull/110969)
- Prevent duplicate agent-to-agent replies [#111012](https://github.com/openclaw/openclaw/pull/111012)
- fix(channels): preserve terminal ingress outcomes when stop abort races delivery return [#111347](https://github.com/openclaw/openclaw/pull/111347)
- Replace channel media placeholder bodies with structured facts [#111447](https://github.com/openclaw/openclaw/pull/111447)
- Make configure and channel setup behave consistently [#111720](https://github.com/openclaw/openclaw/pull/111720)
- Route inbound media through ordered attachment facts [#112276](https://github.com/openclaw/openclaw/pull/112276)
- Draft previews keep the newest update after transient send failures [#112370](https://github.com/openclaw/openclaw/pull/112370)
- Preserve unquoted media paths containing spaces [#112464](https://github.com/openclaw/openclaw/pull/112464)
- Make formatted replies readable on plain-text channels [#112926](https://github.com/openclaw/openclaw/pull/112926)
- Improve Markdown rendering on Teams and QQ [#113100](https://github.com/openclaw/openclaw/pull/113100)
- Run outbound hooks on normal routed channel replies [#113448](https://github.com/openclaw/openclaw/pull/113448)
- Route bundled native-command replies through one lifecycle [#113500](https://github.com/openclaw/openclaw/pull/113500)
- Restore opaque plugin conversation bindings [#113588](https://github.com/openclaw/openclaw/pull/113588)
- Preserve MIME types for streamed attachments [#113762](https://github.com/openclaw/openclaw/pull/113762)
- Run channel recovery checks when startup grace ends [#114275](https://github.com/openclaw/openclaw/pull/114275)
- Finish sibling channel teardowns before reporting stop failures [#114280](https://github.com/openclaw/openclaw/pull/114280)
- Prevent duplicate replies after rewritten commands [#114379](https://github.com/openclaw/openclaw/pull/114379)
- Align channel account selection and credential replacement [#114395](https://github.com/openclaw/openclaw/pull/114395)
- Prevent NO_REPLY tokens from leaking into delivered replies [#114500](https://github.com/openclaw/openclaw/pull/114500)
- Show an empty-reply fallback after explicit group mentions [#114531](https://github.com/openclaw/openclaw/pull/114531)
- Stop duplicate replies after delivered primary failures [#114628](https://github.com/openclaw/openclaw/pull/114628)
- Make channel status internally consistent during relink and restart [#114775](https://github.com/openclaw/openclaw/pull/114775)
- Limit no-reply notices to turns directed at the bot [#114799](https://github.com/openclaw/openclaw/pull/114799)
- Let user turns recover past scheduled-only reply hooks [#114836](https://github.com/openclaw/openclaw/pull/114836)
- Trim trailing whitespace from final reply chunks [#114973](https://github.com/openclaw/openclaw/pull/114973)
- Let crash-looping channels reach their give-up state [#114976](https://github.com/openclaw/openclaw/pull/114976)
- Keep delegated messages on the current channel account [#115358](https://github.com/openclaw/openclaw/pull/115358)
- Preserve CLI mid-turn text in durable channel replies [#115455](https://github.com/openclaw/openclaw/pull/115455)
- Recover stranded CJK replies in message-tool-only delivery [#115556](https://github.com/openclaw/openclaw/pull/115556)
- Mark durable webhook acceptance across six channels [#115586](https://github.com/openclaw/openclaw/pull/115586)
- Prevent duplicate CLI commentary delivery [#115596](https://github.com/openclaw/openclaw/pull/115596)
- Keep internal agent sessions out of message destinations [#115657](https://github.com/openclaw/openclaw/pull/115657)
- Honor configured default agents for authenticated auto-replies [#115724](https://github.com/openclaw/openclaw/pull/115724)
- Return delegated replies to the active direct conversation [#115756](https://github.com/openclaw/openclaw/pull/115756)
- Stop unhealthy channels from restarting forever [#116089](https://github.com/openclaw/openclaw/pull/116089)
- Preserve account selection for agent-hook delivery [#116095](https://github.com/openclaw/openclaw/pull/116095)
- Reject invalid hook delivery accounts before runs [#116264](https://github.com/openclaw/openclaw/pull/116264)
- Keep streamed commentary on one progress-draft line [#116272](https://github.com/openclaw/openclaw/pull/116272)
- Acknowledge explicit group mentions when mentions are optional [#116303](https://github.com/openclaw/openclaw/pull/116303)
- Show failed CLI command outcomes in channel progress [#116387](https://github.com/openclaw/openclaw/pull/116387)
- Keep intentional NO_REPLY completions silent across channels [#116548](https://github.com/openclaw/openclaw/pull/116548)
- Preserve outbound policy results across restart recovery [#116632](https://github.com/openclaw/openclaw/pull/116632)
- Preserve delivery behavior across four bundled channels [#116647](https://github.com/openclaw/openclaw/pull/116647)
- Keep recovered channel turns active after stale terminal events [#116777](https://github.com/openclaw/openclaw/pull/116777)
- Preserve Markdown formatting in replies with media attachments [#116786](https://github.com/openclaw/openclaw/pull/116786)
- Keep channel setup usable when one plugin fails [#116824](https://github.com/openclaw/openclaw/pull/116824)
- Preserve supplemental media and presentation details across channels [#116884](https://github.com/openclaw/openclaw/pull/116884)
- Preserve malformed bracket text in final replies [#116979](https://github.com/openclaw/openclaw/pull/116979)
- Preserve unmatched bracket tails in final replies [#116983](https://github.com/openclaw/openclaw/pull/116983)
- Preserve actionable commands in channel fallback menus [#116990](https://github.com/openclaw/openclaw/pull/116990)
- Keep channel progress previews consistent across queued turns [#117269](https://github.com/openclaw/openclaw/pull/117269)
- Show fresh channel probe failures in health output [#117410](https://github.com/openclaw/openclaw/pull/117410)
- Keep heartbeat commitments on the configured sender account [#117521](https://github.com/openclaw/openclaw/pull/117521)
- Preserve explicit empty delivery receipts without inventing IDs [#118126](https://github.com/openclaw/openclaw/pull/118126)
- Preserve authored outbound message whitespace [#118538](https://github.com/openclaw/openclaw/pull/118538)
- Preserve Slack and Mattermost thread participation expiry across restarts [#118630](https://github.com/openclaw/openclaw/pull/118630)
- Let manually restarted channels recover from temporary errors [#118728](https://github.com/openclaw/openclaw/pull/118728)
- Accept heartbeat settings for named external channel accounts [#118828](https://github.com/openclaw/openclaw/pull/118828)
- Accept mixed-case local file URLs on Windows [#121226](https://github.com/openclaw/openclaw/pull/121226)
- Resolve Windows home paths for custom usage footers [#121303](https://github.com/openclaw/openclaw/pull/121303)
- Preserve external thread routing on internal turns [#121321](https://github.com/openclaw/openclaw/pull/121321)
- Keep native plugin command selection bound through execution [#121544](https://github.com/openclaw/openclaw/pull/121544)
- Prevent successful exact sends from replaying after restart [#121587](https://github.com/openclaw/openclaw/pull/121587)
- Report best-effort agent delivery failures [#121824](https://github.com/openclaw/openclaw/pull/121824)
- Show channel warnings when Doctor leaves configuration unchanged [#121956](https://github.com/openclaw/openclaw/pull/121956)
- Surface partial channel-status failures [#122349](https://github.com/openclaw/openclaw/pull/122349)
- Clear false delivery-uncertainty notices after success [#122438](https://github.com/openclaw/openclaw/pull/122438)
- Honor configured terminal reaction hold timing [#122544](https://github.com/openclaw/openclaw/pull/122544)
- Report truthful per-target broadcast delivery outcomes [#122605](https://github.com/openclaw/openclaw/pull/122605)
- Preserve text when tagged TTS synthesis fails [#122608](https://github.com/openclaw/openclaw/pull/122608)
- Refresh Gateway health immediately after account removal [#122620](https://github.com/openclaw/openclaw/pull/122620)
- Keep Slack and Discord system events with their routed agent [#123316](https://github.com/openclaw/openclaw/pull/123316)
- Deliver terminal replies when policy and durable sessions differ [#123422](https://github.com/openclaw/openclaw/pull/123422)
- Keep channel messages working after manual restarts [#123885](https://github.com/openclaw/openclaw/pull/123885)
- Keep managed reply media downloadable and correctly owned [#124048](https://github.com/openclaw/openclaw/pull/124048)
- Stop undelivered ask_user prompts from capturing later replies [#124148](https://github.com/openclaw/openclaw/pull/124148)
- Clean up live thread bindings when channel managers stop [#124221](https://github.com/openclaw/openclaw/pull/124221)
- Preserve email addresses in plain-text replies [#124249](https://github.com/openclaw/openclaw/pull/124249)
- fix(outbound): prevent duplicate sends from proven-not-sent message-tool failures [#124310](https://github.com/openclaw/openclaw/pull/124310)
- Preserve channel setup after a status refresh failure [#124383](https://github.com/openclaw/openclaw/pull/124383)
- Reject invalid targeted channel setup requests [#124584](https://github.com/openclaw/openclaw/pull/124584)
- Surface unavailable channel state checkers [#124600](https://github.com/openclaw/openclaw/pull/124600)
- Run channel setup hooks only after saving configuration [#124736](https://github.com/openclaw/openclaw/pull/124736)
- Keep Signal and iMessage approvals typed across delivery [#124742](https://github.com/openclaw/openclaw/pull/124742)
- Store assistant delivery directives as typed transcript facts [#124793](https://github.com/openclaw/openclaw/pull/124793)
- Route targetless direct-message replies back to the sender [#124837](https://github.com/openclaw/openclaw/pull/124837)
- Bound image fetch headroom to the image size cap [#124838](https://github.com/openclaw/openclaw/pull/124838)
- Remove delivery markers from historical sessions [#124888](https://github.com/openclaw/openclaw/pull/124888)
- Honor explicit agent ownership in channels resolve [#125109](https://github.com/openclaw/openclaw/pull/125109)
- Preserve degraded Discord and Telegram delivery outcomes [#125152](https://github.com/openclaw/openclaw/pull/125152)
- Resume archived channel sessions on authorized new messages [#125163](https://github.com/openclaw/openclaw/pull/125163)
- Preserve correlation for targetless message replies [#125283](https://github.com/openclaw/openclaw/pull/125283)
- Validate every source in structured attachments [#125433](https://github.com/openclaw/openclaw/pull/125433)
- Keep the main agent aware of isolated group conversations [#125667](https://github.com/openclaw/openclaw/pull/125667)
- Return complete webhook errors and drain Gateway shutdown reliably [#125893](https://github.com/openclaw/openclaw/pull/125893)
- Make broadcast failures visible to scripts and operators [#125915](https://github.com/openclaw/openclaw/pull/125915)
- Enforce sender file-read policy for outbound attachments [#125950](https://github.com/openclaw/openclaw/pull/125950)
- fix(cron): persist outbound route only after successful delivery [#126145](https://github.com/openclaw/openclaw/pull/126145)
- Recover malformed channel ingress claims [#126176](https://github.com/openclaw/openclaw/pull/126176)
- Preserve one-time native replies across durable delivery [#126205](https://github.com/openclaw/openclaw/pull/126205)
- Show failures for queued replies after work starts [#126266](https://github.com/openclaw/openclaw/pull/126266)
- Settle pre-aborted reply delivery immediately [#126582](https://github.com/openclaw/openclaw/pull/126582)
- Stop Nostr and Buzz from reusing buses during shutdown [#126637](https://github.com/openclaw/openclaw/pull/126637)
- Restore message CLI sends for npm-installed channels [#126700](https://github.com/openclaw/openclaw/pull/126700)
- Retry queued deliveries during temporary channel adapter outages [#126800](https://github.com/openclaw/openclaw/pull/126800)
- fix(agents): heartbeat runs no longer block visible turns [#126853](https://github.com/openclaw/openclaw/pull/126853)
- fix(heartbeat): deliver exec completions with disabled cadence [#126895](https://github.com/openclaw/openclaw/pull/126895)
- Preserve delivered channel replies when preview cleanup fails [#126922](https://github.com/openclaw/openclaw/pull/126922)
- Preserve the selected account for CLI-backed cron announcements [#126995](https://github.com/openclaw/openclaw/pull/126995)
- Recover repaired credential-file accounts without restarting siblings [#126999](https://github.com/openclaw/openclaw/pull/126999)
- Show a clear error when follow-up progress never becomes a final reply [#127070](https://github.com/openclaw/openclaw/pull/127070)
- fix(agents): preserve opaque session key casing [#127279](https://github.com/openclaw/openclaw/pull/127279)
- fix: stop retry storms after definitive channel rejections [#127353](https://github.com/openclaw/openclaw/pull/127353)
- fix(outbound): prevent media replay after ambiguous network failure [#127841](https://github.com/openclaw/openclaw/pull/127841)
- fix(gateway): unhealthy channels appear ready after clock rollback [#128222](https://github.com/openclaw/openclaw/pull/128222)
- fix: keep manually stopped idle channel accounts stopped [#128237](https://github.com/openclaw/openclaw/pull/128237)
- fix(outbound): prevent empty chunkers from silently dropping replies [#128288](https://github.com/openclaw/openclaw/pull/128288)
- fix(agents): streamed replies and generated media disappear when delivery fails [#128337](https://github.com/openclaw/openclaw/pull/128337)
- fix(agents): resolve terminal from admitted gateway [#128348](https://github.com/openclaw/openclaw/pull/128348)
- fix(tts): deliver voice-only replies when speech runtime is cold [#128394](https://github.com/openclaw/openclaw/pull/128394)
- fix(agents): close stuck reasoning previews when provider streams end [#128496](https://github.com/openclaw/openclaw/pull/128496)
- fix(plugin-sdk): preserve text after empty chunking [#128499](https://github.com/openclaw/openclaw/pull/128499)
- fix(reply): preserve streamed voice message order [#128558](https://github.com/openclaw/openclaw/pull/128558)
- fix: attachments fail when data URLs contain MIME parameters or wrapped base64 [#128823](https://github.com/openclaw/openclaw/pull/128823)
- fix(reply): rich replies disappear beside silent-response markers [#129082](https://github.com/openclaw/openclaw/pull/129082)
- fix(agents): preserve channel-owned messaging thread identity [#129095](https://github.com/openclaw/openclaw/pull/129095)
- fix(reply): prevent deduplicated follow-ups from losing threaded replies [#129123](https://github.com/openclaw/openclaw/pull/129123)
- fix(channels): attachment filenames disappear from model context [#129140](https://github.com/openclaw/openclaw/pull/129140)
- fix(outbound): preserve location-only replies in conversation history [#129197](https://github.com/openclaw/openclaw/pull/129197)
- fix(cli): unsuccessful message sends report success [#129202](https://github.com/openclaw/openclaw/pull/129202)
- fix(reply): keep attachments and actions when reply text was already sent [#129230](https://github.com/openclaw/openclaw/pull/129230)
- fix(reply): preserve location and video presentation in delivery identity [#129278](https://github.com/openclaw/openclaw/pull/129278)
- fix(agents): keep streamed code blocks within message limits [#129487](https://github.com/openclaw/openclaw/pull/129487)
- fix(channels): honor supported group history limits [#129710](https://github.com/openclaw/openclaw/pull/129710)
- fix(reply): preserve final answers after reasoning and commentary updates [#129893](https://github.com/openclaw/openclaw/pull/129893)
- fix(channels): retry abandoned deliveries without penalizing Telegram restarts [#130077](https://github.com/openclaw/openclaw/pull/130077)
- fix(cli): failed message actions report success [#130281](https://github.com/openclaw/openclaw/pull/130281)
- fix: dedupe replies against their resolved delivery thread [#130510](https://github.com/openclaw/openclaw/pull/130510)
- fix: preserve channel answers after unavailable approvals [#130624](https://github.com/openclaw/openclaw/pull/130624)
- refactor(channels): consolidate account logout cleanup [#130976](https://github.com/openclaw/openclaw/pull/130976)
- Resolve response-prefix templates in abort replies [#45315](https://github.com/openclaw/openclaw/pull/45315)
- Align CJK and emoji Markdown tables by display width [#55596](https://github.com/openclaw/openclaw/pull/55596)
- Match derived agent names with Unicode-aware boundaries [#89864](https://github.com/openclaw/openclaw/pull/89864)
- Restart the gateway when channel login finds an unloaded plugin [#90779](https://github.com/openclaw/openclaw/pull/90779)
- Honor explicit Telegram and Discord preview streaming [#97671](https://github.com/openclaw/openclaw/pull/97671)
- Delay narrated progress drafts and remove the implicit title [#105607](https://github.com/openclaw/openclaw/pull/105607)
- Warn external plugins about legacy scalar streaming settings [#106796](https://github.com/openclaw/openclaw/pull/106796)
- Report failed legacy channel sends as failures [#109906](https://github.com/openclaw/openclaw/pull/109906)
- Keep configured channels authoritative in plugin send results [#110069](https://github.com/openclaw/openclaw/pull/110069)
- Preserve channel setup success when audit logging fails [#111504](https://github.com/openclaw/openclaw/pull/111504)
- Ignore blank optional locations on message sends [#112013](https://github.com/openclaw/openclaw/pull/112013)
- Keep replies working after config reloads [#112467](https://github.com/openclaw/openclaw/pull/112467)
- Recover queued outbound messages on the correct retry schedule [#113700](https://github.com/openclaw/openclaw/pull/113700)
- Honor channel opt-outs for explicit reply tags [#114268](https://github.com/openclaw/openclaw/pull/114268)
- Keep channel status ordering stable during parallel probes [#114362](https://github.com/openclaw/openclaw/pull/114362)
- Clean up Slack and Feishu after ingress startup failures [#115295](https://github.com/openclaw/openclaw/pull/115295)
- Keep message-tool-only heartbeat replies private [#115629](https://github.com/openclaw/openclaw/pull/115629)
- Deliver agent completion announcements to direct-message sessions [#115811](https://github.com/openclaw/openclaw/pull/115811)
- Preserve TTS answers when audio generation fails [#118690](https://github.com/openclaw/openclaw/pull/118690)
- Correct stale-plugin IDs in Doctor repair reports [#119202](https://github.com/openclaw/openclaw/pull/119202)
- Remove the inactive progress-render setting [#122927](https://github.com/openclaw/openclaw/pull/122927)
- Settle failed ingress claims for legacy channel lifecycles [#124016](https://github.com/openclaw/openclaw/pull/124016)
- Avoid empty follow-up queues on message redelivery [#124723](https://github.com/openclaw/openclaw/pull/124723)
- Expose outbound queue and batch preparation failures [#124756](https://github.com/openclaw/openclaw/pull/124756)
- Reject corrupt approval-reaction targets consistently [#124942](https://github.com/openclaw/openclaw/pull/124942)
- Coalesce overlapping channel typing starts [#127006](https://github.com/openclaw/openclaw/pull/127006)
- Clean up failed media staging artifacts [#127092](https://github.com/openclaw/openclaw/pull/127092)
- fix(gateway): clear stale credential warnings after channel plugin removal [#127503](https://github.com/openclaw/openclaw/pull/127503)
- fix(cron): restore automation failure alerts after clock rollback [#127731](https://github.com/openclaw/openclaw/pull/127731)
- fix(agents): preserve image attachment ownership in queued follow-ups [#128272](https://github.com/openclaw/openclaw/pull/128272)
- fix(outbound): blank media lists silently drop valid channel attachments [#128372](https://github.com/openclaw/openclaw/pull/128372)
- fix(gateway): removed channel plugins remain falsely healthy after reload [#128503](https://github.com/openclaw/openclaw/pull/128503)
- fix(reply): preserve distinct streamed location messages [#128846](https://github.com/openclaw/openclaw/pull/128846)
- fix(media): preserve correct filenames for transparent image attachments [#128902](https://github.com/openclaw/openclaw/pull/128902)
- fix(cron): preserve webhook delivery when the system clock jumps [#129050](https://github.com/openclaw/openclaw/pull/129050)
- fix(reply): preserve every mixed explicit and parsed attachment [#129159](https://github.com/openclaw/openclaw/pull/129159)
- fix(channels): keep title-only cards visible and media counts accurate [#129193](https://github.com/openclaw/openclaw/pull/129193)
- fix(reply): hide malformed reply directives from messages [#129367](https://github.com/openclaw/openclaw/pull/129367)
- fix(channels): honor supported account reply-threading policies [#129679](https://github.com/openclaw/openclaw/pull/129679)
- fix: preserve data URL attachment filename extensions [#130625](https://github.com/openclaw/openclaw/pull/130625)
- fix: preserve explicit MIME types on attachment actions [#130714](https://github.com/openclaw/openclaw/pull/130714)
- Allow zero to disable group chat history [#65359](https://github.com/openclaw/openclaw/pull/65359)

**Documentation**

- Document channel ingress and mention guarantees [#111069](https://github.com/openclaw/openclaw/pull/111069)
- Repair channel discovery and prevent documentation drift [#118106](https://github.com/openclaw/openclaw/pull/118106)
- docs(channels): scope implicitMentions overrides to the channels that read them (#119320) [834fc44](https://github.com/openclaw/openclaw/commit/834fc44)
- Repair Discord, Slack, and Google Chat configuration examples [#106188](https://github.com/openclaw/openclaw/pull/106188)
- Document durable-ingress replay guard layering [#109799](https://github.com/openclaw/openclaw/pull/109799)
- Correct heartbeat visibility configuration examples [#118827](https://github.com/openclaw/openclaw/pull/118827)
- Finish progress work-counter cleanup [#125011](https://github.com/openclaw/openclaw/pull/125011)

</details>

</Accordion>

<Accordion title="Telegram">

On rich-enabled Telegram accounts, agents can send native details, tables, checklists, math, maps, file references, locations, venues, and a compatible round video note. Large nested replies paginate within Telegram's limits, and rejected rich structures fall back to the complete plain-text answer instead of dropping the useful part.

Busy conversations hold together better too. Follow-ups stay ordered during active work, accepted updates can resume after a restart, abandoned delivery claims stop freezing the chat, and verified public poll activity returns to the chat or forum topic where it began. Anonymous polls remain display-only, and quoted text reaches the agent as attributed quotation rather than active instructions.

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

**Improvements**

- Send Telegram locations, venues, and round video notes [#105142](https://github.com/openclaw/openclaw/pull/105142)
- Emit native Telegram Bot API rich-message blocks [#107986](https://github.com/openclaw/openclaw/pull/107986)
- Make Telegram message handling durable across active turns and restarts [#108924](https://github.com/openclaw/openclaw/pull/108924)
- Mark durable Telegram webhook acceptance [#104407](https://github.com/openclaw/openclaw/pull/104407)
- Render Markdown lists natively in Telegram rich messages [#113158](https://github.com/openclaw/openclaw/pull/113158)
- Surface Telegram draft-stream failures in default logs [#111065](https://github.com/openclaw/openclaw/pull/111065)

**Bug fixes**

- Prevent duplicate Telegram replies in conversation context [#102469](https://github.com/openclaw/openclaw/pull/102469)
- Keep Telegram model selections through hot reloads and fallbacks [#103510](https://github.com/openclaw/openclaw/pull/103510)
- Prevent Telegram messages from being lost after restarts [#107288](https://github.com/openclaw/openclaw/pull/107288)
- Deliver Telegram rich-format guidance to every runtime [#108264](https://github.com/openclaw/openclaw/pull/108264)
- Clean up Telegram media captions and preserve retryable updates [#111855](https://github.com/openclaw/openclaw/pull/111855)
- Deliver Telegram replies when models add a location [#113347](https://github.com/openclaw/openclaw/pull/113347)
- Paginate Telegram rich messages by recursive transport limits [#117020](https://github.com/openclaw/openclaw/pull/117020)
- Preserve quoted-message attribution in Telegram agent input [#117021](https://github.com/openclaw/openclaw/pull/117021)
- Keep concurrent Telegram updates in the correct session [#117861](https://github.com/openclaw/openclaw/pull/117861)
- Prevent stalled Telegram responses from blocking groups [#118144](https://github.com/openclaw/openclaw/pull/118144)
- Recover directed Telegram turns after empty model replies [#118305](https://github.com/openclaw/openclaw/pull/118305)
- Keep configured Telegram commands visible under menu limits [#119717](https://github.com/openclaw/openclaw/pull/119717)
- Keep Telegram reactions and poll answers in their original topics [#121231](https://github.com/openclaw/openclaw/pull/121231)
- Keep Telegram dependencies in production Docker images [#125580](https://github.com/openclaw/openclaw/pull/125580)
- fix(telegram): make ask_user controls native and reliable [#130262](https://github.com/openclaw/openclaw/pull/130262)
- Route Telegram public poll votes to the originating agent session [#95830](https://github.com/openclaw/openclaw/pull/95830)
- Continue Telegram webhook cleanup after shutdown failures [#100998](https://github.com/openclaw/openclaw/pull/100998)
- Label the bot's own Telegram recap messages as self [#102507](https://github.com/openclaw/openclaw/pull/102507)
- Recover stalled Telegram media downloads without blocking later messages [#103020](https://github.com/openclaw/openclaw/pull/103020)
- Preserve active Telegram turns when new messages arrive [#103664](https://github.com/openclaw/openclaw/pull/103664)
- Harden durable Telegram replay adoption [#103695](https://github.com/openclaw/openclaw/pull/103695)
- Protect adopted Telegram turns from transport supersession [#103952](https://github.com/openclaw/openclaw/pull/103952)
- Keep newer Telegram requests ahead of stale turns [#103965](https://github.com/openclaw/openclaw/pull/103965)
- Prevent empty Telegram sends for scheduled summaries [#104111](https://github.com/openclaw/openclaw/pull/104111)
- Bound Telegram username lookup timeouts [#104289](https://github.com/openclaw/openclaw/pull/104289)
- Prevent unlisted Telegram API calls from stalling delivery [#104526](https://github.com/openclaw/openclaw/pull/104526)
- Keep streamed Telegram pages on word boundaries [#104608](https://github.com/openclaw/openclaw/pull/104608)
- Preserve authored file-style links in Telegram [#105911](https://github.com/openclaw/openclaw/pull/105911)
- Bound stalled Telegram diagnostic response reads [#106035](https://github.com/openclaw/openclaw/pull/106035)
- Report degraded Telegram inline controls [#107105](https://github.com/openclaw/openclaw/pull/107105)
- Stop Doctor repeating expired Telegram cache warnings [#108259](https://github.com/openclaw/openclaw/pull/108259)
- Keep Telegram tool progress visible beneath preambles [#108394](https://github.com/openclaw/openclaw/pull/108394)
- Preserve Telegram word boundaries in proactive sends [#108801](https://github.com/openclaw/openclaw/pull/108801)
- Preserve Telegram forward origins in debounced batches [#108985](https://github.com/openclaw/openclaw/pull/108985)
- Retry Telegram update-offset persistence safely [#110068](https://github.com/openclaw/openclaw/pull/110068)
- Recover mixed-case Telegram allowlists during upgrade [#110415](https://github.com/openclaw/openclaw/pull/110415)
- Prevent Telegram empty-poll CPU spinning [#111063](https://github.com/openclaw/openclaw/pull/111063)
- Fall back to links for Telegram Web Apps outside DMs [#111116](https://github.com/openclaw/openclaw/pull/111116)
- Keep Telegram message mutations in forum topics [#112794](https://github.com/openclaw/openclaw/pull/112794)
- Canonicalize Telegram General-topic conversations [#113063](https://github.com/openclaw/openclaw/pull/113063)
- Spool isolated Telegram updates before advancing their offset [#113368](https://github.com/openclaw/openclaw/pull/113368)
- Prevent Telegram dedupe collisions across bot identities [#113667](https://github.com/openclaw/openclaw/pull/113667)
- Honor disabled link previews on streamed Telegram replies [#114125](https://github.com/openclaw/openclaw/pull/114125)
- fix(telegram): keep long model names selectable [#114472](https://github.com/openclaw/openclaw/pull/114472)
- Restore progress for queued Telegram replies [#114590](https://github.com/openclaw/openclaw/pull/114590)
- Preserve unmentioned Telegram group text in canonical mention handling [#114591](https://github.com/openclaw/openclaw/pull/114591)
- Prevent unmodified Telegram replies from flashing before outbound hooks [#114822](https://github.com/openclaw/openclaw/pull/114822)
- Keep Telegram photo albums together in one agent turn [#115401](https://github.com/openclaw/openclaw/pull/115401)
- Keep Telegram DM replies working after gateway restarts [#115434](https://github.com/openclaw/openclaw/pull/115434)
- Prevent false Telegram empty-response fallbacks [#115588](https://github.com/openclaw/openclaw/pull/115588)
- Keep Telegram retry checks from dropping messages [#115613](https://github.com/openclaw/openclaw/pull/115613)
- Stop retrying Telegram updates for unreachable recipients [#115640](https://github.com/openclaw/openclaw/pull/115640)
- Keep Telegram reactions in their originating forum topic [#116380](https://github.com/openclaw/openclaw/pull/116380)
- Preserve Telegram callback action ownership [#116383](https://github.com/openclaw/openclaw/pull/116383)
- Keep Telegram typing active through long and steered tasks [#116721](https://github.com/openclaw/openclaw/pull/116721)
- Validate native settings commands and preserve Telegram outcomes [#116773](https://github.com/openclaw/openclaw/pull/116773)
- Preserve Telegram edit previews and conversation context [#116818](https://github.com/openclaw/openclaw/pull/116818)
- Preserve Telegram album captions, retries, and topic routing [#116827](https://github.com/openclaw/openclaw/pull/116827)
- Recover rejected Telegram photos and preserve media filenames [#116886](https://github.com/openclaw/openclaw/pull/116886)
- Keep valid formatted captions attached to Telegram media [#116892](https://github.com/openclaw/openclaw/pull/116892)
- Preserve Telegram polls and inbound formatting [#116898](https://github.com/openclaw/openclaw/pull/116898)
- Confirm Telegram polling before long polling [#116970](https://github.com/openclaw/openclaw/pull/116970)
- Let managed Telegram gateways exit promptly [#116978](https://github.com/openclaw/openclaw/pull/116978)
- Allow Telegram media captions to be cleared [#116984](https://github.com/openclaw/openclaw/pull/116984)
- Honor Telegram DM history limits end to end [#116985](https://github.com/openclaw/openclaw/pull/116985)
- Fix Telegram mutations for topic-qualified targets [#117001](https://github.com/openclaw/openclaw/pull/117001)
- Fall back to text when Telegram blocks voice messages [#117022](https://github.com/openclaw/openclaw/pull/117022)
- Keep Telegram thread-bound replies responsive as saved conversations grow [#117081](https://github.com/openclaw/openclaw/pull/117081)
- Honor Telegram group media ingest before download skips [#117537](https://github.com/openclaw/openclaw/pull/117537)
- Preserve Telegram partial replies when a run fails [#117603](https://github.com/openclaw/openclaw/pull/117603)
- Stop retrying permanent Telegram media lookup failures [#117798](https://github.com/openclaw/openclaw/pull/117798)
- Prevent duplicate Telegram inbound-delivery settlement [#117812](https://github.com/openclaw/openclaw/pull/117812)
- Preserve Telegram media in multipart delivery receipts [#117863](https://github.com/openclaw/openclaw/pull/117863)
- fix(telegram): keep Unicode table columns aligned [#117890](https://github.com/openclaw/openclaw/pull/117890)
- Preserve canonical Telegram question choices across button layouts [#118049](https://github.com/openclaw/openclaw/pull/118049)
- Reject retired Telegram button input with recovery guidance [#118112](https://github.com/openclaw/openclaw/pull/118112)
- Preserve Telegram pre-tool commentary [#118287](https://github.com/openclaw/openclaw/pull/118287)
- Prevent Telegram durable-ingress replay loops [#118357](https://github.com/openclaw/openclaw/pull/118357)
- Show the effective Telegram channel model in status [#118548](https://github.com/openclaw/openclaw/pull/118548)
- Preserve the rest of long Telegram replies after a rejected chunk [#119080](https://github.com/openclaw/openclaw/pull/119080)
- Reject Telegram webhook and health-route collisions [#119268](https://github.com/openclaw/openclaw/pull/119268)
- Show a fallback when Telegram slash-command finals fail [#119530](https://github.com/openclaw/openclaw/pull/119530)
- Restore per-account Telegram reply modes [#120527](https://github.com/openclaw/openclaw/pull/120527)
- Preserve visible Telegram draft recovery after provider failure [#120626](https://github.com/openclaw/openclaw/pull/120626)
- Reuse saved Telegram photos in quoted replies [#120647](https://github.com/openclaw/openclaw/pull/120647)
- Keep Telegram chats responsive after media timeouts [#120706](https://github.com/openclaw/openclaw/pull/120706)
- Keep Telegram message routing fast as session history grows [#120774](https://github.com/openclaw/openclaw/pull/120774)
- Honor Telegram polling cooldowns in the watchdog [#120841](https://github.com/openclaw/openclaw/pull/120841)
- Apply root Telegram group rules across accounts [#120880](https://github.com/openclaw/openclaw/pull/120880)
- Clear removed Telegram command-menu locales [#120885](https://github.com/openclaw/openclaw/pull/120885)
- Keep Telegram channel DM replies in their topic [#120916](https://github.com/openclaw/openclaw/pull/120916)
- Restore Telegram Doctor repairs on source-run hosts [#120954](https://github.com/openclaw/openclaw/pull/120954)
- Keep Telegram tool progress transient when drafts are unavailable [#121048](https://github.com/openclaw/openclaw/pull/121048)
- Validate Telegram command-menu language codes and repair locale state [#121098](https://github.com/openclaw/openclaw/pull/121098)
- Preserve Telegram channel-DM topic identity [#121117](https://github.com/openclaw/openclaw/pull/121117)
- Keep Telegram command menus in a stable canonical order [#121239](https://github.com/openclaw/openclaw/pull/121239)
- Keep disabled Telegram progress hidden in verbose mode [#121395](https://github.com/openclaw/openclaw/pull/121395)
- Ignore Telegram commands in disabled forum topics [#121411](https://github.com/openclaw/openclaw/pull/121411)
- Preserve finalized Telegram previews when late media delivery fails [#121903](https://github.com/openclaw/openclaw/pull/121903)
- Preserve Telegram reply context across batched messages [#121907](https://github.com/openclaw/openclaw/pull/121907)
- Keep Telegram draft and final-message fallback behavior aligned [#121990](https://github.com/openclaw/openclaw/pull/121990)
- Prevent spurious Telegram fallbacks after suppressed approvals [#122091](https://github.com/openclaw/openclaw/pull/122091)
- Expose Telegram live-location updates to plugin hooks [#122185](https://github.com/openclaw/openclaw/pull/122185)
- Safely retry Telegram sends proven not to have started [#122741](https://github.com/openclaw/openclaw/pull/122741)
- fix(telegram): requeue aborted ingress claims [#122864](https://github.com/openclaw/openclaw/pull/122864)
- Prevent false Telegram migration blockers on multi-agent startup [#122877](https://github.com/openclaw/openclaw/pull/122877)
- Start Telegram correctly with explicit multi-agent account bindings [#123029](https://github.com/openclaw/openclaw/pull/123029)
- fix(channels/turn): clear pending history on error paths [#123193](https://github.com/openclaw/openclaw/pull/123193)
- Preserve Telegram bare-URL query separators [#123230](https://github.com/openclaw/openclaw/pull/123230)
- Retry abandoned Telegram messages instead of dropping them [#123528](https://github.com/openclaw/openclaw/pull/123528)
- Keep canceled Telegram requests out of transport health [#124588](https://github.com/openclaw/openclaw/pull/124588)
- Keep Telegram targeted commands on the correct routing lane [#125195](https://github.com/openclaw/openclaw/pull/125195)
- Keep Telegram replies in the correct direct-message topic [#126207](https://github.com/openclaw/openclaw/pull/126207)
- Finalize streamed Telegram questions without duplicate fallbacks [#126248](https://github.com/openclaw/openclaw/pull/126248)
- Keep ambient Telegram room events silent [#126527](https://github.com/openclaw/openclaw/pull/126527)
- Prevent duplicate replies after terminal question delivery failures [#126603](https://github.com/openclaw/openclaw/pull/126603)
- Prevent duplicate Telegram replies after final tool sends [#126625](https://github.com/openclaw/openclaw/pull/126625)
- fix(telegram): resolve General topic session-init retry loop via forum-flag cache [#126656](https://github.com/openclaw/openclaw/pull/126656)
- Make common Telegram emoji reactions reliable [#126739](https://github.com/openclaw/openclaw/pull/126739)
- Keep Telegram direct-topic self-history isolated [#127050](https://github.com/openclaw/openclaw/pull/127050)
- fix(telegram): prevent duplicate replies after attachment delivery failures [#128181](https://github.com/openclaw/openclaw/pull/128181)
- fix(telegram): preserve inbound link destinations and labels [#128297](https://github.com/openclaw/openclaw/pull/128297)
- fix(telegram): show answered status on media-caption questions [#128526](https://github.com/openclaw/openclaw/pull/128526)
- fix(cron): deliver failure alerts outside failed message threads [#128610](https://github.com/openclaw/openclaw/pull/128610)
- fix(telegram): preserve delivered rich fallback reply chunks [#128622](https://github.com/openclaw/openclaw/pull/128622)
- fix(cron): script notifications reach the wrong agent or topic [#128856](https://github.com/openclaw/openclaw/pull/128856)
- fix(reply): preserve explicit routing through block coalescing [#129271](https://github.com/openclaw/openclaw/pull/129271)
- fix(telegram): preserve rich message chunk limits [#129292](https://github.com/openclaw/openclaw/pull/129292)
- fix(telegram): show errors when message-only agent runs fail [#129311](https://github.com/openclaw/openclaw/pull/129311)
- fix(telegram): scheduled reactions target the wrong message [#129932](https://github.com/openclaw/openclaw/pull/129932)
- fix(telegram): prevent truncation when editing rich messages [#130526](https://github.com/openclaw/openclaw/pull/130526)
- fix(telegram): prevent duplicate sends after delivery observer failures [#130643](https://github.com/openclaw/openclaw/pull/130643)
- fix(telegram): surface media failures in the agent-facing body [#130849](https://github.com/openclaw/openclaw/pull/130849)
- Send Telegram final-mode TTS as one captioned voice note [#83988](https://github.com/openclaw/openclaw/pull/83988)
- Prevent false Telegram polling stalls after clock changes [#86541](https://github.com/openclaw/openclaw/pull/86541)
- Preserve Telegram delivery when rendered-empty text is rejected [#88810](https://github.com/openclaw/openclaw/pull/88810)
- Record automatic Telegram replies in the sent-message ledger [#92420](https://github.com/openclaw/openclaw/pull/92420)
- Verify Telegram messages land in the requested topic [#97361](https://github.com/openclaw/openclaw/pull/97361)
- Clean up split Telegram reasoning previews [#97828](https://github.com/openclaw/openclaw/pull/97828)
- fix(telegram): honor human delay for streamed replies (#69022) [15826de](https://github.com/openclaw/openclaw/commit/15826de)
- Keep Telegram DM topic labels valid at emoji boundaries [#101781](https://github.com/openclaw/openclaw/pull/101781)
- Release stale Telegram connections after cache eviction [#101783](https://github.com/openclaw/openclaw/pull/101783)
- Keep Telegram raw-update logs valid at emoji boundaries [#102567](https://github.com/openclaw/openclaw/pull/102567)
- Preserve Telegram delivery when HTML formatting overhead fills a chunk [#102999](https://github.com/openclaw/openclaw/pull/102999)
- Keep emoji intact in long Telegram model labels [#104037](https://github.com/openclaw/openclaw/pull/104037)
- Allow Telegram polls with up to 12 options [#104303](https://github.com/openclaw/openclaw/pull/104303)
- fix(telegram): break long HTML chunks on word boundaries, not mid-word [#104473](https://github.com/openclaw/openclaw/pull/104473)
- Keep Telegram approval buttons within the callback limit [#104942](https://github.com/openclaw/openclaw/pull/104942)
- Prevent Telegram legacy migration no-op loops [#108744](https://github.com/openclaw/openclaw/pull/108744)
- Release stalled Telegram lookup connections [#109007](https://github.com/openclaw/openclaw/pull/109007)
- Stop Telegram startup probes promptly when cancelled [#109604](https://github.com/openclaw/openclaw/pull/109604)
- fix(telegram): bound invalid allowFrom warn dedupe with the shared dedupe cache [#109646](https://github.com/openclaw/openclaw/pull/109646)
- Make capacity-limited Telegram state migration progress safely [#109679](https://github.com/openclaw/openclaw/pull/109679)
- Reject malformed Telegram table spans [#109962](https://github.com/openclaw/openclaw/pull/109962)
- Preserve Telegram Web App buttons in direct-chat actions [#111416](https://github.com/openclaw/openclaw/pull/111416)
- Accept valid emoji in Telegram forum topic names [#111443](https://github.com/openclaw/openclaw/pull/111443)
- Unify media kinds and fix Telegram reply image labels [#112063](https://github.com/openclaw/openclaw/pull/112063)
- Correct Telegram 401 recovery guidance [#112492](https://github.com/openclaw/openclaw/pull/112492)
- Render authored Telegram date and time tags correctly [#112911](https://github.com/openclaw/openclaw/pull/112911)
- Report finalized Telegram preview sends to plugins [#116214](https://github.com/openclaw/openclaw/pull/116214)
- Deduplicate Claude CLI tool progress in Telegram [#116350](https://github.com/openclaw/openclaw/pull/116350)
- Keep queued Telegram tool progress in one message [#116685](https://github.com/openclaw/openclaw/pull/116685)
- Explain invalid Telegram queue arguments instead of reporting a model failure [#116726](https://github.com/openclaw/openclaw/pull/116726)
- Correlate Telegram deliveries with the explicitly selected topic [#117229](https://github.com/openclaw/openclaw/pull/117229)
- Hide disabled Telegram send actions from discovery [#117241](https://github.com/openclaw/openclaw/pull/117241)
- Ignore Telegram commands addressed to other bots [#118024](https://github.com/openclaw/openclaw/pull/118024)
- Preserve Markdown tables in Telegram native-command replies [#118257](https://github.com/openclaw/openclaw/pull/118257)
- Classify Telegram media-size failures correctly [#120757](https://github.com/openclaw/openclaw/pull/120757)
- Clean up Telegram webhook resources after any startup failure [#120788](https://github.com/openclaw/openclaw/pull/120788)
- Acquire the Telegram polling queue before starting its worker [#120800](https://github.com/openclaw/openclaw/pull/120800)
- Prevent duplicate Telegram attachments in streamed replies [#121141](https://github.com/openclaw/openclaw/pull/121141)
- Preserve structured Telegram controls in outbound delivery [#121428](https://github.com/openclaw/openclaw/pull/121428)
- Preserve Telegram Direct Messages topics during writeback [#127010](https://github.com/openclaw/openclaw/pull/127010)
- fix(telegram): preserve exact inline callback action values [#127735](https://github.com/openclaw/openclaw/pull/127735)
- fix(telegram): route commentary through one frozen progress owner [#128259](https://github.com/openclaw/openclaw/pull/128259)
- fix(telegram): delete business callback messages through their owning account [#128358](https://github.com/openclaw/openclaw/pull/128358)
- fix(telegram): describe reaction emoji syntax [#129080](https://github.com/openclaw/openclaw/pull/129080)
- fix(telegram): deduplicate state migration targets [#129096](https://github.com/openclaw/openclaw/pull/129096)
- fix(telegram): preserve exact whitespace in selected reply quotes [#129254](https://github.com/openclaw/openclaw/pull/129254)
- fix(telegram): preserve sent replies when required pins fail [#129342](https://github.com/openclaw/openclaw/pull/129342)
- fix(telegram): allow polls lasting up to seven days [#129461](https://github.com/openclaw/openclaw/pull/129461)
- fix(cli): honor prefixed channel targets when creating threads [#129671](https://github.com/openclaw/openclaw/pull/129671)
- fix(telegram): show buttonless ask-user prompts [#130200](https://github.com/openclaw/openclaw/pull/130200)
- fix(telegram): history claims rejected voice attachments were delivered [#130399](https://github.com/openclaw/openclaw/pull/130399)
- fix(telegram): preserve literal backticks in inbound code [#130800](https://github.com/openclaw/openclaw/pull/130800)
- Clear Telegram generic callback buttons after use [#90169](https://github.com/openclaw/openclaw/pull/90169)
- fix(telegram): accept threadName for forum topic actions [#99505](https://github.com/openclaw/openclaw/pull/99505)

</details>

</Accordion>

<Accordion title="Discord">

Discord now supports opt-in Activities that open configured OpenClaw widgets directly inside Discord. Voice agents can also see who is in the room, use different wake-name rules for one-on-one and group conversations, and optionally join only while a human is present. Activities require explicit channel configuration, a Discord client secret, and a public HTTPS route; occupied-room auto-join is a separate option and does not change the existing always-on default.

Message retries now reuse their identity to reduce duplicates, interaction replies settle in order, stale reply context is discarded, and repeated resume failures can recover without restarting all of OpenClaw. Forum-thread sends still remain uncertain when retrying them could produce a duplicate.

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

**Improvements**

- Narrate progress drafts and attach Discord activity receipts [#103463](https://github.com/openclaw/openclaw/pull/103463)
- Keep Discord voice agents aware of channel participants [#107004](https://github.com/openclaw/openclaw/pull/107004)
- Add opt-in Discord Activity widgets [#107442](https://github.com/openclaw/openclaw/pull/107442)
- Route Discord online arrivals to an agent [#107451](https://github.com/openclaw/openclaw/pull/107451)
- Adapt Discord voice wake names to room size [#108696](https://github.com/openclaw/openclaw/pull/108696)
- Support Discord bots without Message Content intent [#116962](https://github.com/openclaw/openclaw/pull/116962)
- Auto-join Discord voice rooms while occupied [#125974](https://github.com/openclaw/openclaw/pull/125974)
- Present canonical widgets through Discord Activities [#126294](https://github.com/openclaw/openclaw/pull/126294)
- Show background subagent progress in Discord [#95604](https://github.com/openclaw/openclaw/pull/95604)

**Bug fixes**

- Recover Discord after repeated Gateway resume failures [#103596](https://github.com/openclaw/openclaw/pull/103596)
- Prevent duplicate Discord messages during ambiguous retries [#103867](https://github.com/openclaw/openclaw/pull/103867)
- Prevent Discord replies from using unrelated stale context [#114716](https://github.com/openclaw/openclaw/pull/114716)
- Make Discord interaction responses retryable and race-safe [#117417](https://github.com/openclaw/openclaw/pull/117417)
- Make Discord voice sessions follow the latest lifecycle event [#122479](https://github.com/openclaw/openclaw/pull/122479)
- fix(discord): deliver embed-only and component-only messages [#128152](https://github.com/openclaw/openclaw/pull/128152)
- fix(discord): prevent voice replies from cutting off during playback [#130346](https://github.com/openclaw/openclaw/pull/130346)
- Keep Discord gateway restarts safe from late errors [#101617](https://github.com/openclaw/openclaw/pull/101617)
- Reset Discord progress drafts between queued turns [#102341](https://github.com/openclaw/openclaw/pull/102341)
- Stream Discord multipart uploads without eager buffering [#102972](https://github.com/openclaw/openclaw/pull/102972)
- Preserve Discord code formatting across reasoning chunks [#103166](https://github.com/openclaw/openclaw/pull/103166)
- Honor Discord parent-channel thread archive settings [#103413](https://github.com/openclaw/openclaw/pull/103413)
- Keep Discord thread persona names valid at emoji boundaries [#103543](https://github.com/openclaw/openclaw/pull/103543)
- Prevent silent Discord message loss during session conflicts [#103562](https://github.com/openclaw/openclaw/pull/103562)
- Stop stalled Discord directory lookups from hanging indefinitely [#104290](https://github.com/openclaw/openclaw/pull/104290)
- Refresh Discord model picker state after hot reloads [#104635](https://github.com/openclaw/openclaw/pull/104635)
- Retry Discord preview cleanup after transient failures [#104893](https://github.com/openclaw/openclaw/pull/104893)
- Omit invalid Discord component accent colors [#105387](https://github.com/openclaw/openclaw/pull/105387)
- Bound stalled Discord status response reads [#106036](https://github.com/openclaw/openclaw/pull/106036)
- Honor Discord command owners in voice conversations [#106155](https://github.com/openclaw/openclaw/pull/106155)
- Preserve Discord reply context when referenced messages are omitted [#106176](https://github.com/openclaw/openclaw/pull/106176)
- Keep Discord listener slots until work actually settles [#106398](https://github.com/openclaw/openclaw/pull/106398)
- Show only agent-authored status in default Discord progress drafts [#107338](https://github.com/openclaw/openclaw/pull/107338)
- Prevent Discord presence wake floods after reconnects [#107969](https://github.com/openclaw/openclaw/pull/107969)
- Limit Discord presence greetings to channel viewers [#108448](https://github.com/openclaw/openclaw/pull/108448)
- Deliver agent replies to named Discord channels [#108584](https://github.com/openclaw/openclaw/pull/108584)
- Preserve Discord forum targets for CLI-backed plugin tools [#108628](https://github.com/openclaw/openclaw/pull/108628)
- Discord Activities load correctly from packaged gateways [#108725](https://github.com/openclaw/openclaw/pull/108725)
- Open the newest Discord Activity when the launch ID is missing [#108817](https://github.com/openclaw/openclaw/pull/108817)
- Stop stalled Discord webhook sends from hanging indefinitely [#109076](https://github.com/openclaw/openclaw/pull/109076)
- Prevent Discord lifecycle listener buildup across restarts [#109108](https://github.com/openclaw/openclaw/pull/109108)
- Resolve Discord Activity launches in multi-widget channels [#109194](https://github.com/openclaw/openclaw/pull/109194)
- Keep long Discord code replies within message limits [#110148](https://github.com/openclaw/openclaw/pull/110148)
- Preserve Discord messages across dispatch crashes [#110274](https://github.com/openclaw/openclaw/pull/110274)
- Authorize Discord widgets by channel audience [#110522](https://github.com/openclaw/openclaw/pull/110522)
- Stop stalled Discord Activity token uploads from hanging [#110667](https://github.com/openclaw/openclaw/pull/110667)
- fix(discord): sustained gateway bursts stop growing memory [#110954](https://github.com/openclaw/openclaw/pull/110954)
- Close Discord voice-upload sockets after successful sends [#111269](https://github.com/openclaw/openclaw/pull/111269)
- Recover Discord Activity widgets from stalled Gateway responses [#111380](https://github.com/openclaw/openclaw/pull/111380)
- Keep Discord tool activity visible during verbose progress [#111947](https://github.com/openclaw/openclaw/pull/111947)
- Preserve Discord bold and Mattermost native tables [#113037](https://github.com/openclaw/openclaw/pull/113037)
- Migrate shipped Discord DM config before plugin convergence [#113280](https://github.com/openclaw/openclaw/pull/113280)
- Filter Discord pending history by sender visibility [#113407](https://github.com/openclaw/openclaw/pull/113407)
- Warn when Discord allowlists still permit every member [#113414](https://github.com/openclaw/openclaw/pull/113414)
- Preserve Discord attachment content types [#114460](https://github.com/openclaw/openclaw/pull/114460)
- Prevent Discord previews from exposing pre-hook replies [#114904](https://github.com/openclaw/openclaw/pull/114904)
- Keep Discord reasoning replies within message limits [#115092](https://github.com/openclaw/openclaw/pull/115092)
- Require requester identity for privileged Discord tool actions [#115260](https://github.com/openclaw/openclaw/pull/115260)
- Reject malformed UTF-8 in Discord API responses [#115918](https://github.com/openclaw/openclaw/pull/115918)
- Keep Discord activity receipts with adopted thread replies [#116119](https://github.com/openclaw/openclaw/pull/116119)
- Preserve Discord webhook timeout errors [#116155](https://github.com/openclaw/openclaw/pull/116155)
- Keep Discord forum media in one thread and preserve delivery receipts [#116750](https://github.com/openclaw/openclaw/pull/116750)
- Retry Discord webhooks and reactions only when safe [#116821](https://github.com/openclaw/openclaw/pull/116821)
- Clean up deleted Discord threads immediately [#116823](https://github.com/openclaw/openclaw/pull/116823)
- Prevent duplicate Discord voice-message fallbacks [#117127](https://github.com/openclaw/openclaw/pull/117127)
- Deliver long Discord thread starters in safe chunks [#117354](https://github.com/openclaw/openclaw/pull/117354)
- Discord queued-message cleanup continues after a settlement failure [#117524](https://github.com/openclaw/openclaw/pull/117524)
- Restore Discord workspace voice and thread attachments [#117767](https://github.com/openclaw/openclaw/pull/117767)
- Preserve accepted Discord replies after partial delivery failures [#118354](https://github.com/openclaw/openclaw/pull/118354)
- Show a private warning when Discord slash-command finals fail [#118545](https://github.com/openclaw/openclaw/pull/118545)
- Report warming Discord message indexes instead of false success [#118573](https://github.com/openclaw/openclaw/pull/118573)
- Preserve Discord reply privacy after interaction acknowledgments [#118611](https://github.com/openclaw/openclaw/pull/118611)
- Bound retained speech in Discord realtime voice [#119250](https://github.com/openclaw/openclaw/pull/119250)
- Preserve authored Discord component order [#119506](https://github.com/openclaw/openclaw/pull/119506)
- fix(discord): preserve MIME extension for component uploads [#119671](https://github.com/openclaw/openclaw/pull/119671)
- Reset Discord thread sessions across all routed agents [#120259](https://github.com/openclaw/openclaw/pull/120259)
- Surface failed Discord attachment downloads [#120269](https://github.com/openclaw/openclaw/pull/120269)
- Make Discord progress drafts an explicit opt-in [#120376](https://github.com/openclaw/openclaw/pull/120376)
- Deduplicate Discord directory users across servers [#120797](https://github.com/openclaw/openclaw/pull/120797)
- Keep multi-part Discord forum replies in one thread [#120857](https://github.com/openclaw/openclaw/pull/120857)
- Preserve repeated Discord interactive actions [#121155](https://github.com/openclaw/openclaw/pull/121155)
- Keep Discord forum reply batches in one thread [#121165](https://github.com/openclaw/openclaw/pull/121165)
- Unblock Discord message lanes after retry exhaustion and cancellation [#122878](https://github.com/openclaw/openclaw/pull/122878)
- Keep overlapping Discord voice turns with the right speaker [#123243](https://github.com/openclaw/openclaw/pull/123243)
- Stop Discord voice replies after leaving a session [#124030](https://github.com/openclaw/openclaw/pull/124030)
- Keep stable Discord DM configs upgradeable [#125359](https://github.com/openclaw/openclaw/pull/125359)
- Clean streamed Discord speech and report real fallbacks [#125686](https://github.com/openclaw/openclaw/pull/125686)
- Route Discord polls through canonical delivery [#126250](https://github.com/openclaw/openclaw/pull/126250)
- Preserve text from every Discord message embed [#126752](https://github.com/openclaw/openclaw/pull/126752)
- fix(discord): resolve configured default account for presence actions [#127748](https://github.com/openclaw/openclaw/pull/127748)
- fix(discord): revalidate delivery authority per send [#128357](https://github.com/openclaw/openclaw/pull/128357)
- fix(discord): honor explicit component attachment filenames [#128401](https://github.com/openclaw/openclaw/pull/128401)
- fix(discord): parse stringified message components [#128498](https://github.com/openclaw/openclaw/pull/128498)
- fix(discord): a failing slash command leaves the user watching a spinner that never resolves [#128630](https://github.com/openclaw/openclaw/pull/128630)
- fix(discord): super reactions disappear when ordinary reactions already exist [#128649](https://github.com/openclaw/openclaw/pull/128649)
- fix(discord): keep forum attachments and receipts in their first thread [#128765](https://github.com/openclaw/openclaw/pull/128765)
- fix(discord): preserve per-button reusable settings [#129068](https://github.com/openclaw/openclaw/pull/129068)
- fix(discord): video captions disappear from delivery receipts [#129134](https://github.com/openclaw/openclaw/pull/129134)
- refactor(discord): centralize voice resource lifecycle [#130415](https://github.com/openclaw/openclaw/pull/130415)
- Hide failed tool progress from Discord drafts [#92517](https://github.com/openclaw/openclaw/pull/92517)
- fix(discord): upload-file silently drops a caption (#124255) [60136ec](https://github.com/openclaw/openclaw/commit/60136ec)
- fix(discord): upload-file with a base64 buffer fails without pointing at send (#123748) [b9b6ca4](https://github.com/openclaw/openclaw/commit/b9b6ca4)
- Preserve Discord video captions for encoded filenames [#101815](https://github.com/openclaw/openclaw/pull/101815)
- Bound Discord voice-message uploads with route-specific timeouts [#102863](https://github.com/openclaw/openclaw/pull/102863)
- Honor Discord forum archive defaults for implicit threads [#103033](https://github.com/openclaw/openclaw/pull/103033)
- Bound Discord PluralKit lookup delays [#104121](https://github.com/openclaw/openclaw/pull/104121)
- Keep Discord voice failure diagnostics bounded and readable [#104230](https://github.com/openclaw/openclaw/pull/104230)
- fix(discord): add timeout to guarded gateway metadata fetches [#104580](https://github.com/openclaw/openclaw/pull/104580)
- Preserve emoji in Discord voice transcripts [#104896](https://github.com/openclaw/openclaw/pull/104896)
- Keep Discord slash commands deployable at the 100-command cap [#105280](https://github.com/openclaw/openclaw/pull/105280)
- Reject unsupported Discord thread archive durations early [#107610](https://github.com/openclaw/openclaw/pull/107610)
- Preserve complete emoji in Discord voice participant labels [#108278](https://github.com/openclaw/openclaw/pull/108278)
- Prevent redundant Discord command deploys across Gateway processes [#108381](https://github.com/openclaw/openclaw/pull/108381)
- Stop Discord typing flashes for silently handled turns [#108449](https://github.com/openclaw/openclaw/pull/108449)
- Stop Discord READY retry waits immediately on abort [#108561](https://github.com/openclaw/openclaw/pull/108561)
- Parse Discord forum-thread widget targets [#108603](https://github.com/openclaw/openclaw/pull/108603)
- Keep Unicode model-picker buckets valid in Discord [#109514](https://github.com/openclaw/openclaw/pull/109514)
- Release failed Discord Activity OAuth responses [#109869](https://github.com/openclaw/openclaw/pull/109869)
- Stop Discord rate-limit retries when work is canceled [#109913](https://github.com/openclaw/openclaw/pull/109913)
- Skip PluralKit lookup for ordinary Discord messages [#111617](https://github.com/openclaw/openclaw/pull/111617)
- Reject malformed PluralKit message envelopes [#111712](https://github.com/openclaw/openclaw/pull/111712)
- Reject malformed UTF-8 in Discord status probes [#111734](https://github.com/openclaw/openclaw/pull/111734)
- Preserve Discord bot mentions when hydration fails [#111860](https://github.com/openclaw/openclaw/pull/111860)
- Preserve Discord component waiter message ownership [#117492](https://github.com/openclaw/openclaw/pull/117492)
- Clarify empty Discord message searches [#118195](https://github.com/openclaw/openclaw/pull/118195)
- Explain Discord form-opening failures with a private recovery message [#119657](https://github.com/openclaw/openclaw/pull/119657)
- Remove only the bot's own Discord reactions [#120785](https://github.com/openclaw/openclaw/pull/120785)
- fix(discord): malformed gateway HELLO frame kills the bot's socket listener [#121468](https://github.com/openclaw/openclaw/pull/121468)
- Warn when Discord persona delivery falls back [#124650](https://github.com/openclaw/openclaw/pull/124650)
- Keep Discord progress drafts after error replies [#125140](https://github.com/openclaw/openclaw/pull/125140)
- Preserve Discord reply context for media-only messages [#126204](https://github.com/openclaw/openclaw/pull/126204)
- fix(discord): surface failed voice notes after text fallback [#127876](https://github.com/openclaw/openclaw/pull/127876)
- fix(discord): restore question receipts after rejected acknowledgements [#128293](https://github.com/openclaw/openclaw/pull/128293)
- fix(discord): refresh stale starter messages in active threads [#128404](https://github.com/openclaw/openclaw/pull/128404)
- fix(discord): classify announcement threads consistently [#128568](https://github.com/openclaw/openclaw/pull/128568)
- fix(discord): report the messages actually delivered [#128575](https://github.com/openclaw/openclaw/pull/128575)
- Cache unavailable Discord thread starters [#128653](https://github.com/openclaw/openclaw/pull/128653)
- fix(discord): honor explicit names for new forum posts [#129294](https://github.com/openclaw/openclaw/pull/129294)
- fix(discord): prevent accidental mentions inside unfinished code [#129338](https://github.com/openclaw/openclaw/pull/129338)
- fix(discord): honor silent sticker and thread-reply delivery [#129479](https://github.com/openclaw/openclaw/pull/129479)
- fix(discord): preserve sticker delivery receipts [#129872](https://github.com/openclaw/openclaw/pull/129872)
- fix(discord): retry failed draft preview cleanup [#130006](https://github.com/openclaw/openclaw/pull/130006)
- fix(discord): remove late previews after transient delete failures [#130392](https://github.com/openclaw/openclaw/pull/130392)
- fix(discord): keep mention labels literal in text substitution [#130778](https://github.com/openclaw/openclaw/pull/130778)

**Documentation**

- Correct the Fly.io Discord channel example [#102129](https://github.com/openclaw/openclaw/pull/102129)
- Correct Discord channel keys in multi-agent examples [#106201](https://github.com/openclaw/openclaw/pull/106201)
- Document Discord allowlists and ambient-room prerequisites [#113692](https://github.com/openclaw/openclaw/pull/113692)
- Remove retired Discord subagent progress runtime [#117802](https://github.com/openclaw/openclaw/pull/117802)
- Remove retired Discord config keys from documentation [#118216](https://github.com/openclaw/openclaw/pull/118216)

</details>

</Accordion>

<Accordion title="Slack">

Slack progress now stays in one conversation from the first status through the final answer, keeping the running commentary, work steps, and answer inside one streamed message unless an operator chooses the more compact alternative. Charts and tables can render natively too, with readable text preserved when Slack cannot use the native form.

One organization-installed app can also serve the Enterprise Grid workspaces Slack grants it, with messages, actions, approvals, and proactive delivery bound to the right workspace. Destinations outside the current conversation require an explicit workspace, requests without verified workspace identity are rejected, and relay mode plus org-wide surfaces remain unsupported.

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

**Improvements**

- Support Slack Enterprise Grid org-wide installs [#102372](https://github.com/openclaw/openclaw/pull/102372)
- Add portable charts with native Slack rendering [#102635](https://github.com/openclaw/openclaw/pull/102635)
- Add portable table presentation blocks [#103583](https://github.com/openclaw/openclaw/pull/103583)
- Add Slack Agent View support with Assistant View compatibility [#103895](https://github.com/openclaw/openclaw/pull/103895)
- Harden Slack native chart and table delivery [#104539](https://github.com/openclaw/openclaw/pull/104539)
- Add opt-in Slack presence greetings [#108510](https://github.com/openclaw/openclaw/pull/108510)
- Slack progress drafts use shared live status and fresh final replies [#109336](https://github.com/openclaw/openclaw/pull/109336)
- Add opt-in Slack user identity [#109837](https://github.com/openclaw/openclaw/pull/109837)
- Turn Slack progress updates into the final reply [#119480](https://github.com/openclaw/openclaw/pull/119480)
- Add workspace-scoped Slack Grid approvals [#120942](https://github.com/openclaw/openclaw/pull/120942)
- Add workspace-scoped Slack Grid reaction and pin listeners [#120944](https://github.com/openclaw/openclaw/pull/120944)
- Route Slack Enterprise Grid actions and events by workspace [#121014](https://github.com/openclaw/openclaw/pull/121014)
- Add automatic workspace-safe Slack Enterprise Grid support [#121373](https://github.com/openclaw/openclaw/pull/121373)
- Make live Slack session cards the default [#122552](https://github.com/openclaw/openclaw/pull/122552)
- Unify Slack progress into one streamed message [#122976](https://github.com/openclaw/openclaw/pull/122976)
- Add compact commentary-only Slack progress [#126480](https://github.com/openclaw/openclaw/pull/126480)
- Accept spoken mentions in Slack audio clips [#103416](https://github.com/openclaw/openclaw/pull/103416)
- Turn Slack progress drafts into the final reply [#119376](https://github.com/openclaw/openclaw/pull/119376)
- Log Slack typing reaction failures [#103303](https://github.com/openclaw/openclaw/pull/103303)

**Bug fixes**

- Prevent message reads from falling back to the wrong conversation [#108637](https://github.com/openclaw/openclaw/pull/108637)
- Preserve repeated Slack events and retry transient failures [#116384](https://github.com/openclaw/openclaw/pull/116384)
- Preserve Slack thread reads, edit formatting, and complete replies [#116915](https://github.com/openclaw/openclaw/pull/116915)
- Recover Slack identity after transient startup failures [#117253](https://github.com/openclaw/openclaw/pull/117253)
- Isolate Slack interactive bindings to the correct conversation [#118662](https://github.com/openclaw/openclaw/pull/118662)
- Route Slack Enterprise Grid messages by workspace [#120087](https://github.com/openclaw/openclaw/pull/120087)
- Accept organization-wide Slack user IDs [#122934](https://github.com/openclaw/openclaw/pull/122934)
- Keep Slack multi-party DMs on one conversation session [#102811](https://github.com/openclaw/openclaw/pull/102811)
- Preserve Slack IDs at API boundaries [#103214](https://github.com/openclaw/openclaw/pull/103214)
- Stop stalled Slack file uploads safely [#103442](https://github.com/openclaw/openclaw/pull/103442)
- Preserve unrelated Slack action rows after interactions [#103445](https://github.com/openclaw/openclaw/pull/103445)
- Use read-scoped Slack lookups for conversation metadata [#103468](https://github.com/openclaw/openclaw/pull/103468)
- Keep malformed Slack delivery signatures from interrupting reconciliation [#105492](https://github.com/openclaw/openclaw/pull/105492)
- Report degraded Slack health when bot identity is missing [#105556](https://github.com/openclaw/openclaw/pull/105556)
- Log structured warnings for disabled Slack channels [#105790](https://github.com/openclaw/openclaw/pull/105790)
- Bound stalled Slack startup identity checks [#105893](https://github.com/openclaw/openclaw/pull/105893)
- Bound Slack user-name cache growth [#105978](https://github.com/openclaw/openclaw/pull/105978)
- Bound Slack directory and allowlist lookups [#106643](https://github.com/openclaw/openclaw/pull/106643)
- Bound Slack read actions when the API stalls [#107103](https://github.com/openclaw/openclaw/pull/107103)
- Preserve queued Slack replies [#107820](https://github.com/openclaw/openclaw/pull/107820)
- Keep Slack health checks inside their deadline [#107835](https://github.com/openclaw/openclaw/pull/107835)
- Make Slack event admission durable across Bolt and relay [#109910](https://github.com/openclaw/openclaw/pull/109910)
- Release unread Slack ownership-check responses [#111231](https://github.com/openclaw/openclaw/pull/111231)
- Prevent exposed Markdown emphasis markers in Slack CJK text [#111575](https://github.com/openclaw/openclaw/pull/111575)
- Preserve native Slack tables through outbound handoff [#111955](https://github.com/openclaw/openclaw/pull/111955)
- Restore Slack thread context for legacy session keys [#114009](https://github.com/openclaw/openclaw/pull/114009)
- Preserve Slack attachment type and size for agents [#114502](https://github.com/openclaw/openclaw/pull/114502)
- fix(slack): dispatch independently routed threads concurrently [#114552](https://github.com/openclaw/openclaw/pull/114552)
- Bound stalled Slack read-only API calls [#115018](https://github.com/openclaw/openclaw/pull/115018)
- Prevent long Slack edits from failing [#115027](https://github.com/openclaw/openclaw/pull/115027)
- Bound Slack response_url body inspection [#115093](https://github.com/openclaw/openclaw/pull/115093)
- Keep Slack previews with custom identity [#115114](https://github.com/openclaw/openclaw/pull/115114)
- Preserve pasted Slack tables in inbound messages [#115163](https://github.com/openclaw/openclaw/pull/115163)
- Deduplicate same-post Slack message and mention events [#115302](https://github.com/openclaw/openclaw/pull/115302)
- Prevent duplicate Slack group-DM mentions [#115468](https://github.com/openclaw/openclaw/pull/115468)
- Prevent duplicate Slack group-DM mention replies [#115528](https://github.com/openclaw/openclaw/pull/115528)
- Recover Slack replies during Gateway startup replay [#115991](https://github.com/openclaw/openclaw/pull/115991)
- Explain Slack channel-allowlist denials privately [#116618](https://github.com/openclaw/openclaw/pull/116618)
- Preserve context in Slack group-DM thread follow-ups [#116660](https://github.com/openclaw/openclaw/pull/116660)
- Recover Slack identity after transient startup authentication failures [#117060](https://github.com/openclaw/openclaw/pull/117060)
- Retry Slack thread lookups instead of silently dropping messages [#117135](https://github.com/openclaw/openclaw/pull/117135)
- Prevent stalled Slack presence checks from blocking shutdown [#117478](https://github.com/openclaw/openclaw/pull/117478)
- Restore Slack workspace-relative attachments [#117728](https://github.com/openclaw/openclaw/pull/117728)
- Preserve complete Slack native-data fallbacks [#117809](https://github.com/openclaw/openclaw/pull/117809)
- Deliver Slack modal submissions and closures to agents [#118123](https://github.com/openclaw/openclaw/pull/118123)
- Finalize the Slack question card that was actually delivered [#118450](https://github.com/openclaw/openclaw/pull/118450)
- Clean up partially started Slack streams after fallback [#118617](https://github.com/openclaw/openclaw/pull/118617)
- Restore GovSlack media with isolated trust boundaries [#118695](https://github.com/openclaw/openclaw/pull/118695)
- Authorize Slack reads before applying limits [#118736](https://github.com/openclaw/openclaw/pull/118736)
- Render Slack progress Markdown without stray backslashes [#119373](https://github.com/openclaw/openclaw/pull/119373)
- Add file extensions to unnamed Slack uploads [#119399](https://github.com/openclaw/openclaw/pull/119399)
- Keep Slack replies below newer human messages [#119832](https://github.com/openclaw/openclaw/pull/119832)
- Isolate Slack thread caches and persist channel renames safely [#120022](https://github.com/openclaw/openclaw/pull/120022)
- Keep Slack turns running when a Codex plugin is disabled [#120312](https://github.com/openclaw/openclaw/pull/120312)
- Prevent Slack directory pagination loops [#120445](https://github.com/openclaw/openclaw/pull/120445)
- Stop Slack authorization from hanging on cursor loops [#120686](https://github.com/openclaw/openclaw/pull/120686)
- Enable team-scoped Slack exec approvals for Enterprise Grid [#120874](https://github.com/openclaw/openclaw/pull/120874)
- Tell agents when Slack forwarded images are unavailable [#122108](https://github.com/openclaw/openclaw/pull/122108)
- Retry Slack member events after transient authorization lookups [#122356](https://github.com/openclaw/openclaw/pull/122356)
- Deliver Slack reaction events to thread-scoped turns [#122363](https://github.com/openclaw/openclaw/pull/122363)
- Prevent duplicate Slack Socket Mode connections [#122624](https://github.com/openclaw/openclaw/pull/122624)
- Preserve original image bytes for forced Slack uploads [#122667](https://github.com/openclaw/openclaw/pull/122667)
- Stop repeated Slack outage notices in active conversations [#122782](https://github.com/openclaw/openclaw/pull/122782)
- Prevent Slack progress cards from remaining stuck on Working [#122816](https://github.com/openclaw/openclaw/pull/122816)
- Apply updated global settings to new Slack messages [#123373](https://github.com/openclaw/openclaw/pull/123373)
- Preserve Slack dispatch custody for structured messages [#123710](https://github.com/openclaw/openclaw/pull/123710)
- Remove tool-call receipts from finished Slack progress cards [#123851](https://github.com/openclaw/openclaw/pull/123851)
- Restore bot message delivery on Slack Enterprise Grid [#125009](https://github.com/openclaw/openclaw/pull/125009)
- Require confirmed Slack message identity for delivery success [#125762](https://github.com/openclaw/openclaw/pull/125762)
- fix(slack): preserve long legacy interactive text [#127994](https://github.com/openclaw/openclaw/pull/127994)
- fix(slack): keep failed message retries in their original thread [#128182](https://github.com/openclaw/openclaw/pull/128182)
- fix(slack): unify channel account readiness [#128322](https://github.com/openclaw/openclaw/pull/128322)
- fix(slack): prevent long message edits from silently losing text [#128613](https://github.com/openclaw/openclaw/pull/128613)
- fix(slack): keep partial preview stable across reasoning turns [#128626](https://github.com/openclaw/openclaw/pull/128626)
- fix(slack): keep edited and deleted messages in their original threads [#128768](https://github.com/openclaw/openclaw/pull/128768)
- fix(slack): reject file downloads outside requested conversation [#128903](https://github.com/openclaw/openclaw/pull/128903)
- fix(slack): wake yielded parents after subagent completion [#129023](https://github.com/openclaw/openclaw/pull/129023)
- fix(slack): prevent duplicate files across direct and forwarded attachments [#129065](https://github.com/openclaw/openclaw/pull/129065)
- fix(slack): explicit replies land in the requested thread [#129069](https://github.com/openclaw/openclaw/pull/129069)
- fix(slack): prevent duplicate question buttons and extra messages [#129445](https://github.com/openclaw/openclaw/pull/129445)
- fix(slack): stop giving HTTP onboarding an invalid Socket manifest [#130234](https://github.com/openclaw/openclaw/pull/130234)
- fix(slack): preserve user names in rich-text mentions [#130816](https://github.com/openclaw/openclaw/pull/130816)
- fix(slack): record reasons for failed and omitted attachments [#130857](https://github.com/openclaw/openclaw/pull/130857)
- fix(slack): preserve table formatting in edits and previews [#130979](https://github.com/openclaw/openclaw/pull/130979)
- Prevent duplicate Slack reply controls [#101474](https://github.com/openclaw/openclaw/pull/101474)
- Show the active Slack command in App Home [#102340](https://github.com/openclaw/openclaw/pull/102340)
- Correct Slack reply metadata without breaking standalone message threading [#102905](https://github.com/openclaw/openclaw/pull/102905)
- Separate Slack commentary from tool progress [#103995](https://github.com/openclaw/openclaw/pull/103995)
- Preserve canonical Slack block delivery receipts [#104563](https://github.com/openclaw/openclaw/pull/104563)
- Prefer configured Slack slash commands [#104736](https://github.com/openclaw/openclaw/pull/104736)
- Hide misleading Slack typing indicators for room events [#105813](https://github.com/openclaw/openclaw/pull/105813)
- Enforce the Slack upload timeout across transport phases [#106496](https://github.com/openclaw/openclaw/pull/106496)
- Use the default Slack forwarder when the environment override is blank [#110675](https://github.com/openclaw/openclaw/pull/110675)
- Prevent Slack directory pagination from hanging [#115056](https://github.com/openclaw/openclaw/pull/115056)
- Keep Slack outbound hooks ahead of previews [#115357](https://github.com/openclaw/openclaw/pull/115357)
- Stop false Slack message-drop warnings in doctor [#115563](https://github.com/openclaw/openclaw/pull/115563)
- Keep configured Slack slash commands consistent in App Home [#118735](https://github.com/openclaw/openclaw/pull/118735)
- Preserve captions on Slack file uploads [#121047](https://github.com/openclaw/openclaw/pull/121047)
- Keep joined Slack threads active beyond 24 hours [#121708](https://github.com/openclaw/openclaw/pull/121708)
- fix(slack): strip Exec failed traces from streaming replies [#122827](https://github.com/openclaw/openclaw/pull/122827)
- Keep Slack thread replies on the routed agent [#123202](https://github.com/openclaw/openclaw/pull/123202)
- Keep cached Slack identity and allowlists live [#123403](https://github.com/openclaw/openclaw/pull/123403)
- Remove Slack's transport-level NO_REPLY special case [#124561](https://github.com/openclaw/openclaw/pull/124561)
- Reduce duplicate text in Slack native task cards [#125168](https://github.com/openclaw/openclaw/pull/125168)
- Remove stale Slack progress after silent turns [#125494](https://github.com/openclaw/openclaw/pull/125494)
- Prevent duplicate Slack content after partial delivery failures [#127130](https://github.com/openclaw/openclaw/pull/127130)
- fix(slack): keep private menu replies in their original thread [#128341](https://github.com/openclaw/openclaw/pull/128341)
- fix(slack): honor HTTP setup credentials [#128659](https://github.com/openclaw/openclaw/pull/128659)
- fix(slack): multipart receipts misclassify overflow text as media [#129089](https://github.com/openclaw/openclaw/pull/129089)
- fix(slack): retain unavailable attachments alongside downloads [#129708](https://github.com/openclaw/openclaw/pull/129708)
- fix(slack): retry stale draft cleanup [#129819](https://github.com/openclaw/openclaw/pull/129819)
- fix(slack): retain all multipart action send receipts [#130606](https://github.com/openclaw/openclaw/pull/130606)

**Documentation**

- Explain Slack group DM bot membership requirements [#101944](https://github.com/openclaw/openclaw/pull/101944)
- Correct Slack channel configuration examples [#103491](https://github.com/openclaw/openclaw/pull/103491)
- Correct Slack Socket Mode tuning and cleanup guidance [#119328](https://github.com/openclaw/openclaw/pull/119328)
- docs(slack): use canonical postAs key [#128448](https://github.com/openclaw/openclaw/pull/128448)

</details>

</Accordion>

<Accordion title="WhatsApp">

WhatsApp can now list groups from the linked account without making someone hunt through logs or invite links, and it avoids opening a competing connection while OpenClaw already owns that account. If OpenClaw restarts after accepting an incoming message, the pending work can continue without later events jumping ahead, while multipart replies keep the parts and receipts that actually succeeded instead of replaying the entire response after one part fails.

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

**Bug fixes**

- Discover WhatsApp groups from the linked account [#109886](https://github.com/openclaw/openclaw/pull/109886)
- Preserve WhatsApp inbound messages across restarts [#110418](https://github.com/openclaw/openclaw/pull/110418)
- Keep WhatsApp delivery results and receipts consistent [#118114](https://github.com/openclaw/openclaw/pull/118114)
- Keep pre-connect WhatsApp messages replayable [#104450](https://github.com/openclaw/openclaw/pull/104450)
- Preserve the underlying WhatsApp disconnect error [#105399](https://github.com/openclaw/openclaw/pull/105399)
- Honor plural media selection in WhatsApp payloads [#105576](https://github.com/openclaw/openclaw/pull/105576)
- Harden WhatsApp media sending with shared media helpers [#107017](https://github.com/openclaw/openclaw/pull/107017)
- Migrate legacy default-channel allowlists without channel config [#108453](https://github.com/openclaw/openclaw/pull/108453)
- Prevent WhatsApp shutdown from hanging on pre-aborted stops [#109903](https://github.com/openclaw/openclaw/pull/109903)
- Honor WhatsApp text mentions alongside member tags [#110412](https://github.com/openclaw/openclaw/pull/110412)
- Preserve active WhatsApp connections across runtime reloads [#110762](https://github.com/openclaw/openclaw/pull/110762)
- Render CommonMark correctly in WhatsApp messages [#113010](https://github.com/openclaw/openclaw/pull/113010)
- Preserve actionable WhatsApp remote-logout status [#114445](https://github.com/openclaw/openclaw/pull/114445)
- Stop identical WhatsApp replies from suppressing other chats [#115574](https://github.com/openclaw/openclaw/pull/115574)
- Send filename-only WhatsApp media in its native format [#115725](https://github.com/openclaw/openclaw/pull/115725)
- Preserve queued WhatsApp messages until delivery [#116179](https://github.com/openclaw/openclaw/pull/116179)
- Send WhatsApp messages when typing presence fails [#116739](https://github.com/openclaw/openclaw/pull/116739)
- Preserve WhatsApp selections and native media types [#116816](https://github.com/openclaw/openclaw/pull/116816)
- Restore WhatsApp interactive mentions, polls, video notes, and quoted media [#116901](https://github.com/openclaw/openclaw/pull/116901)
- Preserve WhatsApp message envelope behavior [#116989](https://github.com/openclaw/openclaw/pull/116989)
- Prevent duplicate WhatsApp replies after accepted delivery [#117198](https://github.com/openclaw/openclaw/pull/117198)
- Prevent WhatsApp self echoes from triggering duplicate work [#117228](https://github.com/openclaw/openclaw/pull/117228)
- Preserve WhatsApp group participant metadata [#117234](https://github.com/openclaw/openclaw/pull/117234)
- Keep WhatsApp attachment-failure logs safely redacted [#117939](https://github.com/openclaw/openclaw/pull/117939)
- Stop WhatsApp reconnecting after retry exhaustion [#118659](https://github.com/openclaw/openclaw/pull/118659)
- Keep typing visible during long active turns [#120337](https://github.com/openclaw/openclaw/pull/120337)
- Stop WhatsApp from dropping distinct messages with repeated text [#122785](https://github.com/openclaw/openclaw/pull/122785)
- Reload WhatsApp runtime code after plugin replacement [#126867](https://github.com/openclaw/openclaw/pull/126867)
- fix(whatsapp): preserve filenames and media types for attachment uploads [#128186](https://github.com/openclaw/openclaw/pull/128186)
- fix(whatsapp): preserve text when Markdown formatting returns no chunks [#129275](https://github.com/openclaw/openclaw/pull/129275)
- Keep WhatsApp echo diagnostics valid around emoji boundaries [#102603](https://github.com/openclaw/openclaw/pull/102603)
- Report WhatsApp logout no-ops accurately [#105929](https://github.com/openclaw/openclaw/pull/105929)
- Prevent WhatsApp doctor checks from hanging [#109243](https://github.com/openclaw/openclaw/pull/109243)
- Restore WhatsApp group reactions for LID-only senders [#110053](https://github.com/openclaw/openclaw/pull/110053)
- Prevent concurrent WhatsApp source-account startup failures [#111094](https://github.com/openclaw/openclaw/pull/111094)
- Restore WhatsApp reactions in the current conversation [#113178](https://github.com/openclaw/openclaw/pull/113178)
- Preserve WhatsApp reply references when quoted text is unavailable [#115517](https://github.com/openclaw/openclaw/pull/115517)
- Keep WhatsApp QR login available to grammar-constrained models [#115656](https://github.com/openclaw/openclaw/pull/115656)
- Render quoted WhatsApp self-chat replies across PN and LID aliases [#116814](https://github.com/openclaw/openclaw/pull/116814)
- Restore WhatsApp reactions for self-authored messages [#117697](https://github.com/openclaw/openclaw/pull/117697)
- Clear and migrate every WhatsApp credential class safely [#118610](https://github.com/openclaw/openclaw/pull/118610)
- Honor disabled WhatsApp self-chat without affecting groups [#118711](https://github.com/openclaw/openclaw/pull/118711)
- Confirm before logging out WhatsApp accounts [#122437](https://github.com/openclaw/openclaw/pull/122437)
- fix(whatsapp): prevent stale group mentions after membership changes [#128283](https://github.com/openclaw/openclaw/pull/128283)
- fix(whatsapp): avoid mentions inside unterminated inline code [#129281](https://github.com/openclaw/openclaw/pull/129281)
- Report WhatsApp native replies to sent-message hooks [#97728](https://github.com/openclaw/openclaw/pull/97728)

**Documentation**

- Clarify WhatsApp typing cleanup timing [50cc620](https://github.com/openclaw/openclaw/commit/50cc620)
- Document how to inspect and verify wacli messages [#116410](https://github.com/openclaw/openclaw/pull/116410)
- docs(whatsapp): document the canonical ack reaction keys [#118161](https://github.com/openclaw/openclaw/pull/118161)

</details>

</Accordion>

<Accordion title="Signal">

Signal replies now keep their native quote block through ordinary, chunked, media, and durable delivery when quoting is enabled. Messages received just before a crash can resume from local storage, and a failed recipient is reported instead of disappearing into a false success. Group sends remain conservative after any member receives the message, so one failed recipient does not cause the whole reply to be repeated to everyone else.

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

**Bug fixes**

- Preserve native quoted replies in Signal [#105347](https://github.com/openclaw/openclaw/pull/105347)
- Retry Signal messages after transient session conflicts [#103218](https://github.com/openclaw/openclaw/pull/103218)
- Preserve accepted Signal messages during monitor shutdown [#103967](https://github.com/openclaw/openclaw/pull/103967)
- Stop stalled Signal responses from hanging operations [#104122](https://github.com/openclaw/openclaw/pull/104122)
- Preserve Signal daemon diagnostics across output chunks [#104152](https://github.com/openclaw/openclaw/pull/104152)
- Preserve Signal username targets during routing and sends [#107365](https://github.com/openclaw/openclaw/pull/107365)
- Reconnect Signal after a stalled container handshake [#107386](https://github.com/openclaw/openclaw/pull/107386)
- Keep Signal controls responsive during active runs [#107422](https://github.com/openclaw/openclaw/pull/107422)
- Bound slow Signal REST responses by the request timeout [#109047](https://github.com/openclaw/openclaw/pull/109047)
- Recover Signal messages after receive-to-dispatch crashes [#109907](https://github.com/openclaw/openclaw/pull/109907)
- Preserve line breaks in debounced Signal messages [#110090](https://github.com/openclaw/openclaw/pull/110090)
- Preserve Signal reverse-proxy path prefixes [#110495](https://github.com/openclaw/openclaw/pull/110495)
- Keep Signal retries owned during shutdown [#110629](https://github.com/openclaw/openclaw/pull/110629)
- Preserve Signal ingress handoff and named-account channel settings [#111449](https://github.com/openclaw/openclaw/pull/111449)
- Surface failed Signal recipient deliveries [#111960](https://github.com/openclaw/openclaw/pull/111960)
- Reject malformed Signal attachments before saving [#114883](https://github.com/openclaw/openclaw/pull/114883)
- Preserve original filenames for Signal attachments [#115107](https://github.com/openclaw/openclaw/pull/115107)
- Fix Signal account health, reaction ownership, and skipped-message history [#116914](https://github.com/openclaw/openclaw/pull/116914)
- Prevent duplicate Signal quoted messages after ambiguous failures [#117134](https://github.com/openclaw/openclaw/pull/117134)
- Deliver authorized workspace attachments through Signal [#117895](https://github.com/openclaw/openclaw/pull/117895)
- Prevent duplicate Signal processing across sender aliases [#118970](https://github.com/openclaw/openclaw/pull/118970)
- Preserve accepted Signal messages during shutdown [#118975](https://github.com/openclaw/openclaw/pull/118975)
- Preserve Signal prompts after a later reply chunk fails [#126160](https://github.com/openclaw/openclaw/pull/126160)
- fix(signal): replay approval reactions after transient Gateway failures [#130134](https://github.com/openclaw/openclaw/pull/130134)
- Make Signal group mentions reliably wake the bot [#96738](https://github.com/openclaw/openclaw/pull/96738)
- Clean up and unblock Signal CLI release installs [#103339](https://github.com/openclaw/openclaw/pull/103339)
- Reject unsupported Signal message actions early [#104788](https://github.com/openclaw/openclaw/pull/104788)
- Release failed Signal CLI download connections promptly [#109442](https://github.com/openclaw/openclaw/pull/109442)
- Handle malformed Signal CLI release metadata cleanly [#110824](https://github.com/openclaw/openclaw/pull/110824)
- Keep Signal reactions on the routed target [#112607](https://github.com/openclaw/openclaw/pull/112607)
- Keep multiline Signal previews on one log line [#114881](https://github.com/openclaw/openclaw/pull/114881)
- Validate and normalize Signal accounts during noninteractive setup [#118932](https://github.com/openclaw/openclaw/pull/118932)
- fix(signal): report managed daemon port collisions before startup [#124015](https://github.com/openclaw/openclaw/pull/124015)
- Keep Signal pairing across UUID and phone aliases [#78022](https://github.com/openclaw/openclaw/pull/78022)

**Documentation**

- Document Signal non-interactive setup flags [#102114](https://github.com/openclaw/openclaw/pull/102114)

</details>

</Accordion>

<Accordion title="iMessage and BlueBubbles">

iMessage is now an official installable plugin that carries existing configuration and state through the move out of core. Eligible approval requests can use native Messages polls, while older bridges, SMS, and failed poll sends keep the existing text, reaction, or command fallback.

Remote Mac setups also keep attachments with the correct existing chat and can use supported remote paths and actions without sharing a filesystem with the machine running OpenClaw, while incoming messages already stored before a crash can replay. New setups still need the plugin and `imsg` on a signed-in Mac, and this remains separate from the iOS and macOS OpenClaw chat apps.

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

**Improvements**

- Add native iMessage approval polls [#112714](https://github.com/openclaw/openclaw/pull/112714)
- Move iMessage from core to an official plugin [#117101](https://github.com/openclaw/openclaw/pull/117101)
- Style iMessage approval details consistently in poll mode [#116221](https://github.com/openclaw/openclaw/pull/116221)

**Bug fixes**

- Preserve iMessage delivery across Gateway crashes [#110409](https://github.com/openclaw/openclaw/pull/110409)
- iMessage attachments reach the correct existing chat [#115006](https://github.com/openclaw/openclaw/pull/115006)
- Preserve iMessage transport, failures, and voice intent [#116889](https://github.com/openclaw/openclaw/pull/116889)
- Preserve fenced role keys in iMessage replies [#117159](https://github.com/openclaw/openclaw/pull/117159)
- Rewind iMessage cursor after chat database replacement [#117788](https://github.com/openclaw/openclaw/pull/117788)
- Make SSH-backed iMessage sends and actions reliable [#121038](https://github.com/openclaw/openclaw/pull/121038)
- Repair anchorless iMessage routing from authoritative history [#104218](https://github.com/openclaw/openclaw/pull/104218)
- Preserve split iMessage permission diagnostics [#107393](https://github.com/openclaw/openclaw/pull/107393)
- Keep iMessage actions in the current conversation [#107773](https://github.com/openclaw/openclaw/pull/107773)
- Keep fast-mode progress out of iMessage chat history [#110052](https://github.com/openclaw/openclaw/pull/110052)
- Prevent duplicate iMessages after delayed fallback sends [#110853](https://github.com/openclaw/openclaw/pull/110853)
- Correct iMessage outbound Markdown formatting [#113138](https://github.com/openclaw/openclaw/pull/113138)
- Show complete iMessage poll selections to agents [#114714](https://github.com/openclaw/openclaw/pull/114714)
- Preserve original filenames for iMessage attachments [#117197](https://github.com/openclaw/openclaw/pull/117197)
- Preserve iMessage attachment names and accepted delivery receipts [#117238](https://github.com/openclaw/openclaw/pull/117238)
- Preserve iMessage delivery receipts and outcomes [#117282](https://github.com/openclaw/openclaw/pull/117282)
- Start explicitly enabled iMessage accounts [#118944](https://github.com/openclaw/openclaw/pull/118944)
- Deduplicate only truly shared iMessage watchers [#118974](https://github.com/openclaw/openclaw/pull/118974)
- fix(imessage): reject malformed base64 attachment buffers [#120216](https://github.com/openclaw/openclaw/pull/120216)
- Stop iMessage echo guards from dropping real replies [#120260](https://github.com/openclaw/openclaw/pull/120260)
- Preserve iMessage attachment and voice-message identities [#120739](https://github.com/openclaw/openclaw/pull/120739)
- Preserve retry-safe iMessage no-send results [#122672](https://github.com/openclaw/openclaw/pull/122672)
- Keep automatic iMessage replies on the inbound SMS route [#125633](https://github.com/openclaw/openclaw/pull/125633)
- Reject ambiguous iMessage recipients [#126564](https://github.com/openclaw/openclaw/pull/126564)
- fix(imessage): stop self-chat dedupe from tripping loop limiter [#126856](https://github.com/openclaw/openclaw/pull/126856)
- fix(imessage): prevent ordinary quoted messages from disappearing [#129450](https://github.com/openclaw/openclaw/pull/129450)
- fix(imessage): preserve original message context in threaded replies [#129917](https://github.com/openclaw/openclaw/pull/129917)
- Remove internal tool traces from iMessage replies [#101430](https://github.com/openclaw/openclaw/pull/101430)
- Keep iMessage CLI error tails valid Unicode [#102626](https://github.com/openclaw/openclaw/pull/102626)
- Let iMessage shutdown finish promptly after its helper closes [#108909](https://github.com/openclaw/openclaw/pull/108909)
- Detect iMessage remote wrappers when HOME is blank [#111715](https://github.com/openclaw/openclaw/pull/111715)
- Explain unsupported iMessage private-status probes [#115526](https://github.com/openclaw/openclaw/pull/115526)
- Preserve iMessage TTS fallback when CAF staging fails [#126378](https://github.com/openclaw/openclaw/pull/126378)
- fix(imessage): preserve dunder reference links [#130547](https://github.com/openclaw/openclaw/pull/130547)

**Documentation**

- Remove retired OpenClaw iMessage split-send coalescing [#108436](https://github.com/openclaw/openclaw/pull/108436)
- Align iMessage recovery docs with durable SQLite ingress [#111002](https://github.com/openclaw/openclaw/pull/111002)

</details>

</Accordion>

<Accordion title="Feishu and Lark">

In Feishu, an agent can resend a sticker previously received by that bot account and, when an operator adds labels, find the right sticker by keyword. Accepted Feishu messages and comments can also resume after a restart, streaming cards keep the latest accepted version, and unsupported image formats remain available as file attachments instead of being discarded. Sticker actions and labels are opt-in and do not retroactively organize an existing collection; the sticker and comment work is specifically verified for Feishu rather than every Lark path.

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

**Improvements**

- feat(feishu): let agents resend received stickers [#130374](https://github.com/openclaw/openclaw/pull/130374)
- feat(feishu): find received stickers by configured keywords [#130498](https://github.com/openclaw/openclaw/pull/130498)
- Move Feishu replay protection onto core dedupe [#104384](https://github.com/openclaw/openclaw/pull/104384)
- Opt-in Feishu bot-to-bot conversations [#89783](https://github.com/openclaw/openclaw/pull/89783)
- Add opt-in Feishu VC meeting invite auto-join [#92340](https://github.com/openclaw/openclaw/pull/92340)

**Bug fixes**

- Prevent duplicate Feishu streaming-card snapshots [#103915](https://github.com/openclaw/openclaw/pull/103915)
- Preserve Feishu inbound messages across restarts [#110864](https://github.com/openclaw/openclaw/pull/110864)
- Make Feishu delivery and media handling truthful [#117023](https://github.com/openclaw/openclaw/pull/117023)
- Keep Feishu native cards in topic threads [#102804](https://github.com/openclaw/openclaw/pull/102804)
- Honor configured timeouts for Feishu streaming cards [#102948](https://github.com/openclaw/openclaw/pull/102948)
- Bound the Feishu sender-name cache [#103513](https://github.com/openclaw/openclaw/pull/103513)
- Restore Feishu WebSocket liveness detection [#103763](https://github.com/openclaw/openclaw/pull/103763)
- Harden Feishu document image and Markdown handling [#104663](https://github.com/openclaw/openclaw/pull/104663)
- Render Feishu group policy safely in Form mode [#107336](https://github.com/openclaw/openclaw/pull/107336)
- Deliver Feishu direct-message replies through the conversation [#109637](https://github.com/openclaw/openclaw/pull/109637)
- Keep Lark Drive comment mentions working through identity outages [#112807](https://github.com/openclaw/openclaw/pull/112807)
- Settle Feishu delivery hooks after native finalization [#113152](https://github.com/openclaw/openclaw/pull/113152)
- Restore readable content from forwarded Feishu cards [#115136](https://github.com/openclaw/openclaw/pull/115136)
- Feishu group card buttons pass mention gating [#116105](https://github.com/openclaw/openclaw/pull/116105)
- Preserve Feishu message creation times [#116156](https://github.com/openclaw/openclaw/pull/116156)
- Preserve complete Feishu reaction context [#116918](https://github.com/openclaw/openclaw/pull/116918)
- Prevent duplicate Feishu replies for multipart attachments [#117196](https://github.com/openclaw/openclaw/pull/117196)
- Preserve Feishu outbound delivery progress and reply targets [#117223](https://github.com/openclaw/openclaw/pull/117223)
- Preserve ports and paths for custom Feishu API domains [#117278](https://github.com/openclaw/openclaw/pull/117278)
- fix(feishu): route rich-post edits through the correct SDK method [#117414](https://github.com/openclaw/openclaw/pull/117414)
- Deliver approved workspace attachments through Feishu [#117778](https://github.com/openclaw/openclaw/pull/117778)
- fix(feishu): promote send attachment aliases instead of silent drop [#125664](https://github.com/openclaw/openclaw/pull/125664)
- fix(feishu): preserve all accepted voice fallback content [#128130](https://github.com/openclaw/openclaw/pull/128130)
- fix(feishu): report delivered replies when message receipts are missing [#128213](https://github.com/openclaw/openclaw/pull/128213)
- fix(feishu): prevent blank duplicate replies when card receipts are absent [#128274](https://github.com/openclaw/openclaw/pull/128274)
- fix(feishu): preserve captions when apparent voice media is a file [#128771](https://github.com/openclaw/openclaw/pull/128771)
- fix(feishu): deliver presentations in document comments [#129843](https://github.com/openclaw/openclaw/pull/129843)
- fix(feishu): deliver long message-tool replies with configured rendering [#129902](https://github.com/openclaw/openclaw/pull/129902)
- fix(feishu): preserve unavailable controls in message cards [#130641](https://github.com/openclaw/openclaw/pull/130641)
- fix(feishu): mark server-transcribed audio so core skips duplicate ASR [#130953](https://github.com/openclaw/openclaw/pull/130953)
- fix(feishu): split oversized Markdown cards without losing content or receipts [#131106](https://github.com/openclaw/openclaw/pull/131106)
- Route Feishu SDK traffic through configured proxies [#86386](https://github.com/openclaw/openclaw/pull/86386)
- Restore Feishu file and image attachment delivery [#95514](https://github.com/openclaw/openclaw/pull/95514)
- Prevent Feishu media fallback references from leaking [#98251](https://github.com/openclaw/openclaw/pull/98251)
- Keep Feishu media replies from disappearing [#98320](https://github.com/openclaw/openclaw/pull/98320)
- Preserve intended line breaks in Feishu Markdown posts [#99394](https://github.com/openclaw/openclaw/pull/99394)
- Report unexpected Feishu identity recovery failures [#102185](https://github.com/openclaw/openclaw/pull/102185)
- Preserve one readable text reply with Feishu Auto-TTS voice notes [#103781](https://github.com/openclaw/openclaw/pull/103781)
- Bound stalled Feishu app-registration requests [#105549](https://github.com/openclaw/openclaw/pull/105549)
- Stop stalled Feishu media downloads from hanging messages [#106541](https://github.com/openclaw/openclaw/pull/106541)
- Add privacy-safe Feishu message parse diagnostics [#107947](https://github.com/openclaw/openclaw/pull/107947)
- Stop Feishu comment retries when an account stops [#108408](https://github.com/openclaw/openclaw/pull/108408)
- Cache inaccessible Feishu sender-name lookups [#111700](https://github.com/openclaw/openclaw/pull/111700)
- Inspect canonical Feishu doctor transcripts [#115148](https://github.com/openclaw/openclaw/pull/115148)
- Keep intentional Feishu NO_REPLY turns silent [#115530](https://github.com/openclaw/openclaw/pull/115530)
- Preserve valid empty Feishu inbound messages [#115583](https://github.com/openclaw/openclaw/pull/115583)
- Close rejected Feishu streaming-card connections promptly [#117312](https://github.com/openclaw/openclaw/pull/117312)
- Use real Feishu message IDs for reaction topic hydration [#117685](https://github.com/openclaw/openclaw/pull/117685)
- Keep disabled Feishu accounts out of model-tool routing [#126412](https://github.com/openclaw/openclaw/pull/126412)
- fix(feishu): preserve accepted document-comment delivery identity [#128284](https://github.com/openclaw/openclaw/pull/128284)
- fix(feishu): preserve attachments in document comment replies [#129259](https://github.com/openclaw/openclaw/pull/129259)
- fix(feishu): deliver rich-post attachments in order without duplicate downloads [#129472](https://github.com/openclaw/openclaw/pull/129472)
- fix(feishu): deliver attachment aliases in thread replies [#130023](https://github.com/openclaw/openclaw/pull/130023)
- fix(feishu): preserve commands in select fallback cards [#130515](https://github.com/openclaw/openclaw/pull/130515)

</details>

</Accordion>

<Accordion title="Mattermost">

Mattermost can now read bounded, paginated history from channels the bot can already access once an operator enables the feature. Integrations that rewrite or cancel replies now complete that work before delivery, preventing an early preview from exposing content that the hook removes or changes. Completed sends also keep the real Mattermost post identity across previews, actions, media, and durable paths.

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

**Improvements**

- Add guarded Mattermost channel-history reads [#110875](https://github.com/openclaw/openclaw/pull/110875)
- Add opt-in Mattermost DM threading by chat type [#98111](https://github.com/openclaw/openclaw/pull/98111)
- Restart only the changed Mattermost account on reload [#99312](https://github.com/openclaw/openclaw/pull/99312)

**Bug fixes**

- Prevent Mattermost hooks from leaking pre-rewrite previews [#114968](https://github.com/openclaw/openclaw/pull/114968)
- Preserve Mattermost outbound delivery settlement [#116142](https://github.com/openclaw/openclaw/pull/116142)
- Add deadlines to Mattermost REST requests [#102027](https://github.com/openclaw/openclaw/pull/102027)
- Send Mattermost text with blank attachment placeholders [#108281](https://github.com/openclaw/openclaw/pull/108281)
- Keep Mattermost reactions in the selected conversation [#108634](https://github.com/openclaw/openclaw/pull/108634)
- Preserve finalized Mattermost replies after tool warnings [#109555](https://github.com/openclaw/openclaw/pull/109555)
- Preserve received Mattermost posts across restarts [#110386](https://github.com/openclaw/openclaw/pull/110386)
- Preserve policy-safe Mattermost group history [#115773](https://github.com/openclaw/openclaw/pull/115773)
- Honor configured timezones in Mattermost message envelopes [#116145](https://github.com/openclaw/openclaw/pull/116145)
- Keep Mattermost messages isolated by sender [#124531](https://github.com/openclaw/openclaw/pull/124531)
- fix(mattermost): anchor bot mention matching on username boundaries [#129555](https://github.com/openclaw/openclaw/pull/129555)
- fix(mattermost): keep server file name when the download fails [#129556](https://github.com/openclaw/openclaw/pull/129556)
- fix(mattermost): normal replies silently drop buttons and presentation [#129579](https://github.com/openclaw/openclaw/pull/129579)
- Preserve Mattermost block-streamed text and tool posts [#87449](https://github.com/openclaw/openclaw/pull/87449)
- Keep Mattermost private-channel threads in one conversation [#96645](https://github.com/openclaw/openclaw/pull/96645)
- Accept Mattermost command-text modes and repair CI [2c95bd2](https://github.com/openclaw/openclaw/commit/2c95bd2)
- Keep emoji intact in Mattermost debug previews [#101630](https://github.com/openclaw/openclaw/pull/101630)
- Bound Mattermost lookup caches [#101740](https://github.com/openclaw/openclaw/pull/101740)
- Keep Mattermost slash-command diagnostics Unicode-safe [#102607](https://github.com/openclaw/openclaw/pull/102607)
- Bound Mattermost opaque-target cache growth [#103258](https://github.com/openclaw/openclaw/pull/103258)
- Stop stalled Mattermost attachments from blocking messages [#104575](https://github.com/openclaw/openclaw/pull/104575)
- Honor configured Mattermost callback bypass paths [#104618](https://github.com/openclaw/openclaw/pull/104618)
- Preserve Mattermost private-conversation origins [#115726](https://github.com/openclaw/openclaw/pull/115726)
- Prevent Mattermost messages from reaching the wrong team's channel [#118622](https://github.com/openclaw/openclaw/pull/118622)
- Preserve file extensions for unnamed Mattermost uploads [#119535](https://github.com/openclaw/openclaw/pull/119535)
- fix(mattermost): agent media replies silently drop the attachment when upload fails [#125338](https://github.com/openclaw/openclaw/pull/125338)
- fix(mattermost): react action rejects raw emoji glyphs [#125370](https://github.com/openclaw/openclaw/pull/125370)
- Reject unsafe Mattermost API path segments [#98390](https://github.com/openclaw/openclaw/pull/98390)

</details>

</Accordion>

<Accordion title="Matrix">

Matrix replies can now use native spoilers, underline, tables, and up to 100 discoverable room or personal custom emotes. More importantly, an encrypted room now fails visibly when encryption is unavailable instead of quietly falling back to plaintext text, attachments, filenames, or media metadata. Large tables can still choose their own readable formatting fallback without weakening the room's confidentiality boundary.

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

**Improvements**

- Add native Matrix spoilers, underline, and tables [#113199](https://github.com/openclaw/openclaw/pull/113199)
- Matrix custom emote discovery and cached Discord emoji lists [#128518](https://github.com/openclaw/openclaw/pull/128518)
- Move Matrix replay protection to the shared dedupe system [#104391](https://github.com/openclaw/openclaw/pull/104391)
- Add safer Matrix recovery-key input and split E2EE QA ownership [#107828](https://github.com/openclaw/openclaw/pull/107828)

**Bug fixes**

- Migrate Matrix dedupe state without rescanning old databases [#113487](https://github.com/openclaw/openclaw/pull/113487)
- Block plaintext Matrix sends to encrypted rooms [#118609](https://github.com/openclaw/openclaw/pull/118609)
- Stop Matrix startup identity retries during shutdown [#110115](https://github.com/openclaw/openclaw/pull/110115)
- Preserve Matrix thread pagination tokens [#111243](https://github.com/openclaw/openclaw/pull/111243)
- Preserve Matrix encryption keys during legacy snapshot upgrades [#112919](https://github.com/openclaw/openclaw/pull/112919)
- Skip historical Matrix roots on settled restarts [#113489](https://github.com/openclaw/openclaw/pull/113489)
- Render Matrix history and collapse streamed edits [#115014](https://github.com/openclaw/openclaw/pull/115014)
- Hide Matrix drafts when outbound hooks can modify replies [#115240](https://github.com/openclaw/openclaw/pull/115240)
- Prevent private reasoning from reaching Matrix rooms [#115553](https://github.com/openclaw/openclaw/pull/115553)
- Report Matrix automatic reply delivery settlement [#116271](https://github.com/openclaw/openclaw/pull/116271)
- Preserve Matrix thread and session ownership [#116802](https://github.com/openclaw/openclaw/pull/116802)
- Fix Matrix audio durations, reaction paging, and member names [#116890](https://github.com/openclaw/openclaw/pull/116890)
- Recover Matrix durable sends after lost success responses [#117008](https://github.com/openclaw/openclaw/pull/117008)
- Reply to valid plain-text Matrix mentions [#117764](https://github.com/openclaw/openclaw/pull/117764)
- Preserve complete Matrix multipart delivery receipts [#118128](https://github.com/openclaw/openclaw/pull/118128)
- Preserve indented Matrix code without sending mentions [#118497](https://github.com/openclaw/openclaw/pull/118497)
- Make Matrix encrypted-client shutdown deterministic [#119570](https://github.com/openclaw/openclaw/pull/119570)
- Isolate shared Matrix clients across accounts [#119667](https://github.com/openclaw/openclaw/pull/119667)
- Preserve Matrix delivery identity across attachment fanout [#121006](https://github.com/openclaw/openclaw/pull/121006)
- Keep Matrix streamed replies visible when replacement fails [#122850](https://github.com/openclaw/openclaw/pull/122850)
- fix(matrix): guard malformed poll answers instead of throwing TypeError [#123231](https://github.com/openclaw/openclaw/pull/123231)
- Accept suffixless Matrix Room v12 IDs [#123931](https://github.com/openclaw/openclaw/pull/123931)
- Recover Matrix providers after disconnected sync restarts [#125362](https://github.com/openclaw/openclaw/pull/125362)
- Restore Matrix retries after late operations finish [#126712](https://github.com/openclaw/openclaw/pull/126712)
- fix(matrix): prevent poll history from hanging on repeated cursors [#128214](https://github.com/openclaw/openclaw/pull/128214)
- fix(matrix): preserve escaped characters, links, and image labels [#128382](https://github.com/openclaw/openclaw/pull/128382)
- fix(matrix): send fallback media when attachment list is blank [#128479](https://github.com/openclaw/openclaw/pull/128479)
- fix(matrix): show edited messages in replies and thread context [#128763](https://github.com/openclaw/openclaw/pull/128763)
- fix(matrix): let follow-ups steer active turns [#128907](https://github.com/openclaw/openclaw/pull/128907)
- fix(matrix): preserve explicit replies when threading is disabled [#129415](https://github.com/openclaw/openclaw/pull/129415)
- fix(matrix): preserve approval reactions after Gateway failures [#129879](https://github.com/openclaw/openclaw/pull/129879)
- fix(matrix): preserve attachment markers in room history [#130123](https://github.com/openclaw/openclaw/pull/130123)
- fix(matrix): automatic replies lose native table formatting [#130820](https://github.com/openclaw/openclaw/pull/130820)
- Preserve Matrix reverse-proxy homeserver paths [#93516](https://github.com/openclaw/openclaw/pull/93516)
- Recover Matrix messages when decryption keys arrive late [#94416](https://github.com/openclaw/openclaw/pull/94416)
- Keep truncated Matrix text UTF-16 safe [#102395](https://github.com/openclaw/openclaw/pull/102395)
- Parse mixed-case Matrix JSON response types correctly [#105470](https://github.com/openclaw/openclaw/pull/105470)
- Preserve valid UTF-8 in Matrix bootstrap diagnostics [#105475](https://github.com/openclaw/openclaw/pull/105475)
- Restore Matrix draft previews for queued followups [#108094](https://github.com/openclaw/openclaw/pull/108094)
- Reject oversized piped Matrix recovery keys [#108120](https://github.com/openclaw/openclaw/pull/108120)
- Preserve Matrix redirects when response cleanup fails [#111105](https://github.com/openclaw/openclaw/pull/111105)
- Accept the documented automatic Matrix approval mode [#115676](https://github.com/openclaw/openclaw/pull/115676)
- Surface Matrix typing refresh failures after delivery [#117059](https://github.com/openclaw/openclaw/pull/117059)
- Ignore invalid Matrix environment account escapes [#120428](https://github.com/openclaw/openclaw/pull/120428)
- Let Matrix send media when mediaMaxMb is zero or negative [#120466](https://github.com/openclaw/openclaw/pull/120466)
- Authenticate Matrix channel probes before reporting success [#123766](https://github.com/openclaw/openclaw/pull/123766)
- Preserve Matrix thread activity through clean shutdown [#125039](https://github.com/openclaw/openclaw/pull/125039)
- fix(matrix): await persistence shutdown [#129605](https://github.com/openclaw/openclaw/pull/129605)
- fix(matrix): preserve encrypted attachments with blank media URLs [#129739](https://github.com/openclaw/openclaw/pull/129739)

</details>

</Accordion>

<Accordion title="Microsoft Teams">

Configured Microsoft Teams approvers can approve or deny eligible exec and plugin requests from a native Adaptive Card in the chat or channel thread where the request began, then see the recorded outcome on that same card. Quoted replies, attachments, streaming results, and duplicate handling also stay bound to the originating conversation. The cards cover configured exec and plugin requests only and require valid authentication, permissions, tenant authorization, and routing.

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

**Improvements**

- feat(msteams): native Adaptive Card approve/deny for exec and plugin approvals [#129997](https://github.com/openclaw/openclaw/pull/129997)

**Bug fixes**

- fix(channels): degrade unavailable credential files [#127539](https://github.com/openclaw/openclaw/pull/127539)
- Restore quoted message context in Microsoft Teams replies [#101856](https://github.com/openclaw/openclaw/pull/101856)
- Preserve Teams stream chunks after whitespace collapse [#102357](https://github.com/openclaw/openclaw/pull/102357)
- Recognize mixed-case Microsoft Teams attachments [#102431](https://github.com/openclaw/openclaw/pull/102431)
- Bound stalled Microsoft Teams file-consent uploads [#104120](https://github.com/openclaw/openclaw/pull/104120)
- Bound MS Teams SharePoint file sends and fail closed on sharing errors [#104288](https://github.com/openclaw/openclaw/pull/104288)
- Bound Microsoft Teams token acquisition to a deadline [#106386](https://github.com/openclaw/openclaw/pull/106386)
- Ignore blank Microsoft Teams certificate paths [#109112](https://github.com/openclaw/openclaw/pull/109112)
- Preserve Microsoft Teams activities before acknowledgement [#110357](https://github.com/openclaw/openclaw/pull/110357)
- Preserve same-named Teams SharePoint uploads [#113560](https://github.com/openclaw/openclaw/pull/113560)
- Prevent Microsoft Teams previews from bypassing outbound hooks [#115551](https://github.com/openclaw/openclaw/pull/115551)
- Prevent duplicate long replies after Teams streaming failures [#115669](https://github.com/openclaw/openclaw/pull/115669)
- Restore Microsoft Teams conversation allowlists [#115746](https://github.com/openclaw/openclaw/pull/115746)
- Prevent duplicate Microsoft Teams final replies [#116398](https://github.com/openclaw/openclaw/pull/116398)
- Preserve acknowledged Microsoft Teams stream settlement [#116515](https://github.com/openclaw/openclaw/pull/116515)
- Keep Microsoft Teams cards and polls in channel threads [#117516](https://github.com/openclaw/openclaw/pull/117516)
- Deliver approved workspace attachments in Microsoft Teams [#117776](https://github.com/openclaw/openclaw/pull/117776)
- Release channel delivery resources reliably [#117855](https://github.com/openclaw/openclaw/pull/117855)
- Honor Teams channel limits for inbound attachments [#122315](https://github.com/openclaw/openclaw/pull/122315)
- Preserve distinct choices in Microsoft Teams poll votes [#123070](https://github.com/openclaw/openclaw/pull/123070)
- Avoid duplicate Teams replies after uncertain delivery failures [#125127](https://github.com/openclaw/openclaw/pull/125127)
- Preserve Microsoft Teams reply context after durable replay [#126169](https://github.com/openclaw/openclaw/pull/126169)
- fix(msteams): restore missing channel thread context [#128901](https://github.com/openclaw/openclaw/pull/128901)
- Recover Microsoft Teams channel and group-chat files safely [#90738](https://github.com/openclaw/openclaw/pull/90738)
- Bound the Microsoft Teams group lookup cache [#102814](https://github.com/openclaw/openclaw/pull/102814)
- Share HTML entity decoding across core and plugins [#107235](https://github.com/openclaw/openclaw/pull/107235)
- Show readable filenames for URL-hosted Microsoft Teams attachments [#115127](https://github.com/openclaw/openclaw/pull/115127)
- Recognize provider-prefixed Microsoft Teams target IDs [#115609](https://github.com/openclaw/openclaw/pull/115609)
- Enable Microsoft Teams after accepting federated credentials [#118931](https://github.com/openclaw/openclaw/pull/118931)
- Return invalid-request errors for incompatible Teams probe modes [#121975](https://github.com/openclaw/openclaw/pull/121975)
- Finalize Microsoft Teams sent events after delivery settles [#82354](https://github.com/openclaw/openclaw/pull/82354)
- Keep Microsoft Teams attachment replies in channel threads [#94348](https://github.com/openclaw/openclaw/pull/94348)

</details>

</Accordion>

<Accordion title="Google Chat">

Google Chat webhook events accepted by OpenClaw now remain queued through restarts, keep their order within each space, and recognize Google's retries before they create duplicate work. Recovery begins when the Gateway admits the event; events Google never delivered remain outside that recovery path.

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

**Bug fixes**

- Preserve Google Chat webhooks across restarts [#110833](https://github.com/openclaw/openclaw/pull/110833)
- Stop stalled Google Chat requests from hanging indefinitely [#102227](https://github.com/openclaw/openclaw/pull/102227)
- Keep Google Chat off-mode replies out of threads [#104402](https://github.com/openclaw/openclaw/pull/104402)
- Preserve Google Chat streaming during doctor migration [#106018](https://github.com/openclaw/openclaw/pull/106018)
- Bound Google Chat authentication requests [#106178](https://github.com/openclaw/openclaw/pull/106178)
- Deliver Google Chat replies when thread targets are invalid [#108324](https://github.com/openclaw/openclaw/pull/108324)
- Release Google Chat sockets after status-only requests [#111290](https://github.com/openclaw/openclaw/pull/111290)
- Render outbound Markdown correctly in Google Chat [#113024](https://github.com/openclaw/openclaw/pull/113024)
- Stop partial and duplicate Google Chat replies [#115638](https://github.com/openclaw/openclaw/pull/115638)
- Keep Google Chat reply chunks in one fallback thread [#117053](https://github.com/openclaw/openclaw/pull/117053)
- Keep Google Chat Doctor repairs in canonical account settings [#118972](https://github.com/openclaw/openclaw/pull/118972)
- Keep Google Chat lanes moving after oversized attachments [#118986](https://github.com/openclaw/openclaw/pull/118986)
- Reject malformed UTF-8 in Google Chat responses [#120239](https://github.com/openclaw/openclaw/pull/120239)
- Preserve partial Google Chat delivery evidence [#122760](https://github.com/openclaw/openclaw/pull/122760)
- fix(googlechat): surface unsupported and unprocessed attachments [#130870](https://github.com/openclaw/openclaw/pull/130870)
- Cap Google Chat media downloads by default [#98425](https://github.com/openclaw/openclaw/pull/98425)
- Bound Google Chat approval registries [#101744](https://github.com/openclaw/openclaw/pull/101744)
- Bound Google Chat webhook certificate fetches [#102924](https://github.com/openclaw/openclaw/pull/102924)
- Close oversized Google Chat auth responses promptly [#115873](https://github.com/openclaw/openclaw/pull/115873)
- Preserve canonical Google Chat thread IDs in delivery receipts [#116717](https://github.com/openclaw/openclaw/pull/116717)
- Report invalid Google Chat webhook URLs as blocked [#117986](https://github.com/openclaw/openclaw/pull/117986)
- Stop stale Google Chat approval cards from retrying [#118225](https://github.com/openclaw/openclaw/pull/118225)
- Block unusable Google Chat webhook configurations at startup [#118968](https://github.com/openclaw/openclaw/pull/118968)

</details>

</Accordion>

<Accordion title="LINE">

LINE keeps mixed rich replies and their quick actions together, using the reply path for as many as five messages when the response fits instead of consuming Push API quota unnecessarily. A bot can also post one room-specific introduction when it actually joins an allowed group, while respecting both channel-wide and per-account opt-outs. Webhook events are stored before acknowledgement so work OpenClaw already admitted can continue after a restart.

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

**Improvements**

- feat(channels): add Matrix and LINE join introductions [#131128](https://github.com/openclaw/openclaw/pull/131128)
- Move LINE rich messages to typed structured output [#124755](https://github.com/openclaw/openclaw/pull/124755)

**Bug fixes**

- Keep LINE rich replies and quick actions intact [#109011](https://github.com/openclaw/openclaw/pull/109011)
- Prevent LINE webhook events from being silently lost [#109655](https://github.com/openclaw/openclaw/pull/109655)
- Prevent duplicate accepted LINE and Mattermost messages [#117024](https://github.com/openclaw/openclaw/pull/117024)
- Keep internal tool traces out of LINE replies [#101708](https://github.com/openclaw/openclaw/pull/101708)
- Keep malformed LINE agenda and device cards from being dropped [#105381](https://github.com/openclaw/openclaw/pull/105381)
- Preserve LINE replies when template fields are blank [#105520](https://github.com/openclaw/openclaw/pull/105520)
- fix: keep LINE group allowlists scoped [AI] [#106056](https://github.com/openclaw/openclaw/pull/106056)
- Send playable LINE video and audio replies [#106515](https://github.com/openclaw/openclaw/pull/106515)
- Prevent inline slash text from bypassing LINE group mentions [#107230](https://github.com/openclaw/openclaw/pull/107230)
- Preserve LINE group context during concurrent mention turns [#107367](https://github.com/openclaw/openclaw/pull/107367)
- Retry LINE media while the content is still preparing [#108351](https://github.com/openclaw/openclaw/pull/108351)
- Redact LINE media URLs from validation errors [#108657](https://github.com/openclaw/openclaw/pull/108657)
- Bound LINE sender-profile cache growth [#109750](https://github.com/openclaw/openclaw/pull/109750)
- Preserve LINE webhooks through restarts and dispatch failures [#109819](https://github.com/openclaw/openclaw/pull/109819)
- Wait for deferred LINE ingress release during shutdown [#110104](https://github.com/openclaw/openclaw/pull/110104)
- Retry transient LINE inbound-media downloads [#110921](https://github.com/openclaw/openclaw/pull/110921)
- Prevent LINE reloads from hanging on stalled deliveries [#110971](https://github.com/openclaw/openclaw/pull/110971)
- Keep oversized LINE actions from dropping replies [#113081](https://github.com/openclaw/openclaw/pull/113081)
- Mark durably accepted LINE webhook deliveries [#115796](https://github.com/openclaw/openclaw/pull/115796)
- Preserve LINE provider delivery receipts and partial-send progress [#116879](https://github.com/openclaw/openclaw/pull/116879)
- Prevent duplicate LINE replies after uncertain delivery [#117126](https://github.com/openclaw/openclaw/pull/117126)
- Preserve longer LINE card and template descriptions [#117280](https://github.com/openclaw/openclaw/pull/117280)
- Preserve oversized LINE table delivery order [#117335](https://github.com/openclaw/openclaw/pull/117335)
- Preserve all rows in LINE markdown tables [#117481](https://github.com/openclaw/openclaw/pull/117481)
- Preserve LINE replies when location fields are blank [#118064](https://github.com/openclaw/openclaw/pull/118064)
- fix(line): prevent unbounded provider response buffering [#119099](https://github.com/openclaw/openclaw/pull/119099)
- Keep non-positive LINE media limits from dropping attachments [#121184](https://github.com/openclaw/openclaw/pull/121184)
- Retry LINE pushes without duplicate messages [#124464](https://github.com/openclaw/openclaw/pull/124464)
- Prevent LINE inbound media downloads from hanging [#124606](https://github.com/openclaw/openclaw/pull/124606)
- fix(line): preserve full Flex action labels up to LINE's limit [#128712](https://github.com/openclaw/openclaw/pull/128712)
- fix(line): preserve rich message source order [#129916](https://github.com/openclaw/openclaw/pull/129916)
- fix(line): preserve quick replies after rejected rich messages [#130076](https://github.com/openclaw/openclaw/pull/130076)
- Keep emoji intact in LINE invalid-recipient errors [#104109](https://github.com/openclaw/openclaw/pull/104109)
- Enable in-chat LINE allowlist edits [#106638](https://github.com/openclaw/openclaw/pull/106638)
- Validate LINE media before batch and auto-reply sends [#108917](https://github.com/openclaw/openclaw/pull/108917)
- Preserve links and styling in LINE messages [#112921](https://github.com/openclaw/openclaw/pull/112921)
- Preserve structured LINE webhook error details [#113606](https://github.com/openclaw/openclaw/pull/113606)
- Preserve full LINE Flex alternative text [#117217](https://github.com/openclaw/openclaw/pull/117217)
- Preserve indentation in LINE fenced-code cards [#117996](https://github.com/openclaw/openclaw/pull/117996)
- Fully remove the default LINE account [#118055](https://github.com/openclaw/openclaw/pull/118055)
- Deliver unrenderable LINE locations as text [#126298](https://github.com/openclaw/openclaw/pull/126298)

</details>

</Accordion>

<Accordion title="SMS, MMS, and RCS with Twilio">

The Twilio-backed channel can now send and receive MMS and show recent provider or carrier states such as sent, delivered, failed, or conflicted without retaining message bodies or phone-number addresses. SMS and RCS messages OpenClaw has already accepted can survive a restart in sender order, while replay protection fails closed instead of accepting work it can no longer protect from duplication.

Delivery observations are kept for 30 days and reflect the latest state reported by Twilio or a carrier, which can differ from recipient-visible delivery. If the replay cache fills, new events are rejected rather than accepted without duplicate protection, and Twilio does not retry that response by default.

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

**Improvements**

- Add Twilio MMS support to the SMS channel [#118664](https://github.com/openclaw/openclaw/pull/118664)
- Track Twilio delivery outcomes for SMS [#118665](https://github.com/openclaw/openclaw/pull/118665)

**Bug fixes**

- Durably queue Twilio messages before acknowledging webhooks [#109866](https://github.com/openclaw/openclaw/pull/109866)
- Preserve Twilio replay protection under heavy SMS traffic [#101107](https://github.com/openclaw/openclaw/pull/101107)
- Normalize Twilio RCS senders for SMS routing [#102373](https://github.com/openclaw/openclaw/pull/102373)
- Protect valid SMS callbacks from invalid webhook traffic [#103620](https://github.com/openclaw/openclaw/pull/103620)
- Isolate Twilio SMS webhook quotas by sender [#104862](https://github.com/openclaw/openclaw/pull/104862)
- Prevent zero SMS chunk limits from sending per-character texts [#118158](https://github.com/openclaw/openclaw/pull/118158)
- Retry transient Twilio MMS attachment downloads [#118994](https://github.com/openclaw/openclaw/pull/118994)
- Retry Twilio MMS downloads that stall after headers [#119002](https://github.com/openclaw/openclaw/pull/119002)
- Authorize text slash commands received over SMS [#90998](https://github.com/openclaw/openclaw/pull/90998)
- Ignore blank Twilio SMS account fallbacks [#109149](https://github.com/openclaw/openclaw/pull/109149)
- Accept spaces after SMS phone prefixes [#111111](https://github.com/openclaw/openclaw/pull/111111)

**Documentation**

- Add Twilio A2P setup and delivery troubleshooting guidance [#88743](https://github.com/openclaw/openclaw/pull/88743)

</details>

</Accordion>

<Accordion title="ClickClack">

ClickClack can place a team discussion beside an OpenClaw session, giving people somewhere to coordinate around the work without turning the agent's main transcript into a meeting room. Guided and command-line setup, readable discussion names, native command menus, attachments, optional group mention rules, and opt-in progress make that room easier to use while keeping the final answer visible.

Opening a discussion still requires an authorized operator and a reachable ClickClack deployment. Generated names remain best effort, and mention-gated or bot-to-bot conversations have to be enabled deliberately.

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

**Improvements**

- Add native command menus to ClickClack [#107907](https://github.com/openclaw/openclaw/pull/107907)
- Add guided and command-line ClickClack setup [#108271](https://github.com/openclaw/openclaw/pull/108271)
- Add ClickClack session discussion channels [#111503](https://github.com/openclaw/openclaw/pull/111503)
- Name ClickClack discussions from session titles [#114711](https://github.com/openclaw/openclaw/pull/114711)
- Generate titles before opening ClickClack discussions [#114740](https://github.com/openclaw/openclaw/pull/114740)
- Add ClickClack group mention gating [#115484](https://github.com/openclaw/openclaw/pull/115484)
- Show opt-in native agent progress in ClickClack [#116683](https://github.com/openclaw/openclaw/pull/116683)
- Add guarded bot-to-bot workflows for ClickClack [#119278](https://github.com/openclaw/openclaw/pull/119278)
- Verify ClickClack setup and show the correct next step [#108332](https://github.com/openclaw/openclaw/pull/108332)
- Configure ClickClack with one-time setup codes [#109398](https://github.com/openclaw/openclaw/pull/109398)
- Support ClickClack setup codes on private HTTP servers [#109429](https://github.com/openclaw/openclaw/pull/109429)
- Separate ClickClack's public and private endpoints [#111724](https://github.com/openclaw/openclaw/pull/111724)
- Deliver session changes to plugin services [#114813](https://github.com/openclaw/openclaw/pull/114813)

**Bug fixes**

- Deliver ClickClack attachments and honor model output budgets [#105775](https://github.com/openclaw/openclaw/pull/105775)
- Make ClickClack session discussions open on real deployments [#111685](https://github.com/openclaw/openclaw/pull/111685)
- Bound ClickClack inbound WebSocket frames [#102480](https://github.com/openclaw/openclaw/pull/102480)
- Prevent ClickClack history from replaying after restart [#102486](https://github.com/openclaw/openclaw/pull/102486)
- Sanitize ClickClack assistant text before delivery [#103142](https://github.com/openclaw/openclaw/pull/103142)
- Stop ClickClack promptly during reconnect delay [#108145](https://github.com/openclaw/openclaw/pull/108145)
- Prevent ClickClack reconnects from skipping inbound events [#108577](https://github.com/openclaw/openclaw/pull/108577)
- Support ClickClack v1 exact setup claim URLs [#111927](https://github.com/openclaw/openclaw/pull/111927)
- Keep ClickClack thread replies from disappearing [#117225](https://github.com/openclaw/openclaw/pull/117225)
- Preserve ClickClack managed discussion bindings [#118851](https://github.com/openclaw/openclaw/pull/118851)
- Keep ClickClack discussion rooms across session changes [#119358](https://github.com/openclaw/openclaw/pull/119358)
- Recover ClickClack monitors from stalled WebSocket handshakes [#106485](https://github.com/openclaw/openclaw/pull/106485)
- Show ClickClack discussions in the macOS dashboard [#111883](https://github.com/openclaw/openclaw/pull/111883)
- Use the configured default agent for global ClickClack discussions [#113997](https://github.com/openclaw/openclaw/pull/113997)
- Preserve file extensions for unnamed ClickClack uploads [#119646](https://github.com/openclaw/openclaw/pull/119646)
- Clarify ClickClack command-menu startup errors [#126802](https://github.com/openclaw/openclaw/pull/126802)
- fix(clickclack): stop queued messages after account shutdown [#128672](https://github.com/openclaw/openclaw/pull/128672)

</details>

</Accordion>

<Accordion title="Reef">

Trusted Claws can talk directly through Reef, OpenClaw's bundled end-to-end encrypted agent channel, using friend-code pairing, direction-specific guard policies, terminal registration and friendship controls, and discovery that keeps an external peer distinct from a local thread. When a peer rejects a message, the sending agent gets bounded feedback and one controlled chance to rephrase before it stops for owner guidance instead of arguing in a loop.

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

**Improvements**

- Add headless Reef registration and friendship CLI [d361b4c](https://github.com/openclaw/openclaw/commit/d361b4c)
- Bundle the Reef encrypted agent-to-agent channel [#106232](https://github.com/openclaw/openclaw/pull/106232)
- Surface Reef rejections and allow routine agent collaboration [#109160](https://github.com/openclaw/openclaw/pull/109160)
- Separate external conversations from local agent sessions [#109411](https://github.com/openclaw/openclaw/pull/109411)
- Notify Reef senders when delivery remains unconfirmed [#110938](https://github.com/openclaw/openclaw/pull/110938)

**Bug fixes**

- Discover trusted Reef peers before first contact [#109905](https://github.com/openclaw/openclaw/pull/109905)
- Stop Reef reconnect loops after channel crashes [#110870](https://github.com/openclaw/openclaw/pull/110870)
- Bound Reef relay JSON response reads [#106456](https://github.com/openclaw/openclaw/pull/106456)
- Send Reef messages through the connected Gateway [#107373](https://github.com/openclaw/openclaw/pull/107373)
- Add a deadline to Reef relay requests [#108333](https://github.com/openclaw/openclaw/pull/108333)
- Reject blank Reef guard credentials at startup [#109667](https://github.com/openclaw/openclaw/pull/109667)
- Bind first turns to directory-discovered Reef peers [#110029](https://github.com/openclaw/openclaw/pull/110029)
- Recover Reef inboxes after gateway restart [#110100](https://github.com/openclaw/openclaw/pull/110100)
- Keep accepted Reef receipts from stalling inbox delivery [#110177](https://github.com/openclaw/openclaw/pull/110177)
- Keep Reef running through startup relay throttling [#110918](https://github.com/openclaw/openclaw/pull/110918)
- Hide internal tool traces in Reef and Zalo Personal replies [#112621](https://github.com/openclaw/openclaw/pull/112621)
- Bind discovered peers after threaded conversations [#125514](https://github.com/openclaw/openclaw/pull/125514)
- Keep Gateway readiness steady during brief Reef reconnects [#126151](https://github.com/openclaw/openclaw/pull/126151)
- fix(reef): stop exposing retired account runtime [#129131](https://github.com/openclaw/openclaw/pull/129131)
- Restore Reef channel configuration discovery [2d5803a](https://github.com/openclaw/openclaw/commit/2d5803a)
- Bound Reef inbox WebSocket frames [#108886](https://github.com/openclaw/openclaw/pull/108886)
- Stop stalled Reef inbox handshakes [#109052](https://github.com/openclaw/openclaw/pull/109052)

**Documentation**

- Add Reef channel setup and plugin documentation [4a7f8c5](https://github.com/openclaw/openclaw/commit/4a7f8c5)

</details>

</Accordion>

<Accordion title="Agent-to-Agent Messaging with A2A">

OpenClaw can now expose selected agents to explicitly trusted external agent systems through the A2A v1.0 protocol. Configured peers can discover those agents, submit and poll authenticated tasks, receive replies as artifacts, and exchange text or structured data, while an unconfigured plugin registers no discovery or task routes at all.

This first version supports one account, keeps tasks in memory, and does not yet provide streaming, push notifications, or cancellation. Authenticated peers currently operate as trusted callers rather than passing through the normal command-policy decision, so this is a deliberate interoperability path for known peers rather than a public agent endpoint.

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

**Improvements**

- feat(a2a): add A2A v1.0 agent-interop channel plugin [#130008](https://github.com/openclaw/openclaw/pull/130008)

**Bug fixes**

- fix(a2a): close request connections after outbound sends [#130873](https://github.com/openclaw/openclaw/pull/130873)

</details>

</Accordion>

<Accordion title="Buzz">

Buzz is now an official OpenClaw channel for team rooms, with guided setup that can route different rooms to different agents and live directories that give those agents current room and member names without replacing the stable UUIDs used for automation. Replies can use native mentions and threads, and mention-gated rooms can carry a small amount of recent authorized context into the next turn without running the model on every background message.

Setup finishes only after Bot-role membership is verified, a room name must resolve uniquely before it can be used safely, native mentions cap at 50, and passive context remains opt-in and tightly bounded.

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

**Improvements**

- Add the official Buzz team-room channel [#113419](https://github.com/openclaw/openclaw/pull/113419)
- Add live Buzz directory and recognizable sender and room names [#116799](https://github.com/openclaw/openclaw/pull/116799)
- Add native Buzz mentions and room-name targeting [#117927](https://github.com/openclaw/openclaw/pull/117927)
- feat(buzz): retain bounded passive context for accepted turns [#130509](https://github.com/openclaw/openclaw/pull/130509)
- Improve Buzz message fidelity [#116096](https://github.com/openclaw/openclaw/pull/116096)
- Show typing indicators during Buzz replies [#116194](https://github.com/openclaw/openclaw/pull/116194)
- feat(buzz): authorize different senders in each room [#129655](https://github.com/openclaw/openclaw/pull/129655)
- feat(buzz): bound bot-to-bot room conversations [#130488](https://github.com/openclaw/openclaw/pull/130488)

**Bug fixes**

- Recover complete Buzz message backlogs after reconnect [#116925](https://github.com/openclaw/openclaw/pull/116925)
- fix: Buzz bots recover relay stalls and reject revoked senders [#130467](https://github.com/openclaw/openclaw/pull/130467)
- fix(buzz): messages sent during Gateway downtime are dropped after restart [#117259](https://github.com/openclaw/openclaw/pull/117259)
- fix(buzz): bound NIP-11 relay information responses [#119182](https://github.com/openclaw/openclaw/pull/119182)
- fix(buzz): stop named account setup from replacing the existing bot identity [#129663](https://github.com/openclaw/openclaw/pull/129663)
- fix(buzz): keep agent replies at thread root [#124884](https://github.com/openclaw/openclaw/pull/124884)

**Documentation**

- Streamline the Buzz plugin setup guide [#114156](https://github.com/openclaw/openclaw/pull/114156)

</details>

</Accordion>

<Accordion title="QQ Bot">

QQ Bot has moved to Tencent's integrity-pinned external plugin while keeping the public `qqbot` channel ID and carrying existing credentials, account selection, allowlists, approval restrictions, streaming behavior, and group tool policy when Tencent 2.0 can represent them safely. If an older policy cannot be translated without weakening it, Doctor stops for an explicit repair instead of quietly changing the rules. Inbound envelopes already accepted into the local queue can also resume after a restart.

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

**Improvements**

- Move QQBot to Tencent's external plugin [#107295](https://github.com/openclaw/openclaw/pull/107295)

**Bug fixes**

- Add durable inbound replay for QQBot [#110844](https://github.com/openclaw/openclaw/pull/110844)
- Stop stalled QQBot speech transcription requests [#102028](https://github.com/openclaw/openclaw/pull/102028)
- Wrap QQ Bot approval commands safely [#102119](https://github.com/openclaw/openclaw/pull/102119)
- Classify QQ Bot media types case-insensitively [#102753](https://github.com/openclaw/openclaw/pull/102753)
- Preserve canonical MIME types for QQBot images [#102795](https://github.com/openclaw/openclaw/pull/102795)
- Use the core typing keepalive loop in QQBot [#104438](https://github.com/openclaw/openclaw/pull/104438)
- Keep long QQBot replies within the passive-send limit [#104634](https://github.com/openclaw/openclaw/pull/104634)
- Stop QQBot token refresh listener buildup [#105886](https://github.com/openclaw/openclaw/pull/105886)
- Time out stalled QQBot channel API response bodies [#108895](https://github.com/openclaw/openclaw/pull/108895)
- Ignore blank QQBot application IDs [#109460](https://github.com/openclaw/openclaw/pull/109460)
- Prevent replayed QQBot commands from clearing storage twice [#110904](https://github.com/openclaw/openclaw/pull/110904)
- Apply QQBot access policy to quoted message context [#114136](https://github.com/openclaw/openclaw/pull/114136)
- Keep QQBot routing on the live runtime configuration [#114227](https://github.com/openclaw/openclaw/pull/114227)
- Reconnect QQBot when heartbeat ACKs stop [#114902](https://github.com/openclaw/openclaw/pull/114902)
- Restore one-time and recurring QQBot reminders [#115488](https://github.com/openclaw/openclaw/pull/115488)
- Keep QQBot channel API calls on the active account [#118575](https://github.com/openclaw/openclaw/pull/118575)
- Keep partial QQBot credential edits from restoring stale backups [#120028](https://github.com/openclaw/openclaw/pull/120028)
- Keep QQBot connected after malformed gateway HELLO frames [#121031](https://github.com/openclaw/openclaw/pull/121031)
- Bound stalled QQBot token requests [#102897](https://github.com/openclaw/openclaw/pull/102897)
- Prevent QQBot media downloads from hanging before response headers [#103018](https://github.com/openclaw/openclaw/pull/103018)
- Time out stalled QQBot response bodies [#103855](https://github.com/openclaw/openclaw/pull/103855)
- Clear QQBot voice-send timers after delivery settles [#105885](https://github.com/openclaw/openclaw/pull/105885)
- Recover QQBot from stalled WebSocket handshakes [#106484](https://github.com/openclaw/openclaw/pull/106484)
- Route mixed-case QQBot group and channel targets correctly [#109008](https://github.com/openclaw/openclaw/pull/109008)
- Reject blank QQ Bot client-secret environment values [#109815](https://github.com/openclaw/openclaw/pull/109815)
- Bound QQ Bot client-secret file reads [#110002](https://github.com/openclaw/openclaw/pull/110002)
- Return QQ Bot media download errors promptly [#119466](https://github.com/openclaw/openclaw/pull/119466)
- Remove misleading QQBot data-directory diagnostics [#119849](https://github.com/openclaw/openclaw/pull/119849)
- Preserve QQ Bot group announcement routes [#98053](https://github.com/openclaw/openclaw/pull/98053)

**Documentation**

- Correct QQBot installation package documentation [#122417](https://github.com/openclaw/openclaw/pull/122417)

</details>

</Accordion>

<Accordion title="Zalo and Zalo Personal">

Zalo Bot and Zalo Personal now keep accepted messages through restarts using separate recovery paths. Zalo Bot records a webhook before acknowledging it, while Zalo Personal resumes accepted socket messages from its account queue without one delayed conversation holding up unrelated chats. Polling and webhook modes remain mutually exclusive, and targeting, reactions, formatting, delivery errors, and partial receipts remain specific to the path that handled the message.

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

**Improvements**

- Recover accepted Zalo Personal messages after local crashes [#110916](https://github.com/openclaw/openclaw/pull/110916)

**Bug fixes**

- Prevent Zalo webhook message loss after acknowledgment [#110630](https://github.com/openclaw/openclaw/pull/110630)
- Hide internal tool traces from Zalo replies [#103377](https://github.com/openclaw/openclaw/pull/103377)
- Share offset-preserving text chunk ranges for Zalouser [#105842](https://github.com/openclaw/openclaw/pull/105842)
- Bound stalled Zalo Bot API requests [#111636](https://github.com/openclaw/openclaw/pull/111636)
- Make ZaloUser emphasis follow CommonMark rules [#113134](https://github.com/openclaw/openclaw/pull/113134)
- Align ZaloUser block formatting with CommonMark [#113590](https://github.com/openclaw/openclaw/pull/113590)
- Send Zalo text when optional media is blank [#114450](https://github.com/openclaw/openclaw/pull/114450)
- Surface Zalo delivery failures and preserve partial-send receipts [#117864](https://github.com/openclaw/openclaw/pull/117864)
- Route Zalouser reactions to the correct conversation [#118536](https://github.com/openclaw/openclaw/pull/118536)
- fix(zalo): bound stalled inbound media header waits [#104578](https://github.com/openclaw/openclaw/pull/104578)
- Stop Zalo polling backoff immediately on abort [#106498](https://github.com/openclaw/openclaw/pull/106498)
- Report unsupported Zalo message actions correctly [#108434](https://github.com/openclaw/openclaw/pull/108434)
- Distinguish Zalouser probe timeouts from missing authentication [#111336](https://github.com/openclaw/openclaw/pull/111336)
- Stop Zalo startup when Gateway shutdown already won [#115763](https://github.com/openclaw/openclaw/pull/115763)
- Deliver Zalo messages to prefixed direct and group targets [#115814](https://github.com/openclaw/openclaw/pull/115814)
- Report ZaloUser delivery failures and preserve partial receipts [#117860](https://github.com/openclaw/openclaw/pull/117860)
- Restore Zalo media when its size limit is non-positive [#120988](https://github.com/openclaw/openclaw/pull/120988)
- Report failed Zalo HTTP probes as unhealthy [#124593](https://github.com/openclaw/openclaw/pull/124593)

</details>

</Accordion>

<Accordion title="Tlon and Urbit">

Tlon now saves an accepted Urbit message before acknowledging it, so work already admitted to OpenClaw can resume after a restart without immediately abandoning the server cursor. Replies gain native Markdown lists, and oversized SSE events or JSON payloads stop before they can grow in memory without bound.

There is one hard recovery limit. If Eyre has definitively deleted a channel, OpenClaw can create and subscribe to another one, but the old cursor and its server-side history are gone.

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

**Improvements**

- Preserve accepted Tlon messages across restarts [#110910](https://github.com/openclaw/openclaw/pull/110910)
- Render Markdown lists natively in Tlon replies [#112968](https://github.com/openclaw/openclaw/pull/112968)

**Bug fixes**

- Bound Tlon SSE events to prevent memory exhaustion [#101274](https://github.com/openclaw/openclaw/pull/101274)
- Keep internal tool traces out of Tlon messages [#103450](https://github.com/openclaw/openclaw/pull/103450)
- Bound long-running Tlon monitor tracking [#103658](https://github.com/openclaw/openclaw/pull/103658)
- Clear Tlon SSE timers after failed connections [#104585](https://github.com/openclaw/openclaw/pull/104585)
- Send fragment-bearing Tlon image URLs as media [#104853](https://github.com/openclaw/openclaw/pull/104853)
- Stop Tlon reconnects after monitoring ends [#108168](https://github.com/openclaw/openclaw/pull/108168)
- Bound Tlon login response memory use [#109697](https://github.com/openclaw/openclaw/pull/109697)
- Close failed Tlon upload response streams [#110442](https://github.com/openclaw/openclaw/pull/110442)
- Release unread Tlon HTTP and SSE bodies [#111275](https://github.com/openclaw/openclaw/pull/111275)
- Prevent Tlon monitor shutdown hangs during startup [#114940](https://github.com/openclaw/openclaw/pull/114940)
- Honor the configured timezone in Tlon summaries [#117429](https://github.com/openclaw/openclaw/pull/117429)
- Close failed Tlon connections without leaking sockets [#117475](https://github.com/openclaw/openclaw/pull/117475)
- fix(tlon): keep Urbit SSE streams working when data lines omit the space [#130048](https://github.com/openclaw/openclaw/pull/130048)
- fix(tlon): await durable invite side effects [#130329](https://github.com/openclaw/openclaw/pull/130329)
- Clean up Tlon authentication retry listeners [#101661](https://github.com/openclaw/openclaw/pull/101661)
- Bound stalled Tlon file uploads with explicit deadlines [#102903](https://github.com/openclaw/openclaw/pull/102903)
- Bound stalled Tlon media header waits [#104132](https://github.com/openclaw/openclaw/pull/104132)
- Fix Tlon custom S3 endpoint parsing [#107567](https://github.com/openclaw/openclaw/pull/107567)
- Close unread Tlon account-probe response streams [#111081](https://github.com/openclaw/openclaw/pull/111081)
- Prevent Tlon shutdown cleanup from leaking rejections [#111106](https://github.com/openclaw/openclaw/pull/111106)
- Make Tlon probes honor adapter timeouts [#113646](https://github.com/openclaw/openclaw/pull/113646)
- Apply Tlon channel discovery settings live [#114949](https://github.com/openclaw/openclaw/pull/114949)
- Split long Tlon messages into bounded chunks [#117438](https://github.com/openclaw/openclaw/pull/117438)
- Tell Tlon agents when inbound images are unavailable [#122783](https://github.com/openclaw/openclaw/pull/122783)
- fix(tlon): await message persistence before acknowledgement [#129090](https://github.com/openclaw/openclaw/pull/129090)

</details>

</Accordion>

<Accordion title="Nextcloud Talk">

Nextcloud Talk can now process different rooms concurrently while preserving message order within each room. Up to 32 deliveries can be active at once, with excess work queued, and sends or reactions to an unresponsive self-hosted or remote server now fail within a bounded time instead of hanging indefinitely.

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

**Bug fixes**

- Hide internal tool traces in Nextcloud Talk replies [#101712](https://github.com/openclaw/openclaw/pull/101712)
- Allow parallel delivery across Nextcloud Talk rooms [#118692](https://github.com/openclaw/openclaw/pull/118692)
- Bound hanging Nextcloud Talk message and reaction sends [#102025](https://github.com/openclaw/openclaw/pull/102025)
- Bound stalled Nextcloud Talk room lookups [#102859](https://github.com/openclaw/openclaw/pull/102859)
- Keep Nextcloud Talk error snippets Unicode-safe [#102949](https://github.com/openclaw/openclaw/pull/102949)
- Limit Nextcloud Talk actions to supported reactions [#104906](https://github.com/openclaw/openclaw/pull/104906)
- Accept mixed-case Nextcloud Talk target prefixes [#105818](https://github.com/openclaw/openclaw/pull/105818)
- Release failed Nextcloud Talk response bodies [#110441](https://github.com/openclaw/openclaw/pull/110441)
- Reject unsupported Nextcloud Talk setup URLs [#111054](https://github.com/openclaw/openclaw/pull/111054)
- Stop disabled Nextcloud Talk accounts from sending reactions [#112675](https://github.com/openclaw/openclaw/pull/112675)
- Preserve Nextcloud Talk current-room aliases across plugin upgrades [#113432](https://github.com/openclaw/openclaw/pull/113432)
- Prevent shared-proxy Nextcloud Talk webhook lockouts [#126251](https://github.com/openclaw/openclaw/pull/126251)
- fix(nextcloud-talk): dispose webhook auth rate limiter on monitor stop [#126908](https://github.com/openclaw/openclaw/pull/126908)

</details>

</Accordion>

<Accordion title="Nostr">

A Nostr direct message can move to the next configured relay when one cannot connect, return the real connection error when every relay fails, and expose the successful relay's real event ID instead of a synthetic timestamp. Named accounts, protected keys, profile imports, reply targets, and ordered encrypted chunks also stay attached to the selected account more consistently.

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

**Bug fixes**

- Fail over Nostr publishes when a relay cannot connect [#110007](https://github.com/openclaw/openclaw/pull/110007)
- Keep Nostr replies attached to their direct messages [#110085](https://github.com/openclaw/openclaw/pull/110085)
- Reject malformed Nostr profile fields without crashing [#110684](https://github.com/openclaw/openclaw/pull/110684)
- Report unavailable Nostr ingress when its queue cannot open [#115313](https://github.com/openclaw/openclaw/pull/115313)
- Keep private tool traces out of Nostr messages [#115769](https://github.com/openclaw/openclaw/pull/115769)
- Deliver long encrypted Nostr replies as ordered chunks [#115816](https://github.com/openclaw/openclaw/pull/115816)
- Preserve Nostr accounts configured with SecretRefs [#126934](https://github.com/openclaw/openclaw/pull/126934)
- fix(nostr): validate private keys consistently [#130305](https://github.com/openclaw/openclaw/pull/130305)
- Accept uppercase Nostr keys in setup and direct messages [#109878](https://github.com/openclaw/openclaw/pull/109878)
- Report relay event IDs in Nostr send receipts [#110006](https://github.com/openclaw/openclaw/pull/110006)
- Reject non-object Nostr profile metadata safely [#110330](https://github.com/openclaw/openclaw/pull/110330)
- Report Nostr relay connections only after success [#110878](https://github.com/openclaw/openclaw/pull/110878)
- Accept prefixed Nostr targets and allowlist identities [#110881](https://github.com/openclaw/openclaw/pull/110881)
- Preserve named Nostr accounts during setup [#111134](https://github.com/openclaw/openclaw/pull/111134)
- Make Nostr profile imports deterministic across relays [#111798](https://github.com/openclaw/openclaw/pull/111798)
- Stop reporting normal Nostr shutdown as a relay error [#111905](https://github.com/openclaw/openclaw/pull/111905)

</details>

</Accordion>

<Accordion title="Synology Chat">

Synology Chat now records inbound webhook work before returning success, allowing accepted messages to resume after a restart. If the local write fails, OpenClaw returns an error so the sender can redeliver, while the upstream retry remains controlled by Synology. Long Unicode replies keep their order, lookups and responses are bounded, and uncertain outbound sends remain unresolved instead of being replayed into a duplicate.

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

**Improvements**

- Preserve Synology Chat webhooks across restarts [#110899](https://github.com/openclaw/openclaw/pull/110899)

**Bug fixes**

- Prevent Synology Chat from sending internal tool traces [#102925](https://github.com/openclaw/openclaw/pull/102925)
- Bound Synology Chat user-list responses [#105089](https://github.com/openclaw/openclaw/pull/105089)
- Deliver long Synology Chat replies in ordered chunks [#116645](https://github.com/openclaw/openclaw/pull/116645)
- Report rejected Synology webhook deliveries [#118558](https://github.com/openclaw/openclaw/pull/118558)
- Prevent duplicate Synology Chat messages after uncertain sends [#119539](https://github.com/openclaw/openclaw/pull/119539)
- Prevent duplicate Synology Chat sends after custody loss [#123953](https://github.com/openclaw/openclaw/pull/123953)
- Isolate Synology webhook throttling by client [#103619](https://github.com/openclaw/openclaw/pull/103619)
- Preserve Unicode Synology reply recipients [#108019](https://github.com/openclaw/openclaw/pull/108019)
- Bound Synology user lookups to 15 seconds [#109111](https://github.com/openclaw/openclaw/pull/109111)
- Bound Synology Chat outgoing response deadlines [#110520](https://github.com/openclaw/openclaw/pull/110520)
- Stop reporting fabricated Synology Chat message IDs [#110770](https://github.com/openclaw/openclaw/pull/110770)

</details>

</Accordion>

<Accordion title="Twitch">

Twitch chat already accepted into OpenClaw's local queue can continue after a process crash. Stalled user lookups can be cancelled, stopped accounts stay stopped even when an earlier connection attempt finishes late, and ordinary replies keep normalized attachment links while internal tool traces and XML scaffolding are removed before they reach chat.

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

**Bug fixes**

- Recover accepted Twitch chat after local crashes [#110852](https://github.com/openclaw/openclaw/pull/110852)
- Prevent internal tool traces from appearing in Twitch chat [#103109](https://github.com/openclaw/openclaw/pull/103109)
- Preserve emoji in long Twitch replies [#104030](https://github.com/openclaw/openclaw/pull/104030)
- Bound stalled Twitch user lookups [#105883](https://github.com/openclaw/openclaw/pull/105883)
- fix(twitch): prevent stopped accounts from reconnecting after delayed startup [#128909](https://github.com/openclaw/openclaw/pull/128909)
- fix(twitch): normal agent replies silently discard attachments [#129644](https://github.com/openclaw/openclaw/pull/129644)
- Abort stalled Twitch user lookups [#107360](https://github.com/openclaw/openclaw/pull/107360)
- Preserve underscores in Twitch identifiers and URLs [#108548](https://github.com/openclaw/openclaw/pull/108548)
- Prevent retired Twitch chat managers from reconnecting [#127103](https://github.com/openclaw/openclaw/pull/127103)
- fix(twitch): retain native sender identity in execution audits [#130730](https://github.com/openclaw/openclaw/pull/130730)

</details>

</Accordion>

<Accordion title="IRC">

IRC channel messages already admitted to OpenClaw can resume in order after a restart without echoing the bot's own replies back into the room. Direct-message recovery stays tied to the connection that accepted it and stops if that identity changes, while mentions follow IRC nickname rules, Markdown becomes readable plain text, and internal tool traces stay out of the channel.

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

**Improvements**

- Add durable local ingress for IRC messages [#110914](https://github.com/openclaw/openclaw/pull/110914)

**Bug fixes**

- Hide internal tool traces from IRC replies [#109012](https://github.com/openclaw/openclaw/pull/109012)
- Accept the documented IRC configWrites setting [#112392](https://github.com/openclaw/openclaw/pull/112392)
- Send readable plain text to IRC instead of Markdown source [#112961](https://github.com/openclaw/openclaw/pull/112961)
- Apply RFC 1459 nickname matching to IRC bot mentions [#116758](https://github.com/openclaw/openclaw/pull/116758)

</details>

</Accordion>

<Accordion title="Android Chat">

Android now writes text, images, and voice notes to its outbox before using the network, keeping them through offline periods and restarts until conversation history confirms delivery. If the outcome remains uncertain, the item stays visible with explicit Retry and Delete controls and is not sent again automatically.

Supported audio and video play inline, video uses the native upload flow, and notification replies return to the exact saved conversation or fail. Older 2026.7.x OpenClaw installations use a reduced compatibility path.

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

**Improvements**

- Make Android chat sends durable across offline use and restarts [#104089](https://github.com/openclaw/openclaw/pull/104089)
- Play audio and video inside Android chat [#115916](https://github.com/openclaw/openclaw/pull/115916)
- Add inline media playback and video upload on Android [#116037](https://github.com/openclaw/openclaw/pull/116037)
- Add Android conversation notifications with inline Reply [#120389](https://github.com/openclaw/openclaw/pull/120389)

**Bug fixes**

- Stop Android from silently replaying ambiguous sends [#103273](https://github.com/openclaw/openclaw/pull/103273)
- Restore Android chat sends against older gateways [#126540](https://github.com/openclaw/openclaw/pull/126540)
- fix(android): show channel sender name instead of "You" for peer messages [#119864](https://github.com/openclaw/openclaw/pull/119864)
- Cancel Android link preview network calls [#101853](https://github.com/openclaw/openclaw/pull/101853)
- Keep Android offline chat actions readable [#107404](https://github.com/openclaw/openclaw/pull/107404)

</details>

</Accordion>

<Accordion title="iOS and macOS Chat">

The iOS and macOS OpenClaw apps can play supported managed audio and video inside chat, upload video from the native composer, and hand the active attachment to system Now Playing controls. A slow accepted reply stays visibly pending while live state and saved history reconcile, so late history cannot clear a newer turn just because it arrived second.

A run that truly produces no output eventually releases the composer without inventing a reply. Native video uploads retain the 20 MB limit, and these chat apps remain separate from the iMessage channel plugin.

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

**Improvements**

- Render collapsible details in native chats [#115641](https://github.com/openclaw/openclaw/pull/115641)
- Add inline audio and video playback to Apple chats [#115903](https://github.com/openclaw/openclaw/pull/115903)
- Complete Apple media playback and video upload [#116051](https://github.com/openclaw/openclaw/pull/116051)

**Bug fixes**

- Render Markdown lists and dividers correctly on iOS [#111223](https://github.com/openclaw/openclaw/pull/111223)
- Keep slow Apple chat replies pending until they reconcile [#97722](https://github.com/openclaw/openclaw/pull/97722)
- Render accessible Markdown heading hierarchy in Apple chat [#103404](https://github.com/openclaw/openclaw/pull/103404)
- Keep visible reasoning headings visually subdued [#103436](https://github.com/openclaw/openclaw/pull/103436)
- Preserve active native chat when another run finishes [#113786](https://github.com/openclaw/openclaw/pull/113786)
- Prevent duplicate native chat replies after tool runs [#115678](https://github.com/openclaw/openclaw/pull/115678)
- Prevent Apple chat sends from stalling on older gateways [#126559](https://github.com/openclaw/openclaw/pull/126559)
- Show full multiline Markdown list items on iPhone and iPad [#112723](https://github.com/openclaw/openclaw/pull/112723)
- fix(apps): prevent stale Now Playing after ownership changes [#128381](https://github.com/openclaw/openclaw/pull/128381)

</details>

</Accordion>

<Accordion title="Control UI, WebChat, and TUI">

Control UI chat now gives supported managed audio and video their own cards instead of treating every attachment like a download, including a clear preparing or unavailable state when the media is not ready. Across Control UI, WebChat, and TUI, prompts, live work, attachments, and replies stay aligned when several clients share a conversation or reconnect at different times.

These are OpenClaw's own chat clients rather than external messaging services, and the saved conversation remains the final record when a live update and refreshed history disagree.

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

**Improvements**

- Add guided channel setup to Control UI [#106469](https://github.com/openclaw/openclaw/pull/106469)
- Show live run telemetry across chat clients [#113084](https://github.com/openclaw/openclaw/pull/113084)
- Add first-class audio and video cards to Control UI chat [#115764](https://github.com/openclaw/openclaw/pull/115764)
- Add inline audio and video playback to Control UI chat [#116115](https://github.com/openclaw/openclaw/pull/116115)
- Show Discord and Slack conversation avatars in the sidebar [#125668](https://github.com/openclaw/openclaw/pull/125668)

**Bug fixes**

- Prevent stale chat panes from sending to switched branches [#113073](https://github.com/openclaw/openclaw/pull/113073)
- Keep WebChat messages and live work in the correct turn [#113266](https://github.com/openclaw/openclaw/pull/113266)
- Make TUI errors safe and streamed replies chronological [#114869](https://github.com/openclaw/openclaw/pull/114869)
- Keep shared Control UI and TUI chats synchronized [#115066](https://github.com/openclaw/openclaw/pull/115066)
- Keep shared Web and TUI chats synchronized under load [#115191](https://github.com/openclaw/openclaw/pull/115191)
- Keep delayed shared-chat prompts in the right TUI order [#115219](https://github.com/openclaw/openclaw/pull/115219)
- fix(ui): structure chat transcript attachments by kind [#127076](https://github.com/openclaw/openclaw/pull/127076)
- Preserve Matrix and Signal conversation identities in the terminal [#113800](https://github.com/openclaw/openclaw/pull/113800)
- Honor outbound hooks in Control UI chat replies [#114351](https://github.com/openclaw/openclaw/pull/114351)
- Keep case-distinct channel conversations isolated [#114638](https://github.com/openclaw/openclaw/pull/114638)
- Preserve shared prompts when TUI scrollback is full [#115165](https://github.com/openclaw/openclaw/pull/115165)
- Show human names for Slack, Buzz, and Matrix sessions [#117680](https://github.com/openclaw/openclaw/pull/117680)
- Keep failed chat runs active until terminal state is saved [#126183](https://github.com/openclaw/openclaw/pull/126183)
- Prevent duplicate assistant bubbles after history refresh [#126364](https://github.com/openclaw/openclaw/pull/126364)
- fix: current chat attachments fail after send acknowledgement [#127737](https://github.com/openclaw/openclaw/pull/127737)
- fix(gateway): preserve queued WebChat overflow reply delivery [#129971](https://github.com/openclaw/openclaw/pull/129971)
- Preserve repeated messages in imported CLI session history [#113703](https://github.com/openclaw/openclaw/pull/113703)
- Hide duplicate raw image Markdown beside attachments [#125674](https://github.com/openclaw/openclaw/pull/125674)
- Preserve WebChat failure state during restart drain [#125985](https://github.com/openclaw/openclaw/pull/125985)
- fix: preserve message-tool images across gateway restarts [#127729](https://github.com/openclaw/openclaw/pull/127729)
- fix: show WebChat attachments from active runs [AI-assisted] [#127879](https://github.com/openclaw/openclaw/pull/127879)
- fix: keep message identity stable through send failures [#129127](https://github.com/openclaw/openclaw/pull/129127)

</details>

</Accordion>

<Accordion title="Voice calls">

Voice Call can opt into an agent's main transcript when an operator wants phone and desktop conversations to share history, while the default remains one session per phone. Realtime agents can speak their final words and request a hangup, and failed startup, carrier hangup, or media silence now closes the unusable session instead of leaving it active until the maximum duration.

Choosing the main transcript places raw call turns in primary history. A carrier can still reject a requested hangup, and carrier, provider-media, Discord, Talk, and Meet calls keep their own credentials and lifecycle rather than being treated as one interchangeable voice system.

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

**Improvements**

- Let Voice Call share the agent's main session [#124708](https://github.com/openclaw/openclaw/pull/124708)
- Let realtime voice agents end active calls [#125525](https://github.com/openclaw/openclaw/pull/125525)
- feat(talk): add macOS realtime Gateway relay [#128204](https://github.com/openclaw/openclaw/pull/128204)

**Bug fixes**

- Hang up carrier calls after realtime startup failures [#118699](https://github.com/openclaw/openclaw/pull/118699)
- Preserve routed-agent credentials for realtime voice [#125111](https://github.com/openclaw/openclaw/pull/125111)
- Keep voice calls working across Gateway restarts [#125458](https://github.com/openclaw/openclaw/pull/125458)
- End realtime voice calls after hangup or media silence [#125463](https://github.com/openclaw/openclaw/pull/125463)
- Smooth realtime voice playback and telephony streaming [#125620](https://github.com/openclaw/openclaw/pull/125620)
- Keep active voice calls alive when replacement setup fails [#117960](https://github.com/openclaw/openclaw/pull/117960)
- Keep realtime voice close bounded and transcript state durable [#118025](https://github.com/openclaw/openclaw/pull/118025)
- Stop superseded realtime Voice Call consults [#118301](https://github.com/openclaw/openclaw/pull/118301)
- Keep Voice Call runtime ownership safe across Gateway restarts [#120289](https://github.com/openclaw/openclaw/pull/120289)
- Recognize agent-scoped OpenAI browser Talk credentials [#125142](https://github.com/openclaw/openclaw/pull/125142)
- Use each routed agent's credentials for realtime phone calls [#125144](https://github.com/openclaw/openclaw/pull/125144)
- Resolve Discord realtime voice SecretRefs [#125443](https://github.com/openclaw/openclaw/pull/125443)
- Expose voice-call audio streams through Tailscale [#125468](https://github.com/openclaw/openclaw/pull/125468)
- Keep realtime voice calls alive through brief reconnects [#125469](https://github.com/openclaw/openclaw/pull/125469)
- Preserve carrier-confirmed voice-call termination [#125717](https://github.com/openclaw/openclaw/pull/125717)
- Enable active-agent consultation in OAuth browser Talk [#126363](https://github.com/openclaw/openclaw/pull/126363)
- Redial Google Meet after completed Twilio calls [#120807](https://github.com/openclaw/openclaw/pull/120807)
- Stop failed Google Meet voice gateway connections [#120822](https://github.com/openclaw/openclaw/pull/120822)
- Preserve Discord voice lookup errors and agent-scoped realtime auth [#125069](https://github.com/openclaw/openclaw/pull/125069)
- Keep offline Voice Call status read-only [#125354](https://github.com/openclaw/openclaw/pull/125354)
- Use typed Gateway fallback errors in Google Meet CLI [#125495](https://github.com/openclaw/openclaw/pull/125495)
- Allow Voice Call to use alternate Tailscale HTTPS ports [#125552](https://github.com/openclaw/openclaw/pull/125552)

</details>

</Accordion>

<Accordion title="Raft">

Raft setup now says clearly when the machine running OpenClaw cannot find the Raft executable instead of presenting a configured channel as healthy. A passing probe means the command-line tool was available at that moment, not that a later connection or message has already succeeded.

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

**Bug fixes**

- Report missing Raft CLI in channel status [#123140](https://github.com/openclaw/openclaw/pull/123140)

</details>

</Accordion>

</AccordionGroup>

## Memory

Memory now lets an eligible personal Claw recall relevant context from that agent's other private conversations, including what mattered immediately before a reset, while visible workflows let you search indexed sources, inspect how memory is working, import supported history, and remove attributable derived memory. Recall stays within the same agent's private conversations and respects explicit isolation and access policy.

Built-in Memory owns the core search and recall path, with a supported Doctor migration from QMD. LanceDB, Memory Wiki, external embedding services, `MEMORY.md`, and `USER.md` still have distinct roles, and forgetting derived memory does not erase the original conversation or copies outside OpenClaw.

<AccordionGroup>

<Accordion title="Upgrading to built-in Memory">

Built-in Memory now owns the core search and recall path. If you use QMD, run `openclaw doctor --fix` to remove retired QMD settings, carry forward supported extra paths and any session indexing you explicitly enabled, preserve compatible rows already in the agent database, and rebuild the index from canonical Markdown.

The migration carries supported data into a different core, so QMD-only reranking, query expansion, and cross-agent transcript search are retired. Malformed structures, incompatible vector dimensions, and data without a safe owner remain stopped for repair.

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

**Improvements**

- Retire QMD and use builtin memory exclusively [#120936](https://github.com/openclaw/openclaw/pull/120936)
- Add a pre-cutover check for missing local embedding setup [#123575](https://github.com/openclaw/openclaw/pull/123575)

**Bug fixes**

- Recover gateway startup from legacy Memory Core index conflicts [#108652](https://github.com/openclaw/openclaw/pull/108652)
- Prevent quadratic Memory Core migrations [#109355](https://github.com/openclaw/openclaw/pull/109355)
- Coordinate QMD writers with SQLite leases [#109636](https://github.com/openclaw/openclaw/pull/109636)
- Recover Memory Core from same-file legacy index conflicts [#110216](https://github.com/openclaw/openclaw/pull/110216)
- Restore upgrades for pre-provenance agent databases [#115144](https://github.com/openclaw/openclaw/pull/115144)
- Prevent malformed Active Memory timestamps from blocking migration [#103116](https://github.com/openclaw/openclaw/pull/103116)
- Let Memory Core upgrades preserve compatible canonical cache rows [#107243](https://github.com/openclaw/openclaw/pull/107243)
- Let Doctor repair legacy memory-index schemas [#115154](https://github.com/openclaw/openclaw/pull/115154)
- Recover Memory Core upgrades with divergent legacy journals [#115855](https://github.com/openclaw/openclaw/pull/115855)
- Keep memory databases compatible with rollback [#116003](https://github.com/openclaw/openclaw/pull/116003)
- Keep memory diagnostics usable during degraded upgrades [#116074](https://github.com/openclaw/openclaw/pull/116074)
- fix(memory): preserve session recall when upgrading from QMD [#130016](https://github.com/openclaw/openclaw/pull/130016)
- Repair legacy memory-search settings without losing tuning [#68685](https://github.com/openclaw/openclaw/pull/68685)
- Prevent oversized workspace files from crashing doctor repairs [#101448](https://github.com/openclaw/openclaw/pull/101448)
- Remove false legacy-memory warnings for empty sidecars [#114661](https://github.com/openclaw/openclaw/pull/114661)

**Documentation**

- Document automatic migration from QMD memory [#121911](https://github.com/openclaw/openclaw/pull/121911)

</details>

</Accordion>

<Accordion title="Finding and recalling past context">

On eligible personal setups, your Claw can recall relevant context from that same agent's other private conversations by default, including what mattered immediately before you reset the session. Recall remains limited to that agent's private conversations; groups, channels, shared aliases, other agents, deleted history, and policy-blocked sources stay out, and an explicit direct-message isolation setting still wins.

Built-in search now understands filenames, full and partial Unicode paths, and configured extra paths, broadens thin strict matches, and keeps keyword results available when an optional embedding provider cannot start. Search stays within the configured roots and agent boundaries, while required embedding providers fail closed.

Sessions without a configured reset policy now remain open across days, and durable reset or compaction markers explain visible history changes. SQLite-backed chats on web, macOS, iOS, and Android can rewind to a user message, fork the conversation, and switch among preserved branches. Rewinding changes the transcript branch, but it does not undo files, sent messages, or other tool side effects.

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

**Improvements**

- Let personal agents remember across private conversations [#100140](https://github.com/openclaw/openclaw/pull/100140)
- Add per-agent Memory Wiki vault isolation [#103349](https://github.com/openclaw/openclaw/pull/103349)
- Start configured local embedding services on demand [#104306](https://github.com/openclaw/openclaw/pull/104306)
- Find memories by filename and path [#104449](https://github.com/openclaw/openclaw/pull/104449)
- Preserve interrupted-turn context and reopen search-hit history [#105831](https://github.com/openclaw/openclaw/pull/105831)
- Default cross-conversation recall on for personal installs [#110597](https://github.com/openclaw/openclaw/pull/110597)
- Rewind or fork a chat from any user message [#110660](https://github.com/openclaw/openclaw/pull/110660)
- Switch between preserved transcript branches from chat [#110857](https://github.com/openclaw/openclaw/pull/110857)
- Add rewind and fork actions to native chat bubbles [#110886](https://github.com/openclaw/openclaw/pull/110886)
- Keep sessions continuous by default [#111140](https://github.com/openclaw/openclaw/pull/111140)
- Add native session branch switching with safe offline queues [#112056](https://github.com/openclaw/openclaw/pull/112056)
- Add Android chat rewind, fork, and branch switching [#112284](https://github.com/openclaw/openclaw/pull/112284)
- Improve conversational memory recall [#121196](https://github.com/openclaw/openclaw/pull/121196)
- Add glob patterns to extra memory paths [#121209](https://github.com/openclaw/openclaw/pull/121209)
- Enable diverse builtin memory results by default [#121224](https://github.com/openclaw/openclaw/pull/121224)
- Show durable reset and compaction boundaries in chat history [#122222](https://github.com/openclaw/openclaw/pull/122222)
- Support embedding-only managed llama.cpp servers [#125383](https://github.com/openclaw/openclaw/pull/125383)
- fix(llama): support embedding-only managed setup [#130883](https://github.com/openclaw/openclaw/pull/130883)
- Add opt-in persistent sessions for webhook hooks [#75918](https://github.com/openclaw/openclaw/pull/75918)
- Show llama.cpp acceleration and runtime diagnostics [#104310](https://github.com/openclaw/openclaw/pull/104310)
- Add recall-specific fast mode for Active Memory [#108043](https://github.com/openclaw/openclaw/pull/108043)
- Avoid duplicate embeddings during filtered memory recall [#125735](https://github.com/openclaw/openclaw/pull/125735)
- Skip unchanged QMD session export rebuilds [#77158](https://github.com/openclaw/openclaw/pull/77158)
- Prepare active-memory recall context once before launch [061ccb1](https://github.com/openclaw/openclaw/commit/061ccb1)

**Bug fixes**

- Harden embedding batch output and error handling [#103472](https://github.com/openclaw/openclaw/pull/103472)
- Isolate LanceDB memories by agent [#103799](https://github.com/openclaw/openclaw/pull/103799)
- Restore Active Memory recall with SQLite sessions [#105255](https://github.com/openclaw/openclaw/pull/105255)
- Route Active Memory recall through subscription-authenticated Claude CLI [#106840](https://github.com/openclaw/openclaw/pull/106840)
- Block cross-agent Memory Wiki reads from sandboxed sub-agents [#111463](https://github.com/openclaw/openclaw/pull/111463)
- Prevent broad memory searches from freezing the gateway [#113359](https://github.com/openclaw/openclaw/pull/113359)
- Prevent overlapping memory embedding providers [#113471](https://github.com/openclaw/openclaw/pull/113471)
- Restore prompt images when rewinding or forking chats [#113945](https://github.com/openclaw/openclaw/pull/113945)
- Keep Codex transcript mirroring responsive as history grows [#115070](https://github.com/openclaw/openclaw/pull/115070)
- Fall back to keyword memory search when embeddings cannot start [#115397](https://github.com/openclaw/openclaw/pull/115397)
- Reuse one Active Memory recall per run [#115627](https://github.com/openclaw/openclaw/pull/115627)
- Index active memory from SQLite while preserving searchable archives [#117334](https://github.com/openclaw/openclaw/pull/117334)
- Restore CJK recall intent in Active Memory [#117419](https://github.com/openclaw/openclaw/pull/117419)
- Warn when memory search results may be stale [#117706](https://github.com/openclaw/openclaw/pull/117706)
- Keep Ollama embedding credentials on their selected host [#118753](https://github.com/openclaw/openclaw/pull/118753)
- Isolate memory fallback provider credentials [#118759](https://github.com/openclaw/openclaw/pull/118759)
- Isolate LanceDB embedding credentials per agent [#118767](https://github.com/openclaw/openclaw/pull/118767)
- Keep private root memory out of shared chats [#119198](https://github.com/openclaw/openclaw/pull/119198)
- Recall private conversation context after a session reset [#122051](https://github.com/openclaw/openclaw/pull/122051)
- Prevent silent context loss during resets and memory search [#125534](https://github.com/openclaw/openclaw/pull/125534)
- Bound LanceDB memory prompts and reload embedding credentials [#125567](https://github.com/openclaw/openclaw/pull/125567)
- fix(memory): isolate sqlite-vec KNN from the event loop [#128078](https://github.com/openclaw/openclaw/pull/128078)
- Restore conversation history to Codex prompt hooks [#101752](https://github.com/openclaw/openclaw/pull/101752)
- Stream Gemini embedding batch output to reduce memory use [#102974](https://github.com/openclaw/openclaw/pull/102974)
- Keep memory batch failure accounting accurate [#103117](https://github.com/openclaw/openclaw/pull/103117)
- Preserve Unicode at QMD memory snippet limits [#103996](https://github.com/openclaw/openclaw/pull/103996)
- Preserve memory-search settings in isolated cron runs [#104196](https://github.com/openclaw/openclaw/pull/104196)
- Isolate local embedding services by runtime [#104741](https://github.com/openclaw/openclaw/pull/104741)
- Keep Gemini memory search available after version upgrades [#104759](https://github.com/openclaw/openclaw/pull/104759)
- fix(active-memory): bound timeout circuit breakers [#105316](https://github.com/openclaw/openclaw/pull/105316)
- Make LanceDB memory initialization safe across processes [#105896](https://github.com/openclaw/openclaw/pull/105896)
- Preserve distinct runs in long native chat histories [#107965](https://github.com/openclaw/openclaw/pull/107965)
- Keep Windows QMD cleanup from blocking the Gateway [#109265](https://github.com/openclaw/openclaw/pull/109265)
- Isolate memory SecretRef failures by agent [#109977](https://github.com/openclaw/openclaw/pull/109977)
- Move Memory Wiki compiled state into plugin-owned SQLite storage [#110167](https://github.com/openclaw/openclaw/pull/110167)
- Reject malformed embedding batch UTF-8 [#110502](https://github.com/openclaw/openclaw/pull/110502)
- Reject malformed UTF-8 in memory-host JSON responses [#111279](https://github.com/openclaw/openclaw/pull/111279)
- Keep Gemini embedding batch waits within the configured timeout [#111674](https://github.com/openclaw/openclaw/pull/111674)
- Keep OpenAI embedding batch polling within its timeout [#111675](https://github.com/openclaw/openclaw/pull/111675)
- Stop repeated memory auto-recall stalls during embedding outages [#112927](https://github.com/openclaw/openclaw/pull/112927)
- Preserve QMD memory hits when document IDs are stale [#113515](https://github.com/openclaw/openclaw/pull/113515)
- Avoid full index rebuilds after empty memory searches [#114183](https://github.com/openclaw/openclaw/pull/114183)
- Stop Memory Core retries immediately on cancellation [#114300](https://github.com/openclaw/openclaw/pull/114300)
- Preserve QMD memory hits when command output is noisy [#115023](https://github.com/openclaw/openclaw/pull/115023)
- Keep memory annotations out of recall and search text [#115719](https://github.com/openclaw/openclaw/pull/115719)
- Reconcile stale memory full-text indexes safely [#115775](https://github.com/openclaw/openclaw/pull/115775)
- Preserve Windows memory session ownership across path casing [#115851](https://github.com/openclaw/openclaw/pull/115851)
- Recover queued Memory Core sync work after SQLite failures [#115923](https://github.com/openclaw/openclaw/pull/115923)
- Warm Active Memory before the first channel turn [#115936](https://github.com/openclaw/openclaw/pull/115936)
- Reject malformed and empty embedding vectors [#117200](https://github.com/openclaw/openclaw/pull/117200)
- Keep targeted memory indexing on one session snapshot [#117247](https://github.com/openclaw/openclaw/pull/117247)
- Keep CLI compaction on rotated transcripts [#117250](https://github.com/openclaw/openclaw/pull/117250)
- Honor LM Studio embedding JIT and canonical model identity [#117320](https://github.com/openclaw/openclaw/pull/117320)
- Avoid redundant compaction after reset boundaries [#117400](https://github.com/openclaw/openclaw/pull/117400)
- Recover memory freshness after transcript restores [#117548](https://github.com/openclaw/openclaw/pull/117548)
- Keep OpenAI memory embedding caches stable across upgrades [#117557](https://github.com/openclaw/openclaw/pull/117557)
- Accept command-local agent selection for Memory Wiki [#117943](https://github.com/openclaw/openclaw/pull/117943)
- Keep QMD running after filesystem watcher errors [#118171](https://github.com/openclaw/openclaw/pull/118171)
- Honor keyed agent rosters in Memory Core [#118310](https://github.com/openclaw/openclaw/pull/118310)
- Surface memory-wiki backend read failures [#118449](https://github.com/openclaw/openclaw/pull/118449)
- Keep unrelated session transcripts out of Voice Call fast context [#118498](https://github.com/openclaw/openclaw/pull/118498)
- Honor configured memory providers in CLI searches [#119186](https://github.com/openclaw/openclaw/pull/119186)
- Restore delegated context-engine compaction session identity [#120047](https://github.com/openclaw/openclaw/pull/120047)
- Report persisted vector index state in memory status [#120048](https://github.com/openclaw/openclaw/pull/120048)
- Keep session reconciliation off the memory-search path [#120837](https://github.com/openclaw/openclaw/pull/120837)
- fix(memory): apply temporal decay to dated files in memory subdirectories [#121103](https://github.com/openclaw/openclaw/pull/121103)
- Preserve memory diversity with project relevance [#121608](https://github.com/openclaw/openclaw/pull/121608)
- Keep multimodal memory indexing limited to extra paths [#121627](https://github.com/openclaw/openclaw/pull/121627)
- Remove stale Memory Core session rows safely at startup [#121665](https://github.com/openclaw/openclaw/pull/121665)
- Restore configured context engines for scheduled turns [#122457](https://github.com/openclaw/openclaw/pull/122457)
- fix(memory-wiki): keep default vaults in configured state directory [#122591](https://github.com/openclaw/openclaw/pull/122591)
- Retain transcript updates during active memory sync [#124024](https://github.com/openclaw/openclaw/pull/124024)
- Keep local memory healthy after a cancelled search [#124051](https://github.com/openclaw/openclaw/pull/124051)
- Stop cancelled memory searches before returning results [#124118](https://github.com/openclaw/openclaw/pull/124118)
- Stop timed-out LanceDB recall before returning results [#124143](https://github.com/openclaw/openclaw/pull/124143)
- Preserve complete startup memory after short file reads [#124597](https://github.com/openclaw/openclaw/pull/124597)
- Preserve memory indexes when source scans fail [#125319](https://github.com/openclaw/openclaw/pull/125319)
- Warn when combined memory search omits the memory corpus [#125500](https://github.com/openclaw/openclaw/pull/125500)
- Preserve conversation history when context assembly fails [#125714](https://github.com/openclaw/openclaw/pull/125714)
- Distinguish missing memory files from empty reads [#125979](https://github.com/openclaw/openclaw/pull/125979)
- Codex transcript mirrors survive matching redaction rules [#126245](https://github.com/openclaw/openclaw/pull/126245)
- Preserve partial results and corpus outcomes in memory tools [#126530](https://github.com/openclaw/openclaw/pull/126530)
- Detect offline memory source drift in status [#126535](https://github.com/openclaw/openclaw/pull/126535)
- Keep Memory guidance aligned with configured sources [#126552](https://github.com/openclaw/openclaw/pull/126552)
- Enforce memory embedding deadlines after event-loop stalls [#126667](https://github.com/openclaw/openclaw/pull/126667)
- Bound Memory Wiki model context [#126779](https://github.com/openclaw/openclaw/pull/126779)
- fix: prevent stale transcript projections from publishing [#126947](https://github.com/openclaw/openclaw/pull/126947)
- fix(tui): recover assistant responses after reconnecting to replacement runs [#128221](https://github.com/openclaw/openclaw/pull/128221)
- fix(embeddings): reject empty vectors from compatible providers [#128480](https://github.com/openclaw/openclaw/pull/128480)
- fix(google): support stable Gemini Embedding 2 request contracts [#128716](https://github.com/openclaw/openclaw/pull/128716)
- fix(llama-cpp): preserve managed local embedding batch capacity [#128721](https://github.com/openclaw/openclaw/pull/128721)
- fix(tui): keep foreign session resets from clearing active chats [#128723](https://github.com/openclaw/openclaw/pull/128723)
- fix(google): support all documented Gemini embedding dimensions [#129038](https://github.com/openclaw/openclaw/pull/129038)
- Preserve document order for indexed embedding responses [#129227](https://github.com/openclaw/openclaw/pull/129227)
- fix(tui): prevent stale session actions from mutating replacement conversations [#129681](https://github.com/openclaw/openclaw/pull/129681)
- fix(memory): recover indexing when embedding providers reject oversized batches [#129927](https://github.com/openclaw/openclaw/pull/129927)
- fix(android): restore rewind and fork for attachment-only messages [#129951](https://github.com/openclaw/openclaw/pull/129951)
- fix(tui): preserve run and session ownership across async events [#130147](https://github.com/openclaw/openclaw/pull/130147)
- fix(embeddings): preserve provider endpoint query parameters [#130211](https://github.com/openclaw/openclaw/pull/130211)
- fix(tui): isolate replacement sessions from stale async results [#130227](https://github.com/openclaw/openclaw/pull/130227)
- fix(memory): stop false Copilot index mismatch warnings [#130603](https://github.com/openclaw/openclaw/pull/130603)
- fix(memory): keep indexing after memory folder replacement [#130698](https://github.com/openclaw/openclaw/pull/130698)
- fix(google): preserve gateway queries in embedding batches [#130768](https://github.com/openclaw/openclaw/pull/130768)
- fix(memory): honor mixed-case embedding header overrides [#130774](https://github.com/openclaw/openclaw/pull/130774)
- fix(doctor): preserve local memory diagnosis [#130984](https://github.com/openclaw/openclaw/pull/130984)
- Retry memory embeddings when providers reject dimensions [#69707](https://github.com/openclaw/openclaw/pull/69707)
- Preserve relevance for vector-only multimodal memory results [#92196](https://github.com/openclaw/openclaw/pull/92196)
- Restore same-agent access to unmapped live transcripts [#92261](https://github.com/openclaw/openclaw/pull/92261)
- Preserve useful keyword-only memory results without displacing stronger matches [#92524](https://github.com/openclaw/openclaw/pull/92524)
- Let slow QMD memory searches use their configured timeout [#95757](https://github.com/openclaw/openclaw/pull/95757)
- Keep reset and deleted sessions searchable without a restart [#96132](https://github.com/openclaw/openclaw/pull/96132)
- Keep custom Ollama memory indexes tied to the correct endpoint [#97059](https://github.com/openclaw/openclaw/pull/97059)
- Keep local semantic memory working after Homebrew Node upgrades [#99318](https://github.com/openclaw/openclaw/pull/99318)
- Handle missing files correctly in allowed extra paths [2d06d46](https://github.com/openclaw/openclaw/commit/2d06d46)
- fix(github-copilot): add timeout to embedding model discovery (#102886) [ff15856](https://github.com/openclaw/openclaw/commit/ff15856)
- Reject queued local embedding requests during worker shutdown [#102451](https://github.com/openclaw/openclaw/pull/102451)
- Keep truncated QMD errors valid Unicode [#102547](https://github.com/openclaw/openclaw/pull/102547)
- Keep Active Memory log truncation Unicode-safe [#102551](https://github.com/openclaw/openclaw/pull/102551)
- Keep Active Memory search queries UTF-16 safe [#102621](https://github.com/openclaw/openclaw/pull/102621)
- Keep Active Memory emoji truncation UTF-16 safe [#102877](https://github.com/openclaw/openclaw/pull/102877)
- Accept max thinking in Active Memory configuration [#103614](https://github.com/openclaw/openclaw/pull/103614)
- Skip provider setup for blank memory searches [#103728](https://github.com/openclaw/openclaw/pull/103728)
- Keep memory-host redacted token hints Unicode-safe [#103813](https://github.com/openclaw/openclaw/pull/103813)
- Accept leading-zero lengths in Memory Host JSON responses [#105916](https://github.com/openclaw/openclaw/pull/105916)
- Preserve Unicode text in fragmented QMD output [#107263](https://github.com/openclaw/openclaw/pull/107263)
- Treat memory provider none as intentional FTS-only mode [#107778](https://github.com/openclaw/openclaw/pull/107778)
- Stop stalled Obsidian helpers after 10 seconds [#109232](https://github.com/openclaw/openclaw/pull/109232)
- Preserve thinking and verbose preferences across session rollover [#109788](https://github.com/openclaw/openclaw/pull/109788)
- Keep Voyage embedding batch waits within their timeout [#111673](https://github.com/openclaw/openclaw/pull/111673)
- Stop Memory Wiki doctor errors for keyed agents [#112541](https://github.com/openclaw/openclaw/pull/112541)
- Restore global-session search for non-default agents [#113919](https://github.com/openclaw/openclaw/pull/113919)
- Fully disable derived memory full-text indexes [#115685](https://github.com/openclaw/openclaw/pull/115685)
- Reject malformed QMD memory search results [#115705](https://github.com/openclaw/openclaw/pull/115705)
- Stop memory reads from offering phantom continuation pages [#115722](https://github.com/openclaw/openclaw/pull/115722)
- Return cleanly for blank memory searches [#116034](https://github.com/openclaw/openclaw/pull/116034)
- Stop embedding work after client disconnects [#116146](https://github.com/openclaw/openclaw/pull/116146)
- Suggest reindexing for a missing QMD index [#116958](https://github.com/openclaw/openclaw/pull/116958)
- Reject empty embedding requests before provider setup [#117615](https://github.com/openclaw/openclaw/pull/117615)
- Keep Memory Wiki search within protected recall visibility [#118265](https://github.com/openclaw/openclaw/pull/118265)
- fix(memory): score LIKE-fallback keyword hits as 0 instead of 1 [#120603](https://github.com/openclaw/openclaw/pull/120603)
- Reject invalid extra memory paths and trim test facades [#121696](https://github.com/openclaw/openclaw/pull/121696)
- Accept Windows casing for explicit memory files [#121976](https://github.com/openclaw/openclaw/pull/121976)
- Return a clear wiki_get error for malformed lookup input [#122549](https://github.com/openclaw/openclaw/pull/122549)
- report clear memory indexing outcomes [#123863](https://github.com/openclaw/openclaw/pull/123863)
- Report indexed SQLite sessions truthfully [#124834](https://github.com/openclaw/openclaw/pull/124834)
- Reject unknown memory agent selections with runnable guidance [#126570](https://github.com/openclaw/openclaw/pull/126570)
- fix(sessions): exclude archived trajectory artifacts [#126912](https://github.com/openclaw/openclaw/pull/126912)
- fix(memory): enforce canonical SecretRef resolution [#127699](https://github.com/openclaw/openclaw/pull/127699)
- fix(memory-wiki): ignore structural markers in query text [#128105](https://github.com/openclaw/openclaw/pull/128105)
- fix(doctor): suppress skipped memory warnings for all agents [#128209](https://github.com/openclaw/openclaw/pull/128209)
- fix(memory): search warns about stale index during session catch-up [#128894](https://github.com/openclaw/openclaw/pull/128894)
- fix(lmstudio): preserve embedding index across API key rotation [#129076](https://github.com/openclaw/openclaw/pull/129076)
- fix(openai): preserve embedding index across proxy key rotation [#129177](https://github.com/openclaw/openclaw/pull/129177)
- fix(openai): preserve Azure embedding index across key rotation [#129516](https://github.com/openclaw/openclaw/pull/129516)
- fix(memory): partition Mistral and DeepInfra embedding caches [#129669](https://github.com/openclaw/openclaw/pull/129669)
- fix(ollama): preserve namespaced embedding query instructions [#129706](https://github.com/openclaw/openclaw/pull/129706)
- fix(memory): suppress wiki not-registered warning for corpus=all (#129866) [#130088](https://github.com/openclaw/openclaw/pull/130088)
- fix(doctor): align memory provider guidance [#130756](https://github.com/openclaw/openclaw/pull/130756)

**Documentation**

- Explain overlapping memory recall sources [#118299](https://github.com/openclaw/openclaw/pull/118299)

</details>

</Accordion>

<Accordion title="Importing memories and conversation history">

Importing is separate from the QMD-to-built-in upgrade. You can bring supported memory from Codex, Claude Code, or Hermes into an agent workspace through the Control UI, first-run setup, or Ask OpenClaw while leaving the source alone and not sweeping in credentials, settings, skills, or arbitrary provider files. If the destination already contains conflicting content, replacement has to be reviewed explicitly.

Old conversations follow their own preview-first path. The CLI shows what it would stage before it writes, the Control UI reports bounded-batch progress, and material owned by that import can be rolled back and applied again. Large histories use bounded or indexed processing, Memory Wiki preserves human notes through supported imports, and older history without complete ownership tracking may need to be rescanned. Staged material still does not become durable memory until dreaming or an explicit promotion chooses it.

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

**Improvements**

- Import Codex and Claude Code memory from the Control UI [#106406](https://github.com/openclaw/openclaw/pull/106406)
- Offer memory imports during onboarding [#108977](https://github.com/openclaw/openclaw/pull/108977)
- Backfill retained session transcripts into memory staging [#115162](https://github.com/openclaw/openclaw/pull/115162)
- Backfill memory from past sessions in Control UI [#115266](https://github.com/openclaw/openclaw/pull/115266)
- Import local agent memories from Ask OpenClaw [#115376](https://github.com/openclaw/openclaw/pull/115376)
- Lower Memory Core startup memory use [#119372](https://github.com/openclaw/openclaw/pull/119372)

**Bug fixes**

- Preserve Memory Wiki notes when imported pages are pruned [#102294](https://github.com/openclaw/openclaw/pull/102294)
- Bound large SQLite session-history reads [#108851](https://github.com/openclaw/openclaw/pull/108851)
- Harden memory migration path resolution and file copying [#109314](https://github.com/openclaw/openclaw/pull/109314)
- Preserve Memory Wiki pages during temporary source outages [#111034](https://github.com/openclaw/openclaw/pull/111034)
- Preserve Memory Wiki edits during ChatGPT import rollback [#116517](https://github.com/openclaw/openclaw/pull/116517)
- Preserve Memory Wiki notes when markers are damaged [#117104](https://github.com/openclaw/openclaw/pull/117104)
- Protect Memory Wiki notes and private recall boundaries [#118375](https://github.com/openclaw/openclaw/pull/118375)
- Keep Gateway RPCs responsive after startup [#119710](https://github.com/openclaw/openclaw/pull/119710)
- Keep large chat histories from blocking startup [#124994](https://github.com/openclaw/openclaw/pull/124994)
- Keep large CLI-bound chat histories responsive [#126201](https://github.com/openclaw/openclaw/pull/126201)
- fix(agents): wait for deferred transcript projection before reopening the session [#130930](https://github.com/openclaw/openclaw/pull/130930)
- Prevent Memory Wiki source ingest from losing content during concurrent writes [#104209](https://github.com/openclaw/openclaw/pull/104209)
- Harden memory migration plan selection and apply safety [#109323](https://github.com/openclaw/openclaw/pull/109323)
- Redact Claude CLI history before Control UI merge [#115597](https://github.com/openclaw/openclaw/pull/115597)
- Make memory session backfill complete and reversible [#115926](https://github.com/openclaw/openclaw/pull/115926)
- Preserve Memory Core transcript-ingestion checkpoints [#117293](https://github.com/openclaw/openclaw/pull/117293)
- Prevent duplicate Claude CLI replies after reload [#125030](https://github.com/openclaw/openclaw/pull/125030)
- fix(memory-wiki): persist ChatGPT import run record before compiling the vault [#126487](https://github.com/openclaw/openclaw/pull/126487)
- Stop duplicate Memory Wiki imports during polling [#91828](https://github.com/openclaw/openclaw/pull/91828)
- Make legacy session backfill rollback re-applicable [#116004](https://github.com/openclaw/openclaw/pull/116004)

</details>

</Accordion>

<Accordion title="Reviewing, creating, and forgetting memories">

Settings now has a Memory destination for live status, Dreams, configuration, indexed-source search and browsing, add-on controls, and embedding readiness, so you can see what your Claw has available and open safe workspace memory files. Session and legacy sources remain snippet-only, and add-on changes remain read-only unless the connection has admin authorization.

Eligible observations can be consolidated into `MEMORY.md`, durable directives can live in `USER.md`, standing intents can wait for the right event, and project memories stay scoped to the project that produced them. Automatic memory remains bounded and provenance-gated, so content derived from network or restricted sessions keeps an untrusted origin and stays out of automatic context even though an explicit search can still surface it. This provenance protection applies to newly tracked material, while older untracked files retain their existing classification.

`openclaw memory forget` lets you preview a purge by session, hook source, or participant, then remove attributable derived memory and stop the selected session from being pulled back in by backfill, indexing, or dreaming. The purge follows recorded provenance, so the original transcript, older lineage-free notes, other agents' stores, direct or external writes, exports, and backups may remain. Review the preview before applying it.

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

**Improvements**

- Add a dedicated Memory settings page [#114037](https://github.com/openclaw/openclaw/pull/114037)
- Add provenance-gated memory and default-on dreaming [#114819](https://github.com/openclaw/openclaw/pull/114819)
- Give Memory a live overview, Dreams, and Settings [#115383](https://github.com/openclaw/openclaw/pull/115383)
- Add memory search and browsing to Settings [#115419](https://github.com/openclaw/openclaw/pull/115419)
- Isolate curated memory by project [#115438](https://github.com/openclaw/openclaw/pull/115438)
- Add inline controls and readiness checks to Memory settings [#115557](https://github.com/openclaw/openclaw/pull/115557)
- Retain recent project memory scopes within a session [#115731](https://github.com/openclaw/openclaw/pull/115731)
- feat(memory): session provenance, admission policy, and openclaw memory forget [#130151](https://github.com/openclaw/openclaw/pull/130151)
- Add operator-scoped memory search to the gateway [#115346](https://github.com/openclaw/openclaw/pull/115346)
- Rename Memory Palace to Memory Wiki and document it [#115954](https://github.com/openclaw/openclaw/pull/115954)
- Align the Memory page and simplify agent selection [#115884](https://github.com/openclaw/openclaw/pull/115884)

**Bug fixes**

- Protect long-term memory during failed automatic promotions [#108397](https://github.com/openclaw/openclaw/pull/108397)
- Restore per-agent Memory Core dream diaries [#115069](https://github.com/openclaw/openclaw/pull/115069)
- Keep dreaming consolidation within project boundaries [#115721](https://github.com/openclaw/openclaw/pull/115721)
- Quarantine memory writes from network-tainted agent turns [#115818](https://github.com/openclaw/openclaw/pull/115818)
- Preserve user-authored headings during MEMORY.md compaction [#116057](https://github.com/openclaw/openclaw/pull/116057)
- Preserve user notes during MEMORY.md budget compaction [#116180](https://github.com/openclaw/openclaw/pull/116180)
- Mark post-network provider memory writes as untrusted [#118760](https://github.com/openclaw/openclaw/pull/118760)
- Keep synthetic handoffs out of trusted owner memory [#118987](https://github.com/openclaw/openclaw/pull/118987)
- Correct false memory save and forget claims [#120989](https://github.com/openclaw/openclaw/pull/120989)
- Publish Memory Core dreaming reports atomically [#122343](https://github.com/openclaw/openclaw/pull/122343)
- Revoke retained memory tools after memory is disabled [#125393](https://github.com/openclaw/openclaw/pull/125393)
- Enforce turn tool policy during automatic memory recall [#126482](https://github.com/openclaw/openclaw/pull/126482)
- Preserve memory trust across session capture and dreaming [#126489](https://github.com/openclaw/openclaw/pull/126489)
- fix(memory): respect provenance in automatic context [#127469](https://github.com/openclaw/openclaw/pull/127469)
- fix(memory): prevent forgotten session content from returning [#130451](https://github.com/openclaw/openclaw/pull/130451)
- Keep emoji intact in startup memory and heartbeat prompts [#102483](https://github.com/openclaw/openclaw/pull/102483)
- Keep compaction and memory snippets Unicode-safe [#102542](https://github.com/openclaw/openclaw/pull/102542)
- Prevent partial Memory Wiki failures during concurrent writes [#103408](https://github.com/openclaw/openclaw/pull/103408)
- Prevent raw output from breaking Tokenjuice compaction [#107705](https://github.com/openclaw/openclaw/pull/107705)
- Preserve linked MEMORY.md files during automatic promotion [#108921](https://github.com/openclaw/openclaw/pull/108921)
- Keep heartbeat replies out of new Dreaming memories [#109403](https://github.com/openclaw/openclaw/pull/109403)
- Keep invalid recall timestamps out of dreaming rankings [#110537](https://github.com/openclaw/openclaw/pull/110537)
- Preserve provider routing during safeguard compaction [#112416](https://github.com/openclaw/openclaw/pull/112416)
- Bound compaction-planning worker payloads [#112593](https://github.com/openclaw/openclaw/pull/112593)
- Keep memory-maintenance turns out of chat [#112942](https://github.com/openclaw/openclaw/pull/112942)
- Keep media presentation markers out of LanceDB memories [#113145](https://github.com/openclaw/openclaw/pull/113145)
- Correct the Dreaming toggle confirmation [#113960](https://github.com/openclaw/openclaw/pull/113960)
- Remove dangling Memory Core recall records during repair [#114419](https://github.com/openclaw/openclaw/pull/114419)
- Recover memory dreaming Cron after startup failure [#115174](https://github.com/openclaw/openclaw/pull/115174)
- Give Memory settings stable path-based tab URLs [#115515](https://github.com/openclaw/openclaw/pull/115515)
- Promote durable memories at calibrated defaults [#115715](https://github.com/openclaw/openclaw/pull/115715)
- Make Memory engine switching clear and reliable [#115750](https://github.com/openclaw/openclaw/pull/115750)
- Preserve network-content taint across transcript runtimes [#115850](https://github.com/openclaw/openclaw/pull/115850)
- Stabilize memory-core dreaming schedules and cleanup [#115925](https://github.com/openclaw/openclaw/pull/115925)
- Remove duplicate Memory Dreaming jobs after copied installs [#115986](https://github.com/openclaw/openclaw/pull/115986)
- Honor user timezone in session-memory files [#116136](https://github.com/openclaw/openclaw/pull/116136)
- Prevent memory flush from ending the parent session [#116198](https://github.com/openclaw/openclaw/pull/116198)
- fix(memory-core): filter junk topics from REM phase extraction (#111923) [#117248](https://github.com/openclaw/openclaw/pull/117248)
- Prevent stalled Git lookups from hanging agent runs [#117346](https://github.com/openclaw/openclaw/pull/117346)
- Keep Dreams data with the selected agent [#117538](https://github.com/openclaw/openclaw/pull/117538)
- Clean up interrupted Dreaming sessions after restart [#117885](https://github.com/openclaw/openclaw/pull/117885)
- Keep valid memory diagnostics ahead of malformed timestamps [#118749](https://github.com/openclaw/openclaw/pull/118749)
- Keep memory-flush appends from ending in bridge errors [#120404](https://github.com/openclaw/openclaw/pull/120404)
- Keep replies running when memory flush preparation fails [#121157](https://github.com/openclaw/openclaw/pull/121157)
- Preserve the previous Memory Wiki lint report on write failure [#122568](https://github.com/openclaw/openclaw/pull/122568)
- CLI and Gateway agent turns now flush memory [#124964](https://github.com/openclaw/openclaw/pull/124964)
- Keep session-memory filename generation tool-free [#125394](https://github.com/openclaw/openclaw/pull/125394)
- Keep Dream Diary data scoped to the active agent [#125936](https://github.com/openclaw/openclaw/pull/125936)
- fix(memory-core): restore MEMORY.md when the in-place fallback write fails midway [#126486](https://github.com/openclaw/openclaw/pull/126486)
- fix(memory-core): read dreaming narrative from the terminal reply instead of racing the session store (#123360) [#127184](https://github.com/openclaw/openclaw/pull/127184)
- fix(agents): stop cancelled compactions before model requests [#128215](https://github.com/openclaw/openclaw/pull/128215)
- fix(agents): prevent model requests after context processing is cancelled [#128607](https://github.com/openclaw/openclaw/pull/128607)
- fix(compaction): share model-aware memory maintenance budgets [#130072](https://github.com/openclaw/openclaw/pull/130072)
- fix(memory): stop suggesting unavailable scheduling tools [#130128](https://github.com/openclaw/openclaw/pull/130128)
- fix(memory): preserve line endings when forgetting entries [#130943](https://github.com/openclaw/openclaw/pull/130943)
- Save session memory on automatic rollover [#61675](https://github.com/openclaw/openclaw/pull/61675)
- Prevent nested compaction from locking its own transcript [#88919](https://github.com/openclaw/openclaw/pull/88919)
- Honor the configured model for session-memory slugs [#97007](https://github.com/openclaw/openclaw/pull/97007)
- Contain forged role lines in session-memory records [#98574](https://github.com/openclaw/openclaw/pull/98574)
- Preserve valid Unicode in Memory Core dreaming snippets [#101946](https://github.com/openclaw/openclaw/pull/101946)
- Keep Talk memory snippets valid at emoji boundaries [#102477](https://github.com/openclaw/openclaw/pull/102477)
- Keep truncated memory snippets valid around emoji [#102478](https://github.com/openclaw/openclaw/pull/102478)
- Preserve emoji when truncating dream-diary context [#102524](https://github.com/openclaw/openclaw/pull/102524)
- Keep memory-wiki terminal truncation Unicode-safe [#103178](https://github.com/openclaw/openclaw/pull/103178)
- Strictly parse Dreaming integer settings [#107619](https://github.com/openclaw/openclaw/pull/107619)
- Reject invalid agent targets in memory doctor calls [#115365](https://github.com/openclaw/openclaw/pull/115365)
- Preserve complete Unicode characters during memory promotion [#115591](https://github.com/openclaw/openclaw/pull/115591)
- Preserve descriptive session-memory filenames after manual resets [#116094](https://github.com/openclaw/openclaw/pull/116094)
- Keep Dreams diary navigation visible while scrolling [#118054](https://github.com/openclaw/openclaw/pull/118054)
- Let memory-backed CLI commands exit naturally [#118500](https://github.com/openclaw/openclaw/pull/118500)
- Return validation errors for malformed wiki_apply input [#123050](https://github.com/openclaw/openclaw/pull/123050)
- Report failed Memory Core repairs and skipped promotions accurately [#124770](https://github.com/openclaw/openclaw/pull/124770)
- Keep the Memory hub header stable across tabs [#125568](https://github.com/openclaw/openclaw/pull/125568)
- Stop warning for expected non-owner memory-tool gating [#126679](https://github.com/openclaw/openclaw/pull/126679)
- test(agents): bind process registry cleanup to its module instance [#129456](https://github.com/openclaw/openclaw/pull/129456)
- Show total signals in memory promotion audit output [#87590](https://github.com/openclaw/openclaw/pull/87590)

**Documentation**

- docs(memory): add memory provenance and deletion concepts page [#130278](https://github.com/openclaw/openclaw/pull/130278)
- Align proactivity and memory docs with shipped behavior [#112295](https://github.com/openclaw/openclaw/pull/112295)
- docs(memory): document shipped turn-taint propagation for network tool output [#129837](https://github.com/openclaw/openclaw/pull/129837)

</details>

</Accordion>

</AccordionGroup>

## Skills

Skills turn the way you work into reusable instructions your Claw can follow again, and this release connects the entire path. You can create and validate a skill, find or install it, call it directly from a conversation, review proposed changes, and have supported edits ready on the next turn of a persistent session. Invalid skills are reported individually, so the rest of the catalog remains available.

Skill Workshop brings proposals, checks, decisions, and applied history into one workflow. Self-learning can turn substantial work and durable corrections into proposed improvements, or maintain skills created through Workshop when automatic learning is enabled, while skills owned by you or someone else stay under their owner's control.

<AccordionGroup>

<Accordion title="Creating and checking skills">

Creating a skill now follows one guided path from choosing how it should be invoked through adding supporting files, saving it, and validating the result. The checker understands supported invocation metadata and catches problems such as an overlong description before anything is written.

OpenClaw now reports malformed metadata, unreadable files, oversized instructions, and shadowed copies against the skill that caused them, while continuing to load valid skills around it. In a persistent Gateway session, edits to canonical and managed-worktree skills are available on the next turn, and required skill instructions are read in full.

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

**Improvements**

- Improve skill-authoring workflow and invocation validation [#121955](https://github.com/openclaw/openclaw/pull/121955)

**Bug fixes**

- Load JSON5-style skill metadata and report parser errors [#108926](https://github.com/openclaw/openclaw/pull/108926)
- Surface skill and workspace bootstrap load failures [#125348](https://github.com/openclaw/openclaw/pull/125348)
- Warn when execution-directory skills are shadowed [#125865](https://github.com/openclaw/openclaw/pull/125865)
- Refresh edited skills in persistent Gateway sessions [#125962](https://github.com/openclaw/openclaw/pull/125962)
- fix(agents): serve skill instructions whole instead of rejecting read windows [#130286](https://github.com/openclaw/openclaw/pull/130286)
- Warn when skill frontmatter is missing its closing delimiter [#110479](https://github.com/openclaw/openclaw/pull/110479)
- fix(skills): show byte-aware errors for long descriptions [#128594](https://github.com/openclaw/openclaw/pull/128594)
- fix(skills): restore evidence-backed authoring guidance [#129425](https://github.com/openclaw/openclaw/pull/129425)

</details>

</Accordion>

<Accordion title="Finding, Installing, and Using Skills">

Installed skills, ClawHub discovery, skill settings, and Skill Workshop now share one Plugins hub, giving you one place to find a skill, install it, configure it, and confirm its current status. Skills and plugins keep their separate lifecycles, while reconnecting or switching the active agent, model, or connectors refreshes the lists from the current Gateway.

When a skill is available to you and the active agent, you can choose it in chat or name up to eight with `$skill-name` across supported chat and agent entry points, including eligible skills hidden from automatic model selection. The chat picker adds references to your draft without sending it, and Code Mode can list and read eligible skills within its existing sandbox and allowlist. Large model-visible catalogs can still be compacted, so `openclaw skills check` remains the complete inventory.

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

**Improvements**

- Add first-class skill access to Code Mode [#114894](https://github.com/openclaw/openclaw/pull/114894)
- Reference multiple skills inside a Control UI prompt [#116330](https://github.com/openclaw/openclaw/pull/116330)
- Invoke explicit skill references on every channel [#123387](https://github.com/openclaw/openclaw/pull/123387)
- Combine Plugins, Skills, and Workshop in one hub [#104834](https://github.com/openclaw/openclaw/pull/104834)
- Show readable skill titles in the chat reference picker [#124017](https://github.com/openclaw/openclaw/pull/124017)
- Remove content hashes from skill catalogs [#126951](https://github.com/openclaw/openclaw/pull/126951)

**Bug fixes**

- Prevent quoted Codex context from invoking skills [#123345](https://github.com/openclaw/openclaw/pull/123345)
- Pass explicit skill selections to Codex as structured input [#123441](https://github.com/openclaw/openclaw/pull/123441)
- Make explicit skill references work in agent turns [#124784](https://github.com/openclaw/openclaw/pull/124784)
- Keep Skills state accurate during mutations and refreshes [#105671](https://github.com/openclaw/openclaw/pull/105671)
- Refresh macOS skill availability after Gateway changes [#107660](https://github.com/openclaw/openclaw/pull/107660)
- Align skill overrides, prompt limits, and tool access [#116817](https://github.com/openclaw/openclaw/pull/116817)
- Show inherited agent skill allowlists accurately [#124429](https://github.com/openclaw/openclaw/pull/124429)
- Keep model-visible skill catalogs bounded and available [#125346](https://github.com/openclaw/openclaw/pull/125346)
- fix(skills): load hidden skills from channel slash commands [#126335](https://github.com/openclaw/openclaw/pull/126335)
- Prevent stale tools and skills after reconnects [#126826](https://github.com/openclaw/openclaw/pull/126826)
- Preserve descriptions in compact skill catalogs [#88426](https://github.com/openclaw/openclaw/pull/88426)
- fix(ui): show agent skill matches while filtering [#127663](https://github.com/openclaw/openclaw/pull/127663)

</details>

</Accordion>

<Accordion title="Reviewing Changes in Skill Workshop">

Skill Workshop gives you one place to turn an idea or a reusable lesson from substantial past work into a reviewable skill change. You can inspect the proposed instructions and supporting files, see results from plugin-provided scanners, benchmarks, and graders, revise the proposal, and then apply, reject, or quarantine it. Past-work scans produce pending proposals rather than editing live skills, and Android users can search and inspect them before an authenticated administrator makes a change.

Every decision stays bound to the exact proposal revision you reviewed, so a later revision returns for review. Critical prompt-injection findings block application, interrupted applies can recover without overwriting a target changed elsewhere, and an explicitly selected remote Gateway remains the authority for the change. Applied revisions are grouped by skill with newest-first history and comparisons that say when the visible diff is incomplete.

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

**Improvements**

- Review Skill Workshop proposals from Android [#101911](https://github.com/openclaw/openclaw/pull/101911)
- Scan past sessions for Skill Workshop ideas [#106766](https://github.com/openclaw/openclaw/pull/106766)
- Add Skill Workshop evaluation and lifecycle hooks [#115606](https://github.com/openclaw/openclaw/pull/115606)
- Remove redundant Skill Workshop approval prompts by default [#107690](https://github.com/openclaw/openclaw/pull/107690)
- Show changes between applied Skill Workshop revisions [#125854](https://github.com/openclaw/openclaw/pull/125854)

**Bug fixes**

- Keep Skill Workshop proposals as complete skills [#108339](https://github.com/openclaw/openclaw/pull/108339)
- Detect prompt injection split across skill lines [#117254](https://github.com/openclaw/openclaw/pull/117254)
- Preserve Skill Workshop updates across worktree sessions [#125737](https://github.com/openclaw/openclaw/pull/125737)
- Honor Skill Workshop auto approvals in agent calls [#102530](https://github.com/openclaw/openclaw/pull/102530)
- Keep Skill Workshop approval target names Unicode-safe [#102963](https://github.com/openclaw/openclaw/pull/102963)
- Restore scrolling in Skill Workshop board mode [#108197](https://github.com/openclaw/openclaw/pull/108197)
- Refresh Workshop skills without restarting Gateway [#114456](https://github.com/openclaw/openclaw/pull/114456)
- Preserve Skill Workshop apply reasons and correct its docs [#114471](https://github.com/openclaw/openclaw/pull/114471)
- Preserve Skill Workshop proposals across crashes and workspace moves [#114535](https://github.com/openclaw/openclaw/pull/114535)
- Recover interrupted Skills Workshop applies safely [#115885](https://github.com/openclaw/openclaw/pull/115885)
- Restore offline Skill Workshop apply after configless upgrades [#115982](https://github.com/openclaw/openclaw/pull/115982)
- fix(skills): fail closed for unavailable remote Gateway [#117567](https://github.com/openclaw/openclaw/pull/117567)
- Mark manually installed Skill Workshop proposals stale [#118676](https://github.com/openclaw/openclaw/pull/118676)
- Prevent Skill Workshop proposal lists from timing out against themselves [#123553](https://github.com/openclaw/openclaw/pull/123553)
- Show Skill Workshop evaluator outcomes immediately [#123994](https://github.com/openclaw/openclaw/pull/123994)
- Group applied Skill Workshop revisions by skill [#125794](https://github.com/openclaw/openclaw/pull/125794)
- Mark incomplete Skill Workshop diffs as truncated [#125922](https://github.com/openclaw/openclaw/pull/125922)
- Require re-review when Skill Workshop proposals change [#126156](https://github.com/openclaw/openclaw/pull/126156)
- Prevent Skill Workshop overflow on small-context models [#126158](https://github.com/openclaw/openclaw/pull/126158)
- Keep Skill Workshop revision drafts until Gateway admission [#126166](https://github.com/openclaw/openclaw/pull/126166)
- Keep Skill Workshop proposal revisions atomic [#126485](https://github.com/openclaw/openclaw/pull/126485)
- Reject invalid Skill Workshop proposal-list limits [#103496](https://github.com/openclaw/openclaw/pull/103496)
- Preserve emoji in Skill Workshop previews [#104047](https://github.com/openclaw/openclaw/pull/104047)
- Show Android Skill Workshop filters without truncation [#107574](https://github.com/openclaw/openclaw/pull/107574)
- Keep emoji intact in Skill Workshop history scans [#107720](https://github.com/openclaw/openclaw/pull/107720)
- Keep Skill Workshop resume batches reconstructable [#109741](https://github.com/openclaw/openclaw/pull/109741)
- Restore proposal details on Skill Workshop approval cards [#117549](https://github.com/openclaw/openclaw/pull/117549)
- Preserve complete Unicode characters in Skill Workshop evaluations [#117673](https://github.com/openclaw/openclaw/pull/117673)
- Forward correlation metadata to skill evaluators [#123425](https://github.com/openclaw/openclaw/pull/123425)
- fix(cli): plugins inspect skill-workshop fails on multi-agent rosters [#124283](https://github.com/openclaw/openclaw/pull/124283)
- fix(cli): return JSON for curator and workshop failures [#128601](https://github.com/openclaw/openclaw/pull/128601)

</details>

</Accordion>

<Accordion title="How Skills Improve Over Time">

OpenClaw can turn substantial work and durable corrections into reusable skills, then improve the Workshop-created skills that actually shaped a run. New and unconfigured installations start in `auto`, while upgrades keep their existing choice. `off` disables automatic repair, `propose` queues changes for review, and `auto` can create or update Workshop-owned skills with targeted patches or a same-turn repair. The conversation already in progress keeps the version it loaded until the next turn.

Skills you wrote and shared skills owned elsewhere remain yours. Automatic learning can suggest improvements to them, but it cannot rewrite or remove them on its own, and explicit `/learn` or past-work scans also produce proposals for review.

On supported agent runtimes, optional background review runs separately without interrupting or posting into chat. When both the learning mode and scheduled-job settings allow it, a visible weekly job reviews the collection, records usage and outcomes, preserves specialized skills, and creates recoverable backups. Restoring a backup remains an explicit choice.

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

**Improvements**

- Propose reusable skills after substantial successful work [#105674](https://github.com/openclaw/openclaw/pull/105674)
- Make learned skill proposals easier to discover and reuse [#115103](https://github.com/openclaw/openclaw/pull/115103)
- Make self-learning automatic by default [#115576](https://github.com/openclaw/openclaw/pull/115576)
- Let Skill Workshop apply targeted learning patches [#119891](https://github.com/openclaw/openclaw/pull/119891)
- Improve skills used by a run through autonomous review [#121493](https://github.com/openclaw/openclaw/pull/121493)
- Let agents repair a used skill during the same turn [#121522](https://github.com/openclaw/openclaw/pull/121522)
- Add daily whole-collection skill reconciliation [#121653](https://github.com/openclaw/openclaw/pull/121653)
- feat(cron): schedule the skill collection review as a system-owned job [#130030](https://github.com/openclaw/openclaw/pull/130030)
- Learn from deep interrupted turns [#115887](https://github.com/openclaw/openclaw/pull/115887)

**Bug fixes**

- Make self-learning reviewer-only and prevent verbatim chat capture [#119818](https://github.com/openclaw/openclaw/pull/119818)
- Protect user-owned skills from autonomous Workshop cleanup [#125666](https://github.com/openclaw/openclaw/pull/125666)
- fix(skills): fork the foreground session for lean experience review [#129282](https://github.com/openclaw/openclaw/pull/129282)
- Enable delayed self-learning review for Codex sessions [#114501](https://github.com/openclaw/openclaw/pull/114501)
- Keep skill reviews running through cold starts and auth failures [#115950](https://github.com/openclaw/openclaw/pull/115950)
- Make automatic experience reviews run on live gateways [#116040](https://github.com/openclaw/openclaw/pull/116040)
- Preserve specialized skills during collection cleanup [#121829](https://github.com/openclaw/openclaw/pull/121829)
- Restore scheduled Skill Workshop reviews in auto mode [#123340](https://github.com/openclaw/openclaw/pull/123340)
- Protect shared skill roots during collection review [#123374](https://github.com/openclaw/openclaw/pull/123374)
- Exclude low-signal proposals from Skill Workshop capture [#125716](https://github.com/openclaw/openclaw/pull/125716)
- Back off failed skill collection reviews [#125899](https://github.com/openclaw/openclaw/pull/125899)
- Keep scheduled skill reviews due through Gateway restarts [#126948](https://github.com/openclaw/openclaw/pull/126948)
- fix(skills): patch skills above the read budget [#128871](https://github.com/openclaw/openclaw/pull/128871)
- fix: skill reviews recover after runtime config changes [#129218](https://github.com/openclaw/openclaw/pull/129218)
- fix(skills): record skill usage again and retire dead curator tables [#129769](https://github.com/openclaw/openclaw/pull/129769)
- fix(skills): keep the experience review on the foreground prompt-cache prefix [#130013](https://github.com/openclaw/openclaw/pull/130013)
- fix(skills): hide detached experience reviews from chat [#130217](https://github.com/openclaw/openclaw/pull/130217)
- fix(skills): stop experience reviews from blocking chats [#131077](https://github.com/openclaw/openclaw/pull/131077)
- Retry self-learning toggles after concurrent config changes [#106764](https://github.com/openclaw/openclaw/pull/106764)
- Keep Skill Workshop collection restores retryable [#126014](https://github.com/openclaw/openclaw/pull/126014)

</details>

</Accordion>

</AccordionGroup>

## Native Apps

This release makes the native apps useful for more of the work around a conversation. iPhone, iPad, and Android bring voice, attachments, model choices, and conversation controls into Chat, macOS adds Quick Chat from the menu bar or a global shortcut, and Wear OS brings transcripts, replies, Talk, and session controls to a paired watch. Apple Watch retains wrist actions through relaunches and retries, while the Linux desktop companion work now covers a tray, an embedded Control UI, and Quick Chat.

Progress cards and assistant-created widgets also bring more of the Claw's active work into supported native conversations, with translations, profile accents, waveforms, and file diffs appearing on the specific clients covered below.

<AccordionGroup>

<Accordion title="iPhone, iPad, and Apple Watch">

On iPhone and iPad, one Chat surface now handles typing, dictation, voice notes, attachments, realtime Talk, and the session, model, reasoning, and tool-activity controls around a conversation. The sidebar makes it easier to switch agents, search and manage recent conversations, see what needs attention, and pin the destinations used most often.

Sharing into OpenClaw now previews supported attachments and shows their progress from preparation through completion or failure. Completed shares in this release support text, links, or one to three images, and Send stays unavailable when an unsupported, excess, or unloadable attachment would otherwise be left out.

Apple Watch retains messages, approvals, replies, and commands through relaunches, Gateway changes, navigation, and retries, then reconciles the result across the phone and Watch so the same wrist action is less likely to be lost or repeated.

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

**Improvements**

- Redesign the iOS share compose sheet [#104187](https://github.com/openclaw/openclaw/pull/104187)
- Unify iOS chat, dictation, voice notes, and realtime voice [#107879](https://github.com/openclaw/openclaw/pull/107879)
- Bring richer chat controls and live Talk feedback to iOS [#110254](https://github.com/openclaw/openclaw/pull/110254)
- Bring model controls and session management to iOS chat [#110831](https://github.com/openclaw/openclaw/pull/110831)
- Add iOS Talk camera flip and microphone selection [#111044](https://github.com/openclaw/openclaw/pull/111044)
- Replace the iOS tab bar with a full sidebar [#111339](https://github.com/openclaw/openclaw/pull/111339)
- Add durable voice sessions to iOS Talk [#111369](https://github.com/openclaw/openclaw/pull/111369)
- Refresh the iPhone Control tab layout [#98582](https://github.com/openclaw/openclaw/pull/98582)
- Refresh iOS and Watch icons with the current OpenClaw mascot [#101411](https://github.com/openclaw/openclaw/pull/101411)
- Add state-aware mascot moods to iOS setup [#108900](https://github.com/openclaw/openclaw/pull/108900)
- Add a mood-aware Clawd mascot to the watch inbox [#109365](https://github.com/openclaw/openclaw/pull/109365)
- Add agent avatars and more space to the iOS sidebar [#112082](https://github.com/openclaw/openclaw/pull/112082)
- Harden iOS releases and simplify location access selection [12515ad](https://github.com/openclaw/openclaw/commit/12515ad)
- Use branded typography in the iOS Talk menu [af62abe](https://github.com/openclaw/openclaw/commit/af62abe)
- Keep recurring iOS gateway alerts stationary [#110493](https://github.com/openclaw/openclaw/pull/110493)

**Bug fixes**

- Harden iOS gateway and Apple Watch state handling [5e9bc09](https://github.com/openclaw/openclaw/commit/5e9bc09)
- Prevent stale iOS voice work after cancellation and session changes [#103072](https://github.com/openclaw/openclaw/pull/103072)
- Localize iOS and Apple Watch app surfaces [#105372](https://github.com/openclaw/openclaw/pull/105372)
- Smooth iOS sidebar gestures and controls [#111831](https://github.com/openclaw/openclaw/pull/111831)
- Smooth iOS sidebar drags and unify drawer surfaces [#112299](https://github.com/openclaw/openclaw/pull/112299)
- fix(talk): share and bound Apple relay lifecycle [#127232](https://github.com/openclaw/openclaw/pull/127232)
- Preserve iOS app and extension names across languages [690ed56](https://github.com/openclaw/openclaw/commit/690ed56)
- Keep iOS chat visibly active after returning [#102309](https://github.com/openclaw/openclaw/pull/102309)
- Stop cancelled iOS camera requests cleanly [#103069](https://github.com/openclaw/openclaw/pull/103069)
- Keep iOS session actions with the selected agent [#103415](https://github.com/openclaw/openclaw/pull/103415)
- Preserve legitimate text in iOS share drafts [#103453](https://github.com/openclaw/openclaw/pull/103453)
- Resize oversized images shared from iOS [#103860](https://github.com/openclaw/openclaw/pull/103860)
- Localize iOS Settings labels for VoiceOver [#105859](https://github.com/openclaw/openclaw/pull/105859)
- Prevent incomplete iOS shares when attachments are omitted [#106513](https://github.com/openclaw/openclaw/pull/106513)
- Keep the active iOS chat selected after reconnecting [#108241](https://github.com/openclaw/openclaw/pull/108241)
- Restore translucent iOS chat edges [#110505](https://github.com/openclaw/openclaw/pull/110505)
- Keep unified iOS voice controls recoverable [#110906](https://github.com/openclaw/openclaw/pull/110906)
- Keep iOS replies visible above the open keyboard [#110944](https://github.com/openclaw/openclaw/pull/110944)
- Harden iOS Talk voice-session recovery and confirmation feedback [#111424](https://github.com/openclaw/openclaw/pull/111424)
- fix(ios): page session rosters and restore approval guidance [#112004](https://github.com/openclaw/openclaw/pull/112004)
- Localize Agent Pro detail labels on iOS [#112980](https://github.com/openclaw/openclaw/pull/112980)
- Add Dark Home Screen icons on iOS [#113039](https://github.com/openclaw/openclaw/pull/113039)
- Prevent iOS Settings and release screenshots from stalling [#113187](https://github.com/openclaw/openclaw/pull/113187)
- Honor speech locale for iOS system voice fallback [#113372](https://github.com/openclaw/openclaw/pull/113372)
- Keep Stop available for staged iOS voice notes [#115744](https://github.com/openclaw/openclaw/pull/115744)
- Restore Magic Keyboard Return in the iPad chat composer [#116042](https://github.com/openclaw/openclaw/pull/116042)
- Remove duplicate URLs from iOS shared drafts [#116430](https://github.com/openclaw/openclaw/pull/116430)
- Honor forced agent consultation in iOS Talk routing [#117485](https://github.com/openclaw/openclaw/pull/117485)
- Restore iOS chat composer keyboard focus [#120723](https://github.com/openclaw/openclaw/pull/120723)
- fix(ios): report unavailable when network observation times out [#128724](https://github.com/openclaw/openclaw/pull/128724)
- fix(ios): settle expired background refreshes exactly once [#129097](https://github.com/openclaw/openclaw/pull/129097)
- fix(ios): stale Watch operations overwrite current prompts and commands [#129804](https://github.com/openclaw/openclaw/pull/129804)
- fix(ios): prevent Apple Watch callbacks from crashing the app [#129921](https://github.com/openclaw/openclaw/pull/129921)
- Prevent overlapping automatic iOS overview refreshes [818eca2](https://github.com/openclaw/openclaw/commit/818eca2)
- Correct Korean native UI translations [#107573](https://github.com/openclaw/openclaw/pull/107573)
- Prevent stale delayed overlays in the iOS app [#113062](https://github.com/openclaw/openclaw/pull/113062)
- Make the iOS chat agent identity accessible and expandable [#113917](https://github.com/openclaw/openclaw/pull/113917)
- fix(ios): keep tool details visible in dark mode [#124021](https://github.com/openclaw/openclaw/pull/124021)
- fix(ios): device status leaves battery monitoring enabled [#128174](https://github.com/openclaw/openclaw/pull/128174)
- fix(ios): report no data for throttled silent pushes [#129026](https://github.com/openclaw/openclaw/pull/129026)
- fix(ios): preserve keyboard feedback during voice capture [#129462](https://github.com/openclaw/openclaw/pull/129462)
- fix(ios): Voice Wake silently loses commands when Gateway delivery fails [#130139](https://github.com/openclaw/openclaw/pull/130139)

</details>

</Accordion>

<Accordion title="Android and Wear OS">

Android puts dictation, voice notes, realtime Talk, model and thinking choices, context use, attachments, and the current Talk, Send, or Stop action into one compact composer, with Photos, Videos, and Files behind one plus menu. Text, links, images, supported audio, and common documents received from the system Sharesheet become drafts for review, and unsupported, oversized, or excess items are shown before anything sends.

Search can reach Gateway-backed sessions beyond cached recents while Android is connected, and Threads can expand related parent and child work with descendant status. When the app is offline, search uses the active sessions already in its cache.

The Wear OS companion uses its paired Android phone for the connection and stores no Gateway credentials on the Watch. It can show recent transcripts, send typed or dictated replies, stop a run, notify when a reply arrives, use continuous realtime Talk, and switch agents, sessions, and models when the phone advertises those controls. Supported phones also add Agent Pulse as a read-only view of bounded background work and pending attention, with no approval or mutation actions on the Watch.

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

**Improvements**

- Add per-app language selection on Android [#102876](https://github.com/openclaw/openclaw/pull/102876)
- Show configured agent avatars throughout the Android app [#103248](https://github.com/openclaw/openclaw/pull/103248)
- Add Android system sharing into chat [#104571](https://github.com/openclaw/openclaw/pull/104571)
- Preview inline images in Android chat [#104620](https://github.com/openclaw/openclaw/pull/104620)
- Localize the Android app across 21 languages [#105049](https://github.com/openclaw/openclaw/pull/105049)
- Add foreground Voice Wake on Android [#107081](https://github.com/openclaw/openclaw/pull/107081)
- Add inline dictation and Talk to Android Chat [#109329](https://github.com/openclaw/openclaw/pull/109329)
- Add a secure Wear OS companion through the paired Android phone [#109433](https://github.com/openclaw/openclaw/pull/109433)
- Add continuous Real-Time Talk to the Wear OS companion [#109483](https://github.com/openclaw/openclaw/pull/109483)
- Restore the complete Wear OS companion experience [#110130](https://github.com/openclaw/openclaw/pull/110130)
- Improve Wear OS voice controls and accessibility [#110425](https://github.com/openclaw/openclaw/pull/110425)
- Put Wear OS agent, session, and model controls on Home [#110661](https://github.com/openclaw/openclaw/pull/110661)
- Share audio and documents from Android [#110941](https://github.com/openclaw/openclaw/pull/110941)
- Copy or save Android chat widgets as images [#111030](https://github.com/openclaw/openclaw/pull/111030)
- Animate the Wear Talk avatar from assistant audio [#111516](https://github.com/openclaw/openclaw/pull/111516)
- Bring working status and turn recaps to Android chat [#112221](https://github.com/openclaw/openclaw/pull/112221)
- Add one-tap Voice and Chat routes to the Wear OS Tile [#112721](https://github.com/openclaw/openclaw/pull/112721)
- Add adaptive Material navigation to the Android app [#113908](https://github.com/openclaw/openclaw/pull/113908)
- Show live subagent activity in Android chat [#121813](https://github.com/openclaw/openclaw/pull/121813)
- Add Agent Pulse to the Wear companion [#122123](https://github.com/openclaw/openclaw/pull/122123)
- Show clear system notices and session dividers on Android [#122268](https://github.com/openclaw/openclaw/pull/122268)
- Streamline the Android chat composer [#123077](https://github.com/openclaw/openclaw/pull/123077)
- Add pinned gateway-backed session search to Android [#124338](https://github.com/openclaw/openclaw/pull/124338)
- Show durable progress cards in Android chat [#125444](https://github.com/openclaw/openclaw/pull/125444)
- Add direct searchable context pickers to Wear OS [#126863](https://github.com/openclaw/openclaw/pull/126863)
- feat(android): show session hierarchy in Threads [#128862](https://github.com/openclaw/openclaw/pull/128862)
- Simplify Android Sessions sorting and row markers [#103108](https://github.com/openclaw/openclaw/pull/103108)
- Align Android voice waveforms and Thinking state with Apple platforms [#103130](https://github.com/openclaw/openclaw/pull/103130)
- Improve Android workspace file navigation [#104873](https://github.com/openclaw/openclaw/pull/104873)
- Prepare Android per-device sessions before loading chat history [#105115](https://github.com/openclaw/openclaw/pull/105115)
- Add mood-aware mascot animations to Android onboarding [#109311](https://github.com/openclaw/openclaw/pull/109311)
- Add the Android phone proxy for Wear OS [#109341](https://github.com/openclaw/openclaw/pull/109341)
- Align Wear OS light and dark themes [#110314](https://github.com/openclaw/openclaw/pull/110314)
- Add Android Talk camera and microphone controls [#111046](https://github.com/openclaw/openclaw/pull/111046)
- Add rare working-claw animations on Android [#112571](https://github.com/openclaw/openclaw/pull/112571)
- Collapse Android sidebar search behind a header action [#116956](https://github.com/openclaw/openclaw/pull/116956)
- Show plan status and explanations in Android chat [#124958](https://github.com/openclaw/openclaw/pull/124958)
- Let Android chat bubbles show who is speaking [#124985](https://github.com/openclaw/openclaw/pull/124985)
- Unify Android chat colors under ClawTheme [#125020](https://github.com/openclaw/openclaw/pull/125020)
- feat(android): group sidebar sessions [#128092](https://github.com/openclaw/openclaw/pull/128092)
- feat(android): unify agent and session pickers [#128309](https://github.com/openclaw/openclaw/pull/128309)
- Make Android release screenshots deterministic [f163f32](https://github.com/openclaw/openclaw/commit/f163f32)
- Align the Android launcher icon with the OpenClaw favicon [#101423](https://github.com/openclaw/openclaw/pull/101423)
- Simplify the Android Canvas standby layout [#104001](https://github.com/openclaw/openclaw/pull/104001)
- Refresh generated native app translations [#112803](https://github.com/openclaw/openclaw/pull/112803)
- Keep completed Android plan steps readable [#124916](https://github.com/openclaw/openclaw/pull/124916)
- chore(i18n): refresh native locales [#127681](https://github.com/openclaw/openclaw/pull/127681)

**Bug fixes**

- Keep Android composer state with its chat [#109200](https://github.com/openclaw/openclaw/pull/109200)
- Stabilize Wear OS realtime audio and agent requests [#111033](https://github.com/openclaw/openclaw/pull/111033)
- Respect reduced-motion settings in the Wear Talk avatar [#112245](https://github.com/openclaw/openclaw/pull/112245)
- Stop canceled Android work from appearing as failures [#105047](https://github.com/openclaw/openclaw/pull/105047)
- Keep Android app sessions stable during reconnects [#105144](https://github.com/openclaw/openclaw/pull/105144)
- Keep long Android chat runs active [#106864](https://github.com/openclaw/openclaw/pull/106864)
- Restore brand colors for Android header logos [#108199](https://github.com/openclaw/openclaw/pull/108199)
- Preserve emoji in Android diagnostics [#108823](https://github.com/openclaw/openclaw/pull/108823)
- Preserve complete Unicode graphemes in Android initials [#108830](https://github.com/openclaw/openclaw/pull/108830)
- Preserve full Unicode graphemes in Android badges [#109486](https://github.com/openclaw/openclaw/pull/109486)
- Keep restarted Wear Talk sessions alive after stale audio errors [#110292](https://github.com/openclaw/openclaw/pull/110292)
- Recover Wear requests from stale phone routes [#110423](https://github.com/openclaw/openclaw/pull/110423)
- Keep Android streaming replies in view [#110983](https://github.com/openclaw/openclaw/pull/110983)
- Keep streamed replies visible in the Wear OS thread [#111459](https://github.com/openclaw/openclaw/pull/111459)
- Localize Wear OS companion status and failures [#112228](https://github.com/openclaw/openclaw/pull/112228)
- React to Android Remove animations changes [#112687](https://github.com/openclaw/openclaw/pull/112687)
- Keep active Wear OS replies when older turns finish [#113804](https://github.com/openclaw/openclaw/pull/113804)
- Format Android and Wear labels with the active locale [#115015](https://github.com/openclaw/openclaw/pull/115015)
- Localize the Android “Pinned” accessibility label [#117726](https://github.com/openclaw/openclaw/pull/117726)
- Keep Wear OS chat on the newest reply [#120307](https://github.com/openclaw/openclaw/pull/120307)
- Start Android subagent retention from local completion [#122089](https://github.com/openclaw/openclaw/pull/122089)
- Keep Android subagent activity visible for the full retention period [#122198](https://github.com/openclaw/openclaw/pull/122198)
- Restore compact Android chat metadata labels [#125053](https://github.com/openclaw/openclaw/pull/125053)
- fix(android): normalize null calendar and contact write fields [#125527](https://github.com/openclaw/openclaw/pull/125527)
- fix: location.get can return a stale fix when no cached location is fresh enough [#128439](https://github.com/openclaw/openclaw/pull/128439)
- fix(android): gateway accent color is fetched but never applied to the app theme [#128702](https://github.com/openclaw/openclaw/pull/128702)
- fix(android): fence canceled voice-note permission callbacks [#128733](https://github.com/openclaw/openclaw/pull/128733)
- fix(android): select writable calendars for new events [#129055](https://github.com/openclaw/openclaw/pull/129055)
- fix(android): preserve photo orientation in chat images [#129136](https://github.com/openclaw/openclaw/pull/129136)
- fix(android): stop interrupted assistant audio and remove cached files [#129574](https://github.com/openclaw/openclaw/pull/129574)
- fix(android): recover dropped gateway events [#129723](https://github.com/openclaw/openclaw/pull/129723)
- fix(android): load chat images, audio, and video behind proxy paths [#129957](https://github.com/openclaw/openclaw/pull/129957)
- fix(android): photo library returns rotated or mirrored camera images [#129965](https://github.com/openclaw/openclaw/pull/129965)
- fix(android): preserve document attachments in offline chat history [#130163](https://github.com/openclaw/openclaw/pull/130163)
- fix(android): report disabled notification categories instead of success [#130531](https://github.com/openclaw/openclaw/pull/130531)
- fix(android): read long replies aloud without silent failure [#130574](https://github.com/openclaw/openclaw/pull/130574)
- fix(android): keep question answers when reading earlier messages [#130821](https://github.com/openclaw/openclaw/pull/130821)
- fix(android): keep settings controls reachable with the keyboard open [#130995](https://github.com/openclaw/openclaw/pull/130995)
- Keep forwarded Android notification text UTF-16 safe [#102442](https://github.com/openclaw/openclaw/pull/102442)
- Keep Android link preview metadata UTF-16 safe [#102988](https://github.com/openclaw/openclaw/pull/102988)
- Wrap long filenames in the Android workspace browser [#104075](https://github.com/openclaw/openclaw/pull/104075)
- fix(android): refresh notification access on resume [#104460](https://github.com/openclaw/openclaw/pull/104460)
- Keep Android session search inside Sessions [#104792](https://github.com/openclaw/openclaw/pull/104792)
- Bound Android structured history image decoding [#105065](https://github.com/openclaw/openclaw/pull/105065)
- Autofocus Android command-palette search [#105471](https://github.com/openclaw/openclaw/pull/105471)
- Center the Android command palette title [#106264](https://github.com/openclaw/openclaw/pull/106264)
- Make Android attachment removal easier to tap [#106737](https://github.com/openclaw/openclaw/pull/106737)
- Outline the Android Providers & Models back button [#106803](https://github.com/openclaw/openclaw/pull/106803)
- Preserve emoji when Android voice errors are shortened [#108101](https://github.com/openclaw/openclaw/pull/108101)
- Preserve emoji boundaries in Android session labels [#108102](https://github.com/openclaw/openclaw/pull/108102)
- Preserve emoji in Android presence-rejection logs [#108103](https://github.com/openclaw/openclaw/pull/108103)
- Enlarge Android voice-note recording controls [#108307](https://github.com/openclaw/openclaw/pull/108307)
- Android tool previews preserve emoji [#108330](https://github.com/openclaw/openclaw/pull/108330)
- Preserve Android push-to-talk speech across pauses [#110995](https://github.com/openclaw/openclaw/pull/110995)
- Restore Wear Talk after exiting and reopening [#112383](https://github.com/openclaw/openclaw/pull/112383)
- Make Android branch message counts locale-neutral [#112426](https://github.com/openclaw/openclaw/pull/112426)
- Correct Android accessibility executor localization [#113276](https://github.com/openclaw/openclaw/pull/113276)
- Show pinned status in Android sidebar sessions [#117063](https://github.com/openclaw/openclaw/pull/117063)
- Show all matching sessions in Android sidebar search [#117981](https://github.com/openclaw/openclaw/pull/117981)
- Show active Android session status in the sidebar [#118624](https://github.com/openclaw/openclaw/pull/118624)
- Generate useful titles for new Android chats [#123670](https://github.com/openclaw/openclaw/pull/123670)
- Keep pinned Android sessions in the compact picker [#125264](https://github.com/openclaw/openclaw/pull/125264)
- fix(android): preserve photo capture dates and requested image resolution [#125550](https://github.com/openclaw/openclaw/pull/125550)
- Localize Android progress-card labels [#125608](https://github.com/openclaw/openclaw/pull/125608)
- fix(android): prevent expired subagent tasks from reappearing [#128612](https://github.com/openclaw/openclaw/pull/128612)
- fix(android): normalize optional motion date ranges [#128734](https://github.com/openclaw/openclaw/pull/128734)
- fix(android): contacts without personal names appear unnamed [#129549](https://github.com/openclaw/openclaw/pull/129549)
- fix(android): preserve document-only chat messages [#129557](https://github.com/openclaw/openclaw/pull/129557)
- fix(android): captions disappear when sharing multiple images [#129603](https://github.com/openclaw/openclaw/pull/129603)
- fix(android): preserve omitted image-only chat messages [#129711](https://github.com/openclaw/openclaw/pull/129711)
- fix(android): preserve disconnected node gateway status [#129839](https://github.com/openclaw/openclaw/pull/129839)
- fix(android): shared images lose their original filenames [#130156](https://github.com/openclaw/openclaw/pull/130156)
- fix(android): honor low camera snapshot quality [#130160](https://github.com/openclaw/openclaw/pull/130160)
- fix(android): require listener access before forwarding notifications [#130173](https://github.com/openclaw/openclaw/pull/130173)
- fix(android): keep the composer visible with slash suggestions [#130555](https://github.com/openclaw/openclaw/pull/130555)
- fix(android): keep Talk's speaking indicator active during reply replacement [#130868](https://github.com/openclaw/openclaw/pull/130868)

</details>

</Accordion>

<Accordion title="macOS app">

macOS Quick Chat opens from the menu bar or a global shortcut over the app already in use, with a picker for the five most recently updated conversations. It streams the reply in place, switches agents, accepts dictation, and selects a model and reasoning level. Screen Recording permission adds window or region capture, while Accessibility permission adds bounded text from the focused app and lets a final answer paste back where the user was working. Captured context clears after the send or when Quick Chat hides.

Native chat can now rename, fork, pin, archive, mark read or unread, and organize conversations in parent-child trees and groups, with batch actions, inspection, and worktree-backed creation. A worktree request stops when the chosen agent, parent, worktree, or base reference cannot be honored.

The Dashboard returns to its remembered frame, Space, and eligible route through reconnects, and the status menu keeps live session cards, selection, and Gateway or device diagnostics stable and readable.

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

**Improvements**

- Move the macOS sidebar toggle into the titlebar [#104380](https://github.com/openclaw/openclaw/pull/104380)
- Redesign the macOS menu-bar critter [#104846](https://github.com/openclaw/openclaw/pull/104846)
- Adapt macOS titlebar controls to sidebar state [#105175](https://github.com/openclaw/openclaw/pull/105175)
- Move macOS dashboard toolbar controls into the web UI [#105902](https://github.com/openclaw/openclaw/pull/105902)
- Make the macOS dashboard feel native [#106997](https://github.com/openclaw/openclaw/pull/106997)
- Add nightcap, graduation cap, and hat-tip mascot moments on Mac [#108882](https://github.com/openclaw/openclaw/pull/108882)
- Add macOS Quick Chat [#109720](https://github.com/openclaw/openclaw/pull/109720)
- Expand macOS Quick Chat with agent switching and window screenshots [#109952](https://github.com/openclaw/openclaw/pull/109952)
- Improve microphone control and live feedback in macOS Talk Mode [#109995](https://github.com/openclaw/openclaw/pull/109995)
- Native macOS chat adds session actions, unread handling, and a subagent tree [#110019](https://github.com/openclaw/openclaw/pull/110019)
- Add native session groups, batch actions, and worktree creation [#110347](https://github.com/openclaw/openclaw/pull/110347)
- macOS Quick Chat streams replies and continues recent conversations [#110631](https://github.com/openclaw/openclaw/pull/110631)
- Add Quick Chat area capture and focused-app text context [#110635](https://github.com/openclaw/openclaw/pull/110635)
- Add dictation, paste-back, and model controls to macOS Quick Chat [#110994](https://github.com/openclaw/openclaw/pull/110994)
- Add approval-gated camera pan, tilt, and zoom on macOS [#120511](https://github.com/openclaw/openclaw/pull/120511)
- Present widgets on connected Mac device panels [#125818](https://github.com/openclaw/openclaw/pull/125818)
- refactor(macos): single-owner hybrid status menu with live session cards and exec approvals [#130041](https://github.com/openclaw/openclaw/pull/130041)
- refactor(macos): status menu polish — owned width, quiet header, structured diagnostics, native highlight [#130388](https://github.com/openclaw/openclaw/pull/130388)
- Reuse the macOS MLX voice model across utterances [#104200](https://github.com/openclaw/openclaw/pull/104200)
- Reclaim vertical space in macOS chat split view [#104628](https://github.com/openclaw/openclaw/pull/104628)
- Refresh the macOS installer artwork and layout [#107142](https://github.com/openclaw/openclaw/pull/107142)
- Let the macOS menu-bar critter celebrate recovery and finished work [#108866](https://github.com/openclaw/openclaw/pull/108866)
- Merge the macOS WebChat title and toolbar rows [#109318](https://github.com/openclaw/openclaw/pull/109318)
- Add a true background-only launch mode for the macOS app [#112168](https://github.com/openclaw/openclaw/pull/112168)
- Clarify macOS remote-gateway onboarding [#114494](https://github.com/openclaw/openclaw/pull/114494)
- Move macOS node identity reads out of menu rendering [#116435](https://github.com/openclaw/openclaw/pull/116435)
- Refresh generated macOS locale artifacts [#117948](https://github.com/openclaw/openclaw/pull/117948)
- macOS: surface realtime Talk settings [#118505](https://github.com/openclaw/openclaw/pull/118505)
- Make macOS Peekaboo host upgrades transactional [#124564](https://github.com/openclaw/openclaw/pull/124564)
- Add Command-bracket history shortcuts to the macOS dashboard [#104328](https://github.com/openclaw/openclaw/pull/104328)
- Give macOS dashboard titlebar controls more space [#104572](https://github.com/openclaw/openclaw/pull/104572)
- Add a working mascot animation for macOS setup and updates [#108735](https://github.com/openclaw/openclaw/pull/108735)
- Reduce macOS location-permission polling overhead [#116092](https://github.com/openclaw/openclaw/pull/116092)
- Remove the duplicate macOS menu bar hover card [#118116](https://github.com/openclaw/openclaw/pull/118116)

**Bug fixes**

- Keep the macOS Dashboard stable through reconnects [#117112](https://github.com/openclaw/openclaw/pull/117112)
- fix(macos): suppress SIGPIPE on process pipe write ends [#127666](https://github.com/openclaw/openclaw/pull/127666)
- Restore session deletion in the macOS Dashboard [#102263](https://github.com/openclaw/openclaw/pull/102263)
- Drag macOS windows from split-view pane headers [#104048](https://github.com/openclaw/openclaw/pull/104048)
- Align macOS dashboard traffic lights with hosted titlebar controls [#106099](https://github.com/openclaw/openclaw/pull/106099)
- Make macOS menu bar clicks reliable [#107786](https://github.com/openclaw/openclaw/pull/107786)
- Restore macOS app builds on Swift 6.2 [#107926](https://github.com/openclaw/openclaw/pull/107926)
- Keep hidden macOS Canvas panels from reopening [#110107](https://github.com/openclaw/openclaw/pull/110107)
- Open the receiving agent's Quick Chat conversation [#110118](https://github.com/openclaw/openclaw/pull/110118)
- Stabilize macOS Quick Chat capture and text context [#110830](https://github.com/openclaw/openclaw/pull/110830)
- Reap timed-out macOS shell process groups [#115859](https://github.com/openclaw/openclaw/pull/115859)
- Pause inactive macOS Canvas polling [#116106](https://github.com/openclaw/openclaw/pull/116106)
- Resume every concurrent macOS location permission request [#116183](https://github.com/openclaw/openclaw/pull/116183)
- Stop cancelled Voice Wake timers from doing stale work [#116189](https://github.com/openclaw/openclaw/pull/116189)
- Keep the macOS Voice Wake indicator active for the current capture [#116196](https://github.com/openclaw/openclaw/pull/116196)
- Keep the newest macOS Voice Wake triggers [#116202](https://github.com/openclaw/openclaw/pull/116202)
- Stop cancelled macOS refresh tasks from running late [#116322](https://github.com/openclaw/openclaw/pull/116322)
- Restore scrolling across macOS Settings panes [#118831](https://github.com/openclaw/openclaw/pull/118831)
- Restore double-click zoom in the macOS dashboard [#118976](https://github.com/openclaw/openclaw/pull/118976)
- Deliver provisional macOS notifications [#122179](https://github.com/openclaw/openclaw/pull/122179)
- Reap macOS helper processes on shutdown [#123538](https://github.com/openclaw/openclaw/pull/123538)
- Present macOS Canvas widgets atomically [#126039](https://github.com/openclaw/openclaw/pull/126039)
- fix(ui): propagate user accent to Talk Mode and widget frames [#128577](https://github.com/openclaw/openclaw/pull/128577)
- fix(macos): user accent from Control UI is clobbered by config snapshots and never live-updates the chat window [#128703](https://github.com/openclaw/openclaw/pull/128703)
- fix(mac): prevent network discovery crashes on addressless interfaces [#129265](https://github.com/openclaw/openclaw/pull/129265)
- fix(macos): prevent crashes when SSH tunnel startup is canceled [#130332](https://github.com/openclaw/openclaw/pull/130332)
- fix(macos): quit without leaving SSH tunnels behind [#130421](https://github.com/openclaw/openclaw/pull/130421)
- Remove the duplicate macOS titlebar brand mark [#102497](https://github.com/openclaw/openclaw/pull/102497)
- Use safe reads for macOS MLX speech output [#104233](https://github.com/openclaw/openclaw/pull/104233)
- Keep macOS split-view headers clear of window controls [#104593](https://github.com/openclaw/openclaw/pull/104593)
- Remove duplicate sidebar toggles from the macOS dashboard [#104694](https://github.com/openclaw/openclaw/pull/104694)
- Keep the compact macOS brand clear of window controls [#107783](https://github.com/openclaw/openclaw/pull/107783)
- Stop Settings opening with the macOS dashboard [#108074](https://github.com/openclaw/openclaw/pull/108074)
- Stop agent-presented Canvas windows from stealing focus [#110245](https://github.com/openclaw/openclaw/pull/110245)
- Align the macOS session header with native titlebar controls [#110462](https://github.com/openclaw/openclaw/pull/110462)
- Restore the critter icon in the macOS menu bar [#114223](https://github.com/openclaw/openclaw/pull/114223)
- Keep replacement macOS notifications visible [#116226](https://github.com/openclaw/openclaw/pull/116226)
- Refresh generated macOS locale catalogs [#116640](https://github.com/openclaw/openclaw/pull/116640)
- Remove the macOS self-named defaults warning [#117690](https://github.com/openclaw/openclaw/pull/117690)
- Restore native Codex and Claude sidebar handling on macOS [#118914](https://github.com/openclaw/openclaw/pull/118914)
- Honor While Using location permission on macOS [#122435](https://github.com/openclaw/openclaw/pull/122435)
- Restore Group badges for opaque session keys on macOS [#126807](https://github.com/openclaw/openclaw/pull/126807)
- fix(macos): cancelled Talk sessions can spin at full CPU [#129682](https://github.com/openclaw/openclaw/pull/129682)
- fix(macos): restore denied speech permission recovery in Settings and voice controls [#129950](https://github.com/openclaw/openclaw/pull/129950)
- fix(macos): recognize Screen Recording access after granting permission [#130530](https://github.com/openclaw/openclaw/pull/130530)

</details>

</Accordion>

<Accordion title="Linux app">

The Linux desktop companion work now includes first-run setup, tray and service controls, an embedded Control UI, reconnect handling, deep links, autostart, window restoration, update notices, and native alerts for pending requests. Quick Chat switches agents, keeps one Gateway connection open, streams replies in the bar, and shows whether a send was accepted, failed, or is waiting for reconnection.

The build and publication path supports .deb and AppImage packages, although their availability as v2026.8.1 downloads has not yet been verified. The summon shortcut works on X11, Wayland keeps the tray entry, and approval decisions remain in the Dashboard or command line.

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

**Improvements**

- Add a Linux desktop companion app [#106352](https://github.com/openclaw/openclaw/pull/106352)
- Add Linux companion packages, brand icons, and Gateway guidance [#106533](https://github.com/openclaw/openclaw/pull/106533)
- Add Linux desktop companion OS integration [#109236](https://github.com/openclaw/openclaw/pull/109236)
- Add Linux approval alerts and a summon shortcut [#109322](https://github.com/openclaw/openclaw/pull/109322)
- Add Quick Chat to the Linux companion [#109947](https://github.com/openclaw/openclaw/pull/109947)
- Add agent switching and shortcut controls to Linux Quick Chat [#110285](https://github.com/openclaw/openclaw/pull/110285)
- Connect Linux Quick Chat directly to the Gateway [#110491](https://github.com/openclaw/openclaw/pull/110491)
- Stream Linux Quick Chat replies in the bar [#110632](https://github.com/openclaw/openclaw/pull/110632)
- Render interactive widgets in Linux Quick Chat [#111933](https://github.com/openclaw/openclaw/pull/111933)
- Publish Linux companion packages with stable releases [#106891](https://github.com/openclaw/openclaw/pull/106891)
- Use the Clawd mascot for Linux desktop icons [#108181](https://github.com/openclaw/openclaw/pull/108181)

**Bug fixes**

- Stabilize Linux Quick Chat widgets [#112261](https://github.com/openclaw/openclaw/pull/112261)
- Package Linux media playback codecs [#115616](https://github.com/openclaw/openclaw/pull/115616)
- Hide Linux Quick Chat before stale widget cleanup [#112308](https://github.com/openclaw/openclaw/pull/112308)
- Keep Linux Quick Chat on-screen across DPI and widget resizes [#114271](https://github.com/openclaw/openclaw/pull/114271)
- fix(linux): Quick Chat ignores the configured Gateway accent [#129451](https://github.com/openclaw/openclaw/pull/129451)

</details>

</Accordion>

<Accordion title="Progress and Presentation by Native App">

On iOS, macOS, and Android, rich progress cards can remain above the composer after a run and return through a relaunch or reconnect when the connected Gateway supports saved cards. Those clients also show a working Claw, elapsed time, and long-wait status while a turn runs, then add a duration and token recap when it completes successfully and unambiguously. Older Gateways can still show live fallback cards, but they cannot restore those cards after relaunch, and Android's fallback can sometimes retain a stale completed status.

Assistant-created widgets can render inline on iOS, Android, macOS, and Linux Quick Chat when the client advertises support, and an eligible connected Mac can also present one in its native Canvas panel. Linux Quick Chat remains text-only when it uses a custom Gateway TLS leaf pin. Expandable file-edit diffs cover a narrower set of clients and appear on iPhone, iPad, and Mac.

Runtime translations now reach Android's main workflows and named iPhone, iPad, Live Activity, Apple Watch, and Wear status surfaces, with a per-app language picker on Android. Identity-bound iOS, macOS, and Android connections follow the user's profile accent as it changes across devices, and voice surfaces on iOS, watchOS, macOS, and Android share the same phase-based waveform, using synthetic motion where live metering is unavailable.

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

**Improvements**

- Unified voice waveform with live audio feedback across native apps [#102901](https://github.com/openclaw/openclaw/pull/102901)
- Add responsive moods and Easter eggs to the Apple app mascot [#104255](https://github.com/openclaw/openclaw/pull/104255)
- Add interactive inline widgets to native chats [#109212](https://github.com/openclaw/openclaw/pull/109212)
- Bring native macOS chat closer to web chat parity [#109712](https://github.com/openclaw/openclaw/pull/109712)
- Improve native chat copying, long-message reading, and trace controls [#110276](https://github.com/openclaw/openclaw/pull/110276)
- Show Apple chat tool activity as expandable rows [#110618](https://github.com/openclaw/openclaw/pull/110618)
- Copy or save chat widgets as images on Apple platforms [#110987](https://github.com/openclaw/openclaw/pull/110987)
- Show file-edit diffs in iOS and macOS chat [#111039](https://github.com/openclaw/openclaw/pull/111039)
- Complete inline tool diffs in Apple chat [#111326](https://github.com/openclaw/openclaw/pull/111326)
- Add session dashboards to iOS and Android [#112163](https://github.com/openclaw/openclaw/pull/112163)
- Bring the working claw and turn recap to iOS and macOS [#112188](https://github.com/openclaw/openclaw/pull/112188)
- Bring live session observer summaries to native apps [#112597](https://github.com/openclaw/openclaw/pull/112597)
- Show live Swarm worker progress in native chat apps [#113850](https://github.com/openclaw/openclaw/pull/113850)
- Show live subagent activity in Apple chat [#121815](https://github.com/openclaw/openclaw/pull/121815)
- Show system notices and history boundaries in Apple chat [#122255](https://github.com/openclaw/openclaw/pull/122255)
- View a machine desktop from iOS and Android [#123097](https://github.com/openclaw/openclaw/pull/123097)
- Bring durable progress cards to iOS and macOS [#125442](https://github.com/openclaw/openclaw/pull/125442)
- feat(apps): resolve the per-profile accent live on iOS, macOS, and Android [#130598](https://github.com/openclaw/openclaw/pull/130598)
- Use thread wording across native chat apps [#111038](https://github.com/openclaw/openclaw/pull/111038)
- Refresh generated native catalogs across all supported locales [#112441](https://github.com/openclaw/openclaw/pull/112441)
- Add zen, drummer, and peekaboo working-claw animations [#112570](https://github.com/openclaw/openclaw/pull/112570)
- Refresh generated native app translations [#112662](https://github.com/openclaw/openclaw/pull/112662)
- Refresh native app translations [#114915](https://github.com/openclaw/openclaw/pull/114915)
- Refresh translations across native apps [#115532](https://github.com/openclaw/openclaw/pull/115532)
- Add four rare working-claw animations [#120826](https://github.com/openclaw/openclaw/pull/120826)
- Refresh native translations for chat recovery and history messages [#122355](https://github.com/openclaw/openclaw/pull/122355)
- chore(i18n): refresh native locales [#128759](https://github.com/openclaw/openclaw/pull/128759)
- Share Apple chat gateway payload mapping [#106154](https://github.com/openclaw/openclaw/pull/106154)
- Replace the wide jump-to-latest pill with a compact button [#110651](https://github.com/openclaw/openclaw/pull/110651)
- Sharpen the working-claw icon across apps [#114939](https://github.com/openclaw/openclaw/pull/114939)
- Refresh current Android and iOS translations [#120352](https://github.com/openclaw/openclaw/pull/120352)
- Refresh generated native app locales [#121000](https://github.com/openclaw/openclaw/pull/121000)
- Refresh generated native app locales [#121561](https://github.com/openclaw/openclaw/pull/121561)
- Refresh generated Android and iOS locales [#123101](https://github.com/openclaw/openclaw/pull/123101)
- Refresh generated native app locales [#124089](https://github.com/openclaw/openclaw/pull/124089)

**Bug fixes**

- Harden mobile Gateway sessions and Apple Watch reply state [2c316f5](https://github.com/openclaw/openclaw/commit/2c316f5)
- Fence stale Watch actions and preserve retried attachments [7838c6a](https://github.com/openclaw/openclaw/commit/7838c6a)
- Make Apple timeouts return promptly and keep retries safe [#103066](https://github.com/openclaw/openclaw/pull/103066)
- Restore native live updates after reconnects [#113634](https://github.com/openclaw/openclaw/pull/113634)
- Render assistant-generated images in native chat [#115042](https://github.com/openclaw/openclaw/pull/115042)
- Restore native Talk behavior across iOS, Android, and macOS [#115577](https://github.com/openclaw/openclaw/pull/115577)
- Restore plan cards with released Gateways on Apple apps [#125588](https://github.com/openclaw/openclaw/pull/125588)
- Resync native translations after Android inventory drift [bd03b4d](https://github.com/openclaw/openclaw/commit/bd03b4d)
- Restore native runtime, Watch avatar, browser graphics, and local audio behavior [#107631](https://github.com/openclaw/openclaw/pull/107631)
- Use native desktop system notifications [#109901](https://github.com/openclaw/openclaw/pull/109901)
- Keep Jump to latest hidden at the live edge [#110811](https://github.com/openclaw/openclaw/pull/110811)
- Localize Android flavor and Apple settings surfaces [#113214](https://github.com/openclaw/openclaw/pull/113214)
- Refresh native locales and fix Indonesian countdown units [#113289](https://github.com/openclaw/openclaw/pull/113289)
- Preserve images and voice notes in native chat and exports [#113764](https://github.com/openclaw/openclaw/pull/113764)
- Restore Apple chat sidebar ordering and search [#113886](https://github.com/openclaw/openclaw/pull/113886)
- Preserve literal Markdown image examples in native chat [#113904](https://github.com/openclaw/openclaw/pull/113904)
- Localize Apple gateway discovery status [#115051](https://github.com/openclaw/openclaw/pull/115051)
- Show expanded disclosure content on Apple platforms [#115863](https://github.com/openclaw/openclaw/pull/115863)
- Keep iOS attachments available when routing is unknown [#116787](https://github.com/openclaw/openclaw/pull/116787)
- Refresh native translations for subagent status [#121939](https://github.com/openclaw/openclaw/pull/121939)
- Match embedded Control UI to mobile app appearance [#123408](https://github.com/openclaw/openclaw/pull/123408)
- fix(macos): prevent duplicate New Chat sessions and stale navigation [#127693](https://github.com/openclaw/openclaw/pull/127693)
- fix(apps): prevent Unicode numerals from freezing code highlights [#128364](https://github.com/openclaw/openclaw/pull/128364)
- fix(location): reject future-dated cached fixes [#128591](https://github.com/openclaw/openclaw/pull/128591)
- fix(nodes): report camera positions the hardware actually reached [#128595](https://github.com/openclaw/openclaw/pull/128595)
- feat(ios): adopt gateway user accent in chat [#128599](https://github.com/openclaw/openclaw/pull/128599)
- chore(i18n): refresh native locales [#130270](https://github.com/openclaw/openclaw/pull/130270)
- fix(apple): avoid rebuilding unchanged tool diff previews [#130615](https://github.com/openclaw/openclaw/pull/130615)
- chore(i18n): refresh native locales [#130667](https://github.com/openclaw/openclaw/pull/130667)
- fix(apple): load chat media behind reverse-proxy paths [#130755](https://github.com/openclaw/openclaw/pull/130755)
- Refresh native app translations and locale catalogs [#115608](https://github.com/openclaw/openclaw/pull/115608)
- fix(apple): bind widget snapshots to their document owner [#129666](https://github.com/openclaw/openclaw/pull/129666)
- fix(talk): preserve replacement speech when an old utterance is canceled [#130687](https://github.com/openclaw/openclaw/pull/130687)
- Stabilize streamed replies in Apple chat [#50483](https://github.com/openclaw/openclaw/pull/50483)

</details>

</Accordion>

</AccordionGroup>

## Models and Providers

Chat and the Models page now open from the catalog OpenClaw already has, so choosing a model no longer waits for a full provider scan. Live discovery runs only when you open a model screen or explicitly refresh it, keeps the last useful list when a lookup fails, and `/model` can change only the current conversation or deliberately update one agent or the shared default.

Once a model is selected, OpenClaw keeps the request inside the intended provider and authorized account order, preserves the real order and outcome of streamed replies and tool calls, carries reasoning and context settings with the model and runtime, and reports plan windows, token use, context pressure, and estimated cost more clearly.

<AccordionGroup>

<Accordion title="Finding and choosing models">

Chat and the Models page now start from the catalog OpenClaw already has, with supported providers looking for newer chat and text models when you open a picker or request a refresh. If that lookup fails, the built-in entries and last working list remain available.

A `/model` change can stay with the current conversation or deliberately apply to one agent or the shared default, with persistent changes requiring the right authority. Aliases and fallback keep the provider and account attached to the selected model.

The list shows models OpenClaw can identify, while the provider, account, region, endpoint, plan, limits, and pricing determine which ones you can use.

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

**Improvements**

- Migrate legacy Codex model routes into OpenAI [3c8269c](https://github.com/openclaw/openclaw/commit/3c8269c)
- Show provider-configured models on Android [#101912](https://github.com/openclaw/openclaw/pull/101912)
- Add Grok 4.5 to the bundled xAI provider [#102316](https://github.com/openclaw/openclaw/pull/102316)
- Refresh Qwen, Cohere, and Mistral model catalogs [#102489](https://github.com/openclaw/openclaw/pull/102489)
- Add current Cohere Command models [#102563](https://github.com/openclaw/openclaw/pull/102563)
- Add bundled Meta Model API support for Muse Spark 1.1 [#102873](https://github.com/openclaw/openclaw/pull/102873)
- Publish Meta under its canonical provider package [#103070](https://github.com/openclaw/openclaw/pull/103070)
- Derive utility models from the primary provider [#103769](https://github.com/openclaw/openclaw/pull/103769)
- Move active defaults and examples to GPT-5.6 Sol and Luna [#104452](https://github.com/openclaw/openclaw/pull/104452)
- Reduce repeated agent turn setup latency [#105220](https://github.com/openclaw/openclaw/pull/105220)
- Add official Baseten Model API support [#108708](https://github.com/openclaw/openclaw/pull/108708)
- Add Kimi K3 support across Moonshot and Kimi Code [#109202](https://github.com/openclaw/openclaw/pull/109202)
- Add provider-grouped models and per-session controls to macOS chat [#110339](https://github.com/openclaw/openclaw/pull/110339)
- Discover current chat models from live provider catalogs [#112412](https://github.com/openclaw/openclaw/pull/112412)
- Make provider catalogs authoritative for model compatibility [#112542](https://github.com/openclaw/openclaw/pull/112542)
- Add end-to-end Claude Opus 5 support [#113391](https://github.com/openclaw/openclaw/pull/113391)
- Complete Claude Opus 5 support across Anthropic routes [#113392](https://github.com/openclaw/openclaw/pull/113392)
- Curate model pickers around current-generation choices [#113594](https://github.com/openclaw/openclaw/pull/113594)
- Complete Claude Opus 5 support across Anthropic routes [#113633](https://github.com/openclaw/openclaw/pull/113633)
- Refresh model catalogs without an OpenClaw release [#113660](https://github.com/openclaw/openclaw/pull/113660)
- Refresh provider catalogs to current model lineups [#113681](https://github.com/openclaw/openclaw/pull/113681)
- Start warm agent turns faster [#113817](https://github.com/openclaw/openclaw/pull/113817)
- Add first-class Kimi K3 support [#113909](https://github.com/openclaw/openclaw/pull/113909)
- Consolidate model settings on one Models page [#115108](https://github.com/openclaw/openclaw/pull/115108)
- Follow xAI's OAuth default model automatically [#115617](https://github.com/openclaw/openclaw/pull/115617)
- Clarify Model Setup and remove duplicate active routes [#116086](https://github.com/openclaw/openclaw/pull/116086)
- Add session-only model selection and preserve fallback state [#119325](https://github.com/openclaw/openclaw/pull/119325)
- Add Meta Muse Spark 1.2 models [#120373](https://github.com/openclaw/openclaw/pull/120373)
- Add first-class Grok 4.6 catalog and reasoning support [#122762](https://github.com/openclaw/openclaw/pull/122762)
- Add GLM 5.3 support for Z.AI Coding Plan [#123523](https://github.com/openclaw/openclaw/pull/123523)
- Add first-class support for existing llama-server endpoints [#125781](https://github.com/openclaw/openclaw/pull/125781)
- Unify managed and existing llama.cpp servers [#126434](https://github.com/openclaw/openclaw/pull/126434)
- feat(models): add configurable model selection scopes [#127813](https://github.com/openclaw/openclaw/pull/127813)
- Add first-class Alibaba Qwen Token Plan support [#94419](https://github.com/openclaw/openclaw/pull/94419)
- Update the bundled Codex app-server to 0.144.1 [#103156](https://github.com/openclaw/openclaw/pull/103156)
- Reduce warm Gateway model startup latency [#105552](https://github.com/openclaw/openclaw/pull/105552)
- Refresh Z.AI, Kimi, Moonshot, and xAI catalog guidance [#109666](https://github.com/openclaw/openclaw/pull/109666)
- Show bundled provider icons during model setup [#112169](https://github.com/openclaw/openclaw/pull/112169)
- Speed up provider-filtered model listing [#112752](https://github.com/openclaw/openclaw/pull/112752)
- Refresh OpenCode Zen models and pricing [#113858](https://github.com/openclaw/openclaw/pull/113858)
- Add the Kimi K3 256K model option [#113918](https://github.com/openclaw/openclaw/pull/113918)
- Keep code-mode tiers consistent across provider catalogs [#115183](https://github.com/openclaw/openclaw/pull/115183)
- Remember the last-used model for future sessions [#115717](https://github.com/openclaw/openclaw/pull/115717)
- Show full model names alongside aliases [#115789](https://github.com/openclaw/openclaw/pull/115789)
- Clarify local model setup actions [#116953](https://github.com/openclaw/openclaw/pull/116953)
- Reduce memory use for the default model list [#117323](https://github.com/openclaw/openclaw/pull/117323)
- Clarify llama.cpp local model setup [#117947](https://github.com/openclaw/openclaw/pull/117947)
- Speed up verified model setup [#118352](https://github.com/openclaw/openclaw/pull/118352)
- Remove full model-catalog builds from turn startup [#120834](https://github.com/openclaw/openclaw/pull/120834)
- Explain the Utility model setting in Models [#123277](https://github.com/openclaw/openclaw/pull/123277)
- Reuse the WebUI model catalog across pages [#124794](https://github.com/openclaw/openclaw/pull/124794)
- Avoid repeated plugin scans during model lookups [#125090](https://github.com/openclaw/openclaw/pull/125090)
- perf(tui): prepare searchable picker rows once [#127620](https://github.com/openclaw/openclaw/pull/127620)
- fix(ui): add brand icons for all provider auth choices [#127668](https://github.com/openclaw/openclaw/pull/127668)
- perf(cli): lazy-load infer command domains [#128150](https://github.com/openclaw/openclaw/pull/128150)
- feat(zai): add GLM-5.3 Flash model support [#130309](https://github.com/openclaw/openclaw/pull/130309)
- Add Step 3.7 Flash to StepFun model catalogs [#88082](https://github.com/openclaw/openclaw/pull/88082)
- Reuse prepared plugin metadata in static model catalogs [#117288](https://github.com/openclaw/openclaw/pull/117288)
- Show model tables without waiting on promotions [#117322](https://github.com/openclaw/openclaw/pull/117322)
- Avoid full Ollama plugin loading during model listing [#117465](https://github.com/openclaw/openclaw/pull/117465)
- perf(models): reuse projected list rows [#128248](https://github.com/openclaw/openclaw/pull/128248)

**Bug fixes**

- Refresh xAI models, reasoning, and server-tool defaults [#103260](https://github.com/openclaw/openclaw/pull/103260)
- Align OpenAI model availability with its effective route [#104685](https://github.com/openclaw/openclaw/pull/104685)
- Harden OpenAI Codex discovery, opt-out, and quota recovery [#108683](https://github.com/openclaw/openclaw/pull/108683)
- Refresh bundled provider catalogs and remove retired models [#109410](https://github.com/openclaw/openclaw/pull/109410)
- Separate model aliases from override allowlists [#110888](https://github.com/openclaw/openclaw/pull/110888)
- Apply current request shaping to future Claude generations [#114205](https://github.com/openclaw/openclaw/pull/114205)
- Unify dynamic model catalog selection [#114284](https://github.com/openclaw/openclaw/pull/114284)
- Preserve selected fallback providers across alias resolution [#114360](https://github.com/openclaw/openclaw/pull/114360)
- Keep model lists consistent across CLI and Gateway [#114393](https://github.com/openclaw/openclaw/pull/114393)
- Keep agent model catalogs and switching reliable [#114760](https://github.com/openclaw/openclaw/pull/114760)
- Improve gateway-node and local-model reliability [#115185](https://github.com/openclaw/openclaw/pull/115185)
- Prevent multi-agent gateway startup stalls [#116261](https://github.com/openclaw/openclaw/pull/116261)
- Stop cloud fallback after stale Gateway lifecycle aborts [#117168](https://github.com/openclaw/openclaw/pull/117168)
- Keep large-roster chat startup off model catalog discovery [#119742](https://github.com/openclaw/openclaw/pull/119742)
- Fall back when a model returns no usable answer [#120148](https://github.com/openclaw/openclaw/pull/120148)
- Keep new-chat inference available across routes [#120712](https://github.com/openclaw/openclaw/pull/120712)
- Unify agent failover error classification [#121341](https://github.com/openclaw/openclaw/pull/121341)
- Keep model catalog discovery from stalling the Gateway [#122350](https://github.com/openclaw/openclaw/pull/122350)
- Keep session model selection separate from response aliases and fallbacks [#122910](https://github.com/openclaw/openclaw/pull/122910)
- Restore model lists when chat still works [#123208](https://github.com/openclaw/openclaw/pull/123208)
- Keep Codex-routed turns working with request overrides [#123258](https://github.com/openclaw/openclaw/pull/123258)
- Prevent multi-agent Gateway startup CPU spikes [#124334](https://github.com/openclaw/openclaw/pull/124334)
- Let direct inference commands select an agent [#125143](https://github.com/openclaw/openclaw/pull/125143)
- Honor per-agent model metadata everywhere [#126194](https://github.com/openclaw/openclaw/pull/126194)
- fix(opencode): discover Zen and Go models on demand [#129831](https://github.com/openclaw/openclaw/pull/129831)
- Keep collected follow-ups on their model routes [1647027](https://github.com/openclaw/openclaw/commit/1647027)
- Keep model fallbacks working after cleanup takeovers [#100118](https://github.com/openclaw/openclaw/pull/100118)
- Add Claude Fable 5 to the Claude CLI model catalog [#101453](https://github.com/openclaw/openclaw/pull/101453)
- Expose normal model fallback transitions in diagnostics [#102051](https://github.com/openclaw/openclaw/pull/102051)
- Apply hot-reloaded agent models without restarting the gateway [#102305](https://github.com/openclaw/openclaw/pull/102305)
- Match Azure deployment map IDs across casing differences [#103005](https://github.com/openclaw/openclaw/pull/103005)
- Keep replace-mode model listings limited to configured providers [#103103](https://github.com/openclaw/openclaw/pull/103103)
- Restore current OpenCode Zen models in offline discovery [#103197](https://github.com/openclaw/openclaw/pull/103197)
- Support managed ClawRouter gateway configuration [#103299](https://github.com/openclaw/openclaw/pull/103299)
- Remove deprecated OpenCode Go MiMo aliases [#103329](https://github.com/openclaw/openclaw/pull/103329)
- Preserve Grok behavior through the x-ai alias [#103340](https://github.com/openclaw/openclaw/pull/103340)
- Allow the Codex runtime with `codex/*` models [#103775](https://github.com/openclaw/openclaw/pull/103775)
- Surface utility-model narration failures in logs and model status [#104770](https://github.com/openclaw/openclaw/pull/104770)
- Bound Amazon Bedrock model discovery requests [#104841](https://github.com/openclaw/openclaw/pull/104841)
- Explain account-restricted model failures correctly [#104878](https://github.com/openclaw/openclaw/pull/104878)
- Keep locked sessions on their stored model route [#105335](https://github.com/openclaw/openclaw/pull/105335)
- Keep native thinking and fast controls on Codex routes [#107588](https://github.com/openclaw/openclaw/pull/107588)
- Preserve newer model and auth choices during fallback recovery [#108137](https://github.com/openclaw/openclaw/pull/108137)
- Bound Amazon Bedrock control-plane requests [#108756](https://github.com/openclaw/openclaw/pull/108756)
- Bound stalled Z.AI endpoint probe responses [#109026](https://github.com/openclaw/openclaw/pull/109026)
- Release Hugging Face connections after failed model discovery [#109464](https://github.com/openclaw/openclaw/pull/109464)
- Preserve pinned models during temporary catalog failures [#110364](https://github.com/openclaw/openclaw/pull/110364)
- Add OpenCode Zen GPT-5.6 model discovery [#110405](https://github.com/openclaw/openclaw/pull/110405)
- Report unavailable Codex runtimes in model status [#110447](https://github.com/openclaw/openclaw/pull/110447)
- Recover network error codes for model failover [#110485](https://github.com/openclaw/openclaw/pull/110485)
- Report accurate OpenRouter limits in model scans [#110855](https://github.com/openclaw/openclaw/pull/110855)
- Discover Vercel AI Gateway models through proxies [#111209](https://github.com/openclaw/openclaw/pull/111209)
- Hide image-output models from the Kilocode chat catalog [#111239](https://github.com/openclaw/openclaw/pull/111239)
- Discover Chutes models through eligible HTTP proxies [#111266](https://github.com/openclaw/openclaw/pull/111266)
- Reuse model discovery across configless embedded runs [#111423](https://github.com/openclaw/openclaw/pull/111423)
- Reject unknown text models before saving config [#111571](https://github.com/openclaw/openclaw/pull/111571)
- Give cold model-runtime builds a longer startup budget [#111983](https://github.com/openclaw/openclaw/pull/111983)
- Keep model catalogs coherent during config reloads [#112331](https://github.com/openclaw/openclaw/pull/112331)
- Honor explicit subagent model requests [#112393](https://github.com/openclaw/openclaw/pull/112393)
- Detect Claude CLI routes pinned to older models [#113424](https://github.com/openclaw/openclaw/pull/113424)
- Hide live-discovered Claude models until request contracts support them [#113757](https://github.com/openclaw/openclaw/pull/113757)
- Fix Anthropic live discovery for Claude subscription users [#113906](https://github.com/openclaw/openclaw/pull/113906)
- Keep concurrent model status JSON clean [#113953](https://github.com/openclaw/openclaw/pull/113953)
- Reduce reply startup delay with configured model policies [#114117](https://github.com/openclaw/openclaw/pull/114117)
- fix(agents): retry live model switches outside fallback chain [#114214](https://github.com/openclaw/openclaw/pull/114214)
- Show refreshed OpenAI models in provider-filtered lists [#114265](https://github.com/openclaw/openclaw/pull/114265)
- Fall back on raw provider request errors [#114457](https://github.com/openclaw/openclaw/pull/114457)
- Stabilize model metadata and config recovery under load [#114679](https://github.com/openclaw/openclaw/pull/114679)
- Repair malformed generated model catalogs before startup [#114697](https://github.com/openclaw/openclaw/pull/114697)
- Recognize local model endpoints and cap fallback output [#114710](https://github.com/openclaw/openclaw/pull/114710)
- Keep Infer provider inspection and selection working [#115054](https://github.com/openclaw/openclaw/pull/115054)
- Stabilize infer model selection, provider status, and shared-state access [#115170](https://github.com/openclaw/openclaw/pull/115170)
- Show correct plugin-catalog metadata in configured model lists [#115190](https://github.com/openclaw/openclaw/pull/115190)
- Canonicalize model references at their input owners [#115965](https://github.com/openclaw/openclaw/pull/115965)
- Prevent large model configurations from delaying Gateway startup [#116553](https://github.com/openclaw/openclaw/pull/116553)
- Show local provider identity after model setup [#116655](https://github.com/openclaw/openclaw/pull/116655)
- Keep healthy fallback models available after a missing-model error [#116768](https://github.com/openclaw/openclaw/pull/116768)
- Restore runtime-discovered models in browse views [#116857](https://github.com/openclaw/openclaw/pull/116857)
- Reuse plugin metadata when building large model catalogs [#117131](https://github.com/openclaw/openclaw/pull/117131)
- Keep alternate runtimes available after Codex preflight failures [#117256](https://github.com/openclaw/openclaw/pull/117256)
- Use configured fallbacks after replay-safe silent failures [#117356](https://github.com/openclaw/openclaw/pull/117356)
- fix(tui): honor restrictive agent model policies [#117422](https://github.com/openclaw/openclaw/pull/117422)
- Restore Cerebras's documented static model catalog [#117584](https://github.com/openclaw/openclaw/pull/117584)
- Hide retired NVIDIA models while preserving live discovery [#117620](https://github.com/openclaw/openclaw/pull/117620)
- Prevent model discovery from hanging past its timeout [#117825](https://github.com/openclaw/openclaw/pull/117825)
- Preserve model selection while the gateway is draining [#118101](https://github.com/openclaw/openclaw/pull/118101)
- Preserve newer plugin metadata during models status [#119183](https://github.com/openclaw/openclaw/pull/119183)
- Honor configured models for ACP agents [#120046](https://github.com/openclaw/openclaw/pull/120046)
- Refresh OpenCode Zen and Go model catalogs [#121030](https://github.com/openclaw/openclaw/pull/121030)
- Make exact dated model pins executable after Gateway startup [#121119](https://github.com/openclaw/openclaw/pull/121119)
- Migrate retired OpenCode free-model references [#121125](https://github.com/openclaw/openclaw/pull/121125)
- Show accurate defaults while a new session loads [#121133](https://github.com/openclaw/openclaw/pull/121133)
- Deliver replies after CLI-to-embedded model fallback [#121897](https://github.com/openclaw/openclaw/pull/121897)
- Show the resolved default model and its thinking levels [#122907](https://github.com/openclaw/openclaw/pull/122907)
- Show resolved model identities in agents_list [#123044](https://github.com/openclaw/openclaw/pull/123044)
- Keep scoped model checks from building the full catalog [#123473](https://github.com/openclaw/openclaw/pull/123473)
- Stop Models page agent-roster retry storms [#123483](https://github.com/openclaw/openclaw/pull/123483)
- Prevent truncated verified llama.cpp downloads [#123738](https://github.com/openclaw/openclaw/pull/123738)
- Scope inference provider lists to a selected agent [#123884](https://github.com/openclaw/openclaw/pull/123884)
- Let older llama.cpp providers load for upgrade repair [#124041](https://github.com/openclaw/openclaw/pull/124041)
- Keep session status accurate through model fallback [#124436](https://github.com/openclaw/openclaw/pull/124436)
- Preserve plugin completion agent selection on multi-agent installs [#124954](https://github.com/openclaw/openclaw/pull/124954)
- Reject unknown providers when selecting default models [#125558](https://github.com/openclaw/openclaw/pull/125558)
- Keep in-flight model requests on one plugin generation [#125569](https://github.com/openclaw/openclaw/pull/125569)
- Keep inherited parent model pins ahead of channel defaults [#125880](https://github.com/openclaw/openclaw/pull/125880)
- Reject unusable explicit subagent model requests [#125931](https://github.com/openclaw/openclaw/pull/125931)
- Preserve catalog capabilities for partial provider model configuration [#126068](https://github.com/openclaw/openclaw/pull/126068)
- Scope local inference preparation to the selected model [#126196](https://github.com/openclaw/openclaw/pull/126196)
- Let multi-agent infer commands select their owning agent [#126234](https://github.com/openclaw/openclaw/pull/126234)
- Preserve explicit Codex runtime policy for embedded attempts [#126259](https://github.com/openclaw/openclaw/pull/126259)
- fix(llm-task): trust explicit provider for slash-containing model ids [#126518](https://github.com/openclaw/openclaw/pull/126518)
- Preserve Codex selection when model metadata comes from the catalog [#126531](https://github.com/openclaw/openclaw/pull/126531)
- refactor(providers): return prepared dynamic models directly [#126574](https://github.com/openclaw/openclaw/pull/126574)
- fix(codex): run newly available models through the existing Codex account [#127322](https://github.com/openclaw/openclaw/pull/127322)
- Let Codex use newly available account models before catalog refresh [#127394](https://github.com/openclaw/openclaw/pull/127394)
- fix(models): scope status alias resolution to the selected agent [#127631](https://github.com/openclaw/openclaw/pull/127631)
- fix(models): stop /models from freezing the gateway while it rescans plugins [#127847](https://github.com/openclaw/openclaw/pull/127847)
- Skip inherited automatic fallback overrides in child sessions [#128521](https://github.com/openclaw/openclaw/pull/128521)
- perf(gateway): stop first models.authStatus call from reloading all plugins from source [#128551](https://github.com/openclaw/openclaw/pull/128551)
- fix(workers): resolve catalog models on dispatched turns [#128553](https://github.com/openclaw/openclaw/pull/128553)
- fix: /models stops working after an unrelated config edit and never recovers [#128608](https://github.com/openclaw/openclaw/pull/128608)
- fix(tui): restore session setting reset directives [#128731](https://github.com/openclaw/openclaw/pull/128731)
- fix(codex): keep /codex model scoped to the native binding [#128751](https://github.com/openclaw/openclaw/pull/128751)
- fix(vercel): exclude non-language gateway models from chat catalog [#129406](https://github.com/openclaw/openclaw/pull/129406)
- fix: agent-specific model selection repeatedly rescans every plugin [#129510](https://github.com/openclaw/openclaw/pull/129510)
- fix(huggingface): honor available provider capabilities [#129797](https://github.com/openclaw/openclaw/pull/129797)
- fix(cli): preserve human output for flag-like model option values [#129911](https://github.com/openclaw/openclaw/pull/129911)
- fix(models): model browsing fails after automatic plugin activation [#130481](https://github.com/openclaw/openclaw/pull/130481)
- fix(agents): preserve Codex for reasoning capability metadata [#130752](https://github.com/openclaw/openclaw/pull/130752)
- fix(models): keep OpenCode fallback aligned with catalog lifecycle [#130785](https://github.com/openclaw/openclaw/pull/130785)
- Recognize code-only provider errors for model failover [#95729](https://github.com/openclaw/openclaw/pull/95729)
- Fix Codex ACP spawns with non-OpenAI fleet defaults [#95852](https://github.com/openclaw/openclaw/pull/95852)
- Keep generated multimodal models in the registry [#97858](https://github.com/openclaw/openclaw/pull/97858)
- Refresh NVIDIA featured models without breaking older configs [#99242](https://github.com/openclaw/openclaw/pull/99242)
- Align Codex model discovery with client version 0.144.5 [cfaa30a](https://github.com/openclaw/openclaw/commit/cfaa30a)
- Keep truncated fallback reasons valid Unicode [#102631](https://github.com/openclaw/openclaw/pull/102631)
- Keep model tables aligned with wide Unicode names [#102819](https://github.com/openclaw/openclaw/pull/102819)
- Align Meta validation and guidance with Muse Spark 1.1 [#103163](https://github.com/openclaw/openclaw/pull/103163)
- Preserve Unicode in bounded OpenRouter Fusion model IDs [#104433](https://github.com/openclaw/openclaw/pull/104433)
- Preserve Codex mock routing with model-specific image endpoints [#105444](https://github.com/openclaw/openclaw/pull/105444)
- Repair legacy Codex model references in per-agent model maps [#108369](https://github.com/openclaw/openclaw/pull/108369)
- Allow clearing agent model overrides [#108734](https://github.com/openclaw/openclaw/pull/108734)
- Honor OpenRouter scan timeout while reading the catalog [#108972](https://github.com/openclaw/openclaw/pull/108972)
- Release stalled GitHub Copilot catalog error streams [#109071](https://github.com/openclaw/openclaw/pull/109071)
- Handle malformed provider catalog pagination URLs safely [#109986](https://github.com/openclaw/openclaw/pull/109986)
- Make status reflect pending and completed live model switches [#110474](https://github.com/openclaw/openclaw/pull/110474)
- Discover Hugging Face models through required HTTP proxies [#110924](https://github.com/openclaw/openclaw/pull/110924)
- Sync OpenAI Codex OAuth catalog client version [#110936](https://github.com/openclaw/openclaw/pull/110936)
- Reject malformed UTF-8 during self-hosted model discovery [#111113](https://github.com/openclaw/openclaw/pull/111113)
- Nested model-policy wildcards respect namespace boundaries [#111350](https://github.com/openclaw/openclaw/pull/111350)
- Let DeepInfra model discovery use trusted HTTP proxies [#111428](https://github.com/openclaw/openclaw/pull/111428)
- Reject corrupted UTF-8 in live provider catalogs [#111766](https://github.com/openclaw/openclaw/pull/111766)
- Keep new chats working through concurrent config reloads [#112026](https://github.com/openclaw/openclaw/pull/112026)
- Report model switches before automatic thinking remaps [#112352](https://github.com/openclaw/openclaw/pull/112352)
- Preserve local-provider errors during cron preflight [#113409](https://github.com/openclaw/openclaw/pull/113409)
- Align Codex OAuth model discovery with the managed client version [#113615](https://github.com/openclaw/openclaw/pull/113615)
- Prevent Meta catalog loading from rejecting unsupported inputs [#113758](https://github.com/openclaw/openclaw/pull/113758)
- Keep empty model lists machine-readable [#113897](https://github.com/openclaw/openclaw/pull/113897)
- Accept harmless separator padding in model policy references [#114116](https://github.com/openclaw/openclaw/pull/114116)
- Make refreshed model catalogs usable from the CLI [#114244](https://github.com/openclaw/openclaw/pull/114244)
- Recognize all IPv4 loopback model endpoints [#114766](https://github.com/openclaw/openclaw/pull/114766)
- Reject incomplete model overrides in infer commands [#115225](https://github.com/openclaw/openclaw/pull/115225)
- Align configured model rows with catalog availability [#115239](https://github.com/openclaw/openclaw/pull/115239)
- Preserve valid LM Studio models in mixed catalogs [#115336](https://github.com/openclaw/openclaw/pull/115336)
- fix(status): recent session listing resolves the wrong agent's model [#115984](https://github.com/openclaw/openclaw/pull/115984)
- Reject malformed hosted model catalogs before saving [#117744](https://github.com/openclaw/openclaw/pull/117744)
- Preserve explicit provider and model references in alias guidance [#117869](https://github.com/openclaw/openclaw/pull/117869)
- Report accurate embedded-agent startup timing stages [#117879](https://github.com/openclaw/openclaw/pull/117879)
- Apply the global fast-mode default to the implicit agent [#120697](https://github.com/openclaw/openclaw/pull/120697)
- Preserve concrete provider failure reasons through failover [#121657](https://github.com/openclaw/openclaw/pull/121657)
- Propagate provider catalog failures instead of mistaking them for timeouts [#124288](https://github.com/openclaw/openclaw/pull/124288)
- Preserve complete model fallback traces [#126048](https://github.com/openclaw/openclaw/pull/126048)
- Stop stale provider tests after switching agents [#126750](https://github.com/openclaw/openclaw/pull/126750)
- fix(models): --agent is silently ignored by models aliases and models scan [#126864](https://github.com/openclaw/openclaw/pull/126864)
- fix(cli): return JSON for model list failures [#127726](https://github.com/openclaw/openclaw/pull/127726)
- fix(agents): resolve pdf tool models through the canonical resolver [#127952](https://github.com/openclaw/openclaw/pull/127952)
- fix(agents): warn when configured image model entries fail to resolve [#127971](https://github.com/openclaw/openclaw/pull/127971)
- fix(cli): resolve alias targets from the write snapshot [#128223](https://github.com/openclaw/openclaw/pull/128223)
- fix(cli): render models refresh JSON failures [#128981](https://github.com/openclaw/openclaw/pull/128981)
- fix(cli): keep models --plain stdout clean of startup diagnostics [#129037](https://github.com/openclaw/openclaw/pull/129037)
- fix(models): normalize mixed aliases consistently [#129678](https://github.com/openclaw/openclaw/pull/129678)
- fix(agents): prevent selected-agent alias stalls [#129700](https://github.com/openclaw/openclaw/pull/129700)
- fix(reply): keep fast abort off provider runtime [#129704](https://github.com/openclaw/openclaw/pull/129704)
- fix(tui): dismiss 'loading models...' notice once the model picker opens [#129770](https://github.com/openclaw/openclaw/pull/129770)
- fix(models): avoid retired automatic auth-probe models [#129798](https://github.com/openclaw/openclaw/pull/129798)
- fix(cli): preserve populated model output on stdout in plain mode [#129871](https://github.com/openclaw/openclaw/pull/129871)
- fix(ui): reset /model default through server directive [#129895](https://github.com/openclaw/openclaw/pull/129895)
- refactor(agents): resolve runtime models through prepared owner [#130007](https://github.com/openclaw/openclaw/pull/130007)
- fix(bedrock): reject invalid UTF-8 model discovery [#130058](https://github.com/openclaw/openclaw/pull/130058)
- fix(agents): read the published model catalog owner from session_status [#130277](https://github.com/openclaw/openclaw/pull/130277)
- refactor(models): preserve catalog metadata through one normalization path [#130381](https://github.com/openclaw/openclaw/pull/130381)
- fix(cli): reject --agent for global model refresh [#130448](https://github.com/openclaw/openclaw/pull/130448)
- fix(cli): reject empty agent scopes for global model commands [#130739](https://github.com/openclaw/openclaw/pull/130739)

**Documentation**

- Clarify OpenAI and Codex Fast mode precedence [#120682](https://github.com/openclaw/openclaw/pull/120682)
- Document rolling Anthropic Opus aliases [#113413](https://github.com/openclaw/openclaw/pull/113413)
- Repair OpenRouter copy-paste configuration examples [#118747](https://github.com/openclaw/openclaw/pull/118747)
- Clarify model switching and cache trade-offs [#124889](https://github.com/openclaw/openclaw/pull/124889)

</details>

</Accordion>

<Accordion title="Provider accounts and sign-in">

OpenClaw now keeps model requests inside the provider accounts and credential order you configured. If one account hits an authentication or quota cooldown, the next authorized account for that provider can take over without changing the selected provider or model, and the saved preference resumes when it recovers. Environment keys remain available when no explicit account list is configured.

OAuth registration stays with the setup conversation where it began, failed credential writes surface as failures, and a successful login applies only to the model route that authenticated. Tenant and custom-endpoint credentials stay on the account and origin they were configured for.

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

**Improvements**

- Support loopback Codex proxies in the OpenAI provider [#114555](https://github.com/openclaw/openclaw/pull/114555)
- Add GitHub Enterprise data-residency Copilot support [#99221](https://github.com/openclaw/openclaw/pull/99221)
- Remove individual model auth profiles from the CLI [#114407](https://github.com/openclaw/openclaw/pull/114407)
- Reuse SQLite readers for faster auth-profile loading [#121358](https://github.com/openclaw/openclaw/pull/121358)
- Clarify auth profile order output [#112203](https://github.com/openclaw/openclaw/pull/112203)
- Refresh macOS local-model and provider sign-in translations [#113493](https://github.com/openclaw/openclaw/pull/113493)
- Retire legacy provider IDs and secret markers at runtime [#115655](https://github.com/openclaw/openclaw/pull/115655)

**Bug fixes**

- Avoid false 12-hour OpenAI cooldowns after token expiry [#102479](https://github.com/openclaw/openclaw/pull/102479)
- Restore native xAI routing for the x-ai provider alias [#103488](https://github.com/openclaw/openclaw/pull/103488)
- Remove raw synthetic credentials from model status JSON [#104734](https://github.com/openclaw/openclaw/pull/104734)
- Block unsupported GitHub Copilot OAuth domains [#105584](https://github.com/openclaw/openclaw/pull/105584)
- Restore GitHub Copilot turns and account-scoped context limits [#106198](https://github.com/openclaw/openclaw/pull/106198)
- Restore service-account authentication for Anthropic Vertex [#108350](https://github.com/openclaw/openclaw/pull/108350)
- Keep OAuth providers isolated to their owning session [#108680](https://github.com/openclaw/openclaw/pull/108680)
- Surface credential saves and harden agent sessions and tools [#109622](https://github.com/openclaw/openclaw/pull/109622)
- Accept fine-grained GitHub tokens for Copilot [#114282](https://github.com/openclaw/openclaw/pull/114282)
- Honor provider auth pins for ambient credentials [#114944](https://github.com/openclaw/openclaw/pull/114944)
- Skip provider-auth scans on unrelated reloads [#117449](https://github.com/openclaw/openclaw/pull/117449)
- Preserve compatible auth profiles when switching models [#117550](https://github.com/openclaw/openclaw/pull/117550)
- Prevent undeclared environment credentials from taking over failover [#118458](https://github.com/openclaw/openclaw/pull/118458)
- Keep OpenRouter custom-proxy credentials on the configured origin [#118773](https://github.com/openclaw/openclaw/pull/118773)
- Stop retrying expired CLI auth profiles after fallback [#119843](https://github.com/openclaw/openclaw/pull/119843)
- Refresh chat model availability after runtime auth succeeds [#121193](https://github.com/openclaw/openclaw/pull/121193)
- Scope quota failures to individual auth profiles [#121278](https://github.com/openclaw/openclaw/pull/121278)
- Make Doctor converge on missing OAuth sidecars [#123093](https://github.com/openclaw/openclaw/pull/123093)
- Honor configured GitHub Copilot identity across model requests [#127965](https://github.com/openclaw/openclaw/pull/127965)
- Refresh model availability after OAuth renewal [#102289](https://github.com/openclaw/openclaw/pull/102289)
- Redact GitHub Copilot OAuth failure details [#102953](https://github.com/openclaw/openclaw/pull/102953)
- Preserve OAuth diagnostics when provider messages contain braces [#103106](https://github.com/openclaw/openclaw/pull/103106)
- Show actionable re-auth guidance for logged-out Claude CLI [#103829](https://github.com/openclaw/openclaw/pull/103829)
- Keep Codex account identity when channel login switches profiles [#104706](https://github.com/openclaw/openclaw/pull/104706)
- Keep unresolved API-key providers visible [#106754](https://github.com/openclaw/openclaw/pull/106754)
- Stop false Claude CLI expiry warnings [#108205](https://github.com/openclaw/openclaw/pull/108205)
- Redact credentials from GitHub Copilot embedding errors [#109177](https://github.com/openclaw/openclaw/pull/109177)
- Ignore blank Google Vertex project and location values [#109515](https://github.com/openclaw/openclaw/pull/109515)
- Improve provider login, Bedrock errors, and TUI rendering [#109740](https://github.com/openclaw/openclaw/pull/109740)
- Keep Telegram responsive during Codex device login [#110580](https://github.com/openclaw/openclaw/pull/110580)
- Ignore blank AWS region overrides for Bedrock [#110676](https://github.com/openclaw/openclaw/pull/110676)
- Use canonical auth-profile ordering for background credential discovery [#110678](https://github.com/openclaw/openclaw/pull/110678)
- Release stalled GitHub Copilot OAuth error responses promptly [#112268](https://github.com/openclaw/openclaw/pull/112268)
- Use selected Claude profiles for CLI-backed agent turns [#112458](https://github.com/openclaw/openclaw/pull/112458)
- Prevent Gateway crashes after Claude CLI auth-profile turns [#112550](https://github.com/openclaw/openclaw/pull/112550)
- Retry transient OpenAI device-code polling failures [#114094](https://github.com/openclaw/openclaw/pull/114094)
- Refuse mismatched Codex native-home billing routes [#114719](https://github.com/openclaw/openclaw/pull/114719)
- Continue model fallback after Google invalid-key errors [#114887](https://github.com/openclaw/openclaw/pull/114887)
- Keep Claude CLI logins refreshable instead of forwarding stale tokens [#115134](https://github.com/openclaw/openclaw/pull/115134)
- Stop model fallback on rejected SSH sandbox secrets [#115198](https://github.com/openclaw/openclaw/pull/115198)
- Isolate coding-agent Codex authentication [#115611](https://github.com/openclaw/openclaw/pull/115611)
- Restore Copilot stored-profile authentication in external harnesses [#116555](https://github.com/openclaw/openclaw/pull/116555)
- Guide recovery when agent-scoped Codex credentials were not imported [#116807](https://github.com/openclaw/openclaw/pull/116807)
- Keep model-provider changes scoped and visible [#116829](https://github.com/openclaw/openclaw/pull/116829)
- Recover from unavailable automatic auth-profile overrides [#117846](https://github.com/openclaw/openclaw/pull/117846)
- Honor Google Cloud SDK credentials and Vertex billing projects [#118745](https://github.com/openclaw/openclaw/pull/118745)
- Recognize configured credentials for media providers [#118761](https://github.com/openclaw/openclaw/pull/118761)
- Keep transient timeouts from disabling inline API keys [#119147](https://github.com/openclaw/openclaw/pull/119147)
- Preserve inherited auth profile order for secondary agents [#119505](https://github.com/openclaw/openclaw/pull/119505)
- fix(ollama): redact reflected credentials from transport errors [#119537](https://github.com/openclaw/openclaw/pull/119537)
- Apply auth-order changes without restarting Gateway [#119946](https://github.com/openclaw/openclaw/pull/119946)
- Keep models available after Gateway restart [#120977](https://github.com/openclaw/openclaw/pull/120977)
- Preserve rate-limit retries when no fallback model is configured [#121294](https://github.com/openclaw/openclaw/pull/121294)
- Count only successful rate-limit profile rotations [#121325](https://github.com/openclaw/openclaw/pull/121325)
- Recover OpenAI sessions with a backup auth profile [#123791](https://github.com/openclaw/openclaw/pull/123791)
- Keep auth-profile rotation on the current provider route [#123894](https://github.com/openclaw/openclaw/pull/123894)
- fix(auth): reset only the profile replaced by a successful login [#124014](https://github.com/openclaw/openclaw/pull/124014)
- Deprioritize OAuth profiles after refresh failures [#125507](https://github.com/openclaw/openclaw/pull/125507)
- Restore explicit Bash environment imports without changing exec PATH probes [#125624](https://github.com/openclaw/openclaw/pull/125624)
- Report the auth database that actually holds an agent's profiles [#126918](https://github.com/openclaw/openclaw/pull/126918)
- Show the persisted auth database path [#126955](https://github.com/openclaw/openclaw/pull/126955)
- fix(agents): surface provider auth guidance for terminal failures [#128375](https://github.com/openclaw/openclaw/pull/128375)
- fix(auth): recover runtime profiles after publication failure [#129234](https://github.com/openclaw/openclaw/pull/129234)
- fix(auth): inherit the shared auth store once it owns credentials [#130264](https://github.com/openclaw/openclaw/pull/130264)
- fix(agents): publish SecretRef Codex API-key route success [#130359](https://github.com/openclaw/openclaw/pull/130359)
- fix(github-copilot): restore usage for domain-aware OAuth profiles [#131137](https://github.com/openclaw/openclaw/pull/131137)
- Cool down inline provider API keys after billing failures [#88709](https://github.com/openclaw/openclaw/pull/88709)
- Keep Azure Responses models on Azure credentials [#93833](https://github.com/openclaw/openclaw/pull/93833)
- Repair auth status and stale credential orders [#98105](https://github.com/openclaw/openclaw/pull/98105)
- Materialize auth-profile secret refs for standalone local agents [d4ae2bb](https://github.com/openclaw/openclaw/commit/d4ae2bb)
- Bound Chutes OAuth requests with a 30-second deadline [#102026](https://github.com/openclaw/openclaw/pull/102026)
- Bound Google Vertex credential refreshes to 30 seconds [#102050](https://github.com/openclaw/openclaw/pull/102050)
- Keep Microsoft Foundry Azure CLI errors readable [#102604](https://github.com/openclaw/openclaw/pull/102604)
- Keep Microsoft Foundry connection errors Unicode-safe [#102605](https://github.com/openclaw/openclaw/pull/102605)
- Ignore malformed Microsoft Foundry endpoints [#104796](https://github.com/openclaw/openclaw/pull/104796)
- Show re-auth hints for inline OAuth errors [#105085](https://github.com/openclaw/openclaw/pull/105085)
- Reject malformed fallback-skip TTL values [#107234](https://github.com/openclaw/openclaw/pull/107234)
- Bound stalled OpenAI device-code login requests [#109494](https://github.com/openclaw/openclaw/pull/109494)
- Preserve Unicode in Microsoft Foundry Azure CLI login output [#109499](https://github.com/openclaw/openclaw/pull/109499)
- fix(microsoft-foundry): bound az subprocess lifetime on exec timeout [#110434](https://github.com/openclaw/openclaw/pull/110434)
- Keep OAuth refresh failures from using substitute credentials [#112957](https://github.com/openclaw/openclaw/pull/112957)
- Continue model fallback after Google invalid-key errors [#114825](https://github.com/openclaw/openclaw/pull/114825)
- Make Telegram Codex login codes tap-to-copy [#116608](https://github.com/openclaw/openclaw/pull/116608)
- Use official Anthropic Vertex multi-region endpoints [#116757](https://github.com/openclaw/openclaw/pull/116757)
- Stop no-op OAuth migration prompts and show failure causes [#123164](https://github.com/openclaw/openclaw/pull/123164)
- Preserve Codex QA login identity across restarts [#126777](https://github.com/openclaw/openclaw/pull/126777)
- Point missing API-key errors to the auth command [#127011](https://github.com/openclaw/openclaw/pull/127011)
- fix(agents): stored auth profile order is ignored when resolving CLI runtime aliases [#129165](https://github.com/openclaw/openclaw/pull/129165)
- fix(ollama): protect local credentials on all loopback addresses [#129168](https://github.com/openclaw/openclaw/pull/129168)
- fix(auth): reject retired profiles from cold external providers [#129580](https://github.com/openclaw/openclaw/pull/129580)
- fix(ui): clear stale provider API-key drafts when switching agents [#129676](https://github.com/openclaw/openclaw/pull/129676)
- fix(github-copilot): configured account order is ignored [#129978](https://github.com/openclaw/openclaw/pull/129978)
- fix(ai): require explicit endpoints for compatible providers [#130453](https://github.com/openclaw/openclaw/pull/130453)
- Deduplicate Bedrock Mantle IAM failure diagnostics per region [#81208](https://github.com/openclaw/openclaw/pull/81208)

**Documentation**

- docs(start): correct headless credential handoff to the SQLite auth store [#131024](https://github.com/openclaw/openclaw/pull/131024)
- Add PowerShell commands to the minimal AI chat example [#108567](https://github.com/openclaw/openclaw/pull/108567)
- Fix the Chutes API-key setup link [#113545](https://github.com/openclaw/openclaw/pull/113545)

</details>

</Accordion>

<Accordion title="Streaming Replies and Tool Calls">

OpenClaw now distinguishes a complete streamed reply from one that stopped partway through. On supported Responses paths, reasoning, text, tool output, and available usage remain in order; if a stream fails, valid work that already arrived is preserved, and OpenClaw retries or moves to an authorized fallback only when replay is safe. With no safe recovery path, the partial reply remains attached to the error.

Tool calls wait for a complete name and arguments before they can run, including large streamed arguments and calls whose provider item IDs change along the way. Unmanaged native OpenAI Responses conversations on the official endpoint with storage enabled can continue by sending only new input after the first turn, then recover with full history if that upstream continuation state expires.

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

**Improvements**

- Add structured Codex questions and native goal controls [#109724](https://github.com/openclaw/openclaw/pull/109724)
- Relay Claude CLI native tool requests through Gateway approvals [#112918](https://github.com/openclaw/openclaw/pull/112918)
- Faster OpenAI agent turns through reusable WebSockets [#121687](https://github.com/openclaw/openclaw/pull/121687)
- Continue stateful native OpenAI SSE turns [#122194](https://github.com/openclaw/openclaw/pull/122194)
- feat(codex): upgrade main to app-server 0.149.1 [#128370](https://github.com/openclaw/openclaw/pull/128370)
- Enable capability-gated tools on CLI-backed models [#102835](https://github.com/openclaw/openclaw/pull/102835)
- Prewarm Codex app server during turn setup [#114551](https://github.com/openclaw/openclaw/pull/114551)
- Reduce Codex coding-runtime and parity overhead [#114574](https://github.com/openclaw/openclaw/pull/114574)
- Stream native Ollama tool-call lifecycle events [#116809](https://github.com/openclaw/openclaw/pull/116809)
- perf(copilot): avoid duplicating BYOK request bodies [#131145](https://github.com/openclaw/openclaw/pull/131145)
- Update the managed Codex app-server to 0.146.1 [b269e65](https://github.com/openclaw/openclaw/commit/b269e65)
- Update the bundled Codex CLI to 0.144.4 [#107208](https://github.com/openclaw/openclaw/pull/107208)

**Bug fixes**

- Accept numeric and boolean enums in Gemini tool schemas [#104567](https://github.com/openclaw/openclaw/pull/104567)
- Harden Codex aborts, dynamic-tool schemas, and result middleware [#108105](https://github.com/openclaw/openclaw/pull/108105)
- Improve Codex full-auto execution, failure handling, and quota status [#108626](https://github.com/openclaw/openclaw/pull/108626)
- Preserve tool arguments when Responses item IDs rotate [#108630](https://github.com/openclaw/openclaw/pull/108630)
- Preserve tool-result text when media has no inline payload [#108697](https://github.com/openclaw/openclaw/pull/108697)
- Restore ClawRouter Perplexity tools and model refreshes [#108758](https://github.com/openclaw/openclaw/pull/108758)
- Keep tool-call preambles out of Chat Completions replies [#109057](https://github.com/openclaw/openclaw/pull/109057)
- Move ACPX Codex sessions to the maintained adapter [#109075](https://github.com/openclaw/openclaw/pull/109075)
- Harden OpenAI-compatible provider reliability and errors [#109556](https://github.com/openclaw/openclaw/pull/109556)
- Harden Responses streaming across OpenAI, Azure, and ChatGPT [#109615](https://github.com/openclaw/openclaw/pull/109615)
- Prevent repeated tool-call IDs from poisoning sessions [#110518](https://github.com/openclaw/openclaw/pull/110518)
- Enforce bounded CLI input and provider response deadlines [#110627](https://github.com/openclaw/openclaw/pull/110627)
- Unify OpenAI Responses stream processing [#114263](https://github.com/openclaw/openclaw/pull/114263)
- Restore Codex patch execution and fast-mode priority [#114907](https://github.com/openclaw/openclaw/pull/114907)
- Stop paired local inference after caller cancellation [#115624](https://github.com/openclaw/openclaw/pull/115624)
- Preserve complete streamed Chat Completions responses [#115652](https://github.com/openclaw/openclaw/pull/115652)
- Keep stressed Codex turns isolated and visible [#115893](https://github.com/openclaw/openclaw/pull/115893)
- Make Codex and OpenAI turns finish truthfully [#116012](https://github.com/openclaw/openclaw/pull/116012)
- Preserve complete terminal output in Responses streams [#116836](https://github.com/openclaw/openclaw/pull/116836)
- Repair llama.cpp tool, reasoning, and context lifecycles [#116903](https://github.com/openclaw/openclaw/pull/116903)
- Recover authoritative OpenAI Responses output [#116910](https://github.com/openclaw/openclaw/pull/116910)
- Restore reliable Gemini and Vertex streaming and usage accounting [#117042](https://github.com/openclaw/openclaw/pull/117042)
- Preserve fenced tool-call examples in replies [#117089](https://github.com/openclaw/openclaw/pull/117089)
- Preserve structured OpenAI Chat responses [#117136](https://github.com/openclaw/openclaw/pull/117136)
- Preserve Gemini signatures and provider failures [#117193](https://github.com/openclaw/openclaw/pull/117193)
- Restore OAuth-backed tools for CLI agents [#119166](https://github.com/openclaw/openclaw/pull/119166)
- Preserve the final streamed text when a run fails [#119556](https://github.com/openclaw/openclaw/pull/119556)
- Flush trailing chat text after quiet streaming gaps [#119566](https://github.com/openclaw/openclaw/pull/119566)
- Restore Venice Gemini tool-call continuations [#119783](https://github.com/openclaw/openclaw/pull/119783)
- Preserve results from quiet long-running Codex tools [#119835](https://github.com/openclaw/openclaw/pull/119835)
- Surface Claude CLI no-response failures [#121589](https://github.com/openclaw/openclaw/pull/121589)
- Deliver partial replies when models reach their output limit [#123546](https://github.com/openclaw/openclaw/pull/123546)
- Reuse Codex app servers after managed desktop fallback [#124885](https://github.com/openclaw/openclaw/pull/124885)
- Reap Codex app-server descendants during retirement [#126285](https://github.com/openclaw/openclaw/pull/126285)
- Surface Codex input prompts across native and ACP runs [#126387](https://github.com/openclaw/openclaw/pull/126387)
- Reject malformed streamed tool calls [#126391](https://github.com/openclaw/openclaw/pull/126391)
- fix(agents): retry incomplete model streams with partial output [#127338](https://github.com/openclaw/openclaw/pull/127338)
- fix(gateway): fail streaming responses when agent runs fail [#127662](https://github.com/openclaw/openclaw/pull/127662)
- fix(gateway): restore HTTP subagent completion announces [AI-assisted] [#128068](https://github.com/openclaw/openclaw/pull/128068)
- perf(ai): keep streaming responsive while large tool call arguments assemble [#128166](https://github.com/openclaw/openclaw/pull/128166)
- fix(agents): apply tool policy to Anthropic native calls [#128805](https://github.com/openclaw/openclaw/pull/128805)
- fix(agents): quiet model turns are aborted by a false "no response from model" idle timeout (#117884) [0707fcb](https://github.com/openclaw/openclaw/commit/0707fcb)
- fix(openai): reconcile rotated terminal message IDs (#122560) [5acfc2d](https://github.com/openclaw/openclaw/commit/5acfc2d)
- fix(openai-responses): reconcile terminal tool calls (#108461) [8c1a55d](https://github.com/openclaw/openclaw/commit/8c1a55d)
- Retry transient network failures consistently [#101496](https://github.com/openclaw/openclaw/pull/101496)
- Show OpenAI refusal text instead of blank replies [#102344](https://github.com/openclaw/openclaw/pull/102344)
- Restore image tool results for prefixed Gemini 2 models [#102382](https://github.com/openclaw/openclaw/pull/102382)
- Update the Codex harness for app-server 0.143.0 [#102444](https://github.com/openclaw/openclaw/pull/102444)
- Recognize zero-argument XML tool calls [#103220](https://github.com/openclaw/openclaw/pull/103220)
- Preserve streamed answer order after tool-call repair [#103585](https://github.com/openclaw/openclaw/pull/103585)
- Align the Meta provider with the official Model API [#103680](https://github.com/openclaw/openclaw/pull/103680)
- Stop canceled local-provider startups from leaking sidecars [#104070](https://github.com/openclaw/openclaw/pull/104070)
- Bound and unify serialized tool-call repair [#104100](https://github.com/openclaw/openclaw/pull/104100)
- Preserve Unicode across streamed block-chunk boundaries [#104441](https://github.com/openclaw/openclaw/pull/104441)
- Fix GPT-5.6 tool calls and catalog compatibility [#104555](https://github.com/openclaw/openclaw/pull/104555)
- Preserve explicit abort outcomes for Codex turns with unfinished tools [#104955](https://github.com/openclaw/openclaw/pull/104955)
- Clean up abort listeners after ChatGPT retry waits [#105519](https://github.com/openclaw/openclaw/pull/105519)
- Preserve newer ChatGPT Responses WebSocket connections [#105634](https://github.com/openclaw/openclaw/pull/105634)
- Update the managed Codex app-server to 0.144.3 [#106098](https://github.com/openclaw/openclaw/pull/106098)
- Retry transient provider-wrapped 5xx errors [#106850](https://github.com/openclaw/openclaw/pull/106850)
- Report empty proxy responses clearly [#107325](https://github.com/openclaw/openclaw/pull/107325)
- Recover large Codex app-server messages [#107369](https://github.com/openclaw/openclaw/pull/107369)
- Preserve Codex assistant message ordering during image saves [#107680](https://github.com/openclaw/openclaw/pull/107680)
- Terminate Anthropic streams on circular provider errors [#107800](https://github.com/openclaw/openclaw/pull/107800)
- Correct Codex tool-result failure classification [#107807](https://github.com/openclaw/openclaw/pull/107807)
- Split embedded runner orchestration and harden timeout recovery [#107900](https://github.com/openclaw/openclaw/pull/107900)
- Return visible text from constrained Z.AI GLM completions [#108612](https://github.com/openclaw/openclaw/pull/108612)
- Recover Codex tool-terminal turns and align auth routing [#108966](https://github.com/openclaw/openclaw/pull/108966)
- fix(agents): idle-timeout stalled provider response body reads [#109067](https://github.com/openclaw/openclaw/pull/109067)
- Prevent broken Claude CLI output pipes from crashing node hosts [#109794](https://github.com/openclaw/openclaw/pull/109794)
- Stop cancelled replies from retrying after transient provider errors [#109805](https://github.com/openclaw/openclaw/pull/109805)
- Restore local GGUF asset resolution [#110233](https://github.com/openclaw/openclaw/pull/110233)
- Reject invalid HTTP status prefixes in assistant errors [#110554](https://github.com/openclaw/openclaw/pull/110554)
- Keep repeated Responses tool calls distinct [#110956](https://github.com/openclaw/openclaw/pull/110956)
- Release guarded response stream reader locks [#111259](https://github.com/openclaw/openclaw/pull/111259)
- ChatGPT Responses honor the server's retry delay fallback [#111353](https://github.com/openclaw/openclaw/pull/111353)
- Fail fast on invalid provider TLS certificates [#111818](https://github.com/openclaw/openclaw/pull/111818)
- Bound Ollama requests during stalled DNS preflight [#111835](https://github.com/openclaw/openclaw/pull/111835)
- Suppress partial assistant output after agent errors or aborts [#113012](https://github.com/openclaw/openclaw/pull/113012)
- Keep streamed OpenAI-compatible requests running after handler return [#113514](https://github.com/openclaw/openclaw/pull/113514)
- Return 404 for disabled OpenAI-compatible API routes [#113609](https://github.com/openclaw/openclaw/pull/113609)
- Close failed Responses streams without false completion [#113629](https://github.com/openclaw/openclaw/pull/113629)
- Preserve OpenAI Responses cancellations [#113801](https://github.com/openclaw/openclaw/pull/113801)
- Repair provider-polluted tool names safely [#113814](https://github.com/openclaw/openclaw/pull/113814)
- Preserve Qwen Token Plan behavior for direct model references [#113976](https://github.com/openclaw/openclaw/pull/113976)
- Unify OpenAI-compatible request behavior [#114236](https://github.com/openclaw/openclaw/pull/114236)
- Honor per-turn OpenAI timeouts and retry limits [#115017](https://github.com/openclaw/openclaw/pull/115017)
- Enable automatic code mode for Kimi Code K3 [#115022](https://github.com/openclaw/openclaw/pull/115022)
- Preserve provider timeouts across plugin model rebuilds [#115102](https://github.com/openclaw/openclaw/pull/115102)
- Preserve partial output from incomplete OpenAI Responses streams [#115132](https://github.com/openclaw/openclaw/pull/115132)
- Show Codex startup diagnostics on initialize timeout [#115161](https://github.com/openclaw/openclaw/pull/115161)
- Report embedded agent deadlines as timeouts [#115319](https://github.com/openclaw/openclaw/pull/115319)
- Enforce one timeout for paired-node Ollama inference [#115558](https://github.com/openclaw/openclaw/pull/115558)
- Accept the OpenAI SDK plain-text Responses format [#115594](https://github.com/openclaw/openclaw/pull/115594)
- Restore tool calling for llama.cpp-compatible providers [#115598](https://github.com/openclaw/openclaw/pull/115598)
- Keep progressing remote Ollama streams alive [#115648](https://github.com/openclaw/openclaw/pull/115648)
- Strip unsupported keywords from every nested tool schema [#115741](https://github.com/openclaw/openclaw/pull/115741)
- Keep OpenAI Responses replacement streams consistent [#115799](https://github.com/openclaw/openclaw/pull/115799)
- fix(gateway): preserve OpenAI-compatible response contracts [#116354](https://github.com/openclaw/openclaw/pull/116354)
- Let one-shot Claude CLI commands exit cleanly [#116577](https://github.com/openclaw/openclaw/pull/116577)
- fix(runtime): prevent workspace, provider, and streaming lifecycle leaks [#116650](https://github.com/openclaw/openclaw/pull/116650)
- Execute llama.cpp plaintext tool calls [#116736](https://github.com/openclaw/openclaw/pull/116736)
- Honor Ollama stop sequences and asynchronous payload hooks [#116737](https://github.com/openclaw/openclaw/pull/116737)
- Reject truncated Bedrock streams and preserve audio results [#116743](https://github.com/openclaw/openclaw/pull/116743)
- Surface blocked Gemini prompts with usage details [#116756](https://github.com/openclaw/openclaw/pull/116756)
- Preserve Google stream errors, usage, and tool signatures [#116822](https://github.com/openclaw/openclaw/pull/116822)
- Preserve OpenAI Chat tool-call lifecycles [#116922](https://github.com/openclaw/openclaw/pull/116922)
- fix(google): preserve stream terminals and provider tool-call identities [#116926](https://github.com/openclaw/openclaw/pull/116926)
- Show clean retry guidance for malformed Codex streams [#116966](https://github.com/openclaw/openclaw/pull/116966)
- Preserve fenced tool-marker examples in replies [#116971](https://github.com/openclaw/openclaw/pull/116971)
- Repair Bedrock stream completion and OpenRouter model handling [#116998](https://github.com/openclaw/openclaw/pull/116998)
- Enforce streamed OpenAI tool-argument limits consistently [#117055](https://github.com/openclaw/openclaw/pull/117055)
- Clear sticky ChatGPT SSE fallback when sessions end [#117123](https://github.com/openclaw/openclaw/pull/117123)
- Report provider HTTP status in diagnostic timelines [#117403](https://github.com/openclaw/openclaw/pull/117403)
- Close unread Ollama error responses cleanly [#117473](https://github.com/openclaw/openclaw/pull/117473)
- Preserve OpenAI streaming terminal delivery during Gateway shutdown [#117505](https://github.com/openclaw/openclaw/pull/117505)
- Normalize Claude tool IDs for GitHub Copilot [#117789](https://github.com/openclaw/openclaw/pull/117789)
- Preserve WebSocket transport for Codex OAuth sessions [#117832](https://github.com/openclaw/openclaw/pull/117832)
- fix(agents): close proxy SSE bodies on terminal and errors [#117887](https://github.com/openclaw/openclaw/pull/117887)
- Keep explicit llama.cpp HTTP routes on their configured transport [#118293](https://github.com/openclaw/openclaw/pull/118293)
- Return the correct final agent failure without extra delay [#118331](https://github.com/openclaw/openclaw/pull/118331)
- Report failed OpenAI-compatible chat streams as API errors [#118428](https://github.com/openclaw/openclaw/pull/118428)
- Recover Gemini streams stalled before the first response body [#118511](https://github.com/openclaw/openclaw/pull/118511)
- Keep llama.cpp auxiliary completions on native transport [#119082](https://github.com/openclaw/openclaw/pull/119082)
- Let Codex-backed agents react in current conversations [#119649](https://github.com/openclaw/openclaw/pull/119649)
- Detect truncated direct Anthropic streams without breaking proxy responses [#120030](https://github.com/openclaw/openclaw/pull/120030)
- fix(ollama): reject invalid UTF-8 in streaming NDJSON responses [#120240](https://github.com/openclaw/openclaw/pull/120240)
- Fail malformed LLM streams instead of hanging turns [#120508](https://github.com/openclaw/openclaw/pull/120508)
- Support Codex app-server 0.147.0 [#120594](https://github.com/openclaw/openclaw/pull/120594)
- fix: agent.wait can return error before the same run later ends successfully [#120606](https://github.com/openclaw/openclaw/pull/120606)
- Honor explicit OpenAI service tiers over Fast mode [#120696](https://github.com/openclaw/openclaw/pull/120696)
- Reject leaked Claude tool protocol output [#120734](https://github.com/openclaw/openclaw/pull/120734)
- fix(agents): replace stale timeout payloads precisely [#122036](https://github.com/openclaw/openclaw/pull/122036)
- Prevent replay after observed CLI timeout activity [#122153](https://github.com/openclaw/openclaw/pull/122153)
- Speed up streamed assistant output [#122206](https://github.com/openclaw/openclaw/pull/122206)
- Hide HTML error pages that follow HTTP reason phrases [#122290](https://github.com/openclaw/openclaw/pull/122290)
- Restore cached OpenAI WebSocket continuation [#122483](https://github.com/openclaw/openclaw/pull/122483)
- Honor the selected transport for embedded OpenAI turns [#122946](https://github.com/openclaw/openclaw/pull/122946)
- Finish agent responses after post-tool provider overloads [#123005](https://github.com/openclaw/openclaw/pull/123005)
- Retry structured transient network failures [#123042](https://github.com/openclaw/openclaw/pull/123042)
- Preserve OpenAI terminal errors and avoid pointless failover [#123151](https://github.com/openclaw/openclaw/pull/123151)
- Honor provider timeouts during stuck-session recovery [#123877](https://github.com/openclaw/openclaw/pull/123877)
- Return failures for failed OpenAI-compatible HTTP runs [#124039](https://github.com/openclaw/openclaw/pull/124039)
- Use the bundled Codex app-server for managed turns [#124124](https://github.com/openclaw/openclaw/pull/124124)
- Preserve OpenAI WebSocket failure details and retry behavior [#124591](https://github.com/openclaw/openclaw/pull/124591)
- Keep valid Codex tools when one tool name is unsupported [#124932](https://github.com/openclaw/openclaw/pull/124932)
- Prevent duplicate audit starts for Codex dynamic tools [#124976](https://github.com/openclaw/openclaw/pull/124976)
- fix(cli-runner): drop stock watchdog defaults that disable resume promotion (#125045) [#125085](https://github.com/openclaw/openclaw/pull/125085)
- Deliver only the final answer after resumed reasoning [#125149](https://github.com/openclaw/openclaw/pull/125149)
- Propagate local-model stream policy to diagnostic recovery (#125147) [#125388](https://github.com/openclaw/openclaw/pull/125388)
- Report Ollama HTTP responses to diagnostics [#125834](https://github.com/openclaw/openclaw/pull/125834)
- Stop Ollama response handling after cancellation [#125961](https://github.com/openclaw/openclaw/pull/125961)
- Record provider request acceptance consistently [#126028](https://github.com/openclaw/openclaw/pull/126028)
- refactor(process): supervise Claude node invocations [#127475](https://github.com/openclaw/openclaw/pull/127475)
- fix(codex): accept bounded upstream prompt provenance [#127730](https://github.com/openclaw/openclaw/pull/127730)
- fix(mistral): retain provider-returned streaming model as responseModel [#128066](https://github.com/openclaw/openclaw/pull/128066)
- fix(ai): preserve tool-result boundary whitespace for Mistral and Ollama [#128266](https://github.com/openclaw/openclaw/pull/128266)
- fix(ai): keep SSE cancellation from blocking outcomes [#128488](https://github.com/openclaw/openclaw/pull/128488)
- fix(agents): reject hidden output across model verification and system turns [#128570](https://github.com/openclaw/openclaw/pull/128570)
- fix(cli): normalize echoed binary tool outputs [#128699](https://github.com/openclaw/openclaw/pull/128699)
- fix(anthropic): show Claude questions as interactive prompts [#128729](https://github.com/openclaw/openclaw/pull/128729)
- fix(agents): stop double-sanitizing openai-responses tool-call ids [#128764](https://github.com/openclaw/openclaw/pull/128764)
- fix: prevent custom Ollama cloud models from stalling indefinitely [#129051](https://github.com/openclaw/openclaw/pull/129051)
- fix(mistral): report provider failures instead of silent success [#129256](https://github.com/openclaw/openclaw/pull/129256)
- fix(ai): enforce Anthropic stream completion by provider ownership [#129291](https://github.com/openclaw/openclaw/pull/129291)
- fix(codex): back off between app-server startup retries [#129505](https://github.com/openclaw/openclaw/pull/129505)
- fix(gateway): report failed chat streams as errors [#129787](https://github.com/openclaw/openclaw/pull/129787)
- fix(ai): report interrupted local-model streams instead of empty success [#129794](https://github.com/openclaw/openclaw/pull/129794)
- fix(inbound-meta): avoid Anthropic billing classification [#130298](https://github.com/openclaw/openclaw/pull/130298)
- fix(ai): replace streamed function name on same-id continuation [#130537](https://github.com/openclaw/openclaw/pull/130537)
- fix: release stalled captured provider responses promptly [#130804](https://github.com/openclaw/openclaw/pull/130804)
- fix(copilot): keep Gemini working without live discovery [#131143](https://github.com/openclaw/openclaw/pull/131143)
- Bound shared Codex app-server startup waits [#89442](https://github.com/openclaw/openclaw/pull/89442)
- Stop fallback models from re-running completed agent work [#92011](https://github.com/openclaw/openclaw/pull/92011)
- Make Claude CLI max-turn failures actionable and safe to retry [#94130](https://github.com/openclaw/openclaw/pull/94130)
- Retry transient provider failures after earlier tool use [#97966](https://github.com/openclaw/openclaw/pull/97966)
- Preserve complete streamed tool calls without finish_reason [#98124](https://github.com/openclaw/openclaw/pull/98124)
- Warn without interrupting Codex projection when protocols drift [#99287](https://github.com/openclaw/openclaw/pull/99287)
- Drop tool-result images for text-only Anthropic models [#102329](https://github.com/openclaw/openclaw/pull/102329)
- Keep truncated provider errors valid Unicode [#102496](https://github.com/openclaw/openclaw/pull/102496)
- Preserve emoji when Codex tool output is truncated [#102522](https://github.com/openclaw/openclaw/pull/102522)
- Keep long Mistral errors Unicode-safe [#102539](https://github.com/openclaw/openclaw/pull/102539)
- Keep Codex supervisor error messages valid around emoji [#102590](https://github.com/openclaw/openclaw/pull/102590)
- Keep Ollama malformed-stream warnings Unicode-safe [#102593](https://github.com/openclaw/openclaw/pull/102593)
- Keep truncated Codex dynamic-tool output valid Unicode [#102622](https://github.com/openclaw/openclaw/pull/102622)
- Preserve complete characters in truncated Codex tool output [#104116](https://github.com/openclaw/openclaw/pull/104116)
- Honor explicitly configured OpenAI Completions transport [#105539](https://github.com/openclaw/openclaw/pull/105539)
- Sanitize ClawRouter attribution headers safely [#106454](https://github.com/openclaw/openclaw/pull/106454)
- Preserve emoji boundaries in diagnostic timeline attributes [#106986](https://github.com/openclaw/openclaw/pull/106986)
- Use the Anthropic SDK's SSE parser [#107460](https://github.com/openclaw/openclaw/pull/107460)
- Bound oversized Ollama stream records [#107473](https://github.com/openclaw/openclaw/pull/107473)
- Preserve Unicode in Codex app-server failure messages [#108335](https://github.com/openclaw/openclaw/pull/108335)
- Restore llama.cpp compatibility for the cron tool schema [#108360](https://github.com/openclaw/openclaw/pull/108360)
- Preserve Unicode in local provider startup errors [#108518](https://github.com/openclaw/openclaw/pull/108518)
- Preserve Unicode in Codex sandbox HTTP output [#108618](https://github.com/openclaw/openclaw/pull/108618)
- Report invalid UTF-8 in provider JSON accurately [#108849](https://github.com/openclaw/openclaw/pull/108849)
- Preserve Unicode in Codex app-server error tails [#109013](https://github.com/openclaw/openclaw/pull/109013)
- Report provider finish errors accurately [#109313](https://github.com/openclaw/openclaw/pull/109313)
- Keep Unicode intact in truncated provider errors [#109786](https://github.com/openclaw/openclaw/pull/109786)
- Prevent stream cleanup errors from overriding cancellation [#110427](https://github.com/openclaw/openclaw/pull/110427)
- Keep OpenAI tool-call ID truncation Unicode-safe [#110471](https://github.com/openclaw/openclaw/pull/110471)
- Stop retrying non-retryable ChatGPT Responses errors [#110655](https://github.com/openclaw/openclaw/pull/110655)
- Reject non-text Codex WebSocket response frames [#111138](https://github.com/openclaw/openclaw/pull/111138)
- Release Ollama stream locks after early exits [#111641](https://github.com/openclaw/openclaw/pull/111641)
- Show provider 503 failures in group and channel chats [#113656](https://github.com/openclaw/openclaw/pull/113656)
- Preserve Gemini compatibility flags on discovered model variants [#114831](https://github.com/openclaw/openclaw/pull/114831)
- Preserve emoji in streamed tool arguments [#115536](https://github.com/openclaw/openclaw/pull/115536)
- Separate streamed Chat Completions content from the finish event [#115718](https://github.com/openclaw/openclaw/pull/115718)
- Preserve completed Codex answers when tool bookkeeping is incomplete [#115849](https://github.com/openclaw/openclaw/pull/115849)
- Prevent native Anthropic attempts from carrying refusal markers [#116433](https://github.com/openclaw/openclaw/pull/116433)
- Release Amazon Bedrock streaming clients [#117039](https://github.com/openclaw/openclaw/pull/117039)
- Restore `/tools` inventory for dynamically prepared models [#119306](https://github.com/openclaw/openclaw/pull/119306)
- Keep ACP retry statuses scoped to one logical dispatch [#120560](https://github.com/openclaw/openclaw/pull/120560)
- Accept TLS-certificate cloud-worker fallback events [#121285](https://github.com/openclaw/openclaw/pull/121285)
- Preserve provider local-service environment overrides on Windows [#122027](https://github.com/openclaw/openclaw/pull/122027)
- Unify CLI failover policy across execution lanes [#122164](https://github.com/openclaw/openclaw/pull/122164)
- Preserve reply cleanup when backend cancellation throws [#122252](https://github.com/openclaw/openclaw/pull/122252)
- Retry transient Undici socket failures [#122535](https://github.com/openclaw/openclaw/pull/122535)
- Recover rejected OpenAI WebSocket continuations [#122727](https://github.com/openclaw/openclaw/pull/122727)
- Accept headerless text files in Open Responses URLs [#123431](https://github.com/openclaw/openclaw/pull/123431)
- Close unhealthy ACP runtimes before replacement [#126494](https://github.com/openclaw/openclaw/pull/126494)
- fix(cli): report exact Claude stream failures [#127169](https://github.com/openclaw/openclaw/pull/127169)
- fix(gateway): Responses API returns blank or truncated assistant output [#128295](https://github.com/openclaw/openclaw/pull/128295)
- fix(ai): record provider-returned model in managed openai completions stream [#128324](https://github.com/openclaw/openclaw/pull/128324)
- fix(gateway): streamed tool calls silently omit assistant commentary [#128353](https://github.com/openclaw/openclaw/pull/128353)
- fix(gateway): retain completed status in streamed tool snapshots [#128510](https://github.com/openclaw/openclaw/pull/128510)
- fix(cli): convert HEIC sequences in model runs [#128578](https://github.com/openclaw/openclaw/pull/128578)
- chore(deps): refresh dependencies after seven-day cooldown [#129187](https://github.com/openclaw/openclaw/pull/129187)
- fix(codex): suppress under-development features warning in chat [#129493](https://github.com/openclaw/openclaw/pull/129493)
- fix(google): retain provider-returned response model [#129606](https://github.com/openclaw/openclaw/pull/129606)
- fix(ai): local-model tool calls fail in standalone library streams [#129664](https://github.com/openclaw/openclaw/pull/129664)
- fix(llama-cpp): restore tools for fallback-capable chat templates [#129684](https://github.com/openclaw/openclaw/pull/129684)
- fix: proxied model streams drop all events when the server omits the space after data: [#129905](https://github.com/openclaw/openclaw/pull/129905)

**Documentation**

- Document llama.cpp schema compatibility for custom endpoints [#117120](https://github.com/openclaw/openclaw/pull/117120)

</details>

</Accordion>

<Accordion title="Reasoning and context limits">

Reasoning settings now stay attached to the selected model and runtime when a conversation is restored or its authentication route is rebuilt. Native Codex supports Ultra for Sol and Terra and Max for Luna; embedded OpenClaw maps Ultra to the provider's highest supported effort and adds guidance for delegated work, which is a different behavior from native Codex Ultra.

Supported GPT and Claude routes expose larger context options. Normal GPT-5.5 and GPT-5.6 runs use a 272,000-token budget with an opt-in 922,000-token input window, and the Control UI can choose 200K or 1M for supported Claude 5 CLI conversations. These options remain limited to the routes, interfaces, and accounts that support them.

Compaction now uses the latest trustworthy context count rather than accumulated cache billing or duplicated history, preserves tool output across supported Responses checkpoints, and falls back to full history when a stored checkpoint is rejected. Context limits are now configured per model, and Doctor can migrate supported provider-level settings tied to explicit model entries.

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

**Improvements**

- Keep sent prompt history stable within a session [#102610](https://github.com/openclaw/openclaw/pull/102610)
- Reduce recurring prompt and tool-instruction overhead [#105095](https://github.com/openclaw/openclaw/pull/105095)
- Make million-token OpenAI context an explicit opt-in [#112916](https://github.com/openclaw/openclaw/pull/112916)
- Consolidate model context budgets [#124665](https://github.com/openclaw/openclaw/pull/124665)
- feat(agents): selectable Claude CLI context window (200K/1M) [#127951](https://github.com/openclaw/openclaw/pull/127951)
- Add GPT-5.6 Ultra across OpenClaw and Codex runtimes [#98021](https://github.com/openclaw/openclaw/pull/98021)
- Update the managed Codex app-server to 0.144.6 [#110821](https://github.com/openclaw/openclaw/pull/110821)
- Reduce repeated per-turn conversation metadata tokens [#113616](https://github.com/openclaw/openclaw/pull/113616)
- Stabilize Codex tool prompts and expose cache losses [#115238](https://github.com/openclaw/openclaw/pull/115238)
- Add Gemini 3.7 Flash with compatible thinking levels [#123366](https://github.com/openclaw/openclaw/pull/123366)
- Add session thinking level to the bundled Swift protocol client [0d215c1](https://github.com/openclaw/openclaw/commit/0d215c1)
- Show the effective thinking level in /model summaries [#111709](https://github.com/openclaw/openclaw/pull/111709)
- Preserve prompt-cache reuse in history-limited sessions [#115281](https://github.com/openclaw/openclaw/pull/115281)
- Reduce duplicate ambient-room prompt content [#119860](https://github.com/openclaw/openclaw/pull/119860)

**Bug fixes**

- Prevent stale Apple chat thinking after model switches and reconnects [#103767](https://github.com/openclaw/openclaw/pull/103767)
- Serialize chat model and reasoning changes [#106534](https://github.com/openclaw/openclaw/pull/106534)
- Stop cumulative cache usage inflating session context [#108323](https://github.com/openclaw/openclaw/pull/108323)
- Keep ACP sessions from failing on unsupported automatic thinking controls [#108392](https://github.com/openclaw/openclaw/pull/108392)
- Correct Claude 1M limits for direct Anthropic sessions [#108751](https://github.com/openclaw/openclaw/pull/108751)
- Prevent premature compaction in tool-heavy sessions [#110297](https://github.com/openclaw/openclaw/pull/110297)
- Preserve context for policy-routed CLI sessions [#115284](https://github.com/openclaw/openclaw/pull/115284)
- Enable custom providers to expose Max and Ultra reasoning [#115690](https://github.com/openclaw/openclaw/pull/115690)
- Preserve Claude CLI conversation context across prompt updates [#116292](https://github.com/openclaw/openclaw/pull/116292)
- Preserve Ollama thinking through reply maintenance [#116963](https://github.com/openclaw/openclaw/pull/116963)
- Keep runtime context focused on the active user request [#117364](https://github.com/openclaw/openclaw/pull/117364)
- Honor per-agent context limits in embedded runs [#120343](https://github.com/openclaw/openclaw/pull/120343)
- Let Claude CLI sessions compact with subscription authentication [#120496](https://github.com/openclaw/openclaw/pull/120496)
- Prevent premature compaction from inflated token counts [#120497](https://github.com/openclaw/openclaw/pull/120497)
- Preserve full Responses history across compaction retries [#120729](https://github.com/openclaw/openclaw/pull/120729)
- Align server and local compaction decisions [#123397](https://github.com/openclaw/openclaw/pull/123397)
- Prevent premature compaction from double-counted context [#124267](https://github.com/openclaw/openclaw/pull/124267)
- Let tool-heavy sessions survive runtime cutover [#125181](https://github.com/openclaw/openclaw/pull/125181)
- Apply Claude CLI thinking and preserve warm sessions [#125528](https://github.com/openclaw/openclaw/pull/125528)
- Preserve GPT-5.6 Max and Ultra selections through Codex [#126492](https://github.com/openclaw/openclaw/pull/126492)
- Use real Ollama Cloud context windows and capabilities [#126653](https://github.com/openclaw/openclaw/pull/126653)
- Cap oversized Codex tool output before replay [#99578](https://github.com/openclaw/openclaw/pull/99578)
- Default GPT-5.6 Sol to medium reasoning [e9c6c15](https://github.com/openclaw/openclaw/commit/e9c6c15)
- Use GitHub Copilot’s actual prompt limits [#103275](https://github.com/openclaw/openclaw/pull/103275)
- Let Claude CLI choose adaptive thinking effort [#103815](https://github.com/openclaw/openclaw/pull/103815)
- Show model-specific thinking levels in Android chat [#103893](https://github.com/openclaw/openclaw/pull/103893)
- Apply provider-level token limits to configured models [#105807](https://github.com/openclaw/openclaw/pull/105807)
- Persist iOS chat thinking selections [#106287](https://github.com/openclaw/openclaw/pull/106287)
- Preserve Fable 5 effort settings on Claude CLI routes [#107636](https://github.com/openclaw/openclaw/pull/107636)
- fix(github-copilot): preserve catalog thinking efforts in requests [#107834](https://github.com/openclaw/openclaw/pull/107834)
- Use Z.AI's documented thinking payload [#108633](https://github.com/openclaw/openclaw/pull/108633)
- Honor thinking off for Kimi Code K3 [#109335](https://github.com/openclaw/openclaw/pull/109335)
- Complete Claude transcript pages across short file reads [#109431](https://github.com/openclaw/openclaw/pull/109431)
- Persist Codex automatic compaction counts [#110587](https://github.com/openclaw/openclaw/pull/110587)
- Default missing Anthropic output-token limits [#110617](https://github.com/openclaw/openclaw/pull/110617)
- Let Apple Watch chat inherit configured thinking defaults [#111301](https://github.com/openclaw/openclaw/pull/111301)
- Honor provider-specific reasoning effort mappings [#112632](https://github.com/openclaw/openclaw/pull/112632)
- Restore full verbosity and streamed reasoning controls in the TUI [#113782](https://github.com/openclaw/openclaw/pull/113782)
- Read Anthropic token limits during live model discovery [#113784](https://github.com/openclaw/openclaw/pull/113784)
- ACP turns continue when optional thinking values are rejected [#113935](https://github.com/openclaw/openclaw/pull/113935)
- Keep Copilot tool transcripts complete after interruptions [#114403](https://github.com/openclaw/openclaw/pull/114403)
- Prevent false idle timeouts during hidden reasoning [#114997](https://github.com/openclaw/openclaw/pull/114997)
- Make auto-compaction cut points free real context [#115309](https://github.com/openclaw/openclaw/pull/115309)
- Recover channel conversations from expired Claude CLI sessions [#115513](https://github.com/openclaw/openclaw/pull/115513)
- Preserve native GPT limits for Microsoft Foundry deployments [#115542](https://github.com/openclaw/openclaw/pull/115542)
- Use self-hosted providers' advertised context windows [#115566](https://github.com/openclaw/openclaw/pull/115566)
- Restore tagged Claude CLI reasoning delivery [#117264](https://github.com/openclaw/openclaw/pull/117264)
- Honor stored model overrides and cached tokens in `/compact` [#117580](https://github.com/openclaw/openclaw/pull/117580)
- fix(bedrock): requests respect model output limit when reasoning is off [#119155](https://github.com/openclaw/openclaw/pull/119155)
- Stop bodyless 400 errors from triggering false compaction [#119596](https://github.com/openclaw/openclaw/pull/119596)
- fix(agent-core): preserve explicit reasoning off through Agent Core handoff [#120020](https://github.com/openclaw/openclaw/pull/120020)
- Honor Claw Router model reasoning effort metadata [#120631](https://github.com/openclaw/openclaw/pull/120631)
- Preserve long Responses sessions across cloud-worker handoff [#120803](https://github.com/openclaw/openclaw/pull/120803)
- Enable native max thinking for supported Ollama Cloud models [#121074](https://github.com/openclaw/openclaw/pull/121074)
- Preserve GPT-5 personality settings during doctor migration [#121346](https://github.com/openclaw/openclaw/pull/121346)
- Preserve Claude CLI context across heartbeats [#121509](https://github.com/openclaw/openclaw/pull/121509)
- Restore all GPT-5.6 Sol thinking levels [#121865](https://github.com/openclaw/openclaw/pull/121865)
- Resolve configured model aliases during compaction [#122422](https://github.com/openclaw/openclaw/pull/122422)
- Refresh Codex context totals after native compaction [#123478](https://github.com/openclaw/openclaw/pull/123478)
- Stabilize prompt caching across discovery order [#123543](https://github.com/openclaw/openclaw/pull/123543)
- Honor per-model context caps on Codex-routed runs [#124735](https://github.com/openclaw/openclaw/pull/124735)
- Restore GPT-5.6 reasoning effort options in Codex [#126182](https://github.com/openclaw/openclaw/pull/126182)
- fix(agents): native runs ignore the selected 200K context window [#128838](https://github.com/openclaw/openclaw/pull/128838)
- fix(models): preserve provider-defined reasoning levels across model catalogs [#129623](https://github.com/openclaw/openclaw/pull/129623)
- fix(agents): keep active hidden model streams out of stalled recovery [#130140](https://github.com/openclaw/openclaw/pull/130140)
- fix(ai): stabilize runtime context across Responses tool rounds [#130166](https://github.com/openclaw/openclaw/pull/130166)
- fix(copilot): prevent static GPT-5.4 mini thinking failures [#131160](https://github.com/openclaw/openclaw/pull/131160)
- Honor configured context limits for Claude CLI sessions [#93198](https://github.com/openclaw/openclaw/pull/93198)
- Enable maximum thinking for OpenCode Go DeepSeek V4 [#99643](https://github.com/openclaw/openclaw/pull/99643)
- Prevent silent reasoning turns from bricking Anthropic sessions [#99772](https://github.com/openclaw/openclaw/pull/99772)
- Keep Gemini thinking disabled when reasoning clamps to off [#101832](https://github.com/openclaw/openclaw/pull/101832)
- Preserve session thinking levels during unrelated updates [#102866](https://github.com/openclaw/openclaw/pull/102866)
- Match canonical reasoning efforts regardless of casing [#102993](https://github.com/openclaw/openclaw/pull/102993)
- Keep Claude fallback summaries valid at emoji boundaries [#104454](https://github.com/openclaw/openclaw/pull/104454)
- Honor Z.AI GLM-5.2 max thinking through the gateway [#104778](https://github.com/openclaw/openclaw/pull/104778)
- Enforce safe output limits for known Mistral models [#105040](https://github.com/openclaw/openclaw/pull/105040)
- fix(extra-params): preserve resolved cacheRetention against undefined own-property clobber [#106069](https://github.com/openclaw/openclaw/pull/106069)
- Show the active model and thinking level in the TUI [#108669](https://github.com/openclaw/openclaw/pull/108669)
- Preserve thinking levels in status for discovered Ollama models [#108789](https://github.com/openclaw/openclaw/pull/108789)
- Keep Claude CLI Mythos 5 context at its fallback limit [#110461](https://github.com/openclaw/openclaw/pull/110461)
- Recover from Z.AI token-limit errors [#111744](https://github.com/openclaw/openclaw/pull/111744)
- TUI footer reflects the launch thinking override [#112237](https://github.com/openclaw/openclaw/pull/112237)
- Preserve Ollama cloud model context windows [#112430](https://github.com/openclaw/openclaw/pull/112430)
- Let native iOS Talk inherit the session thinking level [#112901](https://github.com/openclaw/openclaw/pull/112901)
- Normalize standalone AI package transcripts by default [#114843](https://github.com/openclaw/openclaw/pull/114843)
- Reject invalid Chat Completions token caps [#116563](https://github.com/openclaw/openclaw/pull/116563)
- Preserve thinking levels for live-discovered Ollama models [#116584](https://github.com/openclaw/openclaw/pull/116584)
- Use Kilocode's serving-provider context limits [#118868](https://github.com/openclaw/openclaw/pull/118868)
- Preserve Chutes serving context limits [#119196](https://github.com/openclaw/openclaw/pull/119196)
- Retain images within tool-result context limits [#120808](https://github.com/openclaw/openclaw/pull/120808)
- Make `/think` suggestions match the active model [#123507](https://github.com/openclaw/openclaw/pull/123507)
- Preserve prompt-cache boundaries for long OpenAI session IDs [#126380](https://github.com/openclaw/openclaw/pull/126380)
- fix: show context window switcher on new sessions [#128621](https://github.com/openclaw/openclaw/pull/128621)
- fix(apple): surface rejected chat session settings [#128737](https://github.com/openclaw/openclaw/pull/128737)
- fix(ai): recover input-only provider context overflows [#129536](https://github.com/openclaw/openclaw/pull/129536)
- fix(lmstudio): preserve saved model reasoning and code mode [#129675](https://github.com/openclaw/openclaw/pull/129675)
- fix(github-copilot): allow xhigh and max thinking levels on claude-opus-5 [#129690](https://github.com/openclaw/openclaw/pull/129690)
- fix(tui): make provider-specific thinking labels selectable [#129952](https://github.com/openclaw/openclaw/pull/129952)
- fix(deepinfra): preserve manifest reasoning during live discovery [#129998](https://github.com/openclaw/openclaw/pull/129998)
- Warn when prompt cache retention is invalid [#94494](https://github.com/openclaw/openclaw/pull/94494)

**Documentation**

- Correct configuration and runtime documentation to match shipped behavior [#121324](https://github.com/openclaw/openclaw/pull/121324)
- Fix the Anthropic prompt-caching documentation link [#114028](https://github.com/openclaw/openclaw/pull/114028)
- Fix Mistral reasoning link and audit links inside docs components [#114867](https://github.com/openclaw/openclaw/pull/114867)
- docs(codex): correct effort support and provenance in harness reference [#130882](https://github.com/openclaw/openclaw/pull/130882)

</details>

</Accordion>

<Accordion title="Usage, limits, and pricing">

OpenClaw now separates subscription-plan information from estimated API cost. Chat can show plan windows, reset times, credits, and the account email attached to a snapshot, while completed iOS replies can show supported input, output, cache, cost, and context-pressure details. These figures are snapshots or estimates, not provider invoices, and in mixed API-key and subscription setups the account label identifies the plan snapshot rather than every run.

The Control UI adds a Profile page for lifetime activity recorded by OpenClaw, with Usage and Profile views grouped in the selected time zone, and plugin-initiated model calls now contribute to aggregate totals. OpenClaw cannot reconstruct activity it never recorded.

Supported failed or incomplete turns can retain the provider's token and cost data without being marked successful. Permanent authentication, model, media, and long-window quota failures stop retrying, while transient rate limits and retryable server errors keep their existing retry or authorized same-provider fallback behavior; Codex subscription runs do not silently switch to pay-as-you-go API keys.

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

**Improvements**

- Show subscription plan limits in the chat context popover [#102784](https://github.com/openclaw/openclaw/pull/102784)
- Add a lifetime activity profile to Control UI settings [#102842](https://github.com/openclaw/openclaw/pull/102842)
- Show token, cost, and context usage under iOS replies [#103471](https://github.com/openclaw/openclaw/pull/103471)
- Show the account behind plan usage [#106200](https://github.com/openclaw/openclaw/pull/106200)
- Focus Profile on identity and move analytics to Usage [#115245](https://github.com/openclaw/openclaw/pull/115245)
- Label Codex usage windows with the account email [#106500](https://github.com/openclaw/openclaw/pull/106500)
- Trace Claude Code CLI turns in model-call telemetry [#108304](https://github.com/openclaw/openclaw/pull/108304)
- Source model pricing from the hosted catalog [#114060](https://github.com/openclaw/openclaw/pull/114060)
- Speed up repeat Usage page loads with short-lived caches [#115369](https://github.com/openclaw/openclaw/pull/115369)
- Label onboarding CLI auth as subscription or usage-billed [#122140](https://github.com/openclaw/openclaw/pull/122140)
- Make cached provider usage return immediately [#125520](https://github.com/openclaw/openclaw/pull/125520)

**Bug fixes**

- Wait for complete all-agent usage totals [#103998](https://github.com/openclaw/openclaw/pull/103998)
- Stop retries for permanent provider errors and long quotas [#105258](https://github.com/openclaw/openclaw/pull/105258)
- Include plugin LLM calls in usage diagnostics [#107937](https://github.com/openclaw/openclaw/pull/107937)
- Make Codex quota failover model-aware and billing-safe [#108254](https://github.com/openclaw/openclaw/pull/108254)
- Recover automatically from temporary provider overloads [#109354](https://github.com/openclaw/openclaw/pull/109354)
- Harden provider caching, retries, and overflow recovery [#109796](https://github.com/openclaw/openclaw/pull/109796)
- Avoid unused Claude CLI observability overhead and bound diagnostics [#110246](https://github.com/openclaw/openclaw/pull/110246)
- Bound Control UI session-observer model calls [#114052](https://github.com/openclaw/openclaw/pull/114052)
- Restore trajectory capture for Codex sessions [#115220](https://github.com/openclaw/openclaw/pull/115220)
- Show the real Codex context window and simplify its popover [#121491](https://github.com/openclaw/openclaw/pull/121491)
- restore Codex subscription usage in `/status` [7eeb109](https://github.com/openclaw/openclaw/commit/7eeb109)
- Make provider usage load without waiting on slow providers [e9620fb](https://github.com/openclaw/openclaw/commit/e9620fb)
- Limit all-agent session usage scans [#102013](https://github.com/openclaw/openclaw/pull/102013)
- Show periodic usage-limit errors in group chats [#102643](https://github.com/openclaw/openclaw/pull/102643)
- Keep Usage and Profile day buckets correct across DST [#103097](https://github.com/openclaw/openclaw/pull/103097)
- Correct DeepSeek V4 pricing and legacy alias metadata [#103241](https://github.com/openclaw/openclaw/pull/103241)
- Recover Groq Llama turns rejected by TPM limits [#104904](https://github.com/openclaw/openclaw/pull/104904)
- Honor Retry-After floors through one retry scheduler [#105789](https://github.com/openclaw/openclaw/pull/105789)
- Keep Usage insights aligned with active filters [#105792](https://github.com/openclaw/openclaw/pull/105792)
- Retry provider operations after HTTP 429 responses [#106365](https://github.com/openclaw/openclaw/pull/106365)
- Stop provider usage reads from hanging after headers [#107454](https://github.com/openclaw/openclaw/pull/107454)
- Report truthful Codex context freshness [#107813](https://github.com/openclaw/openclaw/pull/107813)
- Count instant sessions in hourly usage metrics [#108160](https://github.com/openclaw/openclaw/pull/108160)
- Honor the selected time zone in Usage session details [#108579](https://github.com/openclaw/openclaw/pull/108579)
- Record usage and partial output for incomplete Responses turns [#109904](https://github.com/openclaw/openclaw/pull/109904)
- Improve Ollama CJK usage estimates [#110073](https://github.com/openclaw/openclaw/pull/110073)
- Avoid false Codex subscription-exhaustion messages when account limits remain available [#110381](https://github.com/openclaw/openclaw/pull/110381)
- Honor Anthropic Retry-After cooldowns [#111072](https://github.com/openclaw/openclaw/pull/111072)
- Keep Claude usage refreshes stable on malformed responses [#111088](https://github.com/openclaw/openclaw/pull/111088)
- Report Chutes cache-read pricing correctly [#111253](https://github.com/openclaw/openclaw/pull/111253)
- Price usage with each agent's model registry [#111389](https://github.com/openclaw/openclaw/pull/111389)
- Count OpenRouter cache-write tokens correctly [#111435](https://github.com/openclaw/openclaw/pull/111435)
- Show accurate quota and rate-limit alerts [#112047](https://github.com/openclaw/openclaw/pull/112047)
- Reject malformed UTF-8 in provider usage responses [#112081](https://github.com/openclaw/openclaw/pull/112081)
- Show current MiniMax quota windows correctly [#115030](https://github.com/openclaw/openclaw/pull/115030)
- Restore CLI token usage for OpenAI-compatible providers [#115564](https://github.com/openclaw/openclaw/pull/115564)
- Correct OpenRouter budgets and Bedrock cache accounting [#116896](https://github.com/openclaw/openclaw/pull/116896)
- Correct cached-token and cost accounting for managed OpenAI chat [#117043](https://github.com/openclaw/openclaw/pull/117043)
- Correct managed Anthropic cache accounting through shared streaming policy [#117086](https://github.com/openclaw/openclaw/pull/117086)
- Report complete Responses token usage [#117533](https://github.com/openclaw/openclaw/pull/117533)
- Keep multi-call token totals cumulative [#117930](https://github.com/openclaw/openclaw/pull/117930)
- Classify exhausted xAI credits as billing failures [#118615](https://github.com/openclaw/openclaw/pull/118615)
- Apply quota suspensions to the session's real owning agent [#120262](https://github.com/openclaw/openclaw/pull/120262)
- Correct LongCat cache pricing and add provider branding [#121369](https://github.com/openclaw/openclaw/pull/121369)
- Unify provider-error handling and prevent false rate-limit matches [#121817](https://github.com/openclaw/openclaw/pull/121817)
- Correct GPT-5.5 fast-mode session costs [#123152](https://github.com/openclaw/openclaw/pull/123152)
- Restore chat cost and usage empty states [#123269](https://github.com/openclaw/openclaw/pull/123269)
- Keep provider usage tied to reloaded account config [#124131](https://github.com/openclaw/openclaw/pull/124131)
- Restore Codex harness trajectory persistence [#125941](https://github.com/openclaw/openclaw/pull/125941)
- Compact recovery ownership and model metadata [#126751](https://github.com/openclaw/openclaw/pull/126751)
- fix(announce): report unknown token usage instead of zero on the stats line [#126976](https://github.com/openclaw/openclaw/pull/126976)
- fix: restore usage for prepared provider credentials [#129220](https://github.com/openclaw/openclaw/pull/129220)
- Keep selected-day usage totals free of undated historical records [#89745](https://github.com/openclaw/openclaw/pull/89745)
- Retry transient bare 429 provider errors [#99097](https://github.com/openclaw/openclaw/pull/99097)
- Preserve explicit zero usage in model-call telemetry [#100115](https://github.com/openclaw/openclaw/pull/100115)
- Prevent Sonnet 5 model listings from crashing when cost data is missing [#102186](https://github.com/openclaw/openclaw/pull/102186)
- Ignore malformed provider Retry-After dates [#102987](https://github.com/openclaw/openclaw/pull/102987)
- Classify model-provider telemetry as client spans [#104211](https://github.com/openclaw/openclaw/pull/104211)
- Prevent usage-cost audits from stalling [#104823](https://github.com/openclaw/openclaw/pull/104823)
- Validate usage-footer fixed precision without breaking high precision [#105297](https://github.com/openclaw/openclaw/pull/105297)
- Keep the Usage page working during cache refreshes [#105611](https://github.com/openclaw/openclaw/pull/105611)
- Handle malformed Gemini quota responses safely [#106420](https://github.com/openclaw/openclaw/pull/106420)
- Drop invalid provider usage reset timestamps [#106421](https://github.com/openclaw/openclaw/pull/106421)
- Cap usage history requests before Date overflow [#110552](https://github.com/openclaw/openclaw/pull/110552)
- Handle malformed Z.AI usage responses safely [#110741](https://github.com/openclaw/openclaw/pull/110741)
- Handle malformed DeepSeek balance responses [#110785](https://github.com/openclaw/openclaw/pull/110785)
- Prevent malformed Copilot usage payloads from breaking refreshes [#110795](https://github.com/openclaw/openclaw/pull/110795)
- Reject corrupted ClawRouter usage responses [#111183](https://github.com/openclaw/openclaw/pull/111183)
- Preserve throttling details in fallback notices [#112702](https://github.com/openclaw/openclaw/pull/112702)
- Reject incomplete usage date ranges [#113259](https://github.com/openclaw/openclaw/pull/113259)
- Preserve usage for failed OpenAI Responses [#115175](https://github.com/openclaw/openclaw/pull/115175)
- Normalize partial model costs before catalog publication [#116317](https://github.com/openclaw/openclaw/pull/116317)
- Preserve Claude thinking-token usage [#116993](https://github.com/openclaw/openclaw/pull/116993)
- Correct Codex app-server token usage breakdowns [#117013](https://github.com/openclaw/openclaw/pull/117013)
- fix(ios): show recent usage days first [#117222](https://github.com/openclaw/openclaw/pull/117222)
- Honor configured pricing for Claude Sonnet 5 and Opus 5 [#117275](https://github.com/openclaw/openclaw/pull/117275)
- Keep pending usage sessions visible in UTC mode [#118004](https://github.com/openclaw/openclaw/pull/118004)
- ClawRouter shows a stable error for malformed usage responses [#119580](https://github.com/openclaw/openclaw/pull/119580)
- Preserve cumulative CLI usage in turn diagnostics [#120100](https://github.com/openclaw/openclaw/pull/120100)
- Keep failover messages aligned with failure reasons [#121717](https://github.com/openclaw/openclaw/pull/121717)
- Include system-agent costs in all-agent usage totals [#123271](https://github.com/openclaw/openclaw/pull/123271)
- Keep healthy provider usage visible after auth failures [#124367](https://github.com/openclaw/openclaw/pull/124367)
- Keep provider usage tied to the refreshed account [#125709](https://github.com/openclaw/openclaw/pull/125709)
- Preserve terminal facts in oversized Codex trajectories [#126050](https://github.com/openclaw/openclaw/pull/126050)
- Preserve verified session context limits during catalog gaps [#126422](https://github.com/openclaw/openclaw/pull/126422)
- Restore `/usage cost` in terminal sessions [#126668](https://github.com/openclaw/openclaw/pull/126668)
- Refresh Control UI locale catalogs [#126927](https://github.com/openclaw/openclaw/pull/126927)
- fix(ui): keep Usage results aligned with active filters [#127720](https://github.com/openclaw/openclaw/pull/127720)
- fix(cli): reject malformed usage-cost --days instead of silently defaulting [#127978](https://github.com/openclaw/openclaw/pull/127978)
- fix(ui): usage filters hide sessions when multiple providers are selected [#129482](https://github.com/openclaw/openclaw/pull/129482)
- fix(kilocode): paid default router incorrectly reports zero cost [#129546](https://github.com/openclaw/openclaw/pull/129546)
- fix(ui): usage copy actions silently hide clipboard failures [#129562](https://github.com/openclaw/openclaw/pull/129562)
- fix(usage): prevent model identity collisions [#130307](https://github.com/openclaw/openclaw/pull/130307)
- fix(ui): Usage Shift-click selects the wrong session range [#130375](https://github.com/openclaw/openclaw/pull/130375)

**Documentation**

- Explain Z.AI rate-limit and overload responses [#107940](https://github.com/openclaw/openclaw/pull/107940)
- Explain model usage events and supported usage APIs [#118483](https://github.com/openclaw/openclaw/pull/118483)

</details>

</Accordion>

</AccordionGroup>

## Automations and Scheduling

Automations now brings scheduled work together under one name across the agent, Control UI, command line, docs, and supported native apps, while existing Cron commands, settings, jobs, and schedule syntax continue to work.

History separates whether an automation ran, whether its result was delivered, and whether the whole request completed. Work genuinely missed during a restart or clock change can return without reviving completed or retired jobs, and connected tools keep only the authority captured when the automation was created or reauthorized, checked against current policy and availability each time it runs.

<AccordionGroup>

<Accordion title="Creating and managing automations">

Automations is now the user-facing name in the agent tool, Control UI, command line, and docs, while `openclaw automations` offers the same command family as `openclaw cron`. The old command, `/cron` route, `cron.*` settings and RPC names, schedule expressions, identifiers, and stored jobs continue to work.

The Control UI is the fullest place to search, filter, create, clone, inspect, edit, run, pause, and remove automations, including advanced delivery and failure routing. iOS and Android expose the fields and actions each client supports, Android changes require administrator scope while read-scoped connections remain inspection-only, and script automations remain visible but read-only on clients that cannot replace their payload.

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

**Improvements**

- Safe cron job management on Android [#102997](https://github.com/openclaw/openclaw/pull/102997)
- Redesign scheduled tasks as the Automations workspace [#104251](https://github.com/openclaw/openclaw/pull/104251)
- Add cron starter ideas and immediate first runs [#104761](https://github.com/openclaw/openclaw/pull/104761)
- Redesign the Automations page as a full-width dashboard [#105174](https://github.com/openclaw/openclaw/pull/105174)
- Redesign the Control UI automation editor [#105254](https://github.com/openclaw/openclaw/pull/105254)
- Streamline the Automations page for daily use [#106044](https://github.com/openclaw/openclaw/pull/106044)
- Add native mobile Automations management [#106355](https://github.com/openclaw/openclaw/pull/106355)
- Add the `openclaw automations` CLI alias [#114854](https://github.com/openclaw/openclaw/pull/114854)
- Group automation and show live status in Activity [#125981](https://github.com/openclaw/openclaw/pull/125981)
- Make the Automations list easier to scan on desktop and mobile [#127198](https://github.com/openclaw/openclaw/pull/127198)
- feat: offer to turn a repeated job into a scheduled automation [#130120](https://github.com/openclaw/openclaw/pull/130120)
- Clearer Cron Jobs and Tasks navigation and status summaries [#103122](https://github.com/openclaw/openclaw/pull/103122)
- Rename the scheduler agent tool to automations [#114841](https://github.com/openclaw/openclaw/pull/114841)
- Rename agent and user scheduler wording to Automations [#114852](https://github.com/openclaw/openclaw/pull/114852)
- Use Automations consistently throughout the Control UI [#114853](https://github.com/openclaw/openclaw/pull/114853)
- Derive cron timezone suggestions from the browser [#115973](https://github.com/openclaw/openclaw/pull/115973)
- Consolidate Automations add and update schemas [#121645](https://github.com/openclaw/openclaw/pull/121645)
- Edit and clear automation display names from the CLI [#122702](https://github.com/openclaw/openclaw/pull/122702)
- Add Asia/Shanghai to Cron timezone suggestions [#65936](https://github.com/openclaw/openclaw/pull/65936)
- Highlight read-only automation scripts in Control UI [#113632](https://github.com/openclaw/openclaw/pull/113632)
- Show saved automation descriptions in the Cron dashboard [#118593](https://github.com/openclaw/openclaw/pull/118593)
- Make cron JSON help match actual command output [#124903](https://github.com/openclaw/openclaw/pull/124903)
- Show starter automations only for empty inventories [#125631](https://github.com/openclaw/openclaw/pull/125631)
- Expose all automation schedule filters [#126962](https://github.com/openclaw/openclaw/pull/126962)
- perf(cron): batch list output [#128191](https://github.com/openclaw/openclaw/pull/128191)
- Explain how to find disabled cron jobs [#78139](https://github.com/openclaw/openclaw/pull/78139)

**Bug fixes**

- Show script automations across user clients [#112195](https://github.com/openclaw/openclaw/pull/112195)
- Preserve advanced delivery routes when cloning automations [#117909](https://github.com/openclaw/openclaw/pull/117909)
- Keep cron list columns aligned with Unicode [#103889](https://github.com/openclaw/openclaw/pull/103889)
- Prevent Cron edits from disappearing during save [#105421](https://github.com/openclaw/openclaw/pull/105421)
- Fix blank Account IDs in Control UI cron delivery [#105762](https://github.com/openclaw/openclaw/pull/105762)
- Explain why automation runs do not start [#105858](https://github.com/openclaw/openclaw/pull/105858)
- Preserve second-based automation intervals when editing [#110034](https://github.com/openclaw/openclaw/pull/110034)
- Trim cron job IDs before exact Gateway lookup [#110849](https://github.com/openclaw/openclaw/pull/110849)
- List every cron job from one consistent Gateway snapshot [#113805](https://github.com/openclaw/openclaw/pull/113805)
- Keep paginated scheduled jobs on one snapshot [#121084](https://github.com/openclaw/openclaw/pull/121084)
- Show the actual selected values in Automations [#121811](https://github.com/openclaw/openclaw/pull/121811)
- Keep automation ownership when viewing all agents [#123381](https://github.com/openclaw/openclaw/pull/123381)
- Accept local port options across automations [#125474](https://github.com/openclaw/openclaw/pull/125474)
- Preserve Automation edits, run feedback, and local state [#125698](https://github.com/openclaw/openclaw/pull/125698)
- Keep Automation conflict recovery attached under active filters [#125782](https://github.com/openclaw/openclaw/pull/125782)
- Accessible Automations task rows [#127252](https://github.com/openclaw/openclaw/pull/127252)
- fix: automation runs appear in creator activity [#128951](https://github.com/openclaw/openclaw/pull/128951)
- fix(cli): render cron edit JSON failures [#129022](https://github.com/openclaw/openclaw/pull/129022)
- fix(cli): hide banners for implicit JSON output [#129204](https://github.com/openclaw/openclaw/pull/129204)
- fix: agent-created automations appear under the session creator [#129371](https://github.com/openclaw/openclaw/pull/129371)
- fix(ui): automation actions fail and schedule changes unexpectedly [#129469](https://github.com/openclaw/openclaw/pull/129469)
- fix(agents): stop suggesting unavailable automation tools [#129953](https://github.com/openclaw/openclaw/pull/129953)
- refactor(macos): automation summaries as hosted cards with clickable job rows [#130502](https://github.com/openclaw/openclaw/pull/130502)
- Remove missing-agent warnings from command cron jobs [#112043](https://github.com/openclaw/openclaw/pull/112043)
- Keep paused automations after scheduled jobs [#113745](https://github.com/openclaw/openclaw/pull/113745)
- Correct Doctor warnings for automation jobs stored in SQLite [#116769](https://github.com/openclaw/openclaw/pull/116769)
- Align cron list ordering and display-name search [#116834](https://github.com/openclaw/openclaw/pull/116834)
- Fix rounded cron schedule durations [#118280](https://github.com/openclaw/openclaw/pull/118280)
- Require decimal cron scratch revisions [#119518](https://github.com/openclaw/openclaw/pull/119518)
- Reject blank cron routing values during edits [#119879](https://github.com/openclaw/openclaw/pull/119879)
- Reject blank cron model or thinking flags combined with clear flags [#119894](https://github.com/openclaw/openclaw/pull/119894)
- fix(automations): stop offering rejected agent retargets [#121100](https://github.com/openclaw/openclaw/pull/121100)
- Clear saved automation destinations in Control UI [#123171](https://github.com/openclaw/openclaw/pull/123171)
- Give missing automations clear recovery guidance [#124663](https://github.com/openclaw/openclaw/pull/124663)
- fix(cli): keep automation JSON clean with parent connection options [#128343](https://github.com/openclaw/openclaw/pull/128343)

**Documentation**

- Rename scheduler documentation to Automations [#114855](https://github.com/openclaw/openclaw/pull/114855)

</details>

</Accordion>

<Accordion title="Schedules and runs">

An owner can turn the current conversation into a `/loop` or eligible reminder that checks a small amount of recent context when it runs and returns one final answer to the same chat. It starts as a fresh run rather than continuing the original transcript, and work created without a conversation stays isolated.

Recurring schedules, one-time jobs, manual starts, queued work, restart catch-up, on-exit work, commands, and bounded scripts now share one configured capacity limit. Waiting work starts as room becomes available, while successful scripts can retain a small amount of state, notify a destination, wake the main conversation, or ask to be checked again later. Scripts still have time, tool-call, pacing, and state limits, and can be disabled entirely.

Force runs and edits no longer pull recurring work away from its natural schedule. Timezone-aware schedules skip local times that never occur, choose the first real occurrence when a local time repeats, and continue to respect explicit offsets after a restart.

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

**Improvements**

- Let cron jobs choose their next check within operator bounds [#110978](https://github.com/openclaw/openclaw/pull/110978)
- Add headless script payloads to cron jobs [#111112](https://github.com/openclaw/openclaw/pull/111112)
- Add conversation-bound scheduling and `/loop` [#114328](https://github.com/openclaw/openclaw/pull/114328)
- Cron jobs use free capacity across timer ticks [#119195](https://github.com/openclaw/openclaw/pull/119195)
- perf(cron): summarize timer schedule in one pass [#127495](https://github.com/openclaw/openclaw/pull/127495)
- improve(cron): reuse resolved schedule timezone [AI] [#127311](https://github.com/openclaw/openclaw/pull/127311)
- perf(cron): skip history checks for future jobs [#128048](https://github.com/openclaw/openclaw/pull/128048)

**Bug fixes**

- Enforce one cron concurrency limit across every trigger [#103323](https://github.com/openclaw/openclaw/pull/103323)
- Keep recurring cron cadence stable across force runs and edits [#111331](https://github.com/openclaw/openclaw/pull/111331)
- Reject malformed Code Mode cron scripts before saving [#118100](https://github.com/openclaw/openclaw/pull/118100)
- Correct cron scheduling across timezone transitions [#118712](https://github.com/openclaw/openclaw/pull/118712)
- Stop active cron runs when jobs are removed or disabled [#123437](https://github.com/openclaw/openclaw/pull/123437)
- Isolate commitment extraction by agent [#104426](https://github.com/openclaw/openclaw/pull/104426)
- Keep manual cron runs alive after their RPC returns [#104595](https://github.com/openclaw/openclaw/pull/104595)
- Retry one-shot cron session-claim races [#107236](https://github.com/openclaw/openclaw/pull/107236)
- Validate recurring schedule intervals exactly [#107480](https://github.com/openclaw/openclaw/pull/107480)
- Prevent completed cron work from replaying after claim conflicts [#108682](https://github.com/openclaw/openclaw/pull/108682)
- Honor cron script limits and permanent failures [#112415](https://github.com/openclaw/openclaw/pull/112415)
- Harden cron pacing, on-exit jobs, and shutdown [#112766](https://github.com/openclaw/openclaw/pull/112766)
- Stop retrying scheduled jobs after permanent billing failures [#114113](https://github.com/openclaw/openclaw/pull/114113)
- Bind DM-created cron jobs to the real conversation [#114421](https://github.com/openclaw/openclaw/pull/114421)
- Give current-bound cron runs recent conversation context [#114455](https://github.com/openclaw/openclaw/pull/114455)
- Prevent false cron failures while execution lanes are busy [#114512](https://github.com/openclaw/openclaw/pull/114512)
- Prevent cron and Workboard lifecycle races [#114674](https://github.com/openclaw/openclaw/pull/114674)
- Stop stalled scheduled-task fallbacks across all execution phases [#114815](https://github.com/openclaw/openclaw/pull/114815)
- Allow no-timeout cron jobs in Control UI [#115090](https://github.com/openclaw/openclaw/pull/115090)
- Protect scheduled-run sessions during model setup [#115804](https://github.com/openclaw/openclaw/pull/115804)
- Honor timezones and end-of-day values in one-shot cron schedules [#117969](https://github.com/openclaw/openclaw/pull/117969)
- Honor time zones and first DST occurrences in one-shot cron schedules [#118297](https://github.com/openclaw/openclaw/pull/118297)
- Keep cold scheduled turns from blocking the Gateway [#123368](https://github.com/openclaw/openclaw/pull/123368)
- Keep explicit-agent cron jobs running without a default agent [#123516](https://github.com/openclaw/openclaw/pull/123516)
- Keep agent-less schedules running after adding an agent [#123914](https://github.com/openclaw/openclaw/pull/123914)
- Stop retrying permanent cron command failures [#126763](https://github.com/openclaw/openclaw/pull/126763)
- Return current-session cron results to the originating chat [#126860](https://github.com/openclaw/openclaw/pull/126860)
- refactor(cron): centralize automation mutation options [#128373](https://github.com/openclaw/openclaw/pull/128373)
- fix(cron): prevent script timeouts when system clock changes [#130238](https://github.com/openclaw/openclaw/pull/130238)
- Preserve script worker timeouts across clock changes [#130408](https://github.com/openclaw/openclaw/pull/130408)
- Align isolated cron child-model precedence with native spawning [#58823](https://github.com/openclaw/openclaw/pull/58823)
- Let isolated cron setup use the configured timeout [#93914](https://github.com/openclaw/openclaw/pull/93914)
- Stabilize prompt caching across isolated cron runs [#96686](https://github.com/openclaw/openclaw/pull/96686)
- Reject malformed cron command environment maps instead of dropping them [#106100](https://github.com/openclaw/openclaw/pull/106100)
- Close stalled local-provider sockets during cron preflight [#114540](https://github.com/openclaw/openclaw/pull/114540)
- QQBot reminders honor the Gateway timezone [#116294](https://github.com/openclaw/openclaw/pull/116294)
- Retry Cron jobs after interrupted model streams [#118130](https://github.com/openclaw/openclaw/pull/118130)
- Reject unsupported generic cron timeout edits [#119899](https://github.com/openclaw/openclaw/pull/119899)
- Retry on-exit Cron watchers after transient supervisor failures [#120023](https://github.com/openclaw/openclaw/pull/120023)
- Reject blank cron command working directories locally [#121535](https://github.com/openclaw/openclaw/pull/121535)
- fix(agents): prevent false reminder warnings after compaction [#128581](https://github.com/openclaw/openclaw/pull/128581)
- fix(cron): recurring automations run too early after interval edits [#128893](https://github.com/openclaw/openclaw/pull/128893)
- fix(cron): reject generic timeouts for script payloads [#129407](https://github.com/openclaw/openclaw/pull/129407)
- fix(cron): prevent run waits from failing after clock changes [#129805](https://github.com/openclaw/openclaw/pull/129805)

**Documentation**

- Recommend lighter models for routine cron jobs [#125000](https://github.com/openclaw/openclaw/pull/125000)

</details>

</Accordion>

<Accordion title="Triggers and connected tools">

An automation can now wait for a condition or monitored event stream and run when something changes. Conditions can be created, filtered, edited, and inspected in the Control UI, are checked before they are saved, and record checks and matches without creating a run for every non-match. Stream schedules are created through the command line or agent and remain read-only in the Control UI, with bounded buffering, batching, and restart backoff. Triggers can still be disabled entirely, and condition intervals must be at least 30 seconds.

New or reauthorized Codex jobs can keep the app permissions and eligible connected-tool access they were created with across restarts. That captured authority is a ceiling checked on every run against current accounts, configuration, policy, approvals, and availability. Tools requiring someone present to approve them stay excluded, existing limits do not expand automatically, and some older jobs need a one-time edit or reauthorization before they can retain this access.

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

**Improvements**

- Let Claw packages own scheduled jobs [#102383](https://github.com/openclaw/openclaw/pull/102383)
- Add supervised stream sources to cron schedules [#112387](https://github.com/openclaw/openclaw/pull/112387)
- Preserve Codex app access for scheduled automations [#121859](https://github.com/openclaw/openclaw/pull/121859)
- Enable automation triggers by default [#125025](https://github.com/openclaw/openclaw/pull/125025)
- Manage automation condition triggers in Control UI [#126534](https://github.com/openclaw/openclaw/pull/126534)
- Add a cron reconciliation lifecycle hook for plugins [#104191](https://github.com/openclaw/openclaw/pull/104191)
- Improve unattended cron results and watcher guidance [#110949](https://github.com/openclaw/openclaw/pull/110949)
- Persist explicit tool authority on new scheduled jobs [#112483](https://github.com/openclaw/openclaw/pull/112483)

**Bug fixes**

- Preserve authorized tools for senderless scheduled runs [#112661](https://github.com/openclaw/openclaw/pull/112661)
- Restore configured MCP tools in scheduled Codex turns [#120366](https://github.com/openclaw/openclaw/pull/120366)
- Restore Gateway tools in scheduled agent runs [#126640](https://github.com/openclaw/openclaw/pull/126640)
- Notify plugins when cron wake times change [#103647](https://github.com/openclaw/openclaw/pull/103647)
- Keep accepted hook agent runs alive after the response [#104686](https://github.com/openclaw/openclaw/pull/104686)
- Bound agent-hook runner admission [#104712](https://github.com/openclaw/openclaw/pull/104712)
- Make agent-authored cron condition watchers reliable [#104787](https://github.com/openclaw/openclaw/pull/104787)
- Preserve recurring plugin-scheduled jobs through registry churn [#107752](https://github.com/openclaw/openclaw/pull/107752)
- Recognize auto-detected Brave search in isolated cron preflight [#108636](https://github.com/openclaw/openclaw/pull/108636)
- Preserve bursts of same-session agent hooks [#110575](https://github.com/openclaw/openclaw/pull/110575)
- Preserve condition triggers in flattened cron requests [#110912](https://github.com/openclaw/openclaw/pull/110912)
- Initialize sessions for detached hook runs [#115765](https://github.com/openclaw/openclaw/pull/115765)
- Prevent cron saturation from starving hook dispatch [#116666](https://github.com/openclaw/openclaw/pull/116666)
- Align cron delivery guidance with available tools [#116908](https://github.com/openclaw/openclaw/pull/116908)
- Match Automations options to cron trigger settings [#122052](https://github.com/openclaw/openclaw/pull/122052)
- Prevent hook traffic from starving older scheduled work [#122764](https://github.com/openclaw/openclaw/pull/122764)
- Validate automation condition triggers before submission [#126718](https://github.com/openclaw/openclaw/pull/126718)
- Keep automation trigger controls aligned with the active scheduler [#126945](https://github.com/openclaw/openclaw/pull/126945)
- Reject invalid automation conditions before saving [#127004](https://github.com/openclaw/openclaw/pull/127004)
- fix(hooks): avoid false admission timeouts during runtime reload [#128975](https://github.com/openclaw/openclaw/pull/128975)
- perf(cron): carry the published plugin generation into hook/cron isolated runs [#130581](https://github.com/openclaw/openclaw/pull/130581)
- fix(cron): surface command prompt capability failures [#131123](https://github.com/openclaw/openclaw/pull/131123)
- Preserve tool calls in isolated announce cron jobs [#106596](https://github.com/openclaw/openclaw/pull/106596)
- Reload edited webhook transform modules without restarting [#107875](https://github.com/openclaw/openclaw/pull/107875)
- Reject oversized cron trigger scripts during ingestion [#108130](https://github.com/openclaw/openclaw/pull/108130)
- Remove unchanged Claw cron jobs despite scheduler defaults [#113045](https://github.com/openclaw/openclaw/pull/113045)
- Allow Automations to explicitly run without tools [#113403](https://github.com/openclaw/openclaw/pull/113403)
- Align configured automation trigger status with the Advanced heading [#126784](https://github.com/openclaw/openclaw/pull/126784)
- fix: stop cron exec approval spam [#128031](https://github.com/openclaw/openclaw/pull/128031)
- fix: reject blank trigger scripts when creating automations [#129533](https://github.com/openclaw/openclaw/pull/129533)
- fix(cron): stop suggesting unavailable tools in scheduled runs [#130228](https://github.com/openclaw/openclaw/pull/130228)

**Documentation**

- Document safe external cron projection [#104227](https://github.com/openclaw/openclaw/pull/104227)
- Document Lobster workflow environment variables and step outputs [#108622](https://github.com/openclaw/openclaw/pull/108622)

</details>

</Accordion>

<Accordion title="Heartbeats and email watchers">

Heartbeat schedules are now managed as Automations, with failed work and alerts remaining visible and retryable and queued wakes surviving busy periods, handler replacement, and clock changes. Disabling Cron stops scheduled heartbeats while manual and event-driven wakes remain available. Existing installations using `HEARTBEAT.md` must run `openclaw doctor --fix` to migrate valid work because OpenClaw no longer reads that file at runtime.

Gmail can split an accepted batch into one isolated run per message when its mapping opts in, filter Sent and Draft mail, and keep forwarding through watcher restarts without overlapping renewals or repeated restart loops. Ordinary custom mappings keep their existing behavior, and expired-OAuth renewal health is unchanged.

The bundled IMAP watcher lets authenticated new mail from an existing mailbox start a restricted reader agent without exposing an HTTP hook. It is disabled by default and inbound-only, requires sender allowlisting and authentication, and cannot send or modify mail. After three temporary admission failures, the message is recorded as skipped.

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

**Improvements**

- Move heartbeat checklists into database-backed cron scratch [#112967](https://github.com/openclaw/openclaw/pull/112967)
- Convert heartbeat tasks into independent cron jobs [#113165](https://github.com/openclaw/openclaw/pull/113165)
- feat(plugins): inbound IMAP email trigger [#130230](https://github.com/openclaw/openclaw/pull/130230)
- Move heartbeat cadence into system-owned cron monitors [#112585](https://github.com/openclaw/openclaw/pull/112585)
- Require Doctor migration for legacy HEARTBEAT.md files [#113131](https://github.com/openclaw/openclaw/pull/113131)
- Make cron monitor rows authoritative for heartbeat cadence [#113135](https://github.com/openclaw/openclaw/pull/113135)
- refactor(cron): unify heartbeat automations under cron ownership [#129862](https://github.com/openclaw/openclaw/pull/129862)
- Carry silent heartbeat results into the next user turn [#95838](https://github.com/openclaw/openclaw/pull/95838)
- Explain heartbeat skips when delivery is disabled [#119689](https://github.com/openclaw/openclaw/pull/119689)
- refactor(agents): remove redundant heartbeat system prompts [#129642](https://github.com/openclaw/openclaw/pull/129642)

**Bug fixes**

- Preserve heartbeat failures after unsuccessful tool actions [#107735](https://github.com/openclaw/openclaw/pull/107735)
- Keep scheduled heartbeat tasks active for the model [#110193](https://github.com/openclaw/openclaw/pull/110193)
- Prevent duplicate cron wakes and stale heartbeat races [#114801](https://github.com/openclaw/openclaw/pull/114801)
- Prevent stalled schedules, duplicate cron runs, and lost heartbeats [#115979](https://github.com/openclaw/openclaw/pull/115979)
- Preserve cold automation wakes and bound notification cleanup [#117018](https://github.com/openclaw/openclaw/pull/117018)
- Deliver main-target cron reminders in the owning main session [#125198](https://github.com/openclaw/openclaw/pull/125198)
- Prevent heartbeat ownership from crashing gateway startup [#126232](https://github.com/openclaw/openclaw/pull/126232)
- fix(anthropic): keep automated heartbeats on subscription usage [#129513](https://github.com/openclaw/openclaw/pull/129513)
- fix(gateway): fan out batched gmail hook pushes and bound gmail hook bodies [#130002](https://github.com/openclaw/openclaw/pull/130002)
- Keep global-scope heartbeats with the selected agent [#102307](https://github.com/openclaw/openclaw/pull/102307)
- Validate heartbeat hours without an explicit cadence [#102319](https://github.com/openclaw/openclaw/pull/102319)
- Keep commitment heartbeats responsive with large queues [#105780](https://github.com/openclaw/openclaw/pull/105780)
- Run main-session cron jobs outside heartbeat active hours [#105830](https://github.com/openclaw/openclaw/pull/105830)
- Stop Gmail watcher respawn loops after bind failures [#106314](https://github.com/openclaw/openclaw/pull/106314)
- Prevent overlapping Gmail watch renewals [#108974](https://github.com/openclaw/openclaw/pull/108974)
- Stop cron jobs from blocking their own immediate wake [#109440](https://github.com/openclaw/openclaw/pull/109440)
- Retry authentication alerts after notification delivery fails [#110760](https://github.com/openclaw/openclaw/pull/110760)
- Let Gmail setup skip unsupported Python versions [#112983](https://github.com/openclaw/openclaw/pull/112983)
- Remove retired HEARTBEAT.md from agent file surfaces [#113621](https://github.com/openclaw/openclaw/pull/113621)
- Suppress reasoning-only heartbeat acknowledgements [#114454](https://github.com/openclaw/openclaw/pull/114454)
- Remove silent heartbeat reasoning turns from future context [#115522](https://github.com/openclaw/openclaw/pull/115522)
- Deliver heartbeat follow-ups when scheduled tasks run first [#115581](https://github.com/openclaw/openclaw/pull/115581)
- Route mapped wake hooks to configured sessions [#116109](https://github.com/openclaw/openclaw/pull/116109)
- Serialize heartbeat wakes and cancel active work on shutdown [#116351](https://github.com/openclaw/openclaw/pull/116351)
- Keep failed heartbeat work pending after alerts [#118488](https://github.com/openclaw/openclaw/pull/118488)
- Deliver structured heartbeat replies and clear owned recovery [#119655](https://github.com/openclaw/openclaw/pull/119655)
- Recover isolated heartbeats after session archival [#120314](https://github.com/openclaw/openclaw/pull/120314)
- Prevent heartbeat routing metadata from appearing as user input [#122075](https://github.com/openclaw/openclaw/pull/122075)
- fix(heartbeat): preserve cancelled agent turns [#122345](https://github.com/openclaw/openclaw/pull/122345)
- Deliver completed heartbeats in explicit multi-agent fleets [#123303](https://github.com/openclaw/openclaw/pull/123303)
- Apply heartbeat cadence changes on hot reload [#124410](https://github.com/openclaw/openclaw/pull/124410)
- Honor explicit HTTP hook agent and session targets [#125351](https://github.com/openclaw/openclaw/pull/125351)
- Heartbeat monitor wakes honor the configured session [#127153](https://github.com/openclaw/openclaw/pull/127153)
- fix(heartbeat): preserve cron wakes across clock jumps and handler replacement [#129214](https://github.com/openclaw/openclaw/pull/129214)
- fix(cron): deliver auto-disable warnings when heartbeats are disabled [#129560](https://github.com/openclaw/openclaw/pull/129560)
- fix(cron): immediate script reminders disappear when heartbeat cadence is disabled [#129936](https://github.com/openclaw/openclaw/pull/129936)
- fix(heartbeat): preserve wake outcomes and emit busy skips [#130806](https://github.com/openclaw/openclaw/pull/130806)
- fix(gmail): keep forwarding alive across watcher restarts [#130853](https://github.com/openclaw/openclaw/pull/130853)
- fix(hooks): run plugin triggers with HTTP hooks disabled [#131059](https://github.com/openclaw/openclaw/pull/131059)
- fix(imap): reject mail with missing DMARC alignment [#131060](https://github.com/openclaw/openclaw/pull/131060)
- fix(imap): retry reader admission during IDLE and reconnect [#131072](https://github.com/openclaw/openclaw/pull/131072)
- refactor(imap): consume the core identifier-authentication scale [#131178](https://github.com/openclaw/openclaw/pull/131178)
- Suppress silent acknowledgements from async command completions [#73785](https://github.com/openclaw/openclaw/pull/73785)
- Bound HEARTBEAT.md reads and warn on oversized files [#101775](https://github.com/openclaw/openclaw/pull/101775)
- Stop ntfy auth notifications from hanging the monitor [#108650](https://github.com/openclaw/openclaw/pull/108650)
- Clean up Gmail watcher helper processes on shutdown [#112452](https://github.com/openclaw/openclaw/pull/112452)
- Honor unlimited timeouts for heartbeat runs [#119297](https://github.com/openclaw/openclaw/pull/119297)
- Reserve the migrated heartbeat-task namespace [#123729](https://github.com/openclaw/openclaw/pull/123729)
- Show quiet-hours heartbeat skips in status [#124542](https://github.com/openclaw/openclaw/pull/124542)
- Report heartbeat responses as accepted before post-turn handling [#125207](https://github.com/openclaw/openclaw/pull/125207)
- Report the heartbeat cadence that is actually active [#126869](https://github.com/openclaw/openclaw/pull/126869)
- fix(heartbeat): deliver manual wakes when recurring cadence is disabled [#129836](https://github.com/openclaw/openclaw/pull/129836)
- Filter sent mail and drafts from Gmail hooks [#56720](https://github.com/openclaw/openclaw/pull/56720)
- Keep sub-minute heartbeats within active hours [#96684](https://github.com/openclaw/openclaw/pull/96684)

**Documentation**

- Remove retired heartbeat options from documentation [#113455](https://github.com/openclaw/openclaw/pull/113455)
- Remove obsolete heartbeat skip paths and guidance [#124385](https://github.com/openclaw/openclaw/pull/124385)

</details>

</Accordion>

<Accordion title="History, alerts, and delivery">

Automation history now treats running the work, delivering its result, and completing the whole request as separate facts. A job can execute successfully and still say `not-delivered` when default announce delivery fails, while explicitly required delivery can fail `cron run --wait` without rerunning work that already completed. Intentional suppression is not a failure, primary webhooks record accepted or failed outcomes before finalization, and secondary completion webhooks remain detached fan-out.

History can show duration, token totals, cache counters, condition checks and fires, delivery traces, cancellation or failure reasons, and direct Inspect links from eligible visible notifications. Inspect links require `gateway.publicOrigin`, historical rows may not have every optional counter, and condition activity belongs to the job's history rather than the global feed.

Failure alerts use configurable routes, thresholds, and cooldowns, with route-backed alerts defaulting to two consecutive failures and a one-hour cooldown. Recurring `cron` or `every` jobs disable themselves after ten consecutive execution failures and explain how to re-enable them, while delivery-only failures do not advance that streak and a successful run or manual re-enable resets it.

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

**Improvements**

- Auto-disable repeatedly failing recurring automations [#118113](https://github.com/openclaw/openclaw/pull/118113)
- feat(cron): link chat notifications to Control UI run inspection [#130049](https://github.com/openclaw/openclaw/pull/130049)
- Show conditional automation activity in run history [#127200](https://github.com/openclaw/openclaw/pull/127200)
- Show the original run time in delayed cron failure alerts [#80246](https://github.com/openclaw/openclaw/pull/80246)

**Bug fixes**

- Prevent cron and Workboard execution races [#114808](https://github.com/openclaw/openclaw/pull/114808)
- Deliver scheduled child results when parents emit no text [#117308](https://github.com/openclaw/openclaw/pull/117308)
- Deliver cron webhooks and record their outcomes [#117783](https://github.com/openclaw/openclaw/pull/117783)
- Report required cron delivery failures as failed completion [#126164](https://github.com/openclaw/openclaw/pull/126164)
- Honor cron failure-alert thresholds and cooldowns [#126483](https://github.com/openclaw/openclaw/pull/126483)
- Surface failures when scheduled agent runs finish empty [#100229](https://github.com/openclaw/openclaw/pull/100229)
- Reject invalid cron failure-alert channels before saving [#103866](https://github.com/openclaw/openclaw/pull/103866)
- Let recovered cron runs use their final report [#104908](https://github.com/openclaw/openclaw/pull/104908)
- Separate cron execution status from delivery failures [#105215](https://github.com/openclaw/openclaw/pull/105215)
- Avoid duplicate retries for direct cron delivery [#105941](https://github.com/openclaw/openclaw/pull/105941)
- Let Cron failure-alert overrides be cleared [#108578](https://github.com/openclaw/openclaw/pull/108578)
- Keep cron running when its webhook secret is unavailable [#109739](https://github.com/openclaw/openclaw/pull/109739)
- Release cron webhook sockets after unread responses [#111236](https://github.com/openclaw/openclaw/pull/111236)
- Keep successful cron commands on schedule when delivery fails [#111345](https://github.com/openclaw/openclaw/pull/111345)
- Deliver global cron failure alerts to the right destination [#113737](https://github.com/openclaw/openclaw/pull/113737)
- Keep Automations run history matched to the current request [#113765](https://github.com/openclaw/openclaw/pull/113765)
- Deliver scheduled results after heartbeat acknowledgements [#113924](https://github.com/openclaw/openclaw/pull/113924)
- Finalize completed cron jobs without waiting for slower siblings [#114441](https://github.com/openclaw/openclaw/pull/114441)
- Fix cron delivery account selection and plan consistency [#114918](https://github.com/openclaw/openclaw/pull/114918)
- Bound cron alerts and continue heartbeat cleanup after failures [#114920](https://github.com/openclaw/openclaw/pull/114920)
- Deliver explicit cron failure alerts for best-effort jobs [#115762](https://github.com/openclaw/openclaw/pull/115762)
- Preserve cron timeout and cancellation reasons [#116566](https://github.com/openclaw/openclaw/pull/116566)
- Keep cron failure alerts in their configured thread [#116830](https://github.com/openclaw/openclaw/pull/116830)
- Preserve final outcomes for self-removing cron jobs [#116881](https://github.com/openclaw/openclaw/pull/116881)
- Reject disabled channel accounts when scheduling automations [#116899](https://github.com/openclaw/openclaw/pull/116899)
- Fix cron failure-alert routing and account ownership [#117765](https://github.com/openclaw/openclaw/pull/117765)
- Improve automation filter accessibility and focus [#118133](https://github.com/openclaw/openclaw/pull/118133)
- Send cron failure alerts only after outcomes are persisted [#118200](https://github.com/openclaw/openclaw/pull/118200)
- Publish cron auto-disable state only after persistence [#118384](https://github.com/openclaw/openclaw/pull/118384)
- Deliver cron child results after heartbeat-only parent replies [#118743](https://github.com/openclaw/openclaw/pull/118743)
- fix(cron): preserve tool failures after silent replies [#120056](https://github.com/openclaw/openclaw/pull/120056)
- Add one-click Codex re-login to expired automation alerts [#121067](https://github.com/openclaw/openclaw/pull/121067)
- Show actionable Code Mode MCP failures in cron history [#121796](https://github.com/openclaw/openclaw/pull/121796)
- Record exhausted stream failures before sending alerts [#122187](https://github.com/openclaw/openclaw/pull/122187)
- Alert when cron output delivery fails [#123237](https://github.com/openclaw/openclaw/pull/123237)
- Keep multi-agent automation delivery with its owning agent [#123283](https://github.com/openclaw/openclaw/pull/123283)
- Distinguish auto-disabled automations from paused jobs [#123769](https://github.com/openclaw/openclaw/pull/123769)
- Show skipped automation runs as failed tasks [#123787](https://github.com/openclaw/openclaw/pull/123787)
- Show cleaner, accurate Automation failure reasons [#124511](https://github.com/openclaw/openclaw/pull/124511)
- Honor cron job ownership during failure delivery [#124631](https://github.com/openclaw/openclaw/pull/124631)
- Prune terminal cron task history after seven days [#126095](https://github.com/openclaw/openclaw/pull/126095)
- Return final results for completed cron and CLI tasks [#127045](https://github.com/openclaw/openclaw/pull/127045)
- fix(cron): stop reporting suppressed scheduled messages as delivered [#128519](https://github.com/openclaw/openclaw/pull/128519)
- fix(cron): failure alerts silently switch to the wrong conversation [#129645](https://github.com/openclaw/openclaw/pull/129645)
- fix(cron): prevent dropped and duplicate failure alerts [#129908](https://github.com/openclaw/openclaw/pull/129908)
- fix(cron): preserve verified message delivery when an agent run later fails [#129974](https://github.com/openclaw/openclaw/pull/129974)
- fix(cron): persist delivery suppression reason and log strict failures [#130811](https://github.com/openclaw/openclaw/pull/130811)
- fix(hooks): report delivery failures after successful runs [#130926](https://github.com/openclaw/openclaw/pull/130926)
- Let intentionally silent scheduled runs succeed [#95725](https://github.com/openclaw/openclaw/pull/95725)
- Restore channel-based cron failure alerts [#102445](https://github.com/openclaw/openclaw/pull/102445)
- Preserve complete Unicode characters in cron diagnostics [#102624](https://github.com/openclaw/openclaw/pull/102624)
- Preserve valid Unicode in cron exec failure tails [#104385](https://github.com/openclaw/openclaw/pull/104385)
- Reject unsupported cron delivery flags with a clear error [#105910](https://github.com/openclaw/openclaw/pull/105910)
- Reject malformed cron delivery targets before scheduling [#106952](https://github.com/openclaw/openclaw/pull/106952)
- Show readable token counts and durations in cron run history [#108014](https://github.com/openclaw/openclaw/pull/108014)
- Stop reporting successful silent cron turns as errors [#114528](https://github.com/openclaw/openclaw/pull/114528)
- Preserve cron failure-alert account and thread routing [#116933](https://github.com/openclaw/openclaw/pull/116933)
- Link active cron tasks to their actual execution transcripts [#117679](https://github.com/openclaw/openclaw/pull/117679)
- Preserve additional cron delivery fields in the macOS editor [#118047](https://github.com/openclaw/openclaw/pull/118047)
- fix(cron): report a verified agent send instead of "not-requested" [#118260](https://github.com/openclaw/openclaw/pull/118260)
- Reject ambiguous multi-channel cron delivery at mutation time [#118272](https://github.com/openclaw/openclaw/pull/118272)
- Publish cron auto-disable notifications only after persistence [#118778](https://github.com/openclaw/openclaw/pull/118778)
- fix(cron): reject main-session chat delivery instead of silent drop [#119923](https://github.com/openclaw/openclaw/pull/119923)
- Reject invalid cron webhook URLs before Gateway calls [#121533](https://github.com/openclaw/openclaw/pull/121533)
- Retain agent-filtered Cron history after job deletion [#122791](https://github.com/openclaw/openclaw/pull/122791)
- Stop retrying permanent cron delivery rejections [#122821](https://github.com/openclaw/openclaw/pull/122821)
- Stop marking running automations as overdue [#123745](https://github.com/openclaw/openclaw/pull/123745)
- Finalize direct cron runs removed during execution [#124457](https://github.com/openclaw/openclaw/pull/124457)
- fix(cron): run history omits cache token counters, leaving token totals unexplainable [#124657](https://github.com/openclaw/openclaw/pull/124657)
- Add cron delivery traces to the public run-history type [#124856](https://github.com/openclaw/openclaw/pull/124856)
- Report missing automations instead of empty cron history [#125343](https://github.com/openclaw/openclaw/pull/125343)
- Warn when cron notifications reference removed agents [#126361](https://github.com/openclaw/openclaw/pull/126361)
- Show safe automation failure details in chat alerts [#126384](https://github.com/openclaw/openclaw/pull/126384)
- fix(macos): keep Cron run history matched to the selected job [#127266](https://github.com/openclaw/openclaw/pull/127266)
- fix(ui): keep run history dropdown text consistent across devices [#127443](https://github.com/openclaw/openclaw/pull/127443)
- fix(cron): preserve failure alert routes across channel aliases [#128280](https://github.com/openclaw/openclaw/pull/128280)
- fix(cron): scheduled delivery failures are shown as success [#129160](https://github.com/openclaw/openclaw/pull/129160)
- fix(cron): send completion webhooks for failed automation runs [#129247](https://github.com/openclaw/openclaw/pull/129247)
- fix(cron): cancellation reason survives late delivery finalization [#129331](https://github.com/openclaw/openclaw/pull/129331)
- fix(cron): show running status for active paused jobs [#129339](https://github.com/openclaw/openclaw/pull/129339)
- fix(cron): retain stale delivery suppression diagnostics [#129408](https://github.com/openclaw/openclaw/pull/129408)
- fix(cron): reject blank explicit Telegram thread IDs [#129841](https://github.com/openclaw/openclaw/pull/129841)
- Keep cron announcements focused on the recipient [#90836](https://github.com/openclaw/openclaw/pull/90836)
- Align scheduled-result delivery for current and named sessions [#99115](https://github.com/openclaw/openclaw/pull/99115)

**Documentation**

- Remove retired cron run-log settings from documentation [#106640](https://github.com/openclaw/openclaw/pull/106640)
- Clarify cron channel plugin IDs in help and docs [#124655](https://github.com/openclaw/openclaw/pull/124655)

</details>

</Accordion>

<Accordion title="Automations After a Restart">

Restart recovery now distinguishes work that was genuinely missed from work that already finished or no longer belongs to the current automation. Queued and deferred runs, rescheduled one-time reminders, and schedule times missed during a restart or clock change can return, while completed slots, deleted or retired jobs, old schedules, and work from a replaced scheduler stay retired.

Current edits, self-removal, and rescheduling are preserved during startup, concurrent scheduler work no longer overwrites sibling jobs, and damaged older rows remain available for Doctor. Legacy running markers remain interrupted because they cannot establish whether an outside side effect happened, so exactly-once execution in external systems remains outside the scheduler's recovery boundary.

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

**Improvements**

- Explain stale in-flight cron jobs in doctor [#98620](https://github.com/openclaw/openclaw/pull/98620)

**Bug fixes**

- Preserve queued cron jobs across Gateway restarts [#110159](https://github.com/openclaw/openclaw/pull/110159)
- Preserve cron job changes during startup catch-up [#110977](https://github.com/openclaw/openclaw/pull/110977)
- Preserve cron script state and suppress stale restart effects [#111292](https://github.com/openclaw/openclaw/pull/111292)
- Preserve rescheduled reminders after Gateway restart [#114677](https://github.com/openclaw/openclaw/pull/114677)
- Prevent cron and Workboard lifecycle races [#114744](https://github.com/openclaw/openclaw/pull/114744)
- Preserve scheduler state and truthful delivery outcomes [#116923](https://github.com/openclaw/openclaw/pull/116923)
- Keep cron jobs and malformed-job recovery atomic in SQLite [#117071](https://github.com/openclaw/openclaw/pull/117071)
- Prevent invalid cron timestamps from stranding jobs [#121394](https://github.com/openclaw/openclaw/pull/121394)
- Prevent completed cron slots from replaying after restart [#101998](https://github.com/openclaw/openclaw/pull/101998)
- Prevent duplicate cron runs after re-enable [#102255](https://github.com/openclaw/openclaw/pull/102255)
- Publish cron removals only after durable deletion [#104130](https://github.com/openclaw/openclaw/pull/104130)
- Keep cron continuation recovery active during suspend preparation [#104397](https://github.com/openclaw/openclaw/pull/104397)
- Preserve cron fast-mode session state [#105094](https://github.com/openclaw/openclaw/pull/105094)
- Back off cron session cleanup after storage failures [#105386](https://github.com/openclaw/openclaw/pull/105386)
- Prune stale cron-run descendant sessions [#105633](https://github.com/openclaw/openclaw/pull/105633)
- Prevent completed cron work from retrying after claim conflicts [#108778](https://github.com/openclaw/openclaw/pull/108778)
- Preserve deferred cron catch-up runs across restarts [#110351](https://github.com/openclaw/openclaw/pull/110351)
- Preserve browser tabs for persistent cron sessions [#113984](https://github.com/openclaw/openclaw/pull/113984)
- Prevent duplicate and lost scheduled deliveries [#114479](https://github.com/openclaw/openclaw/pull/114479)
- Preserve future one-shot cron jobs during manual runs [#114491](https://github.com/openclaw/openclaw/pull/114491)
- Preserve one-shot schedules edited during active runs [#114569](https://github.com/openclaw/openclaw/pull/114569)
- Protect recreated reminders from stale active runs [#114756](https://github.com/openclaw/openclaw/pull/114756)
- Prevent completed cron jobs from rerunning after restart [#114820](https://github.com/openclaw/openclaw/pull/114820)
- fix(cron): preserve active watched commands across Gateway reload [#115761](https://github.com/openclaw/openclaw/pull/115761)
- Stop edited cron schedules from replaying old slots [#115779](https://github.com/openclaw/openclaw/pull/115779)
- Replay cron jobs missed during subsecond Gateway restarts [#117797](https://github.com/openclaw/openclaw/pull/117797)
- Keep Cron shutdown tracking scoped to each run [#118393](https://github.com/openclaw/openclaw/pull/118393)
- Remove ghost sessions when cron jobs are deleted [#119520](https://github.com/openclaw/openclaw/pull/119520)
- Preserve cron run history when session retention is zero [#120213](https://github.com/openclaw/openclaw/pull/120213)
- Preserve one-shot cron behavior when replacing a trigger script [#120226](https://github.com/openclaw/openclaw/pull/120226)
- Keep cron running when notifications fail [#120266](https://github.com/openclaw/openclaw/pull/120266)
- fix(cron): avoid no-op writes and unbounded page copies [#120910](https://github.com/openclaw/openclaw/pull/120910)
- Remove cron scratch after durable job deletion [#121024](https://github.com/openclaw/openclaw/pull/121024)
- Keep automations runnable after queued runs are disabled [#123725](https://github.com/openclaw/openclaw/pull/123725)
- Stop cron reaper warning loops for deleted agents [#124566](https://github.com/openclaw/openclaw/pull/124566)
- Complete upgrades with legacy cron jobs [#124809](https://github.com/openclaw/openclaw/pull/124809)
- Clear retired cron trigger state when executables change [#126940](https://github.com/openclaw/openclaw/pull/126940)
- Wait for cron exit watchers before Gateway restart [#126963](https://github.com/openclaw/openclaw/pull/126963)
- fix(cron): prevent stale outcomes after same-millisecond restarts [#127003](https://github.com/openclaw/openclaw/pull/127003)
- fix(cron): Gateway shutdown hangs when the system clock changes [#128374](https://github.com/openclaw/openclaw/pull/128374)
- fix(cron): reset trigger state when once changes [#128495](https://github.com/openclaw/openclaw/pull/128495)
- fix(cron): fence stale execution generations [#128573](https://github.com/openclaw/openclaw/pull/128573)
- fix(cron): prevent retired scheduled jobs from running after Gateway restart [#128678](https://github.com/openclaw/openclaw/pull/128678)
- fix(cron): recover reminders missed across spring-forward gaps [#129478](https://github.com/openclaw/openclaw/pull/129478)
- Delete successful on-exit one-shot cron jobs [#104550](https://github.com/openclaw/openclaw/pull/104550)
- Clean up recurring jobs converted to one-time schedules [#110431](https://github.com/openclaw/openclaw/pull/110431)
- Recover cron jobs after backward clock changes [#111743](https://github.com/openclaw/openclaw/pull/111743)
- Preserve cron schedule edits during active runs [#114919](https://github.com/openclaw/openclaw/pull/114919)
- Remove stopped scheduler automation after failed shutdown [#115316](https://github.com/openclaw/openclaw/pull/115316)
- Release cron session admission after cleanup failures [#126413](https://github.com/openclaw/openclaw/pull/126413)
- fix(doctor): expose disabled in-flight automations [#128664](https://github.com/openclaw/openclaw/pull/128664)

**Documentation**

- Document Doctor's in-flight cron job warning [#99086](https://github.com/openclaw/openclaw/pull/99086)

</details>

</Accordion>

</AccordionGroup>

## Browser and Computer Use

OpenClaw can now use signed-in browser sessions through an isolated managed profile or the exact Chrome tabs you choose to share. On macOS, supported cookies can be imported locally or synced to a remote managed browser for an allowlist of sites you choose, while the official Chrome extension keeps live access scoped to shared tabs. Browser actions, downloads, and desktop input also stay attached to their intended tab, page state, and machine, with cancellation and timeouts reaching more of the local and remote work they own.

Computer Use can work with supported apps and windows on paired Macs and explicitly enabled Windows machines, and the Desktop panel can open the machine that owns a session. Control still requires the applicable pairing, policy, and operating-system permissions, view-only sessions reject input, and Linux control remains experimental.

<AccordionGroup>

<Accordion title="Browser setup">

On a Mac, you can explicitly copy compatible cookies from Chrome, Brave, Edge, or Chromium into an isolated managed browser after approving Keychain or Touch ID access. If that browser runs on another OpenClaw machine, a separate opt-in sync can send cookies once or continuously for only the sites you allow. Neither path copies local storage or IndexedDB, and device-bound sessions can still ask you to sign in again.

For a browser you already have open, the Apps page now points to the official Chrome extension and the command line can prepare its local connection. You decide which tabs to share, each shared tab can have its own copilot, and sending a page, supported document or thread, or selected text to the main conversation is a one-time handoff rather than continuing access to the rest of your browser.

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

**Improvements**

- Open macOS dashboard links in a sidebar browser [#102899](https://github.com/openclaw/openclaw/pull/102899)
- Add tabs to the macOS dashboard link browser [#103438](https://github.com/openclaw/openclaw/pull/103438)
- Import Chrome-family cookies into managed browser profiles [#104057](https://github.com/openclaw/openclaw/pull/104057)
- Add browser-login import to the macOS app [#104177](https://github.com/openclaw/openclaw/pull/104177)
- Replace macOS cookie-import alerts with a dashboard banner [#104591](https://github.com/openclaw/openclaw/pull/104591)
- Add secure per-tab Chrome copilot panels [#109817](https://github.com/openclaw/openclaw/pull/109817)
- Send pages to the main session from the Chrome extension [#111158](https://github.com/openclaw/openclaw/pull/111158)
- Add Puppeteer support to the Chrome extension relay [#117915](https://github.com/openclaw/openclaw/pull/117915)
- Make the Chrome Web Store the primary extension action [#123377](https://github.com/openclaw/openclaw/pull/123377)
- Sync Mac browser cookies to a remote Gateway profile [#123494](https://github.com/openclaw/openclaw/pull/123494)
- Open external links in the docked Control UI browser [#123912](https://github.com/openclaw/openclaw/pull/123912)
- Show managed Chrome graphics details in status and doctor [#104291](https://github.com/openclaw/openclaw/pull/104291)
- Preserve browser identity in direct CDP diagnostics [#104678](https://github.com/openclaw/openclaw/pull/104678)
- fix(browser): warn when Chrome extension version drifts after upgrades [#119641](https://github.com/openclaw/openclaw/pull/119641)

**Bug fixes**

- Support native bootstrap for the official Chrome Web Store extension [#124775](https://github.com/openclaw/openclaw/pull/124775)
- Fix Browser profiles with prototype-like names and custom state paths [#101694](https://github.com/openclaw/openclaw/pull/101694)
- Make browser profile guidance respect configured defaults [#102582](https://github.com/openclaw/openclaw/pull/102582)
- Preserve actionable browser no-display failures and headless recovery [#102946](https://github.com/openclaw/openclaw/pull/102946)
- Fix macOS dashboard tab reuse and reordering [#103464](https://github.com/openclaw/openclaw/pull/103464)
- Show the macOS cookie-import offer only when browsing [#106255](https://github.com/openclaw/openclaw/pull/106255)
- Open macOS dashboard links at a useful width [#107798](https://github.com/openclaw/openclaw/pull/107798)
- Detect Windows browsers when install roots are blank [#111256](https://github.com/openclaw/openclaw/pull/111256)
- fix(browser): detect selected profile executable consistently [#129394](https://github.com/openclaw/openclaw/pull/129394)
- Remove the gap above macOS link-browser tabs [#103469](https://github.com/openclaw/openclaw/pull/103469)
- Restore host-local browser profile administration [#104616](https://github.com/openclaw/openclaw/pull/104616)
- Skip unusable browsers during automatic discovery [#111951](https://github.com/openclaw/openclaw/pull/111951)
- Return a failing exit status for unhealthy Browser doctor reports [#116811](https://github.com/openclaw/openclaw/pull/116811)
- Resolve packaged Chrome extension assets in Browser Doctor [#126279](https://github.com/openclaw/openclaw/pull/126279)
- fix(browser): reject non-decimal --wait-ms during extension install [#130626](https://github.com/openclaw/openclaw/pull/130626)

**Documentation**

- Document macOS cookie sync to a remote browser [#123537](https://github.com/openclaw/openclaw/pull/123537)
- Correct Docker sandbox browser setup documentation [#115254](https://github.com/openclaw/openclaw/pull/115254)
- Document mcporter Chrome relay auto-detection [#118066](https://github.com/openclaw/openclaw/pull/118066)
- docs: declared local browser profiles must set cdpPort or cdpUrl [#129923](https://github.com/openclaw/openclaw/pull/129923)

</details>

</Accordion>

<Accordion title="Browsing and page actions">

Navigation now returns a compact fresh view of the page for the next action, and snapshot references stay aligned with the content that appears in the final bounded snapshot. Multi-action batches pause after moving to a new document or closing a page so the next step can use fresh state, while new tabs can open in the background and the chosen locale, timezone, and device settings remain attached to the controlled page.

Command-line users can run a repeatable JSON plan against one tab, keep ordered results, and choose whether a failure stops the batch or allows the remaining actions to finish. Page reading uses scoped snapshots or explicit evaluation inside the active agent, and cancelled or timed-out downloads stop without claiming a later request's file or publishing unwanted partial output. A download already in its final save can still finish.

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

**Improvements**

- Add batch browser actions to the CLI [#111457](https://github.com/openclaw/openclaw/pull/111457)
- Make browser batches and snapshots safer to continue [#113749](https://github.com/openclaw/openclaw/pull/113749)
- Add one-call Browser page question answering [#113861](https://github.com/openclaw/openclaw/pull/113861)
- Add scoped and structured browser extraction [#113938](https://github.com/openclaw/openclaw/pull/113938)
- Return compact page state after browser navigation [#114814](https://github.com/openclaw/openclaw/pull/114814)
- docs(browser): expose batch/doubleClick/scrollIntoView/labels in tool schema and docs [#111381](https://github.com/openclaw/openclaw/pull/111381)
- Remove hidden model-backed Browser extraction [#120101](https://github.com/openclaw/openclaw/pull/120101)
- improve(browser): speed up repeated DOM snapshot finalization [#128036](https://github.com/openclaw/openclaw/pull/128036)

**Bug fixes**

- Let sequential browser actions finish within their budget [#104659](https://github.com/openclaw/openclaw/pull/104659)
- Enforce final size budgets for browser role snapshots [#104689](https://github.com/openclaw/openclaw/pull/104689)
- Open agent browser tabs without stealing focus [#105356](https://github.com/openclaw/openclaw/pull/105356)
- Preserve browser locale, timezone, and device overrides [#119695](https://github.com/openclaw/openclaw/pull/119695)
- Stop managed browser uploads from firing duplicate events [#103777](https://github.com/openclaw/openclaw/pull/103777)
- Refresh browser targets after guarded actions [#104094](https://github.com/openclaw/openclaw/pull/104094)
- Make browser file chooser uploads request-owned [#105151](https://github.com/openclaw/openclaw/pull/105151)
- fix(browser): don't steal focus on headed screenshot captures [#105393](https://github.com/openclaw/openclaw/pull/105393)
- Recognize mixed-case media types in web fetch [#108230](https://github.com/openclaw/openclaw/pull/108230)
- Keep case-distinct web requests from sharing cached content [#111281](https://github.com/openclaw/openclaw/pull/111281)
- Speed up extraction of large style-heavy webpages [#115584](https://github.com/openclaw/openclaw/pull/115584)
- fix(browser): resolve agent dir for screenshot descriptions [#121941](https://github.com/openclaw/openclaw/pull/121941)
- Stop cancelled browser downloads from capturing later files [#124382](https://github.com/openclaw/openclaw/pull/124382)
- fix(ui): show browser inspection failures without attaching stale elements [#128263](https://github.com/openclaw/openclaw/pull/128263)
- fix(browser): stop downloads hanging after their timeout [#129899](https://github.com/openclaw/openclaw/pull/129899)
- fix(browser): restore new-element markers across snapshot requests [#130220](https://github.com/openclaw/openclaw/pull/130220)
- fix(browser): accept common keyboard aliases [#130401](https://github.com/openclaw/openclaw/pull/130401)
- fix(browser): preserve exact select option values [#130410](https://github.com/openclaw/openclaw/pull/130410)
- fix(browser): hidden selectors prematurely complete waits [#130508](https://github.com/openclaw/openclaw/pull/130508)
- fix(browser): preserve literal names and formatter-owned snapshot refs [#130599](https://github.com/openclaw/openclaw/pull/130599)
- fix(browser): make snapshot refs work with quoted labels and frames [#130623](https://github.com/openclaw/openclaw/pull/130623)
- fix(browser): stop reporting failed nested batches as successful [#130809](https://github.com/openclaw/openclaw/pull/130809)
- fix(browser): resolve unnamed role refs and initialize AX markers [#130881](https://github.com/openclaw/openclaw/pull/130881)
- fix(browser): click the first duplicate raw accessibility ref [#130929](https://github.com/openclaw/openclaw/pull/130929)
- fix: cancel browser downloads when saving the output fails [#131048](https://github.com/openclaw/openclaw/pull/131048)
- Normalize local browser request paths [#103727](https://github.com/openclaw/openclaw/pull/103727)
- Reject hexadecimal Browser click coordinates [#104440](https://github.com/openclaw/openclaw/pull/104440)
- Normalize Browser geolocation permission origins [#105092](https://github.com/openclaw/openclaw/pull/105092)
- Report the committed URL for newly opened browser tabs [#111374](https://github.com/openclaw/openclaw/pull/111374)
- Keep highlighted words intact in DuckDuckGo results [#111460](https://github.com/openclaw/openclaw/pull/111460)
- Prevent stale web fetches after User-Agent changes [#111806](https://github.com/openclaw/openclaw/pull/111806)
- Preserve the Browser tool output schema during lazy registration [#113925](https://github.com/openclaw/openclaw/pull/113925)
- fix(browser): bound batch action files [#115882](https://github.com/openclaw/openclaw/pull/115882)
- Allow page extraction in tab-bound Browser Copilot runs [#116779](https://github.com/openclaw/openclaw/pull/116779)
- Make browser screenshot sharing guidance capability-neutral [#125597](https://github.com/openclaw/openclaw/pull/125597)
- fix(browser): keep inspection state independent of error wording [#128625](https://github.com/openclaw/openclaw/pull/128625)
- fix(browser): stop cancelled downloads from publishing files [#128651](https://github.com/openclaw/openclaw/pull/128651)
- fix(browser): keep action URLs out of Gateway transport [#128870](https://github.com/openclaw/openclaw/pull/128870)

**Documentation**

- Clarify browser JSON flag placement [#103155](https://github.com/openclaw/openclaw/pull/103155)
- [AI-assisted] docs(browser): teach the code-mode global call, not the removed tools.call API [#128456](https://github.com/openclaw/openclaw/pull/128456)

</details>

</Accordion>

<Accordion title="Computer Use">

On a paired Mac, Computer Use can capture the desktop and work with supported apps, windows, and elements through pointer, keyboard, scroll, drag, and wait actions. Settings now shows the selected provider, Accessibility and Screen Recording state, and whether its supporting service is ready. Using those controls still requires pairing, the applicable command and tool policy, required arming, and the macOS permissions OpenClaw reports but cannot grant.

Explicitly enabled Windows machines now use the packaged Computer Use driver without a separately installed service. Linux uses the packaged route too and remains experimental, with complete live click-and-type behavior still unverified in this release. Codex Computer Use remains a separate macOS integration with its own readiness and recovery checks.

The Desktop panel can show the main OpenClaw machine, a Labs headless Linux desktop, or an explicitly enabled paired Mac, Windows, or Linux machine, and session buttons can open the computer that owns the work. Paired streaming is off by default, and view-only sessions keep keyboard, pointer, and clipboard input blocked.

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

**Improvements**

- Control paired Mac desktops with the computer tool [#102776](https://github.com/openclaw/openclaw/pull/102776)
- Add live readiness and recovery for Codex Computer Use [#103331](https://github.com/openclaw/openclaw/pull/103331)
- Let agents arrange the Control UI with a screen tool [#108737](https://github.com/openclaw/openclaw/pull/108737)
- Add experimental Windows and Linux computer control [#112267](https://github.com/openclaw/openclaw/pull/112267)
- Enable macOS Computer Control by default with clearer permission diagnostics [#115280](https://github.com/openclaw/openclaw/pull/115280)
- Replace the CUA daemon with the packaged Driver SDK [#117205](https://github.com/openclaw/openclaw/pull/117205)
- View the Gateway machine in the Desktop panel [#122545](https://github.com/openclaw/openclaw/pull/122545)
- Manage a headless Linux host desktop [#122677](https://github.com/openclaw/openclaw/pull/122677)
- View paired node desktops in the Control UI [#122724](https://github.com/openclaw/openclaw/pull/122724)
- Add fullscreen mode to the Desktop preview [#123278](https://github.com/openclaw/openclaw/pull/123278)
- Adopt Peekaboo's checked runtime for macOS Computer Control [#123420](https://github.com/openclaw/openclaw/pull/123420)
- Add background window and element control to the Windows and Linux computer tool [#123604](https://github.com/openclaw/openclaw/pull/123604)
- Add an embedded CUA computer-control provider to macOS [#123635](https://github.com/openclaw/openclaw/pull/123635)
- Add native Peekaboo support for computer.act v2 [#123801](https://github.com/openclaw/openclaw/pull/123801)
- Show Computer Control readiness in Settings [#124093](https://github.com/openclaw/openclaw/pull/124093)
- Update macOS Peekaboo to 3.9.0 [#104398](https://github.com/openclaw/openclaw/pull/104398)
- Gate Peekaboo Bridge on Computer Control [#106531](https://github.com/openclaw/openclaw/pull/106531)
- perf(computer): stop resending unchanged computer-use screenshots [#129924](https://github.com/openclaw/openclaw/pull/129924)
- Package a portable macOS elevation-host installer [#123675](https://github.com/openclaw/openclaw/pull/123675)

**Bug fixes**

- Restore Codex Computer Use with current ChatGPT desktop resources [#103470](https://github.com/openclaw/openclaw/pull/103470)
- Stop repeated Computer Use readiness stalls [#113393](https://github.com/openclaw/openclaw/pull/113393)
- Open each mobile session's own desktop [#123412](https://github.com/openclaw/openclaw/pull/123412)
- Verify CUA driver artifacts on Windows and Linux nodes [#123986](https://github.com/openclaw/openclaw/pull/123986)
- Fix macOS background computer use and add a live proof rig [#123991](https://github.com/openclaw/openclaw/pull/123991)
- Repair Computer Use driver verification and post-approval capabilities [#124128](https://github.com/openclaw/openclaw/pull/124128)
- Align computer-use reference lifecycles across providers [#124374](https://github.com/openclaw/openclaw/pull/124374)
- Restore desktop computer control when CUA is active [#124863](https://github.com/openclaw/openclaw/pull/124863)
- Refresh stale isolated Computer Use bundles [#126080](https://github.com/openclaw/openclaw/pull/126080)
- Unblock Codex Computer Use after installation [#126699](https://github.com/openclaw/openclaw/pull/126699)
- fix(gateway): restore view-only macOS desktop observation [#128306](https://github.com/openclaw/openclaw/pull/128306)
- Let Codex start with computer control enabled [#102944](https://github.com/openclaw/openclaw/pull/102944)
- Prevent stalled process inspection from blocking Codex Computer Use [#109091](https://github.com/openclaw/openclaw/pull/109091)
- Keep view-only Cloud Worker Desktops connected [#121256](https://github.com/openclaw/openclaw/pull/121256)
- Open the current session desktop directly [#122992](https://github.com/openclaw/openclaw/pull/122992)
- Make the macOS CUA driver handoff atomic [#123845](https://github.com/openclaw/openclaw/pull/123845)
- Initialize CUA resources on first use [#124156](https://github.com/openclaw/openclaw/pull/124156)
- Allow tested newer Codex Desktop app-servers [#125883](https://github.com/openclaw/openclaw/pull/125883)
- Resolve the ESM-only CUA driver during artifact checks [#126120](https://github.com/openclaw/openclaw/pull/126120)
- fix(codex): keep Computer Use working after desktop updates [#127778](https://github.com/openclaw/openclaw/pull/127778)
- fix(codex): restore Computer Use after marketplace source upgrades [#129551](https://github.com/openclaw/openclaw/pull/129551)
- Load the CUA computer driver on Windows and Linux nodes [#120169](https://github.com/openclaw/openclaw/pull/120169)
- Preserve legacy CUA driverPath compatibility [#120502](https://github.com/openclaw/openclaw/pull/120502)
- Accept noVNC extended clipboard framing [#121276](https://github.com/openclaw/openclaw/pull/121276)
- Pin the macOS companion to finalized Peekaboo 4.2.1 [#125208](https://github.com/openclaw/openclaw/pull/125208)
- Keep newer Codex Desktop app-servers eligible [#126450](https://github.com/openclaw/openclaw/pull/126450)
- Restore screen for exact tool allowlists [#126691](https://github.com/openclaw/openclaw/pull/126691)

**Documentation**

- Refresh native translations for Peekaboo Bridge guidance [#106543](https://github.com/openclaw/openclaw/pull/106543)
- Refresh cua-driver platform and MCP tool documentation [78b49f3](https://github.com/openclaw/openclaw/commit/78b49f3)
- Add cua-computer troubleshooting guidance [#112502](https://github.com/openclaw/openclaw/pull/112502)
- Fix the Windows and Linux Computer Use section link [#123892](https://github.com/openclaw/openclaw/pull/123892)
- Clarify the computer-use authorization boundary [#124355](https://github.com/openclaw/openclaw/pull/124355)
- Refresh release baselines and CUA Computer platform docs [#125586](https://github.com/openclaw/openclaw/pull/125586)

</details>

</Accordion>

<Accordion title="Remote screens and devices">

OpenClaw now keeps browser and computer work on the explicitly selected eligible paired machine. A disconnected, ambiguous, or ineligible selector returns an actionable error for that device, while unpinned automatic browser routing can still use the main machine when policy permits.

Browser uploads and downloads can move between the main machine and a remote Browser node without a shared filesystem, and completed downloads return as readable local files. Terminal uploads can place safely quoted remote paths into the active shell without pressing Enter. Transfer size and authorization limits remain in force, malformed screenshots and Canvas data stop before dispatch, and Android accessibility control remains an opt-in local foundation for third-party builds that a Gateway or agent cannot invoke yet.

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

**Improvements**

- Upload files directly into Control UI terminals [#107364](https://github.com/openclaw/openclaw/pull/107364)
- Add terminal upload progress, retry, and cancel controls [#107789](https://github.com/openclaw/openclaw/pull/107789)
- Select computer-use nodes by capability [#112107](https://github.com/openclaw/openclaw/pull/112107)
- Add an opt-in Android accessibility UI executor [#112232](https://github.com/openclaw/openclaw/pull/112232)

**Bug fixes**

- Restore Android Canvas presentation across the app [#103330](https://github.com/openclaw/openclaw/pull/103330)
- Restore scoped Gateway-hosted Canvas on macOS [#105336](https://github.com/openclaw/openclaw/pull/105336)
- Honor configured browser node pins across routes [#117087](https://github.com/openclaw/openclaw/pull/117087)
- Make browser node-host downloads usable from the Gateway [#103328](https://github.com/openclaw/openclaw/pull/103328)
- Resolve Unicode browser node display names consistently [#103548](https://github.com/openclaw/openclaw/pull/103548)
- Reject invalid Canvas A2UI JSONL before device dispatch [#103713](https://github.com/openclaw/openclaw/pull/103713)
- Preserve identity for approved local node commands [#103886](https://github.com/openclaw/openclaw/pull/103886)
- Stop advertising disabled browser proxies on headless nodes [#103894](https://github.com/openclaw/openclaw/pull/103894)
- Let approved commands run on macOS allowlist nodes [#104337](https://github.com/openclaw/openclaw/pull/104337)
- Reject oversized directory transfers during preflight [#106293](https://github.com/openclaw/openclaw/pull/106293)
- Make timed iOS reminders notify at their due time [#106376](https://github.com/openclaw/openclaw/pull/106376)
- Preserve startup keystrokes and harden remote terminal sessions [#107214](https://github.com/openclaw/openclaw/pull/107214)
- Keep embedded terminals connected during heavy output [#107348](https://github.com/openclaw/openclaw/pull/107348)
- Prevent computer control from targeting the wrong paired node [#112503](https://github.com/openclaw/openclaw/pull/112503)
- Make uploads work with remote browser nodes [#115291](https://github.com/openclaw/openclaw/pull/115291)
- Stop browser node discovery when a turn is cancelled [#124880](https://github.com/openclaw/openclaw/pull/124880)
- Restore static plugin commands on headless node hosts [#127043](https://github.com/openclaw/openclaw/pull/127043)
- Clarify malformed nodes invoke parameter errors [#101838](https://github.com/openclaw/openclaw/pull/101838)
- Return basename-only Agent Core file names on Windows [#102813](https://github.com/openclaw/openclaw/pull/102813)
- Reject malformed Canvas snapshot data [#108987](https://github.com/openclaw/openclaw/pull/108987)
- Deliver title-only and body-only node notifications [#113747](https://github.com/openclaw/openclaw/pull/113747)
- Reject malformed computer-use screenshots early [#114392](https://github.com/openclaw/openclaw/pull/114392)

**Documentation**

- Add a complete guide to iPhone HealthKit summaries [8a375c4](https://github.com/openclaw/openclaw/commit/8a375c4)
- Correct macOS node command documentation [#103878](https://github.com/openclaw/openclaw/pull/103878)
- Correct the system.which node examples [#103960](https://github.com/openclaw/openclaw/pull/103960)

</details>

</Accordion>

<Accordion title="Browser Targeting, Privacy, and Timeouts">

Tab handles, page references, screenshots, and desktop actions now remain bound to the tab, page, display, request, and provider that created them. Stale or ambiguous state stops with an error, cancellation and timeouts reach more of the local and remote work they own, and relay reconnects restore only tabs that are still shared.

Remote browser connections are validated and remain pinned to their configured endpoint, connection credentials are redacted on the supported paths, and page-controlled text enters model context as untrusted input. Browser and Canvas screenshots remain available to the inspecting agent but are no longer attached automatically to outbound replies. Cleanup stays limited to browsers and tabs OpenClaw owns, and older extension clients may need an upgrade or fresh pairing for the newer relay protections.

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

**Improvements**

- Add Browser Relay Authentication v2 [#120526](https://github.com/openclaw/openclaw/pull/120526)
- Allow one browser-tool retry after transient failures [#110607](https://github.com/openclaw/openclaw/pull/110607)
- Keep Browser upload cleanup lazy at Gateway startup [#126136](https://github.com/openclaw/openclaw/pull/126136)
- fix(browser): load Playwright runtime on demand [#127049](https://github.com/openclaw/openclaw/pull/127049)
- Diagnose web fetch proxy settings that remain inactive [#109778](https://github.com/openclaw/openclaw/pull/109778)

**Bug fixes**

- Protect credentials for authenticated remote browser connections [#103139](https://github.com/openclaw/openclaw/pull/103139)
- Prevent stale or replayed desktop actions [#103422](https://github.com/openclaw/openclaw/pull/103422)
- Prevent stale browser profile starts from resurrecting after cleanup [#104601](https://github.com/openclaw/openclaw/pull/104601)
- Keep browser tools usable when one shared tab hangs [#113921](https://github.com/openclaw/openclaw/pull/113921)
- Pin guarded Browser CDP sockets to validated endpoints [#114506](https://github.com/openclaw/openclaw/pull/114506)
- Protect Browser and Canvas observation privacy boundaries [#118775](https://github.com/openclaw/openclaw/pull/118775)
- Show browser pairing and tab-sharing failures [#119526](https://github.com/openclaw/openclaw/pull/119526)
- Harden Chrome extension relay pairing and tab consent [#120390](https://github.com/openclaw/openclaw/pull/120390)
- Classify Computer Use action risk before node dispatch [#124112](https://github.com/openclaw/openclaw/pull/124112)
- Cancel local browser actions with stopped agent turns [#124795](https://github.com/openclaw/openclaw/pull/124795)
- Keep strict CDP discovery bound to the configured browser [7d0f9de](https://github.com/openclaw/openclaw/commit/7d0f9de)
- Keep Node 24 browser actions alive through request handling [c0d99ed](https://github.com/openclaw/openclaw/commit/c0d99ed)
- Bound Chrome startup diagnostics without losing recovery hints [#101506](https://github.com/openclaw/openclaw/pull/101506)
- Keep browser tab actions limited to real page targets [#103115](https://github.com/openclaw/openclaw/pull/103115)
- Reject ambiguous browser tab references [#103119](https://github.com/openclaw/openclaw/pull/103119)
- Prevent browser actions from targeting the wrong tab [#103177](https://github.com/openclaw/openclaw/pull/103177)
- Honor evaluate timeouts for existing browser sessions [#103181](https://github.com/openclaw/openclaw/pull/103181)
- Keep Gateway alive when managed Chrome cannot start [#103243](https://github.com/openclaw/openclaw/pull/103243)
- Stop macOS computer typing when control is canceled [#103528](https://github.com/openclaw/openclaw/pull/103528)
- Expire stale Chrome MCP tab and snapshot handles after reconnect [#103576](https://github.com/openclaw/openclaw/pull/103576)
- Prevent stale browser handles from switching duplicate-URL tabs [#103816](https://github.com/openclaw/openclaw/pull/103816)
- Reject unsafe Browser mutations before parsing JSON [#104677](https://github.com/openclaw/openclaw/pull/104677)
- Apply Browser profile policy to tab URL redaction [#104715](https://github.com/openclaw/openclaw/pull/104715)
- Keep parallel agent node calls authenticated [#105143](https://github.com/openclaw/openclaw/pull/105143)
- Adopt browser tabs only after final policy validation [#105301](https://github.com/openclaw/openclaw/pull/105301)
- Recover Chrome relay connections stuck during WebSocket opening [#109114](https://github.com/openclaw/openclaw/pull/109114)
- Cancel browser tab discovery immediately [#109617](https://github.com/openclaw/openclaw/pull/109617)
- fix(browser): stop agent-launched managed Chrome [#109723](https://github.com/openclaw/openclaw/pull/109723)
- Clean up OpenClaw browser tabs after Gateway restart [#110797](https://github.com/openclaw/openclaw/pull/110797)
- Retire tracked tabs whose browser never returns [#111307](https://github.com/openclaw/openclaw/pull/111307)
- Close browser tabs after isolated agent runs [#113566](https://github.com/openclaw/openclaw/pull/113566)
- Prevent the browser copilot popup from hanging when a tab closes [#113744](https://github.com/openclaw/openclaw/pull/113744)
- Clean up failed browser navigation guards [#113753](https://github.com/openclaw/openclaw/pull/113753)
- Keep Chrome page shares within field limits [#113768](https://github.com/openclaw/openclaw/pull/113768)
- Keep stale Chrome copilot events out of active chat turns [#113781](https://github.com/openclaw/openclaw/pull/113781)
- Show page-share failures when the browser relay disconnects [#113803](https://github.com/openclaw/openclaw/pull/113803)
- Recover remote Browser nodes after startup failure [#113926](https://github.com/openclaw/openclaw/pull/113926)
- Fix remote Browser node timeouts and cancellation isolation [#114131](https://github.com/openclaw/openclaw/pull/114131)
- Restore managed browser snapshots behind a proxy [#114546](https://github.com/openclaw/openclaw/pull/114546)
- Avoid Chrome extension relay port collisions [#115592](https://github.com/openclaw/openclaw/pull/115592)
- Close browser probe connections after unread responses [#115675](https://github.com/openclaw/openclaw/pull/115675)
- Keep Tab Copilot working after extension reloads [#116784](https://github.com/openclaw/openclaw/pull/116784)
- Wake Browser page shares when periodic heartbeats are disabled [#116790](https://github.com/openclaw/openclaw/pull/116790)
- Bound browser snapshot depth on deeply nested pages [#119217](https://github.com/openclaw/openclaw/pull/119217)
- Honor browser navigation timeouts across both drivers [#119654](https://github.com/openclaw/openclaw/pull/119654)
- Reject malformed browser extension relay frames [#120283](https://github.com/openclaw/openclaw/pull/120283)
- fix(browser): cancel waiting profile operations promptly [#120796](https://github.com/openclaw/openclaw/pull/120796)
- Recover stalled Chrome Copilot Gateway connections [#120839](https://github.com/openclaw/openclaw/pull/120839)
- Attached Browser workers exit after CDP use [#122103](https://github.com/openclaw/openclaw/pull/122103)
- Keep embedded browser tabs aligned with the displayed page [#122128](https://github.com/openclaw/openclaw/pull/122128)
- Restore shared Chrome tabs after extension reconnects [#122177](https://github.com/openclaw/openclaw/pull/122177)
- fix(browser): honor explicit snapshot timeout [#124575](https://github.com/openclaw/openclaw/pull/124575)
- Bound browser and Canvas tool results [#125126](https://github.com/openclaw/openclaw/pull/125126)
- Clean up Browser relays during Gateway shutdown [#125176](https://github.com/openclaw/openclaw/pull/125176)
- Report Browser open navigation failures [#125743](https://github.com/openclaw/openclaw/pull/125743)
- Recover managed Chromium launches from Linux zombie locks [#125831](https://github.com/openclaw/openclaw/pull/125831)
- fix(browser): give a paired extension time to attach before declaring it offline [#127761](https://github.com/openclaw/openclaw/pull/127761)
- perf(browser): reduce cold status process scans [#128692](https://github.com/openclaw/openclaw/pull/128692)
- fix(browser): honor inherited timeouts across browser commands [#129176](https://github.com/openclaw/openclaw/pull/129176)
- fix(browser): honor canonical action execution deadlines [#130055](https://github.com/openclaw/openclaw/pull/130055)
- fix(browser): response body reads outlive their timeout [#130386](https://github.com/openclaw/openclaw/pull/130386)
- fix(browser): prove post-action target continuity before adopting a tab (#110884) [91888cf](https://github.com/openclaw/openclaw/commit/91888cf)
- Return errors for malformed browser relay frames [#102070](https://github.com/openclaw/openclaw/pull/102070)
- Keep remote CDP target discovery within its configured host [#102328](https://github.com/openclaw/openclaw/pull/102328)
- Keep Chrome error-message tails valid UTF-8 [#102543](https://github.com/openclaw/openclaw/pull/102543)
- Reject credential-bearing browser page URLs before dispatch [#102952](https://github.com/openclaw/openclaw/pull/102952)
- Reject malformed computer-tool numeric inputs [#103642](https://github.com/openclaw/openclaw/pull/103642)
- Reject invalid raw CDP tab targets before selecting them [#104129](https://github.com/openclaw/openclaw/pull/104129)
- Stop duplicate watch result errors after malformed JSON [#104293](https://github.com/openclaw/openclaw/pull/104293)
- Keep Chrome launch error hints Unicode-safe [#104603](https://github.com/openclaw/openclaw/pull/104603)
- Bound browser control requests with the configured timeout [#106497](https://github.com/openclaw/openclaw/pull/106497)
- Keep sandbox browser startup probes within the configured deadline [#108670](https://github.com/openclaw/openclaw/pull/108670)
- Cancel Playwright click-and-hold delays promptly [#109710](https://github.com/openclaw/openclaw/pull/109710)
- Reject malformed Firecrawl success envelopes [#111210](https://github.com/openclaw/openclaw/pull/111210)
- Keep web-search provider errors valid at Unicode truncation boundaries [#111327](https://github.com/openclaw/openclaw/pull/111327)
- Reject blank Tavily extract URLs locally [#111333](https://github.com/openclaw/openclaw/pull/111333)
- Stop stalled Google Docs shares from hanging indefinitely [#111633](https://github.com/openclaw/openclaw/pull/111633)
- Reject corrupted UTF-8 in Exa search responses [#111736](https://github.com/openclaw/openclaw/pull/111736)
- Accept explicit SearXNG search endpoint URLs [#113661](https://github.com/openclaw/openclaw/pull/113661)
- Prevent duplicate volatile browser tab closes [#114507](https://github.com/openclaw/openclaw/pull/114507)
- Cancel browser status probes when requests stop [#115534](https://github.com/openclaw/openclaw/pull/115534)
- Cancel stalled browser CDP handshakes promptly [#115805](https://github.com/openclaw/openclaw/pull/115805)
- Return the actual committed Browser trace path [#116702](https://github.com/openclaw/openclaw/pull/116702)
- Recover Browser Copilot state after failed Chrome writes [#116882](https://github.com/openclaw/openclaw/pull/116882)
- Reclaim stalled browser extension relay connections [#120806](https://github.com/openclaw/openclaw/pull/120806)
- Keep browser close results tied to the closed tab [#124064](https://github.com/openclaw/openclaw/pull/124064)
- Preserve Chrome tabs when the last-tab close is refused [#124449](https://github.com/openclaw/openclaw/pull/124449)
- Let the browser panel mount without ResizeObserver [#125480](https://github.com/openclaw/openclaw/pull/125480)
- fix(browser): cancel pending CDP endpoint discovery [#129410](https://github.com/openclaw/openclaw/pull/129410)
- fix(browser): stop hangs after modal dialog handling fails [#129459](https://github.com/openclaw/openclaw/pull/129459)
- fix(browser): preserve response-body timeout diagnostics [#129803](https://github.com/openclaw/openclaw/pull/129803)
- fix(browser): handle concurrent first-use extension pairing [#130832](https://github.com/openclaw/openclaw/pull/130832)
- Close browser tabs left behind by cancelled opens [#131125](https://github.com/openclaw/openclaw/pull/131125)

</details>

</Accordion>

</AccordionGroup>

## Plugins and Integrations

Admins can now browse, search, install, enable, disable, and remove plugins from the Control UI, while the same hub can install curated ClawHub skills and add vetted MCP connectors. Managed installs pause for source review where needed, roll failed changes back to a retryable state, and repair stale or incomplete records without throwing away healthy configuration. Plugin updates also keep work already in flight on the version it started with, then move later work to the replacement only after it loads successfully.

ClawHub installs carry the selected publisher, version, scan state, and source across desktop and mobile, MCP servers recover independently when a connection or catalog changes, and plugin authors get typed Gateway and SDK contracts for building against OpenClaw. Vendor-neutral Agent Plugins can bring skills and supported MCP servers together with scoped storage, giving integrations a clearer path from package to running system.

<AccordionGroup>

<Accordion title="Installing and managing plugins">

Admins can now browse and search installed plugins in the Control UI, see what each one provides, enable or disable it, remove external plugins, install curated ClawHub results, and add vetted MCP connectors. Read-only operators can inspect the same inventory, while advanced sources, updates, and configuration that the web form cannot safely represent remain available through the command line.

The first install from an arbitrary package, repository, archive, local path, or marketplace source stops for explicit review. A plugin that still needs setup can stay disabled, and a failed managed install rolls partial changes back so it can be retried normally. Repair can recover stale or incomplete install generations while preserving healthy configuration, with integrity or version drift still requiring review.

Plugin lists and diagnostics now distinguish disabled plugins, discovery or validation failures, active runtime failures, and background-service failures. Use `plugins doctor` for local discovery and configuration checks, and `openclaw health` for the plugin and service state of the running system. Some installs and removals still require a restart before the change becomes active.

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

**Improvements**

- Require acknowledgement for arbitrary plugin sources [#102197](https://github.com/openclaw/openclaw/pull/102197)
- Manage plugins and MCP connectors in the Control UI [#103176](https://github.com/openclaw/openclaw/pull/103176)
- Let Codex turns use approved workspace-directory plugins [#104188](https://github.com/openclaw/openclaw/pull/104188)
- Put plugin controls directly on cards and rows [#106040](https://github.com/openclaw/openclaw/pull/106040)
- Show plugin catalog artwork in Control UI [#109510](https://github.com/openclaw/openclaw/pull/109510)
- Add reviewed acknowledgement for install-policy warnings [#116489](https://github.com/openclaw/openclaw/pull/116489)
- Speed up every `openclaw plugins list` form [#117900](https://github.com/openclaw/openclaw/pull/117900)
- Make configured CLI help and status load much faster [#124562](https://github.com/openclaw/openclaw/pull/124562)
- Stabilize Plugins hub navigation and controls [#126061](https://github.com/openclaw/openclaw/pull/126061)
- Use trusted hosted metadata in plugin listings [#109629](https://github.com/openclaw/openclaw/pull/109629)
- Order Featured plugins by recency [#110273](https://github.com/openclaw/openclaw/pull/110273)
- Clarify Plugins navigation and align Settings controls [#110482](https://github.com/openclaw/openclaw/pull/110482)
- Speed up plugin listings with the current metadata snapshot [#115353](https://github.com/openclaw/openclaw/pull/115353)
- Speed up hook status commands through the Gateway [#118288](https://github.com/openclaw/openclaw/pull/118288)
- Speed up Doctor plugin contract checks [#120811](https://github.com/openclaw/openclaw/pull/120811)
- Speed up cold Telegram channel setup [#122955](https://github.com/openclaw/openclaw/pull/122955)
- refactor(plugins): separate consent mutation from inventory [#131146](https://github.com/openclaw/openclaw/pull/131146)
- Align plugin filter styling [#106168](https://github.com/openclaw/openclaw/pull/106168)
- Clarify MXC sandbox settings and warn on outbound network access [#110256](https://github.com/openclaw/openclaw/pull/110256)
- Add a canonical Plugins Discover URL [#115587](https://github.com/openclaw/openclaw/pull/115587)
- Speed plugin doctor and setup loading [#120876](https://github.com/openclaw/openclaw/pull/120876)
- Remove retired ACPX configuration keys [#120937](https://github.com/openclaw/openclaw/pull/120937)
- Defer rendering of offscreen plugin rows [#125585](https://github.com/openclaw/openclaw/pull/125585)
- Add troubleshooting steps to plugin compatibility warnings [#94019](https://github.com/openclaw/openclaw/pull/94019)

**Bug fixes**

- Block Git option injection in plugin and skill installs [#102398](https://github.com/openclaw/openclaw/pull/102398)
- Reduce plugin listing startup memory [#103132](https://github.com/openclaw/openclaw/pull/103132)
- Preserve healthy plugins when npm metadata checks fail [#107063](https://github.com/openclaw/openclaw/pull/107063)
- Recover managed npm plugins from incomplete lock metadata [#107294](https://github.com/openclaw/openclaw/pull/107294)
- Recover plugin lifecycle commands from stale managed installs [#107691](https://github.com/openclaw/openclaw/pull/107691)
- Load the active managed plugin generation after upgrades [#111141](https://github.com/openclaw/openclaw/pull/111141)
- Serialize plugin lifecycle changes and preserve setup-required installs [#112763](https://github.com/openclaw/openclaw/pull/112763)
- Report all executable calls in plugin security scans [#116222](https://github.com/openclaw/openclaw/pull/116222)
- Preserve selected-agent workspace plugins in management views [#117265](https://github.com/openclaw/openclaw/pull/117265)
- Preserve plugin install records during recovery [#121045](https://github.com/openclaw/openclaw/pull/121045)
- Keep multi-entry plugin packages consistent across their lifecycle [#121174](https://github.com/openclaw/openclaw/pull/121174)
- Authorize plugins from discovered Codex marketplaces [#122389](https://github.com/openclaw/openclaw/pull/122389)
- Reject blank skill credential values [#108848](https://github.com/openclaw/openclaw/pull/108848)
- Keep Control's Featured plugins aligned with trusted ClawHub curation [#109418](https://github.com/openclaw/openclaw/pull/109418)
- Report unreadable plugin manifests as permission failures [#110200](https://github.com/openclaw/openclaw/pull/110200)
- Make root and plugin CLI help exit cleanly [#111322](https://github.com/openclaw/openclaw/pull/111322)
- Honor configured plugin load paths during Doctor repair [#113200](https://github.com/openclaw/openclaw/pull/113200)
- Preserve plugin settings across compatibility IDs [#114521](https://github.com/openclaw/openclaw/pull/114521)
- Enforce supported plugin kinds before slot selection [#114537](https://github.com/openclaw/openclaw/pull/114537)
- Load the replacement npm plugin after reinstall [#114713](https://github.com/openclaw/openclaw/pull/114713)
- Keep valid plugins from being quarantined by stale npm metadata [#115610](https://github.com/openclaw/openclaw/pull/115610)
- Report corrupt curated marketplaces during Codex migration [#115865](https://github.com/openclaw/openclaw/pull/115865)
- Recover plugin installs from pnpm-only override syntax [#116245](https://github.com/openclaw/openclaw/pull/116245)
- Preserve Skills credentials and order configuration updates [#116749](https://github.com/openclaw/openclaw/pull/116749)
- Show actionable warnings in plugins doctor [#117357](https://github.com/openclaw/openclaw/pull/117357)
- Refresh the running Gateway after marketplace updates [#117724](https://github.com/openclaw/openclaw/pull/117724)
- Remove disabled plugins' owned channel configuration [#118127](https://github.com/openclaw/openclaw/pull/118127)
- Plugin updates preserve index policy and rollback safely [#119228](https://github.com/openclaw/openclaw/pull/119228)
- Return safe plugin-install warnings to administrators [#120783](https://github.com/openclaw/openclaw/pull/120783)
- Restore plugin configuration labels from manifests [#121329](https://github.com/openclaw/openclaw/pull/121329)
- Fix bundled plugin inventory and Talk voice configuration [#121354](https://github.com/openclaw/openclaw/pull/121354)
- fix(plugins): allow install when outgoing channel schema disagrees [#122984](https://github.com/openclaw/openclaw/pull/122984)
- Preserve managed ownership for deduplicated bundled plugins [#123063](https://github.com/openclaw/openclaw/pull/123063)
- Keep plugin inventory available without a system owner [#123378](https://github.com/openclaw/openclaw/pull/123378)
- Preserve newer-database errors during plugin inspection [#125493](https://github.com/openclaw/openclaw/pull/125493)
- fix(plugins): list MXC in the offline marketplace [#126211](https://github.com/openclaw/openclaw/pull/126211)
- Recover plugin catalog after transient startup failures [#126815](https://github.com/openclaw/openclaw/pull/126815)
- fix(ui): retire stale plugin lifecycle feedback [#127273](https://github.com/openclaw/openclaw/pull/127273)
- fix(plugins): report missing manifest instead of misleading id mismatch on install [#128527](https://github.com/openclaw/openclaw/pull/128527)
- fix(cli): render hooks report JSON failures [#128641](https://github.com/openclaw/openclaw/pull/128641)
- fix(cli): preserve active target in plugin install hints [#129283](https://github.com/openclaw/openclaw/pull/129283)
- fix(plugins): roll back managed npm install state on thrown failures [#130884](https://github.com/openclaw/openclaw/pull/130884)
- Refresh stale plugin registry for newly added extensions [#96080](https://github.com/openclaw/openclaw/pull/96080)
- Update plugin records without rewriting user config [#98422](https://github.com/openclaw/openclaw/pull/98422)
- Bound plugin manifest reads during deep security audits [#101773](https://github.com/openclaw/openclaw/pull/101773)
- Find global plugins correctly when home variables are blank [#102413](https://github.com/openclaw/openclaw/pull/102413)
- Prevent plugin update and uninstall from misreading prototype-named records [#102872](https://github.com/openclaw/openclaw/pull/102872)
- Honor Doctor's current install policy during plugin repair [#103808](https://github.com/openclaw/openclaw/pull/103808)
- Let Control UI admins enable installed plugins with restrictive allowlists [#106318](https://github.com/openclaw/openclaw/pull/106318)
- Restore plugin-source validation before approval [#107768](https://github.com/openclaw/openclaw/pull/107768)
- Reject blank required hook environment values [#108928](https://github.com/openclaw/openclaw/pull/108928)
- Allow CLI plugin uninstall to shrink configuration [#110991](https://github.com/openclaw/openclaw/pull/110991)
- Correct optional-plugin CLI enable guidance [#112019](https://github.com/openclaw/openclaw/pull/112019)
- Omit unobserved harness IDs from plugin list JSON [#112235](https://github.com/openclaw/openclaw/pull/112235)
- Find Control UI plugins by npm package name [#113933](https://github.com/openclaw/openclaw/pull/113933)
- Explain silent npm plugin-install failures [#114215](https://github.com/openclaw/openclaw/pull/114215)
- Report missing plugin files without false boundary warnings [#115053](https://github.com/openclaw/openclaw/pull/115053)
- Stop repeated bundledDiscovery migration notices on beta [#115208](https://github.com/openclaw/openclaw/pull/115208)
- Report eventless hooks as not ready [#116083](https://github.com/openclaw/openclaw/pull/116083)
- Show eventless hook status consistently [#116127](https://github.com/openclaw/openclaw/pull/116127)
- Report missing plugin dependencies with actionable errors [#117029](https://github.com/openclaw/openclaw/pull/117029)
- Preserve icon metadata for authenticated HEAD requests [#117079](https://github.com/openclaw/openclaw/pull/117079)
- Clarify what plugins doctor actually checks [#117160](https://github.com/openclaw/openclaw/pull/117160)
- Keep marketplace JSON output parseable [#117307](https://github.com/openclaw/openclaw/pull/117307)
- Reject duplicate hook names before package installation [#117439](https://github.com/openclaw/openclaw/pull/117439)
- Report manifest-declared tools in cold plugin inventory [#117461](https://github.com/openclaw/openclaw/pull/117461)
- fix(plugins): report registered inspection capabilities [#117518](https://github.com/openclaw/openclaw/pull/117518)
- Return an error when plugin policy blocks enablement [#117536](https://github.com/openclaw/openclaw/pull/117536)
- Explain filtered installed plugins in CLI output [#117556](https://github.com/openclaw/openclaw/pull/117556)
- Surface validated plugin warnings in plugins doctor [#118526](https://github.com/openclaw/openclaw/pull/118526)
- Remove stale plugin load paths during uninstall [#118930](https://github.com/openclaw/openclaw/pull/118930)
- Speed up status checks for missing channel plugins [#119203](https://github.com/openclaw/openclaw/pull/119203)
- Return 404 for malformed plugin icon routes [#119559](https://github.com/openclaw/openclaw/pull/119559)
- Preserve missing-icon metadata on HEAD requests [#120133](https://github.com/openclaw/openclaw/pull/120133)
- Stop Doctor from treating channel metadata as plugins [#120891](https://github.com/openclaw/openclaw/pull/120891)
- Prevent duplicate Skills page preload requests [#123705](https://github.com/openclaw/openclaw/pull/123705)
- Show required plugin setup after chat installs [#123727](https://github.com/openclaw/openclaw/pull/123727)
- Return a failing status when skills info misses [#123997](https://github.com/openclaw/openclaw/pull/123997)
- Surface plugin cleanup, setup, and CLI loading failures [#124570](https://github.com/openclaw/openclaw/pull/124570)
- Let hook toggles select an agent workspace [#124761](https://github.com/openclaw/openclaw/pull/124761)
- Report stale plugin registries consistently [#125048](https://github.com/openclaw/openclaw/pull/125048)
- Warn when installed plugin metadata cannot be read [#125117](https://github.com/openclaw/openclaw/pull/125117)
- Show plugin policy refusals without crash framing [#125304](https://github.com/openclaw/openclaw/pull/125304)
- Stop fresh installs from showing a false plugin-registry repair warning [#126799](https://github.com/openclaw/openclaw/pull/126799)
- Reject unknown agent IDs in Skills commands [#126954](https://github.com/openclaw/openclaw/pull/126954)
- Return JSON errors from failed skills commands [#127016](https://github.com/openclaw/openclaw/pull/127016)
- fix(cli): give hooks enable/disable failures a next step [#127370](https://github.com/openclaw/openclaw/pull/127370)
- fix(cli): render plugin search JSON failures [#127679](https://github.com/openclaw/openclaw/pull/127679)
- fix(plugins): normalize correction versions in drift repair commands [#127800](https://github.com/openclaw/openclaw/pull/127800)
- fix(plugins): surface load errors in the default plugin list [#128849](https://github.com/openclaw/openclaw/pull/128849)
- fix(plugins): inspection loads the wrong plugin when names collide [#129079](https://github.com/openclaw/openclaw/pull/129079)
- fix(plugins): doctor reports supported hook-only plugins as unhealthy [#129083](https://github.com/openclaw/openclaw/pull/129083)
- fix(plugins): list silently hides discovery and registry failures [#129091](https://github.com/openclaw/openclaw/pull/129091)
- fix(plugins): normal disablement is reported as an error [#129158](https://github.com/openclaw/openclaw/pull/129158)
- fix(health): activated plugin failures are silently omitted [#129161](https://github.com/openclaw/openclaw/pull/129161)
- fix(cli): keep plugin update recovery hints inside the active container [#129231](https://github.com/openclaw/openclaw/pull/129231)
- fix(plugins): keep healthy CLI commands when another plugin fails [#129248](https://github.com/openclaw/openclaw/pull/129248)
- fix: return JSON when marketplace listing fails [#129263](https://github.com/openclaw/openclaw/pull/129263)
- fix(plugins): show missing dependencies as errors in Plugins Hub [#129480](https://github.com/openclaw/openclaw/pull/129480)
- fix(plugins): avoid repeated command names in plugin inspection [#130339](https://github.com/openclaw/openclaw/pull/130339)
- fix(plugins): report registerFull routes in runtime inspection [#130904](https://github.com/openclaw/openclaw/pull/130904)
- fix: inspect exact hook names before matching key aliases [#131081](https://github.com/openclaw/openclaw/pull/131081)

**Documentation**

- Correct extension installation commands [#112057](https://github.com/openclaw/openclaw/pull/112057)
- docs(plugins): register imap in generated plugin inventory [#130363](https://github.com/openclaw/openclaw/pull/130363)
- docs: correct Copilot Proxy default enablement [#131164](https://github.com/openclaw/openclaw/pull/131164)

</details>

</Accordion>

<Accordion title="ClawHub, Claws, and sharing skills">

ClawHub now carries the selected publisher, version, scan result, and exact source through review and installation, including when two skills share a name. Mac, iPhone, iPad, and Android users can browse and install with the same publisher, version, and risk checks, while external skills.sh results keep their pinned source identity and are clearly marked as outside ClawHub scanning.

Skill updates protect local and concurrent edits unless an operator explicitly forces the overwrite. Direct downloads verify a declared digest and inspect the complete archive within the supported size limit, and older tracked installs without fingerprints need one forced update to establish that baseline.

Experimental Claws can package an agent with managed workspace files, skills, plugins, MCP servers, and scheduled work. You preview the exact plan before applying it, updates and removal act on resources the Claw owns, and shared resources remain in place unless you deliberately choose conflict-aware cleanup. Claws remain behind `OPENCLAW_EXPERIMENTAL_CLAWS=1`, uncertain outside actions can leave visible partial state that needs a fresh plan, and the package does not carry credentials, providers, bindings, arbitrary local paths, executable configuration, sessions, or host state it does not own.

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

**Improvements**

- Preview experimental Claw agent packages safely [#101328](https://github.com/openclaw/openclaw/pull/101328)
- Add consented Claw agent installation [#101755](https://github.com/openclaw/openclaw/pull/101755)
- Manage skills and install from ClawHub on Android [#101864](https://github.com/openclaw/openclaw/pull/101864)
- Create Claw-managed workspace files [#101973](https://github.com/openclaw/openclaw/pull/101973)
- Bind and expire signed ClawHub catalog trust [#101981](https://github.com/openclaw/openclaw/pull/101981)
- Install exact ClawHub packages for experimental Claws [#102228](https://github.com/openclaw/openclaw/pull/102228)
- Inspect and safely remove experimental Claw agents [#102296](https://github.com/openclaw/openclaw/pull/102296)
- Export installed agents as portable Claw packages [#102306](https://github.com/openclaw/openclaw/pull/102306)
- Let experimental Claws manage MCP server ownership safely [#102406](https://github.com/openclaw/openclaw/pull/102406)
- Add experimental read-only Claw lifecycle diagnostics to Doctor [#102427](https://github.com/openclaw/openclaw/pull/102427)
- Preview grouped Claw agent updates safely [#102959](https://github.com/openclaw/openclaw/pull/102959)
- Apply consent-bound updates to installed Claws [#102982](https://github.com/openclaw/openclaw/pull/102982)
- Make Android skill management easier to scan and review [#105592](https://github.com/openclaw/openclaw/pull/105592)
- Add native Skills management across iOS and macOS [#105814](https://github.com/openclaw/openclaw/pull/105814)
- Add human-authored CLAW.md manifests [#111391](https://github.com/openclaw/openclaw/pull/111391)
- Install external skills.sh catalog references [#112751](https://github.com/openclaw/openclaw/pull/112751)
- Separate portable Claw identity from OpenClaw policy [#112773](https://github.com/openclaw/openclaw/pull/112773)
- Let CLAW.md carry a portable agent prompt [#113454](https://github.com/openclaw/openclaw/pull/113454)
- Add portable OpenClaw profiles and native Claw bootstrap [#115237](https://github.com/openclaw/openclaw/pull/115237)
- Export reviewed first-run instructions with a Claw package [#115371](https://github.com/openclaw/openclaw/pull/115371)
- Add plugin requirements to schema-v1 Claw profiles [#115962](https://github.com/openclaw/openclaw/pull/115962)
- Add an experimental local Claw authoring lifecycle [#117037](https://github.com/openclaw/openclaw/pull/117037)
- Load repository skills alongside agent workspace skills [#125786](https://github.com/openclaw/openclaw/pull/125786)
- Verify signed marketplace feeds during refresh and snapshot reuse [#98338](https://github.com/openclaw/openclaw/pull/98338)
- Move skill-upload staging into SQLite [#108346](https://github.com/openclaw/openclaw/pull/108346)
- Show ClawHub skill icons in Control UI [#114152](https://github.com/openclaw/openclaw/pull/114152)
- Configure trust keys for signed marketplace feeds [#98316](https://github.com/openclaw/openclaw/pull/98316)
- Expose signed marketplace feed trust in CLI output [#98350](https://github.com/openclaw/openclaw/pull/98350)
- Add Bear Notes skill through the grizzly CLI [#120](https://github.com/openclaw/openclaw/pull/120)

**Bug fixes**

- Retry transient ClawHub package reads [#105388](https://github.com/openclaw/openclaw/pull/105388)
- fix(skills): stop skills update from destroying local skill changes [#118190](https://github.com/openclaw/openclaw/pull/118190)
- Preserve external ClawHub skill identity through install [#124250](https://github.com/openclaw/openclaw/pull/124250)
- fix(skills): reject altered download archives before extraction [#129486](https://github.com/openclaw/openclaw/pull/129486)
- Honor standard ClawHub plugin API comparators [#106889](https://github.com/openclaw/openclaw/pull/106889)
- Normalize agent git package install identities [#107637](https://github.com/openclaw/openclaw/pull/107637)
- Preserve signed-feed rollback protection across key rotation [#108342](https://github.com/openclaw/openclaw/pull/108342)
- Reject malformed timestamps in signed plugin catalogs [#109742](https://github.com/openclaw/openclaw/pull/109742)
- Accept standard DSSE plugin catalog feeds [#110037](https://github.com/openclaw/openclaw/pull/110037)
- Show ClawHub security verdicts on the first Skills load [#110166](https://github.com/openclaw/openclaw/pull/110166)
- Install the right recommended skill and keep failures retryable [#111518](https://github.com/openclaw/openclaw/pull/111518)
- Show and install alternative skill CLI requirements [#113767](https://github.com/openclaw/openclaw/pull/113767)
- Harden experimental Claw add and remove lifecycle [#114670](https://github.com/openclaw/openclaw/pull/114670)
- Report missing plugin credentials in Claw readiness checks [#114899](https://github.com/openclaw/openclaw/pull/114899)
- Restore consent for skill dependency installs [#116644](https://github.com/openclaw/openclaw/pull/116644)
- Preserve the selected ClawHub publisher through review and install [#121697](https://github.com/openclaw/openclaw/pull/121697)
- Recover Claw lifecycle ownership safely [#123254](https://github.com/openclaw/openclaw/pull/123254)
- Reject incomplete tar listings before skill extraction [#125406](https://github.com/openclaw/openclaw/pull/125406)
- fix(claws): unchanged owned skills no longer block updates [#126479](https://github.com/openclaw/openclaw/pull/126479)
- fix(cli): reject ClawHub-only flags for source skills [#128162](https://github.com/openclaw/openclaw/pull/128162)
- fix(skills): bound installer downloads [#129630](https://github.com/openclaw/openclaw/pull/129630)
- Restore Fish Audio publishing through ClawHub [05e3ce1](https://github.com/openclaw/openclaw/commit/05e3ce1)
- Preserve Unicode when migrating Claude command descriptions [#102616](https://github.com/openclaw/openclaw/pull/102616)
- Keep ClawHub promotions refresh within its timeout [#105411](https://github.com/openclaw/openclaw/pull/105411)
- Ignore malformed ClawHub Retry-After timing [#105479](https://github.com/openclaw/openclaw/pull/105479)
- Link globally installed ClawHub skills through the managed lockfile [#106479](https://github.com/openclaw/openclaw/pull/106479)
- Reject impossible dates in ClawHub promotions feeds [#106942](https://github.com/openclaw/openclaw/pull/106942)
- Warn when ClawHub skill verification fails [#107143](https://github.com/openclaw/openclaw/pull/107143)
- Keep emoji intact in ClawHub release errors [#108172](https://github.com/openclaw/openclaw/pull/108172)
- Ignore malformed ClawHub rate-limit reset hints [#108815](https://github.com/openclaw/openclaw/pull/108815)
- Show publishers for duplicate ClawHub skill results [#110903](https://github.com/openclaw/openclaw/pull/110903)
- Reject malformed UTF-8 in ClawHub responses [#111164](https://github.com/openclaw/openclaw/pull/111164)
- Keep ClawHub skill search results on one terminal line [#111441](https://github.com/openclaw/openclaw/pull/111441)
- Reject malformed UTF-8 in hosted plugin catalogs [#111768](https://github.com/openclaw/openclaw/pull/111768)
- Stop doctor from flagging current OCM skill paths as stale [#112236](https://github.com/openclaw/openclaw/pull/112236)
- Clarify unverified plugin trust guidance [#112249](https://github.com/openclaw/openclaw/pull/112249)
- Count successful ClawHub plugin installs [#113133](https://github.com/openclaw/openclaw/pull/113133)
- Route skill verification through managed proxies [#113683](https://github.com/openclaw/openclaw/pull/113683)
- Preserve startup safeguards for version-pinned skills [#114924](https://github.com/openclaw/openclaw/pull/114924)
- Keep Skills command hints on the selected instance [#117555](https://github.com/openclaw/openclaw/pull/117555)
- Remove owner-qualified ClawHub skills safely [#119606](https://github.com/openclaw/openclaw/pull/119606)
- Migrate the Fish Audio plugin to its canonical identity [#119900](https://github.com/openclaw/openclaw/pull/119900)
- Keep Skills verification errors machine-readable [#123761](https://github.com/openclaw/openclaw/pull/123761)
- Keep Claws update JSON output parseable [#124130](https://github.com/openclaw/openclaw/pull/124130)
- Give missing ClawHub skills actionable errors [#124764](https://github.com/openclaw/openclaw/pull/124764)
- Make missing-skill verification errors actionable [#125317](https://github.com/openclaw/openclaw/pull/125317)
- Keep Claw project artifacts deterministic across runtimes [#125801](https://github.com/openclaw/openclaw/pull/125801)
- Fix ClawHub prerelease compatibility checks [#126020](https://github.com/openclaw/openclaw/pull/126020)
- Point missing ClawHub skills to search [#126987](https://github.com/openclaw/openclaw/pull/126987)
- Clean up failed ClawHub archive staging [#127065](https://github.com/openclaw/openclaw/pull/127065)
- fix(plugins): include required ClawHub scaffold metadata [#129712](https://github.com/openclaw/openclaw/pull/129712)
- fix(plugins): report ClawHub tags as floating install sources [#130917](https://github.com/openclaw/openclaw/pull/130917)

**Documentation**

- Add Buzz to the generated plugin inventory [#114875](https://github.com/openclaw/openclaw/pull/114875)

</details>

</Accordion>

<Accordion title="Loading and updating plugins">

Plugin updates now preserve one runtime generation for work already underway. Accepted messages, completions, and workers finish with the plugin version they started with, and later work moves to the replacement only after it has loaded successfully. If a live reload fails, OpenClaw restores the last active commands, providers, hooks, memory, and other registrations.

OpenClaw also reuses prepared plugin metadata and runtimes across turns instead of rebuilding the same setup each time, while health shows failed activation, cleanup, or background services directly. A known plugin-owned failure can be quarantined without taking healthy plugins or all of OpenClaw offline, while invalid configuration, failed migrations, ambiguous ownership, and unverifiable state still stop activation.

Context-engine plugins remain selected on fresh turns and can advance durable state through long sessions by applying limits to the accepted turn instead of all accumulated history. Existing v1 engines keep their full-history contract until they adopt the newer interface, and a single accepted turn above 8 MiB or 20,000 events still stops.

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

**Improvements**

- Reduce inactive startup cost from the bundled Ollama plugin [#119745](https://github.com/openclaw/openclaw/pull/119745)
- Reuse plugin preparation across warm Gateway turns [#105646](https://github.com/openclaw/openclaw/pull/105646)
- Add durable replay guards for plugin ingress side effects [#110846](https://github.com/openclaw/openclaw/pull/110846)
- Reuse plugin channel discovery across repeated catalog reads [#114324](https://github.com/openclaw/openclaw/pull/114324)
- Reuse prepared plugin metadata during loading [#114807](https://github.com/openclaw/openclaw/pull/114807)
- Reduce plugin-heavy Gateway startup time and memory [#115020](https://github.com/openclaw/openclaw/pull/115020)
- Remove repeated plugin fingerprint work from gateway turns [#118334](https://github.com/openclaw/openclaw/pull/118334)
- Reuse prepared plugin context during agent tool construction [#118398](https://github.com/openclaw/openclaw/pull/118398)
- Defer optional xAI capability runtimes until first use [#119374](https://github.com/openclaw/openclaw/pull/119374)
- Lazy-load the Anthropic session catalog [#119619](https://github.com/openclaw/openclaw/pull/119619)
- Reuse unchanged sandbox skill snapshots [#121379](https://github.com/openclaw/openclaw/pull/121379)
- perf(plugins): reuse lifecycle metadata on secrets hot paths [#126629](https://github.com/openclaw/openclaw/pull/126629)
- Reuse plugin metadata during skill watcher refresh [#127088](https://github.com/openclaw/openclaw/pull/127088)
- Avoid cold plugin loading in routing and status paths [#109348](https://github.com/openclaw/openclaw/pull/109348)
- Stop plugin metadata lookups from polling disk [#114289](https://github.com/openclaw/openclaw/pull/114289)
- Avoid repeated lookups for missing plugin facades [#124664](https://github.com/openclaw/openclaw/pull/124664)
- perf(plugins): reuse one plugin metadata snapshot per CLI process [#129181](https://github.com/openclaw/openclaw/pull/129181)
- perf(agents): avoid unused extension contexts during streaming [#130158](https://github.com/openclaw/openclaw/pull/130158)

**Bug fixes**

- Prevent Codex plugin discovery from stalling agent turns [#108311](https://github.com/openclaw/openclaw/pull/108311)
- Keep healthy skills available when one secret fails [#109791](https://github.com/openclaw/openclaw/pull/109791)
- Keep the Gateway running when one configured plugin is broken [#110239](https://github.com/openclaw/openclaw/pull/110239)
- Preserve bundled plugin discovery and scoped activation [#114547](https://github.com/openclaw/openclaw/pull/114547)
- Reduce repeated plugin registry path scans [#115783](https://github.com/openclaw/openclaw/pull/115783)
- Keep installed plugins available during one-shot agent runs [#116336](https://github.com/openclaw/openclaw/pull/116336)
- Restore prepared-runtime reuse for configured agent turns [#117768](https://github.com/openclaw/openclaw/pull/117768)
- Unify plugin webhook route ownership and startup failure handling [#118203](https://github.com/openclaw/openclaw/pull/118203)
- Preserve multi-entry plugins and linked install sources [#120026](https://github.com/openclaw/openclaw/pull/120026)
- Stop repeated plugin scans from freezing the gateway [#120344](https://github.com/openclaw/openclaw/pull/120344)
- Keep configured context engines active on fresh turns [#121461](https://github.com/openclaw/openclaw/pull/121461)
- Reduce Gateway stalls from repeated plugin metadata discovery [#124844](https://github.com/openclaw/openclaw/pull/124844)
- Keep profiled plugin tools available across agent runtime paths [#124947](https://github.com/openclaw/openclaw/pull/124947)
- Stop plugin metadata rescans from stalling Gateway [#125596](https://github.com/openclaw/openclaw/pull/125596)
- Isolate plugin runtime ownership across Gateway instances [#125821](https://github.com/openclaw/openclaw/pull/125821)
- Stop terminal context-engine rows from degrading later turns [#126593](https://github.com/openclaw/openclaw/pull/126593)
- fix(channels): honor trusted plugin activation contracts (#114492) [9b77c06](https://github.com/openclaw/openclaw/commit/9b77c06)
- Preserve built plugins across prepared Gateway runtimes [ef91c81](https://github.com/openclaw/openclaw/commit/ef91c81)
- Stop repeated scans for unavailable channel plugins [#100377](https://github.com/openclaw/openclaw/pull/100377)
- Prevent recursive prompt-build hook dispatch [#102554](https://github.com/openclaw/openclaw/pull/102554)
- Keep active plugins working when a hot reload fails [#103812](https://github.com/openclaw/openclaw/pull/103812)
- Clean up scheduler jobs after failed plugin registration [#106890](https://github.com/openclaw/openclaw/pull/106890)
- Fully restore plugin state after registration failures [#108084](https://github.com/openclaw/openclaw/pull/108084)
- Keep stateful plugin hooks and tools on the same registration [#108110](https://github.com/openclaw/openclaw/pull/108110)
- Preserve Device Pair notifications during slow Telegram sends [#108164](https://github.com/openclaw/openclaw/pull/108164)
- Prevent duplicate bundled plugin instances on source installs [#108508](https://github.com/openclaw/openclaw/pull/108508)
- Prevent ACPX process cleanup from hanging [#109146](https://github.com/openclaw/openclaw/pull/109146)
- Bound reply-hook usage metadata during bursts [#109610](https://github.com/openclaw/openclaw/pull/109610)
- Release abort listeners when channel runtime contexts are disposed [#109708](https://github.com/openclaw/openclaw/pull/109708)
- Prevent unresponsive plugin middleware from freezing agent runs [#110731](https://github.com/openclaw/openclaw/pull/110731)
- Load configured standalone plugin files without manifests [#111515](https://github.com/openclaw/openclaw/pull/111515)
- Refresh provider metadata when plugins reload [#112699](https://github.com/openclaw/openclaw/pull/112699)
- Release shared state leases when CLI processes exit [#113839](https://github.com/openclaw/openclaw/pull/113839)
- Isolate Gateway plugin state across lifecycle and agent runs [#114476](https://github.com/openclaw/openclaw/pull/114476)
- Preserve ACPX process ownership across reconnects [#115247](https://github.com/openclaw/openclaw/pull/115247)
- Avoid plugin metadata stalls during agent turns [#115426](https://github.com/openclaw/openclaw/pull/115426)
- Bound plugin hook waits and retire stale registrations [#115695](https://github.com/openclaw/openclaw/pull/115695)
- Publish the plugin-activated Gateway config before model owners [#115747](https://github.com/openclaw/openclaw/pull/115747)
- Keep Codex app inventory fresh across shared runtimes [#115866](https://github.com/openclaw/openclaw/pull/115866)
- Keep plugin registry state on the correct database [#116427](https://github.com/openclaw/openclaw/pull/116427)
- Clean up failed plugin service starts exactly once [#116804](https://github.com/openclaw/openclaw/pull/116804)
- Refresh channel metadata after plugin lifecycle changes [#117005](https://github.com/openclaw/openclaw/pull/117005)
- Correct plugin diagnostics and stabilize discovery order [#117025](https://github.com/openclaw/openclaw/pull/117025)
- Keep deferred plugin transforms in a durable cache [#117355](https://github.com/openclaw/openclaw/pull/117355)
- Keep persisted plugin registry snapshots consistent [#117561](https://github.com/openclaw/openclaw/pull/117561)
- Return retryable 503s until plugin routes are ready [#117852](https://github.com/openclaw/openclaw/pull/117852)
- Contain rejected synchronous plugin hooks [#117988](https://github.com/openclaw/openclaw/pull/117988)
- Release llama.cpp model memory when the plugin stops [#119238](https://github.com/openclaw/openclaw/pull/119238)
- Load installed agent harnesses for local agent exec [#119855](https://github.com/openclaw/openclaw/pull/119855)
- Prevent stopped ACPX runtimes from returning [#120029](https://github.com/openclaw/openclaw/pull/120029)
- Stop false legacy context-engine degradation warnings [#120722](https://github.com/openclaw/openclaw/pull/120722)
- Refresh ACPX skills when runtime availability changes [#121181](https://github.com/openclaw/openclaw/pull/121181)
- Keep durable context engines advancing in long sessions [#121647](https://github.com/openclaw/openclaw/pull/121647)
- Keep context-engine state advancing in long sessions [#122149](https://github.com/openclaw/openclaw/pull/122149)
- Make plugin setup registration atomic [#123506](https://github.com/openclaw/openclaw/pull/123506)
- Preserve failed-plugin diagnostics without activating capabilities [#125046](https://github.com/openclaw/openclaw/pull/125046)
- Surface plugin service failures in health [#125366](https://github.com/openclaw/openclaw/pull/125366)
- Keep compaction on one prepared plugin generation [#125688](https://github.com/openclaw/openclaw/pull/125688)
- Keep completions and workers on one plugin generation [#125761](https://github.com/openclaw/openclaw/pull/125761)
- Keep one plugin generation through Gateway turns [#125990](https://github.com/openclaw/openclaw/pull/125990)
- Keep agent turns on their admitted plugin generation [#126626](https://github.com/openclaw/openclaw/pull/126626)
- Prevent stale plugin state after Gateway reloads [#126627](https://github.com/openclaw/openclaw/pull/126627)
- Limit Gateway startup runtime loading to active plugins [#126703](https://github.com/openclaw/openclaw/pull/126703)
- Retire executable plugin caches on lifecycle changes [#126719](https://github.com/openclaw/openclaw/pull/126719)
- Reuse prepared plugin metadata when loading execution-workspace skills [#126720](https://github.com/openclaw/openclaw/pull/126720)
- Preserve refreshed plugin extractors after stale load failures [#126829](https://github.com/openclaw/openclaw/pull/126829)
- fix(plugins): bound failed-start service cleanup with replacement stop timeout [#126907](https://github.com/openclaw/openclaw/pull/126907)
- fix(plugins): reload replaced setup modules after lifecycle resets [#128110](https://github.com/openclaw/openclaw/pull/128110)
- fix(agents): prevent reloads from losing queued replies or restoring stale credentials [#128138](https://github.com/openclaw/openclaw/pull/128138)
- fix(plugins): prevent duplicate background services and discovery advertisers [#128179](https://github.com/openclaw/openclaw/pull/128179)
- fix(hooks): reload mutable handlers after restored-mtime edits [#128477](https://github.com/openclaw/openclaw/pull/128477)
- perf(plugins): enforce load-once — default credential-source gate and containment registry reuse [#128639](https://github.com/openclaw/openclaw/pull/128639)
- fix(plugins): keep channels authoritative after activation rollback [#129232](https://github.com/openclaw/openclaw/pull/129232)
- fix(plugins): block retired callbacks from changing run context [#129250](https://github.com/openclaw/openclaw/pull/129250)
- fix(sessions): isolate maintenance from channel plugin resolvers [#129490](https://github.com/openclaw/openclaw/pull/129490)
- fix(plugins): surface invalid background and discovery services [#129651](https://github.com/openclaw/openclaw/pull/129651)
- fix(agents): scope fall-through plugin registry loads to the active runtime registry [#130167](https://github.com/openclaw/openclaw/pull/130167)
- fix(plugins): fail closed when plugin runtime is unavailable during registration [#130597](https://github.com/openclaw/openclaw/pull/130597)
- fix(sandbox): retire plugin backends with registry lifecycle [#130662](https://github.com/openclaw/openclaw/pull/130662)
- fix(plugins): report failed plugin slash commands instead of silently ignoring them [#130743](https://github.com/openclaw/openclaw/pull/130743)
- fix(channels): resolve registered plugins before agent workspace (#124709) [4f59053](https://github.com/openclaw/openclaw/commit/4f59053)
- Finish plugin HTTP responses after route failures [#102125](https://github.com/openclaw/openclaw/pull/102125)
- Preserve Unicode in ACPX Codex error diagnostics [#103738](https://github.com/openclaw/openclaw/pull/103738)
- Cancel pending bundle LSP tools when an agent stops [#104110](https://github.com/openclaw/openclaw/pull/104110)
- Keep plugin run context available after registration [#107028](https://github.com/openclaw/openclaw/pull/107028)
- Ignore TypeScript declaration files during plugin discovery [#107994](https://github.com/openclaw/openclaw/pull/107994)
- Recognize configured plugin dependencies by manifest ID [#113691](https://github.com/openclaw/openclaw/pull/113691)
- Prevent path-only bootstrap files from crashing agent turns [#115395](https://github.com/openclaw/openclaw/pull/115395)
- Refresh bundled plugin artifact locations after metadata updates [#117041](https://github.com/openclaw/openclaw/pull/117041)
- Make plugin verification restart guidance install-neutral [#119508](https://github.com/openclaw/openclaw/pull/119508)
- Keep ACPX handle operations on one session snapshot [#120924](https://github.com/openclaw/openclaw/pull/120924)
- Load configured plugin runtimes for direct agent ingress [#121787](https://github.com/openclaw/openclaw/pull/121787)
- Return HTTP 500 when plugin route dispatch fails [#124033](https://github.com/openclaw/openclaw/pull/124033)
- Stop canceled llm-task calls from returning stale JSON [#124673](https://github.com/openclaw/openclaw/pull/124673)
- Reject cached plugin load failures before activation [#126737](https://github.com/openclaw/openclaw/pull/126737)
- fix(plugins): bound allowlist warning history [#127126](https://github.com/openclaw/openclaw/pull/127126)
- fix(agents): preserve admitted runtime generation for channel turns [#127217](https://github.com/openclaw/openclaw/pull/127217)
- perf(agents): reuse active Gateway plugin generation [#127278](https://github.com/openclaw/openclaw/pull/127278)
- fix(diffs): stop lightweight CLI registration from crashing when runtime.state is unavailable [#128360](https://github.com/openclaw/openclaw/pull/128360)
- fix(plugins): show registered Gateway discovery services during inspection [#130267](https://github.com/openclaw/openclaw/pull/130267)

</details>

</Accordion>

<Accordion title="MCP servers and apps">

MCP servers can now recover their connection and catalog after late startup, transport loss, a server restart, or a changed tool list without restarting OpenClaw or taking healthy servers down with them. Tool results retain structured data, screenshots, audio, resources, recovery guidance, and real error state. A call that first discovers an expired stateful session still fails once without replay because it may already have changed something.

Local MCP sign-in can finish in the browser, save and verify the credential, and resume a newly started authorization after a process restart. Shared operator sign-in remains the default, while supported HTTP MCP servers can opt into per-person OAuth that keeps each credential attached to the trusted channel, bot account, and sender. Remote and headless operators keep the manual code path, and this first per-person mode does not add private sign-in delivery, automatic turn resumption, or Control UI account management.

MCP Apps remain opt-in and can show supported interactive server interfaces after the required configuration and restart. They extend trust to UI code supplied by the server, reconstructed conversation views stay read-only, and app context enters the next turn as untrusted input. Headless nodes can publish request-response MCP tools into Code Mode, while OAuth, streaming, notifications, sampling, and mobile publication remain outside this first node-hosted version.

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

**Improvements**

- Add requester-scoped MCP connections [#106359](https://github.com/openclaw/openclaw/pull/106359)
- Add a consent-gated MCP App messaging bridge and live host context [#109807](https://github.com/openclaw/openclaw/pull/109807)
- Add a ticketed read-only standalone MCP App host [#109861](https://github.com/openclaw/openclaw/pull/109861)
- Enable tools and resources in standalone MCP Apps [#110515](https://github.com/openclaw/openclaw/pull/110515)
- Let interactive MCP Apps provide one-turn model context [#111212](https://github.com/openclaw/openclaw/pull/111212)
- Let native plugins declare MCP Apps [#113224](https://github.com/openclaw/openclaw/pull/113224)
- Share Control UI styles with embedded MCP apps [#113464](https://github.com/openclaw/openclaw/pull/113464)
- Give node MCP servers a typed Code Mode namespace [#114876](https://github.com/openclaw/openclaw/pull/114876)
- Add per-requester OAuth for MCP servers [#122166](https://github.com/openclaw/openclaw/pull/122166)
- Add opt-in sandboxed MCP Apps to Control UI [#69039](https://github.com/openclaw/openclaw/pull/69039)
- Node-hosted tools, MCP servers, and skills [#90431](https://github.com/openclaw/openclaw/pull/90431)
- Lazy-load the MCP Apps chat bridge [#106288](https://github.com/openclaw/openclaw/pull/106288)
- Centralize MCP OAuth identity and resumable login state [#122115](https://github.com/openclaw/openclaw/pull/122115)
- Cache immutable bundled MCP config discovery [#79882](https://github.com/openclaw/openclaw/pull/79882)

**Bug fixes**

- Redact MCP credentials from shared-chat show output [#103396](https://github.com/openclaw/openclaw/pull/103396)
- Keep MCP server configuration out of group replies [#103502](https://github.com/openclaw/openclaw/pull/103502)
- Bind MCP refresh tokens to their issuer [#112032](https://github.com/openclaw/openclaw/pull/112032)
- Preserve non-text MCP content alongside structured results [#115521](https://github.com/openclaw/openclaw/pull/115521)
- Complete MCP OAuth login after browser approval [#120431](https://github.com/openclaw/openclaw/pull/120431)
- Recover node-hosted MCP catalogs and sessions live [#125092](https://github.com/openclaw/openclaw/pull/125092)
- Prevent stale MCP catalogs and silent tool failures [#125564](https://github.com/openclaw/openclaw/pull/125564)
- Mark resolved OpenClaw tool failures as MCP errors [#126472](https://github.com/openclaw/openclaw/pull/126472)
- Clean up stale MCP processes after session reset or deletion [#93559](https://github.com/openclaw/openclaw/pull/93559)
- Make MCP OAuth credentials work in CLI and local Codex runtimes [#96120](https://github.com/openclaw/openclaw/pull/96120)
- Suppress responses for MCP notifications [#101730](https://github.com/openclaw/openclaw/pull/101730)
- Bound stalled MCP OAuth requests with configured timeouts [#103704](https://github.com/openclaw/openclaw/pull/103704)
- Preserve node MCP pairing and disconnect recovery [#104745](https://github.com/openclaw/openclaw/pull/104745)
- Preserve MCP App previews across silent turns and reloads [#105728](https://github.com/openclaw/openclaw/pull/105728)
- Preserve every MCP literal-union action [#108054](https://github.com/openclaw/openclaw/pull/108054)
- Fail closed on malformed MCP App CSP metadata [#108883](https://github.com/openclaw/openclaw/pull/108883)
- Keep shared MCP transport alive after CLI run cleanup [#110251](https://github.com/openclaw/openclaw/pull/110251)
- Let embedded MCP Apps finish cleanup before views close [#111124](https://github.com/openclaw/openclaw/pull/111124)
- Reject malformed UTF-8 in MCP App sandbox policies [#111282](https://github.com/openclaw/openclaw/pull/111282)
- Retry MCP tool catalogs after server recovery [#111962](https://github.com/openclaw/openclaw/pull/111962)
- Keep requester-scoped MCP resolvers across registry changes [#112579](https://github.com/openclaw/openclaw/pull/112579)
- Recover bundled MCP servers after disconnects and repeated timeouts [#113916](https://github.com/openclaw/openclaw/pull/113916)
- Reject the reserved `__proto__` MCP server name [#116112](https://github.com/openclaw/openclaw/pull/116112)
- Bound MCP catalog pagination and loading time [#116845](https://github.com/openclaw/openclaw/pull/116845)
- Show timeouts instead of hanging standalone MCP Apps [#119276](https://github.com/openclaw/openclaw/pull/119276)
- Isolate oversized MCP stdout frames instead of crashing the host [#119379](https://github.com/openclaw/openclaw/pull/119379)
- Complete MCP OAuth login through the browser callback [#120433](https://github.com/openclaw/openclaw/pull/120433)
- fix(mcp): preserve client and requester lifecycle ownership [#120894](https://github.com/openclaw/openclaw/pull/120894)
- Reuse valid MCP OAuth sessions during login [#122129](https://github.com/openclaw/openclaw/pull/122129)
- Make Codex MCP approval settings and dead ends actionable [#124766](https://github.com/openclaw/openclaw/pull/124766)
- Explain timed-out Codex MCP approvals [#125860](https://github.com/openclaw/openclaw/pull/125860)
- Preserve recovery guidance in structured MCP tool results [#125914](https://github.com/openclaw/openclaw/pull/125914)
- Retire stale MCP transports and process trees [#126101](https://github.com/openclaw/openclaw/pull/126101)
- Repair MCP channel media, event delivery, and cleanup [#126592](https://github.com/openclaw/openclaw/pull/126592)
- fix(node-host): prevent MCP reconnect storms after outages [#128196](https://github.com/openclaw/openclaw/pull/128196)
- fix: stale dashboard app views render after Gateway replacement [#130172](https://github.com/openclaw/openclaw/pull/130172)
- fix(gateway): preserve standalone MCP app HEAD response metadata (#120905) [6f4b9a2](https://github.com/openclaw/openclaw/commit/6f4b9a2)
- Preserve prototype-named fields in MCP tool schemas [#102856](https://github.com/openclaw/openclaw/pull/102856)
- Repair MCP flags stored in a direct included config [#103970](https://github.com/openclaw/openclaw/pull/103970)
- Reject and repair unsupported MCP disabled settings [#104495](https://github.com/openclaw/openclaw/pull/104495)
- Reject hexadecimal MCP timeout options [#104633](https://github.com/openclaw/openclaw/pull/104633)
- Prevent immediate MCP timeouts from oversized timer settings [#105769](https://github.com/openclaw/openclaw/pull/105769)
- Clamp oversized MCP timeouts to Node-safe limits [#105784](https://github.com/openclaw/openclaw/pull/105784)
- Bound concurrent MCP doctor probes [#109870](https://github.com/openclaw/openclaw/pull/109870)
- Reject malformed decoded MCP sandbox policy metadata [#110275](https://github.com/openclaw/openclaw/pull/110275)
- fix(mcp): prevent chunked stdio diagnostics from being corrupted [#110652](https://github.com/openclaw/openclaw/pull/110652)
- Fail MCP setup when initialize times out [#111318](https://github.com/openclaw/openclaw/pull/111318)
- Keep resource-only MCP servers available [#115169](https://github.com/openclaw/openclaw/pull/115169)
- fix(agents): materialize MCP for server-name toolsAllow globs [#115277](https://github.com/openclaw/openclaw/pull/115277)
- Reconnect stateful MCP tools after server restarts [#115614](https://github.com/openclaw/openclaw/pull/115614)
- Preserve Content-Length on MCP App sandbox HEAD responses [#118553](https://github.com/openclaw/openclaw/pull/118553)
- Make MCP doctor honor Windows PATH casing [#121595](https://github.com/openclaw/openclaw/pull/121595)
- fix(cli): merge nested MCP configure and tools patches [#124551](https://github.com/openclaw/openclaw/pull/124551)
- fix(mcp): dedupe blocked stdio env warnings [#128102](https://github.com/openclaw/openclaw/pull/128102)
- fix(mcp): keep add from replacing existing servers [#128129](https://github.com/openclaw/openclaw/pull/128129)
- fix(cli): recognize OAuth authorization headers regardless of casing [#129279](https://github.com/openclaw/openclaw/pull/129279)
- fix(codex): preserve disabled MCP transports [#130872](https://github.com/openclaw/openclaw/pull/130872)

</details>

</Accordion>

<Accordion title="Building plugins and integrations">

Developers building a Gateway client or embedding OpenClaw now have typed protocol schemas, runtime validation, authentication, reconnect, readiness, timeout, and browser or Node entry-point guidance. The Gateway protocol and reference client are prepared as calendar-versioned npm packages and become installable when the release train publishes them.

Plugin authors also get focused contracts for requester-aware hooks, channel setup, CLI backends, bounded provider streams, read-only secret references, and browser meeting adapters. Hook policy remains underneath channel admission, sandboxing, approvals, owner-only tools, and other host policy, and the timeout cleanup for Codex hook relays applies to POSIX hosts rather than Windows.

The contract cleanup removes retired July and August SDK paths and replaces the `deactivate` alias with `gateway_stop`, while the beta.5 session-store bridge remains available through October 12, 2026. Clients using the v2026.7.2 beta question, worker, or session-catalog shapes need to move to the renamed and flattened contracts. Custom `agents.defaults.cliBackends` commands, arguments, environment, aliases, and parsers now belong in a backend plugin whose executable is available to the OpenClaw service.

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

**Improvements**

- Publish embedded-run startup phases to diagnostics [#107984](https://github.com/openclaw/openclaw/pull/107984)
- Expose requester identity to plugin tool hooks [#111190](https://github.com/openclaw/openclaw/pull/111190)
- Add session discussions to the Control UI through a plugin provider [#111337](https://github.com/openclaw/openclaw/pull/111337)
- Add channel-owned setup contracts [#112176](https://github.com/openclaw/openclaw/pull/112176)
- Move CLI backend adapters from config into plugins [#112539](https://github.com/openclaw/openclaw/pull/112539)
- Add facts-first media APIs while preserving legacy compatibility [#113355](https://github.com/openclaw/openclaw/pull/113355)
- Add fresh tool-free model completions [#114343](https://github.com/openclaw/openclaw/pull/114343)
- Retire Slack inline reply directives for typed presentation [#114738](https://github.com/openclaw/openclaw/pull/114738)
- Speed up Codex native hook startup [#115078](https://github.com/openclaw/openclaw/pull/115078)
- Retire August Plugin SDK compatibility paths [#124416](https://github.com/openclaw/openclaw/pull/124416)
- Add plugin-owned JSONL parsing for CLI backends [#95386](https://github.com/openclaw/openclaw/pull/95386)
- Keep additive Swift protocol fields source-compatible [#103493](https://github.com/openclaw/openclaw/pull/103493)
- Add a shared Plugin SDK HTML escaping helper [#105975](https://github.com/openclaw/openclaw/pull/105975)
- Add one canonical plugin config merge helper [#106919](https://github.com/openclaw/openclaw/pull/106919)
- Extract a shared meeting-bot runtime and adapter SDK [#109755](https://github.com/openclaw/openclaw/pull/109755)
- Add a reliable session-idle event for extensions [#110174](https://github.com/openclaw/openclaw/pull/110174)
- Add bounded transcript cursors across replacements [#110374](https://github.com/openclaw/openclaw/pull/110374)
- Consolidate channel capabilities and attachment hints [#110985](https://github.com/openclaw/openclaw/pull/110985)
- Clean up gateway protocol contracts before public package publication [#111041](https://github.com/openclaw/openclaw/pull/111041)
- Retire global Plugin SDK provider publication [#111426](https://github.com/openclaw/openclaw/pull/111426)
- Remove expired plugin SDK compatibility surfaces [#111451](https://github.com/openclaw/openclaw/pull/111451)
- Publish the Gateway protocol package to npm [#111664](https://github.com/openclaw/openclaw/pull/111664)
- Prepare the Gateway client for npm publishing [#111707](https://github.com/openclaw/openclaw/pull/111707)
- Expose canonical inbound message identity to before-dispatch hooks [#112359](https://github.com/openclaw/openclaw/pull/112359)
- Share attributed Markdown rendering across native-text channels [#112907](https://github.com/openclaw/openclaw/pull/112907)
- Normalize inbound reply text once for every consumer [#113179](https://github.com/openclaw/openclaw/pull/113179)
- Add a shared Plugin SDK contract for channel DM policy setup [#113537](https://github.com/openclaw/openclaw/pull/113537)
- Forward tool cancellation to plugin hooks [#115817](https://github.com/openclaw/openclaw/pull/115817)
- Move GitHub Copilot OAuth ownership into its provider plugin [#118063](https://github.com/openclaw/openclaw/pull/118063)
- Start new CLI-agent sessions in Gateway terminals [#121020](https://github.com/openclaw/openclaw/pull/121020)
- Retire deprecated Plugin SDK imports and deactivate hook alias [#121845](https://github.com/openclaw/openclaw/pull/121845)
- Add a provider-only video input contract [#121887](https://github.com/openclaw/openclaw/pull/121887)
- Add a canonical Computer Use provider SDK [#123509](https://github.com/openclaw/openclaw/pull/123509)
- Add shared Plugin SDK stream and SecretRef utilities [#124835](https://github.com/openclaw/openclaw/pull/124835)
- Reuse the shared cache for WhatsApp deduplication [#104962](https://github.com/openclaw/openclaw/pull/104962)
- Deprecate the Discord abort-signal helper without breaking imports [#109166](https://github.com/openclaw/openclaw/pull/109166)
- Unify plan-update callbacks on typed steps [#109660](https://github.com/openclaw/openclaw/pull/109660)
- Remove legacy media-placeholder parsing [#111891](https://github.com/openclaw/openclaw/pull/111891)
- Share channel probe timing and error handling [#113540](https://github.com/openclaw/openclaw/pull/113540)
- Add a shared Plugin SDK resolver for messaging approval targets [#113568](https://github.com/openclaw/openclaw/pull/113568)
- Remove the superseded sessions.observer.ask Gateway method [#113791](https://github.com/openclaw/openclaw/pull/113791)
- Unify live provider model projection [#113903](https://github.com/openclaw/openclaw/pull/113903)
- Add a standard raw-event ingress profile [#117859](https://github.com/openclaw/openclaw/pull/117859)
- Share plugin migration and secret-contract helpers [#120346](https://github.com/openclaw/openclaw/pull/120346)
- Move Chutes OAuth refresh into the provider plugin [#120840](https://github.com/openclaw/openclaw/pull/120840)
- Remove unused Gateway RPC and client surfaces [#121387](https://github.com/openclaw/openclaw/pull/121387)
- Retire the legacy context-engine host-parameter default [#122434](https://github.com/openclaw/openclaw/pull/122434)
- Export managed URL ingestion from the focused media SDK [#125278](https://github.com/openclaw/openclaw/pull/125278)

**Bug fixes**

- Restore official beta plugin upgrades and Repo E2E [#105287](https://github.com/openclaw/openclaw/pull/105287)
- Stop timed-out Codex hook relays from exhausting Linux memory [#109446](https://github.com/openclaw/openclaw/pull/109446)
- Limit Codex hook relays to the tools plugins target [#109603](https://github.com/openclaw/openclaw/pull/109603)
- Keep plugin next-turn injections callable after registration [#111131](https://github.com/openclaw/openclaw/pull/111131)
- Restore published channel plugin compatibility and preserve concurrent install records [#113101](https://github.com/openclaw/openclaw/pull/113101)
- fix(gateway): isolate SDK event streams and preserve reconnect ownership (#116904) [b611914](https://github.com/openclaw/openclaw/commit/b611914)
- Let plugin tools use supported provider credentials [#103852](https://github.com/openclaw/openclaw/pull/103852)
- fix(cron): abort superseded reconciliation hooks [#104368](https://github.com/openclaw/openclaw/pull/104368)
- Reject noncanonical array indices in local tool schema refs [#105922](https://github.com/openclaw/openclaw/pull/105922)
- Prune deprecated SDK exports and modernize Zalo delivery [#106010](https://github.com/openclaw/openclaw/pull/106010)
- Terminate completed native Codex hook relays [#106899](https://github.com/openclaw/openclaw/pull/106899)
- Keep claiming-hook timeouts registration-owned [#107996](https://github.com/openclaw/openclaw/pull/107996)
- Let reply hooks claim ordinary user turns [#108353](https://github.com/openclaw/openclaw/pull/108353)
- Sanitize malformed URL errors in the Plugin SDK SSRF helper [#109729](https://github.com/openclaw/openclaw/pull/109729)
- Prevent prepared channel-turn lifecycle leaks [#110981](https://github.com/openclaw/openclaw/pull/110981)
- Make ACP help and stdin EOF exit cleanly [#111091](https://github.com/openclaw/openclaw/pull/111091)
- Move channel setup flags into plugin manifests [#112239](https://github.com/openclaw/openclaw/pull/112239)
- Keep channel config promotion owned by plugins [#112293](https://github.com/openclaw/openclaw/pull/112293)
- Safer manifest-driven provider registration [#114381](https://github.com/openclaw/openclaw/pull/114381)
- Migrate DeepInfra embeddings to the supported plugin contract [#114727](https://github.com/openclaw/openclaw/pull/114727)
- Restore provider stream compatibility exports [#115757](https://github.com/openclaw/openclaw/pull/115757)
- Declare context-engine host parameters explicitly [#115872](https://github.com/openclaw/openclaw/pull/115872)
- Restore the OpenAI Chat response-hook lifecycle [#117056](https://github.com/openclaw/openclaw/pull/117056)
- Preserve setup and agent binding for contract-only channels [#117106](https://github.com/openclaw/openclaw/pull/117106)
- Prevent fractional chunk limits from stalling text delivery [#117727](https://github.com/openclaw/openclaw/pull/117727)
- Stop ACP servers when client handshakes fail [#117901](https://github.com/openclaw/openclaw/pull/117901)
- Consolidate plugin helpers and repair Voice Call and Vault behavior [#118509](https://github.com/openclaw/openclaw/pull/118509)
- Warn when legacy hook registration cannot receive typed events [#118601](https://github.com/openclaw/openclaw/pull/118601)
- Report malformed plugin schema references without crashing [#120254](https://github.com/openclaw/openclaw/pull/120254)
- Keep OpenAI Responses hooks inside request timeouts [#121163](https://github.com/openclaw/openclaw/pull/121163)
- Make external Plugin SDK entrypoints type-compatible [#121512](https://github.com/openclaw/openclaw/pull/121512)
- fix: prevent $-pattern injection in prompt template and approval substitution [#123015](https://github.com/openclaw/openclaw/pull/123015)
- fix(plugins): restore shipped channel compatibility [#126003](https://github.com/openclaw/openclaw/pull/126003)
- fix(agents): treat native hook relay records with a dead pid as absent [#128112](https://github.com/openclaw/openclaw/pull/128112)
- Add a Codex loop-relay opt-out for tool-heavy runs [#97224](https://github.com/openclaw/openclaw/pull/97224)
- Complete plugin session-catalog contracts [dfa580e](https://github.com/openclaw/openclaw/commit/dfa580e)
- keep Plugin SDK expect declarations self-contained [feff4c7](https://github.com/openclaw/openclaw/commit/feff4c7)
- Resolve valid local references in large schema arrays [#102195](https://github.com/openclaw/openclaw/pull/102195)
- Honor explicitly empty document extractor scopes [#103731](https://github.com/openclaw/openclaw/pull/103731)
- fix(channels): honor empty catalog docs prefixes [#103794](https://github.com/openclaw/openclaw/pull/103794)
- fix(ai): reject non-finite tool schema numbers [#104470](https://github.com/openclaw/openclaw/pull/104470)
- Preserve deprecated Plugin SDK error-classification exports [#104546](https://github.com/openclaw/openclaw/pull/104546)
- Let plugin authoring finish after its launch directory disappears [#106425](https://github.com/openclaw/openclaw/pull/106425)
- Preserve Unicode text in extension command output [#108365](https://github.com/openclaw/openclaw/pull/108365)
- Let plugin runtime completions request reasoning [#108759](https://github.com/openclaw/openclaw/pull/108759)
- Share channel retry helpers and remove redundant state probes [#108903](https://github.com/openclaw/openclaw/pull/108903)
- Validate constrained plugin configuration schemas [#109569](https://github.com/openclaw/openclaw/pull/109569)
- Show malformed package paths in plugin build errors [#109916](https://github.com/openclaw/openclaw/pull/109916)
- Harden channel turn lifecycle boundaries [#110406](https://github.com/openclaw/openclaw/pull/110406)
- Prevent native hook relay deadline races from failing the CLI [#111413](https://github.com/openclaw/openclaw/pull/111413)
- Preserve zero values in normalized SDK event IDs [#113349](https://github.com/openclaw/openclaw/pull/113349)
- Resolve inbound-claim conversation identity once per hook pair [#115491](https://github.com/openclaw/openclaw/pull/115491)
- Ship TypeScript declarations for documented Plugin SDK imports [#116345](https://github.com/openclaw/openclaw/pull/116345)
- Unify JSON Schema validation across core and Control UI [#116622](https://github.com/openclaw/openclaw/pull/116622)
- Share native command merging across Discord and Slack [#120972](https://github.com/openclaw/openclaw/pull/120972)
- Keep the inbound reply shim until the next SDK major [#121922](https://github.com/openclaw/openclaw/pull/121922)
- Ignore malformed New Session drafts while consolidating coercion helpers [#122020](https://github.com/openclaw/openclaw/pull/122020)
- Report ClickClack media support accurately [#126168](https://github.com/openclaw/openclaw/pull/126168)
- Consolidate media and process runtime helpers [#126490](https://github.com/openclaw/openclaw/pull/126490)
- fix(protocol): make chat history cursor types consumable [#128018](https://github.com/openclaw/openclaw/pull/128018)

**Documentation**

- Correct the beta Plugin SDK session-store compatibility contract [#105341](https://github.com/openclaw/openclaw/pull/105341)
- Add guides for Gateway clients and embedded apps [#111726](https://github.com/openclaw/openclaw/pull/111726)
- Preserve literal names in translated documentation [6beb726](https://github.com/openclaw/openclaw/commit/6beb726)
- Preserve exact plugin surface identifiers in reference docs [ce07836](https://github.com/openclaw/openclaw/commit/ce07836)
- Privatize Mattermost and Microsoft Teams test-only exports [#107924](https://github.com/openclaw/openclaw/pull/107924)
- Publish removal windows for deprecated plugin SDK paths [#108035](https://github.com/openclaw/openclaw/pull/108035)
- Announce Plugin SDK subpath removal and demotion windows [#108415](https://github.com/openclaw/openclaw/pull/108415)
- Update migration guidance for retained Plugin SDK facades [#111535](https://github.com/openclaw/openclaw/pull/111535)
- Link plugin setup deprecations to migration guidance [#112692](https://github.com/openclaw/openclaw/pull/112692)
- Fix the Copilot CLI link in the ACPX setup guide [#114057](https://github.com/openclaw/openclaw/pull/114057)
- Clarify that pairing-request hooks are observation-only [#116055](https://github.com/openclaw/openclaw/pull/116055)
- Clarify which plugin owns inbound message claims [#116082](https://github.com/openclaw/openclaw/pull/116082)
- Document the plugin shutdown drain deadline [#118099](https://github.com/openclaw/openclaw/pull/118099)
- docs(plugins): note the factory tool execute signature [#120097](https://github.com/openclaw/openclaw/pull/120097)
- Clarify when the Codex loop-detection relay is installed [#124918](https://github.com/openclaw/openclaw/pull/124918)
- [AI-assisted] docs(copilot): describe the transcript journal, not the removed dual-write mirror [#125599](https://github.com/openclaw/openclaw/pull/125599)
- Document plugin root CLI commands separately from chat commands [#126621](https://github.com/openclaw/openclaw/pull/126621)
- docs(hooks): clarify command logger storage [#128478](https://github.com/openclaw/openclaw/pull/128478)
- docs(plugins): CLI backend example fails to compile after installation [#129646](https://github.com/openclaw/openclaw/pull/129646)
- docs(hooks): clarify setup and execution contracts [#130734](https://github.com/openclaw/openclaw/pull/130734)
- Clarify hook-only plugin startup and runtime checks [#77629](https://github.com/openclaw/openclaw/pull/77629)

**Maintenance**

- Consolidate sibling provider adapters [#117822](https://github.com/openclaw/openclaw/pull/117822)

</details>

</Accordion>

<Accordion title="Plugin Packages and Host Compatibility">

OpenClaw can now install vendor-neutral Agent Plugins from directories, archives, or Git sources, load their immediate-child skills and valid stdio, HTTP, or SSE MCP servers, and give them scoped bundle and persistent data paths. The OpenClaw extension can add activation hints, while providers, channels, configuration schemas, and runtime entry points stay outside this portable bundle contract. An invalid MCP entry is skipped without blocking valid siblings.

Cohere, Meta, BytePlus, ComfyUI, OpenCode, Voyage, Vydra, Volcengine, Mistral, NovitaAI, Teams meetings, and Zoom meetings now ship as separately installed official packages. New setups install the relevant package and restart OpenClaw, and an existing enabled setup relocates when the external artifact is available. OpenCode Go remains bundled because its external placeholder was not usable.

Plugin loading now handles the specific npm 10 through 12 metadata and lock behavior, direct and peer OpenClaw dependencies, packed host-runtime imports, and concurrent Node ESM cases that had prevented successful installs from activating. Canvas is now focused on the macOS presenter and session-board A2UI path, with its standalone workspace, eval and snapshot surfaces, native push and reset commands, and iOS, Android, and Linux clients removed. Dashboard and A2UI actions remain explicitly granted and sandboxed.

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

**Improvements**

- Add Canvas and A2UI support to the Linux desktop app [#107633](https://github.com/openclaw/openclaw/pull/107633)
- Launch hosted widgets from typed presentation buttons [#108927](https://github.com/openclaw/openclaw/pull/108927)
- Unify show_widget across Control UI and Discord [#108983](https://github.com/openclaw/openclaw/pull/108983)
- Give dashboard widgets approved network and host tools [#111687](https://github.com/openclaw/openclaw/pull/111687)
- Move Mistral to an official external provider plugin [#116919](https://github.com/openclaw/openclaw/pull/116919)
- Externalize NovitaAI as an official provider plugin [#117007](https://github.com/openclaw/openclaw/pull/117007)
- Move OpenCode to an official external provider plugin [#117035](https://github.com/openclaw/openclaw/pull/117035)
- Move OpenCode Go to the official external plugin catalog [#117064](https://github.com/openclaw/openclaw/pull/117064)
- Redesign the browser extension popup [#118095](https://github.com/openclaw/openclaw/pull/118095)
- Support Agent Plugins bundles [#120115](https://github.com/openclaw/openclaw/pull/120115)
- Add OpenClaw activation metadata to portable Agent Plugins [#120214](https://github.com/openclaw/openclaw/pull/120214)
- Add automatic local Chrome extension setup [#121586](https://github.com/openclaw/openclaw/pull/121586)
- Add a preflight check for the managed Codex app-server [#124137](https://github.com/openclaw/openclaw/pull/124137)
- Run A2UI apps as session board widgets [#125803](https://github.com/openclaw/openclaw/pull/125803)
- Refocus Canvas as a macOS widget presenter [#126030](https://github.com/openclaw/openclaw/pull/126030)
- Add a custodian-scoped operational skill library [#126186](https://github.com/openclaw/openclaw/pull/126186)
- feat(dashboard): let widgets run granted actions and open links [#127315](https://github.com/openclaw/openclaw/pull/127315)
- Add an official Windows MXC sandbox plugin [#97086](https://github.com/openclaw/openclaw/pull/97086)
- Replace npm shrinkwrap for npm 12 compatibility [#114006](https://github.com/openclaw/openclaw/pull/114006)
- Move Cohere and Meta providers out of the core package [#116662](https://github.com/openclaw/openclaw/pull/116662)
- Move Teams and Zoom meetings to official external plugins [#116682](https://github.com/openclaw/openclaw/pull/116682)
- Move DuckDuckGo search to an on-demand official plugin [#116740](https://github.com/openclaw/openclaw/pull/116740)
- Move Voyage embeddings to an external plugin [#116785](https://github.com/openclaw/openclaw/pull/116785)
- Move Vydra from the core package to an official external plugin [#116813](https://github.com/openclaw/openclaw/pull/116813)
- Move Volcengine into an official external provider package [#116854](https://github.com/openclaw/openclaw/pull/116854)
- Move BytePlus to an official external provider plugin [#116866](https://github.com/openclaw/openclaw/pull/116866)
- refactor(plugins)!: remove OpenProse [#128494](https://github.com/openclaw/openclaw/pull/128494)
- Retire the experimental Workspaces plugin [#110416](https://github.com/openclaw/openclaw/pull/110416)
- Move inline widget hosting into core [#110475](https://github.com/openclaw/openclaw/pull/110475)
- Externalize ComfyUI as an official provider plugin [#116888](https://github.com/openclaw/openclaw/pull/116888)
- Link the Chrome Web Store listing from the Apps page [#118327](https://github.com/openclaw/openclaw/pull/118327)

**Bug fixes**

- Restore plugin metadata reads on npm 12 [#109699](https://github.com/openclaw/openclaw/pull/109699)
- Restore Canvas controls and harden retired-Workspaces cleanup [#110927](https://github.com/openclaw/openclaw/pull/110927)
- Restore host runtime imports for official external plugins [#112021](https://github.com/openclaw/openclaw/pull/112021)
- Restore connected apps for token-authenticated Codex runs [#115075](https://github.com/openclaw/openclaw/pull/115075)
- fix(scripts): build heap ignores its systemd memory budget and takes the full default [#123979](https://github.com/openclaw/openclaw/pull/123979)
- fix(openshell): sandbox cleanup, workspace sync, and gateway setup failures [#129641](https://github.com/openclaw/openclaw/pull/129641)
- Prevent Node 24 plugin fallback startup races [5839c2e](https://github.com/openclaw/openclaw/commit/5839c2e)
- Evaluate Codex app-server startup deadlines before launching work [6625ea9](https://github.com/openclaw/openclaw/commit/6625ea9)
- Restore the packaged Codex sessions command [#102803](https://github.com/openclaw/openclaw/pull/102803)
- Package selected external plugins in source-built images [#103629](https://github.com/openclaw/openclaw/pull/103629)
- Stop quiet Codex ACP leases from creating empty stderr logs [#106799](https://github.com/openclaw/openclaw/pull/106799)
- Allow OCM local builds with workspace dependencies [#110426](https://github.com/openclaw/openclaw/pull/110426)
- Preserve MXC Windows path fallbacks when environment values are blank [#111077](https://github.com/openclaw/openclaw/pull/111077)
- Prevent packaged macOS Settings from crashing [#111300](https://github.com/openclaw/openclaw/pull/111300)
- Give Codex connected-app discovery more startup time [#112418](https://github.com/openclaw/openclaw/pull/112418)
- Keep user-home Codex app-servers on native authentication [#114397](https://github.com/openclaw/openclaw/pull/114397)
- Honor user-home Codex settings without enabling supervision [#114413](https://github.com/openclaw/openclaw/pull/114413)
- Recover plugin loading from Node ESM require races [#114618](https://github.com/openclaw/openclaw/pull/114618)
- Stop packaged macOS Settings crashes [#114648](https://github.com/openclaw/openclaw/pull/114648)
- Enable configured Codex apps in service sessions [#115433](https://github.com/openclaw/openclaw/pull/115433)
- Stop Diffs guidance from naming unavailable tools [#115919](https://github.com/openclaw/openclaw/pull/115919)
- Recognize Codex's API curated plugin marketplace name [#115955](https://github.com/openclaw/openclaw/pull/115955)
- Accept materialized skill directories as sandbox workdirs [#116414](https://github.com/openclaw/openclaw/pull/116414)
- Prevent canvas refresh storms and stale renewal timers [#117173](https://github.com/openclaw/openclaw/pull/117173)
- fix(ui): bound stalled widget content fetches in the sandbox host [#117363](https://github.com/openclaw/openclaw/pull/117363)
- Restore host runtime links for managed plugins [#117408](https://github.com/openclaw/openclaw/pull/117408)
- Generate the official channel catalog from owning manifests [#118097](https://github.com/openclaw/openclaw/pull/118097)
- Fix CUA packaging and Slack fallback limits for prerelease builds [#118103](https://github.com/openclaw/openclaw/pull/118103)
- Refresh bundled channel skills for current tools and safer workflows [#119020](https://github.com/openclaw/openclaw/pull/119020)
- Align the Fish Audio Speech plugin directory [#120084](https://github.com/openclaw/openclaw/pull/120084)
- Keep OpenCode Go available as a bundled provider [#120985](https://github.com/openclaw/openclaw/pull/120985)
- Execute the packaged `.mjs` CLI fallback [#121963](https://github.com/openclaw/openclaw/pull/121963)
- Restore npm-installable source Worker bundles [#122430](https://github.com/openclaw/openclaw/pull/122430)
- Resolve newly exported media-core paths for bundled plugins [#122523](https://github.com/openclaw/openclaw/pull/122523)
- Wake local Chrome extension relays on first connection [#122537](https://github.com/openclaw/openclaw/pull/122537)
- Recover failed bundled plugin views [#122823](https://github.com/openclaw/openclaw/pull/122823)
- Avoid Codex transcript warnings for sessionless runs [#122831](https://github.com/openclaw/openclaw/pull/122831)
- Keep the packaged Zalo setup wizard loadable [#122902](https://github.com/openclaw/openclaw/pull/122902)
- fix(dashboard): open widget links through the host instead of sandbox popups [#128125](https://github.com/openclaw/openclaw/pull/128125)
- fix(startup): preserve preloaded resolver hooks [#128663](https://github.com/openclaw/openclaw/pull/128663)
- fix(sessions): normalize package resource loading [#129098](https://github.com/openclaw/openclaw/pull/129098)
- fix(skills): load trusted Bun and Nix package hardlinks safely [#129662](https://github.com/openclaw/openclaw/pull/129662)
- chore(deps): refresh seven-day-cooled providers and native tooling [#130653](https://github.com/openclaw/openclaw/pull/130653)
- fix(codex): update managed runtime to 0.150.1 [#130685](https://github.com/openclaw/openclaw/pull/130685)
- Bundle the private SSRF runtime for packaged plugins [#96994](https://github.com/openclaw/openclaw/pull/96994)
- Ship the Crabbox lease helper in npm packages [28954c8](https://github.com/openclaw/openclaw/commit/28954c8)
- Stop Codex startup phases after the deadline [c953d8e](https://github.com/openclaw/openclaw/commit/c953d8e)
- Build Microsoft Teams runtime entrypoints as native CommonJS [#102366](https://github.com/openclaw/openclaw/pull/102366)
- Keep Codex app inventory diagnostics UTF-16 safe [#102414](https://github.com/openclaw/openclaw/pull/102414)
- Keep AI package environment-key loading browser-bundle safe [#102947](https://github.com/openclaw/openclaw/pull/102947)
- Preserve Unicode in Codex diagnostics boundaries [#103740](https://github.com/openclaw/openclaw/pull/103740)
- Restore selected-plugin image builds on Podman [#103814](https://github.com/openclaw/openclaw/pull/103814)
- Prevent stale plugin builds from crashing Slack startup [#104831](https://github.com/openclaw/openclaw/pull/104831)
- Honor bundle command invocation policy [#105013](https://github.com/openclaw/openclaw/pull/105013)
- fix(plugins): forward-port bundled SDK fallback hardening [#107131](https://github.com/openclaw/openclaw/pull/107131)
- Enforce the OC Path limit for multibyte URIs [#108576](https://github.com/openclaw/openclaw/pull/108576)
- Bound Docker signing-key downloads during image builds [#108894](https://github.com/openclaw/openclaw/pull/108894)
- Fix Codex command session resolution and prerelease checks [#113820](https://github.com/openclaw/openclaw/pull/113820)
- Compare plugin metadata by JSON structure [#117486](https://github.com/openclaw/openclaw/pull/117486)
- Ignore malformed plugin build-version metadata [#117639](https://github.com/openclaw/openclaw/pull/117639)
- Link plugins that declare OpenClaw as a direct dependency [#117738](https://github.com/openclaw/openclaw/pull/117738)
- fix(diffs): restore GET/HEAD Content-Length parity on viewer routes [#120280](https://github.com/openclaw/openclaw/pull/120280)
- fix(diffs-language-pack): serve byte-accurate Content-Length on asset HEAD requests [#120282](https://github.com/openclaw/openclaw/pull/120282)
- Report OS-incompatible always-on skills as unavailable [#123731](https://github.com/openclaw/openclaw/pull/123731)
- Keep packaged external plugin entries inside their runtime roots [#125173](https://github.com/openclaw/openclaw/pull/125173)
- fix: packaged Crabbox commands run without dev dependencies [#125419](https://github.com/openclaw/openclaw/pull/125419)
- Protect plugin overlays in immutable deployments [#125902](https://github.com/openclaw/openclaw/pull/125902)
- fix(oc-path): quote positional JSONC keys [#130499](https://github.com/openclaw/openclaw/pull/130499)
- Enable model-usage on Linux with CodexBar [#87986](https://github.com/openclaw/openclaw/pull/87986)

**Documentation**

- Update Codex app discovery docs to app/installed [#115867](https://github.com/openclaw/openclaw/pull/115867)
- docs(mxc): isolate test setup and cleanup [#118945](https://github.com/openclaw/openclaw/pull/118945)
- Add Agent Plugins to plugin-page discovery hints [#120323](https://github.com/openclaw/openclaw/pull/120323)

</details>

</Accordion>

</AccordionGroup>

## Security and Privacy

Sensitive work now carries more of its authority with it. Approvals stay attached to the exact request, command, session, and person that received them, removing or pairing a device again retires its old access, and protected credentials can reach supported destinations without entering model-visible text. Sandboxes, network requests, browser actions, and plugin installs also recheck the workspace, destination, document, publisher, version, or artifact they depend on, so stale or mismatched authority stops or asks again instead of being reused.

<AccordionGroup>

<Accordion title="Approvals and permissions">

An approval request now has one durable record shared by authorized browser and supported mobile surfaces. The first valid answer settles it, reconnecting cannot revive a completed request, abandoned requests are cancelled, and aborting a run clears the approvals it left pending.

Reusable command permission can bind to exact arguments and a working directory, while script-backed commands recheck the bytes that were reviewed before they run. The binding covers the reviewed command and script bytes, while interpreters and changing dependencies can introduce separate behavior; opaque wrappers and commands that can launch something else may ask again. Each session can also choose read-only, guarded, workspace, or full access and override MCP servers, skills, or web search where the client exposes those controls, with full access reserved for administrators. Scheduled and delegated work retains its originating policy, and an uncertain result from another machine is reported as unknown instead of being retried on a guess.

Per-session controls are nonretroactive, so existing sessions without a permission mode keep the previous global posture. Opt-in roles limit collaboration inside one trusted OpenClaw installation rather than creating isolation between hostile tenants.

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

**Improvements**

- Persist one canonical operator approval lifecycle [#103579](https://github.com/openclaw/openclaw/pull/103579)
- Open approvals from a secure standalone link [#103698](https://github.com/openclaw/openclaw/pull/103698)
- Add metadata-only message lifecycle audit history [#103903](https://github.com/openclaw/openclaw/pull/103903)
- Make approvals durable across sessions and mobile clients [#104837](https://github.com/openclaw/openclaw/pull/104837)
- Review durable exec approvals from Android, iPhone, and Apple Watch [#104913](https://github.com/openclaw/openclaw/pull/104913)
- Show plugin approvals as native iPhone notifications [#108709](https://github.com/openclaw/openclaw/pull/108709)
- List and resolve pending approvals from the CLI [#111060](https://github.com/openclaw/openclaw/pull/111060)
- Manage channel DM access requests in the Control UI [#112401](https://github.com/openclaw/openclaw/pull/112401)
- Show full plugin approval details in the Control UI [#113027](https://github.com/openclaw/openclaw/pull/113027)
- Let prompt hooks narrow the tool surface for one turn [#114151](https://github.com/openclaw/openclaw/pull/114151)
- Make node control enablement durable [#114892](https://github.com/openclaw/openclaw/pull/114892)
- Add per-session controls for MCP, skills, and web search [#115785](https://github.com/openclaw/openclaw/pull/115785)
- Inspect the identity behind an exact agent execution [#117034](https://github.com/openclaw/openclaw/pull/117034)
- Inspect durable run identity in Control UI [#119810](https://github.com/openclaw/openclaw/pull/119810)
- Explain operator approval outcomes in audit inspection [#119815](https://github.com/openclaw/openclaw/pull/119815)
- Bind agent and worker authority to each admitted run [#120534](https://github.com/openclaw/openclaw/pull/120534)
- Explain outbound message delivery in audit inspection [#123709](https://github.com/openclaw/openclaw/pull/123709)
- Add per-session permission modes and worktree containment [#124909](https://github.com/openclaw/openclaw/pull/124909)
- Let team operators use administrator-provisioned cloud runners [#125787](https://github.com/openclaw/openclaw/pull/125787)
- Audit exact-bound owner-native lifecycle receipts [#126082](https://github.com/openclaw/openclaw/pull/126082)
- feat(gateway): generic operator roles for non-maintainer access [#128548](https://github.com/openclaw/openclaw/pull/128548)
- feat(audit): record session action decisions [#129093](https://github.com/openclaw/openclaw/pull/129093)
- feat(approvals): scoped standing grants make recurring cron automations approvable once [#129526](https://github.com/openclaw/openclaw/pull/129526)
- feat(approvals): typed approval scope summaries on channel cards [#130116](https://github.com/openclaw/openclaw/pull/130116)
- feat(security): warn on inert mutable allowFrom entries [#131129](https://github.com/openclaw/openclaw/pull/131129)
- Send plugin approval notifications to paired iOS devices [#108505](https://github.com/openclaw/openclaw/pull/108505)
- Add authored routing checks to Policy [#111087](https://github.com/openclaw/openclaw/pull/111087)
- Add bold labels to approval prompts across messaging channels [#113193](https://github.com/openclaw/openclaw/pull/113193)
- Reuse session-store lookups during mutation authorization [#114736](https://github.com/openclaw/openclaw/pull/114736)
- Allow write-scoped creation of contained worktrees [#125598](https://github.com/openclaw/openclaw/pull/125598)
- feat(audit): explain plugin and remote actions [#126027](https://github.com/openclaw/openclaw/pull/126027)
- feat(audit): record admitted model routing decisions [#129092](https://github.com/openclaw/openclaw/pull/129092)
- feat(audit): record generic tool action decisions [#130358](https://github.com/openclaw/openclaw/pull/130358)
- Make approval request ownership explicit and backward-compatible [#125084](https://github.com/openclaw/openclaw/pull/125084)
- improve(ui): add permission docs link to picker [#131152](https://github.com/openclaw/openclaw/pull/131152)

**Bug fixes**

- Bind worker permissions to exact lifecycle claims [a0278af](https://github.com/openclaw/openclaw/commit/a0278af)
- Preserve tool restrictions across agent lifecycle transitions [b5809f5](https://github.com/openclaw/openclaw/commit/b5809f5)
- Require Doctor approval before importing state across directories [#103247](https://github.com/openclaw/openclaw/pull/103247)
- Prevent automated Doctor runs from moving approval state [#103353](https://github.com/openclaw/openclaw/pull/103353)
- Bind exec auto-review to exact commands and approvals [#103430](https://github.com/openclaw/openclaw/pull/103430)
- Prevent exec approval revocation races [#103515](https://github.com/openclaw/openclaw/pull/103515)
- Add typed cross-surface approval actions [#103679](https://github.com/openclaw/openclaw/pull/103679)
- Reject delayed Mac executions after approval policy changes [#103968](https://github.com/openclaw/openclaw/pull/103968)
- Keep cron trigger scripts within creator tool permissions [#104430](https://github.com/openclaw/openclaw/pull/104430)
- fix: keep command cron jobs operator-scoped [AI] [#106057](https://github.com/openclaw/openclaw/pull/106057)
- Require explicit owner authority for privileged commands [#107403](https://github.com/openclaw/openclaw/pull/107403)
- Keep Gateway-owned recovery and approvals in process [#108423](https://github.com/openclaw/openclaw/pull/108423)
- Keep approval policies isolated by state directory [#108742](https://github.com/openclaw/openclaw/pull/108742)
- Separate Discord voice admission from owner authority [#108813](https://github.com/openclaw/openclaw/pull/108813)
- Scope ACP session listings to the current sender [#110745](https://github.com/openclaw/openclaw/pull/110745)
- Cancel pending approvals when a run is aborted [#110993](https://github.com/openclaw/openclaw/pull/110993)
- Make missing-permission errors consistent across Gateway clients [#111013](https://github.com/openclaw/openclaw/pull/111013)
- Stop silently rerunning failed Gateway turns locally [#112074](https://github.com/openclaw/openclaw/pull/112074)
- Unblock approvals after the first successful notification [#114022](https://github.com/openclaw/openclaw/pull/114022)
- Move exec approvals from lock files to shared SQLite [#114063](https://github.com/openclaw/openclaw/pull/114063)
- Require approval for startup-capable shell wrappers [#114519](https://github.com/openclaw/openclaw/pull/114519)
- Require human approval for opaque shell commands [#114558](https://github.com/openclaw/openclaw/pull/114558)
- Require confirmation for ambiguous automatic command reviews [#114681](https://github.com/openclaw/openclaw/pull/114681)
- Reconfirm voice actions after policy or hook rewrites [#114721](https://github.com/openclaw/openclaw/pull/114721)
- Defer failed command auto-reviews to human approval [#114802](https://github.com/openclaw/openclaw/pull/114802)
- Prevent Codex approval promotion from blocking unattended runs [#116117](https://github.com/openclaw/openclaw/pull/116117)
- Prevent automatic retries after ambiguous node commands [#117276](https://github.com/openclaw/openclaw/pull/117276)
- Align Control UI session actions with operator permissions [#117920](https://github.com/openclaw/openclaw/pull/117920)
- Keep delayed Control UI commands on their originating Gateway [#118019](https://github.com/openclaw/openclaw/pull/118019)
- Bound pending approvals and preserve notification order [#118252](https://github.com/openclaw/openclaw/pull/118252)
- Require explicit owners for Reef management [#118578](https://github.com/openclaw/openclaw/pull/118578)
- Enforce configured Microsoft Teams approval owners [#118967](https://github.com/openclaw/openclaw/pull/118967)
- Make sub-agent hard-denied tools non-overridable [#120025](https://github.com/openclaw/openclaw/pull/120025)
- Enforce Telegram direct-message tool restrictions [#120992](https://github.com/openclaw/openclaw/pull/120992)
- Keep approval requests on their owning channel account [#121673](https://github.com/openclaw/openclaw/pull/121673)
- Enforce exec restrictions in Claude live sessions [#121678](https://github.com/openclaw/openclaw/pull/121678)
- Fence cron execution with durable run receipts [#122948](https://github.com/openclaw/openclaw/pull/122948)
- Let trusted local devices widen scopes without approval dead ends [#124589](https://github.com/openclaw/openclaw/pull/124589)
- Bind command approvals to reviewed script bytes [#124858](https://github.com/openclaw/openclaw/pull/124858)
- Preserve caller tool authority when updating cron jobs [#125180](https://github.com/openclaw/openclaw/pull/125180)
- Keep voice-only Talk consults read-only [#125392](https://github.com/openclaw/openclaw/pull/125392)
- Enforce session participation through lifecycle commits [#125889](https://github.com/openclaw/openclaw/pull/125889)
- Restrict owner-only tools on inbound voice calls [#125953](https://github.com/openclaw/openclaw/pull/125953)
- feat(ui): explain decision receipts in Activity [#126007](https://github.com/openclaw/openclaw/pull/126007)
- Make Full access sessions run without OpenClaw approval prompts [#126210](https://github.com/openclaw/openclaw/pull/126210)
- Preserve AGENTS.md in tool-restricted Codex turns [#126891](https://github.com/openclaw/openclaw/pull/126891)
- Revalidate scoped cron ownership before locked mutations [#127042](https://github.com/openclaw/openclaw/pull/127042)
- fix(exec): align Guardian approvals for bound compound plans [#128279](https://github.com/openclaw/openclaw/pull/128279)
- fix(codex): unify conversation permission policy [#128464](https://github.com/openclaw/openclaw/pull/128464)
- fix(agents): enforce session permissions for shared terminal input [#129604](https://github.com/openclaw/openclaw/pull/129604)
- fix(exec): scope reusable approvals to their working directory [#129636](https://github.com/openclaw/openclaw/pull/129636)
- fix(file-transfer): keep remembered approvals exact [#129762](https://github.com/openclaw/openclaw/pull/129762)
- fix(agents): preserve compaction prompt tool policy [#130337](https://github.com/openclaw/openclaw/pull/130337)
- fix(agents): release cancelled runs during credential refresh [#130856](https://github.com/openclaw/openclaw/pull/130856)
- Keep delegated channel actions inside allowed conversations [#99905](https://github.com/openclaw/openclaw/pull/99905)
- Bind Copilot active runs to host tool authority [0fa3548](https://github.com/openclaw/openclaw/commit/0fa3548)
- Bind steering authority to the active model route [129c06d](https://github.com/openclaw/openclaw/commit/129c06d)
- bind active Codex steering to tool authority [1bb20fb](https://github.com/openclaw/openclaw/commit/1bb20fb)
- Keep pending replies safe across agent route changes [42b74b2](https://github.com/openclaw/openclaw/commit/42b74b2)
- Preserve replies to pending agent questions after authority changes [54cf346](https://github.com/openclaw/openclaw/commit/54cf346)
- Keep restricted Codex capabilities disabled in isolated sessions [d183d06](https://github.com/openclaw/openclaw/commit/d183d06)
- Route concurrent ACP exec approvals to the matching prompt [#101037](https://github.com/openclaw/openclaw/pull/101037)
- Apply configured group scope to the QQBot channel API [#101765](https://github.com/openclaw/openclaw/pull/101765)
- Keep approved subagent exec follow-ups alive through cleanup [#101830](https://github.com/openclaw/openclaw/pull/101830)
- Keep failed plugin binding approvals out of trusted memory [#101906](https://github.com/openclaw/openclaw/pull/101906)
- Restore execution approvals for Mac App nodes [#102688](https://github.com/openclaw/openclaw/pull/102688)
- Require heartbeat messages to name a recipient [#103711](https://github.com/openclaw/openclaw/pull/103711)
- Restore owner-only tools for local CLI agent runs [#103922](https://github.com/openclaw/openclaw/pull/103922)
- Report actual Mac node exec-approval defaults [#103945](https://github.com/openclaw/openclaw/pull/103945)
- Reject delayed exec approvals after persisted policy changes [#103950](https://github.com/openclaw/openclaw/pull/103950)
- Enforce Slack sender policy in group DMs [#104007](https://github.com/openclaw/openclaw/pull/104007)
- Close expired macOS execution approvals [#104302](https://github.com/openclaw/openclaw/pull/104302)
- Require admin approval for browser-proxy nodes [#104491](https://github.com/openclaw/openclaw/pull/104491)
- fix(gateway): allowlist default-model config edits and explain protected-path refusals [#106071](https://github.com/openclaw/openclaw/pull/106071)
- Keep queued chat settings on their original Gateway connection [#106901](https://github.com/openclaw/openclaw/pull/106901)
- Use native Clack prompt and cancellation contracts [#107286](https://github.com/openclaw/openclaw/pull/107286)
- Root-run Claude live sessions use a supported permission mode [#107606](https://github.com/openclaw/openclaw/pull/107606)
- Prevent stale rescue approvals from applying older changes [#108147](https://github.com/openclaw/openclaw/pull/108147)
- Show configuration changes in migration previews [#108556](https://github.com/openclaw/openclaw/pull/108556)
- Block external WebChat checkpoint branching [#108678](https://github.com/openclaw/openclaw/pull/108678)
- Deny undeliverable exec approvals without the long wait [#108935](https://github.com/openclaw/openclaw/pull/108935)
- Preserve native binary approvals after short reads [#109485](https://github.com/openclaw/openclaw/pull/109485)
- Standardize channel access checks and preserve media fallbacks [#109548](https://github.com/openclaw/openclaw/pull/109548)
- Prevent unrelated admin actions from sharing one rate limit [#109557](https://github.com/openclaw/openclaw/pull/109557)
- Preserve sender-scoped tools across delegation [#110345](https://github.com/openclaw/openclaw/pull/110345)
- Clarify CLI timeouts and prevent unsafe transient retries [#110369](https://github.com/openclaw/openclaw/pull/110369)
- Refresh Discord member roles after join or leave [#110414](https://github.com/openclaw/openclaw/pull/110414)
- Add structured missing-scope authorization errors [#110925](https://github.com/openclaw/openclaw/pull/110925)
- Authorize WebChat session changes by operator scope [#110931](https://github.com/openclaw/openclaw/pull/110931)
- Reject unsafe explicit Gateway approval IDs [#111055](https://github.com/openclaw/openclaw/pull/111055)
- Preserve explicit approval IDs for validation [#111388](https://github.com/openclaw/openclaw/pull/111388)
- Require admin scope for keyed session model changes [#111651](https://github.com/openclaw/openclaw/pull/111651)
- Keep exec approvals scoped to carried commands [#111652](https://github.com/openclaw/openclaw/pull/111652)
- Enforce restricted cron tools for Claude CLI [#112457](https://github.com/openclaw/openclaw/pull/112457)
- Bind reusable exec approvals to exact arguments [#112946](https://github.com/openclaw/openclaw/pull/112946)
- Require approval for commands behind opaque wrappers [#112953](https://github.com/openclaw/openclaw/pull/112953)
- Require approval for hidden commands in additional shell wrappers [#112955](https://github.com/openclaw/openclaw/pull/112955)
- Keep more inline interpreter approvals one-shot [#112956](https://github.com/openclaw/openclaw/pull/112956)
- Complete approved TUI operator-scope upgrades [#113644](https://github.com/openclaw/openclaw/pull/113644)
- Honor deny fallback for shell-expanded exec commands [#113892](https://github.com/openclaw/openclaw/pull/113892)
- fix(agents): apply session access changes without restart [#114027](https://github.com/openclaw/openclaw/pull/114027)
- Block unmodeled command-wrapper executables [#114132](https://github.com/openclaw/openclaw/pull/114132)
- Require approval for escaped-newline shell words [#114134](https://github.com/openclaw/openclaw/pull/114134)
- Require transparent Windows cmd startup for auto-review [#114652](https://github.com/openclaw/openclaw/pull/114652)
- Stop cancelled command reviews and harden PR automation [#114745](https://github.com/openclaw/openclaw/pull/114745)
- Make Cron browse-only for read-only operators [#115091](https://github.com/openclaw/openclaw/pull/115091)
- Stop cancelled remote-node commands before or during dispatch [#115176](https://github.com/openclaw/openclaw/pull/115176)
- Make schema and approvals recovery errors actionable [#115232](https://github.com/openclaw/openclaw/pull/115232)
- Stop cancelled node commands before execution [#115373](https://github.com/openclaw/openclaw/pull/115373)
- Enforce a consistent Code Mode tool surface for OpenAI requests [#115460](https://github.com/openclaw/openclaw/pull/115460)
- Stop repeated macOS exec-approval migration retries [#115502](https://github.com/openclaw/openclaw/pull/115502)
- Require spoken confirmation and restore steering for GPT-Live Talk [#115562](https://github.com/openclaw/openclaw/pull/115562)
- Deny scheduled tools after the creator account is removed [#115932](https://github.com/openclaw/openclaw/pull/115932)
- Require approval for abbreviated inline-eval flags [#116529](https://github.com/openclaw/openclaw/pull/116529)
- Keep owner-only tools out of non-owner skill commands [#116532](https://github.com/openclaw/openclaw/pull/116532)
- Make Logbook honor the screen-capture deny control [#117803](https://github.com/openclaw/openclaw/pull/117803)
- Block unauthorized Telegram command media before download [#117821](https://github.com/openclaw/openclaw/pull/117821)
- Enforce canonical authorization for session resets [#118580](https://github.com/openclaw/openclaw/pull/118580)
- Keep conversation compaction free of hosted tools [#118618](https://github.com/openclaw/openclaw/pull/118618)
- Block unauthorized Discord and Telegram binding access [#118704](https://github.com/openclaw/openclaw/pull/118704)
- Match Control UI actions to Gateway permissions [#119286](https://github.com/openclaw/openclaw/pull/119286)
- Apply the exact approved system-agent operation [#119389](https://github.com/openclaw/openclaw/pull/119389)
- Apply Slack channel policies after session ID normalization [#119408](https://github.com/openclaw/openclaw/pull/119408)
- Require scoped routes for delegated Microsoft Teams channel reads [#119632](https://github.com/openclaw/openclaw/pull/119632)
- Align Gateway hello scopes with active RPC access [#120888](https://github.com/openclaw/openclaw/pull/120888)
- Fail closed on denied Teams group access [#121086](https://github.com/openclaw/openclaw/pull/121086)
- Deliver exec approval-unavailable notices durably [#121179](https://github.com/openclaw/openclaw/pull/121179)
- Restore local exec and plugin approval prompts for older pairings [#121529](https://github.com/openclaw/openclaw/pull/121529)
- Restrict Matrix verification actions to owners [#121532](https://github.com/openclaw/openclaw/pull/121532)
- Align DM security diagnostics with effective routing [#121741](https://github.com/openclaw/openclaw/pull/121741)
- Keep unrelated Codex tools available under channel denies [#122282](https://github.com/openclaw/openclaw/pull/122282)
- Exclude inherited data from execution-identity audits [#122418](https://github.com/openclaw/openclaw/pull/122418)
- Confirm before permanently removing Automations [#122505](https://github.com/openclaw/openclaw/pull/122505)
- Keep exec approval prompts in their source channel [#122517](https://github.com/openclaw/openclaw/pull/122517)
- Publish timer-expired approvals to reviewer surfaces [#123950](https://github.com/openclaw/openclaw/pull/123950)
- Keep routine Codex YOLO commands approval-free [#124069](https://github.com/openclaw/openclaw/pull/124069)
- Publish approval expiry after lookup or reconnect replay [#124087](https://github.com/openclaw/openclaw/pull/124087)
- Prevent cancelled approvals from replaying [#124381](https://github.com/openclaw/openclaw/pull/124381)
- Keep Codex delegation when image generation is denied [#124598](https://github.com/openclaw/openclaw/pull/124598)
- Restrict tool events to subscribed sessions [#124732](https://github.com/openclaw/openclaw/pull/124732)
- Restore worker dispatch with session permission containment [#125326](https://github.com/openclaw/openclaw/pull/125326)
- Keep the privileged macOS elevation host CUA-free [#125408](https://github.com/openclaw/openclaw/pull/125408)
- Keep node-hosted agent tools on policy-filtered surfaces [#125434](https://github.com/openclaw/openclaw/pull/125434)
- fix(system-agent): reject a second staged proposal instead of overwriting the first [#125672](https://github.com/openclaw/openclaw/pull/125672)
- Show effective exec approval policy in Devices [#125756](https://github.com/openclaw/openclaw/pull/125756)
- Alert operators when widget access decisions fail [#125934](https://github.com/openclaw/openclaw/pull/125934)
- fix(claws): remove exec approvals when a Claw agent is removed [#127365](https://github.com/openclaw/openclaw/pull/127365)
- fix(gateway): keep rootless sessions usable after permission changes [#128149](https://github.com/openclaw/openclaw/pull/128149)
- fix(gateway): enforce control-plane limits on cron mutations [#128287](https://github.com/openclaw/openclaw/pull/128287)
- fix(tui): keep action prompts scoped to their session owner [#129044](https://github.com/openclaw/openclaw/pull/129044)
- fix(whatsapp): keep QR login owner-scoped [#129381](https://github.com/openclaw/openclaw/pull/129381)
- fix(gateway): stop fabricating scope-upgrade requests on trusted-proxy reconnects [#129563](https://github.com/openclaw/openclaw/pull/129563)
- fix(gateway): tools.invoke must carry the caller's host-minted role authority [#129725](https://github.com/openclaw/openclaw/pull/129725)
- fix: stop widget approval prompts outside Guarded mode [#129970](https://github.com/openclaw/openclaw/pull/129970)
- fix(gateway): permission modes work on rootless sessions via workspace default root [#129994](https://github.com/openclaw/openclaw/pull/129994)
- fix: dashboard tools target the wrong Gateway after admission [#130112](https://github.com/openclaw/openclaw/pull/130112)
- fix: dashboard changes succeed after Gateway authority is retired [#130131](https://github.com/openclaw/openclaw/pull/130131)
- fix: board tickets remain valid across Gateway replacement [#130171](https://github.com/openclaw/openclaw/pull/130171)
- fix: filter watched-session presence by recipient visibility [#130764](https://github.com/openclaw/openclaw/pull/130764)
- fix(gateway): approval card never appears for Codex node execution started from a single Control UI window [#130967](https://github.com/openclaw/openclaw/pull/130967)
- fix(configure): preserve unrelated gateway auth policy across reconfiguration [#131035](https://github.com/openclaw/openclaw/pull/131035)
- Fail closed on stale plugin approval waits [#88203](https://github.com/openclaw/openclaw/pull/88203)
- Auto-approve read-only flags for default safe bins [#88953](https://github.com/openclaw/openclaw/pull/88953)
- Restore allowed shell tools in restricted Codex turns [#92294](https://github.com/openclaw/openclaw/pull/92294)
- Require consent before exposing xAI-billed tools to non-xAI models [#97629](https://github.com/openclaw/openclaw/pull/97629)
- Preserve 1Password authorization across execution handoffs [30738a3](https://github.com/openclaw/openclaw/commit/30738a3)
- Show unavailable Apple Watch approval state without a pending count [ae3008c](https://github.com/openclaw/openclaw/commit/ae3008c)
- Correlate prefixed outbound audit conversations [#104816](https://github.com/openclaw/openclaw/pull/104816)
- Reject malformed attach grant TTL values [#105103](https://github.com/openclaw/openclaw/pull/105103)
- Preserve pending 1Password tool authorization [#107275](https://github.com/openclaw/openclaw/pull/107275)
- Preserve target-agent tools with alsoAllow-only policies [#114530](https://github.com/openclaw/openclaw/pull/114530)
- Back off macOS approval-socket retries [#116125](https://github.com/openclaw/openclaw/pull/116125)
- Prevent stale sharing updates after switching connections [#116837](https://github.com/openclaw/openclaw/pull/116837)
- Let write-scoped operators delete archived sessions [#117468](https://github.com/openclaw/openclaw/pull/117468)
- Keep embedded TUI plugin approvals working when a listener fails [#117479](https://github.com/openclaw/openclaw/pull/117479)
- Enforce Feishu cross-context limits for message mutations [#119845](https://github.com/openclaw/openclaw/pull/119845)
- Hide Wear model controls without administrator access [#120016](https://github.com/openclaw/openclaw/pull/120016)
- Centralize interactive plugin dispatch and binding authorization [#120062](https://github.com/openclaw/openclaw/pull/120062)
- Let write-scoped operators change the current session model [#120875](https://github.com/openclaw/openclaw/pull/120875)
- Fence exec approvals with the agent deletion journal [#121273](https://github.com/openclaw/openclaw/pull/121273)
- Make Gateway tool denies apply across aliases [#123847](https://github.com/openclaw/openclaw/pull/123847)
- Keep approvals JSON failures parseable [#124585](https://github.com/openclaw/openclaw/pull/124585)
- Report approvals writes truthfully [#125960](https://github.com/openclaw/openclaw/pull/125960)
- Preserve profiles and containers in policy recovery guidance [#126710](https://github.com/openclaw/openclaw/pull/126710)
- fix: keep Code Mode restricted after an unrelated failed wait [#128098](https://github.com/openclaw/openclaw/pull/128098)
- fix(gateway): revalidate node command policy at the transport handoff [#128576](https://github.com/openclaw/openclaw/pull/128576)
- fix(agents): prevent invalid session filters from listing every session [#129198](https://github.com/openclaw/openclaw/pull/129198)
- fix(gateway): point admin auto-approve warnings at identityScopes [#129538](https://github.com/openclaw/openclaw/pull/129538)
- fix(ui): serialize remote session permissions before sending [#129674](https://github.com/openclaw/openclaw/pull/129674)
- fix(audit): report denied exec approvals only once [#130560](https://github.com/openclaw/openclaw/pull/130560)
- fix(ios): restore approval settings navigation and remove duplicate shell state [#130651](https://github.com/openclaw/openclaw/pull/130651)
- Clarify why “Allow Always” is unavailable [#97740](https://github.com/openclaw/openclaw/pull/97740)

**Documentation**

- docs: clarify IMAP recovery and reader tool policy [#131039](https://github.com/openclaw/openclaw/pull/131039)
- Document 1Password authorization and failure codes [13c7cf4](https://github.com/openclaw/openclaw/commit/13c7cf4)
- Clarify computer.act authorization and operator scopes [5b20013](https://github.com/openclaw/openclaw/commit/5b20013)
- Clarify dynamic Gateway operator scopes [#122931](https://github.com/openclaw/openclaw/pull/122931)
- Warn when exec policy reports omit session overrides [#94999](https://github.com/openclaw/openclaw/pull/94999)

</details>

</Accordion>

<Accordion title="People, devices, and pairing">

Pairing authority now lives on the device record. Removing or pairing a device again retires its old connection and worker access, non-admin device tokens can manage only their own pairing, macOS and Android can review pairing state, and administrators can create a short-lived one-paste command for joining a machine.

Automatic browser enrollment behind a trusted proxy remains off until enabled and stays within configured role and access limits. Verified proxy or Tailscale identity applies only to the current connection instead of rewriting durable pairing. The separate SSH identity check for private-network machines is on by default and follows normal OpenSSH HostName rules, so operators who want manual-only pairing must disable it and leave CIDR auto-approval unset.

Participant, session, agent, and requester identity now travels with more of the work for attribution without widening access. Managed GitHub identities apply to local command-line and API work and author metadata, while Git transport, sandboxes, remote machines, and cloud workers continue to use their own identity paths.

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

**Improvements**

- Unify macOS pairing requests in one approval panel [#102601](https://github.com/openclaw/openclaw/pull/102601)
- Auto-approve node pairing with SSH identity verification [#104180](https://github.com/openclaw/openclaw/pull/104180)
- Make Mac pairing approvals native and instant [#106091](https://github.com/openclaw/openclaw/pull/106091)
- Manage device pairings from the Android app [#111014](https://github.com/openclaw/openclaw/pull/111014)
- Auto-approve trusted-proxy browser device pairing [#111189](https://github.com/openclaw/openclaw/pull/111189)
- Use durable profiles for shared-gateway identity [#111311](https://github.com/openclaw/openclaw/pull/111311)
- Manage model-provider credentials per agent [#111796](https://github.com/openclaw/openclaw/pull/111796)
- Add controls for local pairing and failed loopback authentication [#115959](https://github.com/openclaw/openclaw/pull/115959)
- Persist per-origin device credentials for remote Gateways [#120533](https://github.com/openclaw/openclaw/pull/120533)
- Isolate named macOS app profiles [#121136](https://github.com/openclaw/openclaw/pull/121136)
- Grant operator scopes by verified identity [#121531](https://github.com/openclaw/openclaw/pull/121531)
- Connect new machines from the Where picker [#122635](https://github.com/openclaw/openclaw/pull/122635)
- Bind channel participant identity to admitted executions [#122863](https://github.com/openclaw/openclaw/pull/122863)
- feat(channels): grade sender identifier authentication in the ingress kernel [#123782](https://github.com/openclaw/openclaw/pull/123782)
- feat(plugin-sdk): publish identifier authentication contract [#123793](https://github.com/openclaw/openclaw/pull/123793)
- Connect node hosts through Cloudflare Access [#125193](https://github.com/openclaw/openclaw/pull/125193)
- Configure system and per-agent GitHub CLI identities [#125199](https://github.com/openclaw/openclaw/pull/125199)
- Credit linked session participants as Git co-authors [#125827](https://github.com/openclaw/openclaw/pull/125827)
- Authorize system and per-agent GitHub identities from Settings [#126474](https://github.com/openclaw/openclaw/pull/126474)
- Add durable human-friendly names for paired devices [#94517](https://github.com/openclaw/openclaw/pull/94517)
- Add bulk pairing decisions to the Mac app [#104011](https://github.com/openclaw/openclaw/pull/104011)
- Group session providers in macOS pairing prompts [#109320](https://github.com/openclaw/openclaw/pull/109320)
- Carry authenticated user identity into Gateway presence [#111179](https://github.com/openclaw/openclaw/pull/111179)
- Add durable user profiles for shared gateways [#111224](https://github.com/openclaw/openclaw/pull/111224)
- Allow explicit full-admin auto-approval for trusted shared gateways [#111509](https://github.com/openclaw/openclaw/pull/111509)
- Record durable parent-child lineage for spawned subagents [#122015](https://github.com/openclaw/openclaw/pull/122015)
- Attribute authenticated users in Gateway run audits [#122484](https://github.com/openclaw/openclaw/pull/122484)
- Make shared auth store ownership explicit without moving credentials [#123298](https://github.com/openclaw/openclaw/pull/123298)
- Retire the legacy Control UI device-auth migration window [#124667](https://github.com/openclaw/openclaw/pull/124667)
- Preserve requester identity for delegated agent creation [#124963](https://github.com/openclaw/openclaw/pull/124963)
- Make the per-agent GitHub identity panel easier to understand and use [#125472](https://github.com/openclaw/openclaw/pull/125472)
- feat(control-ui): show client IP and time zone on the activity identity card [#128438](https://github.com/openclaw/openclaw/pull/128438)

**Bug fixes**

- Consolidate node capability approvals into device pairing records [#103120](https://github.com/openclaw/openclaw/pull/103120)
- fix(agents): reject forged plugin owner authority [#104872](https://github.com/openclaw/openclaw/pull/104872)
- Restrict node pairing management to the caller's device [#104989](https://github.com/openclaw/openclaw/pull/104989)
- Retire stale node authority after re-pairing [#109647](https://github.com/openclaw/openclaw/pull/109647)
- Retire deleted agents transactionally [#111678](https://github.com/openclaw/openclaw/pull/111678)
- Auto-approve trusted-proxy scope upgrades for the same browser key [#111916](https://github.com/openclaw/openclaw/pull/111916)
- Require an owner-issued ticket for Telegram dashboard launches [#112292](https://github.com/openclaw/openclaw/pull/112292)
- Preserve Control UI access during device-auth upgrades [#112558](https://github.com/openclaw/openclaw/pull/112558)
- Prevent silent agent roster loss during config writes [#114054](https://github.com/openclaw/openclaw/pull/114054)
- Make multi-agent ownership explicit [#114388](https://github.com/openclaw/openclaw/pull/114388)
- Restore Gateway service commands for named profiles [#116314](https://github.com/openclaw/openclaw/pull/116314)
- Allow device authentication with skewed client clocks [#116679](https://github.com/openclaw/openclaw/pull/116679)
- Distinguish session ownership lookup failures from policy denials [#117305](https://github.com/openclaw/openclaw/pull/117305)
- Keep Discord transcript capture on the authorized bot account [#118579](https://github.com/openclaw/openclaw/pull/118579)
- Complete the mobile pairing code lifecycle [#120933](https://github.com/openclaw/openclaw/pull/120933)
- Preserve operator ownership of Codex input requests [#121171](https://github.com/openclaw/openclaw/pull/121171)
- Scope Slack Enterprise policies by workspace [#122346](https://github.com/openclaw/openclaw/pull/122346)
- Preserve selected-agent ownership for background work [#123257](https://github.com/openclaw/openclaw/pull/123257)
- Honor explicit agent ownership across system surfaces [#123339](https://github.com/openclaw/openclaw/pull/123339)
- Keep Codex available on explicit multi-agent Gateways [#124172](https://github.com/openclaw/openclaw/pull/124172)
- Preserve context-engine session ownership across agent lifecycle paths [#124376](https://github.com/openclaw/openclaw/pull/124376)
- Reject invalid agent IDs instead of targeting main [#124670](https://github.com/openclaw/openclaw/pull/124670)
- Replace stale service selectors on profile switches [#124790](https://github.com/openclaw/openclaw/pull/124790)
- Restore per-agent configuration across plugin-backed runs [#124978](https://github.com/openclaw/openclaw/pull/124978)
- Verify GitHub identity automatically from authenticated sign-in [#126114](https://github.com/openclaw/openclaw/pull/126114)
- Preserve agent ownership for live Gateway events [#126608](https://github.com/openclaw/openclaw/pull/126608)
- Clean agent approvals and references during deletion [#127037](https://github.com/openclaw/openclaw/pull/127037)
- Adopt accepted Reef friend requests safely [6315dd8](https://github.com/openclaw/openclaw/commit/6315dd8)
- Keep foreground node pairing alive until approval [#105038](https://github.com/openclaw/openclaw/pull/105038)
- Stop known-node alerts replaying after Gateway restarts [#110391](https://github.com/openclaw/openclaw/pull/110391)
- Classify system agents so clients do not offer them for selection [#111920](https://github.com/openclaw/openclaw/pull/111920)
- Identify iOS apps running on Macs correctly [#112744](https://github.com/openclaw/openclaw/pull/112744)
- Preserve verified owner access for OpenAI-compatible HTTP calls [#113638](https://github.com/openclaw/openclaw/pull/113638)
- Enforce one authenticated client owner per Gateway socket [#114196](https://github.com/openclaw/openclaw/pull/114196)
- Preserve agent and session identity in tool-result middleware [#115821](https://github.com/openclaw/openclaw/pull/115821)
- Keep each agent's cron and model state separate [#116771](https://github.com/openclaw/openclaw/pull/116771)
- Preserve session attribution across node runs [#116792](https://github.com/openclaw/openclaw/pull/116792)
- Keep execution audit attribution exact across lifecycle generations [#116796](https://github.com/openclaw/openclaw/pull/116796)
- Isolate OpenResponses history by verified proxy user [#118607](https://github.com/openclaw/openclaw/pull/118607)
- Adopt Tailscale names and avatars into user profiles [#119479](https://github.com/openclaw/openclaw/pull/119479)
- Keep hook-triggered heartbeat work with its target agent [#119817](https://github.com/openclaw/openclaw/pull/119817)
- Scope hook-triggered heartbeats to the intended agent [#119819](https://github.com/openclaw/openclaw/pull/119819)
- Require explicit identity in agent audit events [#120325](https://github.com/openclaw/openclaw/pull/120325)
- Harden ACPX generated-wrapper leases and restart cleanup [#121016](https://github.com/openclaw/openclaw/pull/121016)
- Show the outcome of cross-device token rotation [#121361](https://github.com/openclaw/openclaw/pull/121361)
- Preserve authenticated speaker identity in Codex turns [#121511](https://github.com/openclaw/openclaw/pull/121511)
- Reject nonexistent explicit session targets [#122564](https://github.com/openclaw/openclaw/pull/122564)
- Refresh GitHub results after credential changes [#122613](https://github.com/openclaw/openclaw/pull/122613)
- Preserve system-agent ownership in Gateway background work [#122987](https://github.com/openclaw/openclaw/pull/122987)
- Keep targetless Gateway events with the configured system agent [#123317](https://github.com/openclaw/openclaw/pull/123317)
- Preserve explicit ownership during Codex migration [#123331](https://github.com/openclaw/openclaw/pull/123331)
- Revoke device workers when pairing authority is removed [#123696](https://github.com/openclaw/openclaw/pull/123696)
- Audit only the workspaces owned by explicit agent fleets [#123878](https://github.com/openclaw/openclaw/pull/123878)
- Fully clean up nodes when their token is revoked [#124117](https://github.com/openclaw/openclaw/pull/124117)
- Keep auth-none local Gateway clients connected after pairing [#124545](https://github.com/openclaw/openclaw/pull/124545)
- Make agent exec use the configured system-agent owner [#124697](https://github.com/openclaw/openclaw/pull/124697)
- Restore Control UI device pairing on plain HTTP [#124724](https://github.com/openclaw/openclaw/pull/124724)
- Show agent creation hierarchy in the Control UI [#125032](https://github.com/openclaw/openclaw/pull/125032)
- Preserve audit identity across repeated Gateway restarts [#125052](https://github.com/openclaw/openclaw/pull/125052)
- Reuse authoritative state and protect rotated device credentials [#125145](https://github.com/openclaw/openclaw/pull/125145)
- Restore system-agent ownership for unscoped operator reads [#125318](https://github.com/openclaw/openclaw/pull/125318)
- Keep Matrix authorization identities case-sensitive [#125432](https://github.com/openclaw/openclaw/pull/125432)
- Load dashboard icons with paired-device credentials [#126200](https://github.com/openclaw/openclaw/pull/126200)
- Preserve caller identity for nested session tools [#126221](https://github.com/openclaw/openclaw/pull/126221)
- Honor the configured system agent for unscoped work [#126504](https://github.com/openclaw/openclaw/pull/126504)
- Reject unknown agent IDs across operator CLI selectors [#126983](https://github.com/openclaw/openclaw/pull/126983)
- Clean up cron jobs during offline agent deletion [#127075](https://github.com/openclaw/openclaw/pull/127075)
- fix(dashboard): refresh custom HTML widgets by owner [#128489](https://github.com/openclaw/openclaw/pull/128489)
- fix(workers): reject conflicting placement identity [#128670](https://github.com/openclaw/openclaw/pull/128670)
- fix(gateway): keep patch-created sessions visible to their creator [#128774](https://github.com/openclaw/openclaw/pull/128774)
- fix(codex): restore GitHub tools in Codex sessions [#128807](https://github.com/openclaw/openclaw/pull/128807)
- fix(gateway): keep verified GitHub users online during outages [#128833](https://github.com/openclaw/openclaw/pull/128833)
- fix: restore GitHub tools in managed Codex sessions [#128937](https://github.com/openclaw/openclaw/pull/128937)
- fix(webhooks): keep TaskFlow child actions within the owning session [#129633](https://github.com/openclaw/openclaw/pull/129633)
- Add informed loopback consent to trusted-proxy setup [#131132](https://github.com/openclaw/openclaw/pull/131132)
- Keep the macOS app paired after OS version updates [#89702](https://github.com/openclaw/openclaw/pull/89702)
- Accept shared macOS platform pins for local nodes [#105311](https://github.com/openclaw/openclaw/pull/105311)
- Reject unknown session agents without provisioning stores [#111178](https://github.com/openclaw/openclaw/pull/111178)
- Keep mixed-role trusted-proxy pairings pending [#111394](https://github.com/openclaw/openclaw/pull/111394)
- Bind system-agent chats to their authenticated callers [#111565](https://github.com/openclaw/openclaw/pull/111565)
- Restore explicitly authorized agent deletion [#114099](https://github.com/openclaw/openclaw/pull/114099)
- Show copyable device IDs in the devices list [#114370](https://github.com/openclaw/openclaw/pull/114370)
- Show outcomes for user-profile CLI actions [#117466](https://github.com/openclaw/openclaw/pull/117466)
- Preserve renamed node labels during reapproval [#117608](https://github.com/openclaw/openclaw/pull/117608)
- Prevent random 404s on device-pairing links [#123182](https://github.com/openclaw/openclaw/pull/123182)
- Reject unbound legacy session keys for agent authority [#123222](https://github.com/openclaw/openclaw/pull/123222)
- Preserve hook ownership during early Gateway failures [#123323](https://github.com/openclaw/openclaw/pull/123323)
- Explain Reef pairing version mismatches [#123498](https://github.com/openclaw/openclaw/pull/123498)
- Remove stale database registry rows when deleting agents [#124347](https://github.com/openclaw/openclaw/pull/124347)
- fix(agents): persist sender identity for direct-message turns [#124548](https://github.com/openclaw/openclaw/pull/124548)
- Refresh device labels after rename [#126432](https://github.com/openclaw/openclaw/pull/126432)
- fix: usage dashboard fails on legacy global sessions [#129011](https://github.com/openclaw/openclaw/pull/129011)
- fix(tui): prevent stale picker selections from changing the wrong agent [#129032](https://github.com/openclaw/openclaw/pull/129032)
- fix(nodes): approve silent initial node surfaces and name the pending surface approval [#129795](https://github.com/openclaw/openclaw/pull/129795)

**Documentation**

- Remove obsolete node pairing token references [#103140](https://github.com/openclaw/openclaw/pull/103140)
- Correct the pairing setup-code expiry contract [#103943](https://github.com/openclaw/openclaw/pull/103943)
- Correct headless node identity and pairing guidance [#103964](https://github.com/openclaw/openclaw/pull/103964)
- Document proxy scope caps on auto-approved devices [#111228](https://github.com/openclaw/openclaw/pull/111228)
- Clarify loopback Control UI authentication and recovery [#112746](https://github.com/openclaw/openclaw/pull/112746)
- Remove retired Control UI auth references from Policy [#114014](https://github.com/openclaw/openclaw/pull/114014)
- Explain Control UI pairing in private browser profiles [#114111](https://github.com/openclaw/openclaw/pull/114111)
- Correct the documented node pairing storage model [#124571](https://github.com/openclaw/openclaw/pull/124571)
- Recommend Cloudflare Access service tokens for nodes [#126536](https://github.com/openclaw/openclaw/pull/126536)

</details>

</Accordion>

<Accordion title="Secrets and private data">

The new team-scoped local Secret Store separates Protected values from Agent-readable environment values. Supported masked requests, Vault or 1Password references, and destination-bound substitution can keep a protected credential out of plaintext configuration and model-visible text while placing it into an approved Gateway-hosted HTTPS request. Agent-readable values are a separate grant for Gateway-hosted commands and can still be printed or transmitted by the command that receives them.

Secret Store values are not encrypted at rest and depend on the filesystem permissions of OpenClaw's state directory. Destination-bound substitution applies only to Gateway-hosted HTTPS commands whose subprocess honors its proxy settings. Raw sockets, containers, remote nodes, provider-native harnesses, plain HTTP, and WebSockets stay outside that path.

Common credential and signed-parameter patterns are now redacted across covered logs, diagnostics, agent errors, and Control UI failures, while chat history removes inline media bytes, local paths, private shell rows, copied prompt context, and failed-delivery payloads on the covered paths. Extra feature statistics, Android installed-app details, and iOS Health summaries require explicit choices, with Health behind two disabled-by-default gates. Update checks remain on unless disabled, while approximate Activity location is enabled by default for routable addresses and may download its local city database on first use.

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

**Improvements**

- Add managed 1Password SecretRef setup and resolution [#102293](https://github.com/openclaw/openclaw/pull/102293)
- Add opt-in, privacy-bounded HealthKit summaries [#105616](https://github.com/openclaw/openclaw/pull/105616)
- Add an approval-gated 1Password secrets broker [#106133](https://github.com/openclaw/openclaw/pull/106133)
- Show native macOS notification controls in Settings [#110646](https://github.com/openclaw/openclaw/pull/110646)
- Add a local SQLite secret store [#121559](https://github.com/openclaw/openclaw/pull/121559)
- Manage team secrets from Control UI [#121724](https://github.com/openclaw/openclaw/pull/121724)
- Expose stored team environment values to agent commands [#121773](https://github.com/openclaw/openclaw/pull/121773)
- Add destination-bound secret egress for agent commands [#123216](https://github.com/openclaw/openclaw/pull/123216)
- Add explicit protected and agent-readable Secret Store access [#126088](https://github.com/openclaw/openclaw/pull/126088)
- feat(telemetry): opt-in anonymous usage stats on a daily update ping [#128476](https://github.com/openclaw/openclaw/pull/128476)
- feat(geolocation): resolve client addresses to a coarse city via a bundled plugin [#128546](https://github.com/openclaw/openclaw/pull/128546)
- feat(secrets): agent-requested credentials the model never sees [#129670](https://github.com/openclaw/openclaw/pull/129670)
- feat(secrets): opt-in traffic allowlist for the secret egress proxy [#129880](https://github.com/openclaw/openclaw/pull/129880)
- Add bundled HashiCorp Vault SecretRef support [#89255](https://github.com/openclaw/openclaw/pull/89255)
- Add iOS notification controls to Privacy [#102733](https://github.com/openclaw/openclaw/pull/102733)
- Ask for notification permission on the first eligible chat send [#122446](https://github.com/openclaw/openclaw/pull/122446)
- Add a dedicated Gateway credential for Control UI GitHub access [#125158](https://github.com/openclaw/openclaw/pull/125158)

**Bug fixes**

- Keep Gateway startup alive when optional secrets are missing [#101265](https://github.com/openclaw/openclaw/pull/101265)
- Prevent credential retention in sentinels and debug capture [#102420](https://github.com/openclaw/openclaw/pull/102420)
- Protect credentials returned by provider auth exchanges [#104547](https://github.com/openclaw/openclaw/pull/104547)
- Let Gateway safe mode start when a channel secret is unavailable [#106826](https://github.com/openclaw/openclaw/pull/106826)
- Prevent channel URL credentials from appearing in status output [#107754](https://github.com/openclaw/openclaw/pull/107754)
- Redact structured authentication headers [#107999](https://github.com/openclaw/openclaw/pull/107999)
- Isolate broken SSH sandbox secrets to the affected agent [#110081](https://github.com/openclaw/openclaw/pull/110081)
- Keep healthy secret owners live during reload failures [#110779](https://github.com/openclaw/openclaw/pull/110779)
- Require explicit consent for macOS privacy-sensitive access [#112321](https://github.com/openclaw/openclaw/pull/112321)
- Prevent reasoning tags from leaking or hiding replies [#113205](https://github.com/openclaw/openclaw/pull/113205)
- Stop macOS Keychain prompt storms during reconnects [#114956](https://github.com/openclaw/openclaw/pull/114956)
- fix(reply): prevent private prompt context leaking into delivered replies [#115745](https://github.com/openclaw/openclaw/pull/115745)
- Redact malformed Anthropic stream payloads from errors [#116938](https://github.com/openclaw/openclaw/pull/116938)
- Redact signed and x-prefixed auth parameters consistently [#116957](https://github.com/openclaw/openclaw/pull/116957)
- Sanitize private context across iMessage delivery [#117501](https://github.com/openclaw/openclaw/pull/117501)
- Align Control UI redaction with core security rules [#117817](https://github.com/openclaw/openclaw/pull/117817)
- Keep configuration secrets with their owning rows [#118149](https://github.com/openclaw/openclaw/pull/118149)
- Keep referenced provider secrets out of plaintext [#118702](https://github.com/openclaw/openclaw/pull/118702)
- Keep exact NO_REPLY silent after internal escalation [#119463](https://github.com/openclaw/openclaw/pull/119463)
- Redact Discord bot credentials from API errors [#119536](https://github.com/openclaw/openclaw/pull/119536)
- Redact bearer credentials from remote memory errors [#119666](https://github.com/openclaw/openclaw/pull/119666)
- Simplify iOS permission requests and keep actions readable [#120338](https://github.com/openclaw/openclaw/pull/120338)
- Keep credentials out of assistant transcripts [#120728](https://github.com/openclaw/openclaw/pull/120728)
- Keep private shell output out of model context and compaction [#121147](https://github.com/openclaw/openclaw/pull/121147)
- Protect secrets consistently in memory and ACP errors [#121335](https://github.com/openclaw/openclaw/pull/121335)
- Unify media privacy across chat history [#121490](https://github.com/openclaw/openclaw/pull/121490)
- Centralize and bound provider diagnostic redaction [#121599](https://github.com/openclaw/openclaw/pull/121599)
- Keep runtime details out of ordinary chat notifications [#121600](https://github.com/openclaw/openclaw/pull/121600)
- Move iOS Share relay credentials into Keychain storage [#121900](https://github.com/openclaw/openclaw/pull/121900)
- Bound sensitive failed-delivery retention and add safe recovery tools [#123410](https://github.com/openclaw/openclaw/pull/123410)
- Prevent editable secret-redaction placeholders in sensitive fields [#123493](https://github.com/openclaw/openclaw/pull/123493)
- Prevent secret-egress crashes and unusable sandbox sentinels [#123527](https://github.com/openclaw/openclaw/pull/123527)
- Keep failed delivery records payload-free [#123642](https://github.com/openclaw/openclaw/pull/123642)
- Redact CLI errors and hide internal class names [#123929](https://github.com/openclaw/openclaw/pull/123929)
- Redact secrets from Control UI failure messages [#124552](https://github.com/openclaw/openclaw/pull/124552)
- Stop exposing reusable Gateway tokens in onboarding output [#124687](https://github.com/openclaw/openclaw/pull/124687)
- Redact provider credentials reflected in error messages [#125499](https://github.com/openclaw/openclaw/pull/125499)
- Protect secrets and config edits in the CLI [#125753](https://github.com/openclaw/openclaw/pull/125753)
- Redact channel logs and validate filters [#125939](https://github.com/openclaw/openclaw/pull/125939)
- Make Gateway config revisions opaque [#126464](https://github.com/openclaw/openclaw/pull/126464)
- Keep generated Gateway tokens out of config in reference mode [#126877](https://github.com/openclaw/openclaw/pull/126877)
- Preserve incognito session privacy across Gateway entry points [#126897](https://github.com/openclaw/openclaw/pull/126897)
- Keep Gateway credentials out of plaintext in reference mode [#126928](https://github.com/openclaw/openclaw/pull/126928)
- Redact secrets from non-interactive onboarding health failures [#127071](https://github.com/openclaw/openclaw/pull/127071)
- fix(cli): stop approvals --json printing the exec-approvals socket token [#127610](https://github.com/openclaw/openclaw/pull/127610)
- fix(secrets): fail closed for configured references [#127669](https://github.com/openclaw/openclaw/pull/127669)
- fix: preserve source code in tool results [#127697](https://github.com/openclaw/openclaw/pull/127697)
- fix(gateway): isolate portal cookies across lifetimes [#129503](https://github.com/openclaw/openclaw/pull/129503)
- fix(sandbox): stop exposing environment values in process listings [#129781](https://github.com/openclaw/openclaw/pull/129781)
- fix: prevent private prompt leaks in streamed ACP replies [#130125](https://github.com/openclaw/openclaw/pull/130125)
- Require consent before Android shares installed app details [#97888](https://github.com/openclaw/openclaw/pull/97888)
- Make Apple Health summaries clearly identifiable in iOS settings [1c16005](https://github.com/openclaw/openclaw/commit/1c16005)
- Add the required iOS Health update-purpose declaration [cac32bb](https://github.com/openclaw/openclaw/commit/cac32bb)
- Redact schema-sensitive fields from diagnostics exports [#102426](https://github.com/openclaw/openclaw/pull/102426)
- Close the remaining OpenAI OAuth refresh race [#102438](https://github.com/openclaw/openclaw/pull/102438)
- Recover Android permission prompts after timeouts [#103011](https://github.com/openclaw/openclaw/pull/103011)
- Consolidate iOS location privacy controls [#103096](https://github.com/openclaw/openclaw/pull/103096)
- Ignore inherited QQBot account credentials [#103371](https://github.com/openclaw/openclaw/pull/103371)
- Redact sensitive details from Chutes OAuth failures [#103569](https://github.com/openclaw/openclaw/pull/103569)
- Prevent transcript redaction from corrupting signed reasoning [#103628](https://github.com/openclaw/openclaw/pull/103628)
- Redact Telegram tokens across large-text boundaries [#103861](https://github.com/openclaw/openclaw/pull/103861)
- Return JSON config errors and cover split dotenv roots [#104340](https://github.com/openclaw/openclaw/pull/104340)
- Restore SecretRef targets for installed provider plugins [#104347](https://github.com/openclaw/openclaw/pull/104347)
- Resolve Ollama web-search SecretRefs safely [#104829](https://github.com/openclaw/openclaw/pull/104829)
- Preserve pagination cursors in resumed transcripts [#105039](https://github.com/openclaw/openclaw/pull/105039)
- Restrict exec secret-provider diagnostics to safe codes [#105082](https://github.com/openclaw/openclaw/pull/105082)
- Redact secrets from ClickClack REST errors [#106635](https://github.com/openclaw/openclaw/pull/106635)
- Stop inactive web secrets from blocking agent turns [#108485](https://github.com/openclaw/openclaw/pull/108485)
- Skip unreadable system-prompt files instead of injecting their paths [#108546](https://github.com/openclaw/openclaw/pull/108546)
- Keep internal control metadata out of chat transcripts [#109056](https://github.com/openclaw/openclaw/pull/109056)
- Prevent 1Password broker calls from opening desktop prompts [#109157](https://github.com/openclaw/openclaw/pull/109157)
- Isolate unavailable webhook route secrets at startup [#109715](https://github.com/openclaw/openclaw/pull/109715)
- Isolate failed channel credentials by account [#109766](https://github.com/openclaw/openclaw/pull/109766)
- Show redacted SecretRef degradation in logs and doctor [#109792](https://github.com/openclaw/openclaw/pull/109792)
- Keep healthy channel actions when one account secret is unavailable [#110329](https://github.com/openclaw/openclaw/pull/110329)
- Isolate channel accounts with unavailable credential files [#110360](https://github.com/openclaw/openclaw/pull/110360)
- Collapse repeated Vault outage diagnostics [#110908](https://github.com/openclaw/openclaw/pull/110908)
- Encrypt Android device identity storage [#110939](https://github.com/openclaw/openclaw/pull/110939)
- Preserve the legacy ClawHub telemetry opt-out behind a blank primary setting [#111078](https://github.com/openclaw/openclaw/pull/111078)
- Keep development gateways from using ambient channel credentials [#112011](https://github.com/openclaw/openclaw/pull/112011)
- Allow generic agent turns when optional web credentials are unavailable [#112522](https://github.com/openclaw/openclaw/pull/112522)
- Preserve SecretRefs through Gateway channel shutdown [#112717](https://github.com/openclaw/openclaw/pull/112717)
- Redact AWS secret access keys from logs and diagnostics [#112947](https://github.com/openclaw/openclaw/pull/112947)
- Redact secrets in common config assignments [#112952](https://github.com/openclaw/openclaw/pull/112952)
- Redact more GitLab credential formats [#112954](https://github.com/openclaw/openclaw/pull/112954)
- fix(vault): prevent insecure secrets plan writes [#113707](https://github.com/openclaw/openclaw/pull/113707)
- Keep configured local Gateway credentials authoritative [#114462](https://github.com/openclaw/openclaw/pull/114462)
- Localize macOS privacy permission prompts [#115013](https://github.com/openclaw/openclaw/pull/115013)
- Allow the first iOS Motion & Fitness permission prompt [#115523](https://github.com/openclaw/openclaw/pull/115523)
- Keep internal runtime context out of channel replies [#115561](https://github.com/openclaw/openclaw/pull/115561)
- Redact credentials from standalone debug-proxy captures [#116133](https://github.com/openclaw/openclaw/pull/116133)
- Finish iOS Calendar and Reminders grants immediately [#116504](https://github.com/openclaw/openclaw/pull/116504)
- Hide cached optional plugin tools after authentication is removed [#116625](https://github.com/openclaw/openclaw/pull/116625)
- Redact credentials from Discord REST failures [#116805](https://github.com/openclaw/openclaw/pull/116805)
- Keep plugin configuration out of loader diagnostics [#117237](https://github.com/openclaw/openclaw/pull/117237)
- Consolidate Doctor legacy migration ownership and sanitize diagnostics [#117796](https://github.com/openclaw/openclaw/pull/117796)
- Authenticate remote Gateway setup and health probes correctly [#118134](https://github.com/openclaw/openclaw/pull/118134)
- Bound large owner allowlists in model prompts [#118206](https://github.com/openclaw/openclaw/pull/118206)
- Redact invalid OTEL endpoints and suppress disabled exporters [#118635](https://github.com/openclaw/openclaw/pull/118635)
- Redact Reef credentials from relay errors [#119603](https://github.com/openclaw/openclaw/pull/119603)
- Redact reflected Google Chat credentials [#119965](https://github.com/openclaw/openclaw/pull/119965)
- Redact gateway credentials from status and log diagnostics [#120024](https://github.com/openclaw/openclaw/pull/120024)
- Isolate stored device credentials during remote Gateway probes [#120707](https://github.com/openclaw/openclaw/pull/120707)
- Fence OpenAI Responses replay metadata [#120777](https://github.com/openclaw/openclaw/pull/120777)
- Redact private audio data from chat history [#121109](https://github.com/openclaw/openclaw/pull/121109)
- Preserve rotated device tokens in WebViews [#121315](https://github.com/openclaw/openclaw/pull/121315)
- Redact Windows home paths regardless of casing [#121455](https://github.com/openclaw/openclaw/pull/121455)
- Reject empty secrets and classify oversized input consistently [#121947](https://github.com/openclaw/openclaw/pull/121947)
- Report copied agent auth profiles accurately [#122162](https://github.com/openclaw/openclaw/pull/122162)
- Keep background macOS hosts out of GUI Keychain state [#123500](https://github.com/openclaw/openclaw/pull/123500)
- fix(clawhub): read Windows auth config from AppData [#124658](https://github.com/openclaw/openclaw/pull/124658)
- Honor blocked SearXNG SecretRefs and bound extension helpers [#126214](https://github.com/openclaw/openclaw/pull/126214)
- fix(feishu): prevent disallowed env credentials from authenticating requests [#127682](https://github.com/openclaw/openclaw/pull/127682)
- fix(secrets): preserve authored env shorthand provenance [#127685](https://github.com/openclaw/openclaw/pull/127685)
- fix(secrets): preserve canonical configuration path identity [#128318](https://github.com/openclaw/openclaw/pull/128318)
- fix(lmstudio): redact reflected model-load credentials [#128561](https://github.com/openclaw/openclaw/pull/128561)
- fix(tui): clear private session state before switching agents [#129059](https://github.com/openclaw/openclaw/pull/129059)
- fix(ollama): recognize mapped IPv6 loopback endpoints [#129522](https://github.com/openclaw/openclaw/pull/129522)
- fix(plugins): scope runtime catalog discovery by provider [#129624](https://github.com/openclaw/openclaw/pull/129624)
- fix(crabbox): keep cloud worker credentials out of process arguments [#129665](https://github.com/openclaw/openclaw/pull/129665)
- fix(tui): prevent stale sessions from leaking private goals and history [#129810](https://github.com/openclaw/openclaw/pull/129810)
- fix(android): remove private camera clips after canceled recordings [#129948](https://github.com/openclaw/openclaw/pull/129948)
- fix(secrets): validate import values before writing [#131055](https://github.com/openclaw/openclaw/pull/131055)
- Strip echoed inbound metadata before channel delivery [#50520](https://github.com/openclaw/openclaw/pull/50520)
- Normalize provider keys during model config merging [#95722](https://github.com/openclaw/openclaw/pull/95722)
- Reject inherited exec secret response IDs [#101739](https://github.com/openclaw/openclaw/pull/101739)
- Harden Workboard claim-token comparisons [#104259](https://github.com/openclaw/openclaw/pull/104259)
- Stop logging raw Feishu callback tokens [#104498](https://github.com/openclaw/openclaw/pull/104498)
- Preserve partial Gateway SecretRef assignments [#105160](https://github.com/openclaw/openclaw/pull/105160)
- Redact credential-shaped text from migration terminal output [#106806](https://github.com/openclaw/openclaw/pull/106806)
- Harden Zalo hosted-media token comparison [#108512](https://github.com/openclaw/openclaw/pull/108512)
- Reject oversized 1Password service-account token files [#108596](https://github.com/openclaw/openclaw/pull/108596)
- Reject oversized Vault credential files before authentication [#108761](https://github.com/openclaw/openclaw/pull/108761)
- Preserve oversized 1Password token diagnostics [#108964](https://github.com/openclaw/openclaw/pull/108964)
- Ignore blank Web Push VAPID overrides [#109609](https://github.com/openclaw/openclaw/pull/109609)
- Explain malformed secrets plan JSON clearly [#109721](https://github.com/openclaw/openclaw/pull/109721)
- Strip current exec and bash failure traces from replies [#111877](https://github.com/openclaw/openclaw/pull/111877)
- Keep raw command output out of progress narration prompts [#112553](https://github.com/openclaw/openclaw/pull/112553)
- Restore 1Password secret references under Bun [#114346](https://github.com/openclaw/openclaw/pull/114346)
- Require explicit credentials for Gateway probe URL overrides [#118614](https://github.com/openclaw/openclaw/pull/118614)
- Retire invalid SecretRef builder flags [#118926](https://github.com/openclaw/openclaw/pull/118926)
- fix(nextcloud-talk): redact upstream error body text in send and bot-preflight [#119976](https://github.com/openclaw/openclaw/pull/119976)
- Keep public GitHub previews working when optional auth is stale [#121454](https://github.com/openclaw/openclaw/pull/121454)
- Resolve secret default aliases by source [#121630](https://github.com/openclaw/openclaw/pull/121630)
- Keep internal model reflections out of replies [#123196](https://github.com/openclaw/openclaw/pull/123196)
- fix(doctor): surface the resume failure cause for interrupted auth-profile archives [#123459](https://github.com/openclaw/openclaw/pull/123459)
- Redact provider environment values from CLI errors and audits [#124714](https://github.com/openclaw/openclaw/pull/124714)
- fix(ui): stop empty protected secrets before Gateway save [#127740](https://github.com/openclaw/openclaw/pull/127740)
- fix(matrix): hint at --json when --include-recovery-key is a text-mode dead end [#128051](https://github.com/openclaw/openclaw/pull/128051)
- fix(logging): preserve UUID token fragments [#128258](https://github.com/openclaw/openclaw/pull/128258)
- Bound direct OpenAI Realtime startup authentication errors [#87273](https://github.com/openclaw/openclaw/pull/87273)

**Documentation**

- Document the groupScope main-session trust boundary [#125006](https://github.com/openclaw/openclaw/pull/125006)
- docs: qualify Why OpenClaw security and comparison claims [#130947](https://github.com/openclaw/openclaw/pull/130947)
- Add a dedicated 1Password Gateway guide [#106109](https://github.com/openclaw/openclaw/pull/106109)
- Clarify SecretRef cold and stale degradation behavior [#111021](https://github.com/openclaw/openclaw/pull/111021)
- Stop Policy Doctor from advertising a retired redaction fix [#113961](https://github.com/openclaw/openclaw/pull/113961)
- Remove retired logging redaction guidance [#113963](https://github.com/openclaw/openclaw/pull/113963)
- Retire the unreachable redaction policy check [#113993](https://github.com/openclaw/openclaw/pull/113993)
- Clarify secret-store environment injection boundaries [#122405](https://github.com/openclaw/openclaw/pull/122405)
- docs(telemetry): lead with what is on by default and thank opt-in users [#128491](https://github.com/openclaw/openclaw/pull/128491)
- docs(secrets): make the credential-request tool discoverable and warn about empty hosts [#130299](https://github.com/openclaw/openclaw/pull/130299)

</details>

</Accordion>

<Accordion title="Sandbox and file access">

Contributor-controlled code is now prepared inside the designated untrusted-code sandbox, and managed worktrees suppress repository Git hooks unless an administrator deliberately runs the separate setup script. Repositories that relied on implicit hooks will need to move that setup into the explicit path.

Sandbox identity now includes the workspace that owns the run. Newly created guest sessions that require a sandbox receive a separate identity for each authenticated guest and can share a workspace only read-only, while worker sessions on another machine can opt into per-session containers. Direct execution remains the default, and the same per-guest boundary is not established for child sessions they create.

File checks catch more attempts to escape through the named root, denied directories, oversized reads, and POSIX symlink parents. Symlink containment is checked before the filesystem operation rather than atomically beneath the approved root, leaving a remaining window for a path to change between the check and use.

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

**Improvements**

- feat(nodes): opt-in container isolation for node-hosted worker sessions [#128447](https://github.com/openclaw/openclaw/pull/128447)
- feat(gateway): identity-conditional forced sandboxing for operator roles [#129926](https://github.com/openclaw/openclaw/pull/129926)
- Clarify oversized config mutation file errors [#110593](https://github.com/openclaw/openclaw/pull/110593)

**Bug fixes**

- Require approval for ACP searches outside the workspace [#102416](https://github.com/openclaw/openclaw/pull/102416)
- Enforce sandbox tool policy for gateway loopback tools [#103074](https://github.com/openclaw/openclaw/pull/103074)
- Bind CLI MCP tool access to the Gateway-selected sandbox context [#103822](https://github.com/openclaw/openclaw/pull/103822)
- Keep Workboard dispatch inside caller workspace authority [#107087](https://github.com/openclaw/openclaw/pull/107087)
- Deny listing protected directory roots [#109233](https://github.com/openclaw/openclaw/pull/109233)
- Adopt hardened fs-safe 0.5 filesystem primitives [#113705](https://github.com/openclaw/openclaw/pull/113705)
- Preserve shared Kubernetes namespaces during teardown [#114953](https://github.com/openclaw/openclaw/pull/114953)
- Isolate sandbox runtimes by workspace [#115766](https://github.com/openclaw/openclaw/pull/115766)
- Keep copied installs from modifying the host Gateway service [#115922](https://github.com/openclaw/openclaw/pull/115922)
- fix(sandbox): isolate role-required sandboxes per guest, not per agent [#130229](https://github.com/openclaw/openclaw/pull/130229)
- Bound workspace ignore parsing to prevent scan exhaustion [#101429](https://github.com/openclaw/openclaw/pull/101429)
- Bound gateway BOOT.md reads [#101776](https://github.com/openclaw/openclaw/pull/101776)
- Confine include-file permission fixes to trusted roots [#103267](https://github.com/openclaw/openclaw/pull/103267)
- Bind trusted session rewrites to the verified snapshot [#103848](https://github.com/openclaw/openclaw/pull/103848)
- Atomically secure the macOS exec-approvals state directory [#104028](https://github.com/openclaw/openclaw/pull/104028)
- Restrict session exports to owners and workspace files [#104708](https://github.com/openclaw/openclaw/pull/104708)
- Tighten node filesystem authorization [#106004](https://github.com/openclaw/openclaw/pull/106004)
- Secure coding-agent worktree preparation and preserve target branches [#106121](https://github.com/openclaw/openclaw/pull/106121)
- Prevent Docker setup chown from following symlinks [#107847](https://github.com/openclaw/openclaw/pull/107847)
- Bound external plugin catalog reads to 16 MiB [#108200](https://github.com/openclaw/openclaw/pull/108200)
- Reject remote hardlinks under localized shells [#108879](https://github.com/openclaw/openclaw/pull/108879)
- Bound credential-file reads across remaining integrations [#109260](https://github.com/openclaw/openclaw/pull/109260)
- Bound config input and trajectory pointer reads [#110516](https://github.com/openclaw/openclaw/pull/110516)
- Bound config reads during diagnostic export [#110591](https://github.com/openclaw/openclaw/pull/110591)
- Bound plugin bundle command file reads [#110594](https://github.com/openclaw/openclaw/pull/110594)
- Reject corrupt session-state notice context keys [#111152](https://github.com/openclaw/openclaw/pull/111152)
- Resolve shell snapshots from a trusted home directory [#113103](https://github.com/openclaw/openclaw/pull/113103)
- Reject POSIX symlink-parent workspace escapes [#113405](https://github.com/openclaw/openclaw/pull/113405)
- Keep Zalo QR temp files private while consolidating safe file access [#113596](https://github.com/openclaw/openclaw/pull/113596)
- Keep named CLI profiles isolated from inherited service state [#114446](https://github.com/openclaw/openclaw/pull/114446)
- Reject unsafe SSH sandbox settings [#115036](https://github.com/openclaw/openclaw/pull/115036)
- Stop sandbox setup failures from exhausting model fallbacks [#115481](https://github.com/openclaw/openclaw/pull/115481)
- Keep long sandbox container prefixes scope-unique [#115571](https://github.com/openclaw/openclaw/pull/115571)
- Restore safe iMessage workspace attachments [#117779](https://github.com/openclaw/openclaw/pull/117779)
- Make untrusted filenames portable across Windows and SharePoint [#119363](https://github.com/openclaw/openclaw/pull/119363)
- Keep QQ Bot voice staging inside managed storage [#120188](https://github.com/openclaw/openclaw/pull/120188)
- Protect local agent state from concurrent Gateway writes [#120896](https://github.com/openclaw/openclaw/pull/120896)
- Clean up Discord voice files after failed sends [#120904](https://github.com/openclaw/openclaw/pull/120904)
- Guard embedded CLI state writers [#121282](https://github.com/openclaw/openclaw/pull/121282)
- Keep named-profile workspaces inside profile state roots [#122733](https://github.com/openclaw/openclaw/pull/122733)
- Prevent Windows Doctor audit-migration fsync failures [#123376](https://github.com/openclaw/openclaw/pull/123376)
- Remove recreated agent-state files during deletion [#124461](https://github.com/openclaw/openclaw/pull/124461)
- Normalize ACP file URLs before cwd-scoped approval [#124530](https://github.com/openclaw/openclaw/pull/124530)
- Standardize safe filesystem path containment [#124870](https://github.com/openclaw/openclaw/pull/124870)
- Prevent destructive cleanup and deletion from replaying after Gateway errors [#126743](https://github.com/openclaw/openclaw/pull/126743)
- fix(agents): keep Unicode filename reads inside workspace [#128873](https://github.com/openclaw/openclaw/pull/128873)
- fix(agents): remove external databases during offline delete [#129017](https://github.com/openclaw/openclaw/pull/129017)
- fix(agents): preserve survivor-owned databases offline [#129085](https://github.com/openclaw/openclaw/pull/129085)
- fix: keep session catalog mirroring within isolated profiles [#129638](https://github.com/openclaw/openclaw/pull/129638)
- fix(worktrees): never execute repository git hooks during provisioning [#129968](https://github.com/openclaw/openclaw/pull/129968)
- fix(gateway): pin git config for session-diff and worker workspace paths [#130124](https://github.com/openclaw/openclaw/pull/130124)
- fix(agents): preserve workspace ownership across path aliases [#130372](https://github.com/openclaw/openclaw/pull/130372)
- fix(sandbox): stop retaining built-in backends across module reloads [#130518](https://github.com/openclaw/openclaw/pull/130518)
- fix(sessions): preserve required creation stamps in storage [#131147](https://github.com/openclaw/openclaw/pull/131147)
- Prevent false takeover aborts after unchanged transcript rewrites [#91797](https://github.com/openclaw/openclaw/pull/91797)
- Prevent sandbox bind conflicts with protected skill mounts [#93985](https://github.com/openclaw/openclaw/pull/93985)
- fix(agents): keep embedded prompts isolated from ambient files (#110776) [e3c78c3](https://github.com/openclaw/openclaw/commit/e3c78c3)
- Cap agent message-file reads before dispatch [#101442](https://github.com/openclaw/openclaw/pull/101442)
- Bound identity-file reads to prevent memory exhaustion [#101447](https://github.com/openclaw/openclaw/pull/101447)
- Bound hook metadata reads during installation [#101469](https://github.com/openclaw/openclaw/pull/101469)
- Bound workspace hook metadata reads [#101472](https://github.com/openclaw/openclaw/pull/101472)
- Record verified directory archive size in file-transfer audits [#104536](https://github.com/openclaw/openclaw/pull/104536)
- Reject oversized inline file writes before dispatch [#104556](https://github.com/openclaw/openclaw/pull/104556)
- Bound Nextcloud Talk API password file reads [#108321](https://github.com/openclaw/openclaw/pull/108321)
- Bound and recover debug-proxy CA generation [#109106](https://github.com/openclaw/openclaw/pull/109106)
- Bound state and startup `.env` reads to 1 MiB [#109487](https://github.com/openclaw/openclaw/pull/109487)
- Bound secrets plan files to 16 MiB [#109652](https://github.com/openclaw/openclaw/pull/109652)
- Bound plugin manifest metadata reads [#110036](https://github.com/openclaw/openclaw/pull/110036)
- Bound exec approvals file reads to 1 MiB [#110755](https://github.com/openclaw/openclaw/pull/110755)
- Surface sandbox probe failures instead of false empty results [#124881](https://github.com/openclaw/openclaw/pull/124881)
- fix(sandbox): read tool rejects declared binds with workspace-only enabled [#130540](https://github.com/openclaw/openclaw/pull/130540)

**Documentation**

- Document multiple host folders for one sandboxed agent [#109530](https://github.com/openclaw/openclaw/pull/109530)
- Document a restricted Gmail reader setup [#116041](https://github.com/openclaw/openclaw/pull/116041)
- docs(exec): correct host=auto per-call override semantics [#120331](https://github.com/openclaw/openclaw/pull/120331)

</details>

</Accordion>

<Accordion title="Network Access and Untrusted Content">

Network policy now blocks unspecified and local-use NAT64 targets by default, validates guarded redirects and no-auth browser origins, and stops telemetry when its configured proxy is invalid instead of bypassing it. Private automation webhook destinations require an exact-host exception or a broader private-network switch, with the broader setting widening trust across every configured cron webhook.

Text returned by search, fetch, MCP, plugins, Browser, and other network-backed tools is bounded, normalized, and marked as untrusted external content before the model sees it. This makes the source and boundary explicit, while the model can still be influenced by hostile material it reads.

Terminal and CSV output neutralize covered control-sequence and formula injection forms, configuration rejects prototype-polluting paths, and browser references, executable waits, navigation, and MCP App grants are rechecked against the document and live authority that produced them. Browser navigation enforcement covers selected-page document traffic during managed actions and a bounded grace period, leaving popups, Service Workers, background requests, some redirects, and remote backends outside that boundary.

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

**Improvements**

- Normalize and secure web search results [#110308](https://github.com/openclaw/openclaw/pull/110308)
- Allow trusted private targets for automation webhooks [#118286](https://github.com/openclaw/openclaw/pull/118286)
- Add All tabs and Selected tabs Chrome access modes [#120995](https://github.com/openclaw/openclaw/pull/120995)
- Use plain marked labels for inbound context [#112000](https://github.com/openclaw/openclaw/pull/112000)

**Bug fixes**

- Block prototype-polluting configuration paths [#102840](https://github.com/openclaw/openclaw/pull/102840)
- Block disallowed browser origins in no-auth HTTP mode [#102881](https://github.com/openclaw/openclaw/pull/102881)
- Block workspace Cloud SDK controls during Gmail setup [#103918](https://github.com/openclaw/openclaw/pull/103918)
- Block policy-denied navigation during browser interactions [#104254](https://github.com/openclaw/openclaw/pull/104254)
- Keep MCP Apps aligned with runtime tool policy [#105075](https://github.com/openclaw/openclaw/pull/105075)
- Authenticate external plugin tabs without exposing Gateway tokens [#107323](https://github.com/openclaw/openclaw/pull/107323)
- Block prototype-polluting keys during JSON Schema default hydration [#107978](https://github.com/openclaw/openclaw/pull/107978)
- Harden external-content markers and web search output [#110417](https://github.com/openclaw/openclaw/pull/110417)
- Block widget-authored host commands [#110808](https://github.com/openclaw/openclaw/pull/110808)
- Harden authority for pinned MCP Apps [#111679](https://github.com/openclaw/openclaw/pull/111679)
- Enforce macOS Gateway TLS pins across operator traffic [#112353](https://github.com/openclaw/openclaw/pull/112353)
- Block incomplete Mistral streamed tool calls [#117137](https://github.com/openclaw/openclaw/pull/117137)
- Bound DeepSeek DSML recovery memory [#117175](https://github.com/openclaw/openclaw/pull/117175)
- Wrap page-controlled Browser action results [#118691](https://github.com/openclaw/openclaw/pull/118691)
- Sanitize forged content boundaries after JSON encoding [#118698](https://github.com/openclaw/openclaw/pull/118698)
- Isolate network-backed dynamic tool output [#118729](https://github.com/openclaw/openclaw/pull/118729)
- Preserve private Bedrock embedding endpoints [#118744](https://github.com/openclaw/openclaw/pull/118744)
- Enforce exact Feishu webhook request boundaries [#118758](https://github.com/openclaw/openclaw/pull/118758)
- Harden network tool output against hostile external content [#118984](https://github.com/openclaw/openclaw/pull/118984)
- Block terminal-control injection across TUI rendering [#118998](https://github.com/openclaw/openclaw/pull/118998)
- Bind authenticated Apple web pages to the trusted Gateway [#119906](https://github.com/openclaw/openclaw/pull/119906)
- Secure Synology attachments and System Agent config commands [#119941](https://github.com/openclaw/openclaw/pull/119941)
- Harden Gateway proxy and managed Tailscale ingress [#119950](https://github.com/openclaw/openclaw/pull/119950)
- Sanitize approval text and display paths at creation [#123742](https://github.com/openclaw/openclaw/pull/123742)
- Sanitize stored text across CLI output [#123797](https://github.com/openclaw/openclaw/pull/123797)
- Reject malformed native Codex tool arguments before execution [#124649](https://github.com/openclaw/openclaw/pull/124649)
- Keep node MCP calls within the published catalog [#124652](https://github.com/openclaw/openclaw/pull/124652)
- Apply Codex search domain policy to managed web fetch [#125574](https://github.com/openclaw/openclaw/pull/125574)
- Repair browser session lifecycle ownership [#125933](https://github.com/openclaw/openclaw/pull/125933)
- Preserve MCP catalog and result integrity [#126083](https://github.com/openclaw/openclaw/pull/126083)
- Stop revoked MCP App actions after delayed catalog work [#126415](https://github.com/openclaw/openclaw/pull/126415)
- fix(mcp): stop resource access after app grant revocation [#129550](https://github.com/openclaw/openclaw/pull/129550)
- Render assistant-authored transcript headers as inert text [#99404](https://github.com/openclaw/openclaw/pull/99404)
- Bind direct hook delivery before scheduling [#100486](https://github.com/openclaw/openclaw/pull/100486)
- Prevent unbounded hosted plugin catalog reads [#101000](https://github.com/openclaw/openclaw/pull/101000)
- Keep browser wait predicates inside approved documents [#101852](https://github.com/openclaw/openclaw/pull/101852)
- Apply request policy to Qwen and Alibaba video generation [#102094](https://github.com/openclaw/openclaw/pull/102094)
- Keep mapped webhook provenance scoped to trusted routing [#102418](https://github.com/openclaw/openclaw/pull/102418)
- Limit inbound realtime-transcription WebSocket messages [#102443](https://github.com/openclaw/openclaw/pull/102443)
- Reject malformed managed image data URLs without stalling replies [#102825](https://github.com/openclaw/openclaw/pull/102825)
- Block unspecified DNS targets for trusted network fetches [#103075](https://github.com/openclaw/openclaw/pull/103075)
- Block workspace dotenv endpoint overrides [#103914](https://github.com/openclaw/openclaw/pull/103914)
- Reject stale Browser refs after navigation [#104308](https://github.com/openclaw/openclaw/pull/104308)
- Guard ClawRouter usage redirects against SSRF [#104592](https://github.com/openclaw/openclaw/pull/104592)
- Apply xAI request policy across video generation [#104836](https://github.com/openclaw/openclaw/pull/104836)
- Prevent malformed language-server output from exhausting gateway memory [#105460](https://github.com/openclaw/openclaw/pull/105460)
- Harden Control UI previews and media download headers [#106545](https://github.com/openclaw/openclaw/pull/106545)
- Stop Vault SecretRef resolution from hanging on stalled bodies [#108970](https://github.com/openclaw/openclaw/pull/108970)
- Prevent terminal-control injection from stored transcripts [#110060](https://github.com/openclaw/openclaw/pull/110060)
- Restrict LiteLLM loopback trust to real IP addresses [#110693](https://github.com/openclaw/openclaw/pull/110693)
- Filter prototype-sensitive Feishu webhook fields [#111729](https://github.com/openclaw/openclaw/pull/111729)
- Fence external hook job names in isolated-agent prompts [#112501](https://github.com/openclaw/openclaw/pull/112501)
- Block C preprocessor selection in host execution environments [#112560](https://github.com/openclaw/openclaw/pull/112560)
- Block unsafe workspace dotenv runtime controls [#114133](https://github.com/openclaw/openclaw/pull/114133)
- Classify loopback hosts consistently across plugins [#114832](https://github.com/openclaw/openclaw/pull/114832)
- Harden Android math and generated-report boundaries [#115055](https://github.com/openclaw/openclaw/pull/115055)
- Keep Browser Copilot locked to the shared tab [#116778](https://github.com/openclaw/openclaw/pull/116778)
- Reject malformed tool calls and surface approval delivery failures [#116831](https://github.com/openclaw/openclaw/pull/116831)
- Show task failure reasons and protect terminal output [#117568](https://github.com/openclaw/openclaw/pull/117568)
- Refuse direct telemetry export when a configured proxy is invalid [#118612](https://github.com/openclaw/openclaw/pull/118612)
- Fail closed on invalid OpenTelemetry TLS files [#118648](https://github.com/openclaw/openclaw/pull/118648)
- Preserve plugin result provenance after cache hits [#118874](https://github.com/openclaw/openclaw/pull/118874)
- Fence remote Feishu tool content and retain its provenance [#118877](https://github.com/openclaw/openclaw/pull/118877)
- Keep whitespace-prefixed bang input in TUI chat [#119245](https://github.com/openclaw/openclaw/pull/119245)
- Bound nested Browser batch actions during validation [#120274](https://github.com/openclaw/openclaw/pull/120274)
- Unify attachment byte classification [#122168](https://github.com/openclaw/openclaw/pull/122168)
- fix(msteams): require dot boundary for shared-link host suffix match [#123046](https://github.com/openclaw/openclaw/pull/123046)
- fix(discord): label audio transcripts as untrusted [#123098](https://github.com/openclaw/openclaw/pull/123098)
- Harden local-use NAT64 provider and Gateway trust [#123241](https://github.com/openclaw/openclaw/pull/123241)
- Reject invalid CLI filter values [#124520](https://github.com/openclaw/openclaw/pull/124520)
- Bound stalled Telegram Mini App request bodies [#124944](https://github.com/openclaw/openclaw/pull/124944)
- Normalize TLS certificate pins across gateway and worker paths [#125276](https://github.com/openclaw/openclaw/pull/125276)
- Restore trusted external Tailscale routes without weakening Gateway auth [#125412](https://github.com/openclaw/openclaw/pull/125412)
- Accept exact custom browser origins in the Gateway allowlist [#38290](https://github.com/openclaw/openclaw/pull/38290)
- Reject credential-bearing cron webhook URLs [#51822](https://github.com/openclaw/openclaw/pull/51822)
- Preserve trusted generated HTML through outbound staging [#90579](https://github.com/openclaw/openclaw/pull/90579)
- Allow Comfy private service hostnames safely [#99065](https://github.com/openclaw/openclaw/pull/99065)
- Keep debug proxy response capture memory-bounded [#101268](https://github.com/openclaw/openclaw/pull/101268)
- Reject inherited object properties as QR delivery channels [#101652](https://github.com/openclaw/openclaw/pull/101652)
- Reject unsafe QQBot mention patterns [#102976](https://github.com/openclaw/openclaw/pull/102976)
- Reject impossible dates in audit time filters [#103433](https://github.com/openclaw/openclaw/pull/103433)
- Sanitize oversized plugin command arguments safely [#104015](https://github.com/openclaw/openclaw/pull/104015)
- Block browser hooks on disallowed current pages [#104095](https://github.com/openclaw/openclaw/pull/104095)
- Bound Ed25519 base64url decode inputs [#104921](https://github.com/openclaw/openclaw/pull/104921)
- Bound Reef guard provider response reads [#106439](https://github.com/openclaw/openclaw/pull/106439)
- Validate 1Password audit limits strictly [#106926](https://github.com/openclaw/openclaw/pull/106926)
- Align proxy bypass matching across OpenClaw and Telegram [#107711](https://github.com/openclaw/openclaw/pull/107711)
- Cap piped model-auth input at 1 MiB [#109800](https://github.com/openclaw/openclaw/pull/109800)
- Accept padded audit-list cursors [#110551](https://github.com/openclaw/openclaw/pull/110551)
- Trim pasted identifiers in Gateway audit filters [#110847](https://github.com/openclaw/openclaw/pull/110847)
- Keep guarded redirects working when cleanup fails [#111156](https://github.com/openclaw/openclaw/pull/111156)
- Reject malformed Microsoft Teams OAuth token envelopes [#111638](https://github.com/openclaw/openclaw/pull/111638)
- Prevent spreadsheet formulas in Usage CSV labels [#111653](https://github.com/openclaw/openclaw/pull/111653)
- Reject malformed UTF-8 from browser-control endpoints [#111898](https://github.com/openclaw/openclaw/pull/111898)
- Explain missing sandbox origins for proxied widgets [#111909](https://github.com/openclaw/openclaw/pull/111909)
- Block CXXCPP host environment overrides [#112684](https://github.com/openclaw/openclaw/pull/112684)
- Restore release validation and preserve browser CDP authority [#112740](https://github.com/openclaw/openclaw/pull/112740)
- Reject malformed browser-proxy file data before saving [#115045](https://github.com/openclaw/openclaw/pull/115045)
- Reject malformed UTF-8 from agent-bundle language servers [#117271](https://github.com/openclaw/openclaw/pull/117271)
- Consolidate channel discovery and reject unsafe catalog defaults [#117541](https://github.com/openclaw/openclaw/pull/117541)
- Sanitize and bound unknown CLI commands [#120380](https://github.com/openclaw/openclaw/pull/120380)
- Restore numeric cursors for audit decision inspection [#122619](https://github.com/openclaw/openclaw/pull/122619)
- Prevent stored approval values from running terminal escapes [#123671](https://github.com/openclaw/openclaw/pull/123671)
- Show valid values for rejected audit filters [#124336](https://github.com/openclaw/openclaw/pull/124336)
- Reject impossible audit filter combinations [#124513](https://github.com/openclaw/openclaw/pull/124513)
- Preserve Diffs remote-viewer lockouts under load [#126484](https://github.com/openclaw/openclaw/pull/126484)
- fix(cli): prevent node commands from controlling terminal output [#127856](https://github.com/openclaw/openclaw/pull/127856)
- Bound GitHub release metadata reads for agent tools [#98480](https://github.com/openclaw/openclaw/pull/98480)
- Keep Thread Ownership conflicts bounded and authoritative [#98941](https://github.com/openclaw/openclaw/pull/98941)

**Documentation**

- Expand Gateway rate-limiting documentation [3fee3cc](https://github.com/openclaw/openclaw/commit/3fee3cc)
- Harden Gmail hook security guidance [6551786](https://github.com/openclaw/openclaw/commit/6551786)
- Clarify requester-scoped tool controls and untrusted prompt context [#113400](https://github.com/openclaw/openclaw/pull/113400)

</details>

</Accordion>

<Accordion title="Plugin Permissions and Installation Checks">

Managed external plugin installs now show one capability review bound to the artifact being installed and ask again when an update requests more authority. Skill security verdicts stay attached to the exact publisher and version, ClawHub GitHub installs require a full commit SHA instead of a mutable branch or tag, and managed Homebrew or NodeSource installers stop when a response fails, is empty, redirects, or lacks a shebang.

The capability prompt applies to managed external installs. Bundled plugins skip it, already-enabled legacy plugins keep their existing access, and bundled execution retains named compatibility exceptions. The review shows what a plugin is asking to do, while authenticity and code safety continue to depend on artifact integrity, registry identity, and code review. A full commit SHA pins the downloaded archive bytes while source metadata still depends on the resolver, and the installer response check only confirms that the download looks like a script.

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

**Improvements**

- Review and approve plugin install warnings in Control UI [#120900](https://github.com/openclaw/openclaw/pull/120900)
- feat(plugins): one consent screen for plugin capabilities, bound to the reviewed artifact [#130168](https://github.com/openclaw/openclaw/pull/130168)
- Move plugin package-name restrictions to operator policy [#101813](https://github.com/openclaw/openclaw/pull/101813)
- Show safe removal commands for malicious skills [#118969](https://github.com/openclaw/openclaw/pull/118969)

**Bug fixes**

- Enforce plugin deny rules regardless of ID case [#109237](https://github.com/openclaw/openclaw/pull/109237)
- Enforce isolation and approval integrity for plugin hooks [#115701](https://github.com/openclaw/openclaw/pull/115701)
- Withhold plugin routes until node capability approval [#115980](https://github.com/openclaw/openclaw/pull/115980)
- Prevent scoped plugin loads from replacing the root registry [#117587](https://github.com/openclaw/openclaw/pull/117587)
- Enforce bundled-plugin execution policy [#118701](https://github.com/openclaw/openclaw/pull/118701)
- Keep installed skill security verdicts tied to the publisher [#119672](https://github.com/openclaw/openclaw/pull/119672)
- Freeze installed Claw tool authority [#121327](https://github.com/openclaw/openclaw/pull/121327)
- Harden Docker images and reduce fixable vulnerability findings [#123282](https://github.com/openclaw/openclaw/pull/123282)
- Preserve plugin trust policy after update failures [#108661](https://github.com/openclaw/openclaw/pull/108661)
- Stop meme-maker from recommending unsafe package installs [#109612](https://github.com/openclaw/openclaw/pull/109612)
- Upgrade protobufjs to fix proto-parser denial of service [#112184](https://github.com/openclaw/openclaw/pull/112184)
- Update vulnerable dependencies and native string inventory [#112406](https://github.com/openclaw/openclaw/pull/112406)
- Validate downloaded installer scripts before execution [#113307](https://github.com/openclaw/openclaw/pull/113307)
- Prevent blocked plugin enables from changing configuration [#114490](https://github.com/openclaw/openclaw/pull/114490)
- Patch archive and MCP server dependencies [#115029](https://github.com/openclaw/openclaw/pull/115029)
- Accept safe Node options during Codex setup [#115541](https://github.com/openclaw/openclaw/pull/115541)
- Detect aliased child-process execution in source scans [#116304](https://github.com/openclaw/openclaw/pull/116304)
- Prevent plugin uninstall from choosing the wrong target [#117406](https://github.com/openclaw/openclaw/pull/117406)
- Reject external plugin public-artifact hardlinks [#118689](https://github.com/openclaw/openclaw/pull/118689)
- Revoke plugin capability links when nodes are removed [#119848](https://github.com/openclaw/openclaw/pull/119848)
- Update NanoID past a denial-of-service advisory [#120368](https://github.com/openclaw/openclaw/pull/120368)
- Stop loading retired inline hook modules [#120851](https://github.com/openclaw/openclaw/pull/120851)
- Update macOS Peekaboo for fail-closed background keyboard targeting [#125364](https://github.com/openclaw/openclaw/pull/125364)
- Require immutable GitHub commits for ClawHub skill installs [#97157](https://github.com/openclaw/openclaw/pull/97157)
- Preserve approval routes for plugin node commands [#98561](https://github.com/openclaw/openclaw/pull/98561)
- Limit marketplace manifest reads to 16 MiB [#101774](https://github.com/openclaw/openclaw/pull/101774)
- Update Axios past a proxy advisory [#111984](https://github.com/openclaw/openclaw/pull/111984)
- Pin brace-expansion 5.0.8 to remediate a high-severity advisory [#113428](https://github.com/openclaw/openclaw/pull/113428)
- Remove retired install-policy bypass guidance [#120011](https://github.com/openclaw/openclaw/pull/120011)

</details>

</Accordion>

</AccordionGroup>

## Quality-of-Life Improvements

Everyday work in OpenClaw now takes less effort to find, follow, move, and protect. Past conversations are easier to return to, long jobs keep useful progress visible, portable snapshots can be checked before they are needed, and eligible work can run on a cloud worker or paired computer, with cloud sessions later reclaimed to the main machine. Voice, video, meeting capture, agent tools, keyboard access, maintained translations, interface polish, and documentation also pick up changes that make the product easier to use across ordinary work.

<AccordionGroup>

<Accordion title="Past Conversations and Long-Running Work">

Past conversations and long-running work are easier to find and follow. The session catalog groups and opens Codex, Claude Code, OpenCode, and Pi work from the main OpenClaw computer or an eligible paired one, durable progress cards survive reloads and reconnects, and background-task history is available on the web, iOS, and Android. An optional observer can summarize a conversation, answer questions about it, show its timeline, and alert an operator when attention is needed.

Resume support depends on the runtime that owns the session. OpenCode and Pi catalogs are view-only, paired-computer actions need an opted-in capable host and an eligible session, and external transcripts remain with their original runtime. The observer can be disabled and requires an available utility model.

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

**Improvements**

- Add shareable board filtering to Workboard [#102068](https://github.com/openclaw/openclaw/pull/102068)
- Browse Codex sessions across Gateway and nodes [#102586](https://github.com/openclaw/openclaw/pull/102586)
- Add native Codex session supervision [#104045](https://github.com/openclaw/openclaw/pull/104045)
- Show Codex sessions and transcripts in the sidebar [#104437](https://github.com/openclaw/openclaw/pull/104437)
- Browse Claude sessions across paired computers [#104528](https://github.com/openclaw/openclaw/pull/104528)
- Durable child-session state notices and reconciliation [#104636](https://github.com/openclaw/openclaw/pull/104636)
- Bring Claude Code and Codex histories into native sessions [#104717](https://github.com/openclaw/openclaw/pull/104717)
- Let session coordinators watch peer state changes [#104815](https://github.com/openclaw/openclaw/pull/104815)
- Add full-text recall across past sessions [#105057](https://github.com/openclaw/openclaw/pull/105057)
- Create provider-native sessions from the sidebar [#105810](https://github.com/openclaw/openclaw/pull/105810)
- Continue Claude Code sessions on paired nodes [#105833](https://github.com/openclaw/openclaw/pull/105833)
- Reinforce follow-through on promised agent work [#105958](https://github.com/openclaw/openclaw/pull/105958)
- Expose safe session classification facts to clients [#106832](https://github.com/openclaw/openclaw/pull/106832)
- Show compaction savings and active-run time in Control UI [#106921](https://github.com/openclaw/openclaw/pull/106921)
- Continue paired-node Codex sessions from the Control UI [#106927](https://github.com/openclaw/openclaw/pull/106927)
- Discover OpenCode and Pi sessions on local and paired nodes [#106941](https://github.com/openclaw/openclaw/pull/106941)
- feat(sessions): upstream liveness for adopted catalog sessions [#107009](https://github.com/openclaw/openclaw/pull/107009)
- Open Codex and Claude sessions in their native terminal [#107086](https://github.com/openclaw/openclaw/pull/107086)
- Resume OpenCode and Pi sessions in the terminal [#107200](https://github.com/openclaw/openclaw/pull/107200)
- Show live agent plan checklists in chat channels [#108597](https://github.com/openclaw/openclaw/pull/108597)
- Show live plan checklists in first-party chat clients [#108675](https://github.com/openclaw/openclaw/pull/108675)
- Show Atlas and ChatGPT Codex sessions in the catalog [#109142](https://github.com/openclaw/openclaw/pull/109142)
- Inspect background tasks across web, iOS, and Android [#109150](https://github.com/openclaw/openclaw/pull/109150)
- Show live plan checklists inside the chat thread [#109343](https://github.com/openclaw/openclaw/pull/109343)
- Group Codex and Claude session catalogs by project [#109575](https://github.com/openclaw/openclaw/pull/109575)
- Speed up native session loading from paired Macs [#110030](https://github.com/openclaw/openclaw/pull/110030)
- Keep main agents aware of same-agent group activity [#110332](https://github.com/openclaw/openclaw/pull/110332)
- Flow dashboard thread activity back to the main agent [#110913](https://github.com/openclaw/openclaw/pull/110913)
- Keep reset session history searchable [#111194](https://github.com/openclaw/openclaw/pull/111194)
- Connect session dashboards end to end [#111218](https://github.com/openclaw/openclaw/pull/111218)
- Show online users and session viewers on shared Gateways [#111225](https://github.com/openclaw/openclaw/pull/111225)
- Connect Workboard cards with live session dashboards [#111989](https://github.com/openclaw/openclaw/pull/111989)
- Align chat widgets, add dashboard deep links, and show trust status [#112076](https://github.com/openclaw/openclaw/pull/112076)
- Add Gateway session observer digests [#112216](https://github.com/openclaw/openclaw/pull/112216)
- Add the session observer HUD and status summaries [#112260](https://github.com/openclaw/openclaw/pull/112260)
- Add direct WorkBoard routes, sidebar pins, icons, and colors [#112302](https://github.com/openclaw/openclaw/pull/112302)
- Add Beam read-only coding session sharing [#112323](https://github.com/openclaw/openclaw/pull/112323)
- Simplify coding session headers and add Codex thread creation [#112354](https://github.com/openclaw/openclaw/pull/112354)
- Add native WorkBoard widgets to session dashboards [#112434](https://github.com/openclaw/openclaw/pull/112434)
- Ask the session observer from the Control UI [#112448](https://github.com/openclaw/openclaw/pull/112448)
- Add an Observer timeline card to session boards [#112565](https://github.com/openclaw/openclaw/pull/112565)
- Show safe model preambles as live session subtitles [#112958](https://github.com/openclaw/openclaw/pull/112958)
- Show subagent details inside the Background tasks rail [#113671](https://github.com/openclaw/openclaw/pull/113671)
- Continue Pi and OpenCode sessions from the catalog [#113718](https://github.com/openclaw/openclaw/pull/113718)
- Notify operators when background sessions need attention [#113819](https://github.com/openclaw/openclaw/pull/113819)
- Reorder custom sidebar groups around built-in session sections [#113948](https://github.com/openclaw/openclaw/pull/113948)
- Detect external activity in adopted Pi and OpenCode sessions [#113957](https://github.com/openclaw/openclaw/pull/113957)
- Mirror local coding sessions to a team Beam receiver [#114735](https://github.com/openclaw/openclaw/pull/114735)
- Reuse live Codex app-server threads safely [#115089](https://github.com/openclaw/openclaw/pull/115089)
- Speed up session listings with prepared plugin metadata [#117707](https://github.com/openclaw/openclaw/pull/117707)
- Remove quadratic work from streaming fanout [#118192](https://github.com/openclaw/openclaw/pull/118192)
- Keep session dashboards responsive during concurrent streaming [#118207](https://github.com/openclaw/openclaw/pull/118207)
- Add CLI commands to archive and delete sessions [#118791](https://github.com/openclaw/openclaw/pull/118791)
- Make bulk session archive complete in one batch [#120493](https://github.com/openclaw/openclaw/pull/120493)
- Resume recent sessions directly from the CLI [#120664](https://github.com/openclaw/openclaw/pull/120664)
- Resume Codex catalog sessions reliably in a full-size terminal [#120708](https://github.com/openclaw/openclaw/pull/120708)
- Continue dashboard sessions directly from the CLI [#120893](https://github.com/openclaw/openclaw/pull/120893)
- Prevent busy sessions from delaying other gateway updates [#121104](https://github.com/openclaw/openclaw/pull/121104)
- Retire inferred follow-up commitments [#121479](https://github.com/openclaw/openclaw/pull/121479)
- Show live subagent activity and edit counts in Control UI chat [#121840](https://github.com/openclaw/openclaw/pull/121840)
- Recover sessions interrupted by Gateway restarts [#122644](https://github.com/openclaw/openclaw/pull/122644)
- Continue a Control UI session in the terminal [#122870](https://github.com/openclaw/openclaw/pull/122870)
- Open live subagent details in the Chat sidebar [#122941](https://github.com/openclaw/openclaw/pull/122941)
- Open every task in one shared details panel [#123003](https://github.com/openclaw/openclaw/pull/123003)
- Add opt-in Anthropic server-side compaction [#123402](https://github.com/openclaw/openclaw/pull/123402)
- Add server-side context compaction for xAI sessions [#123622](https://github.com/openclaw/openclaw/pull/123622)
- Add extra Codex homes to the session catalog [#124660](https://github.com/openclaw/openclaw/pull/124660)
- Keep durable agent work visible and archive inactive sessions [#124925](https://github.com/openclaw/openclaw/pull/124925)
- Add main-session visibility and trusted-room routing [#124965](https://github.com/openclaw/openclaw/pull/124965)
- Show agent creation hierarchy in the Control UI [#124967](https://github.com/openclaw/openclaw/pull/124967)
- Show full Workboard boards on session dashboards [#125094](https://github.com/openclaw/openclaw/pull/125094)
- Add durable progress cards for agent sessions [#125125](https://github.com/openclaw/openclaw/pull/125125)
- Pin live session progress cards to the dashboard [#125438](https://github.com/openclaw/openclaw/pull/125438)
- Prefer delegation in main sessions and coalesce watcher wakes [#125691](https://github.com/openclaw/openclaw/pull/125691)
- Prompt eligible agents to keep progress cards current [#125701](https://github.com/openclaw/openclaw/pull/125701)
- Add standalone and browser-fullscreen dashboards [#125806](https://github.com/openclaw/openclaw/pull/125806)
- Make Activity session filters compact and easier to use [#125917](https://github.com/openclaw/openclaw/pull/125917)
- Link agent-created pull requests to public work sessions [#126057](https://github.com/openclaw/openclaw/pull/126057)
- refactor(anthropic): replace handwritten Claude sessions with Agent SDK [#128131](https://github.com/openclaw/openclaw/pull/128131)
- feat(github): surface team-session attribution [#129012](https://github.com/openclaw/openclaw/pull/129012)
- Refresh Workboard from live changes [#99051](https://github.com/openclaw/openclaw/pull/99051)
- Use a plain Working label for agent progress [#107260](https://github.com/openclaw/openclaw/pull/107260)
- Cache unchanged Claude session-catalog metadata [#109309](https://github.com/openclaw/openclaw/pull/109309)
- Reuse SQLite connections when listing sessions [#113862](https://github.com/openclaw/openclaw/pull/113862)
- Guide subagent labels toward clear task titles [#113950](https://github.com/openclaw/openclaw/pull/113950)
- Speed up large session lists with request-local store reuse [#114003](https://github.com/openclaw/openclaw/pull/114003)
- Speed up session lists on gateways with many sessions [#114237](https://github.com/openclaw/openclaw/pull/114237)
- Clone only requested task-list pages [#114277](https://github.com/openclaw/openclaw/pull/114277)
- Cache local Git facts for session PR summaries [#114311](https://github.com/openclaw/openclaw/pull/114311)
- Reuse session catalog entries within each request [#114358](https://github.com/openclaw/openclaw/pull/114358)
- Speed up session Files panel loading with incremental transcript reads [#114401](https://github.com/openclaw/openclaw/pull/114401)
- Cache session branch summaries behind transcript watermarks [#114412](https://github.com/openclaw/openclaw/pull/114412)
- Cache local Claude session discovery [#114833](https://github.com/openclaw/openclaw/pull/114833)
- Incrementally revalidate SQLite session snapshots [#115359](https://github.com/openclaw/openclaw/pull/115359)
- Stream large Codex session JSONL scans [#115997](https://github.com/openclaw/openclaw/pull/115997)
- Reuse Claude transcript discovery across pagination pages [#116324](https://github.com/openclaw/openclaw/pull/116324)
- Reuse the Codex App Server for macOS catalog reads [#116325](https://github.com/openclaw/openclaw/pull/116325)
- Speed up bulk read, archive, and category changes for sessions [#120629](https://github.com/openclaw/openclaw/pull/120629)
- Make bulk session archiving substantially faster [#120873](https://github.com/openclaw/openclaw/pull/120873)
- Add live subagent activity and file-change stats to task events [#121549](https://github.com/openclaw/openclaw/pull/121549)
- Show live Codex subagent activity in task rows [#121899](https://github.com/openclaw/openclaw/pull/121899)
- Release compacted tool-result data from embedded-session memory [#122646](https://github.com/openclaw/openclaw/pull/122646)
- Name additional Codex session-catalog homes [#124807](https://github.com/openclaw/openclaw/pull/124807)
- Record agent creation origins and add roster tree output [#124828](https://github.com/openclaw/openclaw/pull/124828)
- Speed up chat history and startup loading [#125123](https://github.com/openclaw/openclaw/pull/125123)
- Keep Workboard visible in the Control UI sidebar [#125473](https://github.com/openclaw/openclaw/pull/125473)
- Let agents organize visible sessions by sidebar category [#126074](https://github.com/openclaw/openclaw/pull/126074)
- improve(ui): compact Live activity filters [#128972](https://github.com/openclaw/openclaw/pull/128972)
- improve(gateway): load session history faster without duplicate readers [#129114](https://github.com/openclaw/openclaw/pull/129114)
- Show Codex answer candidate lifecycle in Activity [#90610](https://github.com/openclaw/openclaw/pull/90610)
- Remove redundant sorting from task-list refreshes [#102202](https://github.com/openclaw/openclaw/pull/102202)
- Centralize session catalog search normalization [#108240](https://github.com/openclaw/openclaw/pull/108240)
- Split Control UI chat transcript ownership and retire legacy pins [#122420](https://github.com/openclaw/openclaw/pull/122420)
- Make progress cards choose the clearest representation [#125613](https://github.com/openclaw/openclaw/pull/125613)
- Link known PRs and issues in progress cards [#125887](https://github.com/openclaw/openclaw/pull/125887)
- Lazily scan transcripts for newest-event checks [#127162](https://github.com/openclaw/openclaw/pull/127162)

**Bug fixes**

- Make session usage fast on large, active histories [#108834](https://github.com/openclaw/openclaw/pull/108834)
- Stream native sessions as each host finishes [#110211](https://github.com/openclaw/openclaw/pull/110211)

</details>

</Accordion>

<Accordion title="Stored Data and Backups">

Sessions and transcripts, selected device and authentication records, meeting capture, and runtime journals now use SQLite-backed stores, and portable snapshots can be created, verified, and restored through the same toolset. This gives backup and recovery a checkable path before an incident.

Some legacy stores require the owning process to be stopped before `openclaw doctor --fix` can migrate them. Pending pairing requests and bootstrap codes are not imported, the macOS tunnel migration cannot be read by older JSON-only builds, and restore refuses to write over an existing target.

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

**Improvements**

- Harden SQLite state lifecycle and snapshots [#104859](https://github.com/openclaw/openclaw/pull/104859)
- Create and verify portable SQLite snapshots [#105718](https://github.com/openclaw/openclaw/pull/105718)
- Centralize Reef peer trust in SQLite [#108375](https://github.com/openclaw/openclaw/pull/108375)
- Move node-host identity and Gateway settings to SQLite [#108457](https://github.com/openclaw/openclaw/pull/108457)
- Move APNs registrations to shared SQLite [#108543](https://github.com/openclaw/openclaw/pull/108543)
- Store workspace setup state in SQLite [#109147](https://github.com/openclaw/openclaw/pull/109147)
- Add bounded SQLite BLOB storage for trusted plugins [#109328](https://github.com/openclaw/openclaw/pull/109328)
- Move channel runtime state into shared SQLite storage [#109380](https://github.com/openclaw/openclaw/pull/109380)
- Move remaining non-session runtime journals into SQLite [#109427](https://github.com/openclaw/openclaw/pull/109427)
- Move MCP OAuth credentials and refresh state to SQLite [#109844](https://github.com/openclaw/openclaw/pull/109844)
- Raise the default session archive disk budget to 10 GiB [#110221](https://github.com/openclaw/openclaw/pull/110221)
- Preserve Ask OpenClaw conversations across restarts [#111440](https://github.com/openclaw/openclaw/pull/111440)
- Unify offline storage for iPhone and Mac [#111598](https://github.com/openclaw/openclaw/pull/111598)
- Migrate saved media history to canonical facts [#113695](https://github.com/openclaw/openclaw/pull/113695)
- Move local tool notes into AGENTS.md [#113966](https://github.com/openclaw/openclaw/pull/113966)
- Speed up gateway startup when transcript indexes are current [#117342](https://github.com/openclaw/openclaw/pull/117342)
- Move shared agent credentials into shared state SQLite [#123349](https://github.com/openclaw/openclaw/pull/123349)
- Preserve recently active session history during maintenance [#123987](https://github.com/openclaw/openclaw/pull/123987)
- Move sessions and transcripts to per-agent SQLite storage [#98236](https://github.com/openclaw/openclaw/pull/98236)
- Move device pairing state to the shared SQLite database [#103160](https://github.com/openclaw/openclaw/pull/103160)
- Harden SQLite snapshot publication for backups [#105412](https://github.com/openclaw/openclaw/pull/105412)
- Move managed image metadata into SQLite [#108290](https://github.com/openclaw/openclaw/pull/108290)
- Move device identity into shared SQLite state [#110392](https://github.com/openclaw/openclaw/pull/110392)
- Move macOS SSH tunnel ownership records to SQLite [#110527](https://github.com/openclaw/openclaw/pull/110527)
- Move device auth tokens into shared SQLite state [#112663](https://github.com/openclaw/openclaw/pull/112663)
- Move meeting-capture transcripts to SQLite [#112910](https://github.com/openclaw/openclaw/pull/112910)
- Unify claim-fenced cross-channel delivery [#114689](https://github.com/openclaw/openclaw/pull/114689)
- Reuse synchronous SQLite prepared statements [#114777](https://github.com/openclaw/openclaw/pull/114777)
- Avoid repeated migration scans during local CLI turns [#119051](https://github.com/openclaw/openclaw/pull/119051)
- Retire the obsolete commitments database schema [#122176](https://github.com/openclaw/openclaw/pull/122176)
- fix(logbook): index frame and batch queries [#129570](https://github.com/openclaw/openclaw/pull/129570)
- Add a separate thinking level for embedded compaction [#98074](https://github.com/openclaw/openclaw/pull/98074)
- Explain safe recovery from newer state schemas [#104751](https://github.com/openclaw/openclaw/pull/104751)
- Move usage-cost cache state into per-agent SQLite [#106051](https://github.com/openclaw/openclaw/pull/106051)
- Use SQLite only for Gateway session lookup [#112676](https://github.com/openclaw/openclaw/pull/112676)
- Simplify TOOLS.md migration recovery [#115857](https://github.com/openclaw/openclaw/pull/115857)

**Bug fixes**

- Remove repeated full-table scans from ACP replay writes [#104739](https://github.com/openclaw/openclaw/pull/104739)
- Batch Doctor canonical session repairs [#117068](https://github.com/openclaw/openclaw/pull/117068)

**Documentation**

- refactor(state): retire six dead shared-state tables at schema v10 [#129626](https://github.com/openclaw/openclaw/pull/129626)

</details>

</Accordion>

<Accordion title="Remote computers and devices">

Work no longer has to stay on the main machine running OpenClaw. A configured cloud worker can start a session in a selected repository and later return it to the main machine, while an explicitly opted-in paired computer can run a complete turn using a worker bundle verified and supplied by OpenClaw rather than whatever code happens to be installed there.

Those are two different paths with different requirements. Cloud workers need a configured profile and the OpenClaw runtime, while paired computers need compatible versions, consent, available capacity, and support for the requested commands. The portable worker bundle does not include the destination machine's native terminal module, so work that depends on a truly interactive terminal still has a real boundary.

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

**Improvements**

- Direct Apple Watch Gateway node over Wi-Fi or cellular [#102893](https://github.com/openclaw/openclaw/pull/102893)
- Add durable cloud-worker environment foundations [#104401](https://github.com/openclaw/openclaw/pull/104401)
- feat(cloud-workers): add crabbox worker provider plugin and profile-aware lease lifecycle [#104465](https://github.com/openclaw/openclaw/pull/104465)
- Bootstrap cloud workers with pinned, verified bundles [#104532](https://github.com/openclaw/openclaw/pull/104532)
- Unify machine status on the Devices page [#104561](https://github.com/openclaw/openclaw/pull/104561)
- Route node alerts to the active Mac [#105083](https://github.com/openclaw/openclaw/pull/105083)
- Add replayable live events for cloud worker sessions [#105275](https://github.com/openclaw/openclaw/pull/105275)
- Combine CLI and native capabilities in one Mac node [#105642](https://github.com/openclaw/openclaw/pull/105642)
- Add the restricted cloud-worker runtime [#105865](https://github.com/openclaw/openclaw/pull/105865)
- Move Devices into Settings and redesign the inventory [#106055](https://github.com/openclaw/openclaw/pull/106055)
- Add durable cloud-worker session placement and dispatch [#106332](https://github.com/openclaw/openclaw/pull/106332)
- Add camera, location, and notifications to Linux nodes [#107193](https://github.com/openclaw/openclaw/pull/107193)
- Create cloud-worker sessions from Control UI [#107670](https://github.com/openclaw/openclaw/pull/107670)
- Let cloud workers use a selected repository [#107976](https://github.com/openclaw/openclaw/pull/107976)
- Discover nearby gateways from the Linux desktop app [#108115](https://github.com/openclaw/openclaw/pull/108115)
- Run and safely reclaim cloud worker sessions [#108398](https://github.com/openclaw/openclaw/pull/108398)
- Show cloud workspace conflicts and recovery steps in the Control UI [#111329](https://github.com/openclaw/openclaw/pull/111329)
- Connect multiple gateways simultaneously across official apps [#111932](https://github.com/openclaw/openclaw/pull/111932)
- Manage reusable macOS Gateway profiles and windows [#111986](https://github.com/openclaw/openclaw/pull/111986)
- Add paired Gateway nodes as a first-class Code Mode API [#114877](https://github.com/openclaw/openclaw/pull/114877)
- Watch and control cloud-worker desktops from the Control UI [#120727](https://github.com/openclaw/openclaw/pull/120727)
- Add one-paste device pairing with `oc-pair://` links [#120768](https://github.com/openclaw/openclaw/pull/120768)
- Cloud Worker Desktop apps and browser autonomy [#121475](https://github.com/openclaw/openclaw/pull/121475)
- Let cloud sessions spawn and message nested cloud sessions [#121846](https://github.com/openclaw/openclaw/pull/121846)
- Add one-paste onboarding for new node machines [#122499](https://github.com/openclaw/openclaw/pull/122499)
- Expose a public Gateway ingress for workers [#122578](https://github.com/openclaw/openclaw/pull/122578)
- Allow workers to connect through the public gateway [#122643](https://github.com/openclaw/openclaw/pull/122643)
- Run complete agent turns on paired devices [#123157](https://github.com/openclaw/openclaw/pull/123157)
- Warn when cloud sessions run low on disk space [#123177](https://github.com/openclaw/openclaw/pull/123177)
- Remember offline devices in the session picker [#123198](https://github.com/openclaw/openclaw/pull/123198)
- Transfer worker workspaces to paired nodes and reconcile results [#123280](https://github.com/openclaw/openclaw/pull/123280)
- Run Codex session work on cloud workers [#123743](https://github.com/openclaw/openclaw/pull/123743)
- Run paired-device sessions from Gateway worker bundles [#124037](https://github.com/openclaw/openclaw/pull/124037)
- Show validated worker bundle status for connected devices [#124640](https://github.com/openclaw/openclaw/pull/124640)
- Manage cloud worker profiles and choose machine sizes per session [#124864](https://github.com/openclaw/openclaw/pull/124864)
- Run disposable cloud workers through node transport [#125288](https://github.com/openclaw/openclaw/pull/125288)
- Show cloud machine CPU and RAM in the picker [#125696](https://github.com/openclaw/openclaw/pull/125696)
- Show exact worker slots for connected devices [#125708](https://github.com/openclaw/openclaw/pull/125708)
- Add explicit session-host enrollment to openclaw connect [#125879](https://github.com/openclaw/openclaw/pull/125879)
- Add per-repository cloud-worker profile defaults [#126238](https://github.com/openclaw/openclaw/pull/126238)
- Recover sessions when a paired device goes offline [#126284](https://github.com/openclaw/openclaw/pull/126284)
- Add lifecycle-safe duplex channels for plugin node commands [#126961](https://github.com/openclaw/openclaw/pull/126961)
- feat: run Codex sessions on approved paired devices [#127202](https://github.com/openclaw/openclaw/pull/127202)
- feat(workers): run OpenClaw and Codex on the same cloud profile [#127752](https://github.com/openclaw/openclaw/pull/127752)
- feat(nodes): derive worker capacity from CPU cores and make it configurable [#128352](https://github.com/openclaw/openclaw/pull/128352)
- feat(nodes): automatic device placement for sessions.dispatch [#128421](https://github.com/openclaw/openclaw/pull/128421)
- feat(crabbox): opt-in profile warm images for cloud workers [#130087](https://github.com/openclaw/openclaw/pull/130087)
- feat(portals): expose portals to sessions on node-backed cloud workers [#130105](https://github.com/openclaw/openclaw/pull/130105)
- feat(gateway): auto-suspend idle cloud workers with suspendAfter [#130242](https://github.com/openclaw/openclaw/pull/130242)
- Add Crabbox lease setup commands [5a37cdb](https://github.com/openclaw/openclaw/commit/5a37cdb)
- Add pinned SSH tunnels for Cloud Worker environments [#104553](https://github.com/openclaw/openclaw/pull/104553)
- Add authenticated, closed gateway connections for cloud workers [#104688](https://github.com/openclaw/openclaw/pull/104688)
- Show node version drift and Windows wake guidance [#104735](https://github.com/openclaw/openclaw/pull/104735)
- Add durable transcript commits for cloud workers [#104809](https://github.com/openclaw/openclaw/pull/104809)
- Reduce repeated cloud-worker workspace hashing [#121365](https://github.com/openclaw/openclaw/pull/121365)
- Reuse one SSH tunnel during cloud session startup [#122077](https://github.com/openclaw/openclaw/pull/122077)
- Provision paired nodes as local session hosts [#122966](https://github.com/openclaw/openclaw/pull/122966)
- Publish atomic device runner inventory [#123094](https://github.com/openclaw/openclaw/pull/123094)
- Enforce two-worker capacity on paired nodes [#123612](https://github.com/openclaw/openclaw/pull/123612)
- Separate node-runner consent from launch capacity [#124356](https://github.com/openclaw/openclaw/pull/124356)
- Prewarm delegated Node worker bundles [#124427](https://github.com/openclaw/openclaw/pull/124427)
- Retire the reverse SSH worker-turn tunnel [#125465](https://github.com/openclaw/openclaw/pull/125465)
- Show machine classes reported by Crabbox [#126184](https://github.com/openclaw/openclaw/pull/126184)
- Simplify retired runner recovery and placement wording [#126773](https://github.com/openclaw/openclaw/pull/126773)
- Use Devices consistently for paired hardware in the Control UI [#120689](https://github.com/openclaw/openclaw/pull/120689)

</details>

</Accordion>

<Accordion title="Voice, meetings, and media">

Talk can use GPT-Live and GA Realtime voice through supported direct-browser and Gateway-relay paths, including eligible ChatGPT or Codex sign-ins. The routes are not interchangeable though, because credentials and transports vary across clients, Android relay remains gated, and Azure configurations are excluded from the ChatGPT OAuth relay path.

Supported OpenAI and Gemini Live calls can add video, remember whether you use the camera, and switch cameras without restarting voice. Those controls only appear on supported browser and provider transports, permission and capture stay on the device, and an unsupported or fallback relay can omit or reject video.

Enabled Google Meet, Microsoft Teams, and Zoom bots can also retain speaker-attributed transcripts and summaries in SQLite. Google Meet's bounded live-caption buffer is a separate path from that durable archive, and meeting retention can still be disabled globally.

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

**Improvements**

- Add Qwen 3.6 Flash and update Gemini Live voice [#102791](https://github.com/openclaw/openclaw/pull/102791)
- Add xAI Grok Imagine Video 1.5 support [#103316](https://github.com/openclaw/openclaw/pull/103316)
- Discover current xAI TTS voices dynamically [#103446](https://github.com/openclaw/openclaw/pull/103446)
- Retain bounded Google Meet caption transcripts [#103811](https://github.com/openclaw/openclaw/pull/103811)
- Add native xAI streaming text-to-speech [#103993](https://github.com/openclaw/openclaw/pull/103993)
- Add native xAI realtime voice to Talk [#106267](https://github.com/openclaw/openclaw/pull/106267)
- Add camera-aware OpenAI Video Talk [#109579](https://github.com/openclaw/openclaw/pull/109579)
- Add Gemini Live Video Talk [#109719](https://github.com/openclaw/openclaw/pull/109719)
- Add Microsoft Teams meeting participation [#109964](https://github.com/openclaw/openclaw/pull/109964)
- Move video talk to an in-call camera toggle [#110576](https://github.com/openclaw/openclaw/pull/110576)
- Add camera selection and live switching to Realtime Talk [#111042](https://github.com/openclaw/openclaw/pull/111042)
- Add a Zoom browser-guest meeting plugin [#111048](https://github.com/openclaw/openclaw/pull/111048)
- Add durable Talk voice sessions and spoken confirmations [#111216](https://github.com/openclaw/openclaw/pull/111216)
- Enable Teams and Zoom meeting plugins by default [#113022](https://github.com/openclaw/openclaw/pull/113022)
- Enable the Google Meet plugin by default after installation [#113053](https://github.com/openclaw/openclaw/pull/113053)
- Automatically retain durable meeting transcripts and summaries [#113122](https://github.com/openclaw/openclaw/pull/113122)
- Enable GPT Live Talk with Codex OAuth [#113354](https://github.com/openclaw/openclaw/pull/113354)
- Add GPT-Live full-duplex voice to browser Talk [#115226](https://github.com/openclaw/openclaw/pull/115226)
- Configure realtime voice from Settings → Talk [#115409](https://github.com/openclaw/openclaw/pull/115409)
- Add GPT-Live voice over backend WebSocket [#115622](https://github.com/openclaw/openclaw/pull/115622)
- Use ChatGPT OAuth for GA Realtime browser Talk [#115623](https://github.com/openclaw/openclaw/pull/115623)
- Add byte-range streaming for Gateway media [#115667](https://github.com/openclaw/openclaw/pull/115667)
- Add least-privilege pairing for embedded voice nodes [#115712](https://github.com/openclaw/openclaw/pull/115712)
- Add Fish Audio S2.1 and progressive local Fish speech [#115790](https://github.com/openclaw/openclaw/pull/115790)
- Support GPT-Live through the Gateway Talk relay [#115831](https://github.com/openclaw/openclaw/pull/115831)
- Add lazy playback transcodes for exotic media [#115987](https://github.com/openclaw/openclaw/pull/115987)
- Enable Linux Chrome talk-back in meetings [#118451](https://github.com/openclaw/openclaw/pull/118451)
- Add Gateway-controlled WebRTC Talk sideband [#121054](https://github.com/openclaw/openclaw/pull/121054)
- Send current-turn video to compatible Google Gemini models [#122074](https://github.com/openclaw/openclaw/pull/122074)
- Replay persisted video after session restart [#122257](https://github.com/openclaw/openclaw/pull/122257)
- Add native MP4 video input for Moonshot Kimi K3 [#122337](https://github.com/openclaw/openclaw/pull/122337)
- Add generated-image actions and bounded previews in Control UI [#77017](https://github.com/openclaw/openclaw/pull/77017)
- Modernize DeepInfra video generation and clean DeepSeek replies [#95824](https://github.com/openclaw/openclaw/pull/95824)
- Add time and position context to recent images [#100866](https://github.com/openclaw/openclaw/pull/100866)
- Share audio-energy and speech-onset helpers across voice surfaces [#109466](https://github.com/openclaw/openclaw/pull/109466)
- Remember Talk camera use and clarify the camera toggle [#110817](https://github.com/openclaw/openclaw/pull/110817)
- Audio and video metadata survives from intake to history [#115728](https://github.com/openclaw/openclaw/pull/115728)
- Advertise chat attachment size limits to Gateway clients [#116188](https://github.com/openclaw/openclaw/pull/116188)
- Reduce memory copies during ClickClack media uploads [#127152](https://github.com/openclaw/openclaw/pull/127152)
- Require canonical voice-call configuration at runtime [#105476](https://github.com/openclaw/openclaw/pull/105476)
- Unify meeting manual-action results [#114247](https://github.com/openclaw/openclaw/pull/114247)
- improve(zalo): avoid duplicate media preparation [#128377](https://github.com/openclaw/openclaw/pull/128377)

**Bug fixes**

- Share realtime voice session lifecycle handling [#117865](https://github.com/openclaw/openclaw/pull/117865)
- Support flexible GPT Image 2 dimensions [#118476](https://github.com/openclaw/openclaw/pull/118476)
- improve(msteams): avoid repeated activity preparation on retries [#128329](https://github.com/openclaw/openclaw/pull/128329)

</details>

</Accordion>

<Accordion title="Code Mode and agent tools">

Code Mode can now treat authorized tools like ordinary asynchronous functions, letting an agent combine trusted results from conversations, files, and sessions in one program or run independent calls together. This is the final interface rather than another layer beside the old one, so the previous `tools` object, `ALL_TOOLS`, exact-ID calls, and raw call envelopes are gone. What a program can compose still stops at the tools it is authorized to use and the structured results those tools declare.

Tool Search also does a better job of turning a natural request into a discoverable capability, can search several capability groups in one structured request, and now exposes existing session archive and pin actions. Policy can still hide tools and a request with no valid answer can return nothing, while existing single-query request and response shapes continue to work.

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

**Improvements**

- Add a secure live preview widget to Workspaces [#101354](https://github.com/openclaw/openclaw/pull/101354)
- Add Podman as a built-in agent sandbox backend [#101358](https://github.com/openclaw/openclaw/pull/101358)
- Add trusted chart widgets to Workspaces [#101792](https://github.com/openclaw/openclaw/pull/101792)
- Add live agent status and custom-widget decisions to Workspaces [#101826](https://github.com/openclaw/openclaw/pull/101826)
- Render interactive widgets inline in web chat [#101840](https://github.com/openclaw/openclaw/pull/101840)
- Add operator-approved follow-up task suggestions [#102422](https://github.com/openclaw/openclaw/pull/102422)
- Add actionable task suggestions to the Gateway TUI [#102743](https://github.com/openclaw/openclaw/pull/102743)
- Add worktree ownership, creation, and safer cleanup to the Control UI [#103526](https://github.com/openclaw/openclaw/pull/103526)
- Add agent-composable Workspaces [#104139](https://github.com/openclaw/openclaw/pull/104139)
- Speed up Workboard dependency checks with targeted parent lookups [#104668](https://github.com/openclaw/openclaw/pull/104668)
- Require fresh isolated worktrees for delegated coding [#105993](https://github.com/openclaw/openclaw/pull/105993)
- Add configurable managed-worktree cleanup limits [#106224](https://github.com/openclaw/openclaw/pull/106224)
- Add agent session self-service tools [#107471](https://github.com/openclaw/openclaw/pull/107471)
- Let web-chat widgets send follow-up prompts [#108889](https://github.com/openclaw/openclaw/pull/108889)
- Let agents share a live terminal with operators [#109005](https://github.com/openclaw/openclaw/pull/109005)
- Complete multi-tool code-mode blocks in one exec turn [#109290](https://github.com/openclaw/openclaw/pull/109290)
- Reduce Code Mode tool orchestration turns [#109596](https://github.com/openclaw/openclaw/pull/109596)
- Add declared tool result shapes to Code Mode [#109813](https://github.com/openclaw/openclaw/pull/109813)
- Add more Code Mode tool output hints [#110215](https://github.com/openclaw/openclaw/pull/110215)
- Expose structured filesystem results to Code Mode [#110395](https://github.com/openclaw/openclaw/pull/110395)
- Complete Code Mode contracts for session tools [#110424](https://github.com/openclaw/openclaw/pull/110424)
- Bring question prompts to every app [#110681](https://github.com/openclaw/openclaw/pull/110681)
- Add a theme-aware design system for Canvas widgets [#110832](https://github.com/openclaw/openclaw/pull/110832)
- Add gated Swarm orchestration core [#110932](https://github.com/openclaw/openclaw/pull/110932)
- Add model, workspace, and fork options to visible session spawns [#110943](https://github.com/openclaw/openclaw/pull/110943)
- Add restart-safe Swarm orchestration to QuickJS Code Mode [#111298](https://github.com/openclaw/openclaw/pull/111298)
- Show authoritative write diffs across chat clients [#111456](https://github.com/openclaw/openclaw/pull/111456)
- Complete Swarm wait, progress, and worker guidance [#111605](https://github.com/openclaw/openclaw/pull/111605)
- Let plugins add granted dashboard feeds and actions [#112083](https://github.com/openclaw/openclaw/pull/112083)
- Explicit owners for ambient multi-agent work [#113637](https://github.com/openclaw/openclaw/pull/113637)
- Enable the operator terminal by default [#113888](https://github.com/openclaw/openclaw/pull/113888)
- Add an isolated headless agent runner [#113988](https://github.com/openclaw/openclaw/pull/113988)
- Improve Tool Search ranking for natural requests [#114285](https://github.com/openclaw/openclaw/pull/114285)
- Advertise searchable tool capabilities automatically [#114508](https://github.com/openclaw/openclaw/pull/114508)
- Add per-run agent stats to JSON output [#114688](https://github.com/openclaw/openclaw/pull/114688)
- Add automatic per-model Code Mode selection [#114695](https://github.com/openclaw/openclaw/pull/114695)
- Enable Code Mode automatically for preferred models [#114906](https://github.com/openclaw/openclaw/pull/114906)
- Add bounded Code Mode repair retries [#115729](https://github.com/openclaw/openclaw/pull/115729)
- Apply configured providers and harnesses to agent exec [#116038](https://github.com/openclaw/openclaw/pull/116038)
- Deliver plugin subagent completions to the current requester [#116091](https://github.com/openclaw/openclaw/pull/116091)
- Add batched structured Tool Search queries [#118623](https://github.com/openclaw/openclaw/pull/118623)
- Speed up restart recovery for large subagent sets [#119793](https://github.com/openclaw/openclaw/pull/119793)
- Choose where suggested follow-up tasks run [#121173](https://github.com/openclaw/openclaw/pull/121173)
- feat(sandbox): add Daytona cloud sandbox backend plugin [#121554](https://github.com/openclaw/openclaw/pull/121554)
- Rename the task-card tool to `suggest_task` [#121694](https://github.com/openclaw/openclaw/pull/121694)
- Let host agents inspect unsupported local documents [#122408](https://github.com/openclaw/openclaw/pull/122408)
- Preview agent-run web apps through Portals [#122536](https://github.com/openclaw/openclaw/pull/122536)
- Add managed browser actions to Computer Use v2 [#123960](https://github.com/openclaw/openclaw/pull/123960)
- Add managed recording and replay to CUA Computer Use [#124035](https://github.com/openclaw/openclaw/pull/124035)
- Standardize image inspection as `view_image` [#125024](https://github.com/openclaw/openclaw/pull/125024)
- Link Workboards to their owning automations [#125076](https://github.com/openclaw/openclaw/pull/125076)
- Run attached Workboard automations when linked work finishes [#125170](https://github.com/openclaw/openclaw/pull/125170)
- Connect CLI tools through identity-aware gateway proxies [#125700](https://github.com/openclaw/openclaw/pull/125700)
- Call Code Mode tools as ordinary async functions [#126262](https://github.com/openclaw/openclaw/pull/126262)
- Broker GitHub publication from the Gateway [#126306](https://github.com/openclaw/openclaw/pull/126306)
- feat(ui): add collapsible Workboard columns [#128115](https://github.com/openclaw/openclaw/pull/128115)
- Move Workboard cards from the CLI, chat, or agent tools [#96554](https://github.com/openclaw/openclaw/pull/96554)
- Let operators raise the Workboard per-pass start cap [#100174](https://github.com/openclaw/openclaw/pull/100174)
- Reduce Code Mode tool-discovery turns [#109651](https://github.com/openclaw/openclaw/pull/109651)
- Let Code Mode compose conversation tools from declared results [#110098](https://github.com/openclaw/openclaw/pull/110098)
- Give `web_fetch` a compact, exact output contract [#110223](https://github.com/openclaw/openclaw/pull/110223)
- Compact `show_widget` guidance with a widget pattern [#110999](https://github.com/openclaw/openclaw/pull/110999)
- Explain visible-session spawn constraints upfront [#111502](https://github.com/openclaw/openclaw/pull/111502)
- Promote the plan-tool switch to `tools.updatePlan` [#113958](https://github.com/openclaw/openclaw/pull/113958)
- Use declared channel traits for thread delivery [#114245](https://github.com/openclaw/openclaw/pull/114245)
- Make session archive and pin actions discoverable to agents [#114463](https://github.com/openclaw/openclaw/pull/114463)
- Give managed worktrees readable default names [#114488](https://github.com/openclaw/openclaw/pull/114488)
- Avoid duplicate subagent registry writes [#114705](https://github.com/openclaw/openclaw/pull/114705)
- Reduce board read work and ticket polling [#114748](https://github.com/openclaw/openclaw/pull/114748)
- Select an OpenShell control-plane workspace [#114952](https://github.com/openclaw/openclaw/pull/114952)
- Add Code Mode model acceptance matrix and agent exec controls [#115305](https://github.com/openclaw/openclaw/pull/115305)
- Add operator-defined headers for direct web fetches [#115545](https://github.com/openclaw/openclaw/pull/115545)
- Add custom headers for Gemini web search [#115549](https://github.com/openclaw/openclaw/pull/115549)
- Scale requester settlement for large subagent groups [#116619](https://github.com/openclaw/openclaw/pull/116619)
- Reduce scheduler overhead for large multi-group swarms [#116623](https://github.com/openclaw/openclaw/pull/116623)
- Speed up high-fanout subagent lifecycle cleanup [#116661](https://github.com/openclaw/openclaw/pull/116661)
- Explain why archived Workboard cards are skipped [#117290](https://github.com/openclaw/openclaw/pull/117290)
- Reduce restricted-worker startup imports [#119644](https://github.com/openclaw/openclaw/pull/119644)
- Record why managed worktrees are removed or retained [#120434](https://github.com/openclaw/openclaw/pull/120434)
- Stream live line-count progress for file edits [#121528](https://github.com/openclaw/openclaw/pull/121528)
- Add capability-filtered guidance for computer use [#123949](https://github.com/openclaw/openclaw/pull/123949)
- Encourage proactive widgets on supported surfaces [#124810](https://github.com/openclaw/openclaw/pull/124810)
- Show Code Mode's final tool surface in debug logs [#124934](https://github.com/openclaw/openclaw/pull/124934)
- Speed up large subagent registry lookups [#107935](https://github.com/openclaw/openclaw/pull/107935)
- Reduce repeated board reads during Control UI polling [#114363](https://github.com/openclaw/openclaw/pull/114363)
- [AI] docs(tools): clarify per-action required params in gateway and process tool schemas [#114879](https://github.com/openclaw/openclaw/pull/114879)
- Make suspended Code Mode shutdown cleanup linear [#115456](https://github.com/openclaw/openclaw/pull/115456)
- Clarify how Codex parents receive native child results [#115466](https://github.com/openclaw/openclaw/pull/115466)
- Report submitted length in Workboard limit errors [#118888](https://github.com/openclaw/openclaw/pull/118888)
- Avoid duplicate Tool Search catalog fingerprinting [#127188](https://github.com/openclaw/openclaw/pull/127188)
- Add Codex assistant-completion timeout configuration [#97233](https://github.com/openclaw/openclaw/pull/97233)

</details>

</Accordion>

<Accordion title="Accessibility and language support">

Keyboard users can open plugin details and select Usage sessions again. The 20 maintained non-English Control UI catalogs also include refreshed text for prompts, devices, activity, catalogs, and other expanded surfaces. These catalog updates keep the existing language set aligned with the current interface; they do not add languages or change application logic.

Android also has an experimental `mobile_ui` path that lets an authorized agent observe and interact with apps on a supported paired device. It is owner-only, off by default, limited to third-party builds, unavailable through Gateway HTTP and Play builds, and requires both dangerous commands to be armed explicitly.

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

**Improvements**

- Refresh all Control UI locales and repair cron test fixtures [#105100](https://github.com/openclaw/openclaw/pull/105100)
- Add the mobile_ui agent tool for Android apps [#112255](https://github.com/openclaw/openclaw/pull/112255)
- Expose protected Android screen observation and control commands [#112241](https://github.com/openclaw/openclaw/pull/112241)
- Refresh generated Control UI translations [#112673](https://github.com/openclaw/openclaw/pull/112673)
- Clarify Custodian setup controls and cancel actions [#119611](https://github.com/openclaw/openclaw/pull/119611)
- Refresh generated Control UI translations [#125213](https://github.com/openclaw/openclaw/pull/125213)
- chore(ui): refresh control ui locales [#130265](https://github.com/openclaw/openclaw/pull/130265)
- chore(ui): refresh control ui locales [#131098](https://github.com/openclaw/openclaw/pull/131098)
- Translate terminal upload status messages [#107806](https://github.com/openclaw/openclaw/pull/107806)
- Refresh generated Control UI translations [#109633](https://github.com/openclaw/openclaw/pull/109633)
- Refresh Control UI translations for new prompts [#109751](https://github.com/openclaw/openclaw/pull/109751)
- Refresh Control UI translations across 20 locales [#113184](https://github.com/openclaw/openclaw/pull/113184)
- Refresh Control UI translations for the expanded catalog [#121555](https://github.com/openclaw/openclaw/pull/121555)
- Refresh translations across all Control UI locales [#125774](https://github.com/openclaw/openclaw/pull/125774)
- Refresh Control UI translations across 20 locales [#126614](https://github.com/openclaw/openclaw/pull/126614)
- chore(ui): refresh control ui locales [#127207](https://github.com/openclaw/openclaw/pull/127207)
- chore(ui): refresh control ui locales [#130851](https://github.com/openclaw/openclaw/pull/130851)

**Bug fixes**

- Restore keyboard access to plugin details and Usage sessions [#116820](https://github.com/openclaw/openclaw/pull/116820)

</details>

</Accordion>

<Accordion title="Interface polish and compatibility">

Startup and several messaging paths now skip unnecessary work, while smaller fixes across onboarding, Tasks, Worktrees, Activity, dashboards, generated titles, durations, phone numbers, and themes make familiar screens easier to read and use.

The optional Control UI lobster now reacts to status changes and adds seasonal or rare variants, visitors, collection rewards, and controls to dismiss one visit or disable visits. These additions are cosmetic, many appearances remain rare or session-seeded, reduced-motion preferences are preserved, and related CLI flourishes stay inside interactive use so automated output is unchanged.

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

**Improvements**

- Add a session-seeded lobster status pet to the Control UI sidebar [#102766](https://github.com/openclaw/openclaw/pull/102766)
- Make the Control UI lobster react to you and run outcomes [#103344](https://github.com/openclaw/openclaw/pull/103344)
- Add lobster surprises to the CLI and Control UI [#103412](https://github.com/openclaw/openclaw/pull/103412)
- Calm the working claw and add turn recaps [#112060](https://github.com/openclaw/openclaw/pull/112060)
- Expand the lobster pet with rare visitors and collection rewards [#112073](https://github.com/openclaw/openclaw/pull/112073)
- Expand Lobsterdex with new palettes, lore, and a collection page [#114959](https://github.com/openclaw/openclaw/pull/114959)
- Expand Lobsterdex with nine palettes, deep links, and shiny dates [#115179](https://github.com/openclaw/openclaw/pull/115179)
- Complete the Lobsterdex with 42 varied sprites [#115264](https://github.com/openclaw/openclaw/pull/115264)
- Add balloon, ASCII, and portal Lobsterdex variants [#115308](https://github.com/openclaw/openclaw/pull/115308)
- feat(ui): user-selectable accent color for the Control UI [#128432](https://github.com/openclaw/openclaw/pull/128432)
- feat(ui): save appearance preferences per user profile [#130340](https://github.com/openclaw/openclaw/pull/130340)
- Add rare sidebar lobster pet variants [#102829](https://github.com/openclaw/openclaw/pull/102829)
- Add seeded body-shape variants to the lobster pet [#103091](https://github.com/openclaw/openclaw/pull/103091)
- Make the sidebar lobster an occasional, controllable visitor [#103111](https://github.com/openclaw/openclaw/pull/103111)
- Add personality and reactions to the Control UI lobster pet [#103149](https://github.com/openclaw/openclaw/pull/103149)
- Add rare molting and twin visits for the lobster pet [#103154](https://github.com/openclaw/openclaw/pull/103154)
- Add seasonal outfits for the Control UI lobster [#103158](https://github.com/openclaw/openclaw/pull/103158)
- Show the selected agent's seeded lobster in Dreams [#103167](https://github.com/openclaw/openclaw/pull/103167)
- Add a browser-local Lobsterdex collection [#103172](https://github.com/openclaw/openclaw/pull/103172)
- Add rare pass-through visitors to the lobster pet [#103352](https://github.com/openclaw/openclaw/pull/103352)
- Give the Control UI lobster memories and familiarity [#103359](https://github.com/openclaw/openclaw/pull/103359)
- Give the Control UI lobster anniversary hats and earned titles [#103563](https://github.com/openclaw/openclaw/pull/103563)
- Add responsive lobster mascot interactions [#103573](https://github.com/openclaw/openclaw/pull/103573)
- Let the sidebar lobster occasionally stand in for the logo [#104748](https://github.com/openclaw/openclaw/pull/104748)
- Enforce safe indexed access across core and the Control UI [#104981](https://github.com/openclaw/openclaw/pull/104981)
- Replace the working spark with a pinching claw [#105020](https://github.com/openclaw/openclaw/pull/105020)
- Add a pixel lobster to the CLI wizard banner [#105119](https://github.com/openclaw/openclaw/pull/105119)
- Animate the claw banner on interactive startup [#105540](https://github.com/openclaw/openclaw/pull/105540)
- Give the working claw a clearer punching animation [#105597](https://github.com/openclaw/openclaw/pull/105597)
- Standardize duration parsing and display across OpenClaw [#105988](https://github.com/openclaw/openclaw/pull/105988)
- Finish the managed worktrees list redesign [#106514](https://github.com/openclaw/openclaw/pull/106514)
- Add a claw spinner to wizard wait steps [#108833](https://github.com/openclaw/openclaw/pull/108833)
- Reduce agent startup overhead from TTS imports [#109344](https://github.com/openclaw/openclaw/pull/109344)
- Reduce auth-expiry noise and add lobster logo scares [#110466](https://github.com/openclaw/openclaw/pull/110466)
- Lazy-load the lobster pet after Control UI startup [#110628](https://github.com/openclaw/openclaw/pull/110628)
- Fit the full Token Activity year without scrolling [#112006](https://github.com/openclaw/openclaw/pull/112006)
- Format international phone numbers in Control UI and CLI displays [#112400](https://github.com/openclaw/openclaw/pull/112400)
- Add three rare working-claw animations [#112552](https://github.com/openclaw/openclaw/pull/112552)
- Make working-claw tricks rare one-shot surprises [#114025](https://github.com/openclaw/openclaw/pull/114025)
- Reduce Telegram streaming work on the Gateway hot path [#118349](https://github.com/openclaw/openclaw/pull/118349)
- Add temporary and permanent lobster dismissal choices [#123789](https://github.com/openclaw/openclaw/pull/123789)
- Add observed away duration to Slack presence events [#123805](https://github.com/openclaw/openclaw/pull/123805)
- Configure Slack presence-event guidance [#123875](https://github.com/openclaw/openclaw/pull/123875)
- fix(diffs): load Playwright renderer on demand [#127040](https://github.com/openclaw/openclaw/pull/127040)
- Speed up dense Google Chat bullet-list formatting [#127274](https://github.com/openclaw/openclaw/pull/127274)
- chore: refresh dependencies after seven-day cooldown [#128414](https://github.com/openclaw/openclaw/pull/128414)
- improve(discord): avoid repeated account resolution on sends [#128462](https://github.com/openclaw/openclaw/pull/128462)
- improve(feishu): avoid repeated outbound post rendering [#128471](https://github.com/openclaw/openclaw/pull/128471)
- improve(irc): reuse transient connection for chunked sends [#128487](https://github.com/openclaw/openclaw/pull/128487)
- improve(ui): make Tasks easier to scan [#128853](https://github.com/openclaw/openclaw/pull/128853)
- perf(ui): defer custom theme import to settings [#130710](https://github.com/openclaw/openclaw/pull/130710)
- Refresh CLI startup taglines [#102750](https://github.com/openclaw/openclaw/pull/102750)
- Add roast-style CLI startup taglines [#102789](https://github.com/openclaw/openclaw/pull/102789)
- Attribute OpenClaw to the OpenClaw Foundation [#112536](https://github.com/openclaw/openclaw/pull/112536)
- Add provider icons to coding catalog headings [#115956](https://github.com/openclaw/openclaw/pull/115956)
- Show the Pi logo in external-session catalogs [#119998](https://github.com/openclaw/openclaw/pull/119998)
- Give the collapsed session rail a distinct header icon [#121420](https://github.com/openclaw/openclaw/pull/121420)
- Generate session and thread titles in sentence case [#123389](https://github.com/openclaw/openclaw/pull/123389)
- Reduce Control UI startup CSS [#125539](https://github.com/openclaw/openclaw/pull/125539)
- improve(telegram): reduce rich message planning work [#127719](https://github.com/openclaw/openclaw/pull/127719)
- improve(nextcloud-talk): avoid room credential reads on sends [#128344](https://github.com/openclaw/openclaw/pull/128344)
- improve(googlechat): avoid duplicate DM route reads [#128359](https://github.com/openclaw/openclaw/pull/128359)
- improve(matrix): avoid duplicate outbound body projection [#128392](https://github.com/openclaw/openclaw/pull/128392)
- perf(ui): fix failing startup stylesheet and JavaScript budgets [#130037](https://github.com/openclaw/openclaw/pull/130037)
- Clarify Workboard card drag feedback [#89821](https://github.com/openclaw/openclaw/pull/89821)

**Bug fixes**

- Preserve lobster vigil reactions and cancel interrupted pet gestures [#103483](https://github.com/openclaw/openclaw/pull/103483)
- Center the onboarding dashboard and fix card layout [#121416](https://github.com/openclaw/openclaw/pull/121416)
- Keep the lobster dismiss menu fully visible [#124261](https://github.com/openclaw/openclaw/pull/124261)
- improve(mattermost): speed up inbound direct-message replies [#128431](https://github.com/openclaw/openclaw/pull/128431)
- Keep the lobster pet above the sidebar footer [#106457](https://github.com/openclaw/openclaw/pull/106457)
- Restore the ClawHub verdict panel background [#113776](https://github.com/openclaw/openclaw/pull/113776)
- Restore the bundled Teams plugin icon [#117170](https://github.com/openclaw/openclaw/pull/117170)
- Keep app-card titles intact beside badges [#123375](https://github.com/openclaw/openclaw/pull/123375)
- Remove underlines from dashboard session cards [#124939](https://github.com/openclaw/openclaw/pull/124939)

</details>

</Accordion>

<Accordion title="Documentation">

Setup, migration, recovery, and feature guidance now covers cloud workers, meetings and media, Code Mode, Swarm, portals, sandboxes, local speech, SQLite migrations, backups, and downgrade recovery more clearly. Mobile readers get better top-level links, and the Release and CI pages lose a redundant navigation layer. These are documentation and QA updates; runtime behaviour continues to follow the referenced product and platform contracts.

Two cloud-worker details remain out of sync. The Cloud Workers settings guide overstates profile information shown for providers other than Crabbox, and the Daytona guide says `settings.class` can be omitted even though profile validation still requires it, so Daytona profiles should keep the class explicit until the guide and product contract agree.

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

**Documentation**

- Add a meeting plugin comparison and setup guide [09dd616](https://github.com/openclaw/openclaw/commit/09dd616)
- Explain one-way database migrations and downgrade recovery [#110487](https://github.com/openclaw/openclaw/pull/110487)
- Document the personal-agent main session [#110905](https://github.com/openclaw/openclaw/pull/110905)
- Document session self-service, visible spawns, task cancellation, and cron contracts [#111095](https://github.com/openclaw/openclaw/pull/111095)
- Add the public Swarm user guide [#111384](https://github.com/openclaw/openclaw/pull/111384)
- Add a cross-client media playback guide [#116005](https://github.com/openclaw/openclaw/pull/116005)
- Add the session synchronization and attachment guide [#121091](https://github.com/openclaw/openclaw/pull/121091)
- Document three-layer session ownership [#125334](https://github.com/openclaw/openclaw/pull/125334)
- Document Cloud Workers settings and machine selection [#126049](https://github.com/openclaw/openclaw/pull/126049)
- Consolidate setup and plugin documentation [#126132](https://github.com/openclaw/openclaw/pull/126132)
- Explain the sidebar unsent-draft pencil [4f046b5](https://github.com/openclaw/openclaw/commit/4f046b5)
- Add the Cloud Workers gateway guide [6029bf1](https://github.com/openclaw/openclaw/commit/6029bf1)
- Clarify hosted session state and image attachment debugging [8f23e68](https://github.com/openclaw/openclaw/commit/8f23e68)
- Document Discord voice chat alongside meeting plugins [b51e3d0](https://github.com/openclaw/openclaw/commit/b51e3d0)
- Add mobile-friendly links to top-level docs [#100908](https://github.com/openclaw/openclaw/pull/100908)
- Remove Android's retired Voice Wake code [#104914](https://github.com/openclaw/openclaw/pull/104914)
- Document local TTS setup across macOS, Linux, and Windows [#110230](https://github.com/openclaw/openclaw/pull/110230)
- Correct the Chrome extension session disk budget documentation [#110624](https://github.com/openclaw/openclaw/pull/110624)
- Align interactive client and Screen tool documentation [#111047](https://github.com/openclaw/openclaw/pull/111047)
- Explain Codex memory limits and fan-out controls [#111234](https://github.com/openclaw/openclaw/pull/111234)
- Align ask-user QA and docs with the current answer format [#111429](https://github.com/openclaw/openclaw/pull/111429)
- Fix the SenseAudio documentation link [#114021](https://github.com/openclaw/openclaw/pull/114021)
- Cross-link `agent exec` from automation and policy documentation [#114034](https://github.com/openclaw/openclaw/pull/114034)
- Explain steering at tool-call boundaries [#114249](https://github.com/openclaw/openclaw/pull/114249)
- Correct the documented `system.run` request fields [#116930](https://github.com/openclaw/openclaw/pull/116930)
- Document `nodes push` exit status [#117848](https://github.com/openclaw/openclaw/pull/117848)
- Update agent configuration examples to the canonical roster shape [#118722](https://github.com/openclaw/openclaw/pull/118722)
- Add a top-level Release & CI documentation tab [#119802](https://github.com/openclaw/openclaw/pull/119802)
- Simplify Release & CI documentation navigation [#120684](https://github.com/openclaw/openclaw/pull/120684)
- Document portal availability and tool-policy controls [#123091](https://github.com/openclaw/openclaw/pull/123091)
- Correct compaction-mode help and stabilize a QA timeout test [#124656](https://github.com/openclaw/openclaw/pull/124656)
- Correct Code Mode activation and recovery docs [#124792](https://github.com/openclaw/openclaw/pull/124792)
- docs(skills): teach current TaskFlow managedFlows runtime [#125647](https://github.com/openclaw/openclaw/pull/125647)
- Clarify where system-agent ownership applies [#126431](https://github.com/openclaw/openclaw/pull/126431)
- docs(nodes): clarify Mac node system commands [#128497](https://github.com/openclaw/openclaw/pull/128497)
- fix(docs): document OpenAI API auth for audio understanding alongside OAuth for reasoning [#128885](https://github.com/openclaw/openclaw/pull/128885)
- docs(sqlite): align database-first guidance [#129571](https://github.com/openclaw/openclaw/pull/129571)
- docs: cover sqlite3_rsync pull replication in the backups guide [#129820](https://github.com/openclaw/openclaw/pull/129820)
- docs(gateway): document the Daytona cloud-worker provider [#130282](https://github.com/openclaw/openclaw/pull/130282)
- docs(gateway): add Cloud Sessions overview page [#130301](https://github.com/openclaw/openclaw/pull/130301)
- Explain valid legacy MEDIA line formatting [#96275](https://github.com/openclaw/openclaw/pull/96275)

</details>

</Accordion>

</AccordionGroup>

## Other Bug Fixes

OpenClaw now preserves completed Codex delegation results through the covered handoffs, keeps accepted user turns from being stored twice, stops cancelled commands before they start, and retains Canvas widget identity and pin state after reload. The rest of this section covers scoped fixes across browser Talk, Copilot and xAI replay, Doctor recovery, plugin upgrades, meeting audio, and the terminal app.

<AccordionGroup>

<Accordion title="Agent Work and Handoffs">

In the repaired Codex delegation and `sessions_yield` paths, completed subagent results now survive cleanup and handoff, yielded jobs launch once, and the parent resumes after fan-out finishes.

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

**Bug fixes**

- Preserve Codex native subagent results after parent cleanup [#102060](https://github.com/openclaw/openclaw/pull/102060)
- Keep Gateway-connected nodes healthy and consistent [#103093](https://github.com/openclaw/openclaw/pull/103093)
- Protect managed worktrees while agent runs are active [#103263](https://github.com/openclaw/openclaw/pull/103263)
- Keep automatic session maintenance from deleting active runs [#104137](https://github.com/openclaw/openclaw/pull/104137)
- Keep command continuations in one session [#104866](https://github.com/openclaw/openclaw/pull/104866)
- Resume replay-safe work after Gateway restarts [#104997](https://github.com/openclaw/openclaw/pull/104997)
- Prevent retired subagent JSON from resurrecting completed runs [#105793](https://github.com/openclaw/openclaw/pull/105793)
- Preserve Claude CLI background subagent and workflow results [#106347](https://github.com/openclaw/openclaw/pull/106347)
- Harden cloud-worker admission and remote turns [#107043](https://github.com/openclaw/openclaw/pull/107043)
- Preserve managed worktrees when session state is unreadable [#108041](https://github.com/openclaw/openclaw/pull/108041)
- Prevent heartbeat stalls from aborting healthy runs [#108455](https://github.com/openclaw/openclaw/pull/108455)
- Preserve parent sessions when creating parallel child chats [#110541](https://github.com/openclaw/openclaw/pull/110541)
- Recover final replies after completed tool-only turns [#110565](https://github.com/openclaw/openclaw/pull/110565)
- Resume parent agents after yielded child handoffs [#110922](https://github.com/openclaw/openclaw/pull/110922)
- Preserve completed cloud-worker results before reconciliation [#110952](https://github.com/openclaw/openclaw/pull/110952)
- Recover cloud-worker sessions from workspace conflicts [#111244](https://github.com/openclaw/openclaw/pull/111244)
- Keep cloud-worker workspace reconciliation working across turns [#111481](https://github.com/openclaw/openclaw/pull/111481)
- Let Swarm collector fan-outs use their configured group caps [#111505](https://github.com/openclaw/openclaw/pull/111505)
- Make cloud-worker reclaim retryable after workspace conflicts [#111714](https://github.com/openclaw/openclaw/pull/111714)
- Make cloud-worker reclaim recover from retained conflicts [#112186](https://github.com/openclaw/openclaw/pull/112186)
- Resume interrupted turns after gateway restarts [#112562](https://github.com/openclaw/openclaw/pull/112562)
- Keep large Swarms reliable through races and restarts [#112989](https://github.com/openclaw/openclaw/pull/112989)
- Prevent sessions_yield completion deadlocks [#113190](https://github.com/openclaw/openclaw/pull/113190)
- Use abort codes for accurate restart recovery [#114219](https://github.com/openclaw/openclaw/pull/114219)
- Prevent cross-agent session lifecycle deadlocks [#114524](https://github.com/openclaw/openclaw/pull/114524)
- Stop blocked tool loops before turn timeout [#114673](https://github.com/openclaw/openclaw/pull/114673)
- Treat empty finalizers after successful tool work as completion [#115104](https://github.com/openclaw/openclaw/pull/115104)
- Restore full-stack delivery, recovery, and QA reliability [#115290](https://github.com/openclaw/openclaw/pull/115290)
- Restore end-to-end agent delivery and QA integrity [#115404](https://github.com/openclaw/openclaw/pull/115404)
- Stop managed Gateway crash loops during agent DB migration [#115631](https://github.com/openclaw/openclaw/pull/115631)
- Large agent fan-outs avoid registry persistence stalls [#116286](https://github.com/openclaw/openclaw/pull/116286)
- Preserve child-agent turn and navigation ownership [#116897](https://github.com/openclaw/openclaw/pull/116897)
- Keep sessions.steer retries from interrupting active work [#116969](https://github.com/openclaw/openclaw/pull/116969)
- Preserve final subagent replies and accurate session states [#117119](https://github.com/openclaw/openclaw/pull/117119)
- Preserve retry safety for paired-node command failures [#117139](https://github.com/openclaw/openclaw/pull/117139)
- Keep subagent results consistent after restart and at scale [#117141](https://github.com/openclaw/openclaw/pull/117141)
- Preserve approved command output when an agent session resumes [#117177](https://github.com/openclaw/openclaw/pull/117177)
- Preserve authoritative Codex turn outcomes and final answers [#117185](https://github.com/openclaw/openclaw/pull/117185)
- Canonicalize subagent timing and outcome state [#117267](https://github.com/openclaw/openclaw/pull/117267)
- Isolate concurrent Codex turns and completion delivery [#117298](https://github.com/openclaw/openclaw/pull/117298)
- Make subagent recovery deterministic after gateway restarts [#117412](https://github.com/openclaw/openclaw/pull/117412)
- Preserve agent run ownership and completion delivery [#117731](https://github.com/openclaw/openclaw/pull/117731)
- Restore reliable cancellation, run status, delegation, and Codex compaction [#117902](https://github.com/openclaw/openclaw/pull/117902)
- Make requested agent threads visible and persistent [#118073](https://github.com/openclaw/openclaw/pull/118073)
- Restore missing replies from steered or yielded subagents [#118117](https://github.com/openclaw/openclaw/pull/118117)
- Harden cancellation, compaction, and tool-loop safety [#118146](https://github.com/openclaw/openclaw/pull/118146)
- Keep queued agent runs alive until execution starts [#118181](https://github.com/openclaw/openclaw/pull/118181)
- Enforce child-agent limits during simultaneous launches [#118201](https://github.com/openclaw/openclaw/pull/118201)
- Keep subagent completion output private and accurate [#118296](https://github.com/openclaw/openclaw/pull/118296)
- Restore final replies after a tool failure [#118344](https://github.com/openclaw/openclaw/pull/118344)
- Preserve and recover subagent results after delivery failures [#118360](https://github.com/openclaw/openclaw/pull/118360)
- Let embedded agents recover once from critical tool loops [#118647](https://github.com/openclaw/openclaw/pull/118647)
- Deliver active-run steering reliably across agent harnesses [#119594](https://github.com/openclaw/openclaw/pull/119594)
- Resume parents after late subagent completion [#119696](https://github.com/openclaw/openclaw/pull/119696)
- Keep completed actions visible after final-answer recovery [#119726](https://github.com/openclaw/openclaw/pull/119726)
- Bound subagent completion results in parent prompts [#119731](https://github.com/openclaw/openclaw/pull/119731)
- Finish successful sessions despite timestamp races [#119752](https://github.com/openclaw/openclaw/pull/119752)
- Recover sessions trapped in repeated model retries [#119851](https://github.com/openclaw/openclaw/pull/119851)
- Make active-run steering exact and atomic [#120285](https://github.com/openclaw/openclaw/pull/120285)
- Preserve message arrival order across queue modes [#120420](https://github.com/openclaw/openclaw/pull/120420)
- Prevent agent turns from silently stalling after streaming [#120426](https://github.com/openclaw/openclaw/pull/120426)
- Surface required background completions and bound session patch output [#120453](https://github.com/openclaw/openclaw/pull/120453)
- Apply steering before unstarted tool calls [#120470](https://github.com/openclaw/openclaw/pull/120470)
- Resume yielded requesters after child agents finish [#120538](https://github.com/openclaw/openclaw/pull/120538)
- Use advertised SSH fallback ports for Cloud Workers [#120546](https://github.com/openclaw/openclaw/pull/120546)
- Preserve Cloud Worker cleanup across SSH fallback [#120715](https://github.com/openclaw/openclaw/pull/120715)
- Preserve Cloud Worker workspace results after SSH loss [#120717](https://github.com/openclaw/openclaw/pull/120717)
- Restore reliable Cloud session creation and worker tunnels [#120926](https://github.com/openclaw/openclaw/pull/120926)
- Wait for recovery-owner release before admitting replies [#120935](https://github.com/openclaw/openclaw/pull/120935)
- Keep steering messages at the next safe tool boundary [#120964](https://github.com/openclaw/openclaw/pull/120964)
- Make Crabbox cloud-worker provisioning idempotent [#121019](https://github.com/openclaw/openclaw/pull/121019)
- Restore Cloud Worker workspace sync from macOS Gateways [#121027](https://github.com/openclaw/openclaw/pull/121027)
- Make Cloud Worker startup responsive and recoverable [#121200](https://github.com/openclaw/openclaw/pull/121200)
- Support large Git workspaces in Cloud Workers [#121262](https://github.com/openclaw/openclaw/pull/121262)
- Resume main-session turns after Gateway restarts [#121969](https://github.com/openclaw/openclaw/pull/121969)
- Let Discord corrections steer active turns [#122452](https://github.com/openclaw/openclaw/pull/122452)
- Cascade session Stop to child agents [#122909](https://github.com/openclaw/openclaw/pull/122909)
- Preserve paired-device sessions while runners are offline [#123477](https://github.com/openclaw/openclaw/pull/123477)
- Make device onboarding and session dispatch outcomes reliable [#123501](https://github.com/openclaw/openclaw/pull/123501)
- Speed up local node launches and contain scratch state [#123503](https://github.com/openclaw/openclaw/pull/123503)
- Keep paired-node outcomes consistent under load [#123869](https://github.com/openclaw/openclaw/pull/123869)
- Preserve device-runner workspaces across restarts [#123889](https://github.com/openclaw/openclaw/pull/123889)
- Restore cloud-worker workspace sync after bundle cutover [#124339](https://github.com/openclaw/openclaw/pull/124339)
- Preserve cloud workspace results across tunnel reconnects [#124406](https://github.com/openclaw/openclaw/pull/124406)
- Keep active Crabbox cloud workers leased [#124615](https://github.com/openclaw/openclaw/pull/124615)
- Open new Git-workspace sessions without waiting for baseline scans [#124796](https://github.com/openclaw/openclaw/pull/124796)
- Keep acknowledged agent turns recoverable [#124857](https://github.com/openclaw/openclaw/pull/124857)
- Preserve agent identity and skills outside the configured workspace [#125675](https://github.com/openclaw/openclaw/pull/125675)
- Pass agent workspace rules to native Codex subagents [#125783](https://github.com/openclaw/openclaw/pull/125783)
- Make steering atomic and Gateway-owned [#125808](https://github.com/openclaw/openclaw/pull/125808)
- Keep turns active when sessions_yield has no child [#125850](https://github.com/openclaw/openclaw/pull/125850)
- Share delegation guidance across native and Codex runtimes [#125892](https://github.com/openclaw/openclaw/pull/125892)
- Resume turns that settle during Gateway restart drain [#125955](https://github.com/openclaw/openclaw/pull/125955)
- Keep large `AGENTS.md` instruction chains visible to Codex [#125966](https://github.com/openclaw/openclaw/pull/125966)
- Bind subagent completion delivery to its Gateway [#126062](https://github.com/openclaw/openclaw/pull/126062)
- Surface paired-device runtime and onboarding requirements [#126067](https://github.com/openclaw/openclaw/pull/126067)
- Let restart recovery own the visible turn result [#126087](https://github.com/openclaw/openclaw/pull/126087)
- Restore Cloud Worker Desktop for node-backed Crabbox workers [#126393](https://github.com/openclaw/openclaw/pull/126393)
- Defer restored subagent recovery until Gateway readiness [#126523](https://github.com/openclaw/openclaw/pull/126523)
- Recover cloud workers without blocking Gateway startup [#126641](https://github.com/openclaw/openclaw/pull/126641)
- Keep ACP prompts, sessions, and conversation bindings with their active owner [#126657](https://github.com/openclaw/openclaw/pull/126657)
- Unblock sessions after restart recovery has settled [#126671](https://github.com/openclaw/openclaw/pull/126671)
- Complete autonomous Cloud Desktop startup [#126705](https://github.com/openclaw/openclaw/pull/126705)
- Prevent lost or duplicate subagent completion messages [#126812](https://github.com/openclaw/openclaw/pull/126812)
- fix(recovery): keep queued replies alive during session watchdog repair [#127510](https://github.com/openclaw/openclaw/pull/127510)
- fix(gateway): prevent silent delivery loss on closing connections [#128144](https://github.com/openclaw/openclaw/pull/128144)
- fix: explain cloud worker enrollment failures behind reverse proxies [#128632](https://github.com/openclaw/openclaw/pull/128632)
- fix(gateway): make restart recovery state authoritative [#129316](https://github.com/openclaw/openclaw/pull/129316)
- fix(workers): remote sessions preserve destination and access policy [#130148](https://github.com/openclaw/openclaw/pull/130148)
- fix(workers): preserve remote turns through drain and cancellation [#130235](https://github.com/openclaw/openclaw/pull/130235)
- fix(workers): re-arm admission-deadline launches, terminalize dead-worker turns, defer debris cleanup [#130446](https://github.com/openclaw/openclaw/pull/130446)
- Keep subagents alive during long tool calls [#95536](https://github.com/openclaw/openclaw/pull/95536)
- Bound repeated session recovery across Gateway restarts [#96230](https://github.com/openclaw/openclaw/pull/96230)
- Resume top-level sessions after parallel subagents finish [#99396](https://github.com/openclaw/openclaw/pull/99396)
- Drain queued replies after mismatched active operations finish [18b4cc9](https://github.com/openclaw/openclaw/commit/18b4cc9)
- Skip redundant gateway checkout sync during Crabbox setup [2ec0299](https://github.com/openclaw/openclaw/commit/2ec0299)
- Prevent canceled agent runs from contending with their own cleanup [a14bbd1](https://github.com/openclaw/openclaw/commit/a14bbd1)
- Keep visible cloud-worker turns streaming [fc3ba07](https://github.com/openclaw/openclaw/commit/fc3ba07)
- Warn when a yielded agent turn has no way to continue [#100146](https://github.com/openclaw/openclaw/pull/100146)
- Keep truncated ACP output valid Unicode [#102378](https://github.com/openclaw/openclaw/pull/102378)
- Clean up canceled queued chat turns safely [#103194](https://github.com/openclaw/openclaw/pull/103194)
- Keep agent runs alive when progress callbacks fail [#103351](https://github.com/openclaw/openclaw/pull/103351)
- Keep native commands responsive during active runs [#104144](https://github.com/openclaw/openclaw/pull/104144)
- Make indexed access explicit across the agent runtime [#104670](https://github.com/openclaw/openclaw/pull/104670)
- Keep agent cancellation and timeout outcomes consistent [#104936](https://github.com/openclaw/openclaw/pull/104936)
- Preserve Codex subagent completions after sessions_yield [#105724](https://github.com/openclaw/openclaw/pull/105724)
- Preserve agent continuations across restart deferral races [#106174](https://github.com/openclaw/openclaw/pull/106174)
- Preserve labels for cross-agent ACP spawns [#106241](https://github.com/openclaw/openclaw/pull/106241)
- Preserve image attachments when steering active runs [#107657](https://github.com/openclaw/openclaw/pull/107657)
- Delete sessions immediately after cloud-worker teardown [#107848](https://github.com/openclaw/openclaw/pull/107848)
- Block synchronous self-sends and attribute missing-cost usage [#108354](https://github.com/openclaw/openclaw/pull/108354)
- Resume cloud sessions after a Gateway restart [#108426](https://github.com/openclaw/openclaw/pull/108426)
- Preserve no-delivery subagent status after restart [#108710](https://github.com/openclaw/openclaw/pull/108710)
- Show a durable ACP interruption after Gateway disconnects [#108827](https://github.com/openclaw/openclaw/pull/108827)
- Restore routed internal chat turns [#109201](https://github.com/openclaw/openclaw/pull/109201)
- Preserve captured subagent output after silent completion [#109541](https://github.com/openclaw/openclaw/pull/109541)
- Keep final replies scoped to the current agent run [#109676](https://github.com/openclaw/openclaw/pull/109676)
- Report operator-stopped agent turns as cancelled [#110220](https://github.com/openclaw/openclaw/pull/110220)
- Isolate embedded fallback after Gateway transport loss [#110226](https://github.com/openclaw/openclaw/pull/110226)
- Keep derived caches from wedging cloud workspaces [#110380](https://github.com/openclaw/openclaw/pull/110380)
- Show cloud-worker progress in session tail [#110460](https://github.com/openclaw/openclaw/pull/110460)
- Allow live Swarm fan-outs to launch registered collector agents [#111379](https://github.com/openclaw/openclaw/pull/111379)
- Reconcile abandoned running sessions after restart [#111699](https://github.com/openclaw/openclaw/pull/111699)
- Admit healthy sessions after restart recovery completes [#111869](https://github.com/openclaw/openclaw/pull/111869)
- Recover sessions after force-clearing stuck agent runs [#112166](https://github.com/openclaw/openclaw/pull/112166)
- Allow direct sessions in non-Git Gateway folders [#112433](https://github.com/openclaw/openclaw/pull/112433)
- Prevent subagent completion replay after gateway restarts [#112534](https://github.com/openclaw/openclaw/pull/112534)
- Recover agents stuck in stable tool-argument churn [#112620](https://github.com/openclaw/openclaw/pull/112620)
- Keep forced cloud worker teardown from being blocked by recovery [#112781](https://github.com/openclaw/openclaw/pull/112781)
- Re-adopt healthy cloud workers after Gateway restart [#112928](https://github.com/openclaw/openclaw/pull/112928)
- Let benign session updates stop blocking cron and subagent starts [#113088](https://github.com/openclaw/openclaw/pull/113088)
- Bound session-catalog provider refresh pressure [#113171](https://github.com/openclaw/openclaw/pull/113171)
- Retire completed session queue lanes [#114051](https://github.com/openclaw/openclaw/pull/114051)
- Recover terminal sessions stuck behind stale restart state [#114071](https://github.com/openclaw/openclaw/pull/114071)
- Recover sessions with missing status and stale restart fences [#114078](https://github.com/openclaw/openclaw/pull/114078)
- Resume interrupted turns regardless of abort wording [#114121](https://github.com/openclaw/openclaw/pull/114121)
- Reclaim stale agent worktree locks after restarts [#114130](https://github.com/openclaw/openclaw/pull/114130)
- Preserve subagent announcements on benign compaction skips [#114449](https://github.com/openclaw/openclaw/pull/114449)
- Harden session lifecycle and subagent controls [#114477](https://github.com/openclaw/openclaw/pull/114477)
- Keep canceled and timed-out agent runs terminal [#114542](https://github.com/openclaw/openclaw/pull/114542)
- Fail fast when session creation finds initialization in progress [#114597](https://github.com/openclaw/openclaw/pull/114597)
- Recover gateway startup from dead migration owners [#114718](https://github.com/openclaw/openclaw/pull/114718)
- Restore observer updates and companion role boundaries [#114898](https://github.com/openclaw/openclaw/pull/114898)
- Harden node reconnects and inference cancellation [#115033](https://github.com/openclaw/openclaw/pull/115033)
- Detect adopted Claude and Pi turns despite short file reads [#115106](https://github.com/openclaw/openclaw/pull/115106)
- Avoid repeated subagent-result prompt rendering [#115263](https://github.com/openclaw/openclaw/pull/115263)
- Prevent canceled CLI agent runs from starting [#115324](https://github.com/openclaw/openclaw/pull/115324)
- Restore subagent completion delivery for CLI parents [#115422](https://github.com/openclaw/openclaw/pull/115422)
- Prevent stale node sessions from appearing healthy [#115971](https://github.com/openclaw/openclaw/pull/115971)
- Prevent finalization retries from dropping chat replies [#116006](https://github.com/openclaw/openclaw/pull/116006)
- Restore Codex final acknowledgments after settled tools [#116044](https://github.com/openclaw/openclaw/pull/116044)
- Run after-turn hooks for interrupted agent turns [#116087](https://github.com/openclaw/openclaw/pull/116087)
- Preserve streamed replies when an agent run times out [#116253](https://github.com/openclaw/openclaw/pull/116253)
- fix(worker): add jitter to default reconnect backoff to prevent thundering herd [#116279](https://github.com/openclaw/openclaw/pull/116279)
- Keep subagent status responsive with retained history [#116449](https://github.com/openclaw/openclaw/pull/116449)
- Bound Codex steering requests by timeout and abort [#116565](https://github.com/openclaw/openclaw/pull/116565)
- Resume in-flight Code Mode work after Gateway restarts [#116605](https://github.com/openclaw/openclaw/pull/116605)
- Resume interrupted Codex conversations after gateway restart [#116725](https://github.com/openclaw/openclaw/pull/116725)
- Stop restart loops for repairable state database schemas [#116733](https://github.com/openclaw/openclaw/pull/116733)
- Preserve truthful bounded subagent outcomes [#116932](https://github.com/openclaw/openclaw/pull/116932)
- Show killed subagents consistently across status views [#116991](https://github.com/openclaw/openclaw/pull/116991)
- Handle embedded-agent cancellation exactly once [#116994](https://github.com/openclaw/openclaw/pull/116994)
- Reject Gateway sends after a node socket starts closing [#117066](https://github.com/openclaw/openclaw/pull/117066)
- Preserve parent tools on verified subagent completion wakes [#117148](https://github.com/openclaw/openclaw/pull/117148)
- Serialize subagent recovery after Gateway restarts [#117283](https://github.com/openclaw/openclaw/pull/117283)
- Preserve Codex app-server disconnect diagnostics [#117296](https://github.com/openclaw/openclaw/pull/117296)
- Isolate WorkerConnection observer failures [#117507](https://github.com/openclaw/openclaw/pull/117507)
- Honor subagent completion capture deadlines [#117750](https://github.com/openclaw/openclaw/pull/117750)
- fix(gateway): stop expired or stalled remote-node streaming [#117918](https://github.com/openclaw/openclaw/pull/117918)
- Give queued agent runs their full execution timeout [#117995](https://github.com/openclaw/openclaw/pull/117995)
- Preserve reply recovery during Gateway restart handoff [#118026](https://github.com/openclaw/openclaw/pull/118026)
- Stop repeated equivalent terminal command failures [#118071](https://github.com/openclaw/openclaw/pull/118071)
- Keep delayed sessions_send follow-ups running [#118105](https://github.com/openclaw/openclaw/pull/118105)
- Classify agent cancellations and timeouts consistently [#118254](https://github.com/openclaw/openclaw/pull/118254)
- Restore /btw side questions on gateway sessions [#118396](https://github.com/openclaw/openclaw/pull/118396)
- Reject hidden-only subagent completion replies [#118461](https://github.com/openclaw/openclaw/pull/118461)
- Preserve sessions_yield handoffs and requester final replies [#118584](https://github.com/openclaw/openclaw/pull/118584)
- Prevent duplicate Codex subagents after yielded fanout [#118644](https://github.com/openclaw/openclaw/pull/118644)
- Record authoritative completion reasons in trajectories [#118685](https://github.com/openclaw/openclaw/pull/118685)
- Prevent duplicate yielded subagent launches and missing synthesis [#118703](https://github.com/openclaw/openclaw/pull/118703)
- Suppress false no-reply messages during continuations [#119154](https://github.com/openclaw/openclaw/pull/119154)
- Preserve admitted node results during disconnect [#119246](https://github.com/openclaw/openclaw/pull/119246)
- Fence subagent recovery to the active Gateway lifecycle [#119776](https://github.com/openclaw/openclaw/pull/119776)
- Deliver yielded subagent follow-up results to the waiting parent [#120187](https://github.com/openclaw/openclaw/pull/120187)
- Wait for child agents to finish before resuming the requester [#120601](https://github.com/openclaw/openclaw/pull/120601)
- Prevent cloud-worker teardown from racing slow setup [#120661](https://github.com/openclaw/openclaw/pull/120661)
- Stop queued agent work after aborted sessions [#120856](https://github.com/openclaw/openclaw/pull/120856)
- Acknowledge busy-session steering only after transcript persistence [#120914](https://github.com/openclaw/openclaw/pull/120914)
- Prevent hung agent teardown from wedging sessions [#120921](https://github.com/openclaw/openclaw/pull/120921)
- Recover failed cloud-worker placements safely [#120976](https://github.com/openclaw/openclaw/pull/120976)
- Preserve cloud-worker failure details across Gateway restarts [#121122](https://github.com/openclaw/openclaw/pull/121122)
- Clear the exact queued message when delivery begins [#121158](https://github.com/openclaw/openclaw/pull/121158)
- Start subagent retention after work completes [#121178](https://github.com/openclaw/openclaw/pull/121178)
- fix(gateway): preserve paired restart session refs [#121478](https://github.com/openclaw/openclaw/pull/121478)
- fix(workers): repair cloud session lifecycle and recovery [#121564](https://github.com/openclaw/openclaw/pull/121564)
- Keep queued cross-session sends isolated under contention [#121662](https://github.com/openclaw/openclaw/pull/121662)
- Keep replacement sessions attached to live worktrees [#121666](https://github.com/openclaw/openclaw/pull/121666)
- Keep subagent results with the correct follow-up generation [#121771](https://github.com/openclaw/openclaw/pull/121771)
- Stop orphan completion polling and stale requester wake delays [#121782](https://github.com/openclaw/openclaw/pull/121782)
- Retry subagent cleanup after transient failures [#121802](https://github.com/openclaw/openclaw/pull/121802)
- Preserve truthful subagent result delivery state [#121837](https://github.com/openclaw/openclaw/pull/121837)
- fix(gateway): clear orphan execHost when unbinding execNode [#121966](https://github.com/openclaw/openclaw/pull/121966)
- Keep dismissed subagent results from reappearing after restart [#121972](https://github.com/openclaw/openclaw/pull/121972)
- Let Cloud Worker previews stream without Gateway round-trip pacing [#122258](https://github.com/openclaw/openclaw/pull/122258)
- Release stale reply ownership that blocks later messages [#122265](https://github.com/openclaw/openclaw/pull/122265)
- Keep concurrent isolated completions independent [#122468](https://github.com/openclaw/openclaw/pull/122468)
- Keep direct Codex child tools working after parent yield [#122503](https://github.com/openclaw/openclaw/pull/122503)
- fix(subagents): preserve announce drop vs none delivery reasons [#122855](https://github.com/openclaw/openclaw/pull/122855)
- Resume Codex parents after subagent fan-out [#123124](https://github.com/openclaw/openclaw/pull/123124)
- Keep Gateway-local node ownership in describe responses [#123165](https://github.com/openclaw/openclaw/pull/123165)
- Keep queued subagents alive while awaiting capacity [#123169](https://github.com/openclaw/openclaw/pull/123169)
- Clear phantom active sessions after terminal handling is lost [#123192](https://github.com/openclaw/openclaw/pull/123192)
- Prevent duplicate requester wakes after subagent completion [#123285](https://github.com/openclaw/openclaw/pull/123285)
- Restore cloud-worker turns after dispatch [#123337](https://github.com/openclaw/openclaw/pull/123337)
- Prevent duplicate final replies from embedded agent runs [#123391](https://github.com/openclaw/openclaw/pull/123391)
- Preserve Swarm collector failure details [#123468](https://github.com/openclaw/openclaw/pull/123468)
- Preserve active-turn steering after tool-authority checks [#123549](https://github.com/openclaw/openclaw/pull/123549)
- Prevent false failures after successful node-hosted turns [#123564](https://github.com/openclaw/openclaw/pull/123564)
- Expire stale paired-node worker environments after 14 days [#123673](https://github.com/openclaw/openclaw/pull/123673)
- Bound persistent node-runner workspace growth [#123700](https://github.com/openclaw/openclaw/pull/123700)
- Prevent workspace sync files from being truncated by short writes [#123739](https://github.com/openclaw/openclaw/pull/123739)
- Surface node-worker Gateway connection failures [#123773](https://github.com/openclaw/openclaw/pull/123773)
- Retire worker placements after sessions disappear [#123785](https://github.com/openclaw/openclaw/pull/123785)
- Prevent false TLS failures after node-host turns [#123790](https://github.com/openclaw/openclaw/pull/123790)
- Allow cloud-worker bootstrap over slow uplinks [#123919](https://github.com/openclaw/openclaw/pull/123919)
- Separate concurrent cloud-worker runtime modes [#123946](https://github.com/openclaw/openclaw/pull/123946)
- fix(gateway): frozen worker processes never resume when the host ps stalls [#123976](https://github.com/openclaw/openclaw/pull/123976)
- Make dropped targeted Gateway events detectable [#123999](https://github.com/openclaw/openclaw/pull/123999)
- Cancel pending ACP prompts during bridge shutdown [#124068](https://github.com/openclaw/openclaw/pull/124068)
- Release stale cloud-worker claims after reconciliation failure [#124368](https://github.com/openclaw/openclaw/pull/124368)
- Keep large worker-placement sweeps responsive [#124372](https://github.com/openclaw/openclaw/pull/124372)
- Reconcile cloud workspaces with more than 25,000 files [#124373](https://github.com/openclaw/openclaw/pull/124373)
- Report worker errors returned before launch [#124387](https://github.com/openclaw/openclaw/pull/124387)
- fix(subagents): bound settle-wake deferrals to prevent indefinite parking [#124408](https://github.com/openclaw/openclaw/pull/124408)
- Prune obsolete worker bundles on paired nodes [#124590](https://github.com/openclaw/openclaw/pull/124590)
- Recover staged remote-exec results after restart [#124619](https://github.com/openclaw/openclaw/pull/124619)
- Stop ACPX session resets from silently skipping runtime hooks [#124628](https://github.com/openclaw/openclaw/pull/124628)
- Prevent concurrent worker starts from cancelling a valid connection [#124638](https://github.com/openclaw/openclaw/pull/124638)
- Prevent bad broadcasts from reconnecting every client [#124726](https://github.com/openclaw/openclaw/pull/124726)
- Preserve device-runner sessions through capacity faults [#124744](https://github.com/openclaw/openclaw/pull/124744)
- Recover channel turns across repeated Gateway restarts [#124746](https://github.com/openclaw/openclaw/pull/124746)
- Cancel running subagents through the Gateway [#124752](https://github.com/openclaw/openclaw/pull/124752)
- Preserve actionable stale-worker build failures [#124774](https://github.com/openclaw/openclaw/pull/124774)
- Accept local and reclaimed session cleanup results [#124791](https://github.com/openclaw/openclaw/pull/124791)
- Report and terminalize stale cloud-worker build failures [#124920](https://github.com/openclaw/openclaw/pull/124920)
- Ensure late steering receives a response before a run ends [#125038](https://github.com/openclaw/openclaw/pull/125038)
- Reject outdated workers during restart recovery [#125083](https://github.com/openclaw/openclaw/pull/125083)
- Show a waiting reply when sessions_yield pauses a turn [#125106](https://github.com/openclaw/openclaw/pull/125106)
- Stop restart recovery from claiming interrupted commands succeeded [#125209](https://github.com/openclaw/openclaw/pull/125209)
- fix(subagents): keep the failure cause on pending-error timeout announces [#125357](https://github.com/openclaw/openclaw/pull/125357)
- Start cloud workers from registered projects [#125680](https://github.com/openclaw/openclaw/pull/125680)
- Prevent stale steer cleanup from aborting a new run [#125763](https://github.com/openclaw/openclaw/pull/125763)
- Avoid session-store reads during streamed responses [#125872](https://github.com/openclaw/openclaw/pull/125872)
- Let Gateway choose the current run for steer sends [#125921](https://github.com/openclaw/openclaw/pull/125921)
- fix(diagnostics): defer watchdog abort during preflight [#125929](https://github.com/openclaw/openclaw/pull/125929)
- Route detached subagent announcements through their Gateway instance [#125946](https://github.com/openclaw/openclaw/pull/125946)
- Restore detached subagent completion delivery [#126040](https://github.com/openclaw/openclaw/pull/126040)
- Require authoritative final reply evidence for subagents [#126075](https://github.com/openclaw/openclaw/pull/126075)
- Keep session run identities accurate across clients [#126106](https://github.com/openclaw/openclaw/pull/126106)
- Keep channel subagent completions bound to their Gateway [#126113](https://github.com/openclaw/openclaw/pull/126113)
- Deliver subagent completions after parent turns end [#126122](https://github.com/openclaw/openclaw/pull/126122)
- Bound Gateway audit and Codex output backlogs [#126154](https://github.com/openclaw/openclaw/pull/126154)
- Preserve plugin subagent wait lifecycle details [#126167](https://github.com/openclaw/openclaw/pull/126167)
- Record delivery for empty subagent completions sent through messaging [#126179](https://github.com/openclaw/openclaw/pull/126179)
- Clear stale sub-agent failure warnings after a successful retry [#126218](https://github.com/openclaw/openclaw/pull/126218)
- Make session interrupts target the correct active turn [#126291](https://github.com/openclaw/openclaw/pull/126291)
- Apply cloud worker profiles for ported SSH remotes [#126343](https://github.com/openclaw/openclaw/pull/126343)
- Explain why deleted sessions keep managed worktrees [#126347](https://github.com/openclaw/openclaw/pull/126347)
- Let enrolled nodes reconnect during Gateway startup [#126601](https://github.com/openclaw/openclaw/pull/126601)
- Preserve worker results when scratch cleanup fails [#126849](https://github.com/openclaw/openclaw/pull/126849)
- Require a real final answer before delegated replies complete [#126925](https://github.com/openclaw/openclaw/pull/126925)
- fix(agents): deliver yielded requester settle finals [#127292](https://github.com/openclaw/openclaw/pull/127292)
- fix(crabbox): decouple lease heartbeat budget from renewal cadence [#127559](https://github.com/openclaw/openclaw/pull/127559)
- fix(gateway): let cloud sessions retry failed worker cleanup [#127660](https://github.com/openclaw/openclaw/pull/127660)
- fix(gateway): prevent sessions from using unconfigured agents [#127661](https://github.com/openclaw/openclaw/pull/127661)
- fix(agents): preserve authoritative child completion results [#127739](https://github.com/openclaw/openclaw/pull/127739)
- fix(agents): restore system-agent delegation in channel turns [#128084](https://github.com/openclaw/openclaw/pull/128084)
- Resume yielded requesters after visible session spawns [#128096](https://github.com/openclaw/openclaw/pull/128096)
- fix(gateway): avoid failed worker cleanup blocking startup [#128103](https://github.com/openclaw/openclaw/pull/128103)
- fix(subagents): interrupted tasks lose real user instructions after restart [#128104](https://github.com/openclaw/openclaw/pull/128104)
- fix(crabbox): preserve Machine0 provisioning budget [#128185](https://github.com/openclaw/openclaw/pull/128185)
- fix(agents): status-only replies silently suppress fallback and task completion [#128269](https://github.com/openclaw/openclaw/pull/128269)
- fix(gateway): keep replacement requests alive across reconnect cleanup [#128393](https://github.com/openclaw/openclaw/pull/128393)
- fix(nodes): retry automatic placement across eligible devices [#128566](https://github.com/openclaw/openclaw/pull/128566)
- fix(subagents): hide private commentary from logs and completion announcements [#128584](https://github.com/openclaw/openclaw/pull/128584)
- fix(gateway): preserve active cloud sessions during maintenance [#128588](https://github.com/openclaw/openclaw/pull/128588)
- fix(gateway): reclaim cloud workers before session recovery [#128597](https://github.com/openclaw/openclaw/pull/128597)
- fix(worker): support Windows shared-host quiescence [#128628](https://github.com/openclaw/openclaw/pull/128628)
- fix(nodes): require matching launch and turn identity [#128722](https://github.com/openclaw/openclaw/pull/128722)
- fix(gateway): skip worker bootstrap when teardown is pending [#128745](https://github.com/openclaw/openclaw/pull/128745)
- fix(gateway): keep cloud-managed nodes out of device placement [#128780](https://github.com/openclaw/openclaw/pull/128780)
- fix(node-host): recover worker hosting after transient initialization failures [#128798](https://github.com/openclaw/openclaw/pull/128798)
- fix(agents): transient final-call failures discard a completed tool turn [#128840](https://github.com/openclaw/openclaw/pull/128840)
- fix(gateway): wait for restart recovery execution start [#128843](https://github.com/openclaw/openclaw/pull/128843)
- fix(gateway): publish cloud placement changes [#128914](https://github.com/openclaw/openclaw/pull/128914)
- fix(crabbox): dispose heartbeat generations [#128957](https://github.com/openclaw/openclaw/pull/128957)
- fix(workers): preserve v1 bundle identity on Windows [#128989](https://github.com/openclaw/openclaw/pull/128989)
- fix(agents): child tasks lose findings and actionable failure causes [#129074](https://github.com/openclaw/openclaw/pull/129074)
- fix(nodes): keep starting containers out of the exited state [#129102](https://github.com/openclaw/openclaw/pull/129102)
- fix(codex): preserve native subagent gateway delivery [#129109](https://github.com/openclaw/openclaw/pull/129109)
- fix(workers): retry interrupted workspace lease releases [#129221](https://github.com/openclaw/openclaw/pull/129221)
- fix: cloud worker transfers fail after plain workspace results are staged [#129223](https://github.com/openclaw/openclaw/pull/129223)
- fix(workers): preserve executable workspace files on Windows nodes [#129226](https://github.com/openclaw/openclaw/pull/129226)
- fix(agent-core): close tool batches at the launch boundary [#129293](https://github.com/openclaw/openclaw/pull/129293)
- fix(gateway): reconnect clients after failed WebSocket delivery [#129458](https://github.com/openclaw/openclaw/pull/129458)
- fix(worker): honor full access on paired node sessions [#129537](https://github.com/openclaw/openclaw/pull/129537)
- fix(agents): avoid superseding terminal run owners [#129629](https://github.com/openclaw/openclaw/pull/129629)
- refactor(workers): unify cloud bootstrap lifecycle [#129719](https://github.com/openclaw/openclaw/pull/129719)
- fix(subagents): preserve pending completions across delete cleanup and restore [#129754](https://github.com/openclaw/openclaw/pull/129754)
- fix(workers): keep remote execution on its selected node [#129929](https://github.com/openclaw/openclaw/pull/129929)
- fix(subagents): a completed subagent does not wake an idle parent until someone sends a message [#129993](https://github.com/openclaw/openclaw/pull/129993)
- fix(agents): strip external-content nonce so loop detection blocks repeated wrapped failures [#130261](https://github.com/openclaw/openclaw/pull/130261)
- Fix missing replies after native Codex subagents finish [#130311](https://github.com/openclaw/openclaw/pull/130311)
- Keep native completion receipts through child recovery [#130347](https://github.com/openclaw/openclaw/pull/130347)
- fix(workers): recheck idle and node readiness after waits [#130390](https://github.com/openclaw/openclaw/pull/130390)
- improve(worker): diagnose admission-deadline failures and widen daemon revalidation budget [#130435](https://github.com/openclaw/openclaw/pull/130435)
- fix(workers): report full nodes as at capacity, not offline [#130445](https://github.com/openclaw/openclaw/pull/130445)
- fix(workers): protect in-flight workspace manifests from concurrent retention [#130449](https://github.com/openclaw/openclaw/pull/130449)
- fix(gateway): recover admitted turns across restart [#130491](https://github.com/openclaw/openclaw/pull/130491)
- fix(subagents): reconcile transport-ambiguous dispatch instead of misreporting an accepted run [#130586](https://github.com/openclaw/openclaw/pull/130586)
- fix(gateway): finish node disconnect cleanup before yielding [#130631](https://github.com/openclaw/openclaw/pull/130631)
- fix(agents): preserve silent reply after settled tools [#130675](https://github.com/openclaw/openclaw/pull/130675)
- fix: session creation targets the wrong Gateway after admission [#130686](https://github.com/openclaw/openclaw/pull/130686)
- fix: nested worker delegation no longer times out [#130691](https://github.com/openclaw/openclaw/pull/130691)
- fix(agents): continue settled tool batches after a transport drop [#130721](https://github.com/openclaw/openclaw/pull/130721)
- fix(gateway): pin runtime generation at admission [#131120](https://github.com/openclaw/openclaw/pull/131120)
- Preserve explicit main-agent bindings in multi-agent configurations [#89419](https://github.com/openclaw/openclaw/pull/89419)
- Retire stale subagent runs after gateway restarts [#90817](https://github.com/openclaw/openclaw/pull/90817)
- Preserve chat abort results after dispatch rejection [#91000](https://github.com/openclaw/openclaw/pull/91000)
- Prevent duplicate inter-agent sends after compaction [#93293](https://github.com/openclaw/openclaw/pull/93293)
- Keep yielded parent tasks running while continuation work remains [#95996](https://github.com/openclaw/openclaw/pull/95996)
- Stop A2A handoffs from re-sending message-tool replies [#97259](https://github.com/openclaw/openclaw/pull/97259)
- Restore gateway routing for session dispatch [4f86a29](https://github.com/openclaw/openclaw/commit/4f86a29)
- Keep long steering metadata valid around emoji boundaries [#101736](https://github.com/openclaw/openclaw/pull/101736)
- Prevent stale final replies after a session reset or deletion [#102128](https://github.com/openclaw/openclaw/pull/102128)
- Keep ACP steer acknowledgements emoji-safe [#102583](https://github.com/openclaw/openclaw/pull/102583)
- Preserve why child runs stopped in session state [#104676](https://github.com/openclaw/openclaw/pull/104676)
- Keep masked subagent run IDs valid around emoji [#104874](https://github.com/openclaw/openclaw/pull/104874)
- Preserve cancellation and timeout reasons in active agent sessions [#113693](https://github.com/openclaw/openclaw/pull/113693)
- Reject worktree sessions from repositories without commits [#117447](https://github.com/openclaw/openclaw/pull/117447)
- Consolidate normalization helpers across production [#120350](https://github.com/openclaw/openclaw/pull/120350)
- Keep simultaneous steering messages paired with their own delivery [#120770](https://github.com/openclaw/openclaw/pull/120770)
- Preserve Cloud Worker teardown failures during reclaim [#121520](https://github.com/openclaw/openclaw/pull/121520)
- Let timed-out cloud dispatch retries rejoin the running operation [#121616](https://github.com/openclaw/openclaw/pull/121616)
- Retry persisted subagent recovery after transient failures [#121766](https://github.com/openclaw/openclaw/pull/121766)
- fix(gateway): invalidate stale worker disk-space projections [#123442](https://github.com/openclaw/openclaw/pull/123442)
- Stop startup jitter from looking like a Gateway stall [#123461](https://github.com/openclaw/openclaw/pull/123461)
- Stop duplicate cancellation attempts after a node worker deadline [#123462](https://github.com/openclaw/openclaw/pull/123462)
- Clear expired phantom active sessions during gateway maintenance [#123532](https://github.com/openclaw/openclaw/pull/123532)
- Preserve SSH failure diagnostics while tightening regression gates [#123606](https://github.com/openclaw/openclaw/pull/123606)
- Give spawned child agents exact staged attachment paths [#123676](https://github.com/openclaw/openclaw/pull/123676)
- Report unsupported node events explicitly [#123719](https://github.com/openclaw/openclaw/pull/123719)
- Clean node workspace transfer scratch across restarts [#123859](https://github.com/openclaw/openclaw/pull/123859)
- Bound Gateway worker-bundle cache growth [#123901](https://github.com/openclaw/openclaw/pull/123901)
- Recognize active native Codex children as yield continuations [#124004](https://github.com/openclaw/openclaw/pull/124004)
- Clean stale node worker bundle staging [#124057](https://github.com/openclaw/openclaw/pull/124057)
- Keep recovered node workers connecting until validation completes [#124109](https://github.com/openclaw/openclaw/pull/124109)
- fix(agents): bound escaped output for the third child-result call site [#124171](https://github.com/openclaw/openclaw/pull/124171)
- Distinguish busy device workers from disconnected ones [#124340](https://github.com/openclaw/openclaw/pull/124340)
- Preserve device-worker capacity failure messages [#124574](https://github.com/openclaw/openclaw/pull/124574)
- Warn when worker-placement session evidence cannot be resolved [#124635](https://github.com/openclaw/openclaw/pull/124635)
- Prevent side-effect replay after restart [#124737](https://github.com/openclaw/openclaw/pull/124737)
- Surface failed node event delivery [#124798](https://github.com/openclaw/openclaw/pull/124798)
- Keep worker reconciliation running through SQLite locks [#125058](https://github.com/openclaw/openclaw/pull/125058)
- Reject agent runs on unusable managed worktrees [#125341](https://github.com/openclaw/openclaw/pull/125341)
- Enforce one transport mode per cloud worker provider [#125384](https://github.com/openclaw/openclaw/pull/125384)
- fix(agents): stop canceled subagents reporting timeouts [#125407](https://github.com/openclaw/openclaw/pull/125407)
- Allow direct sessions in non-Git projects [#125657](https://github.com/openclaw/openclaw/pull/125657)
- Prevent cancelled steering messages from being queued [#126314](https://github.com/openclaw/openclaw/pull/126314)
- Preserve silent completion for CLI-backed child agents [#126379](https://github.com/openclaw/openclaw/pull/126379)
- Harden node-carried Cloud Worker Desktop sessions [#126425](https://github.com/openclaw/openclaw/pull/126425)
- Recover cloud workers after uncertain cleanup [#126465](https://github.com/openclaw/openclaw/pull/126465)
- fix(gateway): prevent interrupt failures from blocking session lifecycle [#126546](https://github.com/openclaw/openclaw/pull/126546)
- fix(gateway): prevent requests stalling after reconnect callbacks [#128268](https://github.com/openclaw/openclaw/pull/128268)
- fix(gateway): surface cloud workspace recovery failures [#128864](https://github.com/openclaw/openclaw/pull/128864)
- fix(workers): preserve workspace reconciliation failures [#129240](https://github.com/openclaw/openclaw/pull/129240)
- fix(node-host): drain all workers before shutdown failures [#129699](https://github.com/openclaw/openclaw/pull/129699)

</details>

</Accordion>

<Accordion title="Conversations, history, and stored data">

One accepted user turn now stays one turn across the repaired retry and restart paths instead of being written twice. `/new` and `/reset` also preserve the underlying transcript position while clearing the visible conversation, so resetting what you see does not lose OpenClaw's place in the saved history.

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

**Bug fixes**

- Let legacy state migrations converge after archive collisions [#102780](https://github.com/openclaw/openclaw/pull/102780)
- Move Web Push state to shared SQLite [#103294](https://github.com/openclaw/openclaw/pull/103294)
- Preserve user turns across incomplete agent retries [#103634](https://github.com/openclaw/openclaw/pull/103634)
- Reject and repair zero session retention durations [#104516](https://github.com/openclaw/openclaw/pull/104516)
- Unblock upgrades with recoverable legacy migration state [#104529](https://github.com/openclaw/openclaw/pull/104529)
- Harden interrupted SQLite session migration recovery [#105358](https://github.com/openclaw/openclaw/pull/105358)
- Preserve complete SQLite recovery file sets [#105370](https://github.com/openclaw/openclaw/pull/105370)
- Restore compaction for Codex sessions using ChatGPT OAuth [#105997](https://github.com/openclaw/openclaw/pull/105997)
- Serialize SQLite maintenance with Gateway ownership [#106210](https://github.com/openclaw/openclaw/pull/106210)
- Prevent legacy migration residue from blocking gateway startup [#107002](https://github.com/openclaw/openclaw/pull/107002)
- Migrate dormant older session databases before startup compaction [#107803](https://github.com/openclaw/openclaw/pull/107803)
- Preserve transcripts until session eviction is durable [#108378](https://github.com/openclaw/openclaw/pull/108378)
- Harden SQLite upgrades and concurrent storage access [#108663](https://github.com/openclaw/openclaw/pull/108663)
- Prevent dev-channel state backups from hanging [#109090](https://github.com/openclaw/openclaw/pull/109090)
- Preserve transcripts when provider configs omit model lists [#109252](https://github.com/openclaw/openclaw/pull/109252)
- Harden long-session compaction and agent-loop turn handling [#109709](https://github.com/openclaw/openclaw/pull/109709)
- Honor configured session-entry limits during writes [#110241](https://github.com/openclaw/openclaw/pull/110241)
- Block incompatible database downgrades and move full checks off the hot path [#110271](https://github.com/openclaw/openclaw/pull/110271)
- Preserve database quarantines when the primary database is damaged [#110453](https://github.com/openclaw/openclaw/pull/110453)
- Archive full transcripts before manual compaction [#111122](https://github.com/openclaw/openclaw/pull/111122)
- Make session lineage durable and auditable [#111861](https://github.com/openclaw/openclaw/pull/111861)
- Stop SQLite maintenance before mutating hard-linked sidecars [#112224](https://github.com/openclaw/openclaw/pull/112224)
- Preserve transcript cursors across session resets [#112988](https://github.com/openclaw/openclaw/pull/112988)
- Preserve SQLite state across maintenance races [#113216](https://github.com/openclaw/openclaw/pull/113216)
- Publish backup archives atomically and durably [#113302](https://github.com/openclaw/openclaw/pull/113302)
- Support deep Windows SQLite state paths [#113336](https://github.com/openclaw/openclaw/pull/113336)
- Make SQLite snapshot publication crash-recoverable [#113367](https://github.com/openclaw/openclaw/pull/113367)
- Repair physically corrupted canonical SQLite indexes [#113382](https://github.com/openclaw/openclaw/pull/113382)
- Keep SQLite snapshot WAL growth bounded during active writes [#113385](https://github.com/openclaw/openclaw/pull/113385)
- Make filesystem publication crash-durable [#113453](https://github.com/openclaw/openclaw/pull/113453)
- Prevent stale SQLite verification from quarantining replacements [#113459](https://github.com/openclaw/openclaw/pull/113459)
- Keep invalid SQLite schema repair atomic [#113592](https://github.com/openclaw/openclaw/pull/113592)
- Recover complete SQLite backups after interrupted commit [#113607](https://github.com/openclaw/openclaw/pull/113607)
- Keep SQLite snapshots progressing during active writes [#113708](https://github.com/openclaw/openclaw/pull/113708)
- Speed up session lists on large SQLite stores [#113959](https://github.com/openclaw/openclaw/pull/113959)
- Make the auto-compaction enable setting valid and effective [#114118](https://github.com/openclaw/openclaw/pull/114118)
- Recover repaired shared-state databases without restarting the Gateway [#114278](https://github.com/openclaw/openclaw/pull/114278)
- Keep session reads and transcript history consistent [#114369](https://github.com/openclaw/openclaw/pull/114369)
- Correct compaction estimates for CJK text [#114386](https://github.com/openclaw/openclaw/pull/114386)
- Preserve pruned session history when compaction summarization fails [#114696](https://github.com/openclaw/openclaw/pull/114696)
- Keep CJK tool results within context budgets [#114755](https://github.com/openclaw/openclaw/pull/114755)
- Keep generated images visible after agent turns [#115255](https://github.com/openclaw/openclaw/pull/115255)
- Prevent Gateway OOM from bloated usage rollups [#115347](https://github.com/openclaw/openclaw/pull/115347)
- Prevent duplicate persisted user turns and speed repeated agent sessions [#115474](https://github.com/openclaw/openclaw/pull/115474)
- Keep concurrent session writes on one reachable transcript branch [#115658](https://github.com/openclaw/openclaw/pull/115658)
- Preserve messages sent with session reset commands [#116195](https://github.com/openclaw/openclaw/pull/116195)
- Keep reply text in transcripts when media is attached [#116225](https://github.com/openclaw/openclaw/pull/116225)
- Keep conversation resets durable when replacement setup fails [#116247](https://github.com/openclaw/openclaw/pull/116247)
- Keep tool calls paired after a mid-turn abort [#116642](https://github.com/openclaw/openclaw/pull/116642)
- Preserve tool outcomes and bounded diagnostics through compaction [#116895](https://github.com/openclaw/openclaw/pull/116895)
- Repair additive agent database schema during updates [#116980](https://github.com/openclaw/openclaw/pull/116980)
- Compact SQLite sessions after newly appended content [#117076](https://github.com/openclaw/openclaw/pull/117076)
- Restore first-run Gateway readiness on fresh state [#117257](https://github.com/openclaw/openclaw/pull/117257)
- Preserve accepted prompts across Gateway restarts [#117260](https://github.com/openclaw/openclaw/pull/117260)
- Preserve live session rows during startup migration [#117272](https://github.com/openclaw/openclaw/pull/117272)
- Recover delivered replies after transcript write failures [#117845](https://github.com/openclaw/openclaw/pull/117845)
- Protect chat-history attachments from generic TTL cleanup [#119127](https://github.com/openclaw/openclaw/pull/119127)
- Retry unusable automatic compaction summaries [#119137](https://github.com/openclaw/openclaw/pull/119137)
- Prevent zero disk budgets from deleting session history [#119422](https://github.com/openclaw/openclaw/pull/119422)
- Persist fresh SQLite sessions before the first message [#119473](https://github.com/openclaw/openclaw/pull/119473)
- Archive cron-run transcripts before task maintenance deletes them [#119511](https://github.com/openclaw/openclaw/pull/119511)
- Allow backups while the gateway is running [#119782](https://github.com/openclaw/openclaw/pull/119782)
- Prevent zero high-water targets from clearing session history [#119909](https://github.com/openclaw/openclaw/pull/119909)
- Recover Codex sessions during required preflight compaction [#120197](https://github.com/openclaw/openclaw/pull/120197)
- Preserve user-created configuration backups [#120298](https://github.com/openclaw/openclaw/pull/120298)
- Stop completed sessions from staying marked active [#120424](https://github.com/openclaw/openclaw/pull/120424)
- Older agent databases upgrade without losing session visibility [#120437](https://github.com/openclaw/openclaw/pull/120437)
- Fence transcript writes to the admitted session run [#121003](https://github.com/openclaw/openclaw/pull/121003)
- Let replies proceed after transcript projection repair [#121025](https://github.com/openclaw/openclaw/pull/121025)
- Preserve real tool results across session resets [#121028](https://github.com/openclaw/openclaw/pull/121028)
- Protect externally supervised shared state across releases [#121069](https://github.com/openclaw/openclaw/pull/121069)
- Preserve Gateway rollback across compatible database columns [#121075](https://github.com/openclaw/openclaw/pull/121075)
- Bind session archive and restore to the listed conversation [#121169](https://github.com/openclaw/openclaw/pull/121169)
- Preserve durable transcript ownership [#122729](https://github.com/openclaw/openclaw/pull/122729)
- Preserve fixed-store ownership during multi-agent migration [#123235](https://github.com/openclaw/openclaw/pull/123235)
- Keep long sessions recoverable through repeated context overflows [#123484](https://github.com/openclaw/openclaw/pull/123484)
- Preserve readable transcripts and archive cleanup deletions safely [#123495](https://github.com/openclaw/openclaw/pull/123495)
- Refresh Codex session meters after compaction [#123640](https://github.com/openclaw/openclaw/pull/123640)
- Preserve orphaned SQLite recovery sidecars safely [#123680](https://github.com/openclaw/openclaw/pull/123680)
- Fork active sessions from the last completed reply [#123718](https://github.com/openclaw/openclaw/pull/123718)
- Preserve generated compaction summaries under context overflow [#123827](https://github.com/openclaw/openclaw/pull/123827)
- Keep session catalogs bound to the right agent and Codex home [#123899](https://github.com/openclaw/openclaw/pull/123899)
- Make `/new` clear discarded transcript bytes from the context fuse [#124126](https://github.com/openclaw/openclaw/pull/124126)
- Let older state databases finish STRICT migration [#124282](https://github.com/openclaw/openclaw/pull/124282)
- Keep session listings responsive with many configured agents [#124453](https://github.com/openclaw/openclaw/pull/124453)
- Preserve readable session stores when a configured sibling is missing [#124617](https://github.com/openclaw/openclaw/pull/124617)
- Keep copied state directories self-contained [#124728](https://github.com/openclaw/openclaw/pull/124728)
- Preserve workspace instructions for queued turns after compaction [#124850](https://github.com/openclaw/openclaw/pull/124850)
- Make session compaction failures visible and recoverable [#125302](https://github.com/openclaw/openclaw/pull/125302)
- Repair stable state before Gateway startup [#125483](https://github.com/openclaw/openclaw/pull/125483)
- Recover final replies after native Codex compaction fails [#125895](https://github.com/openclaw/openclaw/pull/125895)
- Preserve generated media previews through durable recovery [#126261](https://github.com/openclaw/openclaw/pull/126261)
- Default embedded compaction to low reasoning [#126421](https://github.com/openclaw/openclaw/pull/126421)
- Stop persisting runtime-only skill catalogs in sessions [#126931](https://github.com/openclaw/openclaw/pull/126931)
- fix(sessions): preserve ownership across lifecycle and maintenance [#127344](https://github.com/openclaw/openclaw/pull/127344)
- fix: explicit session resets clear prior context [#127530](https://github.com/openclaw/openclaw/pull/127530)
- fix(agents): preserve real user turns during compaction [#127563](https://github.com/openclaw/openclaw/pull/127563)
- fix(sqlite): isolate read-only snapshot preparation to stop WAL lock drops [#127855](https://github.com/openclaw/openclaw/pull/127855)
- fix(codex): reclaim binding capacity after session deletion [#128366](https://github.com/openclaw/openclaw/pull/128366)
- fix(sessions): bound active transcript hydration [#129343](https://github.com/openclaw/openclaw/pull/129343)
- fix(compaction): summarize the prepared window and always restore audited identifiers [#129423](https://github.com/openclaw/openclaw/pull/129423)
- fix(agents): direct commands skip proactive compaction [#130863](https://github.com/openclaw/openclaw/pull/130863)
- Stop repeated compaction fallbacks while preserving session history [#86900](https://github.com/openclaw/openclaw/pull/86900)
- Keep historical delivery receipts out of model prompts [#99504](https://github.com/openclaw/openclaw/pull/99504)
- Preserve fresh tool output under context pressure [#99756](https://github.com/openclaw/openclaw/pull/99756)
- Restore SQLite terminal-session freshness checks [2f94650](https://github.com/openclaw/openclaw/commit/2f94650)
- fix(sessions): search visible categories across clients (#118912) [43ffe41](https://github.com/openclaw/openclaw/commit/43ffe41)
- Keep conversation routing consistent when SQLite fails [#101023](https://github.com/openclaw/openclaw/pull/101023)
- Keep compaction boundaries reachable in paginated session history [#104250](https://github.com/openclaw/openclaw/pull/104250)
- Prevent large legacy session migrations from stalling [#104737](https://github.com/openclaw/openclaw/pull/104737)
- Restore history and usage reads for compressed transcript archives [#104795](https://github.com/openclaw/openclaw/pull/104795)
- Refuse backup and compaction from corrupt SQLite indexes [#104938](https://github.com/openclaw/openclaw/pull/104938)
- Restore byte-based auto-compaction for SQLite sessions [#104940](https://github.com/openclaw/openclaw/pull/104940)
- Validate shared SQLite state before OpenClaw mutates it [#104952](https://github.com/openclaw/openclaw/pull/104952)
- Reject corrupt agent state before startup changes [#105179](https://github.com/openclaw/openclaw/pull/105179)
- Reject orphaned SQLite state before mutation or backup [#105222](https://github.com/openclaw/openclaw/pull/105222)
- Remove transcript search data with deleted sessions [#105249](https://github.com/openclaw/openclaw/pull/105249)
- Repair drifted SQLite unique-index definitions safely [#105260](https://github.com/openclaw/openclaw/pull/105260)
- Canonicalize macOS session-migration target aliases [#105390](https://github.com/openclaw/openclaw/pull/105390)
- Keep session search fast as transcript history grows [#105585](https://github.com/openclaw/openclaw/pull/105585)
- Reject unsafe SQLite schema drift during maintenance [#105767](https://github.com/openclaw/openclaw/pull/105767)
- Surface transcript filesystem errors instead of empty history [#106412](https://github.com/openclaw/openclaw/pull/106412)
- Prevent session error handlers from leaving rejected tasks [#106951](https://github.com/openclaw/openclaw/pull/106951)
- Exclude migration archives from session disk limits [#107238](https://github.com/openclaw/openclaw/pull/107238)
- Notify session watchers when upstream sessions disappear [#107356](https://github.com/openclaw/openclaw/pull/107356)
- Allow SQLite compaction with memory path search [#107809](https://github.com/openclaw/openclaw/pull/107809)
- Preserve CLI session history during transcript shrink races [#108072](https://github.com/openclaw/openclaw/pull/108072)
- Continuation sessions keep lightweight bootstrap across short file reads [#108253](https://github.com/openclaw/openclaw/pull/108253)
- Complete session tail reads on network filesystems [#108655](https://github.com/openclaw/openclaw/pull/108655)
- Keep session previews complete across short file reads [#108941](https://github.com/openclaw/openclaw/pull/108941)
- Bound SQLite mount checks during database startup [#109432](https://github.com/openclaw/openclaw/pull/109432)
- Persist failed bound ACP turns in session transcripts [#109683](https://github.com/openclaw/openclaw/pull/109683)
- Reject invalid session-history limits with HTTP 400 [#109743](https://github.com/openclaw/openclaw/pull/109743)
- Stop compaction from duplicating prior summaries [#109828](https://github.com/openclaw/openclaw/pull/109828)
- Bound workspace bootstrap and compaction reads [#109945](https://github.com/openclaw/openclaw/pull/109945)
- Stop cancelled compaction retries promptly [#110114](https://github.com/openclaw/openclaw/pull/110114)
- Stop Windows session-archive retry stalls [#110191](https://github.com/openclaw/openclaw/pull/110191)
- Preserve delivered partial replies after ACP cancellation [#110300](https://github.com/openclaw/openclaw/pull/110300)
- Preserve active turns during session compaction [#110389](https://github.com/openclaw/openclaw/pull/110389)
- Make managed-image state migration SQLite-portable [#111167](https://github.com/openclaw/openclaw/pull/111167)
- Let session migration skip invalid legacy cron stubs [#111168](https://github.com/openclaw/openclaw/pull/111168)
- Bound per-agent SQLite handles for large fleets [#111411](https://github.com/openclaw/openclaw/pull/111411)
- Preserve transcript cursors across normal embedded turns [#111949](https://github.com/openclaw/openclaw/pull/111949)
- Keep the Gateway responsive during transcript archiving [#112424](https://github.com/openclaw/openclaw/pull/112424)
- Preserve large inode identity during session migration [#112478](https://github.com/openclaw/openclaw/pull/112478)
- Protect active primary sessions from maintenance eviction [#112640](https://github.com/openclaw/openclaw/pull/112640)
- Restore v13 agent-database upgrades on SQLite 3.51 [#113151](https://github.com/openclaw/openclaw/pull/113151)
- Support long Windows SQLite snapshot paths [#113228](https://github.com/openclaw/openclaw/pull/113228)
- Restore all canonical SQLite uniqueness constraints [#113261](https://github.com/openclaw/openclaw/pull/113261)
- Reject invalid canonical SQLite backups [#113287](https://github.com/openclaw/openclaw/pull/113287)
- Verify SQLite backups and snapshots under long Windows paths [#113313](https://github.com/openclaw/openclaw/pull/113313)
- Repair canonical SQLite indexes before use [#113390](https://github.com/openclaw/openclaw/pull/113390)
- Enforce one SQLite connection boundary [#113418](https://github.com/openclaw/openclaw/pull/113418)
- Fail closed on SQLite schema loss during upgrades [#113473](https://github.com/openclaw/openclaw/pull/113473)
- Recover SQLite snapshots after killed rollback writers [#113580](https://github.com/openclaw/openclaw/pull/113580)
- Keep Codex sessions running when automatic compaction lacks host auth [#114001](https://github.com/openclaw/openclaw/pull/114001)
- Protect live SQLite WAL files during integrity checks [#114016](https://github.com/openclaw/openclaw/pull/114016)
- Show native history when adopting Pi and OpenCode sessions [#114040](https://github.com/openclaw/openclaw/pull/114040)
- Bound trajectory runtime-event storage [#114250](https://github.com/openclaw/openclaw/pull/114250)
- Preserve refreshed session usage and resume cron cleanup [#114539](https://github.com/openclaw/openclaw/pull/114539)
- Preserve active heartbeat sessions through canonical SQLite lifecycle handling [#114936](https://github.com/openclaw/openclaw/pull/114936)
- Run startup and Doctor state migrations in one ordered plan [#114938](https://github.com/openclaw/openclaw/pull/114938)
- Keep overflow-recovery transcript history append-only [#115310](https://github.com/openclaw/openclaw/pull/115310)
- Make Doctor refuse newer cron database schemas safely [#115447](https://github.com/openclaw/openclaw/pull/115447)
- Preserve transcripts when compaction summarization fails [#115500](https://github.com/openclaw/openclaw/pull/115500)
- Enforce the host transcript byte limit for Codex sessions [#115514](https://github.com/openclaw/openclaw/pull/115514)
- Keep Doctor running when an agent database is unusable [#115570](https://github.com/openclaw/openclaw/pull/115570)
- Bound memory used by live session history streams [#115599](https://github.com/openclaw/openclaw/pull/115599)
- Stop Codex OAuth compaction from falling back to API-key auth [#115666](https://github.com/openclaw/openclaw/pull/115666)
- Release closed SQLite session caches [#115794](https://github.com/openclaw/openclaw/pull/115794)
- Keep migrated sessions usable after restart [#116077](https://github.com/openclaw/openclaw/pull/116077)
- Preserve prompts in oversized trajectory events [#116220](https://github.com/openclaw/openclaw/pull/116220)
- Preserve caller-replaced SQLite targets on Windows [#116284](https://github.com/openclaw/openclaw/pull/116284)
- Honor HTTP Accept negotiation for session history [#116535](https://github.com/openclaw/openclaw/pull/116535)
- Let gateways recover from conflicting legacy runtime state [#116558](https://github.com/openclaw/openclaw/pull/116558)
- Resolve explicit main-session aliases correctly [#116636](https://github.com/openclaw/openclaw/pull/116636)
- Ignore stale upstream activity after session changes [#116864](https://github.com/openclaw/openclaw/pull/116864)
- Preserve persisted user turns after session restart [#116924](https://github.com/openclaw/openclaw/pull/116924)
- Preserve complete tool-call groups during oversized compaction [#116992](https://github.com/openclaw/openclaw/pull/116992)
- Restore continuation-skip behavior for SQLite-backed agent sessions [#117082](https://github.com/openclaw/openclaw/pull/117082)
- Preserve reconnected drafts across Gateway restarts [#117310](https://github.com/openclaw/openclaw/pull/117310)
- Make archived transcript fallback consistent [#117343](https://github.com/openclaw/openclaw/pull/117343)
- Preserve durable SQLite user turns during session reconciliation [#117393](https://github.com/openclaw/openclaw/pull/117393)
- Apply mixed chat settings in one session transaction [#117542](https://github.com/openclaw/openclaw/pull/117542)
- Surface transcript archive retention failures [#117761](https://github.com/openclaw/openclaw/pull/117761)
- Preserve conversation text when large images are omitted [#117792](https://github.com/openclaw/openclaw/pull/117792)
- Preserve queued messages during `/compact` [#117840](https://github.com/openclaw/openclaw/pull/117840)
- Bound compaction identifier scans on long tokens [#118422](https://github.com/openclaw/openclaw/pull/118422)
- Restore usage details for SQLite sessions [#118918](https://github.com/openclaw/openclaw/pull/118918)
- Preserve reset guidance for dynamic models [#119179](https://github.com/openclaw/openclaw/pull/119179)
- Reject transcript writes when a session rotates mid-append [#119221](https://github.com/openclaw/openclaw/pull/119221)
- Keep admitted user turns attached during retries [#119307](https://github.com/openclaw/openclaw/pull/119307)
- Keep session writes moving during transcript archival [#119460](https://github.com/openclaw/openclaw/pull/119460)
- Timestamp recovered Claude CLI history [#119528](https://github.com/openclaw/openclaw/pull/119528)
- Session lists refresh after external identity changes [#120203](https://github.com/openclaw/openclaw/pull/120203)
- Preserve token usage after failed compaction [#120264](https://github.com/openclaw/openclaw/pull/120264)
- Preserve context provenance across retries [#120509](https://github.com/openclaw/openclaw/pull/120509)
- fix(infra): detect virtiofs and 9p filesystems to prevent WAL corruption [#120597](https://github.com/openclaw/openclaw/pull/120597)
- Replace session write leases with durable writer claims [#121113](https://github.com/openclaw/openclaw/pull/121113)
- Keep reset-session tool results with retained calls [#121146](https://github.com/openclaw/openclaw/pull/121146)
- Prevent concurrent session changes from overwriting transcripts [#121284](https://github.com/openclaw/openclaw/pull/121284)
- Avoid full session scans after transcript writes [#121342](https://github.com/openclaw/openclaw/pull/121342)
- Avoid whole-store work for single-session updates [#121349](https://github.com/openclaw/openclaw/pull/121349)
- Align automation filters and avoid false SQLite corruption [#121429](https://github.com/openclaw/openclaw/pull/121429)
- Prevent false SQLite corruption during concurrent first startup [#121526](https://github.com/openclaw/openclaw/pull/121526)
- Improve session reliability during rapid workflows [#121680](https://github.com/openclaw/openclaw/pull/121680)
- Preserve mixed attachment order in chat history [#121980](https://github.com/openclaw/openclaw/pull/121980)
- Preserve transcripts when compaction validation fails [#122824](https://github.com/openclaw/openclaw/pull/122824)
- Keep internal recovery prompts out of transcripts [#122908](https://github.com/openclaw/openclaw/pull/122908)
- Repair upgrades from the shipped commitments schema [#122945](https://github.com/openclaw/openclaw/pull/122945)
- Preserve pinned conversations during session maintenance [#122990](https://github.com/openclaw/openclaw/pull/122990)
- Keep protected sessions outside the eviction quota [#123014](https://github.com/openclaw/openclaw/pull/123014)
- Count protected sessions toward the total retention cap [#123081](https://github.com/openclaw/openclaw/pull/123081)
- Preserve native CLI sessions through compaction [#123466](https://github.com/openclaw/openclaw/pull/123466)
- Preserve file context across conversation compaction [#123467](https://github.com/openclaw/openclaw/pull/123467)
- Clear stale CLI history after manual compaction [#123486](https://github.com/openclaw/openclaw/pull/123486)
- Preserve the shared SQLite WAL during auxiliary shutdown [#123777](https://github.com/openclaw/openclaw/pull/123777)
- Let compaction accept slash-delimited prose [#123832](https://github.com/openclaw/openclaw/pull/123832)
- Honor explicit legacy session owners in per-agent stores [#123887](https://github.com/openclaw/openclaw/pull/123887)
- Continue timeout recovery from the compacted transcript [#124000](https://github.com/openclaw/openclaw/pull/124000)
- Keep older session history reachable past hidden tails [#124120](https://github.com/openclaw/openclaw/pull/124120)
- Avoid repeated session-root scans in configured Control UI lists [#124384](https://github.com/openclaw/openclaw/pull/124384)
- Cap file lists in compaction summaries [#124577](https://github.com/openclaw/openclaw/pull/124577)
- Preserve running-task transcripts when cron data is unreadable [#124718](https://github.com/openclaw/openclaw/pull/124718)
- Recover retired multi-agent session stores during upgrade [#124846](https://github.com/openclaw/openclaw/pull/124846)
- fix(matrix): gateway fails to start when legacy credentials differ [#124893](https://github.com/openclaw/openclaw/pull/124893)
- Preserve default-agent ownership during session migration [#124928](https://github.com/openclaw/openclaw/pull/124928)
- Preserve Unicode sessions during SQLite upgrades [#124951](https://github.com/openclaw/openclaw/pull/124951)
- Restore legacy persisted-data validation compatibility [#125031](https://github.com/openclaw/openclaw/pull/125031)
- Stop empty legacy agent databases from blocking startup [#125172](https://github.com/openclaw/openclaw/pull/125172)
- Stop manual compaction backup leaks [#125183](https://github.com/openclaw/openclaw/pull/125183)
- fix(compaction): re-compact when last entry is a compaction record but context still exceeds window [#125210](https://github.com/openclaw/openclaw/pull/125210)
- Make session deletion and cleanup results accurate [#125217](https://github.com/openclaw/openclaw/pull/125217)
- Migrate legacy state to the configured system agent [#125266](https://github.com/openclaw/openclaw/pull/125266)
- Complete large session migrations promptly [#125300](https://github.com/openclaw/openclaw/pull/125300)
- Prevent Doctor timeouts on large SQLite migrations [#125361](https://github.com/openclaw/openclaw/pull/125361)
- Preserve the selected session folder in transcripts [#125484](https://github.com/openclaw/openclaw/pull/125484)
- Prevent Doctor stalls on large session migrations [#125510](https://github.com/openclaw/openclaw/pull/125510)
- Clean up orphaned media attachments safely [#125560](https://github.com/openclaw/openclaw/pull/125560)
- Warn agents when session search results are still indexing [#125582](https://github.com/openclaw/openclaw/pull/125582)
- Preserve structured tool results in Codex transcripts [#125610](https://github.com/openclaw/openclaw/pull/125610)
- Allow forced-stopped sessions to archive [#125614](https://github.com/openclaw/openclaw/pull/125614)
- fix(compaction): ignore decimal identifier fragments [#126089](https://github.com/openclaw/openclaw/pull/126089)
- Make compaction and branch summaries honor idle timeouts [#126159](https://github.com/openclaw/openclaw/pull/126159)
- fix(gateway): keep history active through terminal persistence [#126235](https://github.com/openclaw/openclaw/pull/126235)
- Restore upgrades from 2026.7.2-beta.4 agent state [#126354](https://github.com/openclaw/openclaw/pull/126354)
- Avoid retaining the full session store during child lookup [#126770](https://github.com/openclaw/openclaw/pull/126770)
- Reject stale session replacements after concurrent changes [#127027](https://github.com/openclaw/openclaw/pull/127027)
- fix(sessions): cleanup large backlogs without OOM [#127105](https://github.com/openclaw/openclaw/pull/127105)
- fix(sessions): preserve sessions when age pruning is disabled [#127277](https://github.com/openclaw/openclaw/pull/127277)
- fix(sessions): preserve assigned owners through Doctor and startup repairs [#127706](https://github.com/openclaw/openclaw/pull/127706)
- fix(sessions): stop /reset from hiding a message accepted at the same time [#127842](https://github.com/openclaw/openclaw/pull/127842)
- fix(sessions): preserve artifacts during canonical repair [#128317](https://github.com/openclaw/openclaw/pull/128317)
- fix(sessions): keep admin events out of model context [AI-assisted] [#128346](https://github.com/openclaw/openclaw/pull/128346)
- fix(sessions): delete progress cards with session artifacts [#128451](https://github.com/openclaw/openclaw/pull/128451)
- perf(sessions): avoid database maintenance during reads [#128631](https://github.com/openclaw/openclaw/pull/128631)
- fix(sqlite): stage read-only snapshots in private user cache [#128635](https://github.com/openclaw/openclaw/pull/128635)
- fix(compaction): retain audited facts when summaries exceed cap [#128968](https://github.com/openclaw/openclaw/pull/128968)
- fix: resume after settled-tool context overflow [#128970](https://github.com/openclaw/openclaw/pull/128970)
- perf(sessions): defer transcript index rebuilds to the reconcile worker [#129182](https://github.com/openclaw/openclaw/pull/129182)
- fix(sqlite): index agent session lookups [#129569](https://github.com/openclaw/openclaw/pull/129569)
- fix(compaction): protect manual commands from stale recovery [#129581](https://github.com/openclaw/openclaw/pull/129581)
- fix(sessions): release reconcile lease before terminal state (#130161) [#130185](https://github.com/openclaw/openclaw/pull/130185)
- fix(sessions): select the transcript header by type in bounded reads [#130342](https://github.com/openclaw/openclaw/pull/130342)
- fix(compaction): scope the transcript byte fuse to the latest compaction window [#130487](https://github.com/openclaw/openclaw/pull/130487)
- fix(agents): honor preflight compaction budget [#130562](https://github.com/openclaw/openclaw/pull/130562)
- fix(compaction): show the summarizer the audited latest ask [#130620](https://github.com/openclaw/openclaw/pull/130620)
- fix(sqlite): safely discard retired commitments state [#130629](https://github.com/openclaw/openclaw/pull/130629)
- fix(gateway): close the history stream startup event gap [#130633](https://github.com/openclaw/openclaw/pull/130633)
- fix(sessions): re-fetch agent-db handles at synchronous section entry [#130797](https://github.com/openclaw/openclaw/pull/130797)
- Preserve formatting across non-streaming reply chunks [#56145](https://github.com/openclaw/openclaw/pull/56145)
- Keep queued turns from steering replies away from the latest prompt [#90759](https://github.com/openclaw/openclaw/pull/90759)
- Make manual compaction stoppable [#90821](https://github.com/openclaw/openclaw/pull/90821)
- Preserve whole characters in post-compaction context [#102515](https://github.com/openclaw/openclaw/pull/102515)
- Cap oversized Gateway history limits correctly [#104263](https://github.com/openclaw/openclaw/pull/104263)
- Preserve Unicode in persisted tool details [#104540](https://github.com/openclaw/openclaw/pull/104540)
- Reject invalid Claude session pagination cursors [#104967](https://github.com/openclaw/openclaw/pull/104967)
- Reject incomplete SQLite schemas before maintenance [#105583](https://github.com/openclaw/openclaw/pull/105583)
- Reject unsafe SQLite bigint conversions [#106081](https://github.com/openclaw/openclaw/pull/106081)
- Reject malformed session pagination cursors [#107895](https://github.com/openclaw/openclaw/pull/107895)
- Allow disabling the session disk budget in configuration [#108046](https://github.com/openclaw/openclaw/pull/108046)
- Preserve session-tail events across short reads [#108127](https://github.com/openclaw/openclaw/pull/108127)
- Preserve legacy session start times across short reads [#109205](https://github.com/openclaw/openclaw/pull/109205)
- Clean trajectory runtime files after short reads [#109206](https://github.com/openclaw/openclaw/pull/109206)
- Repair fractional restart handoffs during doctor upgrades [#110231](https://github.com/openclaw/openclaw/pull/110231)
- Preserve timestamps when importing malformed Claude history [#110536](https://github.com/openclaw/openclaw/pull/110536)
- Harden Doctor legacy session-store reads [#110772](https://github.com/openclaw/openclaw/pull/110772)
- Preserve conversation anchors across repeated compaction [#112755](https://github.com/openclaw/openclaw/pull/112755)
- Bound retained SQLite WAL files after checkpoint recovery [#112951](https://github.com/openclaw/openclaw/pull/112951)
- Repair transcripts when plugins block tool results [#113697](https://github.com/openclaw/openclaw/pull/113697)
- Let agents archive their own sessions after a turn [#114522](https://github.com/openclaw/openclaw/pull/114522)
- Make the transcript byte limit a single compaction opt-in [#115206](https://github.com/openclaw/openclaw/pull/115206)
- Stop false slow-lock warnings for zero-timeout SQLite commits [#115990](https://github.com/openclaw/openclaw/pull/115990)
- Honor cancellation while waiting for session file locks [#117446](https://github.com/openclaw/openclaw/pull/117446)
- Warn when live transcript broadcasts fail [#117539](https://github.com/openclaw/openclaw/pull/117539)
- Avoid unnecessary compaction after mid-turn precheck [#117963](https://github.com/openclaw/openclaw/pull/117963)
- Wait for SQLite locks during startup checkpoints [#118022](https://github.com/openclaw/openclaw/pull/118022)
- Reject invalid session-history cursors [#119443](https://github.com/openclaw/openclaw/pull/119443)
- Recover compaction from sparse assistant history [#122159](https://github.com/openclaw/openclaw/pull/122159)
- Repair mis-stamped v17 agent databases [#122171](https://github.com/openclaw/openclaw/pull/122171)
- Resolve per-agent transcripts for batched session titles [#122338](https://github.com/openclaw/openclaw/pull/122338)
- Keep recovered media in the owning agent transcript [#124111](https://github.com/openclaw/openclaw/pull/124111)
- Keep projected session-history rows reachable across pages [#124145](https://github.com/openclaw/openclaw/pull/124145)
- Report self-archive success before ending the active turn [#124896](https://github.com/openclaw/openclaw/pull/124896)
- Report concurrent session changes during deletion [#125188](https://github.com/openclaw/openclaw/pull/125188)
- fix(gateway): honor requested session preview length [#125201](https://github.com/openclaw/openclaw/pull/125201)
- Surface transcript read failures during compaction [#125741](https://github.com/openclaw/openclaw/pull/125741)
- Clean up orphaned media after sessionless agent runs [#125938](https://github.com/openclaw/openclaw/pull/125938)
- fix(gateway): record display-cap truncation structurally on projected chat messages [#126342](https://github.com/openclaw/openclaw/pull/126342)
- fix(sessions): history pagination skips projected messages or stops advancing [#129099](https://github.com/openclaw/openclaw/pull/129099)
- Reject blank session-history keys at the Gateway route [#85261](https://github.com/openclaw/openclaw/pull/85261)
- Surface session-delivery retry-state write failures [#97024](https://github.com/openclaw/openclaw/pull/97024)

</details>

</Accordion>

<Accordion title="Agent tools and code execution">

Code Mode can keep an eligible task moving when it fails before taking action or while discovering tools and skills, and nested tool calls now finish or cancel cleanly instead of hanging. Once a write may have happened, recovery is limited to checking what changed rather than replaying an uncertain action, while cancellation, policy denial, and other final outcomes still stop the task.

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

**Improvements**

- Require integer limits for the session find tool [#105931](https://github.com/openclaw/openclaw/pull/105931)

**Bug fixes**

- Enable CLI-backed agents to run commands on connected nodes [#103936](https://github.com/openclaw/openclaw/pull/103936)
- Make node-hosted skills readable and runnable on their publishing node [#104832](https://github.com/openclaw/openclaw/pull/104832)
- Let vision models inspect discovered images directly [#107311](https://github.com/openclaw/openclaw/pull/107311)
- Preserve ignored managed-worktree state during automatic cleanup [#108401](https://github.com/openclaw/openclaw/pull/108401)
- Stop image and PDF work when an agent run is cancelled [#112644](https://github.com/openclaw/openclaw/pull/112644)
- Preserve prompt caches across tool discovery [#114572](https://github.com/openclaw/openclaw/pull/114572)
- Code Mode accepts safe templates and regular expressions [#114651](https://github.com/openclaw/openclaw/pull/114651)
- Keep required agent tools visible under tool search [#114664](https://github.com/openclaw/openclaw/pull/114664)
- Preserve required Code Mode tools and secure suspended runs [#114778](https://github.com/openclaw/openclaw/pull/114778)
- Preserve concurrent Code Mode tool execution [#114884](https://github.com/openclaw/openclaw/pull/114884)
- Prevent apply_patch from overwriting existing files [#114911](https://github.com/openclaw/openclaw/pull/114911)
- Bound and speed up Code Mode worker lifecycles [#114945](https://github.com/openclaw/openclaw/pull/114945)
- Prevent silent corruption when editing non-UTF-8 files [#115088](https://github.com/openclaw/openclaw/pull/115088)
- Prevent node hangs and runaway local-model discovery [#115248](https://github.com/openclaw/openclaw/pull/115248)
- Prevent Code Mode resume loss and unbounded TypeScript preparation [#115314](https://github.com/openclaw/openclaw/pull/115314)
- Make Code Mode reliable across restarts and providers [#115379](https://github.com/openclaw/openclaw/pull/115379)
- Preserve original line endings during agent edits [#116011](https://github.com/openclaw/openclaw/pull/116011)
- Preserve unchanged file bytes during fuzzy apply_patch updates [#116128](https://github.com/openclaw/openclaw/pull/116128)
- Preserve untouched file bytes during fuzzy edits [#116509](https://github.com/openclaw/openclaw/pull/116509)
- Stop canceled media requests before paid generation starts [#117418](https://github.com/openclaw/openclaw/pull/117418)
- Protect registered worktrees from orphan cleanup [#119709](https://github.com/openclaw/openclaw/pull/119709)
- Explain when inbound documents cannot be read [#122025](https://github.com/openclaw/openclaw/pull/122025)
- Keep readable images when part of a batch fails [#122361](https://github.com/openclaw/openclaw/pull/122361)
- Prevent completed tools from replaying after idle timeouts [#122516](https://github.com/openclaw/openclaw/pull/122516)
- Keep Code Mode running when tool results are too large [#122924](https://github.com/openclaw/openclaw/pull/122924)
- Prevent overlapping end-of-file patches from deleting content [#124379](https://github.com/openclaw/openclaw/pull/124379)
- Refuse ambiguous apply-patch edits [#124470](https://github.com/openclaw/openclaw/pull/124470)
- Read oversized single-line files without shell tools [#126587](https://github.com/openclaw/openclaw/pull/126587)
- Stop system prompts from suggesting unavailable tools [#126792](https://github.com/openclaw/openclaw/pull/126792)
- fix: allow code mode repair after preflight rejection [#128054](https://github.com/openclaw/openclaw/pull/128054)
- fix: agents continue after Code Mode tool and JavaScript errors [#128088](https://github.com/openclaw/openclaw/pull/128088)
- Recover automatic browser routing and Discord voice participant context [2e0f6d5](https://github.com/openclaw/openclaw/commit/2e0f6d5)
- Stream large Codex sandbox file copies [#101511](https://github.com/openclaw/openclaw/pull/101511)
- Keep truncated tool results free of broken emoji [#102087](https://github.com/openclaw/openclaw/pull/102087)
- Distinguish Code Mode cancellations from timeouts [#102494](https://github.com/openclaw/openclaw/pull/102494)
- Restore allowlisted command execution on Mac nodes [#102536](https://github.com/openclaw/openclaw/pull/102536)
- Preserve Unicode across retained text boundaries [#102599](https://github.com/openclaw/openclaw/pull/102599)
- Accept matching repeated Content-Length headers [#102939](https://github.com/openclaw/openclaw/pull/102939)
- Preserve caller cancellation in timed fetches [#102951](https://github.com/openclaw/openclaw/pull/102951)
- Default timeout for stalled media response headers [#103209](https://github.com/openclaw/openclaw/pull/103209)
- Reject invalid xAI X Search handle filters before requests [#103393](https://github.com/openclaw/openclaw/pull/103393)
- Suppress false shell-failure warnings after recovered runs [#103593](https://github.com/openclaw/openclaw/pull/103593)
- Preserve coding tools for subagents spawned from native CLI harnesses [#103751](https://github.com/openclaw/openclaw/pull/103751)
- Find Feishu Drive files outside the first root page [#104190](https://github.com/openclaw/openclaw/pull/104190)
- Let Codex agents choose paired nodes for individual commands [#104198](https://github.com/openclaw/openclaw/pull/104198)
- Cancel SearXNG searches when the parent run stops [#104216](https://github.com/openclaw/openclaw/pull/104216)
- Return timed-out Android node commands promptly [#104225](https://github.com/openclaw/openclaw/pull/104225)
- Restore channel labels for agent-scoped sessions [#104274](https://github.com/openclaw/openclaw/pull/104274)
- Bound stalled remote media downloads and clean partial files [#104624](https://github.com/openclaw/openclaw/pull/104624)
- Bound tool-image payloads before base64 decoding [#105086](https://github.com/openclaw/openclaw/pull/105086)
- Reject invalid Parallel web-search result counts [#105108](https://github.com/openclaw/openclaw/pull/105108)
- Cancel Kimi web-search requests with the agent run [#105125](https://github.com/openclaw/openclaw/pull/105125)
- Typed executable lookup for remote nodes [#105182](https://github.com/openclaw/openclaw/pull/105182)
- Reject malformed camera media sizes [#105954](https://github.com/openclaw/openclaw/pull/105954)
- Decode the full HTML5 entity set in agent workflows [#105957](https://github.com/openclaw/openclaw/pull/105957)
- fix(agents): omitted image metadata reports inflated byte sizes [#106066](https://github.com/openclaw/openclaw/pull/106066)
- Restore Codex sandbox commands with file-URI paths [#107644](https://github.com/openclaw/openclaw/pull/107644)
- Clear tool-search catalogs after prep aborts [#108114](https://github.com/openclaw/openclaw/pull/108114)
- Clean up stale tool tracking when agent runs unsubscribe [#108403](https://github.com/openclaw/openclaw/pull/108403)
- Prevent stale tool results from proving current actions completed [#109259](https://github.com/openclaw/openclaw/pull/109259)
- Preserve agent-created filename case on Windows [#109823](https://github.com/openclaw/openclaw/pull/109823)
- Preserve tool output contracts in truncated Code Mode indexes [#110317](https://github.com/openclaw/openclaw/pull/110317)
- Preserve Code Mode's quick index around oversized tools [#110517](https://github.com/openclaw/openclaw/pull/110517)
- Stop aborted runs from hanging on stuck tool calls [#110704](https://github.com/openclaw/openclaw/pull/110704)
- Preserve stable network results when response cleanup fails [#111245](https://github.com/openclaw/openclaw/pull/111245)
- Restore Windows browser discovery for diff rendering [#111257](https://github.com/openclaw/openclaw/pull/111257)
- fix(network): guarded fetch callers can leave responses streaming [#111277](https://github.com/openclaw/openclaw/pull/111277)
- Stop Code Mode shell-command retry storms [#113070](https://github.com/openclaw/openclaw/pull/113070)
- Preserve and validate compact Tool Search arguments [#114461](https://github.com/openclaw/openclaw/pull/114461)
- Make hidden tool capabilities discoverable to agents [#114516](https://github.com/openclaw/openclaw/pull/114516)
- Keep core coding tools directly available with tool search [#114560](https://github.com/openclaw/openclaw/pull/114560)
- Preserve valid Code Mode methods and reject loader evasions [#114742](https://github.com/openclaw/openclaw/pull/114742)
- Tell agents which watched group sessions they can read [#114835](https://github.com/openclaw/openclaw/pull/114835)
- Keep search tool summaries readable [#114933](https://github.com/openclaw/openclaw/pull/114933)
- Improve node cancellation and local-model recovery [#114935](https://github.com/openclaw/openclaw/pull/114935)
- Save node screen captures with matching file formats [#115094](https://github.com/openclaw/openclaw/pull/115094)
- Deliver each Code Mode output block only once across waits [#115213](https://github.com/openclaw/openclaw/pull/115213)
- Cancel abandoned HTTP tool calls [#115550](https://github.com/openclaw/openclaw/pull/115550)
- Allow exact edits beside fuzzy near-duplicates [#115738](https://github.com/openclaw/openclaw/pull/115738)
- Stabilize atomic browser download staging [#115892](https://github.com/openclaw/openclaw/pull/115892)
- Preserve CRLF files when applying patches [#115943](https://github.com/openclaw/openclaw/pull/115943)
- Sandboxed replies can attach fetched files [#116400](https://github.com/openclaw/openclaw/pull/116400)
- Preserve truthful agent-tool outcomes and cancellation [#116916](https://github.com/openclaw/openclaw/pull/116916)
- fix(nodes): validate photo payloads before publishing captures [#116927](https://github.com/openclaw/openclaw/pull/116927)
- Make paired-node photo results visible and atomic [#116988](https://github.com/openclaw/openclaw/pull/116988)
- Honor Canvas action deadlines across nodes and Gateway transport [#117316](https://github.com/openclaw/openclaw/pull/117316)
- Resolve effective tools for fresh and sandboxed sessions [#117723](https://github.com/openclaw/openclaw/pull/117723)
- Verify delegated file writes before reporting success [#117938](https://github.com/openclaw/openclaw/pull/117938)
- Preserve existing node screen output when writes fail [#117973](https://github.com/openclaw/openclaw/pull/117973)
- Preserve failures from deferred MCP tools [#118363](https://github.com/openclaw/openclaw/pull/118363)
- fix(agents): write unrestricted host files in place instead of truncating first [#118470](https://github.com/openclaw/openclaw/pull/118470)
- Preserve complete xAI tool responses and citations [#118477](https://github.com/openclaw/openclaw/pull/118477)
- Surface failed image extraction for textless PDFs [#118629](https://github.com/openclaw/openclaw/pull/118629)
- fix(agents): node plugin tool calls report a generic client timeout [#118720](https://github.com/openclaw/openclaw/pull/118720)
- Stop canceled web searches across providers [#118895](https://github.com/openclaw/openclaw/pull/118895)
- Support symlinked remote sandbox workspaces and reliable macOS validation [#119110](https://github.com/openclaw/openclaw/pull/119110)
- Fix Tool Search calls from providers with dotted arguments [#119464](https://github.com/openclaw/openclaw/pull/119464)
- Make agent file reads nonblocking and explicit [#121508](https://github.com/openclaw/openclaw/pull/121508)
- Stage uppercase Windows file URLs for sandboxed agents [#121521](https://github.com/openclaw/openclaw/pull/121521)
- Enable suggested-task cards for Codex-harness sessions [#121568](https://github.com/openclaw/openclaw/pull/121568)
- Accept canonical file URLs across Windows media workflows [#121676](https://github.com/openclaw/openclaw/pull/121676)
- Let code-mode Codex models discover deferred tools [#121703](https://github.com/openclaw/openclaw/pull/121703)
- Restore OpenAI hosted search in Code Mode [#121812](https://github.com/openclaw/openclaw/pull/121812)
- Fall back to structured Tool Search under Electron [#122037](https://github.com/openclaw/openclaw/pull/122037)
- Preserve Code Mode skills under wildcard tool policies [#122057](https://github.com/openclaw/openclaw/pull/122057)
- Expand Windows backslash home paths in agent file tools [#122071](https://github.com/openclaw/openclaw/pull/122071)
- Unprocessed media attachments get clear model-visible outcomes [#122098](https://github.com/openclaw/openclaw/pull/122098)
- Prevent generated worktree names from reviving retired checkouts [#122393](https://github.com/openclaw/openclaw/pull/122393)
- Let sandboxed agents read staged document attachments [#122490](https://github.com/openclaw/openclaw/pull/122490)
- Restore inbound images for non-default CLI agent workspaces [#122684](https://github.com/openclaw/openclaw/pull/122684)
- Preserve session kinds in sessions_list [#122697](https://github.com/openclaw/openclaw/pull/122697)
- Keep canceled web-search results out of provider caches [#123951](https://github.com/openclaw/openclaw/pull/123951)
- Recover double-wrapped Tool Search calls [#124138](https://github.com/openclaw/openclaw/pull/124138)
- Restore native OpenAI web search in packaged runs [#124215](https://github.com/openclaw/openclaw/pull/124215)
- Cancel bundled MCP work when agent runs stop [#124425](https://github.com/openclaw/openclaw/pull/124425)
- Stop prompting models to use unavailable tools [#124716](https://github.com/openclaw/openclaw/pull/124716)
- Honor Codex node execution host selection [#124777](https://github.com/openclaw/openclaw/pull/124777)
- Fix clipped session selection and Code Mode timers [#124879](https://github.com/openclaw/openclaw/pull/124879)
- Restore media attachments for named embedded agents [#124957](https://github.com/openclaw/openclaw/pull/124957)
- Confirm when a failed tool action succeeds on retry [#125078](https://github.com/openclaw/openclaw/pull/125078)
- Report no-reply and unavailable tool outcomes [#125607](https://github.com/openclaw/openclaw/pull/125607)
- Preserve Copilot manifest-profile tool grants [#125875](https://github.com/openclaw/openclaw/pull/125875)
- Restore OpenClaw guidance to Copilot agent turns [#125997](https://github.com/openclaw/openclaw/pull/125997)
- Agents stop cleanly after terminal dynamic tools [#126208](https://github.com/openclaw/openclaw/pull/126208)
- Stop stale tool-failure warnings after successful replies [#126542](https://github.com/openclaw/openclaw/pull/126542)
- Run Code Mode when the unused exec alias is blank [#126599](https://github.com/openclaw/openclaw/pull/126599)
- Stop caching unfinished Kimi web searches as successful [#126765](https://github.com/openclaw/openclaw/pull/126765)
- Reject empty Perplexity answers and reuse equivalent searches [#126780](https://github.com/openclaw/openclaw/pull/126780)
- Preserve literal Unicode-space paths for workspace file changes [#126797](https://github.com/openclaw/openclaw/pull/126797)
- Reuse Gemini and Kimi caches for equivalent searches [#126798](https://github.com/openclaw/openclaw/pull/126798)
- fix(read): drop image payload for non-vision models [#127112](https://github.com/openclaw/openclaw/pull/127112)
- Stop recommending unavailable session tools [#127648](https://github.com/openclaw/openclaw/pull/127648)
- fix: Code Mode shell calls stall near yield deadline [#127759](https://github.com/openclaw/openclaw/pull/127759)
- fix(agents): include ctimeMs in workspace file cache identity [#127769](https://github.com/openclaw/openclaw/pull/127769)
- fix(code-mode): pending-call overflow no longer commits partial batches [#128030](https://github.com/openclaw/openclaw/pull/128030)
- fix: continue code mode with read-only recovery [#128071](https://github.com/openclaw/openclaw/pull/128071)
- fix: Code Mode exec approvals stop polling [#128355](https://github.com/openclaw/openclaw/pull/128355)
- fix(agents): settle nested code mode bridge calls [#128440](https://github.com/openclaw/openclaw/pull/128440)
- fix(agents): compact mid-turn overflow while code-mode work is still pending [#129792](https://github.com/openclaw/openclaw/pull/129792)
- refactor(web): use canonical provider contracts [#130334](https://github.com/openclaw/openclaw/pull/130334)
- fix(nodes): validate capture batches before publishing files [#130371](https://github.com/openclaw/openclaw/pull/130371)
- fix(code-mode): avoid repair mode for invalid nested calls [#130478](https://github.com/openclaw/openclaw/pull/130478)
- fix(media): record dispositions for dropped native-vision attachments [#130846](https://github.com/openclaw/openclaw/pull/130846)
- fix(codex): let collector waits finish their full timeout [#130939](https://github.com/openclaw/openclaw/pull/130939)
- fix(code-mode): continue tasks after discovery-only errors [#131079](https://github.com/openclaw/openclaw/pull/131079)
- fix(openai): restore automatic Code Mode for preferred models [#131139](https://github.com/openclaw/openclaw/pull/131139)
- Preserve successful Code Mode reply delivery [5775e2a](https://github.com/openclaw/openclaw/commit/5775e2a)
- Stop flagging exact-limit web responses as truncated [#102389](https://github.com/openclaw/openclaw/pull/102389)
- Keep truncated tool-result context valid around emoji [#102466](https://github.com/openclaw/openclaw/pull/102466)
- Preserve emoji boundaries in native hook display text [#102467](https://github.com/openclaw/openclaw/pull/102467)
- Reject invalid session read offsets [#102481](https://github.com/openclaw/openclaw/pull/102481)
- Preserve complete characters in truncated MCP metadata [#102500](https://github.com/openclaw/openclaw/pull/102500)
- Keep Codex timeout diagnostics UTF-16 safe [#102509](https://github.com/openclaw/openclaw/pull/102509)
- Mark interrupted web responses as incomplete [#102550](https://github.com/openclaw/openclaw/pull/102550)
- Keep Codex diagnostic truncation Unicode-safe [#102576](https://github.com/openclaw/openclaw/pull/102576)
- Keep Parallel MCP error details Unicode-safe [#102592](https://github.com/openclaw/openclaw/pull/102592)
- Preserve source length for truncated web_fetch output [#102978](https://github.com/openclaw/openclaw/pull/102978)
- Count every failed tool call in trace summaries [#102981](https://github.com/openclaw/openclaw/pull/102981)
- Prevent empty agent output from crashing truncation [#103425](https://github.com/openclaw/openclaw/pull/103425)
- Preserve valid Unicode in Firecrawl API errors [#103487](https://github.com/openclaw/openclaw/pull/103487)
- Reject malformed session-history offsets [#103594](https://github.com/openclaw/openclaw/pull/103594)
- Keep disabled Exa content options out of default cache entries [#103653](https://github.com/openclaw/openclaw/pull/103653)
- Stop session grep searches promptly when canceled [#103709](https://github.com/openclaw/openclaw/pull/103709)
- Enforce middleware detail limits by UTF-8 bytes [#104156](https://github.com/openclaw/openclaw/pull/104156)
- Report accurate UTF-8 sizes for Code Mode API files [#104244](https://github.com/openclaw/openclaw/pull/104244)
- Reject malformed goal token budgets [#104534](https://github.com/openclaw/openclaw/pull/104534)
- Stop Parallel MCP search after an initialization acknowledgement fails [#104554](https://github.com/openclaw/openclaw/pull/104554)
- Report correct UTF-8 byte counts after writes [#104560](https://github.com/openclaw/openclaw/pull/104560)
- Keep tool_search_code stderr errors valid at UTF-16 boundaries [#104767](https://github.com/openclaw/openclaw/pull/104767)
- Preserve cancellation reasons through request timeouts [#105071](https://github.com/openclaw/openclaw/pull/105071)
- Make sandbox file checks reliable across locales [#105263](https://github.com/openclaw/openclaw/pull/105263)
- Reject unsafe PDF page numbers before analysis [#105315](https://github.com/openclaw/openclaw/pull/105315)
- Require positive integer Tool Search limits [#105567](https://github.com/openclaw/openclaw/pull/105567)
- Keep read-tool warning previews Unicode-safe [#106399](https://github.com/openclaw/openclaw/pull/106399)
- Resolve relative links in Web Readability output [#106874](https://github.com/openclaw/openclaw/pull/106874)
- Avoid resize hints after image re-encoding [#107027](https://github.com/openclaw/openclaw/pull/107027)
- Fix Perplexity Search API date filters [#107046](https://github.com/openclaw/openclaw/pull/107046)
- Reject malformed array indices in Workspaces bindings [#107317](https://github.com/openclaw/openclaw/pull/107317)
- Preserve UTF-8 in session-tool error tails [#108012](https://github.com/openclaw/openclaw/pull/108012)
- fix(agents): report blocked command outcomes [#108060](https://github.com/openclaw/openclaw/pull/108060)
- Keep read-tool warning previews valid Unicode [#108276](https://github.com/openclaw/openclaw/pull/108276)
- Prevent stalled find and grep checks from hanging [#109215](https://github.com/openclaw/openclaw/pull/109215)
- Bound sandbox bootstrap seed file reads [#110017](https://github.com/openclaw/openclaw/pull/110017)
- Explain directory paths passed to the read tool [#114601](https://github.com/openclaw/openclaw/pull/114601)
- Prevent empty and shell-style Code Mode calls on small models [#115275](https://github.com/openclaw/openclaw/pull/115275)
- Isolate Code Mode tool catalogs by run [#115458](https://github.com/openclaw/openclaw/pull/115458)
- Reject unsupported Feishu document content at creation [#115697](https://github.com/openclaw/openclaw/pull/115697)
- Close abandoned web-fetch responses during provider fallback [#115759](https://github.com/openclaw/openclaw/pull/115759)
- Hide leading UTF-8 BOMs from agent file reads [#115781](https://github.com/openclaw/openclaw/pull/115781)
- Include tool-use summaries in CLI-backed run results [#115797](https://github.com/openclaw/openclaw/pull/115797)
- Report Codex hosted-search timeouts accurately [#115837](https://github.com/openclaw/openclaw/pull/115837)
- Strip leading BOMs from inline fetched text [#115906](https://github.com/openclaw/openclaw/pull/115906)
- Report Copilot code-mode engagement in JSON results [#115913](https://github.com/openclaw/openclaw/pull/115913)
- Make Tool Search telemetry counter resets identifiable [#116070](https://github.com/openclaw/openclaw/pull/116070)
- Keep session-status text compact and sanitized [#116742](https://github.com/openclaw/openclaw/pull/116742)
- Preserve terminal summaries on abort-wrapped agent tools [#118495](https://github.com/openclaw/openclaw/pull/118495)
- Reject PDF page selections outside the document range [#118639](https://github.com/openclaw/openclaw/pull/118639)
- fix(link-understanding): release connections after failed fetches [#118683](https://github.com/openclaw/openclaw/pull/118683)
- fix(code-mode): keep MCP node label truncation UTF-16 safe [#119392](https://github.com/openclaw/openclaw/pull/119392)
- fix(media): forward caller abort signal to retry backoff sleep [#119398](https://github.com/openclaw/openclaw/pull/119398)
- Fix managed-worktree cleanup with symlinked state directories [#120362](https://github.com/openclaw/openclaw/pull/120362)
- Recognize uppercase attachment file URLs on Windows [#121362](https://github.com/openclaw/openclaw/pull/121362)
- Clear recovered multi-file patch warnings [#121503](https://github.com/openclaw/openclaw/pull/121503)
- Decode local media file URLs safely on Windows [#122192](https://github.com/openclaw/openclaw/pull/122192)
- Stop false file-change failures on Windows media reads [#122427](https://github.com/openclaw/openclaw/pull/122427)
- Fill session lists after filtering [#122725](https://github.com/openclaw/openclaw/pull/122725)
- Preserve partial web fetch status [#122866](https://github.com/openclaw/openclaw/pull/122866)
- Allow zero-byte artifact downloads [#122928](https://github.com/openclaw/openclaw/pull/122928)
- Report headless Code Mode timeouts consistently [#122997](https://github.com/openclaw/openclaw/pull/122997)
- Return a clear error for malformed Diffs tool calls [#123087](https://github.com/openclaw/openclaw/pull/123087)
- Correct image resize log percentage signs [#123411](https://github.com/openclaw/openclaw/pull/123411)
- Reject failed target pages from Firecrawl [#123741](https://github.com/openclaw/openclaw/pull/123741)
- Cancelled X searches no longer affect retries [#123996](https://github.com/openclaw/openclaw/pull/123996)
- Hide unavailable node guidance in Code Mode [#124698](https://github.com/openclaw/openclaw/pull/124698)
- fix(agents): remind exec models to quote shell metacharacters [#125485](https://github.com/openclaw/openclaw/pull/125485)
- Keep managed-worktree cleanup running past stale metadata [#125721](https://github.com/openclaw/openclaw/pull/125721)
- Report accurate file counts for directory fetches [#126439](https://github.com/openclaw/openclaw/pull/126439)
- Extract readable content from XHTML pages [#126835](https://github.com/openclaw/openclaw/pull/126835)
- Honor Unicode BOM before conflicting HTTP charsets [#126854](https://github.com/openclaw/openclaw/pull/126854)
- Keep canceled Firecrawl requests from returning stale results [#126857](https://github.com/openclaw/openclaw/pull/126857)
- Expose directory pagination tokens to agents [#127051](https://github.com/openclaw/openclaw/pull/127051)
- fix(file-transfer): inline small YAML and source files from paired nodes [#128656](https://github.com/openclaw/openclaw/pull/128656)
- fix: recover after read-only Code Mode node lookup [#129427](https://github.com/openclaw/openclaw/pull/129427)
- fix(ollama): skip local checks for hosted web search [#129833](https://github.com/openclaw/openclaw/pull/129833)
- fix(code-mode): serialize catalog handles nested in final values [#130276](https://github.com/openclaw/openclaw/pull/130276)
- Guide node discovery before describing a paired node [#51926](https://github.com/openclaw/openclaw/pull/51926)
- Cache and back off remote node binary probes [#79438](https://github.com/openclaw/openclaw/pull/79438)
- Reject invalid process actions before execution [#81157](https://github.com/openclaw/openclaw/pull/81157)
- Require web provider environment references to resolve before counting as credentials [#96400](https://github.com/openclaw/openclaw/pull/96400)

</details>

</Accordion>

<Accordion title="Processes and background commands">

Cancelling a queued command now keeps it from starting, cancellation during startup reaches the process once it exists, and an explicit replacement retires the command it replaced without killing ordinary work that happens to be running at the same time. Commands already running in the background keep their existing lifetime.

Process output also stays in the order OpenClaw observed it, completion remains attached to the exact process that finished, and polling says when earlier output was omitted. The full history remains available through paged process logs rather than one response that can grow without bound.

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

**Bug fixes**

- Prevent zombie-process buildup in Docker sandboxes [#103441](https://github.com/openclaw/openclaw/pull/103441)
- Keep background CLI commands visible as tasks [#110468](https://github.com/openclaw/openclaw/pull/110468)
- Stop cancelled turns before they spawn background agent loops [#115011](https://github.com/openclaw/openclaw/pull/115011)
- Prevent concurrent sandbox container name conflicts [#115645](https://github.com/openclaw/openclaw/pull/115645)
- Reclaim idle agent terminals under pool pressure [#116101](https://github.com/openclaw/openclaw/pull/116101)
- Open remote node terminals promptly and preserve operator renames [#116355](https://github.com/openclaw/openclaw/pull/116355)
- Report background process outcomes truthfully and wake on quiet failures [#120754](https://github.com/openclaw/openclaw/pull/120754)
- Honor Windows child environment overrides regardless of key casing [#120802](https://github.com/openclaw/openclaw/pull/120802)
- Stop forked commands after Gateway timeouts [#124081](https://github.com/openclaw/openclaw/pull/124081)
- Stop terminal process trees when sessions are archived [#125784](https://github.com/openclaw/openclaw/pull/125784)
- fix(worker): keep background servers alive after replies [#130733](https://github.com/openclaw/openclaw/pull/130733)
- Preserve emoji in agent output and recovery messages [#102085](https://github.com/openclaw/openclaw/pull/102085)
- Stop canceled parallel tools from starting [#102276](https://github.com/openclaw/openclaw/pull/102276)
- Keep heredoc body text out of shell command status splits [#102889](https://github.com/openclaw/openclaw/pull/102889)
- Keep Codex sandbox leases until child processes close [#103617](https://github.com/openclaw/openclaw/pull/103617)
- Preserve ANSI sanitization across bash output chunks [#103706](https://github.com/openclaw/openclaw/pull/103706)
- Remove hidden terminal escape fragments from sanitized text [#103707](https://github.com/openclaw/openclaw/pull/103707)
- Bound Windows foreground exec cleanup [#104234](https://github.com/openclaw/openclaw/pull/104234)
- Keep goals visible after background command completions [#104265](https://github.com/openclaw/openclaw/pull/104265)
- Keep sandbox exec finalization inside lifecycle admission [#104419](https://github.com/openclaw/openclaw/pull/104419)
- Stop stalled Windows encoding checks from blocking commands [#109319](https://github.com/openclaw/openclaw/pull/109319)
- Reap ngrok tunnels during Voice Call cleanup [#110122](https://github.com/openclaw/openclaw/pull/110122)
- Preserve descendant output during event-loop stalls [#111040](https://github.com/openclaw/openclaw/pull/111040)
- Find mise-installed commands across supported platforms [#111258](https://github.com/openclaw/openclaw/pull/111258)
- Use a valid terminal identity when TERM is blank [#111261](https://github.com/openclaw/openclaw/pull/111261)
- Preserve ANSI sanitizer state across local exec chunks [#111364](https://github.com/openclaw/openclaw/pull/111364)
- Warn agents before retrying timed-out commands [#111390](https://github.com/openclaw/openclaw/pull/111390)
- Preserve running tasks after background-process removal [#113860](https://github.com/openclaw/openclaw/pull/113860)
- Prevent superseded scoped processes from surviving replacement [#114845](https://github.com/openclaw/openclaw/pull/114845)
- Stop processes cancelled during startup [#114917](https://github.com/openclaw/openclaw/pull/114917)
- Prevent cancelled queued processes from starting [#114951](https://github.com/openclaw/openclaw/pull/114951)
- Preserve long process deadlines beyond Node's timer limit [#115230](https://github.com/openclaw/openclaw/pull/115230)
- Keep process cancellation reasons consistent [#115317](https://github.com/openclaw/openclaw/pull/115317)
- Prevent orphaned Windows child process trees [#115535](https://github.com/openclaw/openclaw/pull/115535)
- Stop false failures for completed shell checks [#115737](https://github.com/openclaw/openclaw/pull/115737)
- Bound completed background command memory and clean retired sessions [#115760](https://github.com/openclaw/openclaw/pull/115760)
- Return results from long-running node-host commands [#116591](https://github.com/openclaw/openclaw/pull/116591)
- Decode legacy Windows session exec output correctly [#119509](https://github.com/openclaw/openclaw/pull/119509)
- Make exec timeout units explicit [#119874](https://github.com/openclaw/openclaw/pull/119874)
- Keep exec completions tied to the exact process [#120575](https://github.com/openclaw/openclaw/pull/120575)
- Warn when process polls omit earlier output [#120583](https://github.com/openclaw/openclaw/pull/120583)
- Stop polled background commands from sending stale completion alerts [#120585](https://github.com/openclaw/openclaw/pull/120585)
- Warn when process output is permanently discarded [#120705](https://github.com/openclaw/openclaw/pull/120705)
- Close task-owned terminals after completion [#121055](https://github.com/openclaw/openclaw/pull/121055)
- Close task-owned terminals when tasks finish [#121070](https://github.com/openclaw/openclaw/pull/121070)
- Retire exec sessions after sandbox preparation failures [#121148](https://github.com/openclaw/openclaw/pull/121148)
- Close the correct Gateway terminal when run IDs collide [#121192](https://github.com/openclaw/openclaw/pull/121192)
- Close task-owned terminals when background work ends [#121267](https://github.com/openclaw/openclaw/pull/121267)
- Keep compound shell commands readable in tool displays [#122581](https://github.com/openclaw/openclaw/pull/122581)
- Stop and reap stale macOS Talk MLX helpers safely [#124604](https://github.com/openclaw/openclaw/pull/124604)
- fix(process): commands lose output during event-loop stalls [#125381](https://github.com/openclaw/openclaw/pull/125381)
- Report node timeouts and process kills accurately [#125466](https://github.com/openclaw/openclaw/pull/125466)
- Keep terminal and exec recovery paths usable [#125731](https://github.com/openclaw/openclaw/pull/125731)
- Codex sandbox termination waits for full process cleanup [#125908](https://github.com/openclaw/openclaw/pull/125908)
- Keep child signal forwarding active after operational errors [#126493](https://github.com/openclaw/openclaw/pull/126493)
- Keep large command bursts responsive [#127145](https://github.com/openclaw/openclaw/pull/127145)
- Keep background commands controllable after signal errors [#127154](https://github.com/openclaw/openclaw/pull/127154)
- fix(agents): preserve approved exec output stream labels [#127595](https://github.com/openclaw/openclaw/pull/127595)
- fix(agents): interactive process prompts stall during timed polls [#130081](https://github.com/openclaw/openclaw/pull/130081)
- fix(exec): stop cancelled commands before process admission [#130941](https://github.com/openclaw/openclaw/pull/130941)
- Prevent Unix child cleanup from terminating the gateway [#94697](https://github.com/openclaw/openclaw/pull/94697)
- fix(process): await process-tree cleanup before cancellation settles [#98539](https://github.com/openclaw/openclaw/pull/98539)
- fix(process): decode UTF-16 Windows output streams (#109163) [95b69ef](https://github.com/openclaw/openclaw/commit/95b69ef)
- Keep background-process labels valid around emoji [#102332](https://github.com/openclaw/openclaw/pull/102332)
- Clamp explicit zero bash-job TTLs to the one-minute minimum [#102855](https://github.com/openclaw/openclaw/pull/102855)
- Keep bash output byte-bounded and UTF-8 safe [#103272](https://github.com/openclaw/openclaw/pull/103272)
- Strip residual terminal control characters [#103274](https://github.com/openclaw/openclaw/pull/103274)
- Keep SCP failure messages valid around emoji filenames [#104148](https://github.com/openclaw/openclaw/pull/104148)
- Preserve Unicode in file-transfer error tails [#104151](https://github.com/openclaw/openclaw/pull/104151)
- Preserve emoji in truncated process output [#104531](https://github.com/openclaw/openclaw/pull/104531)
- Report accurate byte counts for process input [#104966](https://github.com/openclaw/openclaw/pull/104966)
- Report accurate UTF-8 byte counts for process send-keys [#104968](https://github.com/openclaw/openclaw/pull/104968)
- Apply undefined child-process environment removals [#107258](https://github.com/openclaw/openclaw/pull/107258)
- Bound Logbook snapshot subprocesses [#109042](https://github.com/openclaw/openclaw/pull/109042)
- Report the real cause and duration of command-lane timeouts [#109287](https://github.com/openclaw/openclaw/pull/109287)
- Handle ACP agent process startup failures safely [#109529](https://github.com/openclaw/openclaw/pull/109529)
- Treat permission-restricted PIDs as alive [#110235](https://github.com/openclaw/openclaw/pull/110235)
- Isolate bash stdout and stderr decoding [#112325](https://github.com/openclaw/openclaw/pull/112325)
- Preserve signal-specific exit codes from wrapped CLI commands [#113685](https://github.com/openclaw/openclaw/pull/113685)
- Restore byte-exact process output on fixed Bun canaries [#114606](https://github.com/openclaw/openclaw/pull/114606)
- Prefer native PowerShell 7 executables on Windows PATH [#114999](https://github.com/openclaw/openclaw/pull/114999)
- Accept the documented global exec notice delay [#115101](https://github.com/openclaw/openclaw/pull/115101)
- Make cancelled foreground commands reject cleanly [#115694](https://github.com/openclaw/openclaw/pull/115694)
- Resume shared terminal output when a slow viewer leaves [#117847](https://github.com/openclaw/openclaw/pull/117847)
- Explain wrapper-selected Linux SIGKILL failures [#117911](https://github.com/openclaw/openclaw/pull/117911)
- Honor explicit Windows executable paths [#121094](https://github.com/openclaw/openclaw/pull/121094)
- Keep background process poll output in order [#123449](https://github.com/openclaw/openclaw/pull/123449)
- Preserve stderr and errors in node exec results [#123602](https://github.com/openclaw/openclaw/pull/123602)
- Preserve exec outcomes across lifecycle races [#125532](https://github.com/openclaw/openclaw/pull/125532)
- Treat empty exec workdirs as omitted [#126509](https://github.com/openclaw/openclaw/pull/126509)
- Keep the newest background process sessions visible [#126706](https://github.com/openclaw/openclaw/pull/126706)
- Separate Codex execution sessions from WebSocket transport [#126859](https://github.com/openclaw/openclaw/pull/126859)
- fix(agents): preserve timeout and termination details in process logs [#129273](https://github.com/openclaw/openclaw/pull/129273)
- Explain unusable working directories in remote node exec [#97105](https://github.com/openclaw/openclaw/pull/97105)

</details>

</Accordion>

<Accordion title="Automations and task boards">

Workboard now keeps an accepted worker attached to its card, rolls back a failed operation without overwriting someone else's edits, and reconnects launches interrupted by a restart. If OpenClaw does not have a complete view of the running workers, it waits instead of guessing whether one still belongs to the card, and stale launch attempts remain blocked.

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

**Bug fixes**

- Fail closed when task-registry restore fails [#105031](https://github.com/openclaw/openclaw/pull/105031)
- Fail closed when task-flow state cannot be restored [#105088](https://github.com/openclaw/openclaw/pull/105088)
- Resume interrupted generated-media completions through the owning session [#108024](https://github.com/openclaw/openclaw/pull/108024)
- Harden cron editing and Workboard dispatch [#114564](https://github.com/openclaw/openclaw/pull/114564)
- Preserve live blocked TaskFlows during maintenance [#117606](https://github.com/openclaw/openclaw/pull/117606)
- Deliver queued background-task results proactively [#123076](https://github.com/openclaw/openclaw/pull/123076)
- Keep Workboard summaries from stalling the Gateway [#123922](https://github.com/openclaw/openclaw/pull/123922)
- Keep Workboard cards synced when the dashboard is closed [#125023](https://github.com/openclaw/openclaw/pull/125023)
- Prevent orphaned Workboard runs and overwritten cards [#125951](https://github.com/openclaw/openclaw/pull/125951)
- fix(worktrees): preserve nested repositories during cleanup [#129454](https://github.com/openclaw/openclaw/pull/129454)
- fix(workboard): preserve unassigned worker ownership (#115119) [a9303f2](https://github.com/openclaw/openclaw/commit/a9303f2)
- Resume cron media jobs with their original context [#101078](https://github.com/openclaw/openclaw/pull/101078)
- Keep background-task status from corrupting emoji [#101976](https://github.com/openclaw/openclaw/pull/101976)
- Repair legacy task delivery statuses during upgrade [#103946](https://github.com/openclaw/openclaw/pull/103946)
- Keep durable task start times accurate [#104278](https://github.com/openclaw/openclaw/pull/104278)
- Keep restored task state consistent and index-safe [#104990](https://github.com/openclaw/openclaw/pull/104990)
- Avoid repeated global scans during cron session cleanup [#105903](https://github.com/openclaw/openclaw/pull/105903)
- Let Workboard workers finish dispatched cards [#107271](https://github.com/openclaw/openclaw/pull/107271)
- Preserve same-ID cron history across separate stores [#108730](https://github.com/openclaw/openclaw/pull/108730)
- Record the actual runtime used by Workboard executions [#108887](https://github.com/openclaw/openclaw/pull/108887)
- Correlate Workboard completion proofs by id [#111324](https://github.com/openclaw/openclaw/pull/111324)
- Harden cron notifications and Workboard dispatch [#114499](https://github.com/openclaw/openclaw/pull/114499)
- Keep new Workboard cards with the selected agent [#114650](https://github.com/openclaw/openclaw/pull/114650)
- Harden Cron waits and Workboard card lifecycle behavior [#114865](https://github.com/openclaw/openclaw/pull/114865)
- Keep newly created Workboard cards dispatchable [#116412](https://github.com/openclaw/openclaw/pull/116412)
- Reject invalid task notification policies before persistence [#117554](https://github.com/openclaw/openclaw/pull/117554)
- Preserve accepted task suggestions under registry pressure [#117623](https://github.com/openclaw/openclaw/pull/117623)
- Speed up large Workboard card lists [#118848](https://github.com/openclaw/openclaw/pull/118848)
- Keep task suggestions recoverable after failures and capacity pressure [#120940](https://github.com/openclaw/openclaw/pull/120940)
- fix(workboard): truncate oversized notification messages instead of crashing dispatch [#120999](https://github.com/openclaw/openclaw/pull/120999)
- Deliver generated media with the current reply contract [#121937](https://github.com/openclaw/openclaw/pull/121937)
- Preserve concurrent Workboard edits when failed operations roll back [#126161](https://github.com/openclaw/openclaw/pull/126161)
- Retry safe Workboard worktree cleanup after failures [#126162](https://github.com/openclaw/openclaw/pull/126162)
- Recover interrupted Workboard worker launches [#126170](https://github.com/openclaw/openclaw/pull/126170)
- fix(worktrees): stop repeated startup cleanup errors [#128761](https://github.com/openclaw/openclaw/pull/128761)
- fix(tasks): blocked work incorrectly appears successful [#129101](https://github.com/openclaw/openclaw/pull/129101)
- fix(acp): classify complete task output before summary truncation [#129255](https://github.com/openclaw/openclaw/pull/129255)
- fix(workboard): index card child records [#129568](https://github.com/openclaw/openclaw/pull/129568)
- fix(gateway): Land PR works with configured repository hooks [#129576](https://github.com/openclaw/openclaw/pull/129576)
- fix(gateway): unblock GitHub publication on hooksPath checkouts and auto-retry deferred requests [#129772](https://github.com/openclaw/openclaw/pull/129772)
- fix(tasks): stop completed TaskFlows from accumulating [#129873](https://github.com/openclaw/openclaw/pull/129873)
- fix(cron): preserve authored speech in text announcements [#130520](https://github.com/openclaw/openclaw/pull/130520)
- Keep fast context maintenance out of task flows [#102147](https://github.com/openclaw/openclaw/pull/102147)
- Keep emoji intact in captured Workboard cards [#102544](https://github.com/openclaw/openclaw/pull/102544)
- Report active Workboard claims before dependency errors [#104065](https://github.com/openclaw/openclaw/pull/104065)
- Scope default Workboard card positions by board [#104410](https://github.com/openclaw/openclaw/pull/104410)
- Reject impossible commitment due dates [#106236](https://github.com/openclaw/openclaw/pull/106236)
- Keep the task process listener singleton [#117766](https://github.com/openclaw/openclaw/pull/117766)
- Stop Workboard sync errors with multiple agents [#125429](https://github.com/openclaw/openclaw/pull/125429)
- Start Workboard reconciliation after Gateway readiness [#125470](https://github.com/openclaw/openclaw/pull/125470)
- Rebind managed worktree cleanup to the live repository [#126305](https://github.com/openclaw/openclaw/pull/126305)
- fix(tasks): blocked completion outcomes cannot be filtered [#129196](https://github.com/openclaw/openclaw/pull/129196)
- fix(workers): preserve configured Git authors on cloud workers [#129826](https://github.com/openclaw/openclaw/pull/129826)
- fix(gateway): bound the publication attribute scan by listing size, not the command cap [#129907](https://github.com/openclaw/openclaw/pull/129907)

</details>

</Accordion>

<Accordion title="Web and dashboard interfaces">

Canvas now keeps generated widgets distinct when their names collide, remembers which widget was pinned after reload, and shows a bounded error when pinning fails instead of making the action disappear. When a stored widget identity is invalid or an occupied name is ambiguous, Canvas still refuses to guess which widget you meant.

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

**Bug fixes**

- Stabilize session dashboards after launch [#111907](https://github.com/openclaw/openclaw/pull/111907)
- Keep concurrent background task progress and completion stable [#114085](https://github.com/openclaw/openclaw/pull/114085)
- Make per-agent Control UI settings persist and show save errors [#117107](https://github.com/openclaw/openclaw/pull/117107)
- Preserve Canvas widgets when generated names collide [#117132](https://github.com/openclaw/openclaw/pull/117132)
- Prevent cloud-session recovery dead ends in the Control UI [#120970](https://github.com/openclaw/openclaw/pull/120970)
- Remove startup stalls from new Control UI chats [#122471](https://github.com/openclaw/openclaw/pull/122471)
- Preserve Workboard sidebar pins during startup and plugin toggles [#123475](https://github.com/openclaw/openclaw/pull/123475)
- Reject oversized and empty chat attachments before send [#123977](https://github.com/openclaw/openclaw/pull/123977)
- fix(portals): keep worker previews reachable and owned by the active environment [#130434](https://github.com/openclaw/openclaw/pull/130434)
- Keep emoji intact in restart reasons and chat previews [#101754](https://github.com/openclaw/openclaw/pull/101754)
- Stop split-pane headers from opening a hidden session picker [#103107](https://github.com/openclaw/openclaw/pull/103107)
- Render media URLs with encoded extensions [#103466](https://github.com/openclaw/openclaw/pull/103466)
- Lock Workboard card drafts while saving [#105600](https://github.com/openclaw/openclaw/pull/105600)
- Restore active plan checklists after reconnect [#109966](https://github.com/openclaw/openclaw/pull/109966)
- Clean up failed Cloud sessions and flag incompatible runtimes [#110371](https://github.com/openclaw/openclaw/pull/110371)
- Keep emoji intact when slicing Markdown content [#110643](https://github.com/openclaw/openclaw/pull/110643)
- Keep workboard dropdowns on-screen in short windows [#110788](https://github.com/openclaw/openclaw/pull/110788)
- Hide the media-only model placeholder from chat history [#111204](https://github.com/openclaw/openclaw/pull/111204)
- Recover Custodian conversations after inference invalidates a session [#111562](https://github.com/openclaw/openclaw/pull/111562)
- Make dashboard boards scrollable [#111911](https://github.com/openclaw/openclaw/pull/111911)
- Show all Workboard cards when no board is selected [#112484](https://github.com/openclaw/openclaw/pull/112484)
- Keep session progress with the selected agent after reconnects [#114548](https://github.com/openclaw/openclaw/pull/114548)
- Preserve Workboard sessions during card edits [#114804](https://github.com/openclaw/openclaw/pull/114804)
- Keep multiple Workboard widgets synchronized [#114972](https://github.com/openclaw/openclaw/pull/114972)
- Preserve Workboard draft edits across rerenders [#115141](https://github.com/openclaw/openclaw/pull/115141)
- Show local assistant media while preview roots load [#115672](https://github.com/openclaw/openclaw/pull/115672)
- Keep chat content visible after HTML-backed disclosure blocks [#115877](https://github.com/openclaw/openclaw/pull/115877)
- Restore deleted-board Workboard routing [#116342](https://github.com/openclaw/openclaw/pull/116342)
- Restore settings search, signed media previews, and native chat text [#116654](https://github.com/openclaw/openclaw/pull/116654)
- Revalidate cached Gateway media correctly [#116880](https://github.com/openclaw/openclaw/pull/116880)
- Close Gateway media file handles reliably [#117000](https://github.com/openclaw/openclaw/pull/117000)
- Honor If-Modified-Since for authenticated Gateway media [#117133](https://github.com/openclaw/openclaw/pull/117133)
- Preserve board widget metadata for HEAD requests [#120177](https://github.com/openclaw/openclaw/pull/120177)
- Complete bounded file reads for previews and media detection [#120208](https://github.com/openclaw/openclaw/pull/120208)
- Make Control UI task suggestions actionable and display-safe [#120967](https://github.com/openclaw/openclaw/pull/120967)
- Show pasted titles and final replies for remote sessions [#121467](https://github.com/openclaw/openclaw/pull/121467)
- Report an error when every Web Push test delivery fails [#122080](https://github.com/openclaw/openclaw/pull/122080)
- Generate session titles through the active runtime's authentication [#122163](https://github.com/openclaw/openclaw/pull/122163)
- Show placeholders for blocked remote chat images [#122312](https://github.com/openclaw/openclaw/pull/122312)
- Show every active task in the Control UI [#122565](https://github.com/openclaw/openclaw/pull/122565)
- fix(gateway): recover embedded channel runs in chat startup projection [#123189](https://github.com/openclaw/openclaw/pull/123189)
- Keep recently completed tasks visible and correctly ordered [#123219](https://github.com/openclaw/openclaw/pull/123219)
- Show portal previews when CSP blocks only the probe [#123344](https://github.com/openclaw/openclaw/pull/123344)
- Render managed images under Control UI base paths [#123592](https://github.com/openclaw/openclaw/pull/123592)
- Reject over-limit Control UI file attachments before encoding [#123654](https://github.com/openclaw/openclaw/pull/123654)
- Prevent duplicate Canvas dashboard pins after reload [#123721](https://github.com/openclaw/openclaw/pull/123721)
- Reclaim attachments on selected chat-send and catalog exits [#123983](https://github.com/openclaw/openclaw/pull/123983)
- Reduce chat branch polling and recover dropdown state [#124094](https://github.com/openclaw/openclaw/pull/124094)
- Keep task Retry and Dismiss results across refresh [#124371](https://github.com/openclaw/openclaw/pull/124371)
- Release discarded Control UI attachment payloads [#124391](https://github.com/openclaw/openclaw/pull/124391)
- Show snapshot failures after forced worktree removal [#124605](https://github.com/openclaw/openclaw/pull/124605)
- Generate readable worktree and session titles at dispatch [#124787](https://github.com/openclaw/openclaw/pull/124787)
- Unify session previews and stop leaking or over-stripping reply markers [#124997](https://github.com/openclaw/openclaw/pull/124997)
- Refresh device lists after concurrent changes [#125627](https://github.com/openclaw/openclaw/pull/125627)
- Prevent dashboard session conflicts during concurrent updates [#125777](https://github.com/openclaw/openclaw/pull/125777)
- Retry dashboard sends after concurrent session updates [#125849](https://github.com/openclaw/openclaw/pull/125849)
- Keep progress cards available in ordinary Codex runs [#126189](https://github.com/openclaw/openclaw/pull/126189)
- Stop replaying unchanged session PR subscriptions [#126726](https://github.com/openclaw/openclaw/pull/126726)
- fix(gateway): live sessions stall or reorder across agent identities [#128265](https://github.com/openclaw/openclaw/pull/128265)
- fix(gateway): preserve mixed media failure receipts [#128423](https://github.com/openclaw/openclaw/pull/128423)
- fix(gateway): project canonical session events [#129313](https://github.com/openclaw/openclaw/pull/129313)
- fix(ui): align collapsed top-left controls [#129920](https://github.com/openclaw/openclaw/pull/129920)
- fix: cloud machine picker loses CPU and RAM with larger catalogs [#130684](https://github.com/openclaw/openclaw/pull/130684)
- fix: hide unsupported cloud machine class overrides [#130766](https://github.com/openclaw/openclaw/pull/130766)
- fix: stop suggesting unsupported cloud worker classes [#130787](https://github.com/openclaw/openclaw/pull/130787)
- fix(crabbox): recover machine choices after catalog failures [#130828](https://github.com/openclaw/openclaw/pull/130828)
- Keep truncated session titles and previews emoji-safe [#102090](https://github.com/openclaw/openclaw/pull/102090)
- Keep Control UI truncation safe at emoji boundaries [#102225](https://github.com/openclaw/openclaw/pull/102225)
- Keep truncated chat text Unicode-safe [#102470](https://github.com/openclaw/openclaw/pull/102470)
- Keep long live-chat replies emoji-safe when trimmed [#102484](https://github.com/openclaw/openclaw/pull/102484)
- Keep emoji intact in Overview event previews [#102625](https://github.com/openclaw/openclaw/pull/102625)
- Prevent Workboard select menus from flashing before positioning [#102867](https://github.com/openclaw/openclaw/pull/102867)
- Keep identity text valid at emoji boundaries [#103034](https://github.com/openclaw/openclaw/pull/103034)
- Restore the Worktrees table layout [#103899](https://github.com/openclaw/openclaw/pull/103899)
- Preserve emoji in pending config summaries [#103908](https://github.com/openclaw/openclaw/pull/103908)
- Prevent broken emoji in exported tool previews [#104054](https://github.com/openclaw/openclaw/pull/104054)
- Time out incomplete Admin HTTP RPC request bodies [#104564](https://github.com/openclaw/openclaw/pull/104564)
- Stop Telegram Mini App dashboard loading from hanging indefinitely [#104629](https://github.com/openclaw/openclaw/pull/104629)
- Keep emoji intact in long Control UI branch labels [#104901](https://github.com/openclaw/openclaw/pull/104901)
- Keep explicit current-chat replies visible in Control UI history [#106073](https://github.com/openclaw/openclaw/pull/106073)
- Prevent overlapping and stale Logbook refreshes [#106397](https://github.com/openclaw/openclaw/pull/106397)
- Keep exported session preview truncation UTF-16 safe [#106400](https://github.com/openclaw/openclaw/pull/106400)
- Reject malformed Control UI compression weights [#107617](https://github.com/openclaw/openclaw/pull/107617)
- Prevent workspace reveal and config open from hanging [#110277](https://github.com/openclaw/openclaw/pull/110277)
- Enforce valid usage-meter widths [#110410](https://github.com/openclaw/openclaw/pull/110410)
- Preserve emoji in truncated dashboard event notices [#111702](https://github.com/openclaw/openclaw/pull/111702)
- Prefer the most recently seen offline Canvas node [#112084](https://github.com/openclaw/openclaw/pull/112084)
- Keep IME confirmation from sending unfinished Copilot messages [#113752](https://github.com/openclaw/openclaw/pull/113752)
- Fall back when the profile hero avatar cannot load [#115600](https://github.com/openclaw/openclaw/pull/115600)
- Prevent duplicate and stale profile refreshes [#116764](https://github.com/openclaw/openclaw/pull/116764)
- Report static Control UI asset sizes on HEAD requests [#117049](https://github.com/openclaw/openclaw/pull/117049)
- Honor HTTP-date validators when resuming gateway media [#117058](https://github.com/openclaw/openclaw/pull/117058)
- Report avatar size on authenticated HEAD requests [#117124](https://github.com/openclaw/openclaw/pull/117124)
- Stop advertising an unsupported Canvas snapshot delay [#117326](https://github.com/openclaw/openclaw/pull/117326)
- Report accurate A2UI asset sizes in HEAD responses [#117961](https://github.com/openclaw/openclaw/pull/117961)
- Report Canvas document sizes on HEAD requests [#117964](https://github.com/openclaw/openclaw/pull/117964)
- Show original filenames on chat attachment cards [#118628](https://github.com/openclaw/openclaw/pull/118628)
- Reject explicitly empty Gateway attachments [#118742](https://github.com/openclaw/openclaw/pull/118742)
- Preserve byte-accurate Control UI metadata for HEAD requests [#119822](https://github.com/openclaw/openclaw/pull/119822)
- fix(gateway): serve Control UI assistant media for uppercase file URLs [#121827](https://github.com/openclaw/openclaw/pull/121827)
- Show newly paired devices without reconnecting [#122774](https://github.com/openclaw/openclaw/pull/122774)
- Keep native history anchored while older messages load [#123103](https://github.com/openclaw/openclaw/pull/123103)
- Show timed-out runs correctly in the Control UI [#123511](https://github.com/openclaw/openclaw/pull/123511)
- Keep delayed final replies above newer chat turns [#123560](https://github.com/openclaw/openclaw/pull/123560)
- Show visible errors when dashboard pinning fails [#124044](https://github.com/openclaw/openclaw/pull/124044)
- Clean up abandoned chat attachments across every pre-send exit [#124100](https://github.com/openclaw/openclaw/pull/124100)
- Reject oversized Control UI requests before disconnect [#124139](https://github.com/openclaw/openclaw/pull/124139)
- Discard unreferenced attachments when hooks block a chat turn [#124353](https://github.com/openclaw/openclaw/pull/124353)
- Stop closed Gateway clients from restoring subscriptions [#124771](https://github.com/openclaw/openclaw/pull/124771)
- Stop duplicate dashboard session queries [#124968](https://github.com/openclaw/openclaw/pull/124968)
- Stop Canvas snapshots from returning deleted file paths [#125216](https://github.com/openclaw/openclaw/pull/125216)
- Unify and harden Control UI resource routes [#126386](https://github.com/openclaw/openclaw/pull/126386)
- Show offline node status on mixed-role devices [#126428](https://github.com/openclaw/openclaw/pull/126428)
- Refresh mixed-role node status on disconnect [#126677](https://github.com/openclaw/openclaw/pull/126677)
- Make task-result copying reliable when browser clipboard access fails [#127181](https://github.com/openclaw/openclaw/pull/127181)
- Recover Lobsterdex link copying from clipboard failures [#127194](https://github.com/openclaw/openclaw/pull/127194)
- fix(ui): let mobile workboard scroll with toolbar [#129497](https://github.com/openclaw/openclaw/pull/129497)
- fix(ui): cloud worker profile edits corrupt other providers [#129846](https://github.com/openclaw/openclaw/pull/129846)
- fix(ui): keep update badge clear of chat title [#129992](https://github.com/openclaw/openclaw/pull/129992)
- fix(codex): keep progress cards out of chat history [#130022](https://github.com/openclaw/openclaw/pull/130022)
- Report Canvas live-reload WebSocket failures [#82505](https://github.com/openclaw/openclaw/pull/82505)

</details>

</Accordion>

<Accordion title="Terminal App">

The terminal app now stays on the conversation you most recently selected during rapid switching and preserves the active answer and chosen tool visibility when you return to it. It retries one temporary live-update failure, while a second failure remains visible and full verbosity continues to show stored tool output.

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

**Improvements**

- Enable terminal controls for paired Mac sessions [#107361](https://github.com/openclaw/openclaw/pull/107361)

**Bug fixes**

- Make resumed native terminals connect and display output reliably [#107688](https://github.com/openclaw/openclaw/pull/107688)
- Prevent `/reset` from destroying an active TUI conversation [#113841](https://github.com/openclaw/openclaw/pull/113841)
- Make Apple Watch approvals and iPhone lifecycle recovery more reliable [#114366](https://github.com/openclaw/openclaw/pull/114366)
- Keep terminal conversations isolated and streamed replies intact [#114504](https://github.com/openclaw/openclaw/pull/114504)
- Preserve replies, drafts, and session state in the TUI [#114816](https://github.com/openclaw/openclaw/pull/114816)
- Keep Apple device auth from blocking node-host restarts [#115533](https://github.com/openclaw/openclaw/pull/115533)
- Preserve Wear phone-discovery resources in release builds [#116068](https://github.com/openclaw/openclaw/pull/116068)
- Preserve TUI session state across switches and reconnects [#116399](https://github.com/openclaw/openclaw/pull/116399)
- Preserve Android and Wear work across lifecycle changes [#116593](https://github.com/openclaw/openclaw/pull/116593)
- Preserve TUI input across session resets [#116873](https://github.com/openclaw/openclaw/pull/116873)
- Share Control UI chat terminals with their agents [#125758](https://github.com/openclaw/openclaw/pull/125758)
- Keep explicitly disconnected Android nodes offline [b9d53d3](https://github.com/openclaw/openclaw/commit/b9d53d3)
- Order Android disconnect cleanup after in-flight gateway work [#103068](https://github.com/openclaw/openclaw/pull/103068)
- Prevent duplicate Mac launches from opening SSH tunnels [#103892](https://github.com/openclaw/openclaw/pull/103892)
- Restore the Android node connection after process death [#104226](https://github.com/openclaw/openclaw/pull/104226)
- Let paired Mac Codex session catalogs finish loading [#104299](https://github.com/openclaw/openclaw/pull/104299)
- Allow slower Codex session catalogs from paired Macs [#104332](https://github.com/openclaw/openclaw/pull/104332)
- Keep rapid TUI session switches on the latest selection [#104824](https://github.com/openclaw/openclaw/pull/104824)
- Restore macOS node reconnects after Gateway drops [#105091](https://github.com/openclaw/openclaw/pull/105091)
- Allow slower Mac node workers to finish starting [#106281](https://github.com/openclaw/openclaw/pull/106281)
- Allow five minutes for macOS node cold starts [#106380](https://github.com/openclaw/openclaw/pull/106380)
- Keep remote Mac nodes connected through metadata writes [#106419](https://github.com/openclaw/openclaw/pull/106419)
- Let remote Mac nodes finish connecting after tunnel recovery [#106481](https://github.com/openclaw/openclaw/pull/106481)
- Preserve TUI drafts and submit readiness across Gateway restarts [#107115](https://github.com/openclaw/openclaw/pull/107115)
- Restore paired-node Claude and Codex session catalogs [#107410](https://github.com/openclaw/openclaw/pull/107410)
- Preserve TUI session restore state in SQLite [#108058](https://github.com/openclaw/openclaw/pull/108058)
- Fix Claude CLI selection and group native sessions by host [#108062](https://github.com/openclaw/openclaw/pull/108062)
- Reload usage-bar templates after watcher errors [#109462](https://github.com/openclaw/openclaw/pull/109462)
- Honor queue modes in local chat sessions [#109689](https://github.com/openclaw/openclaw/pull/109689)
- Keep Swift node routes valid during connection callbacks [#110127](https://github.com/openclaw/openclaw/pull/110127)
- Split Android cache from durable client state [#111710](https://github.com/openclaw/openclaw/pull/111710)
- Recover Linux Quick Chat from a corrupt Gateway identity [#114359](https://github.com/openclaw/openclaw/pull/114359)
- Keep terminal conversations synchronized across clients [#114443](https://github.com/openclaw/openclaw/pull/114443)
- Prevent stale mobile cancellation from disrupting newer sessions [#114549](https://github.com/openclaw/openclaw/pull/114549)
- Recover TUI chat after Gateway event gaps [#114932](https://github.com/openclaw/openclaw/pull/114932)
- Stop Mac node workers from respawning forever [#114974](https://github.com/openclaw/openclaw/pull/114974)
- Recover TUI session updates after a transient subscription failure [#115010](https://github.com/openclaw/openclaw/pull/115010)
- Prevent dropped WebSocket pongs from wedging Mac keepalive [#115362](https://github.com/openclaw/openclaw/pull/115362)
- Recover native device identity after an interrupted import [#115494](https://github.com/openclaw/openclaw/pull/115494)
- Wait for the current snapshot after macOS reconnects [#116550](https://github.com/openclaw/openclaw/pull/116550)
- fix(tui): own picker roster request lifecycles canonically [#117285](https://github.com/openclaw/openclaw/pull/117285)
- Keep local TUI status accurate through turn completion [#117402](https://github.com/openclaw/openclaw/pull/117402)
- Show attachment-only assistant replies in the TUI [#117460](https://github.com/openclaw/openclaw/pull/117460)
- Clear stale TUI modes when switching sessions [#117658](https://github.com/openclaw/openclaw/pull/117658)
- Prevent stale TUI runs after switching sessions [#117853](https://github.com/openclaw/openclaw/pull/117853)
- Preserve reasoning and tool traces after chat navigation [#118332](https://github.com/openclaw/openclaw/pull/118332)
- Reject delivery to disconnected Apple Watch polling sockets [#118606](https://github.com/openclaw/openclaw/pull/118606)
- Recover macOS node startup when legacy identity files reappear [#120610](https://github.com/openclaw/openclaw/pull/120610)
- Fix Windows launches for npm-installed session CLIs [#122334](https://github.com/openclaw/openclaw/pull/122334)
- Render each live TUI assistant reply once [#123395](https://github.com/openclaw/openclaw/pull/123395)
- Prevent macOS node workers from restarting after stop [#123651](https://github.com/openclaw/openclaw/pull/123651)
- Keep replacement Mac node workers active after stale exits [#123969](https://github.com/openclaw/openclaw/pull/123969)
- Keep embedded CUA unavailable when PID tracking fails [#124572](https://github.com/openclaw/openclaw/pull/124572)
- Show interrupted and failed TUI runs after reconnect [#125898](https://github.com/openclaw/openclaw/pull/125898)
- Prevent TUI startup messages from going to the wrong session [#126046](https://github.com/openclaw/openclaw/pull/126046)
- fix(tui): settle activity from authoritative Gateway run ownership [#126497](https://github.com/openclaw/openclaw/pull/126497)
- fix(macos): return paired-node Codex catalogs without native supervision [#126811](https://github.com/openclaw/openclaw/pull/126811)
- Keep Terminal UI messages with the replacement agent [#126820](https://github.com/openclaw/openclaw/pull/126820)
- perf(tui): stop blocking the editor on every path autocomplete keystroke [#127834](https://github.com/openclaw/openclaw/pull/127834)
- fix(tui): preserve active session runs and hidden tool output [#129496](https://github.com/openclaw/openclaw/pull/129496)
- fix(tui): keep pending follow-up actions hidden after navigation [#130458](https://github.com/openclaw/openclaw/pull/130458)
- Allow paired iPhones to relay Watch commands [58d55ca](https://github.com/openclaw/openclaw/commit/58d55ca)
- Keep TUI error explanations visible after history reloads [#104864](https://github.com/openclaw/openclaw/pull/104864)
- Fail fast during macOS node reconnect cleanup [#105282](https://github.com/openclaw/openclaw/pull/105282)
- Keep Linux node failure text valid [#107717](https://github.com/openclaw/openclaw/pull/107717)
- Preserve emoji in long Pi and OpenCode session searches [#107719](https://github.com/openclaw/openclaw/pull/107719)
- Connect node hosts to IPv6 Gateway literals [#109179](https://github.com/openclaw/openclaw/pull/109179)
- Preserve Unicode in Pi catalog tool arguments [#109589](https://github.com/openclaw/openclaw/pull/109589)
- Preserve Unicode when truncating OpenCode catalog tool input [#109591](https://github.com/openclaw/openclaw/pull/109591)
- Keep macOS PortGuardian compatible with current state databases [#111032](https://github.com/openclaw/openclaw/pull/111032)
- Import existing direct Gateways into macOS saved profiles [#112629](https://github.com/openclaw/openclaw/pull/112629)
- Copy text through the PowerShell clipboard fallback [#113835](https://github.com/openclaw/openclaw/pull/113835)
- Bound macOS remote SSH tunnel teardown [#115861](https://github.com/openclaw/openclaw/pull/115861)
- fix(codex): open local images with uppercase file URLs [#121611](https://github.com/openclaw/openclaw/pull/121611)
- Preserve Unicode Windows LAN route aliases [#122263](https://github.com/openclaw/openclaw/pull/122263)
- Report TUI session-memory write failures once [#124886](https://github.com/openclaw/openclaw/pull/124886)
- Clear stale TUI overlays when restoring a remembered session [#125086](https://github.com/openclaw/openclaw/pull/125086)
- Keep agent-opened terminals in the background [#125101](https://github.com/openclaw/openclaw/pull/125101)
- Restore remembered global TUI sessions before the first send [#126135](https://github.com/openclaw/openclaw/pull/126135)
- Keep Crabbox worker wallpaper visible after desktop setup [#126560](https://github.com/openclaw/openclaw/pull/126560)
- Keep macOS elevation computer control active [#126674](https://github.com/openclaw/openclaw/pull/126674)
- Clear stale TUI session names after switching [#127029](https://github.com/openclaw/openclaw/pull/127029)

</details>

</Accordion>

<Accordion title="Voice and Talk">

Browser Realtime Talk now limits stalled microphone uploads, queued playback, replacement work, and abandoned voice sessions instead of letting them grow without bound. A malformed audio frame can be dropped without ending healthy playback, while Google Live ends the current voice session when it cannot safely cancel only the response that overflowed.

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

**Bug fixes**

- Keep GPT-Live Browser Talk available across session cleanup [#116603](https://github.com/openclaw/openclaw/pull/116603)
- Bound and safely replace browser Realtime Talk sessions [#117216](https://github.com/openclaw/openclaw/pull/117216)
- Prevent stale realtime voice work after reconnects [#117599](https://github.com/openclaw/openclaw/pull/117599)
- Preserve final speech during Talk shutdown [#118693](https://github.com/openclaw/openclaw/pull/118693)
- Keep realtime voice sessions usable after failed or incomplete responses [#121177](https://github.com/openclaw/openclaw/pull/121177)
- fix(talk): isolate cancellation ownership contract [#127186](https://github.com/openclaw/openclaw/pull/127186)
- Bound Google realtime browser-token requests [#106034](https://github.com/openclaw/openclaw/pull/106034)
- Stop xAI voice reconnect waits when a session closes [#108252](https://github.com/openclaw/openclaw/pull/108252)
- Stop stalled Google Live Realtime Talk startups [#109020](https://github.com/openclaw/openclaw/pull/109020)
- Release Realtime Talk media after WebRTC disconnects [#109914](https://github.com/openclaw/openclaw/pull/109914)
- Wait for a usable Talk call before restoring camera [#110874](https://github.com/openclaw/openclaw/pull/110874)
- Close stale Talk allocations after stop or restart [#112384](https://github.com/openclaw/openclaw/pull/112384)
- Keep Realtime Talk media and updates in the correct chat [#116067](https://github.com/openclaw/openclaw/pull/116067)
- Bound superseded GPT-Live agent consults [#116211](https://github.com/openclaw/openclaw/pull/116211)
- Bound OpenAI realtime playback acknowledgement state [#116288](https://github.com/openclaw/openclaw/pull/116288)
- Bound realtime voice talkback backlog [#116420](https://github.com/openclaw/openclaw/pull/116420)
- Bound oversized GPT-Live delegation responses [#116482](https://github.com/openclaw/openclaw/pull/116482)
- Google Live reconnects discard stale sessions [#116493](https://github.com/openclaw/openclaw/pull/116493)
- Clear stale input and bound memory in closed xAI voice sessions [#116659](https://github.com/openclaw/openclaw/pull/116659)
- Release realtime Talk relays after disconnect [#116684](https://github.com/openclaw/openclaw/pull/116684)
- Bound Browser Talk audio uploads during stalled Gateway uplinks [#116696](https://github.com/openclaw/openclaw/pull/116696)
- Stop Realtime Talk from retaining runaway audio [#116734](https://github.com/openclaw/openclaw/pull/116734)
- Bound durable Talk transcript persistence [#117214](https://github.com/openclaw/openclaw/pull/117214)
- Bound Talk relay transcript persistence [#117215](https://github.com/openclaw/openclaw/pull/117215)
- Start a fresh Google Live session after resume invalidation [#117371](https://github.com/openclaw/openclaw/pull/117371)
- Prevent xAI retries from reviving closed voice sessions [#117399](https://github.com/openclaw/openclaw/pull/117399)
- Keep the first Google realtime voice input from being dropped [#117450](https://github.com/openclaw/openclaw/pull/117450)
- Honor Google Live's 60-second browser activation deadline [#117490](https://github.com/openclaw/openclaw/pull/117490)
- Preserve Google realtime prompts during startup [#117529](https://github.com/openclaw/openclaw/pull/117529)
- Stop Talk microphone polling after session cleanup [#117573](https://github.com/openclaw/openclaw/pull/117573)
- Preserve xAI realtime voice terminal outcomes [#117600](https://github.com/openclaw/openclaw/pull/117600)
- Bound and order Google realtime startup audio [#117640](https://github.com/openclaw/openclaw/pull/117640)
- Stop late audio after a realtime Talk session closes [#117682](https://github.com/openclaw/openclaw/pull/117682)
- Bound browser Talk tool calls and prevent duplicate execution [#117732](https://github.com/openclaw/openclaw/pull/117732)
- Bound Google Live tool ownership and cancellation [#117896](https://github.com/openclaw/openclaw/pull/117896)
- Execute OpenAI Realtime tools only from completed responses [#117923](https://github.com/openclaw/openclaw/pull/117923)
- Bound detached browser Talk voice-session owners [#117974](https://github.com/openclaw/openclaw/pull/117974)
- Preserve terminal voice events under backpressure [#118433](https://github.com/openclaw/openclaw/pull/118433)
- Stop stalled xAI voice sessions before playback marks grow unbounded [#119045](https://github.com/openclaw/openclaw/pull/119045)
- Start realtime voice timeout after authentication [#119131](https://github.com/openclaw/openclaw/pull/119131)
- fix(ui): prevent oversized WebRTC SDP answers from hanging Talk setup [#119295](https://github.com/openclaw/openclaw/pull/119295)
- Keep xAI voice turns running after malformed terminal output [#120002](https://github.com/openclaw/openclaw/pull/120002)
- Move realtime voice policy into Talk ownership [#122668](https://github.com/openclaw/openclaw/pull/122668)
- End failed xAI and Google voice connections cleanly [#123064](https://github.com/openclaw/openclaw/pull/123064)
- Prevent OpenAI Realtime barge-in truncation errors [#125502](https://github.com/openclaw/openclaw/pull/125502)
- Keep xAI voice interruptions within produced audio [#125612](https://github.com/openclaw/openclaw/pull/125612)
- fix(talk): keep unused speech secrets from blocking startup [#127687](https://github.com/openclaw/openclaw/pull/127687)
- fix(voice): fence realtime bridge lifecycle [#129249](https://github.com/openclaw/openclaw/pull/129249)
- fix(talk): preserve accepted work on relay detach (#121894) [87665fa](https://github.com/openclaw/openclaw/commit/87665fa)
- Preserve Unicode in voice-wake trigger limits [#103210](https://github.com/openclaw/openclaw/pull/103210)
- Stop WebRTC voice setup from hanging indefinitely [#104662](https://github.com/openclaw/openclaw/pull/104662)
- Reject malformed Talk relay audio frames [#106502](https://github.com/openclaw/openclaw/pull/106502)
- Bound retained text in browser Realtime Talk conversations [#117581](https://github.com/openclaw/openclaw/pull/117581)
- Avoid media prompts after Realtime Talk is cancelled [#117958](https://github.com/openclaw/openclaw/pull/117958)
- Bound realtime Talk relay tool-call state [#117972](https://github.com/openclaw/openclaw/pull/117972)
- fix(ui): ignore malformed realtime talk audio frames instead of throwing [#119215](https://github.com/openclaw/openclaw/pull/119215)
- Warn when browser Talk microphone uploads fall behind [#123783](https://github.com/openclaw/openclaw/pull/123783)
- fix(talk): make relay playback completion idempotent [#129818](https://github.com/openclaw/openclaw/pull/129818)

</details>

</Accordion>

<Accordion title="Models and providers">

Specific GitHub Copilot and xAI replay failures now recover without resetting the conversation. Copilot preserves valid same-run reasoning through active tool calls, and affected post-compaction or encrypted-reasoning failures receive one bounded sanitized retry under the matching transport, model family, or xAI decrypt signature.

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

**Bug fixes**

- Fix OpenAI Realtime authentication and transcription secrets [#102518](https://github.com/openclaw/openclaw/pull/102518)
- Keep interrupted Anthropic thinking from breaking session replay [#104043](https://github.com/openclaw/openclaw/pull/104043)
- Keep Codex thread bindings within plugin-state limits [#104504](https://github.com/openclaw/openclaw/pull/104504)
- Keep parent Codex sessions alive after child creation [#108042](https://github.com/openclaw/openclaw/pull/108042)
- Preserve detected MIME types for input images [#111276](https://github.com/openclaw/openclaw/pull/111276)
- Preserve Codex-bound conversations across session rotation [#112016](https://github.com/openclaw/openclaw/pull/112016)
- Make Codex session caching and benchmark parity exact [#115663](https://github.com/openclaw/openclaw/pull/115663)
- Restore Codex SQLite session continuity [#116944](https://github.com/openclaw/openclaw/pull/116944)
- Preserve Claude follow-up replies after background tasks [#119073](https://github.com/openclaw/openclaw/pull/119073)
- Prevent photo-heavy Claude turns from hitting the output cap [#119488](https://github.com/openclaw/openclaw/pull/119488)
- Preserve Codex sessions and approvals across chats [#120405](https://github.com/openclaw/openclaw/pull/120405)
- Preserve long OpenAI sessions after server compaction [#120457](https://github.com/openclaw/openclaw/pull/120457)
- Preserve Codex thread ownership across conversation and subagent lifecycles [#120740](https://github.com/openclaw/openclaw/pull/120740)
- Restore prompt caching for Claude Opus 5 and Sonnet 5 [#121283](https://github.com/openclaw/openclaw/pull/121283)
- Keep compacted OpenAI sessions usable after transcript cleanup [#123485](https://github.com/openclaw/openclaw/pull/123485)
- Preserve the real Codex answer when a coda follows [#123993](https://github.com/openclaw/openclaw/pull/123993)
- Improve Claude CLI prompt-cache reuse [#124300](https://github.com/openclaw/openclaw/pull/124300)
- Keep session context windows aligned with the active runtime [#124303](https://github.com/openclaw/openclaw/pull/124303)
- Bound Codex continuity projections when context engines are unavailable [#125324](https://github.com/openclaw/openclaw/pull/125324)
- Preserve Claude CLI conversation continuity without native transcripts [#96841](https://github.com/openclaw/openclaw/pull/96841)
- Restore compaction for Bedrock AWS SDK authentication [#103638](https://github.com/openclaw/openclaw/pull/103638)
- Preserve emoji boundaries during context pruning [#104404](https://github.com/openclaw/openclaw/pull/104404)
- Preserve UTF-16 boundaries in bootstrap context [#104423](https://github.com/openclaw/openclaw/pull/104423)
- Preserve Codex thread continuity after beta5 upgrades [#104848](https://github.com/openclaw/openclaw/pull/104848)
- Restore OpenAI OAuth models on attached cloud workers [#107791](https://github.com/openclaw/openclaw/pull/107791)
- Bound the missing-provider warning cache [#108806](https://github.com/openclaw/openclaw/pull/108806)
- Keep shared Codex clients alive for active sibling turns [#110227](https://github.com/openclaw/openclaw/pull/110227)
- Deliver bound ACP follow-up turns to external harnesses [#110261](https://github.com/openclaw/openclaw/pull/110261)
- Bound Codex session resume work and recover from temporary overloads [#110396](https://github.com/openclaw/openclaw/pull/110396)
- fix(github-copilot): preserve reasoning during tool calls [#112659](https://github.com/openclaw/openclaw/pull/112659)
- Keep adopted Claude Code chats working across turns [#113078](https://github.com/openclaw/openclaw/pull/113078)
- Preserve Claude cache during stalled session recovery [#113866](https://github.com/openclaw/openclaw/pull/113866)
- Recover Codex chats after in-place session resets [#114056](https://github.com/openclaw/openclaw/pull/114056)
- Speed up long Codex thread resumes [#114882](https://github.com/openclaw/openclaw/pull/114882)
- Preserve replacement CLI sessions during recovery [#114926](https://github.com/openclaw/openclaw/pull/114926)
- Stop offering unsupported Codex OAuth realtime sessions [#115211](https://github.com/openclaw/openclaw/pull/115211)
- Keep pre-switch reasoning removed on later replay turns [#115287](https://github.com/openclaw/openclaw/pull/115287)
- Restore sequential embedded Codex runs with stable keys [#115601](https://github.com/openclaw/openclaw/pull/115601)
- Keep custom-provider models from crashing session lists [#115713](https://github.com/openclaw/openclaw/pull/115713)
- Preserve assistant text boundaries in OpenAI-compatible replay [#115743](https://github.com/openclaw/openclaw/pull/115743)
- Preserve Claude CLI text before tool calls in final replies [#115890](https://github.com/openclaw/openclaw/pull/115890)
- Refresh local date context in long-running agent sessions [#116090](https://github.com/openclaw/openclaw/pull/116090)
- fix(codex): preserve user home default for session catalog [#116131](https://github.com/openclaw/openclaw/pull/116131)
- Keep remote Codex WebSocket sessions connected [#116135](https://github.com/openclaw/openclaw/pull/116135)
- Preserve Codex conversation continuity during concurrent reconnects [#116216](https://github.com/openclaw/openclaw/pull/116216)
- Show /new guidance for thinking-signature replay failures [#116987](https://github.com/openclaw/openclaw/pull/116987)
- Limit gateway response attachments to the active turn [#120742](https://github.com/openclaw/openclaw/pull/120742)
- Clear stale OpenAI replay checkpoints after transcript rewrites [#120786](https://github.com/openclaw/openclaw/pull/120786)
- Stabilize Claude CLI live-session lifecycle [#121566](https://github.com/openclaw/openclaw/pull/121566)
- fix(acp): avoid resending described images [#122041](https://github.com/openclaw/openclaw/pull/122041)
- Resume OpenAI Responses sessions from compaction-only checkpoints [#122519](https://github.com/openclaw/openclaw/pull/122519)
- Keep Responses sessions usable with malformed reasoning history [#123228](https://github.com/openclaw/openclaw/pull/123228)
- Recover OpenAI turns after rejected compaction [#123398](https://github.com/openclaw/openclaw/pull/123398)
- Preserve context usage across resumed Codex sessions [#124969](https://github.com/openclaw/openclaw/pull/124969)
- Preserve retained user turns after OpenAI Responses compaction [#124974](https://github.com/openclaw/openclaw/pull/124974)
- fix(copilot): Claude models stop replying after auto-compaction [#125015](https://github.com/openclaw/openclaw/pull/125015)
- Start OpenAI Responses compaction within the active context budget [#125342](https://github.com/openclaw/openclaw/pull/125342)
- Keep Claude CLI subagent activity out of the parent turn [#125621](https://github.com/openclaw/openclaw/pull/125621)
- Preserve final replies after Copilot BYOK tool turns [#126097](https://github.com/openclaw/openclaw/pull/126097)
- fix(claude): preserve partial output on aborted live turns [#126883](https://github.com/openclaw/openclaw/pull/126883)
- Preserve compaction-only replay checkpoints [#127106](https://github.com/openclaw/openclaw/pull/127106)
- fix(agents): preserve valid CLI session bindings [#128732](https://github.com/openclaw/openclaw/pull/128732)
- fix(anthropic): keep Agent SDK session warm after first turn [#128985](https://github.com/openclaw/openclaw/pull/128985)
- fix(providers): recover conversations after encrypted reasoning stream rejection [#129886](https://github.com/openclaw/openclaw/pull/129886)
- fix(agents): route CLI bootstrap truncation notice into the system prompt [#130325](https://github.com/openclaw/openclaw/pull/130325)
- fix(agents): preserve admitted CLI session context [#130475](https://github.com/openclaw/openclaw/pull/130475)
- fix(codex): prevent stale resumes from disrupting shared sessions [#130701](https://github.com/openclaw/openclaw/pull/130701)
- fix(codex): clean up subscriptions after failed thread resumes [#130862](https://github.com/openclaw/openclaw/pull/130862)
- Preserve real replies after Claude CLI resume placeholders [#90799](https://github.com/openclaw/openclaw/pull/90799)
- Prevent stale GitHub Copilot reasoning data from breaking later turns [#95493](https://github.com/openclaw/openclaw/pull/95493)
- Keep compaction on the model selected for the live session [#95713](https://github.com/openclaw/openclaw/pull/95713)
- Recover xAI/Grok turns from stale encrypted reasoning replay [#97926](https://github.com/openclaw/openclaw/pull/97926)
- Clarify rejected API keys in Realtime Talk [#102461](https://github.com/openclaw/openclaw/pull/102461)
- Extend indexed-access safety across core packages [#104626](https://github.com/openclaw/openclaw/pull/104626)
- Give clear guidance when GPT-Live voice models are unsupported [#104695](https://github.com/openclaw/openclaw/pull/104695)
- Apply provider defaults to explicit video entries [#108396](https://github.com/openclaw/openclaw/pull/108396)
- Release failed Chutes userinfo connections [#109677](https://github.com/openclaw/openclaw/pull/109677)
- Reject malformed UTF-8 in proxy gateway error responses [#111852](https://github.com/openclaw/openclaw/pull/111852)
- Preserve tool results when replay IDs contain whitespace [#111864](https://github.com/openclaw/openclaw/pull/111864)
- Clarify malformed image errors in Amazon Bedrock [#111872](https://github.com/openclaw/openclaw/pull/111872)
- Reject malformed active image inputs before agent dispatch [#116883](https://github.com/openclaw/openclaw/pull/116883)
- Keep image compression pinned to the admitted plugin generation [#125182](https://github.com/openclaw/openclaw/pull/125182)

</details>

</Accordion>

<Accordion title="Speech and media providers">

Across the affected shared and OpenAI transcription paths, repeated short-lived connections now back off and stop at the configured retry limit, OpenAI turns stay in order, more eligible final words survive microphone close, and a large backlog keeps the newest audio so the session remains responsive.

Local CLI text-to-speech now caps output memory, handles a broken audio stream safely, and preserves a valid output file when only unused stdout fails. Output metadata from Local CLI and ElevenLabs also reports the audio format that was actually produced.

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

**Bug fixes**

- Move official OpenRouter image generation to the Images API [#101367](https://github.com/openclaw/openclaw/pull/101367)
- Wait for realtime providers to accept Talk tool results [#103268](https://github.com/openclaw/openclaw/pull/103268)
- Accept URL-safe Base64 from Google media providers [#116204](https://github.com/openclaw/openclaw/pull/116204)
- Restore Google media features when the base URL is blank [#116852](https://github.com/openclaw/openclaw/pull/116852)
- Preserve realtime transcripts and final tool arguments [#116891](https://github.com/openclaw/openclaw/pull/116891)
- Restore transcription for locally stored inbound media [#117268](https://github.com/openclaw/openclaw/pull/117268)
- Harden Qwen and Alibaba Wan video generation [#117303](https://github.com/openclaw/openclaw/pull/117303)
- Keep generated media alive until active chat runs finish [#119764](https://github.com/openclaw/openclaw/pull/119764)
- Keep TTS status checks from blocking Gateway fanout [#119788](https://github.com/openclaw/openclaw/pull/119788)
- Restore implicit Codex image routing after provider folding [ea0fe35](https://github.com/openclaw/openclaw/commit/ea0fe35)
- Bound OpenRouter music stream memory use [#101488](https://github.com/openclaw/openclaw/pull/101488)
- Stop endless reconnect loops in realtime transcription [#102348](https://github.com/openclaw/openclaw/pull/102348)
- Send unsupported image formats safely to Anthropic [#102537](https://github.com/openclaw/openclaw/pull/102537)
- Bound stalled voice-list requests across speech providers [#102865](https://github.com/openclaw/openclaw/pull/102865)
- Bound stalled voice-provider JSON requests to 30 seconds [#102884](https://github.com/openclaw/openclaw/pull/102884)
- Prevent stalled fal image downloads from hanging indefinitely [#103071](https://github.com/openclaw/openclaw/pull/103071)
- Align xAI image and video capability contracts [#103384](https://github.com/openclaw/openclaw/pull/103384)
- Detect media types from percent-encoded URL filenames [#103410](https://github.com/openclaw/openclaw/pull/103410)
- Make xAI batch transcription model-less [#103419](https://github.com/openclaw/openclaw/pull/103419)
- Verify local speech-to-text acceleration before prioritizing it [#104210](https://github.com/openclaw/openclaw/pull/104210)
- Reject malformed ElevenLabs endpoint overrides safely [#105163](https://github.com/openclaw/openclaw/pull/105163)
- Validate Deepgram realtime custom endpoints [#105334](https://github.com/openclaw/openclaw/pull/105334)
- Prevent OpenAI image requests from crashing before model catalogs load [#105518](https://github.com/openclaw/openclaw/pull/105518)
- Keep Vydra media requests on configured transport policy [#105884](https://github.com/openclaw/openclaw/pull/105884)
- Preserve host-staged images for native vision [#106416](https://github.com/openclaw/openclaw/pull/106416)
- Detect media types from upload contents [#107863](https://github.com/openclaw/openclaw/pull/107863)
- OpenAI realtime voice closes promptly during reconnects [#108209](https://github.com/openclaw/openclaw/pull/108209)
- Treat blank OpenAI speech keys as missing [#108212](https://github.com/openclaw/openclaw/pull/108212)
- Reject blank Xiaomi speech API keys locally [#108558](https://github.com/openclaw/openclaw/pull/108558)
- Keep TTS selection working with invalid provider configuration [#108569](https://github.com/openclaw/openclaw/pull/108569)
- Transcribe voice notes in native harness sessions [#108714](https://github.com/openclaw/openclaw/pull/108714)
- Transcribe filename-only audio in native harness sessions [#108765](https://github.com/openclaw/openclaw/pull/108765)
- Reject blank Gradium API keys before speech requests [#108800](https://github.com/openclaw/openclaw/pull/108800)
- Reject blank speech-provider credentials consistently [#109051](https://github.com/openclaw/openclaw/pull/109051)
- Stop slow Vydra media downloads from hanging forever [#109210](https://github.com/openclaw/openclaw/pull/109210)
- Bound stalled DashScope video downloads [#109394](https://github.com/openclaw/openclaw/pull/109394)
- Stop oversized ElevenLabs streaming audio [#109621](https://github.com/openclaw/openclaw/pull/109621)
- Prevent duplicate generated-image deliveries [#110366](https://github.com/openclaw/openclaw/pull/110366)
- Preserve Vydra HTTP details when error bodies break [#110478](https://github.com/openclaw/openclaw/pull/110478)
- Clean up spoken replies and avoid narrating code-heavy responses [#110948](https://github.com/openclaw/openclaw/pull/110948)
- Recognize ambiguous M4A voice files as audio [#111177](https://github.com/openclaw/openclaw/pull/111177)
- Reject malformed Codex image Base64 [#111235](https://github.com/openclaw/openclaw/pull/111235)
- Use structured media facts for inbound audio detection [#111315](https://github.com/openclaw/openclaw/pull/111315)
- Reject invalid xAI realtime tool arguments [#111730](https://github.com/openclaw/openclaw/pull/111730)
- Keep media persistence and CLI templates aligned per attachment [#112545](https://github.com/openclaw/openclaw/pull/112545)
- Preserve OpenAI realtime transcript order [#113723](https://github.com/openclaw/openclaw/pull/113723)
- Reject malformed audio from media providers [#114041](https://github.com/openclaw/openclaw/pull/114041)
- Reject malformed provider media and embedding payloads [#114514](https://github.com/openclaw/openclaw/pull/114514)
- Surface OpenAI realtime setup errors promptly [#115582](https://github.com/openclaw/openclaw/pull/115582)
- Keep generated speech in the media store [#115647](https://github.com/openclaw/openclaw/pull/115647)
- Bound OpenAI realtime voice startup data [#116224](https://github.com/openclaw/openclaw/pull/116224)
- Bound queued realtime audio and clear it on close [#116230](https://github.com/openclaw/openclaw/pull/116230)
- Discard cancelled pre-connect OpenAI voice audio [#116735](https://github.com/openclaw/openclaw/pull/116735)
- Recognize AIFF variants across audio workflows [#116907](https://github.com/openclaw/openclaw/pull/116907)
- Fix Together video outcomes and image inputs [#116913](https://github.com/openclaw/openclaw/pull/116913)
- Preserve OpenAI video terminal results and valid edit fields [#116917](https://github.com/openclaw/openclaw/pull/116917)
- Preserve media orientation, formats, and filenames [#116928](https://github.com/openclaw/openclaw/pull/116928)
- Keep realtime transcription responsive during backlogs [#116935](https://github.com/openclaw/openclaw/pull/116935)
- Fix OpenAI Sora multipart video submissions [#116995](https://github.com/openclaw/openclaw/pull/116995)
- Make Codex image streams fail and complete reliably [#116999](https://github.com/openclaw/openclaw/pull/116999)
- Preserve queued OpenAI realtime audio frames [#117028](https://github.com/openclaw/openclaw/pull/117028)
- Preserve Gateway microphone audio during OpenAI peer startup [#117057](https://github.com/openclaw/openclaw/pull/117057)
- Bound unfinished Google Live transcripts [#117179](https://github.com/openclaw/openclaw/pull/117179)
- Bound Mistral realtime transcript growth [#117190](https://github.com/openclaw/openclaw/pull/117190)
- Reject malformed or incomplete MiniMax audio responses [#117195](https://github.com/openclaw/openclaw/pull/117195)
- Validate OpenAI video downloads before delivery [#117227](https://github.com/openclaw/openclaw/pull/117227)
- Reject malformed generated media downloads [#117281](https://github.com/openclaw/openclaw/pull/117281)
- Honor configured OpenRouter image request transport [#117336](https://github.com/openclaw/openclaw/pull/117336)
- Reject malformed text-to-speech responses [#117345](https://github.com/openclaw/openclaw/pull/117345)
- Isolate reconnecting transcription sessions [#117592](https://github.com/openclaw/openclaw/pull/117592)
- Preserve opening speech while GPT-Live starts [#117604](https://github.com/openclaw/openclaw/pull/117604)
- Keep Deepgram voice turns from ending mid-sentence [#117663](https://github.com/openclaw/openclaw/pull/117663)
- Fix Fal aspect ratios for Krea and Nano Banana 2 [#117784](https://github.com/openclaw/openclaw/pull/117784)
- Fall back when media providers return empty assets [#117875](https://github.com/openclaw/openclaw/pull/117875)
- Prevent incomplete hosted video downloads from replacing valid output [#117893](https://github.com/openclaw/openclaw/pull/117893)
- Preserve generated media files when writes fail [#117934](https://github.com/openclaw/openclaw/pull/117934)
- Preserve existing TTS output when copying fails [#117962](https://github.com/openclaw/openclaw/pull/117962)
- Bound stalled realtime transcription buffers [#118109](https://github.com/openclaw/openclaw/pull/118109)
- Reset OpenAI realtime voice bridges cleanly between sessions [#118136](https://github.com/openclaw/openclaw/pull/118136)
- Bound OpenAI realtime transcription session state [#118204](https://github.com/openclaw/openclaw/pull/118204)
- Restore image editing through LiteLLM proxies [#118562](https://github.com/openclaw/openclaw/pull/118562)
- Use configured media fallbacks after empty provider output [#118660](https://github.com/openclaw/openclaw/pull/118660)
- Preserve final words in OpenAI realtime transcription [#118782](https://github.com/openclaw/openclaw/pull/118782)
- Enforce limits on every OpenAI realtime final transcript [#118928](https://github.com/openclaw/openclaw/pull/118928)
- Stop malformed video downloads hanging under debug capture [#119257](https://github.com/openclaw/openclaw/pull/119257)
- Roll back partial image, music, and video batches [#119292](https://github.com/openclaw/openclaw/pull/119292)
- Return Comfy SaveVideo outputs without still images [#119543](https://github.com/openclaw/openclaw/pull/119543)
- Surface ElevenLabs realtime transcription failures [#120772](https://github.com/openclaw/openclaw/pull/120772)
- Keep realtime voice tool results retryable after delivery failures [#120776](https://github.com/openclaw/openclaw/pull/120776)
- Preserve repeated speech turns in ElevenLabs transcripts [#120792](https://github.com/openclaw/openclaw/pull/120792)
- Bound GPT-Live audio work and preserve workspace lock ownership [#120911](https://github.com/openclaw/openclaw/pull/120911)
- Prevent truncated streamed media files [#123590](https://github.com/openclaw/openclaw/pull/123590)
- Discover installed whisper.cpp models [#124699](https://github.com/openclaw/openclaw/pull/124699)
- Surface attachment and media processing failures [#125562](https://github.com/openclaw/openclaw/pull/125562)
- Keep local and ElevenLabs TTS audio formats truthful [#125628](https://github.com/openclaw/openclaw/pull/125628)
- Enable Runway and Alibaba video-provider authentication [#126722](https://github.com/openclaw/openclaw/pull/126722)
- fix(media): convert multi-frame HEIC and HEIF photos for image providers [#128501](https://github.com/openclaw/openclaw/pull/128501)
- fix(media): enforce generation model and reference limits [#129591](https://github.com/openclaw/openclaw/pull/129591)
- fix(media): keep failure markers visible in audio-only processing [#130869](https://github.com/openclaw/openclaw/pull/130869)
- fix(media): bound local reads and invalidate cleaned attachment paths [#130885](https://github.com/openclaw/openclaw/pull/130885)
- Trust known CLI transcript files [#87393](https://github.com/openclaw/openclaw/pull/87393)
- Preserve local TTS file output when stdout errors [45d15aa](https://github.com/openclaw/openclaw/commit/45d15aa)
- Keep media file-store keys consistent across operating systems [cf432ec](https://github.com/openclaw/openclaw/commit/cf432ec)
- Bound Local CLI TTS output memory [#101510](https://github.com/openclaw/openclaw/pull/101510)
- Apply OpenRouter request policy to video catalogs [#102062](https://github.com/openclaw/openclaw/pull/102062)
- Handle Local CLI TTS stream failures safely [#102347](https://github.com/openclaw/openclaw/pull/102347)
- Keep Inworld TTS error previews valid Unicode [#102608](https://github.com/openclaw/openclaw/pull/102608)
- Keep OpenAI image auth logs valid Unicode [#102611](https://github.com/openclaw/openclaw/pull/102611)
- Keep large attached-file text UTF-16 safe [#102634](https://github.com/openclaw/openclaw/pull/102634)
- Bound stalled OpenAI Realtime setup requests [#102860](https://github.com/openclaw/openclaw/pull/102860)
- Add a bounded timeout to Inworld voice discovery [#102965](https://github.com/openclaw/openclaw/pull/102965)
- Bound Azure Speech voice discovery requests [#102984](https://github.com/openclaw/openclaw/pull/102984)
- Retry transient Google Lyria no-audio responses [#103326](https://github.com/openclaw/openclaw/pull/103326)
- Accept local file URLs for managed outgoing images [#103540](https://github.com/openclaw/openclaw/pull/103540)
- Stop transcript capture when a canceled run is still starting [#104123](https://github.com/openclaw/openclaw/pull/104123)
- Apply OpenRouter request policy to music generation [#104835](https://github.com/openclaw/openclaw/pull/104835)
- Preserve remote attachment filename prefixes [#105547](https://github.com/openclaw/openclaw/pull/105547)
- Fix cross-platform local media extension parsing [#105614](https://github.com/openclaw/openclaw/pull/105614)
- Prevent Logbook from storing malformed snapshot images [#106473](https://github.com/openclaw/openclaw/pull/106473)
- Skip invalid Gradium configurations safely [#108551](https://github.com/openclaw/openclaw/pull/108551)
- Ignore blank Vydra speech API keys [#108757](https://github.com/openclaw/openclaw/pull/108757)
- Ignore blank MiniMax speech API keys [#108777](https://github.com/openclaw/openclaw/pull/108777)
- Treat blank Inworld API keys as unconfigured [#108783](https://github.com/openclaw/openclaw/pull/108783)
- Reject blank ElevenLabs realtime transcription keys [#108916](https://github.com/openclaw/openclaw/pull/108916)
- Ignore blank xAI audio API keys [#108953](https://github.com/openclaw/openclaw/pull/108953)
- Centralize TTS request preparation for Discord and voice calls [#109640](https://github.com/openclaw/openclaw/pull/109640)
- Keep valid Microsoft voices when catalog rows are malformed [#110784](https://github.com/openclaw/openclaw/pull/110784)
- Preserve completed OpenRouter music when cleanup fails [#111056](https://github.com/openclaw/openclaw/pull/111056)
- Normalize mixed-case MIME headers in media storage [#111184](https://github.com/openclaw/openclaw/pull/111184)
- Reject malformed Inworld TTS audio [#111197](https://github.com/openclaw/openclaw/pull/111197)
- Reject malformed xAI streamed audio [#111201](https://github.com/openclaw/openclaw/pull/111201)
- OpenRouter keeps valid video models when catalog rows are malformed [#111637](https://github.com/openclaw/openclaw/pull/111637)
- Preserve offloaded images in Copilot sessions and restore Telegram release QA [#112972](https://github.com/openclaw/openclaw/pull/112972)
- Reject malformed Xiaomi TTS audio [#113106](https://github.com/openclaw/openclaw/pull/113106)
- Reject malformed Volcengine TTS audio payloads [#113109](https://github.com/openclaw/openclaw/pull/113109)
- Preserve valid Azure voices in malformed catalogs [#115067](https://github.com/openclaw/openclaw/pull/115067)
- Reject malformed Google video-operation JSON consistently [#115465](https://github.com/openclaw/openclaw/pull/115465)
- Prevent duplicate Mistral realtime transcripts [#116774](https://github.com/openclaw/openclaw/pull/116774)
- Accept OpenRouter in-progress video jobs [#116986](https://github.com/openclaw/openclaw/pull/116986)
- Clean media CLI scratch data after setup failures [#117716](https://github.com/openclaw/openclaw/pull/117716)
- Preserve GPT-Live relay error outcomes during teardown [#117978](https://github.com/openclaw/openclaw/pull/117978)
- Support the current OpenAI speech model snapshot [#118475](https://github.com/openclaw/openclaw/pull/118475)
- Apply configured language to CLI audio transcription [#118501](https://github.com/openclaw/openclaw/pull/118501)
- Enforce playback cache retention by default [#119417](https://github.com/openclaw/openclaw/pull/119417)
- Release sockets after malformed provider media responses [#120351](https://github.com/openclaw/openclaw/pull/120351)
- Reset Mistral transcription state after reconnect [#120813](https://github.com/openclaw/openclaw/pull/120813)
- Honor request timeouts for Comfy music generation [#123444](https://github.com/openclaw/openclaw/pull/123444)
- Classify real TTS provider timeouts correctly [#125530](https://github.com/openclaw/openclaw/pull/125530)
- fix(media): restore attachment playback after host clock rollback [#128363](https://github.com/openclaw/openclaw/pull/128363)
- fix(audio): discover installed Windows transcription tools with mixed-case Path [#129235](https://github.com/openclaw/openclaw/pull/129235)
- fix(xai): preserve transcription audio on reopen [#130297](https://github.com/openclaw/openclaw/pull/130297)
- Report OpenRouter image capability errors correctly [#99079](https://github.com/openclaw/openclaw/pull/99079)

</details>

</Accordion>

<Accordion title="Command line and diagnostics">

Doctor now stops a stale build before repair, safely migrates the covered legacy agent databases without following unrelated state, and gives operators a concrete recovery path when the shared database is corrupt. Corrupt shared state is diagnosed and left unchanged for manual restoration or repair.

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

**Bug fixes**

- Exit nonzero when Gateway agent runs do not complete [#111126](https://github.com/openclaw/openclaw/pull/111126)
- Make read-only SQLite diagnostics journal-aware [#113404](https://github.com/openclaw/openclaw/pull/113404)
- Keep Doctor SQLite migration and recovery consistent [#114694](https://github.com/openclaw/openclaw/pull/114694)
- Preserve paired-node connections and local inference boundaries [#114857](https://github.com/openclaw/openclaw/pull/114857)
- Repair headerless session transcripts with doctor [#115080](https://github.com/openclaw/openclaw/pull/115080)
- Doctor safely repairs legacy state in reused sandbox workspaces [#115784](https://github.com/openclaw/openclaw/pull/115784)
- Repair duplicate session identities with doctor [#116703](https://github.com/openclaw/openclaw/pull/116703)
- Prevent Doctor restore from replacing a valid session index with an empty archive [#117221](https://github.com/openclaw/openclaw/pull/117221)
- Unify environment, path, and cancellation semantics [#120359](https://github.com/openclaw/openclaw/pull/120359)
- Keep targeted config writes from migrating unrelated state [#120451](https://github.com/openclaw/openclaw/pull/120451)
- Keep node and device CLI RPCs off writable shared state [#123674](https://github.com/openclaw/openclaw/pull/123674)
- Keep status commands off shared-state writes [#124142](https://github.com/openclaw/openclaw/pull/124142)
- Keep Gateway diagnostics from mutating shared state [#125178](https://github.com/openclaw/openclaw/pull/125178)
- Recover recreated legacy workspace state with Doctor [#126059](https://github.com/openclaw/openclaw/pull/126059)
- Restore CLI defaults for explicit multi-agent rosters [#126418](https://github.com/openclaw/openclaw/pull/126418)
- fix(doctor): scan all configured agent session stores [#130895](https://github.com/openclaw/openclaw/pull/130895)
- fix(doctor): bound recovered session migrations (#126265) [d06c0b8](https://github.com/openclaw/openclaw/commit/d06c0b8)
- Show conversation usage in `/context map` [#102633](https://github.com/openclaw/openclaw/pull/102633)
- Keep truncated Unicode text valid across OpenClaw surfaces [#102823](https://github.com/openclaw/openclaw/pull/102823)
- Stop stalled node camera downloads from hanging forever [#103266](https://github.com/openclaw/openclaw/pull/103266)
- Preserve PATH when ClawDock is sourced in zsh [#103805](https://github.com/openclaw/openclaw/pull/103805)
- Show task-registry restore errors in console output [#103976](https://github.com/openclaw/openclaw/pull/103976)
- Stop healthy local audio checks from failing Doctor [#104237](https://github.com/openclaw/openclaw/pull/104237)
- Register the local audio check in OpenClaw Doctor [#104242](https://github.com/openclaw/openclaw/pull/104242)
- Restore local audio information in OpenClaw Doctor [#104281](https://github.com/openclaw/openclaw/pull/104281)
- Unify CLI tool timeout and cancellation diagnostics [#104319](https://github.com/openclaw/openclaw/pull/104319)
- Preserve consistent details in error messages [#105927](https://github.com/openclaw/openclaw/pull/105927)
- Let doctor migrate legacy operator approvals [#108203](https://github.com/openclaw/openclaw/pull/108203)
- Bound stalled container inspection probes [#109199](https://github.com/openclaw/openclaw/pull/109199)
- Repair migrated transcript paths across short filesystem reads [#109400](https://github.com/openclaw/openclaw/pull/109400)
- Keep pure-read CLI commands out of writable database lifecycles [#110732](https://github.com/openclaw/openclaw/pull/110732)
- Stop identity updates from creating unknown agents [#111268](https://github.com/openclaw/openclaw/pull/111268)
- Reject malformed UTF-8 in docs search results [#111288](https://github.com/openclaw/openclaw/pull/111288)
- Report real SQLite paths and current build SHAs in CLI output [#111659](https://github.com/openclaw/openclaw/pull/111659)
- Preserve configured agents across runtime overrides [#113146](https://github.com/openclaw/openclaw/pull/113146)
- Restore plain `agent exec` output to stdout [#114043](https://github.com/openclaw/openclaw/pull/114043)
- Honor backpressure in debug proxy responses [#114076](https://github.com/openclaw/openclaw/pull/114076)
- Keep remote Gateway calls read-only [#115664](https://github.com/openclaw/openclaw/pull/115664)
- Return failure status for incomplete MCP probes [#116664](https://github.com/openclaw/openclaw/pull/116664)
- Report web capability provider failures correctly [#116674](https://github.com/openclaw/openclaw/pull/116674)
- Keep Doctor-repaired session rows readable [#117207](https://github.com/openclaw/openclaw/pull/117207)
- Honor parent options across task CLI commands [#117528](https://github.com/openclaw/openclaw/pull/117528)
- Make commitment dismissal atomic and truthful [#117591](https://github.com/openclaw/openclaw/pull/117591)
- Stop stale Doctor builds before unsafe repair guidance [#117913](https://github.com/openclaw/openclaw/pull/117913)
- Restore current assistant context in stuck-session diagnostics [#117945](https://github.com/openclaw/openclaw/pull/117945)
- Warn when Linux node services will stop after logout [#118430](https://github.com/openclaw/openclaw/pull/118430)
- Honor explicit Doctor-only migration repairs [#118700](https://github.com/openclaw/openclaw/pull/118700)
- Refresh live session caches after Doctor repairs [#118766](https://github.com/openclaw/openclaw/pull/118766)
- Recover exec after Doctor migration without restart [#118769](https://github.com/openclaw/openclaw/pull/118769)
- Align TaskFlow columns for Unicode controller names [#118801](https://github.com/openclaw/openclaw/pull/118801)
- Release stalled response cleanup under debug capture [#119706](https://github.com/openclaw/openclaw/pull/119706)
- Report accurate totals for filtered node lists [#119744](https://github.com/openclaw/openclaw/pull/119744)
- Recover legacy agent databases safely with doctor [#120906](https://github.com/openclaw/openclaw/pull/120906)
- Write valid image defaults during Microsoft Foundry setup [#121370](https://github.com/openclaw/openclaw/pull/121370)
- Preserve camera outputs on failed downloads [#122550](https://github.com/openclaw/openclaw/pull/122550)
- Repair legacy multi-agent roster upgrades [#123027](https://github.com/openclaw/openclaw/pull/123027)
- Preserve cron ownership during legacy multi-agent upgrades [#123372](https://github.com/openclaw/openclaw/pull/123372)
- Make Fal image generation work immediately after onboarding [#123447](https://github.com/openclaw/openclaw/pull/123447)
- Keep migrated agents on their existing workspace [#123808](https://github.com/openclaw/openclaw/pull/123808)
- Restore owner-safe multi-agent status commands [#123826](https://github.com/openclaw/openclaw/pull/123826)
- Keep explicit agent fleets ownerless in diagnostics [#123831](https://github.com/openclaw/openclaw/pull/123831)
- Preserve explicit agent targets in read-only CLI commands [#123868](https://github.com/openclaw/openclaw/pull/123868)
- Add explicit agent ownership to Policy CLI commands [#123880](https://github.com/openclaw/openclaw/pull/123880)
- Report physical SQLite session-store paths in diagnostics [#124102](https://github.com/openclaw/openclaw/pull/124102)
- Unblock the macOS computer-use rig and restore node details [#124536](https://github.com/openclaw/openclaw/pull/124536)
- Warn about malformed final records during transcript migration [#124977](https://github.com/openclaw/openclaw/pull/124977)
- Warn about unusable Crabbox cloud worker profiles before dispatch [#124995](https://github.com/openclaw/openclaw/pull/124995)
- Keep offline Gateway commands from changing shared state [#125102](https://github.com/openclaw/openclaw/pull/125102)
- Preserve pairing migration ownership during multi-agent updates [#125417](https://github.com/openclaw/openclaw/pull/125417)
- Preserve customized workspaces after setup-state migration [#125435](https://github.com/openclaw/openclaw/pull/125435)
- Return a failing exit code for failed agent turns [#125557](https://github.com/openclaw/openclaw/pull/125557)
- Repair stale Crabbox cloud-worker profiles [#125991](https://github.com/openclaw/openclaw/pull/125991)
- Preserve managed checkouts shared by multiple projects [#126004](https://github.com/openclaw/openclaw/pull/126004)
- Report native project instruction usage as unverified [#126010](https://github.com/openclaw/openclaw/pull/126010)
- Bound Doctor session-entry repairs for large stores [#126353](https://github.com/openclaw/openclaw/pull/126353)
- Stop false legacy-session warnings on clean multi-agent fleets [#126551](https://github.com/openclaw/openclaw/pull/126551)
- Doctor repairs markerless legacy multi-agent rosters [#126595](https://github.com/openclaw/openclaw/pull/126595)
- Preserve live node inventory failures [#126609](https://github.com/openclaw/openclaw/pull/126609)
- Enable CLI authentication for media-only providers [#126711](https://github.com/openclaw/openclaw/pull/126711)
- Give Doctor an actionable state-database error [#126985](https://github.com/openclaw/openclaw/pull/126985)
- fix(sessions): show collaboration details in CLI [#128035](https://github.com/openclaw/openclaw/pull/128035)
- fix: clarify cloud dispatch and heartbeat timeout diagnostics [#128434](https://github.com/openclaw/openclaw/pull/128434)
- fix(cli): print inference results alongside input paths [#128523](https://github.com/openclaw/openclaw/pull/128523)
- fix(doctor): bound media migration session scans [#128816](https://github.com/openclaw/openclaw/pull/128816)
- fix(crabbox): preserve terminal provider errors [#129020](https://github.com/openclaw/openclaw/pull/129020)
- fix(cli): validate node options before contacting the Gateway [#130352](https://github.com/openclaw/openclaw/pull/130352)
- fix(crabbox): keep the setup failure reason and name its phase [#130425](https://github.com/openclaw/openclaw/pull/130425)
- fix(device-pair): verify retained subscribers before archiving the migration source [#131008](https://github.com/openclaw/openclaw/pull/131008)
- Propagate web provider failures through the capability CLI [5df1957](https://github.com/openclaw/openclaw/commit/5df1957)
- Keep context-overflow diagnostics valid Unicode [#102618](https://github.com/openclaw/openclaw/pull/102618)
- Keep session key tables Unicode-safe [#103010](https://github.com/openclaw/openclaw/pull/103010)
- Reject unsafe byte-size values instead of silently rounding them [#103100](https://github.com/openclaw/openclaw/pull/103100)
- Keep truncated cron-list Unicode characters intact [#103616](https://github.com/openclaw/openclaw/pull/103616)
- Preserve caller shell variables during ClawDock setup [#103837](https://github.com/openclaw/openclaw/pull/103837)
- Reject malformed node camera and screen media payloads [#104414](https://github.com/openclaw/openclaw/pull/104414)
- Preserve emoji boundaries in Crabbox error details [#104612](https://github.com/openclaw/openclaw/pull/104612)
- Reject hexadecimal Fleet CPU limits at the CLI boundary [#105158](https://github.com/openclaw/openclaw/pull/105158)
- Reject noncanonical trajectory export request encodings [#105557](https://github.com/openclaw/openclaw/pull/105557)
- Resolve identity files from the selected agent workspace [#106087](https://github.com/openclaw/openclaw/pull/106087)
- Keep CLI and Skill Workshop truncation emoji-safe [#106370](https://github.com/openclaw/openclaw/pull/106370)
- Reject non-decimal Workspaces grid coordinates [#107478](https://github.com/openclaw/openclaw/pull/107478)
- Preserve small proxy-capture bodies with malformed lengths [#108292](https://github.com/openclaw/openclaw/pull/108292)
- Bound the legacy crontab check in doctor [#109107](https://github.com/openclaw/openclaw/pull/109107)
- Reject retired audio transcription settings and preserve migration [#109226](https://github.com/openclaw/openclaw/pull/109226)
- Time out stalled debug-proxy CONNECT openings [#109269](https://github.com/openclaw/openclaw/pull/109269)
- Preserve emoji in shortened Bash session identifiers [#109468](https://github.com/openclaw/openclaw/pull/109468)
- Preserve legacy ACP replay state during Doctor repair [#109685](https://github.com/openclaw/openclaw/pull/109685)
- Bound Doctor scans of large heartbeat session transcripts [#110721](https://github.com/openclaw/openclaw/pull/110721)
- Report fallback session changes in CLI JSON output [#111645](https://github.com/openclaw/openclaw/pull/111645)
- Honor explicit timeouts for local agent runs [#114621](https://github.com/openclaw/openclaw/pull/114621)
- Make Doctor persist repaired default-agent rosters [#117115](https://github.com/openclaw/openclaw/pull/117115)
- Align session cleanup summaries for emoji and CJK labels [#117459](https://github.com/openclaw/openclaw/pull/117459)
- Stop completed TaskFlow cancellations from inflating pending pressure [#117714](https://github.com/openclaw/openclaw/pull/117714)
- Return failure when APNs rejects a nodes push test [#117737](https://github.com/openclaw/openclaw/pull/117737)
- Stop Doctor from requiring obsolete transcripts for SQLite sessions [#119940](https://github.com/openclaw/openclaw/pull/119940)
- Recover terminal NUL tails in archived session JSONL [#120041](https://github.com/openclaw/openclaw/pull/120041)
- Validate Gmail webhook Tailscale modes early [#120272](https://github.com/openclaw/openclaw/pull/120272)
- Use the node's default camera for unflagged snaps [#120430](https://github.com/openclaw/openclaw/pull/120430)
- Publish Browser snapshot files atomically [#122327](https://github.com/openclaw/openclaw/pull/122327)
- Allow adding agents while the local Gateway is running [#123490](https://github.com/openclaw/openclaw/pull/123490)
- Prevent truncated camera files after short filesystem writes [#123736](https://github.com/openclaw/openclaw/pull/123736)
- CLI errors name the supported agent selectors [#124018](https://github.com/openclaw/openclaw/pull/124018)
- Make node status filters accurate and permission-safe [#124348](https://github.com/openclaw/openclaw/pull/124348)
- Reject invalid explicit session-store targets [#124515](https://github.com/openclaw/openclaw/pull/124515)
- Restore the main agent roster for configless exec [#124805](https://github.com/openclaw/openclaw/pull/124805)
- fix(cli): let nested agent exec --timeout override the parent flag [#125256](https://github.com/openclaw/openclaw/pull/125256)
- Show recovery guidance for unreachable Gateway commands [#125556](https://github.com/openclaw/openclaw/pull/125556)
- Explain an empty MCP probe [#125611](https://github.com/openclaw/openclaw/pull/125611)
- Return failure for duplicate in-flight agent runs [#125757](https://github.com/openclaw/openclaw/pull/125757)
- Honor `--agent` during legacy state migration [#125948](https://github.com/openclaw/openclaw/pull/125948)
- Warn when New Chat preserves a managed worktree [#126771](https://github.com/openclaw/openclaw/pull/126771)
- Preserve recorded session identity in CLI lists [#126921](https://github.com/openclaw/openclaw/pull/126921)
- Return machine-readable errors for invalid Nodes CLI input [#127223](https://github.com/openclaw/openclaw/pull/127223)
- fix(cli): return JSON for session validation failures [#128224](https://github.com/openclaw/openclaw/pull/128224)
- fix(cli): honor selected agent when inspecting audio providers [#128292](https://github.com/openclaw/openclaw/pull/128292)
- fix(cli): return JSON for sessions list failures [#128316](https://github.com/openclaw/openclaw/pull/128316)
- fix(cli): emit JSON for trajectory export failures [#128351](https://github.com/openclaw/openclaw/pull/128351)
- fix(cli): report container launch failures instead of exit 1 [#128406](https://github.com/openclaw/openclaw/pull/128406)
- fix(cli): reject nonexistent transcript summary paths [#128589](https://github.com/openclaw/openclaw/pull/128589)
- fix: status checks exceed CPU limit after SQLite lock hardening [#128884](https://github.com/openclaw/openclaw/pull/128884)
- fix(flows): failed and waiting workflows appear healthy [#129156](https://github.com/openclaw/openclaw/pull/129156)
- fix(doctor): cron migration ignores agents.defaults.systemAgent under explicit ownership [AI-assisted] [#130190](https://github.com/openclaw/openclaw/pull/130190)
- fix(cli): reject missing repeatable inference inputs [#130608](https://github.com/openclaw/openclaw/pull/130608)

**Documentation**

- Clarify platform-specific camera defaults in CLI help [#107942](https://github.com/openclaw/openclaw/pull/107942)

</details>

</Accordion>

<Accordion title="Security and permissions">

Doctor's legacy authentication migration now preserves complete credentials, credentials already stored in SQLite, and the selected ChatGPT account across the covered legacy-to-SQLite migrations. Ambiguous ownership, unreadable files, and unverifiable credentials continue to stop the migration.

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

**Bug fixes**

- Create backup archives with owner-only permissions [#102403](https://github.com/openclaw/openclaw/pull/102403)
- Restrict classic voice streaming to authenticated Twilio calls [#102887](https://github.com/openclaw/openclaw/pull/102887)
- Repair legacy approval schemas without wedging startup [#109876](https://github.com/openclaw/openclaw/pull/109876)
- Complete the SQLite-only auth profile migration [#114033](https://github.com/openclaw/openclaw/pull/114033)
- Restore sandbox creation with current OpenShell naming limits [#115058](https://github.com/openclaw/openclaw/pull/115058)
- Correct embedded TUI outcomes, queued cancellation, and error privacy [#117044](https://github.com/openclaw/openclaw/pull/117044)
- Redact credentials from voice-call provider errors [#117304](https://github.com/openclaw/openclaw/pull/117304)
- Prevent generated media text from hijacking delivery [#118780](https://github.com/openclaw/openclaw/pull/118780)
- Keep Gateway locks inside the selected state directory [#120110](https://github.com/openclaw/openclaw/pull/120110)
- Isolate external coding-session catalogs from operator HOME [#122983](https://github.com/openclaw/openclaw/pull/122983)
- Hide unowned host session catalogs on multi-user Gateways [#123421](https://github.com/openclaw/openclaw/pull/123421)
- Block agent SQLite commands from opening live OpenClaw state [#123816](https://github.com/openclaw/openclaw/pull/123816)
- Keep caller speech at user priority in Voice Call [#123846](https://github.com/openclaw/openclaw/pull/123846)
- Keep expired Codex approvals from aborting the turn [#125671](https://github.com/openclaw/openclaw/pull/125671)
- Fail closed when Code Mode aliases are invalidated [#126660](https://github.com/openclaw/openclaw/pull/126660)
- fix(sandbox): restore reliable OpenShell execution and workspace integrity [#130031](https://github.com/openclaw/openclaw/pull/130031)
- fix(openshell): preserve file writes during concurrent mirror commands [#130447](https://github.com/openclaw/openclaw/pull/130447)
- Preserve credentials during doctor auth migration [#97881](https://github.com/openclaw/openclaw/pull/97881)
- Preserve SQLite credentials during legacy auth repair [#98245](https://github.com/openclaw/openclaw/pull/98245)
- Isolate gateway workspace patch application [e5240b9](https://github.com/openclaw/openclaw/commit/e5240b9)
- Honor MiniMax request policy across media generation [#102072](https://github.com/openclaw/openclaw/pull/102072)
- Enforce tool-call payload limits using UTF-8 bytes [#102450](https://github.com/openclaw/openclaw/pull/102450)
- Keep sandbox session labels Unicode-safe [#102969](https://github.com/openclaw/openclaw/pull/102969)
- Require human approval for Codex app-server commands [#103457](https://github.com/openclaw/openclaw/pull/103457)
- Stop voice-call logs from recording conversation content [#103555](https://github.com/openclaw/openclaw/pull/103555)
- Keep exact tool allowlists on the correct factories [#104213](https://github.com/openclaw/openclaw/pull/104213)
- Restrict Gradium TTS credential egress [#105169](https://github.com/openclaw/openclaw/pull/105169)
- Move channel pairing state to SQLite [#105802](https://github.com/openclaw/openclaw/pull/105802)
- Treat leading-hyphen worktree base refs as refs, not Git flags [#106048](https://github.com/openclaw/openclaw/pull/106048)
- Guard MiniMax image requests with the shared SSRF policy [#106163](https://github.com/openclaw/openclaw/pull/106163)
- Safely migrate legacy Reef peer trust [#108417](https://github.com/openclaw/openclaw/pull/108417)
- Release Reef guard streams after provider errors [#109196](https://github.com/openclaw/openclaw/pull/109196)
- Neutralize formulas in Google Meet attendance CSV exports [#109725](https://github.com/openclaw/openclaw/pull/109725)
- Preserve Codex session permissions across resumed turns [#111136](https://github.com/openclaw/openclaw/pull/111136)
- Reject stale shared-session mutations after replacement [#113023](https://github.com/openclaw/openclaw/pull/113023)
- Mark WhatsApp voice transcripts as untrusted audio text [#113111](https://github.com/openclaw/openclaw/pull/113111)
- Preserve relocated credentials and shared agent sessions [#113559](https://github.com/openclaw/openclaw/pull/113559)
- Prevent false exec-deny failures during concurrent Codex runs [#113929](https://github.com/openclaw/openclaw/pull/113929)
- Preserve owner authorization in realtime voice consults [#114163](https://github.com/openclaw/openclaw/pull/114163)
- Complete auth migration when main owns the OAuth profile [#114226](https://github.com/openclaw/openclaw/pull/114226)
- Prevent read-only and stale Workboard dashboard actions [#114686](https://github.com/openclaw/openclaw/pull/114686)
- Reconstruct valid Voice Call webhook URLs for IPv6 hosts [#115135](https://github.com/openclaw/openclaw/pull/115135)
- Reuse one MCP namespace model per Code Mode run [#115459](https://github.com/openclaw/openclaw/pull/115459)
- Migrate retired node-host state automatically at startup [#115495](https://github.com/openclaw/openclaw/pull/115495)
- Preserve the requester through promoted Codex approvals [#116152](https://github.com/openclaw/openclaw/pull/116152)
- Unify Doctor's legacy authentication migration [#117361](https://github.com/openclaw/openclaw/pull/117361)
- Preserve selected ChatGPT accounts during migration [#118205](https://github.com/openclaw/openclaw/pull/118205)
- Make voice-call callback retries durable and token-safe [#118754](https://github.com/openclaw/openclaw/pull/118754)
- Redact credentials from Parallel search errors [#120205](https://github.com/openclaw/openclaw/pull/120205)
- Preserve incognito scope for embedded session ownership [#120215](https://github.com/openclaw/openclaw/pull/120215)
- Prevent cross-runtime device identity races [#120643](https://github.com/openclaw/openclaw/pull/120643)
- Reject stale Cloud Worker bundle tunnels [#121081](https://github.com/openclaw/openclaw/pull/121081)
- Deliver scoped global-session events to the right observers [#121166](https://github.com/openclaw/openclaw/pull/121166)
- Make Cloud workers available with trusted-proxy browser authentication [#121671](https://github.com/openclaw/openclaw/pull/121671)
- Restore usable URLs in the agent portal listing [#123149](https://github.com/openclaw/openclaw/pull/123149)
- Recover legacy OAuth secrets from custom agent directories [#123187](https://github.com/openclaw/openclaw/pull/123187)
- Stop Beam mirror uploads from following redirects [#123848](https://github.com/openclaw/openclaw/pull/123848)
- Apply edge authentication to secure session URLs [#125982](https://github.com/openclaw/openclaw/pull/125982)
- Show only enforceable Codex approval scopes [#125995](https://github.com/openclaw/openclaw/pull/125995)
- Keep forced worktree cleanup from removing active runs [#126174](https://github.com/openclaw/openclaw/pull/126174)
- Separate remote node execution from Gateway process control [#126253](https://github.com/openclaw/openclaw/pull/126253)
- Keep retired auth files from blocking migrated credentials [#126562](https://github.com/openclaw/openclaw/pull/126562)
- fix(state): keep divergent retired device identity from blocking gateway readiness [#126748](https://github.com/openclaw/openclaw/pull/126748)
- Start fresh installs with canonical shared credential ownership [#126783](https://github.com/openclaw/openclaw/pull/126783)
- fix(auth): stop advising a retry when the auth store needs migration [#127306](https://github.com/openclaw/openclaw/pull/127306)
- fix(auth): preserve non-lock store write errors [#128049](https://github.com/openclaw/openclaw/pull/128049)
- fix(agents): stop recommending unavailable gateway tools [#128190](https://github.com/openclaw/openclaw/pull/128190)
- fix(voice-call): keep ngrok auth out of argv [#129330](https://github.com/openclaw/openclaw/pull/129330)
- fix(openshell): remote workspace is never seeded when the gateway restarts before first exec [#129809](https://github.com/openclaw/openclaw/pull/129809)
- fix(gateway): keep session events within their owning agent [#130039](https://github.com/openclaw/openclaw/pull/130039)
- fix(auth): honor shared-store ownership in temp-state exec and agent deletion [#130437](https://github.com/openclaw/openclaw/pull/130437)
- fix(nodes): show paired-device launch approvals in the requesting browser [#130573](https://github.com/openclaw/openclaw/pull/130573)
- fix: preserve native session ownership during cleanup and attachment [#130864](https://github.com/openclaw/openclaw/pull/130864)
- fix(openshell): preserve nested host symlinks during mirror sync [#131122](https://github.com/openclaw/openclaw/pull/131122)
- Doctor copies model catalog credentials into SQLite [#87166](https://github.com/openclaw/openclaw/pull/87166)
- Reject malformed tool availability expressions safely [#92411](https://github.com/openclaw/openclaw/pull/92411)
- Guard provider-hosted video downloads against private-network access [#101854](https://github.com/openclaw/openclaw/pull/101854)
- Redact sensitive Twilio webhook diagnostics [#102089](https://github.com/openclaw/openclaw/pull/102089)
- Prevent broken Unicode at security text limits [#102266](https://github.com/openclaw/openclaw/pull/102266)
- Keep truncated tool-policy audit labels valid UTF-16 [#102464](https://github.com/openclaw/openclaw/pull/102464)
- Stop iOS reconnects from requesting unnecessary approval [#102661](https://github.com/openclaw/openclaw/pull/102661)
- Keep Unicode token hints well formed in logs [#103341](https://github.com/openclaw/openclaw/pull/103341)
- Redact caller phone numbers in voice-call event logs [#103547](https://github.com/openclaw/openclaw/pull/103547)
- Keep redacted token hints valid Unicode [#103843](https://github.com/openclaw/openclaw/pull/103843)
- Keep masked credentials valid around emoji [#104800](https://github.com/openclaw/openclaw/pull/104800)
- Keep API-key previews valid around emoji [#104810](https://github.com/openclaw/openclaw/pull/104810)
- Validate sandbox environment limits by UTF-8 byte size [#105017](https://github.com/openclaw/openclaw/pull/105017)
- Correct sandbox escape paths for home-sibling directories [#106603](https://github.com/openclaw/openclaw/pull/106603)
- Surface auth-storage lock cleanup failures [#107427](https://github.com/openclaw/openclaw/pull/107427)
- Reject malformed Telnyx webhook timestamps [#107565](https://github.com/openclaw/openclaw/pull/107565)
- Keep system-agent approval text Unicode-safe [#108298](https://github.com/openclaw/openclaw/pull/108298)
- Pin Plivo callbacks to the configured webhook path [#112559](https://github.com/openclaw/openclaw/pull/112559)
- Verify Twilio webhooks against the public path [#112800](https://github.com/openclaw/openclaw/pull/112800)
- fix(sandbox): show POSIX path in container escape hint [#114209](https://github.com/openclaw/openclaw/pull/114209)
- Keep queued approval command labels Unicode-safe [#118566](https://github.com/openclaw/openclaw/pull/118566)
- Preserve POSIX shell builtins in enforced exec mode [#119351](https://github.com/openclaw/openclaw/pull/119351)
- Clean up failed SSH sandbox setup [#121457](https://github.com/openclaw/openclaw/pull/121457)
- Let read-only operators copy retained task results [#122841](https://github.com/openclaw/openclaw/pull/122841)
- Preserve safe Windows SQLite directory diagnostics [#123023](https://github.com/openclaw/openclaw/pull/123023)
- Hide host session catalogs from unprofiled multi-user callers [#123438](https://github.com/openclaw/openclaw/pull/123438)
- Explain visible-session working-directory denials [#123829](https://github.com/openclaw/openclaw/pull/123829)
- Keep read-only device identity checks lock-free [#124745](https://github.com/openclaw/openclaw/pull/124745)
- Harden Crabbox Cloud Worker Desktop provisioning [#126417](https://github.com/openclaw/openclaw/pull/126417)
- fix(gateway): protect concurrent cloud session placement [#129224](https://github.com/openclaw/openclaw/pull/129224)
- Resolve Tavily credentials in agent tools [#97827](https://github.com/openclaw/openclaw/pull/97827)

</details>

</Accordion>

<Accordion title="Plugins and installation">

Plugin upgrades now keep canonical SQLite install and state records when conflicting legacy data is provably stale, archive the old file for recovery, and allow startup to continue. Newer or ambiguous legacy state and archive failures remain blocking so Doctor can retry without discarding either copy.

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

**Bug fixes**

- Converge conflicting legacy plugin install metadata [#107961](https://github.com/openclaw/openclaw/pull/107961)
- Archive redundant plugin-state sidecars when canonical rows are newer [#110083](https://github.com/openclaw/openclaw/pull/110083)
- Install production dependencies for bundled cloud workers [1644bef](https://github.com/openclaw/openclaw/commit/1644bef)
- Include required workspace packages in cloud worker bundles [20b7a9f](https://github.com/openclaw/openclaw/commit/20b7a9f)
- Prevent repeated Codex binding migrations at startup [#103281](https://github.com/openclaw/openclaw/pull/103281)
- Repair Voice Call SQLite schema upgrades through doctor [#104752](https://github.com/openclaw/openclaw/pull/104752)
- Keep plugin metadata reads from mutating shared state [#106103](https://github.com/openclaw/openclaw/pull/106103)
- Add controls and clearer errors for native session discovery [#107162](https://github.com/openclaw/openclaw/pull/107162)
- Fail OpenCode session reads cleanly on output-pipe errors [#108218](https://github.com/openclaw/openclaw/pull/108218)
- Honor OPENCLAW_STATE_DIR for Voice Call state [#109284](https://github.com/openclaw/openclaw/pull/109284)
- Keep plugin-state reads outside the writable SQLite lifecycle [#113204](https://github.com/openclaw/openclaw/pull/113204)
- Restore MXC provisioning and Windows workspace tool execution [#115399](https://github.com/openclaw/openclaw/pull/115399)
- Keep Beam mirror retries moving after slow responses [#116174](https://github.com/openclaw/openclaw/pull/116174)
- Start source-built cloud workers with vendored packages [#122400](https://github.com/openclaw/openclaw/pull/122400)
- fix: prevent $-pattern injection in tilde expansion across extensions [#123004](https://github.com/openclaw/openclaw/pull/123004)
- Keep runtime dependencies single-owned and preserve empty subagent completions [#126119](https://github.com/openclaw/openclaw/pull/126119)
- Bound expired plugin-state cleanup [#126827](https://github.com/openclaw/openclaw/pull/126827)
- fix: allow plugin state values up to 1 MiB [#130387](https://github.com/openclaw/openclaw/pull/130387)
- fix(cloud-workers): build complete source runtime artifacts [#130735](https://github.com/openclaw/openclaw/pull/130735)
- Fix cloud-worker bundle integrity verification [553c245](https://github.com/openclaw/openclaw/commit/553c245)
- Keep long oc-path error previews Unicode-safe [#102527](https://github.com/openclaw/openclaw/pull/102527)
- Keep truncated install errors Unicode-safe [#102833](https://github.com/openclaw/openclaw/pull/102833)
- Preserve Unicode in 1Password audit output [#106424](https://github.com/openclaw/openclaw/pull/106424)
- Reject invalid 12-hour times in Logbook analysis [#107191](https://github.com/openclaw/openclaw/pull/107191)
- Warn when Linux Canvas socket monitoring falls back to polling [#109502](https://github.com/openclaw/openclaw/pull/109502)
- Keep plugin-hosted media available during registry swaps [#112515](https://github.com/openclaw/openclaw/pull/112515)
- Deliver session-change events to plugin-only listeners [#116948](https://github.com/openclaw/openclaw/pull/116948)
- Keep clipped Beam mirror text valid Unicode [#117671](https://github.com/openclaw/openclaw/pull/117671)
- Fix Beam upload links and minimal Gateway startup [#120927](https://github.com/openclaw/openclaw/pull/120927)
- Preserve exact identity for copied system-event snapshots [#120984](https://github.com/openclaw/openclaw/pull/120984)
- fix(beam): stop mirroring after service shutdown [#126589](https://github.com/openclaw/openclaw/pull/126589)
- fix(diffs): resolve viewer assets in unified builds [#129391](https://github.com/openclaw/openclaw/pull/129391)

</details>

</Accordion>

<Accordion title="Messaging and calls">

Affected Google Meet and Teams sessions now wait for the local audio bridge to stop before teardown completes. Google Meet also rejects malformed node-control requests before dispatch and keeps local audio diagnostics bounded and readable.

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

**Bug fixes**

- Retry transient reply-session initialization conflicts [#105754](https://github.com/openclaw/openclaw/pull/105754)
- Make Teams meeting joins and transcription reliable [#110615](https://github.com/openclaw/openclaw/pull/110615)
- Deliver Codex-generated images on message-tool-only routes [#110893](https://github.com/openclaw/openclaw/pull/110893)
- Give each session one authoritative delivery route [#113225](https://github.com/openclaw/openclaw/pull/113225)
- Deliver files and generated images from remote Codex workspaces [#115668](https://github.com/openclaw/openclaw/pull/115668)
- Prevent continuous inbound messages from starving replies [#115682](https://github.com/openclaw/openclaw/pull/115682)
- Recognize message-tool replies to the current conversation [#116560](https://github.com/openclaw/openclaw/pull/116560)
- Bound realtime meeting audio playback [#116589](https://github.com/openclaw/openclaw/pull/116589)
- Preserve final-reply recovery after proven no-send failures [#117597](https://github.com/openclaw/openclaw/pull/117597)
- Bound meeting talkback audio and process retention [#117733](https://github.com/openclaw/openclaw/pull/117733)
- Renew durable outbound producer leases through send completion [#118663](https://github.com/openclaw/openclaw/pull/118663)
- Resume durable outbound retries after startup [#118694](https://github.com/openclaw/openclaw/pull/118694)
- Prevent duplicate outbound delivery during concurrent recovery [#119966](https://github.com/openclaw/openclaw/pull/119966)
- Prevent duplicate and lost agent deliveries [#120108](https://github.com/openclaw/openclaw/pull/120108)
- Retry inbound messages when debounce dispatch fails [#122384](https://github.com/openclaw/openclaw/pull/122384)
- Deliver requested media while keeping image inspection private [#124910](https://github.com/openclaw/openclaw/pull/124910)
- fix(agents): recognize explicit current-source replies (#113554) [3a4b3df](https://github.com/openclaw/openclaw/commit/3a4b3df)
- Stop stalled Google Meet requests after 30 seconds [#102149](https://github.com/openclaw/openclaw/pull/102149)
- Stop stalled Google Meet calendar lookups after 30 seconds [#102157](https://github.com/openclaw/openclaw/pull/102157)
- Keep Google Meet sessions with their joining agent [#102331](https://github.com/openclaw/openclaw/pull/102331)
- Handle uppercase file URLs in media directives [#103490](https://github.com/openclaw/openclaw/pull/103490)
- Make Google Meet leave remove the Chrome participant [#103522](https://github.com/openclaw/openclaw/pull/103522)
- Make Google Meet tab reuse safe for non-English accounts [#103719](https://github.com/openclaw/openclaw/pull/103719)
- Reject invalid Google Meet URLs before local launch [#104687](https://github.com/openclaw/openclaw/pull/104687)
- Validate Calendar-derived Google Meet links [#104863](https://github.com/openclaw/openclaw/pull/104863)
- Prevent duplicate device-pair reminders during slow sends [#106395](https://github.com/openclaw/openclaw/pull/106395)
- Reject malformed meeting audio payloads [#106474](https://github.com/openclaw/openclaw/pull/106474)
- Reject malformed voice-call audio frames [#106859](https://github.com/openclaw/openclaw/pull/106859)
- Preserve actionable ngrok errors across fragmented output [#107122](https://github.com/openclaw/openclaw/pull/107122)
- Codex turns continue after progress replies [#108487](https://github.com/openclaw/openclaw/pull/108487)
- Bind channel replay settlement to the correct inbound claim [#109117](https://github.com/openclaw/openclaw/pull/109117)
- Unify Google Meet realtime audio handling [#109413](https://github.com/openclaw/openclaw/pull/109413)
- Stop Twilio TTS pacing immediately on cancellation [#109618](https://github.com/openclaw/openclaw/pull/109618)
- Treat blank Twilio setup credentials as missing [#109674](https://github.com/openclaw/openclaw/pull/109674)
- Harden recovered meeting browser sessions [#110089](https://github.com/openclaw/openclaw/pull/110089)
- Harden Google Meet talkback bridge recovery [#110092](https://github.com/openclaw/openclaw/pull/110092)
- Document ambient group recall and await Signal cleanup [#110413](https://github.com/openclaw/openclaw/pull/110413)
- Wait for meeting audio bridge processes to stop [#110548](https://github.com/openclaw/openclaw/pull/110548)
- Make Nextcloud Talk and Nostr ingress durable [#110653](https://github.com/openclaw/openclaw/pull/110653)
- Tell channel users when a Codex session changed [#110856](https://github.com/openclaw/openclaw/pull/110856)
- Stop stale Codex retries and surface a resend notice [#110980](https://github.com/openclaw/openclaw/pull/110980)
- Route voice and meeting consults to the configured default agent [#111749](https://github.com/openclaw/openclaw/pull/111749)
- Verify meeting talk-back on the microphone capture path [#112939](https://github.com/openclaw/openclaw/pull/112939)
- Reject corrupted voice-call identifiers from malformed provider JSON [#114267](https://github.com/openclaw/openclaw/pull/114267)
- Preserve generated media in cross-agent announcements [#115126](https://github.com/openclaw/openclaw/pull/115126)
- Preserve plugin request timeouts when response bodies stall [#116166](https://github.com/openclaw/openclaw/pull/116166)
- Close voice-call media connections during shutdown [#116536](https://github.com/openclaw/openclaw/pull/116536)
- Bound slow telephony speech playback queues [#116549](https://github.com/openclaw/openclaw/pull/116549)
- Fence native realtime consults to their voice-call bridge [#116559](https://github.com/openclaw/openclaw/pull/116559)
- Bound Discord realtime voice playback memory [#116574](https://github.com/openclaw/openclaw/pull/116574)
- Reject oversized local attachments before buffering [#116667](https://github.com/openclaw/openclaw/pull/116667)
- Stop stale Voice Call consults after session teardown [#116701](https://github.com/openclaw/openclaw/pull/116701)
- Preserve trusted context for tool-created Voice Calls [#116856](https://github.com/openclaw/openclaw/pull/116856)
- Clean message-tool replies and suppress false no-reply fallbacks [#116909](https://github.com/openclaw/openclaw/pull/116909)
- Prevent voice-call audio pacing slowdowns on long replies [#117162](https://github.com/openclaw/openclaw/pull/117162)
- Release Twilio and Plivo state after calls end [#117201](https://github.com/openclaw/openclaw/pull/117201)
- Preserve Discord voice transcripts during capability discovery [#117373](https://github.com/openclaw/openclaw/pull/117373)
- Recover encrypted Discord voice at DAVE transition zero [#117381](https://github.com/openclaw/openclaw/pull/117381)
- Bound Voice Call replay metadata growth [#117437](https://github.com/openclaw/openclaw/pull/117437)
- Preserve Voice Call transcripts across bridge replacement [#117686](https://github.com/openclaw/openclaw/pull/117686)
- Preserve attachment intent across model and history paths [#117841](https://github.com/openclaw/openclaw/pull/117841)
- Preserve relative attachments alongside reply captions [#118746](https://github.com/openclaw/openclaw/pull/118746)
- Retry queued messages when an outbound adapter is unavailable [#119371](https://github.com/openclaw/openclaw/pull/119371)
- Bound errored channel-ingress settlements [#120104](https://github.com/openclaw/openclaw/pull/120104)
- Preserve channel progress acceptance outcomes [#120171](https://github.com/openclaw/openclaw/pull/120171)
- Deliver channel images once to Claude CLI turns [#120721](https://github.com/openclaw/openclaw/pull/120721)
- Prevent duplicate final replies after Gateway restarts [#121908](https://github.com/openclaw/openclaw/pull/121908)
- Stop reporting suppressed notifications as delivered [#122421](https://github.com/openclaw/openclaw/pull/122421)
- Restore CLI message sends after multi-agent migration [#123450](https://github.com/openclaw/openclaw/pull/123450)
- Preserve Google Meet output files when writes fail [#123959](https://github.com/openclaw/openclaw/pull/123959)
- Deliver Codex input choices in Telegram and web chat [#124146](https://github.com/openclaw/openclaw/pull/124146)
- Preserve message delivery receipts through middleware [#125497](https://github.com/openclaw/openclaw/pull/125497)
- Stop idle channel monitors from repeatedly locking SQLite [#126073](https://github.com/openclaw/openclaw/pull/126073)
- fix: resumed main-session turn after a gateway restart is delivered to the session's last route instead of silently completing [#127342](https://github.com/openclaw/openclaw/pull/127342)
- fix: generated media loses filenames, durations, and dimensions [#128895](https://github.com/openclaw/openclaw/pull/128895)
- fix: Telegram private topics resume after gateway restart [#128896](https://github.com/openclaw/openclaw/pull/128896)
- fix(googlechat): use agent identity in typing status [#129172](https://github.com/openclaw/openclaw/pull/129172)
- Close Google Meet audio sessions cleanly on pipe failures [#102105](https://github.com/openclaw/openclaw/pull/102105)
- Keep truncated Google Meet log values UTF-16 safe [#102617](https://github.com/openclaw/openclaw/pull/102617)
- Validate Google Meet node-control requests before dispatch [#103752](https://github.com/openclaw/openclaw/pull/103752)
- Align Google Meet DTMF delay metadata with runtime behavior [#104119](https://github.com/openclaw/openclaw/pull/104119)
- Remove duplicate set-profile action listing [#104235](https://github.com/openclaw/openclaw/pull/104235)
- Preserve valid Unicode in voice-call process diagnostics [#104260](https://github.com/openclaw/openclaw/pull/104260)
- Keep Google Meet caption epochs unique across reloads [#105221](https://github.com/openclaw/openclaw/pull/105221)
- Reject non-decimal Google Meet transcript cursors [#106384](https://github.com/openclaw/openclaw/pull/106384)
- Prevent overlapping stale-call hangups [#106396](https://github.com/openclaw/openclaw/pull/106396)
- Preserve Unix epoch timestamps in agent envelopes [#106407](https://github.com/openclaw/openclaw/pull/106407)
- Treat meeting-bot signal exits and timeouts as failures [#107614](https://github.com/openclaw/openclaw/pull/107614)
- Keep Voice Call custom-log tails aligned and UTF-8 safe [#108322](https://github.com/openclaw/openclaw/pull/108322)
- Ignore blank Voice Call provider environment values [#108816](https://github.com/openclaw/openclaw/pull/108816)
- Keep voice-call continue polling within its deadline [#109053](https://github.com/openclaw/openclaw/pull/109053)
- Preserve Unicode in ngrok tunnel output [#109220](https://github.com/openclaw/openclaw/pull/109220)
- Preserve Google Meet attendance CSV rows [#109926](https://github.com/openclaw/openclaw/pull/109926)
- fix(meeting-bot): keep local audio diagnostics readable across chunks [#110703](https://github.com/openclaw/openclaw/pull/110703)
- Keep stalled Teams meeting setup probes within one deadline [#111455](https://github.com/openclaw/openclaw/pull/111455)
- fix(teams-meetings): listening probes work with reused tabs [#111466](https://github.com/openclaw/openclaw/pull/111466)
- Let Teams listening probes set a timeout [#111486](https://github.com/openclaw/openclaw/pull/111486)
- Reject malformed APNs relay response text [#111769](https://github.com/openclaw/openclaw/pull/111769)
- Canonicalize node chat subscription session keys [#111830](https://github.com/openclaw/openclaw/pull/111830)
- Keep new session delivery state canonical [#113373](https://github.com/openclaw/openclaw/pull/113373)
- Release meeting-audio pull timers after early wake [#114526](https://github.com/openclaw/openclaw/pull/114526)
- Keep invalid configured timezones consistent [#116103](https://github.com/openclaw/openclaw/pull/116103)
- Reject duplicate voice-call media stream starts [#116508](https://github.com/openclaw/openclaw/pull/116508)
- Keep delivered-media counts aligned with rendered messages [#117850](https://github.com/openclaw/openclaw/pull/117850)
- Report missed message-tool replies without exposing private output [#121822](https://github.com/openclaw/openclaw/pull/121822)
- Publish Google Meet exports atomically [#122306](https://github.com/openclaw/openclaw/pull/122306)
- fix(google-meet): keep ZIP exports beside output directories with trailing separators [#122367](https://github.com/openclaw/openclaw/pull/122367)
- fix(reply): stop advertising unavailable media messaging tools [#129944](https://github.com/openclaw/openclaw/pull/129944)

</details>

</Accordion>

<Accordion title="Documentation">

Documentation links now reach their intended external destinations and cross-page headings, while contributor attribution follows renamed accounts correctly. The external-link checker reports future drift on weekly or manual runs without blocking pull requests.

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

**Bug fixes**

- Preserve localized docs until translation finalization [dde6af2](https://github.com/openclaw/openclaw/commit/dde6af2)

**Documentation**

- Keep localized docs navigation complete and translated [#114993](https://github.com/openclaw/openclaw/pull/114993)
- Expose links in the generated maturity taxonomy [44a0c09](https://github.com/openclaw/openclaw/commit/44a0c09)
- Preserve product names in localized documentation links [8cd9ad0](https://github.com/openclaw/openclaw/commit/8cd9ad0)
- Preserve translated pages for externally mirrored docs [d6e9cbd](https://github.com/openclaw/openclaw/commit/d6e9cbd)
- Fix maturity taxonomy closing-tag indentation [de17534](https://github.com/openclaw/openclaw/commit/de17534)
- Explain Slack audio clips and voice-input limits [#102410](https://github.com/openclaw/openclaw/pull/102410)
- Repair external docs links and add a non-blocking audit [#114643](https://github.com/openclaw/openclaw/pull/114643)
- Repair stale docs links and contributor attribution [#114746](https://github.com/openclaw/openclaw/pull/114746)
- Repair documentation anchors and spellcheck drift [#122960](https://github.com/openclaw/openclaw/pull/122960)
- docs: fix four broken cross-page anchor links [#128278](https://github.com/openclaw/openclaw/pull/128278)
- docs: clarify Daytona cloud-worker class incompatibility [#130814](https://github.com/openclaw/openclaw/pull/130814)
- docs: remove unsupported Daytona cloud-worker setup recipe [#130824](https://github.com/openclaw/openclaw/pull/130824)

</details>

</Accordion>

</AccordionGroup>

## Maintainer and Internal Changes

Another 5,804 changes in this release primarily affect the people who build and maintain OpenClaw. They cover release and CI work, tests, internal refactors, documentation maintenance, and narrow fixes that sit outside the user-facing product sections above.

<AccordionGroup>

<Accordion title="All 5,804 Maintainer and Internal Changes">

This completes the record for all 16,304 analyzed PRs and commits in v2026.8.1. The list contains 27 improvements or features, 196 bug and security fixes, 67 documentation changes, and 5,514 internal maintenance changes, preserving the original PR and commit titles below.

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

**Improvements**

- Reduce CI time across QA smoke and audited lanes [00164c7](https://github.com/openclaw/openclaw/commit/00164c7)
- Rebalance compact CI jobs using measured agents-core-models runtime [1d2d44c](https://github.com/openclaw/openclaw/commit/1d2d44c)
- Balance Windows CI across two concurrent jobs [1f1aa88](https://github.com/openclaw/openclaw/commit/1f1aa88)
- Cache Node toolchains for Blacksmith CI jobs [782d52c](https://github.com/openclaw/openclaw/commit/782d52c)
- Speed up CI preflight and shrink the pnpm cache [7e54cc9](https://github.com/openclaw/openclaw/commit/7e54cc9)
- Route trusted contributor pull requests to faster CI runners [8d86fe7](https://github.com/openclaw/openclaw/commit/8d86fe7)
- Shorten CI by combining built-runtime verification with artifact checks [bba5730](https://github.com/openclaw/openclaw/commit/bba5730)
- Streamline release metadata and ClawHub checkouts [c149489](https://github.com/openclaw/openclaw/commit/c149489)
- Speed up release preparation [cb70d71](https://github.com/openclaw/openclaw/commit/cb70d71)
- Speed up the hybrid checks-ui job [d612949](https://github.com/openclaw/openclaw/commit/d612949)
- Speed up CI with wider sharding and parallel verification [ed5e489](https://github.com/openclaw/openclaw/commit/ed5e489)
- Give the dev branch badge its own sidebar strip [#104300](https://github.com/openclaw/openclaw/pull/104300)
- Keep native platform validation warning-free [#107101](https://github.com/openclaw/openclaw/pull/107101)
- Speed up agent command tests [#107107](https://github.com/openclaw/openclaw/pull/107107)
- Accelerate the SQLite reliability test suite [#107134](https://github.com/openclaw/openclaw/pull/107134)
- Speed up SQLite state benchmark CLI tests [#107150](https://github.com/openclaw/openclaw/pull/107150)
- Use retry-safe temp cleanup in Plugin SDK tests [#107151](https://github.com/openclaw/openclaw/pull/107151)
- Install skills.sh references through ClawHub [#112517](https://github.com/openclaw/openclaw/pull/112517)
- Give pinned sessions their own sidebar group [#121712](https://github.com/openclaw/openclaw/pull/121712)
- Speed up fresh changed-check runs [#121805](https://github.com/openclaw/openclaw/pull/121805)
- Rebalance CI tests without adding workers [#121807](https://github.com/openclaw/openclaw/pull/121807)
- Rebalance compact Node test jobs [#121834](https://github.com/openclaw/openclaw/pull/121834)
- Speed up Gateway session-list performance tests [#121853](https://github.com/openclaw/openclaw/pull/121853)
- feat(mantis): let proof agents extend desktop control [#127271](https://github.com/openclaw/openclaw/pull/127271)
- improve(ui): skip video pacing in ordinary browser tests [#127313](https://github.com/openclaw/openclaw/pull/127313)
- improve(qa): avoid repeated coverage inventory work in tests [#127376](https://github.com/openclaw/openclaw/pull/127376)
- improve(ci): add trusted FRV proof broker [#128966](https://github.com/openclaw/openclaw/pull/128966)

**Bug fixes**

- Allow excluded shipped PR references in generated ledger metadata [01b0989](https://github.com/openclaw/openclaw/commit/01b0989)
- Format Google Meet test type annotation [0471b29](https://github.com/openclaw/openclaw/commit/0471b29)
- Honor explicit Unreleased changelog opt-in in release checks [0476243](https://github.com/openclaw/openclaw/commit/0476243)
- Conflicting Control UI sidebar type-import repair [08843c7](https://github.com/openclaw/openclaw/commit/08843c7)
- Keep beta npm performance checks advisory during publish [08987d8](https://github.com/openclaw/openclaw/commit/08987d8)
- Stream release evidence artifact downloads to disk [0b78116](https://github.com/openclaw/openclaw/commit/0b78116)
- Route fork pull-request checks to hosted runners [0d73229](https://github.com/openclaw/openclaw/commit/0d73229)
- Accept protected-environment waiting state in publication evidence [0e9db60](https://github.com/openclaw/openclaw/commit/0e9db60)
- Bind ClawHub bootstrap publishing to its workflow identity [0f7fbfa](https://github.com/openclaw/openclaw/commit/0f7fbfa)
- Keep hybrid Windows CI on one Blacksmith lane [19ae7f2](https://github.com/openclaw/openclaw/commit/19ae7f2)
- Retry briefly stale npm provenance checks [1d27775](https://github.com/openclaw/openclaw/commit/1d27775)
- Shorten Testbox SSH socket paths for parallel review tests [1fe3a5f](https://github.com/openclaw/openclaw/commit/1fe3a5f)
- Restore CI after declaration and smoke-test drift [2256387](https://github.com/openclaw/openclaw/commit/2256387)
- use the shared record guard in the protocol coverage checker [2276dca](https://github.com/openclaw/openclaw/commit/2276dca)
- Preserve the validated Node runtime in candidate checks [2372c71](https://github.com/openclaw/openclaw/commit/2372c71)
- Retain npm provenance verification evidence [23d2f66](https://github.com/openclaw/openclaw/commit/23d2f66)
- Stabilize Telegram release QA commit-to-PR checks [2a52e45](https://github.com/openclaw/openclaw/commit/2a52e45)
- Declare the release-checklist direct-execution helper [33a354c](https://github.com/openclaw/openclaw/commit/33a354c)
- Isolate dependencies used by trusted release-candidate checks [34b8a3f](https://github.com/openclaw/openclaw/commit/34b8a3f)
- Honor explicit unreleased-changelog opt-in during release validation [363e8b0](https://github.com/openclaw/openclaw/commit/363e8b0)
- Preserve gateway watch logs and hand off managed ports [38e6365](https://github.com/openclaw/openclaw/commit/38e6365)
- Remove orphaned ClawHub workspace-dir helper [4af3a85](https://github.com/openclaw/openclaw/commit/4af3a85)
- Speed up real-Gateway UI tests in hybrid CI [4fb2736](https://github.com/openclaw/openclaw/commit/4fb2736)
- Prevent gateway port races in installer release checks [5a8b25c](https://github.com/openclaw/openclaw/commit/5a8b25c)
- Harden proxy tunnel test teardown [5b1ce69](https://github.com/openclaw/openclaw/commit/5b1ce69)
- Compare max-lines debt from the branch merge base [5fa348f](https://github.com/openclaw/openclaw/commit/5fa348f)
- Align extension prerelease tests with current contracts [662e79d](https://github.com/openclaw/openclaw/commit/662e79d)
- Default package-acceptance omission control to false [69b83b5](https://github.com/openclaw/openclaw/commit/69b83b5)
- Retry public release checks without exhausted credentials [6c0725e](https://github.com/openclaw/openclaw/commit/6c0725e)
- Point locale drift repair to generated sync [6f3aa0f](https://github.com/openclaw/openclaw/commit/6f3aa0f)
- Bind Telegram QA proof to the exact package artifact [732fb5f](https://github.com/openclaw/openclaw/commit/732fb5f)
- Detach optional ClawHub publishing from the core release workflow [73d0439](https://github.com/openclaw/openclaw/commit/73d0439)
- Rebalance CI lanes to reduce five-minute stragglers [76e4ef6](https://github.com/openclaw/openclaw/commit/76e4ef6)
- Remove duplicate docs-sync declaration [7a58956](https://github.com/openclaw/openclaw/commit/7a58956)
- Resolve Docker packaging tools from the source checkout [7e705ed](https://github.com/openclaw/openclaw/commit/7e705ed)
- Allow more time for release macOS cache finalization [7f28679](https://github.com/openclaw/openclaw/commit/7f28679)
- Validate tags from frozen release branches [7f50fb6](https://github.com/openclaw/openclaw/commit/7f50fb6)
- Allow cancelled main runs to refresh the Vitest cache [8367253](https://github.com/openclaw/openclaw/commit/8367253)
- Isolate trusted release tooling dependencies [8858944](https://github.com/openclaw/openclaw/commit/8858944)
- Restore formatting compliance after merge skew [8f3b2ab](https://github.com/openclaw/openclaw/commit/8f3b2ab)
- Preserve retired workspace state in update smoke tests [905395a](https://github.com/openclaw/openclaw/commit/905395a)
- Retry flaky fresh Parallels release lanes [9275f47](https://github.com/openclaw/openclaw/commit/9275f47)
- Declare release evidence API helpers [95c6add](https://github.com/openclaw/openclaw/commit/95c6add)
- Keep beta performance checks advisory at publish [97f75ed](https://github.com/openclaw/openclaw/commit/97f75ed)
- Route measured CI bottlenecks to Blacksmith on first attempts [9adfe07](https://github.com/openclaw/openclaw/commit/9adfe07)
- Recognize release tooling through symlinked roots [9bd51e9](https://github.com/openclaw/openclaw/commit/9bd51e9)
- Formats browser tab discovery abort test [9cdb976](https://github.com/openclaw/openclaw/commit/9cdb976)
- Rebalance storage-state CI test stripes [a2d1b0c](https://github.com/openclaw/openclaw/commit/a2d1b0c)
- Raise the Vitest cache warmer heap ceiling [a8857ee](https://github.com/openclaw/openclaw/commit/a8857ee)
- Resolve the trusted release loader [a9ac13b](https://github.com/openclaw/openclaw/commit/a9ac13b)
- Overlap TypeScript-Go test graphs in CI [ad508a5](https://github.com/openclaw/openclaw/commit/ad508a5)
- Correct the run-inspector E2E sub-pixel tolerance [af76f49](https://github.com/openclaw/openclaw/commit/af76f49)
- Restore the Control UI sidebar after accidental truncation [b5273e7](https://github.com/openclaw/openclaw/commit/b5273e7)
- Stop release smoke tests from recreating retired workspace state [b6535fb](https://github.com/openclaw/openclaw/commit/b6535fb)
- Format the Docker installer test [b847d1a](https://github.com/openclaw/openclaw/commit/b847d1a)
- Limit duplicate parity handling to image generation [bac7744](https://github.com/openclaw/openclaw/commit/bac7744)
- Pin release publishing to protected workflow tags [bb1a7e5](https://github.com/openclaw/openclaw/commit/bb1a7e5)
- Restore sole ownership of run-attempt state tests [c28e9a4](https://github.com/openclaw/openclaw/commit/c28e9a4)
- retry transient ClawHub HTTP 500 responses [c392727](https://github.com/openclaw/openclaw/commit/c392727)
- Stabilize Control UI deep-link E2E boot checks [c59ef0b](https://github.com/openclaw/openclaw/commit/c59ef0b)
- Mount normalization source in the Docker E2E harness [c69a75f](https://github.com/openclaw/openclaw/commit/c69a75f)
- Run candidate Parallels smoke from trusted release tooling [c8733ea](https://github.com/openclaw/openclaw/commit/c8733ea)
- Allow detached release jobs after parent success [ced50f8](https://github.com/openclaw/openclaw/commit/ced50f8)
- Clear ClickClack setup lint and dead-code failures [d6026ff](https://github.com/openclaw/openclaw/commit/d6026ff)
- Retry transient Telegram release provenance API reads [d6a33b5](https://github.com/openclaw/openclaw/commit/d6a33b5)
- Compare release evidence archives by contents [d8b3e1c](https://github.com/openclaw/openclaw/commit/d8b3e1c)
- Make plugin npm bootstrap retries idempotent [d8dd59b](https://github.com/openclaw/openclaw/commit/d8dd59b)
- Complete protected SHA-pinned publish tooling [dfa246e](https://github.com/openclaw/openclaw/commit/dfa246e)
- Keep beta performance checks advisory [dffb136](https://github.com/openclaw/openclaw/commit/dffb136)
- Reconcile duplicate QA parity capture rows [e23ba67](https://github.com/openclaw/openclaw/commit/e23ba67)
- Validate trusted npm preflight workflow source [e297bc2](https://github.com/openclaw/openclaw/commit/e297bc2)
- Prepare trusted Parallels harness dependencies at point of use [ed49673](https://github.com/openclaw/openclaw/commit/ed49673)
- Preserve Markdown list structure in translated docs [edef982](https://github.com/openclaw/openclaw/commit/edef982)
- Stabilize extension artifact freshness repair on CI filesystems [ee4bd4a](https://github.com/openclaw/openclaw/commit/ee4bd4a)
- Unshadow Control UI E2E diagnostic catch bindings [f2c721b](https://github.com/openclaw/openclaw/commit/f2c721b)
- Allow slower fallback CI runners more setup time [f329a94](https://github.com/openclaw/openclaw/commit/f329a94)
- bind resumed npm verification to the original publisher [f4f5bb1](https://github.com/openclaw/openclaw/commit/f4f5bb1)
- Remove a timing race from OpenAI payload contract tests [f530b70](https://github.com/openclaw/openclaw/commit/f530b70)
- Add missing TypeScript declaration for error formatting [f656d96](https://github.com/openclaw/openclaw/commit/f656d96)
- Route Docker release lanes through the trusted harness [#103504](https://github.com/openclaw/openclaw/pull/103504)
- Bound iMessage drop-diagnostic state [#103512](https://github.com/openclaw/openclaw/pull/103512)
- Stabilize ClawRouter release E2E log assertions [#103536](https://github.com/openclaw/openclaw/pull/103536)
- Fix lint in Telegram turn-adoption test [#103549](https://github.com/openclaw/openclaw/pull/103549)
- Repair bundled AI runtime checks in installer smoke [#103556](https://github.com/openclaw/openclaw/pull/103556)
- Prevent startup test mocks from poisoning shared Vitest workers [#103582](https://github.com/openclaw/openclaw/pull/103582)
- Contain installer-smoke artifact restores within the checkout [#103608](https://github.com/openclaw/openclaw/pull/103608)
- Keep scheduled runtime-parity QA on compatible scenarios [#103609](https://github.com/openclaw/openclaw/pull/103609)
- Restore strict lint for Mattermost tests [#107079](https://github.com/openclaw/openclaw/pull/107079)
- Fix the Mattermost slash-state test response type [#107084](https://github.com/openclaw/openclaw/pull/107084)
- Exclude live-only tests from tooling performance shards [#107088](https://github.com/openclaw/openclaw/pull/107088)
- Isolate the Pond baseline MCP proof tool [#107128](https://github.com/openclaw/openclaw/pull/107128)
- Refresh the Plugin SDK API baseline checksum [#107140](https://github.com/openclaw/openclaw/pull/107140)
- Clean up orphaned workshop skill usage rows [#107144](https://github.com/openclaw/openclaw/pull/107144)
- Clear stale label timestamps when sessions are replaced [#107638](https://github.com/openclaw/openclaw/pull/107638)
- Show clear QA Lab dashboard response errors [#108943](https://github.com/openclaw/openclaw/pull/108943)
- Release failed docs-search response bodies [#109508](https://github.com/openclaw/openclaw/pull/109508)
- Release failed Google Chat certificate responses promptly [#109519](https://github.com/openclaw/openclaw/pull/109519)
- Close failed ClawRouter usage responses promptly [#109525](https://github.com/openclaw/openclaw/pull/109525)
- Release failed GitHub Copilot usage connections promptly [#109540](https://github.com/openclaw/openclaw/pull/109540)
- Cancel unread APNs relay redirect bodies [#109728](https://github.com/openclaw/openclaw/pull/109728)
- Close failed Kilocode discovery streams before fallback [#109950](https://github.com/openclaw/openclaw/pull/109950)
- Release Discord PluralKit response streams on missing messages [#109960](https://github.com/openclaw/openclaw/pull/109960)
- Close failed Ollama discovery response bodies [#109967](https://github.com/openclaw/openclaw/pull/109967)
- Release failed Microsoft Teams Graph response streams [#109970](https://github.com/openclaw/openclaw/pull/109970)
- Cancel failed QQBot media response bodies [#110008](https://github.com/openclaw/openclaw/pull/110008)
- Release failed Google video download streams [#110045](https://github.com/openclaw/openclaw/pull/110045)
- Reject malformed MCP App sandbox policies [#110264](https://github.com/openclaw/openclaw/pull/110264)
- Clear completed Web Push readiness timers [#110879](https://github.com/openclaw/openclaw/pull/110879)
- Keep source installs out of operator state [#111514](https://github.com/openclaw/openclaw/pull/111514)
- Keep CI=1 test runs within one worker budget [#111521](https://github.com/openclaw/openclaw/pull/111521)
- Prevent cross-file mock leakage in Control UI tests [#111554](https://github.com/openclaw/openclaw/pull/111554)
- Reset plugin runtime state between shared test files [#111556](https://github.com/openclaw/openclaw/pull/111556)
- fix(release): bound beta verifier command execution [#111581](https://github.com/openclaw/openclaw/pull/111581)
- Prevent repository inventory scripts from hanging on Git lookups [#111582](https://github.com/openclaw/openclaw/pull/111582)
- Forward QA credentials into maturity scorecard generation [#112201](https://github.com/openclaw/openclaw/pull/112201)
- Prevent false lint failures in generated Wear translations [#112254](https://github.com/openclaw/openclaw/pull/112254)
- Validate frozen AI package exports against their manifests [#112258](https://github.com/openclaw/openclaw/pull/112258)
- Include shared chat progress text in macOS translations [#112279](https://github.com/openclaw/openclaw/pull/112279)
- Populate identity in mock Control UI profile settings [#112296](https://github.com/openclaw/openclaw/pull/112296)
- Accept canonical extended-stable npm provenance [#112301](https://github.com/openclaw/openclaw/pull/112301)
- Allow translated prose inside pure fenced code blocks [#115204](https://github.com/openclaw/openclaw/pull/115204)
- Make Android Wear channel-close tests deterministic [#116788](https://github.com/openclaw/openclaw/pull/116788)
- Enforce QA-channel thread and message lifecycle ownership [#116801](https://github.com/openclaw/openclaw/pull/116801)
- Add QA Lab group conversations and safer thread navigation [#116803](https://github.com/openclaw/openclaw/pull/116803)
- Restore WebChat auto-TTS managed-artifact proof [#116810](https://github.com/openclaw/openclaw/pull/116810)
- Repair release harness path and diagnostic contracts [#116812](https://github.com/openclaw/openclaw/pull/116812)
- Reject blocked QA evidence and invalid media artifacts [#116828](https://github.com/openclaw/openclaw/pull/116828)
- Make QA module-flow selection adapter-aware [#118069](https://github.com/openclaw/openclaw/pull/118069)
- Prevent Teams attachment tests from hanging on cloned response bodies [#118096](https://github.com/openclaw/openclaw/pull/118096)
- Cut QA smoke package-build overhead [#118111](https://github.com/openclaw/openclaw/pull/118111)
- Reject false compaction-write success in QA [#118115](https://github.com/openclaw/openclaw/pull/118115)
- Report failed QA suites and evaluations accurately [#118120](https://github.com/openclaw/openclaw/pull/118120)
- Canonicalize the macOS session-lock test path [#118121](https://github.com/openclaw/openclaw/pull/118121)
- Reject invalid character-evaluation judge rankings [#118423](https://github.com/openclaw/openclaw/pull/118423)
- fix(macos): timestamp hash-pinned Developer ID signatures [#118989](https://github.com/openclaw/openclaw/pull/118989)
- ci(macos): budget macos-swift by runner so fork PRs finish [#119017](https://github.com/openclaw/openclaw/pull/119017)
- Keep Gateway RPCs responsive during memory startup [#119676](https://github.com/openclaw/openclaw/pull/119676)
- Revert standalone Enterprise Grid Slack approval changes [#121219](https://github.com/openclaw/openclaw/pull/121219)
- Prevent duplicate final replies after Gateway restart [#121507](https://github.com/openclaw/openclaw/pull/121507)
- Route release validation evidence reads through cached GitHub access [#121619](https://github.com/openclaw/openclaw/pull/121619)
- Keep release checks portable on macOS Bash 3.2 [#121669](https://github.com/openclaw/openclaw/pull/121669)
- Carry branch authority in ClawSweeper dispatches [#121674](https://github.com/openclaw/openclaw/pull/121674)
- Make QA Gateway stress runs measure real concurrency [#121677](https://github.com/openclaw/openclaw/pull/121677)
- Stabilize workshop collection tests on macOS [#121800](https://github.com/openclaw/openclaw/pull/121800)
- Separate frozen release context from live candidate identity [#121835](https://github.com/openclaw/openclaw/pull/121835)
- Run source-scanning policy tests for watched changes [#121841](https://github.com/openclaw/openclaw/pull/121841)
- Allow PR review with restricted GitHub tokens [#121848](https://github.com/openclaw/openclaw/pull/121848)
- Scope iOS version checks to native releases [#121863](https://github.com/openclaw/openclaw/pull/121863)
- Avoid rebuilding identical session rows on duplicate reconciliation [#124326](https://github.com/openclaw/openclaw/pull/124326)
- Retire stale ownerless requested worker placements [#124609](https://github.com/openclaw/openclaw/pull/124609)
- Report provider request acceptance consistently [#125807](https://github.com/openclaw/openclaw/pull/125807)
- fix(secrets): compare proxy bearer tokens directly [#127054](https://github.com/openclaw/openclaw/pull/127054)
- Explicitly target Android notification intents [#127055](https://github.com/openclaw/openclaw/pull/127055)
- fix(test): nostr doctor and state-store suites fail Windows teardown with EBUSY [#127236](https://github.com/openclaw/openclaw/pull/127236)
- Repair release-validation onboarding and ClawHub fixtures [#127263](https://github.com/openclaw/openclaw/pull/127263)
- fix(qa): model-switch proof accepts served model reroutes [#127281](https://github.com/openclaw/openclaw/pull/127281)
- fix(qa): exercise a real config restart boundary [#127285](https://github.com/openclaw/openclaw/pull/127285)
- fix(qa): let scenario-owned timeouts settle before watchdog [#127289](https://github.com/openclaw/openclaw/pull/127289)
- fix(ci): align lifecycle retry fixtures with terminal replies [#127295](https://github.com/openclaw/openclaw/pull/127295)
- fix(qa): pin Slack draft progress transport [#127298](https://github.com/openclaw/openclaw/pull/127298)
- fix(qa): label execution configuration selects [#127299](https://github.com/openclaw/openclaw/pull/127299)
- fix(qa): restore QA Lab web build [#127310](https://github.com/openclaw/openclaw/pull/127310)
- fix(release): preserve validation plan across reruns [#127343](https://github.com/openclaw/openclaw/pull/127343)
- test(agents): canonicalize macOS tmpdir fixtures [#127366](https://github.com/openclaw/openclaw/pull/127366)
- fix(qa): retain failed isolated scenarios in fail-fast results [#127715](https://github.com/openclaw/openclaw/pull/127715)
- fix(ci): apply Kova runtime-major RSS calibration [#127763](https://github.com/openclaw/openclaw/pull/127763)
- fix(codex): preserve child hooks across turns [#128485](https://github.com/openclaw/openclaw/pull/128485)
- fix(deps): restore frozen installs for Anthropic SDK [#128671](https://github.com/openclaw/openclaw/pull/128671)
- perf(ui): stop loading shimmers from repainting [#128687](https://github.com/openclaw/openclaw/pull/128687)
- fix(scripts): ignore superseded target dispatch checks [#128704](https://github.com/openclaw/openclaw/pull/128704)
- fix(ci): preserve iOS Fastlane root after cwd changes [#128854](https://github.com/openclaw/openclaw/pull/128854)
- fix: release onboarding handles telemetry consent [#128943](https://github.com/openclaw/openclaw/pull/128943)
- fix: plugin prerelease fails after geolocation startup [#128947](https://github.com/openclaw/openclaw/pull/128947)
- fix: plugin prerelease checks accept active registry reuse [#128949](https://github.com/openclaw/openclaw/pull/128949)
- fix: release live gateway checks misroute scoped models [#128950](https://github.com/openclaw/openclaw/pull/128950)
- fix: QA MCP parity fails during effective tool inventory [#128959](https://github.com/openclaw/openclaw/pull/128959)
- fix(gateway): settle live fixtures before Codex reconnects [#128965](https://github.com/openclaw/openclaw/pull/128965)
- fix(qa): clean partial cloud proof startup [#128977](https://github.com/openclaw/openclaw/pull/128977)
- test(inworld): make voices timeout proof hermetic [#129024](https://github.com/openclaw/openclaw/pull/129024)
- test(gateway): fix flaky settled-run-ownership assertion in gateway chat suite [#129033](https://github.com/openclaw/openclaw/pull/129033)
- fix(release): preserve focused evidence lineage [#129060](https://github.com/openclaw/openclaw/pull/129060)
- test(google): isolate Vertex streams from ambient ADC [#129121](https://github.com/openclaw/openclaw/pull/129121)
- fix(qa): OpenClaw harness planning check fails after progress-card migration [#129143](https://github.com/openclaw/openclaw/pull/129143)
- fix(release): full validation survives queued parent states [#129166](https://github.com/openclaw/openclaw/pull/129166)
- fix(pr): keep older contributor worktree checkouts within OS argument limits [#129169](https://github.com/openclaw/openclaw/pull/129169)
- fix(release): approved VCR mirror recovery never starts [#129829](https://github.com/openclaw/openclaw/pull/129829)
- fix(qa): reject token confidence lanes without executed evidence [#129830](https://github.com/openclaw/openclaw/pull/129830)
- fix(qa): reject blocked sender replies in allowlist scenarios [#129840](https://github.com/openclaw/openclaw/pull/129840)
- fix(qa): align repeated-request proof with provider timeout [#129851](https://github.com/openclaw/openclaw/pull/129851)
- fix(parallels): avoid host networking for macOS upgrades [#129861](https://github.com/openclaw/openclaw/pull/129861)
- fix(i18n): include concatenated Apple UI strings [#129882](https://github.com/openclaw/openclaw/pull/129882)
- fix(memory): keep doctor discovery free of database imports [#129963](https://github.com/openclaw/openclaw/pull/129963)
- fix(release): preserve beta channel in prerelease survivor [#129966](https://github.com/openclaw/openclaw/pull/129966)
- fix(ui): remove unused startup styles to restore css budget [#130027](https://github.com/openclaw/openclaw/pull/130027)
- fix(e2e): stable candidate plugin repair fails after update [#130306](https://github.com/openclaw/openclaw/pull/130306)
- fix(ci): run changed-path-facts in fast routing checks [#130843](https://github.com/openclaw/openclaw/pull/130843)

**Documentation**

- Clarify the onboarding card icon [16daa88](https://github.com/openclaw/openclaw/commit/16daa88)
- Records rejected CI artifact checkout experiment [1ce67d5](https://github.com/openclaw/openclaw/commit/1ce67d5)
- Document safe isolation for live gateway tests [2ca4d92](https://github.com/openclaw/openclaw/commit/2ca4d92)
- Protect product names in localized documentation links [2d7be9e](https://github.com/openclaw/openclaw/commit/2d7be9e)
- Default automated iOS releases to the gateway version [3d7e996](https://github.com/openclaw/openclaw/commit/3d7e996)
- Remove invented inline-code formatting from translated prose [4302896](https://github.com/openclaw/openclaw/commit/4302896)
- Preserve runtime and plugin names in docs translations [477f3af](https://github.com/openclaw/openclaw/commit/477f3af)
- Stabilize documentation translation split validation [4d4b176](https://github.com/openclaw/openclaw/commit/4d4b176)
- Preserve ambiguous product names in translated docs [514d718](https://github.com/openclaw/openclaw/commit/514d718)
- Add pragmatic code guidance for contributors [523c07d](https://github.com/openclaw/openclaw/commit/523c07d)
- Keep Dutch documentation address informal [5fe350c](https://github.com/openclaw/openclaw/commit/5fe350c)
- Document the audited maintainer CI gate bypass [63985f2](https://github.com/openclaw/openclaw/commit/63985f2)
- Document the required QA coverage summary path [6bc5fc2](https://github.com/openclaw/openclaw/commit/6bc5fc2)
- Clarify schema-version policy for additive SQLite tables [6d5ebac](https://github.com/openclaw/openclaw/commit/6d5ebac)
- Preserve slash-based numeric literals in translated docs [7651ef5](https://github.com/openclaw/openclaw/commit/7651ef5)
- Preserve docs translation boundaries and plugin names [9d3de46](https://github.com/openclaw/openclaw/commit/9d3de46)
- docs(gateway): require pre-commit authority guards [9fc5037](https://github.com/openclaw/openclaw/commit/9fc5037)
- Crop whitespace from README banners [a661804](https://github.com/openclaw/openclaw/commit/a661804)
- Add four existing fixes to the changelog [af9d583](https://github.com/openclaw/openclaw/commit/af9d583)
- Preserve Render branding in documentation translations [be74297](https://github.com/openclaw/openclaw/commit/be74297)
- Refresh the generated documentation map [c55ea0b](https://github.com/openclaw/openclaw/commit/c55ea0b)
- Require approval before SQLite schema-version bumps [cc0b847](https://github.com/openclaw/openclaw/commit/cc0b847)
- Align the agent-hierarchy roadmap guardrail with planned work [e40bd56](https://github.com/openclaw/openclaw/commit/e40bd56)
- Preserve canonical product names in maturity documentation [fee4490](https://github.com/openclaw/openclaw/commit/fee4490)
- Explain the pull request automation review flow [#101748](https://github.com/openclaw/openclaw/pull/101748)
- Replace the stale maintainer roster with the current people page [#102998](https://github.com/openclaw/openclaw/pull/102998)
- Refresh the README hero with dark and light brand banners [#103123](https://github.com/openclaw/openclaw/pull/103123)
- Refresh the generated documentation map [#104926](https://github.com/openclaw/openclaw/pull/104926)
- Document GitHub Actions workflow filename resolution [#105333](https://github.com/openclaw/openclaw/pull/105333)
- Guide maintainers to sparse CI polling [#106821](https://github.com/openclaw/openclaw/pull/106821)
- Publish v2026.7.1 release documentation [#107040](https://github.com/openclaw/openclaw/pull/107040)
- Document the Control UI catalog terminal workflow [#107204](https://github.com/openclaw/openclaw/pull/107204)
- Clarify supported PR stats and yielded-exec handling [#107819](https://github.com/openclaw/openclaw/pull/107819)
- Document bounded maintainer automation commands [#107830](https://github.com/openclaw/openclaw/pull/107830)
- Document explicit CI rerun attempt selection [#108095](https://github.com/openclaw/openclaw/pull/108095)
- Align QA transport and release-validation guidance [#108463](https://github.com/openclaw/openclaw/pull/108463)
- Refresh the onboarding redesign plan after phases 1-3 [#110121](https://github.com/openclaw/openclaw/pull/110121)
- Update onboarding phase status and frame the phase 7 decision [#110543](https://github.com/openclaw/openclaw/pull/110543)
- Document draft-then-ready PR creation for reliable CI [#110970](https://github.com/openclaw/openclaw/pull/110970)
- Update stale debugging skill file references [#111474](https://github.com/openclaw/openclaw/pull/111474)
- Document script and dependency troubleshooting rules for agents [#112543](https://github.com/openclaw/openclaw/pull/112543)
- Attribute published packages and docs to the OpenClaw Foundation [#112633](https://github.com/openclaw/openclaw/pull/112633)
- Make Auto QA campaign evidence verifiable [#113857](https://github.com/openclaw/openclaw/pull/113857)
- Replace the rate-limited Star History badge [#114762](https://github.com/openclaw/openclaw/pull/114762)
- Fix the security warning's line wrapping [#115388](https://github.com/openclaw/openclaw/pull/115388)
- Clarify product growth, privacy, and model-guidance policy [#115854](https://github.com/openclaw/openclaw/pull/115854)
- Clarify the exported user timezone contract [#116160](https://github.com/openclaw/openclaw/pull/116160)
- Refresh maturity scorecard from August QA evidence [#118074](https://github.com/openclaw/openclaw/pull/118074)
- Repair stale references in bundled repository skills [#120042](https://github.com/openclaw/openclaw/pull/120042)
- Document a unified runner model for future session placement [#120657](https://github.com/openclaw/openclaw/pull/120657)
- Keep maintainer agents hands-on [#121225](https://github.com/openclaw/openclaw/pull/121225)
- Correct database-first implementation and schema documentation [#122085](https://github.com/openclaw/openclaw/pull/122085)
- Document session evidence retrieval for debugging [#122904](https://github.com/openclaw/openclaw/pull/122904)
- Document the Control UI stylesheet policy [#123185](https://github.com/openclaw/openclaw/pull/123185)
- Mark the Peekaboo v2 tracker item as landed [#123838](https://github.com/openclaw/openclaw/pull/123838)
- Correct computer-use tool inventory counts in the implementation plan [#124074](https://github.com/openclaw/openclaw/pull/124074)
- Mark the computer-use ref lifecycle work as landed [#124403](https://github.com/openclaw/openclaw/pull/124403)
- docs: prefer gh attach for PR media [#127417](https://github.com/openclaw/openclaw/pull/127417)
- docs(mantis): script catalog-tool turns through Code Mode exec [#127878](https://github.com/openclaw/openclaw/pull/127878)
- docs: require discussion for material SQLite changes [#128876](https://github.com/openclaw/openclaw/pull/128876)
- docs(plan): record CUA production vertical, node-channel fix, and channel schema repair [#130117](https://github.com/openclaw/openclaw/pull/130117)
- docs: compact generated maturity scorecard rows [#130331](https://github.com/openclaw/openclaw/pull/130331)
- docs(start): add Why OpenClaw enterprise architecture page [#130709](https://github.com/openclaw/openclaw/pull/130709)
- docs(start): add architecture diagrams to Why OpenClaw [#130776](https://github.com/openclaw/openclaw/pull/130776)
- docs(start): human introduction for Why OpenClaw [#130812](https://github.com/openclaw/openclaw/pull/130812)
- docs(start): restructure Why OpenClaw intro into a question-answer flow [#130874](https://github.com/openclaw/openclaw/pull/130874)
- docs(start): bridge paragraph for personal readers on Why OpenClaw [#131105](https://github.com/openclaw/openclaw/pull/131105)

**Maintenance**

- Remove the obsolete scoped-commit helper [00a5db4](https://github.com/openclaw/openclaw/commit/00a5db4)
- Isolate Discord conversation-runtime test spies [00d20fb](https://github.com/openclaw/openclaw/commit/00d20fb)
- Remove duplicate Kysely guardrail allowlist entries [00e8ca6](https://github.com/openclaw/openclaw/commit/00e8ca6)
- Bound agents-core CI stalls to one minute [022a567](https://github.com/openclaw/openclaw/commit/022a567)
- Refresh a moved macOS localization source location [02914f1](https://github.com/openclaw/openclaw/commit/02914f1)
- Format chat tool card test imports [03d4b05](https://github.com/openclaw/openclaw/commit/03d4b05)
- Preserve the worker manifest record type [0468fd6](https://github.com/openclaw/openclaw/commit/0468fd6)
- Align live model priority test indices [04b64ff](https://github.com/openclaw/openclaw/commit/04b64ff)
- Normalize App Store upload states in iOS release planning [0558831](https://github.com/openclaw/openclaw/commit/0558831)
- Preserve advisory QA checks during release validation [06e3a09](https://github.com/openclaw/openclaw/commit/06e3a09)
- Reduce secrets test-suite setup overhead [071e30e](https://github.com/openclaw/openclaw/commit/071e30e)
- Update sidebar activity test to use session data catalogs [07f6717](https://github.com/openclaw/openclaw/commit/07f6717)
- Preserve composite numeric values during docs translation [083276e](https://github.com/openclaw/openclaw/commit/083276e)
- Updates the pinned Kova evaluator revision [0869e92](https://github.com/openclaw/openclaw/commit/0869e92)
- Clean up strict plugin workspace dead-code findings [08ecf63](https://github.com/openclaw/openclaw/commit/08ecf63)
- Register iOS release scripts for unused-code checks [090bdab](https://github.com/openclaw/openclaw/commit/090bdab)
- Format node-host runtime and worker tests [09e5d60](https://github.com/openclaw/openclaw/commit/09e5d60)
- Preserve third-party interface labels in translated documentation [0a10b14](https://github.com/openclaw/openclaw/commit/0a10b14)
- Update the Apple localization wrapper contract [0aabf56](https://github.com/openclaw/openclaw/commit/0aabf56)
- Preserve pinned checkout for queued manual CI runs [0ab7e25](https://github.com/openclaw/openclaw/commit/0ab7e25)
- reuse the managed-worktree test repository fixture [0b8f042](https://github.com/openclaw/openclaw/commit/0b8f042)
- Finalize the iOS 2026.7.2 changelog section [0c95332](https://github.com/openclaw/openclaw/commit/0c95332)
- Align approval runtime tests with plugin event kinds [0ca0781](https://github.com/openclaw/openclaw/commit/0ca0781)
- Accept numeric values inside translated hyphen compounds [0d406a8](https://github.com/openclaw/openclaw/commit/0d406a8)
- Align the sidebar test with Automations pinned by default [0d84d69](https://github.com/openclaw/openclaw/commit/0d84d69)
- Stabilize macOS and TUI runtime tests [0e520d6](https://github.com/openclaw/openclaw/commit/0e520d6)
- Document error formatter redaction ownership [0f6ed10](https://github.com/openclaw/openclaw/commit/0f6ed10)
- Preserve QA gateway teardown evidence [111596e](https://github.com/openclaw/openclaw/commit/111596e)
- Preserves stdin in Docker E2E heartbeat wrapper [113af2f](https://github.com/openclaw/openclaw/commit/113af2f)
- Distinguish credentials from certificates in Traditional Chinese docs [11832b0](https://github.com/openclaw/openclaw/commit/11832b0)
- Use approved Foundry test-token placeholders [11c5702](https://github.com/openclaw/openclaw/commit/11c5702)
- Remove stale transcript export baseline entry [125ad94](https://github.com/openclaw/openclaw/commit/125ad94)
- Exercise blocked-provider Doctor warnings through the real route path [1491977](https://github.com/openclaw/openclaw/commit/1491977)
- Refresh Plugin SDK API baseline checksums [15cc637](https://github.com/openclaw/openclaw/commit/15cc637)
- Add runner fallback to standalone PR checks [165a2e9](https://github.com/openclaw/openclaw/commit/165a2e9)
- Add grep-friendly naming guidance for coding agents [1755087](https://github.com/openclaw/openclaw/commit/1755087)
- Add changelog credit for the Tlon SSE timeout fix [1783168](https://github.com/openclaw/openclaw/commit/1783168)
- test: refresh Anthropic auth fixtures (#129369) [18234ea](https://github.com/openclaw/openclaw/commit/18234ea)
- Run session layout viewport tests concurrently [18b24ed](https://github.com/openclaw/openclaw/commit/18b24ed)
- Require concise post-merge recaps and follow-up review [18c14ab](https://github.com/openclaw/openclaw/commit/18c14ab)
- Retry stalled iOS screenshot launches [1af115d](https://github.com/openclaw/openclaw/commit/1af115d)
- Restore default agents-core CI watchdog [1b25982](https://github.com/openclaw/openclaw/commit/1b25982)
- perf(ci): refit Control UI E2E duration hints to the grown suite [1b26747](https://github.com/openclaw/openclaw/commit/1b26747)
- Complete the Telegram ingress test runtime stub [1bfd126](https://github.com/openclaw/openclaw/commit/1bfd126)
- Strengthen documentation translation safeguards [1d41881](https://github.com/openclaw/openclaw/commit/1d41881)
- refactor(qa): adopt Crabline server artifacts (#118008) [1d526c5](https://github.com/openclaw/openclaw/commit/1d526c5)
- Aligns Telegram progress preview test with status-only defaults [1dde25c](https://github.com/openclaw/openclaw/commit/1dde25c)
- Bound release validation retries, soak, and run identity [1f591bb](https://github.com/openclaw/openclaw/commit/1f591bb)
- isolate model-config authentication test fixtures [1fdb0e7](https://github.com/openclaw/openclaw/commit/1fdb0e7)
- Remove test-only chat update export debt [200103a](https://github.com/openclaw/openclaw/commit/200103a)
- Clarify synthetic Telegram QA credentials [20866a3](https://github.com/openclaw/openclaw/commit/20866a3)
- Restore the Apple localization guard's settings label contract [2186cdf](https://github.com/openclaw/openclaw/commit/2186cdf)
- Align cron alert tests with generic failure messages [21e7f20](https://github.com/openclaw/openclaw/commit/21e7f20)
- Align native approval-routing test expectations [2205c5d](https://github.com/openclaw/openclaw/commit/2205c5d)
- Refresh beta3 release-gate test expectations [238be4b](https://github.com/openclaw/openclaw/commit/238be4b)
- Preserve all package build artifacts in CI [240ca9d](https://github.com/openclaw/openclaw/commit/240ca9d)
- Extend the managed gateway restart check timeout [243beca](https://github.com/openclaw/openclaw/commit/243beca)
- Require live testing and inspected visual proof before landing user-facing changes [24435f5](https://github.com/openclaw/openclaw/commit/24435f5)
- Relax the macOS unread async test timeout [246ba35](https://github.com/openclaw/openclaw/commit/246ba35)
- Keep all-QA release checks from aborting on an empty filter [25a9a2e](https://github.com/openclaw/openclaw/commit/25a9a2e)
- Synchronize lobster pet raw-copy baseline [25e18fc](https://github.com/openclaw/openclaw/commit/25e18fc)
- Align the responsive chat dropdown fixture with slotted menu items [265f43e](https://github.com/openclaw/openclaw/commit/265f43e)
- Repair CI coverage for skill experience review [26e05c1](https://github.com/openclaw/openclaw/commit/26e05c1)
- Keep release-candidate tooling pinned when main advances [26e7575](https://github.com/openclaw/openclaw/commit/26e7575)
- Refresh the native app localization test sentinel [2786239](https://github.com/openclaw/openclaw/commit/2786239)
- Require independent proof before autonomous issue closure [27fa5a8](https://github.com/openclaw/openclaw/commit/27fa5a8)
- Restore session-wide MCP attach-grant revocation [2854dcf](https://github.com/openclaw/openclaw/commit/2854dcf)
- Resolve canceled live-run test mocks [28ce79a](https://github.com/openclaw/openclaw/commit/28ce79a)
- Extend QA evidence generation to 90 minutes [28e09a0](https://github.com/openclaw/openclaw/commit/28e09a0)
- reduce test hotspot setup overhead [28eb9e5](https://github.com/openclaw/openclaw/commit/28eb9e5)
- Restore the Windows SQLite snapshot test path [2990b7b](https://github.com/openclaw/openclaw/commit/2990b7b)
- Document the removal trigger for transitional message markers [2a43508](https://github.com/openclaw/openclaw/commit/2a43508)
- Restore net-policy ipaddr typing compatibility [2a6fd77](https://github.com/openclaw/openclaw/commit/2a6fd77)
- Stabilize the TUI validation-abort end-to-end test [2aa479e](https://github.com/openclaw/openclaw/commit/2aa479e)
- Remove non-owned Feishu entry from the changelog [2ac1b09](https://github.com/openclaw/openclaw/commit/2ac1b09)
- Refresh plugin SDK declaration size limits [2af4871](https://github.com/openclaw/openclaw/commit/2af4871)
- Harden SSH sandbox stream-error test timing [2dd0e7b](https://github.com/openclaw/openclaw/commit/2dd0e7b)
- Stabilize the iOS live-gateway send-button test [2e218fd](https://github.com/openclaw/openclaw/commit/2e218fd)
- Restore Codex event projector formatting [2e62249](https://github.com/openclaw/openclaw/commit/2e62249)
- Avoid real gateway dispatch delays in agent tests [2f66c3c](https://github.com/openclaw/openclaw/commit/2f66c3c)
- Support revisioned iOS App Store releases [30395ba](https://github.com/openclaw/openclaw/commit/30395ba)
- Complete gateway-less QA transport cleanup [307353d](https://github.com/openclaw/openclaw/commit/307353d)
- Translate generic headings in localized documentation tables [324e8ff](https://github.com/openclaw/openclaw/commit/324e8ff)
- Add regression coverage for provider-wrapped retry statuses [3280a0d](https://github.com/openclaw/openclaw/commit/3280a0d)
- Converge GitHub release notes on one verified rendering pipeline [336e43c](https://github.com/openclaw/openclaw/commit/336e43c)
- Keep a QA parity helper module-private [33e415e](https://github.com/openclaw/openclaw/commit/33e415e)
- Narrow the npm resolution timestamp in its test [3433349](https://github.com/openclaw/openclaw/commit/3433349)
- Stabilize the chat hover browser test timeout [34bbd38](https://github.com/openclaw/openclaw/commit/34bbd38)
- Support evidence-backed late stable release closeout [34c63c3](https://github.com/openclaw/openclaw/commit/34c63c3)
- Add list-marker diagnostics for rejected documentation translations [34caf4b](https://github.com/openclaw/openclaw/commit/34caf4b)
- Synchronize native localization source locations [35abbb7](https://github.com/openclaw/openclaw/commit/35abbb7)
- Preserve nested list structure in documentation translations [370b515](https://github.com/openclaw/openclaw/commit/370b515)
- Privatize session catalog creation parameters [37b3f41](https://github.com/openclaw/openclaw/commit/37b3f41)
- Remove obsolete experience-review dead-code exemptions [380cd9b](https://github.com/openclaw/openclaw/commit/380cd9b)
- rewrite gateway protocol schemas without the closed-object helper [39528ed](https://github.com/openclaw/openclaw/commit/39528ed)
- Repair formatting and narrow the worker-registry config dependency [39b9d7b](https://github.com/openclaw/openclaw/commit/39b9d7b)
- Remove an unused npm preflight test read [3b1667e](https://github.com/openclaw/openclaw/commit/3b1667e)
- test(auto-reply): run dispatch suite on Windows (#116780) [3b3f709](https://github.com/openclaw/openclaw/commit/3b3f709)
- Avoid repeated model-manifest scans in tests [3b418bd](https://github.com/openclaw/openclaw/commit/3b418bd)
- Clear stale unused-export baseline entries [3bac892](https://github.com/openclaw/openclaw/commit/3bac892)
- Move the tool activity wrapper to the heartbeat module [3bdcfaf](https://github.com/openclaw/openclaw/commit/3bdcfaf)
- Add Feishu proxy fix credit to the changelog [3e4d37b](https://github.com/openclaw/openclaw/commit/3e4d37b)
- Speed up and isolate agent tool tests [3ebcfb8](https://github.com/openclaw/openclaw/commit/3ebcfb8)
- Run mixed-channel QA suites on the host [4040267](https://github.com/openclaw/openclaw/commit/4040267)
- Add Simplified Chinese glossary terms for HealthKit documentation [404651d](https://github.com/openclaw/openclaw/commit/404651d)
- Split cyclic runtime contracts into focused modules [4081743](https://github.com/openclaw/openclaw/commit/4081743)
- Avoid full config runtime imports in CLI tests [41236e6](https://github.com/openclaw/openclaw/commit/41236e6)
- Preserve Markdown list structure during documentation translation [4139938](https://github.com/openclaw/openclaw/commit/4139938)
- honor explicit bases in remote changed-gate runs [4187dff](https://github.com/openclaw/openclaw/commit/4187dff)
- Document direct GitHub media uploads for PRs and issues [428c00a](https://github.com/openclaw/openclaw/commit/428c00a)
- Prioritize native QA work and report safe progress [43a726c](https://github.com/openclaw/openclaw/commit/43a726c)
- Allow trusted validation to continue when remote testboxes are unavailable [442d6fc](https://github.com/openclaw/openclaw/commit/442d6fc)
- reuse the Google Vertex catalog plan in tests [443a939](https://github.com/openclaw/openclaw/commit/443a939)
- Cover Claude Sonnet 5 in CLI migration tests [45d0970](https://github.com/openclaw/openclaw/commit/45d0970)
- Harden autoreview scope, priority, and secret handling [4669db2](https://github.com/openclaw/openclaw/commit/4669db2)
- Add iOS 2026.7.23 changelog entry [480e0c0](https://github.com/openclaw/openclaw/commit/480e0c0)
- Correct the gateway chat dispatch generation test fixture type [4825437](https://github.com/openclaw/openclaw/commit/4825437)
- Accelerate PR operation-lock timing tests [48b8dff](https://github.com/openclaw/openclaw/commit/48b8dff)
- Validate QA debug cursor responses with the shared parser [48bda31](https://github.com/openclaw/openclaw/commit/48bda31)
- Prepare the Android 2026.7.3 Play release [4934957](https://github.com/openclaw/openclaw/commit/4934957)
- Require matching workflows before reusing release evidence [494987f](https://github.com/openclaw/openclaw/commit/494987f)
- Isolate order-sensitive Gateway tests in CI [49cd600](https://github.com/openclaw/openclaw/commit/49cd600)
- Add final landed fixes and credits to the changelog [4a00b96](https://github.com/openclaw/openclaw/commit/4a00b96)
- Preserve translated ordinals inside Markdown list items [4ab29c9](https://github.com/openclaw/openclaw/commit/4ab29c9)
- Require contributor branches to allow maintainer edits [4ae4b5c](https://github.com/openclaw/openclaw/commit/4ae4b5c)
- Finalize control UI locale artifacts before validation [4b65756](https://github.com/openclaw/openclaw/commit/4b65756)
- Make Apple chat model-patch test timing deterministic [4b74a72](https://github.com/openclaw/openclaw/commit/4b74a72)
- Remove an unused Teams attachment helper [4bb4ffc](https://github.com/openclaw/openclaw/commit/4bb4ffc)
- Remove stale sidebar dead-code baselines [4d06181](https://github.com/openclaw/openclaw/commit/4d06181)
- Make QA runtime parity lanes reproducible [4d15c47](https://github.com/openclaw/openclaw/commit/4d15c47)
- Bind gateway node-admission test to a worker turn claim [4d64889](https://github.com/openclaw/openclaw/commit/4d64889)
- Give QA gateway processes more time to stop cleanly [4dc6716](https://github.com/openclaw/openclaw/commit/4dc6716)
- Repair generated-image test typing [4e5029e](https://github.com/openclaw/openclaw/commit/4e5029e)
- Isolate Discord component tests with the shared plugin runtime mock [4ec2f9d](https://github.com/openclaw/openclaw/commit/4ec2f9d)
- Normalize checksum manifest line endings during release verification [4fdb314](https://github.com/openclaw/openclaw/commit/4fdb314)
- Block translation protocol markers from docs output [4fe5002](https://github.com/openclaw/openclaw/commit/4fe5002)
- Catch lifecycle signals before initial process sampling [5019d37](https://github.com/openclaw/openclaw/commit/5019d37)
- Pin Stylelint development tools to exact versions [511a76b](https://github.com/openclaw/openclaw/commit/511a76b)
- Preserve release-validation parser error context [511db36](https://github.com/openclaw/openclaw/commit/511db36)
- Bring the macOS sidebar toggle into the titlebar [5196d06](https://github.com/openclaw/openclaw/commit/5196d06)
- Align managed image preview test contracts [519c8ed](https://github.com/openclaw/openclaw/commit/519c8ed)
- Refresh the Control UI raw-copy baseline [5305812](https://github.com/openclaw/openclaw/commit/5305812)
- refresh Plugin SDK API baseline checksums [53cc297](https://github.com/openclaw/openclaw/commit/53cc297)
- Restore plugin registry state after gateway tests [543603e](https://github.com/openclaw/openclaw/commit/543603e)
- Stabilize Grok reasoning live probes [55679d8](https://github.com/openclaw/openclaw/commit/55679d8)
- Remove stale sidebar attention test fixtures [55845b6](https://github.com/openclaw/openclaw/commit/55845b6)
- Align lifecycle progress and release-matrix test expectations [55afad2](https://github.com/openclaw/openclaw/commit/55afad2)
- Bump the bundled Codex CLI to 0.144.5 [5680791](https://github.com/openclaw/openclaw/commit/5680791)
- Align Telegram delivery test with canonical target format [56d62e6](https://github.com/openclaw/openclaw/commit/56d62e6)
- Update the Control UI startup JavaScript budget baseline [5760fcd](https://github.com/openclaw/openclaw/commit/5760fcd)
- Add Command menu heading to the generated docs map [576c209](https://github.com/openclaw/openclaw/commit/576c209)
- Simplify published package inventory generation [5779422](https://github.com/openclaw/openclaw/commit/5779422)
- Remove a stale packages guide reference [577f2f4](https://github.com/openclaw/openclaw/commit/577f2f4)
- Make QA gateway startup failure return explicit [5783c3a](https://github.com/openclaw/openclaw/commit/5783c3a)
- Regenerate the live-testing documentation map [57a3739](https://github.com/openclaw/openclaw/commit/57a3739)
- Harden full release validation polling and timeouts [57ae43a](https://github.com/openclaw/openclaw/commit/57ae43a)
- Strengthen Auto QA root-cause refactor guidance [57c18b3](https://github.com/openclaw/openclaw/commit/57c18b3)
- Avoid image-tool test runtime warmup [57f72bc](https://github.com/openclaw/openclaw/commit/57f72bc)
- Reject leaked placeholders in docs translations [58e8440](https://github.com/openclaw/openclaw/commit/58e8440)
- Preserve npm onboarding test diagnostics [596ff43](https://github.com/openclaw/openclaw/commit/596ff43)
- Add iOS 2026.8.10 changelog entry [59e4e31](https://github.com/openclaw/openclaw/commit/59e4e31)
- Model exact worker claim lifecycle in fault tests [5ac88c5](https://github.com/openclaw/openclaw/commit/5ac88c5)
- Scope Node toolchain caching to runners that need it [60f238c](https://github.com/openclaw/openclaw/commit/60f238c)
- Remove an unnecessary setup-helper type parameter [620ca5f](https://github.com/openclaw/openclaw/commit/620ca5f)
- Await SQLite reliability-runner compaction [624977e](https://github.com/openclaw/openclaw/commit/624977e)
- Increment the Android 2026.7.1 Play build number [644aea7](https://github.com/openclaw/openclaw/commit/644aea7)
- Validate SQLite-backed Codex transcripts in CI [648d742](https://github.com/openclaw/openclaw/commit/648d742)
- Refresh Plugin SDK API baseline checksums [6630138](https://github.com/openclaw/openclaw/commit/6630138)
- Refresh Discord routing and Matrix QA expectations [686b6b5](https://github.com/openclaw/openclaw/commit/686b6b5)
- Align macOS bundle versions with the package release [68cc976](https://github.com/openclaw/openclaw/commit/68cc976)
- Keep Apple system tools paired during iOS export [6a053f5](https://github.com/openclaw/openclaw/commit/6a053f5)
- Raise Control UI CSS performance budgets to 45 KiB [6a85756](https://github.com/openclaw/openclaw/commit/6a85756)
- Remove a duplicate UI gateway instance getter [6add21b](https://github.com/openclaw/openclaw/commit/6add21b)
- Tighten release validation evidence reuse [6bb240b](https://github.com/openclaw/openclaw/commit/6bb240b)
- Repair CI fallout from Codex runtime identity changes [6bcb561](https://github.com/openclaw/openclaw/commit/6bcb561)
- Document how to include private QA tools in packaged builds [6dc3e60](https://github.com/openclaw/openclaw/commit/6dc3e60)
- Add autonomous maintainer issue-sweep skill [6fbe39e](https://github.com/openclaw/openclaw/commit/6fbe39e)
- Format the sidebar route declaration [706377f](https://github.com/openclaw/openclaw/commit/706377f)
- Rebase the Control UI startup budget to Linux CI measurements [707343b](https://github.com/openclaw/openclaw/commit/707343b)
- Rename a shadowed callback in the Microsoft Teams lifecycle test [70dbbf3](https://github.com/openclaw/openclaw/commit/70dbbf3)
- Refresh generated config baseline checksums [7129585](https://github.com/openclaw/openclaw/commit/7129585)
- Repair CI guard baselines after the dead-code sweep [7181233](https://github.com/openclaw/openclaw/commit/7181233)
- Restore Google Meet shrinkwrap coverage for jszip [723895d](https://github.com/openclaw/openclaw/commit/723895d)
- perf(ci): shard Control UI E2E by measured duration, not source bytes [733d8f9](https://github.com/openclaw/openclaw/commit/733d8f9)
- Use a 12-hour ClawSweeper review window for PR landing [7492f69](https://github.com/openclaw/openclaw/commit/7492f69)
- Isolate provider artifacts in session utility tests [7647d5c](https://github.com/openclaw/openclaw/commit/7647d5c)
- Make beta performance validation advisory and child-job polling resilient [7662b4b](https://github.com/openclaw/openclaw/commit/7662b4b)
- Restore Lobster dependency reference for validation [7683421](https://github.com/openclaw/openclaw/commit/7683421)
- Reuse one browser across session layout tests [7698783](https://github.com/openclaw/openclaw/commit/7698783)
- Prevent duplicate UI page element registration [76e97dd](https://github.com/openclaw/openclaw/commit/76e97dd)
- Reduce compact CI test packing cap for loaded runners [771233c](https://github.com/openclaw/openclaw/commit/771233c)
- Revert accidental gateway protocol schema edits [7752e33](https://github.com/openclaw/openclaw/commit/7752e33)
- Repair workspace bootstrap transient-read tests [77a42ad](https://github.com/openclaw/openclaw/commit/77a42ad)
- Align the Feishu raw-command card test with its explicit opt-in [77fc82c](https://github.com/openclaw/openclaw/commit/77fc82c)
- Correct the Codex usage snapshot type import [7864a6e](https://github.com/openclaw/openclaw/commit/7864a6e)
- Align Telegram live E2E credential assertion [78b489e](https://github.com/openclaw/openclaw/commit/78b489e)
- Keep the Google thinking-level type internal [78dfd47](https://github.com/openclaw/openclaw/commit/78dfd47)
- ci: remove the Test Performance Agent [7909ea6](https://github.com/openclaw/openclaw/commit/7909ea6)
- Echo dynamic mobile E2E response markers [796fc40](https://github.com/openclaw/openclaw/commit/796fc40)
- Cast Node-buffer WebSocket messages for lint-safe decoding [7abb20f](https://github.com/openclaw/openclaw/commit/7abb20f)
- fix(test): zalouser credential and doctor suites fail Windows teardown with EBUSY (#119964) [7b49f57](https://github.com/openclaw/openclaw/commit/7b49f57)
- Split Discord thread tests to restore the max-lines lint gate [7c8f08a](https://github.com/openclaw/openclaw/commit/7c8f08a)
- Reduce TypeScript file counts for the LOC guard [7c99322](https://github.com/openclaw/openclaw/commit/7c99322)
- Make beta performance regressions advisory [7d3b5f5](https://github.com/openclaw/openclaw/commit/7d3b5f5)
- Adds opt-in logging for rejected documentation translations [7d4a16c](https://github.com/openclaw/openclaw/commit/7d4a16c)
- Repair OC Path security-test imports [7efdd9d](https://github.com/openclaw/openclaw/commit/7efdd9d)
- Escape unintended list markers in translated documentation [7f550ea](https://github.com/openclaw/openclaw/commit/7f550ea)
- Format experience review test imports [7ff41d8](https://github.com/openclaw/openclaw/commit/7ff41d8)
- Allow loaded CI to finish media-mirroring tests [8017deb](https://github.com/openclaw/openclaw/commit/8017deb)
- Improve translation rules for clearer localized documentation [81a8405](https://github.com/openclaw/openclaw/commit/81a8405)
- Carry exact worker-turn claims through gateway authorization [81c203a](https://github.com/openclaw/openclaw/commit/81c203a)
- Remove unused CI artifact-check outputs [81d4436](https://github.com/openclaw/openclaw/commit/81d4436)
- Retry transient QA credential heartbeats [822f163](https://github.com/openclaw/openclaw/commit/822f163)
- Isolate chat settings persistence in UI tests [82b0742](https://github.com/openclaw/openclaw/commit/82b0742)
- Stabilize the CLI startup-memory check [82d53fd](https://github.com/openclaw/openclaw/commit/82d53fd)
- Make Windows lint tool launches work reliably [830196c](https://github.com/openclaw/openclaw/commit/830196c)
- Persist Telegram live E2E result metadata [84f5d6d](https://github.com/openclaw/openclaw/commit/84f5d6d)
- Document execution identity audit invariants for contributors [8646c19](https://github.com/openclaw/openclaw/commit/8646c19)
- Isolate locale-sensitive UI custom elements in tests [87c8bdf](https://github.com/openclaw/openclaw/commit/87c8bdf)
- Reuse trusted release validation evidence and run checks faster [87f9809](https://github.com/openclaw/openclaw/commit/87f9809)
- Trim secrets and media test setup [88908d5](https://github.com/openclaw/openclaw/commit/88908d5)
- Remove unused Microsoft Teams attachment test constants [88e0bbc](https://github.com/openclaw/openclaw/commit/88e0bbc)
- Refresh Swift cron-run parameters with agent identity [88fccc6](https://github.com/openclaw/openclaw/commit/88fccc6)
- Restore type checks for Vitest config creators [896592b](https://github.com/openclaw/openclaw/commit/896592b)
- Give silent Vitest retries the full watchdog window [89a16c9](https://github.com/openclaw/openclaw/commit/89a16c9)
- Restore nested docs-i18n masks and reject leaked tokens [8a1201a](https://github.com/openclaw/openclaw/commit/8a1201a)
- Accept queued release artifacts in Telegram package CI [8a31825](https://github.com/openclaw/openclaw/commit/8a31825)
- Exercise subscribed gateway events in MCP channel tests [8a8706c](https://github.com/openclaw/openclaw/commit/8a8706c)
- Read Codex live-test sessions from SQLite [8ac8754](https://github.com/openclaw/openclaw/commit/8ac8754)
- Repair QA timeout guard and stale code-mode symbols [8ad4e85](https://github.com/openclaw/openclaw/commit/8ad4e85)
- Align learn-command tests with proposal safeguards [8ae2736](https://github.com/openclaw/openclaw/commit/8ae2736)
- Unify locale rules for documentation translation prompts [8c90933](https://github.com/openclaw/openclaw/commit/8c90933)
- Bypasses computer settle delays in tests [8cdd96f](https://github.com/openclaw/openclaw/commit/8cdd96f)
- Align the agents-page test with the Automations label [8d39c1b](https://github.com/openclaw/openclaw/commit/8d39c1b)
- Verify npm tarball identity before publish resume [8d66e47](https://github.com/openclaw/openclaw/commit/8d66e47)
- Restore PR CI sweeper token minting [8d67c40](https://github.com/openclaw/openclaw/commit/8d67c40)
- Restore Discord policy test type import [8f1760b](https://github.com/openclaw/openclaw/commit/8f1760b)
- Align live cron probes with current-bound jobs [8f3fe36](https://github.com/openclaw/openclaw/commit/8f3fe36)
- Update gateway source-replacement test agent-selection stub [8f7df1b](https://github.com/openclaw/openclaw/commit/8f7df1b)
- Isolate the QA Lab plugin-tools MCP smoke test [8f8b44a](https://github.com/openclaw/openclaw/commit/8f8b44a)
- Reject documentation translations that lose heading structure [8fea7f5](https://github.com/openclaw/openclaw/commit/8fea7f5)
- Extract legacy Web Push parsing from the doctor migration [8ff4f01](https://github.com/openclaw/openclaw/commit/8ff4f01)
- Add deterministic Wear OS store screenshots [9089e33](https://github.com/openclaw/openclaw/commit/9089e33)
- refresh generated config baseline checksums [913a6a8](https://github.com/openclaw/openclaw/commit/913a6a8)
- Document native app reliability fixes [918745e](https://github.com/openclaw/openclaw/commit/918745e)
- Move deferred-event-buffer test and remove obsolete protocol test [92e8e8b](https://github.com/openclaw/openclaw/commit/92e8e8b)
- Refresh native localization source inventory [9443a59](https://github.com/openclaw/openclaw/commit/9443a59)
- Restore the full v2026.7.1 changelog record [94babf1](https://github.com/openclaw/openclaw/commit/94babf1)
- Align locale files with the final translation catalog [958dc13](https://github.com/openclaw/openclaw/commit/958dc13)
- Make macOS Periphery scans resilient to corrupted xcodegen installs [977e0b6](https://github.com/openclaw/openclaw/commit/977e0b6)
- Align worker placement tests with canonical environment types [9826acd](https://github.com/openclaw/openclaw/commit/9826acd)
- Remove stale gateway-lock dead-code allowance [9857f05](https://github.com/openclaw/openclaw/commit/9857f05)
- Record Android 2026.7.3 correction changelogs [985ec06](https://github.com/openclaw/openclaw/commit/985ec06)
- Use the pinned xcodegen installer for Periphery scans [99826eb](https://github.com/openclaw/openclaw/commit/99826eb)
- Pin an updated Kova revision for performance CI [99cf583](https://github.com/openclaw/openclaw/commit/99cf583)
- Delay wide-access maintainer PRs in generic triage [9aa19fe](https://github.com/openclaw/openclaw/commit/9aa19fe)
- Keep Doctor migration helpers internal and format tests [9c5eab4](https://github.com/openclaw/openclaw/commit/9c5eab4)
- Rebalance hybrid CI shards using measured Blacksmith timings [9cf5859](https://github.com/openclaw/openclaw/commit/9cf5859)
- Remove deleted test from the unit-fast list [9da229c](https://github.com/openclaw/openclaw/commit/9da229c)
- Repair TypeScript CI ratchet drift [9df42e1](https://github.com/openclaw/openclaw/commit/9df42e1)
- Install isolated dependencies for Claude Code worktrees [9e8bcd1](https://github.com/openclaw/openclaw/commit/9e8bcd1)
- Preserve protected literals in translated fenced examples [9ea1fe9](https://github.com/openclaw/openclaw/commit/9ea1fe9)
- Tuple-narrow Slack QA progress markers for type checking [9ebf9a2](https://github.com/openclaw/openclaw/commit/9ebf9a2)
- Scope secret-registry and port test fixtures [9f2c357](https://github.com/openclaw/openclaw/commit/9f2c357)
- Add event-envelope type to chat-state test [a03df5f](https://github.com/openclaw/openclaw/commit/a03df5f)
- Drain timed-out gateway work in tests [a087732](https://github.com/openclaw/openclaw/commit/a087732)
- Fix indented fence handling in docs translation [a13796b](https://github.com/openclaw/openclaw/commit/a13796b)
- Preserve Markdown list structure during docs translation [a14fad5](https://github.com/openclaw/openclaw/commit/a14fad5)
- Isolate review scheduling and onboarding tests for CI gates [a18da06](https://github.com/openclaw/openclaw/commit/a18da06)
- Recover unavailable PRs from an audited release ledger [a2790f1](https://github.com/openclaw/openclaw/commit/a2790f1)
- Align prerelease security test expectations [a291cf7](https://github.com/openclaw/openclaw/commit/a291cf7)
- Require explicit authorization for security advisory actions [a2b5345](https://github.com/openclaw/openclaw/commit/a2b5345)
- Restore the OpenAI web-search smoke test over HTTPS [a2c2c55](https://github.com/openclaw/openclaw/commit/a2c2c55)
- Restore the Kimi live-test helper import [a327e43](https://github.com/openclaw/openclaw/commit/a327e43)
- Make xAI live tests tolerate regional model restrictions [a381b50](https://github.com/openclaw/openclaw/commit/a381b50)
- Refresh generated documentation baselines [a419270](https://github.com/openclaw/openclaw/commit/a419270)
- Allow the read-only state database opener in Kysely guardrails [a4467f1](https://github.com/openclaw/openclaw/commit/a4467f1)
- Translate visible MDX attributes in localized docs [a4cd562](https://github.com/openclaw/openclaw/commit/a4cd562)
- Preserve fenced examples in documentation translations [a68b4f4](https://github.com/openclaw/openclaw/commit/a68b4f4)
- Keep iOS snapshot test results out of the screenshot upload tree [a69ebf3](https://github.com/openclaw/openclaw/commit/a69ebf3)
- Align Telegram dispatch tests with final-update options [a6ab4b7](https://github.com/openclaw/openclaw/commit/a6ab4b7)
- Retry transient QA transcript search-index settle races [a726bd7](https://github.com/openclaw/openclaw/commit/a726bd7)
- Preserve AI runtime files in CI build artifacts [a780541](https://github.com/openclaw/openclaw/commit/a780541)
- Remove unused snapshot module to unblock CI [a7b086d](https://github.com/openclaw/openclaw/commit/a7b086d)
- test(release): require live channel after restart (#127013) [a842ad3](https://github.com/openclaw/openclaw/commit/a842ad3)
- Add a test-authoring gate and net-neutral bug-fix policy [a8714ee](https://github.com/openclaw/openclaw/commit/a8714ee)
- Remove duplicate automation locale entries [a8ae27f](https://github.com/openclaw/openclaw/commit/a8ae27f)
- Keep plugin pack output machine-readable [a8ce892](https://github.com/openclaw/openclaw/commit/a8ce892)
- Make release retries refresh evidence without skipping ClawHub checks [a8d1611](https://github.com/openclaw/openclaw/commit/a8d1611)
- Isolate session model resolution from gateway utilities [a938b47](https://github.com/openclaw/openclaw/commit/a938b47)
- Remove a version-specific reasoning-support comment [a951cd2](https://github.com/openclaw/openclaw/commit/a951cd2)
- Align footer inset test with centered chip layout [a9761ab](https://github.com/openclaw/openclaw/commit/a9761ab)
- Clear lint findings in Telegram and labeler tests [aa33c63](https://github.com/openclaw/openclaw/commit/aa33c63)
- preserve Markdown syntax during docs translation [aa98780](https://github.com/openclaw/openclaw/commit/aa98780)
- Align agent PR landing gate guidance [ab8da6d](https://github.com/openclaw/openclaw/commit/ab8da6d)
- Set Auto QA campaign and landing-report defaults [acdb284](https://github.com/openclaw/openclaw/commit/acdb284)
- Validate the full release harness before reusing evidence [ace2407](https://github.com/openclaw/openclaw/commit/ace2407)
- Add landed fixes and contributor credits to the changelog [ace6f65](https://github.com/openclaw/openclaw/commit/ace6f65)
- Record the measured Control UI startup budget [ad400d8](https://github.com/openclaw/openclaw/commit/ad400d8)
- Update the Control UI startup JavaScript budget baseline [add6b20](https://github.com/openclaw/openclaw/commit/add6b20)
- Extract chat notices to restore UI file-size headroom [adf81e1](https://github.com/openclaw/openclaw/commit/adf81e1)
- Align tests with private UI export cleanup [aea2dd6](https://github.com/openclaw/openclaw/commit/aea2dd6)
- Align approval gateway test mock with runtime request type [aeeacd9](https://github.com/openclaw/openclaw/commit/aeeacd9)
- Localize generic plugin terminology in Russian docs generation [af7379b](https://github.com/openclaw/openclaw/commit/af7379b)
- Verify SQLite trajectory capture in the gateway live test [b0455c9](https://github.com/openclaw/openclaw/commit/b0455c9)
- Isolate autonomous issue sweeps in bounded worktrees [b252df8](https://github.com/openclaw/openclaw/commit/b252df8)
- Restore typing for package acceptance timeout checks [b2bb148](https://github.com/openclaw/openclaw/commit/b2bb148)
- Refresh the 2026.7.1 macOS appcast archive metadata [b3239a5](https://github.com/openclaw/openclaw/commit/b3239a5)
- Stabilize the iOS Appearance snapshot test [b3cdb49](https://github.com/openclaw/openclaw/commit/b3cdb49)
- Repair extension runtime test fixtures [b48c801](https://github.com/openclaw/openclaw/commit/b48c801)
- Trust maintainer-authored dependency changes [b52d2f0](https://github.com/openclaw/openclaw/commit/b52d2f0)
- Restore the gateway chat protocol type import [b575b5e](https://github.com/openclaw/openclaw/commit/b575b5e)
- Install local workspace packages for Kova performance runs [b63317d](https://github.com/openclaw/openclaw/commit/b63317d)
- Align Wear uploads with the configured Google Play track [b63ccef](https://github.com/openclaw/openclaw/commit/b63ccef)
- Retry invalid locale placeholder responses [b669291](https://github.com/openclaw/openclaw/commit/b669291)
- Join worktree discovery before releasing PR operation locks [b7bbb4f](https://github.com/openclaw/openclaw/commit/b7bbb4f)
- Add deterministic iOS App Store release planning [b7d77b0](https://github.com/openclaw/openclaw/commit/b7d77b0)
- Avoid a secret-like literal in the Telegram release test [b7dd330](https://github.com/openclaw/openclaw/commit/b7dd330)
- Make iOS release screenshot capture reliable and verifiable [b85c0e2](https://github.com/openclaw/openclaw/commit/b85c0e2)
- Preserve Markdown list spacing during documentation translation [b8a47b2](https://github.com/openclaw/openclaw/commit/b8a47b2)
- Split Discord policy tests to meet the lint line limit [b8c1ab1](https://github.com/openclaw/openclaw/commit/b8c1ab1)
- Repair tests and guardrails blocking main CI [b952394](https://github.com/openclaw/openclaw/commit/b952394)
- Declare an injectable timestamp for the PR CI sweeper [b9c9140](https://github.com/openclaw/openclaw/commit/b9c9140)
- Use unpadded iOS App Store revisions [ba09e05](https://github.com/openclaw/openclaw/commit/ba09e05)
- Merge upstream main changes into the working branch [ba12348](https://github.com/openclaw/openclaw/commit/ba12348)
- Keep beta Telegram package acceptance advisory [bab9a5e](https://github.com/openclaw/openclaw/commit/bab9a5e)
- Restore lint compliance in the Telegram transport-close proof test [bb26753](https://github.com/openclaw/openclaw/commit/bb26753)
- Baseline a test-only chat-state export [bbd6f79](https://github.com/openclaw/openclaw/commit/bbd6f79)
- Preserve one code fence when localized docs are split for translation [bc691ea](https://github.com/openclaw/openclaw/commit/bc691ea)
- Normalize translated list wrappers around placeholders [bd1ab1e](https://github.com/openclaw/openclaw/commit/bd1ab1e)
- Align route tests with agent-selection scope [bd2be83](https://github.com/openclaw/openclaw/commit/bd2be83)
- Scope unit-fast test discovery to active lanes [bd9b1b4](https://github.com/openclaw/openclaw/commit/bd9b1b4)
- Add stable request cursors to QA mock providers [bdc9c60](https://github.com/openclaw/openclaw/commit/bdc9c60)
- Removes Control UI tool-display test mocks [bebcf52](https://github.com/openclaw/openclaw/commit/bebcf52)
- Remove unused native app code [bf13c3b](https://github.com/openclaw/openclaw/commit/bf13c3b)
- Resynchronize native i18n source-line metadata [c029d99](https://github.com/openclaw/openclaw/commit/c029d99)
- Restore concurrent TUI PTY tests with per-test cleanup [c20ce00](https://github.com/openclaw/openclaw/commit/c20ce00)
- Align correction release validation and ledger semantics [c2b4ac0](https://github.com/openclaw/openclaw/commit/c2b4ac0)
- Tighten macOS status-item routing lifecycle [c31d199](https://github.com/openclaw/openclaw/commit/c31d199)
- Resolve Plugin SDK surface counts from source [c37c8d5](https://github.com/openclaw/openclaw/commit/c37c8d5)
- Prepare Android 2026.7.3 correction build [c56dd50](https://github.com/openclaw/openclaw/commit/c56dd50)
- Retry malformed transient GitHub API responses in release validation [c68a644](https://github.com/openclaw/openclaw/commit/c68a644)
- Refresh the TypeScript line-count ratchet after main advances [c808b01](https://github.com/openclaw/openclaw/commit/c808b01)
- Accept normalized admin permission in Telegram release QA [c8bc828](https://github.com/openclaw/openclaw/commit/c8bc828)
- Rebalance CLI-runner CI packing estimates [ca0a63f](https://github.com/openclaw/openclaw/commit/ca0a63f)
- Align queued retarget test with Sol medium reasoning default [ca2d4d7](https://github.com/openclaw/openclaw/commit/ca2d4d7)
- Trim unused Control UI exports [cad6df0](https://github.com/openclaw/openclaw/commit/cad6df0)
- Fail closed when release asset verification commands fail [cb350ad](https://github.com/openclaw/openclaw/commit/cb350ad)
- Publish QA readiness only from final artifacts [cc1c610](https://github.com/openclaw/openclaw/commit/cc1c610)
- Protect fenced literals during documentation translation [cee3e30](https://github.com/openclaw/openclaw/commit/cee3e30)
- Force Codex runtime in Slack approval QA scenarios [cf33f5a](https://github.com/openclaw/openclaw/commit/cf33f5a)
- Use active gh authentication for release evidence [cfd4ecb](https://github.com/openclaw/openclaw/commit/cfd4ecb)
- Default docs translation to GPT-5.6 xhigh [cfda86b](https://github.com/openclaw/openclaw/commit/cfda86b)
- Make SQLite snapshot fault injection target the publication step [d230a4a](https://github.com/openclaw/openclaw/commit/d230a4a)
- Narrow gateway fallback-context reload coverage [d27d7ba](https://github.com/openclaw/openclaw/commit/d27d7ba)
- Update Slack QA to parse typed approval actions [d36d543](https://github.com/openclaw/openclaw/commit/d36d543)
- Align release-validation tests with workflow guards [d3959d9](https://github.com/openclaw/openclaw/commit/d3959d9)
- Align NVIDIA guided-secret test metadata [d3ff48c](https://github.com/openclaw/openclaw/commit/d3ff48c)
- Correct the Codex usage test marker import [d42dfed](https://github.com/openclaw/openclaw/commit/d42dfed)
- Remove retired Android voice release screenshot [d445a25](https://github.com/openclaw/openclaw/commit/d445a25)
- Require null-delimited file lists for tools [d4ed57b](https://github.com/openclaw/openclaw/commit/d4ed57b)
- Update the Control UI startup JavaScript budget baseline [d699ed0](https://github.com/openclaw/openclaw/commit/d699ed0)
- Validate macOS release version metadata during preflight [d6b38e2](https://github.com/openclaw/openclaw/commit/d6b38e2)
- Handle Android SDK license pipe closure in CI [d739dae](https://github.com/openclaw/openclaw/commit/d739dae)
- Retain the macOS notification test observer [d7a2ec7](https://github.com/openclaw/openclaw/commit/d7a2ec7)
- Normalize absent workspace conflicts in chat notices [d823cdc](https://github.com/openclaw/openclaw/commit/d823cdc)
- Remove disabled CI timing job and unused outputs [d8697d5](https://github.com/openclaw/openclaw/commit/d8697d5)
- Satisfy ClawHub release-helper linting [d9778b3](https://github.com/openclaw/openclaw/commit/d9778b3)
- Align sidebar customization E2E coverage with current navigation defaults [d9c9dcf](https://github.com/openclaw/openclaw/commit/d9c9dcf)
- Resolve manual CI protocol comparison baseline [d9c9eeb](https://github.com/openclaw/openclaw/commit/d9c9eeb)
- Remove unused Apple app code [da4a480](https://github.com/openclaw/openclaw/commit/da4a480)
- Repair dead-export checks and refresh the Plugin SDK baseline [db879e7](https://github.com/openclaw/openclaw/commit/db879e7)
- Align release metadata to version 2026.7.2 [dba64d5](https://github.com/openclaw/openclaw/commit/dba64d5)
- use suite fixtures in the read-only preferences test [dc0b995](https://github.com/openclaw/openclaw/commit/dc0b995)
- Calibrate hosted CI startup-memory allowance [dc3d06c](https://github.com/openclaw/openclaw/commit/dc3d06c)
- Overlap TUI gateway startup in end-to-end tests [dd4f94f](https://github.com/openclaw/openclaw/commit/dd4f94f)
- Complete Plugin SDK API baseline coverage [ddbec92](https://github.com/openclaw/openclaw/commit/ddbec92)
- Remove a stale Reef lint-suppression entry [df71481](https://github.com/openclaw/openclaw/commit/df71481)
- Reformat MCP OAuth issuer test for lint [dfb4712](https://github.com/openclaw/openclaw/commit/dfb4712)
- Make PR CI sweeper lookback tests time-stable [e293042](https://github.com/openclaw/openclaw/commit/e293042)
- Make gateway test mocks independent of factory timing [e294c15](https://github.com/openclaw/openclaw/commit/e294c15)
- Publish generated Android and Apple locale resources [e2ed58e](https://github.com/openclaw/openclaw/commit/e2ed58e)
- Stop a state migration constant from tripping the CI environment-variable count [e4e558d](https://github.com/openclaw/openclaw/commit/e4e558d)
- Add Android 2026.7.4 Play Store changelogs [e4e7f37](https://github.com/openclaw/openclaw/commit/e4e7f37)
- Update the pinned Kova performance evaluator revision [e5722a6](https://github.com/openclaw/openclaw/commit/e5722a6)
- Refresh Plugin SDK API baseline checksums [e6cba86](https://github.com/openclaw/openclaw/commit/e6cba86)
- Make beta Telegram QA advisory and fail faster [e7801de](https://github.com/openclaw/openclaw/commit/e7801de)
- Pin the expanded release preflight usage test [e8a634f](https://github.com/openclaw/openclaw/commit/e8a634f)
- Rewrite workspace dependencies for OCM install tests [e8c1780](https://github.com/openclaw/openclaw/commit/e8c1780)
- Scope beta release advisories and verify evidence-reuse targets [e98bb59](https://github.com/openclaw/openclaw/commit/e98bb59)
- Refresh native-localization source line references [e9e62b5](https://github.com/openclaw/openclaw/commit/e9e62b5)
- Stabilize generated npm shrinkwrap metadata [eac4214](https://github.com/openclaw/openclaw/commit/eac4214)
- Reuse the TUI PTY Gateway test fixture [eae9e76](https://github.com/openclaw/openclaw/commit/eae9e76)
- Stabilize the worker lost-window replay test [eb1120f](https://github.com/openclaw/openclaw/commit/eb1120f)
- Prepare Android 2026.7.4 for Google Play [eb263c5](https://github.com/openclaw/openclaw/commit/eb263c5)
- Restart QA gateways after migration convergence [ebae858](https://github.com/openclaw/openclaw/commit/ebae858)
- Stabilize iOS release screenshot launches [ebbbfa4](https://github.com/openclaw/openclaw/commit/ebbbfa4)
- Remove unused Swift app helpers [ec62328](https://github.com/openclaw/openclaw/commit/ec62328)
- Publish alpha notes from their exact changelog section [eefe2e8](https://github.com/openclaw/openclaw/commit/eefe2e8)
- Make release publishes resumable and concurrent [ef22e77](https://github.com/openclaw/openclaw/commit/ef22e77)
- Align scheduled E2E checks with SQLite session storage [efdce67](https://github.com/openclaw/openclaw/commit/efdce67)
- Split OpenAI live QA catalog tests for file-size headroom [f0de4cf](https://github.com/openclaw/openclaw/commit/f0de4cf)
- Isolate macOS node restart notification tests [f1076c2](https://github.com/openclaw/openclaw/commit/f1076c2)
- Preserve verified release pages during resume [f1b75bf](https://github.com/openclaw/openclaw/commit/f1b75bf)
- Protect inline code during docs translation [f2bd7f5](https://github.com/openclaw/openclaw/commit/f2bd7f5)
- Repair plugin prerelease test coverage [f341a01](https://github.com/openclaw/openclaw/commit/f341a01)
- Filter unresolved PR-title references from release-note records [f3fcea0](https://github.com/openclaw/openclaw/commit/f3fcea0)
- refactor(ios): share Agent Pro detail components (#119868) [f457c2c](https://github.com/openclaw/openclaw/commit/f457c2c)
- Make APNs registration tombstones use SQLite STRICT mode [f5bb19e](https://github.com/openclaw/openclaw/commit/f5bb19e)
- Refresh native localization inventory line coordinates [f60d052](https://github.com/openclaw/openclaw/commit/f60d052)
- fix(test): drain late mock registrations (#126037) [f649017](https://github.com/openclaw/openclaw/commit/f649017)
- Remove unused gateway supervision exports [f871b49](https://github.com/openclaw/openclaw/commit/f871b49)
- Await setup-session cleanup in gateway tests [f8916e4](https://github.com/openclaw/openclaw/commit/f8916e4)
- Add agent runtime metadata to the Swift model-choice protocol [fabdfc9](https://github.com/openclaw/openclaw/commit/fabdfc9)
- repair suspension-lane lint and dead-code checks [faef57e](https://github.com/openclaw/openclaw/commit/faef57e)
- Cache npm preflight builds for same-SHA reruns [fde42b5](https://github.com/openclaw/openclaw/commit/fde42b5)
- Expose repository skills to Claude Code [fe6ce17](https://github.com/openclaw/openclaw/commit/fe6ce17)
- add routed inbound dispatch regression coverage [fed1b69](https://github.com/openclaw/openclaw/commit/fed1b69)
- Close cached test databases before Windows fixture cleanup [ff83e3e](https://github.com/openclaw/openclaw/commit/ff83e3e)
- Format the synchronous file-read signature [ff8d4a3](https://github.com/openclaw/openclaw/commit/ff8d4a3)
- Compact attempt-runner callback formatting [ffcac47](https://github.com/openclaw/openclaw/commit/ffcac47)
- Run Mantis Telegram proof with Node 24 [#100237](https://github.com/openclaw/openclaw/pull/100237)
- Share Matrix QA scenarios across live and Crabline drivers [#101253](https://github.com/openclaw/openclaw/pull/101253)
- Update Android UI Automator to stable 2.4.0 [#101501](https://github.com/openclaw/openclaw/pull/101501)
- Restore Swift 6.2 builds for the chat transcript cache [#101611](https://github.com/openclaw/openclaw/pull/101611)
- Clear completed Zalouser probe timers [#101649](https://github.com/openclaw/openclaw/pull/101649)
- Bound legacy toolsBySender warning cache [#101696](https://github.com/openclaw/openclaw/pull/101696)
- Bound Codex compaction warning memory [#101745](https://github.com/openclaw/openclaw/pull/101745)
- Bound warning caches in long-running gateways [#101746](https://github.com/openclaw/openclaw/pull/101746)
- Lock in media filename sanitization coverage [#101816](https://github.com/openclaw/openclaw/pull/101816)
- Make QA Lab gateway pipe failures deterministic [#102104](https://github.com/openclaw/openclaw/pull/102104)
- Update Codex shared-client fixtures for the 0.143.0 floor [#102160](https://github.com/openclaw/openclaw/pull/102160)
- Simplify and re-enable bounded QA smoke coverage [#102262](https://github.com/openclaw/openclaw/pull/102262)
- Share one Workboard contract with Control UI [#102271](https://github.com/openclaw/openclaw/pull/102271)
- Send owner-qualified ClawHub install telemetry [#102377](https://github.com/openclaw/openclaw/pull/102377)
- Report CLI startup metadata pipe failures clearly [#102436](https://github.com/openclaw/openclaw/pull/102436)
- Guard the Control UI theme cycle with a browser test [#102455](https://github.com/openclaw/openclaw/pull/102455)
- Refresh the native app i18n inventory baseline [#102476](https://github.com/openclaw/openclaw/pull/102476)
- Stop cross-file mock leakage in auth-profile tests [#102493](https://github.com/openclaw/openclaw/pull/102493)
- Restore deterministic release validation [#102516](https://github.com/openclaw/openclaw/pull/102516)
- Remove obsolete macOS dashboard sidebar CSS [#102526](https://github.com/openclaw/openclaw/pull/102526)
- Accept tool-only completion in release validation [#102600](https://github.com/openclaw/openclaw/pull/102600)
- Keep Matrix QA preview evidence UTF-16 safe [#102606](https://github.com/openclaw/openclaw/pull/102606)
- Keep the internal Slack preview surrogate-safe [#102612](https://github.com/openclaw/openclaw/pull/102612)
- Keep Crestodian prompt history UTF-16 safe [#102627](https://github.com/openclaw/openclaw/pull/102627)
- Keep Matrix QA reply previews UTF-16 safe [#102656](https://github.com/openclaw/openclaw/pull/102656)
- Bound iMessage allowlist warning state [#102658](https://github.com/openclaw/openclaw/pull/102658)
- Bound the usage-template warning cache [#102659](https://github.com/openclaw/openclaw/pull/102659)
- Align sidebar tests with uncapped session lists [#102660](https://github.com/openclaw/openclaw/pull/102660)
- Strengthen memory-flush Unicode regression coverage [#102685](https://github.com/openclaw/openclaw/pull/102685)
- Handle Matrix QA CLI pipe failures safely [#102698](https://github.com/openclaw/openclaw/pull/102698)
- Stabilize session-cost stream error checks [#102704](https://github.com/openclaw/openclaw/pull/102704)
- Align Telegram QA with explicit command denial replies [#102732](https://github.com/openclaw/openclaw/pull/102732)
- Add Android discovery and startup regression coverage [#102758](https://github.com/openclaw/openclaw/pull/102758)
- Require exact npm package sets in release checks [#102759](https://github.com/openclaw/openclaw/pull/102759)
- Add Android main activity lifecycle regression coverage [#102764](https://github.com/openclaw/openclaw/pull/102764)
- Sync plugin prerelease test contracts [#102777](https://github.com/openclaw/openclaw/pull/102777)
- Localize unused xAI declarations [#102778](https://github.com/openclaw/openclaw/pull/102778)
- Add the Control UI native link-routing contract [#102783](https://github.com/openclaw/openclaw/pull/102783)
- Localize unused Control UI declarations [#102793](https://github.com/openclaw/openclaw/pull/102793)
- Remove orphaned Android legacy screens [#102809](https://github.com/openclaw/openclaw/pull/102809)
- Normalize malformed JSON errors in QA HTTP endpoints [#102830](https://github.com/openclaw/openclaw/pull/102830)
- Type missing plugin public-surface resolution errors [#102852](https://github.com/openclaw/openclaw/pull/102852)
- Make release child workflow dispatches idempotent [#102858](https://github.com/openclaw/openclaw/pull/102858)
- Isolate Control UI chat tests from the shared custom-element registry [#102869](https://github.com/openclaw/openclaw/pull/102869)
- Ignore profiling-only resource gate failures [#102894](https://github.com/openclaw/openclaw/pull/102894)
- Retry transient release workflow reads [#102896](https://github.com/openclaw/openclaw/pull/102896)
- Scope the Control UI default-agent E2E selector [#102902](https://github.com/openclaw/openclaw/pull/102902)
- Stabilize the WhatsApp reconnect boundary test [#102942](https://github.com/openclaw/openclaw/pull/102942)
- Sync the Nodes raw-copy baseline [#102968](https://github.com/openclaw/openclaw/pull/102968)
- Retry known live-tool nonce mismatches during release validation [#102980](https://github.com/openclaw/openclaw/pull/102980)
- Make the Docker heartbeat test tolerate clock rollover [#102986](https://github.com/openclaw/openclaw/pull/102986)
- Back off OCM release asset retries [#102996](https://github.com/openclaw/openclaw/pull/102996)
- Accept Kova PASS records that omit optional violations [#103002](https://github.com/openclaw/openclaw/pull/103002)
- Serialize real TUI PTY backend tests in release CI [#103006](https://github.com/openclaw/openclaw/pull/103006)
- Restore device-token revocation release coverage [#103016](https://github.com/openclaw/openclaw/pull/103016)
- Restore complete Kova release-performance validation [#103030](https://github.com/openclaw/openclaw/pull/103030)
- Verify live provider traffic in performance runs [#103073](https://github.com/openclaw/openclaw/pull/103073)
- Restore Kova release performance gate loading [#103082](https://github.com/openclaw/openclaw/pull/103082)
- Restore Kova managed-service release scenarios [#103085](https://github.com/openclaw/openclaw/pull/103085)
- Remove orphaned Android sheet composer [#103094](https://github.com/openclaw/openclaw/pull/103094)
- Isolate OpenWebUI release validation on a large-disk runner [#103095](https://github.com/openclaw/openclaw/pull/103095)
- Restore Apple builds with SwiftFormat 0.62.1 [#103098](https://github.com/openclaw/openclaw/pull/103098)
- Deduplicate Talk audio playback and metering primitives [#103099](https://github.com/openclaw/openclaw/pull/103099)
- Record recent Unicode and display fixes in the changelog [#103102](https://github.com/openclaw/openclaw/pull/103102)
- Restore missing credit for preserved UTF-16 fixes [#103105](https://github.com/openclaw/openclaw/pull/103105)
- Pin the corrected Kova release evaluator [#103110](https://github.com/openclaw/openclaw/pull/103110)
- Retry transient MiniMax image failures in release CI [#103114](https://github.com/openclaw/openclaw/pull/103114)
- Fail release performance gates when report publication fails [#103126](https://github.com/openclaw/openclaw/pull/103126)
- Prepare the private QA runtime for Matrix live shards [#103129](https://github.com/openclaw/openclaw/pull/103129)
- Restore provider evidence in live OpenAI performance checks [#103151](https://github.com/openclaw/openclaw/pull/103151)
- Remove stale planning and proof artifacts [#103152](https://github.com/openclaw/openclaw/pull/103152)
- Align Copilot replay test with consolidated tool metadata [#103182](https://github.com/openclaw/openclaw/pull/103182)
- Remove the transient loader from cross-OS release checks [#103195](https://github.com/openclaw/openclaw/pull/103195)
- Restore OpenRouter and Fireworks release validation coverage [#103204](https://github.com/openclaw/openclaw/pull/103204)
- Isolate Telegram release QA from candidate code [#103207](https://github.com/openclaw/openclaw/pull/103207)
- Pin product-scoped memory accounting for performance gates [#103217](https://github.com/openclaw/openclaw/pull/103217)
- Keep QA Lab evidence valid at Unicode truncation boundaries [#103219](https://github.com/openclaw/openclaw/pull/103219)
- Validate GitHub release notes before publishing [#103222](https://github.com/openclaw/openclaw/pull/103222)
- Stabilize MCP timeout retry regression coverage [#103223](https://github.com/openclaw/openclaw/pull/103223)
- Stabilize Control UI lifecycle release checks [#103224](https://github.com/openclaw/openclaw/pull/103224)
- Update the docs translation tool's x/net dependency [#103225](https://github.com/openclaw/openclaw/pull/103225)
- Verify performance reports after final push timeouts [#103237](https://github.com/openclaw/openclaw/pull/103237)
- Pin docs translation CI to patched Go 1.25.12 [#103244](https://github.com/openclaw/openclaw/pull/103244)
- Build iOS without requiring a named simulator [#103259](https://github.com/openclaw/openclaw/pull/103259)
- Pin the corrected Kova timeout classifier [#103264](https://github.com/openclaw/openclaw/pull/103264)
- Remove a retained-writer session-lock test race [#103280](https://github.com/openclaw/openclaw/pull/103280)
- Reject skipped required Telegram package checks [#103310](https://github.com/openclaw/openclaw/pull/103310)
- Make Apple formatting and lint deterministic [#103313](https://github.com/openclaw/openclaw/pull/103313)
- Restore DeepSeek V4 release validation [#103321](https://github.com/openclaw/openclaw/pull/103321)
- Retry transient live image-probe mismatches [#103327](https://github.com/openclaw/openclaw/pull/103327)
- Add Slack chart proof and private QA SDK budget [#103337](https://github.com/openclaw/openclaw/pull/103337)
- Stabilize Control UI locale tests across module resets [#103338](https://github.com/openclaw/openclaw/pull/103338)
- Strengthen Claude CLI warm-session continuity proof [#103343](https://github.com/openclaw/openclaw/pull/103343)
- Isolate locale-sensitive Control UI tests [#103345](https://github.com/openclaw/openclaw/pull/103345)
- Keep extension test expectations aligned with tracked files [#103369](https://github.com/openclaw/openclaw/pull/103369)
- Prevent tooling tests from signaling their own process group [#103399](https://github.com/openclaw/openclaw/pull/103399)
- Add regression coverage for terminal C1 filtering [#103439](https://github.com/openclaw/openclaw/pull/103439)
- Update Codex live release checks for SQLite bindings [#103467](https://github.com/openclaw/openclaw/pull/103467)
- Stabilize the macOS Codex pipe-drain test under load [#103478](https://github.com/openclaw/openclaw/pull/103478)
- Isolate macOS config-change notification tests [#103481](https://github.com/openclaw/openclaw/pull/103481)
- Stabilize the gateway deletion-admission CI fixture [#103486](https://github.com/openclaw/openclaw/pull/103486)
- Add regression coverage for session drops on split-pane headers [#103525](https://github.com/openclaw/openclaw/pull/103525)
- Consolidate Matrix QA scenarios in QA Lab [#103589](https://github.com/openclaw/openclaw/pull/103589)
- Reuse the QA Lab Matrix workflow for release checks [#103604](https://github.com/openclaw/openclaw/pull/103604)
- Publish generated locale updates through reviewable pull requests [#103625](https://github.com/openclaw/openclaw/pull/103625)
- Keep successful QA retries from being reported as runtime failures [#103635](https://github.com/openclaw/openclaw/pull/103635)
- Split locale publisher permissions and retire stale output [#103644](https://github.com/openclaw/openclaw/pull/103644)
- Exclude non-assistant QA fixtures from token usage gates [#103650](https://github.com/openclaw/openclaw/pull/103650)
- Restore manually dispatched live-provider release suites [#103654](https://github.com/openclaw/openclaw/pull/103654)
- Derive QA smoke scenario coverage from the current catalog [#103656](https://github.com/openclaw/openclaw/pull/103656)
- Serialize maintainer PR operations per pull request [#103669](https://github.com/openclaw/openclaw/pull/103669)
- Make Cron page registration safe to repeat [#103670](https://github.com/openclaw/openclaw/pull/103670)
- Preflight locale publisher permissions before generation [#103671](https://github.com/openclaw/openclaw/pull/103671)
- Accept structured gateway restart outcomes in runtime-parity QA [#103681](https://github.com/openclaw/openclaw/pull/103681)
- Normalize Control UI locale generation metadata [#103682](https://github.com/openclaw/openclaw/pull/103682)
- Require web_fetch after QA tool discovery [#103685](https://github.com/openclaw/openclaw/pull/103685)
- Refresh generated native locale catalogs [#103689](https://github.com/openclaw/openclaw/pull/103689)
- Wait for durable WebChat transcripts in QA [#103718](https://github.com/openclaw/openclaw/pull/103718)
- Publish maturity scorecard updates with least-privilege credentials [#103722](https://github.com/openclaw/openclaw/pull/103722)
- Make release validation artifact-only and immutably bound [#103737](https://github.com/openclaw/openclaw/pull/103737)
- Refresh native locale handoff for the microphone message [#103743](https://github.com/openclaw/openclaw/pull/103743)
- Add a non-publishing preflight for plugin npm artifacts [#103759](https://github.com/openclaw/openclaw/pull/103759)
- Align OpenAI auth contract with the GPT-5.6 Sol default [#103760](https://github.com/openclaw/openclaw/pull/103760)
- Bind release-check status artifacts to the current run attempt [#103772](https://github.com/openclaw/openclaw/pull/103772)
- Keep QA Lab saved-view text Unicode-safe [#103789](https://github.com/openclaw/openclaw/pull/103789)
- Make release performance evidence exact and publishable [#103790](https://github.com/openclaw/openclaw/pull/103790)
- Preserve beta upgrade, doctor, and restart validation signals [#103796](https://github.com/openclaw/openclaw/pull/103796)
- Correct squash-revert accounting in release validation [#103798](https://github.com/openclaw/openclaw/pull/103798)
- Publish ClawHub packages from immutable artifacts [#103809](https://github.com/openclaw/openclaw/pull/103809)
- Validate Kova's bin-only mock provider correctly [#103810](https://github.com/openclaw/openclaw/pull/103810)
- Restore compact Swift conditional formatting [#103832](https://github.com/openclaw/openclaw/pull/103832)
- Guard strict audit date validation with command-boundary tests [#103833](https://github.com/openclaw/openclaw/pull/103833)
- Restore read-only prerelease and release validation startup [#103834](https://github.com/openclaw/openclaw/pull/103834)
- Repair Kova model pinning in performance CI [#103839](https://github.com/openclaw/openclaw/pull/103839)
- Restore full Kova performance report selection [#103863](https://github.com/openclaw/openclaw/pull/103863)
- Keep no-push Docker validation artifacts private [#103891](https://github.com/openclaw/openclaw/pull/103891)
- Bind release validation evidence to exact run attempts [#103906](https://github.com/openclaw/openclaw/pull/103906)
- Preserve the active Node runtime in Windows env wrappers [#103907](https://github.com/openclaw/openclaw/pull/103907)
- Preserve Unicode in Matrix QA error previews [#103909](https://github.com/openclaw/openclaw/pull/103909)
- Bind regular publication to trusted workflow SHAs [#103913](https://github.com/openclaw/openclaw/pull/103913)
- Recognize Meta terms in the Chinese docs glossary [#103923](https://github.com/openclaw/openclaw/pull/103923)
- Restore cooperative suspension validation [#103925](https://github.com/openclaw/openclaw/pull/103925)
- Validate unpublished AI packages in local release checks [#103941](https://github.com/openclaw/openclaw/pull/103941)
- Prevent stale PR sync evidence on retries [#103944](https://github.com/openclaw/openclaw/pull/103944)
- Unblock the Meta provider's first npm beta publication [#103951](https://github.com/openclaw/openclaw/pull/103951)
- Extend macOS signed-restart shutdown grace period [#103957](https://github.com/openclaw/openclaw/pull/103957)
- Use Kova's public model override in performance runs [#103966](https://github.com/openclaw/openclaw/pull/103966)
- Keep Crabbox hydration pnpm shims writable [#103971](https://github.com/openclaw/openclaw/pull/103971)
- Restore CI validation for older release tags [#103975](https://github.com/openclaw/openclaw/pull/103975)
- Avoid false Claude failures in release validation [#103994](https://github.com/openclaw/openclaw/pull/103994)
- Preserve real model-input exports in Crestodian test mocks [#103999](https://github.com/openclaw/openclaw/pull/103999)
- Make release preparation bounded and repeatable [#104000](https://github.com/openclaw/openclaw/pull/104000)
- Pin Kova evaluator auth-startup fixes [#104002](https://github.com/openclaw/openclaw/pull/104002)
- Accept Kova collector-only performance phases [#104008](https://github.com/openclaw/openclaw/pull/104008)
- Keep gateway watch detached in limited terminals [#104009](https://github.com/openclaw/openclaw/pull/104009)
- Prevent Telegram attestation buffer failures [#104025](https://github.com/openclaw/openclaw/pull/104025)
- Restore credentials for the Telegram release QA workflow [#104036](https://github.com/openclaw/openclaw/pull/104036)
- Restore Telegram live QA credentials in release checks [#104066](https://github.com/openclaw/openclaw/pull/104066)
- Support frozen targets in release validation [#104090](https://github.com/openclaw/openclaw/pull/104090)
- Expose Telegram QA launcher failures safely [#104099](https://github.com/openclaw/openclaw/pull/104099)
- Support frozen release validation targets [#104124](https://github.com/openclaw/openclaw/pull/104124)
- Keep Telegram release QA inside its isolated runtime root [#104125](https://github.com/openclaw/openclaw/pull/104125)
- Centralize Gateway agent wait lifecycle [#104147](https://github.com/openclaw/openclaw/pull/104147)
- Resume unchanged release candidates with trusted validation evidence [#104162](https://github.com/openclaw/openclaw/pull/104162)
- Preserve canonical PR credit across release backports [#104166](https://github.com/openclaw/openclaw/pull/104166)
- Normalize persisted restart-handoff intent IDs safely [#104168](https://github.com/openclaw/openclaw/pull/104168)
- Preserve Node access in isolated Telegram release QA [#104175](https://github.com/openclaw/openclaw/pull/104175)
- Offer CLI channels for unreleased macOS builds [#104178](https://github.com/openclaw/openclaw/pull/104178)
- Preserve PR history and reject stale worktree wrappers [#104181](https://github.com/openclaw/openclaw/pull/104181)
- Support unreleased versions in current-tree package checks [#104186](https://github.com/openclaw/openclaw/pull/104186)
- Add a fail-closed live updater for maintainers [#104202](https://github.com/openclaw/openclaw/pull/104202)
- Prove packaged Gateway suspension lifecycle in Docker [#104203](https://github.com/openclaw/openclaw/pull/104203)
- Preserve package intent across QA reruns and release smoke tests [#104207](https://github.com/openclaw/openclaw/pull/104207)
- Preserve browser extension assets in runtime builds [#104229](https://github.com/openclaw/openclaw/pull/104229)
- Enforce repository formatting and refresh TypeScript checks [#104239](https://github.com/openclaw/openclaw/pull/104239)
- Keep QA Lab web text valid at UTF-16 limits [#104249](https://github.com/openclaw/openclaw/pull/104249)
- Allow the Telegram release-QA preload in worker threads [#104252](https://github.com/openclaw/openclaw/pull/104252)
- Consolidate OpenAI web-search QA coverage [#104280](https://github.com/openclaw/openclaw/pull/104280)
- Repair changed-test routing and Vitest harness integrity [#104287](https://github.com/openclaw/openclaw/pull/104287)
- Remove obsolete Control UI sidebar styles [#104296](https://github.com/openclaw/openclaw/pull/104296)
- Preserve Kova failure evidence [#104297](https://github.com/openclaw/openclaw/pull/104297)
- Unblock Kova local packs during release preparation [#104307](https://github.com/openclaw/openclaw/pull/104307)
- Skip ZIP release tests when unzip is unavailable [#104311](https://github.com/openclaw/openclaw/pull/104311)
- Harden managed Gateway and macOS app restarts [#104314](https://github.com/openclaw/openclaw/pull/104314)
- Fail faster in trusted Telegram release validation [#104324](https://github.com/openclaw/openclaw/pull/104324)
- Harden live Gateway build and restart auditing [#104329](https://github.com/openclaw/openclaw/pull/104329)
- Consolidate Discord custom-id codecs [#104334](https://github.com/openclaw/openclaw/pull/104334)
- Guard the Codex OAuth model-catalog boundary [#104335](https://github.com/openclaw/openclaw/pull/104335)
- Lock Discord and Matrix thread-placement artifacts to runtime defaults [#104342](https://github.com/openclaw/openclaw/pull/104342)
- Sync the canonical autoreview policy and runtime [#104343](https://github.com/openclaw/openclaw/pull/104343)
- Protect the running Mac app during replacement builds [#104345](https://github.com/openclaw/openclaw/pull/104345)
- Add strict typechecking for repository scripts [#104348](https://github.com/openclaw/openclaw/pull/104348)
- Run Kova and source performance probes in parallel [#104349](https://github.com/openclaw/openclaw/pull/104349)
- Resync the Control UI i18n baseline [#104352](https://github.com/openclaw/openclaw/pull/104352)
- Reuse recent same-PR hosted gates [#104355](https://github.com/openclaw/openclaw/pull/104355)
- Report the exact failing Telegram canary sandbox stage [#104356](https://github.com/openclaw/openclaw/pull/104356)
- Stop the Gateway without rebuilding stale source output [#104357](https://github.com/openclaw/openclaw/pull/104357)
- test: wire Control UI suite into CI, fix its broken tests, drop dead harness surface [#104361](https://github.com/openclaw/openclaw/pull/104361)
- fix: retry live Gateway readiness proof [#104374](https://github.com/openclaw/openclaw/pull/104374)
- fix: preserve Mac bundle during live builds [#104376](https://github.com/openclaw/openclaw/pull/104376)
- perf(ci): fetch only source performance baseline [#104378](https://github.com/openclaw/openclaw/pull/104378)
- Identify failing Telegram release-QA preflight stages [#104387](https://github.com/openclaw/openclaw/pull/104387)
- Tolerate an already-exited Telegram QA probe during cleanup [#104400](https://github.com/openclaw/openclaw/pull/104400)
- Silence a macOS exec-approval lock warning [#104408](https://github.com/openclaw/openclaw/pull/104408)
- Add a focused build profile for source performance probes [#104417](https://github.com/openclaw/openclaw/pull/104417)
- Wait for Telegram release-QA process marker [#104418](https://github.com/openclaw/openclaw/pull/104418)
- Bound conflict-marker scans on large files [#104420](https://github.com/openclaw/openclaw/pull/104420)
- Exercise Discord multipart proxy uploads on Node 24 [#104421](https://github.com/openclaw/openclaw/pull/104421)
- Separate Node and UI typechecking and enforce awaited promises [#104422](https://github.com/openclaw/openclaw/pull/104422)
- Standardize Feishu and Matrix retries on the core engine [#104431](https://github.com/openclaw/openclaw/pull/104431)
- Eliminate macOS Swift test warning and timing flake [#104434](https://github.com/openclaw/openclaw/pull/104434)
- Wait for Telegram QA process-marker visibility [#104439](https://github.com/openclaw/openclaw/pull/104439)
- Shorten Kova diagnostic runtime packaging [#104443](https://github.com/openclaw/openclaw/pull/104443)
- Remove Android Gradle and manifest build warnings [#104451](https://github.com/openclaw/openclaw/pull/104451)
- Restore the trusted Telegram release QA launcher [#104455](https://github.com/openclaw/openclaw/pull/104455)
- Let Kova own performance diagnostic policy [#104459](https://github.com/openclaw/openclaw/pull/104459)
- improve(ci): balance compact whole test jobs [#104472](https://github.com/openclaw/openclaw/pull/104472)
- chore(tooling): typecheck root test/** with a dedicated tsgo lane [#104475](https://github.com/openclaw/openclaw/pull/104475)
- refactor(agents): converge run staleness policy onto diagnostic activity owner [#104476](https://github.com/openclaw/openclaw/pull/104476)
- test(channels): delivery trace harness with feishu and mattermost goldens [#104478](https://github.com/openclaw/openclaw/pull/104478)
- Reuse exact-SHA web artifacts during live Mac updates [#104482](https://github.com/openclaw/openclaw/pull/104482)
- Keep failover classifier details UTF-16 safe [#104487](https://github.com/openclaw/openclaw/pull/104487)
- Shorten compact pull-request test critical path [#104508](https://github.com/openclaw/openclaw/pull/104508)
- Align browser and Ollama prerelease test expectations [#104542](https://github.com/openclaw/openclaw/pull/104542)
- Handle missing merge bases in delegated CI reports [#104557](https://github.com/openclaw/openclaw/pull/104557)
- Add Microsoft Teams delivery trace goldens [#104573](https://github.com/openclaw/openclaw/pull/104573)
- fix(qa-lab): keep telegram QA progress detail truncation UTF-16 safe [#104576](https://github.com/openclaw/openclaw/pull/104576)
- feat(tooling): adopt noUncheckedIndexedAccess via a strict-ratchet lane (phase 1) [#104577](https://github.com/openclaw/openclaw/pull/104577)
- test(telegram): delivery trace goldens for the edit-preview lifecycle [#104581](https://github.com/openclaw/openclaw/pull/104581)
- test(qqbot): delivery trace goldens for replace-mode streaming and reply budget [#104582](https://github.com/openclaw/openclaw/pull/104582)
- Add Slack delivery lifecycle golden traces [#104583](https://github.com/openclaw/openclaw/pull/104583)
- Consolidate Mattermost retries with full-jitter support [#104594](https://github.com/openclaw/openclaw/pull/104594)
- Add Matrix delivery trace goldens [#104596](https://github.com/openclaw/openclaw/pull/104596)
- Check changed files for formatting before CI [#104605](https://github.com/openclaw/openclaw/pull/104605)
- Harden plugin prerelease timing assertions [#104606](https://github.com/openclaw/openclaw/pull/104606)
- Recover delayed signed Mac bundle restores during live updates [#104613](https://github.com/openclaw/openclaw/pull/104613)
- Canonicalize the live QQBot group gate [#104647](https://github.com/openclaw/openclaw/pull/104647)
- Make stale-chunk recovery testing deterministic [#104649](https://github.com/openclaw/openclaw/pull/104649)
- Enforce one 24-hour hosted-gate window [#104651](https://github.com/openclaw/openclaw/pull/104651)
- Improve channel delivery-trace harness ergonomics and lane guards [#104653](https://github.com/openclaw/openclaw/pull/104653)
- Unblock trusted linked-worktree PR tooling [#104658](https://github.com/openclaw/openclaw/pull/104658)
- Consolidate internal channel config-schema imports [#104665](https://github.com/openclaw/openclaw/pull/104665)
- Remove dead internal reply facades and prevent their reuse [#104673](https://github.com/openclaw/openclaw/pull/104673)
- Let frozen release candidates skip an unavailable protocol guard [#104674](https://github.com/openclaw/openclaw/pull/104674)
- Stabilize the full agents test suite under load [#104682](https://github.com/openclaw/openclaw/pull/104682)
- Reuse hosted-gate evidence after docs-only commits [#104696](https://github.com/openclaw/openclaw/pull/104696)
- Validate frozen release candidates against their own capabilities [#104697](https://github.com/openclaw/openclaw/pull/104697)
- Add live-model E2E coverage for node-hosted tools and skills [#104699](https://github.com/openclaw/openclaw/pull/104699)
- Harden and isolate autoreview tooling [#104701](https://github.com/openclaw/openclaw/pull/104701)
- Cover recurring command jobs in restart catch-up tests [#104707](https://github.com/openclaw/openclaw/pull/104707)
- Finish AWS Crabbox hydration after pnpm exit hangs [#104710](https://github.com/openclaw/openclaw/pull/104710)
- Preflight supervised macOS app restarts [#104723](https://github.com/openclaw/openclaw/pull/104723)
- Stabilize owner-approved Testbox landing [#104726](https://github.com/openclaw/openclaw/pull/104726)
- Remove a redundant agent-tool parameter wrapper [#104727](https://github.com/openclaw/openclaw/pull/104727)
- Stabilize validation for frozen release targets [#104728](https://github.com/openclaw/openclaw/pull/104728)
- Honor frozen-target tools in release validation [#104740](https://github.com/openclaw/openclaw/pull/104740)
- Empty takeover after the Unicode tail fix landed elsewhere [#104754](https://github.com/openclaw/openclaw/pull/104754)
- Pass frozen-target UI test options directly to Vitest [#104758](https://github.com/openclaw/openclaw/pull/104758)
- Guard Telegram streamed and durable chunk parity [#104760](https://github.com/openclaw/openclaw/pull/104760)
- Pin changed-format checks for added files [#104771](https://github.com/openclaw/openclaw/pull/104771)
- Pin the optimized Kova performance evaluator [#104772](https://github.com/openclaw/openclaw/pull/104772)
- Make remaining core indexed access explicit [#104773](https://github.com/openclaw/openclaw/pull/104773)
- Preserve Telegram projection fixture event identities [#104777](https://github.com/openclaw/openclaw/pull/104777)
- Restore the Docker E2E boundary lint [#104784](https://github.com/openclaw/openclaw/pull/104784)
- Fail cross-repository Crabbox lease claims [#104789](https://github.com/openclaw/openclaw/pull/104789)
- Stop retrying frozen UI test files [#104790](https://github.com/openclaw/openclaw/pull/104790)
- Enforce the Docker E2E package boundary in CI [#104797](https://github.com/openclaw/openclaw/pull/104797)
- Pin OCM v0.2.25 for performance validation [#104801](https://github.com/openclaw/openclaw/pull/104801)
- Preserve active work during live updates [#104802](https://github.com/openclaw/openclaw/pull/104802)
- Allow more CI time for frozen UI fixtures [#104805](https://github.com/openclaw/openclaw/pull/104805)
- Update the Android build and test toolchain [#104807](https://github.com/openclaw/openclaw/pull/104807)
- Reduce cron event-watcher prompt overhead [#104826](https://github.com/openclaw/openclaw/pull/104826)
- Accept trusted unsigned release-branch merge heads [#104838](https://github.com/openclaw/openclaw/pull/104838)
- Rebuild the live macOS app after protocol model changes [#104839](https://github.com/openclaw/openclaw/pull/104839)
- Preserve Unicode in QA Lab gateway diagnostics [#104840](https://github.com/openclaw/openclaw/pull/104840)
- Ignore generated trajectory exports in source checkouts [#104858](https://github.com/openclaw/openclaw/pull/104858)
- Route reply session refresh through the session accessor [#104880](https://github.com/openclaw/openclaw/pull/104880)
- Repair typed-approval build and validation gates [#104882](https://github.com/openclaw/openclaw/pull/104882)
- Stabilize bounded usage-cost retry coverage [#104883](https://github.com/openclaw/openclaw/pull/104883)
- Make bundled-provider auth parity checks fail closed [#104886](https://github.com/openclaw/openclaw/pull/104886)
- Remove unreachable Android chat code [#104887](https://github.com/openclaw/openclaw/pull/104887)
- Consolidate private Workboard runtime state [#104891](https://github.com/openclaw/openclaw/pull/104891)
- Preserve canonical PRs for named backports [#104892](https://github.com/openclaw/openclaw/pull/104892)
- Extract legacy-store analyzer merge rules [#104894](https://github.com/openclaw/openclaw/pull/104894)
- Centralize changed-path facts for CI tooling [#104897](https://github.com/openclaw/openclaw/pull/104897)
- Stabilize reply-initialization concurrency timestamps [#104900](https://github.com/openclaw/openclaw/pull/104900)
- Centralize plugin registration commit and rollback [#104902](https://github.com/openclaw/openclaw/pull/104902)
- Retry GPT-5.6 live-probe nonce mismatches [#104905](https://github.com/openclaw/openclaw/pull/104905)
- Bound QA smoke runs to ten minutes [#104909](https://github.com/openclaw/openclaw/pull/104909)
- Align terminal-session freshness tests with SQLite metadata [#104925](https://github.com/openclaw/openclaw/pull/104925)
- Tighten usage-cost retry timeout coverage [#104934](https://github.com/openclaw/openclaw/pull/104934)
- Extract Control UI locale sync planning [#104943](https://github.com/openclaw/openclaw/pull/104943)
- Remove dead UI and parser helpers [#104944](https://github.com/openclaw/openclaw/pull/104944)
- Unify generated Codex protocol artifact staging [#104948](https://github.com/openclaw/openclaw/pull/104948)
- Move WhatsApp controllers to shared runtime context [#104949](https://github.com/openclaw/openclaw/pull/104949)
- Refresh the tracked Plugin SDK API baseline hashes [#104954](https://github.com/openclaw/openclaw/pull/104954)
- Harden current and frozen release checks [#104956](https://github.com/openclaw/openclaw/pull/104956)
- Verify named backports with authoritative PR associations [#104957](https://github.com/openclaw/openclaw/pull/104957)
- Isolate the QA scenario command lifecycle [#104958](https://github.com/openclaw/openclaw/pull/104958)
- Allow schema-version reads in SQLite tests [#104960](https://github.com/openclaw/openclaw/pull/104960)
- Centralize PR prepare-gate planning [#104961](https://github.com/openclaw/openclaw/pull/104961)
- Remove dead core and extension exports [#104963](https://github.com/openclaw/openclaw/pull/104963)
- Recover snapshot Gateway updates without an existing control build [#104964](https://github.com/openclaw/openclaw/pull/104964)
- Move provider-auth parity coverage out of core source [#104974](https://github.com/openclaw/openclaw/pull/104974)
- Refresh native translation-memory artifacts [#104978](https://github.com/openclaw/openclaw/pull/104978)
- Share prompt and theme resource collection [#104988](https://github.com/openclaw/openclaw/pull/104988)
- Centralize managed TaskFlow mutations [#104994](https://github.com/openclaw/openclaw/pull/104994)
- Move provider auth parity coverage out of core source [#104995](https://github.com/openclaw/openclaw/pull/104995)
- Share ACP runtime-option command handling [#104998](https://github.com/openclaw/openclaw/pull/104998)
- Simplify internal TTS command handling [#105005](https://github.com/openclaw/openclaw/pull/105005)
- Gate frozen-target QA smoke by checkout capability [#105006](https://github.com/openclaw/openclaw/pull/105006)
- Harden live-updater snapshot recovery [#105007](https://github.com/openclaw/openclaw/pull/105007)
- Remove redundant ACPX probe plumbing [#105023](https://github.com/openclaw/openclaw/pull/105023)
- Reuse shared Watch approval transport models [#105024](https://github.com/openclaw/openclaw/pull/105024)
- Harden native locale extraction and artifact validation [#105026](https://github.com/openclaw/openclaw/pull/105026)
- Refresh stable Android dependencies [#105037](https://github.com/openclaw/openclaw/pull/105037)
- Isolate macOS Gateway auth test state [#105048](https://github.com/openclaw/openclaw/pull/105048)
- Isolate model-discovery tests from bundled plugins [#105050](https://github.com/openclaw/openclaw/pull/105050)
- Simplify iOS approval test fixtures [#105052](https://github.com/openclaw/openclaw/pull/105052)
- Support explicit release provenance overrides [#105055](https://github.com/openclaw/openclaw/pull/105055)
- Harden UI and performance release validation [#105061](https://github.com/openclaw/openclaw/pull/105061)
- Tell translation retries exactly which placeholders were lost [#105076](https://github.com/openclaw/openclaw/pull/105076)
- Remove unused LINE rich-menu user helpers [#105107](https://github.com/openclaw/openclaw/pull/105107)
- Throttle stale-issue locking to avoid workflow rate limits [#105117](https://github.com/openclaw/openclaw/pull/105117)
- Avoid login-shell noise in cron watcher QA [#105118](https://github.com/openclaw/openclaw/pull/105118)
- Check active-goal context in complete provider input [#105123](https://github.com/openclaw/openclaw/pull/105123)
- Add live proof for repeated Gateway restart recovery [#105126](https://github.com/openclaw/openclaw/pull/105126)
- Enforce checked indexed access across bundled extensions [#105132](https://github.com/openclaw/openclaw/pull/105132)
- Remove the obsolete file-backed session projection path [#105136](https://github.com/openclaw/openclaw/pull/105136)
- Make locale parity advisory before release CI [#105140](https://github.com/openclaw/openclaw/pull/105140)
- Remove unused private model-catalog exports [#105150](https://github.com/openclaw/openclaw/pull/105150)
- Remove an unused channel token helper [#105159](https://github.com/openclaw/openclaw/pull/105159)
- Repair the Playwright AI snapshot test fixture [#105172](https://github.com/openclaw/openclaw/pull/105172)
- Enforce checked indexed access across repository scripts [#105180](https://github.com/openclaw/openclaw/pull/105180)
- Remove the obsolete plain-file plugin installer [#105205](https://github.com/openclaw/openclaw/pull/105205)
- Align Control UI E2E tests with current interactions [#105206](https://github.com/openclaw/openclaw/pull/105206)
- Isolate Control UI tests for frozen compatibility targets [#105208](https://github.com/openclaw/openclaw/pull/105208)
- Align browser snapshot test contracts [#105210](https://github.com/openclaw/openclaw/pull/105210)
- Bound legacy QA smoke compatibility runs [#105213](https://github.com/openclaw/openclaw/pull/105213)
- Align Slack prerelease validation with current contracts [#105214](https://github.com/openclaw/openclaw/pull/105214)
- Bound Telegram release provenance lookups [#105219](https://github.com/openclaw/openclaw/pull/105219)
- Enforce safe indexed access in root TypeScript tests [#105223](https://github.com/openclaw/openclaw/pull/105223)
- Remove unused plugin contribution-owner wrappers [#105224](https://github.com/openclaw/openclaw/pull/105224)
- Refresh the Plugin SDK node-presence API baseline [#105236](https://github.com/openclaw/openclaw/pull/105236)
- Enforce safe indexed access from the base TypeScript config [#105239](https://github.com/openclaw/openclaw/pull/105239)
- Pin SwiftFormat for frozen iOS targets [#105242](https://github.com/openclaw/openclaw/pull/105242)
- Remove obsolete session transcript helpers [#105245](https://github.com/openclaw/openclaw/pull/105245)
- Sync the canonical autoreview skill and hardening [#105250](https://github.com/openclaw/openclaw/pull/105250)
- Isolate Matrix approval reaction tests from runtime state [#105251](https://github.com/openclaw/openclaw/pull/105251)
- Align plugin prerelease tests with current contracts [#105252](https://github.com/openclaw/openclaw/pull/105252)
- Align Telegram prerelease tests with current behavior [#105253](https://github.com/openclaw/openclaw/pull/105253)
- Align OpenAI prerelease tests with current contracts [#105256](https://github.com/openclaw/openclaw/pull/105256)
- Document Testbox cleanup flag syntax [#105268](https://github.com/openclaw/openclaw/pull/105268)
- Pin release-validation docs tooling to Go 1.25.12 [#105270](https://github.com/openclaw/openclaw/pull/105270)
- Repair Codex plugin prerelease validation [#105272](https://github.com/openclaw/openclaw/pull/105272)
- Remove obsolete plugin runtime helpers [#105273](https://github.com/openclaw/openclaw/pull/105273)
- Remove unused internal plugin helpers [#105276](https://github.com/openclaw/openclaw/pull/105276)
- Enforce checked indexed access in UI tests [#105283](https://github.com/openclaw/openclaw/pull/105283)
- Allow unreleased changelogs for exact-ref package validation [#105291](https://github.com/openclaw/openclaw/pull/105291)
- Stop absent cleanup spans from blocking performance validation [#105292](https://github.com/openclaw/openclaw/pull/105292)
- Remove stale agent testing aliases [#105293](https://github.com/openclaw/openclaw/pull/105293)
- Preserve frozen Android build validation [#105299](https://github.com/openclaw/openclaw/pull/105299)
- Repair SQLite memory prerelease fixtures [#105303](https://github.com/openclaw/openclaw/pull/105303)
- Wait for the real Control UI composer in QA [#105309](https://github.com/openclaw/openclaw/pull/105309)
- Remove duplicate gateway test aliases [#105312](https://github.com/openclaw/openclaw/pull/105312)
- Restore a previously passing Kova performance evaluator [#105314](https://github.com/openclaw/openclaw/pull/105314)
- Exercise graceful Gateway restart in Matrix replay QA [#105317](https://github.com/openclaw/openclaw/pull/105317)
- Accept explicit disabled-Gateway performance evidence [#105324](https://github.com/openclaw/openclaw/pull/105324)
- Remove obsolete auto-reply testing aliases [#105332](https://github.com/openclaw/openclaw/pull/105332)
- Validate frozen pre-SQLite session stores [#105337](https://github.com/openclaw/openclaw/pull/105337)
- Isolate legacy QA smoke scenarios to prevent validation timeouts [#105340](https://github.com/openclaw/openclaw/pull/105340)
- Enforce indexed-access checks in extension tests [#105343](https://github.com/openclaw/openclaw/pull/105343)
- Remove the obsolete git testing alias [#105345](https://github.com/openclaw/openclaw/pull/105345)
- Select a compatible mock model for LTS Telegram QA [#105348](https://github.com/openclaw/openclaw/pull/105348)
- Stop QA Lab from copying Crabline credentials and prepare immutable artifacts [#105349](https://github.com/openclaw/openclaw/pull/105349)
- Stabilize live-updater ownership test fixtures [#105352](https://github.com/openclaw/openclaw/pull/105352)
- Remove obsolete doctor test aliases [#105355](https://github.com/openclaw/openclaw/pull/105355)
- Keep source-ref packaging self-contained [#105360](https://github.com/openclaw/openclaw/pull/105360)
- Remove an unused macOS presence-reporter capture [#105361](https://github.com/openclaw/openclaw/pull/105361)
- Restore Telegram QA target-ref binding [#105362](https://github.com/openclaw/openclaw/pull/105362)
- Remove obsolete internal skill testing aliases [#105363](https://github.com/openclaw/openclaw/pull/105363)
- Retain evidence from failed Telegram release checks [#105367](https://github.com/openclaw/openclaw/pull/105367)
- Remove obsolete command testing aliases [#105369](https://github.com/openclaw/openclaw/pull/105369)
- Enforce indexed-access safety across core tests [#105375](https://github.com/openclaw/openclaw/pull/105375)
- Remove an obsolete wizard testing alias [#105377](https://github.com/openclaw/openclaw/pull/105377)
- Split agents-core full-suite tests into bounded processes [#105382](https://github.com/openclaw/openclaw/pull/105382)
- Remove an obsolete channel testing alias [#105385](https://github.com/openclaw/openclaw/pull/105385)
- Remove obsolete Cloudflare AI Gateway testing alias [#105394](https://github.com/openclaw/openclaw/pull/105394)
- Simplify tolerant apply-patch matching [#105395](https://github.com/openclaw/openclaw/pull/105395)
- Run the ts-topology entrypoint on Windows [#105397](https://github.com/openclaw/openclaw/pull/105397)
- Align existing-session browser test mocks [#105398](https://github.com/openclaw/openclaw/pull/105398)
- Remove an obsolete Gemini testing alias [#105400](https://github.com/openclaw/openclaw/pull/105400)
- Align release-QA mock catalogs with selected target models [#105401](https://github.com/openclaw/openclaw/pull/105401)
- Remove obsolete transcription test aliases [#105406](https://github.com/openclaw/openclaw/pull/105406)
- Centralize Control UI usage-query filters [#105407](https://github.com/openclaw/openclaw/pull/105407)
- Centralize Nostr metrics state [#105408](https://github.com/openclaw/openclaw/pull/105408)
- Centralize precomputed CLI help dispatch [#105409](https://github.com/openclaw/openclaw/pull/105409)
- Remove obsolete Google Meet Chrome test alias [#105416](https://github.com/openclaw/openclaw/pull/105416)
- Remove an unused Meta stream helper export [#105443](https://github.com/openclaw/openclaw/pull/105443)
- Remove an unused audit recorder test reset [#105446](https://github.com/openclaw/openclaw/pull/105446)
- Keep the APNS response limit internal [#105459](https://github.com/openclaw/openclaw/pull/105459)
- Localize the Doctor database-bloat collector [#105468](https://github.com/openclaw/openclaw/pull/105468)
- Route session updates through the canonical SQLite patch path [#105469](https://github.com/openclaw/openclaw/pull/105469)
- Preserve safe Telegram candidate diagnostics in release validation [#105472](https://github.com/openclaw/openclaw/pull/105472)
- Keep the ClawRouter default URL private [#105474](https://github.com/openclaw/openclaw/pull/105474)
- Avoid allocating oversized session-file payloads [#105477](https://github.com/openclaw/openclaw/pull/105477)
- Localize Tencent's preview model reference [#105482](https://github.com/openclaw/openclaw/pull/105482)
- Remove obsolete Brave test-only alias [#105486](https://github.com/openclaw/openclaw/pull/105486)
- Reduce subagent registry query allocations [#105487](https://github.com/openclaw/openclaw/pull/105487)
- Keep QA memory embeddings on the local mock endpoint [#105488](https://github.com/openclaw/openclaw/pull/105488)
- Model Codex remote compaction in the QA parity server [#105493](https://github.com/openclaw/openclaw/pull/105493)
- Read QA runtime parity transcripts from SQLite [#105495](https://github.com/openclaw/openclaw/pull/105495)
- Remove unused gateway benchmark testing aliases [#105497](https://github.com/openclaw/openclaw/pull/105497)
- Preserve model-routing proof from failed Telegram release QA [#105499](https://github.com/openclaw/openclaw/pull/105499)
- Repair image-result handling in runtime parity mocks [#105500](https://github.com/openclaw/openclaw/pull/105500)
- Remove stale Telegram runner testing alias [#105502](https://github.com/openclaw/openclaw/pull/105502)
- Remove an unused diagnostic logging test export [#105505](https://github.com/openclaw/openclaw/pull/105505)
- Remove the unused config-guard test alias [#105506](https://github.com/openclaw/openclaw/pull/105506)
- Stabilize the read-tool card fixture in release CI [#105508](https://github.com/openclaw/openclaw/pull/105508)
- Align Microsoft Teams stream-failure delivery trace [#105509](https://github.com/openclaw/openclaw/pull/105509)
- Remove the duplicate JSONL socket test alias [#105510](https://github.com/openclaw/openclaw/pull/105510)
- Prevent session concurrency test timeouts [#105516](https://github.com/openclaw/openclaw/pull/105516)
- Retain safe Telegram QA trace milestones [#105521](https://github.com/openclaw/openclaw/pull/105521)
- Remove an unused Workspaces migration helper [#105522](https://github.com/openclaw/openclaw/pull/105522)
- Remove an unused Android benchmark coordinate [#105524](https://github.com/openclaw/openclaw/pull/105524)
- Add a verified local SQLite snapshot repository [#105525](https://github.com/openclaw/openclaw/pull/105525)
- Remove an unused Memory Core size classifier [#105526](https://github.com/openclaw/openclaw/pull/105526)
- Remove unused channel bootstrap ID listing [#105531](https://github.com/openclaw/openclaw/pull/105531)
- Remove an unused ClawDock color helper [#105534](https://github.com/openclaw/openclaw/pull/105534)
- Let Telegram release QA wait for credential capacity [#105535](https://github.com/openclaw/openclaw/pull/105535)
- Remove unused Parallels macOS execution helpers [#105538](https://github.com/openclaw/openclaw/pull/105538)
- Verify Discord identity-probe timeout behavior [#105541](https://github.com/openclaw/openclaw/pull/105541)
- Internalize unused session helpers and types [#105542](https://github.com/openclaw/openclaw/pull/105542)
- Parallelize release runtime-parity tiers [#105545](https://github.com/openclaw/openclaw/pull/105545)
- Make unused outbound-audit helpers module-private [#105546](https://github.com/openclaw/openclaw/pull/105546)
- Remove unused agent auth-plan wrapper [#105554](https://github.com/openclaw/openclaw/pull/105554)
- Keep Code Mode control-tool internals module-private [#105563](https://github.com/openclaw/openclaw/pull/105563)
- Stabilize TUI PTY lifecycle tests [#105566](https://github.com/openclaw/openclaw/pull/105566)
- Keep successful Telegram QA lanes green without diagnostics [#105569](https://github.com/openclaw/openclaw/pull/105569)
- Remove an unused live-model provider export [#105570](https://github.com/openclaw/openclaw/pull/105570)
- Remove stale embedded-agent exports [#105572](https://github.com/openclaw/openclaw/pull/105572)
- Reuse the SDK JSON result helper in WhatsApp calls [#105574](https://github.com/openclaw/openclaw/pull/105574)
- Remove redundant zero-usage helper [#105577](https://github.com/openclaw/openclaw/pull/105577)
- Reuse the shared retry runtime for WhatsApp delivery [#105579](https://github.com/openclaw/openclaw/pull/105579)
- Consolidate WhatsApp normalization and account selection [#105580](https://github.com/openclaw/openclaw/pull/105580)
- Keep disabled CLI discovery helper private [#105587](https://github.com/openclaw/openclaw/pull/105587)
- Privatize unused auto-reply internals [#105589](https://github.com/openclaw/openclaw/pull/105589)
- Allow intentional SQLite schema inspection in CI [#105591](https://github.com/openclaw/openclaw/pull/105591)
- Enforce unused-export detection with a Knip ratchet [#105595](https://github.com/openclaw/openclaw/pull/105595)
- Privatize two single-caller Gateway helpers [#105596](https://github.com/openclaw/openclaw/pull/105596)
- Trim unused process supervisor type exports [#105599](https://github.com/openclaw/openclaw/pull/105599)
- Trim unused internal infrastructure exports [#105606](https://github.com/openclaw/openclaw/pull/105606)
- Remove unused internal plugin exports [#105612](https://github.com/openclaw/openclaw/pull/105612)
- Deduplicate Telegram release-validation proofs [#105613](https://github.com/openclaw/openclaw/pull/105613)
- Refresh the unused-export baseline for recent UI and CLI work [#105615](https://github.com/openclaw/openclaw/pull/105615)
- Baseline dead-code exports after racing landings [#105627](https://github.com/openclaw/openclaw/pull/105627)
- Privatize unused banner and menu exports [#105628](https://github.com/openclaw/openclaw/pull/105628)
- Trim unused private agent exports [#105631](https://github.com/openclaw/openclaw/pull/105631)
- Remove dead SQLite session exports and readers [#105639](https://github.com/openclaw/openclaw/pull/105639)
- Bound Telegram QA gateway log capture [#105645](https://github.com/openclaw/openclaw/pull/105645)
- Narrow Control UI helper exports [#105663](https://github.com/openclaw/openclaw/pull/105663)
- Trim unused private helper exports from bundled plugins [#105687](https://github.com/openclaw/openclaw/pull/105687)
- Remove unused private routing exports [#105691](https://github.com/openclaw/openclaw/pull/105691)
- Keep frozen-target dead-code checks compatible and make unused exports advisory [#105704](https://github.com/openclaw/openclaw/pull/105704)
- Stabilize Control UI tests across retained module graphs [#105711](https://github.com/openclaw/openclaw/pull/105711)
- Proxy Cloud Worker model turns through the credential-owning gateway [#105719](https://github.com/openclaw/openclaw/pull/105719)
- Remove unused private Responses provider exports [#105720](https://github.com/openclaw/openclaw/pull/105720)
- Restore snapshot architecture and docs gates [#105721](https://github.com/openclaw/openclaw/pull/105721)
- Handle empty ClawHub bootstrap plans during release [#105722](https://github.com/openclaw/openclaw/pull/105722)
- Remove avoidable waits from focused tests [#105737](https://github.com/openclaw/openclaw/pull/105737)
- Repair the unused-export baseline [#105739](https://github.com/openclaw/openclaw/pull/105739)
- Add concurrent SQLite snapshot reliability proof [#105740](https://github.com/openclaw/openclaw/pull/105740)
- Enforce macOS Swift dead-code checks [#105743](https://github.com/openclaw/openclaw/pull/105743)
- Unblock Discord and Kimi beta plugin publication [#105746](https://github.com/openclaw/openclaw/pull/105746)
- Remove unused private package aggregate entry points [#105747](https://github.com/openclaw/openclaw/pull/105747)
- Make unused runtime-plan helper types private [#105755](https://github.com/openclaw/openclaw/pull/105755)
- Trim unused Nostr plugin seams [#105756](https://github.com/openclaw/openclaw/pull/105756)
- Make scoped WhatsApp auto-reply tests self-contained [#105760](https://github.com/openclaw/openclaw/pull/105760)
- Restore macOS SwiftPM builds without SwiftUI macro plugins [#105768](https://github.com/openclaw/openclaw/pull/105768)
- Add a cross-platform dead-code gate for shared OpenClawKit [#105770](https://github.com/openclaw/openclaw/pull/105770)
- Trim implementation-only MCP app exports [#105771](https://github.com/openclaw/openclaw/pull/105771)
- Trim unused Control UI API type exports [#105772](https://github.com/openclaw/openclaw/pull/105772)
- Allow trusted SHA-pinned release publishing [#105773](https://github.com/openclaw/openclaw/pull/105773)
- Remove stale package and script exports from the dead-code baseline [#105776](https://github.com/openclaw/openclaw/pull/105776)
- Narrow the gateway session-utils export surface [#105782](https://github.com/openclaw/openclaw/pull/105782)
- Decompose the plugin registry into domain registrars [#105783](https://github.com/openclaw/openclaw/pull/105783)
- Reduce direct session-store access [#105786](https://github.com/openclaw/openclaw/pull/105786)
- Trim unused auth-profile exports [#105788](https://github.com/openclaw/openclaw/pull/105788)
- Trim private Playwright facade exports [#105794](https://github.com/openclaw/openclaw/pull/105794)
- Remove the obsolete Microsoft Teams SSO implementation [#105799](https://github.com/openclaw/openclaw/pull/105799)
- Allow larger plugin publication manifests [#105800](https://github.com/openclaw/openclaw/pull/105800)
- Remove literal `any` casts from TypeScript tests [#105804](https://github.com/openclaw/openclaw/pull/105804)
- Clear pending Talk mark timers when sessions stop [#105805](https://github.com/openclaw/openclaw/pull/105805)
- Harden SQLite compaction and restore reliability proof [#105811](https://github.com/openclaw/openclaw/pull/105811)
- Trim unused plugin registry exports [#105812](https://github.com/openclaw/openclaw/pull/105812)
- Trim dead embedded-agent helper exports [#105815](https://github.com/openclaw/openclaw/pull/105815)
- Make synchronization tests faster and more deterministic [#105816](https://github.com/openclaw/openclaw/pull/105816)
- Restore enforced unused-export checks in CI [#105826](https://github.com/openclaw/openclaw/pull/105826)
- Make advertised LAN host helpers module-private [#105834](https://github.com/openclaw/openclaw/pull/105834)
- Share channel plugin contract scaffolds [#105838](https://github.com/openclaw/openclaw/pull/105838)
- Tighten browser internal export boundaries [#105839](https://github.com/openclaw/openclaw/pull/105839)
- Trim unused embedded-agent runner exports [#105855](https://github.com/openclaw/openclaw/pull/105855)
- Trim internal Windows firewall diagnostic exports [#105856](https://github.com/openclaw/openclaw/pull/105856)
- Landed with no effective Apple i18n change [#105864](https://github.com/openclaw/openclaw/pull/105864)
- Remove unused Browser and Codex exports [#105867](https://github.com/openclaw/openclaw/pull/105867)
- Remove unused plugin path-safety exports [#105876](https://github.com/openclaw/openclaw/pull/105876)
- Trim duplicate plugin runtime task exports [#105878](https://github.com/openclaw/openclaw/pull/105878)
- Speed up timing-sensitive UI and process tests [#105882](https://github.com/openclaw/openclaw/pull/105882)
- Remove dead internal exports across mid-size source areas [#105888](https://github.com/openclaw/openclaw/pull/105888)
- Keep QA Lab process parsers private [#105891](https://github.com/openclaw/openclaw/pull/105891)
- Split high-churn modules and enforce a TypeScript LOC ratchet [#105894](https://github.com/openclaw/openclaw/pull/105894)
- Simplify Discord model-picker module ownership [#105908](https://github.com/openclaw/openclaw/pull/105908)
- Trim unused QA and utility plugin exports [#105914](https://github.com/openclaw/openclaw/pull/105914)
- Reuse the shared timeout helper in tests [#105918](https://github.com/openclaw/openclaw/pull/105918)
- Add the cloud-worker fault-injection exit gate [#105921](https://github.com/openclaw/openclaw/pull/105921)
- Standardize HTTP tests on a shared MockAgent helper [#105925](https://github.com/openclaw/openclaw/pull/105925)
- Remove dead plugin-loader exports [#105937](https://github.com/openclaw/openclaw/pull/105937)
- Standardize core process execution on Execa [#105939](https://github.com/openclaw/openclaw/pull/105939)
- Stabilize the dead-export CI ratchet after builds [#105945](https://github.com/openclaw/openclaw/pull/105945)
- Consolidate abort-signal composition [#105947](https://github.com/openclaw/openclaw/pull/105947)
- Reuse product validation after changelog-only release cuts [#105948](https://github.com/openclaw/openclaw/pull/105948)
- Replace package manifest glob dependency with Node built-in [#105951](https://github.com/openclaw/openclaw/pull/105951)
- Make TypeScript LOC growth reviewable [#105952](https://github.com/openclaw/openclaw/pull/105952)
- Make lobster-pet internals module-private [#105955](https://github.com/openclaw/openclaw/pull/105955)
- Deduplicate internal async primitives [#105961](https://github.com/openclaw/openclaw/pull/105961)
- Reuse channel plugin lookup views between messages [#105977](https://github.com/openclaw/openclaw/pull/105977)
- Remove Control UI dead exports [#105979](https://github.com/openclaw/openclaw/pull/105979)
- Update QA Lab for Crabline 0.1.11 artifacts [#105983](https://github.com/openclaw/openclaw/pull/105983)
- Consolidate reconnect supervision [#105987](https://github.com/openclaw/openclaw/pull/105987)
- Centralize timing-safe secret comparisons [#105989](https://github.com/openclaw/openclaw/pull/105989)
- Exclude generated locale bundles from the LOC ratchet [#105991](https://github.com/openclaw/openclaw/pull/105991)
- Split the Control UI Workboard controller into focused modules [#105995](https://github.com/openclaw/openclaw/pull/105995)
- Consolidate generic bounded concurrency helpers [#106002](https://github.com/openclaw/openclaw/pull/106002)
- Deduplicate Control UI layout, clipboard, and polling scaffolds [#106003](https://github.com/openclaw/openclaw/pull/106003)
- Consolidate transport and dispatch test fixtures [#106006](https://github.com/openclaw/openclaw/pull/106006)
- Remove stale internal deprecated compatibility [#106007](https://github.com/openclaw/openclaw/pull/106007)
- Generate Android gateway protocol models from canonical schemas [#106011](https://github.com/openclaw/openclaw/pull/106011)
- Consolidate duplicate helper implementations [#106016](https://github.com/openclaw/openclaw/pull/106016)
- Remove dead internal Discord and Slack exports [#106017](https://github.com/openclaw/openclaw/pull/106017)
- Remove dead config and infrastructure exports [#106019](https://github.com/openclaw/openclaw/pull/106019)
- Remove unused Mattermost monitor exports [#106021](https://github.com/openclaw/openclaw/pull/106021)
- Restore iMessage extension typechecking [#106022](https://github.com/openclaw/openclaw/pull/106022)
- Prevent QA smoke teardown failures after successful runs [#106027](https://github.com/openclaw/openclaw/pull/106027)
- Split the Gateway WebSocket handler by lifecycle phase [#106030](https://github.com/openclaw/openclaw/pull/106030)
- Preserve Crabline generation artifact paths in QA reports [#106037](https://github.com/openclaw/openclaw/pull/106037)
- Remove unused gateway and channel exports [#106038](https://github.com/openclaw/openclaw/pull/106038)
- Report the correct Crabline readiness artifact [#106039](https://github.com/openclaw/openclaw/pull/106039)
- Stop inherited TypeScript LOC drift from blocking unrelated PRs [#106042](https://github.com/openclaw/openclaw/pull/106042)
- Canonicalize internal binary operation results [#106049](https://github.com/openclaw/openclaw/pull/106049)
- Refresh the transcript-reader dead-code baseline [#106052](https://github.com/openclaw/openclaw/pull/106052)
- fix: prevent QA and terminal validation failures [AI] [#106061](https://github.com/openclaw/openclaw/pull/106061)
- refactor(ci): restore LOC ratchet headroom [#106063](https://github.com/openclaw/openclaw/pull/106063)
- chore(ci): remove stale transcript export baseline [#106064](https://github.com/openclaw/openclaw/pull/106064)
- ci: consolidate SMS webhook test reset [#106070](https://github.com/openclaw/openclaw/pull/106070)
- Consolidate SMS webhook test hooks [#106072](https://github.com/openclaw/openclaw/pull/106072)
- Simplify validated IPv4 loopback detection [#106077](https://github.com/openclaw/openclaw/pull/106077)
- Remove shared API quota from Periphery scope checks [#106090](https://github.com/openclaw/openclaw/pull/106090)
- Exempt accessibility metadata from the iOS typography audit [#106092](https://github.com/openclaw/openclaw/pull/106092)
- Empty landed delta for the Skill Workshop self-learning toggle [#106093](https://github.com/openclaw/openclaw/pull/106093)
- Extract gateway chat-abort handling into focused modules [#106094](https://github.com/openclaw/openclaw/pull/106094)
- Remove the TypeScript line-count ratchet [#106096](https://github.com/openclaw/openclaw/pull/106096)
- Remove a redundant transcript archive re-export [#106097](https://github.com/openclaw/openclaw/pull/106097)
- Refresh generated Plugin SDK API baseline hashes [#106108](https://github.com/openclaw/openclaw/pull/106108)
- Share one Gateway WebSocket lifecycle across Node and Control UI [#106113](https://github.com/openclaw/openclaw/pull/106113)
- Remove unused Mattermost private facade exports [#106114](https://github.com/openclaw/openclaw/pull/106114)
- Restore the architecture check for read-only shared-state SQLite [#106124](https://github.com/openclaw/openclaw/pull/106124)
- Reuse pinned Baileys helpers in WhatsApp inbound handling [#106125](https://github.com/openclaw/openclaw/pull/106125)
- Recognize the read-only state database in CI guardrails [#106126](https://github.com/openclaw/openclaw/pull/106126)
- Deduplicate the read-only state allowlist [#106132](https://github.com/openclaw/openclaw/pull/106132)
- Reduce release-validation API polling [#106139](https://github.com/openclaw/openclaw/pull/106139)
- Reduce Blacksmith registrations for pull-request CI [#106146](https://github.com/openclaw/openclaw/pull/106146)
- Remove unused Matrix, Telegram, and outbound exports [#106153](https://github.com/openclaw/openclaw/pull/106153)
- Register the Skill experience review live-test opt-in [#106157](https://github.com/openclaw/openclaw/pull/106157)
- Repair the Workboard sidebar end-to-end test [#106160](https://github.com/openclaw/openclaw/pull/106160)
- Clear the losing QMD search wait timer [#106173](https://github.com/openclaw/openclaw/pull/106173)
- Remove unused private Telegram exports [#106175](https://github.com/openclaw/openclaw/pull/106175)
- Remove obsolete Lobster Ajv cache shim [#106179](https://github.com/openclaw/openclaw/pull/106179)
- Refresh Plugin SDK API baseline digests [#106184](https://github.com/openclaw/openclaw/pull/106184)
- Remove unused session runtime type exports [#106197](https://github.com/openclaw/openclaw/pull/106197)
- Replace Copilot compatibility copies with SDK contracts [#106208](https://github.com/openclaw/openclaw/pull/106208)
- Refresh Control UI locale metadata [#106214](https://github.com/openclaw/openclaw/pull/106214)
- Reset agent event state between non-isolated test files [#106216](https://github.com/openclaw/openclaw/pull/106216)
- Review every changed file in large pull requests [#106217](https://github.com/openclaw/openclaw/pull/106217)
- Remove a dead Control UI settings export [#106220](https://github.com/openclaw/openclaw/pull/106220)
- Trim unused public UI type exports [#106221](https://github.com/openclaw/openclaw/pull/106221)
- Freeze directory exports in the Plugin SDK compat barrel [#106222](https://github.com/openclaw/openclaw/pull/106222)
- Stop dead-code checks from flagging live QA maturity exports [#106225](https://github.com/openclaw/openclaw/pull/106225)
- Trim unused exports from long-tail plugins [#106230](https://github.com/openclaw/openclaw/pull/106230)
- Use Slack SDK response types in directory lookups [#106234](https://github.com/openclaw/openclaw/pull/106234)
- Remove unused sandbox export seams [#106237](https://github.com/openclaw/openclaw/pull/106237)
- Trim unused OC Path barrel exports [#106240](https://github.com/openclaw/openclaw/pull/106240)
- Update Plugin SDK wildcard surface budget [#106242](https://github.com/openclaw/openclaw/pull/106242)
- Remove unused channel-auth and pairing exports [#106247](https://github.com/openclaw/openclaw/pull/106247)
- Refresh the Plugin SDK API checksum baseline [#106253](https://github.com/openclaw/openclaw/pull/106253)
- Fail closed when paginated PR file collection fails [#106254](https://github.com/openclaw/openclaw/pull/106254)
- Remove unused WhatsApp session config exports [#106256](https://github.com/openclaw/openclaw/pull/106256)
- Trim internal sandbox test seams [#106257](https://github.com/openclaw/openclaw/pull/106257)
- Clarify nested ignore-rule anchoring [#106258](https://github.com/openclaw/openclaw/pull/106258)
- Remove unused memory-core type exports [#106263](https://github.com/openclaw/openclaw/pull/106263)
- Consolidate ordinary bounded-concurrency workers [#106265](https://github.com/openclaw/openclaw/pull/106265)
- Restore plugin catalog and denylist regression coverage [#106269](https://github.com/openclaw/openclaw/pull/106269)
- adopt native swift-log event and level contracts [#106270](https://github.com/openclaw/openclaw/pull/106270)
- Trim unused subagent spawn exports [#106275](https://github.com/openclaw/openclaw/pull/106275)
- Trim unused Microsoft Teams exports [#106279](https://github.com/openclaw/openclaw/pull/106279)
- Split the Active Memory runtime into focused modules [#106285](https://github.com/openclaw/openclaw/pull/106285)
- Remove unused Discord and QA Lab exports [#106286](https://github.com/openclaw/openclaw/pull/106286)
- Refresh the Plugin SDK API baseline hashes [#106289](https://github.com/openclaw/openclaw/pull/106289)
- Privatize Policy extension implementation exports [#106290](https://github.com/openclaw/openclaw/pull/106290)
- Trim private exec approval exports [#106292](https://github.com/openclaw/openclaw/pull/106292)
- Remove an orphaned Teams attachment helper [#106301](https://github.com/openclaw/openclaw/pull/106301)
- Split the embedded attempt runner into focused modules [#106303](https://github.com/openclaw/openclaw/pull/106303)
- Split Workboard store into focused internal modules [#106306](https://github.com/openclaw/openclaw/pull/106306)
- Speed up focused test routing and timer-heavy tests [#106307](https://github.com/openclaw/openclaw/pull/106307)
- Split cross-OS release checks into focused modules [#106309](https://github.com/openclaw/openclaw/pull/106309)
- Refresh generated gateway-lock documentation map [#106312](https://github.com/openclaw/openclaw/pull/106312)
- Split the policy doctor into focused modules [#106313](https://github.com/openclaw/openclaw/pull/106313)
- Consolidate Gateway client authentication and request state [#106316](https://github.com/openclaw/openclaw/pull/106316)
- Privatize unused oc-path declarations [#106317](https://github.com/openclaw/openclaw/pull/106317)
- Split CLI update orchestration into focused modules [#106322](https://github.com/openclaw/openclaw/pull/106322)
- Split the Telegram bot handler runtime by responsibility [#106324](https://github.com/openclaw/openclaw/pull/106324)
- Remove redundant Commander plugin dependencies [#106345](https://github.com/openclaw/openclaw/pull/106345)
- Split oversized test suites into focused modules [#106354](https://github.com/openclaw/openclaw/pull/106354)
- Split state migration responsibilities into focused modules [#106356](https://github.com/openclaw/openclaw/pull/106356)
- Trim unused exec runtime exports [#106358](https://github.com/openclaw/openclaw/pull/106358)
- Remove obsolete Commander compatibility guards [#106366](https://github.com/openclaw/openclaw/pull/106366)
- Enforce Control UI production-build performance budgets [#106367](https://github.com/openclaw/openclaw/pull/106367)
- Fix linting in the Control UI performance-budget checker [#106377](https://github.com/openclaw/openclaw/pull/106377)
- Use Commander’s root argv for lazy CLI reparsing [#106382](https://github.com/openclaw/openclaw/pull/106382)
- Enforce a changed-file TypeScript size ratchet [#106387](https://github.com/openclaw/openclaw/pull/106387)
- Update the cron helper dead-export baseline path [#106392](https://github.com/openclaw/openclaw/pull/106392)
- Privatize unused ACPX implementation helpers [#106394](https://github.com/openclaw/openclaw/pull/106394)
- Trim unused exec-approval exports [#106401](https://github.com/openclaw/openclaw/pull/106401)
- Avoid serializing oversized Unicode payloads during size checks [#106402](https://github.com/openclaw/openclaw/pull/106402)
- Trim the internal auto-reply export surface [#106409](https://github.com/openclaw/openclaw/pull/106409)
- Reuse structured hunks for edit previews [#106410](https://github.com/openclaw/openclaw/pull/106410)
- Refresh the Plugin SDK API baseline checksums [#106411](https://github.com/openclaw/openclaw/pull/106411)
- Trim unused internal CLI exports [#106426](https://github.com/openclaw/openclaw/pull/106426)
- Remove test-only bootstrap reset exports [#106427](https://github.com/openclaw/openclaw/pull/106427)
- Infer Gateway validator types directly from schemas [#106428](https://github.com/openclaw/openclaw/pull/106428)
- Remove unused private Slack reply exports [#106431](https://github.com/openclaw/openclaw/pull/106431)
- Refresh stale native localization source coordinates [#106434](https://github.com/openclaw/openclaw/pull/106434)
- Remove the dead queue-summary reset helper [#106440](https://github.com/openclaw/openclaw/pull/106440)
- Centralize closed gateway protocol schema construction [#106441](https://github.com/openclaw/openclaw/pull/106441)
- Privatize the native approval-channel policy list [#106447](https://github.com/openclaw/openclaw/pull/106447)
- Trim unused internal command exports [#106455](https://github.com/openclaw/openclaw/pull/106455)
- Privatize the logging timezone validator [#106459](https://github.com/openclaw/openclaw/pull/106459)
- Simplify bundled channel schema loading [#106462](https://github.com/openclaw/openclaw/pull/106462)
- Trim unused fast-mode re-exports [#106463](https://github.com/openclaw/openclaw/pull/106463)
- Remove write-only macOS Voice Wake state [#106468](https://github.com/openclaw/openclaw/pull/106468)
- Reuse shared record normalization in Control UI [#106472](https://github.com/openclaw/openclaw/pull/106472)
- Split oversized Anthropic catalog and protocol helpers [#106476](https://github.com/openclaw/openclaw/pull/106476)
- Privatize doctor-only helpers [#106478](https://github.com/openclaw/openclaw/pull/106478)
- Remove retired Skill Workshop handoff styles [#106486](https://github.com/openclaw/openclaw/pull/106486)
- Cover session-scoped attach-grant revocation [#106487](https://github.com/openclaw/openclaw/pull/106487)
- Clear false-positive plugin dead-export baseline entries [#106488](https://github.com/openclaw/openclaw/pull/106488)
- Replace remaining custom worker pools with p-map [#106489](https://github.com/openclaw/openclaw/pull/106489)
- Align worker-placement tests with canonical types [#106492](https://github.com/openclaw/openclaw/pull/106492)
- Route bounded commands through the canonical Execa layer [#106495](https://github.com/openclaw/openclaw/pull/106495)
- Simplify CLI npm pinning internals [#106499](https://github.com/openclaw/openclaw/pull/106499)
- Speed up lifecycle tests [#106501](https://github.com/openclaw/openclaw/pull/106501)
- Verify maintainer access before surfacing PRs [#106507](https://github.com/openclaw/openclaw/pull/106507)
- Trim unused MCP runtime facade exports [#106520](https://github.com/openclaw/openclaw/pull/106520)
- Start the longest Node CI shards first [#106522](https://github.com/openclaw/openclaw/pull/106522)
- Split embedded agent attempts into typed lifecycle phases [#106530](https://github.com/openclaw/openclaw/pull/106530)
- Use shared closed-object Gateway schemas [#106532](https://github.com/openclaw/openclaw/pull/106532)
- Privatize unused Control UI settings exports [#106535](https://github.com/openclaw/openclaw/pull/106535)
- Split the QA Lab web renderer into focused modules [#106537](https://github.com/openclaw/openclaw/pull/106537)
- Bound QA-bus state discovery with a timeout [#106538](https://github.com/openclaw/openclaw/pull/106538)
- Split Active Memory recall helpers into focused modules [#106539](https://github.com/openclaw/openclaw/pull/106539)
- Split Gateway agent runtime helpers [#106544](https://github.com/openclaw/openclaw/pull/106544)
- Split the WhatsApp QA live runtime into owned modules [#106547](https://github.com/openclaw/openclaw/pull/106547)
- Use native lazy loading for media type detection [#106548](https://github.com/openclaw/openclaw/pull/106548)
- Remove an obsolete Gateway CLI options export [#106549](https://github.com/openclaw/openclaw/pull/106549)
- Split Codex app-server attempt helpers into focused modules [#106550](https://github.com/openclaw/openclaw/pull/106550)
- Split embedded runner orchestration into focused helpers [#106552](https://github.com/openclaw/openclaw/pull/106552)
- Split OTEL content handling into focused helpers [#106554](https://github.com/openclaw/openclaw/pull/106554)
- Extract typed setup phases from chat.send [#106590](https://github.com/openclaw/openclaw/pull/106590)
- Privatize unused Policy plugin internals [#106591](https://github.com/openclaw/openclaw/pull/106591)
- Use the published node-pty runtime contracts directly [#106592](https://github.com/openclaw/openclaw/pull/106592)
- Remove an obsolete onboarding node-manager helper [#106593](https://github.com/openclaw/openclaw/pull/106593)
- Remove test-only exports from auto-reply helpers [#106600](https://github.com/openclaw/openclaw/pull/106600)
- Remove redundant extension Oxlint CI lanes [#106601](https://github.com/openclaw/openclaw/pull/106601)
- Reduce duplicate and delayed CI test work [#106605](https://github.com/openclaw/openclaw/pull/106605)
- Extract the chat attachment preparation phase [#106615](https://github.com/openclaw/openclaw/pull/106615)
- Remove duplicate session target resolver export [#106620](https://github.com/openclaw/openclaw/pull/106620)
- Keep extension test planning within the Git child buffer [#106632](https://github.com/openclaw/openclaw/pull/106632)
- Scope pull-request Node tests to changed targets [#106633](https://github.com/openclaw/openclaw/pull/106633)
- Privatize unused native hook relay types [#106634](https://github.com/openclaw/openclaw/pull/106634)
- Remove unused auto-reply test-facade exports [#106639](https://github.com/openclaw/openclaw/pull/106639)
- Split reply dispatch into focused modules [#106642](https://github.com/openclaw/openclaw/pull/106642)
- Privatize unused agent session-state types [#106672](https://github.com/openclaw/openclaw/pull/106672)
- Extract chat user-turn assembly into a focused module [#106689](https://github.com/openclaw/openclaw/pull/106689)
- Privatize the precomputed CLI help parser [#106692](https://github.com/openclaw/openclaw/pull/106692)
- Derive package build entries from export maps [#106695](https://github.com/openclaw/openclaw/pull/106695)
- Extract the Gateway chat reply-dispatch phase [#106697](https://github.com/openclaw/openclaw/pull/106697)
- Privatize the chat-send media fields type [#106698](https://github.com/openclaw/openclaw/pull/106698)
- Preserve WebChat media state after reply dispatch [#106702](https://github.com/openclaw/openclaw/pull/106702)
- Use the published ciao contract in the Bonjour advertiser [#106707](https://github.com/openclaw/openclaw/pull/106707)
- Extract gateway command-reply folding [#106708](https://github.com/openclaw/openclaw/pull/106708)
- Remove an unused Default Models view export [#106728](https://github.com/openclaw/openclaw/pull/106728)
- Simplify generated-module formatting through Oxfmt's launcher [#106729](https://github.com/openclaw/openclaw/pull/106729)
- Align Control UI end-to-end assertions [#106731](https://github.com/openclaw/openclaw/pull/106731)
- Preserve model ordering while satisfying typed lint [#106732](https://github.com/openclaw/openclaw/pull/106732)
- Extract chat source-reply finalization [#106733](https://github.com/openclaw/openclaw/pull/106733)
- Extract Gateway-owned non-agent reply finalization [#106740](https://github.com/openclaw/openclaw/pull/106740)
- Split Gateway agent handling into focused runtime phases [#106741](https://github.com/openclaw/openclaw/pull/106741)
- Make chat finalization helpers module-private [#106742](https://github.com/openclaw/openclaw/pull/106742)
- Extract the chat dispatch-error lifecycle [#106743](https://github.com/openclaw/openclaw/pull/106743)
- Reuse Google Auth's bundled gaxios runtime [#106744](https://github.com/openclaw/openclaw/pull/106744)
- Remove the stale locked-session deletion bypass [#106748](https://github.com/openclaw/openclaw/pull/106748)
- Remove test-only exports from auto-reply commands [#106750](https://github.com/openclaw/openclaw/pull/106750)
- Restore current-main Control UI and validation gates [#106751](https://github.com/openclaw/openclaw/pull/106751)
- Replace Bedrock SDK contract mirrors with exported types [#106753](https://github.com/openclaw/openclaw/pull/106753)
- Remove unused auth-planning exports [#106756](https://github.com/openclaw/openclaw/pull/106756)
- Extract embedded-attempt tool catalog preparation [#106759](https://github.com/openclaw/openclaw/pull/106759)
- Remove unused plugin exports [#106761](https://github.com/openclaw/openclaw/pull/106761)
- Deduplicate MCP App security test coverage [#106762](https://github.com/openclaw/openclaw/pull/106762)
- Refresh Plugin SDK and Control UI performance baselines [#106767](https://github.com/openclaw/openclaw/pull/106767)
- Use exact Microsoft Teams SDK types [#106769](https://github.com/openclaw/openclaw/pull/106769)
- Privatize unused onboarding types [#106771](https://github.com/openclaw/openclaw/pull/106771)
- Restore strict build and lint checks on main [#106772](https://github.com/openclaw/openclaw/pull/106772)
- Split Codex app-server attempts into lifecycle-owned modules [#106773](https://github.com/openclaw/openclaw/pull/106773)
- Fix background-task transcripts in the Control UI mock [#106774](https://github.com/openclaw/openclaw/pull/106774)
- Extract embedded-attempt history preparation [#106782](https://github.com/openclaw/openclaw/pull/106782)
- Preserve canonical branch context in release checks [#106783](https://github.com/openclaw/openclaw/pull/106783)
- Use upstream node-edge-tts declarations [#106784](https://github.com/openclaw/openclaw/pull/106784)
- Use the Google GenAI SDK session type directly [#106787](https://github.com/openclaw/openclaw/pull/106787)
- Trim private Slack module exports [#106794](https://github.com/openclaw/openclaw/pull/106794)
- No-op merge of Google dead-export cleanup [#106798](https://github.com/openclaw/openclaw/pull/106798)
- Split the diagnostics OpenTelemetry service runtime [#106800](https://github.com/openclaw/openclaw/pull/106800)
- Privatize unused model-catalog types [#106801](https://github.com/openclaw/openclaw/pull/106801)
- Use the Google SDK thinking-level enum [#106802](https://github.com/openclaw/openclaw/pull/106802)
- Extract the embedded attempt stream phase [#106805](https://github.com/openclaw/openclaw/pull/106805)
- Model the agent-sessions SDK in dead-code checks [#106807](https://github.com/openclaw/openclaw/pull/106807)
- Replace duplicated net-policy IP helpers [#106808](https://github.com/openclaw/openclaw/pull/106808)
- Remove obsolete Canvas Chokidar fallback [#106811](https://github.com/openclaw/openclaw/pull/106811)
- Use QuickJS defaults in Code Mode [#106816](https://github.com/openclaw/openclaw/pull/106816)
- Inline the CAF audio MIME fallback [#106820](https://github.com/openclaw/openclaw/pull/106820)
- Remove a dead Google thinking type export from CI checks [#106823](https://github.com/openclaw/openclaw/pull/106823)
- Extract embedded-attempt timeout ownership [#106827](https://github.com/openclaw/openclaw/pull/106827)
- Remove duplicate agent-session type exports [#106828](https://github.com/openclaw/openclaw/pull/106828)
- Use Lobster's canonical embedded runtime export [#106831](https://github.com/openclaw/openclaw/pull/106831)
- Preserve canonical release context through validation dispatch [#106836](https://github.com/openclaw/openclaw/pull/106836)
- Privatize lower-level requirement helpers [#106837](https://github.com/openclaw/openclaw/pull/106837)
- Privatize the Control UI chat settings tracker [#106842](https://github.com/openclaw/openclaw/pull/106842)
- Share select styling across Clack prompt adapters [#106844](https://github.com/openclaw/openclaw/pull/106844)
- Extract embedded-attempt prompt preflight [#106845](https://github.com/openclaw/openclaw/pull/106845)
- Canonical group-policy resolution for six channels [#106846](https://github.com/openclaw/openclaw/pull/106846)
- Privatize unused internal CLI exports [#106848](https://github.com/openclaw/openclaw/pull/106848)
- Bound release recovery loops [#106852](https://github.com/openclaw/openclaw/pull/106852)
- Make the reply-finalization timeout module-private [#106853](https://github.com/openclaw/openclaw/pull/106853)
- Narrow the shared entry-status API [#106856](https://github.com/openclaw/openclaw/pull/106856)
- Extract embedded-runner prompt submission into a tested lifecycle module [#106857](https://github.com/openclaw/openclaw/pull/106857)
- Make Telegram doctor helpers private [#106861](https://github.com/openclaw/openclaw/pull/106861)
- Extract the before-agent-run gate from the embedded runner [#106867](https://github.com/openclaw/openclaw/pull/106867)
- Privatize test-only shared helpers [#106868](https://github.com/openclaw/openclaw/pull/106868)
- Privatize Google Chat monitor access helpers [#106871](https://github.com/openclaw/openclaw/pull/106871)
- Harden release validation and PR landing safeguards [#106873](https://github.com/openclaw/openclaw/pull/106873)
- Remove an unused Control UI channel-wizard getter [#106878](https://github.com/openclaw/openclaw/pull/106878)
- refactor(agents): extract session manager preparation [#106879](https://github.com/openclaw/openclaw/pull/106879)
- Prevent ESRCH cleanup test flakes [#106880](https://github.com/openclaw/openclaw/pull/106880)
- Remove unused iOS Talk Mode provider state [#106881](https://github.com/openclaw/openclaw/pull/106881)
- Make the browser proxy request type module-private [#106883](https://github.com/openclaw/openclaw/pull/106883)
- Unblock Android release screenshots on the Gateway scene [#106884](https://github.com/openclaw/openclaw/pull/106884)
- Use frozen-checkout inventory writers during package recovery [#106886](https://github.com/openclaw/openclaw/pull/106886)
- Privatize the Discord voice context helper [#106887](https://github.com/openclaw/openclaw/pull/106887)
- Privatize internal Telegram helper exports [#106892](https://github.com/openclaw/openclaw/pull/106892)
- No shipped delta for Telegram promise-executor lint cleanup [#106895](https://github.com/openclaw/openclaw/pull/106895)
- Extract embedded-agent session preparation [#106896](https://github.com/openclaw/openclaw/pull/106896)
- Restore Telegram extension lint compliance [#106900](https://github.com/openclaw/openclaw/pull/106900)
- Privatize the embedded session factory helper [#106904](https://github.com/openclaw/openclaw/pull/106904)
- Remove restart-test waits and detached-task races [#106906](https://github.com/openclaw/openclaw/pull/106906)
- Inline embedded agent session creation [#106909](https://github.com/openclaw/openclaw/pull/106909)
- Restore Control UI line-count ratchet baselines [#106915](https://github.com/openclaw/openclaw/pull/106915)
- Trim agent CLI and facade exports [#106917](https://github.com/openclaw/openclaw/pull/106917)
- Split embedded attempt prompt and cleanup phases [#106924](https://github.com/openclaw/openclaw/pull/106924)
- Trim unused internal agent type exports [#106925](https://github.com/openclaw/openclaw/pull/106925)
- Speed up the type-suppression inventory [#106928](https://github.com/openclaw/openclaw/pull/106928)
- Use Commander's supported help-exit errors [#106929](https://github.com/openclaw/openclaw/pull/106929)
- Remove a premature changelog entry [#106931](https://github.com/openclaw/openclaw/pull/106931)
- Restore dependency checks after prompt-context refactoring [#106934](https://github.com/openclaw/openclaw/pull/106934)
- Share synchronous storage lock retry logic [#106936](https://github.com/openclaw/openclaw/pull/106936)
- Speed cron model override coverage [#106938](https://github.com/openclaw/openclaw/pull/106938)
- Isolate deprecated channel streaming fallbacks [#106939](https://github.com/openclaw/openclaw/pull/106939)
- Refresh the Plugin SDK API baseline hashes [#106944](https://github.com/openclaw/openclaw/pull/106944)
- Consolidate gateway WebSocket payload handling [#106947](https://github.com/openclaw/openclaw/pull/106947)
- Retry transient exec-test directory cleanup [#106949](https://github.com/openclaw/openclaw/pull/106949)
- Privatize cron task-history helpers [#106950](https://github.com/openclaw/openclaw/pull/106950)
- Make release-note verification atomic and deterministic [#106953](https://github.com/openclaw/openclaw/pull/106953)
- Privatize provider request helpers [#106955](https://github.com/openclaw/openclaw/pull/106955)
- Remove dead agent test seams from production module surfaces [#106956](https://github.com/openclaw/openclaw/pull/106956)
- Stabilize the cron timeout release-validation test [#106959](https://github.com/openclaw/openclaw/pull/106959)
- Speed the auth planner test suite [#106962](https://github.com/openclaw/openclaw/pull/106962)
- Remove redundant Browser async-route wrappers [#106964](https://github.com/openclaw/openclaw/pull/106964)
- Make system-prompt assembly helpers module-private [#106965](https://github.com/openclaw/openclaw/pull/106965)
- Support complete autoreview of larger diffs [#106970](https://github.com/openclaw/openclaw/pull/106970)
- Restore moving-main lint and dead-export gates [#106972](https://github.com/openclaw/openclaw/pull/106972)
- Inline the single-use agent side-question auth type [#106973](https://github.com/openclaw/openclaw/pull/106973)
- Scope the async endpoint lint exception to browser routes [#106974](https://github.com/openclaw/openclaw/pull/106974)
- Reuse the live-updater Git test fixture [#106975](https://github.com/openclaw/openclaw/pull/106975)
- Replace custom webhook schemas with native Zod helpers [#106978](https://github.com/openclaw/openclaw/pull/106978)
- Prevent stale changed-gate checkout state [#106979](https://github.com/openclaw/openclaw/pull/106979)
- Remove obsolete Bonjour platform workarounds [#106990](https://github.com/openclaw/openclaw/pull/106990)
- Make remote changed-gate bundles self-contained [#106991](https://github.com/openclaw/openclaw/pull/106991)
- Pin corrected Kova memory calibration for release validation [#106992](https://github.com/openclaw/openclaw/pull/106992)
- Update the macOS appcast for v2026.7.1 [#106993](https://github.com/openclaw/openclaw/pull/106993)
- Add regression coverage for queued session rotation [#106995](https://github.com/openclaw/openclaw/pull/106995)
- Move cwd-safe path formatting into its shared owner [#107003](https://github.com/openclaw/openclaw/pull/107003)
- Extract embedded-attempt session lifecycle helpers [#107007](https://github.com/openclaw/openclaw/pull/107007)
- Extract embedded-attempt context guards and trajectory setup [#107008](https://github.com/openclaw/openclaw/pull/107008)
- Stabilize descendant-cleanup CI timing [#107011](https://github.com/openclaw/openclaw/pull/107011)
- Remove redundant provider-list type aliases [#107013](https://github.com/openclaw/openclaw/pull/107013)
- Remove unused ChatGPT WebSocket debug statistics [#107014](https://github.com/openclaw/openclaw/pull/107014)
- Make stable closeout recovery shell-safe [#107015](https://github.com/openclaw/openclaw/pull/107015)
- Trim QA Lab's dead internal export surface [#107016](https://github.com/openclaw/openclaw/pull/107016)
- Refresh QA Lab CLI dispatch test expectations [#107018](https://github.com/openclaw/openclaw/pull/107018)
- Keep the timestamp override type internal [#107020](https://github.com/openclaw/openclaw/pull/107020)
- Isolate provider hooks in auth-planner tests [#107022](https://github.com/openclaw/openclaw/pull/107022)
- Consolidate APNs proxy CONNECT handling [#107039](https://github.com/openclaw/openclaw/pull/107039)
- Extract the embedded-attempt abort lifecycle [#107042](https://github.com/openclaw/openclaw/pull/107042)
- Extract embedded-attempt prompt observability [#107044](https://github.com/openclaw/openclaw/pull/107044)
- Preserve versioned filenames for stable closeout assets [#107047](https://github.com/openclaw/openclaw/pull/107047)
- Privatize computer-tool implementation helpers [#107048](https://github.com/openclaw/openclaw/pull/107048)
- Add a final CI gate that survives unrelated main updates [#107050](https://github.com/openclaw/openclaw/pull/107050)
- Centralize OpenClaw version ordering on SemVer [#107051](https://github.com/openclaw/openclaw/pull/107051)
- Accelerate the session-status test suite [#107054](https://github.com/openclaw/openclaw/pull/107054)
- Keep attempt lifecycle helpers private [#107055](https://github.com/openclaw/openclaw/pull/107055)
- Use native p-limit concurrency APIs [#107056](https://github.com/openclaw/openclaw/pull/107056)
- Preserve the original APNs proxy error cause [#107057](https://github.com/openclaw/openclaw/pull/107057)
- Preserve runtime contexts in plugin test mocks [#107059](https://github.com/openclaw/openclaw/pull/107059)
- Trim Mattermost internal exports [#107062](https://github.com/openclaw/openclaw/pull/107062)
- Remove the redundant Tailscale detection timeout race [#107064](https://github.com/openclaw/openclaw/pull/107064)
- Move WhatsApp inbound command policy to the shared SDK [#107066](https://github.com/openclaw/openclaw/pull/107066)
- Extract embedded-agent prompt execution phases [#107071](https://github.com/openclaw/openclaw/pull/107071)
- Remove grandfathered daemon exports [#107075](https://github.com/openclaw/openclaw/pull/107075)
- Remove unused internal package helpers [#107077](https://github.com/openclaw/openclaw/pull/107077)
- Consolidate resource override matching [#107078](https://github.com/openclaw/openclaw/pull/107078)
- Extract embedded attempt stream finalization [#107083](https://github.com/openclaw/openclaw/pull/107083)
- Extract embedded-runner session-lock preparation [#107095](https://github.com/openclaw/openclaw/pull/107095)
- Keep bootstrap CA-detection helpers internal [#107096](https://github.com/openclaw/openclaw/pull/107096)
- Keep prompt-error outcome type private [#107097](https://github.com/openclaw/openclaw/pull/107097)
- Simplify Microsoft Edge TTS output staging [#107098](https://github.com/openclaw/openclaw/pull/107098)
- Extract embedded prompt dispatch [#107100](https://github.com/openclaw/openclaw/pull/107100)
- Remove redundant final tool-argument parsing [#107110](https://github.com/openclaw/openclaw/pull/107110)
- Remove dead agents test surfaces [#107113](https://github.com/openclaw/openclaw/pull/107113)
- Extract the embedded attempt prompt phase [#107120](https://github.com/openclaw/openclaw/pull/107120)
- Share repository discovery across inventory scripts [#107124](https://github.com/openclaw/openclaw/pull/107124)
- Remove unused internal Matrix exports [#107126](https://github.com/openclaw/openclaw/pull/107126)
- Remove dead Voice Call internal exports [#107130](https://github.com/openclaw/openclaw/pull/107130)
- Simplify the Codex app-server version floor check [#107135](https://github.com/openclaw/openclaw/pull/107135)
- Remove unused extension exports [#107146](https://github.com/openclaw/openclaw/pull/107146)
- Extract embedded attempt stream setup [#107147](https://github.com/openclaw/openclaw/pull/107147)
- Trim dead Microsoft Teams internal exports [#107148](https://github.com/openclaw/openclaw/pull/107148)
- Remove the redundant speech-core API facade [#107156](https://github.com/openclaw/openclaw/pull/107156)
- Remove test-only Memory Wiki exports [#107157](https://github.com/openclaw/openclaw/pull/107157)
- Remove stale node-llama-cpp ambient declarations [#107165](https://github.com/openclaw/openclaw/pull/107165)
- Route focused validation locally and heavy proof remotely [#107166](https://github.com/openclaw/openclaw/pull/107166)
- Move provider-auth parity tests off the serial CI path [#107167](https://github.com/openclaw/openclaw/pull/107167)
- Extract embedded-attempt session setup [#107168](https://github.com/openclaw/openclaw/pull/107168)
- Simplify skill refresh watcher event subscriptions [#107169](https://github.com/openclaw/openclaw/pull/107169)
- Repair scheduled E2E and package-validation regressions [#107173](https://github.com/openclaw/openclaw/pull/107173)
- Refresh generated Swift and Kotlin gateway clients [#107177](https://github.com/openclaw/openclaw/pull/107177)
- Simplify concurrent result skipping with p-map [#107178](https://github.com/openclaw/openclaw/pull/107178)
- Consolidate channel group-policy resolution on the scope tree [#107181](https://github.com/openclaw/openclaw/pull/107181)
- Reuse one worker process for session concurrency tests [#107186](https://github.com/openclaw/openclaw/pull/107186)
- Preserve pinned Swift tools during iOS archives [#107188](https://github.com/openclaw/openclaw/pull/107188)
- Reuse Matrix SDK media types [#107189](https://github.com/openclaw/openclaw/pull/107189)
- Extract embedded attempt execution phases [#107190](https://github.com/openclaw/openclaw/pull/107190)
- Verify Android Gradle wrapper downloads [#107194](https://github.com/openclaw/openclaw/pull/107194)
- Trim internal iMessage exports [#107196](https://github.com/openclaw/openclaw/pull/107196)
- Simplify Matrix fake-indexeddb transaction pruning [#107197](https://github.com/openclaw/openclaw/pull/107197)
- Simplify QQ voice conversion Buffer handling [#107201](https://github.com/openclaw/openclaw/pull/107201)
- Remove unused internal WhatsApp exports [#107206](https://github.com/openclaw/openclaw/pull/107206)
- Simplify task-list token handling [#107210](https://github.com/openclaw/openclaw/pull/107210)
- Isolate the CLI progress-ordering test from channel delivery [#107212](https://github.com/openclaw/openclaw/pull/107212)
- Consolidate repository metadata parsing [#107213](https://github.com/openclaw/openclaw/pull/107213)
- Trim unused Signal extension exports [#107217](https://github.com/openclaw/openclaw/pull/107217)
- Remove unused LINE extension exports and state [#107231](https://github.com/openclaw/openclaw/pull/107231)
- Parallelize dev-tooling CLI safety probes [#107232](https://github.com/openclaw/openclaw/pull/107232)
- Remove unused Tlon exports [#107233](https://github.com/openclaw/openclaw/pull/107233)
- Remove unused TUI exports [#107241](https://github.com/openclaw/openclaw/pull/107241)
- Centralize the TUI pending-submission lifecycle [#107242](https://github.com/openclaw/openclaw/pull/107242)
- Isolate HTML entity decoding in a focused plugin SDK module [#107245](https://github.com/openclaw/openclaw/pull/107245)
- Remove unused internal Zalouser exports [#107247](https://github.com/openclaw/openclaw/pull/107247)
- Simplify cron run-time extraction from Croner results [#107249](https://github.com/openclaw/openclaw/pull/107249)
- Deprecate the unused group intro hint adapter [#107252](https://github.com/openclaw/openclaw/pull/107252)
- Catch Control UI locale drift locally [#107253](https://github.com/openclaw/openclaw/pull/107253)
- Use native strict-object builders in the config schema [#107254](https://github.com/openclaw/openclaw/pull/107254)
- Use Chalk theme builders directly in Memory Core [#107259](https://github.com/openclaw/openclaw/pull/107259)
- Use ACP SDK protocol contracts directly [#107264](https://github.com/openclaw/openclaw/pull/107264)
- Reduce node-host internal exports [#107270](https://github.com/openclaw/openclaw/pull/107270)
- Align scheduled release probes with current runtime contracts [#107272](https://github.com/openclaw/openclaw/pull/107272)
- Route heavy changed-file checks to remote capacity [#107282](https://github.com/openclaw/openclaw/pull/107282)
- Trim unused Google Meet internal exports [#107284](https://github.com/openclaw/openclaw/pull/107284)
- Simplify duration formatting without changing output [#107287](https://github.com/openclaw/openclaw/pull/107287)
- Trim unused OpenShell exports [#107291](https://github.com/openclaw/openclaw/pull/107291)
- Use the shared duration parser for retry units [#107293](https://github.com/openclaw/openclaw/pull/107293)
- Make unused Ollama helpers module-private [#107296](https://github.com/openclaw/openclaw/pull/107296)
- Consolidate JSON and JSON5 fallback parsing [#107298](https://github.com/openclaw/openclaw/pull/107298)
- Restore lint for the Clack prompter test [#107301](https://github.com/openclaw/openclaw/pull/107301)
- Remove unused file-transfer exports [#107307](https://github.com/openclaw/openclaw/pull/107307)
- Use Google GenAI runtime enums directly [#107310](https://github.com/openclaw/openclaw/pull/107310)
- Remove unused internal Zalo exports [#107312](https://github.com/openclaw/openclaw/pull/107312)
- Replace changed-file LOC checks with a max-lines suppression ratchet [#107315](https://github.com/openclaw/openclaw/pull/107315)
- Speed up auto-reply fallback tests [#107316](https://github.com/openclaw/openclaw/pull/107316)
- Replace the custom compile-only SQLite dialect [#107319](https://github.com/openclaw/openclaw/pull/107319)
- Reconcile system-agent rename baselines and tests [#107320](https://github.com/openclaw/openclaw/pull/107320)
- Trim unused OC Path exports [#107321](https://github.com/openclaw/openclaw/pull/107321)
- Repair Zalo contract-test adapter typing [#107326](https://github.com/openclaw/openclaw/pull/107326)
- Consolidate lazy Undici runtime loading [#107328](https://github.com/openclaw/openclaw/pull/107328)
- Trim unused QA Matrix exports [#107331](https://github.com/openclaw/openclaw/pull/107331)
- Share Undici request normalization across proxy fetches [#107332](https://github.com/openclaw/openclaw/pull/107332)
- Consolidate bounded terminal buffers [#107337](https://github.com/openclaw/openclaw/pull/107337)
- Reuse YAML path resolution for edits [#107340](https://github.com/openclaw/openclaw/pull/107340)
- Remove unused internal secrets exports [#107342](https://github.com/openclaw/openclaw/pull/107342)
- Use Commander native APIs for CLI option and help handling [#107345](https://github.com/openclaw/openclaw/pull/107345)
- Render QR PNGs directly from buffers [#107351](https://github.com/openclaw/openclaw/pull/107351)
- Remove unused internal skills exports [#107353](https://github.com/openclaw/openclaw/pull/107353)
- Avoid runtime discovery in agent-runner tests [#107354](https://github.com/openclaw/openclaw/pull/107354)
- Use Express callbacks for Teams listen errors [#107357](https://github.com/openclaw/openclaw/pull/107357)
- Match the cached plugin loader to Jiti's single-argument contract [#107370](https://github.com/openclaw/openclaw/pull/107370)
- Repair plugin release validation after runtime migrations [#107371](https://github.com/openclaw/openclaw/pull/107371)
- Split QA Lab mock and Slack runtimes by responsibility [#107377](https://github.com/openclaw/openclaw/pull/107377)
- Privatize unused Control UI chat helpers [#107379](https://github.com/openclaw/openclaw/pull/107379)
- Replace the Google Meet ZIP encoder with JSZip [#107380](https://github.com/openclaw/openclaw/pull/107380)
- Split QMD memory manager responsibilities [#107381](https://github.com/openclaw/openclaw/pull/107381)
- Regenerate Google Meet dependency metadata [#107382](https://github.com/openclaw/openclaw/pull/107382)
- Remove stale UI dead-export baseline rows [#107383](https://github.com/openclaw/openclaw/pull/107383)
- Trim unused internal task exports [#107385](https://github.com/openclaw/openclaw/pull/107385)
- Simplify backup archive handling with tar read-entry APIs [#107387](https://github.com/openclaw/openclaw/pull/107387)
- Make audit input aliases module-private [#107390](https://github.com/openclaw/openclaw/pull/107390)
- Use Highlight.js native language registration [#107392](https://github.com/openclaw/openclaw/pull/107392)
- Remove a stale Feishu schema-builder export [#107395](https://github.com/openclaw/openclaw/pull/107395)
- Simplify MIME detection precedence [#107396](https://github.com/openclaw/openclaw/pull/107396)
- Guard optional scrolling in exported HTML [#107398](https://github.com/openclaw/openclaw/pull/107398)
- Trim test-only exports from the Diffs extension [#107400](https://github.com/openclaw/openclaw/pull/107400)
- Speed up reply-runner tests with fixed fixtures [#107405](https://github.com/openclaw/openclaw/pull/107405)
- Trim unused internal logging exports [#107407](https://github.com/openclaw/openclaw/pull/107407)
- Reuse recent green PR CI cohorts safely [#107411](https://github.com/openclaw/openclaw/pull/107411)
- Trim internal hook exports [#107412](https://github.com/openclaw/openclaw/pull/107412)
- Replace hand-built tool enums with native TypeBox schemas [#107414](https://github.com/openclaw/openclaw/pull/107414)
- Simplify edit diffs with native jsdiff APIs [#107417](https://github.com/openclaw/openclaw/pull/107417)
- Trim internal doctor flow exports [#107420](https://github.com/openclaw/openclaw/pull/107420)
- Restore Anthropic session-catalog test types [#107421](https://github.com/openclaw/openclaw/pull/107421)
- Remove runtime discovery overhead from directive tests [#107424](https://github.com/openclaw/openclaw/pull/107424)
- Privatize Telegram status feature rendering [#107428](https://github.com/openclaw/openclaw/pull/107428)
- Simplify Web Readability lazy loading [#107431](https://github.com/openclaw/openclaw/pull/107431)
- Remove the realtime consult test dependency seam [#107432](https://github.com/openclaw/openclaw/pull/107432)
- Simplify dotenv readers with direct buffer parsing [#107435](https://github.com/openclaw/openclaw/pull/107435)
- Refresh the Plugin SDK API checksum baseline [#107436](https://github.com/openclaw/openclaw/pull/107436)
- Remove unused Fleet exports [#107438](https://github.com/openclaw/openclaw/pull/107438)
- Simplify Slack relay WebSocket handoff [#107440](https://github.com/openclaw/openclaw/pull/107440)
- Simplify WebSocket message handling with native Buffer delivery [#107443](https://github.com/openclaw/openclaw/pull/107443)
- Declare release-verifier helpers for test typechecking [#107444](https://github.com/openclaw/openclaw/pull/107444)
- Remove test-only exports from the setup wizard [#107445](https://github.com/openclaw/openclaw/pull/107445)
- Re-export fs-safe JSON readers directly [#107455](https://github.com/openclaw/openclaw/pull/107455)
- Remove internal process export seams [#107456](https://github.com/openclaw/openclaw/pull/107456)
- Use server-owned WebSocket client tracking for Canvas [#107457](https://github.com/openclaw/openclaw/pull/107457)
- Normalize WebSocket message payload shapes [#107459](https://github.com/openclaw/openclaw/pull/107459)
- Remove obsolete duplicate Bonjour lifecycle handling [#107470](https://github.com/openclaw/openclaw/pull/107470)
- Remove the obsolete MCP transport type shim [#107472](https://github.com/openclaw/openclaw/pull/107472)
- Keep the UI autosave delay module-private [#107475](https://github.com/openclaw/openclaw/pull/107475)
- Remove test-only media-understanding exports [#107476](https://github.com/openclaw/openclaw/pull/107476)
- Speed up media-only reply tests [#107481](https://github.com/openclaw/openclaw/pull/107481)
- Simplify synchronous QuickJS handle cleanup [#107483](https://github.com/openclaw/openclaw/pull/107483)
- Remove Firecrawl test-only export seams [#107485](https://github.com/openclaw/openclaw/pull/107485)
- Remove Tavily test-only export seams [#107540](https://github.com/openclaw/openclaw/pull/107540)
- Privatize the DuckDuckGo safe-search default [#107542](https://github.com/openclaw/openclaw/pull/107542)
- Restore WhatsApp QA scenario contracts [#107543](https://github.com/openclaw/openclaw/pull/107543)
- Use native Mistral request options directly [#107545](https://github.com/openclaw/openclaw/pull/107545)
- Remove the duplicate browser tab-focus fallback [#107548](https://github.com/openclaw/openclaw/pull/107548)
- Use native MDX compiler defaults and diagnostics [#107553](https://github.com/openclaw/openclaw/pull/107553)
- Privatize Raft's internal configuration schema [#107554](https://github.com/openclaw/openclaw/pull/107554)
- Make internal media runtime symbols private [#107560](https://github.com/openclaw/openclaw/pull/107560)
- Restore packaged Docker gateway checks [#107561](https://github.com/openclaw/openclaw/pull/107561)
- Guard the optional Raft runtime schema in tests [#107563](https://github.com/openclaw/openclaw/pull/107563)
- Remove stale ACPX upstream completion tests [#107569](https://github.com/openclaw/openclaw/pull/107569)
- Narrow internal model and provider helper exports [#107570](https://github.com/openclaw/openclaw/pull/107570)
- Keep the Tlon S3 regression test lint-clean [#107572](https://github.com/openclaw/openclaw/pull/107572)
- Localize unused agent message and turn helpers [#107578](https://github.com/openclaw/openclaw/pull/107578)
- Use native Clack prompt option types [#107583](https://github.com/openclaw/openclaw/pull/107583)
- Remove unsupported internal agent exports [#107584](https://github.com/openclaw/openclaw/pull/107584)
- Fix TUI fuzzy-search test typing [#107585](https://github.com/openclaw/openclaw/pull/107585)
- Trim unused internal agent exports [#107594](https://github.com/openclaw/openclaw/pull/107594)
- Refresh Korean native glossary metadata [#107599](https://github.com/openclaw/openclaw/pull/107599)
- Share the Control UI application-context test provider [#107602](https://github.com/openclaw/openclaw/pull/107602)
- Delegate Diffs preload and hydration to the dependency [#107612](https://github.com/openclaw/openclaw/pull/107612)
- Skip unused message-tool setup in capability tests [#107613](https://github.com/openclaw/openclaw/pull/107613)
- Clear stale Shared OpenClawKit dead-code findings [#107616](https://github.com/openclaw/openclaw/pull/107616)
- Restore lint for Control UI test imports [#107618](https://github.com/openclaw/openclaw/pull/107618)
- Trim internal command exports [#107621](https://github.com/openclaw/openclaw/pull/107621)
- Stabilize bundled LSP tests in shared CI workers [#107625](https://github.com/openclaw/openclaw/pull/107625)
- Require decimal values for Telegram QA runtime IDs [#107626](https://github.com/openclaw/openclaw/pull/107626)
- Trim unused internal cron exports [#107640](https://github.com/openclaw/openclaw/pull/107640)
- Split embedded runner model and authentication setup [#107646](https://github.com/openclaw/openclaw/pull/107646)
- Use native Matrix SDK event contracts [#107652](https://github.com/openclaw/openclaw/pull/107652)
- Split the SQLite session accessor [#107653](https://github.com/openclaw/openclaw/pull/107653)
- Remove unused internal CLI exports [#107654](https://github.com/openclaw/openclaw/pull/107654)
- Use native tree-sitter contracts in the command explainer [#107665](https://github.com/openclaw/openclaw/pull/107665)
- Cut CLI supervisor test startup cost [#107673](https://github.com/openclaw/openclaw/pull/107673)
- Fetch the exact PR base before deepening CI history [#107674](https://github.com/openclaw/openclaw/pull/107674)
- Simplify plugin archive test fixtures with tar recursion [#107675](https://github.com/openclaw/openclaw/pull/107675)
- Split Gateway session handlers by responsibility [#107677](https://github.com/openclaw/openclaw/pull/107677)
- Remove dead internal auto-reply exports [#107678](https://github.com/openclaw/openclaw/pull/107678)
- Use native TypeScript AST helpers in repository guards [#107689](https://github.com/openclaw/openclaw/pull/107689)
- Restore auto-reply formatting checks [#107692](https://github.com/openclaw/openclaw/pull/107692)
- Remove obsolete internal agent exports [#107695](https://github.com/openclaw/openclaw/pull/107695)
- Simplify WebSocket handling around native contracts [#107696](https://github.com/openclaw/openclaw/pull/107696)
- Restore post-release validation on main [#107697](https://github.com/openclaw/openclaw/pull/107697)
- Bound Telegram QA proof API waits [#107699](https://github.com/openclaw/openclaw/pull/107699)
- Bound Slack desktop-smoke authentication checks [#107700](https://github.com/openclaw/openclaw/pull/107700)
- Bound stalled QA Lab dashboard requests [#107701](https://github.com/openclaw/openclaw/pull/107701)
- Bound QA Lab Multipass Node downloads [#107702](https://github.com/openclaw/openclaw/pull/107702)
- Privatize embedded-runner internal exports [#107706](https://github.com/openclaw/openclaw/pull/107706)
- Simplify QA Lab strict schema construction [#107709](https://github.com/openclaw/openclaw/pull/107709)
- Remove unused Discord exports [#107714](https://github.com/openclaw/openclaw/pull/107714)
- Use published web-push type definitions [#107715](https://github.com/openclaw/openclaw/pull/107715)
- Use the native Zalouser typing API directly [#107716](https://github.com/openclaw/openclaw/pull/107716)
- Preload provider auth parity plugins [#107723](https://github.com/openclaw/openclaw/pull/107723)
- Privatize Bonjour process error classification type [#107724](https://github.com/openclaw/openclaw/pull/107724)
- Trim unused Telegram internal exports [#107726](https://github.com/openclaw/openclaw/pull/107726)
- Repair Full Release Validation dispatch [#107728](https://github.com/openclaw/openclaw/pull/107728)
- Privatize internal Copilot implementation exports [#107730](https://github.com/openclaw/openclaw/pull/107730)
- Simplify Markdown frontmatter parsing with YAML document nodes [#107733](https://github.com/openclaw/openclaw/pull/107733)
- Privatize unused Twitch and SMS plugin exports [#107737](https://github.com/openclaw/openclaw/pull/107737)
- Isolate the live model-switch test suite [#107738](https://github.com/openclaw/openclaw/pull/107738)
- Repair memory-core child-stream test mocks [#107740](https://github.com/openclaw/openclaw/pull/107740)
- Narrow markdown frontmatter fallback lookup [#107745](https://github.com/openclaw/openclaw/pull/107745)
- Reuse pinned IPv6 transition-range classifications [#107747](https://github.com/openclaw/openclaw/pull/107747)
- Restore markdown frontmatter type checks [#107748](https://github.com/openclaw/openclaw/pull/107748)
- Trim dead IRC and Workboard internal exports [#107749](https://github.com/openclaw/openclaw/pull/107749)
- Privatize test-only Linux-node and OC Path helpers [#107753](https://github.com/openclaw/openclaw/pull/107753)
- Privatize internal media parsing helpers [#107756](https://github.com/openclaw/openclaw/pull/107756)
- Add Testbox and local tooling invocation guards [#107757](https://github.com/openclaw/openclaw/pull/107757)
- Remove unused legacy naming exports [#107758](https://github.com/openclaw/openclaw/pull/107758)
- Model live pairing type consumers for dead-export checks [#107760](https://github.com/openclaw/openclaw/pull/107760)
- Isolate the provider ownership test fixture [#107762](https://github.com/openclaw/openclaw/pull/107762)
- Simplify Nostr profile relay subscriptions [#107763](https://github.com/openclaw/openclaw/pull/107763)
- Refresh Feishu overflow pagination validation [#107764](https://github.com/openclaw/openclaw/pull/107764)
- Privatize internal system-agent turn types [#107767](https://github.com/openclaw/openclaw/pull/107767)
- Split SQLite session accessor ownership [#107772](https://github.com/openclaw/openclaw/pull/107772)
- Privatize unused internals across five plugins [#107774](https://github.com/openclaw/openclaw/pull/107774)
- Simplify task-registry upserts [#107775](https://github.com/openclaw/openclaw/pull/107775)
- Reuse Noble byte utilities in Reef protocol code [#107776](https://github.com/openclaw/openclaw/pull/107776)
- Use AIMock's canonical text extraction in QA Lab [#107779](https://github.com/openclaw/openclaw/pull/107779)
- Isolate flaky shared-worker test suites [#107780](https://github.com/openclaw/openclaw/pull/107780)
- Remove unused small-plugin exports [#107784](https://github.com/openclaw/openclaw/pull/107784)
- Reject uninstallable plain source packages early [#107794](https://github.com/openclaw/openclaw/pull/107794)
- Trim unused internal extension exports [#107796](https://github.com/openclaw/openclaw/pull/107796)
- Isolate automatic harness selection in model-switch tests [#107801](https://github.com/openclaw/openclaw/pull/107801)
- Restore Nextcloud Talk replay test type-checking [#107808](https://github.com/openclaw/openclaw/pull/107808)
- Privatize unused provider and channel extension internals [#107817](https://github.com/openclaw/openclaw/pull/107817)
- Split session manager internals into focused modules [#107822](https://github.com/openclaw/openclaw/pull/107822)
- Privatize unused internal core exports [#107826](https://github.com/openclaw/openclaw/pull/107826)
- Model qmd child stream encoding in tests [#107827](https://github.com/openclaw/openclaw/pull/107827)
- Align Linux Canvas startup validation baselines [#107837](https://github.com/openclaw/openclaw/pull/107837)
- Reuse a repository template in run-lease tests [#107838](https://github.com/openclaw/openclaw/pull/107838)
- Preserve the OCM workspace packaging path [#107844](https://github.com/openclaw/openclaw/pull/107844)
- Speed provider-auth parity preloads [#107849](https://github.com/openclaw/openclaw/pull/107849)
- Speed up the Telegram release archive guard [#107858](https://github.com/openclaw/openclaw/pull/107858)
- Remove internal plugin test exports [#107859](https://github.com/openclaw/openclaw/pull/107859)
- Consolidate channel group policy resolution [#107865](https://github.com/openclaw/openclaw/pull/107865)
- Privatize diagnostics, Meet, and QA test seams [#107869](https://github.com/openclaw/openclaw/pull/107869)
- Pin the calibrated Kova performance evaluator [#107870](https://github.com/openclaw/openclaw/pull/107870)
- Speed up the type-suppression inventory check [#107874](https://github.com/openclaw/openclaw/pull/107874)
- Add reusable Parallels Windows test baseline tooling [#107881](https://github.com/openclaw/openclaw/pull/107881)
- Privatize unused Linux Canvas and Node Host exports [#107884](https://github.com/openclaw/openclaw/pull/107884)
- Classify temporary xAI outages in live validation [#107887](https://github.com/openclaw/openclaw/pull/107887)
- Speed up live-updater test fixtures [#107892](https://github.com/openclaw/openclaw/pull/107892)
- Shorten full release validation's critical path [#107894](https://github.com/openclaw/openclaw/pull/107894)
- Replace core channel literals with plugin metadata [#107898](https://github.com/openclaw/openclaw/pull/107898)
- Refresh agent prompt size snapshots [#107903](https://github.com/openclaw/openclaw/pull/107903)
- Remove unused channel-ingress SDK compatibility surfaces [#107906](https://github.com/openclaw/openclaw/pull/107906)
- Speed up managed-worktree test fixtures [#107908](https://github.com/openclaw/openclaw/pull/107908)
- Repair embedded-runner export ownership [#107912](https://github.com/openclaw/openclaw/pull/107912)
- Keep chat test helpers out of production exports [#107913](https://github.com/openclaw/openclaw/pull/107913)
- Privatize ClickClack command menu mapping [#107923](https://github.com/openclaw/openclaw/pull/107923)
- Update deprecated-facade CI guard fixtures [#107927](https://github.com/openclaw/openclaw/pull/107927)
- Speed up CLI supervisor capture tests [#107932](https://github.com/openclaw/openclaw/pull/107932)
- Isolate UI test globals and fix a Mattermost lint fixture [#107936](https://github.com/openclaw/openclaw/pull/107936)
- Stabilize flaky test shards that blocked merges [#107938](https://github.com/openclaw/openclaw/pull/107938)
- Split AgentSession into focused responsibility layers [#107948](https://github.com/openclaw/openclaw/pull/107948)
- Privatize unused channel-ingress internals [#107949](https://github.com/openclaw/openclaw/pull/107949)
- Remove unused Google Chat and Matrix test exports [#107951](https://github.com/openclaw/openclaw/pull/107951)
- Move outbound target grammar into channel adapters [#107953](https://github.com/openclaw/openclaw/pull/107953)
- Speed up hooks CLI process-lifecycle tests [#107954](https://github.com/openclaw/openclaw/pull/107954)
- Split Codex route diagnostics into focused Doctor modules [#107955](https://github.com/openclaw/openclaw/pull/107955)
- Split plugin installation into focused modules [#107960](https://github.com/openclaw/openclaw/pull/107960)
- Refresh generated docs map for z.ai overload guidance [#107966](https://github.com/openclaw/openclaw/pull/107966)
- Privatize QA Matrix and Workspaces test internals [#107973](https://github.com/openclaw/openclaw/pull/107973)
- Prevent low-core timeouts in hooks CLI process tests [#107977](https://github.com/openclaw/openclaw/pull/107977)
- Split config I/O into focused internal modules [#107983](https://github.com/openclaw/openclaw/pull/107983)
- Split auto-reply agent execution into focused modules [#107985](https://github.com/openclaw/openclaw/pull/107985)
- Restore session-history type checks and the max-lines gate [#107987](https://github.com/openclaw/openclaw/pull/107987)
- Pin session-aware worktree GC behavior across callers [#107989](https://github.com/openclaw/openclaw/pull/107989)
- Skip native Periphery scans for unrelated pull requests [#107991](https://github.com/openclaw/openclaw/pull/107991)
- Speed up CLI capture test suites [#107993](https://github.com/openclaw/openclaw/pull/107993)
- Privatize internal Discord plugin surfaces [#108003](https://github.com/openclaw/openclaw/pull/108003)
- Enable macOS and Windows test builds of the desktop shell [#108004](https://github.com/openclaw/openclaw/pull/108004)
- Faster doctor host-compatibility tests [#108008](https://github.com/openclaw/openclaw/pull/108008)
- Restore Discord architecture and max-lines CI gates [#108013](https://github.com/openclaw/openclaw/pull/108013)
- Retry transient provider failures during release validation [#108015](https://github.com/openclaw/openclaw/pull/108015)
- Speed up doctor preview-warning tests [#108017](https://github.com/openclaw/openclaw/pull/108017)
- Keep PR maintenance delta-only and use exact CI diff bases [#108018](https://github.com/openclaw/openclaw/pull/108018)
- Remove the repo-only plugin SDK testing barrel [#108020](https://github.com/openclaw/openclaw/pull/108020)
- Speed up Doctor plugin-install tests [#108022](https://github.com/openclaw/openclaw/pull/108022)
- Privatize internal Telegram test surfaces [#108026](https://github.com/openclaw/openclaw/pull/108026)
- Speed up the exec no-output timer test [#108037](https://github.com/openclaw/openclaw/pull/108037)
- Remove test-only Canvas A2UI handler factory [#108038](https://github.com/openclaw/openclaw/pull/108038)
- Make Gateway secret assignment projection explicit [#108040](https://github.com/openclaw/openclaw/pull/108040)
- Trim unused Codex session-catalog exports [#108045](https://github.com/openclaw/openclaw/pull/108045)
- Align GitHub Copilot token tests with trusted-host policy [#108047](https://github.com/openclaw/openclaw/pull/108047)
- Speed up model benchmark CLI tests [#108048](https://github.com/openclaw/openclaw/pull/108048)
- Defer installed plugin payload validation to failure recovery [#108051](https://github.com/openclaw/openclaw/pull/108051)
- Refresh the generated documentation map [#108052](https://github.com/openclaw/openclaw/pull/108052)
- Bound gateway suspension probes by the phase deadline [#108063](https://github.com/openclaw/openclaw/pull/108063)
- Keep QA Lab HTTP probes within their deadlines [#108064](https://github.com/openclaw/openclaw/pull/108064)
- Bound multi-node Docker health probes by their deadline [#108065](https://github.com/openclaw/openclaw/pull/108065)
- Privatize unused security audit and fixer helpers [#108067](https://github.com/openclaw/openclaw/pull/108067)
- Trim unused MCP server exports [#108076](https://github.com/openclaw/openclaw/pull/108076)
- Reuse a template repository in PR operation-lock tests [#108078](https://github.com/openclaw/openclaw/pull/108078)
- Keep macOS sources warning-free in Xcode 27 [#108081](https://github.com/openclaw/openclaw/pull/108081)
- Balance Node CI shards and scope heavy lanes [#108091](https://github.com/openclaw/openclaw/pull/108091)
- Stabilize full-suite test shards [#108093](https://github.com/openclaw/openclaw/pull/108093)
- Move GitHub Copilot runtime authentication into the provider plugin [#108096](https://github.com/openclaw/openclaw/pull/108096)
- Privatize internal LLM provider helpers [#108099](https://github.com/openclaw/openclaw/pull/108099)
- Speed the Telegram archive stress fixture [#108108](https://github.com/openclaw/openclaw/pull/108108)
- Remove internal audit test exports [#108111](https://github.com/openclaw/openclaw/pull/108111)
- Preserve signed merge ancestry during fork publication [#108112](https://github.com/openclaw/openclaw/pull/108112)
- Install Telegram metadata in group-intro tests [#108113](https://github.com/openclaw/openclaw/pull/108113)
- Privatize the session cost status formatter [#108118](https://github.com/openclaw/openclaw/pull/108118)
- Isolate cron creator tool-cap planning and writes [#108122](https://github.com/openclaw/openclaw/pull/108122)
- Keep terminal shell quoting private [#108125](https://github.com/openclaw/openclaw/pull/108125)
- Reuse the release-validation test checkout [#108129](https://github.com/openclaw/openclaw/pull/108129)
- Privatize the music-generation mode resolver [#108132](https://github.com/openclaw/openclaw/pull/108132)
- Synchronize gateway dispatch tests before invocation [#108138](https://github.com/openclaw/openclaw/pull/108138)
- Privatize proxy-capture server helpers [#108139](https://github.com/openclaw/openclaw/pull/108139)
- Isolate Gmail setup cache state in tests [#108150](https://github.com/openclaw/openclaw/pull/108150)
- Harden maintainer PR gate checks and CI stability [#108153](https://github.com/openclaw/openclaw/pull/108153)
- Preserve UTF-8 in capped QA Lab child output [#108156](https://github.com/openclaw/openclaw/pull/108156)
- Bound Telegram Desktop installer downloads in QA Lab [#108157](https://github.com/openclaw/openclaw/pull/108157)
- Support frozen Codex binding sidecars in release validation [#108158](https://github.com/openclaw/openclaw/pull/108158)
- Bound Slack desktop smoke bootstrap downloads [#108161](https://github.com/openclaw/openclaw/pull/108161)
- Separate hooks output and exit deadlines [#108162](https://github.com/openclaw/openclaw/pull/108162)
- Bound Crabbox identity checks when AWS metadata stalls [#108165](https://github.com/openclaw/openclaw/pull/108165)
- Prevent fallback Node downloads from hanging CI [#108166](https://github.com/openclaw/openclaw/pull/108166)
- Refresh Android build and test dependencies [#108167](https://github.com/openclaw/openclaw/pull/108167)
- Simplify native session executable resolution [#108169](https://github.com/openclaw/openclaw/pull/108169)
- Remove ACP dead-export baseline exceptions [#108170](https://github.com/openclaw/openclaw/pull/108170)
- Serialize spawn-timing CI suites [#108171](https://github.com/openclaw/openclaw/pull/108171)
- Speed invalid SQLite reliability CLI requests [#108173](https://github.com/openclaw/openclaw/pull/108173)
- Make context-engine registry internals private [#108179](https://github.com/openclaw/openclaw/pull/108179)
- Preserve Unicode in GitHub API error output [#108184](https://github.com/openclaw/openclaw/pull/108184)
- Validate frozen releases with current workflows [#108189](https://github.com/openclaw/openclaw/pull/108189)
- Privatize unused session exports [#108191](https://github.com/openclaw/openclaw/pull/108191)
- Preserve emoji in cross-OS release diagnostics [#108193](https://github.com/openclaw/openclaw/pull/108193)
- Restore the dead-export ratchet after system-agent delegation work [#108201](https://github.com/openclaw/openclaw/pull/108201)
- Shorten CI with smoke-aware gating and a snapshot lane [#108202](https://github.com/openclaw/openclaw/pull/108202)
- Speed up Crabbox wrapper timing tests [#108207](https://github.com/openclaw/openclaw/pull/108207)
- Preserve emoji in npm audit error text [#108208](https://github.com/openclaw/openclaw/pull/108208)
- Split the policy evidence collector into domain modules [#108210](https://github.com/openclaw/openclaw/pull/108210)
- Wait for Matrix config reload in release checks [#108214](https://github.com/openclaw/openclaw/pull/108214)
- Privatize unused agent helper exports [#108219](https://github.com/openclaw/openclaw/pull/108219)
- Refresh generated Plugin SDK API hashes [#108221](https://github.com/openclaw/openclaw/pull/108221)
- Align plugin release CI proof with protected tag policy [#108223](https://github.com/openclaw/openclaw/pull/108223)
- Assert protected plugin publishing starts fail-closed [#108227](https://github.com/openclaw/openclaw/pull/108227)
- Split Telegram message dispatch into focused controllers [#108228](https://github.com/openclaw/openclaw/pull/108228)
- Reuse Libterminal's terminal color responder [#108234](https://github.com/openclaw/openclaw/pull/108234)
- Prevent spawn-starvation flakes on 4-vCPU CI runners [#108239](https://github.com/openclaw/openclaw/pull/108239)
- Unblock plugin publication bootstrap recovery [#108243](https://github.com/openclaw/openclaw/pull/108243)
- Split the session accessor into ownership-focused modules [#108247](https://github.com/openclaw/openclaw/pull/108247)
- Privatize test-only subagent owner surfaces [#108248](https://github.com/openclaw/openclaw/pull/108248)
- Privatize authentication test seams [#108260](https://github.com/openclaw/openclaw/pull/108260)
- Enforce plugin SDK deprecation hygiene in CI [#108261](https://github.com/openclaw/openclaw/pull/108261)
- Run all compact CI test bins serially [#108266](https://github.com/openclaw/openclaw/pull/108266)
- Privatize models configuration test seams [#108275](https://github.com/openclaw/openclaw/pull/108275)
- Support frozen Matrix QA profiles [#108279](https://github.com/openclaw/openclaw/pull/108279)
- Privatize CLI runner and live-auth test helpers [#108282](https://github.com/openclaw/openclaw/pull/108282)
- Move agent reset helpers behind test-only support modules [#108285](https://github.com/openclaw/openclaw/pull/108285)
- Privatize agent runtime test seams [#108295](https://github.com/openclaw/openclaw/pull/108295)
- Harden frozen-target release validation [#108296](https://github.com/openclaw/openclaw/pull/108296)
- Tighten asynchronous test polling intervals [#108301](https://github.com/openclaw/openclaw/pull/108301)
- Order session-lock imports in test cleanup bootstrap [#108308](https://github.com/openclaw/openclaw/pull/108308)
- Privatize agent test seams and shrink the dead-export baseline [#108309](https://github.com/openclaw/openclaw/pull/108309)
- Remove unreachable OpenAI tool compatibility branch [#108310](https://github.com/openclaw/openclaw/pull/108310)
- Privatize core test-only exports [#108325](https://github.com/openclaw/openclaw/pull/108325)
- Isolate stateful tests from shared fast-test workers [#108334](https://github.com/openclaw/openclaw/pull/108334)
- Move runtime test seams behind private support modules [#108338](https://github.com/openclaw/openclaw/pull/108338)
- Keep frozen release planning dependency-free [#108340](https://github.com/openclaw/openclaw/pull/108340)
- Support frozen Codex release validation [#108343](https://github.com/openclaw/openclaw/pull/108343)
- Restore the task-boundary CI allowlist after test seam split [#108347](https://github.com/openclaw/openclaw/pull/108347)
- Bound guarded Codex shared-client test requests [#108363](https://github.com/openclaw/openclaw/pull/108363)
- Wait for complete terminal readiness states in UI tests [#108371](https://github.com/openclaw/openclaw/pull/108371)
- Eliminate the unused-export baseline [#108376](https://github.com/openclaw/openclaw/pull/108376)
- Split Telegram dispatch tests into focused suites [#108377](https://github.com/openclaw/openclaw/pull/108377)
- Align Control UI release E2E checks with current chat behavior [#108380](https://github.com/openclaw/openclaw/pull/108380)
- Reduce polling delays in asynchronous tests [#108385](https://github.com/openclaw/openclaw/pull/108385)
- Reuse sticky dependencies for warm Node CI shards [#108386](https://github.com/openclaw/openclaw/pull/108386)
- Stale theme max-lines cleanup landed with no unique delta [#108390](https://github.com/openclaw/openclaw/pull/108390)
- Authenticate the live Codex Docker release probe [#108400](https://github.com/openclaw/openclaw/pull/108400)
- Isolate Discord component registry tests [#108410](https://github.com/openclaw/openclaw/pull/108410)
- Split the Codex app-server thread lifecycle into focused modules [#108414](https://github.com/openclaw/openclaw/pull/108414)
- Split plugin type contracts into focused modules [#108416](https://github.com/openclaw/openclaw/pull/108416)
- Preserve frozen-target guards and retry transient live timeouts [#108418](https://github.com/openclaw/openclaw/pull/108418)
- Split capability CLI commands by domain [#108419](https://github.com/openclaw/openclaw/pull/108419)
- Stabilize release validation and workflow linting [#108420](https://github.com/openclaw/openclaw/pull/108420)
- Split Control UI sidebar responsibilities [#108422](https://github.com/openclaw/openclaw/pull/108422)
- Split agent command orchestration into phase modules [#108424](https://github.com/openclaw/openclaw/pull/108424)
- Route live channel QA through the shared suite host [#108429](https://github.com/openclaw/openclaw/pull/108429)
- Unify Telegram QA under QA Lab [#108430](https://github.com/openclaw/openclaw/pull/108430)
- Bind QA message actions to authorized targets [#108433](https://github.com/openclaw/openclaw/pull/108433)
- Restore Workflow Sanity and ClawHub retry tests [#108437](https://github.com/openclaw/openclaw/pull/108437)
- Narrow Plugin SDK wildcard barrels [#108440](https://github.com/openclaw/openclaw/pull/108440)
- Tighten asynchronous test polling intervals [#108450](https://github.com/openclaw/openclaw/pull/108450)
- Tighten asynchronous test polling intervals [#108454](https://github.com/openclaw/openclaw/pull/108454)
- Verify tools in SQLite-backed installer sessions [#108458](https://github.com/openclaw/openclaw/pull/108458)
- Make scenario YAML the source of truth for QA coverage [#108464](https://github.com/openclaw/openclaw/pull/108464)
- Consolidate QA Lab live-transport selection [#108465](https://github.com/openclaw/openclaw/pull/108465)
- Use the trusted installer harness for frozen release validation [#108467](https://github.com/openclaw/openclaw/pull/108467)
- Restore Crabline in the package Telegram validation harness [#108468](https://github.com/openclaw/openclaw/pull/108468)
- Isolate Crabline from Telegram package validation [#108472](https://github.com/openclaw/openclaw/pull/108472)
- Keep packaged Telegram QA off private runtime imports [#108476](https://github.com/openclaw/openclaw/pull/108476)
- Reuse Chromium across Control UI E2E cases [#108478](https://github.com/openclaw/openclaw/pull/108478)
- Support npm preflight for frozen pre-AI releases [#108479](https://github.com/openclaw/openclaw/pull/108479)
- Correlate scrubbed Anthropic release probes [#108480](https://github.com/openclaw/openclaw/pull/108480)
- Align QA Lab live scenario coverage tests [#108481](https://github.com/openclaw/openclaw/pull/108481)
- Stabilize stale session-lock retry coverage [#108483](https://github.com/openclaw/openclaw/pull/108483)
- Harden unused-export detection [#108484](https://github.com/openclaw/openclaw/pull/108484)
- Isolate Control UI sidebar session presentation [#108492](https://github.com/openclaw/openclaw/pull/108492)
- Restore the repository formatting gate [#108493](https://github.com/openclaw/openclaw/pull/108493)
- Tighten dead-export checks for provider extensions [#108497](https://github.com/openclaw/openclaw/pull/108497)
- Repair installed-package Telegram acceptance harness boundaries [#108499](https://github.com/openclaw/openclaw/pull/108499)
- Remove unused vLLM registration shim [#108500](https://github.com/openclaw/openclaw/pull/108500)
- Remove an obsolete vLLM bridge that tripped the unused-file check [#108503](https://github.com/openclaw/openclaw/pull/108503)
- Speed up Control UI browser tests [#108504](https://github.com/openclaw/openclaw/pull/108504)
- Split the plugin loader into focused internal modules [#108513](https://github.com/openclaw/openclaw/pull/108513)
- Tighten dead-export checks for provider extensions [#108515](https://github.com/openclaw/openclaw/pull/108515)
- Fix realtime transcription test lint [#108516](https://github.com/openclaw/openclaw/pull/108516)
- Satisfy Promise-executor lint in provider tests [#108521](https://github.com/openclaw/openclaw/pull/108521)
- Tighten dead-code checks for Google and xAI extensions [#108523](https://github.com/openclaw/openclaw/pull/108523)
- Remove retired Matrix QA package guards [#108531](https://github.com/openclaw/openclaw/pull/108531)
- Count only passing QA evidence as fulfilled coverage [#108537](https://github.com/openclaw/openclaw/pull/108537)
- Tighten dead-export checks for extension roots [#108538](https://github.com/openclaw/openclaw/pull/108538)
- Reject QA scenarios outside the selected lane [#108539](https://github.com/openclaw/openclaw/pull/108539)
- Preserve Unicode in QA evidence previews [#108545](https://github.com/openclaw/openclaw/pull/108545)
- Tighten Anthropic dead-code detection [#108547](https://github.com/openclaw/openclaw/pull/108547)
- Speed up slow unit and browser tests [#108563](https://github.com/openclaw/openclaw/pull/108563)
- Restore provider-fold CI validation [#108564](https://github.com/openclaw/openclaw/pull/108564)
- Remove retired Matrix QA artwork [#108575](https://github.com/openclaw/openclaw/pull/108575)
- Split memory-core synchronization into owned modules [#108583](https://github.com/openclaw/openclaw/pull/108583)
- Harden QA and live release validation [#108589](https://github.com/openclaw/openclaw/pull/108589)
- Clean provider dead exports from changed checks [#108592](https://github.com/openclaw/openclaw/pull/108592)
- Speed up formatting and artifact CI lanes [#108594](https://github.com/openclaw/openclaw/pull/108594)
- Make QA channel drivers a run-level choice [#108602](https://github.com/openclaw/openclaw/pull/108602)
- Speed up targeted regression suites [#108609](https://github.com/openclaw/openclaw/pull/108609)
- Bound stalled Mantis evidence uploads [#108616](https://github.com/openclaw/openclaw/pull/108616)
- Bound Gateway health waits in performance CI [#108621](https://github.com/openclaw/openclaw/pull/108621)
- Split QA smoke tests into four parallel CI parts [#108638](https://github.com/openclaw/openclaw/pull/108638)
- Enforce zero unused exports and files across the repository [#108641](https://github.com/openclaw/openclaw/pull/108641)
- Stop test watchdogs from delaying worker shutdown [#108643](https://github.com/openclaw/openclaw/pull/108643)
- Repair release-validation probes and contracts [#108646](https://github.com/openclaw/openclaw/pull/108646)
- Keep production dead-code scans test-free [#108648](https://github.com/openclaw/openclaw/pull/108648)
- Reuse the canonical plugin-disable path after update failures [#108649](https://github.com/openclaw/openclaw/pull/108649)
- Bound tool-result warning dedupe caches [#108667](https://github.com/openclaw/openclaw/pull/108667)
- Bound stalled ShellCheck downloads in Workflow Sanity [#108672](https://github.com/openclaw/openclaw/pull/108672)
- Fix standalone OAuth test teardown [#108674](https://github.com/openclaw/openclaw/pull/108674)
- Bound stalled QA bus requests [#108684](https://github.com/openclaw/openclaw/pull/108684)
- Bound Apple CI native-tool downloads [#108685](https://github.com/openclaw/openclaw/pull/108685)
- Speed up the ring-zero Docker QA smoke lane [#108694](https://github.com/openclaw/openclaw/pull/108694)
- Bound Windows E2E prerequisite metadata fetches [#108698](https://github.com/openclaw/openclaw/pull/108698)
- Bound Mantis runner IP discovery [#108699](https://github.com/openclaw/openclaw/pull/108699)
- Bound OCM downloads in the performance workflow [#108700](https://github.com/openclaw/openclaw/pull/108700)
- Bound Telegram release QA identity requests [#108701](https://github.com/openclaw/openclaw/pull/108701)
- Regenerate the Swift session thinking-level model [#108715](https://github.com/openclaw/openclaw/pull/108715)
- Enforce full-repository dead-code checks [#108717](https://github.com/openclaw/openclaw/pull/108717)
- Bound E2E npm registry proxy requests [#108718](https://github.com/openclaw/openclaw/pull/108718)
- Share Responses tool-call identity tracking [#108721](https://github.com/openclaw/openclaw/pull/108721)
- Bound Android SDK downloads in CI [#108723](https://github.com/openclaw/openclaw/pull/108723)
- Narrow specialized web runtime context results [#108728](https://github.com/openclaw/openclaw/pull/108728)
- Unify diagnostics heartbeat recovery request construction [#108736](https://github.com/openclaw/openclaw/pull/108736)
- Bound MinGit downloads in Parallels Windows smoke tests [#108741](https://github.com/openclaw/openclaw/pull/108741)
- Bound Windows WSL2 rootfs download stalls [#108743](https://github.com/openclaw/openclaw/pull/108743)
- Share the OAuth file-lock test mock [#108745](https://github.com/openclaw/openclaw/pull/108745)
- Remove the Windows launcher encoding test hook [#108750](https://github.com/openclaw/openclaw/pull/108750)
- Simplify Microsoft Teams SharePoint timeout cancellation [#108752](https://github.com/openclaw/openclaw/pull/108752)
- Bound Windows Testbox phone-home requests [#108755](https://github.com/openclaw/openclaw/pull/108755)
- Make updater runtime preflight results explicit [#108760](https://github.com/openclaw/openclaw/pull/108760)
- Centralize plugin slot reset policy [#108763](https://github.com/openclaw/openclaw/pull/108763)
- Bound npm tarball downloads during release resume [#108766](https://github.com/openclaw/openclaw/pull/108766)
- Reuse the shared Discord probe response deadline [#108768](https://github.com/openclaw/openclaw/pull/108768)
- Bound cross-platform installer fetches in release checks [#108771](https://github.com/openclaw/openclaw/pull/108771)
- Require strict PathUri inputs at the Codex sandbox boundary [#108772](https://github.com/openclaw/openclaw/pull/108772)
- Centralize tool-result image payload checks [#108775](https://github.com/openclaw/openclaw/pull/108775)
- Clear completed test timeout timers [#108780](https://github.com/openclaw/openclaw/pull/108780)
- Label static QA scorecard data as inventory [#108784](https://github.com/openclaw/openclaw/pull/108784)
- Explain retained landing locks and malformed review artifacts [#108785](https://github.com/openclaw/openclaw/pull/108785)
- Remove a shutdown-grace test readiness race [#108787](https://github.com/openclaw/openclaw/pull/108787)
- Scale compact Vitest workers by CI runner size [#108788](https://github.com/openclaw/openclaw/pull/108788)
- Reduce peak memory during source builds [#108790](https://github.com/openclaw/openclaw/pull/108790)
- Extract the Docker setup E2E test harness [#108797](https://github.com/openclaw/openclaw/pull/108797)
- Harden release validation and isolate PR publication transport [#108798](https://github.com/openclaw/openclaw/pull/108798)
- Isolate and bound CI metadata retries [#108804](https://github.com/openclaw/openclaw/pull/108804)
- Share widget HTML validation helpers [#108807](https://github.com/openclaw/openclaw/pull/108807)
- Bound and stage the OpenShell E2E installer download [#108810](https://github.com/openclaw/openclaw/pull/108810)
- Bound ClickClack fixture requests in release E2E [#108826](https://github.com/openclaw/openclaw/pull/108826)
- Gate releases on Codex progress follow-through [#108828](https://github.com/openclaw/openclaw/pull/108828)
- Bound stalled Anthropic prompt-probe proxy requests [#108832](https://github.com/openclaw/openclaw/pull/108832)
- Add a bounded Wear phone/watch protocol foundation [#108835](https://github.com/openclaw/openclaw/pull/108835)
- Bound channel-selection warning deduplication memory [#108840](https://github.com/openclaw/openclaw/pull/108840)
- Extract Discord channel test helpers [#108853](https://github.com/openclaw/openclaw/pull/108853)
- Share one Android toolchain setup across CI and releases [#108855](https://github.com/openclaw/openclaw/pull/108855)
- Bound the Git commit resolution cache with LRU eviction [#108856](https://github.com/openclaw/openclaw/pull/108856)
- Split Discord resolver tests to restore the lint baseline [#108857](https://github.com/openclaw/openclaw/pull/108857)
- Bound system-binary resolution caches [#108858](https://github.com/openclaw/openclaw/pull/108858)
- Bound the login-shell probe cache with LRU eviction [#108862](https://github.com/openclaw/openclaw/pull/108862)
- Speed up timeout and pairing test suites [#108863](https://github.com/openclaw/openclaw/pull/108863)
- Recover PR locks and worktrees after merge teardown [#108870](https://github.com/openclaw/openclaw/pull/108870)
- Synchronize the npm partial-body timeout regression [#108873](https://github.com/openclaw/openclaw/pull/108873)
- Add regression coverage for APNs tombstone STRICT repair [#108875](https://github.com/openclaw/openclaw/pull/108875)
- Bound macOS Discord smoke requests [#108880](https://github.com/openclaw/openclaw/pull/108880)
- Bound plugin artifact connection attempts [#108897](https://github.com/openclaw/openclaw/pull/108897)
- Bound full-release evidence dispatch time [#108898](https://github.com/openclaw/openclaw/pull/108898)
- Plugin SDK baseline refresh with no landed delta [#108910](https://github.com/openclaw/openclaw/pull/108910)
- Bound NodeSource downloads in non-root installer smoke builds [#108911](https://github.com/openclaw/openclaw/pull/108911)
- Refresh the merged Plugin SDK API baseline [#108913](https://github.com/openclaw/openclaw/pull/108913)
- Centralize cron history timestamp precedence [#108914](https://github.com/openclaw/openclaw/pull/108914)
- Centralize node-pairing ownership checks [#108929](https://github.com/openclaw/openclaw/pull/108929)
- Keep explicit-read fallback policy at the message action call site [#108930](https://github.com/openclaw/openclaw/pull/108930)
- Centralize Gateway challenge timeout resolution [#108932](https://github.com/openclaw/openclaw/pull/108932)
- Bound installer downloads in Docker release checks [#108937](https://github.com/openclaw/openclaw/pull/108937)
- Bound actionlint downloads in workflow sanity [#108938](https://github.com/openclaw/openclaw/pull/108938)
- Bound stalled Crabbox checkout in Mantis proof jobs [#108940](https://github.com/openclaw/openclaw/pull/108940)
- Deduplicate ClickClack gateway test fixtures [#108942](https://github.com/openclaw/openclaw/pull/108942)
- Speed up PR artifact builds [#108949](https://github.com/openclaw/openclaw/pull/108949)
- Simplify provider-key normalization [#108950](https://github.com/openclaw/openclaw/pull/108950)
- Bound npm fixture upstream response bodies [#108960](https://github.com/openclaw/openclaw/pull/108960)
- Bound Pond Gateway E2E connections [#108973](https://github.com/openclaw/openclaw/pull/108973)
- fix(qa-lab): bound retained child output without changing verdicts [#108981](https://github.com/openclaw/openclaw/pull/108981)
- Unify Swift protocol property and initializer naming [#108990](https://github.com/openclaw/openclaw/pull/108990)
- Bound QA Docker and Matrix health checks [#108992](https://github.com/openclaw/openclaw/pull/108992)
- Complete the shared plugin runtime activity mock [#109022](https://github.com/openclaw/openclaw/pull/109022)
- Centralize channel setup and control-plane helpers [#109028](https://github.com/openclaw/openclaw/pull/109028)
- fix(qa-lab): bound internal transport response reads [#109029](https://github.com/openclaw/openclaw/pull/109029)
- Bound Mantis upload error response bodies [#109044](https://github.com/openclaw/openclaw/pull/109044)
- Download the non-root smoke installer before execution [#109077](https://github.com/openclaw/openclaw/pull/109077)
- Gate prompt-snapshot CI by generator impact [#109083](https://github.com/openclaw/openclaw/pull/109083)
- Add stalled provider-response timeout regression tests [#109088](https://github.com/openclaw/openclaw/pull/109088)
- Download OpenGrep installers before execution [#109089](https://github.com/openclaw/openclaw/pull/109089)
- Let autoreview recognize obvious credential test fixtures [#109102](https://github.com/openclaw/openclaw/pull/109102)
- Consolidate plugin setup migration tests [#109110](https://github.com/openclaw/openclaw/pull/109110)
- Tolerate Plugin SDK declaration output variance [#109119](https://github.com/openclaw/openclaw/pull/109119)
- Remove a PID-file race from the SIGTERM test [#109140](https://github.com/openclaw/openclaw/pull/109140)
- Avoid duplicate unit-test coverage discovery [#109141](https://github.com/openclaw/openclaw/pull/109141)
- Speed up the CI lint lane [#109144](https://github.com/openclaw/openclaw/pull/109144)
- Run dead-code CI scans concurrently [#109151](https://github.com/openclaw/openclaw/pull/109151)
- Keep cross-platform release-check output UTF-8 safe [#109152](https://github.com/openclaw/openclaw/pull/109152)
- Reuse the release-ref resolver Git fixture [#109154](https://github.com/openclaw/openclaw/pull/109154)
- Bound the skill-command diagnostic cache [#109164](https://github.com/openclaw/openclaw/pull/109164)
- Keep bounded CI output tails valid UTF-8 [#109167](https://github.com/openclaw/openclaw/pull/109167)
- Keep bounded child-process diagnostics UTF-8 safe [#109168](https://github.com/openclaw/openclaw/pull/109168)
- Reuse extension boundary artifacts across CI runs [#109169](https://github.com/openclaw/openclaw/pull/109169)
- Bound stalled clones in docs publishing [#109173](https://github.com/openclaw/openclaw/pull/109173)
- Bound macOS release branch fetches [#109174](https://github.com/openclaw/openclaw/pull/109174)
- Bound npm-release Git fetch operations [#109176](https://github.com/openclaw/openclaw/pull/109176)
- Shard OpenAI transport stream tests [#109181](https://github.com/openclaw/openclaw/pull/109181)
- Allow the synthetic config-token fixture in Autoreview [#109182](https://github.com/openclaw/openclaw/pull/109182)
- Reuse shared keyed promise memoization [#109184](https://github.com/openclaw/openclaw/pull/109184)
- Cover outer-abort cancellation for proxy streams [#109185](https://github.com/openclaw/openclaw/pull/109185)
- Close stalled Anthropic prompt-probe responses [#109188](https://github.com/openclaw/openclaw/pull/109188)
- Remove the Feishu comment retry test seam [#109192](https://github.com/openclaw/openclaw/pull/109192)
- Speed up stuck-session recovery integration tests [#109195](https://github.com/openclaw/openclaw/pull/109195)
- Bound stalled QA process-metric probes [#109207](https://github.com/openclaw/openclaw/pull/109207)
- Raise flaky async test wait ceilings [#109222](https://github.com/openclaw/openclaw/pull/109222)
- Stabilize the Crabbox signal-cleanup test [#109223](https://github.com/openclaw/openclaw/pull/109223)
- Deduplicate Codex sandbox HTTP test setup [#109229](https://github.com/openclaw/openclaw/pull/109229)
- Speed up media download timeout tests [#109238](https://github.com/openclaw/openclaw/pull/109238)
- Temporarily omit Z.AI API Platform release validation [#109246](https://github.com/openclaw/openclaw/pull/109246)
- Repair CI performance optimizations and Docker declarations [#109254](https://github.com/openclaw/openclaw/pull/109254)
- Shorten the Azure voice timeout test [#109255](https://github.com/openclaw/openclaw/pull/109255)
- Stabilize profile and gateway authentication tests [#109257](https://github.com/openclaw/openclaw/pull/109257)
- Ask feature requesters about implementation plans [#109258](https://github.com/openclaw/openclaw/pull/109258)
- Bound Docker E2E stats sample lines [#109262](https://github.com/openclaw/openclaw/pull/109262)
- Remove stale internal compatibility aliases [#109266](https://github.com/openclaw/openclaw/pull/109266)
- Verify packaged Codex cold installation in QA [#109267](https://github.com/openclaw/openclaw/pull/109267)
- Speed the Telegram webhook shutdown retry test [#109271](https://github.com/openclaw/openclaw/pull/109271)
- Restore compatibility for frozen release validation [#109272](https://github.com/openclaw/openclaw/pull/109272)
- Automate generated Control UI translation conflict resolution [#109279](https://github.com/openclaw/openclaw/pull/109279)
- Make live planning QA fail closed on current-attempt evidence [#109282](https://github.com/openclaw/openclaw/pull/109282)
- Move native-hook relay coordination into SQLite [#109289](https://github.com/openclaw/openclaw/pull/109289)
- Prove the Codex auth migration product flow [#109291](https://github.com/openclaw/openclaw/pull/109291)
- Speed up local provider service startup tests [#109296](https://github.com/openclaw/openclaw/pull/109296)
- Refresh the merged Plugin SDK API baseline hashes [#109297](https://github.com/openclaw/openclaw/pull/109297)
- Restore daemon restart-health line-budget compliance [#109298](https://github.com/openclaw/openclaw/pull/109298)
- Keep synthetic UX evidence out of product coverage [#109315](https://github.com/openclaw/openclaw/pull/109315)
- Bound Docker attestation registry inspections [#109325](https://github.com/openclaw/openclaw/pull/109325)
- Reuse state in config-heavy unit suites [#109326](https://github.com/openclaw/openclaw/pull/109326)
- Reuse Vitest transform caches across CI runs [#109330](https://github.com/openclaw/openclaw/pull/109330)
- Let PR preparation use completed CI gate proof [#109331](https://github.com/openclaw/openclaw/pull/109331)
- Speed up and stabilize Node test and CI execution [#109332](https://github.com/openclaw/openclaw/pull/109332)
- Split heavy Plugin SDK test helpers into focused subpaths [#109333](https://github.com/openclaw/openclaw/pull/109333)
- Speed up recovery queue tests without real pacing waits [#109338](https://github.com/openclaw/openclaw/pull/109338)
- Stop silent hook success from timing out in CI [#109339](https://github.com/openclaw/openclaw/pull/109339)
- Consolidate auto-reply command test suites [#109342](https://github.com/openclaw/openclaw/pull/109342)
- Consolidate extension monitor test entry points [#109345](https://github.com/openclaw/openclaw/pull/109345)
- Reduce extension test setup overhead [#109346](https://github.com/openclaw/openclaw/pull/109346)
- Stabilize SIGTERM descendant-cleanup testing [#109347](https://github.com/openclaw/openclaw/pull/109347)
- Restore mixed-channel QA profile evidence generation [#109350](https://github.com/openclaw/openclaw/pull/109350)
- Restore docs-sync test typechecking [#109358](https://github.com/openclaw/openclaw/pull/109358)
- Restore core lint by splitting restart-health modules [#109359](https://github.com/openclaw/openclaw/pull/109359)
- Prevent generated plugin assets from restarting development watch mode [#109366](https://github.com/openclaw/openclaw/pull/109366)
- Retire Discord's duplicate internal abort-signal helper [#109369](https://github.com/openclaw/openclaw/pull/109369)
- Speed up heartbeat runtime tests [#109371](https://github.com/openclaw/openclaw/pull/109371)
- Restore the docs-sync test typecheck [#109372](https://github.com/openclaw/openclaw/pull/109372)
- Docs-sync type declaration was already present at landing [#109373](https://github.com/openclaw/openclaw/pull/109373)
- Add a live tool-surface comparison benchmark [#109374](https://github.com/openclaw/openclaw/pull/109374)
- Detect legacy Codex binding stores in frozen-release validation [#109377](https://github.com/openclaw/openclaw/pull/109377)
- Remove duplicate docs-sync declaration [#109383](https://github.com/openclaw/openclaw/pull/109383)
- Remove an obsolete proxy response capability gate [#109386](https://github.com/openclaw/openclaw/pull/109386)
- Make Control UI locale output bot-owned [#109393](https://github.com/openclaw/openclaw/pull/109393)
- Prove Gateway package self-upgrades in QA [#109399](https://github.com/openclaw/openclaw/pull/109399)
- Bound stalled CLI metadata generation [#109417](https://github.com/openclaw/openclaw/pull/109417)
- fix(release): avoid missing log evidence after partial reads [#109424](https://github.com/openclaw/openclaw/pull/109424)
- Persist trusted Vitest and Node caches across CI runs [#109425](https://github.com/openclaw/openclaw/pull/109425)
- Reduce redundant state-database race-test stress [#109426](https://github.com/openclaw/openclaw/pull/109426)
- Bound QA Lab Node lookup time under Bun [#109428](https://github.com/openclaw/openclaw/pull/109428)
- Define the SecretRef failure-isolation target policy [#109430](https://github.com/openclaw/openclaw/pull/109430)
- Avoid a duplicate updater timeout probe [#109438](https://github.com/openclaw/openclaw/pull/109438)
- Add a timeout to Windows QA process-tree cleanup [#109453](https://github.com/openclaw/openclaw/pull/109453)
- Bound Windows taskkill waits in QA-Lab cleanup [#109454](https://github.com/openclaw/openclaw/pull/109454)
- Faster cron process-group timeout test [#109457](https://github.com/openclaw/openclaw/pull/109457)
- Ignore inherited properties when restoring environment references [#109463](https://github.com/openclaw/openclaw/pull/109463)
- Preserve emoji in developer log previews [#109469](https://github.com/openclaw/openclaw/pull/109469)
- Defer state-migration fixture cleanup to suite teardown [#109475](https://github.com/openclaw/openclaw/pull/109475)
- Prevent stalled Git from blocking A2UI builds [#109476](https://github.com/openclaw/openclaw/pull/109476)
- Preserve emoji at issue-label prompt boundaries [#109477](https://github.com/openclaw/openclaw/pull/109477)
- Centralize channel mention and activation policy [#109480](https://github.com/openclaw/openclaw/pull/109480)
- Preserve emoji in mock request-log previews [#109481](https://github.com/openclaw/openclaw/pull/109481)
- Speed up the 100k-message transcript regression test [#109489](https://github.com/openclaw/openclaw/pull/109489)
- Consolidate realtime voice session wiring [#109497](https://github.com/openclaw/openclaw/pull/109497)
- Preserve emoji in issue-labeling diagnostics [#109498](https://github.com/openclaw/openclaw/pull/109498)
- Bound WhatsApp QA authentication archive restore [#109501](https://github.com/openclaw/openclaw/pull/109501)
- Repair Mantis Telegram Desktop proof dispatch [#109505](https://github.com/openclaw/openclaw/pull/109505)
- Synchronize transcript completion tests deterministically [#109507](https://github.com/openclaw/openclaw/pull/109507)
- Repair early hosted-gate verification [#109513](https://github.com/openclaw/openclaw/pull/109513)
- Control the worker shutdown grace timer in tests [#109517](https://github.com/openclaw/openclaw/pull/109517)
- Preserve Unicode in Matrix QA timeout diagnostics [#109532](https://github.com/openclaw/openclaw/pull/109532)
- Speed up the worker keepalive test fixture [#109539](https://github.com/openclaw/openclaw/pull/109539)
- Declare the release checklist execution helper [#109546](https://github.com/openclaw/openclaw/pull/109546)
- Remove duplicate release checklist type declaration [#109553](https://github.com/openclaw/openclaw/pull/109553)
- Remove a duplicate release checklist declaration [#109560](https://github.com/openclaw/openclaw/pull/109560)
- Preserve Unicode characters in Firecrawl diagnostics [#109561](https://github.com/openclaw/openclaw/pull/109561)
- Give frozen release validation more time for cold test hooks [#109564](https://github.com/openclaw/openclaw/pull/109564)
- Bound OpenGrep installer download time [#109576](https://github.com/openclaw/openclaw/pull/109576)
- Restore the release-checklist execution declaration [#109586](https://github.com/openclaw/openclaw/pull/109586)
- Explain unsupported Docker E2E resource limits [#109587](https://github.com/openclaw/openclaw/pull/109587)
- Shorten warm-cache CI critical paths [#109593](https://github.com/openclaw/openclaw/pull/109593)
- Persist Android Gradle caches on Blacksmith runners [#109605](https://github.com/openclaw/openclaw/pull/109605)
- Speed up Codex startup timeout tests [#109614](https://github.com/openclaw/openclaw/pull/109614)
- Isolate Docker E2E diagnostic artifacts in one private directory [#109625](https://github.com/openclaw/openclaw/pull/109625)
- Reduce CI metadata and preflight startup costs [#109628](https://github.com/openclaw/openclaw/pull/109628)
- Make active-memory timeout cleanup tests deterministic [#109631](https://github.com/openclaw/openclaw/pull/109631)
- Stabilize non-isolated and contention-sensitive tests [#109653](https://github.com/openclaw/openclaw/pull/109653)
- Stabilize the provider host cleanup test under CI load [#109663](https://github.com/openclaw/openclaw/pull/109663)
- Cache Docker E2E dependency installation [#109665](https://github.com/openclaw/openclaw/pull/109665)
- Keep byte-limited E2E text tails UTF-8 safe [#109669](https://github.com/openclaw/openclaw/pull/109669)
- Speed up the Google Chat certificate-timeout proof [#109671](https://github.com/openclaw/openclaw/pull/109671)
- Speed up Microsoft Teams lifecycle tests [#109686](https://github.com/openclaw/openclaw/pull/109686)
- Add OpenClawKit tests to macOS CI [#109688](https://github.com/openclaw/openclaw/pull/109688)
- Move three light-run CI jobs to 32-vCPU runners [#109695](https://github.com/openclaw/openclaw/pull/109695)
- Speed up Telegram polling-session tests [#109696](https://github.com/openclaw/openclaw/pull/109696)
- Bound Docker installer smoke pipelines with shared timeouts [#109698](https://github.com/openclaw/openclaw/pull/109698)
- Release unread Microsoft Teams consent-upload responses [#109701](https://github.com/openclaw/openclaw/pull/109701)
- Stabilize session freshness tests at the daily reset boundary [#109705](https://github.com/openclaw/openclaw/pull/109705)
- Unify TUI queue fallback admission [#109706](https://github.com/openclaw/openclaw/pull/109706)
- Speed up gateway startup state polling in tests [#109714](https://github.com/openclaw/openclaw/pull/109714)
- Centralize inbound channel-turn orchestration in core [#109716](https://github.com/openclaw/openclaw/pull/109716)
- Rebalance compact Node test shards from fresh timing data [#109717](https://github.com/openclaw/openclaw/pull/109717)
- Release LM Studio discovery connections after API errors [#109718](https://github.com/openclaw/openclaw/pull/109718)
- Poll subagent lifecycle tests faster [#109722](https://github.com/openclaw/openclaw/pull/109722)
- Reuse declaration outputs across full builds [#109737](https://github.com/openclaw/openclaw/pull/109737)
- Poll Telegram webhook test state faster [#109749](https://github.com/openclaw/openclaw/pull/109749)
- Use bounded protected disks for CI dependency snapshots [#109752](https://github.com/openclaw/openclaw/pull/109752)
- Speed up prompt snapshot CI generation [#109757](https://github.com/openclaw/openclaw/pull/109757)
- Speed up xAI realtime voice provider tests [#109762](https://github.com/openclaw/openclaw/pull/109762)
- Release CDP probe connections during sandbox browser startup [#109767](https://github.com/openclaw/openclaw/pull/109767)
- Shorten CI test bottlenecks and harden SQLite sidecar handling [#109769](https://github.com/openclaw/openclaw/pull/109769)
- Cut CLI runner reliability test import time [#109772](https://github.com/openclaw/openclaw/pull/109772)
- Mark legacy plan-step compatibility for removal [#109773](https://github.com/openclaw/openclaw/pull/109773)
- Speed up Chrome MCP state tests [#109776](https://github.com/openclaw/openclaw/pull/109776)
- Persist Node 22 declaration caches across CI runs [#109780](https://github.com/openclaw/openclaw/pull/109780)
- Speed up Matrix handler tests with controlled timers [#109790](https://github.com/openclaw/openclaw/pull/109790)
- Isolate gateway tests from background plugin reloads [#109801](https://github.com/openclaw/openclaw/pull/109801)
- Speed up ClickClack gateway test polling [#109803](https://github.com/openclaw/openclaw/pull/109803)
- Speed up the extension package boundary CI lane [#109804](https://github.com/openclaw/openclaw/pull/109804)
- Omit blank OpenAI base URLs from QA child config [#109810](https://github.com/openclaw/openclaw/pull/109810)
- Avoid state initialization while resolving the config path [#109811](https://github.com/openclaw/openclaw/pull/109811)
- No-op merge for test typecheck declaration [#109818](https://github.com/openclaw/openclaw/pull/109818)
- Update Android Kotlin plugins to 2.4.10 [#109822](https://github.com/openclaw/openclaw/pull/109822)
- Isolate orphan-recovery transcript tests [#109826](https://github.com/openclaw/openclaw/pull/109826)
- Isolate orphan-recovery tests from shared mock state [#109827](https://github.com/openclaw/openclaw/pull/109827)
- Restore the Web Push migration lint gate [#109845](https://github.com/openclaw/openclaw/pull/109845)
- Reuse CLI startup metadata in warm CI builds [#109863](https://github.com/openclaw/openclaw/pull/109863)
- Format install smoke-test assertions [#109873](https://github.com/openclaw/openclaw/pull/109873)
- Stabilize mock resolution in shared Vitest workers [#109874](https://github.com/openclaw/openclaw/pull/109874)
- Recalibrate the CLI status memory gate [#109887](https://github.com/openclaw/openclaw/pull/109887)
- Format the bounded process probe helper [#109892](https://github.com/openclaw/openclaw/pull/109892)
- Speed up device-pairing tests with a shared database fixture [#109894](https://github.com/openclaw/openclaw/pull/109894)
- Recalibrate compact CI shard packing [#109899](https://github.com/openclaw/openclaw/pull/109899)
- Make Feishu registration poll waits abort-aware [#109909](https://github.com/openclaw/openclaw/pull/109909)
- Restore bundled-plugin boundary checks for Google Meet tests [#109915](https://github.com/openclaw/openclaw/pull/109915)
- Keep Google Meet test cleanup inside the plugin boundary [#109917](https://github.com/openclaw/openclaw/pull/109917)
- Speed up asynchronous test polling across suites [#109919](https://github.com/openclaw/openclaw/pull/109919)
- Keep Parallels phase log tails UTF-8 safe [#109923](https://github.com/openclaw/openclaw/pull/109923)
- Scope WhatsApp test cleanup to each test [#109925](https://github.com/openclaw/openclaw/pull/109925)
- Bound non-root installer smoke downloads [#109927](https://github.com/openclaw/openclaw/pull/109927)
- Bound remaining CI sticky-disk cache keys [#109929](https://github.com/openclaw/openclaw/pull/109929)
- Bound dependency snapshot growth in CI [#109934](https://github.com/openclaw/openclaw/pull/109934)
- Remove a retired window-open declaration [#109936](https://github.com/openclaw/openclaw/pull/109936)
- Preserve Unicode in Telegram proof diagnostics [#109940](https://github.com/openclaw/openclaw/pull/109940)
- Stabilize macOS chat timestamp fixtures [#109954](https://github.com/openclaw/openclaw/pull/109954)
- Bound clawtributor GitHub lookups to prevent indefinite hangs [#109968](https://github.com/openclaw/openclaw/pull/109968)
- Bound npm release-resume GitHub lookups [#109982](https://github.com/openclaw/openclaw/pull/109982)
- Refresh the Plugin SDK API baseline after a meeting-runtime signature change [#109987](https://github.com/openclaw/openclaw/pull/109987)
- Keep additive heartbeat storage on agent schema version 11 [#109999](https://github.com/openclaw/openclaw/pull/109999)
- Move Discord voice wiring to the shared session harness [#110000](https://github.com/openclaw/openclaw/pull/110000)
- Repair Teams Meetings release validation [#110012](https://github.com/openclaw/openclaw/pull/110012)
- Reuse the shared LRU cache for MCP discovery [#110013](https://github.com/openclaw/openclaw/pull/110013)
- Bound stalled Git fetches in docs automation [#110026](https://github.com/openclaw/openclaw/pull/110026)
- Bound stalled Git fetches in Linux app releases [#110027](https://github.com/openclaw/openclaw/pull/110027)
- Bound release-check Git fetches with timeouts [#110028](https://github.com/openclaw/openclaw/pull/110028)
- Align Discord and WhatsApp lifecycle test mocks [#110041](https://github.com/openclaw/openclaw/pull/110041)
- Preserve private plugins in functional Docker E2E [#110062](https://github.com/openclaw/openclaw/pull/110062)
- Make the MCP release smoke tolerate delayed assistant events [#110076](https://github.com/openclaw/openclaw/pull/110076)
- Isolate talk consult tests from shared SQLite state [#110078](https://github.com/openclaw/openclaw/pull/110078)
- Isolate OpenClawKit CI builds from stale artifacts [#110088](https://github.com/openclaw/openclaw/pull/110088)
- Add end-to-end coverage for plan replay after reconnect [#110091](https://github.com/openclaw/openclaw/pull/110091)
- Remove the Signal ingress global test hook [#110094](https://github.com/openclaw/openclaw/pull/110094)
- Centralize bundled channel turn execution in core [#110095](https://github.com/openclaw/openclaw/pull/110095)
- Stabilize Slack tool-result reaction tests [#110105](https://github.com/openclaw/openclaw/pull/110105)
- Relax cross-OS release-test process startup waits [#110111](https://github.com/openclaw/openclaw/pull/110111)
- Localize Codex projector no-op handling [#110116](https://github.com/openclaw/openclaw/pull/110116)
- Speed up asynchronous lifecycle test suites [#110117](https://github.com/openclaw/openclaw/pull/110117)
- Honor repeated response content lengths [#110126](https://github.com/openclaw/openclaw/pull/110126)
- Keep the bundled-plugin metadata rewrite helper private [#110133](https://github.com/openclaw/openclaw/pull/110133)
- Prevent pnpm races after warm CI restores [#110135](https://github.com/openclaw/openclaw/pull/110135)
- Keep dependency snapshots warm across script-only edits [#110158](https://github.com/openclaw/openclaw/pull/110158)
- Stabilize bounded exec output-capture coverage [#110161](https://github.com/openclaw/openclaw/pull/110161)
- Scope media timeout budgets to the phase under test [#110169](https://github.com/openclaw/openclaw/pull/110169)
- Consolidate session restart-recovery internals [#110170](https://github.com/openclaw/openclaw/pull/110170)
- Rebalance compact CI test shards from loaded-fleet timings [#110172](https://github.com/openclaw/openclaw/pull/110172)
- Shorten canonical main CI fan-out [#110183](https://github.com/openclaw/openclaw/pull/110183)
- Rotate the stuck Blacksmith dependency snapshot [#110205](https://github.com/openclaw/openclaw/pull/110205)
- Split config help metadata into smaller owner modules [#110218](https://github.com/openclaw/openclaw/pull/110218)
- Make Plugin SDK API drift checks safe across concurrent merges [#110228](https://github.com/openclaw/openclaw/pull/110228)
- Split the root config schema into focused modules [#110238](https://github.com/openclaw/openclaw/pull/110238)
- Catch maintainer-script declaration drift before merge [#110248](https://github.com/openclaw/openclaw/pull/110248)
- Preserve provider failures as failed Gateway runs [#110252](https://github.com/openclaw/openclaw/pull/110252)
- Stabilize Slack reaction test state across reloads [#110255](https://github.com/openclaw/openclaw/pull/110255)
- Centralize MCP sandbox validation and reset test listener state [#110267](https://github.com/openclaw/openclaw/pull/110267)
- Split config-help quality fixtures from assertions [#110268](https://github.com/openclaw/openclaw/pull/110268)
- Remove orphan module tests from the proposed branch [#110272](https://github.com/openclaw/openclaw/pull/110272)
- Preserve Unicode in Crabbox command output [#110278](https://github.com/openclaw/openclaw/pull/110278)
- Bound stalled plugin npm release operations [#110279](https://github.com/openclaw/openclaw/pull/110279)
- Make QA coverage IDs exact and unambiguous [#110280](https://github.com/openclaw/openclaw/pull/110280)
- Bound stalled Git fetches in the main CI workflow [#110281](https://github.com/openclaw/openclaw/pull/110281)
- Bound stalled QA evidence fetches [#110282](https://github.com/openclaw/openclaw/pull/110282)
- Remove the SIGTERM wrapper test readiness race [#110283](https://github.com/openclaw/openclaw/pull/110283)
- Remove the unused agent-core session harness layer [#110287](https://github.com/openclaw/openclaw/pull/110287)
- Isolate Claude CLI diagnostics listener state in tests [#110288](https://github.com/openclaw/openclaw/pull/110288)
- Speed up Gateway async test polling [#110289](https://github.com/openclaw/openclaw/pull/110289)
- Stabilize chat popover layout tests [#110290](https://github.com/openclaw/openclaw/pull/110290)
- Isolate the macOS sessions.send follow-up test [#110291](https://github.com/openclaw/openclaw/pull/110291)
- fix(ci): bound docs-sync publish repo git fetch with timeout [#110294](https://github.com/openclaw/openclaw/pull/110294)
- Preserve complete main CI validation during merge bursts [#110298](https://github.com/openclaw/openclaw/pull/110298)
- Centralize declaration-guard temporary directory cleanup [#110311](https://github.com/openclaw/openclaw/pull/110311)
- Own diagnostic run-listener lifecycle [#110312](https://github.com/openclaw/openclaw/pull/110312)
- Centralize Android composer owner state [#110315](https://github.com/openclaw/openclaw/pull/110315)
- Shorten release candidate validation [#110316](https://github.com/openclaw/openclaw/pull/110316)
- Reuse shared Feishu cache pruning [#110326](https://github.com/openclaw/openclaw/pull/110326)
- Restore iMessage and WhatsApp tests after core turn-plan migration [#110327](https://github.com/openclaw/openclaw/pull/110327)
- Restore the Kitchen Sink live plugin QA gauntlet [#110335](https://github.com/openclaw/openclaw/pull/110335)
- Fix full release validation workflow permissions [#110353](https://github.com/openclaw/openclaw/pull/110353)
- Isolate Active Memory migration in live QA [#110358](https://github.com/openclaw/openclaw/pull/110358)
- Restore Feishu lifecycle tests for the core inbound runtime [#110361](https://github.com/openclaw/openclaw/pull/110361)
- Redesign CI cache persistence and writer ownership [#110363](https://github.com/openclaw/openclaw/pull/110363)
- Make release CI tolerate historical targets and stalled macOS capacity [#110365](https://github.com/openclaw/openclaw/pull/110365)
- Speed up Control UI async test polling [#110375](https://github.com/openclaw/openclaw/pull/110375)
- Preserve Codex WebSocket JSONL framing [#110384](https://github.com/openclaw/openclaw/pull/110384)
- Stabilize Matrix maturity QA scenarios [#110398](https://github.com/openclaw/openclaw/pull/110398)
- Stabilize Control UI browser checks on cold starts [#110403](https://github.com/openclaw/openclaw/pull/110403)
- Stop dev watch from rebuilding its own generated assets [#110422](https://github.com/openclaw/openclaw/pull/110422)
- Store session-watch provenance explicitly [#110428](https://github.com/openclaw/openclaw/pull/110428)
- Release ignored QA response streams before guarded cleanup [#110443](https://github.com/openclaw/openclaw/pull/110443)
- Centralize paired-node connection state updates [#110452](https://github.com/openclaw/openclaw/pull/110452)
- Regenerate derived native locale catalogs during sync [#110454](https://github.com/openclaw/openclaw/pull/110454)
- Feed candidate JSON to the release validator [#110456](https://github.com/openclaw/openclaw/pull/110456)
- Bound label synchronization GitHub CLI operations [#110463](https://github.com/openclaw/openclaw/pull/110463)
- Split CI stragglers and skip needless jsdom startup [#110477](https://github.com/openclaw/openclaw/pull/110477)
- Classify the managed APNs TLS tunnel in network CodeQL [#110480](https://github.com/openclaw/openclaw/pull/110480)
- Keep mock-only Control UI QA out of live provider suites [#110481](https://github.com/openclaw/openclaw/pull/110481)
- Stress-test Codex resume history across Gateway restarts [#110486](https://github.com/openclaw/openclaw/pull/110486)
- Stabilize QA release validation teardown and turn ordering [#110508](https://github.com/openclaw/openclaw/pull/110508)
- Bound live-updater Gateway probes to 30 seconds [#110509](https://github.com/openclaw/openclaw/pull/110509)
- Speed up Control UI async tests [#110530](https://github.com/openclaw/openclaw/pull/110530)
- Remove unused SQLite verification history and share failure latches [#110532](https://github.com/openclaw/openclaw/pull/110532)
- Keep native question-card views internal [#110534](https://github.com/openclaw/openclaw/pull/110534)
- Keep hosted-gate workflow queries within the GitHub relay response limit [#110540](https://github.com/openclaw/openclaw/pull/110540)
- Preserve Unicode in tool-surface benchmark dumps [#110546](https://github.com/openclaw/openclaw/pull/110546)
- Split the Control UI sidebar test suite [#110549](https://github.com/openclaw/openclaw/pull/110549)
- Split update command into focused internal modules [#110550](https://github.com/openclaw/openclaw/pull/110550)
- Add archive and restore state to the mock Sessions UI [#110556](https://github.com/openclaw/openclaw/pull/110556)
- Broaden the Vitest transform cache seed [#110557](https://github.com/openclaw/openclaw/pull/110557)
- Remove duplicate background-task session metadata [#110566](https://github.com/openclaw/openclaw/pull/110566)
- Bound Git lookups in the dependency pin guard [#110570](https://github.com/openclaw/openclaw/pull/110570)
- Add diagnostics for stalled subagent handoffs [#110574](https://github.com/openclaw/openclaw/pull/110574)
- Restore the missing filesystem import in security audits [#110585](https://github.com/openclaw/openclaw/pull/110585)
- Parallelize the Gateway watch CI check [#110609](https://github.com/openclaw/openclaw/pull/110609)
- Await TUI PTY teardown before test worker exit [#110610](https://github.com/openclaw/openclaw/pull/110610)
- Refresh generated Memory Core Plugin SDK API baseline [#110611](https://github.com/openclaw/openclaw/pull/110611)
- Refresh the generated Plugin SDK config-schema baseline [#110614](https://github.com/openclaw/openclaw/pull/110614)
- Refresh the channel send Plugin SDK baseline [#110620](https://github.com/openclaw/openclaw/pull/110620)
- Add the unconnected session-board rendering foundation [#110644](https://github.com/openclaw/openclaw/pull/110644)
- Split the update runner into focused internal modules [#110664](https://github.com/openclaw/openclaw/pull/110664)
- Split the shared state database into focused modules [#110666](https://github.com/openclaw/openclaw/pull/110666)
- Force isolated gateway shutdown in cross-OS release checks [#110698](https://github.com/openclaw/openclaw/pull/110698)
- Split the agent database into focused modules [#110707](https://github.com/openclaw/openclaw/pull/110707)
- Avoid loading inactive channel plugins during target parsing [#110720](https://github.com/openclaw/openclaw/pull/110720)
- Bound stalled OpenAI-compatible TTS contract requests [#110725](https://github.com/openclaw/openclaw/pull/110725)
- Add the Control UI session-dashboard shell [#110728](https://github.com/openclaw/openclaw/pull/110728)
- fix(ci): bound plugin-clawhub-release git fetch with timeout [#110736](https://github.com/openclaw/openclaw/pull/110736)
- Unify transcript previews on one widget-card renderer [#110740](https://github.com/openclaw/openclaw/pull/110740)
- Bound release-summary GitHub CLI operations [#110747](https://github.com/openclaw/openclaw/pull/110747)
- Bound GitHub calls in duplicate-PR cleanup [#110750](https://github.com/openclaw/openclaw/pull/110750)
- Refresh the merged Plugin SDK API baseline [#110751](https://github.com/openclaw/openclaw/pull/110751)
- Stop QA health retries after the overall deadline [#110753](https://github.com/openclaw/openclaw/pull/110753)
- Repair WhatsApp live QA account selection [#110754](https://github.com/openclaw/openclaw/pull/110754)
- Bound GHSA patch subprocesses to one minute [#110756](https://github.com/openclaw/openclaw/pull/110756)
- Release ElevenLabs live-test error response bodies [#110759](https://github.com/openclaw/openclaw/pull/110759)
- Restore plugin prerelease validation [#110787](https://github.com/openclaw/openclaw/pull/110787)
- Stabilize macOS ChatViewModel concurrency tests [#110798](https://github.com/openclaw/openclaw/pull/110798)
- Align QA coverage inventory contracts [#110799](https://github.com/openclaw/openclaw/pull/110799)
- Restore auto-merge for generated locale PRs [#110809](https://github.com/openclaw/openclaw/pull/110809)
- Restore jsdom localStorage on Node 25+ and document CI-drop recovery [#110812](https://github.com/openclaw/openclaw/pull/110812)
- Split the Control UI lobster pet into focused modules [#110816](https://github.com/openclaw/openclaw/pull/110816)
- Bound Android release-signing subprocesses [#110822](https://github.com/openclaw/openclaw/pull/110822)
- Keep formatter output tails UTF-8 safe [#110825](https://github.com/openclaw/openclaw/pull/110825)
- Update the Feishu delivery-trace test fixture [#110838](https://github.com/openclaw/openclaw/pull/110838)
- Honor Periphery ignore comments in the shared intersection gate [#110839](https://github.com/openclaw/openclaw/pull/110839)
- Bound Mantis Discord smoke Git fetches [#110851](https://github.com/openclaw/openclaw/pull/110851)
- Fail plugin release preflight after stalled npm lookups [#110862](https://github.com/openclaw/openclaw/pull/110862)
- Isolate QMD memory test fixtures from shared defaults [#110863](https://github.com/openclaw/openclaw/pull/110863)
- Restore Testbox lease ownership after delegated runs [#110869](https://github.com/openclaw/openclaw/pull/110869)
- Make repository script entrypoints work on Windows [#110877](https://github.com/openclaw/openclaw/pull/110877)
- Re-fire dropped pull-request CI runs [#110889](https://github.com/openclaw/openclaw/pull/110889)
- Rename a private WhatsApp inbound helper [#110890](https://github.com/openclaw/openclaw/pull/110890)
- Make Telegram turn tests complete reliably on macOS [#110894](https://github.com/openclaw/openclaw/pull/110894)
- Stabilize Telegram Mini App shard fixtures [#110895](https://github.com/openclaw/openclaw/pull/110895)
- Supply live credentials to full maturity evidence runs [#110897](https://github.com/openclaw/openclaw/pull/110897)
- Let the memory-wiki isolation test finish under load [#110919](https://github.com/openclaw/openclaw/pull/110919)
- Re-fire dropped PR CI when mergeability is unknown [#110945](https://github.com/openclaw/openclaw/pull/110945)
- Repair Codex app-server test fixtures [#110951](https://github.com/openclaw/openclaw/pull/110951)
- Run Codex version contract tests on dependency changes [#110958](https://github.com/openclaw/openclaw/pull/110958)
- Add the persistent session dashboard backend [#110960](https://github.com/openclaw/openclaw/pull/110960)
- Restore workspace bootstrap retry test coverage [#110966](https://github.com/openclaw/openclaw/pull/110966)
- Isolate Telegram tests from the core turn dispatcher [#110967](https://github.com/openclaw/openclaw/pull/110967)
- Bound Matrix E2EE sends in QA runs [#110968](https://github.com/openclaw/openclaw/pull/110968)
- Consolidate persistent dedupe claim handling [#110984](https://github.com/openclaw/openclaw/pull/110984)
- Seed reproducible Android release screenshot conversations [#111000](https://github.com/openclaw/openclaw/pull/111000)
- Wait for valid Knip child PIDs in cleanup tests [#111001](https://github.com/openclaw/openclaw/pull/111001)
- Share spawn orchestration across native and ACP backends [#111007](https://github.com/openclaw/openclaw/pull/111007)
- Restore the release-checklist declaration contract [#111009](https://github.com/openclaw/openclaw/pull/111009)
- Restore the release-candidate script declaration contract [#111011](https://github.com/openclaw/openclaw/pull/111011)
- Share durable ingress monitoring across channel plugins [#111017](https://github.com/openclaw/openclaw/pull/111017)
- Split Gateway chat handlers into focused workflow modules [#111022](https://github.com/openclaw/openclaw/pull/111022)
- Deduplicate the release checklist declaration contract [#111024](https://github.com/openclaw/openclaw/pull/111024)
- Split Discord message-processing regression tests [#111066](https://github.com/openclaw/openclaw/pull/111066)
- Honor canonical thread fields in the QA channel [#111070](https://github.com/openclaw/openclaw/pull/111070)
- Wait for Gateway config restarts before live QA scenarios [#111073](https://github.com/openclaw/openclaw/pull/111073)
- Make worktree mode tests respect host umask [#111075](https://github.com/openclaw/openclaw/pull/111075)
- Synchronize the checked-in Copilot runtime bundle [#111089](https://github.com/openclaw/openclaw/pull/111089)
- Resume QA channel cursors after Gateway restart [#111096](https://github.com/openclaw/openclaw/pull/111096)
- Split the Codex event-projector regression suite [#111097](https://github.com/openclaw/openclaw/pull/111097)
- Unify the Responses tool-call ID resolver [#111103](https://github.com/openclaw/openclaw/pull/111103)
- Centralize bounded descriptor reads in fs-safe [#111104](https://github.com/openclaw/openclaw/pull/111104)
- Make the Browser Copilot runtime bundle reproducible [#111109](https://github.com/openclaw/openclaw/pull/111109)
- Split Discord message processing into focused runtime modules [#111119](https://github.com/openclaw/openclaw/pull/111119)
- Remove an orphaned Anthropic Vertex auth helper [#111120](https://github.com/openclaw/openclaw/pull/111120)
- Make API provider registries lifecycle-local [#111137](https://github.com/openclaw/openclaw/pull/111137)
- Journal config changes with source labels and manual-edit detection [#111147](https://github.com/openclaw/openclaw/pull/111147)
- Bound shared Git inventory lookups and fail guardrails closed [#111171](https://github.com/openclaw/openclaw/pull/111171)
- Move model discovery into lifecycle-owned runtime snapshots [#111173](https://github.com/openclaw/openclaw/pull/111173)
- Consolidate durable channel ingress monitoring [#111186](https://github.com/openclaw/openclaw/pull/111186)
- Simplify WhatsApp doctor streaming migration [#111188](https://github.com/openclaw/openclaw/pull/111188)
- Share durable inbound-delivery monitoring across six channels [#111214](https://github.com/openclaw/openclaw/pull/111214)
- Add Telegram MCP App Funnel proof infrastructure [#111238](https://github.com/openclaw/openclaw/pull/111238)
- Consolidate durable ingress monitoring across six channels [#111249](https://github.com/openclaw/openclaw/pull/111249)
- Make the Mintlify anchor audit reach documentation checks [#111265](https://github.com/openclaw/openclaw/pull/111265)
- Streamline PR landing validation and CI recovery [#111287](https://github.com/openclaw/openclaw/pull/111287)
- Enforce the Plugin SDK API baseline in CI [#111289](https://github.com/openclaw/openclaw/pull/111289)
- Reuse hosted CI after content-identical rebases [#111335](https://github.com/openclaw/openclaw/pull/111335)
- Release unused TTS contract response streams [#111340](https://github.com/openclaw/openclaw/pull/111340)
- Bound bundled plugin asset generators [#111366](https://github.com/openclaw/openclaw/pull/111366)
- Browser tab reference resolution parity contract [#111375](https://github.com/openclaw/openclaw/pull/111375)
- Require landing agents to address ClawSweeper rank-up moves [#111385](https://github.com/openclaw/openclaw/pull/111385)
- Let dependency-less worktrees reuse the primary lint toolchain [#111393](https://github.com/openclaw/openclaw/pull/111393)
- Preserve QA bus events across paginated bursts [#111410](https://github.com/openclaw/openclaw/pull/111410)
- Isolate session-pruning integration tests [#111414](https://github.com/openclaw/openclaw/pull/111414)
- Resolve developer tools from linked worktrees [#111417](https://github.com/openclaw/openclaw/pull/111417)
- Wait for complete trajectory-export instructions in live validation [#111427](https://github.com/openclaw/openclaw/pull/111427)
- Reject incomplete sticky dependency restores [#111444](https://github.com/openclaw/openclaw/pull/111444)
- Isolate private QA commands from operator state [#111446](https://github.com/openclaw/openclaw/pull/111446)
- Bound QA evidence Git probe time [#111448](https://github.com/openclaw/openclaw/pull/111448)
- Make local lint work in dependency-less worktrees [#111467](https://github.com/openclaw/openclaw/pull/111467)
- Retry transient history rebuilds in live QA [#111475](https://github.com/openclaw/openclaw/pull/111475)
- Make Signal status-reaction tests deterministic [#111477](https://github.com/openclaw/openclaw/pull/111477)
- Align prerelease checks with built-in timing behavior [#111483](https://github.com/openclaw/openclaw/pull/111483)
- Stabilize Nextcloud Talk timeout validation [#111490](https://github.com/openclaw/openclaw/pull/111490)
- Restore the private QA self-check [#111507](https://github.com/openclaw/openclaw/pull/111507)
- Consolidate message-action conversation-read authorization [#111529](https://github.com/openclaw/openclaw/pull/111529)
- Move native locale generation to a serialized post-merge workflow [#111557](https://github.com/openclaw/openclaw/pull/111557)
- Bound Matrix extension-test memory growth [#111607](https://github.com/openclaw/openclaw/pull/111607)
- Unify embedded-agent fallback lifecycle handling [#111608](https://github.com/openclaw/openclaw/pull/111608)
- Refresh iOS chat, voice, and sidebar UI tests [#111655](https://github.com/openclaw/openclaw/pull/111655)
- Allow opt-in testing of advisory PR wrapper changes [#111656](https://github.com/openclaw/openclaw/pull/111656)
- Move provider transports behind a typed AI host port [#111669](https://github.com/openclaw/openclaw/pull/111669)
- Accept package tarballs with large entry lists [#111672](https://github.com/openclaw/openclaw/pull/111672)
- Warn before CI dispatch tests a stale remote PR head [#111694](https://github.com/openclaw/openclaw/pull/111694)
- Close stalled QA Lab Control UI upgrade sockets [#111784](https://github.com/openclaw/openclaw/pull/111784)
- Isolate the PR wrapper fixture from missing ripgrep [#111824](https://github.com/openclaw/openclaw/pull/111824)
- Restore Control UI startup budget headroom [#111928](https://github.com/openclaw/openclaw/pull/111928)
- Scan staged changes and pull requests for leaked credentials [#111935](https://github.com/openclaw/openclaw/pull/111935)
- Stop Windows package descendants after timeout [#111956](https://github.com/openclaw/openclaw/pull/111956)
- Prevent maturity evidence runs from timing out [#111980](https://github.com/openclaw/openclaw/pull/111980)
- Stabilize full-app responsive browser tests [#111997](https://github.com/openclaw/openclaw/pull/111997)
- Keep board fixture menus readable in light and dark themes [#111998](https://github.com/openclaw/openclaw/pull/111998)
- Run independent QA channel evidence in parallel [#112008](https://github.com/openclaw/openclaw/pull/112008)
- Freeze floating main revisions for maturity validation [#112015](https://github.com/openclaw/openclaw/pull/112015)
- Run DOM-free UI tests without browser setup [#112031](https://github.com/openclaw/openclaw/pull/112031)
- Centralize TruffleHog scanning in autoreview [#112036](https://github.com/openclaw/openclaw/pull/112036)
- Keep Anthropic prompt previews UTF-16 safe [#112044](https://github.com/openclaw/openclaw/pull/112044)
- Release failed Tlon login response streams [#112059](https://github.com/openclaw/openclaw/pull/112059)
- Centralize OpenAI-completions provider compatibility rules [#112062](https://github.com/openclaw/openclaw/pull/112062)
- Preserve model policy during Matrix QA setup [#112065](https://github.com/openclaw/openclaw/pull/112065)
- Restore Z.AI API Platform release validation [#112171](https://github.com/openclaw/openclaw/pull/112171)
- Refresh Control UI localization keys for Settings and Logs [#112181](https://github.com/openclaw/openclaw/pull/112181)
- Expand macOS Settings localization coverage [#112185](https://github.com/openclaw/openclaw/pull/112185)
- Audit dependency-fingerprint action exports [#112190](https://github.com/openclaw/openclaw/pull/112190)
- Remove dead CLI fallback classifiers and wrappers [#112191](https://github.com/openclaw/openclaw/pull/112191)
- Centralize media facts without changing legacy payloads [#112197](https://github.com/openclaw/openclaw/pull/112197)
- Add regression coverage for plugin tool availability gates [#112208](https://github.com/openclaw/openclaw/pull/112208)
- Restore shawnduggan credit in the README contributor wall [#112251](https://github.com/openclaw/openclaw/pull/112251)
- Localize compact Android token-count suffixes [#112287](https://github.com/openclaw/openclaw/pull/112287)
- Move channel setup fields into plugin-owned types [#112319](https://github.com/openclaw/openclaw/pull/112319)
- Move media staging and understanding to ordered media facts [#112335](https://github.com/openclaw/openclaw/pull/112335)
- Extract transcript image redaction helpers [#112337](https://github.com/openclaw/openclaw/pull/112337)
- Regenerate the stale Chrome extension Copilot bundle [#112379](https://github.com/openclaw/openclaw/pull/112379)
- Superseded fast-uri 3.1.4 dependency bump [#112443](https://github.com/openclaw/openclaw/pull/112443)
- Pin the patched fast-uri release [#112444](https://github.com/openclaw/openclaw/pull/112444)
- Refresh repository dependencies and lock artifacts [#112453](https://github.com/openclaw/openclaw/pull/112453)
- Run isolated Matrix QA partitions in parallel [#112465](https://github.com/openclaw/openclaw/pull/112465)
- Provision pinned TruffleHog in Linux Testboxes [#112482](https://github.com/openclaw/openclaw/pull/112482)
- Block stale generated plugin bundles in CI [#112489](https://github.com/openclaw/openclaw/pull/112489)
- Align cron condition-watcher QA with the supported interval [#112491](https://github.com/openclaw/openclaw/pull/112491)
- Reuse shared workers for faster Control UI tests [#112493](https://github.com/openclaw/openclaw/pull/112493)
- Require evidence-driven backport audits [#112506](https://github.com/openclaw/openclaw/pull/112506)
- Rebuild stale PR prep branches after reviewed-head changes [#112510](https://github.com/openclaw/openclaw/pull/112510)
- Unify Control UI sidebar row visibility decisions [#112511](https://github.com/openclaw/openclaw/pull/112511)
- Restore test environment variables safely [#112521](https://github.com/openclaw/openclaw/pull/112521)
- Document the complete extended-stable release workflow [#112524](https://github.com/openclaw/openclaw/pull/112524)
- Validate extended-stable candidates before final tagging [#112529](https://github.com/openclaw/openclaw/pull/112529)
- Revert skills-sh install reference support [#112531](https://github.com/openclaw/openclaw/pull/112531)
- Mark every failed oxlint run clearly [#112532](https://github.com/openclaw/openclaw/pull/112532)
- Require a changelog before extended-stable preflight [#112533](https://github.com/openclaw/openclaw/pull/112533)
- Isolate chat-pane lifecycle tests [#112546](https://github.com/openclaw/openclaw/pull/112546)
- Bound Git lookups in the release metadata guard [#112556](https://github.com/openclaw/openclaw/pull/112556)
- Prevent parallel macOS Swift test identity races [#112563](https://github.com/openclaw/openclaw/pull/112563)
- Isolate stateful chat-pane tests to stop CI flakes [#112566](https://github.com/openclaw/openclaw/pull/112566)
- Move pure session readers to non-materializing accessors [#112568](https://github.com/openclaw/openclaw/pull/112568)
- Preserve partial maturity QA evidence [#112569](https://github.com/openclaw/openclaw/pull/112569)
- Stateless tests leave forced process isolation [#112578](https://github.com/openclaw/openclaw/pull/112578)
- Support older gateway stop commands in release validation [#112582](https://github.com/openclaw/openclaw/pull/112582)
- Trim unused channel setup compatibility fields [#112587](https://github.com/openclaw/openclaw/pull/112587)
- Consolidate the Gateway Talk relay on the shared session harness [#112590](https://github.com/openclaw/openclaw/pull/112590)
- Revive cancelled checks on auto-merge PRs [#112599](https://github.com/openclaw/openclaw/pull/112599)
- Carry ordered media facts alongside unchanged prompts [#112601](https://github.com/openclaw/openclaw/pull/112601)
- Canonicalize QA runtime-pair lanes [#112603](https://github.com/openclaw/openclaw/pull/112603)
- Centralize capability-aware node selection [#112613](https://github.com/openclaw/openclaw/pull/112613)
- Stabilize Swift and Android coordination tests [#112628](https://github.com/openclaw/openclaw/pull/112628)
- Remove retired acknowledgement-cleanup branches [#112635](https://github.com/openclaw/openclaw/pull/112635)
- Consolidate cloud-worker conflict and quiescence paths [#112646](https://github.com/openclaw/openclaw/pull/112646)
- Stabilize parallel macOS Swift tests [#112651](https://github.com/openclaw/openclaw/pull/112651)
- Centralize legacy main-agent compatibility in the roster [#112678](https://github.com/openclaw/openclaw/pull/112678)
- Return the final stateless tests to shared routing [#112704](https://github.com/openclaw/openclaw/pull/112704)
- Update the Kova release fixture pin [#112715](https://github.com/openclaw/openclaw/pull/112715)
- Clarify cloud-worker finalize fences and reclaim outcomes [#112739](https://github.com/openclaw/openclaw/pull/112739)
- Extract Control UI sidebar session render functions [#112753](https://github.com/openclaw/openclaw/pull/112753)
- Table-drive database-first guard tests [#112757](https://github.com/openclaw/openclaw/pull/112757)
- Table-drive repeated policy-guard test cases [#112759](https://github.com/openclaw/openclaw/pull/112759)
- Remove unused Plugin SDK setup helpers [#112767](https://github.com/openclaw/openclaw/pull/112767)
- Split the speech-core TTS runtime into private modules [#112768](https://github.com/openclaw/openclaw/pull/112768)
- Thread plugin metadata snapshots through each agent turn [#112769](https://github.com/openclaw/openclaw/pull/112769)
- Consolidate agent model normalization ownership [#112772](https://github.com/openclaw/openclaw/pull/112772)
- Remove unused JSONL session discovery and forking paths [#112775](https://github.com/openclaw/openclaw/pull/112775)
- Remove unwired E2E proof scripts [#112776](https://github.com/openclaw/openclaw/pull/112776)
- Share subagent test fixtures [#112778](https://github.com/openclaw/openclaw/pull/112778)
- Consolidate CLI runner test fixtures [#112779](https://github.com/openclaw/openclaw/pull/112779)
- Centralize channel Doctor migration helpers [#112782](https://github.com/openclaw/openclaw/pull/112782)
- Simplify chat-send test request mocks [#112783](https://github.com/openclaw/openclaw/pull/112783)
- Centralize meeting adapter runtime glue [#112785](https://github.com/openclaw/openclaw/pull/112785)
- Share channel retry and text-breaking helpers [#112786](https://github.com/openclaw/openclaw/pull/112786)
- Consolidate restart-recovery test fixtures [#112789](https://github.com/openclaw/openclaw/pull/112789)
- Move Slack and Signal config schemas into their plugins [#112792](https://github.com/openclaw/openclaw/pull/112792)
- Reduce update CLI test boilerplate [#112793](https://github.com/openclaw/openclaw/pull/112793)
- Shrink the database-first legacy-store guard without behavior changes [#112802](https://github.com/openclaw/openclaw/pull/112802)
- Consolidate model helper fragments into their owners [#112805](https://github.com/openclaw/openclaw/pull/112805)
- Replace minified sidebar render data with a typed host [#112809](https://github.com/openclaw/openclaw/pull/112809)
- Move Discord and Teams config schemas into their plugins [#112812](https://github.com/openclaw/openclaw/pull/112812)
- Accept complete core tarball manifests in release validation [#112813](https://github.com/openclaw/openclaw/pull/112813)
- Bound the Matrix thread QA scenario [#112815](https://github.com/openclaw/openclaw/pull/112815)
- Move sidebar attention into a reactive controller [#112817](https://github.com/openclaw/openclaw/pull/112817)
- Add a bounded exact-head PR CI watcher [#112821](https://github.com/openclaw/openclaw/pull/112821)
- Correct WhatsApp QA coverage ownership [#112834](https://github.com/openclaw/openclaw/pull/112834)
- Align Matrix QA coverage with executed behavior [#112837](https://github.com/openclaw/openclaw/pull/112837)
- Unify QA Lab dashboard run planning [#112838](https://github.com/openclaw/openclaw/pull/112838)
- Reuse unavailable channel credentials across QA partitions [#112840](https://github.com/openclaw/openclaw/pull/112840)
- Let release validation honor frozen candidate contracts [#112841](https://github.com/openclaw/openclaw/pull/112841)
- Clarify the saved validation attempt for extended-stable publishing [#112845](https://github.com/openclaw/openclaw/pull/112845)
- Move Telegram and iMessage config schemas into their plugins [#112850](https://github.com/openclaw/openclaw/pull/112850)
- Move sidebar session data into one reactive controller [#112853](https://github.com/openclaw/openclaw/pull/112853)
- Gate OpenClawKit tests for frozen CI targets [#112860](https://github.com/openclaw/openclaw/pull/112860)
- Consolidate QA Lab mock OpenAI fixtures [#112872](https://github.com/openclaw/openclaw/pull/112872)
- Split the Google Meet API client from reporting logic [#112873](https://github.com/openclaw/openclaw/pull/112873)
- Run frozen Telegram release candidates without pnpm [#112874](https://github.com/openclaw/openclaw/pull/112874)
- Remove an orphaned secret-provider proof harness [#112875](https://github.com/openclaw/openclaw/pull/112875)
- Consolidate Gateway agent-event test fixtures [#112878](https://github.com/openclaw/openclaw/pull/112878)
- Consolidate diagnostics OTEL service test fixtures [#112879](https://github.com/openclaw/openclaw/pull/112879)
- Ratchet Control UI startup size checks against a committed baseline [#112880](https://github.com/openclaw/openclaw/pull/112880)
- Consolidate Active Memory recall test fixtures [#112881](https://github.com/openclaw/openclaw/pull/112881)
- Fully redact media live-test credentials [#112883](https://github.com/openclaw/openclaw/pull/112883)
- Consolidate Feishu bot test fixtures [#112884](https://github.com/openclaw/openclaw/pull/112884)
- Consolidate QMD manager test fixtures [#112885](https://github.com/openclaw/openclaw/pull/112885)
- Clear embedding test watchdog timers [#112887](https://github.com/openclaw/openclaw/pull/112887)
- Consolidate live model-switch test fixtures [#112891](https://github.com/openclaw/openclaw/pull/112891)
- Consolidate duplicated script workflow test fixtures [#112892](https://github.com/openclaw/openclaw/pull/112892)
- Consolidate Telegram bot test fixtures [#112894](https://github.com/openclaw/openclaw/pull/112894)
- Consolidate Workboard controller test fixtures [#112897](https://github.com/openclaw/openclaw/pull/112897)
- Validate candidate external plugins before publication [#112899](https://github.com/openclaw/openclaw/pull/112899)
- Share Teams and Zoom meeting-browser status adapters [#112900](https://github.com/openclaw/openclaw/pull/112900)
- Split the Google Meet plugin entry into focused modules [#112903](https://github.com/openclaw/openclaw/pull/112903)
- Deduplicate embedded-agent compaction preparation [#112904](https://github.com/openclaw/openclaw/pull/112904)
- Unify Control UI gateway connection state [#112909](https://github.com/openclaw/openclaw/pull/112909)
- Replace prompt-marker image parsing with structured media facts [#112913](https://github.com/openclaw/openclaw/pull/112913)
- Remove unused tools and deprecated SDK exports [#112915](https://github.com/openclaw/openclaw/pull/112915)
- Clean shared state after cron tests [#112922](https://github.com/openclaw/openclaw/pull/112922)
- Consolidate Control UI sidebar organization and lazy-load mutations [#112923](https://github.com/openclaw/openclaw/pull/112923)
- Share the Teams and Zoom Chrome meeting transport [#112931](https://github.com/openclaw/openclaw/pull/112931)
- Allow isolated Telegram release QA to launch its private CLI [#112935](https://github.com/openclaw/openclaw/pull/112935)
- Split the Google Meet CLI into focused modules [#112937](https://github.com/openclaw/openclaw/pull/112937)
- Move Control UI sidebar menus into a controller [#112940](https://github.com/openclaw/openclaw/pull/112940)
- Remove expired plugin compatibility records [#112944](https://github.com/openclaw/openclaw/pull/112944)
- Remove a plugin lifecycle lease test race [#112959](https://github.com/openclaw/openclaw/pull/112959)
- Migrate supported dependency contracts [#112963](https://github.com/openclaw/openclaw/pull/112963)
- Collapse Control UI sidebar inheritance to three classes [#112969](https://github.com/openclaw/openclaw/pull/112969)
- Table-drive Discord voice manager scenarios [#112977](https://github.com/openclaw/openclaw/pull/112977)
- Clean up plugin loader test fixtures [#112981](https://github.com/openclaw/openclaw/pull/112981)
- Add shared markdown capability fallback foundations [#112985](https://github.com/openclaw/openclaw/pull/112985)
- Share meeting runtime probes and node wrappers [#112992](https://github.com/openclaw/openclaw/pull/112992)
- Consolidate gateway reload-handler test fixtures [#112993](https://github.com/openclaw/openclaw/pull/112993)
- Distinguish CI queue bottlenecks before tuning capacity [#112997](https://github.com/openclaw/openclaw/pull/112997)
- Reuse the shared Code Mode JSON sanitizer [#112999](https://github.com/openclaw/openclaw/pull/112999)
- Formalize Markdown capabilities for three channels [#113002](https://github.com/openclaw/openclaw/pull/113002)
- Consolidate repeated update CLI test fixtures [#113003](https://github.com/openclaw/openclaw/pull/113003)
- Clean cron test SQLite stores after each case [#113004](https://github.com/openclaw/openclaw/pull/113004)
- Share Teams and Zoom meeting plugin registration [#113007](https://github.com/openclaw/openclaw/pull/113007)
- Split the Control UI markdown renderer into focused modules [#113015](https://github.com/openclaw/openclaw/pull/113015)
- Split the Control UI config renderer into focused modules [#113016](https://github.com/openclaw/openclaw/pull/113016)
- Split the browser panel into focused UI modules [#113017](https://github.com/openclaw/openclaw/pull/113017)
- Split the Control UI terminal panel into owned modules [#113020](https://github.com/openclaw/openclaw/pull/113020)
- Prune retired plugin compatibility records [#113025](https://github.com/openclaw/openclaw/pull/113025)
- Split setup inference into lifecycle modules [#113028](https://github.com/openclaw/openclaw/pull/113028)
- Deduplicate the cloud worker dispatch test harness [#113040](https://github.com/openclaw/openclaw/pull/113040)
- Remove legacy parallel media fields from the runtime [#113042](https://github.com/openclaw/openclaw/pull/113042)
- Split exec-approval services into focused modules [#113050](https://github.com/openclaw/openclaw/pull/113050)
- Split WebChat send logic into owned modules [#113052](https://github.com/openclaw/openclaw/pull/113052)
- Close delivery-queue SQLite test fixtures [#113058](https://github.com/openclaw/openclaw/pull/113058)
- Deduplicate Codex turn-watch test scenarios [#113061](https://github.com/openclaw/openclaw/pull/113061)
- Isolate TLS pin-clearing tests from live operator storage [#113067](https://github.com/openclaw/openclaw/pull/113067)
- Restructure per-agent session storage ownership [#113071](https://github.com/openclaw/openclaw/pull/113071)
- Split the reply agent runner into focused modules [#113072](https://github.com/openclaw/openclaw/pull/113072)
- Close session-test SQLite handles before fixture cleanup [#113074](https://github.com/openclaw/openclaw/pull/113074)
- Collapse the retired JSON session store into migration support [#113075](https://github.com/openclaw/openclaw/pull/113075)
- Deduplicate Codex run-attempt test scenarios [#113076](https://github.com/openclaw/openclaw/pull/113076)
- Update Android Gradle Plugin and Kotest patch releases [#113083](https://github.com/openclaw/openclaw/pull/113083)
- Split outbound delivery into focused services [#113099](https://github.com/openclaw/openclaw/pull/113099)
- Deduplicate Telegram bot-construction tests [#113102](https://github.com/openclaw/openclaw/pull/113102)
- Honor frozen candidate pnpm pins in Telegram QA [#113110](https://github.com/openclaw/openclaw/pull/113110)
- Split the Chrome MCP lifecycle into focused modules [#113114](https://github.com/openclaw/openclaw/pull/113114)
- Deduplicate Telegram polling-session tests [#113117](https://github.com/openclaw/openclaw/pull/113117)
- Split Gateway session utilities into focused modules [#113118](https://github.com/openclaw/openclaw/pull/113118)
- Move Signal formatting fallbacks into the shared capability pipeline [#113120](https://github.com/openclaw/openclaw/pull/113120)
- Split Gateway plugin startup planning into focused modules [#113129](https://github.com/openclaw/openclaw/pull/113129)
- Restore authorized Discord voice E2E coverage [#113132](https://github.com/openclaw/openclaw/pull/113132)
- Split the Cron timer lifecycle into focused modules [#113141](https://github.com/openclaw/openclaw/pull/113141)
- Rebuild stale sticky dependency snapshots [#113142](https://github.com/openclaw/openclaw/pull/113142)
- Split auto-reply dispatch into explicit phases [#113154](https://github.com/openclaw/openclaw/pull/113154)
- Rebuild stale sticky CI modules before snapshot refresh [#113155](https://github.com/openclaw/openclaw/pull/113155)
- Unify Gateway chat-run lifecycle state [#113157](https://github.com/openclaw/openclaw/pull/113157)
- Prepare stable agent runtime metadata once [#113167](https://github.com/openclaw/openclaw/pull/113167)
- Give sticky clean rebuilds enough time to finish [#113175](https://github.com/openclaw/openclaw/pull/113175)
- Canonicalize embedded attempt terminal outcomes [#113201](https://github.com/openclaw/openclaw/pull/113201)
- Preserve the planned iOS build number during release upload [#113202](https://github.com/openclaw/openclaw/pull/113202)
- Centralize TTS provider attempt handling [#113212](https://github.com/openclaw/openclaw/pull/113212)
- Split Telegram outbound sending into focused modules [#113222](https://github.com/openclaw/openclaw/pull/113222)
- Split memory-core short-term promotion into focused modules [#113223](https://github.com/openclaw/openclaw/pull/113223)
- Expose one shared Browser error-coercion helper [#113229](https://github.com/openclaw/openclaw/pull/113229)
- Stop superseded CI runs from causing false failures [#113230](https://github.com/openclaw/openclaw/pull/113230)
- Remove the file-era transcript runtime [#113233](https://github.com/openclaw/openclaw/pull/113233)
- Remove redundant async model-resolution opt-ins [#113234](https://github.com/openclaw/openclaw/pull/113234)
- Consolidate Gateway chat and reload test fixtures [#113235](https://github.com/openclaw/openclaw/pull/113235)
- Harden changed checks and shorthand test filters [#113236](https://github.com/openclaw/openclaw/pull/113236)
- Extract the Tool Search code-mode child controller [#113237](https://github.com/openclaw/openclaw/pull/113237)
- Consolidate outbound delivery test fixtures [#113238](https://github.com/openclaw/openclaw/pull/113238)
- Reduce task registry test duplication [#113239](https://github.com/openclaw/openclaw/pull/113239)
- Consolidate bundled MCP runner adapters [#113240](https://github.com/openclaw/openclaw/pull/113240)
- Retire the stale-cancelled CI watcher verdict [#113242](https://github.com/openclaw/openclaw/pull/113242)
- Consolidate plugin update test fixtures [#113243](https://github.com/openclaw/openclaw/pull/113243)
- Consolidate Control UI chat test fixtures [#113245](https://github.com/openclaw/openclaw/pull/113245)
- Consolidate Codex app-server test fixtures [#113246](https://github.com/openclaw/openclaw/pull/113246)
- Split subagent registry cleanup machinery [#113247](https://github.com/openclaw/openclaw/pull/113247)
- Split the config CLI implementation without changing behavior [#113248](https://github.com/openclaw/openclaw/pull/113248)
- Consolidate reply-session test fixtures [#113250](https://github.com/openclaw/openclaw/pull/113250)
- Unify channel formatting capability declarations [#113254](https://github.com/openclaw/openclaw/pull/113254)
- Consolidate Google Meet plugin test fixtures [#113256](https://github.com/openclaw/openclaw/pull/113256)
- Remove the duplicate QA report renderer [#113258](https://github.com/openclaw/openclaw/pull/113258)
- Centralize shared policy matching and value lookup [#113260](https://github.com/openclaw/openclaw/pull/113260)
- Centralize gateway approval request delivery [#113268](https://github.com/openclaw/openclaw/pull/113268)
- Split the Matrix inbound handler into owned phases [#113269](https://github.com/openclaw/openclaw/pull/113269)
- Centralize positive environment-integer parsing [#113277](https://github.com/openclaw/openclaw/pull/113277)
- Reuse shared account enablement in Feishu [#113278](https://github.com/openclaw/openclaw/pull/113278)
- Split task registry internals into focused modules [#113279](https://github.com/openclaw/openclaw/pull/113279)
- Centralize daemon environment-source lookup [#113283](https://github.com/openclaw/openclaw/pull/113283)
- Reuse shared trimmed-list normalization helpers [#113295](https://github.com/openclaw/openclaw/pull/113295)
- Split Tool Search internals into owned modules [#113296](https://github.com/openclaw/openclaw/pull/113296)
- Split subagent registry internals into focused modules [#113297](https://github.com/openclaw/openclaw/pull/113297)
- Remove the dead LanceDB legacy-path scan [#113299](https://github.com/openclaw/openclaw/pull/113299)
- Restore the exec-approval lint gate [#113303](https://github.com/openclaw/openclaw/pull/113303)
- Release SQLite fixtures before Windows cleanup [#113316](https://github.com/openclaw/openclaw/pull/113316)
- Repair Microsoft Teams packaging and Docker rerun recovery [#113332](https://github.com/openclaw/openclaw/pull/113332)
- Restore shared runtime state after tests [#113334](https://github.com/openclaw/openclaw/pull/113334)
- Split Codex command handlers into focused modules [#113335](https://github.com/openclaw/openclaw/pull/113335)
- Prevent macOS tests from reaching live Gateway and SSH processes [#113337](https://github.com/openclaw/openclaw/pull/113337)
- Split the Control UI chat composer into focused modules [#113338](https://github.com/openclaw/openclaw/pull/113338)
- Restore real timers after memory-host tests [#113339](https://github.com/openclaw/openclaw/pull/113339)
- Clean up exec-approval test directories automatically [#113342](https://github.com/openclaw/openclaw/pull/113342)
- Restore stdin TTY state after wizard tests [#113345](https://github.com/openclaw/openclaw/pull/113345)
- Clean live-updater test fixtures after each test [#113348](https://github.com/openclaw/openclaw/pull/113348)
- Validate external plugin dependencies independently [#113350](https://github.com/openclaw/openclaw/pull/113350)
- Split the Control UI chat message renderer [#113363](https://github.com/openclaw/openclaw/pull/113363)
- Restore the plugin environment-surface ratchet [#113364](https://github.com/openclaw/openclaw/pull/113364)
- Align extension prerelease fixtures with current contracts [#113381](https://github.com/openclaw/openclaw/pull/113381)
- Accept elapsed Google Meet browser-action timeout budgets [#113384](https://github.com/openclaw/openclaw/pull/113384)
- Keep action pin annotations stable and exact [#113386](https://github.com/openclaw/openclaw/pull/113386)
- Stabilize Google Meet release-validation tests [#113387](https://github.com/openclaw/openclaw/pull/113387)
- Make every PR CI sweeper decision visible [#113397](https://github.com/openclaw/openclaw/pull/113397)
- Separate QA provider plans from runtime tool calls [#113399](https://github.com/openclaw/openclaw/pull/113399)
- Split the Control UI chat pane into focused modules [#113406](https://github.com/openclaw/openclaw/pull/113406)
- Update Codex steering abort test for canonical terminal outcomes [#113416](https://github.com/openclaw/openclaw/pull/113416)
- Track the sessions_spawn QA coverage gap accurately [#113420](https://github.com/openclaw/openclaw/pull/113420)
- Lock in Codex replies after retained-session reset [#113429](https://github.com/openclaw/openclaw/pull/113429)
- Let QA Gateways finish graceful shutdown before restart [#113439](https://github.com/openclaw/openclaw/pull/113439)
- Capture trajectory-only runtime tools in QA parity checks [#113452](https://github.com/openclaw/openclaw/pull/113452)
- Restore Workboard SQLite cleanup test coverage [#113457](https://github.com/openclaw/openclaw/pull/113457)
- Stabilize session-cost cache refresh tests [#113460](https://github.com/openclaw/openclaw/pull/113460)
- Capture QA runtime tool evidence across multiple sessions [#113461](https://github.com/openclaw/openclaw/pull/113461)
- Correct Slack and Discord QA coverage attribution [#113468](https://github.com/openclaw/openclaw/pull/113468)
- Centralize published model-catalog ownership [#113472](https://github.com/openclaw/openclaw/pull/113472)
- Retain completed runtime-tool evidence in QA parity checks [#113484](https://github.com/openclaw/openclaw/pull/113484)
- Correct QA coverage attribution for channel and subagent scenarios [#113486](https://github.com/openclaw/openclaw/pull/113486)
- Read persisted media facts before legacy projections [#113496](https://github.com/openclaw/openclaw/pull/113496)
- Add abrupt-writer crash proof to SQLite reliability tests [#113498](https://github.com/openclaw/openclaw/pull/113498)
- Require persisted tool results in runtime parity QA [#113499](https://github.com/openclaw/openclaw/pull/113499)
- Require successful result evidence in runtime-tool QA [#113502](https://github.com/openclaw/openclaw/pull/113502)
- Prove SQLite snapshot publication recovery after interruption [#113512](https://github.com/openclaw/openclaw/pull/113512)
- Prove SQLite recovery from an interrupted VACUUM [#113518](https://github.com/openclaw/openclaw/pull/113518)
- Update the production environment-variable ratchet [#113519](https://github.com/openclaw/openclaw/pull/113519)
- Share setup migration config canonicalization [#113522](https://github.com/openclaw/openclaw/pull/113522)
- Centralize plugin provider alias resolution [#113523](https://github.com/openclaw/openclaw/pull/113523)
- Reuse the shared Markdown code-span formatter [#113525](https://github.com/openclaw/openclaw/pull/113525)
- Align Telegram QA coverage with product startup behavior [#113527](https://github.com/openclaw/openclaw/pull/113527)
- Share the Anthropic Vertex catalog runtime [#113528](https://github.com/openclaw/openclaw/pull/113528)
- Reuse canonical error coercion across package runtimes [#113529](https://github.com/openclaw/openclaw/pull/113529)
- Add crash-boundary proof for SQLite restores [#113531](https://github.com/openclaw/openclaw/pull/113531)
- Remove resolved investigation scripts and orphaned Code Mode seams [#113532](https://github.com/openclaw/openclaw/pull/113532)
- Consolidate duplicated micro helpers onto canonical owners [#113534](https://github.com/openclaw/openclaw/pull/113534)
- Deduplicate channel and test infrastructure [#113535](https://github.com/openclaw/openclaw/pull/113535)
- Consolidate Codex migration ownership [#113536](https://github.com/openclaw/openclaw/pull/113536)
- Unify subagent delivery evidence and routing [#113538](https://github.com/openclaw/openclaw/pull/113538)
- Share plugin doctor key-move migration logic [#113539](https://github.com/openclaw/openclaw/pull/113539)
- Share Feishu stages and Telegram send bookkeeping [#113541](https://github.com/openclaw/openclaw/pull/113541)
- Split retained Memory Core migrations into focused modules [#113542](https://github.com/openclaw/openclaw/pull/113542)
- Lock Discord and Feishu Markdown output contracts [#113543](https://github.com/openclaw/openclaw/pull/113543)
- Reuse shared error coercion in Signal [#113544](https://github.com/openclaw/openclaw/pull/113544)
- Split Codex app-server configuration into focused modules [#113552](https://github.com/openclaw/openclaw/pull/113552)
- Add process-crash proof for SQLite snapshot repositories [#113555](https://github.com/openclaw/openclaw/pull/113555)
- Consolidate generated-media byte limit handling [#113556](https://github.com/openclaw/openclaw/pull/113556)
- Split Gateway reload handling into focused modules [#113557](https://github.com/openclaw/openclaw/pull/113557)
- Split the OpenAI Responses transport into focused modules [#113569](https://github.com/openclaw/openclaw/pull/113569)
- Stage heartbeat runner orchestration [#113570](https://github.com/openclaw/openclaw/pull/113570)
- Consolidate the Telegram bot test harness [#113571](https://github.com/openclaw/openclaw/pull/113571)
- Deduplicate plugin doctor install test fixtures [#113572](https://github.com/openclaw/openclaw/pull/113572)
- Deduplicate Google Meet browser test scenarios [#113573](https://github.com/openclaw/openclaw/pull/113573)
- Consolidate Slack and QMD test matrices [#113574](https://github.com/openclaw/openclaw/pull/113574)
- Consolidate isolated test-state fixtures [#113576](https://github.com/openclaw/openclaw/pull/113576)
- Reuse shared error coercion across Slack monitoring paths [#113581](https://github.com/openclaw/openclaw/pull/113581)
- Consolidate follow-up and channel sanitizer tests [#113583](https://github.com/openclaw/openclaw/pull/113583)
- Split the Playwright session manager into focused modules [#113585](https://github.com/openclaw/openclaw/pull/113585)
- Reuse shared Matrix error coercion [#113586](https://github.com/openclaw/openclaw/pull/113586)
- Telegram probes reuse shared error coercion [#113589](https://github.com/openclaw/openclaw/pull/113589)
- Share primary and fallback model-reference flattening [#113591](https://github.com/openclaw/openclaw/pull/113591)
- Share cron diagnostic summary normalization [#113595](https://github.com/openclaw/openclaw/pull/113595)
- Unify outbound audit history projection [#113597](https://github.com/openclaw/openclaw/pull/113597)
- Validate complete package sets in candidate smoke tests [#113600](https://github.com/openclaw/openclaw/pull/113600)
- Split Slack message dispatch into focused modules [#113602](https://github.com/openclaw/openclaw/pull/113602)
- Share legacy config migration traversal [#113604](https://github.com/openclaw/openclaw/pull/113604)
- Stop Slack QA observer polling after scenarios finish [#113605](https://github.com/openclaw/openclaw/pull/113605)
- Share Discord handle normalization across lookup and mentions [#113608](https://github.com/openclaw/openclaw/pull/113608)
- Centralize the gateway no-op reload-plan check [#113610](https://github.com/openclaw/openclaw/pull/113610)
- Restore packaged OpenWebUI and update validation [#113614](https://github.com/openclaw/openclaw/pull/113614)
- Centralize Workboard claim-token redaction [#113618](https://github.com/openclaw/openclaw/pull/113618)
- Prove interrupted SQLite index-repair recovery [#113624](https://github.com/openclaw/openclaw/pull/113624)
- Split the native hook relay into focused internal modules [#113626](https://github.com/openclaw/openclaw/pull/113626)
- Use shared string normalization in Matrix [#113627](https://github.com/openclaw/openclaw/pull/113627)
- Keep release validation compatible with frozen candidates [#113628](https://github.com/openclaw/openclaw/pull/113628)
- Show redacted packaged-plugin failure diagnostics [#113635](https://github.com/openclaw/openclaw/pull/113635)
- Share bounded-cache insertion across Matrix monitors [#113636](https://github.com/openclaw/openclaw/pull/113636)
- Repair stale QA scenario references [#113639](https://github.com/openclaw/openclaw/pull/113639)
- Run QA channel message flows on both supported drivers [#113642](https://github.com/openclaw/openclaw/pull/113642)
- Consolidate Control UI reactive lifecycle controllers [#113647](https://github.com/openclaw/openclaw/pull/113647)
- Centralize merged channel-ingress lifecycle handling [#113648](https://github.com/openclaw/openclaw/pull/113648)
- Deduplicate shared Control UI helpers and contracts [#113649](https://github.com/openclaw/openclaw/pull/113649)
- Slim workflow guard tests while retaining release authorization checks [#113650](https://github.com/openclaw/openclaw/pull/113650)
- Stage live-test auth profiles from SQLite [#113651](https://github.com/openclaw/openclaw/pull/113651)
- Make SQLite reliability proofs cross-platform safe [#113652](https://github.com/openclaw/openclaw/pull/113652)
- Restore session turn-ordering QA coverage [#113653](https://github.com/openclaw/openclaw/pull/113653)
- Compact JSON in commitment prompts [#113657](https://github.com/openclaw/openclaw/pull/113657)
- Split the QMD memory manager by domain [#113659](https://github.com/openclaw/openclaw/pull/113659)
- Split the Matrix CLI into focused command modules [#113664](https://github.com/openclaw/openclaw/pull/113664)
- Split the heartbeat runner into focused modules [#113668](https://github.com/openclaw/openclaw/pull/113668)
- Split Code Mode execution into owned modules [#113669](https://github.com/openclaw/openclaw/pull/113669)
- Split session cost and usage accounting into focused modules [#113670](https://github.com/openclaw/openclaw/pull/113670)
- Add a repository-owned continuous Auto QA workflow [#113674](https://github.com/openclaw/openclaw/pull/113674)
- Simplify the native hook relay module split [#113675](https://github.com/openclaw/openclaw/pull/113675)
- Stabilize the macOS onboarding progress test [#113682](https://github.com/openclaw/openclaw/pull/113682)
- Split main-session restart recovery into focused modules [#113687](https://github.com/openclaw/openclaw/pull/113687)
- QA suite summaries include skipped scenarios [#113696](https://github.com/openclaw/openclaw/pull/113696)
- Report live channel QA evidence from the selected driver [#113710](https://github.com/openclaw/openclaw/pull/113710)
- Split the subagent registry lifecycle into focused modules [#113711](https://github.com/openclaw/openclaw/pull/113711)
- Split configuration validation into focused modules [#113713](https://github.com/openclaw/openclaw/pull/113713)
- Split Control UI chat-thread projection into focused modules [#113714](https://github.com/openclaw/openclaw/pull/113714)
- Split the Control UI config view into focused modules [#113715](https://github.com/openclaw/openclaw/pull/113715)
- Split the CLI runner execution path into focused modules [#113716](https://github.com/openclaw/openclaw/pull/113716)
- Split legacy model migrations into focused modules [#113717](https://github.com/openclaw/openclaw/pull/113717)
- Split plugin manifest normalization into focused modules [#113720](https://github.com/openclaw/openclaw/pull/113720)
- Split the Gateway server by lifecycle ownership [#113725](https://github.com/openclaw/openclaw/pull/113725)
- Coordinate Auto QA around root-cause campaigns [#113727](https://github.com/openclaw/openclaw/pull/113727)
- Restore sanitized Crabbox PR validation [#113728](https://github.com/openclaw/openclaw/pull/113728)
- Split the Workboard view into focused modules [#113730](https://github.com/openclaw/openclaw/pull/113730)
- Extract reusable wizard step controls [#113733](https://github.com/openclaw/openclaw/pull/113733)
- Build one attachment message and project image markers at routing [#113738](https://github.com/openclaw/openclaw/pull/113738)
- Allow release preparation to fingerprint large generated diffs [#113760](https://github.com/openclaw/openclaw/pull/113760)
- Validate bundled provider catalogs in Doctor CI [#113761](https://github.com/openclaw/openclaw/pull/113761)
- Split Playwright interaction internals into focused modules [#113771](https://github.com/openclaw/openclaw/pull/113771)
- Split the LanceDB memory plugin entry into focused modules [#113772](https://github.com/openclaw/openclaw/pull/113772)
- Split the Mattermost inbound monitor by responsibility [#113775](https://github.com/openclaw/openclaw/pull/113775)
- Split configured-plugin Doctor repair into focused modules [#113777](https://github.com/openclaw/openclaw/pull/113777)
- Split embedded session-lock lifecycle into focused modules [#113779](https://github.com/openclaw/openclaw/pull/113779)
- Split Control UI chat state into focused modules [#113780](https://github.com/openclaw/openclaw/pull/113780)
- Tighten Windows Task Scheduler module ownership [#113783](https://github.com/openclaw/openclaw/pull/113783)
- Split embedded model resolution into concern-owned modules [#113785](https://github.com/openclaw/openclaw/pull/113785)
- Split the ClawHub lifecycle implementation into focused modules [#113789](https://github.com/openclaw/openclaw/pull/113789)
- Split model authentication into focused ownership modules [#113793](https://github.com/openclaw/openclaw/pull/113793)
- Centralize provider onboarding defaults in model manifests [#113794](https://github.com/openclaw/openclaw/pull/113794)
- Restore beta mention and performance validation gates [#113795](https://github.com/openclaw/openclaw/pull/113795)
- Split the gateway chat display projection [#113806](https://github.com/openclaw/openclaw/pull/113806)
- Split the agent exec pipeline into focused modules [#113807](https://github.com/openclaw/openclaw/pull/113807)
- Split Matrix SDK client responsibilities [#113815](https://github.com/openclaw/openclaw/pull/113815)
- Wait for terminal replies before session-switch tests [#113818](https://github.com/openclaw/openclaw/pull/113818)
- Update agent-deletion smoke checks for canonical config [#113827](https://github.com/openclaw/openclaw/pull/113827)
- Split cron service operations into focused modules [#113830](https://github.com/openclaw/openclaw/pull/113830)
- Split Gateway node methods into focused modules [#113832](https://github.com/openclaw/openclaw/pull/113832)
- Make QA fail-fast stop all suite runners [#113843](https://github.com/openclaw/openclaw/pull/113843)
- Serialize concurrent QA channel driver lifecycle changes [#113855](https://github.com/openclaw/openclaw/pull/113855)
- Prevent package installs from deleting the Control UI [#113856](https://github.com/openclaw/openclaw/pull/113856)
- Repair offline npm Control UI postinstall fixtures [#113871](https://github.com/openclaw/openclaw/pull/113871)
- Prevent QA transport cleanup races [#113874](https://github.com/openclaw/openclaw/pull/113874)
- Split model fallback responsibilities into focused modules [#113876](https://github.com/openclaw/openclaw/pull/113876)
- Repair plugin prerelease validation fixtures [#113877](https://github.com/openclaw/openclaw/pull/113877)
- Unify manifest model rows and provider defaults [#113879](https://github.com/openclaw/openclaw/pull/113879)
- Split the direct compaction pipeline into owned phases [#113880](https://github.com/openclaw/openclaw/pull/113880)
- Split reply-run orchestration into reviewable stages [#113881](https://github.com/openclaw/openclaw/pull/113881)
- Split the pre-tool execution pipeline into focused modules [#113885](https://github.com/openclaw/openclaw/pull/113885)
- Finish splitting the exec pipeline support code [#113889](https://github.com/openclaw/openclaw/pull/113889)
- Preserve QA message delivery across restarts [#113899](https://github.com/openclaw/openclaw/pull/113899)
- Install trusted dependencies for artifact package validation [#113907](https://github.com/openclaw/openclaw/pull/113907)
- Add a weekly sweep for dated maintenance commitments [#113914](https://github.com/openclaw/openclaw/pull/113914)
- Update diagnostic capture tests for current configuration [#113922](https://github.com/openclaw/openclaw/pull/113922)
- Share media reference access resolution across agent tools [#113931](https://github.com/openclaw/openclaw/pull/113931)
- Split Windows scheduled-task service internals [#113934](https://github.com/openclaw/openclaw/pull/113934)
- Align the Kimi K3 release-validation fixture [#113936](https://github.com/openclaw/openclaw/pull/113936)
- Split Doctor health-flow ownership into focused modules [#113937](https://github.com/openclaw/openclaw/pull/113937)
- Unify provider forward-compat model resolution [#113940](https://github.com/openclaw/openclaw/pull/113940)
- Split gateway protocol exports into focused registries [#113941](https://github.com/openclaw/openclaw/pull/113941)
- Align sidebar browser coverage with current navigation [#113942](https://github.com/openclaw/openclaw/pull/113942)
- Separate Memory Core ingestion codec ownership [#113949](https://github.com/openclaw/openclaw/pull/113949)
- Centralize inline stroke defaults for Control UI icons [#113952](https://github.com/openclaw/openclaw/pull/113952)
- Stabilize Codex realtime lease validation in shared test processes [#113962](https://github.com/openclaw/openclaw/pull/113962)
- Remove plugin IDs from harness-task ownership checks [#113964](https://github.com/openclaw/openclaw/pull/113964)
- Split the Talk realtime relay into focused owners [#113967](https://github.com/openclaw/openclaw/pull/113967)
- Centralize restart-recovery state snapshots [#113969](https://github.com/openclaw/openclaw/pull/113969)
- Converge Google Meet probes on the shared meeting adapter [#113970](https://github.com/openclaw/openclaw/pull/113970)
- Add CSS linting for Control UI styles and Lit templates [#113971](https://github.com/openclaw/openclaw/pull/113971)
- Split the private QA Lab suite runner [#113974](https://github.com/openclaw/openclaw/pull/113974)
- Centralize conversation registry scope resolution [#113977](https://github.com/openclaw/openclaw/pull/113977)
- Split ACP spawn helpers into focused modules [#113979](https://github.com/openclaw/openclaw/pull/113979)
- Centralize provider plugin alias matching [#113982](https://github.com/openclaw/openclaw/pull/113982)
- Remove unused agent-scope helper exports [#113985](https://github.com/openclaw/openclaw/pull/113985)
- Stabilize the Control UI session-menu end-to-end test [#113989](https://github.com/openclaw/openclaw/pull/113989)
- Extract and batch session PR landing checks [#114000](https://github.com/openclaw/openclaw/pull/114000)
- Track dated plugin compatibility debt and pending removals [#114002](https://github.com/openclaw/openclaw/pull/114002)
- Restore ClawHub CLI materialization on npm 12 [#114008](https://github.com/openclaw/openclaw/pull/114008)
- Split the Memory Core CLI runtime into focused modules [#114013](https://github.com/openclaw/openclaw/pull/114013)
- Allow frozen release candidates to stage Telegram QA artifacts [#114018](https://github.com/openclaw/openclaw/pull/114018)
- Make Telegram release QA tests behavioral [#114023](https://github.com/openclaw/openclaw/pull/114023)
- Isolate live tests from invalid host configuration [#114024](https://github.com/openclaw/openclaw/pull/114024)
- Pass the Telegram release scratch directory into isolation [#114026](https://github.com/openclaw/openclaw/pull/114026)
- Split the direct subagent-spawn implementation [#114030](https://github.com/openclaw/openclaw/pull/114030)
- Split the Copilot attempt runtime into focused lifecycle modules [#114035](https://github.com/openclaw/openclaw/pull/114035)
- Include terminal output in TUI fixture timeouts [#114045](https://github.com/openclaw/openclaw/pull/114045)
- Make QA scenario selection taxonomy-owned [#114055](https://github.com/openclaw/openclaw/pull/114055)
- Restore accurate beta runtime release gates [#114064](https://github.com/openclaw/openclaw/pull/114064)
- Validate releases that predate the npm-lock gate [#114073](https://github.com/openclaw/openclaw/pull/114073)
- Make subagent fanout QA wait for durable completion [#114080](https://github.com/openclaw/openclaw/pull/114080)
- Repair Memory Core async-search synchronization test [#114096](https://github.com/openclaw/openclaw/pull/114096)
- Retain release-validation refs after failed runs [#114104](https://github.com/openclaw/openclaw/pull/114104)
- Use the trusted release harness pnpm pin [#114106](https://github.com/openclaw/openclaw/pull/114106)
- Correct QA gateway config readiness checks [#114112](https://github.com/openclaw/openclaw/pull/114112)
- Stop npm lock fork packaging loops [#114115](https://github.com/openclaw/openclaw/pull/114115)
- Keep conflicting npm lockfile forks pinned during plugin packaging [#114122](https://github.com/openclaw/openclaw/pull/114122)
- Select supported macOS snapshots for candidate testing [#114144](https://github.com/openclaw/openclaw/pull/114144)
- Make Windows Parallels prerequisite setup deterministic [#114153](https://github.com/openclaw/openclaw/pull/114153)
- Select the newest Windows smoke snapshot [#114157](https://github.com/openclaw/openclaw/pull/114157)
- Repair Home run-indicator lifecycle E2E coverage [#114212](https://github.com/openclaw/openclaw/pull/114212)
- Isolate database-verifier test cleanup [#114216](https://github.com/openclaw/openclaw/pull/114216)
- Prevent auth migration-isolation CI timeouts [#114217](https://github.com/openclaw/openclaw/pull/114217)
- Remove stale dependency-ownership records [#114218](https://github.com/openclaw/openclaw/pull/114218)
- Share reply recovery and turn accounting boundaries [#114220](https://github.com/openclaw/openclaw/pull/114220)
- Share Anthropic and OpenAI admin usage aggregation [#114221](https://github.com/openclaw/openclaw/pull/114221)
- Fall back locally when Blacksmith never runs changed checks [#114225](https://github.com/openclaw/openclaw/pull/114225)
- Separate config write-preparation helpers by responsibility [#114228](https://github.com/openclaw/openclaw/pull/114228)
- Centralize meeting talk-back readiness policy [#114229](https://github.com/openclaw/openclaw/pull/114229)
- Freeze the private OpenAI Responses stream parity baseline [#114230](https://github.com/openclaw/openclaw/pull/114230)
- Clarify the provider request-parameter routing classifier [#114231](https://github.com/openclaw/openclaw/pull/114231)
- Reuse the shared Volcengine compatibility patcher [#114232](https://github.com/openclaw/openclaw/pull/114232)
- Consolidate IRC outbound delivery through one adapter [#114235](https://github.com/openclaw/openclaw/pull/114235)
- Restore the macOS Tauri companion build for Quick Chat [#114243](https://github.com/openclaw/openclaw/pull/114243)
- Make the mock Control UI approval modal opt-in [#114246](https://github.com/openclaw/openclaw/pull/114246)
- Add Cron fixtures to the Control UI mock server [#114248](https://github.com/openclaw/openclaw/pull/114248)
- Add regression coverage for session agent-scope label synchronization [#114259](https://github.com/openclaw/openclaw/pull/114259)
- Run the companion Rust suite on Linux and macOS [#114260](https://github.com/openclaw/openclaw/pull/114260)
- Remove duplicate plugin route lookups after lazy loading [#114273](https://github.com/openclaw/openclaw/pull/114273)
- Unify Slack and Microsoft Teams account setup adapters [#114290](https://github.com/openclaw/openclaw/pull/114290)
- Consolidate single-consumer subagent-spawn helpers [#114301](https://github.com/openclaw/openclaw/pull/114301)
- Add CI and release operations guidance for agents [#114307](https://github.com/openclaw/openclaw/pull/114307)
- Centralize embedded-agent terminal outcome handling [#114310](https://github.com/openclaw/openclaw/pull/114310)
- Consolidate subagent lifecycle regression tests [#114326](https://github.com/openclaw/openclaw/pull/114326)
- Streamline Slack transport regression tests [#114329](https://github.com/openclaw/openclaw/pull/114329)
- Consolidate channel and auto-reply test setup [#114330](https://github.com/openclaw/openclaw/pull/114330)
- Derive bundled provider registrations from plugin manifests [#114331](https://github.com/openclaw/openclaw/pull/114331)
- Consolidate configuration write regression tests [#114332](https://github.com/openclaw/openclaw/pull/114332)
- Consolidate plugin planning and provider stream tests [#114333](https://github.com/openclaw/openclaw/pull/114333)
- Consolidate duplicated CLI regression-test fixtures [#114334](https://github.com/openclaw/openclaw/pull/114334)
- Consolidate Control UI chat regression tests [#114335](https://github.com/openclaw/openclaw/pull/114335)
- Consolidate provider streaming contract tests [#114336](https://github.com/openclaw/openclaw/pull/114336)
- Consolidate Gateway chat regression tests [#114337](https://github.com/openclaw/openclaw/pull/114337)
- Consolidate agent subscription event test fixtures [#114339](https://github.com/openclaw/openclaw/pull/114339)
- Use CI-measured bytes for Control UI budget baselines [#114340](https://github.com/openclaw/openclaw/pull/114340)
- Intended to surface Linux manual update results [#114341](https://github.com/openclaw/openclaw/pull/114341)
- Consolidate plugin update regression fixtures [#114344](https://github.com/openclaw/openclaw/pull/114344)
- Consolidate auto-reply routing regression tests [#114345](https://github.com/openclaw/openclaw/pull/114345)
- Consolidate configuration-write regression fixtures [#114347](https://github.com/openclaw/openclaw/pull/114347)
- Consolidate Workboard regression-test fixtures [#114348](https://github.com/openclaw/openclaw/pull/114348)
- Consolidate CLI regression tests without changing behavior [#114349](https://github.com/openclaw/openclaw/pull/114349)
- Consolidate provider contract-test fixtures and cases [#114352](https://github.com/openclaw/openclaw/pull/114352)
- Centralize gateway validation and shared helpers [#114353](https://github.com/openclaw/openclaw/pull/114353)
- Consolidate agent runtime ownership and remove retired fallbacks [#114355](https://github.com/openclaw/openclaw/pull/114355)
- Consolidate OpenAI and Azure Responses transport execution [#114357](https://github.com/openclaw/openclaw/pull/114357)
- Verify stale bug reports before closure [#114365](https://github.com/openclaw/openclaw/pull/114365)
- Speed up measured CI test hotspots [#114367](https://github.com/openclaw/openclaw/pull/114367)
- Make Gateway reload restarts transactional [#114368](https://github.com/openclaw/openclaw/pull/114368)
- Make release acceptance checks portable on stock macOS [#114371](https://github.com/openclaw/openclaw/pull/114371)
- Run required Testbox checks when drafts become ready [#114372](https://github.com/openclaw/openclaw/pull/114372)
- Make TUI session-rollover tests deterministic [#114373](https://github.com/openclaw/openclaw/pull/114373)
- Expand model-catalog normalization regression coverage [#114384](https://github.com/openclaw/openclaw/pull/114384)
- Split oversized cron modules and rename regression suites [#114391](https://github.com/openclaw/openclaw/pull/114391)
- Stabilize beta validation and SHA-helper completion [#114396](https://github.com/openclaw/openclaw/pull/114396)
- Detect missing bundled providers after npm install [#114400](https://github.com/openclaw/openclaw/pull/114400)
- Consolidate gateway RPC test scenarios [#114404](https://github.com/openclaw/openclaw/pull/114404)
- Consolidate Control UI regression-test fixtures [#114408](https://github.com/openclaw/openclaw/pull/114408)
- Consolidate duplicated channel and auto-reply test fixtures [#114409](https://github.com/openclaw/openclaw/pull/114409)
- Consolidate plugin security and install regression fixtures [#114410](https://github.com/openclaw/openclaw/pull/114410)
- Consolidate CLI regression test fixtures [#114411](https://github.com/openclaw/openclaw/pull/114411)
- Publish gauntlet child process IDs atomically [#114418](https://github.com/openclaw/openclaw/pull/114418)
- Consolidate Gateway test fixtures [#114420](https://github.com/openclaw/openclaw/pull/114420)
- Consolidate Discord, Matrix, and Slack regression fixtures [#114423](https://github.com/openclaw/openclaw/pull/114423)
- Consolidate provider contract test fixtures [#114424](https://github.com/openclaw/openclaw/pull/114424)
- Consolidate agent lifecycle regression fixtures [#114425](https://github.com/openclaw/openclaw/pull/114425)
- Consolidate configuration regression tests [#114426](https://github.com/openclaw/openclaw/pull/114426)
- Consolidate duplicated CLI test fixtures [#114427](https://github.com/openclaw/openclaw/pull/114427)
- Consolidate Discord, Matrix, and Slack policy regression tests [#114428](https://github.com/openclaw/openclaw/pull/114428)
- Harden Mantis Telegram desktop proof collection [#114429](https://github.com/openclaw/openclaw/pull/114429)
- Consolidate inbound and reply test fixtures [#114430](https://github.com/openclaw/openclaw/pull/114430)
- Consolidate duplicate protocol, updater, setup, plugin, and Talk internals [#114432](https://github.com/openclaw/openclaw/pull/114432)
- Consolidate Gateway chat-history test fixtures [#114435](https://github.com/openclaw/openclaw/pull/114435)
- Derive agent file listings from the canonical workspace set [#114436](https://github.com/openclaw/openclaw/pull/114436)
- Batch Docker maturity scenarios through the aggregate scheduler [#114447](https://github.com/openclaw/openclaw/pull/114447)
- Restore live Gateway model verification [#114451](https://github.com/openclaw/openclaw/pull/114451)
- Update macOS Swift dependencies [#114452](https://github.com/openclaw/openclaw/pull/114452)
- Cache parsed SQLite session entries between reads [#114453](https://github.com/openclaw/openclaw/pull/114453)
- Consolidate configuration regression fixtures [#114459](https://github.com/openclaw/openclaw/pull/114459)
- Consolidate Discord, Matrix, and Slack regression tests [#114464](https://github.com/openclaw/openclaw/pull/114464)
- Isolate Mantis candidate execution [#114465](https://github.com/openclaw/openclaw/pull/114465)
- Align plugin metadata tests with explicit lifecycle resets [#114469](https://github.com/openclaw/openclaw/pull/114469)
- Consolidate Bedrock and Google provider test fixtures [#114475](https://github.com/openclaw/openclaw/pull/114475)
- Restore Anthropic Gateway verification and SQLite test cleanup [#114495](https://github.com/openclaw/openclaw/pull/114495)
- Keep bundled-plugin package verification complete [#114497](https://github.com/openclaw/openclaw/pull/114497)
- Consolidate outbound delivery regression-test fixtures [#114509](https://github.com/openclaw/openclaw/pull/114509)
- Consolidate Anthropic regression-test fixtures [#114511](https://github.com/openclaw/openclaw/pull/114511)
- Consolidate CLI route argument fixtures [#114513](https://github.com/openclaw/openclaw/pull/114513)
- Consolidate gateway send and restart recovery test fixtures [#114515](https://github.com/openclaw/openclaw/pull/114515)
- Make Vitest module resolution work under Bun [#114520](https://github.com/openclaw/openclaw/pull/114520)
- Isolate Telegram tests for reliable release validation [#114532](https://github.com/openclaw/openclaw/pull/114532)
- Update the Google Meet descriptor contract test [#114562](https://github.com/openclaw/openclaw/pull/114562)
- Run native SQLite runtime/config tests in forked workers [#114567](https://github.com/openclaw/openclaw/pull/114567)
- Make compact-terminal TUI approval tests reliable [#114571](https://github.com/openclaw/openclaw/pull/114571)
- Update the Browser CLI descriptor test for machine output [#114581](https://github.com/openclaw/openclaw/pull/114581)
- Build skill snapshot cache keys only when needed [#114584](https://github.com/openclaw/openclaw/pull/114584)
- Remove two load-dependent Control UI test flakes [#114585](https://github.com/openclaw/openclaw/pull/114585)
- Unify queued follow-up turns with the canonical agent runner [#114599](https://github.com/openclaw/openclaw/pull/114599)
- Restore the web-fetch prerelease validation gate [#114607](https://github.com/openclaw/openclaw/pull/114607)
- Remove loopback Codex proxy support [#114616](https://github.com/openclaw/openclaw/pull/114616)
- Align bundled plugin lock generation with shallow installs [#114620](https://github.com/openclaw/openclaw/pull/114620)
- Compact plugin SDK alias metadata without contract changes [#114666](https://github.com/openclaw/openclaw/pull/114666)
- Keep tracked QA harness gaps advisory [#114667](https://github.com/openclaw/openclaw/pull/114667)
- Consolidate compatible provider replay policies [#114669](https://github.com/openclaw/openclaw/pull/114669)
- Consolidate Android and iOS lifecycle transitions [#114671](https://github.com/openclaw/openclaw/pull/114671)
- Stabilize wrapped-terminal TUI regression tests [#114672](https://github.com/openclaw/openclaw/pull/114672)
- Repair browser CDP Docker fixture validation [#114691](https://github.com/openclaw/openclaw/pull/114691)
- Add pinned opt-in auto-merge for verified behind PRs [#114702](https://github.com/openclaw/openclaw/pull/114702)
- Validate frozen beta runtime-pair evidence with a trusted checker [#114707](https://github.com/openclaw/openclaw/pull/114707)
- Centralize agent tool-visibility predicates [#114720](https://github.com/openclaw/openclaw/pull/114720)
- Deflake Workboard lazy-load and dialog tests [#114722](https://github.com/openclaw/openclaw/pull/114722)
- Contain PR landing mutations in dedicated worktrees [#114723](https://github.com/openclaw/openclaw/pull/114723)
- Remove dead re-export facades after owner-module splits [#114726](https://github.com/openclaw/openclaw/pull/114726)
- Preserve Unicode in fragmented TUI test input [#114728](https://github.com/openclaw/openclaw/pull/114728)
- Centralize live-session model selection contracts [#114739](https://github.com/openclaw/openclaw/pull/114739)
- Simplify channel settings with a shared advanced tier [#114741](https://github.com/openclaw/openclaw/pull/114741)
- Prevent gateway test timer livelock in CI [#114751](https://github.com/openclaw/openclaw/pull/114751)
- Consolidate Mattermost planning and WhatsApp durable admission [#114763](https://github.com/openclaw/openclaw/pull/114763)
- Consolidate DM-policy tests and retire dead package facades [#114776](https://github.com/openclaw/openclaw/pull/114776)
- Unblock production type checks after sessions-yield cleanup [#114787](https://github.com/openclaw/openclaw/pull/114787)
- Exclude automation accounts from changelog credit [#114788](https://github.com/openclaw/openclaw/pull/114788)
- Align active-memory tests with canonical delivery records [#114806](https://github.com/openclaw/openclaw/pull/114806)
- Make ripgrep a consistent prerequisite for the PR landing tool [#114809](https://github.com/openclaw/openclaw/pull/114809)
- Preserve canonical agent termination and fallback decisions [#114810](https://github.com/openclaw/openclaw/pull/114810)
- Split the gateway protocol registry into owner fragments [#114817](https://github.com/openclaw/openclaw/pull/114817)
- Derive cloud-worker metadata from canonical Zod fields [#114818](https://github.com/openclaw/openclaw/pull/114818)
- Deflake Telegram credential process-tree timeout tests [#114821](https://github.com/openclaw/openclaw/pull/114821)
- Account for flushLogger in deprecated SDK surface budgets [#114827](https://github.com/openclaw/openclaw/pull/114827)
- Isolate native Codex QA sandboxing from production policy [#114830](https://github.com/openclaw/openclaw/pull/114830)
- Accept corrected beta runtime evidence without widening QA gaps [#114838](https://github.com/openclaw/openclaw/pull/114838)
- Guard delegated plugin alias authorization order [#114870](https://github.com/openclaw/openclaw/pull/114870)
- Split oversized Control UI end-to-end test suites [#114889](https://github.com/openclaw/openclaw/pull/114889)
- Bind PR review artifacts to the reviewed commit [#114897](https://github.com/openclaw/openclaw/pull/114897)
- Isolate CLI process tests from shared test shards [#114903](https://github.com/openclaw/openclaw/pull/114903)
- Prevent duplicate replies on the QA bus [#114910](https://github.com/openclaw/openclaw/pull/114910)
- Stabilize Workboard dashboard lifecycle tests [#114921](https://github.com/openclaw/openclaw/pull/114921)
- Centralize durable delivery queue routing metadata [#114928](https://github.com/openclaw/openclaw/pull/114928)
- Unify provider stream wrapper composition [#114929](https://github.com/openclaw/openclaw/pull/114929)
- Stabilize board ticket-refresh timing tests [#114930](https://github.com/openclaw/openclaw/pull/114930)
- Reuse prepared channel action discovery [#114942](https://github.com/openclaw/openclaw/pull/114942)
- Let release review tests run on GitHub-hosted Ubuntu [#114958](https://github.com/openclaw/openclaw/pull/114958)
- Localize Control UI chat and accessibility labels [#114990](https://github.com/openclaw/openclaw/pull/114990)
- Deduplicate auto-reply command context rewrites [#115002](https://github.com/openclaw/openclaw/pull/115002)
- Refresh the generated config baseline [#115003](https://github.com/openclaw/openclaw/pull/115003)
- Prevent embedded-agent release-validation stalls [#115019](https://github.com/openclaw/openclaw/pull/115019)
- Refresh native localization source offsets [#115024](https://github.com/openclaw/openclaw/pull/115024)
- Filter unsupported QA profile channels [#115026](https://github.com/openclaw/openclaw/pull/115026)
- Prevent cold fork runners from timing out the embedded-agent shard [#115035](https://github.com/openclaw/openclaw/pull/115035)
- Remove a dead provider-runtime test reset [#115043](https://github.com/openclaw/openclaw/pull/115043)
- Retry only the failed QA Lab channel partition [#115046](https://github.com/openclaw/openclaw/pull/115046)
- Remove an unused Wear OS voice-button component [#115061](https://github.com/openclaw/openclaw/pull/115061)
- Share Control UI board provider helpers [#115082](https://github.com/openclaw/openclaw/pull/115082)
- Exclude incompatible channel scenarios from QA plans [#115087](https://github.com/openclaw/openclaw/pull/115087)
- Restore Android CodeQL compatibility with Kotlin 2.4.0 [#115095](https://github.com/openclaw/openclaw/pull/115095)
- Deduplicate Google Meet OAuth option resolution [#115096](https://github.com/openclaw/openclaw/pull/115096)
- Clear completed Discord Activity launch watchdogs [#115100](https://github.com/openclaw/openclaw/pull/115100)
- Consolidate Plugin SDK HTML escaping [#115109](https://github.com/openclaw/openclaw/pull/115109)
- Materialize complete PR worktrees before preparation gates [#115120](https://github.com/openclaw/openclaw/pull/115120)
- Standardize Control UI async read lifecycles with Lit Task [#115131](https://github.com/openclaw/openclaw/pull/115131)
- Stop synthetic model transport tests from stalling CI [#115139](https://github.com/openclaw/openclaw/pull/115139)
- Accept tracked advisory gaps in runtime-pair validation [#115140](https://github.com/openclaw/openclaw/pull/115140)
- Align release-validation fixtures with current contracts [#115146](https://github.com/openclaw/openclaw/pull/115146)
- Compare the environment-variable ratchet at the branch fork [#115149](https://github.com/openclaw/openclaw/pull/115149)
- Align the QMD alias privacy fixture with canonical session identity [#115150](https://github.com/openclaw/openclaw/pull/115150)
- Run release-harness installs from the harness directory [#115172](https://github.com/openclaw/openclaw/pull/115172)
- Isolate Workboard mock URL state between UI tests [#115173](https://github.com/openclaw/openclaw/pull/115173)
- Reject packages missing the Code Mode worker [#115178](https://github.com/openclaw/openclaw/pull/115178)
- Make Control UI working-timer E2E tests deterministic [#115187](https://github.com/openclaw/openclaw/pull/115187)
- Unify tool-surface planning across agent harnesses [#115189](https://github.com/openclaw/openclaw/pull/115189)
- Simplify Control UI Workboard execution helpers [#115195](https://github.com/openclaw/openclaw/pull/115195)
- Stabilize hidden-reasoning idle-timeout coverage [#115196](https://github.com/openclaw/openclaw/pull/115196)
- Reuse cached file metadata for small PR reviews [#115199](https://github.com/openclaw/openclaw/pull/115199)
- Make Control UI virtual-clock tests deterministic [#115203](https://github.com/openclaw/openclaw/pull/115203)
- Match shared models across aggregator catalogs [#115210](https://github.com/openclaw/openclaw/pull/115210)
- Simplify embedded client-tool catalog selection [#115212](https://github.com/openclaw/openclaw/pull/115212)
- Derive Control UI page routes from one table [#115214](https://github.com/openclaw/openclaw/pull/115214)
- Isolate legacy transcript fixtures from production sessions [#115231](https://github.com/openclaw/openclaw/pull/115231)
- Route focused agent tests to their isolated harnesses [#115241](https://github.com/openclaw/openclaw/pull/115241)
- Bound Telegram Mantis proof cleanup and restore artifact access [#115253](https://github.com/openclaw/openclaw/pull/115253)
- De-flake Codex turn-watch timing tests [#115258](https://github.com/openclaw/openclaw/pull/115258)
- Make the audit checkpoint rehash fixture deterministic [#115269](https://github.com/openclaw/openclaw/pull/115269)
- Stabilize Signal archive-limit tests [#115270](https://github.com/openclaw/openclaw/pull/115270)
- Standardize Control UI read lifecycles with Lit Task [#115274](https://github.com/openclaw/openclaw/pull/115274)
- Support frozen targets in Matrix release QA [#115298](https://github.com/openclaw/openclaw/pull/115298)
- Consolidate internal session-entry state [#115299](https://github.com/openclaw/openclaw/pull/115299)
- Stabilize Control UI end-to-end route readiness [#115320](https://github.com/openclaw/openclaw/pull/115320)
- Release SQLite statement caches when databases close [#115321](https://github.com/openclaw/openclaw/pull/115321)
- Keep changed-file lint checks targeted [#115322](https://github.com/openclaw/openclaw/pull/115322)
- Catch dead exports and identify drifted PR wrappers [#115333](https://github.com/openclaw/openclaw/pull/115333)
- Centralize agent test ownership and timeout routing [#115340](https://github.com/openclaw/openclaw/pull/115340)
- Stop CI sweeper from reviving superseded workflows [#115378](https://github.com/openclaw/openclaw/pull/115378)
- Unify CLI process cancellation and terminal state [#115416](https://github.com/openclaw/openclaw/pull/115416)
- Consolidate Gateway cron shutdown ownership [#115417](https://github.com/openclaw/openclaw/pull/115417)
- Remove obsolete node approval execution paths [#115418](https://github.com/openclaw/openclaw/pull/115418)
- Harden review workflow revival provenance [#115420](https://github.com/openclaw/openclaw/pull/115420)
- Prevent Gateway startup-log CI hangs [#115428](https://github.com/openclaw/openclaw/pull/115428)
- Remove retired session identity from memory fixtures [#115442](https://github.com/openclaw/openclaw/pull/115442)
- Restore Telegram media tests with production-like bot identity [#115444](https://github.com/openclaw/openclaw/pull/115444)
- Validate QA profiles against the scenario inventory [#115446](https://github.com/openclaw/openclaw/pull/115446)
- Split Code Mode tests into focused suites [#115462](https://github.com/openclaw/openclaw/pull/115462)
- Consolidate duplicate runtime, plugin, transcript, and chat paths [#115483](https://github.com/openclaw/openclaw/pull/115483)
- Stabilize Workboard form-state E2E timing [#115496](https://github.com/openclaw/openclaw/pull/115496)
- Preserve Android generated lint suppressions [#115501](https://github.com/openclaw/openclaw/pull/115501)
- Consolidate dashboard widget pinning paths [#115504](https://github.com/openclaw/openclaw/pull/115504)
- Reuse prepared model facts across warm agent turns [#115527](https://github.com/openclaw/openclaw/pull/115527)
- Remove duplicate provider and runtime implementations [#115529](https://github.com/openclaw/openclaw/pull/115529)
- Expand QA profile scenarios across every eligible channel [#115540](https://github.com/openclaw/openclaw/pull/115540)
- Unify interactive and non-interactive Ollama onboarding [#115543](https://github.com/openclaw/openclaw/pull/115543)
- Make Matrix QA sharding execution-owned [#115589](https://github.com/openclaw/openclaw/pull/115589)
- Support historical targets in Control UI i18n validation [#115605](https://github.com/openclaw/openclaw/pull/115605)
- Deduplicate gateway message routing logic [#115615](https://github.com/openclaw/openclaw/pull/115615)
- Table-drive retired model migrations [#115618](https://github.com/openclaw/openclaw/pull/115618)
- Consolidate chat media and outbox lifecycle ownership [#115621](https://github.com/openclaw/openclaw/pull/115621)
- Reuse shared durability helpers in the TOOLS.md migration [#115625](https://github.com/openclaw/openclaw/pull/115625)
- Consolidate duplicated runtime decisions and regression fixtures [#115626](https://github.com/openclaw/openclaw/pull/115626)
- Centralize trusted CLI backend authentication policy [#115633](https://github.com/openclaw/openclaw/pull/115633)
- Enforce canonical subagent state in SQLite [#115634](https://github.com/openclaw/openclaw/pull/115634)
- Verify paired-node Ollama through a real Gateway [#115644](https://github.com/openclaw/openclaw/pull/115644)
- Deduplicate extension normalization helpers [#115650](https://github.com/openclaw/openclaw/pull/115650)
- Stabilize cross-version dev upgrades [#115651](https://github.com/openclaw/openclaw/pull/115651)
- Restore Telegram release QA scratch access [#115659](https://github.com/openclaw/openclaw/pull/115659)
- Type the Code Mode matrix rejection callback [#115674](https://github.com/openclaw/openclaw/pull/115674)
- Update dependencies across the OpenClaw workspace [#115677](https://github.com/openclaw/openclaw/pull/115677)
- Add browser regression coverage for imported Claude history redaction [#115683](https://github.com/openclaw/openclaw/pull/115683)
- Deduplicate model-fallback observation metadata [#115687](https://github.com/openclaw/openclaw/pull/115687)
- Stabilize paired-node Ollama E2E under cold starts [#115693](https://github.com/openclaw/openclaw/pull/115693)
- Bound remote Testbox agentic and extension worker lifetimes [#115696](https://github.com/openclaw/openclaw/pull/115696)
- Consolidate memory CLI and promotion lifecycle helpers [#115706](https://github.com/openclaw/openclaw/pull/115706)
- Consolidate Teams and Zoom meeting plugin shells [#115707](https://github.com/openclaw/openclaw/pull/115707)
- Centralize channel streaming configuration hints [#115739](https://github.com/openclaw/openclaw/pull/115739)
- Use canonical Matrix E2EE state in QA scenarios [#115748](https://github.com/openclaw/openclaw/pull/115748)
- Unify JSONL and SQLite session-cost rollup scans [#115749](https://github.com/openclaw/openclaw/pull/115749)
- Consolidate live-channel QA scenario execution [#115752](https://github.com/openclaw/openclaw/pull/115752)
- Keep live-transport QA on runnable scenarios and requested models [#115767](https://github.com/openclaw/openclaw/pull/115767)
- Remove temporary Matrix QA execution sharding [#115787](https://github.com/openclaw/openclaw/pull/115787)
- Isolate Skill Workshop draft ingestion and validation [#115791](https://github.com/openclaw/openclaw/pull/115791)
- Centralize durable channel ingress lifecycle helpers [#115792](https://github.com/openclaw/openclaw/pull/115792)
- Make Swift protocol checks non-mutating [#115793](https://github.com/openclaw/openclaw/pull/115793)
- Stabilize CI checkout and Testbox preparation [#115795](https://github.com/openclaw/openclaw/pull/115795)
- Restore shared Slack live QA scenarios [#115802](https://github.com/openclaw/openclaw/pull/115802)
- Split WhatsApp inbound monitoring into focused owners [#115806](https://github.com/openclaw/openclaw/pull/115806)
- Reuse canonical record guards [#115810](https://github.com/openclaw/openclaw/pull/115810)
- Consolidate Teams and Zoom meeting runtime facades [#115819](https://github.com/openclaw/openclaw/pull/115819)
- Make OpenAI realtime voice lifecycle explicit [#115820](https://github.com/openclaw/openclaw/pull/115820)
- Decompose the Microsoft Teams inbound handler [#115823](https://github.com/openclaw/openclaw/pull/115823)
- Share channel ingress retention defaults [#115824](https://github.com/openclaw/openclaw/pull/115824)
- Move health snapshot collection under gateway ownership [#115825](https://github.com/openclaw/openclaw/pull/115825)
- Move status summary preparation to its domain owner [#115839](https://github.com/openclaw/openclaw/pull/115839)
- Clarify review-premise and cross-lane test policy [#115841](https://github.com/openclaw/openclaw/pull/115841)
- Refresh generated Control UI translations [#115843](https://github.com/openclaw/openclaw/pull/115843)
- Separate WhatsApp inbound transport state [#115844](https://github.com/openclaw/openclaw/pull/115844)
- Isolate CLI unknown-command tests from bundled plugin discovery [#115848](https://github.com/openclaw/openclaw/pull/115848)
- Isolate registry-sensitive Control UI tests [#115860](https://github.com/openclaw/openclaw/pull/115860)
- Correct Plugin SDK compatibility removal metadata [#115862](https://github.com/openclaw/openclaw/pull/115862)
- Restore isolated memory manager tests [#115880](https://github.com/openclaw/openclaw/pull/115880)
- Accept decreasing video-generation test deadlines [#115883](https://github.com/openclaw/openclaw/pull/115883)
- Align the QA Lab bootstrap profile catalog test [#115898](https://github.com/openclaw/openclaw/pull/115898)
- Stabilize Codex plugin-discovery deadline testing [#115927](https://github.com/openclaw/openclaw/pull/115927)
- Prevent logging listener leaks in shared Vitest workers [#115929](https://github.com/openclaw/openclaw/pull/115929)
- Run Gmail watcher shutdown integration on Unix [#115937](https://github.com/openclaw/openclaw/pull/115937)
- Make CLI process-test hangs diagnosable [#115940](https://github.com/openclaw/openclaw/pull/115940)
- Require the complete fleet-doctor healthy check set [#115946](https://github.com/openclaw/openclaw/pull/115946)
- Reuse canonical record guards across agent and tooling paths [#115951](https://github.com/openclaw/openclaw/pull/115951)
- Align the environment-variable CI ratchet with cleanup [#115958](https://github.com/openclaw/openclaw/pull/115958)
- Remove redundant runtime and test code [#115961](https://github.com/openclaw/openclaw/pull/115961)
- Exercise least-privilege voice-node Talk reconnects [#115966](https://github.com/openclaw/openclaw/pull/115966)
- Move channel account mutations behind owner APIs [#115970](https://github.com/openclaw/openclaw/pull/115970)
- Keep auth logout TTY tests portable [#115985](https://github.com/openclaw/openclaw/pull/115985)
- Keep plugin install test fixtures portable [#116008](https://github.com/openclaw/openclaw/pull/116008)
- Remove the retired Codex CLI JSONL parser [#116017](https://github.com/openclaw/openclaw/pull/116017)
- Update the memory sidecar startup test expectation [#116018](https://github.com/openclaw/openclaw/pull/116018)
- Bound declaration-build memory on smaller Linux hosts [#116021](https://github.com/openclaw/openclaw/pull/116021)
- Stop cross-file state leaks in media tests [#116027](https://github.com/openclaw/openclaw/pull/116027)
- Reuse the Gateway server-methods lazy import [#116060](https://github.com/openclaw/openclaw/pull/116060)
- Stabilize beta validation fixtures and QA selection [#116065](https://github.com/openclaw/openclaw/pull/116065)
- Stabilize warm-session Matrix tool-progress QA [#116066](https://github.com/openclaw/openclaw/pull/116066)
- Prevent state leakage in Matrix live validation [#116071](https://github.com/openclaw/openclaw/pull/116071)
- Isolate ACP startup test output streams [#116076](https://github.com/openclaw/openclaw/pull/116076)
- Add opt-in threaded Buzz QA coverage [#116081](https://github.com/openclaw/openclaw/pull/116081)
- Remove retired Control UI time-format bootstrap state [#116097](https://github.com/openclaw/openclaw/pull/116097)
- Cover per-account hook replay isolation [#116121](https://github.com/openclaw/openclaw/pull/116121)
- Calibrate defaults and security review doctrine [#116126](https://github.com/openclaw/openclaw/pull/116126)
- Serialize hosted macOS Swift validation runs [#116137](https://github.com/openclaw/openclaw/pull/116137)
- Stop collecting the Vydra helper as an empty test suite [#116139](https://github.com/openclaw/openclaw/pull/116139)
- Rebuild stale extension boundary declarations in CI [#116147](https://github.com/openclaw/openclaw/pull/116147)
- Stop the Google batch timeout test from leaking requests [#116161](https://github.com/openclaw/openclaw/pull/116161)
- Serialize hosted macOS Swift release tests [#116167](https://github.com/openclaw/openclaw/pull/116167)
- Restore the doctor install-switch release scenario [#116190](https://github.com/openclaw/openclaw/pull/116190)
- Serialize transcript mirror test setup [#116207](https://github.com/openclaw/openclaw/pull/116207)
- Align doctor-switch E2E with service ownership [#116209](https://github.com/openclaw/openclaw/pull/116209)
- Repair release scanning for reviewed Codex runtime chunks [#116212](https://github.com/openclaw/openclaw/pull/116212)
- Refresh generated native app locales [#116213](https://github.com/openclaw/openclaw/pull/116213)
- Use the OS account home in doctor release proof [#116217](https://github.com/openclaw/openclaw/pull/116217)
- Recognize asynchronous image completions in the QA mock provider [#116234](https://github.com/openclaw/openclaw/pull/116234)
- Let the trusted Telegram QA runner stage runtime files [#116252](https://github.com/openclaw/openclaw/pull/116252)
- Align release harness service-account state [#116254](https://github.com/openclaw/openclaw/pull/116254)
- Apply the default service identity after each doctor-switch flow setup [#116265](https://github.com/openclaw/openclaw/pull/116265)
- Accept one verified Telegram QA runtime launch [#116267](https://github.com/openclaw/openclaw/pull/116267)
- Restore iOS Release archives under Swift 6.3 [#116270](https://github.com/openclaw/openclaw/pull/116270)
- Load the trusted Node shard runner without repeated repository fetches [#116273](https://github.com/openclaw/openclaw/pull/116273)
- Clean stale outputs before npm preflight cache restore [#116276](https://github.com/openclaw/openclaw/pull/116276)
- Tag mock Responses preambles as commentary [#116283](https://github.com/openclaw/openclaw/pull/116283)
- Preserve failed Vitest shard diagnostics [#116289](https://github.com/openclaw/openclaw/pull/116289)
- Add a live Buzz channel QA lane [#116298](https://github.com/openclaw/openclaw/pull/116298)
- Use the trusted harness for update-restart validation [#116301](https://github.com/openclaw/openclaw/pull/116301)
- Allow one frozen Telegram candidate to use legacy QA evidence [#116305](https://github.com/openclaw/openclaw/pull/116305)
- Restore subagent announce-loop guard coverage [#116307](https://github.com/openclaw/openclaw/pull/116307)
- Prevent Slack QA observer teardown hangs [#116312](https://github.com/openclaw/openclaw/pull/116312)
- Make Kova startup performance reports actionable [#116319](https://github.com/openclaw/openclaw/pull/116319)
- Pass the target SHA to Telegram evidence finalization [#116331](https://github.com/openclaw/openclaw/pull/116331)
- Make release-validation fail-fast optional [#116352](https://github.com/openclaw/openclaw/pull/116352)
- Keep frozen release validation tied to candidate evidence [#116357](https://github.com/openclaw/openclaw/pull/116357)
- Prevent Slack QA cleanup from stalling completed profile runs [#116361](https://github.com/openclaw/openclaw/pull/116361)
- Align Discord progress receipt timing tests [#116377](https://github.com/openclaw/openclaw/pull/116377)
- Remove the redundant extension boundary test wrapper [#116385](https://github.com/openclaw/openclaw/pull/116385)
- Evaluate Comfy live-test guards after configuration loads [#116388](https://github.com/openclaw/openclaw/pull/116388)
- Remove a false-green Reef live smoke test [#116393](https://github.com/openclaw/openclaw/pull/116393)
- Run browser copilot end-to-end tests in required CI [#116407](https://github.com/openclaw/openclaw/pull/116407)
- Reduce repeated macOS Gateway endpoint reads [#116421](https://github.com/openclaw/openclaw/pull/116421)
- Preserve unavailable Ollama cache telemetry in QA [#116424](https://github.com/openclaw/openclaw/pull/116424)
- Exercise late iOS pairing cleanup during gateway forget [#116425](https://github.com/openclaw/openclaw/pull/116425)
- Accept legacy zero-skipped runtime summaries [#116429](https://github.com/openclaw/openclaw/pull/116429)
- Bound QA Gateway diagnostic-log teardown [#116431](https://github.com/openclaw/openclaw/pull/116431)
- Skip unavailable Docker scripts for frozen release candidates [#116432](https://github.com/openclaw/openclaw/pull/116432)
- Restore OpenAI auth for Matrix live-frontier QA [#116434](https://github.com/openclaw/openclaw/pull/116434)
- Rebalance embedded-agent configs across compact CI shards [#116436](https://github.com/openclaw/openclaw/pull/116436)
- Fix fanout and Codex watchdog QA scenarios [#116440](https://github.com/openclaw/openclaw/pull/116440)
- Run the built plugin-tools server in QA profiles [#116442](https://github.com/openclaw/openclaw/pull/116442)
- Avoid false tool failures from fetched prose [#116444](https://github.com/openclaw/openclaw/pull/116444)
- Align Slack progress QA with fresh final messages [#116445](https://github.com/openclaw/openclaw/pull/116445)
- Make the Slack fallback QA probe deterministic [#116447](https://github.com/openclaw/openclaw/pull/116447)
- Tolerate loaded-runner QA bus delivery stalls [#116448](https://github.com/openclaw/openclaw/pull/116448)
- Run MXC Windows-only suites in Windows CI [#116451](https://github.com/openclaw/openclaw/pull/116451)
- Reset Matrix streaming state between QA scenarios [#116454](https://github.com/openclaw/openclaw/pull/116454)
- Add repeated OpenAI Realtime audio roundtrip verification [#116456](https://github.com/openclaw/openclaw/pull/116456)
- Reuse the macOS Tailscale discovery session [#116465](https://github.com/openclaw/openclaw/pull/116465)
- Refresh the Matrix QA homeserver fixture [#116467](https://github.com/openclaw/openclaw/pull/116467)
- Run exec-script preflight coverage in Windows CI [#116469](https://github.com/openclaw/openclaw/pull/116469)
- Stabilize Apple UI validation across supported runtimes [#116487](https://github.com/openclaw/openclaw/pull/116487)
- Run exec allowlist matcher coverage on Windows [#116492](https://github.com/openclaw/openclaw/pull/116492)
- Run safe-removal race coverage in Windows CI [#116510](https://github.com/openclaw/openclaw/pull/116510)
- Refresh generated Android locale resources [#116567](https://github.com/openclaw/openclaw/pull/116567)
- Preserve Matrix crypto identity during QA fault injection [#116578](https://github.com/openclaw/openclaw/pull/116578)
- Extend OpenAI live-profile setup budget [#116580](https://github.com/openclaw/openclaw/pull/116580)
- Add a tmux workflow for comparing TUI prototypes [#116583](https://github.com/openclaw/openclaw/pull/116583)
- Restore beta release validation across installed environments [#116596](https://github.com/openclaw/openclaw/pull/116596)
- Stabilize Custodian mobile layout assertions [#116613](https://github.com/openclaw/openclaw/pull/116613)
- Stabilize Codex WebSocket heartbeat tests [#116617](https://github.com/openclaw/openclaw/pull/116617)
- Run Windows path regression assertions on every CI host [#116627](https://github.com/openclaw/openclaw/pull/116627)
- Remove obsolete browser config tests [#116631](https://github.com/openclaw/openclaw/pull/116631)
- Keep Anthropic Code Mode parity QA reliable [#116633](https://github.com/openclaw/openclaw/pull/116633)
- Remove redundant agent path tests [#116634](https://github.com/openclaw/openclaw/pull/116634)
- Strengthen core tests and remove duplicate coverage [#116641](https://github.com/openclaw/openclaw/pull/116641)
- Remove duplicate extension test coverage [#116643](https://github.com/openclaw/openclaw/pull/116643)
- Move live audio integrations out of regular extension tests [#116651](https://github.com/openclaw/openclaw/pull/116651)
- Align full release validation with current runtime state [#116653](https://github.com/openclaw/openclaw/pull/116653)
- Remove duplicate avatar route tests [#116656](https://github.com/openclaw/openclaw/pull/116656)
- Remove duplicate iOS deep-link security tests [#116657](https://github.com/openclaw/openclaw/pull/116657)
- Remove duplicate Android setup-code test coverage [#116658](https://github.com/openclaw/openclaw/pull/116658)
- Fail plugin conformance checks on probe diagnostics [#116676](https://github.com/openclaw/openclaw/pull/116676)
- Keep the memory file-descriptor repro configuration valid [#116698](https://github.com/openclaw/openclaw/pull/116698)
- Unblock beta release validation workflows [#116708](https://github.com/openclaw/openclaw/pull/116708)
- Run only startup benchmarks supported by frozen targets [#116711](https://github.com/openclaw/openclaw/pull/116711)
- Restore the realtime Talk relay live smoke [#116719](https://github.com/openclaw/openclaw/pull/116719)
- Scope QA transport evidence by account and ignore deleted reply matches [#116744](https://github.com/openclaw/openclaw/pull/116744)
- Fail closed on invalid QA summaries and timeouts [#116748](https://github.com/openclaw/openclaw/pull/116748)
- Skip Buzz QA for candidates without the runner [#116753](https://github.com/openclaw/openclaw/pull/116753)
- Allow the autonomous issue-sweep skill to synchronize [#116755](https://github.com/openclaw/openclaw/pull/116755)
- Avoid ambient startup of external source plugins [#116759](https://github.com/openclaw/openclaw/pull/116759)
- Stop scheduling retired Kova runtime dependency coverage [#116760](https://github.com/openclaw/openclaw/pull/116760)
- Keep tracked skills visible to packaging [#116766](https://github.com/openclaw/openclaw/pull/116766)
- refactor(reply): simplify task-owned typing refresh [#116770](https://github.com/openclaw/openclaw/pull/116770)
- Restore autonomous sweep guide formatting [#116782](https://github.com/openclaw/openclaw/pull/116782)
- Centralize private execution attribution [#116793](https://github.com/openclaw/openclaw/pull/116793)
- Propagate private execution attribution across runtimes [#116794](https://github.com/openclaw/openclaw/pull/116794)
- Bind tool policy to exact execution attribution [#116795](https://github.com/openclaw/openclaw/pull/116795)
- Stabilize subagent fanout QA with public evidence [#116832](https://github.com/openclaw/openclaw/pull/116832)
- Reduce Testbox hydration and teardown delays [#116840](https://github.com/openclaw/openclaw/pull/116840)
- Route remote validation by workload and provider readiness [#116841](https://github.com/openclaw/openclaw/pull/116841)
- Route Telegram startup QA through shared credential leases [#116842](https://github.com/openclaw/openclaw/pull/116842)
- Isolate Slack MPIM dedupe QA from streaming [#116843](https://github.com/openclaw/openclaw/pull/116843)
- Stabilize Slack QA progress and table proofs [#116847](https://github.com/openclaw/openclaw/pull/116847)
- Keep memory context QA on the internal channel [#116849](https://github.com/openclaw/openclaw/pull/116849)
- Keep the Codex authentication QA fixture aligned with runtime [#116859](https://github.com/openclaw/openclaw/pull/116859)
- Restore standalone Buzz plugin packaging [#116865](https://github.com/openclaw/openclaw/pull/116865)
- Preserve QA transport ownership and truthful reports [#116911](https://github.com/openclaw/openclaw/pull/116911)
- Authenticate QA scenarios and reject silent character runs [#116912](https://github.com/openclaw/openclaw/pull/116912)
- Pin the corrected Kova release evaluator [#116920](https://github.com/openclaw/openclaw/pull/116920)
- Repair full release-validation regressions [#116931](https://github.com/openclaw/openclaw/pull/116931)
- Attribute embedded-agent preparation latency [#116936](https://github.com/openclaw/openclaw/pull/116936)
- Prevent macOS release-gate fixture deadlocks [#116972](https://github.com/openclaw/openclaw/pull/116972)
- Reject false-green QA suite summaries [#117004](https://github.com/openclaw/openclaw/pull/117004)
- Stabilize sandbox exclusive-create collision tests [#117026](https://github.com/openclaw/openclaw/pull/117026)
- Harden internal macOS Gateway replacement and rollback [#117030](https://github.com/openclaw/openclaw/pull/117030)
- Add private Microsoft Teams Gateway QA [#117033](https://github.com/openclaw/openclaw/pull/117033)
- Prevent no-op live updates from restarting healthy Gateways [#117038](https://github.com/openclaw/openclaw/pull/117038)
- Remove redundant session manager forwarding methods [#117073](https://github.com/openclaw/openclaw/pull/117073)
- Unify synchronous and asynchronous plugin storage [#117075](https://github.com/openclaw/openclaw/pull/117075)
- Compact Doctor compatibility inventory defaults [#117077](https://github.com/openclaw/openclaw/pull/117077)
- Unify subagent completion fallback delivery [#117085](https://github.com/openclaw/openclaw/pull/117085)
- Share Doctor state-migration ownership handling [#117088](https://github.com/openclaw/openclaw/pull/117088)
- Reuse the authoritative plugin manifest graph [#117091](https://github.com/openclaw/openclaw/pull/117091)
- Unify session transcript write leases [#117092](https://github.com/openclaw/openclaw/pull/117092)
- Consolidate Discord model-picker navigation [#117093](https://github.com/openclaw/openclaw/pull/117093)
- Unify memory embedding provider adaptation [#117094](https://github.com/openclaw/openclaw/pull/117094)
- Consolidate Gateway operator approval resolution [#117095](https://github.com/openclaw/openclaw/pull/117095)
- Share progress-draft composition between Matrix and Slack [#117097](https://github.com/openclaw/openclaw/pull/117097)
- Unify model-selection policy across agent paths [#117098](https://github.com/openclaw/openclaw/pull/117098)
- Derive changed-test routes from canonical owners [#117099](https://github.com/openclaw/openclaw/pull/117099)
- Unify Telegram outbound media delivery [#117102](https://github.com/openclaw/openclaw/pull/117102)
- Share approval-reaction binding validation across channels [#117105](https://github.com/openclaw/openclaw/pull/117105)
- Enforce session migration guards across every protected file [#117140](https://github.com/openclaw/openclaw/pull/117140)
- Consolidate Doctor state-migration ownership [#117142](https://github.com/openclaw/openclaw/pull/117142)
- Unify slash-command and directive ownership [#117143](https://github.com/openclaw/openclaw/pull/117143)
- Consolidate reply lifecycle state ownership [#117145](https://github.com/openclaw/openclaw/pull/117145)
- Consolidate plugin descriptors and Gateway startup activation [#117146](https://github.com/openclaw/openclaw/pull/117146)
- Unify context limits and compaction recovery [#117149](https://github.com/openclaw/openclaw/pull/117149)
- Consolidate generated-media completion delivery [#117150](https://github.com/openclaw/openclaw/pull/117150)
- Allow dependency-only removals without security override [#117172](https://github.com/openclaw/openclaw/pull/117172)
- Make the MCP loopback drain test deterministic [#117181](https://github.com/openclaw/openclaw/pull/117181)
- Remove the unused Apple translation contradiction report [#117182](https://github.com/openclaw/openclaw/pull/117182)
- Consolidate bundled channel setup ownership [#117188](https://github.com/openclaw/openclaw/pull/117188)
- Align subagent fanout QA with public evidence [#117202](https://github.com/openclaw/openclaw/pull/117202)
- Isolate QA runner discovery from broad plugin runtime barrels [#117203](https://github.com/openclaw/openclaw/pull/117203)
- Lower the environment-variable count ratchet [#117224](https://github.com/openclaw/openclaw/pull/117224)
- Validate release candidates before publishing Docker images [#117252](https://github.com/openclaw/openclaw/pull/117252)
- Canonicalize macOS sandbox-migration test paths [#117261](https://github.com/openclaw/openclaw/pull/117261)
- Reuse validated config during plugin CLI startup [#117289](https://github.com/openclaw/openclaw/pull/117289)
- Update memory helper test-shard routing [#117295](https://github.com/openclaw/openclaw/pull/117295)
- Consolidate cache-TTL pruning in prompt projection [#117313](https://github.com/openclaw/openclaw/pull/117313)
- Refresh generated Control UI locale data [#117315](https://github.com/openclaw/openclaw/pull/117315)
- Clarify contract-sensitive extended-stable backports [#117324](https://github.com/openclaw/openclaw/pull/117324)
- Centralize Telegram text delivery [#117327](https://github.com/openclaw/openclaw/pull/117327)
- Accept declared legacy Telegram release evidence [#117330](https://github.com/openclaw/openclaw/pull/117330)
- Consolidate the database-first legacy-store analyzer [#117347](https://github.com/openclaw/openclaw/pull/117347)
- Prevent agent-tool UI tests from polluting shared history [#117348](https://github.com/openclaw/openclaw/pull/117348)
- Activate the realtime relay live-smoke transport [#117349](https://github.com/openclaw/openclaw/pull/117349)
- Run board tests against the production SQLite store [#117353](https://github.com/openclaw/openclaw/pull/117353)
- Consolidate Docker E2E scenario helpers [#117359](https://github.com/openclaw/openclaw/pull/117359)
- Consolidate TUI runtime ownership [#117368](https://github.com/openclaw/openclaw/pull/117368)
- Move plugin contributions into registry-owned bundles [#117372](https://github.com/openclaw/openclaw/pull/117372)
- Stabilize release-validation assertions [#117377](https://github.com/openclaw/openclaw/pull/117377)
- Make SQLite leases the sole runtime transcript lock [#117380](https://github.com/openclaw/openclaw/pull/117380)
- Deduplicate generated Codex protocol schemas [#117382](https://github.com/openclaw/openclaw/pull/117382)
- Consolidate main-session recovery lifecycle ownership [#117383](https://github.com/openclaw/openclaw/pull/117383)
- Consolidate Full Release Validation child monitors [#117385](https://github.com/openclaw/openclaw/pull/117385)
- Harden plugin import-boundary guards [#117386](https://github.com/openclaw/openclaw/pull/117386)
- Let upgrade evidence lanes reach the actual upgrade [#117388](https://github.com/openclaw/openclaw/pull/117388)
- Start Telegram polling in the bot-token QA runtime [#117389](https://github.com/openclaw/openclaw/pull/117389)
- Preserve Matrix reply relations in QA observations [#117390](https://github.com/openclaw/openclaw/pull/117390)
- Verify transient Slack progress writes in live QA [#117391](https://github.com/openclaw/openclaw/pull/117391)
- Stop staged QA Lab from requiring a separate Matrix runtime package [#117392](https://github.com/openclaw/openclaw/pull/117392)
- Generate the documentation map only for publishing and packaging [#117398](https://github.com/openclaw/openclaw/pull/117398)
- Stabilize TUI PTY CI runs [#117405](https://github.com/openclaw/openclaw/pull/117405)
- Derive changed-file CI test routes from repository conventions [#117407](https://github.com/openclaw/openclaw/pull/117407)
- Preserve Slack fallback evidence in QA Lab [#117420](https://github.com/openclaw/openclaw/pull/117420)
- Generate native Canvas resources during builds [#117424](https://github.com/openclaw/openclaw/pull/117424)
- Use canonical SQLite schemas without committed duplicates [#117433](https://github.com/openclaw/openclaw/pull/117433)
- Accept legacy Codex completion delivery in release validation [#117458](https://github.com/openclaw/openclaw/pull/117458)
- Let beta release checks finish before parent timeout [#117463](https://github.com/openclaw/openclaw/pull/117463)
- Deduplicate plugin TypeScript project boundaries [#117474](https://github.com/openclaw/openclaw/pull/117474)
- Deduplicate Codex prompt snapshot fixtures [#117476](https://github.com/openclaw/openclaw/pull/117476)
- fix(ci): bound trufflehog installer download timeouts [#117480](https://github.com/openclaw/openclaw/pull/117480)
- Consolidate agent compaction and context-engine ownership [#117482](https://github.com/openclaw/openclaw/pull/117482)
- Clarify bundled-plugin memory attribution in Kova reports [#117500](https://github.com/openclaw/openclaw/pull/117500)
- Deduplicate secrets runtime-state test fixtures [#117502](https://github.com/openclaw/openclaw/pull/117502)
- Deduplicate OpenAI Realtime voice test fixtures [#117503](https://github.com/openclaw/openclaw/pull/117503)
- Keep Kova deep-profile bundles publishable [#117508](https://github.com/openclaw/openclaw/pull/117508)
- Separate warmed and first-device Gateway health benchmarks [#117525](https://github.com/openclaw/openclaw/pull/117525)
- Make the Docker helper test portable on macOS [#117526](https://github.com/openclaw/openclaw/pull/117526)
- Restore the exact Oxlint shard test owner [#117531](https://github.com/openclaw/openclaw/pull/117531)
- Isolate the memory reindex test from real plugin loading [#117551](https://github.com/openclaw/openclaw/pull/117551)
- Repair plugin prerelease validation [#117562](https://github.com/openclaw/openclaw/pull/117562)
- Deduplicate secrets runtime test fixtures [#117563](https://github.com/openclaw/openclaw/pull/117563)
- Consolidate Cron form control rendering [#117576](https://github.com/openclaw/openclaw/pull/117576)
- Separate Gateway startup maintenance timing [#117577](https://github.com/openclaw/openclaw/pull/117577)
- Centralize Policy Doctor check descriptors [#117578](https://github.com/openclaw/openclaw/pull/117578)
- Recognize wrapped WhatsApp polls and video notes in QA [#117579](https://github.com/openclaw/openclaw/pull/117579)
- Generate export HTML vendor assets during runtime postbuild [#117583](https://github.com/openclaw/openclaw/pull/117583)
- Consolidate Gateway chat test fixtures [#117588](https://github.com/openclaw/openclaw/pull/117588)
- Deduplicate QA mock-provider fixtures [#117590](https://github.com/openclaw/openclaw/pull/117590)
- Deduplicate database-first guard fixtures [#117594](https://github.com/openclaw/openclaw/pull/117594)
- Deduplicate setup-inference test fixtures [#117598](https://github.com/openclaw/openclaw/pull/117598)
- Unify CLI-to-Gateway RPC transport [#117601](https://github.com/openclaw/openclaw/pull/117601)
- Add realtime Talk smoke evidence to QA Lab [#117602](https://github.com/openclaw/openclaw/pull/117602)
- Isolate performance gateway checks from hosted network calls [#117610](https://github.com/openclaw/openclaw/pull/117610)
- Simplify agent command-delivery test fixtures [#117613](https://github.com/openclaw/openclaw/pull/117613)
- Consolidate Signal inbound-context test fixtures [#117617](https://github.com/openclaw/openclaw/pull/117617)
- Retry timed-out plugin dependency installs during packaging [#117618](https://github.com/openclaw/openclaw/pull/117618)
- Deduplicate iMessage monitor route test fixtures [#117621](https://github.com/openclaw/openclaw/pull/117621)
- Prevent plugin prerelease validation timeouts [#117624](https://github.com/openclaw/openclaw/pull/117624)
- Centralize Control UI session-branch test fixtures [#117625](https://github.com/openclaw/openclaw/pull/117625)
- Unify Control UI Usage presentation metadata [#117627](https://github.com/openclaw/openclaw/pull/117627)
- Consolidate run-node test fixtures [#117630](https://github.com/openclaw/openclaw/pull/117630)
- Deduplicate policy doctor test fixtures [#117634](https://github.com/openclaw/openclaw/pull/117634)
- Consolidate browser navigation-guard test fixtures [#117638](https://github.com/openclaw/openclaw/pull/117638)
- Consolidate Crabbox wrapper test fixtures [#117642](https://github.com/openclaw/openclaw/pull/117642)
- Centralize Control UI Cron controller test fixtures [#117643](https://github.com/openclaw/openclaw/pull/117643)
- Use trusted packaging tooling with frozen plugin artifacts [#117645](https://github.com/openclaw/openclaw/pull/117645)
- Preserve plugin hook-runner exports in reply tests [#117647](https://github.com/openclaw/openclaw/pull/117647)
- Retain and validate startup benchmark warmups [#117649](https://github.com/openclaw/openclaw/pull/117649)
- Deduplicate Matrix CLI test fixtures [#117651](https://github.com/openclaw/openclaw/pull/117651)
- Add opt-in timing for local agent startup stages [#117653](https://github.com/openclaw/openclaw/pull/117653)
- Wait for Gateway WebSocket readiness before performance benchmarks [#117655](https://github.com/openclaw/openclaw/pull/117655)
- Consolidate Feishu Drive test fixtures [#117659](https://github.com/openclaw/openclaw/pull/117659)
- Consolidate LM Studio provider setup test fixtures [#117660](https://github.com/openclaw/openclaw/pull/117660)
- Remove unreachable Windows firewall probes [#117662](https://github.com/openclaw/openclaw/pull/117662)
- Clean up unread Microsoft Graph error responses [#117664](https://github.com/openclaw/openclaw/pull/117664)
- Close rejected oversized Signal CLI downloads [#117665](https://github.com/openclaw/openclaw/pull/117665)
- Consolidate Android durable-outbox test scenarios [#117667](https://github.com/openclaw/openclaw/pull/117667)
- Retry transient plugin lock-generation timeouts [#117668](https://github.com/openclaw/openclaw/pull/117668)
- Deduplicate iOS node invoke test fixtures [#117670](https://github.com/openclaw/openclaw/pull/117670)
- Keep plugin npm lock generation aligned with trusted release tooling [#117677](https://github.com/openclaw/openclaw/pull/117677)
- Stabilize realtime voice prerelease tests [#117684](https://github.com/openclaw/openclaw/pull/117684)
- Simplify Memory Core search test fixtures [#117691](https://github.com/openclaw/openclaw/pull/117691)
- Deduplicate SDK test client and event fixtures [#117692](https://github.com/openclaw/openclaw/pull/117692)
- Consolidate Discord message-media test fixtures [#117695](https://github.com/openclaw/openclaw/pull/117695)
- Consolidate cron stream watcher test fixtures [#117696](https://github.com/openclaw/openclaw/pull/117696)
- Consolidate Fal image-provider test fixtures [#117698](https://github.com/openclaw/openclaw/pull/117698)
- Deduplicate WhatsApp live-transport QA fixtures [#117700](https://github.com/openclaw/openclaw/pull/117700)
- Consolidate OpenClaw E2E test fixtures [#117701](https://github.com/openclaw/openclaw/pull/117701)
- Deduplicate WhatsApp reply-delivery test fixtures [#117710](https://github.com/openclaw/openclaw/pull/117710)
- Attribute hidden CLI command startup stages [#117720](https://github.com/openclaw/openclaw/pull/117720)
- Align Gateway test readiness and module isolation [#117725](https://github.com/openclaw/openclaw/pull/117725)
- Remove unused private LINE card helpers [#117729](https://github.com/openclaw/openclaw/pull/117729)
- Prevent bundled plugin lock-generation timeouts [#117730](https://github.com/openclaw/openclaw/pull/117730)
- Consolidate macOS gateway process test fixtures [#117740](https://github.com/openclaw/openclaw/pull/117740)
- Attribute doctor config preflight timing [#117743](https://github.com/openclaw/openclaw/pull/117743)
- Allow larger bundled npm plugin artifacts [#117745](https://github.com/openclaw/openclaw/pull/117745)
- Remove obsolete plugin registry compatibility layers [#117749](https://github.com/openclaw/openclaw/pull/117749)
- Join Vitest process groups before starting the next shard [#117755](https://github.com/openclaw/openclaw/pull/117755)
- Isolate Telegram migration persistence metadata [#117759](https://github.com/openclaw/openclaw/pull/117759)
- Share gateway benchmark runtime helpers [#117769](https://github.com/openclaw/openclaw/pull/117769)
- Reuse the guarded remote media download path [#117771](https://github.com/openclaw/openclaw/pull/117771)
- Make MCP tools-list fixture logs deterministic [#117772](https://github.com/openclaw/openclaw/pull/117772)
- Remove redundant status-report section wrappers [#117777](https://github.com/openclaw/openclaw/pull/117777)
- Consolidate slow-reply timing diagnostics [#117780](https://github.com/openclaw/openclaw/pull/117780)
- Align Gateway E2E connection and handshake timeouts [#117791](https://github.com/openclaw/openclaw/pull/117791)
- Consolidate Matrix authentication source resolution [#117794](https://github.com/openclaw/openclaw/pull/117794)
- Observe delivered images from both QA media stores [#117799](https://github.com/openclaw/openclaw/pull/117799)
- Let performance validation support older frozen releases [#117800](https://github.com/openclaw/openclaw/pull/117800)
- Consolidate Memory Core dreaming test fixtures [#117804](https://github.com/openclaw/openclaw/pull/117804)
- Exercise the blocked Slack lifecycle on the selected QA account [#117805](https://github.com/openclaw/openclaw/pull/117805)
- Deduplicate producer and fallback QA evidence [#117806](https://github.com/openclaw/openclaw/pull/117806)
- Recover Matrix QA observers after expected long-poll deadlines [#117807](https://github.com/openclaw/openclaw/pull/117807)
- Verify standalone Slack commentary by message identity [#117808](https://github.com/openclaw/openclaw/pull/117808)
- Centralize native approval routing for iMessage, Signal, and WhatsApp [#117811](https://github.com/openclaw/openclaw/pull/117811)
- Share persistent-state error reporting across channel plugins [#117813](https://github.com/openclaw/openclaw/pull/117813)
- Repair update-restart QA service identity [#117814](https://github.com/openclaw/openclaw/pull/117814)
- Make memory fallback release QA validate behavior instead of phrasing [#117815](https://github.com/openclaw/openclaw/pull/117815)
- Remove obsolete internal exports and test seams [#117819](https://github.com/openclaw/openclaw/pull/117819)
- Consolidate Slack authorization and upload test fixtures [#117820](https://github.com/openclaw/openclaw/pull/117820)
- Consolidate provider catalog and onboarding helpers [#117824](https://github.com/openclaw/openclaw/pull/117824)
- Consolidate embedded-agent and channel test suites [#117826](https://github.com/openclaw/openclaw/pull/117826)
- Deduplicate QA runtime tool fixtures [#117827](https://github.com/openclaw/openclaw/pull/117827)
- Consolidate cron normalization test fixtures [#117828](https://github.com/openclaw/openclaw/pull/117828)
- Prevent source CLI test children from hanging in loader IPC [#117830](https://github.com/openclaw/openclaw/pull/117830)
- Consolidate LanceDB memory-plugin test fixtures [#117833](https://github.com/openclaw/openclaw/pull/117833)
- Collapse duplicated status overview adapters [#117835](https://github.com/openclaw/openclaw/pull/117835)
- Consolidate WhatsApp QA message extraction [#117836](https://github.com/openclaw/openclaw/pull/117836)
- Consolidate QQBot outbound dispatch test fixtures [#117837](https://github.com/openclaw/openclaw/pull/117837)
- Centralize Gateway HTTP route staging [#117839](https://github.com/openclaw/openclaw/pull/117839)
- Isolate the Gateway startup responsiveness guard from runner starvation [#117842](https://github.com/openclaw/openclaw/pull/117842)
- Consolidate Telegram inbound cache fixtures [#117844](https://github.com/openclaw/openclaw/pull/117844)
- Consolidate WhatsApp monitor test suites [#117854](https://github.com/openclaw/openclaw/pull/117854)
- Consolidate Bash tools test suites [#117856](https://github.com/openclaw/openclaw/pull/117856)
- Deterministic Gateway startup responsiveness test [#117857](https://github.com/openclaw/openclaw/pull/117857)
- Keep plugin routing cold on unrelated gateway paths [#117858](https://github.com/openclaw/openclaw/pull/117858)
- Consolidate Android chat-controller test setup [#117862](https://github.com/openclaw/openclaw/pull/117862)
- Consolidate plugin OAuth helpers into the shared SDK [#117867](https://github.com/openclaw/openclaw/pull/117867)
- Centralize global and project session settings state [#117868](https://github.com/openclaw/openclaw/pull/117868)
- Consolidate OpenClaw agent-tool test suites [#117870](https://github.com/openclaw/openclaw/pull/117870)
- Consolidate gateway protocol test fixtures [#117873](https://github.com/openclaw/openclaw/pull/117873)
- Consolidate outbound delivery recovery test fixtures [#117876](https://github.com/openclaw/openclaw/pull/117876)
- Align SQLite flip-proof test timeouts [#117878](https://github.com/openclaw/openclaw/pull/117878)
- Consolidate agent tool test suites [#117886](https://github.com/openclaw/openclaw/pull/117886)
- Remove duplicate plugin CLI registry mock [#117894](https://github.com/openclaw/openclaw/pull/117894)
- Reuse the prepared plugin metadata snapshot during Gateway startup [#117897](https://github.com/openclaw/openclaw/pull/117897)
- Consolidate Teams request and shared error helpers [#117907](https://github.com/openclaw/openclaw/pull/117907)
- Split WhatsApp inbox lifecycle coverage by owner surface [#117910](https://github.com/openclaw/openclaw/pull/117910)
- Consolidate duplicated agent test suites [#117912](https://github.com/openclaw/openclaw/pull/117912)
- Isolate orphan recovery from the Gateway startup timing proof [#117922](https://github.com/openclaw/openclaw/pull/117922)
- Keep frozen CLI performance probes compatible [#117925](https://github.com/openclaw/openclaw/pull/117925)
- Widen the aggregate gateway event-loop test timeout [#117931](https://github.com/openclaw/openclaw/pull/117931)
- Resolve missing PR base commits before Testbox setup [#117940](https://github.com/openclaw/openclaw/pull/117940)
- Consolidate Google Meet CLI resolution [#117949](https://github.com/openclaw/openclaw/pull/117949)
- Consolidate verified-inference security test fixtures [#117955](https://github.com/openclaw/openclaw/pull/117955)
- Simplify Codex Doctor route-warning test fixtures [#117967](https://github.com/openclaw/openclaw/pull/117967)
- Add live inbound voice talkback validation [#117971](https://github.com/openclaw/openclaw/pull/117971)
- Allow marked scorecards from incomplete QA evidence [#117975](https://github.com/openclaw/openclaw/pull/117975)
- Extend the maturity evidence job timeout [#117999](https://github.com/openclaw/openclaw/pull/117999)
- Restore scheduled proof for pinned gateway restart pairs [#118009](https://github.com/openclaw/openclaw/pull/118009)
- Replace false Codex compatibility QA evidence [#118012](https://github.com/openclaw/openclaw/pull/118012)
- Validate MiniMax M3 in stable release lanes [#118017](https://github.com/openclaw/openclaw/pull/118017)
- Fail release validation early while preserving diagnosis refs [#118021](https://github.com/openclaw/openclaw/pull/118021)
- Require requested release-validation children [#118031](https://github.com/openclaw/openclaw/pull/118031)
- Remove stale CLI catalog paths and guard command ownership [#118040](https://github.com/openclaw/openclaw/pull/118040)
- Stabilize gateway and CLI process tests [#118042](https://github.com/openclaw/openclaw/pull/118042)
- Consolidate Apple outbox test fixtures [#118052](https://github.com/openclaw/openclaw/pull/118052)
- Deduplicate SQLite snapshot test fixtures [#118056](https://github.com/openclaw/openclaw/pull/118056)
- Compact host environment security fixtures [#118058](https://github.com/openclaw/openclaw/pull/118058)
- Compact OpenAI transport replay test fixtures [#118065](https://github.com/openclaw/openclaw/pull/118065)
- Consolidate Parallel web-search test fixtures [#118068](https://github.com/openclaw/openclaw/pull/118068)
- Consolidate provider-stream test fixtures [#118070](https://github.com/openclaw/openclaw/pull/118070)
- Consolidate iOS gateway connection test fixtures [#118072](https://github.com/openclaw/openclaw/pull/118072)
- Bound pending conversation approvals to the gateway lifecycle [#118075](https://github.com/openclaw/openclaw/pull/118075)
- Consolidate plugin-loader test fixtures [#118076](https://github.com/openclaw/openclaw/pull/118076)
- Consolidate Google and Mistral provider test fixtures [#118078](https://github.com/openclaw/openclaw/pull/118078)
- Consolidate device-pair security test coverage [#118079](https://github.com/openclaw/openclaw/pull/118079)
- Consolidate Doctor test fixture builders [#118080](https://github.com/openclaw/openclaw/pull/118080)
- Consolidate CLI compaction test fixtures [#118082](https://github.com/openclaw/openclaw/pull/118082)
- Consolidate duplicated auto-reply test fixtures [#118086](https://github.com/openclaw/openclaw/pull/118086)
- Consolidate repeated Parallels smoke-test fixtures [#118087](https://github.com/openclaw/openclaw/pull/118087)
- Consolidate Teams Meetings transport test fixtures [#118090](https://github.com/openclaw/openclaw/pull/118090)
- Consolidate memory-health Doctor test fixtures [#118091](https://github.com/openclaw/openclaw/pull/118091)
- Deduplicate macOS onboarding AI setup test fixtures [#118092](https://github.com/openclaw/openclaw/pull/118092)
- Clear mechanically safe lint baseline violations [#118098](https://github.com/openclaw/openclaw/pull/118098)
- Speed up 1Password resolver process-fixture tests [#118102](https://github.com/openclaw/openclaw/pull/118102)
- Accelerate the provider local-service timeout fixture [#118104](https://github.com/openclaw/openclaw/pull/118104)
- Consolidate native Gateway problem mapping [#118107](https://github.com/openclaw/openclaw/pull/118107)
- Consolidate iMessage monitor route test fixtures [#118108](https://github.com/openclaw/openclaw/pull/118108)
- Reuse plugin metadata snapshots in system-agent tests [#118119](https://github.com/openclaw/openclaw/pull/118119)
- Reduce redundant provider-auth test module reloads [#118132](https://github.com/openclaw/openclaw/pull/118132)
- Canonicalize macOS session-export test paths [#118138](https://github.com/openclaw/openclaw/pull/118138)
- Speed Plugin SDK facade tests with lightweight fixtures [#118140](https://github.com/openclaw/openclaw/pull/118140)
- Reduce redundant CLI test process launches [#118141](https://github.com/openclaw/openclaw/pull/118141)
- Isolate expensive Gateway handler test dependencies [#118142](https://github.com/openclaw/openclaw/pull/118142)
- Make usage-template watcher recovery tests deterministic [#118151](https://github.com/openclaw/openclaw/pull/118151)
- Consolidate QA runtime parity fixtures [#118154](https://github.com/openclaw/openclaw/pull/118154)
- Deduplicate Discord presence-listener test setup [#118155](https://github.com/openclaw/openclaw/pull/118155)
- Consolidate Memory Host process test fixtures [#118160](https://github.com/openclaw/openclaw/pull/118160)
- Consolidate secrets runtime test fixtures [#118162](https://github.com/openclaw/openclaw/pull/118162)
- Consolidate heartbeat runner test fixtures [#118163](https://github.com/openclaw/openclaw/pull/118163)
- Consolidate terminal connection test fixtures [#118164](https://github.com/openclaw/openclaw/pull/118164)
- Consolidate Android gateway security test fixtures [#118165](https://github.com/openclaw/openclaw/pull/118165)
- Consolidate Android chat recovery test fixtures [#118166](https://github.com/openclaw/openclaw/pull/118166)
- Simplify Discord draft-stream test fixtures [#118167](https://github.com/openclaw/openclaw/pull/118167)
- Deduplicate device-auth migration test fixtures [#118168](https://github.com/openclaw/openclaw/pull/118168)
- Consolidate Policy doctor test fixtures [#118173](https://github.com/openclaw/openclaw/pull/118173)
- Canonicalize macOS Plugin SDK resolver test paths [#118174](https://github.com/openclaw/openclaw/pull/118174)
- Consolidate Matrix monitor test fixtures [#118175](https://github.com/openclaw/openclaw/pull/118175)
- Deduplicate agent-runner test fixtures [#118176](https://github.com/openclaw/openclaw/pull/118176)
- Consolidate Android Wear transport test fixtures [#118177](https://github.com/openclaw/openclaw/pull/118177)
- Compact Gateway terminal-observer test fixtures [#118179](https://github.com/openclaw/openclaw/pull/118179)
- Deduplicate Control UI browser-test setup [#118180](https://github.com/openclaw/openclaw/pull/118180)
- Consolidate Hermes migration test fixtures [#118182](https://github.com/openclaw/openclaw/pull/118182)
- Speed up embedded-agent overflow tests [#118184](https://github.com/openclaw/openclaw/pull/118184)
- Use deterministic CLI fixtures in setup-inference tests [#118188](https://github.com/openclaw/openclaw/pull/118188)
- Speed up gateway agent tests with an in-memory task registry [#118191](https://github.com/openclaw/openclaw/pull/118191)
- Trim duplicate Gateway session-routing tests [#118194](https://github.com/openclaw/openclaw/pull/118194)
- Stabilize macOS bounded-process test coverage under load [#118196](https://github.com/openclaw/openclaw/pull/118196)
- Run DOM-free Control UI tests in Node [#118198](https://github.com/openclaw/openclaw/pull/118198)
- Use deterministic CLI backend fixtures in agent command tests [#118199](https://github.com/openclaw/openclaw/pull/118199)
- Restore npm 12 compatibility in release packaging checks [#118209](https://github.com/openclaw/openclaw/pull/118209)
- Stabilize Android branch-coordination tests [#118210](https://github.com/openclaw/openclaw/pull/118210)
- Consolidate transcript-state test fixtures [#118213](https://github.com/openclaw/openclaw/pull/118213)
- Document macOS ownership of remote gateway fields [#118214](https://github.com/openclaw/openclaw/pull/118214)
- Deduplicate Mattermost draft-streaming tests [#118215](https://github.com/openclaw/openclaw/pull/118215)
- Consolidate macOS onboarding probe test fixtures [#118218](https://github.com/openclaw/openclaw/pull/118218)
- Consolidate container-target test fixtures [#118219](https://github.com/openclaw/openclaw/pull/118219)
- Deduplicate browser profile hot-reload test fixtures [#118220](https://github.com/openclaw/openclaw/pull/118220)
- Consolidate iMessage monitor test fixtures [#118221](https://github.com/openclaw/openclaw/pull/118221)
- Compact Codex plugin inventory test fixtures [#118223](https://github.com/openclaw/openclaw/pull/118223)
- Deduplicate Mattermost slash HTTP test fixtures [#118224](https://github.com/openclaw/openclaw/pull/118224)
- Speed system-agent tests with a shared verified binding [#118227](https://github.com/openclaw/openclaw/pull/118227)
- Isolate agent-harness registry tests from provider discovery [#118228](https://github.com/openclaw/openclaw/pull/118228)
- Deduplicate cron isolated-run test fixtures [#118230](https://github.com/openclaw/openclaw/pull/118230)
- Consolidate macOS Codex catalog test fixtures [#118233](https://github.com/openclaw/openclaw/pull/118233)
- Consolidate Feishu chat authorization test fixtures [#118234](https://github.com/openclaw/openclaw/pull/118234)
- Consolidate async queues, retry backoff, and dedupe storage [#118235](https://github.com/openclaw/openclaw/pull/118235)
- Consolidate Feishu doctor test fixtures [#118238](https://github.com/openclaw/openclaw/pull/118238)
- Consolidate browser CDP test responses [#118239](https://github.com/openclaw/openclaw/pull/118239)
- Consolidate browser navigation security fixtures [#118240](https://github.com/openclaw/openclaw/pull/118240)
- Centralize Control UI Gateway page lifecycle [#118243](https://github.com/openclaw/openclaw/pull/118243)
- Consolidate duplicated Slack outbound test fixtures [#118246](https://github.com/openclaw/openclaw/pull/118246)
- Consolidate plugin provider test fixtures [#118248](https://github.com/openclaw/openclaw/pull/118248)
- Consolidate iMessage status test fixtures [#118249](https://github.com/openclaw/openclaw/pull/118249)
- Consolidate Slack approval runtime test fixtures [#118253](https://github.com/openclaw/openclaw/pull/118253)
- Repair prerelease QA and WhatsApp fixtures [#118255](https://github.com/openclaw/openclaw/pull/118255)
- Clear the remaining lint baseline with bounded exceptions [#118256](https://github.com/openclaw/openclaw/pull/118256)
- Compact trusted channel-catalog test fixtures [#118258](https://github.com/openclaw/openclaw/pull/118258)
- Consolidate redundant script tooling [#118259](https://github.com/openclaw/openclaw/pull/118259)
- Canonicalize internal cache mechanics [#118262](https://github.com/openclaw/openclaw/pull/118262)
- Deduplicate xAI search test fixtures [#118263](https://github.com/openclaw/openclaw/pull/118263)
- Consolidate SQLite snapshot test fixtures [#118264](https://github.com/openclaw/openclaw/pull/118264)
- Restore tracer coverage in queued-session rotation E2E [#118266](https://github.com/openclaw/openclaw/pull/118266)
- Deduplicate Ollama embedding test fixtures [#118267](https://github.com/openclaw/openclaw/pull/118267)
- Consolidate Microsoft Teams Graph upload test fixtures [#118268](https://github.com/openclaw/openclaw/pull/118268)
- Speed up incomplete-turn agent tests [#118269](https://github.com/openclaw/openclaw/pull/118269)
- Consolidate Android voice test fixtures [#118270](https://github.com/openclaw/openclaw/pull/118270)
- Consolidate Feishu monitor lifecycle test fixtures [#118273](https://github.com/openclaw/openclaw/pull/118273)
- Consolidate MiniMax OAuth test fixtures [#118276](https://github.com/openclaw/openclaw/pull/118276)
- Consolidate audit migration test fixtures [#118277](https://github.com/openclaw/openclaw/pull/118277)
- Deduplicate computer-tool test fixtures [#118278](https://github.com/openclaw/openclaw/pull/118278)
- Consolidate Reef protocol test fixtures [#118281](https://github.com/openclaw/openclaw/pull/118281)
- Consolidate browser upload-path test fixtures [#118283](https://github.com/openclaw/openclaw/pull/118283)
- Consolidate doctor transcript-label test fixtures [#118290](https://github.com/openclaw/openclaw/pull/118290)
- Consolidate the meeting-bot audio test harness [#118291](https://github.com/openclaw/openclaw/pull/118291)
- Consolidate plugin npm installer E2E fixtures [#118292](https://github.com/openclaw/openclaw/pull/118292)
- Compact repeated OpenAI transport test fixtures [#118295](https://github.com/openclaw/openclaw/pull/118295)
- Consolidate Zoom Meetings runtime test fixtures [#118300](https://github.com/openclaw/openclaw/pull/118300)
- Deduplicate provider tool schema test fixtures [#118302](https://github.com/openclaw/openclaw/pull/118302)
- consolidate iMessage approval test fixtures [#118306](https://github.com/openclaw/openclaw/pull/118306)
- Make Gateway concurrency probe failures attributable [#118308](https://github.com/openclaw/openclaw/pull/118308)
- Complete embedded-runner E2E runtime fixtures [#118313](https://github.com/openclaw/openclaw/pull/118313)
- Consolidate Discord Activity HTTP test fixtures [#118314](https://github.com/openclaw/openclaw/pull/118314)
- Consolidate Buzz lifecycle test fixtures [#118316](https://github.com/openclaw/openclaw/pull/118316)
- Consolidate the OpenCode Go stream-termination test harness [#118317](https://github.com/openclaw/openclaw/pull/118317)
- Consolidate xAI realtime voice test fixtures [#118318](https://github.com/openclaw/openclaw/pull/118318)
- Deduplicate Telegram reasoning and room-event test fixtures [#118319](https://github.com/openclaw/openclaw/pull/118319)
- Simplify Tlon upload hardening test fixtures [#118320](https://github.com/openclaw/openclaw/pull/118320)
- Centralize Swift transcript-cache test fixtures [#118322](https://github.com/openclaw/openclaw/pull/118322)
- Consolidate OpenCode session-catalog test fixtures [#118323](https://github.com/openclaw/openclaw/pull/118323)
- Reuse a shared database fixture in agent database tests [#118324](https://github.com/openclaw/openclaw/pull/118324)
- Consolidate embedded-runner integration setup [#118326](https://github.com/openclaw/openclaw/pull/118326)
- Consolidate Ollama web-search test fixtures [#118328](https://github.com/openclaw/openclaw/pull/118328)
- Reuse immutable Gateway system-agent test fixtures [#118329](https://github.com/openclaw/openclaw/pull/118329)
- Add repository cleanup and review policy gates [#118330](https://github.com/openclaw/openclaw/pull/118330)
- Restore fast Doctor E2E fixture contracts [#118347](https://github.com/openclaw/openclaw/pull/118347)
- Focus overflow-compaction tests on their owners [#118351](https://github.com/openclaw/openclaw/pull/118351)
- Batch Gateway chat-history test fixtures [#118362](https://github.com/openclaw/openclaw/pull/118362)
- Make the Gateway concurrency benchmark reliable and diagnosable [#118364](https://github.com/openclaw/openclaw/pull/118364)
- Consolidate Control UI chat-composer navigation [#118365](https://github.com/openclaw/openclaw/pull/118365)
- Consolidate extension Vitest shard configuration [#118366](https://github.com/openclaw/openclaw/pull/118366)
- Bound queued follow-up regression runtime [#118369](https://github.com/openclaw/openclaw/pull/118369)
- Compact the gateway protocol validator registry [#118379](https://github.com/openclaw/openclaw/pull/118379)
- Reuse PowerShell completion test processes [#118381](https://github.com/openclaw/openclaw/pull/118381)
- Isolate session-diff baseline integration coverage [#118382](https://github.com/openclaw/openclaw/pull/118382)
- Consolidate Android onboarding and gateway test fixtures [#118383](https://github.com/openclaw/openclaw/pull/118383)
- Consolidate database-first guard fact propagation [#118385](https://github.com/openclaw/openclaw/pull/118385)
- Remove redundant iOS node-model test wrappers [#118387](https://github.com/openclaw/openclaw/pull/118387)
- Reuse the default approval-inference test fixture [#118390](https://github.com/openclaw/openclaw/pull/118390)
- Unify GPT-Live delegation behavior across transports [#118391](https://github.com/openclaw/openclaw/pull/118391)
- Centralize policy Doctor test fixtures [#118392](https://github.com/openclaw/openclaw/pull/118392)
- Consolidate ChatViewModel test fixtures [#118394](https://github.com/openclaw/openclaw/pull/118394)
- Unify config redaction and restoration traversal [#118397](https://github.com/openclaw/openclaw/pull/118397)
- Consolidate auto-reply session rollover state [#118399](https://github.com/openclaw/openclaw/pull/118399)
- Start QA Gateway children through the supported repo runner [#118401](https://github.com/openclaw/openclaw/pull/118401)
- Consolidate project-routing test assertions [#118403](https://github.com/openclaw/openclaw/pull/118403)
- Isolate cold plugin-import process probes [#118404](https://github.com/openclaw/openclaw/pull/118404)
- Restore cross-platform release package preparation [#118405](https://github.com/openclaw/openclaw/pull/118405)
- Centralize Git updater subprocess result recording [#118406](https://github.com/openclaw/openclaw/pull/118406)
- Consolidate Google Meet create and node-host test fixtures [#118407](https://github.com/openclaw/openclaw/pull/118407)
- Consolidate Plugin SDK alias test fixtures [#118410](https://github.com/openclaw/openclaw/pull/118410)
- Consolidate main-session restart-recovery fixtures [#118411](https://github.com/openclaw/openclaw/pull/118411)
- Consolidate macOS Gateway lifecycle state [#118412](https://github.com/openclaw/openclaw/pull/118412)
- Consolidate repeated runtime authentication test fixtures [#118413](https://github.com/openclaw/openclaw/pull/118413)
- Unify prepared model runtime publication [#118414](https://github.com/openclaw/openclaw/pull/118414)
- Consolidate Workboard controller test fixtures [#118415](https://github.com/openclaw/openclaw/pull/118415)
- Consolidate Docker build-helper test fixtures [#118416](https://github.com/openclaw/openclaw/pull/118416)
- Isolate wizard model-auth tests from plugin discovery [#118417](https://github.com/openclaw/openclaw/pull/118417)
- Avoid bundled plugin scans in Config CLI tests [#118418](https://github.com/openclaw/openclaw/pull/118418)
- Consolidate Ollama stream test fixtures [#118419](https://github.com/openclaw/openclaw/pull/118419)
- Reuse verified inference fixtures in system-agent tests [#118420](https://github.com/openclaw/openclaw/pull/118420)
- Restore Codex media prerelease validation [#118424](https://github.com/openclaw/openclaw/pull/118424)
- Consolidate QA mock-provider response helpers [#118425](https://github.com/openclaw/openclaw/pull/118425)
- Consolidate llama.cpp provider test fixtures [#118426](https://github.com/openclaw/openclaw/pull/118426)
- Deduplicate Swift gateway session test setup [#118429](https://github.com/openclaw/openclaw/pull/118429)
- Reuse the TUI inference test fixture [#118435](https://github.com/openclaw/openclaw/pull/118435)
- Centralize GPT-Live delegation contract tests [#118436](https://github.com/openclaw/openclaw/pull/118436)
- Consolidate browser profile test fixtures [#118438](https://github.com/openclaw/openclaw/pull/118438)
- Centralize Policy CLI test fixtures [#118439](https://github.com/openclaw/openclaw/pull/118439)
- Consolidate oxlint runner test fixtures [#118440](https://github.com/openclaw/openclaw/pull/118440)
- Consolidate gateway server-method test fixtures [#118441](https://github.com/openclaw/openclaw/pull/118441)
- Compact MCP HTTP gateway test fixtures [#118443](https://github.com/openclaw/openclaw/pull/118443)
- Compact gateway call test fixtures [#118444](https://github.com/openclaw/openclaw/pull/118444)
- Consolidate legacy function-call test fixtures [#118445](https://github.com/openclaw/openclaw/pull/118445)
- Consolidate Crabbox wrapper test fakes across platforms [#118446](https://github.com/openclaw/openclaw/pull/118446)
- Consolidate Gateway startup test coverage [#118448](https://github.com/openclaw/openclaw/pull/118448)
- Isolate embedded model resolver test collaborators [#118453](https://github.com/openclaw/openclaw/pull/118453)
- Consolidate xAI catalog test setup [#118454](https://github.com/openclaw/openclaw/pull/118454)
- Narrow embedded-runner test resets [#118455](https://github.com/openclaw/openclaw/pull/118455)
- Compact Android chat persistence test fixtures [#118456](https://github.com/openclaw/openclaw/pull/118456)
- Centralize MCP server configuration commits [#118462](https://github.com/openclaw/openclaw/pull/118462)
- Consolidate macOS gateway endpoint publication [#118463](https://github.com/openclaw/openclaw/pull/118463)
- Consolidate agent run-wait reply tests [#118469](https://github.com/openclaw/openclaw/pull/118469)
- Consolidate auth-profile cooldown test matrices [#118471](https://github.com/openclaw/openclaw/pull/118471)
- Simplify approval-command test fixtures [#118473](https://github.com/openclaw/openclaw/pull/118473)
- Consolidate Gateway doctor-memory test fixtures [#118478](https://github.com/openclaw/openclaw/pull/118478)
- Bound Parallels Windows poll failures and timeout cleanup [#118479](https://github.com/openclaw/openclaw/pull/118479)
- Consolidate PR operation-lock lifecycle tests [#118480](https://github.com/openclaw/openclaw/pull/118480)
- Stabilize gateway continuation-recovery tests [#118481](https://github.com/openclaw/openclaw/pull/118481)
- Deduplicate Swift gateway session test setup [#118484](https://github.com/openclaw/openclaw/pull/118484)
- Centralize port-diagnostics test fixtures [#118485](https://github.com/openclaw/openclaw/pull/118485)
- Consolidate kitchen-sink RPC release-gate helpers [#118486](https://github.com/openclaw/openclaw/pull/118486)
- Deduplicate Codex doctor test expectations [#118487](https://github.com/openclaw/openclaw/pull/118487)
- Consolidate Ollama model-catalog test fixtures [#118491](https://github.com/openclaw/openclaw/pull/118491)
- Consolidate Control UI cron test fixtures [#118492](https://github.com/openclaw/openclaw/pull/118492)
- Consolidate Telegram, Google Meet, and WhatsApp test scaffolding [#118493](https://github.com/openclaw/openclaw/pull/118493)
- Consolidate the SQLite migration proof harness [#118502](https://github.com/openclaw/openclaw/pull/118502)
- Trim duplicate embedded-runner tests while keeping shared sentinels [#118504](https://github.com/openclaw/openclaw/pull/118504)
- Consolidate gateway-child QA fixtures [#118508](https://github.com/openclaw/openclaw/pull/118508)
- Consolidate Swift device identity test fixtures [#118510](https://github.com/openclaw/openclaw/pull/118510)
- Consolidate TTS under its core runtime owner [#118513](https://github.com/openclaw/openclaw/pull/118513)
- Consolidate shared repository-script scaffolding [#118514](https://github.com/openclaw/openclaw/pull/118514)
- Reuse the approvals database across node-host tests [#118517](https://github.com/openclaw/openclaw/pull/118517)
- Consolidate auto-reply model directive test fixtures [#118519](https://github.com/openclaw/openclaw/pull/118519)
- Consolidate macOS node runtime test fixtures [#118521](https://github.com/openclaw/openclaw/pull/118521)
- Reuse isolated state for task-registry tests [#118522](https://github.com/openclaw/openclaw/pull/118522)
- Consolidate Workboard view test setup [#118525](https://github.com/openclaw/openclaw/pull/118525)
- Speed up Doctor SecretRef migration tests [#118527](https://github.com/openclaw/openclaw/pull/118527)
- Focus the security permission-inventory test fixture [#118529](https://github.com/openclaw/openclaw/pull/118529)
- Extend artifact-check time for contributor forks [#118530](https://github.com/openclaw/openclaw/pull/118530)
- Settle reply dispatchers after failed chat-test sends [#118531](https://github.com/openclaw/openclaw/pull/118531)
- Consolidate Android connection TLS test fixtures [#118532](https://github.com/openclaw/openclaw/pull/118532)
- Consolidate iOS Talk configuration test fixtures [#118533](https://github.com/openclaw/openclaw/pull/118533)
- Consolidate cron failure-alert validation fixtures [#118539](https://github.com/openclaw/openclaw/pull/118539)
- Consolidate cron failure-alert test fixtures [#118540](https://github.com/openclaw/openclaw/pull/118540)
- Reuse the system-agent CLI backend test fixture [#118541](https://github.com/openclaw/openclaw/pull/118541)
- Restore Telegram release validation [#118542](https://github.com/openclaw/openclaw/pull/118542)
- Deduplicate ACP projector test event setup [#118543](https://github.com/openclaw/openclaw/pull/118543)
- Canonicalize Crabbox run option parsing [#118544](https://github.com/openclaw/openclaw/pull/118544)
- Isolate Doctor preflight tests from plugin scans [#118546](https://github.com/openclaw/openclaw/pull/118546)
- Speed up CLI configuration and MCP test fixtures [#118547](https://github.com/openclaw/openclaw/pull/118547)
- Consolidate deleted-agent gateway test fixtures [#118549](https://github.com/openclaw/openclaw/pull/118549)
- Reuse the managed-worktree test state database [#118550](https://github.com/openclaw/openclaw/pull/118550)
- Reuse the agent database cache test fixture [#118551](https://github.com/openclaw/openclaw/pull/118551)
- Reuse a canonical SQLite template in state tests [#118552](https://github.com/openclaw/openclaw/pull/118552)
- Speed up storage migration tests [#118554](https://github.com/openclaw/openclaw/pull/118554)
- Isolate Linux node-host plugin discovery in tests [#118556](https://github.com/openclaw/openclaw/pull/118556)
- refactor(ui): deduplicate config array test fixtures [#118557](https://github.com/openclaw/openclaw/pull/118557)
- Consolidate Android Wear bridge test fixtures [#118559](https://github.com/openclaw/openclaw/pull/118559)
- Consolidate stream-normalizer test fixtures [#118563](https://github.com/openclaw/openclaw/pull/118563)
- Consolidate worker-environment service test fixtures [#118565](https://github.com/openclaw/openclaw/pull/118565)
- Reuse one real Gateway PTY across TUI scenarios [#118567](https://github.com/openclaw/openclaw/pull/118567)
- Simplify macOS Claude session catalog tests [#118571](https://github.com/openclaw/openclaw/pull/118571)
- Speed up system-agent approval-intent tests [#118572](https://github.com/openclaw/openclaw/pull/118572)
- Isolate command tests from ambient Gateway tokens [#118577](https://github.com/openclaw/openclaw/pull/118577)
- Skip unused servers in Gateway session tests [#118581](https://github.com/openclaw/openclaw/pull/118581)
- Reuse the directive-test transcript database [#118585](https://github.com/openclaw/openclaw/pull/118585)
- Replace QA terminal-reply timing waits with lifecycle signals [#118600](https://github.com/openclaw/openclaw/pull/118600)
- Hydrate CI on unprivileged cloud sandboxes [#118602](https://github.com/openclaw/openclaw/pull/118602)
- Restore direct AWS dependency hydration [#118604](https://github.com/openclaw/openclaw/pull/118604)
- Reuse prepared plugin metadata in agent model tests [#118613](https://github.com/openclaw/openclaw/pull/118613)
- Reuse managed-worktree fixtures in tests [#118619](https://github.com/openclaw/openclaw/pull/118619)
- Speed up Gateway CLI test startup [#118620](https://github.com/openclaw/openclaw/pull/118620)
- Isolate provider policy in gateway session-patch tests [#118633](https://github.com/openclaw/openclaw/pull/118633)
- Reuse system-agent setup test fixtures [#118636](https://github.com/openclaw/openclaw/pull/118636)
- Stabilize queued-turn admission in the Gateway PTY test [#118638](https://github.com/openclaw/openclaw/pull/118638)
- Prevent Memory Core index tests from loading the plugin registry [#118641](https://github.com/openclaw/openclaw/pull/118641)
- Reuse SQLite fixtures in CLI attempt tests [#118646](https://github.com/openclaw/openclaw/pull/118646)
- Stop Memory Wiki tests from loading unrelated plugins [#118654](https://github.com/openclaw/openclaw/pull/118654)
- Reuse responsive UI browser fixtures [#118655](https://github.com/openclaw/openclaw/pull/118655)
- Allow frozen candidates to skip unavailable Buzz QA [#118670](https://github.com/openclaw/openclaw/pull/118670)
- Reuse a validated agent-database test fixture [#118677](https://github.com/openclaw/openclaw/pull/118677)
- Speed up the managed-image cache browser proof [#118687](https://github.com/openclaw/openclaw/pull/118687)
- Reuse one Control UI bundle per E2E shard [#118697](https://github.com/openclaw/openclaw/pull/118697)
- Strengthen yielded-child QA completion proof [#118707](https://github.com/openclaw/openclaw/pull/118707)
- Prevent an asynchronous Gateway test mock race [#118708](https://github.com/openclaw/openclaw/pull/118708)
- Honor the final repeated option in tsgo wrappers [#118710](https://github.com/openclaw/openclaw/pull/118710)
- Lazy-load the real CLI runner in reply tests [#118752](https://github.com/openclaw/openclaw/pull/118752)
- Speed up the shared embedded-agent runner test harness [#118756](https://github.com/openclaw/openclaw/pull/118756)
- Restore lint-clean UI E2E global setup [#118763](https://github.com/openclaw/openclaw/pull/118763)
- Preserve Windows launch outcomes after setup timeouts [#118765](https://github.com/openclaw/openclaw/pull/118765)
- Remove delays from two agent test fixtures [#118770](https://github.com/openclaw/openclaw/pull/118770)
- Isolate shared test state and pin patched Undici 7 [#118781](https://github.com/openclaw/openclaw/pull/118781)
- Add durable QA coverage for the Gateway node control plane [#118784](https://github.com/openclaw/openclaw/pull/118784)
- Add durable browser proof for Control UI update status [#118786](https://github.com/openclaw/openclaw/pull/118786)
- Add Control UI shell and PWA primary QA proof [#118788](https://github.com/openclaw/openclaw/pull/118788)
- Add primary QA proof for Control UI credentials [#118790](https://github.com/openclaw/openclaw/pull/118790)
- Add real-Gateway RPC contract evidence [#118794](https://github.com/openclaw/openclaw/pull/118794)
- Add real-process QA coverage for Gateway WebSocket contracts [#118797](https://github.com/openclaw/openclaw/pull/118797)
- Add real-WebSocket coverage for Gateway client defaults [#118798](https://github.com/openclaw/openclaw/pull/118798)
- Validate published Gateway protocol artifacts and Swift compatibility [#118799](https://github.com/openclaw/openclaw/pull/118799)
- Route TUI PTY scenarios through explicit models [#118802](https://github.com/openclaw/openclaw/pull/118802)
- Stabilize oversized MCP catalog pagination testing [#118804](https://github.com/openclaw/openclaw/pull/118804)
- Add production-browser proof for Control UI updates [#118805](https://github.com/openclaw/openclaw/pull/118805)
- Add Gateway catalog and identity QA scenarios [#118808](https://github.com/openclaw/openclaw/pull/118808)
- Add end-to-end Gateway HTTP API proof [#118809](https://github.com/openclaw/openclaw/pull/118809)
- Add QA coverage for Gateway event and protocol authorization [#118810](https://github.com/openclaw/openclaw/pull/118810)
- Speed up setup inference test fixtures [#118811](https://github.com/openclaw/openclaw/pull/118811)
- Add live Gateway TLS pinning proof [#118812](https://github.com/openclaw/openclaw/pull/118812)
- Cover Gateway update and setup RPCs in package acceptance [#118813](https://github.com/openclaw/openclaw/pull/118813)
- Add guarded Control UI configuration QA coverage [#118814](https://github.com/openclaw/openclaw/pull/118814)
- Reduce redundant Code Mode test execution [#118815](https://github.com/openclaw/openclaw/pull/118815)
- Speed agent authentication tests with prepared fixtures [#118816](https://github.com/openclaw/openclaw/pull/118816)
- Add real OpenSSH QA coverage for the Gateway SSH fallback [#118818](https://github.com/openclaw/openclaw/pull/118818)
- Add real-process QA coverage for exec and process tools [#118819](https://github.com/openclaw/openclaw/pull/118819)
- Add primary QA coverage for session and transcript durability [#118820](https://github.com/openclaw/openclaw/pull/118820)
- Add QA coverage for plugin authoring contracts [#118821](https://github.com/openclaw/openclaw/pull/118821)
- Add Gateway loopback and LAN access QA [#118824](https://github.com/openclaw/openclaw/pull/118824)
- Add Gateway node exec-approval relay coverage [#118825](https://github.com/openclaw/openclaw/pull/118825)
- Promote Docker package-artifact QA ownership [#118826](https://github.com/openclaw/openclaw/pull/118826)
- Register bounded App SDK preview QA proof [#118829](https://github.com/openclaw/openclaw/pull/118829)
- Restore SDK packaging and signed macOS source builds [#118833](https://github.com/openclaw/openclaw/pull/118833)
- Add executable QA coverage for Gateway shared auth modes [#118834](https://github.com/openclaw/openclaw/pull/118834)
- Add primary QA for Control UI operator administration [#118836](https://github.com/openclaw/openclaw/pull/118836)
- Add Control UI diagnostics browser coverage [#118837](https://github.com/openclaw/openclaw/pull/118837)
- Add primary QA coverage for Control UI sessions and Cron [#118838](https://github.com/openclaw/openclaw/pull/118838)
- Keep provider keys out of POSIX Parallels job logs [#118840](https://github.com/openclaw/openclaw/pull/118840)
- Add end-to-end background process control proof [#118843](https://github.com/openclaw/openclaw/pull/118843)
- Add QA coverage for the diagnostic event boundary [#118844](https://github.com/openclaw/openclaw/pull/118844)
- Add end-to-end QA for the internal hook lifecycle [#118849](https://github.com/openclaw/openclaw/pull/118849)
- Avoid provider-runtime loading for plugin allowlists [#118854](https://github.com/openclaw/openclaw/pull/118854)
- Add QA coverage for managed gateway service lifecycle [#118855](https://github.com/openclaw/openclaw/pull/118855)
- Add QA coverage for guarded remote media fetch boundaries [#118857](https://github.com/openclaw/openclaw/pull/118857)
- QA covers local, remote, and stored media references [#118858](https://github.com/openclaw/openclaw/pull/118858)
- Add runnable QA coverage for audio selection and STT fallback [#118859](https://github.com/openclaw/openclaw/pull/118859)
- Add product-level QA for PDF extraction dispatch [#118860](https://github.com/openclaw/openclaw/pull/118860)
- Add core vision-routing QA coverage [#118861](https://github.com/openclaw/openclaw/pull/118861)
- Add full-stack QA coverage for vision offload [#118862](https://github.com/openclaw/openclaw/pull/118862)
- Add QA coverage for audio proxy routing and size limits [#118863](https://github.com/openclaw/openclaw/pull/118863)
- Add end-to-end QA coverage for video generation [#118864](https://github.com/openclaw/openclaw/pull/118864)
- Add primary QA for Control UI authentication transports [#118866](https://github.com/openclaw/openclaw/pull/118866)
- Add Prometheus plugin install and runtime QA coverage [#118867](https://github.com/openclaw/openclaw/pull/118867)
- Add Gateway-hosted web QA coverage [#118870](https://github.com/openclaw/openclaw/pull/118870)
- Stabilize MCP catalog limit tests under host load [#118871](https://github.com/openclaw/openclaw/pull/118871)
- Add real-Gateway exec approval QA coverage [#118872](https://github.com/openclaw/openclaw/pull/118872)
- Add focused QA coverage for Plugin SDK import paths [#118878](https://github.com/openclaw/openclaw/pull/118878)
- Add QA coverage for CLI onboarding and plugin sources [#118882](https://github.com/openclaw/openclaw/pull/118882)
- Refresh generated native app locales [#118883](https://github.com/openclaw/openclaw/pull/118883)
- Add real-Gateway QA for agent and artifact APIs [#118889](https://github.com/openclaw/openclaw/pull/118889)
- Isolate Matrix tests from host state [#118892](https://github.com/openclaw/openclaw/pull/118892)
- Add QA coverage for music generation controls [#118901](https://github.com/openclaw/openclaw/pull/118901)
- Add reusable authenticated evidence for TUI PTY tests [#118902](https://github.com/openclaw/openclaw/pull/118902)
- Add QA coverage for image-generation task lifecycle [#118915](https://github.com/openclaw/openclaw/pull/118915)
- Add executable memory redaction boundary coverage [#118916](https://github.com/openclaw/openclaw/pull/118916)
- Keep Matrix CI chunk tests aligned with test inventory [#118917](https://github.com/openclaw/openclaw/pull/118917)
- Add end-to-end QA for plugin-managed TaskFlows [#118919](https://github.com/openclaw/openclaw/pull/118919)
- Remove dead plugin scaffolding and patch dependency advisories [#118920](https://github.com/openclaw/openclaw/pull/118920)
- Add QA coverage for bundled runtime discovery [#118922](https://github.com/openclaw/openclaw/pull/118922)
- Add QA coverage for layered tool-policy gates [#118925](https://github.com/openclaw/openclaw/pull/118925)
- Add contract coverage for the plugin testing harness [#118933](https://github.com/openclaw/openclaw/pull/118933)
- test(qa): prove ClawHub catalog discovery [#118934](https://github.com/openclaw/openclaw/pull/118934)
- Add durable QA coverage for task operations [#118943](https://github.com/openclaw/openclaw/pull/118943)
- Add CLI distribution QA coverage [#118948](https://github.com/openclaw/openclaw/pull/118948)
- Assign plugin-tools activation to its QA scenario [#118949](https://github.com/openclaw/openclaw/pull/118949)
- Add executable QA evidence for runtime telemetry [#118950](https://github.com/openclaw/openclaw/pull/118950)
- Add executable QA for remote log tailing and rotation [#118951](https://github.com/openclaw/openclaw/pull/118951)
- Add QA coverage for Gateway support exports and stability diagnostics [#118956](https://github.com/openclaw/openclaw/pull/118956)
- Verify plugin tool ownership in Tool Search QA [#118958](https://github.com/openclaw/openclaw/pull/118958)
- Align plugin tool tests with owner policy [#118959](https://github.com/openclaw/openclaw/pull/118959)
- Add QA coverage for status and health observability [#118961](https://github.com/openclaw/openclaw/pull/118961)
- Add end-to-end QA for plugin hook lifecycles [#118962](https://github.com/openclaw/openclaw/pull/118962)
- Add deterministic Active Memory recall QA coverage [#118963](https://github.com/openclaw/openclaw/pull/118963)
- Add end-to-end QA coverage for cron execution diagnostics [#118964](https://github.com/openclaw/openclaw/pull/118964)
- Add managed OpenTelemetry runtime QA coverage [#118965](https://github.com/openclaw/openclaw/pull/118965)
- Add real-Gateway coverage for task and automation RPCs [#118966](https://github.com/openclaw/openclaw/pull/118966)
- Add executable ClawHub release-policy coverage [#118971](https://github.com/openclaw/openclaw/pull/118971)
- Strengthen packaged plugin lifecycle QA [#118973](https://github.com/openclaw/openclaw/pull/118973)
- Expand preview App SDK contract proof [#118978](https://github.com/openclaw/openclaw/pull/118978)
- Add durable cron scheduler state coverage [#118981](https://github.com/openclaw/openclaw/pull/118981)
- Add real-terminal QA coverage for TUI editor input [#118982](https://github.com/openclaw/openclaw/pull/118982)
- Add end-to-end TaskFlow registry lifecycle coverage [#118983](https://github.com/openclaw/openclaw/pull/118983)
- Add ClawHub package compatibility QA coverage [#118985](https://github.com/openclaw/openclaw/pull/118985)
- Add primary QA coverage for Gateway chat RPCs [#118988](https://github.com/openclaw/openclaw/pull/118988)
- Add real-PTY proof for supported TUI entrypoints [#118990](https://github.com/openclaw/openclaw/pull/118990)
- Add QA coverage for ordered tool-result consumption [#118991](https://github.com/openclaw/openclaw/pull/118991)
- Add durable cron delivery outcome coverage [#118993](https://github.com/openclaw/openclaw/pull/118993)
- Add Gateway usage and memory API QA coverage [#118995](https://github.com/openclaw/openclaw/pull/118995)
- Add QA coverage for agent startup instruction ordering [#119010](https://github.com/openclaw/openclaw/pull/119010)
- Expand Docker Compose health and recovery proof [#119012](https://github.com/openclaw/openclaw/pull/119012)
- Add reconnect deduplication E2E coverage [#119013](https://github.com/openclaw/openclaw/pull/119013)
- Add primary QA coverage for workspace mutation tools [#119021](https://github.com/openclaw/openclaw/pull/119021)
- Add full-Gateway QA for direct tool invocation [#119025](https://github.com/openclaw/openclaw/pull/119025)
- Claim QA coverage for sessionless heartbeat outcomes [#119027](https://github.com/openclaw/openclaw/pull/119027)
- Add Gateway agent session-streaming QA coverage [#119028](https://github.com/openclaw/openclaw/pull/119028)
- Add direct QA coverage for agent tool approvals [#119029](https://github.com/openclaw/openclaw/pull/119029)
- Add executable proof for agent session continuity [#119032](https://github.com/openclaw/openclaw/pull/119032)
- Strengthen overflow compaction and pruning QA [#119033](https://github.com/openclaw/openclaw/pull/119033)
- Strengthen failure-recovery visibility scenarios [#119034](https://github.com/openclaw/openclaw/pull/119034)
- Add real-Docker workspace-isolation coverage [#119038](https://github.com/openclaw/openclaw/pull/119038)
- Add primary QA proof for progress followthrough [#119039](https://github.com/openclaw/openclaw/pull/119039)
- Add packaged browser-profile lifecycle QA [#119043](https://github.com/openclaw/openclaw/pull/119043)
- Add Canvas agent-to-node QA coverage [#119047](https://github.com/openclaw/openclaw/pull/119047)
- Add real Docker coverage for sandboxed exec routing [#119053](https://github.com/openclaw/openclaw/pull/119053)
- Repair QA Lab scenario catalog baselines [#119062](https://github.com/openclaw/openclaw/pull/119062)
- Bound Gateway benchmark probe deadlines [#119063](https://github.com/openclaw/openclaw/pull/119063)
- Provision ffmpeg for Playwright QA scenarios [#119064](https://github.com/openclaw/openclaw/pull/119064)
- Require exact-head re-review after post-review fixes [#119069](https://github.com/openclaw/openclaw/pull/119069)
- Add live QA proof for instruction-driven artifact creation [#119078](https://github.com/openclaw/openclaw/pull/119078)
- Add primary QA coverage for memory-file safety [#119093](https://github.com/openclaw/openclaw/pull/119093)
- Reduce gateway cold-start dependency loading [#119094](https://github.com/openclaw/openclaw/pull/119094)
- Retry interrupted Windows release checks [#119095](https://github.com/openclaw/openclaw/pull/119095)
- Strengthen QA proof for shared-channel memory recall [#119111](https://github.com/openclaw/openclaw/pull/119111)
- Accept advisory partial Kova profile reports [#119121](https://github.com/openclaw/openclaw/pull/119121)
- Add end-to-end QA for Gateway plugin approvals [#119128](https://github.com/openclaw/openclaw/pull/119128)
- Restore unique QA scenario coverage ownership [#119140](https://github.com/openclaw/openclaw/pull/119140)
- Restore primary QA ownership for memory tools [#119142](https://github.com/openclaw/openclaw/pull/119142)
- Repair QA Lab release-validation causality [#119150](https://github.com/openclaw/openclaw/pull/119150)
- Make channel sanitizer contracts artifact-independent [#119151](https://github.com/openclaw/openclaw/pull/119151)
- Remove changed-gate sync residue before Testbox lane selection [#119163](https://github.com/openclaw/openclaw/pull/119163)
- Give each gateway benchmark sample a full timeout [#119164](https://github.com/openclaw/openclaw/pull/119164)
- Add real-terminal coverage for TUI command surfaces [#119165](https://github.com/openclaw/openclaw/pull/119165)
- Restore reusable Testbox claims across path aliases [#119170](https://github.com/openclaw/openclaw/pull/119170)
- Avoid duplicate Matrix release QA runs [#119171](https://github.com/openclaw/openclaw/pull/119171)
- Bound direct Gateway server test runs [#119184](https://github.com/openclaw/openclaw/pull/119184)
- Repair QA scenario setup and compaction proof [#119188](https://github.com/openclaw/openclaw/pull/119188)
- Add real Gateway boundary regression coverage for the TUI [#119191](https://github.com/openclaw/openclaw/pull/119191)
- Isolate Gateway scheduler timers in tests [#119218](https://github.com/openclaw/openclaw/pull/119218)
- Observe final provider prompt egress across transports [#119219](https://github.com/openclaw/openclaw/pull/119219)
- Skip the CLI dotenv loader for no-file gateway starts [#119227](https://github.com/openclaw/openclaw/pull/119227)
- Add synchronized PTY coverage for TUI streaming and tool cards [#119251](https://github.com/openclaw/openclaw/pull/119251)
- Recover extended-stable npm publishing from trusted main [#119264](https://github.com/openclaw/openclaw/pull/119264)
- Reuse prepared provider policy registries [#119305](https://github.com/openclaw/openclaw/pull/119305)
- Split CLI plugin-registry startup timing [#119318](https://github.com/openclaw/openclaw/pull/119318)
- Record the selected runtime in QA flow scenarios [#119324](https://github.com/openclaw/openclaw/pull/119324)
- Reduce release-validation fetch size [#119334](https://github.com/openclaw/openclaw/pull/119334)
- Accept legacy release manifests with no core packages [#119337](https://github.com/openclaw/openclaw/pull/119337)
- Prevent hosted CI from starving the built TUI test [#119339](https://github.com/openclaw/openclaw/pull/119339)
- Enable OpenAI in the stored-audio QA scenario [#119349](https://github.com/openclaw/openclaw/pull/119349)
- Restore Slack monitor test collection [#119352](https://github.com/openclaw/openclaw/pull/119352)
- Canonicalize apply-patch test temp paths [#119353](https://github.com/openclaw/openclaw/pull/119353)
- Make Microsoft Teams auth tests deterministic and offline [#119354](https://github.com/openclaw/openclaw/pull/119354)
- Follow durable finals after streamed previews in QA [#119378](https://github.com/openclaw/openclaw/pull/119378)
- Preserve release-check evidence across job reruns [#119380](https://github.com/openclaw/openclaw/pull/119380)
- Isolate Vitest cache-warmer configurations [#119381](https://github.com/openclaw/openclaw/pull/119381)
- Read Discord Doctor capabilities without loading its runtime [#119391](https://github.com/openclaw/openclaw/pull/119391)
- Point the docs-refactor skill at its renamed standard [#119394](https://github.com/openclaw/openclaw/pull/119394)
- Stop zombie-only Gateway groups from failing QA cleanup [#119396](https://github.com/openclaw/openclaw/pull/119396)
- Preserve filtered shard boundaries in the Vitest cache warmer [#119403](https://github.com/openclaw/openclaw/pull/119403)
- Consolidate Gateway usage-report caches and helpers [#119409](https://github.com/openclaw/openclaw/pull/119409)
- Consolidate status scan projections and lazy loading [#119412](https://github.com/openclaw/openclaw/pull/119412)
- Unify Google Meet gateway, tool, and CLI dispatch [#119413](https://github.com/openclaw/openclaw/pull/119413)
- Consolidate configured channel-binding resolution [#119414](https://github.com/openclaw/openclaw/pull/119414)
- Consolidate Signal outbound and reaction transport [#119415](https://github.com/openclaw/openclaw/pull/119415)
- Consolidate media geometry normalization [#119416](https://github.com/openclaw/openclaw/pull/119416)
- Stabilize TUI PTY CI ownership and fixture cleanup [#119420](https://github.com/openclaw/openclaw/pull/119420)
- Reuse verified legacy database fixtures in state tests [#119423](https://github.com/openclaw/openclaw/pull/119423)
- Reduce system-agent test setup overhead [#119424](https://github.com/openclaw/openclaw/pull/119424)
- Consolidate plugin lifecycle hook dispatch wrappers [#119429](https://github.com/openclaw/openclaw/pull/119429)
- Wait for the selected QA channel account to be ready [#119431](https://github.com/openclaw/openclaw/pull/119431)
- Consolidate browser CLI and normalization helpers [#119432](https://github.com/openclaw/openclaw/pull/119432)
- Consolidate daemon service paths and usage rollups [#119433](https://github.com/openclaw/openclaw/pull/119433)
- Consolidate repeated CLI command registration [#119434](https://github.com/openclaw/openclaw/pull/119434)
- Consolidate session and transcript normalization helpers [#119435](https://github.com/openclaw/openclaw/pull/119435)
- Centralize reply delivery deduplication and route matching [#119436](https://github.com/openclaw/openclaw/pull/119436)
- Remove unused private Plugin SDK QA helpers [#119437](https://github.com/openclaw/openclaw/pull/119437)
- Consolidate Telegram outbound contracts and target parsing [#119438](https://github.com/openclaw/openclaw/pull/119438)
- Preserve QA scenario isolation in serial suites [#119439](https://github.com/openclaw/openclaw/pull/119439)
- Retry QA transport cleanup and always stop owned labs [#119442](https://github.com/openclaw/openclaw/pull/119442)
- Consolidate Discord interaction response handling [#119448](https://github.com/openclaw/openclaw/pull/119448)
- Reuse canonical normalization in Memory Wiki [#119449](https://github.com/openclaw/openclaw/pull/119449)
- Reuse canonical plugin error coercion across seven integrations [#119451](https://github.com/openclaw/openclaw/pull/119451)
- Share Control UI sidebar menu renderers [#119452](https://github.com/openclaw/openclaw/pull/119452)
- Guard clone-tee cancellation in provider binary errors [#119457](https://github.com/openclaw/openclaw/pull/119457)
- Add built-CLI proof for TUI session lifecycle and resume [#119465](https://github.com/openclaw/openclaw/pull/119465)
- Keep plugin install-persistence fixtures registry-valid [#119489](https://github.com/openclaw/openclaw/pull/119489)
- Align private QA scenarios with their provider lanes [#119491](https://github.com/openclaw/openclaw/pull/119491)
- Release parent channel leases before parity workers [#119492](https://github.com/openclaw/openclaw/pull/119492)
- Require a fresh reply in the memory-recall QA scenario [#119493](https://github.com/openclaw/openclaw/pull/119493)
- Clean QA Gateway temp roots on startup failure [#119494](https://github.com/openclaw/openclaw/pull/119494)
- Require redaction QA to prove synthetic secret reads [#119495](https://github.com/openclaw/openclaw/pull/119495)
- Strengthen session-memory ranking QA proof [#119496](https://github.com/openclaw/openclaw/pull/119496)
- Make persona QA reject silent and unsafe conversations [#119497](https://github.com/openclaw/openclaw/pull/119497)
- Keep live-provider smoke tests out of mock lanes [#119498](https://github.com/openclaw/openclaw/pull/119498)
- Preserve native identities in channel QA simulations [#119499](https://github.com/openclaw/openclaw/pull/119499)
- Isolate Active Memory QA request traces [#119502](https://github.com/openclaw/openclaw/pull/119502)
- Limit throttled local `tsgo` checks to one CPU [#119517](https://github.com/openclaw/openclaw/pull/119517)
- Keep QA profile runs aligned with scenario contracts [#119519](https://github.com/openclaw/openclaw/pull/119519)
- Preserve QA child output when CLI steps time out [#119524](https://github.com/openclaw/openclaw/pull/119524)
- Reject unsafe web-fetch benchmark counts [#119533](https://github.com/openclaw/openclaw/pull/119533)
- Balance constrained local tsgo CPU use [#119542](https://github.com/openclaw/openclaw/pull/119542)
- Add a subagent concurrency benchmark [#119569](https://github.com/openclaw/openclaw/pull/119569)
- Isolate Matrix wrong-key recovery QA accounts [#119571](https://github.com/openclaw/openclaw/pull/119571)
- Preserve QA profile evidence when a run times out [#119572](https://github.com/openclaw/openclaw/pull/119572)
- Stop label-driven PR automation churn [#119610](https://github.com/openclaw/openclaw/pull/119610)
- Remove obsolete Android chat rendering paths [#119615](https://github.com/openclaw/openclaw/pull/119615)
- Speed up state-heavy SQLite tests [#119617](https://github.com/openclaw/openclaw/pull/119617)
- Exercise WhatsApp credential persistence through real file descriptors [#119621](https://github.com/openclaw/openclaw/pull/119621)
- Fix stale service-worker controller observation in Chromium E2E [#119622](https://github.com/openclaw/openclaw/pull/119622)
- Consolidate QA scenario runtime helpers [#119623](https://github.com/openclaw/openclaw/pull/119623)
- Consolidate Codex approval and elicitation ownership [#119626](https://github.com/openclaw/openclaw/pull/119626)
- Deduplicate bundled provider model catalogs [#119627](https://github.com/openclaw/openclaw/pull/119627)
- Consolidate the OpenAI ChatGPT OAuth flow [#119628](https://github.com/openclaw/openclaw/pull/119628)
- Align unattended maintainer workflow skills [#119629](https://github.com/openclaw/openclaw/pull/119629)
- Consolidate Lobster approval workflow execution [#119630](https://github.com/openclaw/openclaw/pull/119630)
- Consolidate Memory Core synchronization and dreaming helpers [#119633](https://github.com/openclaw/openclaw/pull/119633)
- Consolidate transcript persistence and export ownership [#119634](https://github.com/openclaw/openclaw/pull/119634)
- Stabilize tuple-derived Plugin SDK baselines [#119635](https://github.com/openclaw/openclaw/pull/119635)
- Consolidate cron catch-up persistence and payload encoding [#119636](https://github.com/openclaw/openclaw/pull/119636)
- Unify guarded subagent lifecycle cleanup [#119637](https://github.com/openclaw/openclaw/pull/119637)
- Unify conversation binding ownership paths [#119638](https://github.com/openclaw/openclaw/pull/119638)
- Unify agent session projection and summary helpers [#119639](https://github.com/openclaw/openclaw/pull/119639)
- Consolidate Skills Workshop CLI dispatch [#119640](https://github.com/openclaw/openclaw/pull/119640)
- Consolidate Gateway chat cancellation authorization [#119642](https://github.com/openclaw/openclaw/pull/119642)
- Consolidate Skills Workshop transcript and record normalization [#119643](https://github.com/openclaw/openclaw/pull/119643)
- Unify media-generation task lifecycle ownership [#119645](https://github.com/openclaw/openclaw/pull/119645)
- Centralize managed service lifecycle policy [#119647](https://github.com/openclaw/openclaw/pull/119647)
- Centralize Control UI composer attachment and capability controls [#119650](https://github.com/openclaw/openclaw/pull/119650)
- Unify media provider discovery [#119651](https://github.com/openclaw/openclaw/pull/119651)
- Preserve QA Lab Control UI choices across run modes [#119656](https://github.com/openclaw/openclaw/pull/119656)
- Install cold-cache Chromium where browser tests expect it [#119658](https://github.com/openclaw/openclaw/pull/119658)
- Capitalize Gateway in restart guidance [#119659](https://github.com/openclaw/openclaw/pull/119659)
- Make QA channel verdicts reject deleted replies and active failures [#119660](https://github.com/openclaw/openclaw/pull/119660)
- Require exact-run evidence for model-switch QA [#119662](https://github.com/openclaw/openclaw/pull/119662)
- Verify Matrix DM session identity in QA scenarios [#119663](https://github.com/openclaw/openclaw/pull/119663)
- Refresh generated native app locale artifacts [#119669](https://github.com/openclaw/openclaw/pull/119669)
- Reuse SQLite fixtures in skills tests [#119673](https://github.com/openclaw/openclaw/pull/119673)
- Recognize portable Slack commentary in QA Lab [#119698](https://github.com/openclaw/openclaw/pull/119698)
- Speed up the Code Mode budget test [#119699](https://github.com/openclaw/openclaw/pull/119699)
- Unify Crabbox managed-provider readiness on doctor results [#119700](https://github.com/openclaw/openclaw/pull/119700)
- Report QA Lab cleanup failures truthfully [#119727](https://github.com/openclaw/openclaw/pull/119727)
- Isolate agent concurrency benchmark workers [#119749](https://github.com/openclaw/openclaw/pull/119749)
- Attest actual QA profile executions [#119761](https://github.com/openclaw/openclaw/pull/119761)
- Keep TUI PTY suites out of the generic Gateway E2E lane [#119787](https://github.com/openclaw/openclaw/pull/119787)
- Release Zalo test databases before Windows cleanup [#119809](https://github.com/openclaw/openclaw/pull/119809)
- Update Doctor E2E fixture contracts [#119812](https://github.com/openclaw/openclaw/pull/119812)
- Modernize auth billing E2E fixtures [#119821](https://github.com/openclaw/openclaw/pull/119821)
- Add a durable task-registry churn benchmark [#119828](https://github.com/openclaw/openclaw/pull/119828)
- Isolate consecutive agent spawn benchmark samples [#119859](https://github.com/openclaw/openclaw/pull/119859)
- Stop pnpm from reconciling shared worktree dependencies [#119863](https://github.com/openclaw/openclaw/pull/119863)
- Add protected npm placeholder publishing [#119875](https://github.com/openclaw/openclaw/pull/119875)
- Prevent cold models-list alias test timeouts [#119876](https://github.com/openclaw/openclaw/pull/119876)
- Stabilize QA timeout guard assertions [#119889](https://github.com/openclaw/openclaw/pull/119889)
- Fail PR operations early when temporary storage is unavailable [#119890](https://github.com/openclaw/openclaw/pull/119890)
- Report seeded changelog contribution provenance accurately [#119897](https://github.com/openclaw/openclaw/pull/119897)
- Validate QA scenario provider lanes at catalog load [#119908](https://github.com/openclaw/openclaw/pull/119908)
- Restore post-compaction usage in command E2E coverage [#119911](https://github.com/openclaw/openclaw/pull/119911)
- Allow valid OTel startup telemetry in restart QA test [#119928](https://github.com/openclaw/openclaw/pull/119928)
- Isolate subagent lifecycle registry restore in E2E tests [#119931](https://github.com/openclaw/openclaw/pull/119931)
- Stream JSON release-preparation child output [#119951](https://github.com/openclaw/openclaw/pull/119951)
- Shorten macOS Docker E2E socket paths [#119952](https://github.com/openclaw/openclaw/pull/119952)
- Restore the Matrix provider-selection test fixture [#119953](https://github.com/openclaw/openclaw/pull/119953)
- Consolidate duplicated test cases into scenario tables [#119973](https://github.com/openclaw/openclaw/pull/119973)
- Derive QA scenario runtime APIs from typed dependencies [#119974](https://github.com/openclaw/openclaw/pull/119974)
- Consolidate Control UI E2E suite setup [#119978](https://github.com/openclaw/openclaw/pull/119978)
- Consolidate duplicated test assertion and HTTP fixtures [#119982](https://github.com/openclaw/openclaw/pull/119982)
- Centralize channel reaction and audio-preflight runtimes [#119987](https://github.com/openclaw/openclaw/pull/119987)
- Isolate models-list E2E from live catalog discovery [#119990](https://github.com/openclaw/openclaw/pull/119990)
- Add rolling v3/v4 Gateway node compatibility coverage [#119991](https://github.com/openclaw/openclaw/pull/119991)
- Separate Matrix QA preparation from behavior timing [#119996](https://github.com/openclaw/openclaw/pull/119996)
- Settle QA Lab Unix commands after process-group cleanup [#120010](https://github.com/openclaw/openclaw/pull/120010)
- refactor(agents): share media action resolution [#120014](https://github.com/openclaw/openclaw/pull/120014)
- Reset Matrix QA scenario configuration between runs [#120017](https://github.com/openclaw/openclaw/pull/120017)
- Harden queued-message custody after provider aborts [#120031](https://github.com/openclaw/openclaw/pull/120031)
- Compress repetitive fixtures in large test suites [#120055](https://github.com/openclaw/openclaw/pull/120055)
- Mirror Docker release images to Vercel Container Registry [#120058](https://github.com/openclaw/openclaw/pull/120058)
- Replace logic-bearing test mocks with real runtime modules [#120063](https://github.com/openclaw/openclaw/pull/120063)
- Remove stale English Control UI translation keys [#120064](https://github.com/openclaw/openclaw/pull/120064)
- Consolidate Codex app-server test fixtures [#120065](https://github.com/openclaw/openclaw/pull/120065)
- Refresh generated Control UI locale artifacts [#120068](https://github.com/openclaw/openclaw/pull/120068)
- Deduplicate repeated test blocks [#120071](https://github.com/openclaw/openclaw/pull/120071)
- Restore current-main CI test baselines [#120080](https://github.com/openclaw/openclaw/pull/120080)
- Provision Android resources for frozen current-contract CI [#120081](https://github.com/openclaw/openclaw/pull/120081)
- Correct file-write symlink policy tests [#120082](https://github.com/openclaw/openclaw/pull/120082)
- Isolate the private Telegram QA harness from npm candidates [#120088](https://github.com/openclaw/openclaw/pull/120088)
- Restart shared test Gateways after migration convergence [#120089](https://github.com/openclaw/openclaw/pull/120089)
- Repair the Control UI parity test fixture contract [#120090](https://github.com/openclaw/openclaw/pull/120090)
- Retry one manual Gateway launch after migration convergence [#120091](https://github.com/openclaw/openclaw/pull/120091)
- Align WhatsApp prerelease catalog validation [#120092](https://github.com/openclaw/openclaw/pull/120092)
- Reject invalid oxlint shard selectors [#120096](https://github.com/openclaw/openclaw/pull/120096)
- refactor(oc-path): share frontmatter formatting [#120098](https://github.com/openclaw/openclaw/pull/120098)
- Preserve queued WebSocket frames in OpenClawKit tests [#120106](https://github.com/openclaw/openclaw/pull/120106)
- Supply prerelease plugin companions to upgrade QA [#120107](https://github.com/openclaw/openclaw/pull/120107)
- Consolidate repeated agent and auto-reply test cases [#120109](https://github.com/openclaw/openclaw/pull/120109)
- fix(i18n): keep surrogate pairs intact when bounding process output tail [#120114](https://github.com/openclaw/openclaw/pull/120114)
- Replace lifecycle test replicas with real owners [#120117](https://github.com/openclaw/openclaw/pull/120117)
- Reuse the shared chat-host fixture across Control UI tests [#120120](https://github.com/openclaw/openclaw/pull/120120)
- Compress repeated fixtures in large tests [#120124](https://github.com/openclaw/openclaw/pull/120124)
- fix(bench): keep surrogate pairs intact when truncating probe error messages [#120125](https://github.com/openclaw/openclaw/pull/120125)
- Restore Gateway startup environment after test servers [#120137](https://github.com/openclaw/openclaw/pull/120137)
- Stabilize macOS gateway session tests [#120141](https://github.com/openclaw/openclaw/pull/120141)
- Add real occupied-port coverage for Microsoft Teams startup [#120158](https://github.com/openclaw/openclaw/pull/120158)
- Allow frozen release targets to omit newer validation scenarios [#120166](https://github.com/openclaw/openclaw/pull/120166)
- refactor(ios): share voice permission support [#120176](https://github.com/openclaw/openclaw/pull/120176)
- Accept verified companion packages in prerelease registries [#120186](https://github.com/openclaw/openclaw/pull/120186)
- Isolate the packaged Telegram QA harness [#120193](https://github.com/openclaw/openclaw/pull/120193)
- Isolate approval Gateway E2E startup [#120195](https://github.com/openclaw/openclaw/pull/120195)
- Skip built-CLI-only cases in source-mode TUI smoke tests [#120221](https://github.com/openclaw/openclaw/pull/120221)
- Add regression coverage for OTEL exporter contracts [#120261](https://github.com/openclaw/openclaw/pull/120261)
- Retire the dead ClawSweeper commit dispatch [#120281](https://github.com/openclaw/openclaw/pull/120281)
- Default whitespace-only wrapper delay values [#120284](https://github.com/openclaw/openclaw/pull/120284)
- Preserve canonical coverage in standalone QA evidence [#120286](https://github.com/openclaw/openclaw/pull/120286)
- Replace policy-heavy test mocks with real collaborators [#120291](https://github.com/openclaw/openclaw/pull/120291)
- Compress repetitive mega-test fixtures [#120294](https://github.com/openclaw/openclaw/pull/120294)
- Prevent false package update-restart failures [#120300](https://github.com/openclaw/openclaw/pull/120300)
- Add gateway E2E proof for Agent Plugins [#120303](https://github.com/openclaw/openclaw/pull/120303)
- Accept neutral scheduled outcomes in hosted release gates [#120310](https://github.com/openclaw/openclaw/pull/120310)
- Align hosted landing gates with workflow applicability [#120313](https://github.com/openclaw/openclaw/pull/120313)
- Add managed-worktree CLI lifecycle QA coverage [#120335](https://github.com/openclaw/openclaw/pull/120335)
- Adopt exact child runs in release validation [#120342](https://github.com/openclaw/openclaw/pull/120342)
- Harden hydrated dead-export scans [#120365](https://github.com/openclaw/openclaw/pull/120365)
- Prepare repository metadata for 2026.8.1 [#120375](https://github.com/openclaw/openclaw/pull/120375)
- Honor indirect Windows targets in Crabbox CI commands [#120395](https://github.com/openclaw/openclaw/pull/120395)
- Split embedded run lifecycle tests to satisfy lint limits [#120397](https://github.com/openclaw/openclaw/pull/120397)
- Update ClickClack account snapshots for native progress [#120410](https://github.com/openclaw/openclaw/pull/120410)
- Derive QA-Lab UX Matrix status from producer evidence [#120418](https://github.com/openclaw/openclaw/pull/120418)
- Make release merge-tree lint reliable [#120421](https://github.com/openclaw/openclaw/pull/120421)
- Tolerate delayed GitHub run titles during release validation [#120427](https://github.com/openclaw/openclaw/pull/120427)
- Restore queue and MCP CI checks [#120438](https://github.com/openclaw/openclaw/pull/120438)
- Restore typechecking for reply admission session keys [#120441](https://github.com/openclaw/openclaw/pull/120441)
- Open standalone mock catalog sessions without crashing [#120444](https://github.com/openclaw/openclaw/pull/120444)
- Restore real Codex continuity coverage [#120452](https://github.com/openclaw/openclaw/pull/120452)
- Prevent false CLI-help build timeouts [#120454](https://github.com/openclaw/openclaw/pull/120454)
- refactor(android): reuse node JSON param parser [#120456](https://github.com/openclaw/openclaw/pull/120456)
- Isolate embedded-agent SQLite state between tests [#120459](https://github.com/openclaw/openclaw/pull/120459)
- Consolidate repair sweeps into one maintainer skill [#120465](https://github.com/openclaw/openclaw/pull/120465)
- Retry release child adoption through GitHub visibility lag [#120477](https://github.com/openclaw/openclaw/pull/120477)
- Repair prerelease upgrade and Windows ReDoS validation lanes [#120479](https://github.com/openclaw/openclaw/pull/120479)
- Bound Control UI Git metadata reads [#120490](https://github.com/openclaw/openclaw/pull/120490)
- Restore deterministic CI owner boundaries [#120501](https://github.com/openclaw/openclaw/pull/120501)
- Isolate Gateway startup sidecars between test cases [#120503](https://github.com/openclaw/openclaw/pull/120503)
- Regenerate the Swift gateway model after a schema change [#120514](https://github.com/openclaw/openclaw/pull/120514)
- Add stable-maturity signals to release audits [#120515](https://github.com/openclaw/openclaw/pull/120515)
- Clear Mantis proof reactions with one App identity [#120523](https://github.com/openclaw/openclaw/pull/120523)
- Route cacheable PR reads through Octopool [#120525](https://github.com/openclaw/openclaw/pull/120525)
- Use Crabbox fallback SSH ports for QA proofs [#120539](https://github.com/openclaw/openclaw/pull/120539)
- Narrow GitHub Copilot's lazy runtime facade [#120544](https://github.com/openclaw/openclaw/pull/120544)
- Centralize channel health projection [#120552](https://github.com/openclaw/openclaw/pull/120552)
- Keep prerelease companions exact in cross-OS checks [#120556](https://github.com/openclaw/openclaw/pull/120556)
- Isolate managed-worktree migration tests from plugin discovery [#120564](https://github.com/openclaw/openclaw/pull/120564)
- Remove an unreachable fork-push retry from PR tooling [#120565](https://github.com/openclaw/openclaw/pull/120565)
- refactor(qa): reuse canonical string normalization [#120566](https://github.com/openclaw/openclaw/pull/120566)
- Defer QA model choices to source-owned defaults [#120590](https://github.com/openclaw/openclaw/pull/120590)
- Unify the visible board dock type [#120605](https://github.com/openclaw/openclaw/pull/120605)
- Use Crabbox's resolved SSH endpoint in Telegram proof runs [#120611](https://github.com/openclaw/openclaw/pull/120611)
- Avoid reverse-copy scans in trajectory export [#120612](https://github.com/openclaw/openclaw/pull/120612)
- Dispatch release validation through an exact temporary target ref [#120613](https://github.com/openclaw/openclaw/pull/120613)
- Synchronize the Android camera PTZ locale resource [#120614](https://github.com/openclaw/openclaw/pull/120614)
- Register missing dependency ownership metadata [#120615](https://github.com/openclaw/openclaw/pull/120615)
- Make plugin tarball validation portable on Windows [#120619](https://github.com/openclaw/openclaw/pull/120619)
- Isolate the source-performance gateway fixture [#120620](https://github.com/openclaw/openclaw/pull/120620)
- Run every changed-scope routing suite in CI [#120625](https://github.com/openclaw/openclaw/pull/120625)
- Keep shared E2E build artifacts stable across parallel workers [#120628](https://github.com/openclaw/openclaw/pull/120628)
- Add a guarded Telegram beta-validation deferral [#120630](https://github.com/openclaw/openclaw/pull/120630)
- Derive the diagnostics OTEL test package version [#120636](https://github.com/openclaw/openclaw/pull/120636)
- Align successful Codex tool metadata expectation [#120637](https://github.com/openclaw/openclaw/pull/120637)
- Move state-migration policy into configuration readiness [#120641](https://github.com/openclaw/openclaw/pull/120641)
- Stabilize dependency-pin timeout coverage [#120642](https://github.com/openclaw/openclaw/pull/120642)
- Canonicalize the macOS bootstrap export test fixture [#120644](https://github.com/openclaw/openclaw/pull/120644)
- Isolate performance probes from scheduled Gateway work [#120648](https://github.com/openclaw/openclaw/pull/120648)
- Parse merge completion comment URLs structurally [#120649](https://github.com/openclaw/openclaw/pull/120649)
- Keep fork E2E setup builds observable and cancellable [#120653](https://github.com/openclaw/openclaw/pull/120653)
- Retry transient artifact metadata reads in release checks [#120654](https://github.com/openclaw/openclaw/pull/120654)
- Keep base upgrade validation hermetic [#120666](https://github.com/openclaw/openclaw/pull/120666)
- Keep beta survivor plugin repair hermetic [#120677](https://github.com/openclaw/openclaw/pull/120677)
- Restore beta upgrade-survivor validation [#120680](https://github.com/openclaw/openclaw/pull/120680)
- Run ClawHub prepublish validation from isolated directories [#120692](https://github.com/openclaw/openclaw/pull/120692)
- Extend the watchdog for cold migration proofs [#120700](https://github.com/openclaw/openclaw/pull/120700)
- Preserve the ClawHub fixture across restart tests [#120709](https://github.com/openclaw/openclaw/pull/120709)
- Bind QA protocol evidence to the correct base [#120710](https://github.com/openclaw/openclaw/pull/120710)
- Unify Doctor legacy-state migrations behind one plugin path [#120716](https://github.com/openclaw/openclaw/pull/120716)
- Clean up the rewind confirmation popover [#120719](https://github.com/openclaw/openclaw/pull/120719)
- Make Memory Host session tests reliable on Windows [#120720](https://github.com/openclaw/openclaw/pull/120720)
- Align the ClawHub security fixture with the live trust contract [#120725](https://github.com/openclaw/openclaw/pull/120725)
- Fold node pairing into the paired-device owner [#120726](https://github.com/openclaw/openclaw/pull/120726)
- Stabilize Control UI history and reconnect E2E checks [#120732](https://github.com/openclaw/openclaw/pull/120732)
- Accept stale counts in historical release contribution records [#120738](https://github.com/openclaw/openclaw/pull/120738)
- Make Linux supervisor adapter tests portable on Windows [#120741](https://github.com/openclaw/openclaw/pull/120741)
- Isolate the prepublish plugin startup probe [#120749](https://github.com/openclaw/openclaw/pull/120749)
- Keep upgrade-survivor session fixtures within retention [#120778](https://github.com/openclaw/openclaw/pull/120778)
- Respect the OpenAI long-context live-test opt-in [#120798](https://github.com/openclaw/openclaw/pull/120798)
- Update Control UI QA source references [#120801](https://github.com/openclaw/openclaw/pull/120801)
- Reuse the canonical session-link contract in ClickClack [#120810](https://github.com/openclaw/openclaw/pull/120810)
- Simplify Plugin SDK type re-exports [#120814](https://github.com/openclaw/openclaw/pull/120814)
- Run audited QA scripts concurrently without shared cache races [#120816](https://github.com/openclaw/openclaw/pull/120816)
- Move legacy sandbox registry migration into Doctor [#120829](https://github.com/openclaw/openclaw/pull/120829)
- Declare Control UI workspace dependencies [#120830](https://github.com/openclaw/openclaw/pull/120830)
- Consolidate auth-profile writes and channel approval resolution [#120831](https://github.com/openclaw/openclaw/pull/120831)
- Accept explicit release provenance mappings [#120842](https://github.com/openclaw/openclaw/pull/120842)
- Remove obsolete Memory Core readonly recovery [#120844](https://github.com/openclaw/openclaw/pull/120844)
- Isolate config-recovery tests from ambient plugin state [#120847](https://github.com/openclaw/openclaw/pull/120847)
- Give the Windows SecretRef Doctor scenario timeout headroom [#120852](https://github.com/openclaw/openclaw/pull/120852)
- Reuse prepared plugin metadata during secret setup [#120863](https://github.com/openclaw/openclaw/pull/120863)
- Consolidate Gateway connection resolution [#120865](https://github.com/openclaw/openclaw/pull/120865)
- Remove Vitest-only behavior from production plugin loading [#120866](https://github.com/openclaw/openclaw/pull/120866)
- Enforce doctor compatibility removal deadlines [#120868](https://github.com/openclaw/openclaw/pull/120868)
- Prevent macOS parallel Swift tests from hanging after timeouts [#120869](https://github.com/openclaw/openclaw/pull/120869)
- Remove redundant Control UI dependencies and dead styles [#120870](https://github.com/openclaw/openclaw/pull/120870)
- Clarify message-channel validation ownership [#120872](https://github.com/openclaw/openclaw/pull/120872)
- Serialize the macOS unread test suite [#120877](https://github.com/openclaw/openclaw/pull/120877)
- Execute source-performance isolation in tests [#120878](https://github.com/openclaw/openclaw/pull/120878)
- Reuse the prepared inbound plugin registry [#120879](https://github.com/openclaw/openclaw/pull/120879)
- Simplify legacy sandbox registry migration [#120895](https://github.com/openclaw/openclaw/pull/120895)
- Fail macOS packaging early when full Xcode is unavailable [#120909](https://github.com/openclaw/openclaw/pull/120909)
- Isolate macOS parallel test state and gateway lifecycles [#120912](https://github.com/openclaw/openclaw/pull/120912)
- Update the QA Voice Call fixture to the current runtime generation [#120920](https://github.com/openclaw/openclaw/pull/120920)
- Simplify doctor deprecation registry internals [#120922](https://github.com/openclaw/openclaw/pull/120922)
- Simplify approval resolver plumbing [#120923](https://github.com/openclaw/openclaw/pull/120923)
- Simplify message channel routing internals [#120925](https://github.com/openclaw/openclaw/pull/120925)
- Simplify plugin activation compatibility paths [#120928](https://github.com/openclaw/openclaw/pull/120928)
- Simplify plugin SDK entry contracts [#120930](https://github.com/openclaw/openclaw/pull/120930)
- Acknowledge queued ClawSweeper pull-request reviews [#120934](https://github.com/openclaw/openclaw/pull/120934)
- Defer and cache channel plugin configuration schemas [#120938](https://github.com/openclaw/openclaw/pull/120938)
- Split oversized ACP translator and ledger modules [#120941](https://github.com/openclaw/openclaw/pull/120941)
- Reuse prepared channel plugins across outbound delivery [#120946](https://github.com/openclaw/openclaw/pull/120946)
- Recover titles with repeated PR suffixes [#120948](https://github.com/openclaw/openclaw/pull/120948)
- Prevent cold heartbeat admission tests from timing out [#120955](https://github.com/openclaw/openclaw/pull/120955)
- Consolidate ACP SDK runtime ownership while preserving compatibility [#120958](https://github.com/openclaw/openclaw/pull/120958)
- Reject incomplete Plugin SDK declaration caches [#120961](https://github.com/openclaw/openclaw/pull/120961)
- Simplify prepared inbound registry dispatch [#120963](https://github.com/openclaw/openclaw/pull/120963)
- Stop shared-host workers from freezing unrelated processes [#120969](https://github.com/openclaw/openclaw/pull/120969)
- Normalize stacked PR suffixes in backport verification [#120971](https://github.com/openclaw/openclaw/pull/120971)
- fix(ci): stop source-only PR fallback requiring generated locales [#120973](https://github.com/openclaw/openclaw/pull/120973)
- Remove unused plugin SDK lazy-value fallback [#120974](https://github.com/openclaw/openclaw/pull/120974)
- Detect private type changes in Plugin SDK baselines [#120975](https://github.com/openclaw/openclaw/pull/120975)
- Prefer authoritative SQLite state in upgrade-survivor checks [#120983](https://github.com/openclaw/openclaw/pull/120983)
- Restore frozen extended-stable package validation [#120986](https://github.com/openclaw/openclaw/pull/120986)
- Prevent duplicate ClawSweeper PR acknowledgements [#120990](https://github.com/openclaw/openclaw/pull/120990)
- Remove the accidental core Chutes OAuth shim [#120993](https://github.com/openclaw/openclaw/pull/120993)
- Consolidate duplicated async and temporary-directory test helpers [#120996](https://github.com/openclaw/openclaw/pull/120996)
- Route UI E2E pull-request retries to hosted runners [#120997](https://github.com/openclaw/openclaw/pull/120997)
- Make TypeScript the source of truth for repository scripts [#121005](https://github.com/openclaw/openclaw/pull/121005)
- Enable Telegram in the isolated startup QA fixture [#121010](https://github.com/openclaw/openclaw/pull/121010)
- Record SSH QA preflight blocks as structured evidence [#121011](https://github.com/openclaw/openclaw/pull/121011)
- Consolidate session patch mutations under one SQLite owner [#121017](https://github.com/openclaw/openclaw/pull/121017)
- Scope Slack QA capture evidence to the active channel [#121053](https://github.com/openclaw/openclaw/pull/121053)
- Require fresh Matrix readiness after QA restarts [#121060](https://github.com/openclaw/openclaw/pull/121060)
- Align fresh state schemas with additive column order [#121062](https://github.com/openclaw/openclaw/pull/121062)
- Keep QA Lab live alternates on authenticated OpenAI models [#121065](https://github.com/openclaw/openclaw/pull/121065)
- Preserve SHA-pinned release-validation identity [#121080](https://github.com/openclaw/openclaw/pull/121080)
- Remove low-value implementation-coupled tests [#121085](https://github.com/openclaw/openclaw/pull/121085)
- Bootstrap trusted dependencies for Docker release planning [#121088](https://github.com/openclaw/openclaw/pull/121088)
- Unify prepared reply dispatch state [#121089](https://github.com/openclaw/openclaw/pull/121089)
- Consolidate Telegram outbound topic preparation [#121095](https://github.com/openclaw/openclaw/pull/121095)
- Repair frozen-shard sparse checkout after script rename [#121097](https://github.com/openclaw/openclaw/pull/121097)
- Prevent false failures after successful PR merges [#121101](https://github.com/openclaw/openclaw/pull/121101)
- Add a maintainer test-audit workflow [#121110](https://github.com/openclaw/openclaw/pull/121110)
- Remove stale MiniMax core mirror tests [#121120](https://github.com/openclaw/openclaw/pull/121120)
- Add minimal gateway startup coverage to the gateway CI lane [#121134](https://github.com/openclaw/openclaw/pull/121134)
- Remove assertion-free macOS coverage helpers [#121139](https://github.com/openclaw/openclaw/pull/121139)
- Remove the unused plugin state lease API [#121140](https://github.com/openclaw/openclaw/pull/121140)
- Resolve externally hydrated tsx for direct scripts [#121149](https://github.com/openclaw/openclaw/pull/121149)
- Carve explicit Gateway agent-turn types [#121160](https://github.com/openclaw/openclaw/pull/121160)
- Preserve Xcode preflight failure diagnostics [#121170](https://github.com/openclaw/openclaw/pull/121170)
- Isolate gateway agent-turn response emission [#121189](https://github.com/openclaw/openclaw/pull/121189)
- Remove redundant Plugin SDK descriptor tests and helpers [#121190](https://github.com/openclaw/openclaw/pull/121190)
- Exercise iMessage chat lookup through the runtime boundary [#121205](https://github.com/openclaw/openclaw/pull/121205)
- Verify Cloud Worker reset by process-group liveness [#121206](https://github.com/openclaw/openclaw/pull/121206)
- Support frozen candidates across script migrations [#121208](https://github.com/openclaw/openclaw/pull/121208)
- Add a real-wire Gateway session boundary test harness [#121212](https://github.com/openclaw/openclaw/pull/121212)
- Separate gateway agent turns from RPC transport [#121215](https://github.com/openclaw/openclaw/pull/121215)
- Build frozen Docker artifacts through each source package [#121216](https://github.com/openclaw/openclaw/pull/121216)
- Add a typed internal gateway path for recovery agent turns [#121223](https://github.com/openclaw/openclaw/pull/121223)
- Remove retired QA migration ledgers and restore dependency pinning [#121229](https://github.com/openclaw/openclaw/pull/121229)
- Relocate agent-turn modules behind the Gateway boundary [#121241](https://github.com/openclaw/openclaw/pull/121241)
- Simplify internal agent and reply test seams [#121243](https://github.com/openclaw/openclaw/pull/121243)
- Reuse plugin generations during auth refresh [#121250](https://github.com/openclaw/openclaw/pull/121250)
- Reuse one immutable Docker QA candidate [#121253](https://github.com/openclaw/openclaw/pull/121253)
- Move channel-specific policy into plugins [#121257](https://github.com/openclaw/openclaw/pull/121257)
- Remove brittle Control UI source-mirror tests [#121266](https://github.com/openclaw/openclaw/pull/121266)
- Consolidate WebSocket payload decoding [#121268](https://github.com/openclaw/openclaw/pull/121268)
- Trim duplicate iOS root-shell test mirrors [#121272](https://github.com/openclaw/openclaw/pull/121272)
- Add a golden corpus for failover classification [#121289](https://github.com/openclaw/openclaw/pull/121289)
- Remove a private Zalo rate-limit test seam [#121290](https://github.com/openclaw/openclaw/pull/121290)
- Restore Telegram usage-limit reply regression coverage [#121291](https://github.com/openclaw/openclaw/pull/121291)
- Remove a redundant Telegram usage-limit assertion [#121292](https://github.com/openclaw/openclaw/pull/121292)
- Move swarm internals into the subagents directory [#121295](https://github.com/openclaw/openclaw/pull/121295)
- Exercise Gateway schema caching through request handlers [#121298](https://github.com/openclaw/openclaw/pull/121298)
- Add a CI ratchet for exported-name collisions [#121300](https://github.com/openclaw/openclaw/pull/121300)
- Consolidate media-generation concern modules [#121302](https://github.com/openclaw/openclaw/pull/121302)
- Consolidate prompt and stream attempt steps [#121305](https://github.com/openclaw/openclaw/pull/121305)
- Flatten channel-turn dispatch naming layers [#121308](https://github.com/openclaw/openclaw/pull/121308)
- Remove an assertion-free session-history test [#121310](https://github.com/openclaw/openclaw/pull/121310)
- Remove duplicate core utility wrappers [#121312](https://github.com/openclaw/openclaw/pull/121312)
- Enforce session writer fencing at SQLite write definitions [#121316](https://github.com/openclaw/openclaw/pull/121316)
- Remove duplicate Discord inbound-context test coverage [#121318](https://github.com/openclaw/openclaw/pull/121318)
- Fall back locally when every remote check provider is unavailable [#121323](https://github.com/openclaw/openclaw/pull/121323)
- Canonicalize record guards on normalization-core [#121331](https://github.com/openclaw/openclaw/pull/121331)
- Restore Android coverage for the shared Talk config contract [#121333](https://github.com/openclaw/openclaw/pull/121333)
- Centralize fallback-reason schemas across workers and cron [#121334](https://github.com/openclaw/openclaw/pull/121334)
- Remove unused extension compatibility exports [#121338](https://github.com/openclaw/openclaw/pull/121338)
- Centralize Mantis request, trusted-ref, and reaction workflows [#121339](https://github.com/openclaw/openclaw/pull/121339)
- Consolidate duplicate package type and protocol surfaces [#121340](https://github.com/openclaw/openclaw/pull/121340)
- Consolidate embedded-agent session and tool steps [#121344](https://github.com/openclaw/openclaw/pull/121344)
- Remove dead runtime branches and relocate test helpers [#121345](https://github.com/openclaw/openclaw/pull/121345)
- Restore complete extension labeling and remove dead artifacts [#121348](https://github.com/openclaw/openclaw/pull/121348)
- Move subagent spawn code into its owned namespace [#121350](https://github.com/openclaw/openclaw/pull/121350)
- Remove unreachable macOS onboarding surfaces [#121352](https://github.com/openclaw/openclaw/pull/121352)
- Restore cross-file cleanup in the root test matrix [#121356](https://github.com/openclaw/openclaw/pull/121356)
- Restore subagent lifecycle seam audit coverage [#121363](https://github.com/openclaw/openclaw/pull/121363)
- Consolidate shared coercion helpers [#121366](https://github.com/openclaw/openclaw/pull/121366)
- Eliminate wrapper export shadowing hazards [#121388](https://github.com/openclaw/openclaw/pull/121388)
- Isolate Gateway network QA ports in parallel CI [#121389](https://github.com/openclaw/openclaw/pull/121389)
- Consolidate agent attempt setup, history, and finalization steps [#121393](https://github.com/openclaw/openclaw/pull/121393)
- Isolate mocked macOS Gateway probes from operator identity state [#121398](https://github.com/openclaw/openclaw/pull/121398)
- Add end-to-end coverage for provider failover sequences [#121399](https://github.com/openclaw/openclaw/pull/121399)
- Restore all private Plugin SDK workspace facades [#121404](https://github.com/openclaw/openclaw/pull/121404)
- Split CLI output parsing into focused modules [#121412](https://github.com/openclaw/openclaw/pull/121412)
- Remove no-op macOS coverage exercisers [#121413](https://github.com/openclaw/openclaw/pull/121413)
- Consolidate duplicate internal helpers [#121431](https://github.com/openclaw/openclaw/pull/121431)
- Make Control UI source builds reproducible [#121433](https://github.com/openclaw/openclaw/pull/121433)
- Split the outbound message-action runner into focused modules [#121434](https://github.com/openclaw/openclaw/pull/121434)
- Make the Gateway artifact QA scenario await steady-state startup [#121453](https://github.com/openclaw/openclaw/pull/121453)
- Prevent new same-name wrapper shadowing [#121456](https://github.com/openclaw/openclaw/pull/121456)
- Support older scripts in frozen release validation [#121458](https://github.com/openclaw/openclaw/pull/121458)
- Verify identity scopes reach workspace handlers [#121466](https://github.com/openclaw/openclaw/pull/121466)
- Clarify internal helper ownership and remove export-name collisions [#121471](https://github.com/openclaw/openclaw/pull/121471)
- Replace Plugin SDK hash manifest with a JSONL contract [#121473](https://github.com/openclaw/openclaw/pull/121473)
- Route Gateway-hosted session tools in process [#121474](https://github.com/openclaw/openclaw/pull/121474)
- Bind dependency-guard approval state to trusted metadata [#121505](https://github.com/openclaw/openclaw/pull/121505)
- Consolidate macOS Gateway readiness ownership [#121510](https://github.com/openclaw/openclaw/pull/121510)
- Make the Plugin SDK API baseline path-free and surface-reachable [#121514](https://github.com/openclaw/openclaw/pull/121514)
- Replace session accessor forwarding wrappers with aliases [#121516](https://github.com/openclaw/openclaw/pull/121516)
- Restore the generated Plugin SDK API baseline [#121527](https://github.com/openclaw/openclaw/pull/121527)
- Collapse duplicate session-accessor export names [#121536](https://github.com/openclaw/openclaw/pull/121536)
- Consolidate Control UI session-pin tests [#121539](https://github.com/openclaw/openclaw/pull/121539)
- Remove duplicate re-export and planner tests [#121547](https://github.com/openclaw/openclaw/pull/121547)
- Repair Docker QA script entrypoints [#121548](https://github.com/openclaw/openclaw/pull/121548)
- Standardize embedded-agent attempt helper filenames [#121550](https://github.com/openclaw/openclaw/pull/121550)
- refactor(agents): type the reply failover seam and carry structured attempts [#121551](https://github.com/openclaw/openclaw/pull/121551)
- Organize subagent runtime families into concept directories [#121553](https://github.com/openclaw/openclaw/pull/121553)
- Remove a stale Plugin SDK source-layout test [#121556](https://github.com/openclaw/openclaw/pull/121556)
- Split ClawHub infrastructure into focused modules [#121565](https://github.com/openclaw/openclaw/pull/121565)
- Remove the onboarding inference test bridge [#121574](https://github.com/openclaw/openclaw/pull/121574)
- Remove obsolete Control UI test mirrors [#121607](https://github.com/openclaw/openclaw/pull/121607)
- Stabilize the Control UI reconnect test [#121609](https://github.com/openclaw/openclaw/pull/121609)
- Remove unused per-agent state lease path [#121615](https://github.com/openclaw/openclaw/pull/121615)
- Remove retired OpenAI catalog export and standardize OC Path pattern checks [#121621](https://github.com/openclaw/openclaw/pull/121621)
- Remove unreachable subagent state variants [#121631](https://github.com/openclaw/openclaw/pull/121631)
- Refresh Plugin SDK QA polling baseline hashes [#121640](https://github.com/openclaw/openclaw/pull/121640)
- Centralize cloud-worker placement ownership checks [#121658](https://github.com/openclaw/openclaw/pull/121658)
- Stabilize mobile drawer focus E2E [#121663](https://github.com/openclaw/openclaw/pull/121663)
- Refresh the Plugin SDK API verification baseline [#121670](https://github.com/openclaw/openclaw/pull/121670)
- Split gateway request-context ownership facets [#121706](https://github.com/openclaw/openclaw/pull/121706)
- Refresh generated configuration baseline hashes [#121714](https://github.com/openclaw/openclaw/pull/121714)
- Migrate internal agent turns to the typed facade [#121715](https://github.com/openclaw/openclaw/pull/121715)
- Restore runtime validation and lifecycle payload contracts [#121716](https://github.com/openclaw/openclaw/pull/121716)
- Remove a redundant embedded-agent retry test case [#121718](https://github.com/openclaw/openclaw/pull/121718)
- Require embedded-agent live-edit diff state [#121722](https://github.com/openclaw/openclaw/pull/121722)
- Trim unused web-provider test surfaces [#121727](https://github.com/openclaw/openclaw/pull/121727)
- Trim ACPX private runtime test assertions [#121732](https://github.com/openclaw/openclaw/pull/121732)
- Remove redundant tooling test coverage [#121736](https://github.com/openclaw/openclaw/pull/121736)
- Remove a persistence-helper call-count assertion [#121742](https://github.com/openclaw/openclaw/pull/121742)
- Remove duplicate gateway benchmark helper tests [#121745](https://github.com/openclaw/openclaw/pull/121745)
- Refresh generated Swift approval models [#121746](https://github.com/openclaw/openclaw/pull/121746)
- Remove misleading Tailscale probe-session test seam [#121748](https://github.com/openclaw/openclaw/pull/121748)
- Repair Skill Workshop CI fallout [#121751](https://github.com/openclaw/openclaw/pull/121751)
- Remove the Doctor auth test-only private bridge [#121754](https://github.com/openclaw/openclaw/pull/121754)
- Remove orphan extension test API barrels [#121761](https://github.com/openclaw/openclaw/pull/121761)
- Run trusted plugin tooling against frozen source [#121762](https://github.com/openclaw/openclaw/pull/121762)
- Repair frozen release-candidate validation [#121763](https://github.com/openclaw/openclaw/pull/121763)
- Remove internal export-name collision debt [#121767](https://github.com/openclaw/openclaw/pull/121767)
- Eliminate internal export-name collisions [#121768](https://github.com/openclaw/openclaw/pull/121768)
- Remove the OpenAI schema-cache test reset seam [#121769](https://github.com/openclaw/openclaw/pull/121769)
- Remove unreachable console configuration fallback [#121776](https://github.com/openclaw/openclaw/pull/121776)
- Simplify retained chat-session internals [#121777](https://github.com/openclaw/openclaw/pull/121777)
- Simplify OpenAI turn-latency runtime ownership [#121779](https://github.com/openclaw/openclaw/pull/121779)
- Remove duplicate restart progress recovery test [#121781](https://github.com/openclaw/openclaw/pull/121781)
- Make cold-cache test type checks deterministic [#121783](https://github.com/openclaw/openclaw/pull/121783)
- Preserve frozen release-candidate identity and context [#121786](https://github.com/openclaw/openclaw/pull/121786)
- Remove the aggregate agent-command test facade [#121789](https://github.com/openclaw/openclaw/pull/121789)
- Restore frozen beta release validation [#121791](https://github.com/openclaw/openclaw/pull/121791)
- Keep the UI output-root guard at the real build boundary [#121794](https://github.com/openclaw/openclaw/pull/121794)
- Remove the gateway metadata test facade [#121801](https://github.com/openclaw/openclaw/pull/121801)
- Simplify QA Gateway lifecycle state [#121809](https://github.com/openclaw/openclaw/pull/121809)
- Remove duplicate Webchat audio test wrapper [#121810](https://github.com/openclaw/openclaw/pull/121810)
- Remove body-only macOS view probes [#121820](https://github.com/openclaw/openclaw/pull/121820)
- Remove duplicate update-confirmation unit cases [#121836](https://github.com/openclaw/openclaw/pull/121836)
- Make the Plugin SDK API baseline merge-friendly [#121842](https://github.com/openclaw/openclaw/pull/121842)
- Report aliased re-exports in the collision checker [#121849](https://github.com/openclaw/openclaw/pull/121849)
- Centralize background process cancellation ownership [#121854](https://github.com/openclaw/openclaw/pull/121854)
- Consolidate core promise-like guards [#121861](https://github.com/openclaw/openclaw/pull/121861)
- Remove a duplicate dark-theme contrast test [#121862](https://github.com/openclaw/openclaw/pull/121862)
- Remove duplicate stuck-session recovery test coverage [#121864](https://github.com/openclaw/openclaw/pull/121864)
- Remove stale macOS Canvas test helpers [#121866](https://github.com/openclaw/openclaw/pull/121866)
- Clarify persistence ownership and eliminate export collisions [#121870](https://github.com/openclaw/openclaw/pull/121870)
- Consolidate CLI token usage normalization [#121873](https://github.com/openclaw/openclaw/pull/121873)
- Remove the brittle provider-family meta-test [#121875](https://github.com/openclaw/openclaw/pull/121875)
- Retry fresh artifact metadata reads in release validation [#121876](https://github.com/openclaw/openclaw/pull/121876)
- Speed up doctor contract parity validation [#121878](https://github.com/openclaw/openclaw/pull/121878)
- Remove orphan internal test aliases [#121879](https://github.com/openclaw/openclaw/pull/121879)
- Consolidate outbound message-action test fixtures [#121882](https://github.com/openclaw/openclaw/pull/121882)
- Speed up ACP spawn test execution [#121885](https://github.com/openclaw/openclaw/pull/121885)
- Remove the duplicate llama.cpp progress test bridge [#121886](https://github.com/openclaw/openclaw/pull/121886)
- Remove internal Plugin SDK export-name collisions [#121888](https://github.com/openclaw/openclaw/pull/121888)
- Remove a self-tested Gateway helper wrapper [#121889](https://github.com/openclaw/openclaw/pull/121889)
- Speed up Crabbox wrapper tests with one prebuilt bundle [#121891](https://github.com/openclaw/openclaw/pull/121891)
- Resolve internal export-name collisions [#121893](https://github.com/openclaw/openclaw/pull/121893)
- Simplify embedded runner subscription and blocked state [#121896](https://github.com/openclaw/openclaw/pull/121896)
- Move OpenRouter failover policy to its plugin [#121898](https://github.com/openclaw/openclaw/pull/121898)
- Split the message tool into focused modules [#121901](https://github.com/openclaw/openclaw/pull/121901)
- Remove unused plugin-cache resize hooks [#121904](https://github.com/openclaw/openclaw/pull/121904)
- Remove session and heartbeat test-only bridges [#121913](https://github.com/openclaw/openclaw/pull/121913)
- Split workspace skill loading into owned modules [#121916](https://github.com/openclaw/openclaw/pull/121916)
- Scope SQLite session lifecycle CI to relevant changes [#121917](https://github.com/openclaw/openclaw/pull/121917)
- Unify subagent registry read APIs [#121918](https://github.com/openclaw/openclaw/pull/121918)
- Make outbound poll tests independent of execution order [#121923](https://github.com/openclaw/openclaw/pull/121923)
- Simplify the Control UI terminal replay lifecycle [#121925](https://github.com/openclaw/openclaw/pull/121925)
- Stabilize outbound poll validation test mocks [#121926](https://github.com/openclaw/openclaw/pull/121926)
- Split macOS launchd lifecycle code into focused modules [#121929](https://github.com/openclaw/openclaw/pull/121929)
- Separate Gateway connection state from HTTP transport [#121931](https://github.com/openclaw/openclaw/pull/121931)
- Remove retired poll tests from CI routing assertions [#121942](https://github.com/openclaw/openclaw/pull/121942)
- Retire the unused per-agent lease table [#121943](https://github.com/openclaw/openclaw/pull/121943)
- Speed up SQLite reliability tests without reducing coverage [#121952](https://github.com/openclaw/openclaw/pull/121952)
- Remove the Voyage batch-reader test bridge [#121957](https://github.com/openclaw/openclaw/pull/121957)
- Remove brittle iOS preview source mirrors [#121960](https://github.com/openclaw/openclaw/pull/121960)
- Centralize Gateway kernel readiness ownership [#121961](https://github.com/openclaw/openclaw/pull/121961)
- Move selected release workflows to Node 24.16 [#121967](https://github.com/openclaw/openclaw/pull/121967)
- Speed up Vitest project-routing tests [#121968](https://github.com/openclaw/openclaw/pull/121968)
- Split embedded-agent tool handlers into focused modules [#121974](https://github.com/openclaw/openclaw/pull/121974)
- Decouple the MinGit curl test from call order [#121977](https://github.com/openclaw/openclaw/pull/121977)
- Collapse embedded-agent stream relay layers [#121978](https://github.com/openclaw/openclaw/pull/121978)
- Extract a socket-free Gateway kernel factory [#121981](https://github.com/openclaw/openclaw/pull/121981)
- Remove duplicate SQLite test replay [#121983](https://github.com/openclaw/openclaw/pull/121983)
- Lock OAuth sidecar migration to fixed historical vectors [#121986](https://github.com/openclaw/openclaw/pull/121986)
- Consolidate duplicate plugin packaging tests [#121989](https://github.com/openclaw/openclaw/pull/121989)
- Refresh the generated config baseline checksums [#121992](https://github.com/openclaw/openclaw/pull/121992)
- Preserve explicit unknown invoker evidence in audit admission [#121994](https://github.com/openclaw/openclaw/pull/121994)
- Split the reply-run registry into concept modules [#121995](https://github.com/openclaw/openclaw/pull/121995)
- Register Gateway resident lifecycle owners [#121996](https://github.com/openclaw/openclaw/pull/121996)
- Speed up package tarball integrity tests [#121999](https://github.com/openclaw/openclaw/pull/121999)
- Consolidate SDK package QA evidence [#122001](https://github.com/openclaw/openclaw/pull/122001)
- Split systemd service internals into focused modules [#122002](https://github.com/openclaw/openclaw/pull/122002)
- Move config reloader state behind the Gateway kernel [#122004](https://github.com/openclaw/openclaw/pull/122004)
- Speed up Crabbox wrapper test fakes [#122007](https://github.com/openclaw/openclaw/pull/122007)
- Remove private audit test bridges [#122012](https://github.com/openclaw/openclaw/pull/122012)
- Finalize socket-free Gateway kernel composition [#122014](https://github.com/openclaw/openclaw/pull/122014)
- Right-size SQLite reliability fixtures and replace a hanging provider-error test [#122016](https://github.com/openclaw/openclaw/pull/122016)
- Classify the shared outbound fixture as test support [#122017](https://github.com/openclaw/openclaw/pull/122017)
- Simplify embedded-runner prompt dispatch [#122018](https://github.com/openclaw/openclaw/pull/122018)
- Remove CLI startup-metadata test bridges [#122024](https://github.com/openclaw/openclaw/pull/122024)
- Reduce CI workflow guard runtime [#122038](https://github.com/openclaw/openclaw/pull/122038)
- Remove wrapper export shadowing across runtime facades [#122040](https://github.com/openclaw/openclaw/pull/122040)
- Remove private CLI test seams [#122046](https://github.com/openclaw/openclaw/pull/122046)
- Remove the Bedrock embedding test bridge [#122049](https://github.com/openclaw/openclaw/pull/122049)
- Isolate Gateway kernel tests from shared plugin registry state [#122050](https://github.com/openclaw/openclaw/pull/122050)
- Complete the session-accessor import cleanup [#122055](https://github.com/openclaw/openclaw/pull/122055)
- Extend CI time for expanded upgrade-survivor groups [#122058](https://github.com/openclaw/openclaw/pull/122058)
- Remove the Bedrock stream test inspection bridge [#122059](https://github.com/openclaw/openclaw/pull/122059)
- Speed up Doctor preflight process coverage [#122060](https://github.com/openclaw/openclaw/pull/122060)
- Stabilize Control UI session archive and history E2E tests [#122068](https://github.com/openclaw/openclaw/pull/122068)
- Remove stale Knip configuration scaffolding [#122069](https://github.com/openclaw/openclaw/pull/122069)
- Remove macOS test-helper mirrors [#122081](https://github.com/openclaw/openclaw/pull/122081)
- Split Plugin SDK API baselines by entrypoint [#122082](https://github.com/openclaw/openclaw/pull/122082)
- Eliminate the remaining internal export-name collisions [#122083](https://github.com/openclaw/openclaw/pull/122083)
- Disambiguate internal export names [#122084](https://github.com/openclaw/openclaw/pull/122084)
- Make Control UI artifact validation consistent across CI build paths [#122086](https://github.com/openclaw/openclaw/pull/122086)
- Bound memory use in manual Android CI builds [#122088](https://github.com/openclaw/openclaw/pull/122088)
- Add CLI-backend fault-sequence boundary coverage [#122092](https://github.com/openclaw/openclaw/pull/122092)
- Centralize bundled plugin tree detection [#122093](https://github.com/openclaw/openclaw/pull/122093)
- Remove a redundant slow heartbeat admission test [#122095](https://github.com/openclaw/openclaw/pull/122095)
- Remove obsolete subagent registry seams [#122113](https://github.com/openclaw/openclaw/pull/122113)
- Centralize keyed audit-record mutations [#122116](https://github.com/openclaw/openclaw/pull/122116)
- Control UI runtime config is split into owned layers [#122117](https://github.com/openclaw/openclaw/pull/122117)
- Test onboarding formatting through real command boundaries [#122120](https://github.com/openclaw/openclaw/pull/122120)
- Split the completions transport into internal concept modules [#122122](https://github.com/openclaw/openclaw/pull/122122)
- Restore duplicate-code scans with jscpd 5 [#122124](https://github.com/openclaw/openclaw/pull/122124)
- Remove the sessions-tail test polling hook [#122127](https://github.com/openclaw/openclaw/pull/122127)
- Split the worker environment service by ownership [#122138](https://github.com/openclaw/openclaw/pull/122138)
- Track deferred commitments schema retirement [#122143](https://github.com/openclaw/openclaw/pull/122143)
- Split embedded-run warning and diagnostic ownership [#122148](https://github.com/openclaw/openclaw/pull/122148)
- Centralize requester-scoped MCP runtime creation [#122151](https://github.com/openclaw/openclaw/pull/122151)
- Remove stale OpenAI completions compatibility test bridge [#122154](https://github.com/openclaw/openclaw/pull/122154)
- Disambiguate internal wrapper and core exports [#122157](https://github.com/openclaw/openclaw/pull/122157)
- Keep CLI process tests in their isolated owner lane [#122160](https://github.com/openclaw/openclaw/pull/122160)
- Stabilize CLI loader failure injection [#122173](https://github.com/openclaw/openclaw/pull/122173)
- Consolidate Telegram bot handlers into named modules [#122174](https://github.com/openclaw/openclaw/pull/122174)
- Remove stale plugin test plumbing [#122175](https://github.com/openclaw/openclaw/pull/122175)
- Centralize typed agent activity event emission [#122188](https://github.com/openclaw/openclaw/pull/122188)
- Preserve nested tool success in model-switch QA receipts [#122189](https://github.com/openclaw/openclaw/pull/122189)
- Remove duplicate stream test coverage [#122190](https://github.com/openclaw/openclaw/pull/122190)
- Upgrade the bundled CUA Driver to 0.19.3 [#122191](https://github.com/openclaw/openclaw/pull/122191)
- Speed up CLI help process tests [#122197](https://github.com/openclaw/openclaw/pull/122197)
- Remove private macOS test-only seams [#122202](https://github.com/openclaw/openclaw/pull/122202)
- Serialize the default gateway E2E runner [#122203](https://github.com/openclaw/openclaw/pull/122203)
- Make CLI process-test failures self-diagnosing [#122205](https://github.com/openclaw/openclaw/pull/122205)
- Split embedded agent-runner policy ownership [#122209](https://github.com/openclaw/openclaw/pull/122209)
- Unify terminal chat delivery in the Gateway [#122211](https://github.com/openclaw/openclaw/pull/122211)
- Restore the standalone bundled-channel prepack smoke [#122212](https://github.com/openclaw/openclaw/pull/122212)
- Let OCM package transitive workspace dependencies [#122214](https://github.com/openclaw/openclaw/pull/122214)
- Isolate browser test fixture state [#122216](https://github.com/openclaw/openclaw/pull/122216)
- Speed up update dry-run process tests [#122218](https://github.com/openclaw/openclaw/pull/122218)
- Inline outbound delivery diagnostics [#122219](https://github.com/openclaw/openclaw/pull/122219)
- Consolidate gateway terminal restriction tracking [#122228](https://github.com/openclaw/openclaw/pull/122228)
- Make ACP CLI process checks faster and more stable [#122229](https://github.com/openclaw/openclaw/pull/122229)
- Remove duplicate cold-command process checks [#122236](https://github.com/openclaw/openclaw/pull/122236)
- Speed up gateway CLI process tests [#122240](https://github.com/openclaw/openclaw/pull/122240)
- Reduce duplicate Claw authoring process tests [#122248](https://github.com/openclaw/openclaw/pull/122248)
- Split embedded-agent subscription handling into focused owners [#122249](https://github.com/openclaw/openclaw/pull/122249)
- Consolidate duplicate MCP probe process tests [#122260](https://github.com/openclaw/openclaw/pull/122260)
- Speed up Hooks CLI process tests [#122278](https://github.com/openclaw/openclaw/pull/122278)
- Make transcode pool saturation tests deterministic [#122279](https://github.com/openclaw/openclaw/pull/122279)
- Consolidate normalization helper ownership [#122299](https://github.com/openclaw/openclaw/pull/122299)
- Trim duplicate SQLite lifecycle test tours [#122308](https://github.com/openclaw/openclaw/pull/122308)
- Use one reload-aware auth source for WebSocket connections [#122310](https://github.com/openclaw/openclaw/pull/122310)
- Split agent subscription and chat dispatch ownership [#122318](https://github.com/openclaw/openclaw/pull/122318)
- Prevent gateway test environment leakage [#122319](https://github.com/openclaw/openclaw/pull/122319)
- Keep startup plugin convergence read-only [#122330](https://github.com/openclaw/openclaw/pull/122330)
- Skip unrelated builds in the Bun launcher CI lane [#122333](https://github.com/openclaw/openclaw/pull/122333)
- Run channel contract projects in parallel [#122336](https://github.com/openclaw/openclaw/pull/122336)
- Consolidate bundled web-provider artifact resolution [#122339](https://github.com/openclaw/openclaw/pull/122339)
- Scope exact-head iOS release gates to relevant changes [#122340](https://github.com/openclaw/openclaw/pull/122340)
- Speed up the system-agent setup test [#122351](https://github.com/openclaw/openclaw/pull/122351)
- Keep gateway session-title loading request-driven [#122358](https://github.com/openclaw/openclaw/pull/122358)
- Isolate chat tests from plugin discovery [#122360](https://github.com/openclaw/openclaw/pull/122360)
- Share bounded plugin run-ID tracking [#122362](https://github.com/openclaw/openclaw/pull/122362)
- Speed up audit event writer tests [#122369](https://github.com/openclaw/openclaw/pull/122369)
- Remove duplicate config migration test work [#122381](https://github.com/openclaw/openclaw/pull/122381)
- Restore fast isolation for ACP spawn tests [#122392](https://github.com/openclaw/openclaw/pull/122392)
- Remove duplicate full Plugin SDK rendering from focused tests [#122402](https://github.com/openclaw/openclaw/pull/122402)
- Canonicalize internal aliases and classify suite support as tests [#122407](https://github.com/openclaw/openclaw/pull/122407)
- Remove redundant Doctor process tests [#122410](https://github.com/openclaw/openclaw/pull/122410)
- Simplify the model effort profile flow [#122412](https://github.com/openclaw/openclaw/pull/122412)
- Split new-session state into focused owners [#122413](https://github.com/openclaw/openclaw/pull/122413)
- Split OpenAI realtime voice by runtime layer [#122414](https://github.com/openclaw/openclaw/pull/122414)
- Split Telegram native commands into focused executors [#122419](https://github.com/openclaw/openclaw/pull/122419)
- Prune duplicate Responses tests and honor inclusive compatibility dates [#122424](https://github.com/openclaw/openclaw/pull/122424)
- test(agents): remove aggregate-lane noise from src/agents suites [#122432](https://github.com/openclaw/openclaw/pull/122432)
- Remove orphan Gateway testing aliases [#122433](https://github.com/openclaw/openclaw/pull/122433)
- Reduce main CI gating delays and add timing trends [#122441](https://github.com/openclaw/openclaw/pull/122441)
- split the CLI runner into lifecycle modules [#122442](https://github.com/openclaw/openclaw/pull/122442)
- Reduce provider auth parity test time [#122445](https://github.com/openclaw/openclaw/pull/122445)
- Keep shared Control UI tests deterministic [#122451](https://github.com/openclaw/openclaw/pull/122451)
- Reset CLI preparation dependencies between tests [#122453](https://github.com/openclaw/openclaw/pull/122453)
- Revise the runners architecture plan around paired nodes [#122454](https://github.com/openclaw/openclaw/pull/122454)
- Extract a reusable Gateway desktop relay core [#122455](https://github.com/openclaw/openclaw/pull/122455)
- Consolidate coercion helpers under canonical contracts [#122458](https://github.com/openclaw/openclaw/pull/122458)
- Simplify GPT-5.6 canonicalization internals [#122467](https://github.com/openclaw/openclaw/pull/122467)
- Remove dead model-selection paths and consolidate compaction targets [#122474](https://github.com/openclaw/openclaw/pull/122474)
- Remove duplicate agent runtime tests [#122478](https://github.com/openclaw/openclaw/pull/122478)
- Accept exact canonical beta candidates for Telegram QA [#122480](https://github.com/openclaw/openclaw/pull/122480)
- Remove duplicate core test cases [#122487](https://github.com/openclaw/openclaw/pull/122487)
- Reuse built artifacts for the CI Doctor proof [#122491](https://github.com/openclaw/openclaw/pull/122491)
- Remove unused core test exports [#122500](https://github.com/openclaw/openclaw/pull/122500)
- Speed up the secrets audit test shard [#122504](https://github.com/openclaw/openclaw/pull/122504)
- Route focused agent tests to one owning shard [#122514](https://github.com/openclaw/openclaw/pull/122514)
- Remove duplicate Codex and WhatsApp setup tests [#122515](https://github.com/openclaw/openclaw/pull/122515)
- Prepare the sandbox before repository E2E validation [#122525](https://github.com/openclaw/openclaw/pull/122525)
- Balance Control UI E2E test shards [#122527](https://github.com/openclaw/openclaw/pull/122527)
- Accept valid staged compaction summaries in QA [#122528](https://github.com/openclaw/openclaw/pull/122528)
- Remove dead plugin test facades and WhatsApp adapter [#122532](https://github.com/openclaw/openclaw/pull/122532)
- Isolate QA child skip controls [#122534](https://github.com/openclaw/openclaw/pull/122534)
- Speed up secrets runtime coverage [#122538](https://github.com/openclaw/openclaw/pull/122538)
- Split Memory Core index-manager responsibilities [#122540](https://github.com/openclaw/openclaw/pull/122540)
- Rebalance compact Node CI shards from hosted medians [#122547](https://github.com/openclaw/openclaw/pull/122547)
- Speed up secret target registry tests [#122555](https://github.com/openclaw/openclaw/pull/122555)
- Unify OpenTelemetry event attribute projection [#122559](https://github.com/openclaw/openclaw/pull/122559)
- Keep hosted-gate verification compatible with older checkouts [#122561](https://github.com/openclaw/openclaw/pull/122561)
- Expand Node CLI daemon adapter coverage [#122562](https://github.com/openclaw/openclaw/pull/122562)
- Run doctor process tests concurrently [#122563](https://github.com/openclaw/openclaw/pull/122563)
- Speed up changed-test import scans [#122572](https://github.com/openclaw/openclaw/pull/122572)
- Allow signed frozen beta candidates in Telegram release QA [#122575](https://github.com/openclaw/openclaw/pull/122575)
- Shorten the SQLite reliability proof [#122576](https://github.com/openclaw/openclaw/pull/122576)
- Preserve QA artifacts when publication fails [#122580](https://github.com/openclaw/openclaw/pull/122580)
- Wait for model activity in the gateway hook concurrency test [#122584](https://github.com/openclaw/openclaw/pull/122584)
- Skip gateway reconnect waits in CI tests [#122588](https://github.com/openclaw/openclaw/pull/122588)
- Repair Slack Enterprise fixtures and focused CI routing [#122589](https://github.com/openclaw/openclaw/pull/122589)
- Repair Slack reaction lifecycle tests [#122592](https://github.com/openclaw/openclaw/pull/122592)
- Unify SQLite checkpoint branch and restore mutations [#122597](https://github.com/openclaw/openclaw/pull/122597)
- Focus gateway session search tests [#122603](https://github.com/openclaw/openclaw/pull/122603)
- fix(test): restore browser test typecheck after CDP pinning [#122607](https://github.com/openclaw/openclaw/pull/122607)
- Model DNS lookup overloads in browser tests [#122614](https://github.com/openclaw/openclaw/pull/122614)
- Focus cron direct-delivery test coverage [#122621](https://github.com/openclaw/openclaw/pull/122621)
- Reduce Claude CLI doctor test startup cost [#122627](https://github.com/openclaw/openclaw/pull/122627)
- Cancel and drain stalled CLI metadata renderers [#122634](https://github.com/openclaw/openclaw/pull/122634)
- Remove Comfy and Fal media test globals [#122636](https://github.com/openclaw/openclaw/pull/122636)
- Inline single-use channel and sandbox helpers [#122638](https://github.com/openclaw/openclaw/pull/122638)
- Restore Slack Enterprise approval-client test identity [#122639](https://github.com/openclaw/openclaw/pull/122639)
- Add fixed delay to Telegram proof runs [#122642](https://github.com/openclaw/openclaw/pull/122642)
- Remove low-value macOS SwiftUI body probes [#122645](https://github.com/openclaw/openclaw/pull/122645)
- Consolidate repeated Control UI rendering and request paths [#122651](https://github.com/openclaw/openclaw/pull/122651)
- Consolidate repeated runtime and tooling paths [#122656](https://github.com/openclaw/openclaw/pull/122656)
- Split Control UI authentication tests into focused suites [#122660](https://github.com/openclaw/openclaw/pull/122660)
- Consolidate repeated runtime shaping logic [#122661](https://github.com/openclaw/openclaw/pull/122661)
- Remove the orphaned Ask OpenClaw panel toggle contract [#122663](https://github.com/openclaw/openclaw/pull/122663)
- Preserve output across background-process test polls [#122664](https://github.com/openclaw/openclaw/pull/122664)
- Route recurring compact CI queue tails to 8-vCPU runners [#122666](https://github.com/openclaw/openclaw/pull/122666)
- Consolidate OpenAI realtime test fixtures [#122670](https://github.com/openclaw/openclaw/pull/122670)
- Consolidate Memory Core manager test fixtures [#122671](https://github.com/openclaw/openclaw/pull/122671)
- Speed up Gateway session utility tests [#122675](https://github.com/openclaw/openclaw/pull/122675)
- Fail OpenGrep when Git path discovery fails [#122676](https://github.com/openclaw/openclaw/pull/122676)
- Keep package git fixtures from resolving private development dependencies [#122678](https://github.com/openclaw/openclaw/pull/122678)
- Accept cumulative compaction counts in QA qualification [#122680](https://github.com/openclaw/openclaw/pull/122680)
- Add direct Gateway endpoints to the worker runtime [#122683](https://github.com/openclaw/openclaw/pull/122683)
- Share extension wildcard re-export scanning [#122685](https://github.com/openclaw/openclaw/pull/122685)
- Flatten Cohere, Meta, and Fireworks stream wrappers [#122686](https://github.com/openclaw/openclaw/pull/122686)
- Refresh generated Android and macOS locale resources [#122688](https://github.com/openclaw/openclaw/pull/122688)
- Consolidate coercion ownership and Plugin SDK boundaries [#122692](https://github.com/openclaw/openclaw/pull/122692)
- Remove the QA Lab gateway-child testing facade [#122693](https://github.com/openclaw/openclaw/pull/122693)
- Restore Plugin SDK guard coverage for symlinked API barrels [#122695](https://github.com/openclaw/openclaw/pull/122695)
- Centralize provider usage HTTP and JSON handling [#122698](https://github.com/openclaw/openclaw/pull/122698)
- Stabilize the SQLite interrupted-VACUUM reliability proof [#122700](https://github.com/openclaw/openclaw/pull/122700)
- Centralize Control UI chat media readiness [#122701](https://github.com/openclaw/openclaw/pull/122701)
- Speed up the agent command test suite [#122704](https://github.com/openclaw/openclaw/pull/122704)
- Separate prepared plugin generation scope from gateway request scope [#122706](https://github.com/openclaw/openclaw/pull/122706)
- Preserve model-switch evidence when QA assertions fail [#122710](https://github.com/openclaw/openclaw/pull/122710)
- Run the agent-delete Docker smoke through a real Gateway [#122714](https://github.com/openclaw/openclaw/pull/122714)
- Add SQLite forensics to a flaky gateway session test [#122718](https://github.com/openclaw/openclaw/pull/122718)
- Speed up assistant transcript repair tests [#122722](https://github.com/openclaw/openclaw/pull/122722)
- Faster, lower-memory Claw export tests [#122732](https://github.com/openclaw/openclaw/pull/122732)
- Preserve Periphery reports across selective workflow reruns [#122743](https://github.com/openclaw/openclaw/pull/122743)
- Remove Discord thread-binding test APIs from production [#122744](https://github.com/openclaw/openclaw/pull/122744)
- Remove unreachable plugin SDK facades [#122745](https://github.com/openclaw/openclaw/pull/122745)
- Bound tsgo core-test memory with fresh-process shards [#122748](https://github.com/openclaw/openclaw/pull/122748)
- Simplify OpenCode Go stream-wrapper composition [#122749](https://github.com/openclaw/openclaw/pull/122749)
- Repair plugin-update Docker ownership fixture [#122752](https://github.com/openclaw/openclaw/pull/122752)
- Speed up approval-state tests at the router boundary [#122754](https://github.com/openclaw/openclaw/pull/122754)
- Remove unused macOS coverage artifacts [#122755](https://github.com/openclaw/openclaw/pull/122755)
- Avoid false Vitest failures from zombie-only process groups [#122759](https://github.com/openclaw/openclaw/pull/122759)
- Speed up system-agent chat operations tests [#122767](https://github.com/openclaw/openclaw/pull/122767)
- Add paired-device worker lease and dispatch foundations [#122769](https://github.com/openclaw/openclaw/pull/122769)
- Remove residual normalization adapters [#122771](https://github.com/openclaw/openclaw/pull/122771)
- Remove redundant extension helper replay tests [#122773](https://github.com/openclaw/openclaw/pull/122773)
- Stabilize managed Linux desktop teardown coverage [#122776](https://github.com/openclaw/openclaw/pull/122776)
- Reuse Skill Workshop test state for faster CI [#122777](https://github.com/openclaw/openclaw/pull/122777)
- Simplify plugin boundary enforcement [#122781](https://github.com/openclaw/openclaw/pull/122781)
- Remove unused extension test exports [#122784](https://github.com/openclaw/openclaw/pull/122784)
- Expose AI package errors in installer qualification [#122786](https://github.com/openclaw/openclaw/pull/122786)
- Remove the duplicate Sessions numeric-filter parser wrapper [#122788](https://github.com/openclaw/openclaw/pull/122788)
- Speed up Gateway session-creation tests [#122789](https://github.com/openclaw/openclaw/pull/122789)
- Remove redundant tooling helper tests [#122790](https://github.com/openclaw/openclaw/pull/122790)
- Remove duplicate markdown renderer self-checks [#122803](https://github.com/openclaw/openclaw/pull/122803)
- Remove unreachable test-only Plugin SDK facades [#122807](https://github.com/openclaw/openclaw/pull/122807)
- Parallelize offline web-fetch CLI contract checks [#122811](https://github.com/openclaw/openclaw/pull/122811)
- Rebalance compact large CI shards by recurrent tail time [#122818](https://github.com/openclaw/openclaw/pull/122818)
- Remove the Azure provider test-only export [#122819](https://github.com/openclaw/openclaw/pull/122819)
- Move OpenAI usage fallback tests to the HTTP boundary [#122825](https://github.com/openclaw/openclaw/pull/122825)
- Split the subagent run manager into owner modules [#122826](https://github.com/openclaw/openclaw/pull/122826)
- Add durable node-host worker supervision [#122829](https://github.com/openclaw/openclaw/pull/122829)
- Streamline Cloud Worker preview delivery [#122830](https://github.com/openclaw/openclaw/pull/122830)
- Speed up BTW tests by bypassing plugin discovery [#122835](https://github.com/openclaw/openclaw/pull/122835)
- Keep CI dependencies warm for metadata-only changes [#122839](https://github.com/openclaw/openclaw/pull/122839)
- Restore the isolated Telegram release canary path [#122843](https://github.com/openclaw/openclaw/pull/122843)
- Remove obsolete test-only Plugin SDK facades [#122844](https://github.com/openclaw/openclaw/pull/122844)
- Make dead-code reports fail fast [#122847](https://github.com/openclaw/openclaw/pull/122847)
- Remove duplicate core test assertions [#122848](https://github.com/openclaw/openclaw/pull/122848)
- Fingerprint pnpm MJS hooks for CI dependency snapshots [#122852](https://github.com/openclaw/openclaw/pull/122852)
- Split subagent completion delivery into focused internal modules [#122853](https://github.com/openclaw/openclaw/pull/122853)
- Remove assertion-free macOS smoke probes [#122856](https://github.com/openclaw/openclaw/pull/122856)
- Reduce media-reply test startup time [#122857](https://github.com/openclaw/openclaw/pull/122857)
- Remove duplicate stale plugin recovery test coverage [#122860](https://github.com/openclaw/openclaw/pull/122860)
- Restore production-shaped Codex approval regression tests [#122861](https://github.com/openclaw/openclaw/pull/122861)
- Centralize isolated cron runtime configuration [#122867](https://github.com/openclaw/openclaw/pull/122867)
- Move Discord READY-abort regression coverage to the gateway lifecycle [#122869](https://github.com/openclaw/openclaw/pull/122869)
- Make the live updater checkout portable [#122873](https://github.com/openclaw/openclaw/pull/122873)
- Remove unused media-generation facade packages [#122874](https://github.com/openclaw/openclaw/pull/122874)
- Split subagent controls into focused internal modules [#122875](https://github.com/openclaw/openclaw/pull/122875)
- Prevent the channel-add test suite from timing out [#122879](https://github.com/openclaw/openclaw/pull/122879)
- Remove the Foundry test bridge and reduce UI bootstrap weight [#122881](https://github.com/openclaw/openclaw/pull/122881)
- Repair extension fixtures for explicit agent ownership [#122883](https://github.com/openclaw/openclaw/pull/122883)
- Restore extension tests in changed-test fallback [#122885](https://github.com/openclaw/openclaw/pull/122885)
- Update Gateway network qualification for suspension control [#122888](https://github.com/openclaw/openclaw/pull/122888)
- Speed up focused CLI spawn tests [#122891](https://github.com/openclaw/openclaw/pull/122891)
- Avoid bundled-plugin discovery in onboarding inference tests [#122901](https://github.com/openclaw/openclaw/pull/122901)
- Preserve bundled plugins during Parallels update validation [#122912](https://github.com/openclaw/openclaw/pull/122912)
- Stabilize extension-wrapper SIGTERM tests [#122917](https://github.com/openclaw/openclaw/pull/122917)
- Require visual PR proof for UI and gateway behavior changes [#122920](https://github.com/openclaw/openclaw/pull/122920)
- Rotate the canonical CI dependency disk lineage [#122921](https://github.com/openclaw/openclaw/pull/122921)
- Repair plugin status and CLI test fixtures [#122925](https://github.com/openclaw/openclaw/pull/122925)
- Internalize the ChatGPT Responses SSE parser [#122930](https://github.com/openclaw/openclaw/pull/122930)
- Preserve model-switch reads in QA Code Mode [#122935](https://github.com/openclaw/openclaw/pull/122935)
- Add private negotiated controls for node worker supervisors [#122939](https://github.com/openclaw/openclaw/pull/122939)
- Reduce workflow guard test startup cost [#122940](https://github.com/openclaw/openclaw/pull/122940)
- Stabilize the sender-avatar projection test [#122942](https://github.com/openclaw/openclaw/pull/122942)
- Remove duplicate MS Teams and Slack test replays [#122949](https://github.com/openclaw/openclaw/pull/122949)
- Fix AI workspace manifest handling during installer packaging [#122952](https://github.com/openclaw/openclaw/pull/122952)
- Remove residual normalization aliases [#122956](https://github.com/openclaw/openclaw/pull/122956)
- Speed up the BTW agent test suite [#122957](https://github.com/openclaw/openclaw/pull/122957)
- Keep isolated QA auth writes out of live state [#122958](https://github.com/openclaw/openclaw/pull/122958)
- Consolidate shared-state migration validation [#122959](https://github.com/openclaw/openclaw/pull/122959)
- Remove process-global agent test APIs [#122972](https://github.com/openclaw/openclaw/pull/122972)
- Add onboarding auth-owner regression coverage [#122975](https://github.com/openclaw/openclaw/pull/122975)
- Remove duplicate Gateway suspension mock replay [#122977](https://github.com/openclaw/openclaw/pull/122977)
- Repair stale full-config extension tests [#122978](https://github.com/openclaw/openclaw/pull/122978)
- Refresh plugin test fixtures for current runtime contracts [#122986](https://github.com/openclaw/openclaw/pull/122986)
- Remove the retired GitHub Copilot login facade chain [#122988](https://github.com/openclaw/openclaw/pull/122988)
- Make oc-path performance checks resilient to CI contention [#122994](https://github.com/openclaw/openclaw/pull/122994)
- Speed up MCP runtime tests [#122998](https://github.com/openclaw/openclaw/pull/122998)
- Repair the shared-workspace agent deletion E2E fixture [#123000](https://github.com/openclaw/openclaw/pull/123000)
- Move recovery transcript privacy proof to QA [#123006](https://github.com/openclaw/openclaw/pull/123006)
- Recover Parallels update smoke after migration refusal [#123007](https://github.com/openclaw/openclaw/pull/123007)
- Speed up attempt-execution helper tests [#123012](https://github.com/openclaw/openclaw/pull/123012)
- Expose bounded worker terminal outcomes to the Gateway [#123013](https://github.com/openclaw/openclaw/pull/123013)
- Accept large npm pack receipts during installer validation [#123019](https://github.com/openclaw/openclaw/pull/123019)
- Enforce zero wrapper and export debt directly [#123020](https://github.com/openclaw/openclaw/pull/123020)
- Repair Telegram multi-agent reload fixtures [#123021](https://github.com/openclaw/openclaw/pull/123021)
- Move recovery tests to production owners [#123022](https://github.com/openclaw/openclaw/pull/123022)
- Speed up focused config I/O compatibility tests [#123024](https://github.com/openclaw/openclaw/pull/123024)
- Add the durable private node launch owner [#123033](https://github.com/openclaw/openclaw/pull/123033)
- Use compatibility-safe duplicate validation for frozen targets [#123034](https://github.com/openclaw/openclaw/pull/123034)
- Replace Plugin SDK hash baselines with readable API diffs [#123036](https://github.com/openclaw/openclaw/pull/123036)
- Stop Nostr private-key fixtures from leaking between tests [#123039](https://github.com/openclaw/openclaw/pull/123039)
- Replace stale CI dependency snapshots with an immutable cache [#123040](https://github.com/openclaw/openclaw/pull/123040)
- Repair Telegram webhook and polling test fixtures [#123059](https://github.com/openclaw/openclaw/pull/123059)
- Speed up prepared-reply orchestration tests [#123061](https://github.com/openclaw/openclaw/pull/123061)
- Align upgrade-survivor checks with retired session metadata [#123068](https://github.com/openclaw/openclaw/pull/123068)
- Keep release evidence reuse dependency-free [#123079](https://github.com/openclaw/openclaw/pull/123079)
- Include normalization tooling in plugin release preflight [#123082](https://github.com/openclaw/openclaw/pull/123082)
- Move embedded-run lifecycle tests to production owners [#123092](https://github.com/openclaw/openclaw/pull/123092)
- Align plugin test fixtures with install ownership records [#123095](https://github.com/openclaw/openclaw/pull/123095)
- Speed up prepared-reply media tests [#123099](https://github.com/openclaw/openclaw/pull/123099)
- Refresh compact CI shard timing hints [#123100](https://github.com/openclaw/openclaw/pull/123100)
- Reduce Gateway server test setup time [#123111](https://github.com/openclaw/openclaw/pull/123111)
- Replace the incomplete-turn test runner mirror with owner tests [#123114](https://github.com/openclaw/openclaw/pull/123114)
- Bind reusable validation evidence to its verifier source [#123115](https://github.com/openclaw/openclaw/pull/123115)
- Speed up focused model-directive tests [#123119](https://github.com/openclaw/openclaw/pull/123119)
- Prevent notification crashes in unbundled macOS builds [#123123](https://github.com/openclaw/openclaw/pull/123123)
- Record requester ownership in a subagent E2E fixture [#123125](https://github.com/openclaw/openclaw/pull/123125)
- Make cron QA prove natural scheduler execution [#123127](https://github.com/openclaw/openclaw/pull/123127)
- Reuse release validation when job logs contain ANSI output [#123129](https://github.com/openclaw/openclaw/pull/123129)
- Restore reliable Discord extension test runs [#123131](https://github.com/openclaw/openclaw/pull/123131)
- Pipeline canonical main CI across two slots [#123135](https://github.com/openclaw/openclaw/pull/123135)
- Strengthen Memory Core dreaming boundaries [#123138](https://github.com/openclaw/openclaw/pull/123138)
- Stripe oversized compact CI test groups [#123142](https://github.com/openclaw/openclaw/pull/123142)
- Keep Anthropic QA mock tool IDs replay-stable [#123153](https://github.com/openclaw/openclaw/pull/123153)
- Remove an orphaned chat-link presentation class [#123154](https://github.com/openclaw/openclaw/pull/123154)
- Speed up focused model-selection tests [#123155](https://github.com/openclaw/openclaw/pull/123155)
- Route Control UI stylesheet colors through theme tokens [#123156](https://github.com/openclaw/openclaw/pull/123156)
- Avoid reused process identities in QA lifecycle checks [#123161](https://github.com/openclaw/openclaw/pull/123161)
- Remove duplicate UI selectors and restore Stylelint enforcement [#123166](https://github.com/openclaw/openclaw/pull/123166)
- Remove residual test-only production seams [#123168](https://github.com/openclaw/openclaw/pull/123168)
- Add a dead-CSS audit and remove unused Control UI rules [#123178](https://github.com/openclaw/openclaw/pull/123178)
- Exercise DuckDuckGo regressions through the search boundary [#123188](https://github.com/openclaw/openclaw/pull/123188)
- Add a GitHub-hosted fallback for npm preflight [#123191](https://github.com/openclaw/openclaw/pull/123191)
- Test live summary state through real reply dispatch [#123195](https://github.com/openclaw/openclaw/pull/123195)
- Remove mutable test dependencies from Gateway calls [#123201](https://github.com/openclaw/openclaw/pull/123201)
- Use the trusted harness pnpm for frozen-package validation [#123206](https://github.com/openclaw/openclaw/pull/123206)
- Remove obsolete ACP session test scaffolding [#123212](https://github.com/openclaw/openclaw/pull/123212)
- Remove duplicate tests and isolate Nostr configuration cases [#123214](https://github.com/openclaw/openclaw/pull/123214)
- Consolidate duplicate Gateway session-host coverage [#123218](https://github.com/openclaw/openclaw/pull/123218)
- Print config details when upgrade validation fails [#123221](https://github.com/openclaw/openclaw/pull/123221)
- Add a hosted-runner CI circuit breaker [#123263](https://github.com/openclaw/openclaw/pull/123263)
- Shorten GitHub-hosted outage CI runs [#123294](https://github.com/openclaw/openclaw/pull/123294)
- Stabilize responsive chat layout tests under load [#123300](https://github.com/openclaw/openclaw/pull/123300)
- Run full owning plugin tests for direct extension changes [#123314](https://github.com/openclaw/openclaw/pull/123314)
- Route chat JSON and tool labels through i18n [#123325](https://github.com/openclaw/openclaw/pull/123325)
- Prevent type-aware lint timeouts on constrained CI runners [#123328](https://github.com/openclaw/openclaw/pull/123328)
- Reduce hosted Control UI E2E wall time [#123329](https://github.com/openclaw/openclaw/pull/123329)
- Preserve failed-upgrade diagnostics and status [#123338](https://github.com/openclaw/openclaw/pull/123338)
- Cleanly stop browser relay deadlines during teardown [#123343](https://github.com/openclaw/openclaw/pull/123343)
- Re-key native localization artifacts by content identity [#123347](https://github.com/openclaw/openclaw/pull/123347)
- Stabilize hosted Control UI and Gateway tests [#123357](https://github.com/openclaw/openclaw/pull/123357)
- Stabilize transcript search icon size checks against subpixel rounding [#123362](https://github.com/openclaw/openclaw/pull/123362)
- Register the Codex run-attempt state test in CI [#123363](https://github.com/openclaw/openclaw/pull/123363)
- Split slow GitHub-hosted Windows and QA CI lanes [#123364](https://github.com/openclaw/openclaw/pull/123364)
- Make fixing broken CI the default [#123369](https://github.com/openclaw/openclaw/pull/123369)
- Rebalance GitHub-hosted compact Node test lanes [#123383](https://github.com/openclaw/openclaw/pull/123383)
- Restore unique Codex test shard ownership [#123392](https://github.com/openclaw/openclaw/pull/123392)
- Stabilize the Vitest ownership audit after filtered runs [#123394](https://github.com/openclaw/openclaw/pull/123394)
- Restore the Codex state test shard owner [#123400](https://github.com/openclaw/openclaw/pull/123400)
- Shorten the GitHub-hosted Node CI matrix [#123406](https://github.com/openclaw/openclaw/pull/123406)
- Add guarded migration for legacy main-agent sessions [#123424](https://github.com/openclaw/openclaw/pull/123424)
- Balance hosted QA smoke profiles around Matrix runtime [#123434](https://github.com/openclaw/openclaw/pull/123434)
- Restore caches on GitHub-hosted CI runners [#123440](https://github.com/openclaw/openclaw/pull/123440)
- Stabilize shared UI Vitest runs across test files [#123453](https://github.com/openclaw/openclaw/pull/123453)
- Skip unnecessary dependency graph compares for trusted approvers [#123456](https://github.com/openclaw/openclaw/pull/123456)
- Add the internal computer-use campaign tracker [#123464](https://github.com/openclaw/openclaw/pull/123464)
- Restore warm test caches across hosted Vitest lanes [#123465](https://github.com/openclaw/openclaw/pull/123465)
- Freeze computer-use provider parity fixtures [#123469](https://github.com/openclaw/openclaw/pull/123469)
- Render provided empty translation parameters as empty [#123474](https://github.com/openclaw/openclaw/pull/123474)
- Add a hybrid CI runner backend [#123479](https://github.com/openclaw/openclaw/pull/123479)
- Consolidate channel artifact parity checks for faster CI [#123480](https://github.com/openclaw/openclaw/pull/123480)
- Show the Claude logo in the mock Control UI [#123496](https://github.com/openclaw/openclaw/pull/123496)
- Stop random Control UI test failures between files [#123512](https://github.com/openclaw/openclaw/pull/123512)
- Prevent Telegram test watchdog stalls [#123514](https://github.com/openclaw/openclaw/pull/123514)
- Use the minimal Gateway fixture for CLI pairing tests [#123531](https://github.com/openclaw/openclaw/pull/123531)
- Preserve scoped extension test plans [#123534](https://github.com/openclaw/openclaw/pull/123534)
- Add the capability-filtered Computer Use v2 contract [#123544](https://github.com/openclaw/openclaw/pull/123544)
- Remove duplicate test coverage [#123551](https://github.com/openclaw/openclaw/pull/123551)
- Move hybrid CI plateau lanes back to Blacksmith [#123552](https://github.com/openclaw/openclaw/pull/123552)
- Remove residual test-only production seams [#123555](https://github.com/openclaw/openclaw/pull/123555)
- Shorten hosted pull-request CI [#123570](https://github.com/openclaw/openclaw/pull/123570)
- Recycle Vitest per Telegram shard file [#123576](https://github.com/openclaw/openclaw/pull/123576)
- Split hosted Windows CI into three lanes [#123577](https://github.com/openclaw/openclaw/pull/123577)
- Skip idle Gateway servers in direct-handler session tests [#123580](https://github.com/openclaw/openclaw/pull/123580)
- Route hybrid compact Node shards to Blacksmith [#123593](https://github.com/openclaw/openclaw/pull/123593)
- Shorten hybrid compact Node test shards [#123595](https://github.com/openclaw/openclaw/pull/123595)
- Prevent Telegram native-command CI timeouts [#123607](https://github.com/openclaw/openclaw/pull/123607)
- Centralize GitHub guard display sanitization [#123620](https://github.com/openclaw/openclaw/pull/123620)
- Scale Control UI E2E waits on loaded CI runners [#123623](https://github.com/openclaw/openclaw/pull/123623)
- Balance core tooling tests across five CI stripes [#123636](https://github.com/openclaw/openclaw/pull/123636)
- Bound terminal node-worker launch receipt retention [#123641](https://github.com/openclaw/openclaw/pull/123641)
- Remove a redundant Gateway registry test and shard rule [#123643](https://github.com/openclaw/openclaw/pull/123643)
- Reuse boundary caches and reduce Telegram CI shards [#123649](https://github.com/openclaw/openclaw/pull/123649)
- Capture diagnostics for Control UI E2E timeouts [#123650](https://github.com/openclaw/openclaw/pull/123650)
- Shorten the core tooling CI stripe [#123659](https://github.com/openclaw/openclaw/pull/123659)
- Make the Control UI model-scoping E2E route-owned [#123661](https://github.com/openclaw/openclaw/pull/123661)
- Make Telegram live QA use the production reply default [#123662](https://github.com/openclaw/openclaw/pull/123662)
- Stabilize Activity and Workboard browser tests [#123664](https://github.com/openclaw/openclaw/pull/123664)
- Prune unreferenced terminal worker environments [#123665](https://github.com/openclaw/openclaw/pull/123665)
- Reuse the LanceDB memory plugin module in tests [#123678](https://github.com/openclaw/openclaw/pull/123678)
- Make task-audit age assertions load-safe [#123686](https://github.com/openclaw/openclaw/pull/123686)
- Let non-release macOS builds omit the bundled MLX voice helper [#123698](https://github.com/openclaw/openclaw/pull/123698)
- Remove redundant direct test mirrors [#123704](https://github.com/openclaw/openclaw/pull/123704)
- Simplify agent phase tests and stabilize MCP loopback readiness [#123714](https://github.com/openclaw/openclaw/pull/123714)
- Fix macOS packaging paths and artifact freshness [#123751](https://github.com/openclaw/openclaw/pull/123751)
- Remove duplicate failover-classification tests [#123753](https://github.com/openclaw/openclaw/pull/123753)
- Stabilize update-confirmation focus testing [#123757](https://github.com/openclaw/openclaw/pull/123757)
- Consolidate AI replay and completion internals [#123762](https://github.com/openclaw/openclaw/pull/123762)
- Guard macOS elevation signing constants against drift [#123764](https://github.com/openclaw/openclaw/pull/123764)
- Split compact-command lifecycle tests into a focused suite [#123765](https://github.com/openclaw/openclaw/pull/123765)
- Reuse Skill Workshop test module graphs [#123772](https://github.com/openclaw/openclaw/pull/123772)
- Shorten hosted CI critical paths [#123780](https://github.com/openclaw/openclaw/pull/123780)
- Split gateway dedupe tests to restore CI [#123794](https://github.com/openclaw/openclaw/pull/123794)
- Keep macOS CUA endpoint variables private [#123798](https://github.com/openclaw/openclaw/pull/123798)
- Remove redundant compact-command test seams [#123810](https://github.com/openclaw/openclaw/pull/123810)
- Remove obsolete QR and dashboard integration test [#123819](https://github.com/openclaw/openclaw/pull/123819)
- Reuse LAN pairing Gateways across test cases [#123821](https://github.com/openclaw/openclaw/pull/123821)
- Remove unused OpenAI Responses replay test seams [#123825](https://github.com/openclaw/openclaw/pull/123825)
- Cover retry after rejected workspace uploads [#123830](https://github.com/openclaw/openclaw/pull/123830)
- Remove a duplicate plugin policy re-evaluation test [#123836](https://github.com/openclaw/openclaw/pull/123836)
- Load the package-manifest test helper directly [#123841](https://github.com/openclaw/openclaw/pull/123841)
- Remove duplicated Skills verify error coverage [#123843](https://github.com/openclaw/openclaw/pull/123843)
- Require broader Linux installer checks before website sync [#123849](https://github.com/openclaw/openclaw/pull/123849)
- Trim unused pairing state and stabilize Control UI tests [#123856](https://github.com/openclaw/openclaw/pull/123856)
- Invalidate Plugin SDK declarations on auth type changes [#123861](https://github.com/openclaw/openclaw/pull/123861)
- Test plugin marketplace shorthand at the CLI boundary [#123883](https://github.com/openclaw/openclaw/pull/123883)
- Remove the system-agent plugin-install test seam [#123888](https://github.com/openclaw/openclaw/pull/123888)
- Remove the Gateway setup-cleanup test callback [#123891](https://github.com/openclaw/openclaw/pull/123891)
- Consolidate Gateway pairing-completion regression coverage [#123895](https://github.com/openclaw/openclaw/pull/123895)
- Use the archived-session projection in SQLite maintenance [#123896](https://github.com/openclaw/openclaw/pull/123896)
- Narrow plugin registration contract test imports [#123902](https://github.com/openclaw/openclaw/pull/123902)
- Remove duplicate compaction tests and test-only APIs [#123903](https://github.com/openclaw/openclaw/pull/123903)
- Align xAI empty-config startup validation [#123904](https://github.com/openclaw/openclaw/pull/123904)
- Trim duplicate session maintenance tests [#123909](https://github.com/openclaw/openclaw/pull/123909)
- Reduce the Control UI startup bundle [#123910](https://github.com/openclaw/openclaw/pull/123910)
- Remove duplicate SQLite conformance test runs [#123913](https://github.com/openclaw/openclaw/pull/123913)
- Remove disconnected Control UI build-mismatch projection [#123916](https://github.com/openclaw/openclaw/pull/123916)
- Move IRC direct-import smoke helper to test fixtures [#123923](https://github.com/openclaw/openclaw/pull/123923)
- Move Control UI origin cases to admission-policy tests [#123925](https://github.com/openclaw/openclaw/pull/123925)
- Verify legacy Gateways may omit build identity [#123943](https://github.com/openclaw/openclaw/pull/123943)
- Reuse the Quicksilver test module graph [#123947](https://github.com/openclaw/openclaw/pull/123947)
- Remove obsolete Gateway worker-placement modes [#123970](https://github.com/openclaw/openclaw/pull/123970)
- fix(scripts): clean up tsgo process trees on timeout or signal [#123975](https://github.com/openclaw/openclaw/pull/123975)
- Consolidate daemon build-ID test coverage [#123981](https://github.com/openclaw/openclaw/pull/123981)
- Add secure Gateway-to-node worker bundle installation [#123985](https://github.com/openclaw/openclaw/pull/123985)
- Replace ingress test delays with stop barriers [#123990](https://github.com/openclaw/openclaw/pull/123990)
- Remove test-only Claw MCP lifecycle bypasses [#124002](https://github.com/openclaw/openclaw/pull/124002)
- Reject widen-then-assert type laundering in CI [#124003](https://github.com/openclaw/openclaw/pull/124003)
- Remove the no-op Control UI model-change seam [#124009](https://github.com/openclaw/openclaw/pull/124009)
- Trim redundant browser transport test replays [#124011](https://github.com/openclaw/openclaw/pull/124011)
- Restore live duplicate-delivery test assertions [#124012](https://github.com/openclaw/openclaw/pull/124012)
- Deduplicate root agent guidance into owning skills [#124027](https://github.com/openclaw/openclaw/pull/124027)
- Remove the non-verifying sidebar screenshot harness [#124031](https://github.com/openclaw/openclaw/pull/124031)
- Reduce Tlon monitor test startup cost [#124036](https://github.com/openclaw/openclaw/pull/124036)
- Remove test-only ACP session cleanup seam [#124043](https://github.com/openclaw/openclaw/pull/124043)
- Correct and streamline repository agent instructions [#124053](https://github.com/openclaw/openclaw/pull/124053)
- Strengthen agent and session type safety [#124060](https://github.com/openclaw/openclaw/pull/124060)
- Remove stale CUA and Peekaboo provider-parity fixtures [#124066](https://github.com/openclaw/openclaw/pull/124066)
- Remove dead configuration compatibility plumbing [#124067](https://github.com/openclaw/openclaw/pull/124067)
- Remove unsafe chained TypeScript assertions [#124073](https://github.com/openclaw/openclaw/pull/124073)
- Fix TSX resolution in temporary CI workflow fixtures [#124077](https://github.com/openclaw/openclaw/pull/124077)
- Deduplicate root agent policy and relocate specialized guidance [#124078](https://github.com/openclaw/openclaw/pull/124078)
- Replace unsafe chained type assertions across extensions [#124079](https://github.com/openclaw/openclaw/pull/124079)
- Avoid prior-beta tag fetch timeouts during npm publish [#124080](https://github.com/openclaw/openclaw/pull/124080)
- Strengthen type safety at core runtime boundaries [#124082](https://github.com/openclaw/openclaw/pull/124082)
- Reduce DeepInfra model test import overhead [#124085](https://github.com/openclaw/openclaw/pull/124085)
- Remove redundant strict-subset test assertions [#124090](https://github.com/openclaw/openclaw/pull/124090)
- Preflight npm trusted-publisher configuration before plugin releases [#124095](https://github.com/openclaw/openclaw/pull/124095)
- Centralize channel ingress lifecycle fan-out [#124096](https://github.com/openclaw/openclaw/pull/124096)
- Retire legacy Gateway abort-marker and registry compatibility code [#124108](https://github.com/openclaw/openclaw/pull/124108)
- Speed up the Mattermost send test suite [#124114](https://github.com/openclaw/openclaw/pull/124114)
- Remove residual duplicate test assertions [#124116](https://github.com/openclaw/openclaw/pull/124116)
- Add chained type-assertion lint ratchet [#124119](https://github.com/openclaw/openclaw/pull/124119)
- Centralize agent terminal-reason classification [#124122](https://github.com/openclaw/openclaw/pull/124122)
- Remove dead provider and plugin seams [#124134](https://github.com/openclaw/openclaw/pull/124134)
- Reduce LM Studio stream test setup cost [#124136](https://github.com/openclaw/openclaw/pull/124136)
- Remove duplicate Codex app-server regression tests [#124141](https://github.com/openclaw/openclaw/pull/124141)
- Remove QA Lab aggregate test facades [#124147](https://github.com/openclaw/openclaw/pull/124147)
- Remove redundant UI and native tests [#124152](https://github.com/openclaw/openclaw/pull/124152)
- Prevent CLI metadata build timeouts under disk contention [#124153](https://github.com/openclaw/openclaw/pull/124153)
- Refresh the Computer Use campaign tracker [#124155](https://github.com/openclaw/openclaw/pull/124155)
- Remove obsolete test-runner facades [#124159](https://github.com/openclaw/openclaw/pull/124159)
- Remove orphaned bundled-channel test runtime [#124163](https://github.com/openclaw/openclaw/pull/124163)
- Rebuild Plugin SDK declarations after session-catalog changes [#124165](https://github.com/openclaw/openclaw/pull/124165)
- Remove duplicate script parser test facades [#124167](https://github.com/openclaw/openclaw/pull/124167)
- Remove unused internal testing-bag members [#124175](https://github.com/openclaw/openclaw/pull/124175)
- Reorganize session catalogs and adoption coordination [#124178](https://github.com/openclaw/openclaw/pull/124178)
- Remove obsolete provider runtime wrappers [#124182](https://github.com/openclaw/openclaw/pull/124182)
- Remove unused Google Meet testing exports [#124183](https://github.com/openclaw/openclaw/pull/124183)
- Move core regression tests to owner boundaries [#124184](https://github.com/openclaw/openclaw/pull/124184)
- Refresh the plugin publish security-scan baseline [#124185](https://github.com/openclaw/openclaw/pull/124185)
- Remove redundant channel probe type tests [#124190](https://github.com/openclaw/openclaw/pull/124190)
- Trim test-only plugin barrel exports [#124192](https://github.com/openclaw/openclaw/pull/124192)
- Accept the reviewed llama.cpp runtime probe in release scans [#124194](https://github.com/openclaw/openclaw/pull/124194)
- Remove brittle Diffs viewer icon-name tests [#124196](https://github.com/openclaw/openclaw/pull/124196)
- remove redundant subset assertions [#124198](https://github.com/openclaw/openclaw/pull/124198)
- Align onboarding TTY drivers with the first-agent prompt [#124199](https://github.com/openclaw/openclaw/pull/124199)
- Restore Buzz and Teams live canary selection [#124200](https://github.com/openclaw/openclaw/pull/124200)
- Align worker-environment E2E fixtures with the canonical record contract [#124202](https://github.com/openclaw/openclaw/pull/124202)
- Remove redundant subset assertions from tests [#124203](https://github.com/openclaw/openclaw/pull/124203)
- Restore Codex validation for catalog-free frozen releases [#124204](https://github.com/openclaw/openclaw/pull/124204)
- Remove assertion-free iOS view construction tests [#124205](https://github.com/openclaw/openclaw/pull/124205)
- Remove the Bedrock test-only cache reset API [#124212](https://github.com/openclaw/openclaw/pull/124212)
- Remove Mantle test-only cache reset exports [#124216](https://github.com/openclaw/openclaw/pull/124216)
- Make Telegram probe-cache tests follow production behavior [#124219](https://github.com/openclaw/openclaw/pull/124219)
- Exercise test-force through its real CLI boundary [#124225](https://github.com/openclaw/openclaw/pull/124225)
- Remove duplicate ClawHub archive test coverage [#124240](https://github.com/openclaw/openclaw/pull/124240)
- Test release validation through executable calls [#124245](https://github.com/openclaw/openclaw/pull/124245)
- Replace vacuous New Session draft E2E with positive behavior checks [#124253](https://github.com/openclaw/openclaw/pull/124253)
- Share composer menu active-option scrolling [#124256](https://github.com/openclaw/openclaw/pull/124256)
- Test the release summary watcher through its executable [#124259](https://github.com/openclaw/openclaw/pull/124259)
- Correct ACP task-row ownership tests [#124260](https://github.com/openclaw/openclaw/pull/124260)
- Remove obsolete assistant-message expansion state [#124263](https://github.com/openclaw/openclaw/pull/124263)
- Remove the obsolete early Node 24 compile-cache workaround [#124271](https://github.com/openclaw/openclaw/pull/124271)
- Remove Feishu's global thread-binding test reset [#124276](https://github.com/openclaw/openclaw/pull/124276)
- Remove the Discord thread-cache test reset API [#124278](https://github.com/openclaw/openclaw/pull/124278)
- Consolidate non-exiting runtime error tests [#124281](https://github.com/openclaw/openclaw/pull/124281)
- Consolidate Control UI route startup tests [#124287](https://github.com/openclaw/openclaw/pull/124287)
- Remove low-value iOS rendering and source-layout tests [#124291](https://github.com/openclaw/openclaw/pull/124291)
- Deduplicate release timeout test evaluators [#124297](https://github.com/openclaw/openclaw/pull/124297)
- Deduplicate live-updater deployment fixtures [#124304](https://github.com/openclaw/openclaw/pull/124304)
- Deduplicate plugin publication test fixtures [#124312](https://github.com/openclaw/openclaw/pull/124312)
- Remove the obsolete compile-time version define [#124321](https://github.com/openclaw/openclaw/pull/124321)
- Run hidden-reasoning watchdog tests concurrently [#124330](https://github.com/openclaw/openclaw/pull/124330)
- Consolidate submitted-config validation [#124331](https://github.com/openclaw/openclaw/pull/124331)
- Remove prompt snapshot test facades [#124333](https://github.com/openclaw/openclaw/pull/124333)
- Restore Performance validation for current source builds [#124341](https://github.com/openclaw/openclaw/pull/124341)
- Split the Anthropic session catalog into concept modules [#124342](https://github.com/openclaw/openclaw/pull/124342)
- Shorten the Vault timeout regression test [#124350](https://github.com/openclaw/openclaw/pull/124350)
- Narrow chained type-assertion exemptions in core code [#124351](https://github.com/openclaw/openclaw/pull/124351)
- Enforce chained-assertion guards in agent code [#124354](https://github.com/openclaw/openclaw/pull/124354)
- Lighten focused web-fetch tests [#124357](https://github.com/openclaw/openclaw/pull/124357)
- Split the computer tool by responsibility [#124358](https://github.com/openclaw/openclaw/pull/124358)
- Add an assertion-safety debt ratchet and deslop workflow [#124359](https://github.com/openclaw/openclaw/pull/124359)
- Enforce chained-assertion checks across AI and Control UI [#124361](https://github.com/openclaw/openclaw/pull/124361)
- Remove duplicate Control UI place-picker tests [#124370](https://github.com/openclaw/openclaw/pull/124370)
- Enforce safer type boundaries across bundled extensions [#124378](https://github.com/openclaw/openclaw/pull/124378)
- Keep the target-none heartbeat QA scenario deterministic [#124380](https://github.com/openclaw/openclaw/pull/124380)
- Synchronize MCP lifecycle tests with observed server state [#124389](https://github.com/openclaw/openclaw/pull/124389)
- Split Codex session-catalog tests and repair a stale fixture [#124397](https://github.com/openclaw/openclaw/pull/124397)
- Restore release-validation fixture coverage [#124401](https://github.com/openclaw/openclaw/pull/124401)
- Simplify worker environment and node issue internals [#124402](https://github.com/openclaw/openclaw/pull/124402)
- Shorten the Slack startup-auth regression test [#124404](https://github.com/openclaw/openclaw/pull/124404)
- Fast-forward cron ownership handoff tests [#124417](https://github.com/openclaw/openclaw/pull/124417)
- Keep Crabbox dependencies intact after pnpm dlx [#124423](https://github.com/openclaw/openclaw/pull/124423)
- Fast-forward the Slack probe retry test [#124428](https://github.com/openclaw/openclaw/pull/124428)
- Target the canonical sidebar reconnect roster response [#124430](https://github.com/openclaw/openclaw/pull/124430)
- Make Skill Workshop contention tests deterministic [#124440](https://github.com/openclaw/openclaw/pull/124440)
- Repair assertion-safety ratchet merge drift [#124445](https://github.com/openclaw/openclaw/pull/124445)
- Harden frozen plugin prerelease validation inputs [#124446](https://github.com/openclaw/openclaw/pull/124446)
- Settle QA bus polling during shutdown [#124463](https://github.com/openclaw/openclaw/pull/124463)
- Use trusted QA tooling for frozen release checks [#124509](https://github.com/openclaw/openclaw/pull/124509)
- Exclude RoboClaw from human contributor credit [#124526](https://github.com/openclaw/openclaw/pull/124526)
- Remove the Canvas test's real Git timeout wait [#124547](https://github.com/openclaw/openclaw/pull/124547)
- Bound Codex extension tests across fresh processes [#124553](https://github.com/openclaw/openclaw/pull/124553)
- Remove vestigial runtime indirection [#124554](https://github.com/openclaw/openclaw/pull/124554)
- Reuse the QA hook-routing fixture [#124565](https://github.com/openclaw/openclaw/pull/124565)
- Deduplicate session paging and sleep helpers [#124569](https://github.com/openclaw/openclaw/pull/124569)
- Run affected plugin tests when core changes reach extension consumers [#124579](https://github.com/openclaw/openclaw/pull/124579)
- Name macOS Computer Use executors by scope [#124586](https://github.com/openclaw/openclaw/pull/124586)
- Make provider stream writer types explicit [#124587](https://github.com/openclaw/openclaw/pull/124587)
- Shorten the Google Meet reconnect regression test [#124602](https://github.com/openclaw/openclaw/pull/124602)
- Remove unreachable compaction fallback code [#124603](https://github.com/openclaw/openclaw/pull/124603)
- Remove cold-start flakiness from plugin lease tests [#124607](https://github.com/openclaw/openclaw/pull/124607)
- Enforce verified-clean lint and import rules [#124610](https://github.com/openclaw/openclaw/pull/124610)
- Prevent QA maturity scorecard timeouts [#124612](https://github.com/openclaw/openclaw/pull/124612)
- Release completed PR locks despite inherited pipe holders [#124614](https://github.com/openclaw/openclaw/pull/124614)
- Skip redundant restart-recovery session-key lookups [#124616](https://github.com/openclaw/openclaw/pull/124616)
- Reduce hybrid compact CI runner overhead [#124622](https://github.com/openclaw/openclaw/pull/124622)
- Make dense test fixtures type-safe [#124625](https://github.com/openclaw/openclaw/pull/124625)
- Speed up LINE and Microsoft Teams ingress capacity tests [#124630](https://github.com/openclaw/openclaw/pull/124630)
- Replace test-only runtime seams with explicit dependencies [#124634](https://github.com/openclaw/openclaw/pull/124634)
- Avoid nested dedicated Linux workers [#124636](https://github.com/openclaw/openclaw/pull/124636)
- Compile externalized plugins in source builds [#124639](https://github.com/openclaw/openclaw/pull/124639)
- Remove dead session-cleanup reporting paths [#124641](https://github.com/openclaw/openclaw/pull/124641)
- Restore the scripts lint gate for worker detection [#124668](https://github.com/openclaw/openclaw/pull/124668)
- Require the exact workspace dispatch timeout in tests [#124669](https://github.com/openclaw/openclaw/pull/124669)
- Support split GitHub CLI authentication in PR tooling [#124671](https://github.com/openclaw/openclaw/pull/124671)
- Forward wrapper-held GitHub credentials to Node CI dispatch [#124674](https://github.com/openclaw/openclaw/pull/124674)
- Stop Matrix QA probes from retrying after their deadline [#124684](https://github.com/openclaw/openclaw/pull/124684)
- Keep remote changed checks scoped to local edits [#124685](https://github.com/openclaw/openclaw/pull/124685)
- Stop Android wrapper process trees on cancellation [#124686](https://github.com/openclaw/openclaw/pull/124686)
- Unify reply ordering under one keyed FIFO lease [#124690](https://github.com/openclaw/openclaw/pull/124690)
- Centralize gateway device-pairing approval decisions [#124691](https://github.com/openclaw/openclaw/pull/124691)
- Make voice-timeout tests deterministic [#124694](https://github.com/openclaw/openclaw/pull/124694)
- Let stale worktrees use the trusted canonical PR wrapper [#124710](https://github.com/openclaw/openclaw/pull/124710)
- Make beta release fixtures channel-aware [#124717](https://github.com/openclaw/openclaw/pull/124717)
- Align local and CI baseline ratchets to the branch fork [#124720](https://github.com/openclaw/openclaw/pull/124720)
- Reuse one Gateway across hosted wizard exit tests [#124721](https://github.com/openclaw/openclaw/pull/124721)
- Remove stray agent report from the repository root [#124722](https://github.com/openclaw/openclaw/pull/124722)
- Let Crabbox own provider readiness deadlines [#124725](https://github.com/openclaw/openclaw/pull/124725)
- Enforce import ordering and deduplication in linted code [#124730](https://github.com/openclaw/openclaw/pull/124730)
- Split device pairing state, approvals, and token lifecycle owners [#124734](https://github.com/openclaw/openclaw/pull/124734)
- Centralize MCP tool-filter policy [#124739](https://github.com/openclaw/openclaw/pull/124739)
- Reuse the memory plugin module in tests [#124741](https://github.com/openclaw/openclaw/pull/124741)
- Keep synced Testbox candidate checkouts clean [#124743](https://github.com/openclaw/openclaw/pull/124743)
- Remove dead Gateway subscriber registry surface [#124754](https://github.com/openclaw/openclaw/pull/124754)
- Keep QA evidence output paths repository-relative [#124760](https://github.com/openclaw/openclaw/pull/124760)
- Honor model fast-mode defaults in QA runs [#124762](https://github.com/openclaw/openclaw/pull/124762)
- Remove obsolete agent context upgrade assertion [#124765](https://github.com/openclaw/openclaw/pull/124765)
- Invalidate stale extension boundary caches [#124800](https://github.com/openclaw/openclaw/pull/124800)
- Consolidate Pi and OpenCode session catalog implementations [#124801](https://github.com/openclaw/openclaw/pull/124801)
- Select aggregate QA evidence by manifest [#124802](https://github.com/openclaw/openclaw/pull/124802)
- Move validation trust to typed internal producers [#124808](https://github.com/openclaw/openclaw/pull/124808)
- Split two grandfathered oversized modules [#124813](https://github.com/openclaw/openclaw/pull/124813)
- Remove redundant ClickClack scheduler waits [#124819](https://github.com/openclaw/openclaw/pull/124819)
- Consolidate seven runtime validation boundaries into schemas [#124820](https://github.com/openclaw/openclaw/pull/124820)
- Render maturity docs from aggregate QA evidence only [#124823](https://github.com/openclaw/openclaw/pull/124823)
- Derive Control UI cron types from the Gateway protocol [#124827](https://github.com/openclaw/openclaw/pull/124827)
- Record message-tool delivery and mute outcomes [#124830](https://github.com/openclaw/openclaw/pull/124830)
- Give Slack approval headers a typed identity [#124841](https://github.com/openclaw/openclaw/pull/124841)
- Encode internal runtime variants as closed unions [#124845](https://github.com/openclaw/openclaw/pull/124845)
- Remove a redundant Gmail watcher test delay [#124851](https://github.com/openclaw/openclaw/pull/124851)
- Propagate parent heavy-check lock ownership to nested checks [#124859](https://github.com/openclaw/openclaw/pull/124859)
- Replace unsafe test casts with typed fixtures [#124865](https://github.com/openclaw/openclaw/pull/124865)
- Reuse the postpublish verifier file-cap fixture [#124871](https://github.com/openclaw/openclaw/pull/124871)
- Close TUI selectors when callbacks fail [#124876](https://github.com/openclaw/openclaw/pull/124876)
- Derive Plugin SDK boundary cache inputs from TypeScript [#124897](https://github.com/openclaw/openclaw/pull/124897)
- Stabilize the rendered steer-order E2E assertion [#124905](https://github.com/openclaw/openclaw/pull/124905)
- Create sessions in the default Control UI mock Gateway [#124912](https://github.com/openclaw/openclaw/pull/124912)
- Simplify Control UI chat history pagination [#124921](https://github.com/openclaw/openclaw/pull/124921)
- Make Gateway archive lifecycle tests deterministic [#124923](https://github.com/openclaw/openclaw/pull/124923)
- Read slash commands from the shared chat metadata store [#124931](https://github.com/openclaw/openclaw/pull/124931)
- Stabilize Mistral reconnect and NVIDIA catalog tests [#124935](https://github.com/openclaw/openclaw/pull/124935)
- Split chat follow-up browser coverage by behavior [#124938](https://github.com/openclaw/openclaw/pull/124938)
- Source App SDK wire models from gateway-protocol schemas [#124943](https://github.com/openclaw/openclaw/pull/124943)
- Defer QA Lab capture-store access until needed [#124949](https://github.com/openclaw/openclaw/pull/124949)
- Centralize chat side-panel definitions [#124950](https://github.com/openclaw/openclaw/pull/124950)
- Encode internal runtime variants as tagged unions [#124959](https://github.com/openclaw/openclaw/pull/124959)
- Consolidate persisted-data validation into Zod schemas [#124961](https://github.com/openclaw/openclaw/pull/124961)
- Consolidate record-value guards [#124970](https://github.com/openclaw/openclaw/pull/124970)
- Remove Control UI gateway-version fallbacks [#124971](https://github.com/openclaw/openclaw/pull/124971)
- Add discriminated delivery and exec result types [#124979](https://github.com/openclaw/openclaw/pull/124979)
- Replace assertion chains with typed test fixtures, wave 3 [#124986](https://github.com/openclaw/openclaw/pull/124986)
- Detect Claude CLI prompt-cache regressions across fresh processes [#124988](https://github.com/openclaw/openclaw/pull/124988)
- Allow evidence-gated Docker backfills for beta releases [#124999](https://github.com/openclaw/openclaw/pull/124999)
- Keep scoped Vitest runs inside each lane's curated inventory [#125004](https://github.com/openclaw/openclaw/pull/125004)
- Make chat side-panel definitions own their header actions [#125019](https://github.com/openclaw/openclaw/pull/125019)
- Ignore stale extension directories in labeler coverage [#125022](https://github.com/openclaw/openclaw/pull/125022)
- Wait for complete node-worker PID markers in tests [#125034](https://github.com/openclaw/openclaw/pull/125034)
- Reset all plugin metadata caches between tests [#125037](https://github.com/openclaw/openclaw/pull/125037)
- Split provider-provisioning replay tests [#125047](https://github.com/openclaw/openclaw/pull/125047)
- Speed up Control UI package-fixture tests [#125051](https://github.com/openclaw/openclaw/pull/125051)
- Derive plugin TTS types from runtime owners [#125055](https://github.com/openclaw/openclaw/pull/125055)
- Consolidate SecretRef policy and tool-output redaction [#125056](https://github.com/openclaw/openclaw/pull/125056)
- Reuse the setup-registry module in tests [#125087](https://github.com/openclaw/openclaw/pull/125087)
- Cover the Discord progress-draft lifecycle in QA [#125089](https://github.com/openclaw/openclaw/pull/125089)
- Let Android debug and production apps coexist [#125099](https://github.com/openclaw/openclaw/pull/125099)
- Enforce Node-erasable TypeScript across repository scripts [#125104](https://github.com/openclaw/openclaw/pull/125104)
- Move the Review default document into its slot definition [#125105](https://github.com/openclaw/openclaw/pull/125105)
- Document Control UI admission exemptions [#125108](https://github.com/openclaw/openclaw/pull/125108)
- Run trusted development checks locally by default [#125120](https://github.com/openclaw/openclaw/pull/125120)
- Remove remaining orphan media facades [#125121](https://github.com/openclaw/openclaw/pull/125121)
- Reject inconsistent QA suite summaries [#125122](https://github.com/openclaw/openclaw/pull/125122)
- Make managed handoff lifecycle tests deterministic [#125129](https://github.com/openclaw/openclaw/pull/125129)
- Remove a slow duplicate plugin loader test [#125134](https://github.com/openclaw/openclaw/pull/125134)
- Move channel read-gate policy into bundled plugins [#125136](https://github.com/openclaw/openclaw/pull/125136)
- Reuse SMS modules across test cases [#125151](https://github.com/openclaw/openclaw/pull/125151)
- Record legitimate Control UI startup bundle growth [#125156](https://github.com/openclaw/openclaw/pull/125156)
- Make the next-run UI test locale-independent [#125164](https://github.com/openclaw/openclaw/pull/125164)
- Consolidate Teams, models, and Nostr ownership paths [#125165](https://github.com/openclaw/openclaw/pull/125165)
- Isolate computer-tool helper consumers in unit-fast tests [#125167](https://github.com/openclaw/openclaw/pull/125167)
- Isolate update and migration test temp roots [#125171](https://github.com/openclaw/openclaw/pull/125171)
- Enforce useful cold-open behavior for every chat side panel [#125174](https://github.com/openclaw/openclaw/pull/125174)
- Environment-ratchet rename has no shipped delta [#125175](https://github.com/openclaw/openclaw/pull/125175)
- Restore the environment-variable count ratchet baseline [#125185](https://github.com/openclaw/openclaw/pull/125185)
- Add a standalone Telegram Desktop recorder [#125186](https://github.com/openclaw/openclaw/pull/125186)
- Run the environment budget ratchet before merge [#125189](https://github.com/openclaw/openclaw/pull/125189)
- Refresh the Control UI startup-size baseline [#125200](https://github.com/openclaw/openclaw/pull/125200)
- Consolidate channel approval kind types [#125215](https://github.com/openclaw/openclaw/pull/125215)
- Prepare unreleased plugins for standalone upgrade tests [#125251](https://github.com/openclaw/openclaw/pull/125251)
- fix(macos): gateway process tests fail under configured host port [#125271](https://github.com/openclaw/openclaw/pull/125271)
- Restore the core lint line budget for session types [#125272](https://github.com/openclaw/openclaw/pull/125272)
- Prevent false SIGPIPE failures during macOS signing [#125281](https://github.com/openclaw/openclaw/pull/125281)
- Make the Telegram QA launcher parse on macOS Bash [#125294](https://github.com/openclaw/openclaw/pull/125294)
- Unify repository shrink-ratchet mechanics [#125301](https://github.com/openclaw/openclaw/pull/125301)
- Speed up 1Password descendant-cleanup testing [#125321](https://github.com/openclaw/openclaw/pull/125321)
- Verify hosted PR commit membership from the local Git graph [#125335](https://github.com/openclaw/openclaw/pull/125335)
- Make generic Control UI mock sends visibly complete [#125347](https://github.com/openclaw/openclaw/pull/125347)
- Refresh generated native app locales [#125353](https://github.com/openclaw/openclaw/pull/125353)
- Replace the Nostr startup test delay with a completion gate [#125355](https://github.com/openclaw/openclaw/pull/125355)
- Speed up proxy CLI tests and expose cleanup leaks [#125387](https://github.com/openclaw/openclaw/pull/125387)
- Pin repeated Control UI E2E waits to fresh requests [#125439](https://github.com/openclaw/openclaw/pull/125439)
- Isolate browser test profile directories per run [#125440](https://github.com/openclaw/openclaw/pull/125440)
- Make managed-child PID fixtures signal descendant readiness [#125441](https://github.com/openclaw/openclaw/pull/125441)
- Add an opt-in live OpenAI check to packaged upgrade tests [#125448](https://github.com/openclaw/openclaw/pull/125448)
- Authenticate performance probes and pin verifier identity [#125453](https://github.com/openclaw/openclaw/pull/125453)
- Add Cloud Workers settings save preconditions [#125456](https://github.com/openclaw/openclaw/pull/125456)
- Make environment budgets shrink-only and run once [#125459](https://github.com/openclaw/openclaw/pull/125459)
- Pin macOS builds to the final Peekaboo 4.2.1 source [#125464](https://github.com/openclaw/openclaw/pull/125464)
- Recover interrupted scripts/pr review checkouts [#125467](https://github.com/openclaw/openclaw/pull/125467)
- Resolve GitHub assignment identity from authentication [#125481](https://github.com/openclaw/openclaw/pull/125481)
- Preserve macOS elevation package codesign metadata [#125487](https://github.com/openclaw/openclaw/pull/125487)
- Unify benchmark and child-process tooling helpers [#125491](https://github.com/openclaw/openclaw/pull/125491)
- Cover Discussion cold-open without an external URL [#125498](https://github.com/openclaw/openclaw/pull/125498)
- Unify Gateway and node exec approval decisions [#125503](https://github.com/openclaw/openclaw/pull/125503)
- Report GitHub metadata outages accurately in scripts/pr [#125517](https://github.com/openclaw/openclaw/pull/125517)
- Unify exec approval waiting across gateway and node hosts [#125524](https://github.com/openclaw/openclaw/pull/125524)
- Restore Control UI task-suggestion checks [#125538](https://github.com/openclaw/openclaw/pull/125538)
- Release review-init locks after metadata failures [#125547](https://github.com/openclaw/openclaw/pull/125547)
- Stop draft-restore tests racing IndexedDB persistence [#125548](https://github.com/openclaw/openclaw/pull/125548)
- Stress-test packaged SQLite upgrades [#125571](https://github.com/openclaw/openclaw/pull/125571)
- Resolve performance targets from a sparse checkout [#125575](https://github.com/openclaw/openclaw/pull/125575)
- Unify exec approval routing [#125587](https://github.com/openclaw/openclaw/pull/125587)
- Surface Vitest unhandled-error causes in CI output [#125615](https://github.com/openclaw/openclaw/pull/125615)
- Isolate shared-worker Control UI chat tests [#125616](https://github.com/openclaw/openclaw/pull/125616)
- Preserve Codex follow-through checks across candidate versions [#125619](https://github.com/openclaw/openclaw/pull/125619)
- Give Telegram release QA an isolated writable temporary directory [#125625](https://github.com/openclaw/openclaw/pull/125625)
- Use typed diagnostics for Doctor Gateway closes [#125629](https://github.com/openclaw/openclaw/pull/125629)
- Support per-model OpenAI Ultra endpoints [#125630](https://github.com/openclaw/openclaw/pull/125630)
- Avoid placement schema writes during plugin-state open [#125634](https://github.com/openclaw/openclaw/pull/125634)
- Add interactive release-validation campaigns [#125642](https://github.com/openclaw/openclaw/pull/125642)
- Document the native progress-card fallback sunset [#125643](https://github.com/openclaw/openclaw/pull/125643)
- Isolate the AgentSession live model fixture [#125659](https://github.com/openclaw/openclaw/pull/125659)
- Repair full-release E2E harness drift [#125681](https://github.com/openclaw/openclaw/pull/125681)
- Restore the node MCP authenticated live proof [#125683](https://github.com/openclaw/openclaw/pull/125683)
- Opt Matrix mention-safety QA into raw command text [#125685](https://github.com/openclaw/openclaw/pull/125685)
- Stabilize OpenClawKit model-patch rollback tests under load [#125689](https://github.com/openclaw/openclaw/pull/125689)
- Redact shared release-lane failure diagnostics [#125697](https://github.com/openclaw/openclaw/pull/125697)
- Restore real auth persistence coverage in tests [#125699](https://github.com/openclaw/openclaw/pull/125699)
- Centralize reliable waits for Control UI tests [#125702](https://github.com/openclaw/openclaw/pull/125702)
- Pin current model-selection precedence across turn paths [#125727](https://github.com/openclaw/openclaw/pull/125727)
- Deduplicate realtime voice audio handling [#125728](https://github.com/openclaw/openclaw/pull/125728)
- Restore hidden-startup rendering in the mock Control UI [#125729](https://github.com/openclaw/openclaw/pull/125729)
- Simplify QA Lab scenario-runner infrastructure [#125738](https://github.com/openclaw/openclaw/pull/125738)
- Make task detail a standard side-panel document [#125748](https://github.com/openclaw/openclaw/pull/125748)
- Stabilize UI lint and markdown-table test isolation [#125766](https://github.com/openclaw/openclaw/pull/125766)
- Split oversized Control UI chat side-panel modules [#125770](https://github.com/openclaw/openclaw/pull/125770)
- Unify provider routing facts across model requests [#125799](https://github.com/openclaw/openclaw/pull/125799)
- Repair isolated table test and update startup budget [#125800](https://github.com/openclaw/openclaw/pull/125800)
- Keep the long recovery E2E proof alive [#125804](https://github.com/openclaw/openclaw/pull/125804)
- Consolidate shared internal tooling helpers [#125805](https://github.com/openclaw/openclaw/pull/125805)
- Settle the hosted Gateway registry before QA route registration [#125814](https://github.com/openclaw/openclaw/pull/125814)
- Avoid upgrade-survivor stop waits on zombie processes [#125829](https://github.com/openclaw/openclaw/pull/125829)
- Stabilize worker inference cancellation tests [#125835](https://github.com/openclaw/openclaw/pull/125835)
- Simplify LanceDB embedding-provider retirement [#125841](https://github.com/openclaw/openclaw/pull/125841)
- Stabilize durable cron ownership tests [#125843](https://github.com/openclaw/openclaw/pull/125843)
- Canonicalize macOS update-test fixture paths [#125846](https://github.com/openclaw/openclaw/pull/125846)
- Pin Gateway chat-run lifecycle transitions in tests [#125851](https://github.com/openclaw/openclaw/pull/125851)
- Stop the Codex extension CI lane from hanging [#125864](https://github.com/openclaw/openclaw/pull/125864)
- Make Code Mode Promise-drain regression tests deterministic [#125869](https://github.com/openclaw/openclaw/pull/125869)
- Refresh generated Control UI locale data [#125871](https://github.com/openclaw/openclaw/pull/125871)
- Speed up session hovercard browser tests [#125876](https://github.com/openclaw/openclaw/pull/125876)
- Consolidate shutdown watchdog process proof [#125890](https://github.com/openclaw/openclaw/pull/125890)
- Restore Control UI startup budget margin [#125891](https://github.com/openclaw/openclaw/pull/125891)
- Narrow the harness differential test mock [#125911](https://github.com/openclaw/openclaw/pull/125911)
- Stabilize Control UI outbox retry tests [#125912](https://github.com/openclaw/openclaw/pull/125912)
- Distinguish running QA artifacts from completed results [#125924](https://github.com/openclaw/openclaw/pull/125924)
- Narrow macOS node responses to decoding only [#125926](https://github.com/openclaw/openclaw/pull/125926)
- Reuse one temporary root in model-selection differential tests [#125930](https://github.com/openclaw/openclaw/pull/125930)
- Remove provider JSON-reader test facades [#125956](https://github.com/openclaw/openclaw/pull/125956)
- Stabilize recorded Canvas widget action proof [#125959](https://github.com/openclaw/openclaw/pull/125959)
- Speed up plugin load-context tests [#125965](https://github.com/openclaw/openclaw/pull/125965)
- Remove Slack cache test reset seams [#125971](https://github.com/openclaw/openclaw/pull/125971)
- Remove Telegram's test-only forum cache reset [#125986](https://github.com/openclaw/openclaw/pull/125986)
- Scope optional plugin checks to covered release scenarios [#126000](https://github.com/openclaw/openclaw/pull/126000)
- Align the packaged Doctor fixture with Memory Core [#126009](https://github.com/openclaw/openclaw/pull/126009)
- Offer OCM installation during release validation [#126019](https://github.com/openclaw/openclaw/pull/126019)
- Revert provider request-acceptance changes [#126021](https://github.com/openclaw/openclaw/pull/126021)
- Remove a brittle OpenAI Realtime status assumption [#126025](https://github.com/openclaw/openclaw/pull/126025)
- fix(ci): preserve current Kova gate failures [#126034](https://github.com/openclaw/openclaw/pull/126034)
- Make Skill Workshop visual proof capture opt-in [#126051](https://github.com/openclaw/openclaw/pull/126051)
- Consolidate meeting and media-provider family helpers [#126053](https://github.com/openclaw/openclaw/pull/126053)
- Streamline beta release validation setup [#126055](https://github.com/openclaw/openclaw/pull/126055)
- Restore release-validation skill formatting [#126060](https://github.com/openclaw/openclaw/pull/126060)
- Consolidate bundled plugin retry scheduling [#126065](https://github.com/openclaw/openclaw/pull/126065)
- Stabilize the shared Control UI test lane [#126071](https://github.com/openclaw/openclaw/pull/126071)
- Consolidate session authentication selection [#126084](https://github.com/openclaw/openclaw/pull/126084)
- Remove test-only release-check helper exports [#126105](https://github.com/openclaw/openclaw/pull/126105)
- Remove redundant agent transport contract test facades [#126110](https://github.com/openclaw/openclaw/pull/126110)
- Generalize Control UI session placement startup [#126118](https://github.com/openclaw/openclaw/pull/126118)
- Remove unused update-CLI sidecar fixtures [#126126](https://github.com/openclaw/openclaw/pull/126126)
- Route changed package fixtures to their owner tests [#126131](https://github.com/openclaw/openclaw/pull/126131)
- Trim locale, QA flow, and fixture debt [#126139](https://github.com/openclaw/openclaw/pull/126139)
- Restore plural execution channels in QA Lab [#126140](https://github.com/openclaw/openclaw/pull/126140)
- Remove redundant subset assertions from tests [#126142](https://github.com/openclaw/openclaw/pull/126142)
- Remove the tool-policy warning-cache test reset API [#126175](https://github.com/openclaw/openclaw/pull/126175)
- Consolidate TUI PTY session coverage [#126185](https://github.com/openclaw/openclaw/pull/126185)
- Remove the channel-activity test reset seam [#126188](https://github.com/openclaw/openclaw/pull/126188)
- Detect byte growth in existing dist-runtime files [#126191](https://github.com/openclaw/openclaw/pull/126191)
- Promote shared runtime primitives through the Plugin SDK [#126193](https://github.com/openclaw/openclaw/pull/126193)
- Keep changed Control UI tests in UI lanes [#126197](https://github.com/openclaw/openclaw/pull/126197)
- Remove the skill scanner's test-only cache reset seam [#126199](https://github.com/openclaw/openclaw/pull/126199)
- Restore GLM-5.3 reasoning in the Z.ai live probe [#126202](https://github.com/openclaw/openclaw/pull/126202)
- Remove the channel-avatar cache test reset seam [#126209](https://github.com/openclaw/openclaw/pull/126209)
- Speed up the audit lock-contention test [#126213](https://github.com/openclaw/openclaw/pull/126213)
- Refresh the Codex plugin security-scan baseline [#126215](https://github.com/openclaw/openclaw/pull/126215)
- Clarify CODEOWNERS routing and review enforcement [#126216](https://github.com/openclaw/openclaw/pull/126216)
- Restore real image-capability coverage in gateway chat tests [#126217](https://github.com/openclaw/openclaw/pull/126217)
- Move Mantis Telegram proof to a local recorder workbench [#126220](https://github.com/openclaw/openclaw/pull/126220)
- Remove the Google Meet test-only entrypoint export [#126223](https://github.com/openclaw/openclaw/pull/126223)
- Route the Codex run-attempt tools test [#126225](https://github.com/openclaw/openclaw/pull/126225)
- Restore one Vitest shard owner for Codex run-attempt tools [#126236](https://github.com/openclaw/openclaw/pull/126236)
- Simplify update, uninstall, and installer lifecycle internals [#126240](https://github.com/openclaw/openclaw/pull/126240)
- Pin the final Peekaboo source for macOS [#126243](https://github.com/openclaw/openclaw/pull/126243)
- Isolate packaged mock-auth bootstrap in Telegram QA [#126247](https://github.com/openclaw/openclaw/pull/126247)
- Add an explicit Google Meet test API boundary [#126249](https://github.com/openclaw/openclaw/pull/126249)
- Retain pending same-SHA QA workflow calls [#126254](https://github.com/openclaw/openclaw/pull/126254)
- Wait for complete terminal task metadata in QA [#126256](https://github.com/openclaw/openclaw/pull/126256)
- Restore agentic plugin prerelease fixture loading [#126258](https://github.com/openclaw/openclaw/pull/126258)
- Remove the orphaned macOS IPC request codec [#126267](https://github.com/openclaw/openclaw/pull/126267)
- Restore the Gateway protocol lint gate [#126275](https://github.com/openclaw/openclaw/pull/126275)
- Remove redundant subset assertions from tests [#126293](https://github.com/openclaw/openclaw/pull/126293)
- Remove duplicated low-value tests [#126300](https://github.com/openclaw/openclaw/pull/126300)
- Stabilize extension tests in shared workers [#126309](https://github.com/openclaw/openclaw/pull/126309)
- Remove redundant TUI and Codex test scaffolding [#126310](https://github.com/openclaw/openclaw/pull/126310)
- Remove redundant browser, worktree, and Control UI tests [#126312](https://github.com/openclaw/openclaw/pull/126312)
- Keep changed-test routing complete for shared test helpers [#126325](https://github.com/openclaw/openclaw/pull/126325)
- Speed up the macOS elevation-host test suite [#126338](https://github.com/openclaw/openclaw/pull/126338)
- Pin macOS builds to Peekaboo 4.2.2 [#126340](https://github.com/openclaw/openclaw/pull/126340)
- Deflake QA Lab process-group PID waits [#126351](https://github.com/openclaw/openclaw/pull/126351)
- Wait for the config-restart wake in QA Lab [#126368](https://github.com/openclaw/openclaw/pull/126368)
- Prevent QA Gateway port reservations from deadlocking startup [#126370](https://github.com/openclaw/openclaw/pull/126370)
- Move external llama-server policies to shared runtime owners [#126371](https://github.com/openclaw/openclaw/pull/126371)
- Centralize capability-gated node selection [#126374](https://github.com/openclaw/openclaw/pull/126374)
- Use the packaged CLI in Git update fixtures [#126383](https://github.com/openclaw/openclaw/pull/126383)
- Reject incomplete QA evidence runs [#126407](https://github.com/openclaw/openclaw/pull/126407)
- Stabilize model-picker geometry E2E checks [#126438](https://github.com/openclaw/openclaw/pull/126438)
- Restore the npm package size budget without removing worker assets [#126448](https://github.com/openclaw/openclaw/pull/126448)
- Add release-validation tester handoff [#126456](https://github.com/openclaw/openclaw/pull/126456)
- Preserve real script failures in QA evidence [#126466](https://github.com/openclaw/openclaw/pull/126466)
- Preflight OCM imports for release validation [#126471](https://github.com/openclaw/openclaw/pull/126471)
- Clarify owner review versus independent approval [#126475](https://github.com/openclaw/openclaw/pull/126475)
- Bound installed worker artifact parsing [#126491](https://github.com/openclaw/openclaw/pull/126491)
- Add copied Codex session resume regression coverage [#126502](https://github.com/openclaw/openclaw/pull/126502)
- Protect copied-state upgrades with an end-to-end regression [#126508](https://github.com/openclaw/openclaw/pull/126508)
- Stabilize Control UI settings and update-recovery tests [#126538](https://github.com/openclaw/openclaw/pull/126538)
- Unify ChatGPT auth identity derivation [#126544](https://github.com/openclaw/openclaw/pull/126544)
- Isolate colliding QA character-evaluation artifacts [#126558](https://github.com/openclaw/openclaw/pull/126558)
- Remove persisted thinking-selection provenance [#126561](https://github.com/openclaw/openclaw/pull/126561)
- Speed up TUI auth-child timer tests [#126563](https://github.com/openclaw/openclaw/pull/126563)
- Prevent stale build output from inflating package tarballs [#126577](https://github.com/openclaw/openclaw/pull/126577)
- Make Control UI recovery proof capture opt-in [#126583](https://github.com/openclaw/openclaw/pull/126583)
- Repair Control UI service-worker update test [#126584](https://github.com/openclaw/openclaw/pull/126584)
- Accept complete trusted Codex scan layouts [#126588](https://github.com/openclaw/openclaw/pull/126588)
- Speed up QA evidence collision tests without changing production behavior [#126596](https://github.com/openclaw/openclaw/pull/126596)
- Stabilize gateway restart replay tests [#126606](https://github.com/openclaw/openclaw/pull/126606)
- Stabilize macOS chat outbox readiness tests [#126617](https://github.com/openclaw/openclaw/pull/126617)
- Keep frozen release validation independent of moving main [#126622](https://github.com/openclaw/openclaw/pull/126622)
- Give TUI PTY tests one exclusive serial owner [#126624](https://github.com/openclaw/openclaw/pull/126624)
- perf(agents): reuse gateway plugin generation for prepared model runtime [#126630](https://github.com/openclaw/openclaw/pull/126630)
- Remove stale plugin security-scan expectations [#126632](https://github.com/openclaw/openclaw/pull/126632)
- Make partial-reply lifecycle tests settle deterministically [#126639](https://github.com/openclaw/openclaw/pull/126639)
- Speed up Buzz reconnect lifecycle tests [#126649](https://github.com/openclaw/openclaw/pull/126649)
- Trigger Mantis Telegram proof from PR labels and comments [#126658](https://github.com/openclaw/openclaw/pull/126658)
- Trigger restart health-probe timeout deterministically in tests [#126664](https://github.com/openclaw/openclaw/pull/126664)
- Dispatch frozen release validation by full candidate SHA [#126669](https://github.com/openclaw/openclaw/pull/126669)
- Cache parsed workflows in release acceptance tests [#126673](https://github.com/openclaw/openclaw/pull/126673)
- Prevent temp-path guardrail Git buffer overflows [#126683](https://github.com/openclaw/openclaw/pull/126683)
- Refresh generated native locale artifacts [#126696](https://github.com/openclaw/openclaw/pull/126696)
- Acknowledge and track Mantis pull-request requests [#126702](https://github.com/openclaw/openclaw/pull/126702)
- Clean up exited Telegram QA observers safely [#126704](https://github.com/openclaw/openclaw/pull/126704)
- Update the macOS Peekaboo Bridge source pin [#126709](https://github.com/openclaw/openclaw/pull/126709)
- Speed up Claude live-capture tests [#126717](https://github.com/openclaw/openclaw/pull/126717)
- Deduplicate Plugin SDK release-preflight declarations [#126725](https://github.com/openclaw/openclaw/pull/126725)
- Isolate Nextcloud Talk error-response timing test [#126740](https://github.com/openclaw/openclaw/pull/126740)
- Simplify ACP ownership and conversation-binding plumbing [#126741](https://github.com/openclaw/openclaw/pull/126741)
- Keep Gateway session tests on their selected per-case store [#126744](https://github.com/openclaw/openclaw/pull/126744)
- Tighten the media assertion-safety baseline [#126745](https://github.com/openclaw/openclaw/pull/126745)
- Close the ACP test database by path [#126746](https://github.com/openclaw/openclaw/pull/126746)
- Keep Control UI configuration helpers out of the startup bundle [#126754](https://github.com/openclaw/openclaw/pull/126754)
- Restore complete changed-file coverage for web extractors [#126755](https://github.com/openclaw/openclaw/pull/126755)
- Batch ignored-file checks during PR worktree transitions [#126759](https://github.com/openclaw/openclaw/pull/126759)
- Pin recurring main validation to one exact SHA [#126766](https://github.com/openclaw/openclaw/pull/126766)
- Bind archive-terminal test PTYs to their owners [#126767](https://github.com/openclaw/openclaw/pull/126767)
- Add a Telegram-only package acceptance profile [#126769](https://github.com/openclaw/openclaw/pull/126769)
- QA Lab accepts `dm` at direct-message ingress [#126782](https://github.com/openclaw/openclaw/pull/126782)
- Allow manual Telegram package-acceptance runs to start [#126794](https://github.com/openclaw/openclaw/pull/126794)
- Make Control UI gzip output runtime-independent [#126795](https://github.com/openclaw/openclaw/pull/126795)
- Canonicalize sandbox backend ownership [#126828](https://github.com/openclaw/openclaw/pull/126828)
- Keep frozen release tooling trusted after main advances [#126881](https://github.com/openclaw/openclaw/pull/126881)
- Replace Matrix lease-retirement test waits with fake timers [#126885](https://github.com/openclaw/openclaw/pull/126885)
- Remove redundant native test mirrors [#126896](https://github.com/openclaw/openclaw/pull/126896)
- Remove duplicate plugin test assertions [#126917](https://github.com/openclaw/openclaw/pull/126917)
- Remove implementation-coupled core test scaffolding [#126926](https://github.com/openclaw/openclaw/pull/126926)
- Provision supported tooling for fresh and resumed Amp orbs [#126933](https://github.com/openclaw/openclaw/pull/126933)
- Accept later extended-stable patch candidates [#126936](https://github.com/openclaw/openclaw/pull/126936)
- Trim redundant UI and tooling test seams [#126937](https://github.com/openclaw/openclaw/pull/126937)
- feat: persist bounded transcript display rows [#126939](https://github.com/openclaw/openclaw/pull/126939)
- feat: persist stateful transcript display semantics [#126943](https://github.com/openclaw/openclaw/pull/126943)
- Route Docker seed changes to executable CI lanes [#126949](https://github.com/openclaw/openclaw/pull/126949)
- Refresh generated configuration documentation baselines [#126956](https://github.com/openclaw/openclaw/pull/126956)
- Update prerelease onboarding proof for shared auth storage [#126958](https://github.com/openclaw/openclaw/pull/126958)
- docs: improve release validation workflow [#126959](https://github.com/openclaw/openclaw/pull/126959)
- test(e2e): share canonical auth store reader [#126960](https://github.com/openclaw/openclaw/pull/126960)
- Restore live OpenAI onboarding regression proof [#126965](https://github.com/openclaw/openclaw/pull/126965)
- Avoid duplicate web-channel manifest discovery [#126966](https://github.com/openclaw/openclaw/pull/126966)
- Stop the wizard test from mutating the global Node path [#126969](https://github.com/openclaw/openclaw/pull/126969)
- Raise the npm package-size guard for bundled documentation [#126970](https://github.com/openclaw/openclaw/pull/126970)
- Align failed-tool recovery QA with the canonical honesty instruction [#126971](https://github.com/openclaw/openclaw/pull/126971)
- Reject skipped-only QA confidence lanes [#126975](https://github.com/openclaw/openclaw/pull/126975)
- Make Mantis Telegram backfills reliable [#126980](https://github.com/openclaw/openclaw/pull/126980)
- Make package onboarding the primary container QA owner [#126981](https://github.com/openclaw/openclaw/pull/126981)
- Cache model suppression plans per plugin generation [#126982](https://github.com/openclaw/openclaw/pull/126982)
- test: remove final moving-tip duplicates [#126990](https://github.com/openclaw/openclaw/pull/126990)
- Keep packed Plugin SDK checks on public package types [#126992](https://github.com/openclaw/openclaw/pull/126992)
- fix(release): establish immutable release plan contract [#127008](https://github.com/openclaw/openclaw/pull/127008)
- Make release-validation retries explicit and fail closed [#127012](https://github.com/openclaw/openclaw/pull/127012)
- Report release blockers before diagnostics finish [#127014](https://github.com/openclaw/openclaw/pull/127014)
- Split oversized cron view tests to restore lint [#127018](https://github.com/openclaw/openclaw/pull/127018)
- Allow Unreleased changelog packaging for full-SHA npm preflights [#127019](https://github.com/openclaw/openclaw/pull/127019)
- Speed up lazy UI lifecycle tests [#127025](https://github.com/openclaw/openclaw/pull/127025)
- Let Mantis run capable Telegram proof without preflight skips [#127032](https://github.com/openclaw/openclaw/pull/127032)
- Remove ineffective CLI startup import edges [#127046](https://github.com/openclaw/openclaw/pull/127046)
- Speed up Control UI pairing access tests [#127047](https://github.com/openclaw/openclaw/pull/127047)
- Align Codex live validation with Ultra-to-Max request mapping [#127058](https://github.com/openclaw/openclaw/pull/127058)
- Speed up Agents page asynchronous test polling [#127063](https://github.com/openclaw/openclaw/pull/127063)
- Narrow installed plugin-index normalization imports [#127067](https://github.com/openclaw/openclaw/pull/127067)
- Bound QA Lab OTEL timeout diagnostics [#127077](https://github.com/openclaw/openclaw/pull/127077)
- Stabilize the model fallback E2E test runtime [#127079](https://github.com/openclaw/openclaw/pull/127079)
- Speed up model-provider page regression tests [#127085](https://github.com/openclaw/openclaw/pull/127085)
- Remove obsolete Telegram progress-summary collapse [#127089](https://github.com/openclaw/openclaw/pull/127089)
- Run transcript-cursor E2E with full Gateway startup [#127094](https://github.com/openclaw/openclaw/pull/127094)
- Verify migrated Codex auth through the shared owner [#127097](https://github.com/openclaw/openclaw/pull/127097)
- Speed up new-session model-control tests [#127101](https://github.com/openclaw/openclaw/pull/127101)
- Isolate Node cache writes from pull request jobs [#127107](https://github.com/openclaw/openclaw/pull/127107)
- Improve Mantis Telegram proof reliability and evidence handling [#127108](https://github.com/openclaw/openclaw/pull/127108)
- Speed up Tasks page unit-test state observations [#127121](https://github.com/openclaw/openclaw/pull/127121)
- Remove the obsolete Discord action runtime wrapper [#127123](https://github.com/openclaw/openclaw/pull/127123)
- Avoid repeated legacy delivery-queue scans [#127129](https://github.com/openclaw/openclaw/pull/127129)
- Remove beta-only outbound reply migration [#127133](https://github.com/openclaw/openclaw/pull/127133)
- Speed up Control UI model-setup tests [#127134](https://github.com/openclaw/openclaw/pull/127134)
- perf(ci): parallelize installer smoke validation [#127138](https://github.com/openclaw/openclaw/pull/127138)
- Speed up Control UI server-preference tests [#127144](https://github.com/openclaw/openclaw/pull/127144)
- Prevent manual CI candidates from writing shared caches [#127149](https://github.com/openclaw/openclaw/pull/127149)
- Isolate performance benchmark credentials and caches from untrusted refs [#127160](https://github.com/openclaw/openclaw/pull/127160)
- Speed up board-provider snapshot tests [#127163](https://github.com/openclaw/openclaw/pull/127163)
- Reuse provider ownership metadata during plugin lookups [#127178](https://github.com/openclaw/openclaw/pull/127178)
- Restore QA scenario discovery by execution path [#127185](https://github.com/openclaw/openclaw/pull/127185)
- Unify native approval client setup logic [#127189](https://github.com/openclaw/openclaw/pull/127189)
- fix(test): gateway publication suite fails Windows teardown with EBUSY [#127201](https://github.com/openclaw/openclaw/pull/127201)
- Avoid full tokenization when parsing session keys [#127249](https://github.com/openclaw/openclaw/pull/127249)
- Flatten gateway HTTP request stages [#127264](https://github.com/openclaw/openclaw/pull/127264)
- Centralize update CLI test temp-directory cleanup [#127286](https://github.com/openclaw/openclaw/pull/127286)
- fix(plugins): reuse published metadata on hot paths [#127355](https://github.com/openclaw/openclaw/pull/127355)
- perf(agents): avoid full roster projection for point lookups [#127384](https://github.com/openclaw/openclaw/pull/127384)
- improve(qa): avoid loading agent runtime in OTEL receiver tests [#127420](https://github.com/openclaw/openclaw/pull/127420)
- perf(discord): avoid redundant outbound payload cleanup [#127422](https://github.com/openclaw/openclaw/pull/127422)
- improve: speed up browser extension security test suites [#127471](https://github.com/openclaw/openclaw/pull/127471)
- refactor(tooling): centralize managed child process cleanup [#127480](https://github.com/openclaw/openclaw/pull/127480)
- test(agents): cover configured bundle MCP request timeouts [#127529](https://github.com/openclaw/openclaw/pull/127529)
- perf(gateway-client): skip unused timing dispatch [#127566](https://github.com/openclaw/openclaw/pull/127566)
- test(msteams): pin reply threading and reaction routing across conversation kinds [#127568](https://github.com/openclaw/openclaw/pull/127568)
- improve(test): speed up model-provider recovery observations [#127570](https://github.com/openclaw/openclaw/pull/127570)
- fix: stop a leaked console-routing latch from flaking CLI failure-output tests [#127604](https://github.com/openclaw/openclaw/pull/127604)
- perf(slack): reuse prepared outbound payload [#127678](https://github.com/openclaw/openclaw/pull/127678)
- perf(onboarding): avoid broad provider-auth runtime imports [#127680](https://github.com/openclaw/openclaw/pull/127680)
- refactor(telegram): remove obsolete action runtime override [#127683](https://github.com/openclaw/openclaw/pull/127683)
- refactor: remove redundant extension test seams [#127688](https://github.com/openclaw/openclaw/pull/127688)
- chore: trim duplicate core test assertions [#127708](https://github.com/openclaw/openclaw/pull/127708)
- fix(qa): replace Linux-only /proc probes in the Telegram proof harness [#127718](https://github.com/openclaw/openclaw/pull/127718)
- refactor(browser): remove test-only route bypass [#127727](https://github.com/openclaw/openclaw/pull/127727)
- test(plugins): preserve configless manifest expectation [#127765](https://github.com/openclaw/openclaw/pull/127765)
- fix(e2e): restore package-to-git release validation [#127768](https://github.com/openclaw/openclaw/pull/127768)
- improve(media): skip unused local MIME sniff [#127772](https://github.com/openclaw/openclaw/pull/127772)
- feat(mantis): programmable proof boundaries with recipe library [#127782](https://github.com/openclaw/openclaw/pull/127782)
- improve(gateway): avoid copying single-chunk request bodies [#127783](https://github.com/openclaw/openclaw/pull/127783)
- fix(mantis): publish proof comments on auto-triggered runs [#127787](https://github.com/openclaw/openclaw/pull/127787)
- improve(gateway): avoid targetless session cache allocations [#127790](https://github.com/openclaw/openclaw/pull/127790)
- refactor(plugins): unify synchronous message hooks [#127797](https://github.com/openclaw/openclaw/pull/127797)
- perf(mantis): parallelize proof builds and warm caches [#127798](https://github.com/openclaw/openclaw/pull/127798)
- chore(ui): restore markdown test lint [#127799](https://github.com/openclaw/openclaw/pull/127799)
- improve(googlechat): skip empty inbound media projection [#127803](https://github.com/openclaw/openclaw/pull/127803)
- feat(mantis): keep QA leases alive and stage fixture plugins [#127804](https://github.com/openclaw/openclaw/pull/127804)
- fix(slack): keep command tests inside plugin boundary [#127805](https://github.com/openclaw/openclaw/pull/127805)
- fix(release): accept frozen QA completion evidence [#127806](https://github.com/openclaw/openclaw/pull/127806)
- improve(gateway): reduce scoped broadcast dispatch work [#127811](https://github.com/openclaw/openclaw/pull/127811)
- fix(ci): stop reply-dispatch shard state leaks [#127814](https://github.com/openclaw/openclaw/pull/127814)
- improve(line): reduce text-only inbound processing [#127827](https://github.com/openclaw/openclaw/pull/127827)
- feat(e2e): record provider media content facts for Mantis proofs [#127830](https://github.com/openclaw/openclaw/pull/127830)
- refactor(ui): count background tasks in one place [#127832](https://github.com/openclaw/openclaw/pull/127832)
- perf(e2e): reuse one authorized Telegram Desktop session per Mantis run [#127835](https://github.com/openclaw/openclaw/pull/127835)
- refactor(tui): stop sanitizing each streamed markdown chunk twice [#127838](https://github.com/openclaw/openclaw/pull/127838)
- refactor(ui): drop the detail-panel message upgrade path that never runs [#127846](https://github.com/openclaw/openclaw/pull/127846)
- improve(signal): reuse parsed inbound payload [#127851](https://github.com/openclaw/openclaw/pull/127851)
- improve(mattermost): decode inbound websocket frames once [#127870](https://github.com/openclaw/openclaw/pull/127870)
- fix(mantis): keep caller stdin for the lease-fenced command [#127871](https://github.com/openclaw/openclaw/pull/127871)
- improve(imessage): reuse prepared inbound account service [#127877](https://github.com/openclaw/openclaw/pull/127877)
- fix(mantis): pin harness pdf tool model to the catalog model [#127882](https://github.com/openclaw/openclaw/pull/127882)
- improve(whatsapp): reuse inbound message projection [#127958](https://github.com/openclaw/openclaw/pull/127958)
- fix(mantis): prove the PR merge commit instead of the raw head [#127961](https://github.com/openclaw/openclaw/pull/127961)
- improve(irc): reuse claimed inbound projection [#127966](https://github.com/openclaw/openclaw/pull/127966)
- perf(sessions): skip duplicate transcript root preparation [#127990](https://github.com/openclaw/openclaw/pull/127990)
- perf(plugins): share schema validation format scope [#128004](https://github.com/openclaw/openclaw/pull/128004)
- perf(mantis): build proof lanes runtime-only [#128007](https://github.com/openclaw/openclaw/pull/128007)
- fix(mantis): surface lane block reasons in proof verdicts [#128013](https://github.com/openclaw/openclaw/pull/128013)
- fix(test): expose diagnostics when Vitest stalls [#128020](https://github.com/openclaw/openclaw/pull/128020)
- perf(slack): reuse thread history text projection [#128022](https://github.com/openclaw/openclaw/pull/128022)
- test(infra): stop the ssh tunnel stderr cases hanging the suite [#128027](https://github.com/openclaw/openclaw/pull/128027)
- perf(qa-lab): avoid quadratic lane exclusions [#128072](https://github.com/openclaw/openclaw/pull/128072)
- perf(process): avoid rescanning exited runs [#128080](https://github.com/openclaw/openclaw/pull/128080)
- feat(mantis): publish trusted lane fact digests and a differential line [#128089](https://github.com/openclaw/openclaw/pull/128089)
- feat(mantis): give the proof agent a developer shell and gateway restart [#128094](https://github.com/openclaw/openclaw/pull/128094)
- feat(mantis): add long-held active turn recipe [#128117](https://github.com/openclaw/openclaw/pull/128117)
- fix(mantis): fence lost Telegram leases without a ten-second delay [#128122](https://github.com/openclaw/openclaw/pull/128122)
- fix(mantis): enforce verdict-expectation coherence and publish agent analysis files [#128124](https://github.com/openclaw/openclaw/pull/128124)
- improve(outbound): reduce chunk planning overhead [#128128](https://github.com/openclaw/openclaw/pull/128128)
- refactor(backup): unify required path resolution [#128132](https://github.com/openclaw/openclaw/pull/128132)
- perf(state): skip redundant schema probes on cached database writes [#128133](https://github.com/openclaw/openclaw/pull/128133)
- refactor(context-engine): remove owner cleanup helper [#128143](https://github.com/openclaw/openclaw/pull/128143)
- test(control-ui): guard chat streaming runtime budgets [#128154](https://github.com/openclaw/openclaw/pull/128154)
- refactor(plugins): unify plugin entry ordering [#128170](https://github.com/openclaw/openclaw/pull/128170)
- Attach the macOS onboarding CLI install prompt to the window [#128183](https://github.com/openclaw/openclaw/pull/128183)
- refactor(mantis): give Codex open-ended Telegram proof control [#128197](https://github.com/openclaw/openclaw/pull/128197)
- chore(test): shrink Discord assertion baseline [#128203](https://github.com/openclaw/openclaw/pull/128203)
- fix(test): isolate provider failover mocks [#128207](https://github.com/openclaw/openclaw/pull/128207)
- fix(release): retain native prebuilds in git fixtures [#128210](https://github.com/openclaw/openclaw/pull/128210)
- test(audit): event-loop probes fail on shared-runner jitter instead of real blocking [AI-assisted] [#128228](https://github.com/openclaw/openclaw/pull/128228)
- fix(ci): await Slack provider reply delivery [#128234](https://github.com/openclaw/openclaw/pull/128234)
- fix(ci): validate complete plugin binding proof logs [#128235](https://github.com/openclaw/openclaw/pull/128235)
- fix(release): install Bun smoke from candidate payload [#128243](https://github.com/openclaw/openclaw/pull/128243)
- perf(discord): avoid duplicate inbound binding lookup [#128264](https://github.com/openclaw/openclaw/pull/128264)
- fix(qa): fail onboarding when required assertions are missing [#128277](https://github.com/openclaw/openclaw/pull/128277)
- refactor: consolidate loader test fixtures [#128291](https://github.com/openclaw/openclaw/pull/128291)
- perf(matrix): reuse attachment projection [#128294](https://github.com/openclaw/openclaw/pull/128294)
- refactor(workboard): consolidate gateway and schema helpers [#128307](https://github.com/openclaw/openclaw/pull/128307)
- improve(telegram): reduce reply preparation overhead [AI] [#128308](https://github.com/openclaw/openclaw/pull/128308)
- test(memory-core): release cached databases before removing fixture state dirs [#128310](https://github.com/openclaw/openclaw/pull/128310)
- fix(qa-lab): release Mantis credentials when cleanup fails [#128315](https://github.com/openclaw/openclaw/pull/128315)
- refactor(tests): deduplicate platform and runtime fixtures [#128323](https://github.com/openclaw/openclaw/pull/128323)
- fix(slack): prevent stale debounce state after duplicate events [#128331](https://github.com/openclaw/openclaw/pull/128331)
- refactor(protocol): rely on synthesized Swift coding keys [#128334](https://github.com/openclaw/openclaw/pull/128334)
- test(qa-lab): release cached databases before removing fixture temp dirs [#128335](https://github.com/openclaw/openclaw/pull/128335)
- refactor(providers): deduplicate failover and streaming fixtures [#128338](https://github.com/openclaw/openclaw/pull/128338)
- refactor(agents): consolidate generation and runtime fixtures [#128339](https://github.com/openclaw/openclaw/pull/128339)
- refactor(cli): centralize onboarding and setup option ownership [#128349](https://github.com/openclaw/openclaw/pull/128349)
- fix(release): register focused beta evidence on main [#128391](https://github.com/openclaw/openclaw/pull/128391)
- fix(test): provide runtime to Ollama parity registration [#128396](https://github.com/openclaw/openclaw/pull/128396)
- test(scripts): wait for the e2e state path file to have content [#128403](https://github.com/openclaw/openclaw/pull/128403)
- improve(markdown): skip impossible table parses [#128408](https://github.com/openclaw/openclaw/pull/128408)
- test(nodes): pin trusted session identity against spoofed invoke params [#128415](https://github.com/openclaw/openclaw/pull/128415)
- fix(qa): keep restart validation on the active pending wait [#128436](https://github.com/openclaw/openclaw/pull/128436)
- fix(ci): isolate release QA lane locks [#128458](https://github.com/openclaw/openclaw/pull/128458)
- perf(ci): split Telegram prerelease tests [#128459](https://github.com/openclaw/openclaw/pull/128459)
- improve(ci): shard iOS screenshot capture [#128460](https://github.com/openclaw/openclaw/pull/128460)
- fix(ci): gate source package producers [#128463](https://github.com/openclaw/openclaw/pull/128463)
- fix(agents): honor private QA forced runtime selection [#128475](https://github.com/openclaw/openclaw/pull/128475)
- Avoid duplicate focused Gateway test execution [#128486](https://github.com/openclaw/openclaw/pull/128486)
- revert: undo unauthorized Codex hook relay merge [#128493](https://github.com/openclaw/openclaw/pull/128493)
- refactor(scripts): consolidate build memory fixtures [#128506](https://github.com/openclaw/openclaw/pull/128506)
- fix(ci): settle Claude cache probe before generation baseline [#128507](https://github.com/openclaw/openclaw/pull/128507)
- fix(test): scoped unit-fast runs execute unrelated projects and leak isolation [#128554](https://github.com/openclaw/openclaw/pull/128554)
- test(msteams): cover agent reaction removal parity [#128560](https://github.com/openclaw/openclaw/pull/128560)
- refactor(agents): remove obsolete plugin delivery defaults wrapper [#128565](https://github.com/openclaw/openclaw/pull/128565)
- refactor(xai): share responses tool request transport [#128571](https://github.com/openclaw/openclaw/pull/128571)
- fix(msteams): use one Teams API runtime entrypoint [#128572](https://github.com/openclaw/openclaw/pull/128572)
- refactor(command-explainer): unify argument projection [#128579](https://github.com/openclaw/openclaw/pull/128579)
- refactor(gateway): remove duplicate startup service lifecycle [#128582](https://github.com/openclaw/openclaw/pull/128582)
- Reuse shared positive-integer parsing in repository tools [#128586](https://github.com/openclaw/openclaw/pull/128586)
- fix(ci): prepare gateway profile live startup [#128605](https://github.com/openclaw/openclaw/pull/128605)
- refactor(ui): remove retired Control UI stylesheet rules [#128611](https://github.com/openclaw/openclaw/pull/128611)
- refactor(catalog): normalize provider routing fields once [#128709](https://github.com/openclaw/openclaw/pull/128709)
- refactor(gateway): remove unused resident lifecycle registry [#128710](https://github.com/openclaw/openclaw/pull/128710)
- refactor(config): simplify plugin validation state [#128713](https://github.com/openclaw/openclaw/pull/128713)
- refactor(build): reuse canonical direct-run entrypoint guard [#128715](https://github.com/openclaw/openclaw/pull/128715)
- refactor(firecrawl): reuse canonical provider runtime helpers [#128717](https://github.com/openclaw/openclaw/pull/128717)
- refactor(telegram): unify interactive keyboard rendering [#128728](https://github.com/openclaw/openclaw/pull/128728)
- fix(ci): pin iOS Fastlane toolchain [#128735](https://github.com/openclaw/openclaw/pull/128735)
- refactor(ui): reuse canonical UUID generation [#128753](https://github.com/openclaw/openclaw/pull/128753)
- refactor(agents): remove provider discovery test globals [#128758](https://github.com/openclaw/openclaw/pull/128758)
- refactor(slack): reuse canonical interactive block renderer [#128760](https://github.com/openclaw/openclaw/pull/128760)
- refactor(gateway): unify maintenance lifecycle ownership [#128766](https://github.com/openclaw/openclaw/pull/128766)
- refactor(tooling): remove test-only production helper exports [#128770](https://github.com/openclaw/openclaw/pull/128770)
- refactor(parallel): share search request lifecycle [#128775](https://github.com/openclaw/openclaw/pull/128775)
- fix: make full verification hermetic across local environments [#128777](https://github.com/openclaw/openclaw/pull/128777)
- test(ui): split settings node suite by concern [#128788](https://github.com/openclaw/openclaw/pull/128788)
- fix(qa): run explicitly selected Telegram RTT scenarios [#128795](https://github.com/openclaw/openclaw/pull/128795)
- improve: serialize Telegram Mantis proofs [#128811](https://github.com/openclaw/openclaw/pull/128811)
- test(ui): scope Claude session selection to sidebar links [#128874](https://github.com/openclaw/openclaw/pull/128874)
- fix(gateway): use secure telemetry jitter [#128998](https://github.com/openclaw/openclaw/pull/128998)
- improve(ci): run temp path guard in hosted checks [#129000](https://github.com/openclaw/openclaw/pull/129000)
- refactor(gateway): consolidate post-ready maintenance scheduling [#129027](https://github.com/openclaw/openclaw/pull/129027)
- refactor(infra): reuse canonical PATH prepend normalization [#129028](https://github.com/openclaw/openclaw/pull/129028)
- refactor(ui): consolidate presence payload parsing [#129029](https://github.com/openclaw/openclaw/pull/129029)
- refactor(discord): reuse canonical interactive component renderer [#129031](https://github.com/openclaw/openclaw/pull/129031)
- fix(test): publish runtime in CLI live harness [#129041](https://github.com/openclaw/openclaw/pull/129041)
- refactor(brave): share provider search lifecycle [#129046](https://github.com/openclaw/openclaw/pull/129046)
- refactor(media): reuse canonical auto image selection [#129049](https://github.com/openclaw/openclaw/pull/129049)
- refactor(scripts): remove impossible cross-os gateway branches [#129053](https://github.com/openclaw/openclaw/pull/129053)
- fix(qa): repair cloud disappearance proof [#129056](https://github.com/openclaw/openclaw/pull/129056)
- improve(test): skip Control UI update recordings unless requested [#129057](https://github.com/openclaw/openclaw/pull/129057)
- test(core): deduplicate runtime fixtures [#129058](https://github.com/openclaw/openclaw/pull/129058)
- refactor(agents): remove unused unknown-tool guard plumbing [#129062](https://github.com/openclaw/openclaw/pull/129062)
- refactor(config): simplify allowed-value formatting [#129064](https://github.com/openclaw/openclaw/pull/129064)
- test(plugins): deduplicate provider fixtures [#129072](https://github.com/openclaw/openclaw/pull/129072)
- refactor(agents): consolidate extension runner callbacks [#129086](https://github.com/openclaw/openclaw/pull/129086)
- refactor(i18n): share canonical native app locales [#129100](https://github.com/openclaw/openclaw/pull/129100)
- refactor(agents): consolidate aborted attempt settlement [#129107](https://github.com/openclaw/openclaw/pull/129107)
- refactor(queue): remove single-use helper indirection [#129108](https://github.com/openclaw/openclaw/pull/129108)
- refactor(signal): unify reaction recipient and mutation paths [#129110](https://github.com/openclaw/openclaw/pull/129110)
- refactor(apple): share native chat payload normalization [#129113](https://github.com/openclaw/openclaw/pull/129113)
- chore: remove duplicate media registry tests [#129115](https://github.com/openclaw/openclaw/pull/129115)
- refactor(plugins): consolidate provider registration flows [#129117](https://github.com/openclaw/openclaw/pull/129117)
- refactor(cli): simplify message command action registration [#129122](https://github.com/openclaw/openclaw/pull/129122)
- refactor(auto-reply): unify session delivery route resolution [#129124](https://github.com/openclaw/openclaw/pull/129124)
- refactor(channels): reuse wildcard model matcher [#129125](https://github.com/openclaw/openclaw/pull/129125)
- refactor(config): remove stale materialization modes [#129132](https://github.com/openclaw/openclaw/pull/129132)
- refactor(ui): use canonical sessions usage request [#129137](https://github.com/openclaw/openclaw/pull/129137)
- refactor(gateway): consolidate workspace inventory helpers [#129152](https://github.com/openclaw/openclaw/pull/129152)
- refactor(cli): centralize Claws output formatting [#129162](https://github.com/openclaw/openclaw/pull/129162)
- chore: remove obsolete media timeout test [#129167](https://github.com/openclaw/openclaw/pull/129167)
- refactor(scripts): remove test-only extension package boundary helper [#129171](https://github.com/openclaw/openclaw/pull/129171)
- improve: avoid Gateway setup for pure session-history parser tests [#129179](https://github.com/openclaw/openclaw/pull/129179)
- chore: remove duplicate Anthropic Vertex policy tests [#129180](https://github.com/openclaw/openclaw/pull/129180)
- refactor(agents): move live model policy to test owner [#129184](https://github.com/openclaw/openclaw/pull/129184)
- improve: validate built CLI with Bun 1.4 [#129192](https://github.com/openclaw/openclaw/pull/129192)
- refactor(gateway): share transcript usage aggregation [#129199](https://github.com/openclaw/openclaw/pull/129199)
- fix(release): verify focused candidate checkout [#129201](https://github.com/openclaw/openclaw/pull/129201)
- refactor(slack): canonicalize approval presentation rendering [#129205](https://github.com/openclaw/openclaw/pull/129205)
- refactor(scripts): remove obsolete z.ai fallback reproduction [#129208](https://github.com/openclaw/openclaw/pull/129208)
- refactor(scripts): remove obsolete sqlite incident reproductions [#129212](https://github.com/openclaw/openclaw/pull/129212)
- perf(test): await one-shot CLI exit completion directly [#129228](https://github.com/openclaw/openclaw/pull/129228)
- test(reply): deduplicate reply runner fixtures [#129229](https://github.com/openclaw/openclaw/pull/129229)
- test(gateway): deduplicate cron fixtures [#129233](https://github.com/openclaw/openclaw/pull/129233)
- refactor(workboard): consolidate card normalization helpers [#129236](https://github.com/openclaw/openclaw/pull/129236)
- fix(release): allow ANSI in focused evidence logs [#129238](https://github.com/openclaw/openclaw/pull/129238)
- fix(gateway): prevent live profile retries from replacing runtimes [#129239](https://github.com/openclaw/openclaw/pull/129239)
- fix(qa): restore cloud worker mid-turn recovery proof [#129241](https://github.com/openclaw/openclaw/pull/129241)
- refactor(podman): share rootless security helpers [#129242](https://github.com/openclaw/openclaw/pull/129242)
- refactor(discord): unify approval lifecycle rendering [#129246](https://github.com/openclaw/openclaw/pull/129246)
- test(wizard): deduplicate setup fixtures [#129252](https://github.com/openclaw/openclaw/pull/129252)
- refactor(agents): unify generated media reference handling [#129253](https://github.com/openclaw/openclaw/pull/129253)
- test(openshell): deduplicate sandbox fixtures [#129258](https://github.com/openclaw/openclaw/pull/129258)
- test(memory): deduplicate promotion fixtures [#129267](https://github.com/openclaw/openclaw/pull/129267)
- fix(qa): scope restart sentinel checks to scenario logs [#129270](https://github.com/openclaw/openclaw/pull/129270)
- refactor(plugins): deduplicate install security scan contracts [#129272](https://github.com/openclaw/openclaw/pull/129272)
- refactor(browser): unify guarded page interactions [#129274](https://github.com/openclaw/openclaw/pull/129274)
- refactor(ui): deduplicate workboard metadata normalization [#129280](https://github.com/openclaw/openclaw/pull/129280)
- refactor(qa): consolidate runtime fixtures [#129290](https://github.com/openclaw/openclaw/pull/129290)
- test(prompts): store snapshot variants as deltas [#129295](https://github.com/openclaw/openclaw/pull/129295)
- test(daemon): deduplicate service fixtures [#129296](https://github.com/openclaw/openclaw/pull/129296)
- test(outbound): deduplicate delivery fixtures [#129297](https://github.com/openclaw/openclaw/pull/129297)
- refactor(exa): unify contents validation [#129298](https://github.com/openclaw/openclaw/pull/129298)
- refactor(browser): unify browser mutation routes [#129303](https://github.com/openclaw/openclaw/pull/129303)
- test(node-host): deduplicate system run fixtures [#129305](https://github.com/openclaw/openclaw/pull/129305)
- refactor(agents): deduplicate tool display definitions [#129306](https://github.com/openclaw/openclaw/pull/129306)
- test(clawhub): deduplicate lifecycle fixtures [#129309](https://github.com/openclaw/openclaw/pull/129309)
- refactor(browser): deduplicate browser executable candidates [#129323](https://github.com/openclaw/openclaw/pull/129323)
- fix(qa): generate runnable scenario coverage commands [#129340](https://github.com/openclaw/openclaw/pull/129340)
- refactor(cli): deduplicate lazy subcommand registration [#129351](https://github.com/openclaw/openclaw/pull/129351)
- refactor: remove obsolete auth status projection [#129358](https://github.com/openclaw/openclaw/pull/129358)
- test(skills): align learn prompts with authoring standards [#129370](https://github.com/openclaw/openclaw/pull/129370)
- refactor: isolate native CLI availability resolution [#129374](https://github.com/openclaw/openclaw/pull/129374)
- test: await lazy sidebar load before teardown [#129376](https://github.com/openclaw/openclaw/pull/129376)
- refactor: remove accidental Claude auth type exports [#129383](https://github.com/openclaw/openclaw/pull/129383)
- test: reuse embedded runner permission harness [#129385](https://github.com/openclaw/openclaw/pull/129385)
- fix: keep retired auth profile lookup runtime-free [#129387](https://github.com/openclaw/openclaw/pull/129387)
- fix(qa): reject incomplete manual lane responses [#129395](https://github.com/openclaw/openclaw/pull/129395)
- test: stabilize auth and lifecycle fixtures [#129397](https://github.com/openclaw/openclaw/pull/129397)
- test(doctor): assert auth health targets in collection order [#129409](https://github.com/openclaw/openclaw/pull/129409)
- fix(qa): reject impossible empty scenario evidence [#129412](https://github.com/openclaw/openclaw/pull/129412)
- fix(maintainers): avoid skipped CI runs blocking PR landing [#129428](https://github.com/openclaw/openclaw/pull/129428)
- refactor(plugins): centralize host registration diagnostics [#129432](https://github.com/openclaw/openclaw/pull/129432)
- fix(i18n): refresh native locales when locale inventory changes [#129438](https://github.com/openclaw/openclaw/pull/129438)
- refactor(discord): unify reaction client resolution [#129441](https://github.com/openclaw/openclaw/pull/129441)
- fix(parallels): macOS dev upgrade needlessly rebuilds the checkout [#129444](https://github.com/openclaw/openclaw/pull/129444)
- refactor(cli): consolidate image option validation [#129463](https://github.com/openclaw/openclaw/pull/129463)
- refactor(update): remove unreachable install retry indirection [#129465](https://github.com/openclaw/openclaw/pull/129465)
- fix(release): prevent empty VCR mirror inputs [#129467](https://github.com/openclaw/openclaw/pull/129467)
- refactor(auto-reply): simplify origin destination routing [#129471](https://github.com/openclaw/openclaw/pull/129471)
- fix(test): stop CLI process tests racing their own startup cost [#129489](https://github.com/openclaw/openclaw/pull/129489)
- refactor(test): speed up MCP Doctor coverage without repeated config mutations [#129498](https://github.com/openclaw/openclaw/pull/129498)
- refactor(scripts): share SQLite compaction payload proof [#129499](https://github.com/openclaw/openclaw/pull/129499)
- chore: remove retired provider discovery alias guards [#129500](https://github.com/openclaw/openclaw/pull/129500)
- fix(ci): stop inherited auth test from timing out cache warmer [#129507](https://github.com/openclaw/openclaw/pull/129507)
- refactor(tts): consolidate speech provider ordering [#129508](https://github.com/openclaw/openclaw/pull/129508)
- refactor(ai): share positive integer parsing [#129512](https://github.com/openclaw/openclaw/pull/129512)
- refactor(hooks): remove unused message event guards [#129515](https://github.com/openclaw/openclaw/pull/129515)
- refactor(tool-display): compact generated metadata [#129523](https://github.com/openclaw/openclaw/pull/129523)
- refactor(codex): compact generated protocol JSON [#129524](https://github.com/openclaw/openclaw/pull/129524)
- test(agents): keep shared runner integrations in owner lifecycle [#129528](https://github.com/openclaw/openclaw/pull/129528)
- chore: remove duplicate Cloudflare wrapper test [#129530](https://github.com/openclaw/openclaw/pull/129530)
- refactor(memory): centralize provenance projection [#129532](https://github.com/openclaw/openclaw/pull/129532)
- refactor(lobster): unify managed flow parsing [#129540](https://github.com/openclaw/openclaw/pull/129540)
- perf(test): make Workboard browser proof capture opt-in [#129554](https://github.com/openclaw/openclaw/pull/129554)
- refactor(plugins): remove obsolete compaction registry facade [#129565](https://github.com/openclaw/openclaw/pull/129565)
- fix(parallels): add frozen auth prerequisite contract [#129575](https://github.com/openclaw/openclaw/pull/129575)
- test(agents): pin the plugin harness route in session-permission proof [#129582](https://github.com/openclaw/openclaw/pull/129582)
- fix(auth): load provider worker from source [#129583](https://github.com/openclaw/openclaw/pull/129583)
- chore(codex): remove duplicate approval policy test [#129586](https://github.com/openclaw/openclaw/pull/129586)
- refactor(apple): canonicalize string catalog serialization [#129592](https://github.com/openclaw/openclaw/pull/129592)
- refactor(pairing): reuse canonical pairing request record [#129594](https://github.com/openclaw/openclaw/pull/129594)
- chore: remove duplicate Google thinking tests [#129595](https://github.com/openclaw/openclaw/pull/129595)
- perf(test): skip routine Workboard sibling proof capture [#129596](https://github.com/openclaw/openclaw/pull/129596)
- fix(ci): restore main qualification [#129607](https://github.com/openclaw/openclaw/pull/129607)
- chore: remove duplicate user-path test [#129608](https://github.com/openclaw/openclaw/pull/129608)
- fix(ci): model-resolution tests fail after metadata scope changes [#129627](https://github.com/openclaw/openclaw/pull/129627)
- chore(i18n): refresh native locales [#129631](https://github.com/openclaw/openclaw/pull/129631)
- refactor(link-understanding): reuse media scope resolver [#129632](https://github.com/openclaw/openclaw/pull/129632)
- chore: test trigger thresholds at the selection boundary [#129634](https://github.com/openclaw/openclaw/pull/129634)
- perf: stop provider policy loads from compiling the transport graph [#129652](https://github.com/openclaw/openclaw/pull/129652)
- refactor(canvas): share HTML escaping [#129653](https://github.com/openclaw/openclaw/pull/129653)
- fix(sessions): keep disk cleanup isolated from channel plugins [#129657](https://github.com/openclaw/openclaw/pull/129657)
- fix(qa): self-check passes replies sent to the wrong recipient [#129661](https://github.com/openclaw/openclaw/pull/129661)
- perf(test): speed up authorized beta evidence validation [#129668](https://github.com/openclaw/openclaw/pull/129668)
- feat(skills): add in-place release validation mode [#129673](https://github.com/openclaw/openclaw/pull/129673)
- fix(test): prevent shared-worker metadata resets from breaking unrelated suites [#129680](https://github.com/openclaw/openclaw/pull/129680)
- chore: remove duplicate model-readiness assertion [#129683](https://github.com/openclaw/openclaw/pull/129683)
- fix(ci): run isolated gateway agent methods [#129686](https://github.com/openclaw/openclaw/pull/129686)
- refactor: remove progress-card limit forwarders [#129687](https://github.com/openclaw/openclaw/pull/129687)
- fix(sqlite): cover the exact stable database upgrade path [#129695](https://github.com/openclaw/openclaw/pull/129695)
- refactor(reef): remove obsolete JSONL protocol stores [#129698](https://github.com/openclaw/openclaw/pull/129698)
- fix(ci): prevent compact node shard timeouts [#129702](https://github.com/openclaw/openclaw/pull/129702)
- improve(anthropic): avoid duplicate provider-auth imports in tests [#129703](https://github.com/openclaw/openclaw/pull/129703)
- chore(whatsapp): remove duplicate setup replays [#129713](https://github.com/openclaw/openclaw/pull/129713)
- fix(qa): enforce complete channel route isolation evidence [#129718](https://github.com/openclaw/openclaw/pull/129718)
- fix(package): prevent installs from deleting validated runtime assets [#129724](https://github.com/openclaw/openclaw/pull/129724)
- Release validation: add isolated campaign skill runner [#129726](https://github.com/openclaw/openclaw/pull/129726)
- refactor(bootstrap): inline Node CA certificate policy [#129731](https://github.com/openclaw/openclaw/pull/129731)
- chore(cron): remove duplicate session override tests [#129736](https://github.com/openclaw/openclaw/pull/129736)
- test(plugins): restore metadata lifecycle contract [#129742](https://github.com/openclaw/openclaw/pull/129742)
- refactor(gateway): consolidate pairing approval ownership [#129744](https://github.com/openclaw/openclaw/pull/129744)
- perf(ui): replace warm refresh sleeps with owner signals [#129748](https://github.com/openclaw/openclaw/pull/129748)
- refactor(install): remove obsolete Baileys media hotfix [#129751](https://github.com/openclaw/openclaw/pull/129751)
- refactor(requirements): collapse single-use evaluation helpers [#129753](https://github.com/openclaw/openclaw/pull/129753)
- fix(tooling): arm prompt cleanup before spawn [#129755](https://github.com/openclaw/openclaw/pull/129755)
- refactor(ui): tidy the roster refresh owner and session test harnesses [#129757](https://github.com/openclaw/openclaw/pull/129757)
- fix(test): materialize OpenAI live auth profile [#129759](https://github.com/openclaw/openclaw/pull/129759)
- refactor(cli): consolidate skills requirement formatting [#129760](https://github.com/openclaw/openclaw/pull/129760)
- fix(test): keep CLI hook context out of history assertion [#129768](https://github.com/openclaw/openclaw/pull/129768)
- refactor: compact native localization source inventory [#129777](https://github.com/openclaw/openclaw/pull/129777)
- fix(test): refresh Telegram dispatch runtime mocks [#129778](https://github.com/openclaw/openclaw/pull/129778)
- fix(package): restore npm package size headroom [#129782](https://github.com/openclaw/openclaw/pull/129782)
- Narrow release-validation GitHub client contract [#129783](https://github.com/openclaw/openclaw/pull/129783)
- fix(release): bind prerelease plugins into package Telegram QA [#129784](https://github.com/openclaw/openclaw/pull/129784)
- fix(parallels): preserve saved macOS snapshot sessions [#129788](https://github.com/openclaw/openclaw/pull/129788)
- test: complete current-plugin-metadata-snapshot mock factories [#129791](https://github.com/openclaw/openclaw/pull/129791)
- refactor(cli): simplify Gateway fallback and hook state ownership [#129802](https://github.com/openclaw/openclaw/pull/129802)
- fix(qa): recognize Code Mode recovery in OTel proof [#129806](https://github.com/openclaw/openclaw/pull/129806)
- refactor(lmstudio): share non-interactive discovery validation [#129808](https://github.com/openclaw/openclaw/pull/129808)
- refactor(voyage): reuse canonical embedding batch deadlines [#129811](https://github.com/openclaw/openclaw/pull/129811)
- chore(heartbeat): remove duplicate event-intent test [#129821](https://github.com/openclaw/openclaw/pull/129821)
- chore(ui): refresh startup gzip baseline [#129824](https://github.com/openclaw/openclaw/pull/129824)
- chore(voice-call): remove duplicate timer cap tests [#129835](https://github.com/openclaw/openclaw/pull/129835)
- chore(telegram): remove duplicate unchanged reaction case [#129848](https://github.com/openclaw/openclaw/pull/129848)
- refactor(gateway): speed up GitHub publication security tests [#129849](https://github.com/openclaw/openclaw/pull/129849)
- fix(ci): restore managed gateway update test isolation [#129852](https://github.com/openclaw/openclaw/pull/129852)
- chore(image-generation): remove duplicate live parser test [#129870](https://github.com/openclaw/openclaw/pull/129870)
- refactor(state): fold singleton tables into config_machine_state at schema v12 [#129876](https://github.com/openclaw/openclaw/pull/129876)
- refactor(perplexity): simplify provider search validation [#129877](https://github.com/openclaw/openclaw/pull/129877)
- chore(telegram): remove duplicate durable target test [#129883](https://github.com/openclaw/openclaw/pull/129883)
- refactor(channels): consolidate presentation action budgets [#129892](https://github.com/openclaw/openclaw/pull/129892)
- refactor(brave): simplify provider request ownership [#129896](https://github.com/openclaw/openclaw/pull/129896)
- refactor(gateway): reuse cron stream owner callback contract [#129900](https://github.com/openclaw/openclaw/pull/129900)
- chore(terminal): remove duplicate display-string table test [#129903](https://github.com/openclaw/openclaw/pull/129903)
- fix(release): restore direct package Telegram acceptance [#129912](https://github.com/openclaw/openclaw/pull/129912)
- test(release): keep workflow regressions in changed runs [#129914](https://github.com/openclaw/openclaw/pull/129914)
- fix(e2e): suppress update checks inside Docker E2E containers [#129931](https://github.com/openclaw/openclaw/pull/129931)
- fix(qa): restart harness reboots on unrelated pending waits [#129935](https://github.com/openclaw/openclaw/pull/129935)
- refactor(lmstudio): share guided setup connection discovery [#129940](https://github.com/openclaw/openclaw/pull/129940)
- chore(deps): refresh dependencies after seven-day cooldown [#129941](https://github.com/openclaw/openclaw/pull/129941)
- refactor(android): consolidate motion JSON parsing [#129947](https://github.com/openclaw/openclaw/pull/129947)
- fix(ci): publish maturity scorecards when main advances [#129955](https://github.com/openclaw/openclaw/pull/129955)
- test(ui): trim duplicate routing coverage and stabilize cron E2E [#129958](https://github.com/openclaw/openclaw/pull/129958)
- fix(qa): count only visible Telegram streaming finals [#129960](https://github.com/openclaw/openclaw/pull/129960)
- refactor(ai): unify OpenAI-compatible completion stream processing [#129962](https://github.com/openclaw/openclaw/pull/129962)
- refactor(context-engine): remove inert legacy lifecycle hooks [#129964](https://github.com/openclaw/openclaw/pull/129964)
- refactor(meeting-bot): inline audio fallback guard [#129975](https://github.com/openclaw/openclaw/pull/129975)
- refactor(plugins): simplify void lifecycle hook dispatch [#129976](https://github.com/openclaw/openclaw/pull/129976)
- refactor(ui): centralize audio blob leases [#129980](https://github.com/openclaw/openclaw/pull/129980)
- refactor(memory): reuse canonical embedding input size estimators [#129981](https://github.com/openclaw/openclaw/pull/129981)
- refactor: remove redundant proxy resolver layer [#129984](https://github.com/openclaw/openclaw/pull/129984)
- refactor(scripts): share web-fetch benchmark argument parsing [#129985](https://github.com/openclaw/openclaw/pull/129985)
- refactor(video): unify capability overlay merging [#129986](https://github.com/openclaw/openclaw/pull/129986)
- refactor(plugins): remove redundant private channel runtime facades [#129987](https://github.com/openclaw/openclaw/pull/129987)
- refactor(elevenlabs): consolidate voice-setting directive parsing [#129988](https://github.com/openclaw/openclaw/pull/129988)
- refactor(msteams): unify proactive send failure handling [#129995](https://github.com/openclaw/openclaw/pull/129995)
- refactor(logbook): share analysis batch enqueueing [#129996](https://github.com/openclaw/openclaw/pull/129996)
- refactor(agents): reuse thinking block predicate [#130001](https://github.com/openclaw/openclaw/pull/130001)
- refactor(opencode): remove beta-only model compatibility migration [#130011](https://github.com/openclaw/openclaw/pull/130011)
- refactor(ios): focus root tabs source guards [#130012](https://github.com/openclaw/openclaw/pull/130012)
- fix(ci): restore Control UI startup budget gate [#130015](https://github.com/openclaw/openclaw/pull/130015)
- fix(ui): restore startup CSS budget [#130032](https://github.com/openclaw/openclaw/pull/130032)
- fix(ui): restore startup CSS headroom [#130033](https://github.com/openclaw/openclaw/pull/130033)
- chore(qa): make OpenAI native web search primary coverage [#130034](https://github.com/openclaw/openclaw/pull/130034)
- refactor(routing): share account ID canonical cache [#130045](https://github.com/openclaw/openclaw/pull/130045)
- fix(ci): restore Control UI startup CSS ceiling [#130046](https://github.com/openclaw/openclaw/pull/130046)
- refactor(discord): remove private facades and beta progress debt [#130052](https://github.com/openclaw/openclaw/pull/130052)
- refactor(backup): centralize outcome recording [#130057](https://github.com/openclaw/openclaw/pull/130057)
- test(oc-path): remove duplicate scenario coverage [#130060](https://github.com/openclaw/openclaw/pull/130060)
- refactor(cli): reuse node connection reminder [#130064](https://github.com/openclaw/openclaw/pull/130064)
- refactor(worker): centralize terminal error subscriptions [#130065](https://github.com/openclaw/openclaw/pull/130065)
- refactor(channels): simplify attachment alias resolution [#130066](https://github.com/openclaw/openclaw/pull/130066)
- refactor(proxy-capture): remove redundant peer check [#130068](https://github.com/openclaw/openclaw/pull/130068)
- refactor(normalization): consolidate seconds conversion [#130069](https://github.com/openclaw/openclaw/pull/130069)
- test(packages): remove redundant no-throw assertions [#130074](https://github.com/openclaw/openclaw/pull/130074)
- refactor(shared): reuse listener notification helper [#130078](https://github.com/openclaw/openclaw/pull/130078)
- refactor(cli): dedupe screen artifact writers [#130085](https://github.com/openclaw/openclaw/pull/130085)
- fix(e2e): include Codex thread project id [#130086](https://github.com/openclaw/openclaw/pull/130086)
- test(memory): remove redundant reset archive coverage [#130089](https://github.com/openclaw/openclaw/pull/130089)
- fix(ci): keep release-gate workloads consistent on hosted runners [#130095](https://github.com/openclaw/openclaw/pull/130095)
- test(whatsapp): await automatic redelivery retries [#130101](https://github.com/openclaw/openclaw/pull/130101)
- refactor(transcription): remove duplicate connection state [#130104](https://github.com/openclaw/openclaw/pull/130104)
- fix(ci): prevent update scenarios from poisoning later CLI checks [#130121](https://github.com/openclaw/openclaw/pull/130121)
- chore(skills): sync autoreview to TruffleHog-based canonical [#130122](https://github.com/openclaw/openclaw/pull/130122)
- refactor(talk-voice): use canonical base URL normalization [#130126](https://github.com/openclaw/openclaw/pull/130126)
- refactor(matrix): remove obsolete private runtime forwarding layers [#130129](https://github.com/openclaw/openclaw/pull/130129)
- refactor(lmstudio): unify configured auth resolution [#130138](https://github.com/openclaw/openclaw/pull/130138)
- fix: prevent Feishu and Mattermost suite collection stalls [#130142](https://github.com/openclaw/openclaw/pull/130142)
- fix(ci): restore agent-deletion test collection and filesystem safety [#130149](https://github.com/openclaw/openclaw/pull/130149)
- refactor(agents): share session token normalization [#130162](https://github.com/openclaw/openclaw/pull/130162)
- refactor(auto-reply): share restart termination fields [#130181](https://github.com/openclaw/openclaw/pull/130181)
- refactor(channels): remove redundant private runtime facades [#130186](https://github.com/openclaw/openclaw/pull/130186)
- test(scripts): pin assertion-ratchet SAFETY-comment scanner fix [#130191](https://github.com/openclaw/openclaw/pull/130191)
- refactor(openai): inline non-negative config ranges [#130199](https://github.com/openclaw/openclaw/pull/130199)
- refactor(lmstudio): unify catalog discovery provider assembly [#130204](https://github.com/openclaw/openclaw/pull/130204)
- refactor(providers): remove redundant private runtime facades [#130212](https://github.com/openclaw/openclaw/pull/130212)
- test: restore doctor release validation coverage [#130221](https://github.com/openclaw/openclaw/pull/130221)
- refactor(auto-reply): share command body resolution [#130222](https://github.com/openclaw/openclaw/pull/130222)
- refactor(plugins): share install choice normalization [#130236](https://github.com/openclaw/openclaw/pull/130236)
- fix(gateway): prevent mismatched core command payload types [#130241](https://github.com/openclaw/openclaw/pull/130241)
- refactor(chat): share terminal ack normalization [#130263](https://github.com/openclaw/openclaw/pull/130263)
- fix(file-transfer): remove wall-clock race from symlink promptness test [#130279](https://github.com/openclaw/openclaw/pull/130279)
- refactor(channels): compact generated channel catalog [#130284](https://github.com/openclaw/openclaw/pull/130284)
- fix(e2e): stable-to-main upgrade checks fail before install [#130288](https://github.com/openclaw/openclaw/pull/130288)
- refactor(agents): share node id fragment sanitizer [#130295](https://github.com/openclaw/openclaw/pull/130295)
- chore(deps): refresh dependencies after seven-day cooldown [#130296](https://github.com/openclaw/openclaw/pull/130296)
- refactor(buzz): consolidate relay snapshot lifecycle owners [#130300](https://github.com/openclaw/openclaw/pull/130300)
- refactor(agents): unify access policy across every session tool [#130310](https://github.com/openclaw/openclaw/pull/130310)
- fix(qa): restore TUI PTY maturity evidence [#130314](https://github.com/openclaw/openclaw/pull/130314)
- fix(qa): run Buzz profile scenarios with pooled credentials [#130316](https://github.com/openclaw/openclaw/pull/130316)
- refactor(qa-lab): reuse model reference splitter [#130317](https://github.com/openclaw/openclaw/pull/130317)
- refactor(channels): unify trusted configured-state probes [#130320](https://github.com/openclaw/openclaw/pull/130320)
- refactor(gateway): centralize OpenAI-compatible HTTP contracts [#130321](https://github.com/openclaw/openclaw/pull/130321)
- chore(ui): refresh control ui locales [#130330](https://github.com/openclaw/openclaw/pull/130330)
- refactor(workboard): centralize dispatch owner selection [#130333](https://github.com/openclaw/openclaw/pull/130333)
- refactor(telegram): unify model selection and callback bounds [#130336](https://github.com/openclaw/openclaw/pull/130336)
- test(ui): drop the resurrected duplicate attachment-URL e2e proof [#130343](https://github.com/openclaw/openclaw/pull/130343)
- refactor(channels): remove redundant private forwarding modules [#130348](https://github.com/openclaw/openclaw/pull/130348)
- refactor(cron): centralize heartbeat reconciliation [#130350](https://github.com/openclaw/openclaw/pull/130350)
- fix(release): refresh IMAP plugin baselines [#130351](https://github.com/openclaw/openclaw/pull/130351)
- test(qa): await gateway startup before network probes [#130353](https://github.com/openclaw/openclaw/pull/130353)
- fix(qa): track current Slack progress cards [#130354](https://github.com/openclaw/openclaw/pull/130354)
- chore(config): refresh docs baseline [#130356](https://github.com/openclaw/openclaw/pull/130356)
- fix(qa): retain failed empty checks in exported evidence [#130357](https://github.com/openclaw/openclaw/pull/130357)
- fix(release): stage Codex for npm onboarding candidates [#130360](https://github.com/openclaw/openclaw/pull/130360)
- fix(plugins): restore diffs external catalog validation [#130362](https://github.com/openclaw/openclaw/pull/130362)
- refactor(slack): consolidate deferred ingress settlement [#130367](https://github.com/openclaw/openclaw/pull/130367)
- refactor(cron): retain the prepared watcher handoff owner [#130373](https://github.com/openclaw/openclaw/pull/130373)
- refactor(diagnostics): merge tool call content branches [#130379](https://github.com/openclaw/openclaw/pull/130379)
- test: consolidate fixture setup [#130382](https://github.com/openclaw/openclaw/pull/130382)
- fix: prevent false chat layout test failures [#130397](https://github.com/openclaw/openclaw/pull/130397)
- refactor(google): share video capability metadata [#130406](https://github.com/openclaw/openclaw/pull/130406)
- refactor(models): prepare selection policy once [#130413](https://github.com/openclaw/openclaw/pull/130413)
- refactor(plugins): derive private config types from schemas [#130414](https://github.com/openclaw/openclaw/pull/130414)
- refactor(qa-lab): share process tree metric reader [#130419](https://github.com/openclaw/openclaw/pull/130419)
- refactor(google-meet): share token source resolution [#130423](https://github.com/openclaw/openclaw/pull/130423)
- refactor(models): consolidate config normalization [#130439](https://github.com/openclaw/openclaw/pull/130439)
- fix(tests): restore sticky model fixture typecheck [#130441](https://github.com/openclaw/openclaw/pull/130441)
- test(control-ui): guard the hand-mirrored theme --bg copies [#130444](https://github.com/openclaw/openclaw/pull/130444)
- refactor(outbound): consolidate transport completion [#130460](https://github.com/openclaw/openclaw/pull/130460)
- refactor(tts): use shared temp workspace lifecycle [#130462](https://github.com/openclaw/openclaw/pull/130462)
- refactor(state): consolidate wide rows, plugin index, workspace attestations, and shared auth singletons at schema v13 [#130466](https://github.com/openclaw/openclaw/pull/130466)
- refactor(plugins): unify setup registration and artifact selection [#130474](https://github.com/openclaw/openclaw/pull/130474)
- refactor(status): share model pin provenance [#130480](https://github.com/openclaw/openclaw/pull/130480)
- refactor(talk): share result completion tracking [#130482](https://github.com/openclaw/openclaw/pull/130482)
- refactor(plugins): make discovery invocation-owned [#130486](https://github.com/openclaw/openclaw/pull/130486)
- fix(packaging): report metadata for the final normalized archive [#130489](https://github.com/openclaw/openclaw/pull/130489)
- refactor(infra): share device pairing approval commit [#130495](https://github.com/openclaw/openclaw/pull/130495)
- refactor(android): remove unused sidebar and mascot paths [#130505](https://github.com/openclaw/openclaw/pull/130505)
- refactor(embeddings): unify provider contract [#130506](https://github.com/openclaw/openclaw/pull/130506)
- fix(paths): preserve identity across realpath failures [#130516](https://github.com/openclaw/openclaw/pull/130516)
- chore(ui): refresh control ui locales [#130517](https://github.com/openclaw/openclaw/pull/130517)
- refactor(feishu): unify private tool registration setup [#130522](https://github.com/openclaw/openclaw/pull/130522)
- fix(pr): release locks after linked worktree teardown [#130524](https://github.com/openclaw/openclaw/pull/130524)
- refactor(plugins): remove redundant normalization layers [#130529](https://github.com/openclaw/openclaw/pull/130529)
- refactor(cli): collapse model fallback command wrappers [#130536](https://github.com/openclaw/openclaw/pull/130536)
- fix(packaging): serialize packs when the docs map is already generated [#130538](https://github.com/openclaw/openclaw/pull/130538)
- refactor(test): consolidate configure wizard fixtures [#130539](https://github.com/openclaw/openclaw/pull/130539)
- refactor(models): build provider catalogs as complete batches [#130564](https://github.com/openclaw/openclaw/pull/130564)
- refactor(agents): retain one process record through completion [#130572](https://github.com/openclaw/openclaw/pull/130572)
- fix: remove unavailable OpenGrep install alternatives [#130585](https://github.com/openclaw/openclaw/pull/130585)
- refactor(memory): remove unused private REM facade [#130594](https://github.com/openclaw/openclaw/pull/130594)
- refactor(msteams): simplify attachment size and redirect handling [#130595](https://github.com/openclaw/openclaw/pull/130595)
- refactor(models): prepare model-list context once [#130600](https://github.com/openclaw/openclaw/pull/130600)
- fix(qa): preserve truthful debug snapshots for large AIMock requests [#130605](https://github.com/openclaw/openclaw/pull/130605)
- refactor(test): avoid setup discovery in native command checks [#130610](https://github.com/openclaw/openclaw/pull/130610)
- fix(crabbox): keep bootstrap runtimes accessible under private umasks [#130627](https://github.com/openclaw/openclaw/pull/130627)
- fix(tooling): resume PR checkouts after completed deletions [#130630](https://github.com/openclaw/openclaw/pull/130630)
- test(gateway): await runtime ownership before lifecycle events [#130632](https://github.com/openclaw/openclaw/pull/130632)
- refactor(video): deduplicate generation contracts [#130635](https://github.com/openclaw/openclaw/pull/130635)
- fix(tests): Parallels snapshot checks unexpectedly contact npm [#130638](https://github.com/openclaw/openclaw/pull/130638)
- refactor(models): consolidate prepared catalog construction [#130654](https://github.com/openclaw/openclaw/pull/130654)
- refactor(memory): remove normalization of fixed search defaults [#130655](https://github.com/openclaw/openclaw/pull/130655)
- fix(parallels): main install and update smoke cannot complete [#130658](https://github.com/openclaw/openclaw/pull/130658)
- docs: require chat approval for schema and config changes [#130659](https://github.com/openclaw/openclaw/pull/130659)
- fix(ui): prevent encoded-path readiness timeouts [#130666](https://github.com/openclaw/openclaw/pull/130666)
- fix(ci): run FRV contract tests for workflow edits [#130668](https://github.com/openclaw/openclaw/pull/130668)
- refactor(agents): use fixed tool-loop defaults directly [#130681](https://github.com/openclaw/openclaw/pull/130681)
- refactor(models): simplify prepared owner access [#130683](https://github.com/openclaw/openclaw/pull/130683)
- fix(ci): stabilize Control UI startup gzip ratchet [#130688](https://github.com/openclaw/openclaw/pull/130688)
- refactor(lmstudio): remove unreachable catalog merge [#130689](https://github.com/openclaw/openclaw/pull/130689)
- refactor(github-copilot): reuse prepared embedding credentials [#130703](https://github.com/openclaw/openclaw/pull/130703)
- refactor: simplify channel config adapters [#130705](https://github.com/openclaw/openclaw/pull/130705)
- docs: route cloud sandbox providers to Crabbox [#130707](https://github.com/openclaw/openclaw/pull/130707)
- refactor(config): share TTS migration traversal [#130708](https://github.com/openclaw/openclaw/pull/130708)
- chore(i18n): refresh native locales [#130712](https://github.com/openclaw/openclaw/pull/130712)
- fix(ci): preserve macOS Swift first-attempt failures [#130719](https://github.com/openclaw/openclaw/pull/130719)
- chore(ui): refresh control ui locales [#130723](https://github.com/openclaw/openclaw/pull/130723)
- fix: avoid stalled maintainer author activity lookups [#130724](https://github.com/openclaw/openclaw/pull/130724)
- refactor(acp): remove retired runtime cache limits [#130729](https://github.com/openclaw/openclaw/pull/130729)
- fix(release): validate blocked FRV state transitions [#130744](https://github.com/openclaw/openclaw/pull/130744)
- fix(ui): wait for presented sidebar session before clearing draft [#130747](https://github.com/openclaw/openclaw/pull/130747)
- refactor(diagnostics): remove retired pressure-bundle writer [#130754](https://github.com/openclaw/openclaw/pull/130754)
- fix(pr): avoid warnings for already-deleted source branches [#130760](https://github.com/openclaw/openclaw/pull/130760)
- refactor(ollama): remove orphan embedding hook [#130765](https://github.com/openclaw/openclaw/pull/130765)
- refactor(providers): remove unused native usage policy [#130782](https://github.com/openclaw/openclaw/pull/130782)
- refactor(ui): reuse protocol file response types [#130789](https://github.com/openclaw/openclaw/pull/130789)
- fix(ci): avoid all-plugin checks for maintainer activity helper [#130790](https://github.com/openclaw/openclaw/pull/130790)
- refactor(twitch): use canonical outbound message adapter [#130791](https://github.com/openclaw/openclaw/pull/130791)
- fix(ci): provide rg fixture for PR lock tests [#130796](https://github.com/openclaw/openclaw/pull/130796)
- refactor(models): simplify status auth projection [#130801](https://github.com/openclaw/openclaw/pull/130801)
- chore(ui): refresh control ui locales [#130802](https://github.com/openclaw/openclaw/pull/130802)
- fix(release): restore changelog-only evidence validation [#130803](https://github.com/openclaw/openclaw/pull/130803)
- refactor(mcp): simplify fixed idle runtime policy [#130818](https://github.com/openclaw/openclaw/pull/130818)
- refactor(models): remove redundant catalog suppression paths [#130831](https://github.com/openclaw/openclaw/pull/130831)
- fix(ui): align task progress and goal chevrons [#130834](https://github.com/openclaw/openclaw/pull/130834)
- refactor: consolidate diagnostic stability field projection [#130845](https://github.com/openclaw/openclaw/pull/130845)
- fix(release): reuse validation evidence after tooling updates [#130850](https://github.com/openclaw/openclaw/pull/130850)
- fix(android): prevent native font setup collisions between tests [#130861](https://github.com/openclaw/openclaw/pull/130861)
- fix(release): reuse protected tooling lineage evidence [#130865](https://github.com/openclaw/openclaw/pull/130865)
- fix(release): restore bundled plugin package validation [#130875](https://github.com/openclaw/openclaw/pull/130875)
- refactor(agents): simplify serialized suspension writes [#130905](https://github.com/openclaw/openclaw/pull/130905)
- refactor(gateway): consolidate node request validation [#130909](https://github.com/openclaw/openclaw/pull/130909)
- fix: keep portal retry-page tests on an owned target port [#130920](https://github.com/openclaw/openclaw/pull/130920)
- fix(tooling): avoid build and test startup stalls on shared tsx caches [#130924](https://github.com/openclaw/openclaw/pull/130924)
- fix(ui): UI commands stall on large tsx caches [#130927](https://github.com/openclaw/openclaw/pull/130927)
- refactor(plugins): consolidate capability provider resolution [#130937](https://github.com/openclaw/openclaw/pull/130937)
- fix(scripts): resolve worktree implementation dependencies [#130950](https://github.com/openclaw/openclaw/pull/130950)
- fix(ci): route trusted dispatch lint to matrix runner [#130963](https://github.com/openclaw/openclaw/pull/130963)
- test(config): preserve native environment across provider tests [#130975](https://github.com/openclaw/openclaw/pull/130975)
- improve(sqlite): report production workloads independently [#130994](https://github.com/openclaw/openclaw/pull/130994)
- test: stop replacing the native process.env object [#130999](https://github.com/openclaw/openclaw/pull/130999)
- fix: frozen releases fail when newer plugins are absent [#131000](https://github.com/openclaw/openclaw/pull/131000)
- fix(autoreview): diagnose Codex launcher isolation failures [#131002](https://github.com/openclaw/openclaw/pull/131002)
- fix(ui): bootstrap source-only locales [#131015](https://github.com/openclaw/openclaw/pull/131015)
- fix(release): keep Windows packaged-fresh on validated Node [#131027](https://github.com/openclaw/openclaw/pull/131027)
- fix(qa): integrated audit validation matches safe inspection [#131032](https://github.com/openclaw/openclaw/pull/131032)
- test(codex): make post-tool watchdog timing deterministic [#131049](https://github.com/openclaw/openclaw/pull/131049)
- fix(ui): prevent mock Gateway tests from leaking into routing tests [#131052](https://github.com/openclaw/openclaw/pull/131052)
- fix(ci): resolve locale targets in one request [#131053](https://github.com/openclaw/openclaw/pull/131053)
- refactor(agents): compose session tools from definitions [#131070](https://github.com/openclaw/openclaw/pull/131070)
- fix(test): gateway connection-liveness test flakes under CI shard load [#131076](https://github.com/openclaw/openclaw/pull/131076)
- fix: honor scenario drivers in generated QA commands [#131101](https://github.com/openclaw/openclaw/pull/131101)
- refactor(gateway): reuse completed conversation delivery projection [#131107](https://github.com/openclaw/openclaw/pull/131107)
- test(whatsapp): fix order-dependent pairing-prompt flake with event-driven inbound drain [#131109](https://github.com/openclaw/openclaw/pull/131109)
- fix(test): stabilize stale-owner followup ordering checks [#131116](https://github.com/openclaw/openclaw/pull/131116)
- refactor(gateway): reuse user request validation [#131127](https://github.com/openclaw/openclaw/pull/131127)
- refactor(agents): derive list entry type from output schema [#131130](https://github.com/openclaw/openclaw/pull/131130)
- test(channels): consolidate command fixtures [#131133](https://github.com/openclaw/openclaw/pull/131133)
- refactor(cli): reuse function-shaped lazy loaders [#131144](https://github.com/openclaw/openclaw/pull/131144)
- fix(ci): stop cancelling in-flight docs publish syncs on main pushes [#131155](https://github.com/openclaw/openclaw/pull/131155)
- test(whatsapp): simplify inbound-drain harness internals [#131158](https://github.com/openclaw/openclaw/pull/131158)
- test(config): consolidate runtime snapshot fixtures [#131170](https://github.com/openclaw/openclaw/pull/131170)
- feat(ci): alarm and self-heal when the docs mirror goes stale [#131173](https://github.com/openclaw/openclaw/pull/131173)
- Distinguish device and node pairing in zh-CN docs [#61396](https://github.com/openclaw/openclaw/pull/61396)
- Keep macOS Parallels update smoke scripts on one guest identity [#75293](https://github.com/openclaw/openclaw/pull/75293)
- Guard stale cron base sessions from reaper pruning [#89721](https://github.com/openclaw/openclaw/pull/89721)
- Gate PR-edit automation by changed field [#95010](https://github.com/openclaw/openclaw/pull/95010)
- Move CI boundary guards to focused Oxlint rules [#95368](https://github.com/openclaw/openclaw/pull/95368)
- Harden gateway watch regression diagnostics [#95473](https://github.com/openclaw/openclaw/pull/95473)
- Stabilize plugin lifecycle PID fixtures in Linux CI [#96482](https://github.com/openclaw/openclaw/pull/96482)
- Clarify public OAuth client IDs [#96537](https://github.com/openclaw/openclaw/pull/96537)
- Add signed hosted plugin-feed envelope verification [#98299](https://github.com/openclaw/openclaw/pull/98299)
- Add token-count formatting edge-case tests [#98541](https://github.com/openclaw/openclaw/pull/98541)
- Cover config path array-index parsing with unit tests [#98543](https://github.com/openclaw/openclaw/pull/98543)
- Add direct tests for blocked agent-run liveness helpers [#98546](https://github.com/openclaw/openclaw/pull/98546)
- Add regression coverage for CLI argument quoting [#98567](https://github.com/openclaw/openclaw/pull/98567)
- Add regression tests for FormData detection [#98569](https://github.com/openclaw/openclaw/pull/98569)
- Add boundary tests for numeric coercion [#98663](https://github.com/openclaw/openclaw/pull/98663)
- Add regression tests for defensive JSON serialization [#98667](https://github.com/openclaw/openclaw/pull/98667)
- Add cron delivery validation tests [#98668](https://github.com/openclaw/openclaw/pull/98668)
- Add deferred event buffer contract tests [#98670](https://github.com/openclaw/openclaw/pull/98670)
- Add direct tests for canonical model keys [#98795](https://github.com/openclaw/openclaw/pull/98795)
- Add tests for tool protocol descriptor conversion [#98797](https://github.com/openclaw/openclaw/pull/98797)
- Add regression tests for JSON compatibility parsing [#98801](https://github.com/openclaw/openclaw/pull/98801)
- Add node-presence normalization tests [#98802](https://github.com/openclaw/openclaw/pull/98802)
- Add an extended-stable backport workflow for release maintainers [#99266](https://github.com/openclaw/openclaw/pull/99266)
- Skip unnecessary session-history cloning [#99542](https://github.com/openclaw/openclaw/pull/99542)
- Remove an unused transcript-policy field [#99880](https://github.com/openclaw/openclaw/pull/99880)

</details>

</Accordion>

</AccordionGroup>
