fix(outbound): resolve send-capable channel registry#83733
Conversation
|
Codex review: passed. Workflow note: Future ClawSweeper reviews update this same comment in place. How this review workflow works
Summary Reproducibility: yes. at source level. Current main can select a pinned setup-only channel entry and skip the full active runtime sender path, and the PR body includes production-module live output showing delivery after the fallback; I did not run local tests in this read-only review. PR rating What the crustacean ranks mean
Shiny media proof means a screenshot, video, or linked artifact directly shows the changed behavior. Runtime, network, CSP, and security claims still need visible diagnostics. PR egg Rarity: 🥚 common. What is this egg doing here?
Real behavior proof Risk before merge
Maintainer options:
Next step before merge Security Review detailsBest possible solution: Land the narrow registry fallback after exact-head checks, preserving pinned-registry precedence when it has a send-capable surface and falling back only when that surface is missing. Do we have a high-confidence way to reproduce the issue? Yes, at source level. Current main can select a pinned setup-only channel entry and skip the full active runtime sender path, and the PR body includes production-module live output showing delivery after the fallback; I did not run local tests in this read-only review. Is this the best way to solve the issue? Yes. The patch keeps the existing pinned-registry contract for send-capable entries and only falls back to the active runtime registry when the requested send surface is absent, which is narrower than reloading or disabling channel pinning. Label justifications:
What I checked:
Likely related people:
Codex review notes: model gpt-5.5, reasoning high; reviewed against 424c6d0a5f46. |
|
@clawsweeper automerge |
|
🦞🧹
Draft PRs stay fix-only until GitHub marks them ready for review. Pause with Automerge progress:
|
93bfd37 to
6fffd65
Compare
|
@clawsweeper automerge |
6fffd65 to
67c20aa
Compare
…k / continue_delegate / request_compaction) This is the continuation feature presented in full against current upstream/main. Per upstream's stated cadence canon this is XL; opened as DRAFT for review-quality engagement. Cure-(20) restores additional cure-substrate-original orphans surfaced by impacted-vitest integrity-check + cascade-fixes substrate-internal test consistency surfaced by full-vitest: - Restore src/flows/doctor-repair-flow.ts + .test.ts + src/commands/doctor-session-snapshots.ts + .test.ts (4 files deleted in cure-substrate) plus 4 hunks in src/flows/doctor-health-contributions.ts (runStructuredHealthRepairs + runSessionSnapshotsHealth functions + 2 contribution registrations). Restored from upstream parent bytes (orthogonal to continuation surface; 0 continuation-keyword hits). - Cascade-fix src/agents/subagent-registry.test.ts: add resolveSessionStoreEntry to vi.mock for ../config/sessions.js (cure-(17) family cascade-miss: cure added the call at subagent-registry-helpers.ts:79+102, test mock wasn't updated) + invert/rename the "preserves run-mode keep entries past SESSION_RUN_TTL_MS sweep" test assertion to match the cure's intentional cleanupCompletedAt-based deferred-cleanup-sweep policy for continue_delegate lifecycle. Drift-rebased onto fresh upstream/main 721ad15 (absorbs 2 new upstream commits since cure-(19) parent: fix(outbound): resolve send-capable channel registry openclaw#83733 + fix: keep inter-session provenance out of transcripts openclaw#83755 — both orthogonal to orphan-restore scope). Co-Authored-By: scribe.dandelion.cult <scribe.dandelion.cult@hotmail.com> Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…k / continue_delegate / request_compaction) This is the continuation feature presented in full against current upstream/main. Per upstream's stated cadence canon this is XL; opened as DRAFT for review-quality engagement. Cure-(20)v3 = drift + 2 substrate-restores + 2 surgical test-cascade-fixes: - Class-1 drift-rebase onto upstream/main d124c5a (3 commits beyond cure-(19)'s parent 424c6d0: fix(outbound): resolve send-capable channel registry openclaw#83733, fix: keep inter-session provenance out of transcripts openclaw#83755, fix(cli): fix flaky config set help text test caused by env var leakage and word wrapping openclaw#83423 — all orthogonal to orphan-restore + cascade-fix scope) - Class-2 cure-substrate-original revert restoring 4 deleted files + 1 modified file: src/flows/doctor-repair-flow.{ts,test.ts}, src/commands/doctor-session-snapshots.{ts,test.ts}, src/flows/doctor-health-contributions.ts (4 hunks). All orthogonal to continuation surface (0 keyword hits). Caught by local impacted-vitest after cure-(19) Class-2 revert of src/config/io.ts. - Class-3 cascade-fix in src/agents/subagent-registry.test.ts (test substrate only; runtime unchanged): added resolveSessionStoreEntry mock (cure-(17) family cascade-miss for cure's added call at subagent-registry-helpers.ts:79+102) + renamed/inverted the "preserves run-mode keep entries past SESSION_RUN_TTL_MS sweep" test to "sweeps...after cleanup completes" with expect(run).toBeUndefined() matching cure's intentional cleanupCompletedAt-based deferred- cleanup-sweep policy for continue_delegate lifecycle (cohort byte-walks at Discord 1506039161 + 1506039225 + 1506039263 confirmed cure-behavior IS correct continuation-feature substrate). Co-Authored-By: scribe.dandelion.cult <scribe.dandelion.cult@hotmail.com> Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…026.5.19) (#583)
This PR contains the following updates:
| Package | Update | Change |
|---|---|---|
| [ghcr.io/openclaw/openclaw](https://openclaw.ai) ([source](https://github.com/openclaw/openclaw)) | patch | `2026.5.18` → `2026.5.19` |
---
### Release Notes
<details>
<summary>openclaw/openclaw (ghcr.io/openclaw/openclaw)</summary>
### [`v2026.5.19`](https://github.com/openclaw/openclaw/blob/HEAD/CHANGELOG.md#2026519)
[Compare Source](https://github.com/openclaw/openclaw/compare/v2026.5.18...v2026.5.19)
##### Changes
- Agents: clarify that fixes should default to clean bounded refactors, lean internals, and explicit plugin SDK/API deprecation paths.
- Dependencies: update `@openclaw/proxyline` to 0.3.3.
- Dependencies: update Pi packages to 0.75.1 and raise the minimum supported Node.js 22 line to 22.19.
- Docker/Podman: add `OPENCLAW_IMAGE_APT_PACKAGES` as the runtime-neutral image build arg for extra apt packages while keeping `OPENCLAW_DOCKER_APT_PACKAGES` as a legacy fallback. ([#​62431](https://github.com/openclaw/openclaw/issues/62431)) Thanks [@​urtabajev](https://github.com/urtabajev).
- Gateway/ACPX: attribute startup probe, config, runtime, and resource-count costs in restart traces without changing readiness behavior. ([#​83300](https://github.com/openclaw/openclaw/issues/83300)) Thanks [@​samzong](https://github.com/samzong).
- Gateway: overlap startup logging and plugin-service startup with channel sidecars to reduce restart ready latency while preserving `/readyz` sidecar gating. ([#​83301](https://github.com/openclaw/openclaw/issues/83301)) Thanks [@​samzong](https://github.com/samzong).
- Plugins/admin-http-rpc: allow trusted admin HTTP RPC clients to start and wait for web QR login flows. ([#​83259](https://github.com/openclaw/openclaw/issues/83259)) Thanks [@​liorb-mountapps](https://github.com/liorb-mountapps).
- Mac app: redesign Settings pages with consistent card layouts, cached navigation, cleaner permissions/voice/skills/cron/exec/debug panes, and steadier spacing around the native sidebar.
- Mac app: refine Voice & Talk recognition-language and wake-phrase settings so they use the same compact card rows as the rest of Settings.
- Skills: rename the repo-local Codex closeout review skill and helper to `autoreview` while preserving the Codex-first fallback behavior.
- Skills: add a meme-maker skill for curated template search, local SVG/PNG rendering, Imgflip hosted rendering, and Know Your Meme provenance links.
- Skills CLI: allow `openclaw skills install` and `openclaw skills update` to target shared managed skills with `--global`. ([#​74466](https://github.com/openclaw/openclaw/issues/74466)) Thanks [@​Marvae](https://github.com/Marvae).
- Browser: surface pending and recently handled modal dialogs in snapshots, return `blockedByDialog` when an action opens a modal, and allow `browser dialog --dialog-id` to answer pending dialogs.
- Browser CLI: add `openclaw browser evaluate --timeout-ms` so long-running page functions can extend both the evaluate action and request timeout budgets. ([#​83447](https://github.com/openclaw/openclaw/issues/83447)) Thanks [@​eefreenyc](https://github.com/eefreenyc).
- Codex app-server: scope OpenClaw prompt guidance by runtime surface so native Codex keeps Codex-owned base/personality instructions while OpenClaw contributes only runtime context, delivery guidance, and explicitly scoped command hints. ([#​83454](https://github.com/openclaw/openclaw/issues/83454)) Thanks [@​100yenadmin](https://github.com/100yenadmin).
- Docker/Podman: add `OPENCLAW_IMAGE_PIP_PACKAGES` for opt-in Python package installation in local image builds. ([#​83771](https://github.com/openclaw/openclaw/issues/83771)) Thanks [@​stephenredmond-straiteis](https://github.com/stephenredmond-straiteis).
- Agents/tools: shorten built-in tool descriptions and schema hints across media, messaging, sessions, cron, Gateway, web, image/PDF, TTS, nodes, and plan tools while preserving routing guardrails.
- Skills: add node inspector debugging, fused diagram generation, and throwaway spike workflow skills.
- CLI/plugins: add `defineToolPlugin` plus `openclaw plugins build`, `validate`, and `init` for typed simple tool plugins with generated manifest metadata, optional tool declarations, and context factories.
- Agents/skills: tighten bundled skill prompts and metadata, quote skill descriptions, refresh current CLI/API guidance, and update embedded sherpa-onnx runtime downloads.
- Skills: update the Obsidian skill to target the official `obsidian` CLI and require its registered binary instead of the third-party `obsidian-cli`.
- Skills: add a Python debugging skill for pdb, breakpoint(), post-mortem inspection, and debugpy remote attach.
- Codex: add `/codex plugins list`, `enable`, and `disable` for managing configured native Codex plugins from chat without editing config by hand.
- Plugins/messages: add presentation capability limits for channel renderers, adapt rich message controls before native rendering, and mark legacy `interactive`/Slack directive producer APIs as deprecated.
- Plugins/subagents: store channel delivery routes as canonical session metadata and deprecate ad hoc subagent hook delivery-origin fields in favor of core route projection.
- Proxy: support HTTPS managed forward-proxy endpoints and scoped `proxy.tls.caFile` CA trust for proxy endpoint TLS. ([#​79171](https://github.com/openclaw/openclaw/issues/79171)) Thanks [@​jesse-merhi](https://github.com/jesse-merhi).
- QA-Lab: add first-hour 20-turn and optional 100-turn runtime parity scenarios, with tier metadata for standard and soak QA gates. Fixes [#​80338](https://github.com/openclaw/openclaw/issues/80338); refs [#​80337](https://github.com/openclaw/openclaw/issues/80337). Thanks [@​100yenadmin](https://github.com/100yenadmin).
- QA-Lab: add `openclaw qa suite --runtime-parity-tier` and wire the standard Codex-vs-Pi tier into release checks separately from optional/live-only/soak lanes. Fixes [#​80337](https://github.com/openclaw/openclaw/issues/80337). Thanks [@​100yenadmin](https://github.com/100yenadmin).
- QA-Lab: add a live-only Codex Pi-shaped Read vocabulary canary so runtime parity catches native workspace-read prompt compatibility drift. ([#​80323](https://github.com/openclaw/openclaw/issues/80323)) Thanks [@​100yenadmin](https://github.com/100yenadmin).
- QA-Lab: add live-only harness self-health scenarios for plugin hook crashes, manifest contract errors, and WebChat direct-reply self-message routing. ([#​80323](https://github.com/openclaw/openclaw/issues/80323)) Thanks [@​100yenadmin](https://github.com/100yenadmin).
- QA-Lab: add runtime tool fixture scenarios and coverage reporting for Codex-native workspace tools, OpenClaw dynamic tools, and optional plugin-backed tools. Fixes [#​80173](https://github.com/openclaw/openclaw/issues/80173). Thanks [@​100yenadmin](https://github.com/100yenadmin).
- QA-Lab: expose runtime tool fixture coverage through `openclaw qa coverage --tools`, with optional suite-summary evaluation for parity gate artifacts. Thanks [@​100yenadmin](https://github.com/100yenadmin).
- QA-Lab: schedule a live-frontier Codex-vs-Pi runtime token-efficiency artifact lane in the all-lanes QA workflow. Fixes [#​80175](https://github.com/openclaw/openclaw/issues/80175). Thanks [@​100yenadmin](https://github.com/100yenadmin).
- QA-Lab: hard-gate required OpenClaw dynamic runtime-tool drift in the standard Codex-vs-Pi tier with a blocking release-check verifier and publish the tool coverage report artifact. Fixes [#​80339](https://github.com/openclaw/openclaw/issues/80339); refs [#​80319](https://github.com/openclaw/openclaw/issues/80319). Thanks [@​100yenadmin](https://github.com/100yenadmin).
- QA-Lab: add the personal-agent approval-denial scenario so the benchmark pack verifies denied local reads stop cleanly without tool progress or fixture leaks. ([#​83150](https://github.com/openclaw/openclaw/issues/83150)) Thanks [@​iFiras-Max1](https://github.com/iFiras-Max1).
- QA-Lab: extend the personal-agent benchmark pack with a local task followthrough scenario for proof-backed pending, blocked, and done status reporting. Thanks [@​iFiras-Max1](https://github.com/iFiras-Max1).
- QA-Lab: add a report-only dreaming shadow-trial scenario so candidate memory promotion can be evaluated without mutating `MEMORY.md`. Thanks [@​iFiras-Max1](https://github.com/iFiras-Max1).
- Gateway/performance: add `pnpm test:restart:gateway` benchmark tooling for repeated restart readiness, downtime, trace, and resource-slope evidence. ([#​83299](https://github.com/openclaw/openclaw/issues/83299)) Thanks [@​samzong](https://github.com/samzong).
- Android: switch Talk Mode to realtime Gateway relay voice sessions with streaming mic input, realtime audio playback, tool-result bridging, and on-screen transcripts. ([#​83130](https://github.com/openclaw/openclaw/issues/83130)) Thanks [@​sliekens](https://github.com/sliekens).
- Gateway/config: expose config lookup reload metadata so tools can distinguish restart-required, hot-reloadable, and no-op fields before applying config edits. Fixes [#​81409](https://github.com/openclaw/openclaw/issues/81409). ([#​81612](https://github.com/openclaw/openclaw/issues/81612)) Thanks [@​LLagoon3](https://github.com/LLagoon3).
- Telegram: add allowlisted native DM draft previews for transient tool progress while keeping final answers on the normal persistent delivery path. ([#​83622](https://github.com/openclaw/openclaw/issues/83622)) Thanks [@​akrimm702](https://github.com/akrimm702).
- QA-Lab: add a personal-agent share-safe diagnostics artifact scenario so support handoffs keep useful status while omitting raw personal content. Thanks [@​iFiras-Max1](https://github.com/iFiras-Max1).
- QA-Lab: add a personal-agent no-fake-progress scenario so completion claims stay tied to local evidence instead of unsupported external progress. ([#​83824](https://github.com/openclaw/openclaw/issues/83824)) Thanks [@​iFiras-Max1](https://github.com/iFiras-Max1).
##### Fixes
- CLI: reject explicit port numbers above 65535 before they reach Gateway or Node bind paths. Fixes [#​83900](https://github.com/openclaw/openclaw/issues/83900). ([#​84008](https://github.com/openclaw/openclaw/issues/84008)) Thanks [@​hclsys](https://github.com/hclsys).
- Codex app-server: preserve plugin tool auth profiles when Codex owns model transport so OpenClaw dynamic tools can resolve their provider credentials. ([#​83603](https://github.com/openclaw/openclaw/issues/83603)) Thanks [@​rubencu](https://github.com/rubencu).
- Memory/search: scan the JS-side fallback vector path (used when the sqlite-vec index is unavailable or has a mismatched dimension) in bounded rowid batches and yield to the event loop between batches so large chunk tables can no longer pin the Node.js main thread for multi-second windows. Also keeps the SQL prepared statement rooted in a local so node:sqlite cannot finalize it mid-scan under heap pressure. Fixes [#​81172](https://github.com/openclaw/openclaw/issues/81172). Thanks [@​dev23xyz-oss](https://github.com/dev23xyz-oss).
- Memory Wiki: preserve fs-safe diagnostics when bridge source page writes fail for non-symlink filesystem safety reasons, so directory collisions are reported with the underlying error code. ([#​83776](https://github.com/openclaw/openclaw/issues/83776)) Thanks [@​TurboTheTurtle](https://github.com/TurboTheTurtle).
- Telegram: keep forum topics from blocking sibling topic traffic by routing inbound serialization, media/text buffers, and account API queues on topic-aware lanes. ([#​83829](https://github.com/openclaw/openclaw/issues/83829))
- Telegram: keep queued forum-topic follow-up messages from inheriting superseded source abort signals, so later same-topic user turns can still run and reply after an active turn is replaced. ([#​83827](https://github.com/openclaw/openclaw/issues/83827)) Thanks [@​VACInc](https://github.com/VACInc).
- CLI/update: bypass npm freshness filters consistently during managed package and plugin installs so freshly published release plugins remain installable. Thanks [@​jalehman](https://github.com/jalehman).
- CLI/update: guide root-owned npm install EACCES recovery by stopping the managed Gateway before manual package replacement, then reinstalling and restarting the service. Fixes [#​83747](https://github.com/openclaw/openclaw/issues/83747). ([#​83757](https://github.com/openclaw/openclaw/issues/83757)) Thanks [@​brokemac79](https://github.com/brokemac79).
- Twitch: register refreshing chat tokens with Twurple's chat intent so automatic token refresh keeps chat access available. ([#​83750](https://github.com/openclaw/openclaw/issues/83750)) Thanks [@​TurboTheTurtle](https://github.com/TurboTheTurtle).
- Agents/subagents: keep collect-mode announce queues batching unresolved-origin items with compatible same-route messages and resume collection after a true cross-channel drain when a later compatible batch remains. Fixes [#​83577](https://github.com/openclaw/openclaw/issues/83577).
- Skills: refresh existing session skill snapshots when watched skill roots change, so changed extra skill directories take effect without starting a new session. Fixes [#​83782](https://github.com/openclaw/openclaw/issues/83782). ([#​83800](https://github.com/openclaw/openclaw/issues/83800)) Thanks [@​hclsys](https://github.com/hclsys).
- Providers/Anthropic: preserve native image input for current Claude model rows when stale local catalog data marks them text-only. ([#​83756](https://github.com/openclaw/openclaw/issues/83756)) Thanks [@​TurboTheTurtle](https://github.com/TurboTheTurtle).
- Providers/Anthropic: preserve Claude 4 image capability when configured model refs resolve through a stale local catalog row. ([#​83756](https://github.com/openclaw/openclaw/issues/83756)) Thanks [@​TurboTheTurtle](https://github.com/TurboTheTurtle).
- Providers/DeepSeek: normalize MCP tool schemas with `anyOf`/`oneOf` unions before normal and compaction requests reach DeepSeek, preventing union-shaped parameters from being rejected. ([#​83766](https://github.com/openclaw/openclaw/issues/83766)) Thanks [@​TurboTheTurtle](https://github.com/TurboTheTurtle).
- Control UI: render live tool progress from session-scoped `session.tool` Gateway events so externally started runs show their tool cards in the active session. ([#​83734](https://github.com/openclaw/openclaw/issues/83734)) Thanks [@​TurboTheTurtle](https://github.com/TurboTheTurtle).
- Outbound: resolve send-capable channel plugins from the active runtime registry when the pinned startup registry only has setup metadata. ([#​83733](https://github.com/openclaw/openclaw/issues/83733)) Thanks [@​TurboTheTurtle](https://github.com/TurboTheTurtle).
- Discord: preserve streamed reply previews when recovered tool-warning finals are delivered before or after the assistant's final reply. ([#​84169](https://github.com/openclaw/openclaw/issues/84169)) Thanks [@​neeravmakwana](https://github.com/neeravmakwana).
- Control UI: keep the chat delete confirmation popover clamped inside the visible viewport on small screens. ([#​83804](https://github.com/openclaw/openclaw/issues/83804)) Thanks [@​ThiagoCAltoe](https://github.com/ThiagoCAltoe).
- Browser: enforce current-tab URL allowlist checks for `/act` evaluate/batch actions and `/highlight` routes while leaving tab-management actions unblocked. ([#​78523](https://github.com/openclaw/openclaw/issues/78523))
- CI: require real-behavior-proof verdict markers to come from the ClawSweeper GitHub App before accepting exact-head proof. ([#​83692](https://github.com/openclaw/openclaw/issues/83692))
- Models: show the effective OpenAI/Codex auth profile in `/models` provider headers instead of falling back to the OpenAI env-key label. ([#​83697](https://github.com/openclaw/openclaw/issues/83697)) Thanks [@​yu-xin-c](https://github.com/yu-xin-c).
- CLI: include active bundled loopback MCP tools in CLI system prompts and reset provider-side CLI sessions when that prompt-visible tool surface changes. ([#​83785](https://github.com/openclaw/openclaw/issues/83785)) Thanks [@​TurboTheTurtle](https://github.com/TurboTheTurtle).
- Browser: keep a profile `cdpPort` when its `cdpUrl` omits a port, while still letting explicitly written URL ports win. ([#​82166](https://github.com/openclaw/openclaw/issues/82166)) Thanks [@​Marvae](https://github.com/Marvae).
- Agents/image generation: allow distinct `image_generate` prompts to start separate session-backed background tasks while same-prompt retries still return the active task status. ([#​83614](https://github.com/openclaw/openclaw/issues/83614)) Thanks [@​Elarwei001](https://github.com/Elarwei001).
- Gateway/WebChat: honor configured `channels.webchat.textChunkLimit` and `chunkMode` overrides when chunking WebChat replies. ([#​83713](https://github.com/openclaw/openclaw/issues/83713))
- Control UI: stop the chat reading indicator from sticking after an assistant response finishes. ([#​83515](https://github.com/openclaw/openclaw/issues/83515)) Thanks [@​njuboy11](https://github.com/njuboy11).
- Skills: reject empty or whitespace-only skill names and descriptions during quick validation. ([#​27061](https://github.com/openclaw/openclaw/issues/27061))
- Sessions: skip trailing custom transcript entries when checking tail assistant replies so embedded CLI gap-fill does not duplicate canonical assistant output. ([#​83635](https://github.com/openclaw/openclaw/issues/83635)) Thanks [@​yaoyi1222](https://github.com/yaoyi1222).
- Memory Wiki: keep `wiki_lint` tool output path-safe by reporting vault-internal lint reports as relative paths in tool text and details while preserving absolute report paths for CLI/file callers. ([#​83439](https://github.com/openclaw/openclaw/issues/83439)) Thanks [@​LLagoon3](https://github.com/LLagoon3).
- Telegram: keep verbose tool progress visible without mirroring non-final progress into active session transcripts, preventing embedded provider replies from aborting mid-run. ([#​83631](https://github.com/openclaw/openclaw/issues/83631)) Thanks [@​kurplunkin](https://github.com/kurplunkin).
- Telegram: log successful outbound text and media deliveries with account, chat, message, operation, thread, reply, silent, and chunk metadata while keeping message bodies out of logs. Fixes [#​83196](https://github.com/openclaw/openclaw/issues/83196). ([#​83247](https://github.com/openclaw/openclaw/issues/83247)) Thanks [@​jrwrest](https://github.com/jrwrest).
- Cron: link isolated scheduled task runs to their stable cron session so task status and cleanup can follow the backing agent run. ([#​83606](https://github.com/openclaw/openclaw/issues/83606)) Thanks [@​jai](https://github.com/jai).
- Codex app-server: mark Codex-native subagent task mirrors terminal when blocked or failed spawn-agent calls arrive with stale initializing child state, preventing task registry entries from staying running. Fixes [#​83852](https://github.com/openclaw/openclaw/issues/83852). ([#​83945](https://github.com/openclaw/openclaw/issues/83945)) Thanks [@​joshavant](https://github.com/joshavant).
- CLI: enforce the documented Node.js 22.19 runtime floor in the source launcher.
- Release stability: repair broad-gate regressions in requester-agent completion handoff, QA-Lab mock spawn attribution, Slack monitor test isolation, plugin uninstall peer fixtures, and Node-floor launcher contract coverage.
- Agents/replies: persist queued follow-up user messages and assistant error stubs only once across model-fallback retries, preventing repeated provider rejections from corrupted same-role session transcripts. Fixes [#​83404](https://github.com/openclaw/openclaw/issues/83404). ([#​83417](https://github.com/openclaw/openclaw/issues/83417)) Thanks [@​yetval](https://github.com/yetval).
- Telegram: preserve reply-target context for bare mention replies on runtime-only turns so the model sees the replied-to message body. Fixes [#​83767](https://github.com/openclaw/openclaw/issues/83767). ([#​83953](https://github.com/openclaw/openclaw/issues/83953)) Thanks [@​joshavant](https://github.com/joshavant).
- ClawHub: preserve configured base URL path prefixes when building API request URLs, so self-hosted ClawHub instances mounted under a subpath keep routing correctly. ([#​83982](https://github.com/openclaw/openclaw/issues/83982)) Thanks [@​ThiagoCAltoe](https://github.com/ThiagoCAltoe).
- Slack: persist delivered inbound message IDs and fail closed when same-channel thread replies lose their thread context, preventing delayed duplicate replies and accidental channel-root posts. Fixes [#​83521](https://github.com/openclaw/openclaw/issues/83521). Thanks [@​shannon0430](https://github.com/shannon0430).
- Codex app-server: complete OpenClaw dynamic tool diagnostics at the request boundary so successful, failed, timed out, aborted, and blocked tool calls do not leave active tool state behind. Fixes [#​83474](https://github.com/openclaw/openclaw/issues/83474). Thanks [@​rozmiarD](https://github.com/rozmiarD).
- Gateway/config: keep config writes from failing on unrelated unresolved auth-profile SecretRefs while preserving live auth-profile runtime snapshots.
- Gateway/sessions: clear stored CLI provider resume bindings on non-subagent `/reset` so the next turn starts a fresh provider-side CLI conversation instead of resuming old context. ([#​83448](https://github.com/openclaw/openclaw/issues/83448)) Thanks [@​jasonyliu](https://github.com/jasonyliu).
- Doctor: preserve legacy whole-agent Claude CLI intent by moving matching Anthropic model selections to model-scoped runtime policy before removing stale runtime pins. Fixes [#​83491](https://github.com/openclaw/openclaw/issues/83491). Thanks [@​danielcrick](https://github.com/danielcrick).
- Discord/OpenAI: keep realtime Discord voice sessions hearing follow-up turns with OpenAI realtime and prebuffer assistant playback to avoid choppy starts. ([#​80505](https://github.com/openclaw/openclaw/issues/80505)) Thanks [@​Solvely-Colin](https://github.com/Solvely-Colin).
- LM Studio: resolve env-template API keys like `${LMSTUDIO_API_KEY}` through the standard SecretInput path instead of sending the raw template as the bearer token, and preserve header-auth and discovery-key precedence when the template is unset. Fixes [#​80495](https://github.com/openclaw/openclaw/issues/80495). ([#​80568](https://github.com/openclaw/openclaw/issues/80568)) Thanks [@​MonkeyLeeT](https://github.com/MonkeyLeeT).
- Discord/subagents: route the initial reply from thread-bound delegated sessions into the bound Discord thread instead of the parent channel. Fixes [#​83170](https://github.com/openclaw/openclaw/issues/83170). ([#​83172](https://github.com/openclaw/openclaw/issues/83172)) Thanks [@​100menotu001](https://github.com/100menotu001).
- Gateway/sessions: rotate failed agent sessions when their transcript file is missing instead of wedging per-channel lanes. Fixes [#​83488](https://github.com/openclaw/openclaw/issues/83488). ([#​83553](https://github.com/openclaw/openclaw/issues/83553)) Thanks [@​LLagoon3](https://github.com/LLagoon3).
- Agents: refresh final-delivery routing from fresh session state before declaring a no-send failure, keeping recovered runs on the normal durable delivery path. ([#​83835](https://github.com/openclaw/openclaw/issues/83835)) Thanks [@​joshavant](https://github.com/joshavant).
- Agents: guard final-delivery fresh session routing against mismatched logical sessions before reusing recovered delivery context. ([#​83928](https://github.com/openclaw/openclaw/issues/83928)) Thanks [@​joshavant](https://github.com/joshavant).
- Media: prevent image metadata probing from invoking external decoder delegates on unrecognized image bytes, and stop fallback chaining after real processing errors.
- Media: install Sharp with the root package and fall back to sips, Windows native imaging, ImageMagick, GraphicsMagick, or ffmpeg for image resizing/conversion when Sharp is unavailable. Fixes [#​83401](https://github.com/openclaw/openclaw/issues/83401). Thanks [@​scotthuang](https://github.com/scotthuang).
- Telegram: deliver generated media completions back into forum topics by preserving topic IDs across requester-agent handoff. ([#​83556](https://github.com/openclaw/openclaw/issues/83556)) Thanks [@​fuller-stack-dev](https://github.com/fuller-stack-dev).
- Gateway: defer update-check startup until after readiness so package update checks no longer block sidecar-ready startup, while preserving update broadcasts and shutdown cleanup. ([#​83520](https://github.com/openclaw/openclaw/issues/83520)) Thanks [@​samzong](https://github.com/samzong).
- Telegram: keep `/btw` and read-only status commands from aborting active runs, and avoid retaining raw update payloads in timed-out spool tombstones. Refs [#​83272](https://github.com/openclaw/openclaw/issues/83272).
- Agents: log strict-agentic execution contract diagnostics only when the planning-only retry path actually triggers.
- Agents: stop embedded session takeover and session write-lock errors from consuming model fallbacks while preserving provider fallback metadata. Fixes [#​83510](https://github.com/openclaw/openclaw/issues/83510). Thanks [@​luyao618](https://github.com/luyao618).
- Agents/video: hide `video_generate` reference-audio parameters unless a registered video provider supports audio inputs.
- Plugins: fall back to npm for official ClawHub updates when artifact downloads are unavailable, including beta-to-default fallback and dry-run version reporting.
- Plugins/xAI: echo PKCE challenge fields during OAuth authorization-code token exchange for xAI token-endpoint compatibility. ([#​83499](https://github.com/openclaw/openclaw/issues/83499)) Thanks [@​fuller-stack-dev](https://github.com/fuller-stack-dev).
- Codex app-server: hydrate current inbound image attachments before queued runs so Responses-backed agents receive Discord and other channel images as native vision input. Fixes [#​83466](https://github.com/openclaw/openclaw/issues/83466). Thanks [@​iannwu](https://github.com/iannwu).
- Codex app-server: keep native code mode available without forcing code-mode-only so OpenClaw dynamic tool turns complete through the app-server tool bridge. Fixes [#​83109](https://github.com/openclaw/openclaw/issues/83109). Thanks [@​daswass](https://github.com/daswass).
- Codex app-server: expose OpenClaw's sandbox-routed shell as `sandbox_exec`/`sandbox_process` for non-Docker sandbox backends so SSH sandbox agents keep a correctly routed shell path without shadowing Codex native shell. Fixes [#​80322](https://github.com/openclaw/openclaw/issues/80322). Thanks [@​keramblock](https://github.com/keramblock).
- Release stability: recover stale session diagnostics and Codex OAuth fallback state so stuck runs and reused refresh tokens clear without blocking follow-up work. ([#​83503](https://github.com/openclaw/openclaw/issues/83503)) Thanks [@​100yenadmin](https://github.com/100yenadmin).
- Messages/TTS: apply TTS directives before message-tool sends reach core, gateway, or plugin delivery so opt-in message-tool rooms and proactive sends attach voice notes instead of leaking raw tags. Fixes [#​81598](https://github.com/openclaw/openclaw/issues/81598). Thanks [@​CG-Intelligence-Agent-Jack](https://github.com/CG-Intelligence-Agent-Jack) and [@​CoronovirusG10](https://github.com/CoronovirusG10).
- Messages/Codex: keep Codex direct/source chats on message-tool visible delivery by default while documenting and testing `messages.visibleReplies: "automatic"` as the old-mode opt-out; channel wildcard model overrides now apply to direct chats before harness delivery defaults.
- Memory/QMD: keep archived session transcript hits visible after QMD export while preserving normal `.md` session ids that only resemble archive names. ([#​83518](https://github.com/openclaw/openclaw/issues/83518); fixes [#​83506](https://github.com/openclaw/openclaw/issues/83506)) Thanks [@​tanshanshan](https://github.com/tanshanshan).
- Codex app-server: preserve network access for sandboxed Codex code-mode turns when the OpenClaw sandbox allows outbound egress. Fixes [#​83347](https://github.com/openclaw/openclaw/issues/83347). Thanks [@​YusukeIt0](https://github.com/YusukeIt0).
- Codex app-server: honor writable Docker bind mounts for sandboxed workspace-write turns while disabling native Code Mode when container-path aliases or read-only bind shadows cannot be represented safely host-side. Fixes [#​83737](https://github.com/openclaw/openclaw/issues/83737). ([#​83849](https://github.com/openclaw/openclaw/issues/83849)) Thanks [@​joshavant](https://github.com/joshavant).
- QA-Lab: keep the OTLP smoke decoder independent of removed OpenTelemetry generated-root internals.
- Messages: default group/channel visible replies to automatic final delivery again, keeping `message_tool` opt-in for ambient/shared rooms and tool-reliable models.
- CLI/TUI: force standalone `/exit` runs to terminate after `runTui` returns so onboarding-launched TUI children do not stay alive invisibly. ([#​83501](https://github.com/openclaw/openclaw/issues/83501)) Thanks [@​fuller-stack-dev](https://github.com/fuller-stack-dev).
- Agents/code mode: honor per-agent code-mode config in schema, runtime catalog activation, and model payload filtering. Fixes [#​83388](https://github.com/openclaw/openclaw/issues/83388). Thanks [@​Kaspre](https://github.com/Kaspre).
- Agents/code mode: preserve agent, session, run, and channel context in `before_tool_call` hooks for top-level `exec`/`wait` dispatches. Fixes [#​83387](https://github.com/openclaw/openclaw/issues/83387).
- QQBot: shorten C2C typing indicators to a 10-second window renewed every 5 seconds, capped to keep a final passive-reply slot available. ([#​83469](https://github.com/openclaw/openclaw/issues/83469))
- Replies: keep final payload delivery after live preview updates so channels can finalize or send the completed answer instead of losing preview-only drafts. ([#​83468](https://github.com/openclaw/openclaw/issues/83468))
- Discord: deliver final replies in progress-mode preview streams instead of deduplicating the final visible message. ([#​83443](https://github.com/openclaw/openclaw/issues/83443)) Thanks [@​compoodment](https://github.com/compoodment).
- Providers/Xiaomi: replay MiMo Anthropic-compatible `reasoning_content` as provider-required thinking blocks even when OpenClaw thinking is disabled, fixing follow-up tool turns for `mimo-v2-flash`. Fixes [#​83407](https://github.com/openclaw/openclaw/issues/83407). Thanks [@​Xgenious7](https://github.com/Xgenious7).
- Agents/exec approvals: forward approval-runtime credentials on agent-owned Gateway approval calls so approved async commands complete through the existing runtime path instead of stalling on unauthenticated follow-up calls. Thanks [@​IWhatsskill](https://github.com/IWhatsskill), [@​Patrick-Erichsen](https://github.com/Patrick-Erichsen), and [@​jesse-merhi](https://github.com/jesse-merhi).
- Gateway/skills: preflight remote macOS skill-bin refreshes with a WebSocket connectivity check so stale node sessions skip quickly instead of logging slow `system.which` timeout warnings.
- CLI/config: keep broken discovered plugins that are not referenced by active config from failing `openclaw config validate`, while preserving fatal errors for explicitly configured plugin entries.
- GitHub Copilot: drop unsafe native Responses reasoning replay items with non-replayable IDs before dispatch, preventing affected Copilot sessions from failing with `invalid_request_body`. Fixes [#​83220](https://github.com/openclaw/openclaw/issues/83220). Thanks [@​galiniliev](https://github.com/galiniliev).
- Agents/Codex: fail closed when an explicitly requested Codex harness is not registered instead of silently trying configured model fallbacks. Fixes [#​83349](https://github.com/openclaw/openclaw/issues/83349). Thanks [@​r2-vibes](https://github.com/r2-vibes).
- QA-Lab: make runtime tool coverage fail on missing required tool exercise instead of treating pass/pass parity envelope drift as missing coverage.
- Core/plugins: harden clawpatch-reported edge cases across gateway auth cleanup, Claude session id paths, plugin activation policy, apply-patch hunk handling, diagnostic redaction, and plugin metadata validation.
- UI: show reasoning choices as plain labels instead of leaking internal override wording in session and chat pickers.
- Mac app: avoid repeating the Configuration heading inside channel quick settings.
- Mac app: keep the Settings sidebar always visible and remove the redundant titlebar hide/show control.
- Mac app: normalize Settings pane content margins so pages share the same left and right rail.
- Mac app: prefer explicit private/Tailscale/LAN Gateway endpoints over SSH tunnels, preserve legacy loopback tunnel configs, persist transport choices, and show captured SSH stderr when tunneling really fails.
- Gateway/sessions: keep ACP/acpx and runtime child sessions visible in configured-only session lists when their owner or parent session belongs to a configured agent.
- Mac app: keep app-level menu commands and Dashboard failure states reachable when the remote Gateway is disconnected.
- Mac app: allow longer Gateway and Context errors to wrap in the menu instead of truncating the useful failure detail.
- Mac app: tighten remote Gateway fields in Settings so the Connection pane keeps readable labels and full action button text.
- Mac app: keep custom Settings card rows left-aligned and full-width so Discovery and status sections no longer appear centered or detached.
- Mac app: align Location permission controls to the same trailing column as the rest of Settings.
- Mac app: add Dashboard, Chat, Canvas, and Settings shortcuts to the Dock icon menu.
- Mac app: replace the Settings window's native split-view sidebar with an explicit layout so page content keeps its leading gutter when the sidebar is shown or hidden.
- Mac app: render channel quick config as aligned Settings rows and hide schema-only variants that cannot be edited safely from the quick pane.
- Gateway/webchat: hide internal runtime-context and other `display: false` transcript messages from Chat history and live message events. Fixes [#​83216](https://github.com/openclaw/openclaw/issues/83216). Thanks [@​EmpireCreator](https://github.com/EmpireCreator).
- CLI/help: keep `gateway`, `doctor`, `status`, and `health` help registration out of action/runtime imports so subcommand `--help` stays lightweight in constrained terminals. Fixes [#​83228](https://github.com/openclaw/openclaw/issues/83228). Thanks [@​dfguerrerom](https://github.com/dfguerrerom).
- CLI/help: show plugin-owned command help based on the active memory slot so LanceDB memory users see `ltm` instead of unavailable `memory` commands. Fixes [#​83745](https://github.com/openclaw/openclaw/issues/83745). ([#​83841](https://github.com/openclaw/openclaw/issues/83841)) Thanks [@​joshavant](https://github.com/joshavant).
- Cron/Discord: keep explicit announce runs in message-tool-only source-reply mode so scheduled agent turns post once instead of also echoing through automatic visible replies. Fixes [#​83261](https://github.com/openclaw/openclaw/issues/83261). Thanks [@​Theralley](https://github.com/Theralley).
- Telegram: preserve forum-topic origin targets in inbound, audio-preflight, and skipped-message hook contexts so follow-up delivery stays bound to the originating topic. Fixes [#​83302](https://github.com/openclaw/openclaw/issues/83302). Thanks [@​M00zyx](https://github.com/M00zyx).
- Telegram: retry HTTP 421 Misdirected Request send failures on a fresh fallback transport so transient edge-node routing errors no longer drop outbound replies. Fixes [#​48892](https://github.com/openclaw/openclaw/issues/48892). ([#​48908](https://github.com/openclaw/openclaw/issues/48908)) Thanks [@​MarsDoge](https://github.com/MarsDoge).
- Telegram: fail topic sends closed when Telegram reports `message thread not found` instead of retrying without `message_thread_id` into the base chat. Refs [#​83302](https://github.com/openclaw/openclaw/issues/83302).
- Config/subagents: remove ignored agent-model `timeoutMs` keys, keep subagent model config to primary/fallback selection, and clean shipped stale config through doctor. Fixes [#​83291](https://github.com/openclaw/openclaw/issues/83291). Thanks [@​giodl73-repo](https://github.com/giodl73-repo).
- Mac app: align the Sessions settings pane with the standard Settings page gutter and row spacing.
- OpenAI/Codex: stop rejecting available `openai-codex` GPT-5.1, GPT-5.2, and GPT-5.3 model refs during config validation, while keeping removed Spark aliases suppressed. Fixes [#​83303](https://github.com/openclaw/openclaw/issues/83303).
- Plugins/xAI: complete OAuth-backed xAI login and sidecar auth fixes, including guarded loopback callback CORS handling, video generation polling/defaults, and native-host User-Agent attribution. ([#​83322](https://github.com/openclaw/openclaw/issues/83322)) Thanks [@​Jaaneek](https://github.com/Jaaneek).
- Codex app-server: preserve streamed native command output in mirrored transcripts and trajectory exports when final snapshots omit aggregated output. ([#​83200](https://github.com/openclaw/openclaw/issues/83200)) Thanks [@​rozmiarD](https://github.com/rozmiarD).
- Codex app-server: fail closed when chat or sender policy denies tools, disabling native code, app, environment, and user MCP surfaces for restricted turns. ([#​82374](https://github.com/openclaw/openclaw/issues/82374)) Thanks [@​VACInc](https://github.com/VACInc).
- Codex app-server: keep recent context-engine messages when oversized projected history is truncated, so short follow-ups in long channel sessions do not fall back to stale earlier turns. ([#​83127](https://github.com/openclaw/openclaw/issues/83127)) Thanks [@​VACInc](https://github.com/VACInc).
- Codex app-server: keep OpenClaw session spawning searchable while steering Codex-native delegation through native subagents, avoiding duplicate direct subagent surfaces. ([#​83329](https://github.com/openclaw/openclaw/issues/83329)) Thanks [@​fuller-stack-dev](https://github.com/fuller-stack-dev).
- Codex app-server: recover stale childless Codex-native subagent task mirrors during maintenance and allow their registry rows to be cancelled without an OpenClaw child session. ([#​82836](https://github.com/openclaw/openclaw/issues/82836)) Thanks [@​yshimadahrs-ship-it](https://github.com/yshimadahrs-ship-it) and [@​joshavant](https://github.com/joshavant).
- Feishu: return bound subagent delivery origins from session thread setup so Feishu subagent completions route back to the same DM or topic. ([#​83190](https://github.com/openclaw/openclaw/issues/83190)) Thanks [@​100menotu001](https://github.com/100menotu001).
- CLI/update: tailor post-update Gateway recovery hints by platform, showing systemd, LaunchAgent, Scheduled Task, or generic service-manager guidance instead of macOS-only recovery text. ([#​83096](https://github.com/openclaw/openclaw/issues/83096)) Thanks [@​rubencu](https://github.com/rubencu).
- Plugins: apply a default 15-second timeout to legacy `before_agent_start` hooks so hung plugin handlers no longer block agent startup. Fixes [#​48534](https://github.com/openclaw/openclaw/issues/48534). ([#​83136](https://github.com/openclaw/openclaw/issues/83136)) Thanks [@​therahul-yo](https://github.com/therahul-yo).
- Feishu: refresh inbound session delivery context for DM, group, and broadcast turns so later replies do not inherit stale WebChat routing. Fixes [#​78274](https://github.com/openclaw/openclaw/issues/78274).
- Agents/subagents: require the initial subagent registry save before reporting spawn accepted, returning a spawn error instead of losing an untracked run when the registry write fails. ([#​83146](https://github.com/openclaw/openclaw/issues/83146)) Thanks [@​yetval](https://github.com/yetval).
- QA-Lab/qa-channel: attach redacted agent tool-start traces to outbound `QaBusMessage` records so scenarios can assert actual tool use instead of relying only on reply text. Fixes [#​67637](https://github.com/openclaw/openclaw/issues/67637). Thanks [@​100yenadmin](https://github.com/100yenadmin).
- QA-Lab: fail live runtime parity reports when assistant-message usage is missing, preventing `0 vs 0` live token rows from being reported as passing proof. Fixes [#​80411](https://github.com/openclaw/openclaw/issues/80411). Thanks [@​100yenadmin](https://github.com/100yenadmin).
- QA-Lab: add a runtime token-efficiency sidecar report that classifies Codex savings separately from regressions and fails only positive Codex-over-Pi live token deltas above threshold. Fixes [#​81093](https://github.com/openclaw/openclaw/issues/81093). Thanks [@​100yenadmin](https://github.com/100yenadmin).
- QA-Lab: fail Codex-backed OpenAI live runtime-pair runs before launching isolated workers when no portable Codex auth is available, while staging API-key fallbacks and configured Codex keys for isolated QA agents. Fixes [#​80412](https://github.com/openclaw/openclaw/issues/80412). Thanks [@​100yenadmin](https://github.com/100yenadmin).
- QA-Lab: refresh parity gates, mock frontier fixtures, model scenarios, and workflow artifact lanes to compare GPT-5.5 against Claude Opus 4.7. Fixes [#​74262](https://github.com/openclaw/openclaw/issues/74262). Thanks [@​100yenadmin](https://github.com/100yenadmin).
- QA-Lab: make mock parity dispatch provider-aware for source discovery and subagent scenarios so OpenAI and Anthropic lanes no longer share identical canned plans. Fixes [#​64879](https://github.com/openclaw/openclaw/issues/64879). Thanks [@​100yenadmin](https://github.com/100yenadmin).
- QA-Lab: stop returning Control UI bearer tokens from unauthenticated bootstrap payloads and bind Docker harness ports to loopback-only host addresses. ([#​66355](https://github.com/openclaw/openclaw/issues/66355)) Thanks [@​pgondhi987](https://github.com/pgondhi987).
- Mac app: avoid a SwiftUI metadata crash when rendering the Cron Jobs settings pane.
- Agents/subagents: preserve run-mode keep subagent registry entries past the session sweep TTL, so kept subagent runs remain visible after cleanup completes. Fixes [#​83132](https://github.com/openclaw/openclaw/issues/83132). ([#​83168](https://github.com/openclaw/openclaw/issues/83168)) Thanks [@​yetval](https://github.com/yetval).
- Agents/OpenAI streams: yield via `setTimeout(0)` instead of `setImmediate` between bursty Responses chunks so abort timers can fire during the yield, keeping cancel-on-timeout responsive on hot streams. Refs [#​82462](https://github.com/openclaw/openclaw/issues/82462).
- Agents/Codex: keep legacy `oauthRef`-backed OAuth profiles usable while `openclaw doctor --fix` migrates them back to inline credentials, without creating new sidecar credentials. ([#​83312](https://github.com/openclaw/openclaw/issues/83312)) Thanks [@​joshavant](https://github.com/joshavant).
- Agents/Codex: load the selected provider owner alongside the Codex harness runtime so `openai-codex` models resolve when plugin allowlists scope runtime loading. Fixes [#​83380](https://github.com/openclaw/openclaw/issues/83380). ([#​83519](https://github.com/openclaw/openclaw/issues/83519)) Thanks [@​joshavant](https://github.com/joshavant).
- Telegram: fail stalled isolated-ingress handlers into tombstones and abort same-lane reply work before restarting, so later same-chat updates drain after a hung turn. Fixes [#​83272](https://github.com/openclaw/openclaw/issues/83272). ([#​83505](https://github.com/openclaw/openclaw/issues/83505)) Thanks [@​joshavant](https://github.com/joshavant).
- CLI/config: send SecretRef diagnostics to stderr so JSON command stdout remains parseable.
- CLI/doctor: seed Control UI allowed origins when migrating legacy non-loopback gateway bind host aliases like `0.0.0.0`. Fixes [#​83286](https://github.com/openclaw/openclaw/issues/83286). Thanks [@​giodl73-repo](https://github.com/giodl73-repo).
- CLI/plugins: ship the bundled memory CLI as a package entry so package-installed `openclaw memory` commands register correctly.
- CLI/update: defer doctor-time plugin package installs during package swaps and seed post-core repair from the updated install registry, preventing duplicate reinstall failures.
- CLI/update: preserve old-parent-readable config metadata during legacy package handoffs, fall back only to official `@openclaw/*` npm plugin packages when ClawHub plugin artifacts are unavailable, and keep managed service package roots authoritative during updates.
- Feishu: detect SecretRef top-level credentials as a configured default account instead of treating object-backed app secrets as missing.
- Gateway/restart: keep ordinary unmanaged SIGUSR1/config restarts in-process instead of detach-spawning an orphaned child, preserving custom supervisor PID tracking while leaving update restarts on the fresh-process path. Fixes [#​65668](https://github.com/openclaw/openclaw/issues/65668).
- CLI/completion: resolve concrete PowerShell profile paths and reload commands during setup and doctor completion installation. Fixes [#​44296](https://github.com/openclaw/openclaw/issues/44296). ([#​83059](https://github.com/openclaw/openclaw/issues/83059)) Thanks [@​yu-xin-c](https://github.com/yu-xin-c).
- Telegram: keep isolated long polling below the hard `getUpdates` request guard so idle bot accounts with high `timeoutSeconds` do not false-disconnect and restart-loop. Fixes [#​83264](https://github.com/openclaw/openclaw/issues/83264). Thanks [@​riccodecarvalho](https://github.com/riccodecarvalho).
- Providers/Google: preserve and recover Gemini 3 tool-call thought signatures during native replay so function-calling turns no longer fail with missing `thought_signature` 400s. Fixes [#​72879](https://github.com/openclaw/openclaw/issues/72879). ([#​80358](https://github.com/openclaw/openclaw/issues/80358)) Thanks [@​abnershang](https://github.com/abnershang).
- Telegram: skip transcript-only delivery mirrors and gateway-injected rows when resolving latest assistant text, preventing retained previews from replacing final replies with stale fragments. Fixes [#​83159](https://github.com/openclaw/openclaw/issues/83159). ([#​83362](https://github.com/openclaw/openclaw/issues/83362)) Thanks [@​joshavant](https://github.com/joshavant).
- Memory/QMD: keep lexical search on raw hyphenated queries while normalizing semantic QMD sub-searches, avoiding fallback to the builtin index for dashed identifiers and dates. Fixes [#​81328](https://github.com/openclaw/openclaw/issues/81328).
- Memory-core: distinguish sqlite-vec load failures from missing semantic vector embeddings in degraded `memory index` warnings, so vector recall diagnostics point at unresolved dimensions instead of blaming sqlite-vec when the store is ready. Fixes [#​75624](https://github.com/openclaw/openclaw/issues/75624). ([#​83056](https://github.com/openclaw/openclaw/issues/83056)) Thanks [@​xuruiray](https://github.com/xuruiray) and [@​Noah3521](https://github.com/Noah3521).
- Agents/subagents: preserve sandbox-peer controller ownership while routing completion announcements back to the originating run session, keeping subagent control and completion delivery scoped correctly. Fixes [#​80201](https://github.com/openclaw/openclaw/issues/80201). ([#​80242](https://github.com/openclaw/openclaw/issues/80242)) Thanks [@​Jerry-Xin](https://github.com/Jerry-Xin).
- Gateway: continue restarting remaining channels when one hot-reload channel restart fails, while still reporting aggregate reload failure and rolling back plugin pre-replace stops. Fixes [#​83054](https://github.com/openclaw/openclaw/issues/83054). Thanks [@​zqchris](https://github.com/zqchris).
- Gateway/plugins: bind admin HTTP RPC dispatch to the accepting gateway instance so multi-gateway processes cannot execute plugin HTTP control-plane calls against another live gateway. Fixes [#​83486](https://github.com/openclaw/openclaw/issues/83486). ([#​83487](https://github.com/openclaw/openclaw/issues/83487)) Thanks [@​coygeek](https://github.com/coygeek).
- Telegram: keep hot-reload restarts from marking polling accounts manually stopped and restart isolated ingress cleanly after worker shutdown, preserving Telegram replies across config reloads. Fixes [#​83008](https://github.com/openclaw/openclaw/issues/83008). ([#​83410](https://github.com/openclaw/openclaw/issues/83410)) Thanks [@​joshavant](https://github.com/joshavant).
- Telegram/Ollama: pass current Telegram image attachments into native PI/Ollama vision turns so live photo prompts reach Ollama as native images. Fixes [#​83023](https://github.com/openclaw/openclaw/issues/83023). ([#​83516](https://github.com/openclaw/openclaw/issues/83516)) Thanks [@​joshavant](https://github.com/joshavant).
- Gateway/secrets: split the lightweight secrets runtime state and auth-store cache from the full secrets runtime and take a startup fast path when the gateway startup config has no SecretRef values, speeding up secrets startup while preserving cleanup and refresh semantics.
- Codex app-server: rotate oversized native Codex threads before resume and cap dynamic tool-result text entering native Codex sessions, preventing stale oversized context from surviving OpenClaw compaction. ([#​82981](https://github.com/openclaw/openclaw/issues/82981)) Thanks [@​hansolo949](https://github.com/hansolo949).
- Gateway/restart: drain pending replies and active chat runs during restart shutdown before sockets and channels close, aborting timed-out chat runs through the normal cleanup path. ([#​69121](https://github.com/openclaw/openclaw/issues/69121)) Thanks [@​alexlomt](https://github.com/alexlomt).
- Agents/Codex: use the Codex runtime context window for OpenAI-model preflight compaction and memory flush checks, so GPT-5.5 Codex sessions compact before hitting the smaller native context limit. Fixes [#​82982](https://github.com/openclaw/openclaw/issues/82982). Thanks [@​vliuyt](https://github.com/vliuyt).
- QA-Lab: clean orphaned gateway temp roots when a suite parent exits and wait on gateway plus transport readiness after config restarts, reducing stale `qa-channel` noise from interrupted runs. Fixes [#​65506](https://github.com/openclaw/openclaw/issues/65506). Thanks [@​100yenadmin](https://github.com/100yenadmin).
- QA-Lab: wake qa-bus long polls that arrive with stale future cursors after a bus restart, preserving reconnect readiness for harness clients. ([#​67142](https://github.com/openclaw/openclaw/issues/67142)) Thanks [@​hxy91819](https://github.com/hxy91819).
- QA-Lab: stage Multipass transfer scripts under OpenClaw's preferred temp root instead of raw OS temp paths, keeping the VM runner inside temp-path guardrails. ([#​64098](https://github.com/openclaw/openclaw/issues/64098)) Thanks [@​ImLukeF](https://github.com/ImLukeF).
- Agents/replies: keep surviving reply media and append a warning when other media references fail, so partial media normalization no longer drops failures silently. Thanks [@​Jerry-Xin](https://github.com/Jerry-Xin).
- Config/models: accept `thinkingFormat: "together"` in model compat config so Together routes can opt into the Together-specific thinking response shape.
- Plugins/tokenjuice: bump the bundled tokenjuice runtime to 0.7.1, bringing Codex hook approval compatibility, pre-tool command wrapping fixes, and Rolldown/Vitest output compaction improvements into the OpenClaw plugin.
- Agents/OpenAI: stop post-processing GPT-5 final replies with hardcoded brevity caps, preserving full channel responses instead of appending synthetic ellipses, and log when strict-agentic GPT-5 execution activates. Fixes [#​82910](https://github.com/openclaw/openclaw/issues/82910).
- Mac app: refine the Settings General and Connection panes with cleaner status panels, card rows, and a single native titlebar sidebar toggle.
- Agents/media: deliver failed async image, music, and video generation completions directly when requester-session completion handoff fails, so channel users see provider errors instead of silent fallback stalls.
- Browser/CDP: keep loopback proxy bypass active across both `NO_PROXY` casings and redact home-relative Chrome MCP profile paths in attach-failure diagnostics.
- Agents/music: steer song, jingle, beat, anthem, and instrumental requests toward `music_generate` audio creation instead of lyric-only replies, and reserve `lyrics` for exact sung words.
- Codex app-server: record native Codex tool calls and results into trajectory artifacts so debug/trajectory exports capture the full Codex-native tool history, not just OpenClaw-bridged turns. Thanks [@​vyctorbrzezowski](https://github.com/vyctorbrzezowski).
- Codex/app-server: keep bound conversation sessions on the owning agent runtime so native Codex control and follow-up turns do not fall back to the default agent client. Fixes [#​82954](https://github.com/openclaw/openclaw/issues/82954). ([#​82993](https://github.com/openclaw/openclaw/issues/82993))
- CLI/infer: run gateway model probes in fresh explicit sessions so one-shot provider checks do not inherit default agent transcript state. ([#​82861](https://github.com/openclaw/openclaw/issues/82861)) Thanks [@​Kaspre](https://github.com/Kaspre).
- Providers/Together: send video-generation requests to Together's v2 video API even when shared text-model config still points at the v1 base URL. ([#​82992](https://github.com/openclaw/openclaw/issues/82992))
- Browser CLI: preserve browser-level options on nested commands, skip option values during lazy command registration, and keep long-running wait/download/dialog hooks open for their advertised wait window.
- CLI/sessions: accept `openclaw sessions list` as an alias for `openclaw sessions`, matching other list-style commands. Fixes [#​81139](https://github.com/openclaw/openclaw/issues/81139). ([#​81163](https://github.com/openclaw/openclaw/issues/81163)) Thanks [@​YB0y](https://github.com/YB0y).
- Channels/stream previews: widen compact progress draft lines and cut prose at word boundaries while preserving command/path suffixes, with `streaming.progress.maxLineChars` for channel-specific tuning.
- CLI/plugins: have `openclaw plugins doctor` warn when a configured runtime needs a missing owner plugin, sharing the same install mapping as `openclaw doctor --fix`. Fixes [#​81326](https://github.com/openclaw/openclaw/issues/81326). ([#​81674](https://github.com/openclaw/openclaw/issues/81674)) Thanks [@​Zavianx](https://github.com/Zavianx).
- Agents/Codex: route OpenAI runs that resolve to `openai-codex` through the Codex provider and bootstrap OpenClaw's stored OAuth profile into the Codex harness when the harness owns transport, so `openai/*` model refs no longer fail with `No API key found for openai-codex` despite an existing Codex OAuth profile. ([#​82864](https://github.com/openclaw/openclaw/issues/82864)) Thanks [@​ragesaq](https://github.com/ragesaq).
- Agents/ACP: distinguish prompt-submitted and runtime-active child stalls from true interactive waits, including redacted proxy-env diagnostics for Codex ACP no-output runs. Fixes [#​44810](https://github.com/openclaw/openclaw/issues/44810).
- Agents/memory: explain that memory-triggered compaction exposes only `read` and append-only `write` when configured core tools are unavailable in `tools.allow` warnings. Fixes [#​82941](https://github.com/openclaw/openclaw/issues/82941). Thanks [@​galiniliev](https://github.com/galiniliev).
- Agents/OpenAI: preserve deterministic tool payload ordering for prompt-cache reuse across OpenAI Responses and chat completions calls. ([#​82940](https://github.com/openclaw/openclaw/issues/82940)) Thanks [@​galiniliev](https://github.com/galiniliev).
- ACP/Codex: honor terminal ACP turn results so failed Codex/acpx runs are not recorded as successful after only progress text. Fixes [#​79522](https://github.com/openclaw/openclaw/issues/79522). Thanks [@​dudaefj](https://github.com/dudaefj).
- Telegram: warn when a media group drops photos that fail to download, including albums where every photo is skipped. Fixes [#​55216](https://github.com/openclaw/openclaw/issues/55216). ([#​82987](https://github.com/openclaw/openclaw/issues/82987)) Thanks [@​eldar702](https://github.com/eldar702).
- Agents/diagnostics: treat repeated same-handle embedded-run cleanup as idempotent while preserving true replacement-handle mismatch diagnostics. Fixes [#​82959](https://github.com/openclaw/openclaw/issues/82959). ([#​82960](https://github.com/openclaw/openclaw/issues/82960)) Thanks [@​galiniliev](https://github.com/galiniliev).
- Agents/subagents: preserve high-priority `AGENTS.md` policy in bootstrap context when oversized files are trimmed, and warn agents to read the full policy file before relying on scoped rules. Fixes [#​82920](https://github.com/openclaw/openclaw/issues/82920). ([#​82921](https://github.com/openclaw/openclaw/issues/82921)) Thanks [@​galiniliev](https://github.com/galiniliev).
- Agents/skills: apply the full effective tool policy pipeline to inline `command-dispatch: tool` skill dispatch before owner-only filtering, preserving configured allow, deny, sandbox, sender, group, and subagent restrictions. ([#​78525](https://github.com/openclaw/openclaw/issues/78525))
- Codex: avoid spawning native hook relay subprocesses for post-tool/finalize events with no registered hook handlers while preserving pre-tool safety and approval relays. Fixes [#​76552](https://github.com/openclaw/openclaw/issues/76552). ([#​78004](https://github.com/openclaw/openclaw/issues/78004)) Thanks [@​evgyur](https://github.com/evgyur).
- Channel accounts: keep top-level default channel accounts visible when named accounts are added alongside default credential material, so mixed legacy/new account configs keep resolving `default` instead of silently dropping it.
- Agents/CLI: reject empty successful CLI subprocess replies as `empty_response` and keep them out of shared auth-profile health, so blank Claude CLI results no longer become green no-payload turns. Fixes [#​83231](https://github.com/openclaw/openclaw/issues/83231). ([#​83421](https://github.com/openclaw/openclaw/issues/83421)) Thanks [@​joshavant](https://github.com/joshavant).
- Codex/Telegram: synthesize native Codex tool progress from final turn snapshots so Telegram `/verbose` stays visible when command events arrive only at completion.
- Codex/Telegram: deliver Codex verbose tool summaries in direct message-tool-only turns while suppressing message-send and activity-log noise. ([#​83186](https://github.com/openclaw/openclaw/issues/83186)) Thanks [@​kurplunkin](https://github.com/kurplunkin).
- Mac app: make Channels settings open faster by deferring config-schema work, avoiding startup channel probes, caching decoded channel status rows, and showing only compact quick settings instead of the full generated channel schema.
- Control UI: include the Control UI and Gateway protocol versions in protocol-mismatch errors so stale app/dashboard pairings identify which side needs rebuilding or restarting.
- Gateway/protocol: restore Gateway WS protocol v4 and keep `message.action` room-event metadata on the existing `inboundTurnKind` wire field while preserving internal inbound-event classification.
- Agents/tools: prefer non-webchat session-key routes when the message tool has stale webchat context, so message-tool-only replies keep delivering to the originating channel. Fixes [#​82911](https://github.com/openclaw/openclaw/issues/82911). ([#​83004](https://github.com/openclaw/openclaw/issues/83004)) Thanks [@​joshavant](https://github.com/joshavant).
- Channels: keep direct-message last-route writes on isolated `per-channel-peer` sessions instead of contaminating the agent main session with channel delivery context. Fixes [#​36614](https://github.com/openclaw/openclaw/issues/36614). Thanks [@​aspenas](https://github.com/aspenas).
- Mac app: move the Settings sidebar toggle into the native titlebar and tighten the General pane width.
- Mac app: keep visited Settings panes mounted so switching tabs no longer blanks and reloads their content.
- Mac app: make Config settings open from shallow schema lookups and load selected paths on demand instead of fetching and rendering the full generated config schema up front.
- Codex: sanitize inline image payloads before Codex app-server and OpenAI Responses replay, and clear poisoned Codex thread bindings after invalid image errors. Fixes [#​82878](https://github.com/openclaw/openclaw/issues/82878).
- Providers/GitHub Copilot: request identity-encoded Copilot API responses across token exchange, catalog, model calls, usage, and embeddings so compressed Business-account error payloads no longer reach JSON parsers as gzip bytes. Fixes [#​82871](https://github.com/openclaw/openclaw/issues/82871). Thanks [@​tonyfe01](https://github.com/tonyfe01).
- Telegram: redact nested raw-update identifiers and user metadata before verbose raw update logging, preserving useful update/message ids without exposing chat, user, command, or profile details. ([#​82945](https://github.com/openclaw/openclaw/issues/82945)) Thanks [@​galiniliev](https://github.com/galiniliev) and [@​joshavant](https://github.com/joshavant).
- Telegram: preserve replied-to bot messages, captions, and media metadata in group reply chains so follow-up replies understand what the user is reacting to. ([#​82863](https://github.com/openclaw/openclaw/issues/82863))
- Providers/Together: update PI runtime packages to 0.74.1 and emit Together-style `reasoning.enabled`/`max_tokens` controls for reasoning-capable OpenAI-completions models.
- Agents/diagnostics: split slow embedded-run `attempt-dispatch` startup summaries into workspace, prompt, runtime-plan, and final dispatch subspans so traces identify the delayed setup phase. Fixes [#​82782](https://github.com/openclaw/openclaw/issues/82782). ([#​82783](https://github.com/openclaw/openclaw/issues/82783)) Thanks [@​galiniliev](https://github.com/galiniliev).
- Agents/Codex: flatten nested tool-result middleware blocks into bounded text so successful message sends are no longer replaced with `Tool output unavailable due to post-processing error`. Fixes [#​82912](https://github.com/openclaw/openclaw/issues/82912). Thanks [@​joeykrug](https://github.com/joeykrug).
- CLI/media: accept HTTP(S) URLs in `openclaw infer image describe --file`, fetching remote images through the guarded media path instead of treating URLs as local files. Fixes [#​82837](https://github.com/openclaw/openclaw/issues/82837). ([#​82854](https://github.com/openclaw/openclaw/issues/82854)) Thanks [@​neeravmakwana](https://github.com/neeravmakwana).
- Agents/subagents: keep session-backed parent runs active when the child wait call times out before the child session has actually settled, so late subagent completions are reconciled instead of being lost. Fixes [#​82787](https://github.com/openclaw/openclaw/issues/82787). …
Summary: - The PR changes outbound channel registry loading and bootstrap to fall back from pinned setup-only channel entries to the active runtime registry, with regression tests and a changelog entry. - Reproducibility: yes. at source level. Current main can select a pinned setup-only channel entry and skip th ... module live output showing delivery after the fallback; I did not run local tests in this read-only review. Automerge notes: - PR branch already contained follow-up commit before automerge: fix(outbound): resolve send-capable channel registry Validation: - ClawSweeper review passed for head 67c20aa72b25e4a4bd9df8b842f34b241ab04ae9. - Required merge gates passed before the squash merge. Prepared head SHA: 67c20aa72b25e4a4bd9df8b842f34b241ab04ae9 Review: openclaw/openclaw#83733 (comment) Co-authored-by: Andy Ye <35905412+TurboTheTurtle@users.noreply.github.com> Co-authored-by: clawsweeper <274271284+clawsweeper[bot]@users.noreply.github.com> Co-authored-by: clawsweeper[bot] <274271284+clawsweeper[bot]@users.noreply.github.com> Approved-by: takhoffman Co-authored-by: takhoffman <781889+takhoffman@users.noreply.github.com>
Summary: - The PR changes outbound channel registry loading and bootstrap to fall back from pinned setup-only channel entries to the active runtime registry, with regression tests and a changelog entry. - Reproducibility: yes. at source level. Current main can select a pinned setup-only channel entry and skip th ... module live output showing delivery after the fallback; I did not run local tests in this read-only review. Automerge notes: - PR branch already contained follow-up commit before automerge: fix(outbound): resolve send-capable channel registry Validation: - ClawSweeper review passed for head 67c20aa72b25e4a4bd9df8b842f34b241ab04ae9. - Required merge gates passed before the squash merge. Prepared head SHA: 67c20aa72b25e4a4bd9df8b842f34b241ab04ae9 Review: openclaw/openclaw#83733 (comment) Co-authored-by: Andy Ye <35905412+TurboTheTurtle@users.noreply.github.com> Co-authored-by: clawsweeper <274271284+clawsweeper[bot]@users.noreply.github.com> Co-authored-by: clawsweeper[bot] <274271284+clawsweeper[bot]@users.noreply.github.com> Approved-by: takhoffman Co-authored-by: takhoffman <781889+takhoffman@users.noreply.github.com>
Summary: - The PR changes outbound channel registry loading and bootstrap to fall back from pinned setup-only channel entries to the active runtime registry, with regression tests and a changelog entry. - Reproducibility: yes. at source level. Current main can select a pinned setup-only channel entry and skip th ... module live output showing delivery after the fallback; I did not run local tests in this read-only review. Automerge notes: - PR branch already contained follow-up commit before automerge: fix(outbound): resolve send-capable channel registry Validation: - ClawSweeper review passed for head 67c20aa. - Required merge gates passed before the squash merge. Prepared head SHA: 67c20aa Review: openclaw#83733 (comment) Co-authored-by: Andy Ye <35905412+TurboTheTurtle@users.noreply.github.com> Co-authored-by: clawsweeper <274271284+clawsweeper[bot]@users.noreply.github.com> Co-authored-by: clawsweeper[bot] <274271284+clawsweeper[bot]@users.noreply.github.com> Approved-by: takhoffman Co-authored-by: takhoffman <781889+takhoffman@users.noreply.github.com>
Summary: - The PR changes outbound channel registry loading and bootstrap to fall back from pinned setup-only channel entries to the active runtime registry, with regression tests and a changelog entry. - Reproducibility: yes. at source level. Current main can select a pinned setup-only channel entry and skip th ... module live output showing delivery after the fallback; I did not run local tests in this read-only review. Automerge notes: - PR branch already contained follow-up commit before automerge: fix(outbound): resolve send-capable channel registry Validation: - ClawSweeper review passed for head 67c20aa. - Required merge gates passed before the squash merge. Prepared head SHA: 67c20aa Review: openclaw#83733 (comment) Co-authored-by: Andy Ye <35905412+TurboTheTurtle@users.noreply.github.com> Co-authored-by: clawsweeper <274271284+clawsweeper[bot]@users.noreply.github.com> Co-authored-by: clawsweeper[bot] <274271284+clawsweeper[bot]@users.noreply.github.com> Approved-by: takhoffman Co-authored-by: takhoffman <781889+takhoffman@users.noreply.github.com>
Summary: - The PR changes outbound channel registry loading and bootstrap to fall back from pinned setup-only channel entries to the active runtime registry, with regression tests and a changelog entry. - Reproducibility: yes. at source level. Current main can select a pinned setup-only channel entry and skip th ... module live output showing delivery after the fallback; I did not run local tests in this read-only review. Automerge notes: - PR branch already contained follow-up commit before automerge: fix(outbound): resolve send-capable channel registry Validation: - ClawSweeper review passed for head 67c20aa. - Required merge gates passed before the squash merge. Prepared head SHA: 67c20aa Review: openclaw#83733 (comment) Co-authored-by: Andy Ye <35905412+TurboTheTurtle@users.noreply.github.com> Co-authored-by: clawsweeper <274271284+clawsweeper[bot]@users.noreply.github.com> Co-authored-by: clawsweeper[bot] <274271284+clawsweeper[bot]@users.noreply.github.com> Approved-by: takhoffman Co-authored-by: takhoffman <781889+takhoffman@users.noreply.github.com>
Summary: - The PR changes outbound channel registry loading and bootstrap to fall back from pinned setup-only channel entries to the active runtime registry, with regression tests and a changelog entry. - Reproducibility: yes. at source level. Current main can select a pinned setup-only channel entry and skip th ... module live output showing delivery after the fallback; I did not run local tests in this read-only review. Automerge notes: - PR branch already contained follow-up commit before automerge: fix(outbound): resolve send-capable channel registry Validation: - ClawSweeper review passed for head 67c20aa. - Required merge gates passed before the squash merge. Prepared head SHA: 67c20aa Review: openclaw#83733 (comment) Co-authored-by: Andy Ye <35905412+TurboTheTurtle@users.noreply.github.com> Co-authored-by: clawsweeper <274271284+clawsweeper[bot]@users.noreply.github.com> Co-authored-by: clawsweeper[bot] <274271284+clawsweeper[bot]@users.noreply.github.com> Approved-by: takhoffman Co-authored-by: takhoffman <781889+takhoffman@users.noreply.github.com>
Summary: - The PR changes outbound channel registry loading and bootstrap to fall back from pinned setup-only channel entries to the active runtime registry, with regression tests and a changelog entry. - Reproducibility: yes. at source level. Current main can select a pinned setup-only channel entry and skip th ... module live output showing delivery after the fallback; I did not run local tests in this read-only review. Automerge notes: - PR branch already contained follow-up commit before automerge: fix(outbound): resolve send-capable channel registry Validation: - ClawSweeper review passed for head 67c20aa. - Required merge gates passed before the squash merge. Prepared head SHA: 67c20aa Review: openclaw#83733 (comment) Co-authored-by: Andy Ye <35905412+TurboTheTurtle@users.noreply.github.com> Co-authored-by: clawsweeper <274271284+clawsweeper[bot]@users.noreply.github.com> Co-authored-by: clawsweeper[bot] <274271284+clawsweeper[bot]@users.noreply.github.com> Approved-by: takhoffman Co-authored-by: takhoffman <781889+takhoffman@users.noreply.github.com>
Summary: - The PR changes outbound channel registry loading and bootstrap to fall back from pinned setup-only channel entries to the active runtime registry, with regression tests and a changelog entry. - Reproducibility: yes. at source level. Current main can select a pinned setup-only channel entry and skip th ... module live output showing delivery after the fallback; I did not run local tests in this read-only review. Automerge notes: - PR branch already contained follow-up commit before automerge: fix(outbound): resolve send-capable channel registry Validation: - ClawSweeper review passed for head 67c20aa. - Required merge gates passed before the squash merge. Prepared head SHA: 67c20aa Review: openclaw#83733 (comment) Co-authored-by: Andy Ye <35905412+TurboTheTurtle@users.noreply.github.com> Co-authored-by: clawsweeper <274271284+clawsweeper[bot]@users.noreply.github.com> Co-authored-by: clawsweeper[bot] <274271284+clawsweeper[bot]@users.noreply.github.com> Approved-by: takhoffman Co-authored-by: takhoffman <781889+takhoffman@users.noreply.github.com>
Summary: - The PR changes outbound channel registry loading and bootstrap to fall back from pinned setup-only channel entries to the active runtime registry, with regression tests and a changelog entry. - Reproducibility: yes. at source level. Current main can select a pinned setup-only channel entry and skip th ... module live output showing delivery after the fallback; I did not run local tests in this read-only review. Automerge notes: - PR branch already contained follow-up commit before automerge: fix(outbound): resolve send-capable channel registry Validation: - ClawSweeper review passed for head 67c20aa. - Required merge gates passed before the squash merge. Prepared head SHA: 67c20aa Review: openclaw#83733 (comment) Co-authored-by: Andy Ye <35905412+TurboTheTurtle@users.noreply.github.com> Co-authored-by: clawsweeper <274271284+clawsweeper[bot]@users.noreply.github.com> Co-authored-by: clawsweeper[bot] <274271284+clawsweeper[bot]@users.noreply.github.com> Approved-by: takhoffman Co-authored-by: takhoffman <781889+takhoffman@users.noreply.github.com>
Summary: - The PR changes outbound channel registry loading and bootstrap to fall back from pinned setup-only channel entries to the active runtime registry, with regression tests and a changelog entry. - Reproducibility: yes. at source level. Current main can select a pinned setup-only channel entry and skip th ... module live output showing delivery after the fallback; I did not run local tests in this read-only review. Automerge notes: - PR branch already contained follow-up commit before automerge: fix(outbound): resolve send-capable channel registry Validation: - ClawSweeper review passed for head 67c20aa. - Required merge gates passed before the squash merge. Prepared head SHA: 67c20aa Review: openclaw#83733 (comment) Co-authored-by: Andy Ye <35905412+TurboTheTurtle@users.noreply.github.com> Co-authored-by: clawsweeper <274271284+clawsweeper[bot]@users.noreply.github.com> Co-authored-by: clawsweeper[bot] <274271284+clawsweeper[bot]@users.noreply.github.com> Approved-by: takhoffman Co-authored-by: takhoffman <781889+takhoffman@users.noreply.github.com>
Summary: - The PR changes outbound channel registry loading and bootstrap to fall back from pinned setup-only channel entries to the active runtime registry, with regression tests and a changelog entry. - Reproducibility: yes. at source level. Current main can select a pinned setup-only channel entry and skip th ... module live output showing delivery after the fallback; I did not run local tests in this read-only review. Automerge notes: - PR branch already contained follow-up commit before automerge: fix(outbound): resolve send-capable channel registry Validation: - ClawSweeper review passed for head 67c20aa. - Required merge gates passed before the squash merge. Prepared head SHA: 67c20aa Review: openclaw#83733 (comment) Co-authored-by: Andy Ye <35905412+TurboTheTurtle@users.noreply.github.com> Co-authored-by: clawsweeper <274271284+clawsweeper[bot]@users.noreply.github.com> Co-authored-by: clawsweeper[bot] <274271284+clawsweeper[bot]@users.noreply.github.com> Approved-by: takhoffman Co-authored-by: takhoffman <781889+takhoffman@users.noreply.github.com>
Summary: - The PR changes outbound channel registry loading and bootstrap to fall back from pinned setup-only channel entries to the active runtime registry, with regression tests and a changelog entry. - Reproducibility: yes. at source level. Current main can select a pinned setup-only channel entry and skip th ... module live output showing delivery after the fallback; I did not run local tests in this read-only review. Automerge notes: - PR branch already contained follow-up commit before automerge: fix(outbound): resolve send-capable channel registry Validation: - ClawSweeper review passed for head 67c20aa. - Required merge gates passed before the squash merge. Prepared head SHA: 67c20aa Review: openclaw#83733 (comment) Co-authored-by: Andy Ye <35905412+TurboTheTurtle@users.noreply.github.com> Co-authored-by: clawsweeper <274271284+clawsweeper[bot]@users.noreply.github.com> Co-authored-by: clawsweeper[bot] <274271284+clawsweeper[bot]@users.noreply.github.com> Approved-by: takhoffman Co-authored-by: takhoffman <781889+takhoffman@users.noreply.github.com>
Summary: - The PR changes outbound channel registry loading and bootstrap to fall back from pinned setup-only channel entries to the active runtime registry, with regression tests and a changelog entry. - Reproducibility: yes. at source level. Current main can select a pinned setup-only channel entry and skip th ... module live output showing delivery after the fallback; I did not run local tests in this read-only review. Automerge notes: - PR branch already contained follow-up commit before automerge: fix(outbound): resolve send-capable channel registry Validation: - ClawSweeper review passed for head 67c20aa. - Required merge gates passed before the squash merge. Prepared head SHA: 67c20aa Review: openclaw#83733 (comment) Co-authored-by: Andy Ye <35905412+TurboTheTurtle@users.noreply.github.com> Co-authored-by: clawsweeper <274271284+clawsweeper[bot]@users.noreply.github.com> Co-authored-by: clawsweeper[bot] <274271284+clawsweeper[bot]@users.noreply.github.com> Approved-by: takhoffman Co-authored-by: takhoffman <781889+takhoffman@users.noreply.github.com>
Fixes #83638.
Summary
outbound.sendTextormessage.send.textsurface.Real Behavior Proof
Behavior or issue addressed: Outbound delivery with a pinned setup-only channel registry and a full active runtime registry.
Real environment tested: Local OpenClaw checkout using production
deliverOutboundPayloadsand runtime registry modules vianode_modules/.bin/tsx; no Vitest, mocks, snapshots, lint, or typecheck path.Exact steps or command run after this patch:
matrixchannel shell with no outbound sender.matrixoutboundsendTextadapter.deliverOutboundPayloads.Evidence after fix: copied console output from
node_modules/.bin/tsx /private/tmp/prove-83733-outbound-registry.mts{ "sendCalls": [ { "to": "!proof:example", "text": "proof hello" } ], "results": [ { "channel": "matrix", "messageId": "proof-message-1", "roomId": "!proof:example" } ] }Observed result after fix: Delivery reached the active runtime outbound adapter and returned
proof-message-1instead of throwingOutbound not configured.What was not tested: I did not use a real Discord token or network send; this isolates the registry-resolution failure behind the Discord report.
Validation
node scripts/run-vitest.mjs src/infra/outbound/channel-bootstrap.runtime.test.ts src/plugins/runtime.channel-pin.test.ts src/infra/outbound/deliver.test.ts- 99 passednode scripts/run-vitest.mjs src/infra/outbound/delivery-queue.recovery.test.ts- 22 passednode scripts/run-vitest.mjs extensions/discord/src/outbound-adapter.test.ts extensions/discord/src/monitor/reply-delivery.test.ts- 47 passedgit diff --checkIf this PR is squash-merged or reworked, please preserve author attribution or include:
Co-authored-by: Andy Ye <35905412+TurboTheTurtle@users.noreply.github.com>