Resolve the PR #162 review blocker: the branch no longer merged into
develop after #174 (onServerChatId early adoption) and #183
(server-sourced Copy/export) landed, which touched the same files.
Conflict resolution (ai-chat-window.tsx, chat-thread.tsx,
use-chat-session.ts):
- Keep develop's onServerChatId wiring (#174) intact in all three files.
- Keep develop's removal of the old liveStateRef / liveThreadRef /
MutableRefObject live-export mechanism (deleted by #174/#183); it was
only inherited by this branch and is not part of #161 — not resurrected.
- Graft #162's actual fix on top: startFreshThread() (unconditional
remount even when activeChatId stays null) and the abandoned-thread
guard (threadKeyRef + finishingThreadKey on onTurnFinished, forwarded
as ChatThread's threadKey through onFinish/onError).
Also apply the review's simplification: drop the now-redundant
cancelPendingAdoption() call inside startNewChat (startFreshThread()
already nulls pendingNewChatRef); the export stays, still used by
selectChat.
ai-chat client suite green (176 passed), no conflict markers.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>