Files
orbit/docs/reports/phase-5-controls.md

54 lines
5.0 KiB
Markdown
Raw Permalink 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.
# P5 控制与停止结清回归
日期:2026-09-18。范围为内部Go控制服务、停止模型和后台结清运行器。公共HTTP/独立SDK、人工核查恢复及P6–P7仍未完成,持续目标继续。
## 已实现范围
- PAUSE/RESUME/CANCEL显式授权,稳定操作身份与独立control_revision;后台结果不使原控制版本失效。
- 门控、控制标记、停止意图、事件、审计、冻结回执及必要根接续同事务。
- 首次stop_kind和stop_requested_at保存CANCEL或FAILURE目标;进入核查不丢失,后来的用户取消不改写原失败目标。
- FAIL_AFTER_SETTLED与用户取消收集并行分支及已有任务结果;运行中执行保留许可,未知保持核查。
- 停止前信号保留、停止后信号拒绝;POLL停止后PENDING不消耗新业务轮次;停止与晚到超时由原意图隔离。
- 超过32个步骤继续通过根检查点恢复;终态前检查所有历史任务归属、未结束尝试与许可。
- 迁移000021增加两个中文注释字段和一个查询索引,实体仍35个,直接持久化字段303个,无外键。
详细约定见[控制与结清文档](../15-workflow-controls.md)。每次事务最多一个任务取消,其余步骤收尾最多32项;P6仍须验证真实负载和积压下的吞吐与延迟。
## 环境与结果
本机darwin/arm64、Go 1.27.1、Docker MySQL 8.4.10,临时隔离数据库,未接入业务或生产数据库。
| 检查 | 结果 |
| --- | --- |
| 首轮真实MySQL专项 | 控制18组及原信号/TIMER/POLL/结果运行器/Pulse取消/新建结构/v7/v9升级通过,`-race`,56.012秒 |
| 基础回归 | 最终修订后再次运行`make fmt test vet build`通过,退出0 |
| 修订后专项与实际进程 | 23组控制场景、真实v20升级及完整流程进程测试通过,`-race`,46.556秒;流程进程27.09秒、升级4.14秒 |
| 全量隔离MySQL、流程进程、SDK与示例 | 修订后完整脚本通过,退出0;存储191.691秒,实际流程进程27.731秒,Worker SDK 94.897秒,最终SDK进程故障组94.033秒;19个SDK示例和2个独立业务示例全部通过 |
| 数据结构与文档 | 当前MySQL外键0、无COMMENT字段0;303个直接持久化字段声明均有中文注释;891个本地文档链接、53段JSON检查通过 |
定向入口:
```sh
go test -race -count=1 -run '^TestIntegration(WorkflowControls|WorkflowStopUpgrade|WorkflowRuntime|WorkflowClock|WorkflowSignalRuntime|WorkerCancellation|SchemaAndConstraints|NoForeignKeysUpgrade|ApplicationResourcesUpgrade)$' -v ./internal/storage/mysql
go build -o /tmp/orbit-control-test-server ./cmd/orbit
ORBIT_TEST_SERVER_BINARY=/tmp/orbit-control-test-server go test -race -count=1 -run '^TestIntegrationWorkflowRuntimeProcess$' -v ./internal/storage/mysql
```
命令必须配合一次性`ORBIT_TEST_MYSQL_DSN`。跳过不代表通过。[全量脚本](../../scripts/test-mysql.sh)负责隔离数据库、构建实际二进制并显式运行流程进程回归。
首轮控制专项验证暂停时继续接收结果、使用原control_revision恢复、12个同键控制只形成一条审计、旧控制版本及撤销权限后的原键拒绝、控制/结清审计失败完全回滚,及运行中任务分别成功/失败/取消/未知时的最终事实。并行FAIL_AFTER_SETTLED在兄弟分支真实结清后才失败,UNKNOWN始终NEEDS_REVIEW;纯等待、停止前信号、业务PENDING查询不启动后继;60步骤的剩余59项通过有限批次收尾。
修订后专项及全量已验证开始与取消的8轮并发竞争、已领取未开始的暂停/继续、无合法反向归属的额外门控任务不能被取消、取消后原截止到达不改写意图,以及真实v20升级。v20用例只证明真实旧结构的数据迁移,实际执行恢复由独立进程测试验证。全量流程进程用例本体26.43秒:并行失败意图和在途兄弟任务经历全停后,仅在收集真实结果后进入FAILED;用户取消后的UNKNOWN由两个新进程恢复为NEEDS_REVIEW,不发出后继,也不产生错误终态。
完整脚本还通过旧v7外键移除、新建结构、结果订阅、Inbox/Outbox和SDK节点强杀恢复,临时MySQL容器已由脚本清理。移除外键后的000009–000021迁移没有重新引入外键;当前结构实查为0。
首次全量存储回归中两个新增测试使用内部错误名GATE_CLOSED作为协议码而失败,服务端实际按既有契约返回EXECUTION_PAUSED。已修正测试断言,生产门控规则未放宽;该次失败不计为全量通过,最终结果以修订后重跑为准。
## 剩余范围
1. 人工核查恢复及旧激活/原预算保护,不能将解除paused当成解除核查。
2. 公共实例/步骤/控制/信号/来源/审计接口、独立SDK和端到端通用示例。
3. 完整监控与故障矩阵、性能容量、MySQL高可用/备份恢复、运维与发布核对。
通过本阶段只能证明相应内部状态与单MySQL进程恢复行为,不能据此宣称整个平台生产验收完成。