@openwop/spec-artifacts 2.0.4 → 2.0.5
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 +49 -11
- 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/certification-bundle.schema.json +5 -0
- package/spec/v1/core-standard-manifest.json +2 -2
- package/spec/v2/README.md +15 -0
- package/spec/v2/core/capabilities.md +404 -0
- package/spec/v2/core/conformance.md +66 -0
- package/spec/v2/core/connection-packs.md +32 -0
- package/spec/v2/core/errors.md +131 -0
- package/spec/v2/core/events.md +109 -0
- package/spec/v2/core/form-content-packs.md +32 -0
- package/spec/v2/core/headers.md +40 -0
- package/spec/v2/core/idempotency.md +45 -0
- package/spec/v2/core/identity.md +141 -0
- package/spec/v2/core/interop.md +65 -0
- package/spec/v2/core/interrupt.md +83 -0
- package/spec/v2/core/overview.md +58 -0
- package/spec/v2/core/packs.md +72 -0
- package/spec/v2/core/persistence.md +168 -0
- package/spec/v2/core/replay.md +104 -0
- package/spec/v2/core/runs.md +109 -0
- package/spec/v2/core/security-defaults.md +108 -0
- package/spec/v2/core/versioning.md +116 -0
- package/spec/v2/core/webhooks.md +64 -0
- package/spec/v2/core/workflow-chain-packs.md +36 -0
- package/spec/v2/declaration.json +8 -0
- package/spec/v2/declaration.schema.json +34 -2
- package/spec/v2/ext/a2uiSurface/README.md +20 -0
- package/spec/v2/ext/brand/README.md +20 -0
- package/spec/v2/ext/canvas/README.md +20 -0
- package/spec/v2/ext/chat/README.md +20 -0
- package/spec/v2/ext/coordination/README.md +20 -0
- package/spec/v2/ext/dataIntegration/README.md +20 -0
- package/spec/v2/ext/entities/README.md +20 -0
- package/spec/v2/ext/grpc-transport/README.md +13 -0
- package/spec/v2/ext/kanban/README.md +20 -0
- package/spec/v2/ext/knowledge/README.md +20 -0
- package/spec/v2/ext/launchStudio/README.md +20 -0
- package/spec/v2/ext/messaging/README.md +20 -0
- package/spec/v2/ext/portability/README.md +11 -0
- package/spec/v2/ext/provider-idempotency/README.md +11 -0
- package/spec/v2/ext/restTransport/README.md +20 -0
- package/spec/v2/ext/sandbox-runtime-notes/README.md +11 -0
- package/spec/v2/ext/webResearch/README.md +20 -0
- package/spec/v2/release.json +2 -2
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.0.
|
|
5
|
-
"corpusTag": "v2.0.
|
|
4
|
+
"version": "2.0.5",
|
|
5
|
+
"corpusTag": "v2.0.5",
|
|
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": "39081c59fb696159806b0f2f9a42e7e9ff830d622fcf2ad4159b21357580a955",
|
|
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": "99eae8d4204c4c23c4af05ed5e4982171ca6cf4fe9be03ebcedd9d977c5006dc",
|
|
13
|
+
"api/v2/asyncapi.yaml": "42040149c2a2056b1f69533fe4fb96e4f0299c8a06e952a88b8b7fd6d21748d2",
|
|
14
|
+
"api/v2/openapi.yaml": "4dcb20f14d28b4a7bfbbd2f6c1740723937169b7d1581670fe82c968e5d587a8",
|
|
15
15
|
"api/v2/redocly.yaml": "1e66b60e6118ad11a823bb620678be464d99dfe50a40e3e6f93ec9429b88b34c",
|
|
16
16
|
"schemas/README.md": "0c0b737ffcf8f30e7d2809cec8a498232de710f41443212922ad8337cdde0b51",
|
|
17
17
|
"schemas/a2a-task-state.schema.json": "c9365918f993f943b4b619d42551eb066a1ed33a08d895d51b395432a5b1f1bc",
|
|
@@ -116,7 +116,7 @@
|
|
|
116
116
|
"schemas/v2/audit-verify-result.schema.json": "cb54c4d89ba5dfb73f49aa8959a980be65c2dc2a87a12f71ba36d3e836fe85da",
|
|
117
117
|
"schemas/v2/budget-policy.schema.json": "c7449daeb6e1d95e7a047b8c2814d3d54748697c27046972834874867d9b5f4c",
|
|
118
118
|
"schemas/v2/capabilities.schema.json": "792669b2cc7b1fd44ce9a4fd3e79696ad1277734e29299a4504b39eda15913ed",
|
|
119
|
-
"schemas/v2/certification-bundle.schema.json": "
|
|
119
|
+
"schemas/v2/certification-bundle.schema.json": "d2cbc5cadddff13630a528dc9673162f582c035c6a6663ca02c1ac53e8fec40c",
|
|
120
120
|
"schemas/v2/channel-presence-payload.schema.json": "9475d46f358d21c19126e78204987a5633979917a2293653354ef5c5e044d54e",
|
|
121
121
|
"schemas/v2/channel-written-payload.schema.json": "ccecff3c71a3275ad8db035ac0e04db25e6f8d23cf091ddbcd5a60d1be1cbb6b",
|
|
122
122
|
"schemas/v2/chat-card-pack-manifest.schema.json": "8df0d9d273ae22efc6876d5586833f1d4c2e551edc3ac6cf6e8f0719329f03dd",
|
|
@@ -199,7 +199,7 @@
|
|
|
199
199
|
"schemas/workspace-file.schema.json": "464de85c2a068243084ee9c1d969bc7cd5d8f7948574e58450d6493c38a0e1e4",
|
|
200
200
|
"spec/v1/alias-detectors.json": "fee4594ef49953953ffcd0b3813300067d16b3e65ebff2aac722034ac9b3f545",
|
|
201
201
|
"spec/v1/capability-declaration-classes.json": "e7729aed5c4b4e1dd02abab0530f14cc95f5d4070fe51fb139e7f5cccefa00c6",
|
|
202
|
-
"spec/v1/core-standard-manifest.json": "
|
|
202
|
+
"spec/v1/core-standard-manifest.json": "6e6059b6bcb2196ebbdf4015a28d4a077f93e7bec710326c492b49935988fd15",
|
|
203
203
|
"spec/v1/deprecations.json": "1d5acb69a9b8ccb57275a95605f74aef1d920685f8407c9d382a46b59dc803bb",
|
|
204
204
|
"spec/v1/deprecations.schema.json": "18c87e78bedc210431f795ae44c5b5d202f2f3317850d5cf86867d4f1fa1cdfb",
|
|
205
205
|
"spec/v1/event-codemap.json": "3da60d884157793a360da532a9fcbbfb5285636db325a74cec94b34622186d97",
|
|
@@ -211,12 +211,50 @@
|
|
|
211
211
|
"spec/v1/migrations.schema.json": "886779aa6c22e646db097f5df210adb018a4dd14a7b815465a18c8a7056c8f72",
|
|
212
212
|
"spec/v1/operation-path-manifest.json": "5f5f4e3842669371730ebbd1aace3fb794192615f0018dc144f484ba5db82ac3",
|
|
213
213
|
"spec/v1/spec-gaps.json": "6cc9962c6b969f632e07a78b52a4f61447ff579e2990cbae989866f584a86042",
|
|
214
|
-
"spec/v2/
|
|
215
|
-
"spec/v2/
|
|
214
|
+
"spec/v2/README.md": "f56bd8d58be4ac04543c9f7b2fe92b294738d6121a4f21cbd1ce751e72b94c83",
|
|
215
|
+
"spec/v2/core/capabilities.md": "0f222434bbe58c881362a626ab9db6bce0ae2e54cb858e3d71b662dd1fc13150",
|
|
216
|
+
"spec/v2/core/conformance.md": "91418b882190e116ab9dac14527f52b8582b0462f41e96beeceb07e3fcc5f99a",
|
|
217
|
+
"spec/v2/core/connection-packs.md": "34e519dbe5b091c9758729787d398b35b1dc41f1e01ebd028e7e6b838ce2f6ee",
|
|
218
|
+
"spec/v2/core/errors.md": "671895de1b7c987a1dfd53fe0a814159efadae0ffd4c8c06bf1749d345270580",
|
|
219
|
+
"spec/v2/core/events.md": "7b9207079cede7ec335126b98bcb95d655ae3b7322b18febd1b4df51750b0a33",
|
|
220
|
+
"spec/v2/core/form-content-packs.md": "976f6e9b05a015f3bfe0748bc4f8bb11bbbd71460d12769f900bcde006b7cbb1",
|
|
221
|
+
"spec/v2/core/headers.md": "b7fc4f77904653ad47360b20302e3f406973821fb6d74ac86d6e81b674f52c4a",
|
|
222
|
+
"spec/v2/core/idempotency.md": "0ab68c1e41e81005b560421a3d22f985dda2f7537b2369bff67e40b79c8a581f",
|
|
223
|
+
"spec/v2/core/identity.md": "e3fa8d2d87c1dec2673e4bf4aec5f2257c684eaf64161c1a1016a634a87509c2",
|
|
224
|
+
"spec/v2/core/interop.md": "f701fddf15343d878faea31401e25e6ffb3672c2c8a87f30adc13b1e3c5c300c",
|
|
225
|
+
"spec/v2/core/interrupt.md": "4bd345bccdb8e2762ca95833cc67086158640c27ffa5ef84915a4ab3de348440",
|
|
226
|
+
"spec/v2/core/overview.md": "8ece6667535d24ed4013a046cb11e1a649f70e39625fc55e09ceb2c02505ed9c",
|
|
227
|
+
"spec/v2/core/packs.md": "90f32947816b4ec2b045b063ad2914126c73353883514a270ad200205dc8e51b",
|
|
228
|
+
"spec/v2/core/persistence.md": "e18195e078d7b0b799055005567e8d86a2ea7518c87809cfaf43dfe9f5d5c8ee",
|
|
229
|
+
"spec/v2/core/replay.md": "19b2fcbda4693895d39b99593f498b76376d77472a813bba6c22fca02e106332",
|
|
230
|
+
"spec/v2/core/runs.md": "f5f24df6da76b1d6e2cf655af3bbe3340195c36ec8d9ce0ca6e357385b1a8771",
|
|
231
|
+
"spec/v2/core/security-defaults.md": "53a1bc549aaa356a4fcb56cdb1c4f5880d3fb65d5d49dd570a413bb29aff82e5",
|
|
232
|
+
"spec/v2/core/versioning.md": "2eb4e8e5a1208a026a3d497d1e0fb76a4f7cb97e514d6f41f45dd66b89405abb",
|
|
233
|
+
"spec/v2/core/webhooks.md": "1d2719335f8fb46cd31dbb836b44ea7d78ed54f98ea181927502814603c5b935",
|
|
234
|
+
"spec/v2/core/workflow-chain-packs.md": "99ad4aeeeeb05521720dc2ae18ae63e6d604361780ed1b76778ca6d44da70eed",
|
|
235
|
+
"spec/v2/declaration.json": "9e191dffae9f95e622b3fc7087b8c17a2f42177bb4db3c7ee5fdf650443e036d",
|
|
236
|
+
"spec/v2/declaration.schema.json": "eac5f8080bd572f147bd57d0c4ac8ad73b14536d9236222490ae29a33b21e184",
|
|
216
237
|
"spec/v2/errors.json": "f179414a92f30b5dadf26e9e57699649a67324bd7186d5287647d17605d137d3",
|
|
217
238
|
"spec/v2/event-codemap.json": "37869a03cdfd8758b57e6f350641a6ebbd383231cebda51f5473ad85f94ab74c",
|
|
218
239
|
"spec/v2/event-codemap.schema.json": "ce2d0ca085d7668d7ef745d2560b385ec6881d24a6d4b47c49931986b2ba642d",
|
|
240
|
+
"spec/v2/ext/a2uiSurface/README.md": "176cb0542e1c236ffcd6d682536ba0081242684444e2dec790abd480a44a571e",
|
|
241
|
+
"spec/v2/ext/brand/README.md": "1a80102a9cd766dcb6098c999e552af88f5b83c88951acde18d17cc0b29aa09d",
|
|
242
|
+
"spec/v2/ext/canvas/README.md": "a2d5f28523753e8e85cc9042db39faf9207a2eebce1a8553be22e341f7ea58d9",
|
|
243
|
+
"spec/v2/ext/chat/README.md": "39fe2961502d2937fe487cf52acfffeeb4a396731f0b2bf737b109eac2752bca",
|
|
244
|
+
"spec/v2/ext/coordination/README.md": "a193aa9a59a2d9ac8d2e9775e5be40c29b6f7476ffef35231dbab49377af9207",
|
|
245
|
+
"spec/v2/ext/dataIntegration/README.md": "8361c626ed9f77dc48a3bcaa0c9f769cb6706632941014700f7683efe0918bd1",
|
|
246
|
+
"spec/v2/ext/entities/README.md": "c3bf6c59ddf2255c22a522e689f6e7a11646fbcd309b17699b6cf69a4e2e0f91",
|
|
247
|
+
"spec/v2/ext/grpc-transport/README.md": "7fa692715744d6573443f994c521cbff0bf0be2e81ffdbb01e42f58f32a3ffaf",
|
|
248
|
+
"spec/v2/ext/kanban/README.md": "6792926f7f0cb8a4dcb0acdedb86a1988574fb0b5de164b37159dfe3ba35f908",
|
|
249
|
+
"spec/v2/ext/knowledge/README.md": "d2615320c7de4aec279f276381376a8881e962dd4e86b1435462d742dd00a52f",
|
|
250
|
+
"spec/v2/ext/launchStudio/README.md": "bfe417e774689773f3bbced9fdfa0c18809577aa6040a1312d914c821beed026",
|
|
251
|
+
"spec/v2/ext/messaging/README.md": "8a4702935483ce7900c0ee14793f9dfbeeb09d5e43f8943c946f8f94de2efa6f",
|
|
252
|
+
"spec/v2/ext/portability/README.md": "d9caf3dd723212676a0dd7f847284ce8aa3f0f5ebd4b273580c34a260ece96d7",
|
|
253
|
+
"spec/v2/ext/provider-idempotency/README.md": "c7620aadaf4e7ded997487c917e1583c8bc9ba20aa5353476d66f229207dbd1a",
|
|
219
254
|
"spec/v2/ext/provider-idempotency/registry.json": "5b5fecad604fb4ab38da39f5abe697a4e57b05406c398f8afeb377331b2bd965",
|
|
255
|
+
"spec/v2/ext/restTransport/README.md": "b39f4d1ddbabd72dd945a39e90218d8413e46baea1269798b96dffb4e429cb4f",
|
|
256
|
+
"spec/v2/ext/sandbox-runtime-notes/README.md": "36c5517082b1cce0f1ccec5153e4bea10144bba88503b3b023f920444f3c15e6",
|
|
257
|
+
"spec/v2/ext/webResearch/README.md": "941dfe8323fd536791167f9fc7d119dd4e165bb7937e3382a19f15cda3d9f19a",
|
|
220
258
|
"spec/v2/facets/a2a.schema.json": "6b0bceddec6d18d5115aa7d04720a0cc1ad7a9a0a78f53c208b34becaba5d16e",
|
|
221
259
|
"spec/v2/facets/aiProviders.schema.json": "0c76e48e5d487b5be3b3ab1f6512a4e206c840ee5087d1336c7d7e2853b58d03",
|
|
222
260
|
"spec/v2/facets/auth.schema.json": "73440c944ad12c41aab0618aeb799a90a0b59e97fc685527f248afb7d015381a",
|
|
@@ -230,8 +268,8 @@
|
|
|
230
268
|
"spec/v2/path-manifest.json": "034152e09b1458c66810d4050e20a273b2b9b8fe2d92b66e8b819477de58a1be",
|
|
231
269
|
"spec/v2/peer-dependency-aliases.json": "d10299280abee08258502925bc327293ee413e0108cd6e6ec75ff6110653308d",
|
|
232
270
|
"spec/v2/profiles.json": "0636f19fceae625390003a347e70ef4797d84766b5c24ce8a02cea52aadebca4",
|
|
233
|
-
"spec/v2/release.json": "
|
|
271
|
+
"spec/v2/release.json": "b5017d420b712ef558a93e0a6576df225583294157bb5c8cb198ee490c118780",
|
|
234
272
|
"spec/v2/retention-floors.json": "eaf3722d95c79947af1d4269ef85117e126518c588cfcf1a2b21b97269f51624"
|
|
235
273
|
},
|
|
236
|
-
"corpusCommit": "
|
|
274
|
+
"corpusCommit": "3d3eca2a5b8e856c1f6cf448ee9e19fbb4fe5dd1"
|
|
237
275
|
}
|
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.0.
|
|
4
|
+
version: 2.0.5
|
|
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.0.
|
|
4
|
+
version: 2.0.5
|
|
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.0.
|
|
4
|
+
version: 2.0.5
|
|
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.0.
|
|
3
|
+
"version": "2.0.5",
|
|
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 \u2014 published from the openwop/openwop corpus tag; the peer dependency @openwop/openwop-conformance digest-checks at start (RFC 0168 \u00a7D.2).",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"repository": {
|
|
@@ -161,6 +161,11 @@
|
|
|
161
161
|
},
|
|
162
162
|
"preferredVersion": {
|
|
163
163
|
"type": "string"
|
|
164
|
+
},
|
|
165
|
+
"document": {
|
|
166
|
+
"type": "object",
|
|
167
|
+
"additionalProperties": true,
|
|
168
|
+
"description": "The captured /.well-known/openwop payload. OPTIONAL: bundles cut before suite 2.0.5 do not carry it and remain valid. When present it MUST hash (canonical JSON, keys sorted at every level) to `sha256`, and a verifier re-derives every certified profile from it (RFC 0148 §B(1)). Without it, `claimedProfiles[].certified` is a claim only the emitter can evaluate: a digest of a document the reader does not have proves nothing about its contents, and re-fetching does not substitute because the host redeploys while the bundle attests to the build it names. The object is deliberately OPEN (`additionalProperties: true`): it is a verbatim capture of a third-party document, and closing it would reject a payload from any host richer than this schema anticipated."
|
|
164
169
|
}
|
|
165
170
|
}
|
|
166
171
|
},
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"provenance": {
|
|
5
5
|
"suite": {
|
|
6
6
|
"package": "@openwop/openwop-conformance",
|
|
7
|
-
"version": "2.0.
|
|
7
|
+
"version": "2.0.5"
|
|
8
8
|
},
|
|
9
9
|
"note": "Derived from the corpus at generation time. Regenerate with --write; verify with --check."
|
|
10
10
|
},
|
|
@@ -419,5 +419,5 @@
|
|
|
419
419
|
"$id": "https://openwop.dev/spec/v1/workspace-file.schema.json"
|
|
420
420
|
}
|
|
421
421
|
],
|
|
422
|
-
"digest": "
|
|
422
|
+
"digest": "9f7f5f1d188c7e319eea35d885fca44bf3371a23a47e7f4fb02eb09a58db39da"
|
|
423
423
|
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# `spec/v2/` — the OpenWOP v2 tree (in construction; Phase 3 of the v2 charter)
|
|
2
|
+
|
|
3
|
+
> **Status: in construction.** Nothing under `spec/v2/`, `schemas/v2/` or `api/v2/` is served, published, or vendored by a 1.x consumer until the `v2.0.0-rc.1` corpus tag (RFC 0172 §D.1). The 1.x conformance tarball excludes this tree (`conformance/scripts/pack-vendor.sh`); `openwop-check.sh` stage 10 gates it.
|
|
4
|
+
|
|
5
|
+
Layout (RFC 0167 §C; RFC 0174 §E.2 budget):
|
|
6
|
+
|
|
7
|
+
| Path | Owner | What |
|
|
8
|
+
| --- | --- | --- |
|
|
9
|
+
| `declaration.json` (+ `declaration.schema.json`) | RFC 0169 §B | The one declaration file: every root key of the v2 discovery document with its anchor (`core`, `ext` or `deleted`), witness class, maturity, facets, peer-dependency identifier (≡ key), floor scenarios and requirement ids, and the profile predicates. Hand-reviewed source; everything else is generated from it (`scripts/generate-from-declaration.mjs`) and checked against it (`scripts/check-declaration.mjs`). |
|
|
10
|
+
| `profiles.json`, `peer-dependency-aliases.json` | RFC 0169 §C, RFC 0177 §B.2 | Generated. |
|
|
11
|
+
| `errors.json` (→ generated `schemas/v2/error-envelope.schema.json`), `event-codemap.json` (all rows decided), `path-manifest.json` (operations + channels), `release.json` (the one release identity `info.version` reads), `facets/<key>.schema.json` (hand-decided facet shapes the capabilities generator reads) | RFC 0171, 0176, 0172, 0169 | Landed P3-B/P3-C. `migrations.json` / `deprecations.json` stay at `spec/v1/` until the RC promotes them with `applied` marks (RFC 0167). |
|
|
12
|
+
| `core/*.md` | one per child | Normative prose, ≤ 25,000 words total (`scripts/check-core-budget.mjs`, `wc -w` on raw markdown, generated `core/headers.md` included). `capabilities.md` carries one `### § <key>` heading per core family (`check-declaration.mjs`). Lands in P3-D. |
|
|
13
|
+
| `ext/<key>/` | RFC 0169 §B.3, RFC 0175 §A.1, RFC 0173 §D | Extension documents with a declared `witness:` / `technical:` / `adoption:` header: the 13 ext-anchored families, plus `grpc-transport/` (demoted; non-normative proto), `portability/` (goals/export/import), `sandbox-runtime-notes/` (RFC 0035 history), `provider-idempotency/` (the Layer-2 provider registry). |
|
|
14
|
+
|
|
15
|
+
Machine artifacts here are published in `@openwop/spec-artifacts` (RFC 0168 §D.2), never inside the suite tarball.
|
|
@@ -0,0 +1,404 @@
|
|
|
1
|
+
# Discovery and Capabilities
|
|
2
|
+
|
|
3
|
+
> **Status: Draft · v2.0.0-rc (2026-09-03) · RFC 0169, 0176, 0179.**
|
|
4
|
+
|
|
5
|
+
## Why this exists
|
|
6
|
+
|
|
7
|
+
v1 discovery had 91 root properties on an open root, `supported` in four shapes, and four machine registries with no schema of their own. v2 has one capability record type on a closed root, generated from one declaration file that also mints pack peer-dependency identifiers and the `§` anchors below. Profiles are derived predicates, never a wire field.
|
|
8
|
+
|
|
9
|
+
## 1. One well-known resource (RFC 0176 §C.1)
|
|
10
|
+
|
|
11
|
+
`/.well-known/openwop` is one resource. Its representation MUST be selected by `OpenWOP-Version` per `versioning.md` §1.3: no header ⇒ the v1 document (with `protocolVersions[]` and `preferredVersion` additive) through the overlap; `OpenWOP-Version: 2` ⇒ the closed v2 root. A single fetch answers the major the client speaks and names the other. A v2 root MUST NOT contain a v1 sub-object; per-major sub-objects in one document are not adopted.
|
|
12
|
+
|
|
13
|
+
### 1.1 Cache validators
|
|
14
|
+
|
|
15
|
+
A host MUST emit a standard `ETag` on the discovery document and MUST honor `If-None-Match` with `304`. `Capabilities-Etag` is absent from the v2 representation; the document's bytes are its negotiation identity, and a host that changes semantics without changing bytes is non-conformant.
|
|
16
|
+
|
|
17
|
+
### 1.2 Removal triggers (RFC 0176 §C.2)
|
|
18
|
+
|
|
19
|
+
`deprecations.json` rows carry `removalTrigger` (`v2.0-cut | v1-end-of-support`). The wrapper (`capabilities-wrapper`), the dotted mirror (`host-dotted-mirror`), and `Capabilities-Etag` (`capabilities-etag-header`) MUST be absent from the v2 representation at the cut and MUST be removed from the v1 representation at v1 end-of-support (`overview.md`). The `/.well-known/wop` alias (`well-known-wop-alias`) carries the same trigger.
|
|
20
|
+
|
|
21
|
+
## 2. The capability record (RFC 0169 §A)
|
|
22
|
+
|
|
23
|
+
Every family at the v2 root is one object:
|
|
24
|
+
|
|
25
|
+
```json
|
|
26
|
+
{ "status": "stable" | "experimental" | "deprecated",
|
|
27
|
+
"since": "<major>.<minor>",
|
|
28
|
+
"until": "<major>.<minor>" | "<YYYY-MM-DD>",
|
|
29
|
+
"witness": "witnessable-unaided" | "witnessable-gated" | "seam-gated" | "claims-check" | "negative-existence",
|
|
30
|
+
...facets }
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
| Rule | Requirement |
|
|
34
|
+
| --- | --- |
|
|
35
|
+
| Required | `status`, `since`, `witness` MUST be present |
|
|
36
|
+
| `until` | REQUIRED when `status` is `experimental` or `deprecated`; MUST NOT be present when `stable` |
|
|
37
|
+
| `until` in the past | non-conformant; a validator MUST answer `400` `until_in_past` |
|
|
38
|
+
| `witness` | MUST be one of the five wire-legal classes; `unwitnessable` MUST NOT appear on a wire record — such a family lives in `spec/v2/ext/` and is not advertised |
|
|
39
|
+
| `supported` | does not exist; presence of the record is the claim, and a host that does not support a family MUST omit it |
|
|
40
|
+
| facets | the named per-family fields; `aiProviders.providers[]` carries the v1 `supported` list |
|
|
41
|
+
|
|
42
|
+
`until` absorbs v1 `tier` / `experimentalUntil`. A family's facets are hand-decided where `spec/v2/facets/<key>.schema.json` exists and otherwise generated from the declaration row.
|
|
43
|
+
|
|
44
|
+
## 3. The closed root (RFC 0169 §A.1a, §A.4)
|
|
45
|
+
|
|
46
|
+
The root of `schemas/v2/capabilities.schema.json` is `additionalProperties: false`; `protocolVersions` and `preferredVersion` are REQUIRED. Every root key is one of: a metadata key (§3.1), a core family (§5), an `ext/` family (§6), or `extensions` (§3.2). Any other key MUST fail validation: no dotted key, no wrapper, no mirror, no root `profiles[]`.
|
|
47
|
+
|
|
48
|
+
### 3.1 Metadata keys (17)
|
|
49
|
+
|
|
50
|
+
`protocolVersion`, `protocolVersions`, `preferredVersion`, `extensions`, `implementation`, `engineVersion`, `eventLogSchemaVersion`, `configurable`, `observability`, `minClientVersion`, `runtimeCapabilities`, `testing`, `conformance`, `fixtures`, `compliance`, `discovery`, and `supportedTransports`. Each is declared as metadata with its own schema in `spec/v2/declaration.json`; a metadata key is not a record and carries no `status` or `witness`. `supportedTransports` is declared only to record its deletion (§4). Version-axis metadata are specified in `versioning.md`; `configurable` in `runs.md`.
|
|
51
|
+
|
|
52
|
+
### 3.2 `extensions.<org>.<name>`
|
|
53
|
+
|
|
54
|
+
Vendor and host extensions live under one key, `extensions`, whose members MUST match `^[a-z][a-z0-9]*(-[a-z0-9]+)*\.[a-z][a-z0-9]*(-[a-z0-9]+)*$` (short-form `<org>.<name>`). The orgs `openwop` and `vendor` are reserved: a host MUST NOT use either. An extension record's shape is the org's own (`additionalProperties: true` inside the record). The 11 v1 extension-class `host.*` families (§6) are advertised as `extensions.openwop-app.*` by the host that serves them.
|
|
55
|
+
|
|
56
|
+
## 4. Deleted keys (RFC 0169 §A.5, §B.3; RFC 0175)
|
|
57
|
+
|
|
58
|
+
| Key | Why |
|
|
59
|
+
| --- | --- |
|
|
60
|
+
| `contractProvenance` | an advisory self-declaration the wire cannot falsify (RFC 0169 §A.5) |
|
|
61
|
+
| `supportedTransports` | REST is the wire; there is no transport advertisement — A2A and MCP are compositions advertised by their own facets (RFC 0175 §B.1) |
|
|
62
|
+
| `grpc` | `witness: unwitnessable` (the suite ships no client); an unwitnessable family is not advertisable and its text moves to `spec/v2/ext/grpc-transport/` (RFC 0175 §A.1) |
|
|
63
|
+
| `Capabilities-Etag`, `auth.subjectLinking`, `replay.fork`, bare `a2a.supported` / `mcp.supported`, the `openwop-core` alias | absent from the v2 root; rows `C2.1`–`C2.10` in `spec/v1/migrations.json` carry each with its codemod |
|
|
64
|
+
| `host.media`, `host.collaboration` | reserved slots are unrepresentable under a closed root; `host.workspace` is the declared family `workspace` |
|
|
65
|
+
|
|
66
|
+
`minimumSuiteVersion` is retired into the declaration file (`versioning.md` axis 9).
|
|
67
|
+
|
|
68
|
+
## 4.1 The declaration file (RFC 0169 §B)
|
|
69
|
+
|
|
70
|
+
`spec/v2/declaration.json` (schema `spec/v2/declaration.schema.json`) is the single source for: the generated `schemas/v2/capabilities.schema.json`; each family's `witness` class and maturity; the pack peer-dependency identifier (identical to the root key); the spec anchor (`core/capabilities.md#<key>` or `ext/<key>/`); the floor scenarios and requirement ids that define `openwop-core-standard`; and the profile predicates (§7). It replaces `extensions.json`, `core-standard-manifest.json`, `capability-declaration-classes.json`, and the capabilities half of `operation-path-manifest.json` (the operations half is `spec/v2/path-manifest.json`, `versioning.md`). It is generated from nothing and checked against everything (`scripts/check-declaration.mjs`).
|
|
71
|
+
|
|
72
|
+
## 5. Core families (71)
|
|
73
|
+
|
|
74
|
+
Each heading is a `spec/v2/declaration.json` row with `anchor: core`; `scripts/check-declaration.mjs` MUST fail when a heading here, a root key in the generated schema, or a pack peer-dependency identifier names a family the declaration does not. The peer-dependency identifier is identical to the key (`packs.md`). Maturity axes are §7; the sentence under each heading names the witness class, the owning RFC, and, where `spec/v2/facets/<key>.schema.json` exists, the hand-decided facets.
|
|
75
|
+
|
|
76
|
+
### § supportedEnvelopes
|
|
77
|
+
|
|
78
|
+
Witness `witnessable-gated`; owner no owning RFC (declaration row).
|
|
79
|
+
|
|
80
|
+
### § schemaVersions
|
|
81
|
+
|
|
82
|
+
Witness `witnessable-gated`; owner no owning RFC (declaration row).
|
|
83
|
+
|
|
84
|
+
### § limits
|
|
85
|
+
|
|
86
|
+
Witness `witnessable-gated`; owner no owning RFC (declaration row).
|
|
87
|
+
|
|
88
|
+
### § envelopeStrictness
|
|
89
|
+
|
|
90
|
+
Witness `claims-check`; owner no owning RFC (declaration row).
|
|
91
|
+
|
|
92
|
+
### § envelopeContracts
|
|
93
|
+
|
|
94
|
+
Witness `claims-check`; owner no owning RFC (declaration row).
|
|
95
|
+
|
|
96
|
+
### § envelopes
|
|
97
|
+
|
|
98
|
+
Witness `claims-check`; owner RFC 0030.
|
|
99
|
+
|
|
100
|
+
### § prompts
|
|
101
|
+
|
|
102
|
+
Witness `witnessable-gated`; owner RFC 0027.
|
|
103
|
+
|
|
104
|
+
### § nodePackRuntimes
|
|
105
|
+
|
|
106
|
+
Witness `claims-check`; owner RFC 0008.
|
|
107
|
+
|
|
108
|
+
### § secrets
|
|
109
|
+
|
|
110
|
+
Witness `witnessable-gated`; owner no owning RFC (declaration row).
|
|
111
|
+
|
|
112
|
+
### § connections
|
|
113
|
+
|
|
114
|
+
Witness `witnessable-gated`; owner RFC 0095.
|
|
115
|
+
|
|
116
|
+
### § selfHostedRunner
|
|
117
|
+
|
|
118
|
+
Witness `witnessable-gated`; owner RFC 0122.
|
|
119
|
+
|
|
120
|
+
### § purposePropagation
|
|
121
|
+
|
|
122
|
+
Witness `witnessable-gated`; owner RFC 0128.
|
|
123
|
+
|
|
124
|
+
### § dataResidency
|
|
125
|
+
|
|
126
|
+
Witness `witnessable-gated`; owner RFC 0129.
|
|
127
|
+
|
|
128
|
+
### § anonymousActor
|
|
129
|
+
|
|
130
|
+
Witness `seam-gated`; owner RFC 0132.
|
|
131
|
+
|
|
132
|
+
### § credentials
|
|
133
|
+
|
|
134
|
+
Witness `witnessable-gated`; owner RFC 0046.
|
|
135
|
+
|
|
136
|
+
### § feedback
|
|
137
|
+
|
|
138
|
+
Witness `witnessable-gated`; owner RFC 0056.
|
|
139
|
+
|
|
140
|
+
### § replay
|
|
141
|
+
|
|
142
|
+
Witness `witnessable-gated`; owner RFC 0140; facets `modes`, `retention`, `effectSeamsManifest`.
|
|
143
|
+
|
|
144
|
+
### § oauth
|
|
145
|
+
|
|
146
|
+
Witness `witnessable-gated`; owner RFC 0047.
|
|
147
|
+
|
|
148
|
+
### § authorization
|
|
149
|
+
|
|
150
|
+
Witness `witnessable-gated`; owner RFC 0049.
|
|
151
|
+
|
|
152
|
+
### § multiPartyConversation
|
|
153
|
+
|
|
154
|
+
Witness `witnessable-gated`; owner RFC 0101.
|
|
155
|
+
|
|
156
|
+
### § conversationTurnModelProvenance
|
|
157
|
+
|
|
158
|
+
Witness `witnessable-gated`; owner RFC 0109.
|
|
159
|
+
|
|
160
|
+
### § channelPresence
|
|
161
|
+
|
|
162
|
+
Witness `witnessable-gated`; owner RFC 0110.
|
|
163
|
+
|
|
164
|
+
### § multiAgent
|
|
165
|
+
|
|
166
|
+
Witness `claims-check`; owner RFC 0037.
|
|
167
|
+
|
|
168
|
+
### § modelCapabilities
|
|
169
|
+
|
|
170
|
+
Witness `witnessable-gated`; owner RFC 0031.
|
|
171
|
+
|
|
172
|
+
### § providerUsage
|
|
173
|
+
|
|
174
|
+
Witness `witnessable-gated`; owner RFC 0026.
|
|
175
|
+
|
|
176
|
+
### § aiProviders
|
|
177
|
+
|
|
178
|
+
Witness `witnessable-gated`; owner no owning RFC (declaration row); facets `providers`, `byok`, `selfHosted`, `speechSynthesis`, `imageGeneration`, `videoGeneration`, `realtimeVoice`, `promptPrefixCache`, `maxInlineMediaBytes`, `authModes`, `policies`, `input`.
|
|
179
|
+
|
|
180
|
+
### § agents
|
|
181
|
+
|
|
182
|
+
Witness `witnessable-gated`; owner RFC 0002.
|
|
183
|
+
|
|
184
|
+
### § memory
|
|
185
|
+
|
|
186
|
+
Witness `witnessable-gated`; owner RFC 0004.
|
|
187
|
+
|
|
188
|
+
### § conversationPrimitive
|
|
189
|
+
|
|
190
|
+
Witness `claims-check`; owner RFC 0005.
|
|
191
|
+
|
|
192
|
+
### § subWorkflow
|
|
193
|
+
|
|
194
|
+
Witness `claims-check`; owner RFC 0007.
|
|
195
|
+
|
|
196
|
+
### § fs
|
|
197
|
+
|
|
198
|
+
Witness `witnessable-gated`; owner RFC 0014.
|
|
199
|
+
|
|
200
|
+
### § kvStorage
|
|
201
|
+
|
|
202
|
+
Witness `witnessable-gated`; owner RFC 0015.
|
|
203
|
+
|
|
204
|
+
### § tableStorage
|
|
205
|
+
|
|
206
|
+
Witness `witnessable-gated`; owner RFC 0016.
|
|
207
|
+
|
|
208
|
+
### § queueBus
|
|
209
|
+
|
|
210
|
+
Witness `witnessable-gated`; owner RFC 0017.
|
|
211
|
+
|
|
212
|
+
### § scheduling
|
|
213
|
+
|
|
214
|
+
Witness `witnessable-gated`; owner RFC 0052.
|
|
215
|
+
|
|
216
|
+
### § heartbeat
|
|
217
|
+
|
|
218
|
+
Witness `witnessable-gated`; owner RFC 0060; facets `minIntervalSec`, `maxRuntimeMs`, `deliveryChannel`.
|
|
219
|
+
|
|
220
|
+
### § toolHooks
|
|
221
|
+
|
|
222
|
+
Witness `witnessable-gated`; owner RFC 0064.
|
|
223
|
+
|
|
224
|
+
### § toolCatalog
|
|
225
|
+
|
|
226
|
+
Witness `witnessable-gated`; owner RFC 0078.
|
|
227
|
+
|
|
228
|
+
### § httpClient
|
|
229
|
+
|
|
230
|
+
Witness `witnessable-gated`; owner RFC 0076.
|
|
231
|
+
|
|
232
|
+
### § artifactTypes
|
|
233
|
+
|
|
234
|
+
Witness `witnessable-gated`; owner RFC 0071.
|
|
235
|
+
|
|
236
|
+
### § forms
|
|
237
|
+
|
|
238
|
+
Witness `claims-check`; owner RFC 0137.
|
|
239
|
+
|
|
240
|
+
### § aiEnvelope
|
|
241
|
+
|
|
242
|
+
Witness `witnessable-gated`; owner RFC 0144.
|
|
243
|
+
|
|
244
|
+
### § promptLibrary
|
|
245
|
+
|
|
246
|
+
Witness `claims-check`; owner RFC 0144.
|
|
247
|
+
|
|
248
|
+
### § agentRuntime
|
|
249
|
+
|
|
250
|
+
Witness `claims-check`; owner RFC 0144.
|
|
251
|
+
|
|
252
|
+
### § deadLetter
|
|
253
|
+
|
|
254
|
+
Witness `witnessable-gated`; owner RFC 0053.
|
|
255
|
+
|
|
256
|
+
### § webhooks
|
|
257
|
+
|
|
258
|
+
Witness `witnessable-gated`; owner no owning RFC (declaration row); facets `signatureAlgorithms`.
|
|
259
|
+
|
|
260
|
+
### § triggerBridge
|
|
261
|
+
|
|
262
|
+
Witness `witnessable-gated`; owner RFC 0083.
|
|
263
|
+
|
|
264
|
+
### § a2a
|
|
265
|
+
|
|
266
|
+
Witness `seam-gated`; owner RFC 0152; facets `versions`, `preferredVersion`, `minimumVersion`, `refreshedAt`, `profiles`, `agentCardUrl`, `streaming`, `pushNotifications`, `durableTasks`.
|
|
267
|
+
|
|
268
|
+
### § budget
|
|
269
|
+
|
|
270
|
+
Witness `witnessable-gated`; owner RFC 0084.
|
|
271
|
+
|
|
272
|
+
### § nondeterminismPolicy
|
|
273
|
+
|
|
274
|
+
Witness `claims-check`; owner RFC 0085.
|
|
275
|
+
|
|
276
|
+
### § workspace
|
|
277
|
+
|
|
278
|
+
Witness `witnessable-gated`; owner RFC 0059.
|
|
279
|
+
|
|
280
|
+
### § uiPlugins
|
|
281
|
+
|
|
282
|
+
Witness `witnessable-gated`; owner RFC 0117.
|
|
283
|
+
|
|
284
|
+
### § sql
|
|
285
|
+
|
|
286
|
+
Witness `witnessable-gated`; owner RFC 0018.
|
|
287
|
+
|
|
288
|
+
### § nosql
|
|
289
|
+
|
|
290
|
+
Witness `claims-check`; owner RFC 0018.
|
|
291
|
+
|
|
292
|
+
### § vectorStore
|
|
293
|
+
|
|
294
|
+
Witness `witnessable-gated`; owner RFC 0018.
|
|
295
|
+
|
|
296
|
+
### § searchIndex
|
|
297
|
+
|
|
298
|
+
Witness `witnessable-gated`; owner RFC 0018.
|
|
299
|
+
|
|
300
|
+
### § blobStorage
|
|
301
|
+
|
|
302
|
+
Witness `witnessable-gated`; owner RFC 0019.
|
|
303
|
+
|
|
304
|
+
### § cache
|
|
305
|
+
|
|
306
|
+
Witness `witnessable-gated`; owner RFC 0019.
|
|
307
|
+
|
|
308
|
+
### § workflowChainPacks
|
|
309
|
+
|
|
310
|
+
Witness `witnessable-gated`; owner RFC 0013.
|
|
311
|
+
|
|
312
|
+
### § packs
|
|
313
|
+
|
|
314
|
+
Witness `claims-check`; owner RFC 0025.
|
|
315
|
+
|
|
316
|
+
### § mcp
|
|
317
|
+
|
|
318
|
+
Witness `seam-gated`; owner RFC 0153; facets `revisions`, `preferredVersion`, `minimumRevision`, `refreshedAt`, `profiles`, `features`, `serverUrls`, `serverMount`, `mrtr`.
|
|
319
|
+
|
|
320
|
+
### § sandbox
|
|
321
|
+
|
|
322
|
+
Witness `witnessable-gated`; owner RFC 0035; facets `isolationModel`, `allowedHostCalls`, `memoryLimitBytes`, `wallClockLimitMs`.
|
|
323
|
+
|
|
324
|
+
### § compensation
|
|
325
|
+
|
|
326
|
+
Witness `seam-gated`; owner RFC 0151.
|
|
327
|
+
|
|
328
|
+
### § idempotency
|
|
329
|
+
|
|
330
|
+
Witness `witnessable-gated`; owner RFC 0150.
|
|
331
|
+
|
|
332
|
+
### § eventLog
|
|
333
|
+
|
|
334
|
+
Witness `claims-check`; owner RFC 0036.
|
|
335
|
+
|
|
336
|
+
### § production
|
|
337
|
+
|
|
338
|
+
Witness `witnessable-gated`; owner RFC 0009.
|
|
339
|
+
|
|
340
|
+
### § auth
|
|
341
|
+
|
|
342
|
+
Witness `seam-gated`; owner RFC 0154; facets `lanes`, `subjectLinkKey`.
|
|
343
|
+
|
|
344
|
+
### § i18n
|
|
345
|
+
|
|
346
|
+
Witness `witnessable-gated`; owner no owning RFC (declaration row).
|
|
347
|
+
|
|
348
|
+
### § content
|
|
349
|
+
|
|
350
|
+
Witness `witnessable-gated`; owner RFC 0103.
|
|
351
|
+
|
|
352
|
+
### § portability
|
|
353
|
+
|
|
354
|
+
Witness `witnessable-gated`; owner RFC 0098.
|
|
355
|
+
|
|
356
|
+
### § interrupt
|
|
357
|
+
|
|
358
|
+
Witness `witnessable-gated`; owner RFC 0104; facets `refKinds`, `tokenAlgs`.
|
|
359
|
+
|
|
360
|
+
## 6. Extension families (13)
|
|
361
|
+
|
|
362
|
+
Rows with `anchor: ext` are documented under `spec/v2/ext/<key>/` and each document MUST declare `witness` and both maturity axes in its header (`overview.md`): `restTransport`, `a2uiSurface`, `brand`, `canvas`, `chat`, `coordination`, `dataIntegration`, `entities`, `kanban`, `knowledge`, `launchStudio`, `messaging`, `webResearch`. `restTransport` and `a2uiSurface` (`witness: claims-check`) stay in `ext/` unless a behavioral witness lands (RFC 0169 §C.5); the other 11 are the RFC 0144 extension-class families advertised as `extensions.openwop-app.<name>` (§3.2).
|
|
363
|
+
|
|
364
|
+
## 7. Profiles (RFC 0169 §C.1, §C.3)
|
|
365
|
+
|
|
366
|
+
A profile is a predicate over the declaration file, published in `spec/v2/profiles.json` (generated): every listed family present as a record and every listed metadata key present. No `profiles[]` exists at the v2 root; a host that emits one MUST fail schema validation (§3). `auth.profiles`, `a2a.profiles`, and `mcp.profiles` are replaced by the facets `auth.lanes[]` (`identity.md`), `a2a.versions[]` and `mcp.revisions[]` (`interop.md`).
|
|
367
|
+
|
|
368
|
+
| Profile | Predicate |
|
|
369
|
+
| --- | --- |
|
|
370
|
+
| `openwop-discovery-core` | metadata `protocolVersions`, `preferredVersion` |
|
|
371
|
+
| `openwop-core-standard` | families `interrupt`, `replay`, `webhooks`, `idempotency`, `eventLog` plus the 2.0.0 floor scenarios and requirement ids the declaration names |
|
|
372
|
+
| `openwop-conformance-seams-v2` | the seams profile (`conformance.md`); forbidden from the capability namespace |
|
|
373
|
+
|
|
374
|
+
The `openwop-core` alias is deleted (row `C2.3`); the canonical discovery-only id is `openwop-discovery-core`. The claim vocabulary is `overview.md`. The invariant `profile-claim-floor-not-overstated` is registered in `SECURITY/invariants.yaml` with its test.
|
|
375
|
+
|
|
376
|
+
## 8. Maturity axes (RFC 0169 §C.2)
|
|
377
|
+
|
|
378
|
+
| Axis | Values | Source |
|
|
379
|
+
| --- | --- | --- |
|
|
380
|
+
| `technical` | `experimental \| stable \| deprecated` | the record's `status` |
|
|
381
|
+
| `adoption` | `none \| single-witness \| multi-witness \| independent` | derived from INTEROP-MATRIX bundle evidence |
|
|
382
|
+
|
|
383
|
+
`stable` does not require a tier-3 host; `independent` records whether one exists. The RFC 0155 numeric extension budget is repealed: a family MAY exist at any count if it declares its witness class. At the cut, `memory.injectionBudget`, `toolCatalog.compactView`, and `aiProviders.promptPrefixCache` keep their families with `adoption: single-witness` (RFC 0169 §C.5).
|
|
384
|
+
|
|
385
|
+
## 9. Externally-gated (RFC 0169 §C.4)
|
|
386
|
+
|
|
387
|
+
`externally-gated` is the disposition for a surface held on grounds that are neither technical nor adoption (a legal citation, RFC 0121; a non-steward host tripwire, RFC 0035). An externally-gated family MAY be declared with `status: experimental` and an `until` equal to the tripwire review date, or omitted; it MUST NOT be `stable` (`externally-gated-never-stable`, a corpus gate). `sandbox` is the first row.
|
|
388
|
+
|
|
389
|
+
## 10. Migration rows (RFC 0169)
|
|
390
|
+
|
|
391
|
+
| Row | v1 | v2 |
|
|
392
|
+
| --- | --- | --- |
|
|
393
|
+
| `C2.1` | `capabilities` wrapper | none (`openwop.codemod.capabilities-wrapper-removal`) |
|
|
394
|
+
| `C2.2` | `host.<family>` dotted mirrors | none |
|
|
395
|
+
| `C2.3` | `openwop-core` | `openwop-discovery-core` |
|
|
396
|
+
| `C2.4` | `contractProvenance` | none |
|
|
397
|
+
| `C2.5` | `auth.subjectLinking` | none; advertising `saml` and `scim` lanes implies the contract (`identity.md`) |
|
|
398
|
+
| `C2.6` | bare `a2a.supported` / `mcp.supported` | `versions[]` / `revisions[]` facets (the codemod refuses when no array is present) |
|
|
399
|
+
| `C2.7` | `replay.fork` boolean | `replay.modes[]` |
|
|
400
|
+
| `C2.8` | the 11 extension-class `host.*` families | `extensions.<org>.<name>` |
|
|
401
|
+
| `C2.9` | `Capabilities-Etag` | standard `ETag` / `If-None-Match` (dual emission through the overlap) |
|
|
402
|
+
| `C2.10` | root `profiles[]` | none — schema-invalid |
|
|
403
|
+
|
|
404
|
+
Rows `C2.2`–`C2.8` are transformed by `openwop.codemod.discovery-document-v2`; a family with `supported: false` is dropped, and a dotted-only declared family is promoted to its plain key. Certification bundles naming `openwop-core` are never-upgraded and remain valid v1 evidence at their version.
|