3.6 KiB
3.6 KiB
F03 v0.2 单次任务发现:本地 Mock 验证
范围:单 Dispatcher、单租户、预建任务队列;仅本地 Mock HTTP 与隔离 RabbitMQ。docs/evidence/f03-local-task-runtime-v0.1.md 中的分页发现结果只作历史,不用于本版签收。contracts/upstream/v1/ 外部运行基线未改,真实 SaaS/management、云、SIP 线路、拨号和生产均未验证。
合同与实际改动
docs/thirds/v0.2.md§2.5、docs/contracts/task-discovery-v0.2-proposal.schema.json、六份 v0.2 正反例/错误例和docs/contracts/local-contract-manifest-v0.2.json:完整快照或增量每次只返回一个响应,最多 256 项;不含queue、分页 token、snapshot_id;空变更next_cursor等于请求after,removed撤销归属,410cursor_expired重取全量。v0.1 Schema 和示例留在文档校验中供历史核对,但运行时代码只加载 v0.2 任务发现 Schema。internal/configread/client.go:验证完整响应、Dispatcher/租户绑定、重复 task ID、256 项界限和空变更游标。410 仅在游标过期时拉取一次全量;其他失败不推进游标,不把 HTTP 失败误当无变更。internal/store/local_v01_discovery.go、internal/store/migrations/015_local_v02_task_discovery.sql:同一事务写入完整响应及 SHA-256、任务归属和游标;主动任务总量超过 256、版本回退或身份冲突时事务回滚。队列名称/路由按 D+task ID 在本地推导;仅保留任务归属及未决执行,旧分页游标/页存储被移除,启动后须重新获取完整快照。SaaS 仍独占队列创建、绑定和退役。internal/dispatcher/task_runtime_v3.go:发现失败即持久关闭新准入并停止任务消费;成功获取完整响应后才重新开放并核对消费者。控制通道不因任务发现失败而关闭。暂停保留积压、恢复原队列、停止先持久屏障后静默 ACK 的既有行为不变。
本地验证事实
python3 scripts/validate-local-contracts.py:旧 v0.1 历史合同继续可校验;v0.2 草案 26 个正向验证、4 个负向验证、12 个 SHA-256 文件通过。Schema 拒绝旧queue/分页字段与 257 项响应。go test ./... -count=1与./scripts/acceptance-local.sh通过:包含格式检查、go mod verify、Schema/hash 校验、go test -race ./... -count=1、go vet ./...、go build ./...和本地 RabbitMQ 集成。RabbitMQ 使用独立预建队列账户和 Dispatcher 账户;Dispatcherconfigure=^$,未声明、绑定或删除队列。Mock 使用 v0.2 发现响应;此结果不是 SaaS 应用收讫或真实队列授权验收。internal/configread/discovery_v02_test.go:单次全量/增量、空变更游标、410 全量恢复、拒绝旧 queue/page 字段及 256/257 边界。internal/store/local_v01_discovery_test.go、internal/dispatcher/task_runtime_v3_test.go:完整响应/归属/游标同事务持久化、超限回滚、失效期间拒新、任务消费停止、恢复后重开、410 全量快照退役旧任务;任务队列名称由约定规则推导。- 本地非集成覆盖率:
internal/configread74.9%、internal/dispatcher66.0%、internal/store66.0%;internal/mq单独不带 RabbitMQ 集成时仅 1.7%,不能声称所有模块已满足 65%。F09 的完整矩阵与覆盖率门禁仍需另行执行。
未完成边界
F04 的任务/线路时段与最后拨号门禁、F08 最终结果/切换、F09 全矩阵及真实 SaaS 兼容性均未由本证据签收。Mock 只能证明项目内定义与本地实现一致,不能授权任何真实呼叫、上传或云操作。