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

4.3 KiB
Raw Permalink Blame History

P2 执行历史与大载荷回归

日期:2026-09-17。本轮完成尝试及证据查询,P2 的完整 WS Schema 与进程级故障阶段验收仍待完成。接口与 SDK 模型均提供中文职责和字段注释。

实现范围

  • 四个 HTTP GET 与对应独立 Go SDK 方法:尝试列表/详情、证据列表/详情。
  • 每次请求重新校验凭据、命名空间、tasks:read、队列范围及父子关系;详情不暴露执行秘密或内部摘要。
  • 列表省略业务正文,以执行代次或时间/ID 稳定分页;详情提供原结果和证据内容,两者分开。
  • 新增 000004 前向迁移,为证据查询增加四列索引;既有迁移不变,仍为 32 个持久化模型。
  • 新增可运行 examples/history,演示矛盾回报被保留为证据而不覆盖权威结果。

完整接口、字段、错误码和 SDK 对应方法见 执行历史,运行步骤见 SDK 手册。

修复与验证过程

大载荷回归发现默认 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 故障回归使用受信任测试证书。

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 与进程级故障验收。