# 词汇测试历次记录与对比 ## 问题与修改 原页面只读取最近一份 Model 61 摘要;完成后使用 `content_update` 覆盖旧摘要。`DesignAnswer` 的逐次答卷仍存在,因此不需要伪造或重建历史答题。 - 新测试始终新增 `AssessmentProfile` / `CommonModel` 摘要;旧客户端更新 Model 61 时,先验证旧记录归属,再转为新增,保留原记录。 - 新增 `app_exam_history`:只按当前登录身份及帐套读取,忽略外部传入的用户编号。合并两组词汇答卷与旧摘要,按答卷编号去重、时间倒序分页(每页 10 条)。原答卷可恢复显示被覆盖的历史分数;只有摘要的旧记录也保留。返回汇总指标,不返回原答题内容。 - 词汇测试页增加“历次测试记录”,展示日期、题组和得分,默认选择最近两次,可选择其他两次比较认识、不认识、选错及总题数。 - 新一轮测试清理上一轮状态;保存失败保留答案并提供重试。答卷已成功时仅重试摘要,摘要沿用本轮请求编号,避免重复保存。 - 历史读取失败单独显示重试,不显示为“没有测试记录”;异常旧结果标记待核对。 ## 验证 - `node --test scripts/tests/exam-history.test.mjs`:2 项通过。实际 PostgreSQL 兼容测试覆盖历史恢复、摘要去重、23 条分页、跨账号/帐套隔离、异常数据;兼容入口覆盖归属校验、追加保存及请求编号保留。 - 仅本任务暂存改动的隔离副本:`test:mobile:ci -- --include=projects/xiaoshu-mobile/src/app/core/home-learning-modules.integration.spec.ts`,41/41 通过。混合工作区曾出现教师点读流程超时,隔离复查通过;未将同时进行的客服修改带入提交。 - `npm run build:mobile`:通过(既有预算和 CommonJS 警告)。 - `npm run cloud:validate`:11 个云函数定义通过。 - `node scripts/check-exam-history-browser.mjs`:连续两次测试均新增,原 12 次记录不变;摘要失败重试不重复答卷;重新进入能看到两次结果;分页、比较选择、失败恢复及 360/390px 布局通过。 ## 线上发布及回滚 已发布 app gateway `2026-10-15-exam-history-v15`,只变更词汇历史读取和 Model 61 追加写入兼容逻辑及版本声明。无需数据库迁移;其他网关保持原样。发布前备份实际线上代码并确认旧系统同步空闲,发布后校验代码和运行版本。 使用现有学生会话只读回读,返回 6 次有效测试;与发布前对同一数据执行的新查询一致。传入其他用户编号仍仅返回本人结果。未代用户创建测试、修改历史数据或提交答题。 私有发布证据位于 `~/.local/state/xiaoshu/cloud-releases/2026-10-15-exam-history/`。回滚用 `functions-at-publish.json` 恢复 app gateway,并保留已经新增的摘要和答卷;回滚旧客户端覆盖逻辑后应暂停继续测试,避免再次覆盖摘要。已存在的答卷历史仍应保留。 前端仅完成本地构建和浏览器验证,尚未部署线上前端;实际微信 WebView 未验收。