@melra/runtime-core 0.3.0-alpha.10 → 0.3.0-alpha.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -4,7 +4,7 @@ import { mkdtemp, readFile, rm, writeFile } from "node:fs/promises";
4
4
  import { tmpdir } from "node:os";
5
5
  import { join } from "node:path";
6
6
  import { afterEach, describe, expect, it, vi } from "vitest";
7
- import { TaskRequestSchema, } from "@melra/protocol";
7
+ import { TaskRequestSchema, outcomeUnknown, } from "@melra/protocol";
8
8
  import { createDefaultPolicy } from "@melra/policy-core";
9
9
  import { SqliteStore } from "@melra/storage-sqlite";
10
10
  import { Verifier } from "@melra/verifier-core";
@@ -21,16 +21,16 @@ async function setup(executor = {
21
21
  async execute() {
22
22
  return { success: true, stored: true, value: "verified" };
23
23
  },
24
- }) {
24
+ }, probe) {
25
25
  const root = await mkdtemp(join(tmpdir(), "melra-controller-"));
26
26
  roots.push(root);
27
27
  const store = new SqliteStore(":memory:");
28
28
  stores.push(store);
29
- const controller = await createController(store, root, Buffer.alloc(32, 7), executor);
29
+ const controller = await createController(store, root, Buffer.alloc(32, 7), executor, probe);
30
30
  return { controller, store };
31
31
  }
