Parcourir la source

docs(ops): record cancellation recovery release and live verification

彭峰 il y a 3 heures
Parent
commit
48df3dcc2f
1 fichiers modifiés avec 29 ajouts et 0 suppressions
  1. 29 0
      docs/operations/admin-cancel-recovery-2026-11-13.md

+ 29 - 0
docs/operations/admin-cancel-recovery-2026-11-13.md

@@ -0,0 +1,29 @@
+# 批量取消响应丢失与重复刷新修复(2026-11-13)
+
+## 用户反馈与实查
+
+用户在跨日期预约管理中遇到部分取消成功、部分 HTTP 0 / 连接结果待核对;单条取消后同时出现“排课已取消”和通用云函数错误。
+
+21:33 北京时间通过正式预约查询接口重新读取全部 103 条匹配记录。截图最后 5 条报错中,4 条在 21:01 已实际取消;10 月 24 日 16:00 的一条仍未取消,版本仍为 10 月 19 日。截图旧错误用 UTC 输出预约时间,导致显示 08:00;表格按北京时间显示 16:00。本次未代替用户重发这些取消请求,也没有新增业务写入或修改课时。
+
+## 小树自身原因与修改
+
+- 原批量取消使用 4 个并发任务,每条成功写入都会发布数据变化事件,父课表触发后台加载;后台加载不设置普通 loading,后续事件可继续叠加刷新。取消端使用课时互斥保护,多写并发会增加等待和无谓请求。
+- 现改为串行提交,每批合并一次数据变化通知;批量窗口打开期间抑制自动课表刷新,由批次结束显式刷新一次。全部结果不确定时同样刷新,窗口关闭后对仍待核对的批次再读一次。
+- 取消响应失败后只读查询对应业务 ID,只有精确 targetId 且 cancelled=true 才计为成功并移除选择。不自动重发写入;未核实项保留错误和选择,避免假报成功。
+- 预约查询加入已有的有限只读重试白名单;只对 HTTP 0/502/503/504 重试一次,写入、未知操作和读取超时不自动重放。
+- 单条取消成功但课表刷新失败,明确显示“排课已取消,但课表刷新失败……无需再次取消”。错误中的预约时间统一为北京时间。
+
+## 验证与发布
+
+- 管理端全量 393 项测试通过;生产构建通过(保留既有体积/CommonJS 警告),独立代码复查未发现剩余阻塞问题。
+- 本地生产包在浏览器中验证:正常、响应丢失、全部核对失败三种场景。每批 3 次模拟写入,最大并发 1、自动重放 0、整批课表刷新 1 次;响应丢失但状态已取消的项正确计为成功,未核实项保留待处理。所有取消请求被浏览器拦截,没有真实业务写入。
+- 代码提交:`0c206db7d528749cb5b27a0f4fe81a54d3305f07`。
+- 发布:`admin-cancel-recovery-0c206db7d528-20261113T133356363Z`,96 个文件上传并回读校验;CDN 任务 `8184993194` 完成。
+- 线上 96 个公网文件哈希与深路由核验一致;实际浏览器课表读取、跨日期预约查询成功,姓名搜索返回 103 条,业务写入为 0。验收脚本初版曾误拦 OPTIONS、提前检查异步搜索结果;已纠正并重跑通过,这两次脚本失败不计作生产故障证据。
+- 正式发布包再做响应丢失场景:3 次模拟取消、最大并发 1、自动重放 0;2 条核实已取消、1 条保留待处理,批次课表刷新 1 次,关闭窗口再核对 1 次。取消请求全部被拦截,真实业务写入为 0。
+- 发布基线与私有验收证据:`/Users/mac/.local/state/xiaoshu/qa/2026-11-13-cancel-recovery/`。可按该目录 `admin/baseline` 恢复静态入口;不删除共享静态资源。
+
+## 尚未消除的基础设施故障
+
+本次验收前读取正式 `/parse/users/me` 仍捕获到 HTML HTTP 503,证明公共入口间歇失败未消失。上述修复解决小树侧请求放大和取消结果误判,不代表共享入口已经恢复稳定。按用户“先只修小树”要求,没有修改公共服务、负载均衡或共享进程。