fix: recover expired task leases and persist diagnostic logs

This commit is contained in:
薇星幻海
2026-10-18 02:30:56 +08:00
parent 1b497286dc
commit ef35b461f7
15 changed files with 1368 additions and 85 deletions
+13 -3
View File
@@ -1,6 +1,6 @@
# 谊安学助手 2.0
当前发布版本 **2.1.2**。一个可直接安装的油猴脚本,集成统一题库、六栏面板、视频与考试任务、答案全文核对、复制和题库导出。题库本地保存,内置 ZIP 解析,无 CDN 依赖。
当前发布版本 **2.1.3**。一个可直接安装的油猴脚本,集成统一题库、六栏面板、视频与考试任务、答案全文核对、复制和题库导出。题库本地保存,内置 ZIP 解析,无 CDN 依赖。
## 安装与启动
@@ -20,7 +20,7 @@
| 视频学习 | 实际倍速、播放进度、平台学习记录、课中题、局部暂停与恢复;续播、单次答题机会保护、切回恢复三个开关 |
| 考试答题 | 自动选择开关、缺题人工确认开关、答案核对、答题间隔、预计得分、考试计时和交卷状态;兼容原练习页 |
| 题库搜索 | 统一题库导入、关键词搜索、课程筛选、选中文字搜索、来源及主题关联 |
| 控制台 | 最近 500 条运行日志、级别筛选、复制、清空显示 |
| 控制台 | 最近 500 条运行日志、级别筛选、复制、清空显示;默认开启的持续诊断记录、最近 2000 条持久诊断及 JSON/TXT 导出 |
| 其他设置 | 允许复制开关、默认关闭的题库导出折叠区、异常恢复参数 |
桌面左导航右内容,窄屏顶部标签。全局状态、进度和暂停/继续常驻;切栏不启停任务、不重置计时、不触发导出。拖动标题栏移动面板,位置自动保存;搜索和设置控件不会触发拖拽。
@@ -54,6 +54,8 @@
默认连续 60 秒没有播放进度时尝试续播,15 秒后仍失败再刷新当前视频页面,最多 3 次,两次刷新至少间隔 30 秒,次数跨刷新保存。主动暂停、课中题、等待平台确认、等待交卷或等待人工不算故障。脚本发起的恢复及任务跳转保存一次性续作标记;人工刷新默认暂停。并行页面通过共享租约、心跳及全局控制协调,打开失败或未确认时显示等待,不假称并行成功。
同类任务被另一执行页面占用时,临时等待租约并自动重试;旧执行页停止心跳、租约失效后继续调度,不要求因此手动点击继续。拿到租约后更新状态提示,避免仍显示“等待同类任务租约释放”。另一页面仍在正常处理时继续保持互斥;课中题、单次机会保护等需要人工处理的等待不会被自动重试覆盖。
保存站点脚本显示:网站切到后台会主动暂停播放器,返回前台没有相应自动恢复逻辑。本版记录切页前的真实播放状态,后台暂停时显示“后台暂停,等待返回”,开启上述恢复开关后返回再尝试续播,不把后台暂停误当成长时间卡顿而刷新。不能保证后台一直播放,也不能保证浏览器关闭、设备休眠或标签冻结期间执行;恢复后按实际播放器及平台记录校准,不伪造学习时长。真实账号的解锁、倍速、后台和并行规则仍需实站验收。
## 考试预计得分与交卷
@@ -93,7 +95,15 @@ npm run merge:banks
测试依赖 Node.js 和 Playwright/Chrome;使用本机模拟页面及中和后的保存 DOM,所有业务 URL 由测试拦截,未访问业务服务器。验证范围包括统一题库迁移/来源/冲突、真实 40 题全文乱序、题间隔、80 分门槛与 4/6 分钟边界、缺题人工确认开关两种模式、设置保存及切换暂停、加载不全等通用门槛、整卷 100 分核验后的交卷流程、防重复、视频恢复、并行心跳、六栏及拖拽/窄屏、复制/导出/站点范围和完整任务流程;本次结果以实际测试记录为准。
源代码按职责拆分:`bank-store.js`、`answer-matcher.js`、`answer-runner.js`、`attempt-policy.js`、`exam-controller.js`、`quiz-adapter.js`、`learning-engine.js`、`assistant-panel.js`、`practice-exporter.js`。发布仅需构建后的单个 `.user.js`。
源代码按职责拆分:`bank-store.js`、`answer-matcher.js`、`answer-runner.js`、`attempt-policy.js`、`diagnostic-logger.js`、`exam-controller.js`、`quiz-adapter.js`、`learning-engine.js`、`assistant-panel.js`、`practice-exporter.js`。发布仅需构建后的单个 `.user.js`。
## 2.1.3 更新记录
已在本地复现并修复两项缺陷:租约临时冲突被记作永久人工等待,以及成功恢复后仍保留旧等待提示。另一执行页面仍有效时保持互斥,旧占用失效后自动重试。学习地图归档中的课程与考试入口使用 Angular 当前页路由,不能仅凭租约提示认定用户打开了重复标签。
控制台保留最近 500 条运行日志,“清空显示”只清运行日志显示。新增“持续记录诊断日志”开关,默认开启,最近 2000 条诊断记录独立持久保存,刷新后保留;使用“导出诊断 JSON”“导出诊断 TXT”可一键导出,使用“清空已保存诊断”可删除这些诊断记录。关闭开关只停止新增记录,已保存内容仍可导出。两种清空都不删除任务检查点或题库;诊断日志不记录完整题干、选项、答案和 URL 查询参数。
`npm test` 的 18 套回归全部通过,执行权恢复另完成 12 项检查,涵盖过期自动接续、有效外页持续续租不抢占、旧等待迁移、丢失执行权停止旧动作、恢复重验及人工等待优先。完整脚本验证了 JSON/TXT 实际下载、跨刷新保留、关闭后停止新增及清空不删检查点;桌面与 390px 窄屏无相关浏览器错误。所有业务请求均在本地拦截,真实账号环境仍需实站验收。
## 2.1.2 更新记录