教师带学四项修复验收(2026-10-13)
修改与边界
- “标记已学完”原来只写 CourseBinding.syjd,进度条却读取 PracticeRecord,因此数字不会变化。新增 app_lesson_unit_complete,由服务端核验预约老师、学员开课与单元归属,事务内补齐全部词条的已学状态,再保存标记。已有学习次数和生词标志保留;失败整笔回滚。页面等待服务端成功后显示 100%,失败不改变进度。
- 第二轮原来调用 reverse();改为 Fisher–Yates 随机洗牌,三个以上词避免与当前顺序相同或刚好完全倒序,两个词只能交换位置。
- 听音四选一每题优先两个本轮之外的中文释义,再选一个本轮干扰项。词库随机查询在服务器排除本轮所有词条,前端按词条和释义去重、随机摆放正确答案;复用随机池并拒绝迟到响应。加载期间不能抢答;失败可使用已有词汇组成完整四选一,仍不足四项时提供重新加载。
- 成功音改为轻柔双音,错误音改为短低音,均为自制 0.26 秒本地 WAV、播放音量 35%。提示音独立于单词发音,避免截断。资源生成脚本为 scripts/generate-learning-sounds.py。
- 整单元手动标记只影响词汇进度,不创建课堂学习批次、抗遗忘或工资,不扣课时。正式课堂成果仍按逐轮确认机制保存。
验证
- 移动端 218 项测试通过;后端 181 项测试通过。
- SQL 测试使用真实 PostgreSQL 兼容执行器,覆盖 205 词跨批事务、重复确认、不覆盖已有次数和生词状态、越权拒绝、后续更新失败时全部回滚。
- 学生/老师端和管理后台生产构建成功;云函数 11 个定义校验通过;120 个前端动作审计无缺失。
- 本地 Chrome 页面:保存失败保持 52%,成功变成 100%,刷新仍为 100%;375/812 像素无横向溢出。四个听音选项包含两个外部释义;两种 WAV 均可读取和解码。截图和 browser-result.json 位于本目录。
- 已发布配套 app gateway,版本 2026-10-13-learning-experience-v9。线上源码与本地构建定义核对一致,其他云函数未改;本次复用现有表和事务函数,无数据库结构迁移。
- 隔离账号真实链路 74 项通过:刷新后真实单元计数为 100%、重复点击幂等、不改变余额/流水、不虚构课堂成果;随机接口确实排除本轮词条。回归 9+5+3=17 词、多连接保存/结课、10 次复习、报告修改、评价、扣费及权限。测试账号和业务数据已清理。此轮没有调用付费 AI 生成。
- 云端备份、结构探测及原始验收日志保存在本机权限受限目录
/Users/mac/.local/state/xiaoshu/cloud-releases/2026-10-13-learning-experience-v9/,不进入仓库。
前端仍由用户上线。浏览器验收为本机 Chrome,尚未验证真机微信 WebView;音效听感可按实际使用反馈微调。