软件更新验证
日期:2026-10-08。版本:基于 36d32858f11bbd63b4fdff4f553fd8d04429e064 的
0.2.2 加未提交的更新器修改。本文记录本机实现证据;未创建
提交、tag、发行或部署。要求见软件更新。
源码检查与决策
读取锁定的 Tauri/HTTP 依赖、GUI 设置与 IPC、SQLite 设置与进程锁、便携脚本、平台 CI、固定版本的 NSIS 模板和安装生命周期。读取设计所链接的 Tauri updater、GitHub 发行及资产 API、Windows 文件替换官方资料。实际读取公开 v0.2.2 发行,核对七个 对应包的大小和 SHA-256 摘要。
标准 Tauri updater 不能读取现有 Windows 便携 tar.zst 格式。因此各包共用严格的 GitHub 发行选择和流式验证,再由独立辅助进程执行 NSIS 或便携更新。信任边界是 HTTPS 和仓库发行管理权限,没有独立发布者签名。自动下载默认关闭;安装始终需要点击。
环境与命令
Windows 11 x64、Node 24.21.0、Rust 1.98.0、Tauri CLI 2.12.0、系统 Edge/WebView2 和
锁文件依赖。在仓库根执行命令,日志及独立合成数据库位于已忽略的
build/application-updates/,浏览器截图和结果位于 build/browser-smoke/。
测试不需要真实 Agent 记录。
| 命令或检查 | 结果与受测范围 |
|---|---|
cargo test --manifest-path desktop/src-tauri/Cargo.toml --locked --bin LLMUsage update -- --nocapture |
最终退出 0;12 项更新器测试。默认值与旧设置、持久化到期时间与时钟极值、严格的包/架构/稳定版本选择、缺失摘要、恶意重定向、有界与截断下载流、取消、归档安全、暂存元数据/CPU、无关文件冲突、中断替换、原文件缺失/重复备份、幂等恢复、拒绝已修改目标、目标锁和保存的失败 |
npm run test:scripts |
退出 0;13 项,包括真实 zstd/tar 解压核对六种系统/架构布局清单 |
npm run test:ui |
退出 0;22 项,包含十种语言的更新文案完整性 |
npm run test:browser |
退出 0;记录 34 项检查,浏览器无错误。隔离 Edge 服务及模拟 IPC 检查设置、手动/自动下载、跨页面进度、取消(含准备操作仍在等待时)、通知关闭、按包类型显示按钮、显式安装、当前/历史错误和窄屏布局 |
npm run verify |
退出 0;Rust 1,044 项通过/8 项平台条件测试忽略,前端 22 项、脚本 13 项,类型/fmt/clippy 无错误,资源检查和前端构建通过。之后的辅助程序路径修正再次通过 12 项定向测试、clippy 和 fmt |
npm run build:desktop |
最终退出 0;构建 release 可执行文件及 Windows x64 NSIS |
npm run test:update:windows |
最终退出 0;三个原生场景组:公开检查/设置、实际 IPC/辅助程序替换、主程序缺失的恢复/重新启动 |
npm run test:headless |
退出 0;11 项隔离可执行文件/SQLite 检查;最终便携打包从真实解压目录再次执行这些检查 |
node desktop/tests/native-smoke.mjs --runs 1 |
退出 0;前一个构建通过 19 项既有真实 WebView2/IPC/SQLite/任务/窗口检查及三次必要启动。之后的辅助程序路径修改只影响更新恢复,已在最终程序中独立验证 |
node desktop/scripts/portable.mjs desktop/src-tauri/target/release build/application-updates/packages windows x64 |
退出 0;真实便携归档、压缩/解压/原生 CPU 核对、解压成品无界面检查及 NSIS 安装包复制 |
npm run check:docs、npm run test:docs、npm run build:docs、git diff --check |
退出 0;201 对仓库文档/21 对指南及源码注释审阅,Astro 检查无错误,31 项测试、1,371 页面/2,872 发布文件及本地链接通过。双语记录及审阅哈希已同步 |
本地包保留在 build/application-updates/packages/,revision 标记为 local,不是公开
发行。便携包:4,199,627 字节,SHA-256
40487736aa3d9dc9f5c8a81f6e4ead25073b0592365b8d2eff0efcc2c6ed78b3。
NSIS:4,125,060 字节,SHA-256
d1ab8cbe6c8e8c31fa4cecb4620abab29c92fab1c4e90496c23938b510c3bf09。
用语审查
本次文案修订前,每种语言有 518 个词条。逐一检查十种语言各自的 33 个更新词条及 100 个常用导航、设置、采集控件词条,并检查其余简体中文词条和受影响的中英文文档。 修订 166 个已有词条,另为每种语言新增供应商默认设置标题,分别命名章节和添加操作。 标识符、软件包选择、调度及更新安装行为保持不变。
官方来源提供常见界面用语的实例,不构成对其他词的通用禁令。Mozilla 当前德文帮助页
明确标注为未经人工审阅的机器翻译,因此术语比较采用实际本地化源码。九种非英文
about-dialog 词库按 Firefox 本地化提交
d8def708b77353ad76db8f14d62a7b594a3b13b1 获取;完整快照和审阅摘录保存在
build/update-terminology/。具体措辞依据 LLM Usage 的实际控件:
| 语言 | 来源及采用的措辞 |
|---|---|
| 简体中文 | Apple 软件更新及外观说明采用用户要求的软件更新用语及浅色、深色外观名称。界面现使用“软件更新”“浅色”“深色” |
| 繁体中文 | Apple 台湾使用“軟體更新”。安装说明采用“安裝程式”,通知按钮表示关闭通知 |
| 英文 | Apple和 Firefox 帮助支持 Software updates、Check for updates 及重新启动的用语。版本状态明确以 LLM Usage 为对象 |
| 日文 | Firefox 词条采用软件更新、检查和重新启动的用语。章节为“ソフトウェアの更新”,采集统一使用“収集” |
| 韩文 | Firefox 词条使用“업데이트 확인”,最新版本状态以软件为对象。Apple 韩文 App Store 指南也使用“앱 업데이트”,因此保留该标题,明确启动及确认更新的表述 |
| 西班牙文 | Firefox 词条使用“Buscar actualizaciones”。便携版、安装版标签明确版本对象,下载完成句补全主语,说明文字采用与原界面一致的非正式称呼 |
| 法文 | Firefox 词条使用“Rechercher des mises à jour”,最新版本状态以软件为主语。补全版本标签,将直译的保存提示改成完整句子 |
| 德文 | Firefox 词条使用“Nach Updates suchen”和软件主语。采用 Updates、明确版本的标签,以及分写的动词“Neu starten” |
| 巴西葡萄牙文 | Firefox 词条使用“Verificar se há atualizações”。状态以 LLM Usage 为主语,下载完成、安装版标签明确版本对象,隐私说明明确用量数据 |
| 俄文 | Firefox 词条使用“Проверить наличие обновлений”。下载完成状态明确版本对象,每日计划改用语法完整的时间表述 |
源码检查还确认了三类语义问题。UpdateNotice.svelte 只隐藏当前状态标识,没有提醒
计时器,因此十种语言的按钮均改为表示关闭通知。commands.rs 写入当前用户的 Run
注册表项;Microsoft
定义该触发条件为用户登录,因此中英文标签明确表示登录时启动。采集器读取已启用且
到期的来源,并非只读取今日记录,因此十种语言的间隔标签均改为自动采集。供应商
默认设置选择计价渠道及 5/60 分钟提示缓存的计价假设;Anthropic 缓存文档
确认这两种时长。时长控件现有翻译后的可访问名称;它不配置 Agent 的实际缓存。
其他修订明确表示已保存的设置、全局设置、每周起始日及永久保留。
目视检查还发现语言切换缺陷:保存成功提示在 onsaved 更新语言前就已翻译,后续
截图均保留前一种语言。保存及恢复默认值的提示现保留词条键,在渲染时按当前语言
翻译。浏览器循环在截图各更新页之前,逐一核对十种新选语言的保存成功提示。
本次文案修订的 npm run test:ui 通过 22 项,npm run check 无错误、警告。
npm run build:web 通过。npm run lint:md 检查 455 个文件,无问题;
npm run check:docs 通过 201 对仓库文档/21 对指南及 Astro 检查,无诊断问题;
npm run test:docs 通过 31 项。
npm run test:browser 通过所记录的 34 个场景组,浏览器无错误,包含十种语言的
更新/设置页切换及 760 像素视口、既有更新操作/进度/取消、安装版与便携版的不同按钮。
截图位于 build/browser-smoke/updates-<locale>-narrow.png。这是浏览器及模拟 IPC
检查,不能建立所有译文经母语审阅的结论。上文的软件包哈希及下文的原生
更新结果属于此前功能构建;本次文案修订未重跑 NSIS、便携替换或其他平台 GUI 验收。
写作 Skill、相关软件包说明及已审阅的双语文档同步维护。
Windows 原生便携结果
npm run test:update:windows 将已构建程序复制到含空格和中文的独立包根目录,隔离
来源环境、TEMP/TMP 及 SQLite 数据,关闭采集并设置仅手动检查更新。真实 WebView2/
IPC 核对便携身份、无需认证的公开最新版检查、设置保存和重启后的上次检查时间。
测试编译原生替换程序,注入包身份、大小和 SHA-256 相符的完整 tar.zst 下载。真实
install_update 调用核对并暂存文件;原 GUI 退出,程序副本作为辅助进程等待退出,
在同一路径替换受管理文件、保留原始备份并启动新程序。替换程序写入重启回执。
独立核对新可执行文件与清单、原备份哈希、包根目录中的无关文件、SQLite 哨兵及保存
的设置;日志最终为 applied。
第二个恢复场景只将自有测试日志改为 applying,删除合成替换程序,再直接启动保留
的辅助程序。它恢复缺失的原程序、记录 rolled_back、启动真实应用、保留个人文件,
并通过真实 IPC 显示 update_interrupted_and_restored。最终报告位于
build/application-updates/native/1791466696837-62876/report.json。
这验证了使用合成原生程序的真实更新 IPC、进程和文件行为,不能建立公开新应用、 新应用 GUI/数据库迁移或 NSIS 更新执行结论。生产更新器没有用于覆盖端点或路径的 IPC;测试只在启动前写入自有本地缓存。
首次失败与修正
- 普通 sandbox 执行返回
CreateProcessAsUserW failed: 5;自动审阅的命令执行恢复 访问。这是基础设施问题,不是应用测试失败。 - 浏览器测试最初遇到 Vite 端口占用及共享依赖缓存。脚本现在选择空闲端口,并在根 build 下使用独立缓存和配置,保留既有用户服务及用户的调试应用。
- 浏览器发现更新页缺少共用保存按钮,现已支持保存设置。进度断言对齐一秒状态轮询, 通知关闭逻辑除版本和阶段外还区分包名。
- 最终保存错误的修改最初未通过 Rust 的可变/不可变借用检查。初始化现先复制包身份, 再更新状态。还修正了 clippy 的冗余闭包及一次补丁上下文编译错误;最终 12 项测试通过。
- Markdown 检查发现中文标题与章节重名,现使用不同章节标题。
- 安装准备的 IPC 等待期间原本禁用取消按钮,取消现有独立等待状态,安装文件前仍可用。
- 文档菜单测试保留了此前 219 页的来源计数,现要求两个更新路由及当前 221 页的完整 来源目录,31 项测试全部通过。
- PowerShell 的 npm 包装脚本以
EUNKNOWNCONFIG拒绝--runs,改为用 Node 直接 执行真实原生脚本后通过。 - 主程序缺失的恢复首次因对话框超时:直接启动的辅助程序使用普通 Windows 路径, 日志却要求规范化路径。辅助输入现在先将普通日志文件路径规范化再验证,独立最终 重跑通过。
- 审查将检查时间保存移到工作线程,并释放更新状态锁,使数据库写入占用期间仍可读取 状态及取消。自动下载在同一锁下获取可下载状态;文件替换保留备份,回退处理原文件 缺失或原文件与备份同时存在且未改变的情况。
最终测试后的原生进程检查仅发现此前的用户调试应用;自有更新/辅助程序和原生冒烟 进程均已退出。测试未停止用户正在运行的应用,也未修改既有安装或真实来源文件。
验收限制
公开最新版与运行版本相同,因此真实请求验证 up_to_date,未验证生产新版本下载。
后续公开发行必须保留完整文件名、全部资产和 API 摘要,另行验证真实升级。此前没有
新清单的便携归档需要先手动替换一次,才能采用此更新器。
NSIS 生命周期预检查发现既有用户调试应用。脚本要求没有运行应用,本轮保留该进程, 不重跑安装、卸载或任务修改。此前生命周期结果保留为历史证据;新的安装包选择和 安装后注册表/版本检查不能建立真实 NSIS 更新器验收。
Linux/macOS 原生 GUI 更新执行、平台权限和重新启动仍需独立验收。六种布局打包测试 及保留的 CI 定义不能建立本未提交源码在远端 runner 执行的结论。未添加签名凭据。