Files
orbit/docs/reports/phase-2-execution-history.md

56 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.
# P2 执行历史与大载荷回归
日期:2026-09-17。本轮完成尝试及证据查询,P2 的完整 WS Schema 与进程级故障阶段验收仍待完成。接口与 SDK 模型均提供中文职责和字段注释。
## 实现范围
- 四个 HTTP GET 与对应独立 Go SDK 方法:尝试列表/详情、证据列表/详情。
- 每次请求重新校验凭据、命名空间、tasks:read、队列范围及父子关系;详情不暴露执行秘密或内部摘要。
- 列表省略业务正文,以执行代次或时间/ID 稳定分页;详情提供原结果和证据内容,两者分开。
- 新增 000004 前向迁移,为证据查询增加四列索引;既有迁移不变,仍为 32 个持久化模型。
- 新增可运行 `examples/history`,演示矛盾回报被保留为证据而不覆盖权威结果。
完整接口、字段、错误码和 SDK 对应方法见 [执行历史](../api/execution-history.md),运行步骤见 [SDK 手册](../sdk/README.md#6-查询执行历史与证据)。
## 修复与验证过程
大载荷回归发现默认 JSON HTML 转义会将合法的约 240 KiB `<>&` 文本放大至约 1.4 MiB,超出 HTTP/WS 限制。服务端 JSON 响应、WS 帧、提交幂等回执与 SDK 传输现在使用关闭 HTML 转义的编码器;仍使用 JSON 通道,不允许把结果直接嵌入 HTML。没有放宽消息上限,没有改变幂等语义摘要算法或重写历史数据。
首轮新测试还发现测试用例重复使用解码结构而残留被省略的字段,已改为每页新建结果;随后真实 MySQL 捕获尝试详情 JOIN 错用了 Worker 实例列名,已修复为实际表字段。修复后完整集成脚本重跑通过,没有跳过失败项。
## 环境与入口
macOS arm64、Go 1.27.1、Docker MySQL 8.4.10,WS 依赖锁定 coder/websocket v1.8.15。数据库使用随机凭据和回环随机端口,结束删除临时容器。真实 Orbit 进程提供 HTTP/WS,已有 WSS 故障回归使用受信任测试证书。
```sh
make test
make vet
make build
make integration
cd sdk/go
GOWORK=off go test -race ./...
GOWORK=off go vet ./...
```
## 本轮通过的回归
| 场景 | 实际验证 |
| --- | --- |
| 执行尝试历史 | 同一任务第一次未开始即过期,第二次获批并成功;逆序分页、次数、时间、归属和精确结果正确 |
| 追加证据及去重 | 未开始报告保留 NOT_STARTED;成功后矛盾内容保留 RESULT_CONFLICT,同消息重报只出现一次 |
| 同时间戳分页 | 一条 SQL 插入同微秒的两条受控证据,逐条翻页无重复或遗漏 |
| 访问控制 | 四个路由覆盖跨命名空间、队列越权和错配父资源;缺失动作权限 403、撤销凭据 401;不返回秘密和摘要 |
| 输入边界 | 非法/过长游标、跨任务/尝试/类型复用、重复/未知查询参数、错误编码、非法 ID 和分页上限被拒绝 |
| 列表与详情 | 空 items 为 [];摘要不含 result/payload;详情不丢失超过 2^53 的整数或高精度小数 |
| 真实大载荷链路 | 约 240 KiB `<>&` JSON 经提交、同键重复回执、WS 派发、开始、结果上报、详情与冲突证据读取保持内容;任务完整输入+结果仍在 SDK 响应限制内 |
| SDK 契约 | 四个 GET 路径、授权头、URL 编码、uint64 字符串、精确 RawMessage 和本地参数拒绝;独立 module 不引用服务端 |
| 迁移 | 全部迁移应用成功,证据索引四列实际存在;既有约束/不可变证据/迁移校验回归继续通过 |
| 既有链路 | 模型、任务事务、Worker、WSS、自动续租、ACK 丢失与断网恢复、有界退出和并发回归全部通过 |
| 命令行示例 | 健康、任务受理、底层 Worker、自动 Worker、执行历史五个例子均在真实服务上运行通过 |
## 当前边界
查询是当前快照,不是跨页一致快照或完整事件/审计导出。尝试详情显示当前/最后归属会话,不重建全部归属历史。只读结果不授予执行权,EVIDENCE_ONLY 不构成人工裁定。
本轮没有完成旧数据转义重编码迁移、策略重试、人工恢复、运行中取消、可靠事件订阅、数据库故障转移或容量测试。大载荷测试使用真实 WS,已有 WSS 回归另外覆盖 TLS 和故障恢复;不将这些结果描述为多主机生产高可用验收。下一步继续 P2 协议 Schema 与进程级故障验收。