# 变更目录迁移规范（archive / verify-issue）

## 核心规则

归档与验收回退**必须**使用 shell `mv` 整目录迁移，**禁止**以下替代方式：

- `cp -r` / `rsync` / IDE 复制后保留源目录
- 只更新 `manifest.files` 中的路径前缀而不移动磁盘目录
- 在 `归档/` 新建 stub 目录、在 `进行中/` 留 manifest 副本

同一 `<YYYYMMDDHHMMSS>-<中文名称>` 在任意时刻**最多只应存在于一处**：`knowledge/变更/进行中/` **或** `knowledge/变更/归档/`。

## `/kb-archive` 步骤 8

```bash
mv "knowledge/变更/进行中/<YYYYMMDDHHMMSS>-<中文名称>" "knowledge/变更/归档/"
```

迁移后**立即**执行门禁（失败则停止后续 commit/外部 sync）：

```bash
test ! -d "knowledge/变更/进行中/<YYYYMMDDHHMMSS>-<中文名称>"
test -d "knowledge/变更/归档/<YYYYMMDDHHMMSS>-<中文名称>"
```

## `/kb-verify-issue` 步骤 2（验收打回）

```bash
mv "knowledge/变更/归档/<YYYYMMDDHHMMSS>-<中文名称>" "knowledge/变更/进行中/"
```

迁移后门禁：

```bash
test ! -d "knowledge/变更/归档/<YYYYMMDDHHMMSS>-<中文名称>"
test -d "knowledge/变更/进行中/<YYYYMMDDHHMMSS>-<中文名称>"
```

## 归档报告必填项

| 项目 | 要求 |
|------|------|
| 迁移方式 | 必须写「shell mv」 |
| 进行中已清空 | `是` / `否（阻断）` |
| 归档目录存在 | `是` / `否（阻断）` |

## 半迁移 / 重复目录修复（`/kb-repair`）

若 `进行中/` 与 `归档/` **同时**存在同名前缀目录：

| 进行中 stage | 归档 stage | 处理 |
|---|---|---|
| `acceptance_reopened` | `archived` 等 | **canonical = 进行中**；删除 `归档/` 副本（验收打回后未 mv 干净） |
| 仅 manifest stub 或空 | `archived` 且文档齐全 | **canonical = 归档**；删除 `进行中/` stub |
| 文档齐全 | 仅 manifest stub | 将完整目录 `mv` 到 canonical 侧，删除 stub |
| 两侧均完整且 stage 冲突 | — | 停止，输出差异摘要，由维护者确认 |

修复后同样执行上述门禁 shell 校验。
