修复完整历史与运行态内存放大并重建发布包
This commit is contained in:
10
.planning/2026-10-14-history-memory-fix/findings.md
Normal file
10
.planning/2026-10-14-history-memory-fix/findings.md
Normal file
@@ -0,0 +1,10 @@
|
||||
# 调查与实现依据
|
||||
|
||||
- 现有完整历史库:lib/session-history-store.js。
|
||||
- server.js 的 loadSession、saveSession、resolveSessionHistory、refreshSessionSnapshotCache 接入归档。
|
||||
- 原有契约要求原子提交、可信加载、旧修订合并、删除及清空不复活、完整运行态优先恢复。
|
||||
- 不能把分块存储只做在文件层:分页入口和快照刷新也须避免整份加载。
|
||||
- 采用不可变内容哈希块与原子 manifest 提交;可信基线只保留块引用,旧修订按单消息逐字段合并。
|
||||
- 服务端常用加载保留有界尾部,分页直接读区间,任务跟踪只读元数据;明确导入/全量维护才申请完整加载。
|
||||
- 集成回归创建 `_history/_turns` 后发现保留目录触发无效会话ID错误;列表枚举须显式排除该目录和同名旧文件,34项持久化回归已覆盖。
|
||||
- 最终合成夹具:70.5MiB完整旧归档在256MiB堆上限下完成流式迁移、增量保存和67页读取,RSS峰值145.9MiB;1128条正文和工具数据逐条摘要相符。完整集成回归通过;运行服务尚未重启,生产内存效果须在修复生效后另行观察。
|
||||
15
.planning/2026-10-14-history-memory-fix/progress.md
Normal file
15
.planning/2026-10-14-history-memory-fix/progress.md
Normal file
@@ -0,0 +1,15 @@
|
||||
# 执行记录
|
||||
|
||||
2026-10-14:初始化项目上下文,确认完整历史功能与归档库。用户要求继续推进修复。
|
||||
定位已完成,进入分块存储和服务端有界入口实现;测试代理负责隔离内存回归。未重启服务。
|
||||
|
||||
分块清单、增量保存、64KiB流式迁移、默认尾部和首屏/重连/分页入口已实现。
|
||||
补齐元数据保存、单消息修改窗口、跨窗口查重和附件逐块遍历,避免尾部加载遗漏早期消息。
|
||||
首轮70.5MiB合成归档在256MiB堆上限下通过,RSS峰值144.6MiB;全部1128条消息逐条摘要相符。
|
||||
当前补齐默认窗口、并发和失败重试回归,并验证运行完成及自动重试路径。测试保持隔离目录,未重启生产服务。
|
||||
|
||||
集成回归定位并修复 `_history/_turns` 保留目录被会话列表枚举的问题,补充真实运行态目录及同名旧文件回归。完整历史持久化单测34项全部通过,完整集成回归继续执行。
|
||||
|
||||
最终验证:`TMPDIR=/dev/shm timeout 300s node scripts/regression.js` 退出0,输出 Regression checks passed;包含完整历史存储、内存、首屏/分页、运行完成、重启恢复及自动重试回归。最终单独内存回归退出0:70.5MiB旧归档、256MiB堆上限、RSS峰值145.9MiB,1128条消息经67页逐条校验完整,6次增量保存复用37个原始块,单次旧文件读取最多64KiB。该数字为合成隔离夹具,不能当作生产进程测量。语法检查和 git diff --check 通过。
|
||||
|
||||
交付完成:所有计划步骤完成,临时TODO CSV已清理;源码与后端契约已更新,保留既有未提交文案改动及10-11任务。未修改生产历史,未打包、提交或重启服务,运行进程仍须后续安全重启后生效。
|
||||
25
.planning/2026-10-14-history-memory-fix/task_plan.md
Normal file
25
.planning/2026-10-14-history-memory-fix/task_plan.md
Normal file
@@ -0,0 +1,25 @@
|
||||
# 完整历史内存修复
|
||||
|
||||
目标:保留完整会话历史,消除完整归档加载、保存和基线的整份复制,增加分块存储、按页读取和安全迁移。
|
||||
|
||||
## 阶段
|
||||
1. 确认归档和分页入口,确定内存有界的实现:complete
|
||||
2. 实现分块归档、按页读取和旧数据迁移:complete
|
||||
3. 验证历史完整性、并发保护和内存峰值:complete
|
||||
4. 完成代码复核并交付验证结果:complete
|
||||
|
||||
## 边界
|
||||
- 保留正文、工具参数和结果,不用截断历史换取内存。
|
||||
- 不覆盖现有 server.js 未提交改动。
|
||||
- 测试使用隔离目录,不修改生产归档。
|
||||
- 重启前必须确认没有其他运行中的对话。
|
||||
|
||||
## 已知情况
|
||||
- 当前完整历史格式见 .trellis/spec/backend/session-history.md。
|
||||
- 用户要求继续推进,不再停留在审计流程。
|
||||
- 初始 git 状态:server.js 已修改;10-11-remove-compact-followup 为既有任务。
|
||||
|
||||
## 问题记录
|
||||
- 首次定位 todo-list-csv 技能不存在,采用项目规定的 CSV 与 update_plan 同步。
|
||||
- Codebase Memory 部分命中位置错位,须用实际文件交叉校验。
|
||||
- 本轮 Codebase Memory 连接已关闭,改用 FastCtx 精确读文件继续实现。
|
||||
Reference in New Issue
Block a user