# P4/P5 定时等待与查询轮次回归 日期:2026-09-18。范围为内部持久化等待运行器;SIGNAL、完整管理控制、实例公共API/SDK和生产验证继续按原计划执行。 ## 实现范围 - TIMER与POLL复用待续表到期索引和当前激活身份;首批创建、结果消费、时钟推进及审计同事务。 - 原等待时间、总截止、已用轮次和单轮尝试预算不因暂停、满额或重启重置。 - 后续查询复用首轮精确输入、业务键、互斥键、处理器与冻结策略;上一轮必须已经成功查询并分类为PENDING。 - 截止扫描让已落库Inbox结果先完成裁决;仍在途时保留步骤ACTIVE与当前任务,由Pulse收集实际结果和释放许可。 - 迁移000019从真实v18结构回填等待时钟,不覆盖原检查点、不改变预算、不回填终态实例或旧激活;无新增实体、列、索引或外键。 具体语义见[定时与查询文档](../13-workflow-clock.md)。模型维持35个实体、295个直接持久化字段声明,中文注释保留;内部检查点JSON字段同步提供中文说明。 ## 环境与证据 本机darwin/arm64、Go 1.27.1、Docker MySQL 8.4.10。全部数据库为临时隔离测试库,未连接业务库或远端生产库。 | 检查 | 结果 | | --- | --- | | `make fmt test vet build` | 已通过,退出0,覆盖服务端、SDK与独立示例module | | 时钟及相关真实MySQL定向回归 | 14组时钟场景、v18升级、原运行器/实例受理、新建结构及v7无外键升级通过,`-race`,44.745秒 | | 真实Orbit进程恢复 | 已通过,15.093秒;强杀/全停后由两个新进程接续原结果、到期TIMER及下一轮POLL | | 全量隔离集成回归 | 已通过,退出0;全存储160.211秒、流程进程14.928秒、Worker SDK 92.976秒、SDK进程故障94.972秒;19个SDK示例和2个独立业务示例全部通过 | 定向入口: ```sh go test -race -count=1 -run '^TestIntegration(WorkflowClock|WorkflowClockUpgrade|WorkflowRuntime|WorkflowInstanceAdmission|SchemaAndConstraints|NoForeignKeysUpgrade)$' -v ./internal/storage/mysql go build -o /tmp/orbit-clock-test-server ./cmd/orbit ORBIT_TEST_SERVER_BINARY=/tmp/orbit-clock-test-server go test -race -count=1 -run '^TestIntegrationWorkflowRuntimeProcess$' -v ./internal/storage/mysql ``` 以上命令须设置`ORBIT_TEST_MYSQL_DSN`指向一次性数据库;未配置时用例跳过,不能据此声称通过。[全量脚本](../../scripts/test-mysql.sh)负责隔离MySQL、构建二进制并显式运行进程测试。 数据库直接复核外键0、缺少COMMENT的业务字段0;代码复核295个直接持久化字段声明均含中文注释。文档复核847个本地链接和53个JSON代码块,错误0;`git diff --check`通过。 存储测试覆盖12个并发定时消费者只创建一个后继、8个并发查询消费者只增加一轮、暂停/满额保留预算、等待被总截止截短、延迟消费已到期事实、审计及轮次写入故障回滚、单轮重试与业务轮次区分、超时收集已落库结果、在途UNKNOWN结清、首轮输入及所有者损坏拒绝。v7升级验证70个历史外键全部移除,323项原索引组件和任务数据保留,额外添加外键时启动检查拒绝。 进程测试先确认所有控制进程已经退出,再让TIMER自然到期或提交查询PENDING结果;启动两个全新进程后核对原唤醒时间/绝对截止未改变、无重复任务,查询只产生两轮后由DONE完成。业务任务由真实Pulse执行存储授权与结束,实例使用内部Start;这不替代尚未开放的实例HTTP/SDK端到端回归。 开发过程中修正了两个测试夹具问题:业务键保留尾部空格而互斥键禁止首尾空格,因此互斥键改用实例ID;带互斥键的任务同时占用多类许可,因此核验原许可数量未变并在Pulse结清后归零。生产输入校验与许可规则未因此放宽。 首次全量存储回归因新故障注入用例未恢复原任务所有者而失败:后续全局租约恢复扫描正确拒绝了这条损坏关联。已为输入/所有者故障注入补齐退出恢复,最终完整重跑通过;不放宽生产关联校验,也不将首次失败计为通过。最后基础检查也已重跑通过,上表全量记录包含该修订。 ## 剩余原定范围 1. SIGNAL早到、重复、超时、契约与关联校验;最终信号和在途查询竞争。 2. FAIL_AFTER_SETTLED分支取消/收集/终态判断,以及暂停、继续、取消和人工恢复公共操作。 3. 实例、步骤、来源、信号和审计HTTP/独立SDK、通用场景示例。 4. P6–P7监控、完整故障矩阵、性能容量、MySQL高可用与备份恢复、SDK发布核对。 这些回归验证单个MySQL下的状态与进程故障恢复,不给出生产容量、RPO/RTO或数据库高可用承诺。