@openwop/openwop-conformance 1.0.0

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.
Files changed (175) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +241 -0
  3. package/api/asyncapi.yaml +481 -0
  4. package/api/openapi.yaml +830 -0
  5. package/api/redocly.yaml +8 -0
  6. package/coverage.md +80 -0
  7. package/dist/cli.js +161 -0
  8. package/fixtures/conformance-a2a-task-roundtrip.json +27 -0
  9. package/fixtures/conformance-agent-identity.json +27 -0
  10. package/fixtures/conformance-agent-low-confidence.json +29 -0
  11. package/fixtures/conformance-agent-memory-cross-tenant.json +28 -0
  12. package/fixtures/conformance-agent-memory-redaction.json +32 -0
  13. package/fixtures/conformance-agent-memory-roundtrip.json +32 -0
  14. package/fixtures/conformance-agent-memory-ttl.json +31 -0
  15. package/fixtures/conformance-agent-pack-export.json +26 -0
  16. package/fixtures/conformance-agent-pack-install.json +26 -0
  17. package/fixtures/conformance-agent-pack-provenance.json +31 -0
  18. package/fixtures/conformance-agent-reasoning.json +29 -0
  19. package/fixtures/conformance-approval.json +27 -0
  20. package/fixtures/conformance-cancellable.json +33 -0
  21. package/fixtures/conformance-cap-breach.json +27 -0
  22. package/fixtures/conformance-capability-missing.json +23 -0
  23. package/fixtures/conformance-channel-ttl.json +60 -0
  24. package/fixtures/conformance-clarification.json +30 -0
  25. package/fixtures/conformance-conversation-capability-negotiation.json +23 -0
  26. package/fixtures/conformance-conversation-lifecycle.json +32 -0
  27. package/fixtures/conformance-conversation-replay.json +33 -0
  28. package/fixtures/conformance-conversation-vs-clarification.json +26 -0
  29. package/fixtures/conformance-delay.json +33 -0
  30. package/fixtures/conformance-dispatch-loop.json +38 -0
  31. package/fixtures/conformance-failure.json +23 -0
  32. package/fixtures/conformance-idempotent.json +30 -0
  33. package/fixtures/conformance-identity.json +32 -0
  34. package/fixtures/conformance-interrupt-auth-required.json +28 -0
  35. package/fixtures/conformance-interrupt-external-event.json +33 -0
  36. package/fixtures/conformance-interrupt-parent-child-cancel-child.json +27 -0
  37. package/fixtures/conformance-interrupt-parent-child-cancel.json +26 -0
  38. package/fixtures/conformance-interrupt-quorum.json +30 -0
  39. package/fixtures/conformance-mcp-tool-roundtrip.json +32 -0
  40. package/fixtures/conformance-message-reducer.json +31 -0
  41. package/fixtures/conformance-multi-node.json +21 -0
  42. package/fixtures/conformance-noop.json +23 -0
  43. package/fixtures/conformance-orchestrator-dispatch.json +47 -0
  44. package/fixtures/conformance-orchestrator-low-confidence.json +41 -0
  45. package/fixtures/conformance-orchestrator-terminate.json +44 -0
  46. package/fixtures/conformance-stream-text.json +26 -0
  47. package/fixtures/conformance-subworkflow-child.json +21 -0
  48. package/fixtures/conformance-subworkflow-parent.json +49 -0
  49. package/fixtures/conformance-version-fold.json +23 -0
  50. package/fixtures/conformance-wasm-pack-roundtrip.json +25 -0
  51. package/fixtures/pack-manifests/pack-private-example.json +26 -0
  52. package/fixtures.md +404 -0
  53. package/package.json +48 -0
  54. package/schemas/README.md +75 -0
  55. package/schemas/agent-manifest.schema.json +107 -0
  56. package/schemas/agent-ref.schema.json +53 -0
  57. package/schemas/capabilities.schema.json +287 -0
  58. package/schemas/channel-written-payload.schema.json +55 -0
  59. package/schemas/conversation-event.schema.json +120 -0
  60. package/schemas/conversation-turn.schema.json +72 -0
  61. package/schemas/debug-bundle.schema.json +196 -0
  62. package/schemas/dispatch-config.schema.json +46 -0
  63. package/schemas/error-envelope.schema.json +25 -0
  64. package/schemas/memory-entry.schema.json +36 -0
  65. package/schemas/memory-list-options.schema.json +21 -0
  66. package/schemas/node-pack-manifest.schema.json +235 -0
  67. package/schemas/orchestrator-decision.schema.json +60 -0
  68. package/schemas/run-event-payloads.schema.json +663 -0
  69. package/schemas/run-event.schema.json +116 -0
  70. package/schemas/run-options.schema.json +81 -0
  71. package/schemas/run-orchestrator-decided-event.schema.json +20 -0
  72. package/schemas/run-snapshot.schema.json +121 -0
  73. package/schemas/suspend-request.schema.json +182 -0
  74. package/schemas/workflow-definition.schema.json +430 -0
  75. package/src/cli.ts +187 -0
  76. package/src/lib/a2a-fake-peer.ts +233 -0
  77. package/src/lib/canaries.ts +186 -0
  78. package/src/lib/driver.ts +96 -0
  79. package/src/lib/env.ts +49 -0
  80. package/src/lib/fixtures.ts +93 -0
  81. package/src/lib/mcp-fake-server.ts +185 -0
  82. package/src/lib/multi-agent-capabilities.ts +155 -0
  83. package/src/lib/multiProcess.ts +141 -0
  84. package/src/lib/otel-collector.ts +312 -0
  85. package/src/lib/paths.ts +198 -0
  86. package/src/lib/polling.ts +81 -0
  87. package/src/lib/profiles.ts +258 -0
  88. package/src/lib/sse.ts +172 -0
  89. package/src/scenarios/a2a-task-roundtrip.test.ts +149 -0
  90. package/src/scenarios/agentConfidenceEscalation.test.ts +61 -0
  91. package/src/scenarios/agentMemoryCrossTenantIsolation.test.ts +54 -0
  92. package/src/scenarios/agentMemoryRedactionContract.test.ts +46 -0
  93. package/src/scenarios/agentMemoryRoundTrip.test.ts +52 -0
  94. package/src/scenarios/agentMemoryTtlExpiry.test.ts +47 -0
  95. package/src/scenarios/agentMessageReducer.test.ts +57 -0
  96. package/src/scenarios/agentMetadata.test.ts +56 -0
  97. package/src/scenarios/agentPackExport.test.ts +45 -0
  98. package/src/scenarios/agentPackInstall.test.ts +50 -0
  99. package/src/scenarios/agentPackProvenance.test.ts +53 -0
  100. package/src/scenarios/agentReasoningEvents.test.ts +72 -0
  101. package/src/scenarios/append-ordering.test.ts +91 -0
  102. package/src/scenarios/approval-payload.test.ts +120 -0
  103. package/src/scenarios/audit-log-integrity.test.ts +106 -0
  104. package/src/scenarios/auth.test.ts +55 -0
  105. package/src/scenarios/byok-roundtrip.test.ts +166 -0
  106. package/src/scenarios/cancellation.test.ts +68 -0
  107. package/src/scenarios/cap-breach.test.ts +149 -0
  108. package/src/scenarios/channel-ttl.test.ts +70 -0
  109. package/src/scenarios/configurable-schema.test.ts +76 -0
  110. package/src/scenarios/conversationCapabilityNegotiation.test.ts +39 -0
  111. package/src/scenarios/conversationLifecycle.test.ts +64 -0
  112. package/src/scenarios/conversationReplayDeterminism.test.ts +52 -0
  113. package/src/scenarios/conversationVsLegacySuspend.test.ts +46 -0
  114. package/src/scenarios/cost-attribution.test.ts +207 -0
  115. package/src/scenarios/debugBundle.test.ts +222 -0
  116. package/src/scenarios/discovery.test.ts +147 -0
  117. package/src/scenarios/dispatchLoop.test.ts +52 -0
  118. package/src/scenarios/errors.test.ts +144 -0
  119. package/src/scenarios/eventOrdering.test.ts +144 -0
  120. package/src/scenarios/failure-path.test.ts +46 -0
  121. package/src/scenarios/fixtures-gating.test.ts +137 -0
  122. package/src/scenarios/fixtures-valid.test.ts +140 -0
  123. package/src/scenarios/highConcurrency.test.ts +263 -0
  124. package/src/scenarios/idempotency.test.ts +83 -0
  125. package/src/scenarios/idempotencyRetry.test.ts +130 -0
  126. package/src/scenarios/identity-passthrough.test.ts +54 -0
  127. package/src/scenarios/interrupt-approval.test.ts +97 -0
  128. package/src/scenarios/interrupt-auth-required-resume.test.ts +88 -0
  129. package/src/scenarios/interrupt-clarification.test.ts +45 -0
  130. package/src/scenarios/interrupt-external-event-correlation.test.ts +113 -0
  131. package/src/scenarios/interrupt-parent-child-cascade.test.ts +102 -0
  132. package/src/scenarios/interrupt-quorum-resolution.test.ts +97 -0
  133. package/src/scenarios/interruptRace.test.ts +176 -0
  134. package/src/scenarios/maliciousManifest.test.ts +154 -0
  135. package/src/scenarios/mcp-discoverability.test.ts +129 -0
  136. package/src/scenarios/mcp-tool-roundtrip.test.ts +149 -0
  137. package/src/scenarios/multi-node-ordering.test.ts +60 -0
  138. package/src/scenarios/multi-region-idempotency.test.ts +52 -0
  139. package/src/scenarios/orchestratorConservativePath.test.ts +63 -0
  140. package/src/scenarios/orchestratorDispatch.test.ts +66 -0
  141. package/src/scenarios/orchestratorTermination.test.ts +54 -0
  142. package/src/scenarios/otel-emission.test.ts +113 -0
  143. package/src/scenarios/otel-trace-propagation.test.ts +90 -0
  144. package/src/scenarios/pack-registry-publish.test.ts +93 -0
  145. package/src/scenarios/pack-registry.test.ts +328 -0
  146. package/src/scenarios/pause-resume.test.ts +109 -0
  147. package/src/scenarios/policies.test.ts +162 -0
  148. package/src/scenarios/profileDerivation.test.ts +335 -0
  149. package/src/scenarios/providerPolicyEnforcement.test.ts +132 -0
  150. package/src/scenarios/rate-limit-envelope.test.ts +97 -0
  151. package/src/scenarios/redaction.test.ts +254 -0
  152. package/src/scenarios/redactionAdversarial.test.ts +162 -0
  153. package/src/scenarios/replay-fork-arbitrary.test.ts +347 -0
  154. package/src/scenarios/replay-fork.test.ts +216 -0
  155. package/src/scenarios/replayDeterminism.test.ts +171 -0
  156. package/src/scenarios/route-coverage.test.ts +129 -0
  157. package/src/scenarios/runs-lifecycle.test.ts +65 -0
  158. package/src/scenarios/runtime-capabilities.test.ts +118 -0
  159. package/src/scenarios/spec-corpus-validity.test.ts +1257 -0
  160. package/src/scenarios/staleClaim.test.ts +223 -0
  161. package/src/scenarios/stream-modes-buffer.test.ts +148 -0
  162. package/src/scenarios/stream-modes-mixed.test.ts +149 -0
  163. package/src/scenarios/stream-modes.test.ts +139 -0
  164. package/src/scenarios/streamReconnect.test.ts +162 -0
  165. package/src/scenarios/subworkflow.test.ts +126 -0
  166. package/src/scenarios/version-negotiation.test.ts +157 -0
  167. package/src/scenarios/wasm-pack-abi-version-rejection.test.ts +47 -0
  168. package/src/scenarios/wasm-pack-invoke-completed.test.ts +69 -0
  169. package/src/scenarios/wasm-pack-invoke-suspended.test.ts +74 -0
  170. package/src/scenarios/wasm-pack-load.test.ts +75 -0
  171. package/src/scenarios/wasm-pack-memory-cap.test.ts +43 -0
  172. package/src/scenarios/wasm-pack-replay-determinism.test.ts +61 -0
  173. package/src/scenarios/webhook-sig-algorithm.test.ts +61 -0
  174. package/src/setup.ts +173 -0
  175. package/vitest.config.ts +17 -0
