@openwop/openwop-conformance 1.21.0 → 1.24.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/CHANGELOG.md +43 -2
- package/README.md +61 -63
- package/api/asyncapi.yaml +108 -38
- package/api/openapi.yaml +34 -6
- package/coverage.md +389 -202
- package/fixtures/connection-packs/connection-pack-github.json +31 -0
- package/fixtures.md +120 -101
- package/package.json +1 -1
- package/schemas/README.md +4 -0
- package/schemas/capabilities.schema.json +127 -0
- package/schemas/connection-pack-manifest.schema.json +161 -0
- package/schemas/export-bundle.schema.json +66 -0
- package/schemas/goal.schema.json +104 -0
- package/schemas/proposal.schema.json +84 -0
- package/schemas/run-event-payloads.schema.json +86 -7
- package/schemas/run-event.schema.json +17 -3
- package/schemas/run-options.schema.json +1 -2
- package/schemas/run-snapshot.schema.json +2 -1
- package/schemas/suspend-request.schema.json +5 -0
- package/src/scenarios/connection-pack-manifest-valid.test.ts +122 -0
- package/src/scenarios/connection-pack-no-credential-material.test.ts +125 -0
- package/src/scenarios/connection-pack-reach-exclusive.test.ts +85 -0
- package/src/scenarios/connection-pack-write-reconsent.test.ts +91 -0
- package/src/scenarios/connection-provider-resolution.test.ts +153 -0
- package/src/scenarios/cross-host-traceparent-propagation.test.ts +3 -3
- package/src/scenarios/export-bundle-portability.test.ts +120 -0
- package/src/scenarios/fixtures-valid.test.ts +34 -0
- package/src/scenarios/goal-standing-continuation.test.ts +139 -0
- package/src/scenarios/grpc-transport.test.ts +108 -0
- package/src/scenarios/i18n-negotiation.test.ts +181 -0
- package/src/scenarios/interrupt-token-matrix.test.ts +2 -2
- package/src/scenarios/media-url-inline-cap.test.ts +5 -3
- package/src/scenarios/proposal-reviewable-learning.test.ts +129 -0
- package/src/scenarios/spec-corpus-validity.test.ts +107 -0
- package/src/scenarios/stream-text-fixture.test.ts +212 -0
- package/src/scenarios/version-fold.test.ts +193 -0
- package/src/scenarios/wasm-pack-memory-cap.test.ts +4 -2
- package/src/scenarios/webhook-tenant-isolation.test.ts +184 -0
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "core.openwop.connections.github",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"kind": "connection",
|
|
5
|
+
"engines": { "openwop": ">=1.0.0" },
|
|
6
|
+
"provider": {
|
|
7
|
+
"id": "github",
|
|
8
|
+
"displayName": "GitHub",
|
|
9
|
+
"category": "dev",
|
|
10
|
+
"auth": {
|
|
11
|
+
"kind": "oauth2",
|
|
12
|
+
"authFlow": "pkce",
|
|
13
|
+
"scopeModel": "groups",
|
|
14
|
+
"endpoints": {
|
|
15
|
+
"authorize": "https://github.com/login/oauth/authorize",
|
|
16
|
+
"token": "https://github.com/login/oauth/access_token"
|
|
17
|
+
},
|
|
18
|
+
"scopes": {
|
|
19
|
+
"read": [
|
|
20
|
+
{ "key": "repo.read", "label": "Read repositories", "scopes": ["repo:status", "public_repo"] }
|
|
21
|
+
],
|
|
22
|
+
"write": [
|
|
23
|
+
{ "key": "repo.write", "label": "Write repositories", "scopes": ["repo"] }
|
|
24
|
+
]
|
|
25
|
+
}
|
|
26
|
+
},
|
|
27
|
+
"reach": { "mcp": { "server": { "url": "https://api.githubcopilot.com/mcp/", "transport": "http" } } },
|
|
28
|
+
"consumerNodes": ["core.openwop.mcp.invoke-tool", "core.openwop.mcp.read-resource"],
|
|
29
|
+
"docsUrl": "https://docs.github.com/en/apps/oauth-apps"
|
|
30
|
+
}
|
|
31
|
+
}
|
package/fixtures.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
#
|
|
1
|
+
# OpenWOP Conformance Suite — Fixture Workflow Contract
|
|
2
2
|
|
|
3
3
|
> **Status: FINAL v1 (2026-05-10).** Defines the standardized fixture workflows every OpenWOP-compliant server MUST seed before the conformance suite can exercise run-lifecycle, idempotency, stream-mode, interrupt, and replay scenarios. Stable surface for external review. Keywords MUST, SHOULD, MAY follow [RFC 2119](https://www.rfc-editor.org/rfc/rfc2119). Status legend per `../spec/v1/auth.md`.
|
|
4
4
|
|
|
@@ -40,81 +40,81 @@ All fixtures MUST advertise:
|
|
|
40
40
|
- **Inputs** — schema declared via `variables[]`
|
|
41
41
|
- **Expected behavior** — terminal status, expected event types, timing bounds
|
|
42
42
|
|
|
43
|
-
| Fixture
|
|
44
|
-
|
|
45
|
-
| Noop
|
|
46
|
-
| Identity
|
|
47
|
-
| Delay
|
|
48
|
-
| Failure
|
|
49
|
-
| Approval
|
|
50
|
-
| Clarification
|
|
51
|
-
| Multi-node
|
|
52
|
-
| Idempotent
|
|
53
|
-
| Cancellable
|
|
54
|
-
| Capability Missing
|
|
55
|
-
| Prompt End-to-End
|
|
56
|
-
| Prompt All Four Kinds
|
|
57
|
-
| Dispatch Loop
|
|
58
|
-
| Interrupt — Quorum
|
|
59
|
-
| Interrupt — External Event
|
|
60
|
-
| Interrupt — Auth Required
|
|
61
|
-
| Interrupt — Parent/Child Cancel
|
|
62
|
-
| Agent Identity
|
|
63
|
-
| Agent Reasoning
|
|
64
|
-
| Agent Reasoning Streaming
|
|
65
|
-
| Agent Low-Confidence
|
|
66
|
-
| Message Reducer
|
|
67
|
-
| Agent Pack Install
|
|
68
|
-
| Agent Pack Export
|
|
69
|
-
| Agent Pack Provenance
|
|
70
|
-
| Agent Pack Handoff Schema Validation
|
|
71
|
-
| Dispatch Input Mapping
|
|
72
|
-
| Dispatch Output Mapping
|
|
73
|
-
| Dispatch Cross-Worker Handoff
|
|
74
|
-
| subWorkflow Input Mapping
|
|
75
|
-
| subWorkflow Input Mapping (child)
|
|
76
|
-
| Dispatch Input Mapping (child)
|
|
77
|
-
| Dispatch Output Mapping (child)
|
|
78
|
-
| Dispatch Cross-Worker Handoff (child-a)
|
|
79
|
-
| Dispatch Cross-Worker Handoff (child-b)
|
|
80
|
-
| Dispatch Input Mapping — unset variant
|
|
81
|
-
| subWorkflow Input Mapping — unset variant | `conformance-subworkflow-input-mapping-no-default`
|
|
82
|
-
| subWorkflow Mid-Run Mutation (parent)
|
|
83
|
-
| subWorkflow Mid-Run Mutation (child)
|
|
84
|
-
| Dispatch Per-Worker Mapping Override
|
|
85
|
-
| Dispatch deterministic-fail child
|
|
86
|
-
| Dispatch cancellable child
|
|
87
|
-
| Multi-Agent Handoff (parent)
|
|
88
|
-
| Multi-Agent Handoff (child)
|
|
89
|
-
| Multi-Agent Confidence Escalation
|
|
90
|
-
| Agent Memory Round-Trip
|
|
91
|
-
| Agent Memory Cross-Tenant
|
|
92
|
-
| Agent Memory Redaction
|
|
93
|
-
| Agent Memory TTL
|
|
94
|
-
| Conversation Lifecycle
|
|
95
|
-
| Conversation vs Clarification
|
|
96
|
-
| Conversation Replay
|
|
97
|
-
| Conversation Capability Negotiation
|
|
98
|
-
| Orchestrator Dispatch
|
|
99
|
-
| Orchestrator Terminate
|
|
100
|
-
| Orchestrator Low-Confidence
|
|
101
|
-
| MCP Tool Roundtrip
|
|
102
|
-
| A2A Task Roundtrip
|
|
103
|
-
| WASM Pack Roundtrip
|
|
104
|
-
| WASM Pack Memory-Cap Breach
|
|
105
|
-
| Configurable Schema
|
|
106
|
-
| Smoke — BYOK Roundtrip
|
|
107
|
-
| Smoke — Cost Emit (G6 allowlist)
|
|
108
|
-
| Model Capability Insufficient
|
|
109
|
-
| Envelope Retry Attempted
|
|
110
|
-
| Envelope Retry Exhausted
|
|
111
|
-
| Envelope Truncated
|
|
112
|
-
| Envelope Truncation Cap Exhaustion
|
|
113
|
-
| Envelope Refusal
|
|
114
|
-
| Envelope Recovery Applied
|
|
115
|
-
| Envelope NL-to-Format Engaged
|
|
116
|
-
| Phase 4 Replay Divergence
|
|
117
|
-
| Phase 4 Nondeterministic Tool
|
|
43
|
+
| Fixture | `workflowId` | Purpose | Terminal status | Bounded duration |
|
|
44
|
+
| ----------------------------------------- | ----------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- | ---------------------------- |
|
|
45
|
+
| Noop | `conformance-noop` | Cheapest possible run-lifecycle test | `completed` | ≤ 5s |
|
|
46
|
+
| Identity | `conformance-identity` | Verifies input/output passthrough | `completed` | ≤ 5s |
|
|
47
|
+
| Delay | `conformance-delay` | Verifies poll/SSE behavior over time | `completed` | ≤ 30s (input-controlled) |
|
|
48
|
+
| Failure | `conformance-failure` | Verifies error-event surface | `failed` | ≤ 5s |
|
|
49
|
+
| Approval | `conformance-approval` | Verifies HITL approval interrupt + resume | `completed` after resolve | unbounded (suspends) |
|
|
50
|
+
| Clarification | `conformance-clarification` | Verifies HITL clarification interrupt + resume | `completed` after resolve | unbounded (suspends) |
|
|
51
|
+
| Multi-node | `conformance-multi-node` | Verifies edge ordering + per-node events | `completed` | ≤ 10s |
|
|
52
|
+
| Idempotent | `conformance-idempotent` | Verifies `Idempotency-Key` cache | `completed` | ≤ 5s |
|
|
53
|
+
| Cancellable | `conformance-cancellable` | Verifies `:cancel` endpoint mid-run | `cancelled` after cancel | ≤ 60s (input-controlled) |
|
|
54
|
+
| Capability Missing | `conformance-capability-missing` | Verifies dispatch refusal on unsatisfied `requires` | `failed` (`error.code='capability_not_provided'`) | ≤ 5s |
|
|
55
|
+
| Prompt End-to-End | `conformance-prompt-end-to-end` | RFC 0027 + RFC 0029 end-to-end. Single `mock-ai` node with `config.systemPromptRef` set; host MUST emit `agent.promptResolved` + `prompt.composed` events during dispatch, then complete. Capability-gated on `capabilities.prompts.supported`. | `completed` | ≤ 10s |
|
|
56
|
+
| Prompt All Four Kinds | `conformance-prompt-all-four-kinds` | RFC 0027 §A four-kind dispatch coverage with a MULTI-ENTRY `fewShotPromptRefs[]` array. Single `mock-ai` node with one ref per singular-kind slot (`systemPromptRef`, `userPromptRef`, `schemaHintPromptRef`) + two distinct templateIds in `fewShotPromptRefs[]`; host MUST emit 5 `agent.promptResolved` events (one per slot) AND 5 `prompt.composed` events. Multi-entry few-shot is the regression pin for `fewShotPromptRefs[slotIndex]` per-index resolution — a host that hard-codes `[0]` would emit the same template twice in the few-shot events and fail the per-templateId assertion. Capability-gated on `capabilities.prompts.supported`. | `completed` | ≤ 10s |
|
|
57
|
+
| Dispatch Loop | `conformance-dispatch-loop` | Verifies `core.dispatch` loop mechanism | `completed` | ≤ 30s |
|
|
58
|
+
| Interrupt — Quorum | `conformance-interrupt-quorum` | Verifies `openwop-interrupt-quorum` profile (multi-approver, majority rejection) | `completed` after 3 accepts, `failed` after quorum reject | unbounded (suspends) |
|
|
59
|
+
| Interrupt — External Event | `conformance-interrupt-external-event` | Verifies `openwop-interrupt-external-event` profile (correlation-matched callback) | `completed` after matching POST, `failed` on timeout | ≤ 60s (timeoutMs configured) |
|
|
60
|
+
| Interrupt — Auth Required | `conformance-interrupt-auth-required` | Verifies `openwop-interrupt-auth-required` profile (bearer-token resume only) | `completed` after bearer resolve | unbounded (suspends) |
|
|
61
|
+
| Interrupt — Parent/Child Cancel | `conformance-interrupt-parent-child-cancel` + `conformance-interrupt-parent-child-cancel-child` | Verifies `openwop-interrupt-parent-child` cancel cascade | `cancelled` (both runs) | ≤ 30s |
|
|
62
|
+
| Agent Identity | `conformance-agent-identity` | Phase 1 — `RunSnapshot.agent` / `runOrchestrator` AgentRef wire-shape | `completed` | ≤ 10s |
|
|
63
|
+
| Agent Reasoning | `conformance-agent-reasoning` | Phase 1 / RFC 0023 — `agent.*` event family emission + `callId` pairing on `core.conformance.mock-agent` | `completed` | ≤ 15s |
|
|
64
|
+
| Agent Reasoning Streaming | `conformance-agent-reasoning-streaming` | RFC 0024 — `core.conformance.mock-agent` with `mockReasoning.streamChunks` drives incremental `agent.reasoning.delta` events (sequence 0..N-1) followed by exactly one closing `agent.reasoned` whose `reasoning` equals the concatenation. Gated on `capabilities.agents.reasoning.streaming: true`. | `completed` | ≤ 15s |
|
|
65
|
+
| Agent Low-Confidence | `conformance-agent-low-confidence` | Phase 1 / CP-1 / RFC 0023 — `core.conformance.mock-agent` emits `agent.decided` with confidence < threshold; host MUST follow with `node.suspended { reason: 'low-confidence' }` | `waiting-approval` (suspends) | unbounded (suspends) |
|
|
66
|
+
| Message Reducer | `conformance-message-reducer` | Phase 1 — `message` reducer idempotency on duplicate `messageId` | `completed` | ≤ 10s |
|
|
67
|
+
| Agent Pack Install | `conformance-agent-pack-install` | Phase 2 — pack `agents[]` surface as AgentManifest at `GET /v1/packs` | `completed` | ≤ 5s |
|
|
68
|
+
| Agent Pack Export | `conformance-agent-pack-export` | Phase 2 — workspace agents project to AgentManifest at `GET /v1/packs/export` | `completed` | ≤ 5s |
|
|
69
|
+
| Agent Pack Provenance | `conformance-agent-pack-provenance` | Phase 2 — `sourceManifestId` provenance round-trip | `completed` | ≤ 10s |
|
|
70
|
+
| Agent Pack Handoff Schema Validation | `conformance-agent-pack-handoff-schema-validation` | Phase 2 / HV-1 — host validates dispatch payloads against `handoff.taskSchemaRef` AND return payloads against `handoff.returnSchemaRef` per RFC 0003 §D. Three branches: valid-task → `completed`; invalid-task → `failed` with structured violation; mock-return-violation → violation surfaced before persistence. | varies by scenario | ≤ 5s |
|
|
71
|
+
| Dispatch Input Mapping | `conformance-dispatch-input-mapping` | RFC 0022 §A / HVMAP-1a — host honors `inputMapping` on `core.dispatch`. Capability-gated on `capabilities.agents.dispatchMapping`. | `completed` | ≤ 5s |
|
|
72
|
+
| Dispatch Output Mapping | `conformance-dispatch-output-mapping` | RFC 0022 §A / HVMAP-1b — host harvests child variables via `outputMapping` on `core.dispatch`. Capability-gated on `capabilities.agents.dispatchMapping`. | `completed` | ≤ 5s |
|
|
73
|
+
| Dispatch Cross-Worker Handoff | `conformance-dispatch-cross-worker-handoff` | RFC 0022 §A / HVMAP-1c — sequential fan-out: child-a writes via `perWorkerOutputMappings`, child-b reads via `perWorkerInputMappings`. Capability-gated on `capabilities.agents.dispatchMapping`. | `completed` | ≤ 10s |
|
|
74
|
+
| subWorkflow Input Mapping | `conformance-subworkflow-input-mapping` | RFC 0022 §B / HVMAP-2 — host honors `inputMapping` on `core.subWorkflow`; overrides matching `defaultValue` declarations on the child. Capability-gated on `capabilities.subWorkflow.inputMapping`. | `completed` | ≤ 10s |
|
|
75
|
+
| subWorkflow Input Mapping (child) | `conformance-subworkflow-input-mapping-child` | RFC 0022 §B / HVMAP-2 — child workflow for the input-mapping scenario. Declares `receivedPrdId.defaultValue='baked-in'`; parent's `inputMapping` MUST override that default. Single noop node; final variables read via `GET /v1/runs/{runId}` for the assertion. | `completed` | ≤ 5s |
|
|
76
|
+
| Dispatch Input Mapping (child) | `conformance-dispatch-input-mapping-child` | RFC 0022 §A / HVMAP-1a — child workflow for the dispatch input-mapping scenario. Single noop node; the scenario reads this child's `inputs_json` via `GET /v1/runs/{childRunId}` and asserts `inputs.childGreeting === 'Alice'`. | `completed` | ≤ 5s |
|
|
77
|
+
| Dispatch Output Mapping (child) | `conformance-dispatch-output-mapping-child` | RFC 0022 §A / HVMAP-1b — child workflow for the dispatch output-mapping scenario. Declares `childOutcome.defaultValue='done'`; on terminal, parent's `outputMapping` harvests `childOutcome → parentResult`. | `completed` | ≤ 5s |
|
|
78
|
+
| Dispatch Cross-Worker Handoff (child-a) | `conformance-dispatch-cross-worker-handoff-child-a` | RFC 0022 §A / HVMAP-1c — first child of the cross-worker-handoff scenario. Declares `output.defaultValue='hello'`; on terminal, parent's `perWorkerOutputMappings.child-a` harvests `output → sharedVar`. | `completed` | ≤ 5s |
|
|
79
|
+
| Dispatch Cross-Worker Handoff (child-b) | `conformance-dispatch-cross-worker-handoff-child-b` | RFC 0022 §A + §D / HVMAP-1c — second child of the cross-worker-handoff scenario. Sequential fan-out — runs after child-a; receives parent's `sharedVar` via `perWorkerInputMappings.child-b` onto its `input` input. Scenario reads child-b's `inputs_json` to assert `inputs.input === 'hello'`. | `completed` | ≤ 5s |
|
|
80
|
+
| Dispatch Input Mapping — unset variant | `conformance-dispatch-input-mapping-no-default` | RFC 0022 §A / HVMAP-1a-null — parent variant that DECLARES `parentName` but OMITS its `defaultValue`. The dispatch's `inputMapping` projects an unset parent variable; per §A normative bullet, child `inputs.childGreeting` MUST surface as `undefined` (NOT `null`, NOT omitted). Reuses `conformance-dispatch-input-mapping-child`. | `completed` | ≤ 30s |
|
|
81
|
+
| subWorkflow Input Mapping — unset variant | `conformance-subworkflow-input-mapping-no-default` | RFC 0022 §B / HVMAP-2-unset — parent variant that DECLARES `currentPrdId` but OMITS its `defaultValue`. Per §B, the unset projection MUST surface as `undefined` (NOT `null`) — distinct from the child's own `defaultValue` fold. Reuses `conformance-subworkflow-input-mapping-child`. | `completed` | ≤ 10s |
|
|
82
|
+
| subWorkflow Mid-Run Mutation (parent) | `conformance-subworkflow-mid-run-mutation` | RFC 0022 §B / HVMAP-2-no-midrun-propagation — `inputMapping` is a one-shot fold at child-dispatch time. Parent declares `currentPrdId='seeded-id'`, dispatches child with `inputMapping`, then test mutates the parent variable via `POST /v1/host/sample/test/runs/:parentRunId/variables` WHILE the child is suspended. The child's `receivedPrdId` MUST remain at the dispatch-time fold (`seeded-id`), proving mid-run parent mutations do NOT propagate. | `completed` | ≤ 30s |
|
|
83
|
+
| subWorkflow Mid-Run Mutation (child) | `conformance-subworkflow-mid-run-mutation-child` | RFC 0022 §B / HVMAP-2-no-midrun-propagation — child workflow with a `core.approvalGate` that suspends so the parent can mutate its variable bag mid-run. Declares `receivedPrdId.defaultValue='baked-in'` (overridden at dispatch by inputMapping). | `completed` | ≤ 30s |
|
|
84
|
+
| Dispatch Per-Worker Mapping Override | `conformance-dispatch-per-worker-override` | RFC 0022 §A / HVMAP-1c-override — parent with BOTH a default `inputMapping` (`{ input: 'defaultX' }`) AND `perWorkerInputMappings.child-b: { input: 'sharedVar' }`. Verifies `effectiveInputMapping` precedence per §A: child-a receives the default, child-b receives the override. Reuses `conformance-dispatch-cross-worker-handoff-child-a` + `-child-b`. | `completed` | ≤ 30s |
|
|
85
|
+
| Dispatch deterministic-fail child | `conformance-dispatch-deterministic-fail-child` | RFC 0022 §B / HVMAP-1b-failed — child workflow that ALWAYS terminates `failed` via `core.fail`. Used by `conformance-dispatch-output-mapping` to verify the parent's `outputMapping` is SKIPPED when the child fails terminally. | `failed` | ≤ 5s |
|
|
86
|
+
| Dispatch cancellable child | `conformance-dispatch-cancellable-child` | RFC 0022 §B / HVMAP-1b-cancelled — child workflow with a long `core.delay` so the test cancels it externally via `POST /v1/runs/{childRunId}/cancel`. Verifies the parent's `outputMapping` is SKIPPED when the child terminates `cancelled`. | `cancelled` | ≤ 60s |
|
|
87
|
+
| Multi-Agent Handoff (parent) | `conformance-multi-agent-handoff` | RFC 0037 (`version: 1`) — exercises the planner→worker handoff state machine. Supervisor decides one `next-worker`, dispatch spawns the child, harvests outputMapping. Conformance reads the event log for the 4 `core.workflowChain.event` transition records in causation-chained order (`dispatch.began → dispatch.succeeded → child.completed → output.harvested`). Capability-gated on `capabilities.multiAgent.executionModel.supported`. | `completed` | ≤ 30s |
|
|
88
|
+
| Multi-Agent Handoff (child) | `conformance-multi-agent-handoff-child` | RFC 0037 (`version: 1`) — child for `conformance-multi-agent-handoff`. Declares `childOutcome.defaultValue='handoff-complete'`; the parent's outputMapping harvests it onto `parentResult`, triggering the `output.harvested` transition event. | `completed` | ≤ 5s |
|
|
89
|
+
| Multi-Agent Confidence Escalation | `conformance-multi-agent-confidence-escalation` | RFC 0039 §A (`version: 2`) — exercises the confidence-floor escalation contract. Supervisor's `mockDispatchPlan` carries ONE decision with `confidence: 0.3` (below the 0.5 spec floor). The host MUST emit `core.workflowChain.confidence-escalated` AND suspend with a clarification interrupt BEFORE any dispatch.began fires; conformance asserts zero `core.workflowChain.event` records (no dispatch). Capability-gated on `capabilities.multiAgent.executionModel.version >= 2`. | `waiting-clarification` | ≤ 30s |
|
|
90
|
+
| Agent Memory Round-Trip | `conformance-agent-memory-roundtrip` | Phase 3 — `MemoryAdapter.list/get` write → read | `completed` | ≤ 15s |
|
|
91
|
+
| Agent Memory Cross-Tenant | `conformance-agent-memory-cross-tenant` | Phase 3 / CTI-1 — cross-tenant probe MUST return `[]` / `null` | `completed` | ≤ 10s |
|
|
92
|
+
| Agent Memory Redaction | `conformance-agent-memory-redaction` | Phase 3 / SR-1 — BYOK plaintext surfaces as `[REDACTED:<id>]` on read | `completed` | ≤ 15s |
|
|
93
|
+
| Agent Memory TTL | `conformance-agent-memory-ttl` | Phase 3 — `expiresAt` excludes expired entries from list/get | `completed` | ≤ 10s |
|
|
94
|
+
| Conversation Lifecycle | `conformance-conversation-lifecycle` | Phase 4 — open → exchange → close event ordering | `completed` | ≤ 20s |
|
|
95
|
+
| Conversation vs Clarification | `conformance-conversation-vs-clarification` | Phase 4 — conversation suspend emits `conversation.*`, NOT `clarification.*` | `completed` | ≤ 15s |
|
|
96
|
+
| Conversation Replay | `conformance-conversation-replay` | Phase 4 — `:fork` preserves conversation channel projection | `completed` | ≤ 30s |
|
|
97
|
+
| Conversation Capability Negotiation | `conformance-conversation-capability-negotiation` | Phase 4 — INVERTED gate: hosts without `conversationPrimitive: true` MUST refuse | `failed` / refusal | ≤ 5s |
|
|
98
|
+
| Orchestrator Dispatch | `conformance-orchestrator-dispatch` | Phase 5 — supervisor → `next-worker` → dispatch round-trip | `completed` | ≤ 60s |
|
|
99
|
+
| Orchestrator Terminate | `conformance-orchestrator-terminate` | Phase 5 / CO-3 — terminate decision is final | `completed` | ≤ 30s |
|
|
100
|
+
| Orchestrator Low-Confidence | `conformance-orchestrator-low-confidence` | Phase 5 / CP-1 — supervisor low-confidence suspend | `waiting-approval` (suspends) | unbounded (suspends) |
|
|
101
|
+
| MCP Tool Roundtrip | `conformance-mcp-tool-roundtrip` | Track 6 — host invokes a tool on the conformance suite's synthetic MCP server; trust-boundary visibility in the event log | `completed` | ≤ 30s |
|
|
102
|
+
| A2A Task Roundtrip | `conformance-a2a-task-roundtrip` | Track 6 — host consumes the conformance suite's synthetic A2A peer; covers drift points #3 (`AUTH_REQUIRED`) and #4 (`REJECTED`) | `failed` or `waiting-input` (per `driftScenario` input) | ≤ 30s |
|
|
103
|
+
| WASM Pack Roundtrip | `conformance-wasm-pack-roundtrip` | RFC 0008 — invokes `vendor.openwop.rust-hello.greet` (loaded WASM pack); exercises required exports + at least one import | `completed` | ≤ 10s |
|
|
104
|
+
| WASM Pack Memory-Cap Breach | `conformance-wasm-pack-memory-cap-breach` | RFC 0008 §K — invokes the deliberately-misbehaving `vendor.openwop.misbehaving.memory-bomb` pack (allocates 1 GiB beyond the host's `memoryPagesMax`). Host MUST emit `cap.breached` with `kind: "wasm-memory"` and drive the run to terminal `failed`. Misbehaving pack lives at `openwop-examples:examples/packs/rust-misbehaving-memory/` (repo-qualified per the 2026-06 monorepo split — the `openwop-examples` sibling repo) and is fixture-only (NOT signed for registry publication). | `failed` (with `cap.breached`) | ≤ 10s |
|
|
105
|
+
| Configurable Schema | `conformance-configurable-schema` | Track 13 — workflow declares `configurableSchema` (`additionalProperties: false`, `recursionLimit: integer ≥ 1`). Suite verifies `GET /v1/workflows/{id}` surfaces the schema AND `POST /v1/runs` with a mismatched `configurable` returns `validation_error`. | `completed` (with accepted overlay) | ≤ 5s |
|
|
106
|
+
| Smoke — BYOK Roundtrip | `openwop-smoke-byok-roundtrip` | End-to-end BYOK secret-resolution smoke. Single `conformance.secret.echo` node fetches the host-provisioned canary secret `openwop-conformance-canary-secret`, emits SHA-256 hex + byte length to variables — never the raw value. Spec: `run-options.md` §"Credential references" + `auth.md` §"Secret resolution" + `observability.md` §"Redaction". | `completed` | ≤ 10s |
|
|
107
|
+
| Smoke — Cost Emit (G6 allowlist) | `openwop-smoke-cost-emit` | End-to-end cost-attribute allowlist smoke (G6 / O4). Single `conformance.cost.emit` node configured with a mix of allowlisted `openwop.cost.*` attributes + one non-allowlisted key + one credential-shaped canary under a non-allowlisted name. Scenario reads the live OTel span (when `OPENWOP_OTEL_COLLECTOR=true`) and asserts the cost-namespace attrs ⊆ `OPENWOP_COST_ATTRIBUTE_NAMES` AND that no canary plaintext leaks. Pairs with the `cost-attribution-allowlist-redaction` SECURITY invariant. Spec: `observability.md §"Cost attribution attributes"`. | `completed` | ≤ 10s |
|
|
108
|
+
| Model Capability Insufficient | `conformance-model-capability-insufficient` | RFC 0031 §B step 4 + §D — single `conformance.modelCapability.insufficient` node whose NodeModule declares `requiredModelCapabilities: ['nonexistent-capability-9b3f']`. Executor's gate MUST refuse at dispatch with `error.code = "capability_not_provided"` and emit `model.capability.insufficient` BEFORE `node.failed`. Capability-gated on `capabilities.modelCapabilities.supported: true`. | `failed` (`error.code='capability_not_provided'`) | ≤ 5s |
|
|
109
|
+
| Envelope Retry Attempted | `conformance-envelope-retry-attempted` | RFC 0032 §B.1 — single `core.ai.structuredOutput` node calls the conformance mock provider with a pre-seeded `MockProgram[]` (POSTed to `/v1/host/sample/test/mock-ai/program` by nodeId BEFORE run start). Attempt 1 returns invalid JSON; attempt 2 returns a valid envelope. Host's `dispatchStructured()` retry loop MUST emit exactly one `envelope.retry.attempted` event between the two attempts. Pairs with `envelope-retry-attempted.test.ts`. Capability-gated on `capabilities.envelopes.reliability.supported: true` AND `capabilities.testing.mockProviders` advertised. | `completed` | ≤ 10s |
|
|
110
|
+
| Envelope Retry Exhausted | `conformance-envelope-retry-exhausted` | RFC 0032 §B.2 + RFC 0033 §C — single `core.ai.structuredOutput` node against the mock provider with a program returning invalid JSON on EVERY attempt. Host MUST exhaust its retry budget and emit exactly one `envelope.retry.exhausted` BEFORE `node.failed`. RunSnapshot.error.code MUST be `envelope_payload_invalid` (schema-violation-exhaustion per RFC 0033 §C). | `failed` (`error.code='envelope_payload_invalid'`) | ≤ 10s |
|
|
111
|
+
| Envelope Truncated | `conformance-envelope-truncated` | RFC 0032 §B.4 + RFC 0033 §B — single `core.ai.structuredOutput` node against the mock provider with a 2-entry program: attempt 1 returns `stopReason: 'max_tokens'`; attempt 2 returns a valid envelope. Host MUST emit exactly one `envelope.truncated` event and retry with `maxTokens` strictly greater than the initial budget per `truncationBudgetMultiplier`. | `completed` (after truncation-retry succeeds) | ≤ 10s |
|
|
112
|
+
| Envelope Truncation Cap Exhaustion | `conformance-envelope-truncation-cap-exhaustion` | RFC 0033 §B + §F DoS-bound assertion — mock provider returns `stopReason: 'max_tokens'` on EVERY attempt. Host MUST emit `envelope.retry.exhausted { finalReason: 'truncation' }`, fail with `error.code: 'envelope_truncation_unrecoverable'`, AND bound the total LLM call count to the advertised `maxRetryAttempts` (no infinite-budget-doubling loop). | `failed` (`error.code='envelope_truncation_unrecoverable'`) | ≤ 10s |
|
|
113
|
+
| Envelope Refusal | `conformance-envelope-refusal` | RFC 0032 §B.3 + RFC 0033 §D + §F end-to-end refusal — mock provider returns `stopReason: 'safety'` with `refusalText`. Host MUST emit exactly one `envelope.refusal` event, NOT retry (RFC 0033 §D), fail with `error.code: 'envelope_refused_by_provider'`, AND keep refusalText off `RunSnapshot.error.message` (SECURITY invariant `envelope-refusal-no-prompt-leak`). | `failed` (`error.code='envelope_refused_by_provider'`) | ≤ 10s |
|
|
114
|
+
| Envelope Recovery Applied | `conformance-envelope-recovery-applied` | RFC 0032 §B.6 lenient-parse — mock returns a markdown-fenced JSON envelope (`json\\n...\\n`). Host's `dispatchStructured()` lenient-parse fallback (`tryLenientParse()`) strips the fence, emits exactly one `envelope.recovery.applied` with `path: 'markdown-fence'`, and accepts the parsed value WITHOUT counting against the retry budget per RFC 0033 §D. | `completed` | ≤ 10s |
|
|
115
|
+
| Envelope NL-to-Format Engaged | `conformance-envelope-nl-to-format-engaged` | RFC 0032 §B.5 NL-to-Format fallback — mock returns natural-language prose on the first 3 attempts (exhausting the retry budget); the host detects the NL shape after exhaustion, emits exactly one `envelope.nlToFormat.engaged { originalEnvelopeType, fallbackCalls: 1 }`, then fires ONE additional dispatch with a corrective coercion fragment. The 4th program entry returns valid JSON; the schema validates; the run terminates `completed`. | `completed` | ≤ 10s |
|
|
116
|
+
| Phase 4 Replay Divergence | `conformance-phase4-replay-divergence` | RFC 0041 §B — single `core.ai.structuredOutput` node against mock provider. Conformance scenario pre-seeds a 2-entry program via the existing mock-AI program seam: entry [0] returns a valid envelope (original run consumes); entry [1] returns `stopReason: 'safety'` + `refusalText` (`:fork mode: replay` consumes). Phase 4 hosts advertising `multiAgent.executionModel.replayDeterminism.refusalDivergenceEmission: true` MUST emit `replay.divergedAtRefusal` + fail replay with `error.code: 'replay_diverged_at_refusal'`. Silent substitution is non-conformant. Pairs with `replay-divergence-at-refusal.test.ts`. | original: `completed`; replay: `failed` (`error.code='replay_diverged_at_refusal'`) | ≤ 10s |
|
|
117
|
+
| Phase 4 Nondeterministic Tool | `conformance-phase4-nondet-tool` | RFC 0041 §C — two-node workflow (`core.noop` proxied as a nondeterministic tool → `core.ai.structuredOutput`). Used by `replay-observable-sequence-determinism.test.ts` to verify that across original + replay runs, the observable `RunEventDoc` sequence prefix is identical up to and including the nondeterministic-tool node's `node.completed` event. The host's replay path MUST replay the original event log entries (rather than re-executing the tool) for nodes whose `core.tool.*` config carries `nondeterministic: true`. Phase 4 hosts advertising `multiAgent.executionModel.replayDeterminism.supported: true` honor this contract. | original + replay: `completed`; observable prefixes equal up to the nondet boundary | ≤ 10s |
|
|
118
118
|
|
|
119
119
|
The `messages`-mode stream fixture (AI token streaming) is covered by the deterministic mock-provider surface in `spec/v1/run-options.md`. Hosts that do not advertise `Capabilities.testing.mockProviders` skip-equivalent on those scenarios.
|
|
120
120
|
|
|
@@ -248,6 +248,7 @@ The `messages`-mode stream fixture (AI token streaming) is covered by the determ
|
|
|
248
248
|
|
|
249
249
|
## `conformance-version-fold` (closes F5)
|
|
250
250
|
|
|
251
|
+
- **Consuming scenario**: `conformance/src/scenarios/version-fold.test.ts` (added 2026-06-11; previously this fixture had no consuming scenario).
|
|
251
252
|
- **Purpose**: verify forward-compat fold-best-effort tolerance across the spec's engine-version cross-version interop matrix (`version-negotiation.md` §Cross-version interop matrix). Uses the test-keys-only `X-Force-Engine-Version` header to drive the same workflow at three different engine versions from a single deployed server — no multi-version fleet needed.
|
|
252
253
|
- **Fixture topology**: a single `core.noop` node. The workflow itself is trivial; the test exercises the server's READ path (projection, event-log fold) under each forced engine version.
|
|
253
254
|
- **Inputs**: none.
|
|
@@ -270,11 +271,13 @@ This fixture closes F5 without requiring any new server-side test infrastructure
|
|
|
270
271
|
|
|
271
272
|
## `conformance-stream-text` (closes F1)
|
|
272
273
|
|
|
274
|
+
- **Consuming scenario**: `conformance/src/scenarios/stream-text-fixture.test.ts` (added 2026-06-11; previously this fixture had no consuming scenario).
|
|
273
275
|
- **Purpose**: verify the `messages` SSE stream mode end-to-end through a deterministic AI mock. Without a mock provider, conformance suites can't exercise streaming AI without burning real API budget; with one, the test is fully reproducible.
|
|
274
276
|
- **Fixture topology**: a single `core.ai.callPrompt` (or similar AI-bearing typeId) node. The node's actual prompt content is irrelevant — the conformance driver intercepts the AI dispatch via `configurable.mockProvider`.
|
|
275
277
|
- **Inputs**: none.
|
|
276
278
|
- **Conformance test driver**:
|
|
277
279
|
1. POST `/v1/runs` with body:
|
|
280
|
+
|
|
278
281
|
```jsonc
|
|
279
282
|
{
|
|
280
283
|
"workflowId": "conformance-stream-text",
|
|
@@ -291,18 +294,21 @@ This fixture closes F5 without requiring any new server-side test infrastructure
|
|
|
291
294
|
}
|
|
292
295
|
}
|
|
293
296
|
```
|
|
297
|
+
|
|
294
298
|
Use a test API key (server returns 403 on production keys per `run-options.md` §Authorization).
|
|
299
|
+
|
|
295
300
|
2. Subscribe to `/v1/runs/{runId}/events?streamMode=messages`.
|
|
296
301
|
3. **Assert** chunk arrival order: `["Hello", " ", "world", "!"]` — same order as `tokens`.
|
|
297
302
|
4. **Assert** the final chunk has `isLast: true`, `meta.finishReason === "stop"`, `meta.usage.completionTokens === 4`.
|
|
298
303
|
5. **Assert** SSE stream closes on terminal — server-closed, not timeout.
|
|
299
304
|
6. **Assert** terminal status is `completed`.
|
|
305
|
+
|
|
300
306
|
- **Negative paths**:
|
|
301
307
|
- Same fixture with a production API key returns `403 mock_provider_forbidden`.
|
|
302
308
|
- Same fixture with `mockProvider.id: "does-not-exist"` returns `400 unsupported_mock_provider`.
|
|
303
309
|
- **Replay assertion**: forking the run with `mode: replay` produces a byte-identical event log (mock providers are inherently replay-deterministic — no Layer-2 invocation log needed).
|
|
304
310
|
|
|
305
|
-
This fixture is the canonical `messages`-mode test
|
|
311
|
+
This fixture is the canonical `messages`-mode test, wired into the suite via `stream-text-fixture.test.ts` (2026-06-11). Servers that don't yet support the mock-provider extension can mark this fixture optional in their conformance manifest until they do.
|
|
306
312
|
|
|
307
313
|
---
|
|
308
314
|
|
|
@@ -431,15 +437,15 @@ Hosts that don't ship a BYOK SecretResolver MAY return `404` / `422` on the star
|
|
|
431
437
|
|
|
432
438
|
The fixtures reference these typeIds:
|
|
433
439
|
|
|
434
|
-
| typeId
|
|
435
|
-
|
|
436
|
-
| `core.noop`
|
|
437
|
-
| `core.identity`
|
|
438
|
-
| `core.delay`
|
|
439
|
-
| `core.fail`
|
|
440
|
-
| `core.approvalGate`
|
|
441
|
-
| `core.clarificationGate`
|
|
442
|
-
| `conformance.requiresMissing` | capability-missing
|
|
440
|
+
| typeId | Required by | Behavior |
|
|
441
|
+
| ----------------------------- | ------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
442
|
+
| `core.noop` | noop, multi-node, approval, clarification, cancellable | Immediate completion, no output |
|
|
443
|
+
| `core.identity` | identity | Echo `input.payload` to `output.payload` |
|
|
444
|
+
| `core.delay` | delay, cancellable | Sleep `config.delayMs` ms |
|
|
445
|
+
| `core.fail` | failure | Throw with `code: "conformance_test_failure"`, message: "Intentional conformance failure" |
|
|
446
|
+
| `core.approvalGate` | approval | Call `ctx.interrupt({kind: 'approval', ...})` |
|
|
447
|
+
| `core.clarificationGate` | clarification | Call `ctx.interrupt({kind: 'clarification', ...})` |
|
|
448
|
+
| `conformance.requiresMissing` | capability-missing | Declares `requires: ['conformance.never-provided']`; engine MUST refuse dispatch. Opt-in fixture registration is recommended so production deployments don't expose the fixture surface. |
|
|
443
449
|
|
|
444
450
|
An OpenWOP-compliant server's NodeModule registry MUST include implementations for all six core typeIds before seeding fixtures. The `conformance.requiresMissing` fixture node is opt-in — see the row above.
|
|
445
451
|
|
|
@@ -453,7 +459,7 @@ Each fixture's JSON has its own `version` field. The OpenWOP v1.0 conformance su
|
|
|
453
459
|
|
|
454
460
|
## File layout
|
|
455
461
|
|
|
456
|
-
```
|
|
462
|
+
```text
|
|
457
463
|
conformance/
|
|
458
464
|
fixtures.md — this file
|
|
459
465
|
fixtures/
|
|
@@ -476,21 +482,33 @@ Each JSON is a valid `WorkflowDefinition` per `../schemas/workflow-definition.sc
|
|
|
476
482
|
|
|
477
483
|
The `fixtures/pack-manifests/` sub-directory holds canonical pack manifests used as schema-level proof points (validated server-free against `../schemas/node-pack-manifest.schema.json`). They are NOT seeded into a server — they exist to assert the canonical schema accepts each documented pack-name scope.
|
|
478
484
|
|
|
479
|
-
| Fixture
|
|
480
|
-
|
|
485
|
+
| Fixture | `name` | Purpose |
|
|
486
|
+
| ---------------------- | ------------------------------------ | -------------------------------------------------------------------------------------------------------------- |
|
|
481
487
|
| `pack-private-example` | `private.example-host.example-tools` | Asserts the v1.0 pack-name pattern accepts the `private.<host>.*` scope reserved for host-internal registries. |
|
|
482
488
|
|
|
483
489
|
Pack-manifest fixtures are exercised by the server-free `fixtures-valid.test.ts` scenarios — adding one runs the schema validator against it automatically.
|
|
484
490
|
|
|
485
491
|
---
|
|
486
492
|
|
|
493
|
+
## Connection pack fixtures
|
|
494
|
+
|
|
495
|
+
The `fixtures/connection-packs/` sub-directory holds canonical connection-pack manifests (RFC 0095, `kind: "connection"`) used as schema-level proof points (validated server-free against `../schemas/connection-pack-manifest.schema.json`) AND as the install payloads the capability-gated behavioral scenarios POST to the `POST /v1/host/sample/connection-packs/install` seam. They are NOT seeded into a server.
|
|
496
|
+
|
|
497
|
+
| Fixture | `provider.id` | Purpose |
|
|
498
|
+
| ------------------------ | ------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
499
|
+
| `connection-pack-github` | `github` | Canonical positive manifest (oauth2 + pkce, read/write scope groups, MCP reach, the exempt `provider.auth.endpoints.token` endpoint URL). Drives manifest-valid, no-credential-material, reach-exclusive, provider-resolution, and write-reconsent scenarios. |
|
|
500
|
+
|
|
501
|
+
Negative manifests (credential material, mixed kinds, dual reach) are inline test data in the scenario files per suite convention — a deliberately-invalid fixture file would fail the automatic `fixtures-valid.test.ts` sweep.
|
|
502
|
+
|
|
503
|
+
---
|
|
504
|
+
|
|
487
505
|
## OAuth provider fixtures
|
|
488
506
|
|
|
489
507
|
The `fixtures/oauth-providers/` sub-directory holds synthetic OAuth provider definitions used to prove the RFC 0047 `host.oauth` authorization-code roundtrip end-to-end **without a live IdP**. They are NOT `WorkflowDefinition`s and are NOT seeded as workflows — they parameterize the behavioral roundtrip scenario, which drives the host's `POST /v1/host/sample/oauth/authorize-code-roundtrip` seam against the provider's `authUrl`/`tokenUrl` (served by a conformance test double).
|
|
490
508
|
|
|
491
|
-
| Fixture
|
|
492
|
-
|
|
493
|
-
| `synthetic` | `synthetic`
|
|
509
|
+
| Fixture | `provider.id` | Purpose |
|
|
510
|
+
| ----------- | ------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
511
|
+
| `synthetic` | `synthetic` | The ONE canonical synthetic provider. Real providers differ only in `authUrl`/`tokenUrl` with no provider-specific grant/exchange quirks on the wire, so a single parameterizable provider exercises the whole authorization-code dance. Carries a canned `exchange` (authorization code, state, PKCE verifier, redirect URI, and a canary `tokenResponse`) so the paired `oauth-authorization-code-roundtrip.test.ts` can assert RFC 0047 §C + §C.2 redaction — none of those values may appear on a run-visible surface. A provider-specific quirk fixture is added only if one ever materializes. |
|
|
494
512
|
|
|
495
513
|
---
|
|
496
514
|
|
|
@@ -498,17 +516,18 @@ The `fixtures/oauth-providers/` sub-directory holds synthetic OAuth provider def
|
|
|
498
516
|
|
|
499
517
|
The `fixtures/prompt-templates/` sub-directory holds canonical PromptTemplate documents (per RFC 0027 §A) used as schema-level proof points (validated server-free against `../schemas/prompt-template.schema.json`). They are NOT seeded into a workflow store. They exist so the `prompt-template-shape` scenario has stable positive fixtures, the secret-redaction + trust-marker conformance scenarios have known fixture templateIds to compose against (when a host advertises `capabilities.prompts.supported: true` + `observability: "full"`), and follow-up RFCs (RFC 0028 prompt packs, RFC 0029 resolution chain) can reference a stable shared fixture set.
|
|
500
518
|
|
|
501
|
-
| Fixture
|
|
502
|
-
|
|
503
|
-
| `conformance-prompt-writer-system`
|
|
504
|
-
| `conformance-prompt-secret-redaction` | `conformance.prompt.secret-redaction` | `kind: "user"` template carrying a `source: "secret"` variable. Drives `prompt-composed-secret-redaction` scenario; the host's compose seam binds `apiKey` to a canary-marker secret and the scenario asserts the `[REDACTED:<secretId>]` marker appears in `prompt.composed` payload.
|
|
505
|
-
| `conformance-prompt-trust-marker`
|
|
506
|
-
| `conformance-prompt-schema-hint`
|
|
507
|
-
| `conformance-prompt-few-shot`
|
|
508
|
-
| `conformance-prompt-few-shot-2`
|
|
509
|
-
| `conformance-prompt-writer-user`
|
|
519
|
+
| Fixture | `templateId` | Purpose |
|
|
520
|
+
| ------------------------------------- | ------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
521
|
+
| `conformance-prompt-writer-system` | `conformance.prompt.writer-system` | Minimal `kind: "system"` template with no variables. Asserts positive round-trip against the canonical schema. |
|
|
522
|
+
| `conformance-prompt-secret-redaction` | `conformance.prompt.secret-redaction` | `kind: "user"` template carrying a `source: "secret"` variable. Drives `prompt-composed-secret-redaction` scenario; the host's compose seam binds `apiKey` to a canary-marker secret and the scenario asserts the `[REDACTED:<secretId>]` marker appears in `prompt.composed` payload. |
|
|
523
|
+
| `conformance-prompt-trust-marker` | `conformance.prompt.trust-marker` | `kind: "user"` template with a `source: "input"` variable. The conformance compose seam tags the binding `meta.contentTrust: "untrusted"` so the `prompt-composed-trust-marker` scenario asserts `<UNTRUSTED>...</UNTRUSTED>` wrapping + `contentTrust: "untrusted"` propagation. |
|
|
524
|
+
| `conformance-prompt-schema-hint` | `conformance.prompt.schema-hint` | `kind: "schema-hint"` template — structured-output directive instructing the model to emit a specific JSON shape. Variable-free. Used by the `prompt-all-four-kinds-events` scenario to exercise the schema-hint dispatch slot on the reference workflow-engine's `local.sample.demo.mock-ai` node. |
|
|
525
|
+
| `conformance-prompt-few-shot` | `conformance.prompt.few-shot` | `kind: "few-shot"` template carrying two Q/A exemplar pairs (coffee + tea). Variable-free. Used by the `prompt-all-four-kinds-events` scenario as the FIRST entry of the multi-entry `fewShotPromptRefs[]` array — exercises `slotIndex: 0` of the resolver's per-index lookup. |
|
|
526
|
+
| `conformance-prompt-few-shot-2` | `conformance.prompt.few-shot-2` | Second `kind: "few-shot"` template carrying two Q/A exemplar pairs (chocolate + cheese). Variable-free. Used by the `prompt-all-four-kinds-events` scenario as the SECOND entry of the multi-entry `fewShotPromptRefs[]` array — exercises `slotIndex: 1`. The regression pin for `fewShotPromptRefs[slotIndex]` per-index resolution; a host that hard-codes `[0]` silently drops this template. |
|
|
527
|
+
| `conformance-prompt-writer-user` | `conformance.prompt.writer-user` | Minimal `kind: "user"` template paired with `conformance.prompt.writer-system` to give the four-kinds fixture a kind-accurate user slot. Variable-free; renders verbatim. |
|
|
510
528
|
|
|
511
529
|
Fixture invariants enforced by `fixtures-valid.test.ts`:
|
|
530
|
+
|
|
512
531
|
1. Every file under `prompt-templates/` validates against `prompt-template.schema.json`.
|
|
513
532
|
2. Every file declares a non-empty `templateId`.
|
|
514
533
|
3. Any fixture declaring a `source: "secret"` variable MUST carry the `secret-redaction` tag — the prompt-composed-secret-redaction scenario discovers fixtures by tag, so an untagged fixture would silently bypass redaction assertions.
|
package/package.json
CHANGED
package/schemas/README.md
CHANGED
|
@@ -10,6 +10,9 @@
|
|
|
10
10
|
| `agent-eval-suite.schema.json` | `agent-evaluation.md` (RFC 0081) | Portable agent evaluation suite — tasks + golden/rubric `expected` + deterministic fixtures + allowed model classes + pass/fail thresholds, pack-distributed via `evalSuiteRef` |
|
|
11
11
|
| `agent-manifest.schema.json` | `node-packs.md` + agent-pack RFCs | Agent manifest entries distributed alongside node-pack manifests |
|
|
12
12
|
| `eval-summary.schema.json` | `agent-evaluation.md` (RFC 0081) | The content-free eval-run scorecard — aggregate + per-task scores/cost/latency/safety-findings + regression delta; served by `GET /v1/runs/{runId}/eval-summary` (SECURITY invariant `eval-summary-no-content-leak`) |
|
|
13
|
+
| `proposal.schema.json` | `agent-memory.md` §"Reviewable learning" (RFC 0096) | Reviewable-learning proposal — an INERT, draft-state reusable artifact (agent-pack/workflow-chain-pack/prompt-template/automation) synthesized from run traces; MUST NOT influence any run until `applied`; activation delegated to RFC 0051/0049 (SECURITY invariants `proposal-inert-until-applied`, `proposal-no-resynthesis`) |
|
|
14
|
+
| `goal.schema.json` | `agent-runtime.md` §"Standing goals" (RFC 0097) | Standing goal — a durable objective with judge-based (RFC 0090) completion + bounded (RFC 0058) continuation; completion is the judge's verdict, never client-set (SECURITY invariants `goal-continuation-bounded`, `goal-completion-judge-only`) |
|
|
15
|
+
| `export-bundle.schema.json` | `portability.md` (RFC 0098) | Portable agent-platform export bundle — a tenant's reusable estate (agents/packs/templates/connection-refs/schedules/roster/org-chart) for cross-host migration; carries NO credential values, only refs (SECURITY invariant `export-bundle-no-credential-material`) |
|
|
13
16
|
| `agent-ref.schema.json` | `agent-memory.md` + agent-identity RFC | Multi-Agent Shift Phase 1 — slim runtime AgentRef projection carried on `RunSnapshot.agent` / `runOrchestrator`, `WorkflowNode.agent?`, and `agent.*` event payloads |
|
|
14
17
|
| `agent-roster-entry.schema.json` | `agent-roster.md` (RFC 0086) | Standing agent INSTANCE — a named, tenant-scoped `host:<id>` agent (the "digital-twin employee") that references a manifest/deployment (`agentRef`) and owns a `workflows[]` portfolio; the discovery shape behind `GET /v1/agents/roster` + the `roster` inventory projection |
|
|
15
18
|
| `agent-org-chart.schema.json` | `agent-org-chart.md` (RFC 0087) | Tenant-scoped, DESCRIPTIVE grouping of roster members into departments + roles with acyclic `reportsTo` edges; carries NO authority field (every object `additionalProperties:false`) per the `org-position-no-authority-escalation` invariant; the discovery shape behind `GET /v1/agents/org-chart` |
|
|
@@ -32,6 +35,7 @@
|
|
|
32
35
|
| `capabilities.schema.json` | `capabilities.md` | `/.well-known/openwop` response — protocolVersion + supportedEnvelopes + schemaVersions + limits + optional v1 discovery surface |
|
|
33
36
|
| `channel-written-payload.schema.json` | `channels-and-reducers.md` §Channel write event | Payload of the `channel.written` RunEvent — write input + reducer name |
|
|
34
37
|
| `chat-card-pack-manifest.schema.json` | `chat-card-packs.md` + RFC 0071 | DRAFT — manifest for `kind: "card"` registry packs (RFC 0071 Phase 2). Peer to the node/workflow-chain/prompt/artifact-type pack manifests; disjoint via the `kind` discriminator. Distributes AI chat cards: a prompt template + typed input subset bound to a typed `outputArtifactType`. |
|
|
38
|
+
| `connection-pack-manifest.schema.json` | `connection-packs.md` + RFC 0095 | DRAFT — manifest for `kind: "connection"` registry packs (RFC 0095). Peer to the node/workflow-chain/prompt/artifact-type/chat-card pack manifests; disjoint via the `kind` discriminator. Distributes a portable provider definition — auth endpoints, read/write scope groups, exactly-one reach (`mcp`/`openapi`/`integration`) — that the RFC 0045/0047 `provider` string resolves against. Carries NO credential material (`connection-pack-no-credential-material`). |
|
|
35
39
|
| `conformance-certification-bundle.schema.json` | `conformance-certification.md` + RFC 0089 | DRAFT — machine-readable attestation binding a host's claimed profiles to the reproducible run that substantiates them (suite version + per-scenario pass list + host identity/commit + captured discovery document). Out-of-band; a consumer re-derives each claim via the §B binding rule. |
|
|
36
40
|
| `conversation-event.schema.json` | `channels-and-reducers.md` + conversation RFC | Multi-turn conversation event shape for orchestrator-driven HITL flows |
|
|
37
41
|
| `conversation-turn.schema.json` | `channels-and-reducers.md` + conversation RFC | Conversation turn shape for user/agent/system messages |
|