@openwop/spec-artifacts 2.0.0-rc.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/CORPUS-STAMP.json +234 -0
- package/LICENSE +201 -0
- package/README.md +7 -0
- package/api/.redocly.lint-ignore.yaml +22 -0
- package/api/asyncapi.yaml +834 -0
- package/api/grpc/openwop.proto +251 -0
- package/api/openapi.yaml +2693 -0
- package/api/redocly.yaml +23 -0
- package/api/seams-v2.yaml +680 -0
- package/api/v2/asyncapi.yaml +528 -0
- package/api/v2/openapi.yaml +3139 -0
- package/api/v2/redocly.yaml +16 -0
- package/package.json +10 -0
- package/schemas/README.md +144 -0
- package/schemas/a2a-task-state.schema.json +78 -0
- package/schemas/a2ui-surface-delta-frame.schema.json +48 -0
- package/schemas/agent-deployment-transition.schema.json +49 -0
- package/schemas/agent-deployment.schema.json +54 -0
- package/schemas/agent-eval-suite.schema.json +140 -0
- package/schemas/agent-inventory-response.schema.json +115 -0
- package/schemas/agent-manifest.schema.json +156 -0
- package/schemas/agent-org-chart.schema.json +82 -0
- package/schemas/agent-ref.schema.json +63 -0
- package/schemas/agent-roster-entry.schema.json +81 -0
- package/schemas/agent-roster-response.schema.json +21 -0
- package/schemas/ai-envelope.schema.json +134 -0
- package/schemas/annotation-create.schema.json +37 -0
- package/schemas/annotation.schema.json +56 -0
- package/schemas/artifact-type-pack-manifest.schema.json +244 -0
- package/schemas/audit-verify-result.schema.json +90 -0
- package/schemas/budget-policy.schema.json +18 -0
- package/schemas/capabilities.schema.json +4160 -0
- package/schemas/certification-bundle-v2.schema.json +118 -0
- package/schemas/channel-presence-payload.schema.json +41 -0
- package/schemas/channel-written-payload.schema.json +55 -0
- package/schemas/chat-card-pack-manifest.schema.json +253 -0
- package/schemas/compact-tool-descriptor.schema.json +51 -0
- package/schemas/compensation-policy.schema.json +64 -0
- package/schemas/conformance-certification-bundle.schema.json +86 -0
- package/schemas/connection-pack-manifest.schema.json +353 -0
- package/schemas/conversation-event.schema.json +168 -0
- package/schemas/conversation-turn.schema.json +117 -0
- package/schemas/core-conformance-mock-agent-config.schema.json +152 -0
- package/schemas/credential-provenance.schema.json +18 -0
- package/schemas/credential-reference.schema.json +21 -0
- package/schemas/debug-bundle.schema.json +196 -0
- package/schemas/dispatch-config.schema.json +112 -0
- package/schemas/envelopes/clarification.request.schema.json +52 -0
- package/schemas/envelopes/error.schema.json +30 -0
- package/schemas/envelopes/media.audio.schema.json +38 -0
- package/schemas/envelopes/media.file.schema.json +37 -0
- package/schemas/envelopes/media.image.schema.json +33 -0
- package/schemas/envelopes/schema.request.schema.json +26 -0
- package/schemas/envelopes/schema.response.schema.json +22 -0
- package/schemas/envelopes/ui.a2ui-surface.schema.json +154 -0
- package/schemas/error-envelope.schema.json +25 -0
- package/schemas/eval-summary.schema.json +92 -0
- package/schemas/export-bundle.schema.json +66 -0
- package/schemas/form-content-pack-manifest.schema.json +243 -0
- package/schemas/frontend-plugin-manifest.schema.json +109 -0
- package/schemas/goal.schema.json +104 -0
- package/schemas/heartbeat-evaluated.schema.json +14 -0
- package/schemas/heartbeat-state-changed.schema.json +14 -0
- package/schemas/localized-content-language-settings.schema.json +26 -0
- package/schemas/localized-content-page-response.schema.json +60 -0
- package/schemas/localized-content-page.schema.json +62 -0
- package/schemas/localized-content-section.schema.json +51 -0
- package/schemas/memory-entry.schema.json +36 -0
- package/schemas/memory-list-options.schema.json +37 -0
- package/schemas/node-pack-manifest.schema.json +654 -0
- package/schemas/orchestrator-decision.schema.json +90 -0
- package/schemas/org-chart-responsibility-view.schema.json +26 -0
- package/schemas/pack-lockfile.schema.json +108 -0
- package/schemas/prompt-kind.schema.json +8 -0
- package/schemas/prompt-pack-manifest.schema.json +117 -0
- package/schemas/prompt-ref.schema.json +40 -0
- package/schemas/prompt-template.schema.json +149 -0
- package/schemas/proposal.schema.json +84 -0
- package/schemas/registry-version-manifest.schema.json +208 -0
- package/schemas/residency.schema.json +16 -0
- package/schemas/run-ancestry-response.schema.json +54 -0
- package/schemas/run-diff-response.schema.json +64 -0
- package/schemas/run-event-payloads.schema.json +4452 -0
- package/schemas/run-event.schema.json +211 -0
- package/schemas/run-options.schema.json +80 -0
- package/schemas/run-orchestrator-decided-event.schema.json +20 -0
- package/schemas/run-snapshot.schema.json +148 -0
- package/schemas/security-advisory.schema.json +109 -0
- package/schemas/self-hosted-runner-dispatch-frame.schema.json +79 -0
- package/schemas/self-hosted-runner-registration.schema.json +53 -0
- package/schemas/self-hosted-runner-result-frame.schema.json +38 -0
- package/schemas/subject.schema.json +56 -0
- package/schemas/suspend-request.schema.json +207 -0
- package/schemas/tool-descriptor.schema.json +63 -0
- package/schemas/trigger-event.schema.json +222 -0
- package/schemas/trigger-subscription-registration.schema.json +67 -0
- package/schemas/trigger-subscription.schema.json +26 -0
- package/schemas/ui-plugin-message.schema.json +90 -0
- package/schemas/v2/a2a-task-state.schema.json +102 -0
- package/schemas/v2/a2ui-surface-delta-frame.schema.json +62 -0
- package/schemas/v2/agent-deployment-transition.schema.json +67 -0
- package/schemas/v2/agent-deployment.schema.json +68 -0
- package/schemas/v2/agent-eval-suite.schema.json +214 -0
- package/schemas/v2/agent-inventory-response.schema.json +172 -0
- package/schemas/v2/agent-manifest.schema.json +218 -0
- package/schemas/v2/agent-org-chart.schema.json +149 -0
- package/schemas/v2/agent-ref.schema.json +67 -0
- package/schemas/v2/agent-roster-entry.schema.json +104 -0
- package/schemas/v2/agent-roster-response.schema.json +27 -0
- package/schemas/v2/ai-envelope.schema.json +167 -0
- package/schemas/v2/annotation-create.schema.json +109 -0
- package/schemas/v2/annotation.schema.json +142 -0
- package/schemas/v2/artifact-type-pack-manifest.schema.json +245 -0
- package/schemas/v2/audit-verify-result.schema.json +110 -0
- package/schemas/v2/budget-policy.schema.json +61 -0
- package/schemas/v2/capabilities.schema.json +7644 -0
- package/schemas/v2/certification-bundle.schema.json +401 -0
- package/schemas/v2/channel-presence-payload.schema.json +60 -0
- package/schemas/v2/channel-written-payload.schema.json +64 -0
- package/schemas/v2/chat-card-pack-manifest.schema.json +254 -0
- package/schemas/v2/compact-tool-descriptor.schema.json +108 -0
- package/schemas/v2/compensation-policy.schema.json +91 -0
- package/schemas/v2/compensation-projection.schema.json +95 -0
- package/schemas/v2/configurable.schema.json +110 -0
- package/schemas/v2/connection-pack-manifest.schema.json +354 -0
- package/schemas/v2/conversation-event.schema.json +281 -0
- package/schemas/v2/conversation-turn.schema.json +165 -0
- package/schemas/v2/credential-provenance.schema.json +62 -0
- package/schemas/v2/credential-reference.schema.json +28 -0
- package/schemas/v2/debug-bundle.schema.json +312 -0
- package/schemas/v2/dispatch-config.schema.json +147 -0
- package/schemas/v2/effect-ledger-projection.schema.json +71 -0
- package/schemas/v2/effect-seam-manifest.schema.json +98 -0
- package/schemas/v2/envelopes/clarification.request.schema.json +59 -0
- package/schemas/v2/envelopes/error.schema.json +35 -0
- package/schemas/v2/envelopes/media.audio.schema.json +41 -0
- package/schemas/v2/envelopes/media.file.schema.json +40 -0
- package/schemas/v2/envelopes/media.image.schema.json +36 -0
- package/schemas/v2/envelopes/schema.request.schema.json +29 -0
- package/schemas/v2/envelopes/schema.response.schema.json +26 -0
- package/schemas/v2/envelopes/ui.a2ui-surface.schema.json +292 -0
- package/schemas/v2/error-envelope.schema.json +229 -0
- package/schemas/v2/eval-summary.schema.json +166 -0
- package/schemas/v2/export-bundle.schema.json +94 -0
- package/schemas/v2/form-content-pack-manifest.schema.json +241 -0
- package/schemas/v2/frontend-plugin-manifest.schema.json +152 -0
- package/schemas/v2/goal.schema.json +188 -0
- package/schemas/v2/heartbeat-evaluated.schema.json +34 -0
- package/schemas/v2/heartbeat-state-changed.schema.json +31 -0
- package/schemas/v2/ids.schema.json +31 -0
- package/schemas/v2/localized-content-language-settings.schema.json +34 -0
- package/schemas/v2/localized-content-page-response.schema.json +94 -0
- package/schemas/v2/localized-content-page.schema.json +87 -0
- package/schemas/v2/localized-content-section.schema.json +63 -0
- package/schemas/v2/memory-entry.schema.json +45 -0
- package/schemas/v2/memory-list-options.schema.json +41 -0
- package/schemas/v2/node-pack-manifest.schema.json +657 -0
- package/schemas/v2/orchestrator-decision.schema.json +120 -0
- package/schemas/v2/org-chart-responsibility-view.schema.json +36 -0
- package/schemas/v2/pack-lockfile.schema.json +139 -0
- package/schemas/v2/prompt-kind.schema.json +14 -0
- package/schemas/v2/prompt-pack-manifest.schema.json +118 -0
- package/schemas/v2/prompt-ref.schema.json +42 -0
- package/schemas/v2/prompt-template.schema.json +209 -0
- package/schemas/v2/proposal.schema.json +145 -0
- package/schemas/v2/registry-version-manifest.schema.json +292 -0
- package/schemas/v2/residency.schema.json +19 -0
- package/schemas/v2/run-ancestry-response.schema.json +68 -0
- package/schemas/v2/run-diff-response.schema.json +80 -0
- package/schemas/v2/run-event-payloads.schema.json +4588 -0
- package/schemas/v2/run-event.schema.json +324 -0
- package/schemas/v2/run-options.schema.json +90 -0
- package/schemas/v2/run-orchestrator-decided-event.schema.json +22 -0
- package/schemas/v2/run-snapshot.schema.json +207 -0
- package/schemas/v2/security-advisory.schema.json +138 -0
- package/schemas/v2/self-hosted-runner-dispatch-frame.schema.json +119 -0
- package/schemas/v2/self-hosted-runner-registration.schema.json +74 -0
- package/schemas/v2/self-hosted-runner-result-frame.schema.json +47 -0
- package/schemas/v2/subject-link.schema.json +69 -0
- package/schemas/v2/subject.schema.json +597 -0
- package/schemas/v2/suspend-request.schema.json +370 -0
- package/schemas/v2/tool-descriptor.schema.json +150 -0
- package/schemas/v2/trigger-event.schema.json +508 -0
- package/schemas/v2/trigger-subscription-registration.schema.json +99 -0
- package/schemas/v2/trigger-subscription.schema.json +79 -0
- package/schemas/v2/ui-plugin-message.schema.json +149 -0
- package/schemas/v2/workflow-chain-pack-manifest.schema.json +610 -0
- package/schemas/v2/workflow-definition.schema.json +864 -0
- package/schemas/v2/workload-identity.schema.json +115 -0
- package/schemas/v2/workspace-file-create.schema.json +23 -0
- package/schemas/v2/workspace-file.schema.json +45 -0
- package/schemas/workflow-chain-pack-manifest.schema.json +615 -0
- package/schemas/workflow-definition.schema.json +850 -0
- package/schemas/workload-identity.schema.json +79 -0
- package/schemas/workspace-file-create.schema.json +20 -0
- package/schemas/workspace-file.schema.json +39 -0
- package/spec/v1/alias-detectors.json +283 -0
- package/spec/v1/capability-declaration-classes.json +176 -0
- package/spec/v1/core-standard-manifest.json +423 -0
- package/spec/v1/deprecations.json +854 -0
- package/spec/v1/deprecations.schema.json +187 -0
- package/spec/v1/event-codemap.json +1089 -0
- package/spec/v1/event-codemap.schema.json +41 -0
- package/spec/v1/extensions.json +1273 -0
- package/spec/v1/gaps.json +14581 -0
- package/spec/v1/gaps.schema.json +55 -0
- package/spec/v1/migrations.json +1822 -0
- package/spec/v1/migrations.schema.json +44 -0
- package/spec/v1/operation-path-manifest.json +462 -0
- package/spec/v1/spec-gaps.json +4823 -0
- package/spec/v2/declaration.json +1862 -0
- package/spec/v2/declaration.schema.json +305 -0
- package/spec/v2/errors.json +837 -0
- package/spec/v2/event-codemap.json +1099 -0
- package/spec/v2/event-codemap.schema.json +114 -0
- package/spec/v2/ext/provider-idempotency/registry.json +6 -0
- package/spec/v2/facets/a2a.schema.json +51 -0
- package/spec/v2/facets/aiProviders.schema.json +56 -0
- package/spec/v2/facets/auth.schema.json +91 -0
- package/spec/v2/facets/heartbeat.schema.json +20 -0
- package/spec/v2/facets/interrupt.schema.json +29 -0
- package/spec/v2/facets/mcp.schema.json +81 -0
- package/spec/v2/facets/replay.schema.json +34 -0
- package/spec/v2/facets/sandbox.schema.json +31 -0
- package/spec/v2/facets/webhooks.schema.json +18 -0
- package/spec/v2/path-manifest.json +279 -0
- package/spec/v2/peer-dependency-aliases.json +165 -0
- package/spec/v2/profiles.json +45 -0
- package/spec/v2/release.json +6 -0
|
@@ -0,0 +1,401 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://openwop.dev/spec/v2/certification-bundle.schema.json",
|
|
4
|
+
"title": "Certification bundle v3 (RFC 0168 §E)",
|
|
5
|
+
"description": "Closed root. witnessSha256 covers the reporter record (RFC 0148 §C); signature is an Ed25519 attestation over the canonical JSON of {witnessSha256, host.build, suite.version, discovery.sha256}; evidenceTier independent requires a verifier keyId distinct from the host's. A bundle with blocked > 0 does not certify; a relaxed obligation cannot certify its profile (RFC 0173 §A.2).",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"additionalProperties": false,
|
|
8
|
+
"required": [
|
|
9
|
+
"bundleVersion",
|
|
10
|
+
"generatedAt",
|
|
11
|
+
"suite",
|
|
12
|
+
"host",
|
|
13
|
+
"discovery",
|
|
14
|
+
"claimedProfiles",
|
|
15
|
+
"results",
|
|
16
|
+
"witnessSha256",
|
|
17
|
+
"assertionCount",
|
|
18
|
+
"signature"
|
|
19
|
+
],
|
|
20
|
+
"properties": {
|
|
21
|
+
"bundleVersion": {
|
|
22
|
+
"const": "3"
|
|
23
|
+
},
|
|
24
|
+
"generatedAt": {
|
|
25
|
+
"type": "string",
|
|
26
|
+
"format": "date-time"
|
|
27
|
+
},
|
|
28
|
+
"suite": {
|
|
29
|
+
"type": "object",
|
|
30
|
+
"additionalProperties": false,
|
|
31
|
+
"required": [
|
|
32
|
+
"name",
|
|
33
|
+
"version",
|
|
34
|
+
"targetMajor",
|
|
35
|
+
"specArtifactsVersion"
|
|
36
|
+
],
|
|
37
|
+
"properties": {
|
|
38
|
+
"name": {
|
|
39
|
+
"const": "@openwop/openwop-conformance"
|
|
40
|
+
},
|
|
41
|
+
"version": {
|
|
42
|
+
"type": "string"
|
|
43
|
+
},
|
|
44
|
+
"targetMajor": {
|
|
45
|
+
"type": "integer",
|
|
46
|
+
"enum": [
|
|
47
|
+
1,
|
|
48
|
+
2
|
|
49
|
+
]
|
|
50
|
+
},
|
|
51
|
+
"specArtifactsVersion": {
|
|
52
|
+
"type": "string"
|
|
53
|
+
},
|
|
54
|
+
"stampSha256": {
|
|
55
|
+
"type": "string",
|
|
56
|
+
"pattern": "^[0-9a-f]{64}$"
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
},
|
|
60
|
+
"host": {
|
|
61
|
+
"type": "object",
|
|
62
|
+
"additionalProperties": false,
|
|
63
|
+
"required": [
|
|
64
|
+
"name",
|
|
65
|
+
"version",
|
|
66
|
+
"build"
|
|
67
|
+
],
|
|
68
|
+
"properties": {
|
|
69
|
+
"name": {
|
|
70
|
+
"type": "string",
|
|
71
|
+
"minLength": 1
|
|
72
|
+
},
|
|
73
|
+
"version": {
|
|
74
|
+
"type": "string",
|
|
75
|
+
"minLength": 1
|
|
76
|
+
},
|
|
77
|
+
"vendor": {
|
|
78
|
+
"type": "string"
|
|
79
|
+
},
|
|
80
|
+
"build": {
|
|
81
|
+
"type": "object",
|
|
82
|
+
"additionalProperties": false,
|
|
83
|
+
"required": [
|
|
84
|
+
"kind",
|
|
85
|
+
"id"
|
|
86
|
+
],
|
|
87
|
+
"properties": {
|
|
88
|
+
"kind": {
|
|
89
|
+
"type": "string",
|
|
90
|
+
"enum": [
|
|
91
|
+
"image-digest",
|
|
92
|
+
"commit",
|
|
93
|
+
"artifact-sha256"
|
|
94
|
+
]
|
|
95
|
+
},
|
|
96
|
+
"id": {
|
|
97
|
+
"type": "string",
|
|
98
|
+
"minLength": 1
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
},
|
|
102
|
+
"signingKeyId": {
|
|
103
|
+
"$ref": "ids.schema.json#/$defs/keyId"
|
|
104
|
+
},
|
|
105
|
+
"relaxations": {
|
|
106
|
+
"type": "array",
|
|
107
|
+
"items": {
|
|
108
|
+
"type": "object",
|
|
109
|
+
"additionalProperties": false,
|
|
110
|
+
"required": [
|
|
111
|
+
"obligation",
|
|
112
|
+
"durability",
|
|
113
|
+
"reason"
|
|
114
|
+
],
|
|
115
|
+
"properties": {
|
|
116
|
+
"obligation": {
|
|
117
|
+
"type": "string"
|
|
118
|
+
},
|
|
119
|
+
"durability": {
|
|
120
|
+
"type": "string",
|
|
121
|
+
"enum": [
|
|
122
|
+
"session",
|
|
123
|
+
"deployment",
|
|
124
|
+
"persisted"
|
|
125
|
+
],
|
|
126
|
+
"description": "RFC 0173 §A.2 — session (lost on restart), deployment (set at deploy time), persisted (survives restarts and is auditable)."
|
|
127
|
+
},
|
|
128
|
+
"reason": {
|
|
129
|
+
"type": "string"
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
},
|
|
133
|
+
"description": "RFC 0173 §A.2 — operator relaxations; a relaxed obligation's profile cannot certify."
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
},
|
|
137
|
+
"discovery": {
|
|
138
|
+
"type": "object",
|
|
139
|
+
"additionalProperties": false,
|
|
140
|
+
"required": [
|
|
141
|
+
"url",
|
|
142
|
+
"sha256",
|
|
143
|
+
"protocolVersions",
|
|
144
|
+
"preferredVersion"
|
|
145
|
+
],
|
|
146
|
+
"properties": {
|
|
147
|
+
"url": {
|
|
148
|
+
"type": "string",
|
|
149
|
+
"format": "uri"
|
|
150
|
+
},
|
|
151
|
+
"sha256": {
|
|
152
|
+
"type": "string",
|
|
153
|
+
"pattern": "^[0-9a-f]{64}$"
|
|
154
|
+
},
|
|
155
|
+
"protocolVersions": {
|
|
156
|
+
"type": "array",
|
|
157
|
+
"items": {
|
|
158
|
+
"type": "string"
|
|
159
|
+
}
|
|
160
|
+
},
|
|
161
|
+
"preferredVersion": {
|
|
162
|
+
"type": "string"
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
},
|
|
166
|
+
"claimedProfiles": {
|
|
167
|
+
"type": "array",
|
|
168
|
+
"uniqueItems": true,
|
|
169
|
+
"items": {
|
|
170
|
+
"type": "object",
|
|
171
|
+
"additionalProperties": false,
|
|
172
|
+
"required": [
|
|
173
|
+
"id",
|
|
174
|
+
"evidenceTier",
|
|
175
|
+
"witnessCount",
|
|
176
|
+
"certified"
|
|
177
|
+
],
|
|
178
|
+
"properties": {
|
|
179
|
+
"id": {
|
|
180
|
+
"type": "string",
|
|
181
|
+
"pattern": "^openwop-[a-z0-9-]+$"
|
|
182
|
+
},
|
|
183
|
+
"evidenceTier": {
|
|
184
|
+
"type": "string",
|
|
185
|
+
"enum": [
|
|
186
|
+
"self",
|
|
187
|
+
"steward",
|
|
188
|
+
"independent"
|
|
189
|
+
]
|
|
190
|
+
},
|
|
191
|
+
"witnessCount": {
|
|
192
|
+
"type": "integer",
|
|
193
|
+
"minimum": 0
|
|
194
|
+
},
|
|
195
|
+
"certified": {
|
|
196
|
+
"type": "boolean"
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
},
|
|
201
|
+
"results": {
|
|
202
|
+
"type": "object",
|
|
203
|
+
"additionalProperties": false,
|
|
204
|
+
"required": [
|
|
205
|
+
"totals",
|
|
206
|
+
"requirements"
|
|
207
|
+
],
|
|
208
|
+
"properties": {
|
|
209
|
+
"totals": {
|
|
210
|
+
"type": "object",
|
|
211
|
+
"additionalProperties": false,
|
|
212
|
+
"required": [
|
|
213
|
+
"executedPass",
|
|
214
|
+
"executedFail",
|
|
215
|
+
"skipped",
|
|
216
|
+
"inapplicable",
|
|
217
|
+
"blocked"
|
|
218
|
+
],
|
|
219
|
+
"properties": {
|
|
220
|
+
"executedPass": {
|
|
221
|
+
"type": "integer",
|
|
222
|
+
"minimum": 0
|
|
223
|
+
},
|
|
224
|
+
"executedFail": {
|
|
225
|
+
"type": "integer",
|
|
226
|
+
"minimum": 0
|
|
227
|
+
},
|
|
228
|
+
"skipped": {
|
|
229
|
+
"type": "integer",
|
|
230
|
+
"minimum": 0
|
|
231
|
+
},
|
|
232
|
+
"inapplicable": {
|
|
233
|
+
"type": "integer",
|
|
234
|
+
"minimum": 0
|
|
235
|
+
},
|
|
236
|
+
"blocked": {
|
|
237
|
+
"type": "integer",
|
|
238
|
+
"minimum": 0
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
},
|
|
242
|
+
"requirements": {
|
|
243
|
+
"type": "array",
|
|
244
|
+
"minItems": 1,
|
|
245
|
+
"items": {
|
|
246
|
+
"type": "object",
|
|
247
|
+
"additionalProperties": false,
|
|
248
|
+
"required": [
|
|
249
|
+
"id",
|
|
250
|
+
"scenario",
|
|
251
|
+
"result"
|
|
252
|
+
],
|
|
253
|
+
"properties": {
|
|
254
|
+
"id": {
|
|
255
|
+
"type": "string",
|
|
256
|
+
"pattern": "^openwop\\.requirement\\."
|
|
257
|
+
},
|
|
258
|
+
"scenario": {
|
|
259
|
+
"type": "string"
|
|
260
|
+
},
|
|
261
|
+
"result": {
|
|
262
|
+
"type": "string",
|
|
263
|
+
"enum": [
|
|
264
|
+
"executed-pass",
|
|
265
|
+
"executed-fail",
|
|
266
|
+
"skipped",
|
|
267
|
+
"inapplicable",
|
|
268
|
+
"blocked"
|
|
269
|
+
]
|
|
270
|
+
},
|
|
271
|
+
"assertions": {
|
|
272
|
+
"type": "integer",
|
|
273
|
+
"minimum": 0
|
|
274
|
+
},
|
|
275
|
+
"detail": {
|
|
276
|
+
"type": "string"
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
},
|
|
283
|
+
"witnessSha256": {
|
|
284
|
+
"type": "string",
|
|
285
|
+
"pattern": "^[0-9a-f]{64}$"
|
|
286
|
+
},
|
|
287
|
+
"assertionCount": {
|
|
288
|
+
"type": "integer",
|
|
289
|
+
"minimum": 1
|
|
290
|
+
},
|
|
291
|
+
"detail": {
|
|
292
|
+
"type": "object",
|
|
293
|
+
"additionalProperties": false,
|
|
294
|
+
"required": [
|
|
295
|
+
"nonPass"
|
|
296
|
+
],
|
|
297
|
+
"properties": {
|
|
298
|
+
"nonPass": {
|
|
299
|
+
"type": "array",
|
|
300
|
+
"items": {
|
|
301
|
+
"type": "object",
|
|
302
|
+
"additionalProperties": false,
|
|
303
|
+
"required": [
|
|
304
|
+
"id",
|
|
305
|
+
"result",
|
|
306
|
+
"reason"
|
|
307
|
+
],
|
|
308
|
+
"properties": {
|
|
309
|
+
"id": {
|
|
310
|
+
"type": "string"
|
|
311
|
+
},
|
|
312
|
+
"result": {
|
|
313
|
+
"type": "string"
|
|
314
|
+
},
|
|
315
|
+
"reason": {
|
|
316
|
+
"type": "string"
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
},
|
|
322
|
+
"description": "Required when any result is not executed-pass (allOf below)."
|
|
323
|
+
},
|
|
324
|
+
"signature": {
|
|
325
|
+
"type": "object",
|
|
326
|
+
"additionalProperties": false,
|
|
327
|
+
"required": [
|
|
328
|
+
"alg",
|
|
329
|
+
"keyId",
|
|
330
|
+
"sig",
|
|
331
|
+
"over"
|
|
332
|
+
],
|
|
333
|
+
"properties": {
|
|
334
|
+
"alg": {
|
|
335
|
+
"const": "ed25519"
|
|
336
|
+
},
|
|
337
|
+
"keyId": {
|
|
338
|
+
"$ref": "ids.schema.json#/$defs/keyId"
|
|
339
|
+
},
|
|
340
|
+
"sig": {
|
|
341
|
+
"type": "string",
|
|
342
|
+
"pattern": "^[A-Za-z0-9_-]{86}$"
|
|
343
|
+
},
|
|
344
|
+
"over": {
|
|
345
|
+
"type": "array",
|
|
346
|
+
"const": [
|
|
347
|
+
"witnessSha256",
|
|
348
|
+
"host.build",
|
|
349
|
+
"suite.version",
|
|
350
|
+
"discovery.sha256"
|
|
351
|
+
]
|
|
352
|
+
},
|
|
353
|
+
"verifierKeyId": {
|
|
354
|
+
"$ref": "ids.schema.json#/$defs/keyId"
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
},
|
|
359
|
+
"allOf": [
|
|
360
|
+
{
|
|
361
|
+
"if": {
|
|
362
|
+
"properties": {
|
|
363
|
+
"results": {
|
|
364
|
+
"properties": {
|
|
365
|
+
"totals": {
|
|
366
|
+
"anyOf": [
|
|
367
|
+
{
|
|
368
|
+
"properties": {
|
|
369
|
+
"executedFail": {
|
|
370
|
+
"minimum": 1
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
},
|
|
374
|
+
{
|
|
375
|
+
"properties": {
|
|
376
|
+
"skipped": {
|
|
377
|
+
"minimum": 1
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
},
|
|
381
|
+
{
|
|
382
|
+
"properties": {
|
|
383
|
+
"blocked": {
|
|
384
|
+
"minimum": 1
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
]
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
},
|
|
394
|
+
"then": {
|
|
395
|
+
"required": [
|
|
396
|
+
"detail"
|
|
397
|
+
]
|
|
398
|
+
}
|
|
399
|
+
}
|
|
400
|
+
]
|
|
401
|
+
}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://openwop.dev/spec/v2/channel-presence-payload.schema.json",
|
|
4
|
+
"title": "ChannelPresencePayload",
|
|
5
|
+
"description": "Payload of the OPTIONAL `channel.presence` RunEvent (RFC 0110). EPHEMERAL live presence for a `type:'channel'` conversation — who is currently present + (optionally) who is typing. A host MUST NOT persist this event to the replayable event log / transcript, and it MUST NOT affect replay or `:fork` determinism (presence is live state, the load-bearing distinction from the persisted `conversation.exchanged` turn — see replay.md). Membership-gated: every ref MUST be a current channel participant and the event MUST NOT be delivered to a non-member (the same DEFAULT-DENY visibility as the channel's messages; cross-tenant delivery is forbidden, CTI-1). NON-PII: subject refs are the opaque RFC 0041 vocabulary only — no IP/location/device. A host MAY emit; if it advertises `channelPresence.supported` it MUST. Gated on `channelPresence.supported` (capabilities.schema.json). See RFC 0110.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"required": [
|
|
8
|
+
"conversationId",
|
|
9
|
+
"present"
|
|
10
|
+
],
|
|
11
|
+
"additionalProperties": false,
|
|
12
|
+
"properties": {
|
|
13
|
+
"conversationId": {
|
|
14
|
+
"type": "string",
|
|
15
|
+
"description": "The `type:'channel'` conversation this presence is for.",
|
|
16
|
+
"minLength": 1,
|
|
17
|
+
"maxLength": 256
|
|
18
|
+
},
|
|
19
|
+
"present": {
|
|
20
|
+
"type": "array",
|
|
21
|
+
"description": "Subject refs (RFC 0041 vocabulary `user:<id>` / `agent:<id>` — opaque, non-PII) of members CURRENTLY present in the channel. MUST be a subset of the channel's current participants; a non-member MUST NOT appear.",
|
|
22
|
+
"items": {
|
|
23
|
+
"type": "string",
|
|
24
|
+
"minLength": 1,
|
|
25
|
+
"maxLength": 256
|
|
26
|
+
}
|
|
27
|
+
},
|
|
28
|
+
"typing": {
|
|
29
|
+
"type": "array",
|
|
30
|
+
"description": "OPTIONAL subset of `present` that is currently typing. Boolean-by-presence: a ref appears iff that member is typing. No payload beyond the subject refs (no free text, no PII).",
|
|
31
|
+
"items": {
|
|
32
|
+
"type": "string",
|
|
33
|
+
"minLength": 1,
|
|
34
|
+
"maxLength": 256
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
},
|
|
38
|
+
"examples": [
|
|
39
|
+
{
|
|
40
|
+
"$comment": "RFC 0110 POSITIVE — two members present in a channel, one typing.",
|
|
41
|
+
"conversationId": "chan-eng",
|
|
42
|
+
"present": [
|
|
43
|
+
"user:alice",
|
|
44
|
+
"agent:iris"
|
|
45
|
+
],
|
|
46
|
+
"typing": [
|
|
47
|
+
"user:alice"
|
|
48
|
+
]
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
"$comment": "RFC 0110 POSITIVE — typing is OPTIONAL; a presence snapshot with no one typing.",
|
|
52
|
+
"conversationId": "chan-eng",
|
|
53
|
+
"present": [
|
|
54
|
+
"user:alice"
|
|
55
|
+
]
|
|
56
|
+
}
|
|
57
|
+
],
|
|
58
|
+
"$comment": "RFC 0110 NEGATIVE (not validatable as an examples[] entry, which must be VALID): a payload carrying any field beyond conversationId/present/typing (e.g. `ip`, `location`) MUST FAIL validation via `additionalProperties: false` — the no-PII guard; see conformance/src/scenarios/channel-presence-shape.test.ts.",
|
|
59
|
+
"x-openwop-seeded-from": "v1"
|
|
60
|
+
}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://openwop.dev/spec/v2/channel-written-payload.schema.json",
|
|
4
|
+
"title": "ChannelWrittenPayload",
|
|
5
|
+
"description": "Payload of the `channel.written` RunEvent. Carries the WRITE INPUT (pre-reduction), NOT the post-reduction channel state. Replay reconstructs the post-reduction state by folding all `channel.written` events through the declared reducer. See channels-and-reducers.md §Channel write event.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"required": [
|
|
8
|
+
"channel",
|
|
9
|
+
"value",
|
|
10
|
+
"reducer",
|
|
11
|
+
"writtenAt"
|
|
12
|
+
],
|
|
13
|
+
"properties": {
|
|
14
|
+
"channel": {
|
|
15
|
+
"type": "string",
|
|
16
|
+
"description": "Channel name. MUST match a key declared under `WorkflowDefinition.channels`.",
|
|
17
|
+
"minLength": 1,
|
|
18
|
+
"maxLength": 256
|
|
19
|
+
},
|
|
20
|
+
"value": {
|
|
21
|
+
"description": "The write payload (any JSON value). Validated against `ChannelDeclaration.schema` if declared. The semantic shape depends on the channel's reducer — see per-reducer §Examples below.",
|
|
22
|
+
"type": [
|
|
23
|
+
"object",
|
|
24
|
+
"array",
|
|
25
|
+
"string",
|
|
26
|
+
"number",
|
|
27
|
+
"boolean",
|
|
28
|
+
"null"
|
|
29
|
+
]
|
|
30
|
+
},
|
|
31
|
+
"reducer": {
|
|
32
|
+
"type": "string",
|
|
33
|
+
"description": "The reducer name in effect at write time. Persisted on the event so replays remain deterministic even if the channel's reducer is later renamed/swapped. Canonical names: `replace`, `append`, `merge`, `counter`, `votes`, `feedback`. Custom reducers MUST use `vendor.<org>.<name>`.",
|
|
34
|
+
"pattern": "^(replace|append|merge|counter|votes|feedback|vendor\\.[a-z][a-z0-9_-]*\\.[a-z][a-z0-9_-]*)$"
|
|
35
|
+
},
|
|
36
|
+
"nodeId": {
|
|
37
|
+
"$ref": "ids.schema.json#/$defs/nodeId",
|
|
38
|
+
"description": "Optional — node that performed the write. Set for writes from `ctx.channels.write(...)`; absent for system-initiated writes."
|
|
39
|
+
},
|
|
40
|
+
"writtenAt": {
|
|
41
|
+
"type": "string",
|
|
42
|
+
"format": "date-time",
|
|
43
|
+
"description": "ISO 8601 timestamp. The engine MAY normalize between this canonical form and platform-specific representations (e.g., Firestore Timestamp)."
|
|
44
|
+
},
|
|
45
|
+
"schemaVersion": {
|
|
46
|
+
"type": "integer",
|
|
47
|
+
"minimum": 1,
|
|
48
|
+
"description": "The `ChannelDeclaration.schemaVersion` that was live at write time. Persisted on the event so replays + later folds can detect breaking schema changes — the engine validates each event's value against the channel's CURRENT schema and refuses with `channel_schema_breaking_change` when the event's version is older than `current` AND not in `compatibleWith`. Defaults to 1 when omitted (back-compat with pre-C4 servers that didn't track versions). See channels-and-reducers.md §Channel schema migration. (closes C4)"
|
|
49
|
+
},
|
|
50
|
+
"sourceEngineId": {
|
|
51
|
+
"type": "string",
|
|
52
|
+
"description": "Identifier of the engine instance that performed the write. Set when the writing engine differs from the engine that owns the parent run (e.g., a sub-workflow / cross-canvas-invoke writing to a parent's channel). Absent when the parent's own engine wrote. The fold side uses this to disambiguate origins for `channel-write` trigger filtering (`onlyFrom: 'child'` matches when this field is set and references a known child engine). See channels-and-reducers.md §Distributed reducers. (closes C2)",
|
|
53
|
+
"minLength": 1,
|
|
54
|
+
"maxLength": 256
|
|
55
|
+
},
|
|
56
|
+
"sourceRunId": {
|
|
57
|
+
"$ref": "ids.schema.json#/$defs/runId",
|
|
58
|
+
"description": "RunId of the cross-engine writer when `sourceEngineId` is set. Absent for owner-engine writes. Lets debugging surfaces (Run Timeline View per replay.md) link the write back to the originating sub-workflow / invoke run. (closes C2)"
|
|
59
|
+
}
|
|
60
|
+
},
|
|
61
|
+
"additionalProperties": false,
|
|
62
|
+
"$comment": "Per-reducer expectations on the `value` field (informative — not enforced at this schema level; servers SHOULD validate against `ChannelDeclaration.schema` if declared):\n\n - `replace`: any value; supersedes prior state.\n - `append`: any value; appended to the channel's array. Bounded by `ChannelDeclaration.maxSize` if set.\n - `merge`: MUST be a JSON object (`{...}`); shallow-merged into prior state.\n - `counter`: MUST be a number; added to the running total. Negative allowed.\n - `votes`: typically `{voter: string, vote: string|boolean|number, ...}`; the reducer accumulates per-voter latest-wins.\n - `feedback`: typically `{author: string, text: string, timestamp: string, ...}`; the reducer appends bounded by `maxSize`.\n - `vendor.*`: implementation-defined; external clients SHOULD treat as `replace` if the reducer name is unknown.",
|
|
63
|
+
"x-openwop-seeded-from": "v1"
|
|
64
|
+
}
|