# v6.3.3 热更新/强制更新修复

## 修复 1：禁止残缺更新包
旧服务端只校验 EXE + VERSION.txt，因此手工只压这两个文件也会被接受。
Nuitka standalone 不能这样更新，可能导致 DLL、资源或启动配置不匹配。

v6.3.3 起：
- 使用 `07_PACKAGE_UPDATE.bat` 生成更新 ZIP。
- ZIP 内包含 `update_release.json` 完整发布清单。
- 服务端和客户端都会验证该清单。
- EXE + VERSION.txt 的残缺 ZIP 会被直接拒绝。

## 修复 2：保护客户本地运行数据
热更新永远不会覆盖：
- `.env`
- `data/`
- `library/`
- `backups/`
- `logs/`
- `license_server.json`

因此账号数据库、卡密缓存、素材、账号隔离目录和旧版 startup_auth 文件都会保留。

## 修复 3：真正强制更新
服务端发布“强制更新”时：
- 自动把最低客户端版本提升到该版本。
- 客户端检测到强制更新后不能选择“稍后”。
- 即使第一次更新检查失败，卡密服务器返回 CLIENT_TOO_OLD 后客户端会再次尝试更新。
- 旧版本无法绕过更新进入主界面。

## 关于 startup_auth.json
v6.3.3 的强制更新不依赖 `data/startup_auth.json` 来防绕过，
而是由服务端最低版本 + 签名更新清单双重控制。
已经处于“startup_auth.json 丢失而无法启动”的旧客户端无法自行运行更新器，
需要人工替换一次为 v6.3.3 完整客户端；之后即可继续热更新。
