# Finish 先于 agent-run gate 的 UI 竞态(已修复,禁止 merge main / 上 103) > **状态:已修复 + 单测(2026-07-06)** ## 现象 用户发消息后: - assistant 回复已显示 - 底部三个点(`streaming`)一直转,无法输入下一条 ## 根因 H5 双 SSE 通道时序竞态: 1. `subscribeSessionEvents` 收到 goosed `Finish` → `chatState = idle` 2. `waitForAgentRun` 稍后才 `succeeded` 返回 3. 旧逻辑 unconditionally `setChatState('streaming')` → `Finish` 已错过,永久卡住 ## 修复 | 文件 | 说明 | |------|------| | `chat-agent-run-gate.mjs` | 纯函数 `resolvePostAgentRunChatState` / `shouldPromoteSessionIdToStreaming` | | `chat-agent-run-gate.test.mjs` | 回归单测 | | `src/hooks/useTKMindChat.ts` | run gate 完成后若已是 `idle` 则保持 idle | ## 验证 ```bash node --test chat-agent-run-gate.test.mjs npm run verify:h5-session-patches ``` 手工:本地 `pnpm dev` 发 `hi`,确认回复完成后 loading 点消失。