# 后台升级错乱 / 版本号对不上怎么办

> 适用版本：**1.1.22 起已修复**。如果你在 1.1.22 之前遇到这些问题，升级到 1.1.22 即可解决。

## 一、你可能遇到的现象

| 现象 | 说明 |
|---|---|
| 升级包序号「跳号」 | 例如明明只发了两次升级包，却看到 `v21`、`v23`，中间的 `v22` 去哪了？ |
| 安装包和升级包「撞号」 | 同一天里 `avc-install-20261013-v20.zip` 和 `avc-upgrade-20261013-v20.zip` 同时存在，分不清哪个是哪个 |
| 点「一键升级」装到的不是最新版 | 待安装包列表里明明有更新的包，升级后版本却没变（甚至变低了） |
| 手动放进 `incoming/` 的包没被用上 | 把包丢进 `upgrade/incoming/` 后点一键升级，实际装的却是从升级源下载的包 |

---

## 二、根本原因（两个独立缺陷）

### 缺陷 1：安装包与升级包**共用同一个序号计数器**

- 安装包（`avc-install-*`）与升级包（`avc-upgrade-*`）早期都读写同一个文件
  `data/pack-version.json`。
- 同一天里**交替打包**时，两者会互相吃掉对方的序号：

  | 步骤 | 操作 | 结果 |
  |---|---|---|
  | 1 | 发升级包 | `v21`（升级） |
  | 2 | 打安装包 | `v22`（**安装**）← 吃掉了升级包的 22 |
  | 3 | 再发升级包 | `v23`（升级）← 升级包从 21 直接跳到 23 |

  于是升级包看起来「跳号」，而后台待安装包列表里混着安装包序号，更容易看错。

### 缺陷 2：「一键升级」取的不是版本最高的包

- 按钮文案是「使用最新待安装包」，但旧实现里 `listIncoming()` **只按文件修改时间（mtime）排序**。
- 如果你**先传入新包、之后又拖进一个旧包**，按 mtime 取到的「最新」反而是那个**低版本**的包。
- 更严重的是：点「一键升级」不指定具体包时，旧实现**直接去升级源下载远端最新**，
  **完全无视**你已经放进 `upgrade/incoming/` 的本地包。

---

## 三、1.1.22 的修复内容

### 1. 序号彻底隔离

- 安装包 → `data/install-version.json`
- 升级包 → `data/upgrade-version.json`
- 两者**各自独立递增**，互不影响。
- 首次启用时会从旧的 `pack-version.json` 继承**当日**序号，避免同日重号。

**效果示例**（同一天交替打包）：

| 步骤 | 安装包序号 | 升级包序号 |
|---|---|---|
| 1. 打安装包 | **v1** | — |
| 2. 打安装包 | **v2** | — |
| 3. 发升级包 | — | **v21** |
| 4. 打安装包 | **v3** | — |
| 5. 发升级包 | — | **v22** |

安装包连续 v1→v2→v3，升级包独立从 v21 起，**再也不会互相吃号**。

### 2. 待安装包改为**按版本排序**

- 排序规则：**先比日期、再比序号**，一律降序。
- `upgrade/incoming/` 列表的**第一行，就是「一键升级」会用的那个包**。

### 3. 「一键升级」**本地优先**

- 不指定具体包时：**先用本地版本最高的待装包**；本地确实没有，才回退到从升级源下载。
- 升级任务日志会明确写出：**使用了哪个包、来自本地还是远端**。

### 4. 后台界面更直观

- 列表每行直接显示**版本号**，例如 `1.1.19 (20261012-v19)`。
- 第一行带「**最新**」标签；命名不规范的包带「**命名不规范**」提示（建议重新打包）。
- 一键升级按钮下方显示「**当前将安装：<版本>**」，点之前就能确认。

---

## 四、如何自查（1.1.22 起）

### 1. 看后台「系统升级」页

- 「本地待安装包」列表**第一行**即将被安装的包。
- 按钮下方「当前将安装：…」应与你的预期一致。

### 2. 看服务器上的序号文件

```bash
cd /www/wwwroot/你的站点目录/auto-video-cut
cat data/install-version.json    # 安装包序号
cat data/upgrade-version.json    # 升级包序号
```

两个文件的 `seq` 各自独立、各自连续递增，即为正常。

> 若看到 `data/pack-version.json`，说明系统还是旧版本，升级到 1.1.22 后该文件会被废弃。

### 3. 看升级任务日志

后台升级完成后，日志里应能看到类似：

```
使用升级包 avc-upgrade-20261013-v22.zip（本地待安装包）
```

若写的是「从升级源下载」，说明当时本地 `incoming/` 里没有可用包。

---

## 五、手动打包时的命名规则（1.1.22 起）

| 类型 | 命名 | 计数器 |
|---|---|---|
| 安装包 | `avc-install-<YYYYMMDD>-v<序号>.zip` | `data/install-version.json` |
| 升级包 | `avc-upgrade-<YYYYMMDD>-v<序号>.zip` | `data/upgrade-version.json` |

命令：

```bash
npm run pack                 # 只产安装包
npm run pack:upgrade         # 安装包 + 升级包（安装包与升级包序号各自独立）
npm run build:upgrade        # 只产升级包（增量）
npm run build:upgrade:full   # 只产升级包（全量）
```

> **注意**：`npm run pack:upgrade` 产出的安装包与升级包序号**不会相同**，这是正常的 ——
> 它们本来就应该各用各的计数器。
