Repository navigation
Conversation
| inspect/acknowledge/reinstall 的调用方持有原脚本安装锁。acknowledge | ||
| 自己核验同一记录并清除、复核;出现竞态应抛错并保留或恢复原标记。 | ||
| """ | ||
| before = await inspect() |
There was a problem hiding this comment.
Bug: Unguarded inspect() and acknowledge() calls in reconcile_installation propagate exceptions without emitting a blocked RecoveryIncident, resulting in missing incidents in recovery summaries.
Severity: LOW
Suggested Fix
Wrap inspect() and acknowledge() invocations in try...except blocks within reconcile_installation, emitting a blocked RecoveryIncident before re-raising the exception or handling it appropriately.
Prompt for AI Agent
Review the code at the location below. A potential bug has been identified by an AI
agent. Verify if this is a real issue. If it is, propose a fix; if not, explain why it's
not valid.
Location: app/core/script_update_recovery.py#L77
Potential issue: In `reconcile_installation`, calls to initial `inspect()`,
`acknowledge()`, and the final `inspect()` are unguarded by error handling. If an
exception is raised during these calls—such as `acknowledge()` raising due to a race
condition—the error propagates without calling `emit('blocked', ...)`. As a result, no
`RecoveryIncident` is recorded, causing `current.recovery_summary` and the queue summary
to omit reporting this blocked-start case.
Did we get this right? 👍 / 👎 to inform future reviews.
总体结论:修改后合并AUTO-MAS-Project/AUTO-MAS #1916 宝宝,这次把“是否能继续”交给公共决策层、把安装细节留给适配器,范围说清楚啦。dot酱没有确认半安装被放行或取消变成旧版回退的缺陷;目前挡住合并的是实际 CI 格式失败,另有两处低风险问题值得补齐喵。 公共入口依据适配器提供的健康证据作决定,ScriptUpdateSession 收集结果,ScriptExpander 等预下载收尾后统一发通知。现有安装锁仍由适配器持有,本 PR 尚未接入具体专项,不能把这份公共能力当作各脚本已经自动修复成功。 合并前处理当前格式检查明确失败于 Ruff:
请使用仓库锁定版本的 Ruff 格式化这两份文件,并确认重跑通过。不是安装逻辑失败,但这盏红灯现在确实还亮着,先别把构建通过当全绿啦。 规范[规范 · P3,非阻断] 新增对外字段尚未同步生成客户端 TaskItem.Current:369–371新增 recovery_summary,TaskTreeData 从它派生,字段确实会进入任务查询和完成包。但当前生成文件 TaskItem_current.ts仍没有它。请按项目的 API 契约规则重新生成客户端,不要手改生成文件。这里是类型契约没有同步,不是后端把字段丢了。 当前真正会显示汇总的是既有 task.notice;前端 完成消息处理还没有保存这个字段用于回看。后端最近终态缓存会保留它,所以也不能说“任务结束就丢了”。本 PR 可以保持公共后端范围,但说明中应分清“完成包已携带”与“历史界面已展示”,回看接入还要留给后续啦。 模块归属和遥测未确认新增阻断项。自动检查与重试沿用已有脚本/任务终态观察;摘要里的安装目录和业务身份未被加入匿名统计,不需要为这些内部步骤另发一套完成事件。 规格[逻辑 · P3,非阻断] 确认或复核抛错时,汇总漏掉这次阻断 位置:reconcile_installation:101–102、141–146。 公共契约明确允许 acknowledge 在记录变化时抛错;健康检查读取安装文件,也可能因文件损坏或 I/O 失败抛错。但这几个 await 位于只包住 reinstall 的异常记录范围之外。比如首次检查返回“有残留、完整且新安装已确认”,随后 acknowledge 拒绝清除变化的记录,异常会正确阻止启动,却没有生成 blocked 事件。队列结束的恢复汇总因此遗漏这一项;若只有这一次恢复事件,汇总甚至为空。 请在确认和复核失败的边界记录固定、脱敏的 blocked 原因,再原样抛出;取消继续向上传播,不能改成恢复失败或旧版继续。沿现有公共入口补一组“acknowledge/复核抛错 → 异常仍传播、汇总含 blocked”的检查就够啦。与现有机器人提示是同一个问题,dot酱核对后只记一次,且不把报告缺项夸大为安全放行。 验证情况已核对 ContextVar 随任务及预下载继承、结束时重置、预下载收敛后汇总、同轮去重,以及旧版放行同时要求“无 pending、healthy、previous_confirmed”。未确认新增 P1/P2,规范和规格各 1 项非阻断 P3。 读取了当前提交的实际 CI 日志:Windows pytest 1817 通过、2 跳过;Ubuntu 1778 通过、40 跳过,Windows 验证包构建通过。格式工作流在 Python 步骤失败,后续前端 lint/typecheck/format、单测和词条检查均被跳过,不能算通过。 新增测试能证明公共决策和延后通知,但使用了检查/安装回调及任务替身,不能证明真实安装完整性、真实任务树提交或断线后的界面回看。dot酱未执行项目代码、测试、安装器或游戏任务;专项适配和真实恢复效果仍需后续各自验证。 —— dot酱核过公共恢复边界敬上 🐾 |
…r and resume interrupted directory rename
… and health checks centrally
…zed incident reporting
总体结论:修改后合并AUTO-MAS-Project/AUTO-MAS #1916 宝宝,上轮提到的检查、确认异常漏汇总已经补上啦。不过这次新增了整目录备份和自动回滚,不能沿用上轮“未确认 P1/P2”的判断:dot酱发现一条回滚中断后会再次覆盖旧版的路径,得先修好喵。当前格式检查也仍未通过。 这版由公共入口决定安装、重试和回滚,备份服务负责保存和移动目录,专项提供健康证据与停写确认。职责可以保持这个分工;问题出在上层没有接上底层已有的回滚续做能力,不需要再加一套框架。 规格:必须处理[逻辑 · P2,阻断] 回滚中断后被当成安装重试,可能改坏唯一完整旧版 位置:retry_previous:272–283、ManagedInstallBackup._restore:155–173。 沿新公共入口静态推演,以下是实现自身能留下的状态,不需要外部篡改记录:
安装锁、停写确认和 worker 收尾都不能补回已经被第二次安装覆盖的旧版;它们解决的是并发与退出,不是这个阶段分流问题。好在底层 _restore 已能处理“restoring 且 snapshot 已移走”的情况,别让上层绕开它啦。 最小修改: 在公共编排层将 restoring 和 restored 都先交给 restore_previous,完成原来的回滚、校验和清理,不能再次调用 install。用真实临时目录补一条公共入口回归:在 snapshot 移回后中断,下次调用应保留原文件、完成回滚,且不启动安装。这里不需要运行游戏或真实专项。 规范与 CI当前格式任务的实际日志显示 Ruff 要求格式化 4 个文件:app/core/script_update.py、app/core/script_update_recovery.py、app/services/script_install_backup.py、tests/core/test_script_update_recovery.py。请用仓库锁定版本处理并重跑,红灯还不能跳过喵。 上轮 P3、非阻断 的客户端生成问题仍在:recovery_summary 已进入后端任务契约,生成的 TaskItem_current.ts 尚未同步。按既有生成器更新即可,具体证据不再重复铺开。 验证情况已重新检查完整 PR 与新增提交的安装、快照、超时、取消、回滚及清理路径。旧 reconcile 的异常记录修复成立;新安装超时当次会保留备份并阻止继续,没有把取消当成普通下载失败。 本次新增的 run_managed_installation 和 ManagedInstallBackup 尚无直接测试覆盖;当前 281 行恢复测试与上次完全相同,验证的是旧公共决策、下载降级和延后通知,不能证明新增目录事务。上述中断回归应随修复补上,别让已有绿灯替它作保啦。 发布前读取的 CI 中,Windows 验证包构建与 Ubuntu pytest 已通过,Windows pytest 仍在运行;格式任务失败后,前端 lint、类型、格式、单测、词条及 E2E 契约检查均被跳过。dot酱未执行项目代码、测试或安装器。具体专项尚未接入,本次结论只针对公共能力,不声称已经验证真实安装恢复。 —— dot酱守着旧版备份敬上 🐾 |
…en when rollback succeeds
… timeout retry, repeated download errors and fail-closed guards
…ation backup across profile identities
…ation backup across profile identities
…ocess guard without UI prompts
…uccess and deleting backup
…covery and public reporting entry
…ity and protected full-stage merge into AUTO-MAS-Project#1916 adapter
…d repair health callbacks without dialogs
…ions and verified full-package repairs without modal
…ngside AUTO-MAS-Project#1916 rollback; keep read-only ADB whitelist
…pts (#1905) ## 方向调整:改为 #1916 公共自动恢复 此 PR 原来基于 #1900 的弹窗方案。现已移除奇想盒专有 WebSocket 弹窗、前端常驻订阅和用户选择,改由 #1916 的统一后端入口执行健康性检查、备份、自动重试及可验证回滚。原生 GUI 配置/修复入口仍可打开,但不会因此绕过自动任务的安装保护。 ### 具体实现 - 正常更新:只读下载/准备完成后,通过 `run_managed_script_install` 创建旧版快照并运行官方 pip wheel 安装;安装结果由公共层汇总。 - 已有跨任务备份:优先恢复公共事务;下次先检查真实 pip/包入口和版本,确认上次已成功则清理备份,否则重试,只有进程全部停写且原快照通过完整性校验才允许回滚。 - 老版本留下的 `.mas-update-pending`:无可信更新前快照,只能走公共 `auto_recover_script_install` 的健康核验或强制重装,不能虚构可回滚旧版。 - 任务末尾错误汇总交给 #1916;不再使用脚本自带的弹窗服务。 - 保留 `skip_pending_installation` 的依赖完整性检查作为公共 acknowledge 所用的专项安全操作。 - 原前端 modal / websocket / 语言包以及旧弹窗测试已删除,补了公共恢复路径与残留标记回归测试。 ### 必须注意的合并顺序 本分支已通过双父提交显式叠加 #1916 的实现,因此合并顺序必须为 **#1916 先进入 dev,本 PR 后合并**。在公共 PR 合并前,这个 PR 的差异会暂时显示公共文件;不能单独将本 PR 作为独立功能合并,也不能因为公共回归测试存在就认定真实 pip 安装端到端通过。 最新 CI 以 PR 最新提交为准。
…1906) ## 方向:仅保留 #1916 公共自动恢复 旧人工询问、弹窗和 SRC 专用 WS 恢复协议已删除。manager 持有安装互斥锁,使用 `auto_recover_script_install` / `run_managed_script_install`;SRC 专项适配器提供 Git HEAD、原生 installer、Python 依赖与进程停写证据。 旧 src-install.json 只有 Git 完成不能自动放行:`pip check` 不足以证明 requirements 已安装,需执行原生 installer;只有安装器成功后写入的完成记录才能证明本次安装完成。公共备份支持跨任务恢复;更新失败且旧版经健康检查才继续运行,异常由公共队列在任务结束时报告。 不保留旧版确认 UI。无可信安装证据、后台进程未停写或取消时 fail-closed。最新代码和 CI 以本 PR 最新 SHA 为准;未宣称真实 Windows 上游安装器 E2E 已完成。
…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。
…pose repairable state to AUTO-MAS-Project#1916
…t#1916 repair, preserve MXU-upgraded version
…aged EXE and MXU-upgraded receipt
…oject#1916 automatic recovery
## 方向:#1916 公共自动恢复,去掉人工弹窗 把 #1911 合法大事务校验与旧版本回执复核收进本 PR;关闭旧弹窗、前端订阅和专用 WS。BAAH 以原生完整包作为修复手段,由 `auto_recover_script_install`、`run_managed_script_install` 和公共下载安全回退决定重试、备份、健康核验、回滚与队列末尾报告。 进程未停写、目录尚存 previous/ready、损坏原生事务、身份回执不可信时禁止错误放行;只允许完成经过 PE、版本与原始文件回执确认的旧事务归档。首次新安装由公共快照保留旧版。没有可靠身份时不猜测架构、不强制下载安装。 本 PR 替代 #1911 与旧 #1900 弹窗,所有最终结论以最新 CI 和审查为准;真实 Windows 官方安装器待 E2E。
## 仅保留 #1916 公共自动恢复入口 本 PR 不再提供人工确认弹窗或自定义恢复 WebSocket。MAA 安装失败状态经统一公共入口接收、健康检查、恢复执行以及任务末尾异常汇总。 **MAA 本体官方安装失败:** 经官方已发布版本代码核对,`pending-update-failure.txt` 存在时,启动 MAA 会先清空 `UpdatePackage`。MAS 单独写入包路径再拉起 MAA.exe 并不能完成官方内部的重新登记流程。因此本 PR 不再虚假执行自动本体重试。只要官方失败标记尚未安全消除且无法证明已完成新版本,就阻止脚本任务继续,保留失败标记和原始包,明确提示用户先在 MAA 官方界面完成原生修复。也不擅自清理上游失败标记。 **MAS 资源半更新:** `.automas-resource-update.json` 继续经 #1916 自动重新获取完整资源、核验下载与身份,然后重新合并;不能通过旧资源时钟直接跳过。资源中断及官方本体失败同时存在时优先阻断本体,避免错误地完成部分资源更新。 保留 PE 检查、原生事务/进程锁和标记变化保护。新增使用真实 manager、adapter、公共恢复入口的测试,证明官方本体失败与完整包待处理时不会空转或误删原文件;资源单独失败仍自动重试。真实 MAA 官方 UI 修复的端到端验证尚未执行。 已废弃的 #1912 资源恢复弹窗逻辑没有保留。
…through real installer and AUTO-MAS-Project#1916 manager flow
## 方向:仅采用 #1916 公共恢复 整合旧 #1910 的可信 program-identity.json、官方完整包下载与校验;以及 #1913 的原生 transaction.json/previous/ready 安全性检查。删除所有恢复弹窗、专用 WS 及“用户确认跳过”。恢复由 `auto_recover_script_install` 接收健康检查、原生回滚和官方完整包修复回调,主流程保持安装锁及原生 MXU 清理机制。 只有确认原生进程停止、完整发行文件和回执一致、且没有尚可回滚的 previous/ready,才允许归档过期事务。不可读架构、缺少 MAS 自有身份时绝不猜测官方安装目标。关闭托管的自定义构建遵守既有 MXU 行为,不强行覆盖。自动恢复结果交公共队列末尾汇总。 本轮补充:安装器复制 `ready` 后、写入 `transaction.json` 前失败或取消时,在没有 journal/previous、确认停写和持有安装锁的条件下可清理未提交暂存。若原安装健康,核验收据后清理;若 EXE 损坏或因 MXU 独立升级导致旧收据失效,仅允许 AutoProxy + 开启托管 + MAS 可信 `program-identity.json` 的修复请求清理暂存,随后必须由 #1916 公共入口执行官方完整包重装与最终健康复核。身份缺失、previous 或 journal 存在时继续保留现场并阻断,不能把清理暂存当作恢复成功。回归测试包含真实安装器的 ready 阶段故障注入、两类受控自动修复,以及缺乏可信身份时拒绝清理。 本 PR 取代 #1910;未运行真实 MXU/Electron E2E,CI 以最新提交为准。
…ion coverage (#1923) ## 摘要 - 修复 #1916 在 release 旧调度器中的会话接线:旧基类直接执行 `_run_main_task`,原来放在 `main_task` 的绑定不会生效。改在真实执行入口绑定并覆盖子任务收尾,正常完成和手动停止均只通过既有 TASK_NOTICE 汇总一次。 - 保留 BetterGI 正式版公告、灰度和资源就绪门槛;对有效 MAS 残留目标记录,允许主程序缺失、损坏或版本资源不可读后重新执行经校验的官方完整安装器。拒绝目标降级、记录损坏或变化,以及下载期间原生升级后的覆盖;安装后复核版本和 PE 架构再清除标记。下载准备失败仍沿用既有健康检查后继续任务的 release 行为。 - 修复 HSR 恢复状态未初始化,以及本轮原生回滚或公共恢复成功后再次更新同一引擎的问题;保留旧调度、路径锁和原生回滚,不引入新调度器。 - 逐项补回 #1905、#1906、#1908、#1909、#1913、#1915 缺失的恢复回归,适配 release 的日志与锁接口;专用验证工作流增加本目标分支的 PR 触发及三平台接口类型检查。整个 PR 只有一个更新日志碎片,不修改前端或版本号。 ## 验证 提交:`fc68ce88035fc206deeabe59851286d1459dba7b`;基线:`606c7ebd9231888519b0decad085c249b17c554a`。Windows、Python 3.12.13、uv.lock 锁定依赖。 - `uv run --no-sync python -m pytest tests -q --tb=short`:**1614 passed、2 skipped、15 subtests passed**,174.47 秒;保留现有 Pydantic 弃用提示。基线全量为 1554 passed、2 skipped。 - 同一故障场景修复前后对照:BetterGI 损坏/缺失程序、非法或变化的安装记录、目标降级与下载期间原生升级;HSR 公共恢复后的 AttributeError 和重复更新;真实旧任务正常结束/停止时的恢复汇总。修复前均复现,修复后对应检查通过。 - 变更 Python 文件 Ruff 检查、全仓 Ruff 格式、compileall、Windows/Linux/macOS 平台接口 mypy、`uv lock --check`、更新日志规则和 `git diff --check` 均通过。外部 CI action/container 引用均固定到提交或摘要。 - 本 PR 的远端 Windows/Ubuntu 全量、格式、依赖与构建检查以 Checks 最新结果为准。 | 已合并 PR | 本轮保留或补回的关键恢复覆盖 | | --- | --- | | #1905 奇想盒 | 遗留标记走公共入口,健康复核,备份失败/取消清理候选 | | #1906 SRC | Git 目标不能替代原生依赖安装完成证据,完成记录跨适配器重建 | | #1908 BAAH | 损坏/缺失程序可信修复、回执变化拒绝、旧事务验证、取消保留目录锁 | | #1909 MAA | 本体失败不伪造重试,资源半更新恢复,原始包与失败现场保留 | | #1913 MaaEnd | 原生事务、ready 阶段故障注入、可信身份修复、精确版本恢复与配置保护 | | #1915 HSR | 损坏程序、未知进程路径、真实 journal 恢复要求、恢复后不重复更新 | ## 排除与验证边界 - 不迁移 #1845 新四级调度/运行树,也不迁移 #1862 依赖新调度和前端的进度展示;保留 release 原有预下载架构。 - 不新增 dev 的 `current.recovery_summary` 历史字段或前端消费,恢复结果仍使用 release 现有任务提示和后端日志。 - BetterGI 未接入通用快照自动回滚;有效残留事务通过官方完整安装器重试,缺少可信记录、资源未就绪或仍有写入者时继续阻断,不仅凭 EXE 版本清除失败记录。 - MAA 官方本体更新失败的无人值守重试继续排除:现有上游启动流程会清空待安装包登记,仍需官方界面完成原生修复;MAS 自有资源半更新可自动重试。 - 未运行真实游戏、账号、模拟器或上游官方安装器 E2E。自动化使用真实文件/事务与 MAS 入口,并在网络、原生进程和安装器边界隔离;不能据此声称实机安装已验收。 - 后续实机验收可在已配置脚本和账号的作者环境运行 `cd frontend; yarn e2e:real:all --only BetterGIConfig,HSRConfig,MaaConfig,MaaEndConfig,BAAHConfig,SrcConfig,WhimboxConfig`,产出各场景报告和 `real-e2e-summary.json`。 目标仅为 `release-v5.8.0-backport-verify`;不直接修改或合并该分支及 `release/v5.8.0`。
## Release v5.9.0-beta.1 由「准备发版」工作流生成。这是唯一允许修改 `CHANGELOG.md` 与版本号的 PR,合并后请手动运行「构建并发布应用程序」。 合并前请在本 PR 里完成: - [ ] 「本次亮点」够不够:合并前给碎片加 `highlight: true` 就会自动进这一类,现在也可以直接在 `CHANGELOG.md` 新版本段里把条目挪过去 - [ ] 有 3 个提交改了用户可见代码但没带碎片(清单见[运行摘要](https://github.com/AUTO-MAS-Project/AUTO-MAS/actions/runs/43347223103)),若用户可见就在新版本段里补一条 - [ ] 改完运行 `python scripts/changelog.py sync` 并提交 ### 体积 - 首行 JSON 2371 / 18000 字符,带 1 个版本段 - 本版 40 条,最长的几条: - 78 字(变更)【设置】自启与静默启动可独立设置,静默时直接进入托盘,关闭可选退出或托盘,最小化保留任务栏。 (#1928) by @he0119 by @1w1w11w1 - 76 字(修复)【MAA】MAA 更新失败时统一检查安装健康;资源半更新自动重装,官方本体失败保留标记并提示使用官方修复入口 (#1909) by @youngslin - 75 字(变更)【模拟器】ModAVD 全部改由 modavd 命令行控制,移除自带的直控和更新器,不再支持无命令行的旧根目录 (#1918) by @qiyinxi - 64 字(修复)【主页】调整任务台版本主线的 UI,并让版本更新倒计时更清楚 (#1926) by @TyrannosaurusGodofWar - 64 字(破坏性变更)【调度】重构任务调度与范围选择,完善日志恢复、独立触发、队列附加动作及电源收尾。 (#1845) by @DLmaster361 自 `v5.8.0` 以来的改动: ###⚠️ 破坏性变更 - 【调度】重构任务调度与范围选择,完善日志恢复、独立触发、队列附加动作及电源收尾。 (#1845) by @DLmaster361 ### ✨ 新增 - 【M9A】新增 MAS 登录 B 服:处理隐私协议并选择已保存账号后交给 M9A 运行 (#1882) by @Douya36 - 【ok-ww】支持脚本逐账号或批量切号、显示失败原因并补跑未完成账号 (#1890) by @AthenaHibou - 【ok-nte】支持按日配置日常计划,并可在详细配置中调整当天任务。 (#1921) by @AthenaHibou - 【调度】在日志末尾显示预下载方式和进度,支持独立配色与连续渐变(仅公测) by @youngslin - 【设置】支持调整自定义光标的显示大小。 (#1904) by @Douya36 ### 🔧 变更 - 【调度】统一各脚本账号编辑页的页头和基本信息布局 by @Craun718 - 【模拟器】魔改 AVD 改名为 ModAVD,界面、提示和日志统一用新名称 (#1898) by @qiyinxi - 【模拟器】ModAVD 全部改由 modavd 命令行控制,移除自带的直控和更新器,不再支持无命令行的旧根目录 (#1918) by @qiyinxi - 【设置】统一主要页面的标题、间距、卡片层次和日志按钮外观 (#1893) by @1w1w11w1 - 【设置】浅色主题改为中浅灰画布配纯白卡片,补回分隔线与卡片边缘层次 (#1855) by @beichen24a1 - 【设置】自启与静默启动可独立设置,静默时直接进入托盘,关闭可选退出或托盘,最小化保留任务栏。 (#1928) by @he0119 by @1w1w11w1 - 【Runtime】加快运行环境健康时的启动准备 (#1907) by @jinghero ### 🐛 修复 - 【MAA】MAA 更新失败时统一检查安装健康;资源半更新自动重装,官方本体失败保留标记并提示使用官方修复入口 (#1909) by @youngslin - 【MAA】修复保存配置时修改被误判未保存并丢弃的问题 (#1930) by @jinghero - 【end】MaaEnd 安装异常时统一恢复事务,并安全修复可信身份的损坏本体 (#1913) by @youngslin - 【HSR】为 M7A 与 SRA 更新中断后的未完成回滚添加用户确认恢复入口 (#1915) by @youngslin - 【HSR】修复 SRA 使用自建下载站时无法下载安装更新的问题。 (#1945) by @youngslin - 【bgi】修复正式版安装资源尚未就绪时自动更新失败的问题 (#1901) by @youngslin - 【ok-ww】修复直接启动游戏时无法覆盖默认资源档位的问题 (#1925) by @AthenaHibou - 【ok-ww】修复新版脚本启动后不执行每日任务的问题 (#1940) by @AthenaHibou - 【ok-ww】修复新版启动器不触发游戏更新及停服维护时反复重试的问题 (#1934) by @1w1w11w1 - 【ok-ww】修复鸣潮和异环更新重启后自动切号失败的问题。 (#1933) by @AthenaHibou - 【ok-nte】修复仅开启任务后关闭时无法关闭游戏及启动器的问题。 (#1920) by @AthenaHibou - 【BAAH】损坏的托管安装须由用户明确选择官方完整包修复,禁止绕过校验运行 (#1908) by @youngslin - 【奇想盒】修复后端安装中断后无法自主确认恢复的问题 (#1905) by @youngslin - 【SRC】修复原生安装中断后无法自主选择安全恢复的问题 (#1906) by @youngslin - 【主页】调整任务台版本主线的 UI,并让版本更新倒计时更清楚(仅公测) (#1926) by @TyrannosaurusGodofWar - 【调度】修复停止任务后脚本及更新子进程残留、项目持续占用和结果未保存的问题 (#1892) by @youngslin - 【调度】统一配置表单、卡片间距与状态颜色,优化队列列宽和配置说明 (#1927) by @AthenaHibou - 【模拟器】修复启动模拟器时 adb 命令执行不了却只提示超时、看不到原因的问题 (#1894) by @miaojiuqing - 【模拟器】手动停止任务时不再把 ModAVD 模拟器连同任务一起强制结束 (#1919) by @qiyinxi - 【工具】修复 MCP 查询全部托管失败及可空参数被错误拒绝的问题 (#1895) by @HarcoChen - 【设置】修复模拟器管理和调度中心卡片外侧阴影显示不一致 (#1897) by @1w1w11w1 - 【设置】FluxDown 自动识别强制优先选择 MAS 内的文件夹。 (#1948) by @youngslin - 【更新】统一脚本安装恢复入口及队列结束时的下载异常汇总 (#1916) by @youngslin - 【Runtime】修复回退旧版后再次升级时无法启动的问题 (#1889) by @jinghero - 【Runtime】修复后端启动异常退出却被误判为正常结束的问题 (#1929) by @jinghero - 【Runtime】修复临时启动失败后反复停留在失败页的问题 (#1938) by @jinghero - 【Runtime】修复初始化时依赖安装已成功却被误报为失败的问题。 by @ClozyA Co-authored-by: ClozyA <133191303+ClozyA@users.noreply.github.com>
背景与取舍
#1900 已关闭且未合并。放弃 BetterGI 单独弹窗 / WS 选择,改为纯后端自动恢复。#1900 中有价值的「识别安装目录之外启动的 BetterGI 官方安装器」进程检查已迁入本 PR;不迁移弹窗与前端组件。
公共收束入口与持久备份
范围和后续
本 PR 提供公共备份/恢复决策能力与 BetterGI 安装器外部进程保护,但尚未把新的通用事务入口接到每个脚本的真实安装器。后续需要按脚本的原生 pending、资源布局、数据保护目录、官方安装器停写约束分别接入。不能因为公共测试通过就宣称所有脚本已经自动修复。
历史 UI 尚未消费新 recovery_summary 字段;目前可从任务结束通知和后端日志看到汇总。对外类型生成及历史界面回看需另行完成。
测试
新增持久快照、已确认失败回滚、首次超时后下轮重试与清理、下载反复失败最终汇总、安装器仍在写入时拒绝回滚、跨配置恢复、哈希损坏保护、目录交换中断续做和通用报告等回归测试。CI 以最新提交为准;未运行真实游戏或上游官方安装器。