Parcourir la source

docs: record lesson-start incident recovery and production checks

彭峰 il y a 18 heures
Parent
commit
eb52225064
1 fichiers modifiés avec 30 ajouts et 0 suppressions
  1. 30 0
      docs/qa/lesson-start-disabled-student-2026-11-12.md

+ 30 - 0
docs/qa/lesson-start-disabled-student-2026-11-12.md

@@ -0,0 +1,30 @@
+# 钱老师选择学习单元后无法开始课程 · 2026-11-12
+
+## 原因与恢复
+
+截图对应钱老师(69)、学员 1944 的预约 `839154386041247`,排课词库为 405,开课绑定 `ea97d7c40a8302cb1cd6`。正式页面的三至六年级进度与截图一致。
+
+使用线上实际 `updateOrderStatus`、`startLessonWithContent` 和数据库开课函数,在外层回滚事务中复现了“学员不存在或已停用”。学员记录存在,但 `isDisabled=true`;钱老师账号正常。原详情权限没有检查学员状态,仍显示“开始课程”;点击后错误仅显示在顶部,停留在单元列表底部看不到。
+
+按用户要求修复该账户的开课问题,通过现有运营接口 `ops/users/change-status`、明确原因和最新版本恢复该学员。恢复前后 `legacyUserData` 完整一致,未修改课时。现有日志未找到可靠的停用操作来源,不能认定具体操作者或代码路径,也不以用户记录的最后更新时间推断停用时间。
+
+## 代码与发布
+
+- 详情提前核对同帐套学员的存在、停用和删除状态;不再向不合格学员的待开始/进行中课次提供开课操作,也不为其准备旧预约。
+- 点击失败及详情拦截原因直接显示在固定底部操作区,所选学习单元保留,恢复后可重试。
+- 修复提交 `19a614d65e6b0504a0470d4c29117bdf9d2a5897`。只替换手机网关的 `lessonOrderCapabilities`,其余 295 个函数逐字保留;发布前核对线上哈希和同步空闲,发布后回读一致。
+- 手机端版本 `mobile-lesson-start-19a614d65e6b-20261112T025130Z`,从仅含本次六个文件改动的独立源码快照构建。CDN 刷新完成、失败数 0;全部 105 个公网文件的 SHA256、源站清单及 3 条深层路由通过。
+
+## 验证范围
+
+独立代码复核未发现需要修改的问题,复核者另行运行新增的两项 PGlite 测试通过。
+
+- 独立快照手机端 354 项测试通过,服务端 564 项通过,11 个云函数定义校验通过,生产构建通过(保留既有构建警告)。新增测试先复现禁用学员仍获得开始权限、底部看不到错误,再验证修复。
+- 全部当天未取消、已分配有效老师的 14 节待开始/进行中预约,覆盖 9 位老师,使用实际线上开课逻辑验证开始/继续均通过。每节测试均整体回滚,包括旧预约自动准备;另有 1 节未分配老师的预约被正确拦截。
+- 扫描今天及未来未取消的待开始/进行中预约,没有其他关联停用或删除学员的记录。
+- 正式 390×844 浏览器使用钱老师有效会话、真实预约和“四年级体验”,确认底部失败提示可见、选中状态保留;重试使用实际生产开课逻辑并整体回滚,随后成功进入词库精筛并加载真实单词。浏览器错误数 0。用于检查提示位置的首次 409 是测试注入,真实停用拒绝另有修复前服务端复现证据。
+- 最终核对学员已启用、课时数据不变;原预约仍为 `dszt=0`、`kssj=null`,版本仍为 `2026-11-11 17:51:21.551913+08`。没有替用户真正开始或结束课程,没有产生试验扣课。
+
+初次在共享工作区执行全量手机测试时,另一项未提交的学习页面任务有 5 个失败,均为 `home learning modules selects only the requested 20, 50 or 100 words and can start learning for ...`,后缀分别为 `coach-wordbook`、`course-2`、`course-0`、`course-1`、`student-wordbook`。未吸收、修改或发布该任务文件;独立快照完整 354 项通过。
+
+私有前像、回滚验证、源码快照、测试日志、发布回执及浏览器截图位于 `~/.local/state/xiaoshu/qa/2026-11-12-start-lesson/`。回滚代码前先核对有无后续发布;仅恢复本次同名函数或手机入口,不覆盖其他聊天的变更。账户恢复单独留有前像,不随代码回滚自动再次停用。