Files
go-sip/docs/evidence/mq-control-recovery.md
T

29 lines
3.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# MQ 控制恢复:本地增量证据
本记录不关闭 W 项、不代表外部供应商或生产验收。总体目标仍为 3/6。
## 已验证
- Dispatcher 在最后执行准入前保存 Agent 身份及完整执行绑定;控制屏障与执行请求按顺序处理。
- 控制目标、原请求和中间回执持久保存;仅收到 Agent 的 APPLIED 和预期的新 revision 后,事务保存最终回执及 outbox。未知结果不转为 applied。
- 常驻 Dispatcher 已接入控制处理循环;身份/租约失效时退出,退出等待循环结束后才关闭连接。
- 本地 gRPC Mock 注入“已应用但回复丢失”,恢复原控制操作、原结果,不再次执行任务。测试:`TestLocalContractBackedFlowEvidence`。
- `TestLocalMQActiveControlReplyRecovery` 实际经过本地 RabbitMQ 入站、控制 worker、gRPC Agent 和最终持久消息出站;注入已应用回复丢失及 Dispatcher SQLite 重开,重复原控制仍取得原最终回执,任务只有一个且 revision 只增加一次。
- 已占额度但尚未分配 Agent 的任务可在同一事务内完成本地控制并释放额度,不再留下永远等待远端回复的目标。已有分配或未知执行仍保留远端确认要求,不因此释放不明占用。
- Agent 使用部署 StatePath 旁的 `.executions` 文件保存控制回执和执行绑定。写入使用临时文件、文件同步、重命名及目录同步;会话文件复用同一写入方法。
- 重启后未终结执行恢复为 unknown,不恢复原许可,不因进程重启清除未知占用。新 boot、新授权会话可取得同一控制操作的原回执;请求追踪与会话字段不改变业务幂等身份,业务正文变化仍拒绝。
- 损坏、版本不支持、与现有会话文件不配套的缺失执行日志,以及持久化失败,均明确失败。持久化失败后不能以进程内缓存返回成功。
- 文件不保存会话凭据、许可令牌、上传签名 URL、录音或完整对话。
- 控制必须明确选择 drain/hangup。stop+drain 只关闭新准入,不把进行中通话改成已结束,也不能随后 resume;Mock pause+hangup/stop+hangup 模拟结束通话。非 Mock 未接媒体挂断适配器时明确拒绝 hangup,不伪造完成。测试:`TestStopDrainPreservesCallAndCannotResume`、`TestControlPolicyDoesNotInventMediaCompletion`。
测试:`TestControlReceiptSurvivesRestartAndNewSession`、`TestCorruptExecutionJournalPreventsActivation`、`TestExecutionJournalFailureCannotReplayMemoryAsSuccess`、`TestMissingExecutionJournalWithExistingSessionFailsClosed`,以及 Store 控制回执事务测试。
最近验证:RPC/Dispatcher/Store/CLI 的 race 测试、全仓 vet、构建和 `git diff --check` 通过。运行日志 `/tmp/go-sip-execution-journal-race.log`、`/tmp/go-sip-mq-control-combined-race.log`;最近构建输出 `/tmp/go-sip-mq-control-check`。这不是最终全仓验收或覆盖率达标证明。
## 尚未完成
- 非 Mock hangup 的媒体适配及与实际媒体状态的一致性;当前明确拒绝此路径,不能把 Mock 控制回执当成 Asterisk 通话状态证明。
- MQ AI 配置/实时授权、常驻调度到执行的完整运行接线与本地 MQ 双向验收。
- 重启、乱序、控制与执行竞争的完整故障矩阵;未知通话仍需实际状态核对,不自动释放或重拨。
- 全仓最终测试、至少 65% 覆盖率、统一部署诊断及当前计划/文档全面一致性。