Skip to content

fix: improve gateway protocol mismatch diagnostics#82908

Merged
steipete merged 3 commits into
mainfrom
fix/gateway-protocol-mismatch-diagnostics
May 17, 2026
Merged

fix: improve gateway protocol mismatch diagnostics#82908
steipete merged 3 commits into
mainfrom
fix/gateway-protocol-mismatch-diagnostics

Conversation

@steipete

@steipete steipete commented May 17, 2026

Copy link
Copy Markdown
Contributor

Fixes #82841

Summary

  • Enrich Gateway protocol-mismatch logs with client protocol range, expected protocol, peer, remote port, and instance context.
  • Add deep Gateway status/doctor diagnostics for established local Gateway clients, including lsof, ss, and Windows netstat process detail paths.
  • Document rollback troubleshooting and record the user-visible diagnostics in the changelog.

Verification

  • pnpm test src/infra/ports.test.ts src/cli/daemon-cli/status.gather.test.ts src/cli/daemon-cli/status.print.test.ts src/commands/doctor-gateway-daemon-flow.test.ts src/cli/daemon-cli.coverage.test.ts -- --reporter=verbose
  • node scripts/run-oxlint.mjs --tsconfig config/tsconfig/oxlint.core.json src/infra/ports-inspect.ts src/infra/ports.test.ts
  • git diff --check
  • pnpm check:changed via Blacksmith Testbox tbx_01krt6e556kv2s95epannk490f / https://github.com/openclaw/openclaw/actions/runs/25982363039
  • /Users/steipete/Projects/agent-scripts/skills/codex-review/scripts/codex-review --mode branch

Behavior addressed
Stale newer local OpenClaw clients after rollback now leave enough Gateway log/status/doctor evidence to identify and stop the process instead of weakening protocol compatibility.

Real environment tested
Local focused Vitest/lint/diff checks in this checkout plus Blacksmith Testbox tbx_01krt6e556kv2s95epannk490f running pnpm check:changed.

Exact steps or command run after this patch
Ran focused tests for infra port parsing, daemon deep status, status printing, doctor Gateway flow, and daemon CLI deep coverage; ran targeted oxlint; ran git diff --check; ran pnpm check:changed; ran Codex review until clean.

Evidence after fix
Focused tests passed: infra 10 tests, CLI 39 tests, commands 16 tests. Testbox pnpm check:changed passed.

Observed result after fix
Gateway protocol mismatch logs include protocol ranges and client context, while openclaw gateway status --deep and openclaw doctor --deep surface established local client PIDs/commands for rollback troubleshooting, including IPv4-mapped loopback clients.

What was not tested
A live downgrade with a published 2026.5.12 client connected to a 2026.5.7 Gateway; the wire-compatibility decision is covered by code inspection and regression tests for the new diagnostics paths.

@openclaw-barnacle openclaw-barnacle Bot added docs Improvements or additions to documentation gateway Gateway runtime cli CLI command changes commands Command implementations size: L maintainer Maintainer-authored PR labels May 17, 2026
@clawsweeper

clawsweeper Bot commented May 17, 2026

Copy link
Copy Markdown
Contributor

Codex review: needs real behavior proof before merge.

Summary
The PR expands Gateway protocol-mismatch logging, adds deep status/doctor established-client diagnostics via lsof/ss/netstat, and updates rollback docs, tests, and changelog.

Reproducibility: no. high-confidence live reproduction was established. The linked issue provides concrete rollback logs, and current main source shows the diagnostic fields and established-client surfacing are absent.

Real behavior proof
Needs real behavior proof before merge: Only tests/lint/CI are listed and the live downgrade path is explicitly untested; add redacted terminal/log output or a recording from a real rollback/deep-status path, then update the PR body for re-review.

Next step before merge
Maintainer review remains the right lane because the PR has a protected maintainer label, missing real behavior proof, and a code finding that should be fixed before merge rather than routed as a new automated repair item.

Security
Cleared: No concrete security or supply-chain regression was found; the diff adds local diagnostics, docs, and tests without new dependencies, workflow permissions, or secret-handling paths.

Review findings

  • [P2] Parse lsof file sets before classifying directions — src/infra/ports-inspect.ts:145
Review details

Best possible solution:

Keep the diagnostic direction, parse lsof file records without collapsing multiple sockets per PID, and land after redacted real rollback or deep-status output proves the user path.

Do we have a high-confidence way to reproduce the issue?

No high-confidence live reproduction was established. The linked issue provides concrete rollback logs, and current main source shows the diagnostic fields and established-client surfacing are absent.

Is this the best way to solve the issue?

Partly: adding diagnostics is a narrow maintainable response that preserves protocol enforcement, but the current lsof parser should be fixed before merge so deep diagnostics do not miss multi-socket client processes.

