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

35 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.
# P4/P5 流程历史查询回归
日期:2026-09-18。本批交付指定历史激活、POLL轮次、信号摘要及信号资源操作审计的HTTP与独立SDK;不将这些列表等同于统一状态事件时间线,P4/P5仍保留实例筛选分页和独立恢复场景等剩余项。
## 实现与验证边界
- 六条只读路由:激活列表/详情、单激活的查询轮次列表、信号列表、信号操作审计列表/详情。所有父资源按命名空间与固定流程全部队列授权,审计使用显式workflows:audit:read。
- 列表默认20、最多100,游标绑定查询类型及父资源,数据库limit+1判断下一页;不聚合输入/结果/信号正文。单条详情保留精确JSON,区分当前逻辑步骤和明确请求的历史激活。
- 人工恢复后的旧TASK、POLL和SIGNAL/TIMER等待可读,原截止、轮次与尝试预算不重算;POLL同轮恢复跨激活,后续新业务轮仍单独编号。旧等待赢家须对应原消费信号和原代次。
- 信号列表保留早期未核验身份,不补造契约或激活序号。信号受理审计的原PENDING快照与后来CONSUMED状态分开。没有新增状态推进、恢复授权或业务副作用。
- 迁移000023只添加信号历史分页索引,无新模型字段、表或外键。历史迁移不回改;基础测试禁止000008之后重新引入引用约束,readiness继续拒绝实际数据库中的外键。
## 验证记录
环境:darwin/arm64、Go 1.27.1、Docker MySQL 8.4.10;一次性隔离数据库、真实Orbit服务与Worker协议,SDK不引用服务端代码。
| 验证 | 实际结果 |
| --- | --- |
| 基础检查 | make fmt/test/vet/build通过,覆盖主模块、独立SDK及两个业务模块 |
| 存储专项 | 17.546秒通过;包括五组历史场景、v22索引升级、历史70外键移除及无外键应用层归属校验 |
| HTTP与SDK专项 | 包24.637秒通过;五组实例场景23.23秒,覆盖六条新增历史路由及原有六类恢复 |
| 可运行示例 | 流程SUCCEEDED,workflow_sources_verified=3、workflow_history_verified=true、signal_state=CONSUMED,三个任务确认并排空 |
| 全量隔离回归 | scripts/test-mysql.sh退出0;存储223.344秒、流程进程恢复49.047秒、流程SDK23.868秒(五组实例22.52秒)、最终进程故障组95.473秒;20个SDK示例及2个独立业务模块全部通过,一次性环境已清理 |
| 模型与文档检查 | 305个直接持久化字段和122个新增协议字段均有中文注释;实际MySQL为v23,外键0、业务字段缺COMMENT为0;1045个本地链接、65段JSON及git diff --check通过 |
存储测试覆盖TASK第2代→第1代分页、原输入/缺失输出、未激活空页、不同步骤/种类游标拒绝、不存在历史身份、TASK误读POLL轮次拒绝、旧任务所有者漂移后不返回部分页;POLL恢复第1轮→第2轮分页与旧预算;SIGNAL/TIMER第1代等待保留原截止;同一受理时刻信号按ID稳定排序、200 KiB正文不进入摘要、旧NULL契约保留、信号资源与操作审计隔离。真实SDK覆盖历史等待winner、恢复前后激活、同轮恢复与下一轮的任务身份,以及原信号审计原因。SDK单元检查非法路径/分页不发送请求及响应父资源不匹配。
v22→当前迁移逐字段比较信号、精确数字、旧身份与时间,检查新增索引及重复迁移;v7→当前验证70外键全部移除、323个既有索引组成项保留、原任务不变,手工注入违规外键会被CheckSchema拒绝。初次历史专项发现两处测试断言不匹配既有契约(缺失output不能作为JSON比较、权限错误码为PERMISSION_DENIED),修正断言后重跑通过。首轮全量发现v9额度升级测试的人工降级夹具未移除本轮新增索引,导致再次升级时报重复索引;已补齐夹具的结构还原,不改正式迁移。最终全量结果在上表记录。
源码:[历史存储](../../internal/storage/mysql/workflow_history.go)、[信号历史与审计](../../internal/storage/mysql/workflow_signal_history.go)、[专项回归](../../internal/storage/mysql/workflow_history_integration_test.go)、[索引升级](../../internal/storage/mysql/workflow_history_upgrade_integration_test.go)、[零外键升级](../../internal/storage/mysql/no_foreign_keys_integration_test.go)、[迁移约束检查](../../internal/storage/mysql/no_foreign_keys_test.go)、[HTTP路由](../../internal/transport/httpserver/workflow_history.go)、[独立SDK](../../sdk/go/workflow_history.go)、[真实SDK链路](../../sdk/go/workflow_instances_integration_test.go)。完整复现入口为`make integration`,见[脚本](../../scripts/test-mysql.sh)。
## 继续交付
实例筛选分页、统一状态事件时间线的原范围核对,以及独立POLL、核查和暂停恢复示例继续推进;再逐项核对P4/P5原功能与异常矩阵,开展P6/P7监控、凭据轮换、运维、容量及生产故障验收。本地回归没有证明生产复制、跨故障域部署、目标容量或实际RPO/RTO;列表跨页也不提供固定数据库快照。