# 历史已结课课程补反馈入口修复(2026-10-15) ## 问题和结果 销课列表把没有 `LessonCompletionReport` 的历史课程标为反馈待补,但 `lessonOrderCapabilities` 只有在报告已存在时才返回 `editFeedback`。详情页也要求存在报告对象才能打开编辑器,数据库更新函数则要求恰好一份报告,导致历史课程没有补交路径。 - 已结课(30/40)、未取消的本课老师获得补交/修改反馈权限。 - 学习报告“完课反馈”右侧显示“补充反馈”;已提交时显示“修改报告”。未提交状态明确标为老师反馈待补。 - 历史无报告时,编辑器使用已验证课程详情的预约版本;已有报告沿用报告版本。 - 首次提交在反馈事务中核对身份、老师归属、课程状态、预约版本及唯一上课记录归属,创建一份报告并保存反馈;不重跑结课、扣课时、课酬或复习任务生成。 - 旧记录中无法确认的报告快照字段留空,不用当前时间伪造历史上下课时间;学习统计仍读原学习记录和复习任务。 - 保留请求幂等、并发序列化、旧版本拒绝和事务回滚。学生仍通过课程详情提交独立评价。 ## 验证 - `npm run test:lesson-workflow`:16/16 通过。新增历史无报告首次补交、同请求并发重试、不同请求旧版本拒绝、越权拒绝、失败回滚;核对课时凭据、学习记录、复习任务、评价、工资快照未改变。 - `npm run build:mobile`:通过;现有样式预算/CommonJS 警告。 - `npm run cloud:validate`:11 个函数定义通过。 - `node scripts/check-lesson-feedback-browser.mjs`:通过。390px 浏览器验证报告入口、自动打开表单、失败保留输入、重试保存、已提交报告展示、pending 报告入口及学生评价。仅调用反馈接口,不调用结课接口。 - 线上实际教师会话只读回读 `app_lesson_report` 和 `e_order_detail`:预约 858318(截图对应熊小俊,2026-10-04 14:00)两处均返回 `editFeedback`;未代老师填写或提交业务反馈。 ## 发布和回滚 已发布 `2026-10-15-feedback-entry-v13`:只更新数据库 `xs_lesson_feedback_update` 定义和 app gateway 中权限判断及版本标记,两个 ops gateway 代码保持原样。发布前确认没有运行中的旧系统同步任务,备份实际线上函数及 SQL 定义;发布后核对保存代码、数据库定义及实际网关版本响应。 私有备份和读回结果位于 `~/.local/state/xiaoshu/cloud-releases/2026-10-15-feedback-entry/`,不提交账号会话和生产数据。回滚时恢复备份的单一 SQL 函数定义及 app gateway 代码,保留新产生的报告、原教学/计薪凭据及幂等命令,不删除业务记录。 前端完成本地构建和浏览器验收,未部署线上前端;实际微信 WebView 未验收。上述浏览器保存使用隔离接口数据,不等同于真实用户写入验收。