32
- async function createController(store, root, key, executor) {
33
- return new TaskController(store, createDefaultPolicy(root), executor, await Verifier.create(root), new PayloadCipher(key));
32
+ async function createController(store, root, key, executor, probe) {
33
+ return new TaskController(store, createDefaultPolicy(root), executor, await Verifier.create(root, probe === undefined ? {} : { probe }), new PayloadCipher(key));
34
34
  }
35
35
  describe("TaskController", () => {
36
36
  it("executes a planned task after restart with the same key", async () => {
@@ -482,5 +482,186 @@ describe("effect contract and principal", () => {
482
482
  const execution = await controller.execute(task.id);
483
483
  expect(execution.receipt?.principal).toBe("agent:local");
484
484
  });
485
+ describe("reconciliation", () => {
486
+ /**
487
+ * A charge whose request reached the wire and was never answered, plus the
488
+ * probe that can settle it. The reconciliation URL is written against the
489
+ * idempotency key rather than a response field on purpose: there is no
490
+ * response to read on this path.
491
+ */
492
+ async function unansweredCharge(probe) {
493
+ const execute = vi.fn(async () => {
494
+ throw outcomeUnknown("socket hang up");
495
+ });
496
+ const { controller, store } = await setup({ execute }, probe);
497
+ const task = controller.plan(TaskRequestSchema.parse({
498
+ goal: "Charge the customer",
499
+ operation: {
500
+ kind: "http",
501
+ action: "request",
502
+ method: "POST",
503
+ url: "http://localhost:9/charges",
504
+ idempotencyKey: "charge-1",
505
+ },
506
+ requiredEvidence: [
507
+ { type: "result_equals", path: "success", value: true },
508
+ ],
509
+ reconciliation: [
510
+ {
511
+ type: "http_resource_matches",
512
+ url: "http://localhost:9/charges/{{idempotencyKey}}",
513
+ method: "GET",
514
+ path: "json.status",
515
+ value: "applied",
516
+ },
517
+ ],
518
+ }));
519
+ const parked = await controller.execute(task.id, {
520
+ approvalId: task.approval.approvalId,
521
+ phrase: task.approval.phrase,
522
+ });
523
+ return { controller, store, task, parked, execute };
524
+ }
525
+ it("parks an unanswered mutation instead of claiming it failed", async () => {
526
+ const { parked, controller } = await unansweredCharge();
527
+ expect(parked.task.status).toBe("recovery_required");
528
+ expect(parked.certificate?.result).toBe("RECOVERY_REQUIRED");
529
+ // The receipt must not read as proof the charge did not happen.
530
+ expect(parked.receipt?.evidence[0]).toMatchObject({
531
+ type: "execution_error",
532
+ passed: false,
533
+ inconclusive: true,
534
+ });
535
+ expect(parked.receipt?.executionGuarantee).toBe("reconciliation-required");
536
+ expect(controller.status(parked.task.id).status).toBe("recovery_required");
537
+ });
538
+ it("resolves a parked mutation the provider says did happen", async () => {
539
+ const probe = vi.fn(async () => ({
540
+ status: 200,
541
+ content: JSON.stringify({ status: "applied" }),
542
+ }));
543
+ const { parked, controller, execute } = await unansweredCharge(probe);
544
+ expect(parked.task.status).toBe("recovery_required");
545
+ // Retrying the obvious way must not re-run the adapter: it may already
546
+ // have charged the customer once.
547
+ const settled = await controller.execute(parked.task.id);
548
+ expect(settled.task.status).toBe("verified_success");
549
+ expect(settled.certificate?.result).toBe("VERIFIED_SUCCESS");
550
+ expect(probe).toHaveBeenCalledWith(expect.objectContaining({
551
+ url: "http://localhost:9/charges/charge-1",
552
+ }));
553
+ expect(execute).toHaveBeenCalledTimes(1);
554
+ });
555
+ it("marks a parked mutation failed only once the provider denies it", async () => {
556
+ const probe = vi.fn(async () => ({
557
+ status: 404,
558
+ content: JSON.stringify({ status: "none" }),
559
+ }));
560
+ const { parked, controller } = await unansweredCharge(probe);
561
+ const settled = await controller.execute(parked.task.id);
562
+ expect(settled.task).toMatchObject({
563
+ status: "failed",
564
+ error: "reconciliation_confirms_effect_not_applied",
565
+ });
566
+ expect(settled.certificate?.result).toBe("FAILED");
567
+ });
568
+ it("keeps a parked mutation parked when the provider cannot be reached", async () => {
569
+ const probe = vi.fn(async () => {
570
+ throw new Error("ECONNREFUSED");
571
+ });
572
+ const { parked, controller } = await unansweredCharge(probe);
573
+ const settled = await controller.execute(parked.task.id);
574
+ // An unreachable provider did not say no. Anything but `recovery_required`
575
+ // here is the kernel inventing an outcome.
576
+ expect(settled.task).toMatchObject({
577
+ status: "recovery_required",
578
+ error: "reconciliation_inconclusive",
579
+ });
580
+ expect(settled.receipt).toBeUndefined();
581
+ expect(probe).toHaveBeenCalledTimes(1);
582
+ });
583
+ it("parks an unanswered mutation that declared no way to settle it", async () => {
584
+ const execute = vi.fn(async () => {
585
+ throw outcomeUnknown("socket hang up");
586
+ });
587
+ const { controller } = await setup({ execute });
588
+ const task = controller.plan(TaskRequestSchema.parse({
589
+ goal: "Charge the customer",
590
+ operation: {
591
+ kind: "http",
592
+ action: "request",
593
+ method: "POST",
594
+ url: "http://localhost:9/charges",
595
+ },
596
+ requiredEvidence: [
597
+ { type: "result_equals", path: "success", value: true },
598
+ ],
599
+ }));
600
+ const parked = await controller.execute(task.id, {
601
+ approvalId: task.approval.approvalId,
602
+ phrase: task.approval.phrase,
603
+ });
604
+ expect(parked.task.status).toBe("recovery_required");
605
+ expect(parked.receipt?.executionGuarantee).toBe("at-most-once");
606
+ const settled = await controller.execute(task.id);
607
+ expect(settled.task.error).toBe("reconciliation_not_declared");
608
+ expect(execute).toHaveBeenCalledTimes(1);
609
+ });
610
+ it("leaves an unanswered read failed, since nothing changed either way", async () => {
611
+ const execute = vi.fn(async () => {
612
+ throw outcomeUnknown("socket hang up");
613
+ });
614
+ const { controller } = await setup({ execute });
615
+ const task = controller.plan(TaskRequestSchema.parse({
616
+ goal: "Read the charge",
617
+ operation: {
618
+ kind: "http",
619
+ action: "request",
620
+ method: "GET",
621
+ url: "http://localhost:9/charges/charge-1",
622
+ },
623
+ }));
624
+ expect((await controller.execute(task.id)).task.status).toBe("failed");
625
+ });
626
+ it("settles an interrupted mutation on recovery when it can", async () => {
627
+ const probe = vi.fn(async () => ({
628
+ status: 200,
629
+ content: JSON.stringify({ status: "applied" }),
630
+ }));
631
+ const execute = vi.fn(async () => ({ success: true }));
632
+ const { controller, store } = await setup({ execute }, probe);
633
+ const task = controller.plan(TaskRequestSchema.parse({
634
+ goal: "Charge the customer",
635
+ operation: {
636
+ kind: "http",
637
+ action: "request",
638
+ method: "POST",
639
+ url: "http://localhost:9/charges",
640
+ idempotencyKey: "charge-2",
641
+ },
642
+ requiredEvidence: [
643
+ { type: "result_equals", path: "success", value: true },
644
+ ],
645
+ reconciliation: [
646
+ {
647
+ type: "http_resource_matches",
648
+ url: "http://localhost:9/charges/{{idempotencyKey}}",
649
+ method: "GET",
650
+ path: "json.status",
651
+ value: "applied",
652
+ },
653
+ ],
654
+ }));
655
+ const interrupted = store.getTask(task.id);
656
+ interrupted.status = "running";
657
+ store.saveTask(interrupted);
658
+ const [recovered] = await controller.recoverInterrupted();
659
+ expect(recovered).toMatchObject({
660
+ id: task.id,
661
+ status: "verified_success",
662
+ });
663
+ expect(execute).not.toHaveBeenCalled();
664
+ });
665
+ });
485
666
  });
486
667
  //# sourceMappingURL=task-controller.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"task-controller.test.js","sourceRoot":"","sources":["../src/task-controller.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"task-controller.test.js","sourceRoot":"","sources":["../src/task-controller.test.ts"],"names":[],"mappings":"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"}
@@ -30,6 +30,18 @@ export declare class WorkflowController {
30
30
  private transition;
31
31
  private loadDefinition;
32
32
  private replay;
33
+ /**
34
+ * Run declared compensations one at a time, newest effect first, stopping at
35
+ * the first that does not land `compensated`.
36
+ *
37
+ * `nodeIds` is already in unwind order. Nothing here is special-cased for the
38
+ * provider a compensation talks to: each one is an ordinary request through
39
+ * `runTask`, so undoing a charge at one host and a shipment at another is the
40
+ * same code path as undoing two at the same host — policy, approval, and the
41
+ * compensation's own declared evidence all still apply, and a delegate saying
42
+ * "reversed" without evidence still does not count.
43
+ */
44
+ private unwind;
33
45
  private advanceNode;
34
46
  private runTask;
35
47
  private runSequential;
@@ -1 +1 @@
1
- {"version":3,"file":"workflow-controller.d.ts","sourceRoot":"","sources":["../src/workflow-controller.ts"],"names":[],"mappings":"AAIA,OAAO,EAKL,KAAK,gBAAgB,EACrB,KAAK,UAAU,EAEf,KAAK,kBAAkB,EACvB,KAAK,aAAa,EAClB,KAAK,aAAa,EAGlB,KAAK,WAAW,EACjB,MAAM,iBAAiB,CAAC;AAMzB,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAYtD,MAAM,WAAW,qBAAqB;IACpC,GAAG,EAAE,WAAW,CAAC;IACjB,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,MAAM,EAAE,aAAa,EAAE,CAAC;CACzB;AAeD,qBAAa,kBAAkB;IAQ3B,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,eAAe;IAPlC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAqD;IAC9E,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAoC;gBAGvC,KAAK,EAAE,WAAW,EAClB,KAAK,EAAE,cAAc,EACrB,aAAa,EAAE,aAAa,EAC5B,eAAe,SAAS;IAG3C,IAAI,CAAC,UAAU,EAAE,kBAAkB,GAAG,WAAW;IAiDjD,MAAM,CAAC,UAAU,EAAE,MAAM,GAAG,WAAW;IAMvC,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,aAAa,SAAI,GAAG,aAAa,EAAE;IAKxD,OAAO,CACX,UAAU,EAAE,MAAM,EAClB,SAAS,GAAE,gBAAgB,EAAO,EAClC,MAAM,GAAE,aAAa,EAAO,GAC3B,OAAO,CAAC,qBAAqB,CAAC;YAyBnB,aAAa;YAmCb,WAAW;IA6KnB,kBAAkB,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;IA+ElD,KAAK,CAAC,UAAU,EAAE,MAAM,GAAG,WAAW;IAItC,OAAO,CAAC,UAAU,EAAE,MAAM,GAAG,WAAW;IAIxC,MAAM,CAAC,UAAU,EAAE,MAAM,GAAG,WAAW;IAsBvC,OAAO,CAAC,IAAI;IAmBZ,MAAM,CAAC,UAAU,EAAE,MAAM,GAAG,WAAW;IA+BvC,OAAO,CAAC,UAAU;IAmClB,OAAO,CAAC,cAAc;IActB,OAAO,CAAC,MAAM;YAmBA,WAAW;YAyLX,OAAO;YAwCP,aAAa;YA+Bb,WAAW;YAmCX,OAAO;IAwDrB,OAAO,CAAC,YAAY;CAmDrB"}
1
+ {"version":3,"file":"workflow-controller.d.ts","sourceRoot":"","sources":["../src/workflow-controller.ts"],"names":[],"mappings":"AAIA,OAAO,EAKL,KAAK,gBAAgB,EACrB,KAAK,UAAU,EAEf,KAAK,kBAAkB,EACvB,KAAK,aAAa,EAClB,KAAK,aAAa,EAGlB,KAAK,WAAW,EACjB,MAAM,iBAAiB,CAAC;AAMzB,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAgBtD,MAAM,WAAW,qBAAqB;IACpC,GAAG,EAAE,WAAW,CAAC;IACjB,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,MAAM,EAAE,aAAa,EAAE,CAAC;CACzB;AAeD,qBAAa,kBAAkB;IAQ3B,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,eAAe;IAPlC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAqD;IAC9E,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAoC;gBAGvC,KAAK,EAAE,WAAW,EAClB,KAAK,EAAE,cAAc,EACrB,aAAa,EAAE,aAAa,EAC5B,eAAe,SAAS;IAG3C,IAAI,CAAC,UAAU,EAAE,kBAAkB,GAAG,WAAW;IAiDjD,MAAM,CAAC,UAAU,EAAE,MAAM,GAAG,WAAW;IAMvC,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,aAAa,SAAI,GAAG,aAAa,EAAE;IAKxD,OAAO,CACX,UAAU,EAAE,MAAM,EAClB,SAAS,GAAE,gBAAgB,EAAO,EAClC,MAAM,GAAE,aAAa,EAAO,GAC3B,OAAO,CAAC,qBAAqB,CAAC;YAyBnB,aAAa;YAmCb,WAAW;IAuOnB,kBAAkB,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;IA+ElD,KAAK,CAAC,UAAU,EAAE,MAAM,GAAG,WAAW;IAItC,OAAO,CAAC,UAAU,EAAE,MAAM,GAAG,WAAW;IAIxC,MAAM,CAAC,UAAU,EAAE,MAAM,GAAG,WAAW;IAsBvC,OAAO,CAAC,IAAI;IAmBZ,MAAM,CAAC,UAAU,EAAE,MAAM,GAAG,WAAW;IA+BvC,OAAO,CAAC,UAAU;IAmClB,OAAO,CAAC,cAAc;IActB,OAAO,CAAC,MAAM;IAmBd;;;;;;;;;;OAUG;YACW,MAAM;YAwBN,WAAW;YAyLX,OAAO;YAwCP,aAAa;YA+Bb,WAAW;YAmCX,OAAO;IAwDrB,OAAO,CAAC,YAAY;CAmErB"}
@@ -4,7 +4,7 @@ import { randomUUID } from "node:crypto";
4
4
  import { WorkflowDefinitionSchema, WorkflowEventSchema, WorkflowRunSchema, WorkflowSnapshotSchema, } from "@melra/protocol";
5
5
  import { canonicalJson, redactStructuredValue, sha256, } from "@melra/receipt-schema";
6
6
  import { applyWorkflowEvent, rebuildWorkflow, } from "./workflow-events.js";
7
- import { readyNodeIds, validateWorkflow } from "./workflow-graph.js";
7
+ import { readyNodeIds, validateWorkflow, } from "./workflow-graph.js";
8
8
  export class WorkflowController {
9
9
  store;
10
10
  tasks;
@@ -129,6 +129,14 @@ export class WorkflowController {
129
129
  if (current.status === "failed" && rollback.length === 0) {
130
130
  return { run: current, tasks: [], events: [] };
131
131
  }
132
+ // An unwind that stopped half-done is not a base to build more effects on:
133
+ // a forward effect happened, its declared inverse did not, and no node
134
+ // describes that. Refused here rather than left to `readyNodeIds`, which
135
+ // would happily start an independent branch on top of it.
136
+ if (definition.nodes.some((node) => node.type === "compensation" &&
137
+ ["failed", "recovery_required"].includes(current.nodes[node.id]?.status ?? ""))) {
138
+ return { run: current, tasks: [], events: [] };
139
+ }
132
140
  // A node parked for a human — approval phrase or supplied input — is no
133
141
  // longer `pending`, so `readyNodeIds` will not return it. Re-offer it here
134
142
  // or the workflow would stall forever with the answer in hand.
@@ -145,14 +153,29 @@ export class WorkflowController {
145
153
  if (nodeIds.length === 0) {
146
154
  return { run: current, tasks: [], events: [] };
147
155
  }
148
- const results = await Promise.all(nodeIds.map(async (nodeId) => {
149
- const node = graph.nodes.get(nodeId);
150
- return {
151
- nodeId,
152
- result: await this.advanceNode(node, definition, current.nodes[nodeId], current, approvals, inputs),
153
- };
154
- }));
155
- if (results.some(({ result }) => result.state.status === "failed")) {
156
+ const results = await (rollback.length >
157
+ 0
158
+ ? // Compensations undo each other's preconditions, so the order they run
159
+ // in *is* the semantics: cancel the shipment before refunding the
160
+ // charge that paid for it. `Promise.all` computed a reverse list and
161
+ // then threw the order away by starting them all at once. Sequential,
162
+ // and stopping at the first one that does not reach `compensated` —
163
+ // continuing past a failed unwind would strand the saga in a state no
164
+ // node describes.
165
+ this.unwind(rollback, graph, definition, current, approvals, inputs)
166
+ : Promise.all(nodeIds.map(async (nodeId) => {
167
+ const node = graph.nodes.get(nodeId);
168
+ return {
169
+ nodeId,
170
+ result: await this.advanceNode(node, definition, current.nodes[nodeId], current, approvals, inputs),
171
+ };
172
+ })));
173
+ // A *compensation* that failed must not open a second unwind. The saga is
174
+ // already stranded, and undoing the next step while this inverse is still
175
+ // outstanding is precisely what the halt exists to prevent — so only a
176
+ // forward node failing starts compensating.
177
+ if (results.some(({ nodeId, result }) => result.state.status === "failed" &&
178
+ graph.nodes.get(nodeId)?.type !== "compensation")) {
156
179
  for (const node of [...definition.nodes].reverse()) {
157
180
  if (node.type !== "compensation" ||
158
181
  current.nodes[node.id]?.status !== "pending") {
@@ -185,6 +208,10 @@ export class WorkflowController {
185
208
  : compensation.state,
186
209
  },
187
210
  });
211
+ // Same rule as a resumed unwind: stop rather than undo step 1 while
212
+ // step 3's inverse is still outstanding.
213
+ if (compensation.state.status !== "verified_complete")
214
+ break;
188
215
  }
189
216
  }
190
217
  let run = this.transition(current, (draft, emit) => {
@@ -216,7 +243,23 @@ export class WorkflowController {
216
243
  if (status !== draft.status) {
217
244
  const from = draft.status;
218
245
  draft.status = status;
219
- emit("workflow.status_changed", { from, to: status });
246
+ // Name the step, or "recovery_required" tells an operator that
247
+ // something needs hands without saying which effect is half-undone.
248
+ const stalled = definition.nodes.find((node) => node.type === "compensation" &&
249
+ ["failed", "recovery_required"].includes(draft.nodes[node.id]?.status ?? ""));
250
+ if (status === "recovery_required" && stalled !== undefined) {
251
+ draft.error = `workflow_compensation_incomplete:${stalled.id}`;
252
+ }
253
+ else {
254
+ // The reducer clears `error` on every status change, so the draft has
255
+ // to as well or replay no longer reproduces the projection.
256
+ delete draft.error;
257
+ }
258
+ emit("workflow.status_changed", {
259
+ from,
260
+ to: status,
261
+ ...(draft.error === undefined ? {} : { error: draft.error }),
262
+ });
220
263
  }
221
264
  });
222
265
  if (results.some(({ result }) => result.checkpoint === true)) {
@@ -417,6 +460,27 @@ export class WorkflowController {
417
460
  }
418
461
  }
419
462
  }
463
+ /**
464
+ * Run declared compensations one at a time, newest effect first, stopping at
465
+ * the first that does not land `compensated`.
466
+ *
467
+ * `nodeIds` is already in unwind order. Nothing here is special-cased for the
468
+ * provider a compensation talks to: each one is an ordinary request through
469
+ * `runTask`, so undoing a charge at one host and a shipment at another is the
470
+ * same code path as undoing two at the same host — policy, approval, and the
471
+ * compensation's own declared evidence all still apply, and a delegate saying
472
+ * "reversed" without evidence still does not count.
473
+ */
474
+ async unwind(nodeIds, graph, definition, run, approvals, inputs) {
475
+ const results = [];
476
+ for (const nodeId of nodeIds) {
477
+ const result = await this.advanceNode(graph.nodes.get(nodeId), definition, run.nodes[nodeId], run, approvals, inputs);
478
+ results.push({ nodeId, result });
479
+ if (result.state.status !== "compensated")
480
+ break;
481
+ }
482
+ return results;
483
+ }
420
484
  async advanceNode(node, definition, state, run, approvals, inputs) {
421
485
  switch (node.type) {
422
486
  case "operation": {
@@ -664,6 +728,15 @@ export class WorkflowController {
664
728
  }
665
729
  deriveStatus(run, definition) {
666
730
  const required = definition.nodes.filter((node) => node.type !== "compensation");
731
+ // Compensation nodes are excluded from every check below, because a
732
+ // skipped one is the normal case on a clean run. A *failed* one is not:
733
+ // the forward effect happened and its declared inverse did not, which
734
+ // leaves the world in a state no single node describes. Checked first, so
735
+ // an incomplete unwind is never reported as a clean failure.
736
+ if (definition.nodes.some((node) => node.type === "compensation" &&
737
+ ["failed", "recovery_required"].includes(run.nodes[node.id]?.status ?? ""))) {
738
+ return "recovery_required";
739
+ }
667
740
  if (required.some((node) => run.nodes[node.id]?.status === "failed")) {
668
741
  return "failed";
669
742
  }