23 lines
3.6 KiB
Markdown
23 lines
3.6 KiB
Markdown
# 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 只能证明项目内定义与本地实现一致,不能授权任何真实呼叫、上传或云操作。
|