forked from ChaiHao/BPOS-MVP
Mastra 胶合层:FlowRuntime 的第二实现 —— run ↔ 实例,发号权留在主工程
编译器只管推图,胶合层管一单一单的账(createMastraRuntime): - **发号权在主工程**:实例号 nextInstanceNumber 算、sys.node_instance 落笔; Mastra 不发实例号也不发任务号(spike 实测) - **run ↔ 实例**:runId = <workflowId>#<seq>,重开 = 新 run(seq+1),旧 run 冻结; 当前 run 的入口记在 vars.__runEntry —— 重开后从回边目标那份变体起步 - **迟到 / 重复回调不甩给 Mastra**:先在实例表定位、确认是当前 open 的那个, 不是就发 stale-callback 丢弃(spike 实测:错投的 resume 会打坏 run, 嵌套下甚至不可恢复) - **失败走向不进 Mastra**:改道/升审批/容忍都当「从目标节点重新入场」, 起一个以它为入口的新 run —— 绕开 .parallel() 那套「任一失败即整体失败」 - **状态仍是聚合投影**:refreshState 读 sys.node_instance,不读 Mastra 快照 (run 只有 running/suspended/success/failed,没有「收敛未到终点=abnormal」) - MastraRunner 是 Mastra 侧的最小口子(startRun/resumeRun),换版本只改它 四闸过。**尚欠**:MastraRunner 的真实现(Mastra 实例 + PostgresStore 挂 mastra schema)与接线开关 —— 编译器与胶合层都有单测但没在真库上跑过整条流, 转正前自持实现仍是唯一在跑的路径;已如实记进 debt M5-1。 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KeDBx2PHLavbURXB8LJJ7m
This commit is contained in:
@@ -108,8 +108,21 @@ refreshState / terminate)。执行面的语义、留痕与副作用编排整体
|
||||
- 编译期全验:悬空边、正向边成环(未标 reopen)一律当场报 —— 编译只走到得了的边,
|
||||
悬空边可能落在递归碰不到的角落。
|
||||
|
||||
替换路径:`ProcessServiceDeps.runtime` 注入第二实现(胶合层 = `FlowRuntime` 的
|
||||
Mastra 实现,尚欠 —— 见 debt M5-1)。八例端到端是两个实现的**等价性护栏**。
|
||||
**胶合层**(`internal/adapter/mastra-runtime.ts`,出口 `createMastraRuntime`)=
|
||||
`FlowRuntime` 的 Mastra 实现,与自持状态机对等。它管的是「一单一单的账」:
|
||||
- **发号权在主工程**:实例号 `nextInstanceNumber` 算、`sys.node_instance` 落笔
|
||||
(Mastra 不发实例号也不发任务号);
|
||||
- **run ↔ 实例**:`runId = <workflowId>#<seq>`,重开 = 新 run(seq+1),旧 run 冻结;
|
||||
当前 run 的入口记在工作流 `vars.__runEntry`;
|
||||
- **迟到 / 重复回调不甩给 Mastra**:先在实例表定位、确认是当前 open 的那个,
|
||||
不是就发 `stale-callback` 事件丢弃(错投的 resume 会打坏 run);
|
||||
- **失败走向不进 Mastra**:改道/升审批/容忍都当作「从目标节点重新入场」——
|
||||
起一个以它为入口的新 run,绕开 `.parallel()` 那套连坐语义;
|
||||
- 状态仍是**聚合投影**:`refreshState` 读 `sys.node_instance`,不读 Mastra 快照。
|
||||
|
||||
替换路径:`ProcessServiceDeps.runtime` 注入 `createMastraRuntime({..., runner })`;
|
||||
`MastraRunner` 是 Mastra 侧的最小口子(startRun / resumeRun),换版本只改它。
|
||||
八例端到端是两个实现的**等价性护栏**;接线开关与真跑验证见 debt M5-1。
|
||||
仍须绕的语义冲突:`.parallel()` 任一失败即整体失败(step 内自吞,不让 Mastra 感知)、
|
||||
三态聚合投影(abnormal 防假成功,Mastra run 无此态)、`node_instance`
|
||||
投影表必须照写(治理台按行查、实例发号权仍在主工程)。
|
||||
|
||||
Reference in New Issue
Block a user