# 安装包瘦身回滚计划

## 当前结论

上一轮回滚不合格：它删除了 runtime cleanup，导致新安装包变成完整 payload，体积超过最近可用备份包。

- 最近可用基线：`dist/installer/backup/千匠问天-20260430-164341.exe`
- 基线大小：`538,315,023 bytes`
- 回滚后的异常包：`dist/installer/千匠问天-Setup-0.1.0.exe`
- 异常包大小：`596,924,319 bytes`
- 增量：`58,609,296 bytes`，约 `55.9 MiB`

## 回滚原则

瘦身失败时，必须回到最近可用小包基线，不能回到更大的完整 runtime payload。

允许保留：

- `ffmpeg/bin/ffmpeg.exe`
- `ffmpeg/bin/ffprobe.exe`
- `playwright-browsers/`
- 当前 runtime 必需 Python 依赖

必须恢复：

- runtime payload cleanup
- cleanup 统计写入 manifest
- OpenClaw docs 裁剪但保留 workspace templates
- Python tests、cache、pyc/pyo、source map 等无运行价值文件清理

## 修正方式

1. 恢复 `build/scripts/materialize-runtime-payload.ps1` 中 cleanup 相关逻辑。
2. 确认 `materializationInputs.schemaVersion` 回到 cleanup 对应版本。
3. 不修改 `apps/desktop/electron-builder.yml`，当前 `compression: store` 是既有状态。
4. 删除并重新生成 runtime payload。
5. 重新打包。
6. 对比新包大小，必须不大于 `538,315,023 bytes`。

## 验证命令

```powershell
corepack pnpm materialize:runtime
corepack pnpm package
corepack pnpm typecheck
corepack pnpm smoke:ffmpeg-runtime
```

必要时再运行：

```powershell
corepack pnpm smoke:installer
```

## 接受标准

- `vendor/openclaw-runtime/runtime-manifest.json` 包含 `cleanupSummary` 和 `payloadStats`。
- 新安装包大小 `<= 538,315,023 bytes`。
- `ffmpeg.exe` 和 `ffprobe.exe` 仍在 runtime payload 中。
- 抖音视频/ffprobe 相关 smoke 不因瘦身缺少二进制而失败。

## 失败处理

如果新包仍然大于基线，不继续扩大回滚范围；先分析 manifest 的 `topLevelBreakdown` 和 `payloadStats`，定位新增体积来源后再补充 cleanup 规则。