@@ -0,0 +1,21 @@
1
+ {
2
+ "id": "conformance-multi-node",
3
+ "name": "Conformance: Multi-node",
4
+ "version": "1.0",
5
+ "description": "Three-node DAG (A → B → C, all noop). Verifies edge ordering and per-node event sequencing.",
6
+ "nodes": [
7
+ { "id": "a", "typeId": "core.noop", "name": "A", "position": { "x": 0, "y": 0 }, "config": {}, "inputs": {} },
8
+ { "id": "b", "typeId": "core.noop", "name": "B", "position": { "x": 200, "y": 0 }, "config": {}, "inputs": {} },
9
+ { "id": "c", "typeId": "core.noop", "name": "C", "position": { "x": 400, "y": 0 }, "config": {}, "inputs": {} }
10
+ ],
11
+ "edges": [
12
+ { "id": "ab", "sourceNodeId": "a", "targetNodeId": "b" },
13
+ { "id": "bc", "sourceNodeId": "b", "targetNodeId": "c" }
14
+ ],
15
+ "triggers": [
16
+ { "id": "manual", "type": "manual", "enabled": true }
17
+ ],
18
+ "variables": [],
19
+ "metadata": { "tags": ["conformance"] },
20
+ "settings": { "timeout": 30000 }
21
+ }
@@ -0,0 +1,23 @@
1
+ {
2
+ "id": "conformance-noop",
3
+ "name": "Conformance: Noop",
4
+ "version": "1.0",
5
+ "description": "Cheapest run-lifecycle fixture. Single core.noop node; reaches `completed` within 5s. See conformance/fixtures.md.",
6
+ "nodes": [
7
+ {
8
+ "id": "noop",
9
+ "typeId": "core.noop",
10
+ "name": "Noop",
11
+ "position": { "x": 0, "y": 0 },
12
+ "config": {},
13
+ "inputs": {}
14
+ }
15
+ ],
16
+ "edges": [],
17
+ "triggers": [
18
+ { "id": "manual", "type": "manual", "enabled": true }
19
+ ],
20
+ "variables": [],
21
+ "metadata": { "tags": ["conformance"] },
22
+ "settings": { "timeout": 10000 }
23
+ }
@@ -0,0 +1,47 @@
1
+ {
2
+ "id": "conformance-orchestrator-dispatch",
3
+ "name": "Conformance: Orchestrator Dispatch",
4
+ "version": "1.0",
5
+ "description": "Phase 5. Workflow with `core.orchestrator.supervisor` → `core.dispatch` topology. Supervisor mock emits `kind: 'next-worker'` referencing a child workflow id; dispatch executes the child run. Event log MUST contain `runOrchestrator.decided { kind: 'next-worker', nextWorkerIds: [...] }`. See orchestratorDispatch.test.ts.",
6
+ "nodes": [
7
+ {
8
+ "id": "supervisor",
9
+ "typeId": "core.orchestrator.supervisor",
10
+ "name": "Supervisor",
11
+ "position": { "x": 0, "y": 0 },
12
+ "config": {
13
+ "mockDecisions": [
14
+ { "kind": "next-worker", "nextWorkerIds": ["conformance-noop"] },
15
+ { "kind": "terminate", "reason": "goal-reached" }
16
+ ]
17
+ },
18
+ "inputs": {},
19
+ "agent": {
20
+ "agentId": "core.conformance.supervisor",
21
+ "modelClass": "reasoning"
22
+ }
23
+ },
24
+ {
25
+ "id": "dispatch",
26
+ "typeId": "core.dispatch",
27
+ "name": "Dispatch",
28
+ "position": { "x": 200, "y": 0 },
29
+ "config": {
30
+ "askUserRouting": "auto",
31
+ "workerDispatchModel": "child-run",
32
+ "fanOutPolicy": "sequential"
33
+ },
34
+ "inputs": {}
35
+ }
36
+ ],
37
+ "edges": [
38
+ { "id": "e1", "sourceNodeId": "supervisor", "targetNodeId": "dispatch" },
39
+ { "id": "e2", "sourceNodeId": "dispatch", "targetNodeId": "supervisor" }
40
+ ],
41
+ "triggers": [
42
+ { "id": "manual", "type": "manual", "enabled": true }
43
+ ],
44
+ "variables": [],
45
+ "metadata": { "tags": ["conformance", "multi-agent", "phase-5", "orchestrator", "dispatch"] },
46
+ "settings": { "timeout": 60000 }
47
+ }
@@ -0,0 +1,41 @@
1
+ {
2
+ "id": "conformance-orchestrator-low-confidence",
3
+ "name": "Conformance: Orchestrator Low-Confidence Suspend (CP-1)",
4
+ "version": "1.0",
5
+ "description": "Phase 5 / CP-1 invariant. Supervisor would emit a decision with `confidence: 0.5` against the default threshold 0.7. Host MUST hold the decision (no `runOrchestrator.decided` emitted), suspend the supervisor via `node.suspended { reason: 'low-confidence' }`, and transition run to `'waiting-approval'`. See orchestratorConservativePath.test.ts.",
6
+ "nodes": [
7
+ {
8
+ "id": "supervisor",
9
+ "typeId": "core.orchestrator.supervisor",
10
+ "name": "Supervisor (low confidence)",
11
+ "position": { "x": 0, "y": 0 },
12
+ "config": {
13
+ "mockConfidence": 0.5,
14
+ "mockPendingDecision": { "kind": "next-worker", "nextWorkerIds": ["conformance-noop"] }
15
+ },
16
+ "inputs": {},
17
+ "agent": {
18
+ "agentId": "core.conformance.low-conf-supervisor",
19
+ "modelClass": "reasoning"
20
+ }
21
+ },
22
+ {
23
+ "id": "dispatch",
24
+ "typeId": "core.dispatch",
25
+ "name": "Dispatch",
26
+ "position": { "x": 200, "y": 0 },
27
+ "config": {},
28
+ "inputs": {}
29
+ }
30
+ ],
31
+ "edges": [
32
+ { "id": "e1", "sourceNodeId": "supervisor", "targetNodeId": "dispatch" },
33
+ { "id": "e2", "sourceNodeId": "dispatch", "targetNodeId": "supervisor" }
34
+ ],
35
+ "triggers": [
36
+ { "id": "manual", "type": "manual", "enabled": true }
37
+ ],
38
+ "variables": [],
39
+ "metadata": { "tags": ["conformance", "multi-agent", "phase-5", "orchestrator", "low-confidence", "cp-1"] },
40
+ "settings": { "timeout": 30000 }
41
+ }
@@ -0,0 +1,44 @@
1
+ {
2
+ "id": "conformance-orchestrator-terminate",
3
+ "name": "Conformance: Orchestrator Termination (CO-3)",
4
+ "version": "1.0",
5
+ "description": "Phase 5 / CO-3 invariant. Supervisor mock emits a single `kind: 'terminate'` decision; run reaches `'completed'` (not `'failed'`); no further `runOrchestrator.decided` events follow. See orchestratorTermination.test.ts.",
6
+ "nodes": [
7
+ {
8
+ "id": "supervisor",
9
+ "typeId": "core.orchestrator.supervisor",
10
+ "name": "Supervisor (terminate immediately)",
11
+ "position": { "x": 0, "y": 0 },
12
+ "config": {
13
+ "mockDecisions": [
14
+ { "kind": "terminate", "reason": "goal-reached" }
15
+ ]
16
+ },
17
+ "inputs": {},
18
+ "agent": {
19
+ "agentId": "core.conformance.terminate-supervisor",
20
+ "modelClass": "reasoning"
21
+ }
22
+ },
23
+ {
24
+ "id": "dispatch",
25
+ "typeId": "core.dispatch",
26
+ "name": "Dispatch",
27
+ "position": { "x": 200, "y": 0 },
28
+ "config": {
29
+ "fanOutPolicy": "sequential"
30
+ },
31
+ "inputs": {}
32
+ }
33
+ ],
34
+ "edges": [
35
+ { "id": "e1", "sourceNodeId": "supervisor", "targetNodeId": "dispatch" },
36
+ { "id": "e2", "sourceNodeId": "dispatch", "targetNodeId": "supervisor" }
37
+ ],
38
+ "triggers": [
39
+ { "id": "manual", "type": "manual", "enabled": true }
40
+ ],
41
+ "variables": [],
42
+ "metadata": { "tags": ["conformance", "multi-agent", "phase-5", "orchestrator", "terminate", "co-3"] },
43
+ "settings": { "timeout": 30000 }
44
+ }
@@ -0,0 +1,26 @@
1
+ {
2
+ "id": "conformance-stream-text",
3
+ "name": "Conformance: Stream Text",
4
+ "version": "1.0",
5
+ "description": "Single AI node for messages-mode conformance testing. Test driver invokes with `configurable.mockProvider.id='stream-text'` + canned tokens; the mock intercepts the real AI dispatch and emits deterministic chunks. Closes F1.",
6
+ "nodes": [
7
+ {
8
+ "id": "ai",
9
+ "typeId": "core.ai.callPrompt",
10
+ "name": "AI Call (mock-routed)",
11
+ "position": { "x": 0, "y": 0 },
12
+ "config": {
13
+ "promptId": "conformance.stream-text-noop",
14
+ "expectsStreaming": true
15
+ },
16
+ "inputs": {}
17
+ }
18
+ ],
19
+ "edges": [],
20
+ "triggers": [
21
+ { "id": "manual", "type": "manual", "enabled": true }
22
+ ],
23
+ "variables": [],
24
+ "metadata": { "tags": ["conformance", "messages-mode"] },
25
+ "settings": { "timeout": 30000 }
26
+ }
@@ -0,0 +1,21 @@
1
+ {
2
+ "id": "conformance-subworkflow-child",
3
+ "name": "Conformance: Sub-workflow (child)",
4
+ "version": "1.0",
5
+ "description": "Child workflow dispatched by `conformance-subworkflow-parent`. Two-node noop chain that completes successfully and writes a known variable so the parent can assert variable propagation through `outputMapping`.",
6
+ "nodes": [
7
+ { "id": "child-n1", "typeId": "core.noop", "name": "Child N1", "position": { "x": 0, "y": 0 }, "config": {}, "inputs": {} },
8
+ { "id": "child-n2", "typeId": "core.noop", "name": "Child N2", "position": { "x": 200, "y": 0 }, "config": {}, "inputs": {} }
9
+ ],
10
+ "edges": [
11
+ { "id": "ec12", "sourceNodeId": "child-n1", "targetNodeId": "child-n2" }
12
+ ],
13
+ "triggers": [
14
+ { "id": "manual", "type": "manual", "enabled": true }
15
+ ],
16
+ "variables": [
17
+ { "name": "childResult", "type": "string", "defaultValue": "child-completed" }
18
+ ],
19
+ "metadata": { "tags": ["conformance", "subworkflow", "child"] },
20
+ "settings": { "timeout": 30000, "maxRetries": 0 }
21
+ }
@@ -0,0 +1,49 @@
1
+ {
2
+ "id": "conformance-subworkflow-parent",
3
+ "name": "Conformance: Sub-workflow (parent)",
4
+ "version": "1.0",
5
+ "description": "Parent workflow that dispatches `conformance-subworkflow-child` via `core.subWorkflow` (blocking dispatch with waitForCompletion=true) then completes. Verifies child run starts in the same tenant/scope, parent suspend/resume around child terminal, and child variable propagation through outputMapping. Spec: node-packs.md §Reserved Core OpenWOP node typeIds.",
6
+ "nodes": [
7
+ {
8
+ "id": "parent-start",
9
+ "typeId": "core.noop",
10
+ "name": "Parent Start",
11
+ "position": { "x": 0, "y": 0 },
12
+ "config": {},
13
+ "inputs": {}
14
+ },
15
+ {
16
+ "id": "subwf-call",
17
+ "typeId": "core.control.subWorkflow",
18
+ "name": "Invoke Child",
19
+ "position": { "x": 200, "y": 0 },
20
+ "config": {
21
+ "workflowId": "conformance-subworkflow-child",
22
+ "waitForCompletion": true,
23
+ "onChildFailure": "fail-parent",
24
+ "outputMapping": {
25
+ "childOutcome": "childResult"
26
+ }
27
+ },
28
+ "inputs": {}
29
+ },
30
+ {
31
+ "id": "parent-end",
32
+ "typeId": "core.noop",
33
+ "name": "Parent End",
34
+ "position": { "x": 400, "y": 0 },
35
+ "config": {},
36
+ "inputs": {}
37
+ }
38
+ ],
39
+ "edges": [
40
+ { "id": "ep1", "sourceNodeId": "parent-start", "targetNodeId": "subwf-call" },
41
+ { "id": "ep2", "sourceNodeId": "subwf-call", "targetNodeId": "parent-end" }
42
+ ],
43
+ "triggers": [
44
+ { "id": "manual", "type": "manual", "enabled": true }
45
+ ],
46
+ "variables": [],
47
+ "metadata": { "tags": ["conformance", "subworkflow", "parent"] },
48
+ "settings": { "timeout": 60000, "maxRetries": 0 }
49
+ }
@@ -0,0 +1,23 @@
1
+ {
2
+ "id": "conformance-version-fold",
3
+ "name": "Conformance: Version Fold",
4
+ "version": "1.0",
5
+ "description": "Single noop node used by the conformance suite to exercise forward-compat fold-best-effort across the engine-version interop matrix. Test driver issues the same POST /v1/runs three times with X-Force-Engine-Version set to (min, current, max) per Capabilities.testing.forceEngineVersionRange. Closes F5.",
6
+ "nodes": [
7
+ {
8
+ "id": "noop",
9
+ "typeId": "core.noop",
10
+ "name": "Noop",
11
+ "position": { "x": 0, "y": 0 },
12
+ "config": {},
13
+ "inputs": {}
14
+ }
15
+ ],
16
+ "edges": [],
17
+ "triggers": [
18
+ { "id": "manual", "type": "manual", "enabled": true }
19
+ ],
20
+ "variables": [],
21
+ "metadata": { "tags": ["conformance", "version-negotiation"] },
22
+ "settings": { "timeout": 10000 }
23
+ }
@@ -0,0 +1,25 @@
1
+ {
2
+ "id": "conformance-wasm-pack-roundtrip",
3
+ "name": "Conformance: WASM Pack Roundtrip",
4
+ "version": "1.0",
5
+ "description": "RFC 0008 fixture. Invokes a single WASM-packaged node (`vendor.openwop.rust-hello.greet`) and asserts the round-trip output. Hosts that don't advertise `capabilities.nodePackRuntimes.wasm.supported: true` skip the wasm-* scenarios. The reference Rust pack at `examples/packs/rust-hello/` provides the node; build it with `cargo build --target wasm32-unknown-unknown --release` before running the suite end-to-end.",
6
+ "nodes": [
7
+ {
8
+ "id": "greet",
9
+ "typeId": "vendor.openwop.rust-hello.greet",
10
+ "name": "Greet via WASM",
11
+ "position": { "x": 0, "y": 0 },
12
+ "config": {},
13
+ "inputs": {}
14
+ }
15
+ ],
16
+ "edges": [],
17
+ "triggers": [
18
+ { "id": "manual", "type": "manual", "enabled": true }
19
+ ],
20
+ "variables": [
21
+ { "name": "name", "type": "string", "defaultValue": "world" }
22
+ ],
23
+ "metadata": { "tags": ["conformance", "wasm", "node-pack", "rfc-0008"] },
24
+ "settings": { "timeout": 0 }
25
+ }
@@ -0,0 +1,26 @@
1
+ {
2
+ "name": "private.example-host.example-tools",
3
+ "version": "1.0.0",
4
+ "description": "Example private-scope pack manifest. Validates against node-pack-manifest.schema.json with the v1.0 reverse-DNS pattern that admits the `private.<host>.*` scope reserved for host-internal registries.",
5
+ "license": "Apache-2.0",
6
+ "engines": {
7
+ "openwop": ">=1.0 <2.0.0"
8
+ },
9
+ "nodes": [
10
+ {
11
+ "typeId": "private.example-host.example.echo",
12
+ "version": "1.0.0",
13
+ "label": "Echo Node",
14
+ "description": "Returns its input verbatim — minimal pack content for fixture purposes.",
15
+ "category": "data",
16
+ "role": "pure",
17
+ "capabilities": ["cacheable"]
18
+ }
19
+ ],
20
+ "runtime": {
21
+ "language": "javascript",
22
+ "entry": "dist/index.js",
23
+ "format": "esm",
24
+ "minRuntimeVersion": "node>=20"
25
+ }
26
+ }