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

5.0 KiB
Raw Permalink Blame History

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额度升级测试的人工降级夹具未移除本轮新增索引,导致再次升级时报重复索引;已补齐夹具的结构还原,不改正式迁移。最终全量结果在上表记录。

源码:历史存储、信号历史与审计、专项回归、索引升级、零外键升级、迁移约束检查、HTTP路由、独立SDK、真实SDK链路。完整复现入口为make integration,见脚本。

继续交付

实例筛选分页、统一状态事件时间线的原范围核对,以及独立POLL、核查和暂停恢复示例继续推进;再逐项核对P4/P5原功能与异常矩阵,开展P6/P7监控、凭据轮换、运维、容量及生产故障验收。本地回归没有证明生产复制、跨故障域部署、目标容量或实际RPO/RTO;列表跨页也不提供固定数据库快照。