Skip to content

HSR:M7A/SRA 更新回滚失败时增加安全恢复弹窗(旧方案) - #1914

Closed
youngslin wants to merge 3 commits into
AUTO-MAS-Project:devfrom
youngslin:fix/hsr-external-update-rollback-recovery
Closed

youngslin wants to merge 3 commits into
AUTO-MAS-Project:devfrom
youngslin:fix/hsr-external-update-rollback-recovery

Conversation

@youngslin

Copy link
Copy Markdown

问题

HSR 可管理 M7A 和 SRA 两套外部脚本;MAS 使用 .automas_update/journal.json + backup 记录安装事务,崩溃后会在运行前自动回滚。自动回滚失败时目前只终止整个任务、没有用户可见的恢复选择;用户容易尝试直接删 journal,反而丢失唯一备份。

变更

  • 保留现有自动回滚第一优先:仅在任一引擎的自动回滚失败时,在 HSR 原有双引擎路径锁内显示一次恢复对话框,明确说明是 M7A 还是 SRA、托管名称、安装目录和失败原因。
  • 用户可选择「再次执行安全回滚」或「取消」;确认后重新调用既有 rollback_pending,保留进程检测、journal schema/路径/备份校验、原子恢复和剩余更新记录验证。没有「删除备份/跳过」按钮,也不联网下载替代旧备份。
  • 后端缺少 UI、超时、取消、journal 已丢失或再次回滚失败时保留备份并禁止启动;前端重连清除旧询问,三语言独立词条。
  • 针对危险的日志文件/工作目录符号链接新增 fail-closed 校验,防止恢复时跟随非预期外部路径。
  • 独立于 BetterGI、奇想盒、SRC、BAAH、MaaEnd、MAA 更新实现;M7A 和 SRA 是同一个 HSR manager 的两个引擎,一条 PR 共同修复回滚边界。

回归

新增两种引擎的失败自动回滚→确认重试、取消后不继续下一个引擎、符号链接 journal 保留等隔离测试,前端新增主动重连旧对话框失效测试。CI 执行双平台 pytest、前端格式与构建;尚未进行真实 M7A/SRA Windows 安装中断的端到端测试。

@github-actions github-actions Bot added 专项: HSR 类型: 修复 按更新日志碎片自动设置 labels Nov 10, 2026

Copy link
Copy Markdown
Contributor

总体结论:修改后合并

AUTO-MAS-Project/AUTO-MAS #1914

这次没有给“跳过备份继续跑”留后门,dot酱放心了一点喵。静态审查尚未确认新增功能缺陷;当前必须处理的是前端格式 CI,修好后还要让被跳过的前端验证真正跑完。

HSR 管理器持有两套引擎的路径锁,先自动回滚,失败才询问;选择重试仍走原有 rollback_pending,重新检查进程占用及事务条目,不联网,也不另写一套恢复逻辑。M7A 取消或失败会停止本轮,不继续启动 SRA。

需要修复的 CI 门禁

格式检查日志明确报告 frontend/src/bootstrap/realtimeResidents.ts格式不符合要求。Python 格式、前端 lint 和类型检查已通过,但前端格式步骤失败后,单元测试、词表完整性和 E2E 基础设施契约检查均被跳过。

请按仓库格式化规则调整新增导入,再确认整条检查通过。新加的主动重连用例值得保留,不过这轮还没执行到它,先别替它亮绿灯啦。

审查与验证

规范侧未确认额外的架构或专项边界问题;规格侧未确认必须修改的功能问题。已静态核对无主连接、超时、取消及重试失败会中止,订阅在 finally 注销,前端断线及主动重连清除旧请求;回滚写线程复用原有取消等待机制,结束写入后才释放路径锁。本版本 HSR 的 METHOD_BOOK 只开放 AutoProxy,没有引入原生配置遮罩会话。

已有 CI 的 Windows pytest 为 1809 passed、2 skipped,Ubuntu 为 1770 passed、40 skipped,Windows 验证包构建通过。新增后端用例验证了双引擎的重试调用和取消顺序,但替换了真正的询问及回滚函数,不是 Windows 安装中断端到端证明。

dot酱没有运行项目代码、测试或真实 M7A/SRA/Electron 流程。先把格式与剩余检查补齐,这版的恢复边界就有更完整的验证依据了喵。

—— dot酱看好备份、等检查跑完敬上 🐾

Copy link
Copy Markdown
Contributor

总体结论:可以合并

AUTO-MAS-Project/AUTO-MAS #1914 · 格式修复复审

宝宝,新增导入已按前端格式要求收好,前次没执行到的检查这次也都通过了。dot酱核对后,没有剩余的必须修改项喵。

本次只调整 realtimeResidents.ts 的导入排版,没有改变常驻订阅、双引擎回滚或取消顺序。规范轴和规格轴均未确认新增问题,前次对“先自动回滚,失败才询问,不能跳过备份继续运行”的判断保持不变。

已读取当前 CI 日志:Windows 1809 passed、2 skipped,Ubuntu 1770 passed、40 skipped,前端 58 个文件共 308 项测试通过;8 项检查均成功,前端类型/格式、词表与 Windows 验证包构建都已完成。被跳过的测试这回是真的跑到了,不借前一版的绿灯啦。

本轮仅静态复核与读取既有 CI,没有执行项目或真实 M7A/SRA 安装恢复。现有测试仍不替代 Windows 中断恢复端到端证据。

—— dot酱核过这轮绿灯敬上 🐾

youngslin added a commit to youngslin/AUTO-MAS that referenced this pull request Nov 10, 2026

Copy link
Copy Markdown
Author

按目前的架构决定,此 PR 的 #1900 时代人工恢复/弹窗方案停止采用。原生回滚对 work/backup/journal 符号链接的保护已迁移到 #1915;恢复由 #1916 公共入口处理,不再弹窗。

请以 #1915 为这条脚本的最终专项实现(依赖已经合并的 #1916 公共恢复框架)。主 PR 仍需以最新 CI 和代码审查为准,不代表已合并或生产验证通过。本 PR 关闭以避免旧 UI / WS 协议误被合入 dev。

@youngslin youngslin closed this Nov 10, 2026
youngslin added a commit that referenced this pull request Nov 10, 2026
…ts (#1915)

## 方向:#1916 公共恢复,无人工弹窗
旧恢复询问、skip journal、专用 WebSocket 及前端常驻弹窗已删除。本 PR 合并旧 #1914 的 native
work/backup/journal 符号链接防护。M7A/SRA 路径锁由 HSR manager 持有;原生
`rollback_pending` 失败后由 `auto_recover_script_install`
统一再次确认和重试原生回滚;未确认删除 journal/释放备份时绝不放行,不提供用户跳过按钮。

专项仅提供 PE 基础校验(M7A)、SRA CLI 版本探针、SRA GUI
进程停写检查。成功恢复的单引擎本轮不重复更新,其他引擎照常处理;异常由队列末尾汇总。此处动作是原生事务回滚,不是保证重新下载安装。

#1914 已关闭,以本 PR 为唯一 HSR 实现。最新 CI 与审查均已通过,但不宣称真实安装恢复 E2E。
@youngslin youngslin changed the title fix(hsr): add safe recovery prompt when M7A or SRA update rollback fails HSR:M7A/SRA 更新回滚失败时增加安全恢复弹窗(旧方案) Nov 10, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

专项: HSR 类型: 修复 按更新日志碎片自动设置

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants