Bläddra i källkod

docs: record duplicate word progress save fix release

彭峰 9 timmar sedan
förälder
incheckning
74080e2cf0
1 ändrade filer med 29 tillägg och 0 borttagningar
  1. 29 0
      docs/qa/selection-save-duplicate-practice-release-2026-11-03.md

+ 29 - 0
docs/qa/selection-save-duplicate-practice-release-2026-11-03.md

@@ -0,0 +1,29 @@
+# 重复历史单词记录保存修复上线(2026-11-03)
+
+用户明确授权“直接上线更新”。已发布源提交 `9953989ed6e757de23bb9379bc19697e2882a48f`。
+
+## 发布范围
+
+只更新应用网关 `xiaoshu.app.gateway` 的 `updateLearningWords`,以及数据库函数 `xs_mobile_teaching_write(text,text,text,text,jsonb)`。网关其余函数逐一比较保持不变;SQL 使用当前正式函数的定义,仅替换已审函数体并保留其他属性。没有执行整套迁移、清理重复数据或重新部署前端。
+
+- 应用网关原哈希:`a8f27027e749f44b9ba28b9e3b7a4eebbe09026f19a797536562c9b2b97d29a9`
+- 应用网关新哈希:`be6d3fa134ce400600be9ef245c53a8f5d9c151955f30c8e406ac4716b3393a8`
+- 教学写入函数原函数体哈希:`9a24362b5ee24f7aced29bcf258f3a9391f4a923b43f33f511749d92fa4d6cdd`
+- 教学写入函数新函数体哈希:`2ef95cc5c2959dc3d10d16a198ed06e551afcaa5289767b305db3c3924d051b6`
+
+备份当前正式网关及 SQL 定义,发布前确认函数未被其他任务修改。先事务更新 SQL 并回读,再选择性更新网关并回读,`migration_status` 正常。两处正式哈希均与待发布版本一致。
+
+## 验证
+
+- 发布前重新运行 48 项相关回归测试,全部通过。
+- 发布后读取正式网关源码,在受限核验入口中使用真实分配老师账号执行该源码的完整 `handler`:调用 `e_add_words` 保存学员 `1719`、单元 `158` 的 73 个词,包含引发来源键冲突的 `game / 586395`,返回 HTTP 200。
+- 同一请求标识再次执行,响应与第一次相同,整份学习记录快照未再次变化,证明重复请求不会重复增加次数。
+- 以上业务写入置于保存点内,验证后全部回滚。该学员全部 PracticeRecord 的 JSON 快照哈希与验证前一致,诊断请求没有留下回执;未替老师永久完成这批词。
+- 正式 SQL 函数仍为已发布修复版本,正式网关回读哈希一致。
+- 手机端、管理端公网版本清单与发布前相同,本次无需更新客户端或重新构建前端。
+
+首次核验脚本把成功 retcode 错当作必须为 1,而正式网关成功为 0;该次保存已经正常返回,核验断言失败后写入由保存点回滚。修正核验为接受现有协议的 0/1 成功值后,完整保存、重试和还原检查全部通过,没有修改业务协议。
+
+证据及回滚基线:`/Users/mac/.local/state/xiaoshu/cloud-releases/2026-11-03-selection-save-release/`,包含 `preflight-result.json`、`sql-before.json`、`gateway-before.json`、`sql-published.json`、`cloud-published.json`、`production-verification.json` 及前端版本基线。
+
+原页面保存失败后的待确认状态与请求标识保留,可直接点击“重试保存”继续。上述验证证明正式保存入口可处理这批重复历史记录,不等于已永久提交老师当前待保存的识词结果。