Files
go-sip/docs/evidence/sqlite-cleanup-v0.1-local.md
T

5.0 KiB
Raw Blame History

SQLite cleanup v0.1 本地迭代记录

范围与状态

  • 开发分支:feat/sqlite-cleanup-v0.1;首期开发尚未全部完成。
  • 用户确认:仅本项目内部数据保留周期调整,不新增 execution_id,源 event_id(包括 numberID)原样回传;SaaS 如何处理再次返回的同 ID 结果不在范围内。
  • 共享合同固定 ef3009d,make contracts-update 的 43 个 JSON 检查与 8 项合同测试通过;接口字段、消息类型、路由、共享文件及 submodule 指针不变,没有共享发布。
  • 没有合入或推送本项目 main、部署、操作现存运行数据库/恢复目录、退役主机 .approved、拨号、抓包或调用真实 AI/OSS。

已完成的分批验证

Agent 永久标记退役(f07bf90)

  • 先新增并运行反例,原实现因创建 .approved、依赖旧标记及完成后不允许重用而失败;删除相关生产读写代码后通过。
  • 验证同身份活动期间不能重叠执行,结束后可再次执行;旧 .approved 文件/目录不读取、不改写、不删除,新运行不重建该目录。
  • 仅在临时目录验证私密备份字节、长度和 SHA-256 一致后删除准确标记路径,相邻会话、.results、.executions、录音、上传恢复、锁及 Dispatcher 数据均保留。
  • go test -race ./internal/rpc ./internal/agent ./internal/store ./internal/dispatcher 通过。

SQLite 实时清理

  • 新增测试先因缺少清理入口失败,实现后全部通过。
  • 已派发呼叫需要已确认终结、通过现有结果 RPC 验证后持久提交的结果,以及派发回执、最终结果各自的 MQ publisher confirm。结果提交之后没有额外可能失败的业务验收步骤;不增加第二次 Agent 确认,不把 RPC 响应的网络到达或 MQ confirm 当作 SaaS 应用收讫。
  • 删除事务重新检查类型、源 ID、归属、号码、线路、冻结快照及上传结果;矛盾证据保留并报错。SQLite 结构仍为 4,没有新表或迁移。
  • 未发起拒绝仅清理已确认拒绝;原始拒绝文件仍须由后续文件收尾步骤保护其回执。活动、pending、dispatching、dispatched、unknown、任一确认缺失均保留。
  • stopped 的取消记录逐条事务、分批处理;单条失败不阻止其他记录,停止回执到剩余取消/待拨记录清完后才删,任务停止状态不删。205 条取消记录的批次、取消中断和 SQL 故障恢复测试通过。
  • 持有待拨指令或原派发调用期间排除清理;重新核对缓冲指令,停止/删除/替换后的旧批次不再拨号。极速终结与原派发返回并发时,先完成原调用再清理。
  • MQ publisher confirm 后触发清理;清理故障记录身份与原因,不作为业务准入故障返回。
  • 原 event_id 清理后可再次接纳、执行和回传;只删除本通数据,共享配置和任务状态保留。报告的是删除的逻辑行/正文字节,不声称 SQLite 文件立即变小。
  • go test -race ./internal/store ./internal/dispatcher ./internal/rpc 通过。

已交付录音文件

  • 先添加反例:原逻辑不能读取音频已删但 info.json 仍为 delivered 的合法中间状态,且不会删除已交付文件;实现后通过。
  • 仅持久 delivered、上传成功回执和原身份/长度/校验和等信息有效、且原事件无未完成 .results 引用时删除。prepared、ready、end_pending 引用都保留原恢复文件,引用完成后可以继续收尾。
  • 依次删除本条 recording.wav、同步目录、删除 info.json、同步并删除准确且空的叶目录;共享父目录、.results、未知侧文件与 OSS 对象不删除。信息或叶目录删除失败保留/恢复 delivered 依据,下次启动只补删除,不申请授权、PUT 或重报。
  • delivered 且原音频已经缺失时,只放行这一已确认删除的中间状态;其他状态缺音频仍报错。原校验和严格保持有效的小写 SHA-256,上传回执、长度和身份校验不弱化。
  • 同一录音跨不同 recovery 实例使用临时按路径互斥;结果引用写入/确认与删除协调,锁使用结束即移除,不形成永久身份历史。并发实例仍只有一次 PUT、一次回报;完成后不存在该记录,后续直接调用明确返回不存在而非虚构已完成历史。
  • 既有恢复扫描能续处理 delivered 中间状态,避免清理后同次遍历把已删除音频误报成孤立文件;单条坏目录不妨碍其他合法记录。没有新增十秒全目录清理任务,既有恢复调度保持原用途。
  • 信息/目录删除失败后重启、未完成引用、无音频的坏回执、未知文件、跨实例并发及互斥清退测试通过;go test -race ./internal/agent ./internal/rpc ./cmd/sip-go-agent 通过。

尚待完成

拒绝原始文件的准确关联与续处理、午夜补扫,以及全量检查、隔离 MQ/HTTPS/mTLS、覆盖率和增长验收。上述局部验证不代表首期全部完成,不代表真实 SaaS、通话或生产验收。