# 保留、历史与安全删除

> 核验版本：1.1.0；通道：stable；文档 ID：operations.retention

保留是由主机运维人员修改、会**不可逆删除数据**的配置。项目角色不能提高部署保留。缩短任何期限前，应取得数据负责人/合规批准、导出必要证据并验证可恢复备份。所有示例未执行，本页不授权运行清理。

## 默认生命周期

| 数据 | 默认 | 实际清理边界 |
| --- | --- | --- |
| 执行摘要 | 90 天 | 按创建时间批删；工作流子行随父级联删除 |
| PostgreSQL stdout/stderr/structured 行 | 14 天 | 删除整个旧**月分区**，不是精确逐行 14 天 TTL |
| 执行/工作流 I/O | 14 天 | 独立清空负载，摘要继续保留 |
| 已结束异步任务/结果 | 7 天 | 已结束行；未来排队任务不是简单按已完成结果清理 |
| 聊天消息账本 | 90 天 | 消息历史行 |
| 聊天 peer context | 180 天无活动 | 按最后活动，不是账号创建时间 |
| 控制面审计 | 365 天 | 平台 audit_logs，不是外部业务审计 |
| 文件读取审计 | 90 天 | 平台访问行 |
| 幂等键/已存响应 | 24 小时 | 去重与重试响应窗口 |
| 脚本旧版本 | 50 个替代版本，范围 1..1000 | 编辑时按每脚本数量裁剪，不是天数 |
| 发布 revision | 20 个 | 发布时裁剪，准确变量 VIAT_PUBLISH_REVIAT_KEEP |

类型、零值和作用域见[完整保留变量](../configuration/observability.md)。没有通用的“0 永远保留”：0 天可在下次清理删除几乎所有旧数据；间隔 0 虽可解析，却不能用于定时器。法律保全应使用批准的外部证据流程，不要猜无限值。

## 周期与粒度

默认每 24 小时清理。启动会维护当前与未来五个月 PostgreSQL 行日志分区；破坏性清理等待完整周期，不是每次启动立即清空。每阶段失败记录后继续。多实例协调集群任务，但依赖幂等处理，不是不可变 exactly-once 保证。

与截止日期相交的整月分区仍须保留，因此行日志可能比配置天数长。负载可早于摘要消失，null 不表示原请求为空。执行摘要删除也会移除依赖的工作流步骤。PostgreSQL DELETE 后空间复用/文件缩小由 vacuum/存储管理决定，不保证立即返还操作系统空间。

关闭 `VIAT_RETENTION_ENABLED` 也会停掉该循环承担的分区维护和 OAuth/session/ticket/MFA/登录失败等过期清理，没有替代维护时不能把它当安全无限保留。上传暂存及其他专门清理独立。不要手工删活跃分区或 truncate 日志父表来“解决”磁盘满。

## 规划与应用

1. 盘点 PostgreSQL、ClickHouse/Loki、业务库、对象存储、容器日志、备份和导出。删平台行不会删除外部副本。
2. 为每类定义批准的最短/最长保留，考虑聊天和负载个人信息、审计证据以及客户端幂等重试窗口。
3. **降低前**导出证据并记录备份恢复点；清理后的快照无法找回已删数据。
4. 修改部署变量，Compose 须显式传入，再按维护计划重启。更小值会作用于下次清理时已超龄的历史行，不只是新数据策略。
5. 监控清理日志和数据库磁盘/行数/分区趋势。排查权限、锁、DDL、存储错误，进程健康不表示清理成功。
6. 抽查旧/新记录及外部存储，保留批准记录，临时导出文件按证据政策处理。

下列是**未执行策略示例**，不是通用建议：

```dotenv
VIAT_RETENTION_EXECUTION_DAYS=90
VIAT_RETENTION_PAYLOAD_DAYS=7
VIAT_RETENTION_LINE_DAYS=14
VIAT_RETENTION_AUDIT_DAYS=365
VIAT_RETENTION_IDEMPOTENCY_HOURS=24
VIAT_RETENTION_INTERVAL_HOURS=24
```

缩短幂等窗口后，旧键/响应被删，迟到重试可能重新执行。缩短异步结果期限后，客户端可能取不到完成结果。客户端行为应与窗口一致，需长期保存的输出要写到持久业务存储。

## 外部系统与误删恢复

ClickHouse/Loki TTL、业务 PostgreSQL 审计、S3 生命周期/版本、文件字节、容器日志和备份均是**运维自行制定的策略**。外部秘密可能在资源修改后保留历史值，应与数据库引用生命周期协调。Rust 共享产物 GC 默认关闭，未掌握完整 live-set 时不可跨混合架构/工具链安全清理。

误缩短期限后再提高不能找回数据。按事故批准控制停止进一步破坏性清理，保留现场，先按[备份恢复](backup-restore.md)恢复到**隔离环境**。经审阅只协调需要的数据；直接用旧库替换生产会丢新写入，并可能复活已撤销凭据或有副作用的排队任务。
