5.6 KiB
5.6 KiB
前端历史分页实现结果
记录时间:2026-10-10 16:09(Asia/Shanghai)。
变更
public/app.js:正文与用户提问目录按正数游标请求已有历史,available=false只用于更早记录待核实的说明。- 正文显示可读取的已保存消息数量,保留 loading、重试及来源提示。游标归零后移除加载按钮;来源状态为 false 时仍显示「更早的记录尚待核实,已保存的消息可正常查看。」
- 用户目录首屏没有提问、但仍有历史游标时保持入口可用;读取失败可重试,索引自动逐页完成。
- 来源尚未返回时,初始和重置状态不展示待核实提示;服务端明确返回的
historyAvailable=false仍保留。普通完整历史没有限制提示。 scripts/history-frontend-unit.js:新增行为回归,直接执行生产请求、响应处理、正文合并及目录索引函数;只模拟浏览器节点与网络发送。
失败与通过证据
先修改专项测试,尚未修改 app.js 时执行:
timeout 60s node scripts/history-frontend-unit.js
退出码为 1,失败断言为「原始来源不可用时仍须请求已保存的45条正文」,实际请求数 0、期望 1。这是旧分页门禁导致的行为失败。
完成最小修复后,以下命令全部退出 0:
timeout 60s node scripts/history-frontend-unit.js
node --check public/app.js
node --check scripts/history-frontend-unit.js
git diff --check -- public/app.js scripts/history-frontend-unit.js
已覆盖:
- 57 条已保存消息、首屏 12 条、游标 45、来源不可用:正文按
45→33→21→9→0分页读全,顺序正确,无重复。 - 首屏全部为助手消息:目录入口仍可点击,并自动索引全部旧用户提问,顺序正确,无重复。
- 正文和目录分别验证未认证、连接未打开、连接不存在及当前会话不匹配时不发送请求。
- 正文和目录分别过滤错误会话、过期响应;重复请求去重,重复响应不污染结果。
- 两类请求失败后释放在途状态、保留游标、显示重试并发送新请求,loading 正常。
- 游标为零时两类请求均停止;更早记录待核实的提示仍保留且无正文加载按钮,完整历史不显示限制。
- 原有稳定消息 ID、缓存合并、重连和流式完成去重回归继续通过。
余下边界
- 前端只读取服务端已提供的历史;完整历史持久化及原始日志合并仍由后端实现负责。
available=false也可能只是合并边界尚未确认,不能断言原始文件不完整或消息未保存。旧版如果已经裁掉消息且没有可确证来源,前端无法补出;本次保留核实提示,不将旧存量历史宣称为完全恢复。- 尚未在用户所指的其他客户端实际验证。本次只执行隔离的专项测试和语法检查,没有操作真实会话、远端或服务。
隔离浏览器归档验收
已将归档重启流程合入 scripts/history-browser-check.js。测试只创建临时目录、临时密码和隔离
server.js 子进程;运行中把夹具 rollout 重命名为 .isolated-hidden,停止并重新启动隔离
服务,重新登录并打开夹具会话,未读取或改写真实会话、生产服务或真实 rollout。
执行命令:
node --check scripts/history-browser-check.js
git diff --check -- scripts/history-browser-check.js
timeout --signal=TERM --kill-after=5s 60s node scripts/history-browser-check.js
结果全部通过,证据目录为:
/tmp/cc-web-history-browser-60Uwf0
浏览器阶段包含 loaded、archivedAfterRestart、archivedPaged、running、
refreshed、reconnected、completed、completedRefreshed。归档阶段的证据为:
- 重启后
session_info.historySource全部为archive,historyTotal=148,historyAvailable=true。 - 归档分页共 6 个
session_history_chunk,每块来源均为archive、总数均为 148, 协议下标连续覆盖0..147,协议稳定 ID 数为 148。 - 重启后首屏为 12 条,下标为
136..147;点击分页直到最早的「早期问题 0」出现后, 浏览器实际读回 148 条,稳定 ID 唯一数为 148,顺序与夹具完整 ID 序列一致。 - 读完完整归档后提示为空,没有「无法恢复」或「待核实」。
/tmp/cc-web-history-browser-60Uwf0/archived-after-restart.png记录重启后首屏;/tmp/cc-web-history-browser-60Uwf0/archived-paged.png记录分页读到最早消息。- 重启后仍继续完成原有运行中发送、刷新、WebSocket 重连、完成事件和完成后刷新检查。
本轮只修改 scripts/history-browser-check.js 和本报告;隔离测试进程、Firefox、
relay 及隐藏的 rollout 均在 finally 中清理或恢复。
工具调用简报
codebase-memory-mcp:list_projects/index_status(project="home-cc-web")确认索引 ready;用search_code/search_graph定位,再用get_code_snippet读取正文分页、目录分页及渲染函数。- 随后查询历史控件 CSS 时索引工具返回
Transport closed;降级为 FastCtx 精确本地读取和搜索,没有重启服务。 FastCtx:读取任务文档、规范、技能目录及专项测试;执行范围限定的测试、语法和差异检查。所有单次测试命令最大 60 秒,无重试或退避。- 浏览器验收:使用本地
Firefox/geckodriver、临时隔离服务和夹具;测试完成后读取/tmp/cc-web-history-browser-60Uwf0/evidence.json及截图核对协议总数、稳定 ID 和阶段结果。