Full review comments:

  • [P2] Parse lsof file sets before classifying directions — src/infra/ports-inspect.ts:145
    parseLsofConnectionFieldOutput loops over parseLsofFieldOutput, but that helper stores only the first n address for a PID. When lsof reports multiple established sockets for one process and the first address is server-side, the later client socket is never classified or surfaced, so rollback diagnostics can still miss the stale client process.
    Confidence: 0.91

Overall correctness: patch is incorrect
Overall confidence: 0.88

What I checked:

  • Live PR metadata: The GitHub API shows this PR is open at head cec8d21, targets main at 422a137, and carries the protected maintainer label. (cec8d2149d77)
  • Current main diagnostic baseline: Current main's protocol-mismatch warning only includes connection id, remote address, client label, mode, and client version; it does not include protocol range, expected protocol, peer, remote port, or instance context. (src/gateway/server/ws-connection/message-handler.ts:551, 422a1374e02b)
  • PR protocol log change: The PR head expands the mismatch warning with peer, remotePort, formatted client/version, min/max, expected protocol, probe minimum, and instance id. (src/gateway/server/ws-connection/message-handler.ts:551, cec8d2149d77)
  • PR deep status implementation: The PR adds deep-only, non-remote Gateway connection inspection and filters out server-side connections before adding established clients to daemon status. (src/cli/daemon-cli/status.gather.ts:469, cec8d2149d77)
  • Blocking parser bug: The PR's lsof connection parser still iterates parseLsofFieldOutput, while that helper records only the first n address per process, so multiple file/socket records under one PID can be collapsed before client/server direction is classified. (src/infra/ports-inspect.ts:145, cec8d2149d77)
  • Prior review comment matches current head: The existing review comment on the PR identifies the same lsof file-set parsing problem at commit cec8d21, and the latest raw file still has that shape. (src/infra/ports-inspect.ts:145, cec8d2149d77)

Likely related people:

  • @vincentkoc: Current-main blame for the shared lsof parser, Gateway protocol-mismatch logging, and daemon status gathering points to the same recent commit by Vincent Koc. (role: recent area contributor; confidence: medium; commits: d62e443b36c3; files: src/infra/ports-inspect.ts, src/gateway/server/ws-connection/message-handler.ts, src/cli/daemon-cli/status.gather.ts)
  • @steipete: Recent current-main work by this contributor touched the daemon status-printing surface, and the PR head changes the same Gateway diagnostics area. (role: recent adjacent contributor; confidence: medium; commits: ca236d098d62, b5d00586c64b, cec8d2149d77; files: src/cli/daemon-cli/status.print.ts, src/cli/daemon-cli/status.gather.ts, src/commands/doctor-gateway-daemon-flow.ts)

Remaining risk / open question:

  • After-fix real behavior proof is still only tests/lint/CI/Testbox output; the PR body explicitly says the live downgrade path was not tested.
  • The Unix lsof parser can collapse multiple socket file records for one PID and miss a stale client process in exactly the deep status/doctor path this PR adds.

Codex review notes: model gpt-5.5, reasoning high; reviewed against 422a1374e02b.

