Files

历史导出归档生命周期与安全清理审计

结论

历史导出归档从“只进不出”的记录池升级为管理员可控、可预演、可保护、可审计的生命周期工作区。清理不再由列表长度触发,也不会在 jobs.json 超过 500 条时静默丢弃旧任务。

本轮解决的问题

  1. 取消持久化阶段的 500 条静默截断550 条归档任务重启后仍完整可检索。
  2. 新增 30 / 90 / 180 / 365 天清理策略预演;只选取已归档、已结束且未受保护的任务。
  3. 单批永久清理最多 500 条,候选按最早归档优先;预演令牌失效后必须重新确认。
  4. 支持为单个归档任务设置“长期保留”,强制填写原因,并记录操作者和时间;可恢复参与清理。
  5. 清理回执独立写入 cleanup-audit.json,保留执行人、账号范围、策略、截止时间、清理量、保护量、文件影响和候选摘要。
  6. 清理提交先持久化独立审计,再删除任务索引;任务索引写入失败时恢复任务和审计内存状态,并回滚审计文件。
  7. 已过保留期的导出文件在状态刷新时同步删除,避免只清空文件路径而留下孤儿文件。
  8. 桌面维护弹窗由 480px 提升为 760px 工作区;内容区独立滚动、操作栏固定。移动端保持 390px 单列、2 × 2 摘要和固定底栏。

权限与安全边界

  • 永久清理、预演、清理审计和长期保留设置仅管理员可用。
  • ownerScope=mine 只处理当前持久化主体创建的任务;all 明确表示全部可审计账号。
  • 生成中任务不会进入候选;长期保留项永远排除在当前批次之外。
  • 归档本身不删除任务;永久删除必须重新进入维护工作区、预演并二次确认。
  • 本轮浏览器复核没有执行真实清理或修改真实保护状态;候选、保护、确认和回执状态由集成测试覆盖。

视觉证据

  • 01-before-archive-desktop.png:优化前仅有审计归档列表,没有生命周期维护入口。
  • 02-after-cleanup-preview-desktop.png1280 × 720 下的 760px 安全清理工作区。
  • 03-after-cleanup-preview-mobile.png390 × 844 下的单列内容区、2 × 2 影响摘要与固定操作栏。

验证

  • 历史页面专项51 / 51 通过。
  • Web 正式套件78 个文件、517 / 517 通过。
  • API 全量测试:通过。
  • 根生产构建Web、开放门户和 Go 二进制全部通过Web 构建门禁为 web_build_gate=ok
  • 浏览器已检查 1280 × 720 与 390 × 844没有横向溢出仅保留 Semi UI 已知的 findDOMNode 开发警告。

仍需继续验证

  • 生产环境自动调度清理的审批窗口、失败重试和运行告警。
  • 多实例同时清理时的分布式互斥与存储事务策略。
  • RAW 分类索引物化的收益,以及通知投递幂等重试。