course-status-cache-2026-10-29.md 2.0 KB

结课后陪练课表仍显示未开始

原因

2026-10-29 钱老师的两节高中语法写作课(08:00,预约编号 839154386031627;09:00,预约编号 839154386031629)已完成结课。生产数据库和老师本人会话读取的 app_companion_overview 都返回 dszt=30,当天合计已结课 3 节、未结课 3 节。

移动端 HomeDailyCacheService 将课表按北京时间的日期、筛选和分页持久化。教学写入原来仅清除 API 层正在合并的请求,没有清除这层当天快照。返回课表甚至重新加载页面,都可能继续显示结课之前的 dszt=0。

修复

  • API 成功写入或收到其他标签页的变更广播时,清除所有课表快照,并持久化清理结果;首页其他每日汇总继续复用。
  • 清除课表正在等待的读取,并拒绝结课前的延迟响应重新写入缓存。
  • 当前打开的课表收到变更后重新读取,保留日期、筛选、页码;离开后取消监听。
  • 课表缓存格式升级,首次加载新版时忽略旧版课表快照,读取真实课程状态。
  • 普通切换继续复用有效缓存,不新增轮询。不修改结课记录、课时或工资数据。

验证

  • 从 Git 暂存区导出独立源码构建,排除工作区其他正在进行的功能。
  • 移动端 298 项测试通过,生产构建通过;保留原有样式体积及 CommonJS 警告。
  • node scripts/check-course-status-cache-browser.mjs 验证:旧版当天缓存升级、写作课结课后返回课表、另一标签页结课后的课表更新、重新加载后的状态持久性。
  • 线上后端只读核验两条预约均为已结课,无需修补真实业务数据。

生产发布、资源哈希回读及老师课表浏览器验收记录保存在本机受限目录 /Users/mac/.local/state/xiaoshu/cloud-releases/2026-10-29-course-status-cache/。浏览器回读仅允许课表、会话校验和版本读取;测试结课操作使用隔离接口数据。