2.2 KiB
2.2 KiB
会话结束后插入转新对话计划
目标
当 Codex App 的上一轮已经结束、但页面或服务端仍把本轮视为可插入时,表单答案和普通跟进消息都应自动按新一轮对话处理;失败卡片点击“重试”也应真正发送,不能继续被“仅允许插入原 turn”拦截。
阶段
- [completed] 复现并定位会话结束后的发送与失败重试链路
- [completed] 补充结束会话后重试自动新开对话的回归用例
- [completed] 修复前端失败项重试与后端旧轮结束竞态
- [completed] 运行定向测试、语法检查和完整回归
- [completed] 复核差异并清理临时跟踪文件
验收标准
- 会话结束后点击失败卡片的“重试”会启动普通新 turn,答案只进入一次历史。
- 发送时本地运行态落后于 app-server 时,不再把用户答案永久留在“插入失败”。
- 仍在运行的 turn 继续走
turn/steer,expectedTurnId 不匹配等真实错误不被错误降级。 - 普通文本和带附件的表单答案均有回归覆盖,且定向测试、语法检查和完整回归通过。
约束
- 保留工作区中其他会话历史改动,不覆盖现有任务目录或 CSV。
- 代码定位优先使用
codebase-memory-mcp;FastCtx 只用于读取、编辑和验证本地文件。 - 不重启服务,除非重启前确认除当前会话外没有其他
running会话。 - 新增注释和文档使用简体中文。
错误记录
| 错误 | 尝试 | 处理 |
|---|---|---|
| 表单回归读取到旧轮 done,导致提前检查新输出 | 1 | 等待携带新答案助手消息的 done 后再验收历史 |
收尾记录
- 完整回归
npm run regressionexit 0;定向回归与三个单测脚本、语法检查全部通过。 - 独立后端审查新增
scripts/codexapp-steer-recovery-unit.js(5 项通过),覆盖 ready 等待期间旧轮结束、completion 先到、保存失败与错误分类。 - 部署:重启前检查到除当前对话外仍有 running 会话(
826deaa0、2f1134fe),按约束暂缓重启;待其结束后执行pm2 restart ccweb --update-env生效。 - 临时跟踪文件:本任务 CSV 已按 todo-list-csv 流程清理。