Files
go-sip/docs/evidence/f03-local-task-discovery-v0.2.md
T

23 lines
3.6 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 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` 撤销归属,410 `cursor_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 账户;Dispatcher `configure=^$`,未声明、绑定或删除队列。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/configread` 74.9%、`internal/dispatcher` 66.0%、`internal/store` 66.0%;`internal/mq` 单独不带 RabbitMQ 集成时仅 1.7%,不能声称所有模块已满足 65%。F09 的完整矩阵与覆盖率门禁仍需另行执行。
## 未完成边界
F04 的任务/线路时段与最后拨号门禁、F08 最终结果/切换、F09 全矩阵及真实 SaaS 兼容性均未由本证据签收。Mock 只能证明项目内定义与本地实现一致,不能授权任何真实呼叫、上传或云操作。