test: add historical sdk compatibility rehearsal
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
# P7 协议兼容矩阵与门禁
|
||||
|
||||
验证日期:2026-09-20。本批把当前服务端、独立 Go SDK 和机器可读 WebSocket schema 的版本边界固定为可执行检查,并明确历史版本组合尚未具备证据。
|
||||
验证日期:2026-09-20。本批把当前服务端、独立 Go SDK 和机器可读 WebSocket schema 的版本边界固定为可执行检查,并补充一个可追溯历史提交的稳定任务 API 双向演练。
|
||||
|
||||
## 检查内容
|
||||
|
||||
@@ -18,3 +18,9 @@
|
||||
```
|
||||
|
||||
当前同一 checkout 的 SDK 单元/竞态测试、服务端协议测试和真实 MySQL/HTTP/WSS 集成测试覆盖当前组合。仓库尚未有正式 SDK 或服务端标签,因此“旧 SDK + 新服务端”和“新 SDK + 旧服务端”不能标记为通过;发布候选需建立至少一个带标签的旧版本 fixture 后再补两组矩阵回归。
|
||||
|
||||
## 历史提交演练
|
||||
|
||||
[`scripts/test-historical-sdk-compatibility.sh`](../../scripts/test-historical-sdk-compatibility.sh) 以 `a50d5fa` 为历史 fixture,在 Go 1.27.1 与 MySQL 8.4 一次性环境中完成稳定任务 API 的双向真实服务 smoke:旧服务端运行当前 SDK、当前服务端运行旧 SDK 均通过。完整命令、输出和边界见[历史兼容性报告](phase-7-historical-compatibility.md)。
|
||||
|
||||
该提交不是正式发布标签,且演练范围只覆盖任务受理、幂等、查询、分页和取消;Worker/Event WebSocket、流程、计划及新增接口仍未形成正式标签矩阵,不能宣称全协议跨版本兼容。
|
||||
|
||||
27
docs/reports/phase-7-historical-compatibility.md
Normal file
27
docs/reports/phase-7-historical-compatibility.md
Normal file
@@ -0,0 +1,27 @@
|
||||
# P7 历史 SDK / 服务端兼容性演练
|
||||
|
||||
验证日期:2026-09-20。该演练选取历史提交 `a50d5faac7450ea3a30406d587d9d7746990e2ed`(2026-09-17,`feat: add audited task review and linked manual retries`)作为可追溯 fixture,验证稳定任务 API 的两条方向。仓库目前没有正式 SDK 或服务端 release tag,因此本报告不能替代正式标签矩阵。
|
||||
|
||||
## 执行方式
|
||||
|
||||
```sh
|
||||
ORBIT_COMPAT_OLD_COMMIT=a50d5fa ./scripts/test-historical-sdk-compatibility.sh
|
||||
# 或
|
||||
make mysql-compatibility
|
||||
```
|
||||
|
||||
脚本使用 Go 1.27.1 容器构建历史与当前的 `orbit`、`orbit-migrate`、`orbit-admin`,使用一次性 MySQL 8.4 数据库分别初始化两套 schema,再启动真实 HTTP 服务运行 `sdk/go/examples/tasks`。任务提交、重复幂等、查询、分页和取消都通过真实服务完成;数据库、容器、临时凭据和二进制在退出时清理。
|
||||
|
||||
## 实际结果
|
||||
|
||||
```json
|
||||
{"historical_commit":"a50d5fa","old_server_current_sdk":"passed","current_server_old_sdk":"passed","scope":"stable task API smoke; not a formal release-tag matrix"}
|
||||
```
|
||||
|
||||
两条方向均得到 `duplicate=true`、`listed=1`、`final_state=CANCELLED`、`revision=2`。当前 SDK 对历史服务端明确设置 `ORBIT_SKIP_SOURCE=1`,因为任务来源查询是历史 fixture 之后新增的接口;正常当前版本示例默认仍会校验来源接口。这个开关只用于兼容性 smoke,不属于生产接入配置。
|
||||
|
||||
## 结论与边界
|
||||
|
||||
- 稳定任务 API 在该历史提交与当前提交之间完成了双向真实服务演练。
|
||||
- 结果事件、Worker WebSocket、流程、计划和后续新增接口没有由该历史提交覆盖,不能据此宣称全协议兼容。
|
||||
- 发布前仍需创建正式不可变 tag,并对每个受支持的旧 tag 执行双向矩阵;不兼容变化应按 HTTP 路径、WS 子协议或 schema `$id` 升级规则处理。
|
||||
@@ -9,6 +9,7 @@
|
||||
| 服务端单元与竞态、vet、构建 | Docker `golang:1.27.1`,仓库声明版本;`GOWORK=off go test -race ./... && go vet ./... && go build ./...` | PASS |
|
||||
| SDK 与独立示例竞态、vet、构建 | Docker `golang:1.27.1`;SDK 全 module、全部示例、`orbit-load`、`orbit-exec-load`、`orbit-schedule-load`、`orbit-workflow-load`,以及 result-inbox/task-outbox | PASS |
|
||||
| 当前协议门禁 | `make protocol-check` | PASS,当前 v1 契约同步 |
|
||||
| 历史 SDK / 服务端任务 API 双向演练 | Go 1.27.1、MySQL 8.4 一次性环境;`make mysql-compatibility`;历史提交 `a50d5fa` | PASS;旧服务端+当前 SDK、当前服务端+旧 SDK 均完成真实任务受理、幂等、查询、分页和取消;不是正式标签或全协议矩阵 |
|
||||
| 外键迁移防回归 | `TestPostRemovalMigrationGuard`;服务端迁移运行时校验 | PASS;000008 以前仅保留兼容清理历史,后续迁移在执行前拒绝引用约束 DDL |
|
||||
| Go 1.27.1 MySQL 存储集成 | MySQL 8.4.10,一次性容器;`go test -race -count=1 -run Integration -v ./internal/storage/mysql` | PASS,206.706 秒;包含空库无外键基线、v7升级、Pulse/Weave/API/观测/恢复、提交故障、凭据故障与W16竞争;未设置服务二进制时仅 `TestIntegrationWorkflowRuntimeProcess` 跳过 |
|
||||
| MySQL COMMIT 包截断故障 | MySQL 8.4.10 与 Go 测试容器共享网络命名空间;`127.0.0.1` DSN;两组提交前/后切点 | PASS;`TestIntegrationWorkflowCommitFaults` 8个子场景与 `TestIntegrationCredentialCommitFaults` 均通过,预期 `unexpected EOF` 为故障注入结果 |
|
||||
@@ -35,7 +36,7 @@
|
||||
|
||||
此前使用容器网络别名运行存储集成时,两组 COMMIT 故障测试曾因自身 `127.0.0.1` 明文连接前置条件被拒绝;本轮已改用共享网络命名空间单独复跑并通过,因此不再把它们列为未验证场景。共享网络命名空间只解决测试进程的 loopback 观察条件,不改变生产部署约束。
|
||||
|
||||
当前已完成仓库声明 Go 1.27.1 下的模块级门禁、MySQL 存储集成、关键 SDK/Orbit 进程故障组、24 个可运行 SDK 示例的真实服务串跑、两个独立业务模块的真实 MySQL/HTTP/进程故障集成,以及隔离 MySQL GTID 复制和手工提升演练;SDK/服务端跨标签矩阵仍未完成。新增长期积压和慢消费者样本见[报告](phase-6-backlog.md)与[慢消费者报告](phase-6-slow-consumer.md),仍未升级为生产容量结论。此前 Docker Go 1.25 共享网络结果作为历史对照保留,不替代 Go 1.27.1 集成回归、目标拓扑和版本兼容门禁。
|
||||
当前已完成仓库声明 Go 1.27.1 下的模块级门禁、MySQL 存储集成、关键 SDK/Orbit 进程故障组、24 个可运行 SDK 示例的真实服务串跑、两个独立业务模块的真实 MySQL/HTTP/进程故障集成、隔离 MySQL GTID 复制和手工提升演练,以及一个历史提交的稳定任务 API 双向 smoke;正式标签的完整 SDK/服务端跨版本矩阵仍未完成。新增长期积压和慢消费者样本见[报告](phase-6-backlog.md)与[慢消费者报告](phase-6-slow-consumer.md),仍未升级为生产容量结论。此前 Docker Go 1.25 共享网络结果作为历史对照保留,不替代 Go 1.27.1 集成回归、目标拓扑和版本兼容门禁。
|
||||
|
||||
历史 macOS arm64 + Go 1.27.1 + loopback MySQL 的完整切点记录见[故障边界报告](phase-6-fault-boundaries.md);该记录与本轮 Go 1.27.1 模块门禁互相独立,仍不能替代声明工具链下的无过滤 MySQL 集成复跑。
|
||||
|
||||
|
||||
Reference in New Issue
Block a user