feat: add execution history queries and preserve bounded JSON payloads
This commit is contained in:
55
docs/reports/phase-2-execution-history.md
Normal file
55
docs/reports/phase-2-execution-history.md
Normal file
@@ -0,0 +1,55 @@
|
||||
# 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 与进程级故障验收。
|
||||
Reference in New Issue
Block a user