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

38 lines
3.3 KiB
Markdown

# 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或其他任务,不代表完整业务、本地部署验收或真实供应商通过。