修复完整会话历史与长气泡交互并更新 CentOS 7 发布包
提交当前工作区全部源码、回归脚本、任务记录及重新构建的 Bun baseline 发布包。发布单文件 MCP 初始化及前端资源一致性验证通过。
This commit is contained in:
@@ -0,0 +1,45 @@
|
||||
# 完成/恢复生产路径专项回归结果
|
||||
|
||||
日期:2026-10-10。负责范围:`handleProcessComplete` / `recoverProcesses` / Codex App 运行态 / 保存失败分支的生产函数行为回归,不改生产实现。
|
||||
|
||||
## 新增脚本
|
||||
|
||||
`scripts/history-runtime-completion-unit.js`:从 `server.js` 按函数边界抽取真实完成、恢复与失败分支函数,配真实 `lib/session-history-store.js`、真实 `lib/agent-runtime.js` 事件解析和临时目录执行;不复制实现、不读写真实会话、不启动外部进程。已注册进 `scripts/regression.js` 的 `assertHistoryRecallContract` 专项列表。
|
||||
|
||||
原有 13 项覆盖:
|
||||
|
||||
- CLI 纯文本完成回合保持字符串内容形状,重开可读(防止 `[object Object]` 形状回归)。
|
||||
- CLI 混合内容块(含图片块)与 130 条纯工具调用完整归档。
|
||||
- CLI 完成保存失败时保留运行目录与 `output.jsonl`,`done` 标记 `historySaved=false`;存储恢复后由 `recoverProcesses` 恰好补齐一次。
|
||||
- CLI 清理失败时重复恢复按 `runKey` 去重,不重复入库。
|
||||
- Codex App 完整 turn 运行态先于预览保存(60 万字符正文与工具调用不裁剪),恢复恰好入库一次。
|
||||
- Codex App 会话暂不可读时保留 `_history/_turns`、run 目录与预览状态,恢复后恰好入库一次。
|
||||
- Codex App 损坏运行态文件保留,不误入库。
|
||||
- Codex App 完成路径 `saveSession` 失败时先保留完整运行态,恢复后恰好一条正文且不补中断提示。
|
||||
- 初次用户消息保存失败时不创建运行目录、不改写磁盘会话。
|
||||
- 跨会话回传保存失败保留 `ready` 重试机会,重试恰好一个气泡;崩溃重试按处理标记去重。
|
||||
- 子会话冲刷保存失败保留队列与有界重试标记,存储恢复后提交。
|
||||
- 任务看板元数据适配器按 ID 重读完整档案,只提交元数据,不接受截断对象覆盖 650 条历史。
|
||||
- Codex App steer 保存失败不调用 `turn/steer`。
|
||||
|
||||
新增两个完成入口读取失败回归(共 15 项):
|
||||
|
||||
- CLI `handleProcessComplete` 的 `loadSession` 返回 `null` 时,真实完整归档保持原文,真实 run 目录与 `output.jsonl` 保留;应发送 `session_load_failed`、`done.historySaved=false`。恢复读取后,真实 `recoverProcesses` 恰好入库一次,成功提交后才清理。
|
||||
- Codex App `handleCodexAppTurnComplete` 的 `loadSession` 返回 `null` 时,真实完整归档保持原文,`_history/_turns`、运行态预览与输出文件保留;最新完整 turn 保持正文、工具和 `completed` 状态。恢复读取后,真实 `recoverCodexAppTurnState` 恰好入库一次,不误补中断提示。
|
||||
|
||||
两个用例通过损坏真实档案文件制造读取不可用(`loadSession` 收敛为 `null`):完成阶段断言归档未被重写、运行态保留;恢复阶段写回原档案后由同一存储实例补交;没有用 `saveSession=false` 替代读取故障,也不依赖跨 harness 桩函数。
|
||||
|
||||
## 验证结果
|
||||
|
||||
- 原有 13 项在此前实现上通过;新增读取失败用例的修复前运行为 **13 项通过、2 项失败**,分别真实复现 CLI 运行目录被删除和 Codex App 完整 turn 被删除。日志 `/tmp/ccweb-completion-load-null-before.txt`。
|
||||
- 旧实现对照:`timeout 60s node scripts/history-runtime-completion-unit.js --baseline-head`,新增两个用例分别在 CLI 运行目录保留断言和 Codex App 运行目录保留断言上失败;它们进入真实完成函数后才失败,不依赖缺少新函数或新 writer 返回值复现。对照日志 `/tmp/ccweb-completion-load-null-head.txt`;当前共 15 项失败,预期失败清单包含新增两项。
|
||||
- 修复后 15 项最终结果:主线程改为“真实损坏档案 → 完成保护 → 修复档案 → 同实例恢复补交”后复跑 `timeout 60s node scripts/history-runtime-completion-unit.js`,**15/15 通过**(2026-10-10,日志 `/tmp/completion-unit-fixed.txt`)。
|
||||
- 最终全量回归:`npm run regression`,**Regression checks passed**(19:52:25→19:53:59),日志 `/tmp/cc-web-regression-final-verify.log`;运行前后 `server.js`、`public/app.js`、`scripts/regression.js`、`scripts/mock-codex-app-server.js`、`lib/session-history-store.js`、`lib/agent-runtime.js`、`lib/codex-app-runtime.js` 的 sha256 一致。
|
||||
- 此前全量回归:`npm run regression`,**Regression checks passed**;当次运行前后 `server.js` md5 均为 `94fe21059863b9b1c7088c14d4743ed2`,日志 `/tmp/cc-web-regression-completion-2.log`。共享源码后来继续变化,此结果不能代替最终树验收。
|
||||
- `git diff --check`、`node --check` 通过。
|
||||
|
||||
说明:首次全量回归(日志 `/tmp/cc-web-regression-completion.log`)在 `scripts/regression.js:9622` 出现 steer 超时,当时存在并发验收和共享源码修改;后续串行重跑曾通过。现有证据只支持“steer 时序失败”,没有充分证据把诱因归结为并发负载,也不能以一次复跑通过排除其他时序缺陷。
|
||||
|
||||
## 边界
|
||||
|
||||
以上均为临时目录与夹具验证;未读取或修改用户在另一客户端看到的真实会话,未重启生产服务,未部署。不能据此声称那 45 条旧消息已经找回。
|
||||
Reference in New Issue
Block a user