Skip to content

fix(packaging): Windows 覆盖升级保留已下载模型 - #52

Merged
coconilu merged 18 commits into
mainfrom
codex/fix-issue-51-model-retention
Jul 21, 2026
Merged

fix(packaging): Windows 覆盖升级保留已下载模型#52
coconilu merged 18 commits into
mainfrom
codex/fix-issue-51-model-retention

Conversation

@coconilu

@coconilu coconilu commented Jul 21, 2026

Copy link
Copy Markdown
Owner

Closes #51

变更摘要

  • 基于仓库锁定的 Tauri CLI 2.11.4 官方 NSIS 模板做最小定制:GUI 覆盖升级默认原地安装,不调用受影响旧版本卸载器。
  • 静默 /S、被动 /P/UPDATE /P 升级均默认保留 Faster-Whisper 模型。
  • 复用 Tauri 官方“删除应用数据”复选框;只有用户在显式完整卸载中明确勾选,且当前不是更新模式时,才删除模型目录。
  • 增加 Windows 强制 NSIS 策略测试、锁定模板离线漂移守卫,以及真实完整安装器生命周期 CI。
  • 更新 Windows 升级、保留卸载与删除卸载文档。

根因

旧 CaptionNest 的 NSIS_HOOK_POSTUNINSTALL 无条件删除模型目录。Tauri GUI 覆盖升级默认可能先调用已安装的旧 uninstall.exe,因此仅修复新卸载器无法保护从受影响版本进行的第一次升级。

最终验证

Exact HEAD:3ffb05117ffd2c18896155bbfa148ebbd2f9b891

CI:run 29850089551

  • backend、frontend、desktop-check、installer-lifecycle:全部通过。
  • Windows desktop-check 强制执行 NSIS 策略测试,无 skip,并验证 Tauri CLI 2.11.4 模板规范化 SHA-256 漂移守卫。
  • installer-lifecycle 使用固定 SHA-256 的受影响 v0.2.8 完整安装器,以及正常 LGPL release-chain 生成的当前 exact-HEAD 与临时高版本完整安装器。
  • 真实覆盖:旧版显式删除、GUI 默认升级、/S/P/UPDATE /P、当前卸载取消/保留/明确删除。
  • 四种升级路径都保留模型标记;安装后的 sidecar 均将保留的 small 模型报告为 ready
  • 本地完整 Python 回归 289 passed;定向 packaging/workflow 25 passed;强制 NSIS 10 passed;Web lint/test/build、Ruff、Cargo fmt/check、PowerShell parse、diff check 全部通过。

安全边界

  • 破坏性生命周期测试仅允许在 GitHub-hosted disposable Windows runner 上执行,并拒绝已有 CaptionNest 安装、进程、注册表或模型目录的环境。
  • 测试不触碰真实用户模型目录;所有进程、安装目录、应用数据与注册表状态均在 finally 中清理。
  • 发布链遵守 LGPL 媒体依赖门禁,没有使用 GPL 绕过参数。

@coconilu
coconilu merged commit a90c11d into main Jul 21, 2026
4 checks passed
@coconilu
coconilu deleted the codex/fix-issue-51-model-retention branch July 21, 2026 17:10
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Development

Successfully merging this pull request may close these issues.

fix(packaging): Windows 升级安装时应保留已下载的识别模型

1 participant