@qaick/executor 0.4.0 → 0.4.1

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.
@@ -93,8 +93,8 @@ export class ExecutionPlan {
93
93
  if (!producer || !this.inScope.has(producer))
94
94
  return fail('UNAVAILABLE_SCOPE_DEPENDENCY', 'The required output is outside this execution scope or has no original structural address.');
95
95
  const source = this.nodes.get(producer);
96
- if (!source || source.kind !== 'action' || !Object.hasOwn(source.output, operand.outputName))
97
- return fail('UNRESOLVED_SCOPE_BINDING', 'The producer does not declare the required Action output.');
96
+ if (!source || !['action', 'operation'].includes(String(source.kind)) || !Object.hasOwn(source.output, operand.outputName))
97
+ return fail('UNRESOLVED_SCOPE_BINDING', 'The producer does not declare the required output.');
98
98
  const a = this.ancestors(producer), b = this.ancestors(consumer.occurrence);
99
99
  const descendant = a.some(n => n.key === consumer.occurrence) && producer !== consumer.occurrence;
100
100
  if (phase === 'completion' && descendant) {
package/dist/executor.js CHANGED
@@ -593,6 +593,10 @@ export class DefaultExecutor {
593
593
  const outputs = nested.state === 'completed'
594
594
  ? { ...structuredClone(step.staticOutputs ?? {}), ...this.resolveBindings(run, step.outputBindings ?? {}, childScope, step, { phase: 'completion', iterations }) }
595
595
  : {};
596
+ if (signal.aborted || run.cancelled)
597
+ throw failure(run.timedOut ? 'ACTION_TIMEOUT' : 'ACTION_CANCELLED', 'Execution ended before Operation evidence publication.');
598
+ if (nested.state === 'completed')
599
+ run.journal.set(journalKey(step, iterations, run.execution.document.inputVersion), { outputs: structuredClone(outputs) });
596
600
  const result = { ...base, state: nested.state === 'completed' ? 'finished' : nested.state, inputs, outputs, durationMs: Date.now() - startedMs, children: nested.steps, terminalReason: nested.terminalReason ?? (nested.state === 'completed' ? 'completed' : 'failed'), error: nested.error };
597
601
  this.emit(run, 'step_finished', result.state, `${step.name} ${result.state}.`, step, undefined, iterations);
598
602
  return result;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@qaick/executor",
3
- "version": "0.4.0",
3
+ "version": "0.4.1",
4
4
  "description": "Host-neutral QAick action execution primitives.",
5
5
  "files": [
6
6
  "dist",
@@ -34,7 +34,7 @@
34
34
  "prepublishOnly": "npm run typecheck && npm test && npm run build"
35
35
  },
36
36
  "dependencies": {
37
- "@qaick/contract": "0.7.0"
37
+ "@qaick/contract": "0.7.1"
38
38
  },
39
39
  "devDependencies": {
40
40
  "@types/node": "^24.13.3",