openclaw/docs
Peter Steinberger 84dc4c73ce
fix(chat): preserve opaque native conversation identities (#162818)
## What Problem This Solves

Native chat lowercased complete session keys when admitting Gateway events. Distinct Matrix rooms/threads, Signal groups, or catalog conversations whose opaque IDs differed only by case could therefore appear in the selected transcript.

## User Impact

Native chat keeps those conversations separate while continuing to accept structural routing aliases. Stored keys, Gateway wire formats, main/global routing, and composer identity are unchanged.

## Why This Change Was Made

The sidebar already implemented the comparison contract used by the Control UI. Move that implementation to the existing shared session-key owner and use it for sidebar, native event filtering, and the public default-main matcher. Catalog bodies remain fully opaque; the canonical Control UI contract normalizes only their agent prefix. Matrix/Signal routing words retain their existing normalization.

A five-case regression passes actual `session.message` frames through the payload codec and registered dispatcher. Each case rejects a different opaque ID and accepts its structural alias. The existing public-matcher table also covers its separate Talk-facing API contract.

## Evidence

- Remote `check-changed` passed on Blacksmith Testbox.
- Both import-cycle checks passed with **0 cycles**.
- Focused source review and isolated independent P2 review completed. The one review concern about lowercasing the catalog discriminator was rejected against the existing Control UI source contract, which deliberately preserves the complete catalog body.
- Swift formatting and `git diff --check` passed.
- Exact-head hosted OpenClawKit CI passed 2,000 tests in 168 suites (35.259s), plus 21 NativeState tests. The new five-case frame/dispatch regression passed in 5.206s including concurrent-suite scheduling. Isolated-file wall time was not measured. The regression has not been executed against the original implementation: Blacksmith supports Linux only, and the AWS existing-host Mac route returned no available Dedicated Host. The original whole-key lowercase path and its event-dispatch effect were traced directly; this is source evidence, not an observed baseline test failure.
- Tests add no sleeps, polling, process boots, or production seams. The full macOS app and iOS smoke jobs remain separate hosted evidence.

Found during the sibling duplication investigation. The production change removes one net line by sharing the existing comparison owner; tests add 52 lines and documentation adds three.

## Fixes found along the way

The macOS cloud-worker fixture signaled readiness through file existence while `printf` was still writing its argument capture. Hosted run 36887822355 observed output ending at `--ephemeral`, before the final display-name arguments. Publish the complete capture with a same-directory temporary file and atomic rename; every original assertion and timeout stays intact. This fixture-only repair has a clean independent P2 review. Linux Testbox proof passed 25 runs per enrollment mode (50 total), two gated atomic-publication controls, and two original-publication adverse controls. The proof verified the exact committed fixture bytes and preserved every argument, including a Unicode path. Both cycle checks again reported zero. This proves shell fixture publication; updated-head Mac ProcessIdentity/AppKit and full native CI remain separate evidence.

That run also encountered `AXError.attributeUnsupported (-25205)` while the test helper requested the application's accessibility windows, before GatewayInstallerView's text/action assertions. The same helper failure is documented in #158049 without a proven fix. The affected owners are unchanged by this PR, recent inspected main runs passed, and no matching current-main failure has been established. The assertion is retained; this earlier failure is not claimed fixed or bypassed.
2026-10-01 18:55:28 +00:00
..
.generated fix: prevent delegated work from stopping silently (#162567) 2026-10-01 18:39:01 +00:00
.i18n feat: back up to external disks and Cloudflare R2 with storage locations (#161913) 2026-10-01 02:05:44 -07:00
announcements
assets docs: remove stale showcase section (#158575) 2026-09-25 21:11:35 -06:00
automation fix(cron): delegated blocked runs report ok and silent blocked jobs get auto-disabled (#162686) 2026-10-02 01:00:18 +08:00
channels fix(telegram): restore progress when reply hooks suppress previews (#161546) 2026-10-01 06:41:47 -07:00
ci build(apps): generate native protocol models at build time (#162251) 2026-10-01 11:43:36 -07:00
cli fix(update): keep progress writes from invalidating snapshots (#162604) 2026-10-01 18:15:42 +00:00
concepts fix(chat): preserve opaque native conversation identities (#162818) 2026-10-01 18:55:28 +00:00
diagnostics perf(cli): keep client diagnostics off shared state 2026-09-24 12:56:28 +00:00
gateway fix: prevent delegated work from stopping silently (#162567) 2026-10-01 18:39:01 +00:00
help fix(test): first test or hook times out while compiled worker subprocesses prepare (#162792) 2026-10-01 11:42:59 -07:00
images
install fix(update): package activation recovery rejects Bun-hosted installs (#162586) 2026-10-01 09:54:24 -07:00
maturity refactor: remove Tasks and TaskFlow runtime (#159179) 2026-09-27 10:40:29 -07:00
nodes fix(talk): preserve inherited realtime settings on upgrade (#162644) 2026-10-01 16:58:58 +00:00
platforms feat(macos): add Gateway hosting controls and Node migration (#161779) 2026-10-01 09:02:40 -07:00
plugins feat: optionally omit tools on conversational turns (#153340) 2026-10-01 09:33:15 -07:00
providers fix(openai): image generation fails with ChatGPT OAuth when the plan does not offer gpt-6-astra (#158895) 2026-10-01 19:46:57 +08:00
reference fix(doctor): batch the NOCOW open-file check and close agent databases before the rewrite (#162919) 2026-10-01 11:36:55 -07:00
releases docs: give Agents API its own onboarding guide (#162255) 2026-10-01 02:54:25 +00:00
security fix(gateway): preserve proxy policy in local TLS health probes (#161946) 2026-10-01 00:37:14 +08:00
snippets/plugin-publish chore(deps): refresh dependencies with seven-day cutoff (#158298) 2026-09-26 20:42:53 -07:00
specs
start fix(ui): stop serving a failed Control UI build on the next Gateway start (#161438) 2026-09-30 03:28:17 +00:00
tools fix: prevent delegated work from stopping silently (#162567) 2026-10-01 18:39:01 +00:00
web fix(ui): retire submitted attachments from newer drafts (#162898) 2026-10-01 11:47:16 -07:00
agent-runtime-architecture.md perf(agents): keep file edits from blocking other chats (#158443) 2026-09-26 03:55:55 -05:00
AGENTS.md fix: exclude repository instructions from public docs sync (#158253) 2026-09-25 13:15:24 -06:00
auth-credential-semantics.md fix(setup): restore credentials before recovery reads auth 2026-09-29 13:42:14 -07:00
ci.md ci: published-driver update cell for updater and identity paths (#162629) 2026-10-01 05:38:00 -07:00
date-time.md
docs.json feat: back up to external disks and Cloudflare R2 with storage locations (#161913) 2026-10-01 02:05:44 -07:00
docs_map.md
index.md docs: remove stale showcase section (#158575) 2026-09-25 21:11:35 -06:00
logging.md fix(agents): stop repeating oversized tool calls (#161082) 2026-09-29 20:41:57 -07:00
network.md
openclaw-agent-runtime.md
prose.md
vps.md
whatsapp-openclaw.jpg