Files
go-sip/docs/evidence/f03-local-task-runtime-v0.1.md
T

24 lines
3.3 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.
# F03 本地任务队列、发现与控制证据
## 范围与结论
F03 在单 Dispatcher、单 Agent、单 Cell、单租户的本地隔离环境通过。SaaS/management、真实云主机、供应商、SIP 拨号、生产部署与切换均未连接或验证;项目内 Mock 结果不代表外部兼容或生产验收。`contracts/upstream/v1/` 仍是外部运行基线。
## 实现事实
- Dispatcher 使用 MQ v3 运行时。任务队列和控制队列由 SaaS 预建;Dispatcher 只被动验证/消费和停止消费,不声明、绑定或删除这些队列。RabbitMQ 集成测试将 provisioner 与 Dispatcher 分成两个身份;Dispatcher 的 `configure` 权限正则为 `^$`,直接 `QueueDeclare` 被拒绝,而被动连接、消费、排空和结果发布通过。CLI 不再提供 `--tenant-key`/`--consume` 自建租户队列路径,旧 tenant-queue consumer 与旧 per-call control worker 已移除。
- 任务发现读取完整分页结果;不透明游标/页 token 校验连续性,完整发现窗口及任务归属在同一事务持久化后才推进水位。无游标时取完整快照,客户端检测到游标/页状态失效时走完整快照恢复。
- 启动和轮询仅在任务归属、running 状态、有效配置快照均满足时订阅相同的 SaaS 预建任务队列。pause 先持久关闭接纳并停止消费者,保留积压;resume 重新读取权威 running 状态后恢复消费原队列;stop 先持久终态屏障并停止消费者,再读取权威 stopped 状态。
- stop 将权威状态/版本先持久化但不写回执,随后被动排空并 ACK 未接纳积压,最后才事务写入 control receipt/outbox。排空失败时无回执,重复控制可继续排空并在成功后写入原任务结果,不产生未接纳命令回执或拨号。
## 验证记录
`./scripts/acceptance-local.sh` 通过。该入口检查格式、契约哈希与 Schema 正反例、`go mod verify`、`go test -race ./... -count=1`、`go vet ./...`、构建,并运行本地 RabbitMQ 集成测试。
- 本地契约:4 个 Schema 有效;正例数量为 config-read 17、task-discovery 13、command-next 6、call-result 4;四类负例均拒绝;19 个 manifest 文件 SHA-256 校验通过。
- 覆盖率:`go test ./internal/configread ./internal/dispatcher ./internal/store -cover -count=1` 分别为 76.8%、66.2%、65.3%。带本地 RabbitMQ 的 `-race -cover -tags=integration` 测试中,`internal/dispatcher` 为 66.4%,`internal/mq` 为 55.5%。项目 F09 的完整覆盖率门禁仍待 F09 统一验收,不在此处冒称已通过。
- RabbitMQ 使用本机已缓存的 `rabbitmq:4.1-management-alpine` 镜像和临时 loopback 容器;集成 fixture 由独立 Mock SaaS 身份预建并清理队列。无 `configure` 权限的 Dispatcher 身份不能声明队列,但 V3 MQ 与 Dispatcher 端到端测试均通过。脚本在镜像未缓存时 fail-closed,不隐式拉取镜像。
- 控制测试覆盖暂停保留积压、权威状态后恢复、已停止任务不能恢复、停止排空前不写回执、排空失败后重试,以及无归属任务的拒绝回执。发现/运行时测试覆盖完整快照/游标持久化、队列接纳资格和运行时缺配置失败关闭。
本证据只证明本地项目内契约与隔离 Mock。未访问真实 SaaS/management、外部 MQ、云、供应商或 SIP 线路;未发起真实呼叫、上传或切换。