Files
go-sip/docs/evidence/20260921-mq-query-progress.md
T

3.3 KiB

MQ 查询阶段证据(mq-control 尚未完成)

已接通

  • command.query、call.query 经 Dispatcher 的 MQ 消费入口进入严格v2校验,按D身份、原租户及实际路由检查归属。
  • 新增006_mq_queries.sql:租户绑定与查询去重记录;查询身份、固定响应和outbox在同一事务保存,成功持久化后才允许ACK。
  • 重复查询返回原响应身份及原快照;已发布响应可恢复为待发送,正在发送的响应不被重置。重启及请求期限过后重复投递仍取原决定,不重新计算快照。
  • 过期的新请求保存明确拒绝;相同消息身份但不同内容、不同D或租户绑定冲突不被接受。
  • 命令快照读取实际收件记录及已记录的aggregate version,不用固定版本填补缺失证据。
  • 呼叫快照只收集同D、同租户、同call_id的事实,包含已批准的状态、尝试事件、文字事件、uploaded/failed录音事件及四类投递计数。
  • 超出256 KiB预算返回有界的rejected/unavailable响应,不截断成貌似完整的快照,不进入无限重投。合同没有include或分页字段,没有添加它们。

校验与错误

  • 新增嵌入式Schema loader及编译结果复用;跨文件引用只取指定契约包,外部URL、跨版本和越界文件名被拒绝,不访问网络。
  • 新服务消息使用已批准字段message_type,不是message_kind或request_type。
  • 非法UTF-8曾被当作可重试错误;真实失败测试后改为明确的无效消息错误分类,避免反复回队。
  • 当前全局contracts.SourceCommit及执行/事件流程统一固定为 v1;新查询同样使用该唯一契约包,不尝试旧协议回退。

实际测试

  • Schema离线引用、六类服务消息正例、额外字段/旧版本拒绝。
  • 查询存储失败回滚:响应、去重记录、租户绑定均不部分提交。
  • 查询重复、异内容冲突、重启、过期,以及缺失实际版本证据。
  • 呼叫事实集合及投递计数;大快照拒绝;未批准include字段拒绝。
  • 本机RabbitMQ真实命令查询往返:请求队列→Dispatcher→SQLite/outbox→指定SaaS队列;验证persistent、路由、租户、D身份和correlation_id。重复请求恢复同一响应ID。
  • 该测试使用本Agent创建的本机容器及专用go-sip-query-tests vhost,避免和MQ包测试抢取同一个固定SaaS队列。开关为GO_SIP_LOCAL_QUERY_MQ_URL,仅接受loopback。

最新全仓验证:go test -race -coverprofile=... ./...、vet、构建、格式及diff检查通过;同时启用两个本地MQ测试入口,真实外部集成开关清除。旧v1契约与704652b无差异。

覆盖率 36.9%,仍未达到65%。临时日志/覆盖率:/tmp/go-sip-mq-queries.hhyp37/。

未完成

旧HTTP业务实现、启动流程、CLI参数、环境字段及部署样例已删除;TestDispatcherHasNoBusinessHTTPFlags先失败后通过,删除后全仓race/vet/build及旧v1无变更检查通过,日志/tmp/go-sip-http-removal-tests.log。未保留兼容入口。

执行/控制/整体补传、AI配置/授权请求响应、全部旧MQ路由/信封替换、所有权断连后的准入联动,以及新上传事实交付仍待完成。本证据不关闭mq-control或其他任务,不代表完整业务、本地部署验收或真实供应商通过。