lesson-start-disabled-student-2026-11-12.md 3.9 KB

钱老师选择学习单元后无法开始课程 · 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/。回滚代码前先核对有无后续发布;仅恢复本次同名函数或手机入口,不覆盖其他聊天的变更。账户恢复单独留有前像,不随代码回滚自动再次停用。