终态已到达后补写不能覆盖它
缺陷形态
Agent 已完成 → 数据库已存完整回复 → Langfuse trace 完整 → HTTP 200
→ 但读 SSE 尾部/EOF 时发生 transport error
→ 旧代码进入 catch,用"不完整的流式内容 + failed 状态"覆盖已收到的完成态
→ Web 显示半截内容或像卡住
关键认知:HTTP 200 只代表响应头成功,不保证 SSE body 能读完。
第二个变体:terminal 到了但 store.status 仍在等 trailing result / EOF 才转 idle → 正文已经出现,停止按钮却一直保留。修法同样是把结算点前移到 turn.completed,并对已收到终态后的错误做 lifecycle reconciliation(保留 completed,不让 catch 覆盖)。
相关
- 中间进展与最终回答要按phase区分 —— 同一链路:终态只认
turn/completed,idle不能当结束 - 过期响应不能覆盖当前编辑内容 —— 同一取向:迟到的写不能覆盖更新的权威状态
- 停止与发送原地互换要加点击守卫 —— 状态收敛不及时暴露在 UI 上的另一形态
- 权威终态到达后迟到的写不能覆盖它
- 收尾要落到确定状态