mirror of
https://github.com/outbackdingo/optimclaw.git
synced 2026-08-26 23:50:17 +00:00
* fix: resolve_thread adopts existing session threads by UUID When chat_new_thread_handler creates a thread directly in the session, it doesn't register a thread_map entry. On the first message, resolve_thread would create a duplicate thread with a different UUID, causing: - Thread appears empty when switching back (loadHistory queries the original UUID but turns live on the duplicate) - Orphaned tabs in the thread list (both the original and duplicate appear) Fix: before creating a new thread, check if the external_thread_id is itself a UUID that exists as a thread in the session. If so, adopt it and register the mapping. A mapped_elsewhere guard preserves channel scope isolation. Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]> * fix: double-checked locking in resolve_thread UUID adoption Re-check mapped_elsewhere after acquiring the write lock to prevent a TOCTOU race where another task could map the same UUID between the read lock check and write lock insertion, breaking channel isolation. Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]> --------- Co-authored-by: Claude Opus 4.6 (1M context) <[email protected]>