@openwop/spec-artifacts 2.37.1 → 2.39.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 +29 -29
- package/api/seams-v2.yaml +1 -1
- package/api/v2/asyncapi.yaml +1 -1
- package/api/v2/openapi.yaml +1 -1
- package/package.json +1 -1
- package/schemas/v2/a2a-task-state.schema.json +3 -4
- package/schemas/v2/artifact-type-pack-manifest.schema.json +1 -1
- package/schemas/v2/capabilities.schema.json +40 -19
- package/schemas/v2/certification-bundle.schema.json +1 -1
- package/schemas/v2/chat-card-pack-manifest.schema.json +1 -1
- package/schemas/v2/connection-pack-manifest.schema.json +1 -1
- package/schemas/v2/form-content-pack-manifest.schema.json +1 -1
- package/schemas/v2/node-pack-manifest.schema.json +1 -1
- package/schemas/v2/prompt-pack-manifest.schema.json +1 -1
- package/schemas/v2/registry-version-manifest.schema.json +1 -1
- package/schemas/v2/run-event-payloads.schema.json +2 -2
- package/schemas/v2/workflow-chain-pack-manifest.schema.json +1 -1
- package/spec/v1/core-standard-manifest.json +2 -2
- package/spec/v2/core/conformance.md +8 -2
- package/spec/v2/core/interop.md +6 -0
- package/spec/v2/core/packs.md +1 -1
- package/spec/v2/core/replay.md +1 -1
- package/spec/v2/core/security-defaults.md +1 -1
- package/spec/v2/core/webhooks.md +1 -1
- package/spec/v2/facets/auth.schema.json +40 -19
- package/spec/v2/interop-map.json +2 -2
- package/spec/v2/release.json +2 -2
- package/spec/v2/surface-baseline.json +1 -1
package/CORPUS-STAMP.json
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
{
|
|
2
2
|
"_comment": "Provenance of @openwop/spec-artifacts (RFC 0168 §D.2). files: SHA-256 per file; the conformance suite compares the installed peer against dist/spec-artifacts.lock.json at start.",
|
|
3
3
|
"package": "@openwop/spec-artifacts",
|
|
4
|
-
"version": "2.
|
|
5
|
-
"corpusTag": "v2.
|
|
4
|
+
"version": "2.39.0",
|
|
5
|
+
"corpusTag": "v2.39.0",
|
|
6
6
|
"files": {
|
|
7
7
|
"api/.redocly.lint-ignore.yaml": "bf5a8350b88a72fa43f59605ed8d903ed24b6cfccda5e45509c9f6ed9ee4e712",
|
|
8
8
|
"api/asyncapi.yaml": "d5ecb9ee6114582be3b1f662c84bfac9ae96dae7bacb853e461168f70a8e1c7d",
|
|
9
9
|
"api/grpc/openwop.proto": "c3e72bb17cba514ee98feb6434e6c9b6ea6795bfd086489ec69fd882dd1ad977",
|
|
10
10
|
"api/openapi.yaml": "6366b5514be71098e9ea41fc81ff52bc39db1a547b353c0b344cc2a2bf5370aa",
|
|
11
11
|
"api/redocly.yaml": "b0604c89b2ca6d5076ec25725c539dad44a741a811fe524439ee6daef8baa09f",
|
|
12
|
-
"api/seams-v2.yaml": "
|
|
13
|
-
"api/v2/asyncapi.yaml": "
|
|
14
|
-
"api/v2/openapi.yaml": "
|
|
12
|
+
"api/seams-v2.yaml": "fa7c00470e0e158d0d2fa84e0cf1e21168c767cd5344a83ad6849d6ab8a02649",
|
|
13
|
+
"api/v2/asyncapi.yaml": "e7569b32ffc06b52dbd4aa767086b99434e0c4ed6e366dd2dc4b0dd679e53cc6",
|
|
14
|
+
"api/v2/openapi.yaml": "f0c2cfdc20d3df1a60d46924b926d9802aac6aac3354010a255ec6f720eab5fd",
|
|
15
15
|
"api/v2/redocly.yaml": "1e66b60e6118ad11a823bb620678be464d99dfe50a40e3e6f93ec9429b88b34c",
|
|
16
16
|
"schemas/README.md": "0c0b737ffcf8f30e7d2809cec8a498232de710f41443212922ad8337cdde0b51",
|
|
17
17
|
"schemas/a2a-task-state.schema.json": "75d5049dea8bd873ff0e7546f1c60c8d36c219bec7084264360be54a8be30ae1",
|
|
@@ -98,7 +98,7 @@
|
|
|
98
98
|
"schemas/trigger-subscription-registration.schema.json": "929d628bad08e1def696e47e9a148aba00fa801e28d49bbd0dc2360b08673435",
|
|
99
99
|
"schemas/trigger-subscription.schema.json": "4f7b067f20032073b140c4bb15dc9a9914c4f6421a252ff1ff261cbdd8edf270",
|
|
100
100
|
"schemas/ui-plugin-message.schema.json": "346638babf1f8ea7b161cde75c0038b518cd2cc5bf0631772e20a9b74c96b5dd",
|
|
101
|
-
"schemas/v2/a2a-task-state.schema.json": "
|
|
101
|
+
"schemas/v2/a2a-task-state.schema.json": "1810363e2d9bddb5997923bdac4044cc17c6f46ec5a40515d2ff21d9c82c1ad9",
|
|
102
102
|
"schemas/v2/a2ui-surface-delta-frame.schema.json": "6889c5da3fe7e76cb614038c0eea6774776fa640448558b258eb87fb50cb9b64",
|
|
103
103
|
"schemas/v2/agent-deployment-transition.schema.json": "93a334ff042d51378c89fdd7134664271bf9592419bb5e3e00821ed06bc1904e",
|
|
104
104
|
"schemas/v2/agent-deployment.schema.json": "d59b43fb62b522005ee22bc3bc53775a6777493e5e42d71812abc347625fa7fe",
|
|
@@ -112,20 +112,20 @@
|
|
|
112
112
|
"schemas/v2/ai-envelope.schema.json": "0dc7dfbf032a37239ffd81fc2d67f999a40782ff5074866a56e414164cdee809",
|
|
113
113
|
"schemas/v2/annotation-create.schema.json": "ec32c22a243b343eeb6956a23be2d76ba5b50c8018ec3ec9d6efa5a1d9b0c792",
|
|
114
114
|
"schemas/v2/annotation.schema.json": "eb4813cdaa8e325412cfcaeeee5c8a28f3751c946dec64e546c7ba0ad3aad8d4",
|
|
115
|
-
"schemas/v2/artifact-type-pack-manifest.schema.json": "
|
|
115
|
+
"schemas/v2/artifact-type-pack-manifest.schema.json": "c8820351a2ab93855bd654ad3d8a9788f97975d09b3a7a0418e374ed6114595d",
|
|
116
116
|
"schemas/v2/artifact.schema.json": "85b9dc284d39b99d2a66fa8cbf47f2dd3d8526d3bd6cc411ad315b372de38975",
|
|
117
117
|
"schemas/v2/audit-verify-result.schema.json": "a748dfadb5155adfde8a91045e76b0db6695005fe559035d71670fdd55edb3ba",
|
|
118
118
|
"schemas/v2/budget-policy.schema.json": "c7449daeb6e1d95e7a047b8c2814d3d54748697c27046972834874867d9b5f4c",
|
|
119
|
-
"schemas/v2/capabilities.schema.json": "
|
|
120
|
-
"schemas/v2/certification-bundle.schema.json": "
|
|
119
|
+
"schemas/v2/capabilities.schema.json": "740944d7f0a00c91308449f3a3f52fa7b91b16b8fd36a0171b917afe9f4b0f09",
|
|
120
|
+
"schemas/v2/certification-bundle.schema.json": "67ac56bbf5f8deeec58b32e8d7bc9ce854a6a8c3cd81693e65192e5c3b726154",
|
|
121
121
|
"schemas/v2/channel-presence-payload.schema.json": "4eeb224910e6f7eee3ab5e7c3899559c25c83a26d0022e0ad195c4672611977a",
|
|
122
122
|
"schemas/v2/channel-written-payload.schema.json": "ccecff3c71a3275ad8db035ac0e04db25e6f8d23cf091ddbcd5a60d1be1cbb6b",
|
|
123
|
-
"schemas/v2/chat-card-pack-manifest.schema.json": "
|
|
123
|
+
"schemas/v2/chat-card-pack-manifest.schema.json": "92a57db2fd4b2463f14ef155fef8e3f18afc78960b646459dcf32efc79ff6bf5",
|
|
124
124
|
"schemas/v2/compact-tool-descriptor.schema.json": "b5c418d72082d5b713bf318212a83397e5be98e56d25ca056302b41b8dd8273b",
|
|
125
125
|
"schemas/v2/compensation-policy.schema.json": "b3c1142637f5bf980f2b0bb67adb47e8cb7abb99a0405a4b6816ccf5d9c089d6",
|
|
126
126
|
"schemas/v2/compensation-projection.schema.json": "f46977c7076347b5473faa8c4bbe73d8321c33b33c98fff2f26ee7cbada4ed98",
|
|
127
127
|
"schemas/v2/configurable.schema.json": "33a6884047e2490f723733bf8b74d3b9164e00374cfea6dc3eac5a70dc368861",
|
|
128
|
-
"schemas/v2/connection-pack-manifest.schema.json": "
|
|
128
|
+
"schemas/v2/connection-pack-manifest.schema.json": "8d019de6bd0c5b14ea3b227580734ec792521493b396a850f7f9217aa7a6a547",
|
|
129
129
|
"schemas/v2/conversation-event.schema.json": "9ad4c57285818edbf38b17816de0c4162f777c835f59e68702d0367a81cbccf6",
|
|
130
130
|
"schemas/v2/conversation-turn.schema.json": "75bb6a4a03072a958feb5b34e2a1f40471e9e3996a81fa430b65717f0773c9a4",
|
|
131
131
|
"schemas/v2/credential-provenance.schema.json": "f86b09e94b1c524dec7d1c6353965665ae8891e9517faef6e742d639c5578c99",
|
|
@@ -145,7 +145,7 @@
|
|
|
145
145
|
"schemas/v2/error-envelope.schema.json": "217fa41cfe5a664e49d0b4dd97d3185b9eaaec9585bc4392aaf93175812ffbee",
|
|
146
146
|
"schemas/v2/eval-summary.schema.json": "2f384daf05b8f3b4f604688cae504d6d9971ba41b8c771e55fe9a17e09e86b7a",
|
|
147
147
|
"schemas/v2/export-bundle.schema.json": "bd28905a7729437ab7f2ad8bb33e13a371b2bf5605a7eb2962a0d246de312d69",
|
|
148
|
-
"schemas/v2/form-content-pack-manifest.schema.json": "
|
|
148
|
+
"schemas/v2/form-content-pack-manifest.schema.json": "a1942a124e250a6e9fbdb6b811c5a125e78fbcbcaa46dfc71d0636f24710a339",
|
|
149
149
|
"schemas/v2/frontend-plugin-manifest.schema.json": "fed6b8ddb3056c53b1bfc91525410a4445a3c37a8bf9eb9f6f9964ffea26d993",
|
|
150
150
|
"schemas/v2/goal.schema.json": "ad104ed5a3866736b8fed9d7c0b23dc82af526b5bef4afe848f01fc3af2161e9",
|
|
151
151
|
"schemas/v2/heartbeat-evaluated.schema.json": "4086b1ba1d0547c08b038dfb263ac89416a3e406430db1250156fb2f9b74f8d6",
|
|
@@ -157,21 +157,21 @@
|
|
|
157
157
|
"schemas/v2/localized-content-section.schema.json": "b52cfe36c857c2800f71c480dcd7323e1a29783ecdc9f2440bc8e75a5a034346",
|
|
158
158
|
"schemas/v2/memory-entry.schema.json": "290576ae84f4fef4cdf975932b87963283b11c50ea3d2654b32cd96aa6537c3d",
|
|
159
159
|
"schemas/v2/memory-list-options.schema.json": "f66703bccb68efb28391c273abb66aa117ee5b5ce475c477846ed700c336afcd",
|
|
160
|
-
"schemas/v2/node-pack-manifest.schema.json": "
|
|
160
|
+
"schemas/v2/node-pack-manifest.schema.json": "d8daf0d01bb0d7a5aec16d15fc55e39daa99356e62522773a6f73d35f78ac1ef",
|
|
161
161
|
"schemas/v2/orchestrator-decision.schema.json": "2da17538e84cfbe70151eb118f1ccf670cff58b8697148e394074d32ac4af6b4",
|
|
162
162
|
"schemas/v2/org-chart-responsibility-view.schema.json": "8a2565e4cdc6737a3946a70799f93642808b92f9c8d56dcdff3a0782053b89a1",
|
|
163
163
|
"schemas/v2/pack-lockfile.schema.json": "2685417702c105146b780cd99154296a46578fbb10d81c8c713348ee26fea898",
|
|
164
164
|
"schemas/v2/part.schema.json": "08b75eaec9a0b4a8cedca7bab732dd906b52b0749eaa444ec1ac015aa43519a5",
|
|
165
165
|
"schemas/v2/prompt-kind.schema.json": "67251c937a5a91fb97c0422050e808dc0c162a9b8561366814cf87b0a7f62e00",
|
|
166
|
-
"schemas/v2/prompt-pack-manifest.schema.json": "
|
|
166
|
+
"schemas/v2/prompt-pack-manifest.schema.json": "752407469475396ad250085437a6cc6bd56a017ac6d3e52196aecc65dda4e51a",
|
|
167
167
|
"schemas/v2/prompt-ref.schema.json": "11538fa36a7a652c93100cac4f1857eb4130137b546e3d94890618636d44b729",
|
|
168
168
|
"schemas/v2/prompt-template.schema.json": "494fc83028cb3af5dbb8a943d0e83b2348f7775e9fa02369162bcb58a6f81559",
|
|
169
169
|
"schemas/v2/proposal.schema.json": "a5c582ce1e854e5fe10412ebed00e537961ee827bbaca506ca374b200a685992",
|
|
170
|
-
"schemas/v2/registry-version-manifest.schema.json": "
|
|
170
|
+
"schemas/v2/registry-version-manifest.schema.json": "f05c620db2ee8f9c60fbe33f2e385cc1bc98bc92c588de8a7170c442b1bbe068",
|
|
171
171
|
"schemas/v2/residency.schema.json": "3fd23c9732beb140504e81560fc426eb6764d547e56da5fb92c5a5c7bf04db3a",
|
|
172
172
|
"schemas/v2/run-ancestry-response.schema.json": "334c17f2062dea62726ca1d07b8be3f169cdc422af843c1def5fb317039814c9",
|
|
173
173
|
"schemas/v2/run-diff-response.schema.json": "8bdb2045c274580038bd74781f7d062f5049839797c164a89de4ed89edc53a74",
|
|
174
|
-
"schemas/v2/run-event-payloads.schema.json": "
|
|
174
|
+
"schemas/v2/run-event-payloads.schema.json": "b7b497c0a0fa41f279750138227d3378fc83ca894fb33e4b0a4fe7c685b84bc4",
|
|
175
175
|
"schemas/v2/run-event.schema.json": "2f0d7416bd376c56affe97b6b2b49981532e8e9ff45c0a162cf806c78b3e7fb7",
|
|
176
176
|
"schemas/v2/run-list-response.schema.json": "c2dbc34768dcf64528914a213aa3cb55952e8e3e90a64b04a9423b2a19749d38",
|
|
177
177
|
"schemas/v2/run-options.schema.json": "f0e9f494d80086c2ed2cf9fe87df54e5b4e66601699c4a1089f4edbc7ba58867",
|
|
@@ -192,7 +192,7 @@
|
|
|
192
192
|
"schemas/v2/webhook-dead-letter-page.schema.json": "543f5ccc26d8f777684a037172ab7b9fdf70735e5394eeb42e5fa6569503f528",
|
|
193
193
|
"schemas/v2/webhook-delivery.schema.json": "4e8ab3b722ad1731adf0548c1217f0de62da40de14e8abf77533aee4ace4c079",
|
|
194
194
|
"schemas/v2/webhook-verification.schema.json": "76e4e0d81143ffd2649bc7adba2aa34f2525e2c4e9f0300a425d908b3163196b",
|
|
195
|
-
"schemas/v2/workflow-chain-pack-manifest.schema.json": "
|
|
195
|
+
"schemas/v2/workflow-chain-pack-manifest.schema.json": "0816c6c59a91452d6fa1931394b766780eaf90949c9f7cd0ced522dadd32ff81",
|
|
196
196
|
"schemas/v2/workflow-definition.schema.json": "b9043e3413fc01d939e7b2892cc0fe28bdfd77d5bacc561b6ca4ae20197b985b",
|
|
197
197
|
"schemas/v2/workload-identity.schema.json": "1f589debfac6d70e0908da511550ec69a27b4bcc8314551cd843b6d923605efc",
|
|
198
198
|
"schemas/v2/workspace-file-create.schema.json": "b6b5260857318c3b67de0231ed15e3a746f525880a763e7b36a7854178dd10d0",
|
|
@@ -204,7 +204,7 @@
|
|
|
204
204
|
"schemas/workspace-file.schema.json": "464de85c2a068243084ee9c1d969bc7cd5d8f7948574e58450d6493c38a0e1e4",
|
|
205
205
|
"spec/v1/alias-detectors.json": "2401fcb1c18cdd688c018b3d716ae6bca85c5e356220ee2b793bd9d81872412d",
|
|
206
206
|
"spec/v1/capability-declaration-classes.json": "e7729aed5c4b4e1dd02abab0530f14cc95f5d4070fe51fb139e7f5cccefa00c6",
|
|
207
|
-
"spec/v1/core-standard-manifest.json": "
|
|
207
|
+
"spec/v1/core-standard-manifest.json": "5fe5a056765ade4903c1c3d95b9223dc1276e6f89bc6457fb1115c958a6f6479",
|
|
208
208
|
"spec/v1/deprecations.json": "2d03f4729810280147ea08c630ea65434f2dc5370567d0aac41c3595f8337d40",
|
|
209
209
|
"spec/v1/deprecations.schema.json": "3e393c405d2a41b467d8c5e3c468549078df1ce6a6d2588fc488097b95d9b55b",
|
|
210
210
|
"spec/v1/event-codemap.json": "3da60d884157793a360da532a9fcbbfb5285636db325a74cec94b34622186d97",
|
|
@@ -218,7 +218,7 @@
|
|
|
218
218
|
"spec/v1/spec-gaps.json": "ea9612af55bea9dae3e82223d4f714243f8f590b0193f1188257b13491a38afc",
|
|
219
219
|
"spec/v2/README.md": "ccfed7d978ce7293a6d8f3c0f6045835dfb7e488f2b67a68f6b04d67c4b0cfc9",
|
|
220
220
|
"spec/v2/core/capabilities.md": "e22381fed3a93376ad478fa7f07571fdad9653aefd7c05f189a2ef45a49f6c63",
|
|
221
|
-
"spec/v2/core/conformance.md": "
|
|
221
|
+
"spec/v2/core/conformance.md": "38ebc9e56a830d0ee0ade429b81b0cd302c23e49a13647b1b902275262d6610d",
|
|
222
222
|
"spec/v2/core/connection-packs.md": "7257339a4fc125011bf89961588c949cb058a0c0f7d9808ad08a5288deb3f8fc",
|
|
223
223
|
"spec/v2/core/conversation.md": "c9a937e410fdb4e092cec2f05a7cab8b5232745090cfb20041c03c70ccbb5cdc",
|
|
224
224
|
"spec/v2/core/errors.md": "619cd74381c41acf33d012eb1afd834e148ac292663a1a6fa6744dbaff9661d9",
|
|
@@ -228,19 +228,19 @@
|
|
|
228
228
|
"spec/v2/core/host-services.md": "c3ff93201d642edf835e9ae84f06a17edd207f9d351f8bfd70572be05bbfd894",
|
|
229
229
|
"spec/v2/core/idempotency.md": "b61d4a200526485937897dd7ebca092e68424a80624e0be7a0b7db8cdbd54403",
|
|
230
230
|
"spec/v2/core/identity.md": "d15667552019f64316be9b65c6e5696c10766581405f05da3907fb47f36e6459",
|
|
231
|
-
"spec/v2/core/interop.md": "
|
|
231
|
+
"spec/v2/core/interop.md": "9a6b37e07c0235856199ace6b3a84f592fa5903fcf6c442f8a18f4d6b6aa5525",
|
|
232
232
|
"spec/v2/core/interrupt.md": "1dc94f7c791dd5a547b1abafde6a8a76acd3d2993d288057f302f57911dc83bf",
|
|
233
233
|
"spec/v2/core/node-pack-runtimes.md": "c435ad506f618831b6c0a9fd9150d83a5dc6caa1e3d755b949af2ff8949f1140",
|
|
234
234
|
"spec/v2/core/oauth.md": "08e558a742259e75cfb2123f4c364d238dc4c57eea1a3c25d8f420ab4dff8244",
|
|
235
235
|
"spec/v2/core/overview.md": "8f9d4a68b6185664e40d226cb82d9a9270a6c6630e3db59bddff300be781947d",
|
|
236
|
-
"spec/v2/core/packs.md": "
|
|
236
|
+
"spec/v2/core/packs.md": "91cd577b4a636c1587ef78742e583a203244b8508b289b01a18a8ef2ef0a9b3e",
|
|
237
237
|
"spec/v2/core/persistence.md": "d32736bd74e51df7c552565b4105a8ec801ece6d2292c8676421368ee9bffec1",
|
|
238
|
-
"spec/v2/core/replay.md": "
|
|
238
|
+
"spec/v2/core/replay.md": "9050256a417171b184122877aa395d264545bb67c20e045315f42baa539f13cd",
|
|
239
239
|
"spec/v2/core/runs.md": "c7dcc5116648f42cadecdcd4c949b194272908cbc4b1fbc7321956d5b3a713af",
|
|
240
|
-
"spec/v2/core/security-defaults.md": "
|
|
240
|
+
"spec/v2/core/security-defaults.md": "500471a8db7af9b776ac40b4a9a278c9f3d45e1c1dead880114e7fadc7bee37d",
|
|
241
241
|
"spec/v2/core/tool-catalog.md": "35f1a3fd509db0fc0490ddf400686fe94dc4b20c98064d5ebe776da516153e60",
|
|
242
242
|
"spec/v2/core/versioning.md": "0aded71d090c8358c3ce17763c120cfc1cc42531a5eaa1b8a2a7016ed9594069",
|
|
243
|
-
"spec/v2/core/webhooks.md": "
|
|
243
|
+
"spec/v2/core/webhooks.md": "9c9169d775875f72982ed3506c1bfe27546ad05806d114af103dd7c28d4d5122",
|
|
244
244
|
"spec/v2/core/workflow-chain-packs.md": "ee45d3fede3bb6f0cc6abcf0d6c929c7cd213a0fbe862b738a998f929c4d1102",
|
|
245
245
|
"spec/v2/corrections.json": "cc74ffde74384b0f261a4f625871d922e8661d654d647a8534e21036595cb280",
|
|
246
246
|
"spec/v2/corrections.schema.json": "4ac595b9a6d7f66d53de03fe0edbe0dc58de46426932387bfdc0ceb3cf949a3e",
|
|
@@ -270,7 +270,7 @@
|
|
|
270
270
|
"spec/v2/ext/webResearch/README.md": "e74fbe55a8c00040f1f87b5448259ee4eb3a26769d607f7d2dd9a671a2e2832b",
|
|
271
271
|
"spec/v2/facets/a2a.schema.json": "b68bf5e29e455e46c2ad7cfcccf5963730ec2310ff9db81884550d8df30fd6ef",
|
|
272
272
|
"spec/v2/facets/aiProviders.schema.json": "81fb39b6698564d9d07a0d10525ecb6360c152fe3f3a5ea0439112509ca130e2",
|
|
273
|
-
"spec/v2/facets/auth.schema.json": "
|
|
273
|
+
"spec/v2/facets/auth.schema.json": "7d98bc81a0f7d307460d039eebfebd21388091bfe1d538762583940f94c0bd2a",
|
|
274
274
|
"spec/v2/facets/envelopeStrictness.schema.json": "28be0a27f880bd45ec1222a16155f5e9167bbca57bf0322970fe1eb2654562aa",
|
|
275
275
|
"spec/v2/facets/heartbeat.schema.json": "81d7fa1895a8b0241bd07cf00a7e7905bef0fd14eb3427325261c62eee5746a6",
|
|
276
276
|
"spec/v2/facets/interrupt.schema.json": "2110ef32c3f880bf706475ef4cf8ddf97ff06871b8e6003a5edbcf4439f1fb70",
|
|
@@ -285,16 +285,16 @@
|
|
|
285
285
|
"spec/v2/facets/webhooks.schema.json": "2fac635ee5fbc10a14a1a46cf512a11bac660bfbabe0aea79f6c7b657ecb9e4e",
|
|
286
286
|
"spec/v2/facets/workflowChainPacks.schema.json": "ea625ce818fbeb746478f00f31f96ee9613d538e4409c258c1bfb517acdeaba9",
|
|
287
287
|
"spec/v2/id-field-bindings.json": "9f6fd280250447e26a6704811c352bb8f2ff6c4bd242befe3da0ba38962370e9",
|
|
288
|
-
"spec/v2/interop-map.json": "
|
|
288
|
+
"spec/v2/interop-map.json": "02255dafe7eb55f61ca7f9ae7c21f079d1848a6756991343088975ac9d184b8d",
|
|
289
289
|
"spec/v2/interop-map.schema.json": "0017c882df34ee215e2e0729de051490e09d43aac3d2c949285698ed51832f12",
|
|
290
290
|
"spec/v2/migrations.json": "651954938a1e154c0b6f1e3dd6e105889d30de3bb65789f21de7f77a12869e9e",
|
|
291
291
|
"spec/v2/migrations.schema.json": "b91ade6320ad1b1185c9495b9424f3aa63438ed8e412c45171c227d82c0afd86",
|
|
292
292
|
"spec/v2/path-manifest.json": "ae9b56d03a701061fd48ad0b73cb0373493f6a4547da92763b422295b5e19535",
|
|
293
293
|
"spec/v2/peer-dependency-aliases.json": "d10299280abee08258502925bc327293ee413e0108cd6e6ec75ff6110653308d",
|
|
294
294
|
"spec/v2/profiles.json": "0636f19fceae625390003a347e70ef4797d84766b5c24ce8a02cea52aadebca4",
|
|
295
|
-
"spec/v2/release.json": "
|
|
295
|
+
"spec/v2/release.json": "ddc2621cd435ca2f65372a6d63757f63a5bb1a10ec81d25d4ca9607315ae1e9a",
|
|
296
296
|
"spec/v2/retention-floors.json": "eaf3722d95c79947af1d4269ef85117e126518c588cfcf1a2b21b97269f51624",
|
|
297
|
-
"spec/v2/surface-baseline.json": "
|
|
297
|
+
"spec/v2/surface-baseline.json": "ec8449a1632606e34c419cc485e1404e1f1cced46a4bda3b2ab519d7c6859490"
|
|
298
298
|
},
|
|
299
|
-
"corpusCommit": "
|
|
299
|
+
"corpusCommit": "42388852a5ef45c7dad7575ec50ab36c81eae8f3"
|
|
300
300
|
}
|
package/api/seams-v2.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
openapi: 3.1.0
|
|
2
2
|
info:
|
|
3
3
|
title: OpenWOP conformance seams profile (openwop-conformance-seams-v2)
|
|
4
|
-
version: 2.
|
|
4
|
+
version: 2.39.0
|
|
5
5
|
description: 'GENERATED by scripts/derive-v2-api.py. RFC 0168 §C: the seams are a versioned conformance profile with their
|
|
6
6
|
own document and path space (/conformance/seams/…), validated against the canonical v2 schemas with no tolerance path,
|
|
7
7
|
forbidden from the capability namespace (a host advertises the profile, never a testSeams flag). This document carries
|
package/api/v2/asyncapi.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
asyncapi: 3.1.0
|
|
2
2
|
info:
|
|
3
3
|
title: OpenWOP v2 event streams
|
|
4
|
-
version: 2.
|
|
4
|
+
version: 2.39.0
|
|
5
5
|
description: GENERATED by scripts/derive-v2-api.py (RFC 0171 §E.1, RFC 0172 §C.2). One run-events channel whose address
|
|
6
6
|
is the OpenAPI path key; the server pathname is empty (bare origin). streamMode is a pattern over the closed set and its
|
|
7
7
|
comma-separated combinations (`values` never combines). hostEvents has a real address (RFC 0171 §E.1) — the documented
|
package/api/v2/openapi.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
openapi: 3.1.0
|
|
2
2
|
info:
|
|
3
3
|
title: OpenWOP v2 API
|
|
4
|
-
version: 2.
|
|
4
|
+
version: 2.39.0
|
|
5
5
|
summary: REST surface for declaring, executing, suspending, resuming, and observing multi-step workflows.
|
|
6
6
|
description: GENERATED by scripts/derive-v2-api.py from api/openapi.yaml and the RFC 0167 children (v2 charter Phase 3,
|
|
7
7
|
P3-C). Bare origin, unversioned path keys, negotiation by `OpenWOP-Version` + `protocolVersions[]` (RFC 0172 §A). No seam
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@openwop/spec-artifacts",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.39.0",
|
|
4
4
|
"description": "The OpenWOP machine-readable contract: api/ (OpenAPI, AsyncAPI, the seams profile), schemas/ (v1 and v2 JSON Schemas), the spec/v1 and spec/v2 registries (errors, event codemap, declaration, deprecations, migrations, gaps) and CORPUS-STAMP.json — published from the openwop/openwop corpus tag; the peer dependency @openwop/openwop-conformance digest-checks at start (RFC 0168 §D.2).",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"repository": {
|
|
@@ -69,12 +69,12 @@
|
|
|
69
69
|
"url": {
|
|
70
70
|
"type": "string",
|
|
71
71
|
"format": "uri",
|
|
72
|
-
"description": "Caller-registered push target. The host MUST validate it through the
|
|
72
|
+
"description": "Caller-registered push target. The host MUST validate it through the webhooks.md egress guard in full — scheme arm (non-https:// refused) and address arm (no private/loopback/link-local/ULA/metadata target) — at registration, and again at delivery (RFC 0214) — SECURITY invariant `a2a-push-egress-ssrf`."
|
|
73
73
|
},
|
|
74
74
|
"tokenFingerprint": {
|
|
75
75
|
"type": "string",
|
|
76
76
|
"maxLength": 32,
|
|
77
|
-
"description": "MAY — a truncated/salted digest of the caller's push-auth token (NEVER the raw token; same SR-1 rule as RFC 0083's `secretFingerprint`). The
|
|
77
|
+
"description": "MAY — a truncated/salted digest of the caller's push-auth token (NEVER the raw token; same SR-1 rule as RFC 0083's `secretFingerprint`). The token itself is a destination credential held by reference (RFC 0214)."
|
|
78
78
|
}
|
|
79
79
|
}
|
|
80
80
|
}
|
|
@@ -98,6 +98,5 @@
|
|
|
98
98
|
"state": "completed",
|
|
99
99
|
"updatedAt": "2026-06-13T19:05:00Z"
|
|
100
100
|
}
|
|
101
|
-
]
|
|
102
|
-
"x-openwop-seeded-from": "v1"
|
|
101
|
+
]
|
|
103
102
|
}
|
|
@@ -229,7 +229,7 @@
|
|
|
229
229
|
},
|
|
230
230
|
"scheme": {
|
|
231
231
|
"const": "ed25519-canonical-json",
|
|
232
|
-
"description": "RFC 0177 §C.3 — one scheme: a detached 64-byte Ed25519 signature over the
|
|
232
|
+
"description": "RFC 0177 §C.3, RFC 0212 — one scheme: a detached 64-byte Ed25519 signature over the RFC 8785 (JCS) bytes of pack.json inside a deterministic tarball; the input MUST be I-JSON (spec/v2/core/conformance.md §Canonical JSON). method and publicKeyRef are gone."
|
|
233
233
|
}
|
|
234
234
|
},
|
|
235
235
|
"description": "RFC 0177 §C.3/§C.4 — OPTIONAL on a bare manifest (an authoring-time pack.json exists before it is signed); when present it is the same closed { keyId, scheme } block a version manifest carries (registry-version-manifest.schema.json). The v1 { publicKeyRef, signatureRef, method } block does not exist in v2 (migration row openwop.migration.C10.1)."
|
|
@@ -7541,7 +7541,6 @@
|
|
|
7541
7541
|
"required": [
|
|
7542
7542
|
"lane",
|
|
7543
7543
|
"issuers",
|
|
7544
|
-
"revocation",
|
|
7545
7544
|
"minimumAssurance"
|
|
7546
7545
|
],
|
|
7547
7546
|
"properties": {
|
|
@@ -7608,28 +7607,50 @@
|
|
|
7608
7607
|
}
|
|
7609
7608
|
},
|
|
7610
7609
|
"$comment": "RFC 0210 §C — `exp-only` MUST NOT be advertised on `api-key` or `session`: there the host issued the credential itself, so revocation is in its own hands. The antecedent is the NEW member only, so no document that validates today can be invalidated by it. The full lane -> rule binding is deliberately NOT here (it would retroactively invalidate a committed bundle); it lives in the suite, and scripts/check-lane-revocation-rules.mjs keeps the table, this enum and the suite map in lockstep.",
|
|
7611
|
-
"
|
|
7612
|
-
|
|
7613
|
-
"
|
|
7614
|
-
"
|
|
7610
|
+
"allOf": [
|
|
7611
|
+
{
|
|
7612
|
+
"if": {
|
|
7613
|
+
"properties": {
|
|
7614
|
+
"revocation": {
|
|
7615
|
+
"const": "exp-only"
|
|
7616
|
+
}
|
|
7617
|
+
},
|
|
7618
|
+
"required": [
|
|
7619
|
+
"revocation"
|
|
7620
|
+
]
|
|
7621
|
+
},
|
|
7622
|
+
"then": {
|
|
7623
|
+
"properties": {
|
|
7624
|
+
"lane": {
|
|
7625
|
+
"not": {
|
|
7626
|
+
"enum": [
|
|
7627
|
+
"api-key",
|
|
7628
|
+
"session"
|
|
7629
|
+
]
|
|
7630
|
+
}
|
|
7631
|
+
}
|
|
7632
|
+
}
|
|
7615
7633
|
}
|
|
7616
7634
|
},
|
|
7617
|
-
|
|
7618
|
-
"revocation"
|
|
7619
|
-
|
|
7620
|
-
|
|
7621
|
-
|
|
7622
|
-
|
|
7623
|
-
|
|
7624
|
-
|
|
7625
|
-
|
|
7626
|
-
|
|
7627
|
-
|
|
7628
|
-
|
|
7629
|
-
|
|
7635
|
+
{
|
|
7636
|
+
"$comment": "identity.md §2.2: every lane names a revocation rule EXCEPT `anonymous`, whose row reads \"—\" (an RFC 0132 public surface has no credential to revoke), and a host MUST NOT advertise a value its lane's row does not list. Requiring `revocation` on every lane made the anonymous lane unsatisfiable against both at once. Loosening only: every document valid before stays valid.",
|
|
7637
|
+
"if": {
|
|
7638
|
+
"properties": {
|
|
7639
|
+
"lane": {
|
|
7640
|
+
"const": "anonymous"
|
|
7641
|
+
}
|
|
7642
|
+
},
|
|
7643
|
+
"required": [
|
|
7644
|
+
"lane"
|
|
7645
|
+
]
|
|
7646
|
+
},
|
|
7647
|
+
"else": {
|
|
7648
|
+
"required": [
|
|
7649
|
+
"revocation"
|
|
7650
|
+
]
|
|
7630
7651
|
}
|
|
7631
7652
|
}
|
|
7632
|
-
|
|
7653
|
+
]
|
|
7633
7654
|
}
|
|
7634
7655
|
},
|
|
7635
7656
|
"subjectLinkKey": {
|
|
@@ -259,7 +259,7 @@
|
|
|
259
259
|
"properties": {
|
|
260
260
|
"id": {
|
|
261
261
|
"type": "string",
|
|
262
|
-
"pattern": "^openwop\\.(?!it\\.(?:a2a-parts-schemas|a2ui-v09-profile|artifact-schema-compile-bounded|artifact-type-legacy-ids|bundle-maturity-gate|capability-example-root-layout|certification-floor-enforcement|chain-subchain-unsupported-refused|compensation-profile|core-manifest-and-extension-registry|discovery-canonical-family-no-shadow|edge-condition-truthy-falsy|effect-identity-composition|effect-identity-cross-scope|error-envelope-canonical-shape|event-codemap-complete|form-content-packs|locale-key-grammar|multi-region-effect-vocabulary|node-pack-mcp-server-record|normative-example-extraction|openapi-asyncapi-sdk-parity|openapi-security-declared|pack-manifest-extensions|protocol-version-grammar|registry-declarative-kinds|removal-dates-minor|rfc-0147-self-audit|rfc-lifecycle-coherence|semantic-digest-v2|spec-corpus-validity|spec-section-citations|tool-descriptor-annotations|tool-result-trust-monotone|v1-webhook-rotation-contract|v1-webhook-unregister-contract|v2-alias-covers-reword|v2-bundle-signature-attributable|v2-corpus-tag-pinned|v2-declaration-parity|v2-envelope-catalog|v2-eos-clock|v2-error-registry-prose-parity|v2-event-naming-rule|v2-events-channel-parity|v2-externally-gated-never-stable|v2-facet-advertisement|v2-front-door-counts|v2-id-kinds-bound|v2-interop-map-coherent|v2-lane-exp-only-schema|v2-normative-home-gate|v2-one-signing-scheme|v2-path-parity|v2-release-identity|v2-req-only-assertions|v2-retention-floors|v2-retirement-gate|v2-seams-not-in-canonical|v2-security-defaults-table|v2-spec-artifacts-digest|v2-surface-monotone-gate|v2-threat-model-template|v2-umbrella-alias-covered|v2-umbrella-child-parts|v2-umbrella-codemod-at-active|v2-umbrella-codemod-legs|v2-umbrella-migration-deprecation|v2-witness-required|versioned-composition-profiles|workflow-chain-internal-flag|workload-identity-profile)\\.)(requirement|it|scenario|floor|profile|family)\\.[a-z0-9]",
|
|
262
|
+
"pattern": "^openwop\\.(?!it\\.(?:a2a-parts-schemas|a2ui-v09-profile|artifact-schema-compile-bounded|artifact-type-legacy-ids|bundle-maturity-gate|capability-example-root-layout|certification-floor-enforcement|chain-subchain-unsupported-refused|compensation-profile|core-manifest-and-extension-registry|discovery-canonical-family-no-shadow|edge-condition-truthy-falsy|effect-identity-composition|effect-identity-cross-scope|error-envelope-canonical-shape|event-codemap-complete|form-content-packs|locale-key-grammar|multi-region-effect-vocabulary|node-pack-mcp-server-record|normative-example-extraction|openapi-asyncapi-sdk-parity|openapi-security-declared|pack-manifest-extensions|protocol-version-grammar|registry-declarative-kinds|removal-dates-minor|rfc-0147-self-audit|rfc-lifecycle-coherence|semantic-digest-v2|spec-corpus-validity|spec-section-citations|tool-descriptor-annotations|tool-result-trust-monotone|v1-webhook-rotation-contract|v1-webhook-unregister-contract|v2-alias-covers-reword|v2-bundle-signature-attributable|v2-bundle-witness-preimage|v2-corpus-tag-pinned|v2-declaration-parity|v2-envelope-catalog|v2-eos-clock|v2-error-registry-prose-parity|v2-event-naming-rule|v2-events-channel-parity|v2-externally-gated-never-stable|v2-facet-advertisement|v2-front-door-counts|v2-id-kinds-bound|v2-interop-map-coherent|v2-lane-exp-only-schema|v2-normative-home-gate|v2-one-signing-scheme|v2-path-parity|v2-push-credential-coherent|v2-release-identity|v2-req-only-assertions|v2-retention-floors|v2-retirement-gate|v2-seams-not-in-canonical|v2-security-defaults-table|v2-spec-artifacts-digest|v2-surface-monotone-gate|v2-threat-model-template|v2-umbrella-alias-covered|v2-umbrella-child-parts|v2-umbrella-codemod-at-active|v2-umbrella-codemod-legs|v2-umbrella-migration-deprecation|v2-witness-required|versioned-composition-profiles|workflow-chain-internal-flag|workload-identity-profile)\\.)(requirement|it|scenario|floor|profile|family)\\.[a-z0-9]",
|
|
263
263
|
"description": "RFC 0168 §A.1 — `openwop.<area>.<slug>`. The suite mints six areas: `requirement` (an explicit `req()` id), `it` (a per-test id from the scenario file and title), `scenario` and `floor` (per-file rows), `profile` (a claimed-profile row) and `family` (a capability gate). The lookahead refuses every id minted from a corpus-coherence file: those run in the spec repo’s CI and MUST NOT appear in a host bundle (conformance.md §\"Two products, two ledgers\"; RFC 0168 §D.1). `scripts/check-req-only.mjs` fails when the list drifts from `conformance/src/coherence/`."
|
|
264
264
|
},
|
|
265
265
|
"scenario": {
|
|
@@ -241,7 +241,7 @@
|
|
|
241
241
|
},
|
|
242
242
|
"scheme": {
|
|
243
243
|
"const": "ed25519-canonical-json",
|
|
244
|
-
"description": "RFC 0177 §C.3 — one scheme: a detached 64-byte Ed25519 signature over the
|
|
244
|
+
"description": "RFC 0177 §C.3, RFC 0212 — one scheme: a detached 64-byte Ed25519 signature over the RFC 8785 (JCS) bytes of pack.json inside a deterministic tarball; the input MUST be I-JSON (spec/v2/core/conformance.md §Canonical JSON). method and publicKeyRef are gone."
|
|
245
245
|
}
|
|
246
246
|
},
|
|
247
247
|
"description": "RFC 0177 §C.3/§C.4 — OPTIONAL on a bare manifest (an authoring-time pack.json exists before it is signed); when present it is the same closed { keyId, scheme } block a version manifest carries (registry-version-manifest.schema.json). The v1 { publicKeyRef, signatureRef, method } block does not exist in v2 (migration row openwop.migration.C10.1)."
|
|
@@ -343,7 +343,7 @@
|
|
|
343
343
|
},
|
|
344
344
|
"scheme": {
|
|
345
345
|
"const": "ed25519-canonical-json",
|
|
346
|
-
"description": "RFC 0177 §C.3 — one scheme: a detached 64-byte Ed25519 signature over the
|
|
346
|
+
"description": "RFC 0177 §C.3, RFC 0212 — one scheme: a detached 64-byte Ed25519 signature over the RFC 8785 (JCS) bytes of pack.json inside a deterministic tarball; the input MUST be I-JSON (spec/v2/core/conformance.md §Canonical JSON). method and publicKeyRef are gone."
|
|
347
347
|
}
|
|
348
348
|
},
|
|
349
349
|
"description": "RFC 0177 §C.3/§C.4 — OPTIONAL on a bare manifest (an authoring-time pack.json exists before it is signed); when present it is the same closed { keyId, scheme } block a version manifest carries (registry-version-manifest.schema.json). The v1 { publicKeyRef, signatureRef, method } block does not exist in v2 (migration row openwop.migration.C10.1)."
|
|
@@ -255,7 +255,7 @@
|
|
|
255
255
|
},
|
|
256
256
|
"scheme": {
|
|
257
257
|
"const": "ed25519-canonical-json",
|
|
258
|
-
"description": "RFC 0177 §C.3 — one scheme: a detached 64-byte Ed25519 signature over the
|
|
258
|
+
"description": "RFC 0177 §C.3, RFC 0212 — one scheme: a detached 64-byte Ed25519 signature over the RFC 8785 (JCS) bytes of pack.json inside a deterministic tarball; the input MUST be I-JSON (spec/v2/core/conformance.md §Canonical JSON). method and publicKeyRef are gone."
|
|
259
259
|
}
|
|
260
260
|
},
|
|
261
261
|
"description": "RFC 0177 §C.3/§C.4 — OPTIONAL on a bare manifest (an authoring-time pack.json exists before it is signed); when present it is the same closed { keyId, scheme } block a version manifest carries (registry-version-manifest.schema.json). The v1 { publicKeyRef, signatureRef, method } block does not exist in v2 (migration row openwop.migration.C10.1)."
|
|
@@ -748,7 +748,7 @@
|
|
|
748
748
|
},
|
|
749
749
|
"scheme": {
|
|
750
750
|
"const": "ed25519-canonical-json",
|
|
751
|
-
"description": "RFC 0177 §C.3 — one scheme: a detached 64-byte Ed25519 signature over the
|
|
751
|
+
"description": "RFC 0177 §C.3, RFC 0212 — one scheme: a detached 64-byte Ed25519 signature over the RFC 8785 (JCS) bytes of pack.json inside a deterministic tarball; the input MUST be I-JSON (spec/v2/core/conformance.md §Canonical JSON). method and publicKeyRef are gone."
|
|
752
752
|
}
|
|
753
753
|
},
|
|
754
754
|
"description": "RFC 0177 §C.3/§C.4 — OPTIONAL on a bare manifest (an authoring-time pack.json exists before it is signed); when present it is the same closed { keyId, scheme } block a version manifest carries (registry-version-manifest.schema.json). The v1 { publicKeyRef, signatureRef, method } block does not exist in v2 (migration row openwop.migration.C10.1)."
|
|
@@ -99,7 +99,7 @@
|
|
|
99
99
|
},
|
|
100
100
|
"scheme": {
|
|
101
101
|
"const": "ed25519-canonical-json",
|
|
102
|
-
"description": "RFC 0177 §C.3 — one scheme: a detached 64-byte Ed25519 signature over the
|
|
102
|
+
"description": "RFC 0177 §C.3, RFC 0212 — one scheme: a detached 64-byte Ed25519 signature over the RFC 8785 (JCS) bytes of pack.json inside a deterministic tarball; the input MUST be I-JSON (spec/v2/core/conformance.md §Canonical JSON). method and publicKeyRef are gone."
|
|
103
103
|
}
|
|
104
104
|
},
|
|
105
105
|
"description": "RFC 0177 §C.3/§C.4 — OPTIONAL on a bare manifest (an authoring-time pack.json exists before it is signed); when present it is the same closed { keyId, scheme } block a version manifest carries (registry-version-manifest.schema.json). The v1 { publicKeyRef, signatureRef, method } block does not exist in v2 (migration row openwop.migration.C10.1)."
|
|
@@ -191,7 +191,7 @@
|
|
|
191
191
|
},
|
|
192
192
|
"scheme": {
|
|
193
193
|
"const": "ed25519-canonical-json",
|
|
194
|
-
"description": "RFC 0177 §C.3 — one scheme: a detached 64-byte Ed25519 signature over the
|
|
194
|
+
"description": "RFC 0177 §C.3, RFC 0212 — one scheme: a detached 64-byte Ed25519 signature over the RFC 8785 (JCS) bytes of pack.json inside a deterministic tarball; the input MUST be I-JSON (spec/v2/core/conformance.md §Canonical JSON). method and publicKeyRef are gone."
|
|
195
195
|
}
|
|
196
196
|
},
|
|
197
197
|
"description": "RFC 0177 §C.3/§C.4."
|
|
@@ -855,7 +855,7 @@
|
|
|
855
855
|
},
|
|
856
856
|
"attestation": {
|
|
857
857
|
"type": "object",
|
|
858
|
-
"description": "RFC 0063 (when `capabilities.agents.subRunAttestation: true` AND the `core.subWorkflow` node sets `outputAttestation.checksum: true`). A content checksum over the child's harvested output object, computed BEFORE `outputMapping` is applied so the parent (or a downstream node) can verify integrity \u2014 host-independent because the recipe is RFC 8785 JCS canonicalization + SHA-256 (the `replay.md` recipe, RFC 0041), enabling verification of a child that ran on a different host (RFC 0040). Advisory: the host does NOT itself reject on checksum mismatch; that is parent policy.",
|
|
858
|
+
"description": "RFC 0063 (when `capabilities.agents.subRunAttestation: true` AND the `core.subWorkflow` node sets `outputAttestation.checksum: true`). A content checksum over the child's harvested output object, computed BEFORE `outputMapping` is applied so the parent (or a downstream node) can verify integrity \u2014 host-independent because the recipe is RFC 8785 JCS canonicalization + SHA-256 (the `replay.md` recipe, RFC 0041; the input MUST be I-JSON, RFC 0212), enabling verification of a child that ran on a different host (RFC 0040). Advisory: the host does NOT itself reject on checksum mismatch; that is parent policy.",
|
|
859
859
|
"additionalProperties": false,
|
|
860
860
|
"required": [
|
|
861
861
|
"checksum",
|
|
@@ -2639,7 +2639,7 @@
|
|
|
2639
2639
|
},
|
|
2640
2640
|
"argsHash": {
|
|
2641
2641
|
"type": "string",
|
|
2642
|
-
"description": "RFC 0064 (when `capabilities.toolHooks.prePostEvents`). SHA-256 over RFC 8785 JCS-canonicalized args with resolved secrets already redacted (SR-1) \u2014 the SIEM-safe, content-free alternative to `inputs`. Raw key material MUST NOT enter the hash input."
|
|
2642
|
+
"description": "RFC 0064 (when `capabilities.toolHooks.prePostEvents`). SHA-256 over RFC 8785 JCS-canonicalized args with resolved secrets already redacted (SR-1) \u2014 the SIEM-safe, content-free alternative to `inputs`. Raw key material MUST NOT enter the hash input. The args MUST be I-JSON (RFC 0212)."
|
|
2643
2643
|
},
|
|
2644
2644
|
"principal": {
|
|
2645
2645
|
"type": "string",
|
|
@@ -588,7 +588,7 @@
|
|
|
588
588
|
},
|
|
589
589
|
"scheme": {
|
|
590
590
|
"const": "ed25519-canonical-json",
|
|
591
|
-
"description": "RFC 0177 §C.3 — one scheme: a detached 64-byte Ed25519 signature over the
|
|
591
|
+
"description": "RFC 0177 §C.3, RFC 0212 — one scheme: a detached 64-byte Ed25519 signature over the RFC 8785 (JCS) bytes of pack.json inside a deterministic tarball; the input MUST be I-JSON (spec/v2/core/conformance.md §Canonical JSON). method and publicKeyRef are gone."
|
|
592
592
|
}
|
|
593
593
|
},
|
|
594
594
|
"description": "RFC 0177 §C.3/§C.4 — OPTIONAL on a bare manifest (an authoring-time pack.json exists before it is signed); when present it is the same closed { keyId, scheme } block a version manifest carries (registry-version-manifest.schema.json). The v1 { publicKeyRef, signatureRef, method } block does not exist in v2 (migration row openwop.migration.C10.1)."
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"provenance": {
|
|
5
5
|
"suite": {
|
|
6
6
|
"package": "@openwop/openwop-conformance",
|
|
7
|
-
"version": "2.
|
|
7
|
+
"version": "2.39.0"
|
|
8
8
|
},
|
|
9
9
|
"note": "Derived from the corpus at generation time. Regenerate with --write; verify with --check."
|
|
10
10
|
},
|
|
@@ -420,5 +420,5 @@
|
|
|
420
420
|
"$id": "https://openwop.dev/spec/v1/workspace-file.schema.json"
|
|
421
421
|
}
|
|
422
422
|
],
|
|
423
|
-
"digest": "
|
|
423
|
+
"digest": "32e3c100f74e0b6199f84253b871fec4efd1e4718eb18e083325be540afb10f2"
|
|
424
424
|
}
|
|
@@ -61,17 +61,23 @@ A certification bundle validates against `schemas/v2/certification-bundle.schema
|
|
|
61
61
|
| `discovery` | `url`, `sha256`, `protocolVersions`, `preferredVersion` REQUIRED |
|
|
62
62
|
| `claimedProfiles[]` | `id`, `evidenceTier` (`self` \| `steward` \| `independent`), `witnessCount`, `certified` REQUIRED |
|
|
63
63
|
| `results` | `totals` and the per-requirement list REQUIRED |
|
|
64
|
-
| `witnessSha256` | REQUIRED;
|
|
64
|
+
| `witnessSha256` | REQUIRED; SHA-256 of the preimage in §"Canonical JSON" |
|
|
65
65
|
| `assertionCount` | REQUIRED, ≥ 1 |
|
|
66
66
|
| `detail.nonPass[]` | REQUIRED when any total other than `executedPass` is non-zero |
|
|
67
67
|
| `results.requirements[].evidence` | OPTIONAL, closed; structured evidence on an `executed-pass` row (below) |
|
|
68
68
|
| `durability.rung` | OPTIONAL; a claim the verifier re-derives (below) |
|
|
69
69
|
| `signature` | REQUIRED |
|
|
70
70
|
|
|
71
|
-
`signature` is an Ed25519 attestation over the
|
|
71
|
+
`signature` is an Ed25519 attestation over the JCS bytes (§"Canonical JSON") of `{ witnessSha256, host.build, suite.version, discovery.sha256 }`; `over` MUST list exactly those four members. A host that signs bundles MUST publish the corresponding public keys as `signingKeys[]` in its discovery document, and `signature.keyId` MUST name one of them. A verifier MUST resolve `keyId` there — in the discovery document of the host the bundle is *about* — and MUST verify the attestation under the published key.
|
|
72
72
|
|
|
73
73
|
A signature that cannot be resolved to a published key attests **integrity only**. Such a bundle MUST NOT be read as attributable evidence, and a gate MUST distinguish three outcomes that a presence check collapses into one — *no discovery document was read*, *read and the key is not published*, and *the attestation does not verify*. A retired key MUST stay listed. `evidenceTier: independent` MUST carry a `verifierKeyId` distinct from the host's signing key; the verifier MUST refuse, not warn, on a missing or self-signed independent claim. A bundle with `totals.blocked > 0` does not certify. At major 2 a requirement a test did not observe records `blocked` even when the test asserted setup facts first; an `executed-pass` carrying a `partial-witness:` detail is reserved for a leg that observed its requirement and skipped an optional extra. A verifier MUST derive the operator's opt-outs from the signed `skipped` rows and MUST reject a bundle whose captured discovery document advertises one of them (`opted-out-but-advertised`). v1 and v2 bundles are never upgraded to v3; a bundle is evidence at its own version.
|
|
74
74
|
|
|
75
|
+
### Canonical JSON
|
|
76
|
+
|
|
77
|
+
Every signature and digest in this corpus is over the RFC 8785 (JCS) serialization, UTF-8 encoded (RFC 0212). The value MUST be I-JSON (RFC 7493): a signer or hasher MUST refuse, not coerce, a value with duplicate member names, a lone surrogate, a non-finite number, an integer literal whose magnitude exceeds 2^53 − 1, or a non-JSON value, and a verifier that meets one in a document it must re-canonicalize MUST fail verification. `conformance/vectors/jcs-v1.json` is normative.
|
|
78
|
+
|
|
79
|
+
`witnessSha256` is SHA-256 over the JCS bytes of the rows — one object per `results.requirements[]` entry with exactly `id`, `scenario`, `result` and, each only when present, `assertions`, `detail`, `evidence`, sorted by `id` in UTF-16 code-unit order — or, only when `host.relaxations[]` is non-empty, of `{ "rows": …, "relaxations": … }` with relaxations in the order carried. A locale-sensitive comparator MUST NOT be used. `discovery.sha256` is SHA-256 over the JCS bytes of the captured document.
|
|
80
|
+
|
|
75
81
|
### Recovery evidence
|
|
76
82
|
|
|
77
83
|
Recovery evidence (RFC 0158 §E) rides on rows, which `witnessSha256` digests: a row's `evidence` enters the digest only when present, and a bundle without it digests as it always did.
|
package/spec/v2/core/interop.md
CHANGED
|
@@ -77,6 +77,12 @@ A host MAY serve the MCP Tasks extension `io.modelcontextprotocol/tasks` (revisi
|
|
|
77
77
|
|
|
78
78
|
`auth-required` remains a member of the persisted A2A task state enum (`schemas/v2/a2a-task-state.schema.json`) for the reverse direction (consuming an external A2A agent). The forward projection MUST emit it, with `interruptKind: credential` and a status message carrying `connectUrl`, for a run suspended on a `credential` interrupt (interrupt.md), and MUST NOT emit it otherwise.
|
|
79
79
|
|
|
80
|
+
## A2A push delivery (RFC 0214)
|
|
81
|
+
|
|
82
|
+
A host advertising `a2a.pushNotifications` treats each push as a webhook egress: webhooks.md §Egress binds at delivery time as well as registration, a `3xx` is a failed delivery, and the push credential is bound as security-defaults.md §"Onward hops" states. It MUST attempt each push at least once; a host that retries follows `webhooks.md` `retryPolicy` semantics. The body is an A2A 1.0 `StreamResponse` sent as `application/a2a+json`, carrying `Authorization: {scheme} {credentials}` from the config; when only `token` is set a host SHOULD send it as `Authorization: Bearer <token>` (A2A v1.0.1 leaves its carriage undefined). A host MUST NOT add an OpenWOP signature. Push dead-letters are not visible to A2A clients; a client recovers with `GetTask`.
|
|
83
|
+
|
|
84
|
+
A `replay` fork MUST NOT push re-emitted history, and no fork inherits a source run's push configs. A push-config read or delete on a task the caller cannot read, or naming a `configId` that is not that task's, MUST answer exactly as for an unknown id, apart from the JSON-RPC `id`; a `configId` MUST NOT encode a tenant, workspace or principal, and delete is idempotent.
|
|
85
|
+
|
|
80
86
|
## Per-agent cards
|
|
81
87
|
|
|
82
88
|
A host advertising `a2a.agentCards` MUST also offer the `a2a-1.0` profile and `agents.manifestRuntime`, and MUST declare `capabilities.extendedAgentCard: true` on its public card. It publishes each entry of a caller's agent inventory (`GET /agents`) as an A2A `AgentCard`, reached through the entry's `a2aTenant`: an opaque routing value `R` the host mints, stable for the agent and host version, that MUST NOT encode a tenant, workspace, or principal.
|
package/spec/v2/core/packs.md
CHANGED
|
@@ -64,7 +64,7 @@ There is one signing scheme. `signing` on a version manifest (`schemas/v2/regist
|
|
|
64
64
|
|
|
65
65
|
| Field | Rule |
|
|
66
66
|
| --- | --- |
|
|
67
|
-
| `scheme` | MUST be `ed25519-canonical-json`: a detached 64-byte Ed25519 signature over the
|
|
67
|
+
| `scheme` | MUST be `ed25519-canonical-json`: a detached 64-byte Ed25519 signature over the RFC 8785 (JCS) bytes of `pack.json` inside a deterministic tarball; the input MUST satisfy `conformance.md` §"Canonical JSON" (RFC 0212) |
|
|
68
68
|
| `keyId` | the signing key id; `publicKeyRef` does not exist |
|
|
69
69
|
| `method` | does not exist; a manifest carrying it fails validation |
|
|
70
70
|
|
package/spec/v2/core/replay.md
CHANGED
|
@@ -68,7 +68,7 @@ For a fork with `mode: replay`:
|
|
|
68
68
|
|
|
69
69
|
Pure nodes and LLM calls served from the invocation log MUST re-execute live; otherwise divergence detection is vacuous.
|
|
70
70
|
|
|
71
|
-
**Fan-out.** A host that projects its log outward — webhook delivery, outbound streams, analytics or audit sinks — MUST NOT deliver events a replay re-emits as fixed history. Replay-ness MUST be read from the run, never from the event type; the fork's own log MUST still carry the re-emitted events (webhooks.md).
|
|
71
|
+
**Fan-out.** A host that projects its log outward — webhook delivery, A2A push, outbound streams, analytics or audit sinks — MUST NOT deliver events a replay re-emits as fixed history, and a fork of either mode MUST NOT inherit its source's A2A push configs. Replay-ness MUST be read from the run, never from the event type; the fork's own log MUST still carry the re-emitted events (webhooks.md).
|
|
72
72
|
|
|
73
73
|
**Branch.** A branch re-fires effects for sequences `>= fromSeq`; those are effects the operator asked for. A host MAY suppress branch effects and MUST NOT report that as replay suppression. A host SHOULD surface the re-fire in operator-facing fork UI.
|
|
74
74
|
|
|
@@ -62,7 +62,7 @@ A host that advertises `idempotency` MUST serve `GET /runs/{runId}/effects`; the
|
|
|
62
62
|
|
|
63
63
|
### Onward hops
|
|
64
64
|
|
|
65
|
-
A host MUST NOT attach a credential it received inbound (an `Authorization`, `Cookie` or `Proxy-Authorization` value, a DPoP proof, an interrupt token, a peer's bearer, or credential material carried in a body) to any outbound request: A2A, MCP, webhook, callback, `httpClient` or connector. Outbound authentication uses only credentials the host holds for that destination (oauth.md). A verified delegation chain is not a passthrough: it carries provenance, never the inbound credential (identity.md §2.4).
|
|
65
|
+
A host MUST NOT attach a credential it received inbound (an `Authorization`, `Cookie` or `Proxy-Authorization` value, a DPoP proof, an interrupt token, a peer's bearer, or credential material carried in a body) to any outbound request: A2A, MCP, webhook, callback, `httpClient` or connector. Outbound authentication uses only credentials the host holds for that destination (oauth.md). A verified delegation chain is not a passthrough: it carries provenance, never the inbound credential (identity.md §2.4). One credential is not inbound in this sense: an A2A push-config credential (`authentication.credentials`, `token`) is one the client gave the host for its registered push URL. A host MAY attach it only to a push delivery to that URL's origin, MUST NOT attach it after a redirect or to any other request, MUST discard it when the config is deleted or the task's final push is attempted, and MUST hold it by reference outside the event log, run state, debug bundle and every response (interop.md §"A2A push delivery", RFC 0214).
|
|
66
66
|
|
|
67
67
|
A host advertising `purposePropagation` MUST re-emit a `permittedPurposes` label it received (A2A `metadata.openwop.permittedPurposes`, `TriggerEvent.permittedPurposes`) on every onward hop of the same data, narrowing and never widening, and MUST treat `[]` as no onward use; `purposePropagation.propagatesOnward` is `false` only on a host with no onward hop. The family advertises propagation, not enforcement.
|
|
68
68
|
|
package/spec/v2/core/webhooks.md
CHANGED
|
@@ -76,6 +76,6 @@ A host MUST NOT deliver events a `replay` fork re-emits as fixed history; replay
|
|
|
76
76
|
|
|
77
77
|
## Egress
|
|
78
78
|
|
|
79
|
-
At registration a host MUST reject (`400 webhook_url_rejected`) non-`https://` URLs, RFC 1918 and loopback and link-local ranges, IPv6 ULA, cloud metadata hosts, and `localhost`. At delivery time a host MUST re-resolve the hostname, validate every resolved address against the same denied ranges plus its own denylist, connect to the validated address without re-resolving, and refuse to follow redirects (invariant `webhook-delivery-egress-revalidation`, reference-impl tier). An IPv4-mapped IPv6 address (`::ffff:0:0/96`) MUST be judged by the IPv4 address it embeds, whatever its spelling. An address embedding IPv4 in another standard translation form (IPv4-compatible `::/96`, NAT64 `64:ff9b::/96`, 6to4 `2002::/16`) SHOULD be judged the same way, and those prefixes SHOULD NOT be denied wholesale. A host SHOULD refuse every destination the IANA special-purpose address registries mark not globally reachable (RFC 0196 §B).
|
|
79
|
+
At registration a host MUST reject (`400 webhook_url_rejected`) non-`https://` URLs, RFC 1918 and loopback and link-local ranges, IPv6 ULA, cloud metadata hosts, and `localhost`. At delivery time a host MUST re-resolve the hostname, validate every resolved address against the same denied ranges plus its own denylist, connect to the validated address without re-resolving, and refuse to follow redirects (invariant `webhook-delivery-egress-revalidation`, reference-impl tier). An IPv4-mapped IPv6 address (`::ffff:0:0/96`) MUST be judged by the IPv4 address it embeds, whatever its spelling. An address embedding IPv4 in another standard translation form (IPv4-compatible `::/96`, NAT64 `64:ff9b::/96`, 6to4 `2002::/16`) SHOULD be judged the same way, and those prefixes SHOULD NOT be denied wholesale. A host SHOULD refuse every destination the IANA special-purpose address registries mark not globally reachable (RFC 0196 §B). These delivery-time rules bind an A2A push identically (interop.md §"A2A push delivery").
|
|
80
80
|
|
|
81
81
|
See also: events.md, replay.md, persistence.md, security-defaults.md.
|
|
@@ -10,7 +10,6 @@
|
|
|
10
10
|
"required": [
|
|
11
11
|
"lane",
|
|
12
12
|
"issuers",
|
|
13
|
-
"revocation",
|
|
14
13
|
"minimumAssurance"
|
|
15
14
|
],
|
|
16
15
|
"properties": {
|
|
@@ -77,28 +76,50 @@
|
|
|
77
76
|
}
|
|
78
77
|
},
|
|
79
78
|
"$comment": "RFC 0210 §C — `exp-only` MUST NOT be advertised on `api-key` or `session`: there the host issued the credential itself, so revocation is in its own hands. The antecedent is the NEW member only, so no document that validates today can be invalidated by it. The full lane -> rule binding is deliberately NOT here (it would retroactively invalidate a committed bundle); it lives in the suite, and scripts/check-lane-revocation-rules.mjs keeps the table, this enum and the suite map in lockstep.",
|
|
80
|
-
"
|
|
81
|
-
|
|
82
|
-
"
|
|
83
|
-
"
|
|
79
|
+
"allOf": [
|
|
80
|
+
{
|
|
81
|
+
"if": {
|
|
82
|
+
"properties": {
|
|
83
|
+
"revocation": {
|
|
84
|
+
"const": "exp-only"
|
|
85
|
+
}
|
|
86
|
+
},
|
|
87
|
+
"required": [
|
|
88
|
+
"revocation"
|
|
89
|
+
]
|
|
90
|
+
},
|
|
91
|
+
"then": {
|
|
92
|
+
"properties": {
|
|
93
|
+
"lane": {
|
|
94
|
+
"not": {
|
|
95
|
+
"enum": [
|
|
96
|
+
"api-key",
|
|
97
|
+
"session"
|
|
98
|
+
]
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
84
102
|
}
|
|
85
103
|
},
|
|
86
|
-
|
|
87
|
-
"revocation"
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
104
|
+
{
|
|
105
|
+
"$comment": "identity.md §2.2: every lane names a revocation rule EXCEPT `anonymous`, whose row reads \"—\" (an RFC 0132 public surface has no credential to revoke), and a host MUST NOT advertise a value its lane's row does not list. Requiring `revocation` on every lane made the anonymous lane unsatisfiable against both at once. Loosening only: every document valid before stays valid.",
|
|
106
|
+
"if": {
|
|
107
|
+
"properties": {
|
|
108
|
+
"lane": {
|
|
109
|
+
"const": "anonymous"
|
|
110
|
+
}
|
|
111
|
+
},
|
|
112
|
+
"required": [
|
|
113
|
+
"lane"
|
|
114
|
+
]
|
|
115
|
+
},
|
|
116
|
+
"else": {
|
|
117
|
+
"required": [
|
|
118
|
+
"revocation"
|
|
119
|
+
]
|
|
99
120
|
}
|
|
100
121
|
}
|
|
101
|
-
|
|
122
|
+
]
|
|
102
123
|
}
|
|
103
124
|
},
|
|
104
125
|
"subjectLinkKey": {
|
package/spec/v2/interop-map.json
CHANGED
|
@@ -109,7 +109,7 @@
|
|
|
109
109
|
"requires": [
|
|
110
110
|
"a2a.pushNotifications"
|
|
111
111
|
],
|
|
112
|
-
"rule": "Persists A2ATaskState.pushConfig. url MUST pass the webhooks.md egress guard
|
|
112
|
+
"rule": "Persists A2ATaskState.pushConfig. url MUST pass the webhooks.md egress guard at registration (scheme and address arms both) and again at delivery (interop.md §\"A2A push delivery\"); token and authentication.credentials are a destination credential held by reference (security-defaults.md §\"Onward hops\"), MUST NOT enter the event log, the persisted A2ATaskState or a debug bundle, and are sent only to the registered origin. Unadvertised: PushNotificationNotSupportedError."
|
|
113
113
|
},
|
|
114
114
|
{
|
|
115
115
|
"upstream": "GetTaskPushNotificationConfig | ListTaskPushNotificationConfigs | DeleteTaskPushNotificationConfig",
|
|
@@ -119,7 +119,7 @@
|
|
|
119
119
|
"requires": [
|
|
120
120
|
"a2a.pushNotifications"
|
|
121
121
|
],
|
|
122
|
-
"rule": "Reads or deletes the persisted configs of a task the caller can read; secrets are never returned."
|
|
122
|
+
"rule": "Reads or deletes the persisted configs of a task the caller can read; secrets are never returned. An unreadable task or a configId that is not the task's is answered as an unknown id; delete is idempotent. Unadvertised: PushNotificationNotSupportedError."
|
|
123
123
|
},
|
|
124
124
|
{
|
|
125
125
|
"upstream": "GetExtendedAgentCard",
|
package/spec/v2/release.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$comment": "RFC 0172 §D.1 — the one release identity the v2 artifacts derive from. `version` is the next corpus tag `v<version>` (the publish workflow's coordinated-release tag pattern `v*`; RFC 0172's `openwop/v2.<minor>.<patch>` spelling is amended to this at its flip). api/v2/*.yaml info.version, the suite's 2.x version and @openwop/spec-artifacts read it. Bumped by the release PR that cuts the tag, never by hand elsewhere.",
|
|
3
|
-
"version": "2.
|
|
4
|
-
"corpusTag": "v2.
|
|
3
|
+
"version": "2.39.0",
|
|
4
|
+
"corpusTag": "v2.39.0",
|
|
5
5
|
"updated": "2026-09-24"
|
|
6
6
|
}
|