@steipete
steipete force-pushed the fix/gateway-protocol-mismatch-diagnostics branch from 77b766a to 074a36a Compare May 17, 2026 04:50

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 77b766a076

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +145 to +149
for (const entry of parseLsofFieldOutput(output)) {
if (!isGatewayConnectionAddress(entry.address, port, localAddresses)) {
continue;
}
const connection = entry as PortConnection;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Parse lsof file sets before classifying connection direction

parseLsofConnectionFieldOutput iterates parseLsofFieldOutput, but that parser keeps only one n address per PID, while lsof -F emits multiple file sets (f/n) under a single process. In deep status/doctor this can hide real client connections when a PID has multiple established sockets and its first parsed address is server-side, because the whole PID is then classified once and filtered out as non-client. This causes rollback diagnostics to miss stale client processes in multi-socket cases.

Useful? React with 👍 / 👎.

@steipete
steipete force-pushed the fix/gateway-protocol-mismatch-diagnostics branch from 530f26c to cec8d21 Compare May 17, 2026 05:05

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: cec8d2149d

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

port: number,
): Promise<{ connections: PortConnection[]; detail?: string; errors: string[] }> {
const errors: string[] = [];
const res = await runCommandSafe(["netstat", "-ano", "-p", "tcp"]);

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Force numeric netstat output before parsing connections

readWindowsEstablishedConnections runs netstat -ano -p tcp without -n, so Windows may emit host/service names instead of numeric endpoints; Microsoft’s netstat docs note name resolution is used unless -n is specified. The new connection filter path (parseNetstatConnections -> isGatewayConnectionAddress) expects endpoint hosts to match the numeric local-address set from os.networkInterfaces(), so entries like DESKTOP-ABC:18789 are dropped and deep gateway status/doctor can miss the stale local client processes this change is meant to surface.

Useful? React with 👍 / 👎.

@steipete
steipete force-pushed the fix/gateway-protocol-mismatch-diagnostics branch from ada8eb7 to 239fd06 Compare May 17, 2026 05:26

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 239fd063cd

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

function parseLsofConnectionFieldOutput(output: string, port: number): PortConnection[] {
const connections: PortConnection[] = [];
const localAddresses = resolveLocalNetworkAddresses();
for (const entry of parseLsofFieldOutput(output)) {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Parse each lsof file-set before filtering clients

inspectPortConnections now uses parseLsofFieldOutput, but that parser only keeps the first n address seen for each p process record, so a PID with multiple established sockets is represented by a single address. In deep status/doctor, this can hide real local client sockets when the retained address is the server-side one, causing stale rollback clients to be omitted even though they are connected.

Useful? React with 👍 / 👎.

port: number,
): Promise<{ connections: PortConnection[]; detail?: string; errors: string[] }> {
const errors: string[] = [];
const res = await runCommandSafe(["netstat", "-ano", "-p", "tcp"]);

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Add -n when reading Windows netstat connections

readWindowsEstablishedConnections invokes netstat -ano -p tcp without -n; Microsoft netstat docs state names are shown unless -n is specified. When netstat resolves loopback endpoints to host/service names, parseNetstatConnections no longer matches the numeric local-address set from os.networkInterfaces(), so deep status/doctor can miss the stale local client processes this diagnostic is meant to surface.

Useful? React with 👍 / 👎.

@steipete steipete added the proof: override Maintainer override for the external PR real behavior proof gate. label May 17, 2026
@steipete
steipete merged commit 38b3e73 into main May 17, 2026
121 of 123 checks passed
@steipete
steipete deleted the fix/gateway-protocol-mismatch-diagnostics branch May 17, 2026 05:33
eleboucher pushed a commit to eleboucher/homelab that referenced this pull request May 18, 2026
…026.5.18) (#557)

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.12` → `2026.5.18` |

---

### Release Notes

<details>
<summary>openclaw/openclaw (ghcr.io/openclaw/openclaw)</summary>

### [`v2026.5.18`](https://github.com/openclaw/openclaw/releases/tag/v2026.5.18): openclaw 2026.5.18

[Compare Source](https://github.com/openclaw/openclaw/compare/v2026.5.12...v2026.5.18)

##### 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. ([#&#8203;62431](https://github.com/openclaw/openclaw/issues/62431)) Thanks [@&#8203;urtabajev](https://github.com/urtabajev).
- Gateway/ACPX: attribute startup probe, config, runtime, and resource-count costs in restart traces without changing readiness behavior. ([#&#8203;83300](https://github.com/openclaw/openclaw/issues/83300)) Thanks [@&#8203;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. ([#&#8203;83301](https://github.com/openclaw/openclaw/issues/83301)) Thanks [@&#8203;samzong](https://github.com/samzong).
- Plugins/admin-http-rpc: allow trusted admin HTTP RPC clients to start and wait for web QR login flows. ([#&#8203;83259](https://github.com/openclaw/openclaw/issues/83259)) Thanks [@&#8203;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.
- 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.
- 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.
- 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.
- 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.
- Proxy: support HTTPS managed forward-proxy endpoints and scoped `proxy.tls.caFile` CA trust for proxy endpoint TLS. ([#&#8203;79171](https://github.com/openclaw/openclaw/issues/79171)) Thanks [@&#8203;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 [#&#8203;80338](https://github.com/openclaw/openclaw/issues/80338); refs [#&#8203;80337](https://github.com/openclaw/openclaw/issues/80337). Thanks [@&#8203;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 [#&#8203;80337](https://github.com/openclaw/openclaw/issues/80337). Thanks [@&#8203;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. ([#&#8203;80323](https://github.com/openclaw/openclaw/issues/80323)) Thanks [@&#8203;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. ([#&#8203;80323](https://github.com/openclaw/openclaw/issues/80323)) Thanks [@&#8203;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 [#&#8203;80173](https://github.com/openclaw/openclaw/issues/80173). Thanks [@&#8203;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 [@&#8203;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 [#&#8203;80175](https://github.com/openclaw/openclaw/issues/80175). Thanks [@&#8203;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 [#&#8203;80339](https://github.com/openclaw/openclaw/issues/80339); refs [#&#8203;80319](https://github.com/openclaw/openclaw/issues/80319). Thanks [@&#8203;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. ([#&#8203;83150](https://github.com/openclaw/openclaw/issues/83150)) Thanks [@&#8203;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 [@&#8203;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. ([#&#8203;83299](https://github.com/openclaw/openclaw/issues/83299)) Thanks [@&#8203;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. ([#&#8203;83130](https://github.com/openclaw/openclaw/issues/83130)) Thanks [@&#8203;sliekens](https://github.com/sliekens).

##### Fixes

- Discord/OpenAI: keep realtime Discord voice sessions hearing follow-up turns with OpenAI realtime and prebuffer assistant playback to avoid choppy starts. ([#&#8203;80505](https://github.com/openclaw/openclaw/issues/80505)) Thanks [@&#8203;Solvely-Colin](https://github.com/Solvely-Colin).
- 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 [#&#8203;83401](https://github.com/openclaw/openclaw/issues/83401). Thanks [@&#8203;scotthuang](https://github.com/scotthuang).
- Telegram: deliver generated media completions back into forum topics by preserving topic IDs across requester-agent handoff. ([#&#8203;83556](https://github.com/openclaw/openclaw/issues/83556)) Thanks [@&#8203;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. ([#&#8203;83520](https://github.com/openclaw/openclaw/issues/83520)) Thanks [@&#8203;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 [#&#8203;83272](https://github.com/openclaw/openclaw/issues/83272).
- Agents/video: hide `video_generate` reference-audio parameters unless a registered video provider supports audio inputs.
- Plugins/xAI: echo PKCE challenge fields during OAuth authorization-code token exchange for xAI token-endpoint compatibility. ([#&#8203;83499](https://github.com/openclaw/openclaw/issues/83499)) Thanks [@&#8203;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 [#&#8203;83466](https://github.com/openclaw/openclaw/issues/83466). Thanks [@&#8203;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 [#&#8203;83109](https://github.com/openclaw/openclaw/issues/83109). Thanks [@&#8203;daswass](https://github.com/daswass).
- Release stability: recover stale session diagnostics and Codex OAuth fallback state so stuck runs and reused refresh tokens clear without blocking follow-up work. ([#&#8203;83503](https://github.com/openclaw/openclaw/issues/83503)) Thanks [@&#8203;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 [#&#8203;81598](https://github.com/openclaw/openclaw/issues/81598). Thanks [@&#8203;CG-Intelligence-Agent-Jack](https://github.com/CG-Intelligence-Agent-Jack) and [@&#8203;CoronovirusG10](https://github.com/CoronovirusG10).
- Codex app-server: preserve network access for sandboxed Codex code-mode turns when the OpenClaw sandbox allows outbound egress. Fixes [#&#8203;83347](https://github.com/openclaw/openclaw/issues/83347). Thanks [@&#8203;YusukeIt0](https://github.com/YusukeIt0).
- 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. ([#&#8203;83501](https://github.com/openclaw/openclaw/issues/83501)) Thanks [@&#8203;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 [#&#8203;83388](https://github.com/openclaw/openclaw/issues/83388). Thanks [@&#8203;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 [#&#8203;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. ([#&#8203;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. ([#&#8203;83468](https://github.com/openclaw/openclaw/issues/83468))
- Discord: deliver final replies in progress-mode preview streams instead of deduplicating the final visible message. ([#&#8203;83443](https://github.com/openclaw/openclaw/issues/83443)) Thanks [@&#8203;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 [#&#8203;83407](https://github.com/openclaw/openclaw/issues/83407). Thanks [@&#8203;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 [@&#8203;IWhatsskill](https://github.com/IWhatsskill), [@&#8203;Patrick-Erichsen](https://github.com/Patrick-Erichsen), and [@&#8203;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 [#&#8203;83220](https://github.com/openclaw/openclaw/issues/83220). Thanks [@&#8203;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 [#&#8203;83349](https://github.com/openclaw/openclaw/issues/83349). Thanks [@&#8203;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: 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 [#&#8203;83216](https://github.com/openclaw/openclaw/issues/83216). Thanks [@&#8203;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 [#&#8203;83228](https://github.com/openclaw/openclaw/issues/83228). Thanks [@&#8203;dfguerrerom](https://github.com/dfguerrerom).
- 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 [#&#8203;83261](https://github.com/openclaw/openclaw/issues/83261). Thanks [@&#8203;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 [#&#8203;83302](https://github.com/openclaw/openclaw/issues/83302). Thanks [@&#8203;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 [#&#8203;48892](https://github.com/openclaw/openclaw/issues/48892). ([#&#8203;48908](https://github.com/openclaw/openclaw/issues/48908)) Thanks [@&#8203;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 [#&#8203;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 [#&#8203;83291](https://github.com/openclaw/openclaw/issues/83291). Thanks [@&#8203;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 [#&#8203;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. ([#&#8203;83322](https://github.com/openclaw/openclaw/issues/83322)) Thanks [@&#8203;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. ([#&#8203;83200](https://github.com/openclaw/openclaw/issues/83200)) Thanks [@&#8203;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. ([#&#8203;82374](https://github.com/openclaw/openclaw/issues/82374)) Thanks [@&#8203;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. ([#&#8203;83127](https://github.com/openclaw/openclaw/issues/83127)) Thanks [@&#8203;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. ([#&#8203;83329](https://github.com/openclaw/openclaw/issues/83329)) Thanks [@&#8203;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. ([#&#8203;82836](https://github.com/openclaw/openclaw/issues/82836)) Thanks [@&#8203;yshimadahrs-ship-it](https://github.com/yshimadahrs-ship-it) and [@&#8203;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. ([#&#8203;83190](https://github.com/openclaw/openclaw/issues/83190)) Thanks [@&#8203;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. ([#&#8203;83096](https://github.com/openclaw/openclaw/issues/83096)) Thanks [@&#8203;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 [#&#8203;48534](https://github.com/openclaw/openclaw/issues/48534). ([#&#8203;83136](https://github.com/openclaw/openclaw/issues/83136)) Thanks [@&#8203;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 [#&#8203;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. ([#&#8203;83146](https://github.com/openclaw/openclaw/issues/83146)) Thanks [@&#8203;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 [#&#8203;67637](https://github.com/openclaw/openclaw/issues/67637). Thanks [@&#8203;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 [#&#8203;80411](https://github.com/openclaw/openclaw/issues/80411). Thanks [@&#8203;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 [#&#8203;81093](https://github.com/openclaw/openclaw/issues/81093). Thanks [@&#8203;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 [#&#8203;80412](https://github.com/openclaw/openclaw/issues/80412). Thanks [@&#8203;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 [#&#8203;74262](https://github.com/openclaw/openclaw/issues/74262). Thanks [@&#8203;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 [#&#8203;64879](https://github.com/openclaw/openclaw/issues/64879). Thanks [@&#8203;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. ([#&#8203;66355](https://github.com/openclaw/openclaw/issues/66355)) Thanks [@&#8203;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 [#&#8203;83132](https://github.com/openclaw/openclaw/issues/83132). ([#&#8203;83168](https://github.com/openclaw/openclaw/issues/83168)) Thanks [@&#8203;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 [#&#8203;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. ([#&#8203;83312](https://github.com/openclaw/openclaw/issues/83312)) Thanks [@&#8203;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 [#&#8203;83380](https://github.com/openclaw/openclaw/issues/83380). ([#&#8203;83519](https://github.com/openclaw/openclaw/issues/83519)) Thanks [@&#8203;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 [#&#8203;83272](https://github.com/openclaw/openclaw/issues/83272). ([#&#8203;83505](https://github.com/openclaw/openclaw/issues/83505)) Thanks [@&#8203;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 [#&#8203;83286](https://github.com/openclaw/openclaw/issues/83286). Thanks [@&#8203;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 [#&#8203;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 [#&#8203;44296](https://github.com/openclaw/openclaw/issues/44296). ([#&#8203;83059](https://github.com/openclaw/openclaw/issues/83059)) Thanks [@&#8203;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 [#&#8203;83264](https://github.com/openclaw/openclaw/issues/83264). Thanks [@&#8203;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 [#&#8203;72879](https://github.com/openclaw/openclaw/issues/72879). ([#&#8203;80358](https://github.com/openclaw/openclaw/issues/80358)) Thanks [@&#8203;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 [#&#8203;83159](https://github.com/openclaw/openclaw/issues/83159). ([#&#8203;83362](https://github.com/openclaw/openclaw/issues/83362)) Thanks [@&#8203;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 [#&#8203;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 [#&#8203;75624](https://github.com/openclaw/openclaw/issues/75624). ([#&#8203;83056](https://github.com/openclaw/openclaw/issues/83056)) Thanks [@&#8203;xuruiray](https://github.com/xuruiray) and [@&#8203;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 [#&#8203;80201](https://github.com/openclaw/openclaw/issues/80201). ([#&#8203;80242](https://github.com/openclaw/openclaw/issues/80242)) Thanks [@&#8203;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 [#&#8203;83054](https://github.com/openclaw/openclaw/issues/83054). Thanks [@&#8203;zqchris](https://github.com/zqchris).
- 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 [#&#8203;83008](https://github.com/openclaw/openclaw/issues/83008). ([#&#8203;83410](https://github.com/openclaw/openclaw/issues/83410)) Thanks [@&#8203;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 [#&#8203;83023](https://github.com/openclaw/openclaw/issues/83023). ([#&#8203;83516](https://github.com/openclaw/openclaw/issues/83516)) Thanks [@&#8203;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. ([#&#8203;82981](https://github.com/openclaw/openclaw/issues/82981)) Thanks [@&#8203;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. ([#&#8203;69121](https://github.com/openclaw/openclaw/issues/69121)) Thanks [@&#8203;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 [#&#8203;82982](https://github.com/openclaw/openclaw/issues/82982). Thanks [@&#8203;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 [#&#8203;65506](https://github.com/openclaw/openclaw/issues/65506). Thanks [@&#8203;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. ([#&#8203;67142](https://github.com/openclaw/openclaw/issues/67142)) Thanks [@&#8203;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. ([#&#8203;64098](https://github.com/openclaw/openclaw/issues/64098)) Thanks [@&#8203;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 [@&#8203;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 [#&#8203;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 [@&#8203;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 [#&#8203;82954](https://github.com/openclaw/openclaw/issues/82954). ([#&#8203;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. ([#&#8203;82861](https://github.com/openclaw/openclaw/issues/82861)) Thanks [@&#8203;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. ([#&#8203;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 [#&#8203;81139](https://github.com/openclaw/openclaw/issues/81139). ([#&#8203;81163](https://github.com/openclaw/openclaw/issues/81163)) Thanks [@&#8203;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 [#&#8203;81326](https://github.com/openclaw/openclaw/issues/81326). ([#&#8203;81674](https://github.com/openclaw/openclaw/issues/81674)) Thanks [@&#8203;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. ([#&#8203;82864](https://github.com/openclaw/openclaw/issues/82864)) Thanks [@&#8203;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 [#&#8203;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 [#&#8203;82941](https://github.com/openclaw/openclaw/issues/82941). Thanks [@&#8203;galiniliev](https://github.com/galiniliev).
- Agents/OpenAI: preserve deterministic tool payload ordering for prompt-cache reuse across OpenAI Responses and chat completions calls. ([#&#8203;82940](https://github.com/openclaw/openclaw/issues/82940)) Thanks [@&#8203;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 [#&#8203;79522](https://github.com/openclaw/openclaw/issues/79522). Thanks [@&#8203;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 [#&#8203;55216](https://github.com/openclaw/openclaw/issues/55216). ([#&#8203;82987](https://github.com/openclaw/openclaw/issues/82987)) Thanks [@&#8203;eldar702](https://github.com/eldar702).
- 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. ([#&#8203;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 [#&#8203;76552](https://github.com/openclaw/openclaw/issues/76552). ([#&#8203;78004](https://github.com/openclaw/openclaw/issues/78004)) Thanks [@&#8203;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 [#&#8203;83231](https://github.com/openclaw/openclaw/issues/83231). ([#&#8203;83421](https://github.com/openclaw/openclaw/issues/83421)) Thanks [@&#8203;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. ([#&#8203;83186](https://github.com/openclaw/openclaw/issues/83186)) Thanks [@&#8203;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 [#&#8203;82911](https://github.com/openclaw/openclaw/issues/82911). ([#&#8203;83004](https://github.com/openclaw/openclaw/issues/83004)) Thanks [@&#8203;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 [#&#8203;36614](https://github.com/openclaw/openclaw/issues/36614). Thanks [@&#8203;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 [#&#8203;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 [#&#8203;82871](https://github.com/openclaw/openclaw/issues/82871). Thanks [@&#8203;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. ([#&#8203;82945](https://github.com/openclaw/openclaw/issues/82945)) Thanks [@&#8203;galiniliev](https://github.com/galiniliev) and [@&#8203;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. ([#&#8203;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 [#&#8203;82782](https://github.com/openclaw/openclaw/issues/82782). ([#&#8203;82783](https://github.com/openclaw/openclaw/issues/82783)) Thanks [@&#8203;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 [#&#8203;82912](https://github.com/openclaw/openclaw/issues/82912). Thanks [@&#8203;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 [#&#8203;82837](https://github.com/openclaw/openclaw/issues/82837). ([#&#8203;82854](https://github.com/openclaw/openclaw/issues/82854)) Thanks [@&#8203;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 [#&#8203;82787](https://github.com/openclaw/openclaw/issues/82787). Thanks [@&#8203;ramitrkar-hash](https://github.com/ramitrkar-hash).
- Control UI: advertise shared Gateway protocol constants in browser connect frames, fixing protocol mismatch handshakes after protocol constant drift. Fixes [#&#8203;82882](https://github.com/openclaw/openclaw/issues/82882). Thanks [@&#8203;galiniliev](https://github.com/galiniliev).
- Gateway: add rollback protocol-mismatch diagnostics, including client protocol ranges in Gateway logs and deep status/doctor hints for stale client processes. Fixes [#&#8203;82841](https://github.com/openclaw/openclaw/issues/82841). ([#&#8203;82908](https://github.com/openclaw/openclaw/issues/82908))
- Agents/subagents: keep successful keep-mode completion payloads pending after final-delivery retry exhaustion, so requester recovery no longer loses final subagent results. Fixes [#&#8203;82583](https://github.com/openclaw/openclaw/issues/82583). ([#&#8203;82999](https://github.com/openclaw/openclaw/issues/82999)) Thanks [@&#8203;joshavant](https://github.com/joshavant).
- Gateway/auth: allow same-host trusted-proxy callers to use the documented local direct `gateway.auth.password` fallback after revisiting the [#&#8203;78684](https://github.com/openclaw/openclaw/issues/78684) fail-closed policy, while keeping token fallback rejected and forwarded-header requests on the trusted-proxy path. Fixes [#&#8203;82607](https://github.com/openclaw/openclaw/issues/82607). ([#&#8203;82953](https://github.com/openclaw/openclaw/issues/82953)) Thanks [@&#8203;joshavant](https://github.com/joshavant).
- Agents/subagents: wait for queued completion handoffs to reach the parent transcript before marking them announced, preventing busy parent runs from cleaning up before observing child results. Fixes [#&#8203;82913](https://github.com/openclaw/openclaw/issues/82913). ([#&#8203;83039](https://github.com/openclaw/openclaw/issues/83039)) Thanks [@&#8203;joshavant](https://github.com/joshavant).
- Agents/subagents: route group/channel subagent completions through message-tool-only handoffs when required and keep active-requester wake failures from dropping completion delivery. Fixes [#&#8203;82803](https://github.com/openclaw/openclaw/issues/82803). Thanks [@&#8203;galiniliev](https://github.com/galiniliev), [@&#8203;yozakura-ava](https://github.com/yozakura-ava), and [@&#8203;moeedahmed](https://github.com/moeedahmed).
- Memory-core: scan persisted memory source sessions on startup, comparing on-disk transcripts against the index and marking only missing/newer/resized files dirty for incremental sync. Fixes [#&#8203;82341](https://github.com/openclaw/openclaw/issues/82341). ([#&#8203;82341](https://github.com/openclaw/openclaw/issues/82341)) Thanks [@&#8203;giodl73-repo](https://github.com/giodl73-repo).
- Telegram: keep the top-level default account in the account list when named accounts or bindings are added alongside top-level credentials, preserving default polling while still letting named-only configs resolve to a single account. Fixes [#&#8203;82794](https://github.com/openclaw/openclaw/issues/82794). ([#&#8203;82794](https://github.com/openclaw/openclaw/issues/82794)) Thanks [@&#8203;giodl73-repo](https://github.com/giodl73-repo).
- CLI/models: reuse command-scoped plugin metadata across model listing, provider catalog, auth, and synthetic-auth checks, restoring fast `openclaw models` runs for plugin-heavy installs. Fixes [#&#8203;82881](https://github.com/openclaw/openclaw/issues/82881). ([#&#8203;83033](https://github.com/openclaw/openclaw/issues/83033)) Thanks [@&#8203;joshavant](https://github.com/joshavant).
- CLI/channels: show configured official external channels such as Discord in `openclaw channels list` when their plugin package is missing, including the install and doctor repair command instead of reporting no configured channels. Fixes [#&#8203;82813](https://github.com/openclaw/openclaw/issues/82813).
- Signal: preserve mixed-case group IDs through routing and session persistence so group auto-replies keep delivering after updates. Fixes [#&#8203;82827](https://github.com/openclaw/openclaw/issues/82827).
- Agents/tools: keep the `message` tool available in embedded runs when it is explicitly allowed through `tools.alsoAllow` or runtime tool allowlists, so channel plugins with custom reply delivery can still use configured message sends. Fixes [#&#8203;82833](https://github.com/openclaw/openclaw/issues/82833). Thanks [@&#8203;cn1313113](https://github.com/cn1313113).
- WhatsApp: honor forced document delivery for outbound image, GIF, and video media so `forceDocument`/`asDocument` sends preserve original media bytes instead of using compressed media payloads. ([#&#8203;79272](https://github.com/openclaw/openclaw/issues/79272)) Thanks [@&#8203;itsuzef](https://github.com/itsuzef).
- WhatsApp: name outbound document attachments from their MIME type when no filename is provided, so PDF and CSV sends arrive as `file.pdf` and `file.csv` instead of an extensionless `file`. Thanks [@&#8203;mcaxtr](https://github.com/mcaxtr).
- Process/diagnostics: report active lane blockers in lane wait warnings so `queueAhead=0` no longer hides commands waiting behind active work. Fixes [#&#8203;82791](https://github.com/openclaw/openclaw/issues/82791). ([#&#8203;82792](https://github.com/openclaw/openclaw/issues/82792)) Thanks [@&#8203;galiniliev](https://github.com/galiniliev).
- Process/diagnostics: stop counting the active processing turn as queued backlog in liveness warnings so transient max-only event-loop spikes do not surface as gateway warnings.
- Agents/replies: classify provider conversation-state rejections and return a clear message-channel error instead of auto-resetting or falling back to a generic runner failure. ([#&#8203;82616](https://github.com/openclaw/openclaw/issues/82616)) Thanks [@&#8203;dutifulbob](https://github.com/dutifulbob).
- Browser plugin: trust managed Chrome CDP diagnostics when launch HTTP probes race cold-start readiness, avoiding false startup failures. Fixes [#&#8203;82904](https://github.com/openclaw/openclaw/issues/82904). ([#&#8203;82986](https://github.com/openclaw/openclaw/issues/82986)) Thanks [@&#8203;kmanan](https://github.com/kmanan) and [@&#8203;hclsys](https://github.com/hclsys).
- Android: prompt before replacing a changed Gateway TLS thumbprint, showing the old and new SHA-256 fingerprints so users can accept expected certificate rotations instead of hard failing on pin mismatch. ([#&#8203;83077](https://github.com/openclaw/openclaw/issues/83077)) Thanks [@&#8203;sliekens](https://github.com/sliekens).
- CLI/status: render extra gateway-like service diagnostics as warning/info output instead of error output. Fixes [#&#8203;46930](https://github.com/openclaw/openclaw/issues/46930). ([#&#8203;82922](https://github.com/openclaw/openclaw/issues/82922)) thanks [@&#8203;giodl73-repo](https://github.com/giodl73-repo).
- Agents/failover: classify Moonshot/Kimi exhausted-balance HTTP 429 payloads as billing instead of generic rate limits, preserving billing guidance and fallback behavior. Fixes [#&#8203;43447](https://github.com/openclaw/openclaw/issues/43447). ([#&#8203;83079](https://github.com/openclaw/openclaw/issues/83079)) Thanks [@&#8203;leno23](https://github.com/leno23).
- Plugin SDK: bundle `openclaw/plugin-sdk/zod` into the published package artifact and verify the packed zod subpath stays self-contained, so pnpm global installs can register plugins without a package-local `zod` symlink. Fixes [#&#8203;78398](https://github.com/openclaw/openclaw/issues/78398). ([#&#8203;78515](https://github.com/openclaw/openclaw/issues/78515)) Thanks [@&#8203;ggzeng](https://github.com/ggzeng).
- Providers/Google: drop compaction-truncated Gemini thought signatures before replay so malformed Base64 no longer aborts the next assistant turn. ([#&#8203;82995](https://github.com/openclaw/openclaw/issues/82995)) Thanks [@&#8203;wAngByg](https://github.com/wAngByg).

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about these updates again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xMDEuMSIsInVwZGF0ZWRJblZlciI6IjQzLjEwMS4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJyZW5vdmF0ZS9jb250YWluZXIiLCJ0eXBlL3BhdGNoIl19-->

Reviewed-on: https://git.erwanleboucher.dev/eleboucher/homelab/pulls/557
galiniliev pushed a commit to galiniliev/openclaw that referenced this pull request May 20, 2026
* fix: improve gateway protocol mismatch diagnostics

* test: cover daemon deep connection diagnostics

* fix: normalize mapped loopback gateway clients
SebTardif pushed a commit to SebTardif/openclaw that referenced this pull request May 24, 2026
* fix: improve gateway protocol mismatch diagnostics

* test: cover daemon deep connection diagnostics

* fix: normalize mapped loopback gateway clients
SebTardif pushed a commit to SebTardif/openclaw that referenced this pull request May 24, 2026
* fix: improve gateway protocol mismatch diagnostics

* test: cover daemon deep connection diagnostics

* fix: normalize mapped loopback gateway clients
SebTardif pushed a commit to SebTardif/openclaw that referenced this pull request May 24, 2026
* fix: improve gateway protocol mismatch diagnostics

* test: cover daemon deep connection diagnostics

* fix: normalize mapped loopback gateway clients
github-actions Bot pushed a commit to Desicool/openclaw that referenced this pull request May 24, 2026
* fix: improve gateway protocol mismatch diagnostics

* test: cover daemon deep connection diagnostics

* fix: normalize mapped loopback gateway clients
galiniliev pushed a commit to galiniliev/openclaw that referenced this pull request May 25, 2026
* fix: improve gateway protocol mismatch diagnostics

* test: cover daemon deep connection diagnostics

* fix: normalize mapped loopback gateway clients
SebTardif pushed a commit to SebTardif/openclaw that referenced this pull request May 26, 2026
* fix: improve gateway protocol mismatch diagnostics

* test: cover daemon deep connection diagnostics

* fix: normalize mapped loopback gateway clients
SebTardif pushed a commit to SebTardif/openclaw that referenced this pull request May 26, 2026
* fix: improve gateway protocol mismatch diagnostics

* test: cover daemon deep connection diagnostics

* fix: normalize mapped loopback gateway clients
SebTardif pushed a commit to SebTardif/openclaw that referenced this pull request May 26, 2026
* fix: improve gateway protocol mismatch diagnostics

* test: cover daemon deep connection diagnostics

* fix: normalize mapped loopback gateway clients
jameslcowan pushed a commit to jameslcowan/openclaw that referenced this pull request Jun 2, 2026
* fix: improve gateway protocol mismatch diagnostics

* test: cover daemon deep connection diagnostics

* fix: normalize mapped loopback gateway clients
SYU8384 pushed a commit to SYU8384/openclaw that referenced this pull request Jun 3, 2026
* fix: improve gateway protocol mismatch diagnostics

* test: cover daemon deep connection diagnostics

* fix: normalize mapped loopback gateway clients
sablehead pushed a commit to sablehead/openclaw that referenced this pull request Jun 10, 2026
* fix: improve gateway protocol mismatch diagnostics

* test: cover daemon deep connection diagnostics

* fix: normalize mapped loopback gateway clients
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

cli CLI command changes commands Command implementations docs Improvements or additions to documentation gateway Gateway runtime maintainer Maintainer-authored PR proof: override Maintainer override for the external PR real behavior proof gate. size: L

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Protocol mismatch spam after rollback: local client still identifies as cli v2026.5.12 against 2026.5.7 gateway

1 participant