@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.
- package/LICENSE +201 -0
- package/README.md +241 -0
- package/api/asyncapi.yaml +481 -0
- package/api/openapi.yaml +830 -0
- package/api/redocly.yaml +8 -0
- package/coverage.md +80 -0
- package/dist/cli.js +161 -0
- package/fixtures/conformance-a2a-task-roundtrip.json +27 -0
- package/fixtures/conformance-agent-identity.json +27 -0
- package/fixtures/conformance-agent-low-confidence.json +29 -0
- package/fixtures/conformance-agent-memory-cross-tenant.json +28 -0
- package/fixtures/conformance-agent-memory-redaction.json +32 -0
- package/fixtures/conformance-agent-memory-roundtrip.json +32 -0
- package/fixtures/conformance-agent-memory-ttl.json +31 -0
- package/fixtures/conformance-agent-pack-export.json +26 -0
- package/fixtures/conformance-agent-pack-install.json +26 -0
- package/fixtures/conformance-agent-pack-provenance.json +31 -0
- package/fixtures/conformance-agent-reasoning.json +29 -0
- package/fixtures/conformance-approval.json +27 -0
- package/fixtures/conformance-cancellable.json +33 -0
- package/fixtures/conformance-cap-breach.json +27 -0
- package/fixtures/conformance-capability-missing.json +23 -0
- package/fixtures/conformance-channel-ttl.json +60 -0
- package/fixtures/conformance-clarification.json +30 -0
- package/fixtures/conformance-conversation-capability-negotiation.json +23 -0
- package/fixtures/conformance-conversation-lifecycle.json +32 -0
- package/fixtures/conformance-conversation-replay.json +33 -0
- package/fixtures/conformance-conversation-vs-clarification.json +26 -0
- package/fixtures/conformance-delay.json +33 -0
- package/fixtures/conformance-dispatch-loop.json +38 -0
- package/fixtures/conformance-failure.json +23 -0
- package/fixtures/conformance-idempotent.json +30 -0
- package/fixtures/conformance-identity.json +32 -0
- package/fixtures/conformance-interrupt-auth-required.json +28 -0
- package/fixtures/conformance-interrupt-external-event.json +33 -0
- package/fixtures/conformance-interrupt-parent-child-cancel-child.json +27 -0
- package/fixtures/conformance-interrupt-parent-child-cancel.json +26 -0
- package/fixtures/conformance-interrupt-quorum.json +30 -0
- package/fixtures/conformance-mcp-tool-roundtrip.json +32 -0
- package/fixtures/conformance-message-reducer.json +31 -0
- package/fixtures/conformance-multi-node.json +21 -0
- package/fixtures/conformance-noop.json +23 -0
- package/fixtures/conformance-orchestrator-dispatch.json +47 -0
- package/fixtures/conformance-orchestrator-low-confidence.json +41 -0
- package/fixtures/conformance-orchestrator-terminate.json +44 -0
- package/fixtures/conformance-stream-text.json +26 -0
- package/fixtures/conformance-subworkflow-child.json +21 -0
- package/fixtures/conformance-subworkflow-parent.json +49 -0
- package/fixtures/conformance-version-fold.json +23 -0
- package/fixtures/conformance-wasm-pack-roundtrip.json +25 -0
- package/fixtures/pack-manifests/pack-private-example.json +26 -0
- package/fixtures.md +404 -0
- package/package.json +48 -0
- package/schemas/README.md +75 -0
- package/schemas/agent-manifest.schema.json +107 -0
- package/schemas/agent-ref.schema.json +53 -0
- package/schemas/capabilities.schema.json +287 -0
- package/schemas/channel-written-payload.schema.json +55 -0
- package/schemas/conversation-event.schema.json +120 -0
- package/schemas/conversation-turn.schema.json +72 -0
- package/schemas/debug-bundle.schema.json +196 -0
- package/schemas/dispatch-config.schema.json +46 -0
- package/schemas/error-envelope.schema.json +25 -0
- package/schemas/memory-entry.schema.json +36 -0
- package/schemas/memory-list-options.schema.json +21 -0
- package/schemas/node-pack-manifest.schema.json +235 -0
- package/schemas/orchestrator-decision.schema.json +60 -0
- package/schemas/run-event-payloads.schema.json +663 -0
- package/schemas/run-event.schema.json +116 -0
- package/schemas/run-options.schema.json +81 -0
- package/schemas/run-orchestrator-decided-event.schema.json +20 -0
- package/schemas/run-snapshot.schema.json +121 -0
- package/schemas/suspend-request.schema.json +182 -0
- package/schemas/workflow-definition.schema.json +430 -0
- package/src/cli.ts +187 -0
- package/src/lib/a2a-fake-peer.ts +233 -0
- package/src/lib/canaries.ts +186 -0
- package/src/lib/driver.ts +96 -0
- package/src/lib/env.ts +49 -0
- package/src/lib/fixtures.ts +93 -0
- package/src/lib/mcp-fake-server.ts +185 -0
- package/src/lib/multi-agent-capabilities.ts +155 -0
- package/src/lib/multiProcess.ts +141 -0
- package/src/lib/otel-collector.ts +312 -0
- package/src/lib/paths.ts +198 -0
- package/src/lib/polling.ts +81 -0
- package/src/lib/profiles.ts +258 -0
- package/src/lib/sse.ts +172 -0
- package/src/scenarios/a2a-task-roundtrip.test.ts +149 -0
- package/src/scenarios/agentConfidenceEscalation.test.ts +61 -0
- package/src/scenarios/agentMemoryCrossTenantIsolation.test.ts +54 -0
- package/src/scenarios/agentMemoryRedactionContract.test.ts +46 -0
- package/src/scenarios/agentMemoryRoundTrip.test.ts +52 -0
- package/src/scenarios/agentMemoryTtlExpiry.test.ts +47 -0
- package/src/scenarios/agentMessageReducer.test.ts +57 -0
- package/src/scenarios/agentMetadata.test.ts +56 -0
- package/src/scenarios/agentPackExport.test.ts +45 -0
- package/src/scenarios/agentPackInstall.test.ts +50 -0
- package/src/scenarios/agentPackProvenance.test.ts +53 -0
- package/src/scenarios/agentReasoningEvents.test.ts +72 -0
- package/src/scenarios/append-ordering.test.ts +91 -0
- package/src/scenarios/approval-payload.test.ts +120 -0
- package/src/scenarios/audit-log-integrity.test.ts +106 -0
- package/src/scenarios/auth.test.ts +55 -0
- package/src/scenarios/byok-roundtrip.test.ts +166 -0
- package/src/scenarios/cancellation.test.ts +68 -0
- package/src/scenarios/cap-breach.test.ts +149 -0
- package/src/scenarios/channel-ttl.test.ts +70 -0
- package/src/scenarios/configurable-schema.test.ts +76 -0
- package/src/scenarios/conversationCapabilityNegotiation.test.ts +39 -0
- package/src/scenarios/conversationLifecycle.test.ts +64 -0
- package/src/scenarios/conversationReplayDeterminism.test.ts +52 -0
- package/src/scenarios/conversationVsLegacySuspend.test.ts +46 -0
- package/src/scenarios/cost-attribution.test.ts +207 -0
- package/src/scenarios/debugBundle.test.ts +222 -0
- package/src/scenarios/discovery.test.ts +147 -0
- package/src/scenarios/dispatchLoop.test.ts +52 -0
- package/src/scenarios/errors.test.ts +144 -0
- package/src/scenarios/eventOrdering.test.ts +144 -0
- package/src/scenarios/failure-path.test.ts +46 -0
- package/src/scenarios/fixtures-gating.test.ts +137 -0
- package/src/scenarios/fixtures-valid.test.ts +140 -0
- package/src/scenarios/highConcurrency.test.ts +263 -0
- package/src/scenarios/idempotency.test.ts +83 -0
- package/src/scenarios/idempotencyRetry.test.ts +130 -0
- package/src/scenarios/identity-passthrough.test.ts +54 -0
- package/src/scenarios/interrupt-approval.test.ts +97 -0
- package/src/scenarios/interrupt-auth-required-resume.test.ts +88 -0
- package/src/scenarios/interrupt-clarification.test.ts +45 -0
- package/src/scenarios/interrupt-external-event-correlation.test.ts +113 -0
- package/src/scenarios/interrupt-parent-child-cascade.test.ts +102 -0
- package/src/scenarios/interrupt-quorum-resolution.test.ts +97 -0
- package/src/scenarios/interruptRace.test.ts +176 -0
- package/src/scenarios/maliciousManifest.test.ts +154 -0
- package/src/scenarios/mcp-discoverability.test.ts +129 -0
- package/src/scenarios/mcp-tool-roundtrip.test.ts +149 -0
- package/src/scenarios/multi-node-ordering.test.ts +60 -0
- package/src/scenarios/multi-region-idempotency.test.ts +52 -0
- package/src/scenarios/orchestratorConservativePath.test.ts +63 -0
- package/src/scenarios/orchestratorDispatch.test.ts +66 -0
- package/src/scenarios/orchestratorTermination.test.ts +54 -0
- package/src/scenarios/otel-emission.test.ts +113 -0
- package/src/scenarios/otel-trace-propagation.test.ts +90 -0
- package/src/scenarios/pack-registry-publish.test.ts +93 -0
- package/src/scenarios/pack-registry.test.ts +328 -0
- package/src/scenarios/pause-resume.test.ts +109 -0
- package/src/scenarios/policies.test.ts +162 -0
- package/src/scenarios/profileDerivation.test.ts +335 -0
- package/src/scenarios/providerPolicyEnforcement.test.ts +132 -0
- package/src/scenarios/rate-limit-envelope.test.ts +97 -0
- package/src/scenarios/redaction.test.ts +254 -0
- package/src/scenarios/redactionAdversarial.test.ts +162 -0
- package/src/scenarios/replay-fork-arbitrary.test.ts +347 -0
- package/src/scenarios/replay-fork.test.ts +216 -0
- package/src/scenarios/replayDeterminism.test.ts +171 -0
- package/src/scenarios/route-coverage.test.ts +129 -0
- package/src/scenarios/runs-lifecycle.test.ts +65 -0
- package/src/scenarios/runtime-capabilities.test.ts +118 -0
- package/src/scenarios/spec-corpus-validity.test.ts +1257 -0
- package/src/scenarios/staleClaim.test.ts +223 -0
- package/src/scenarios/stream-modes-buffer.test.ts +148 -0
- package/src/scenarios/stream-modes-mixed.test.ts +149 -0
- package/src/scenarios/stream-modes.test.ts +139 -0
- package/src/scenarios/streamReconnect.test.ts +162 -0
- package/src/scenarios/subworkflow.test.ts +126 -0
- package/src/scenarios/version-negotiation.test.ts +157 -0
- package/src/scenarios/wasm-pack-abi-version-rejection.test.ts +47 -0
- package/src/scenarios/wasm-pack-invoke-completed.test.ts +69 -0
- package/src/scenarios/wasm-pack-invoke-suspended.test.ts +74 -0
- package/src/scenarios/wasm-pack-load.test.ts +75 -0
- package/src/scenarios/wasm-pack-memory-cap.test.ts +43 -0
- package/src/scenarios/wasm-pack-replay-determinism.test.ts +61 -0
- package/src/scenarios/webhook-sig-algorithm.test.ts +61 -0
- package/src/setup.ts +173 -0
- 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
|
+
}
|