Files
orbit/docs/reports/phase-5-public-api.md

43 lines
5.2 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.
# P4/P5 流程公共 HTTP 与独立 SDK 接入回归
日期:2026-09-18。范围为15条实例/控制/信号/恢复/操作审计路由、当前步骤详情、独立Go SDK和一个实际并行执行场景。本报告不表示P4/P5全部范围或生产平台已完成。
## 实现
- StartWorkflow固定版本和输入;GetWorkflow读取当前实例,GetWorkflowSteps返回最多128项元数据,GetWorkflowStep只读取单个当前激活的输入/输出、查询预算及等待。当前代次进入新步骤视图和恢复回执;旧冻结回执不改写。
- ControlWorkflow使用control_revision;信号固定步骤和激活代次。六类人工恢复复用现有事务服务,版本、证据、明确声明、原预算和停止意图全部保留。
- 流程资源操作审计支持独立权限、摘要分页和单条正文,游标绑定命名空间、实例及查询种类。信号资源审计及完整激活历史尚待补齐。
- 严格JSON支持匿名公共字段的扁平组合,仍拒绝大小写别名、未知/重复字段和缺少必填确认,保留显式null和精确整数。
- 初始化分别授予执行、控制、信号、恢复和审计权限,原workflow-access仍只定义读/发布。联调发现新审计动作漏登记导致凭据被拒绝,已补齐认证白名单,并在凭据交付前验证权限集合。
- SDK保持独立module,协议类型有中文注释,不导入服务端模型或存储。新增运行例子为并行处理→汇合→定时等待→模拟外部回执→后继任务,验证恰好三个任务和有界排空。
本批不新增迁移、数据表或持久化字段;仍为35个实体、305个直接持久化字段声明,无数据库外键和级联。
## 回归证据
环境为本机darwin/arm64、Go 1.27.1、Docker MySQL 8.4.10;专项及完整脚本使用一次性隔离数据库和真实Orbit二进制。
| 检查 | 结果 |
| --- | --- |
| 既有执行/恢复与元数据读专项 | `-race`通过,39.627秒,覆盖实例受理、TASK/POLL/等待恢复与新增当前详情读取 |
| 初始化权限与详情专项 | `-race`通过,5.892秒;六种独立流程授权及无外键归属拒绝 |
| 独立SDK专项 | 定义SDK与四组实例场景通过,包21.154秒;实例场景19.76秒 |
| 可运行示例 | 原定义发布例子与新workflow例子通过;新例子SUCCEEDED、start_deduplicated=true、signal_deduplicated=true、started=3、confirmed=3 |
| 基础回归 | 最终make fmt/test/vet/build全部通过,包含主模块、独立SDK和两个业务示例模块的竞态检查、静态检查及构建 |
| 完整隔离回归 | `scripts/test-mysql.sh`退出0;存储219.229秒、实际流程进程恢复48.336秒、流程SDK21.342秒(四组实例20.01秒)、最终Worker/订阅进程故障组95.200秒;20个SDK示例及2个独立业务模块全部通过,一次性环境由脚本清理 |
| 无外键升级 | 历史v7至当前版本回归通过,4.58秒;70个外键全部移除,已有数据、未替换索引及唯一约束保留,运行时拒绝意外新增外键 |
| 模型、SQL及文档 | Go AST核对305个直接持久化字段,缺中文注释0;实际MySQL已应用至v22,外键0、业务表字段缺COMMENT为0;991个本地文档链接及61个JSON示例检查通过 |
四组真实HTTP/SDK场景:
1. 服务端实际提交启动事务后代理丢弃响应,原键找回同一实例和原截止;暂停/原键恢复/旧控制版本拒绝/继续,Worker完成首任务后经过TIMER与SIGNAL,再执行后继;信号旧回执与当前消费结果分别查询。审计分页及跨实例游标拒绝、取消等待实例也一并覆盖。
2. Worker报告UNKNOWN → ReviewWorkflowTask确认成功 → 后台消费新结果 → ResolveWorkflowStep确认逻辑成功 → ContinueWorkflow;旧UNKNOWN尝试保留,管理原因和证据可读取。
3. 已知失败步骤与并行信号等待 → RearmWorkflowWait第二代,原截止不变 → 旧代次信号被拒绝 → RetryWorkflowStep只保留一次剩余尝试 → 解除核查 → 新任务和新代次信号完成流程。
4. 查询UNKNOWN → 核查为SUCCEEDED/PENDING → 原结果消费 → ContinueWorkflowPoll → ContinueWorkflow → 只创建第二业务轮并最终DONE;查询总截止不变。
实现和证据:[公共路由](../../internal/transport/httpserver/workflows.go)、[严格JSON测试](../../internal/transport/httpserver/workflows_test.go)、[初始化范围测试](../../internal/storage/mysql/workflow_bootstrap_integration_test.go)、[当前详情及审计范围测试](../../internal/storage/mysql/workflow_details_integration_test.go)、[独立SDK场景](../../sdk/go/workflow_instances_integration_test.go)、[示例源码](../../examples/workflow/main.go)。完整复现入口是[隔离MySQL脚本](../../scripts/test-mysql.sh),跳过的环境依赖测试不算通过。
## 剩余交付
继续提供实例筛选分页、完整激活/轮次/信号历史、信号资源审计、Pulse任务流程来源和更多独立恢复示例,再逐项核对P4/P5原功能范围。P6/P7仍包括生产监控、凭据轮换、故障及容量工具、备份恢复/切换与发布验收。本机多进程和单数据库回归不能替代生产复制、跨故障域部署或RPO/RTO验证。