Skip to content

feat(lifecycle): separate runtime and history retention #1037

Closed

Description

@hrygo

背景

session.retention_period: 168h 容易被理解为聊天历史保留时长,但运行时会话与历史内容有不同的生命周期。Worker 已释放、暂时不占用运行时资源的会话应能保留更久;同时,各类持久化数据需要清晰、可配置且可验证的清理期限。

目标

将运行时空闲回收与会话/消息历史保留拆成独立策略,并为每类持久化数据定义可配置的保留期限、归档和删除行为。删除后应立即阻止读取和恢复;后续清理失败应可查询、可重试,且不能让会话复活。

默认值

  • Worker 空闲释放:60m
  • 单轮绝对超时:30m
  • 会话归档:168h
  • 会话及单条消息内容保留:4320h(180 天)

Delivery payload、execution facts、audit facts、媒体缓存和 ACP trace 也应分别设定保留策略。

范围与安全边界

  • SQLite 和 PostgreSQL 成对提供兼容迁移、查询过滤与生命周期清理。
  • 删除在本地持久化时立即建立读取/恢复屏障,再通过持久化异步清理任务处理可重试的清理工作。
  • 提供旧数据迁移预览与显式应用;分批执行,迁移不得缩短既有保留期限。
  • 默认不保存 audit body;HotPlex 删除范围不包含已发往外部平台的消息或已有备份,恢复旧备份可能重新带回已删除数据。
  • 文档清楚解释 session.retention_period 的运行时含义,并展示普通用户可理解的数据生命周期图。

验收标准

  • 每类数据的默认值、配置覆盖、到期边界及清理行为有测试覆盖,SQLite/PostgreSQL 行为一致。
  • 未明确执行迁移前,不因新策略缩短已有记录期限或重建已删除内容。
  • 删除后读取与恢复立即被拒绝;异步清理可查询状态并支持失败重试,不阻塞或回滚本地删除。
  • 文档说明保留期限、迁移、安全边界和外部备份/平台消息的限制。

实现由 PR #1036 跟踪。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions