Files
orbit/docs/reports/phase-1.md

66 lines
4.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.
# P1 任务受理与 SDK 回归记录
日期:2026-09-17。结论:任务受理阶段已实现并通过本地真实 MySQL 回归;执行引擎和生产高可用验收仍未完成。
## 实现范围
- 凭据摘要校验、有效期/撤销、应用与命名空间启停、动作和队列范围。
- 受控 bootstrap 命令:创建应用、命名空间、初始队列与凭据,0600 新文件交付,初始化审计。
- 队列创建/查询,任务提交/单条查询/游标分页/WAITING 普通任务取消。
- 同一事务中的幂等预留、语义摘要、资源状态、持久化事件、管理审计和回执。
- 独立 Go SDK 的对应方法、类型化错误、请求身份和精确 JSON 数据。
- Markdown 接口字段、失败行为、SDK 接入、任务受理场景源码。
新增迁移 000002_task_api:业务 JSON 改为 MEDIUMTEXT + JSON_VALID,避免 MySQL 原生 JSON 对业务数字的重新编码;元数据仍使用原生 JSON。增加队列内任务创建时间及状态分页索引。初始迁移校验和保持不变。
## 环境与执行入口
本机 macOS / arm64,Go 1.27.1;Docker 隔离容器 MySQL 8.4.10,回环随机端口、随机密码、用后清理。没有连接已有业务数据库。
```sh
make test
make vet
make build
make integration
go test ./internal/jsonvalue -fuzz FuzzCanonical -fuzztime=5s
cd sdk/go
GOWORK=off go test -race ./...
GOWORK=off go vet ./...
```
Go 未全局安装时,通过 make GO=/absolute/path/to/go 指定。集成脚本支持 GO、DOCKER、ORBIT_TEST_MYSQL_IMAGE。
## 实际验证
| 场景 | 结果 |
| --- | --- |
| 初始迁移 + 前向迁移,模型字段、隔离、预算、不可变历史、dirty/checksum 防护 | 通过 |
| 16 个并发请求共用一个提交键 | 1 次创建、其余复用;同一任务,受理事件和提交审计各 1 条 |
| 首次响应未被调用方确认后的原样重报 | 返回原任务与原回执;deduplicated=true |
| 字段顺序、1 与 1.00 等价;同键不同内容 | 等价请求复用;不同内容 409 |
| 9007199254740993、大整数和多位小数 | 提交、GET、缓存回执不损失数字精度 |
| 错误秘密、过期、撤销、应用/命名空间禁用 | 拒绝 |
| 跨命名空间、只读动作、队列范围 | 拒绝对应越权访问 |
| 未知/重复/别名字段、非法 Unicode、超大 body、过期时间、分页上限 | 拒绝且不留下成功幂等预留 |
| 游标分页 | 无重复项;不带业务 payload;更换过滤条件后游标无效 |
| 两个不同取消键竞争同一版本 | 1 个成功、1 个 409;取消审计 1 条,终结事件 1 条 |
| 同一取消键重复确认 | 原版本仍能取回原取消回执,不重复追加历史 |
| 注入审计 INSERT 失败 | 503;任务仍 WAITING/revision=1;事件和预留整体回滚;HTTP 不泄露 SQL 错误 |
| 初始化交付失败 | 应用、队列、凭据全部回滚 |
| 已取消 context 提交 | 不提交 |
| SDK 重定向、错误解析、精确 revision/JSON、写操作不静默重试 | 通过 |
| 真实 CLI → 服务进程 → 独立 SDK 示例 | alive/ready;duplicate=true;最终 CANCELLED/revision=2 |
| JSON 规范化模糊测试 | 一次约 20 万输入执行,未发现规范化不稳定;不等同于完整形式化证明 |
集成测试会主动制造一条 UNAVAILABLE 日志以验证审计失败回滚,该日志是预期结果。实际回归曾发现可空 SQL 结果直接扫描到 json.RawMessage 的兼容问题,已改为先扫描 []byte,再赋给响应 DTO,并由受理与查询测试覆盖。
## 尚未验证或未实现
- P1 没有 Worker、WebSocket、自动执行、延时扫描、重试扫描或定时计划;任务不会自行完成。
- 取消仅覆盖 WAITING 且非流程所属任务;运行中取消、未知结果核查按 P2/P5 完成。
- 队列并发/速率配置已保存,尚未启动执行限流;整体 API 配额与背压在后续阶段。
- 凭据轮换/管理 API、数据清理、完整监控、备份恢复在后续阶段。
- “响应未确认重报”当前验证为重复发送已经提交的请求;未注入真实网络断路或数据库提交 ACK 丢失。
- 未运行生产拓扑、复制切换、跨故障域恢复或容量压测。测试耗时不作为吞吐/延迟指标。
- SDK 尚未发布版本,代码保存在本地开发分支,当前报告不代表远端发布或生产上线。