# 空间管理：90 天未激活产出的压缩归档

> 规则由刘新元 2026-10-21 定：**把我输出的、3 个月没有激活的数据压缩存档**，需要时按存档路径找回；每周执行一次。
> 边界：**只处理 agent 产出的交付物，不碰用户提供的原始素材。**

## 一、判据（三条同时满足才归档）

1. **范围**：`销售分析/`、`营销活动/`、`经营分析/`、`AI生成文件/`、`_tmp/`、`对外物料/`
   - 排除：`经营分析/汇报材料/`、`经营分析/产销/` 下当期归档目录、`销售分析/2026订单分析/`（ERP 导出，属素材）
2. **时间**：文件 mtime 距今 **> 90 天**（= 我最后一次修改它超过 3 个月）
3. **未被引用**：文件名不在 `工具/`、`数据/`、`脚本/` 任一目录的文件清单里
4. **是我产出的**：命中以下任一
   - `_known_outputs.txt` 显式登记；
   - `.html` 含品牌标记（`bior-brand` 或 slogan）；
   - `.md/.txt` 含「口径 / 生成 / 结论 / 数据源」；
   - `.json` 含 `generated / updated / meta`。
   - **xlsx / pptx / pdf / 图片一律必须有登记**——避免把用户素材（产品册、销售自报 PPT、财务批注表）误归档。

**为什么不用 atime**：macOS 的 atime 会被 Spotlight/备份/脚本读取刷新，实测 90 天内「mtime 与 atime 都超期」的文件为 0，atime 无法作为「未激活」判据。

## 二、归档形态

```
归档/_空间管理/
├── _manifest.json          ← 每条：原路径 / 归档路径 / 字节 / sha256 / 原 mtime / 归档时间
├── _known_outputs.txt      ← 显式登记「确认是我产出」的文件（相对路径逐行）
├── README.md
└── 2026-10/销售分析/....xlsx.gz
```

- 压缩格式：gzip（level 6），保留原目录结构；
- **先压缩、校验、再删原件**；归档后 `sha256` 与原文件一致（已验证 6/6）；
- 还原：`python3 脚本/space_restore.py --list` 查看，`--path 关键字` 或 `--all` 还原。

## 三、每周执行

| 项 | 值 |
|---|---|
| cron | `066570cb99d8` ｜ `20 3 * * 1`（每周一 03:20）｜ next 2026-10-26 03:20 |
| 脚本 | `~/.hermes/scripts/space_manage_weekly.sh` → `脚本/space_manage_archive.py --apply` |
| 推送 | 只有真正归档了文件才推送摘要；无归档静默（watchdog 模式） |

## 四、首次执行结果（2026-10-21）

- 候选 **7** 个 → 归档 **6** 个（20.7 MB → 实际释放 0.1 MB，因都是小 xlsx）；
- 归档：销售拓展部目标分解、销售仪表盘（截至4月）、工作汇报分析（1-5月 / 3-5月）、C级与全级别客户异动明细；
- 保留：`客户分析报告_2024-2026.xlsx`（仍被「货号销量 TOP10」引用，从登记表移除）。

## 五、注意

1. **回收站语义**：本目录是「冷存档」，不是删除；还原后 manifest 条目自动移除。
2. **不处理**：`数据/`（901 MB，运行期 JSON 与 ERP 原件）、`归档/`（既有归档）、`工具/`（线上页面）、`脚本/`——这些要么是用户素材，要么线上在用。
3. 新增产出若想纳入自动归档，追加一行到 `_known_outputs.txt` 即可；未登记的二进制文件默认不动。
