Skip to content

[automation/approvals] 进程重启后审批决策静默失效:挂起 flow run 仍只存内存(#1518 标记 COMPLETED 但 17.0.0-rc.1 未生效),approve 落库却永不推进且零报错 #4420

Description

@baozhoutao

版本

  • @objectstack/*@17.0.0-rc.1(service-automation 17.0.0-rc.1)
  • 复现于 os-project-titanwind-ehr,2026-07-31

现象

approval 节点的 record_change 流:提交审批与审批决策跨进程重启时,决策静默失效——

  1. 进程 A:record_change 触发 qif_approval 流,approval 节点挂起,sys_approval_request 落库(带 flow_run_id),镜像字段 stage=qc_director/status=pending;
  2. dev 进程重启(进程 B,同一 DB);
  3. 审批人在 Console 上「批准」→ sys_approval_request.status 翻成 approved 落库成功、UI toast 成功;
  4. 但流永不 resume:下一节点的 approval request 不创建,记录镜像字段停在 qc_director / approved 成僵尸;日志零报错(resume(runId) 找不到 run 疑似被静默吞掉)。

对照:同一进程内提交+审批的全链路正常(实测 NCR 三级流 ①→② 推进无恙)——问题只出在跨重启。

定位

  • service-automation: persist suspended flow runs (durable resume across process restarts) #1518(persist suspended flow runs / durable resume across restarts)2026-06-02 标记 COMPLETED 关闭;
  • 但 17.0.0-rc.1 的 service-automation/dist/index.jssuspendedRuns = new Map() 仍是纯内存,resume 查不到即止;
  • dist 里出现的 sys_automation_run 标识符,在运行库中根本没建表(no such table: sys_automation_run)——持久化对象未注册或未走 schema 同步。

影响

审批流是天然的长挂起(人到岗才批,中间隔发版/重启是常态)。当前行为=每次发版都可能把在途审批全部变僵尸,且审批人侧毫无感知(approve 明明成功),属数据一致性级别的问题。

期望

  1. 挂起 run 持久化 + 重启后可 resume(service-automation: persist suspended flow runs (durable resume across process restarts) #1518 承诺的行为真正落地);
  2. 短期兜底:resume(runId) 找不到 run 时必须显式报错(approve 接口应失败或至少告警),不能落一半状态静默成功。

Metadata

Metadata

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions