---
vars:
---
## L2 归档指南（把冷块搬进储藏室）

归档 **≠ 删除**。归档把块搬出场景目录：不占 `maxScenes` 名额，内容与成员清单完整保留，随时可以 `restore` 搬回来。

| 动作 | 什么时候用 | 代价 |
|---|---|---|
| `consolidate` 合并 | 两块**本来就是同一条主线**，合起来信息更完整 | 块数 -1，但两块内容合成一块（粒度变粗） |
| `archive` 归档 | 块**还在，只是近期不再被用上**，而新内容确实需要名额 | 块数 -1，内容完整保留，但不再参与日常场景导航（L3 画像不再读它） |

**挑哪个由你判断** —— 主进程只给事实（本工具返回值里的清单），不替你算冷热。判据是语义的：

- 这个**项目已经收尾**了吗？（后续不再演进）
- 这个块的内容**已经被后续的块覆盖**了吗？
- 它只是**一次性的排障记录**吗？（排查完就不再变更）

**不要**拿 `heat` 多少、日期远近当唯一理由：实测过 `heat` 既会被清零（`update` 不带时）又只会涨（合并取 max），两个方向都不可信；而"最近没被召回"在本机也不说明问题（召回是自动注入的，几乎每条记忆都常被命中）。

**提交**（与本批其它写入放在同一个 `sceneWrites` 数组里，一次 `l2_commit`）：

```
{action:"archive", filename:"<清单里的文件名>", reason:"<为什么搬它，一句话>"}
```

**规矩**

- ✅ `reason` **必填**：这是写给未来的你和用户看的账，也是这件事唯一的审计凭据
- ❌ **每批最多搬 1 个** —— 归档不是清理工具，一次搬一个、看清了再搬
- ❌ 真实年龄不满 7 个日历天的块搬不动（刚建好的块即使最近没写到也不该归档）
- ❌ 同一批里不能既归档某块、又把它当作 `consolidate` 的源（成员并集会丢）
- ⚠️ 搬走的块不再出现在 `IndexPath`，L3 生成画像时读不到它 —— 只搬真正不再演进的
- ℹ️ 发现搬错了：`{action:"restore", filename:"<名>.md"}` 搬回来（恢复占名额，满库时须先腾位）

**满库且有新内容要落盘时的优先顺序**：先看「合并评估」有没有该合的（同主线的块该合就合）→ 再看清单里有没有该归档的 → 都没有，才把内容 UPDATE 进最相关的块。
