@openwop/spec-artifacts 2.22.0 → 2.24.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CORPUS-STAMP.json +22 -17
- 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/capabilities.schema.json +36 -6
- package/schemas/v2/certification-bundle.schema.json +1 -1
- package/schemas/v2/error-envelope.schema.json +7 -3
- package/spec/v1/core-standard-manifest.json +2 -2
- package/spec/v2/core/conversation.md +20 -0
- package/spec/v2/core/errors.md +4 -2
- package/spec/v2/core/events.md +40 -1
- package/spec/v2/core/host-services.md +20 -0
- package/spec/v2/core/replay.md +10 -1
- package/spec/v2/core/versioning.md +1 -1
- package/spec/v2/declaration.json +21 -9
- package/spec/v2/errors.json +18 -0
- package/spec/v2/facets/envelopeStrictness.schema.json +9 -0
- package/spec/v2/facets/schemaVersions.schema.json +18 -0
- package/spec/v2/facets/supportedEnvelopes.schema.json +15 -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.
|
|
5
|
-
"corpusTag": "v2.
|
|
4
|
+
"version": "2.24.0",
|
|
5
|
+
"corpusTag": "v2.24.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": "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": "1853ee35be966c6d59c73a6b34137e1c359273ba8b779255374a325aa56a9e25",
|
|
13
|
+
"api/v2/asyncapi.yaml": "b7ed239aa5f099e5f0e81c59f24f559fcec567121a47437fd6c5222fe2ed8ecb",
|
|
14
|
+
"api/v2/openapi.yaml": "ff1fc919c452ffc740d67374884a215eaa97b52b682920314c92ae8ee4b46ee4",
|
|
15
15
|
"api/v2/redocly.yaml": "1e66b60e6118ad11a823bb620678be464d99dfe50a40e3e6f93ec9429b88b34c",
|
|
16
16
|
"schemas/README.md": "0c0b737ffcf8f30e7d2809cec8a498232de710f41443212922ad8337cdde0b51",
|
|
17
17
|
"schemas/a2a-task-state.schema.json": "c9365918f993f943b4b619d42551eb066a1ed33a08d895d51b395432a5b1f1bc",
|
|
@@ -115,8 +115,8 @@
|
|
|
115
115
|
"schemas/v2/artifact-type-pack-manifest.schema.json": "85630d1b760d0b41cf5a6fad2acfada39abaf7f0befd95cc4334e1e883e9615d",
|
|
116
116
|
"schemas/v2/audit-verify-result.schema.json": "a748dfadb5155adfde8a91045e76b0db6695005fe559035d71670fdd55edb3ba",
|
|
117
117
|
"schemas/v2/budget-policy.schema.json": "c7449daeb6e1d95e7a047b8c2814d3d54748697c27046972834874867d9b5f4c",
|
|
118
|
-
"schemas/v2/capabilities.schema.json": "
|
|
119
|
-
"schemas/v2/certification-bundle.schema.json": "
|
|
118
|
+
"schemas/v2/capabilities.schema.json": "50d3f90d6f92637e2f16956c99bc4826f69f28d935fb75fb06ab6fb910078706",
|
|
119
|
+
"schemas/v2/certification-bundle.schema.json": "be5de0cc4362207c27885c51165c92c9541a545c5bd2c59da1d5c28fc265c162",
|
|
120
120
|
"schemas/v2/channel-presence-payload.schema.json": "1c20ad810cb311d47aa0b95d928490826b2468fd161f884cd29e867053e6782f",
|
|
121
121
|
"schemas/v2/channel-written-payload.schema.json": "ccecff3c71a3275ad8db035ac0e04db25e6f8d23cf091ddbcd5a60d1be1cbb6b",
|
|
122
122
|
"schemas/v2/chat-card-pack-manifest.schema.json": "8df0d9d273ae22efc6876d5586833f1d4c2e551edc3ac6cf6e8f0719329f03dd",
|
|
@@ -141,7 +141,7 @@
|
|
|
141
141
|
"schemas/v2/envelopes/schema.request.schema.json": "be2c5f7aa881cdd252ccff47ac02193659e1393633a1541f4297383205d384a2",
|
|
142
142
|
"schemas/v2/envelopes/schema.response.schema.json": "d049a081267c06c28879c331b147f3ed821b14ccfd93005c67aff64db0a8c68e",
|
|
143
143
|
"schemas/v2/envelopes/ui.a2ui-surface.schema.json": "0a06fbbdc8ba797a6818c79336a98e211ac5ba5747945b4e4098072cd3974d79",
|
|
144
|
-
"schemas/v2/error-envelope.schema.json": "
|
|
144
|
+
"schemas/v2/error-envelope.schema.json": "bb3e6c487dafa951a56ff224a7c029c462f0f1b754a7f51f6729609b4f43a438",
|
|
145
145
|
"schemas/v2/eval-summary.schema.json": "9d31025752d0f67ad3b8a32e82a5314972c530ef9f780dd82e484ae8c5131198",
|
|
146
146
|
"schemas/v2/export-bundle.schema.json": "bd28905a7729437ab7f2ad8bb33e13a371b2bf5605a7eb2962a0d246de312d69",
|
|
147
147
|
"schemas/v2/form-content-pack-manifest.schema.json": "461529e4287ec3b15a9fbcde57226a1c6f17ea3ae71b33b418e6f595ff0619fe",
|
|
@@ -201,7 +201,7 @@
|
|
|
201
201
|
"schemas/workspace-file.schema.json": "464de85c2a068243084ee9c1d969bc7cd5d8f7948574e58450d6493c38a0e1e4",
|
|
202
202
|
"spec/v1/alias-detectors.json": "40069d5976eeb6ba1384a648e57e5cfd673db3fce36175115fb8293bee9664d4",
|
|
203
203
|
"spec/v1/capability-declaration-classes.json": "e7729aed5c4b4e1dd02abab0530f14cc95f5d4070fe51fb139e7f5cccefa00c6",
|
|
204
|
-
"spec/v1/core-standard-manifest.json": "
|
|
204
|
+
"spec/v1/core-standard-manifest.json": "f43c314b049fb6ac72ab198ad67f654defae3021adcdcb2559fa9fca96f9d213",
|
|
205
205
|
"spec/v1/deprecations.json": "307083ce29c23fd406015951f99a30d78d6187ff061d38dc9732f62191b40f3f",
|
|
206
206
|
"spec/v1/deprecations.schema.json": "18c87e78bedc210431f795ae44c5b5d202f2f3317850d5cf86867d4f1fa1cdfb",
|
|
207
207
|
"spec/v1/event-codemap.json": "3da60d884157793a360da532a9fcbbfb5285636db325a74cec94b34622186d97",
|
|
@@ -217,10 +217,12 @@
|
|
|
217
217
|
"spec/v2/core/capabilities.md": "b3977e799d1d16c6ef9b306d5f07341f52259c19171c02c273a7e8a7a4b34473",
|
|
218
218
|
"spec/v2/core/conformance.md": "a451c0a2ba79d93c55e540ccef480eba7de9602d59bbb03eead05daafde0beac",
|
|
219
219
|
"spec/v2/core/connection-packs.md": "466bdb9dde79d85615ad8281dacfb7bf923ca22d7fb3ed219749e59574c753ed",
|
|
220
|
-
"spec/v2/core/
|
|
221
|
-
"spec/v2/core/
|
|
220
|
+
"spec/v2/core/conversation.md": "e425887c4ba199b8cdc5c99e792689f7bd7d46de492f28670de2e402fa6d9506",
|
|
221
|
+
"spec/v2/core/errors.md": "0dff4a0ae102a86f6a17a9a3b16a203292588a0f422ed19d1c0d9213995aa01d",
|
|
222
|
+
"spec/v2/core/events.md": "c98742f5a310eee8287ca8135493502152e88b479200a6544bb3340fed1e4efe",
|
|
222
223
|
"spec/v2/core/form-content-packs.md": "af3517dd7125106088249c0e32220b0b9fc3e9304c10378a6327cc8ad84b6bf1",
|
|
223
224
|
"spec/v2/core/headers.md": "14cdf4ae9ee7d80eebfd426d7c3552e577baea0300915cd4bb3a68e8588195a8",
|
|
225
|
+
"spec/v2/core/host-services.md": "3753f1e034d325bb4bd5751ae6d321fbb16700d4e28032ab4e273d25eb134fc4",
|
|
224
226
|
"spec/v2/core/idempotency.md": "e4edae1834101fd331379d84de77eaa9cead49383529c31f8bcd18322f67c965",
|
|
225
227
|
"spec/v2/core/identity.md": "e44f34f7c2db1f12babb19ca8ee1e5b1401a89f38fd5c90d0c4b74c95f6e5d42",
|
|
226
228
|
"spec/v2/core/interop.md": "6bd581556b9ab1a1509c01b9a1ec2bcb9e4a8300e68fb01570704417e70f20b9",
|
|
@@ -228,15 +230,15 @@
|
|
|
228
230
|
"spec/v2/core/overview.md": "7dc00ace32d4e4ce929a383651f0029fc4b7091ec87487b1bf26ead1be209e0e",
|
|
229
231
|
"spec/v2/core/packs.md": "cc06de2d49dd08410eececd5c279996ec839680553b332b4f33d6b31989b5757",
|
|
230
232
|
"spec/v2/core/persistence.md": "9e241f84259e38848f4a2ad1c21debb0dffd5f8aafbad26408aa6cc8969bf93b",
|
|
231
|
-
"spec/v2/core/replay.md": "
|
|
233
|
+
"spec/v2/core/replay.md": "b980a66e2543107240e3dc4f58131b9f4ff52478737e79ade6d5777b26ad1119",
|
|
232
234
|
"spec/v2/core/runs.md": "136319842bacbbb300178980e4b83444917d5b193cc5fdd92e39a4902ba8d3c0",
|
|
233
235
|
"spec/v2/core/security-defaults.md": "2a54ceaa4cef02c26ee0fbcf44f822ceeea79537c7d5a51ed300f21aa4fea576",
|
|
234
|
-
"spec/v2/core/versioning.md": "
|
|
236
|
+
"spec/v2/core/versioning.md": "56c1e273c790bcb0a2c3c760ffc7595afc9f5d4a745965e57f36aefcd456da76",
|
|
235
237
|
"spec/v2/core/webhooks.md": "46c1311c1897236f9bf9db5025c8af31dd84cd19208da3e5e9ff69eec9436965",
|
|
236
238
|
"spec/v2/core/workflow-chain-packs.md": "df78b76dd79f2267fb6b72c08e0911e5f9d5bb1925c6efdd6deda62fe8a51dc8",
|
|
237
|
-
"spec/v2/declaration.json": "
|
|
239
|
+
"spec/v2/declaration.json": "0f35205af96f29cacced435d1b606e9e8292c74a5509444bec78f17d315d63bf",
|
|
238
240
|
"spec/v2/declaration.schema.json": "c86e3083fb9789c1958ecb4576cc6f71aa90e6f339521139238543ed08211dd4",
|
|
239
|
-
"spec/v2/errors.json": "
|
|
241
|
+
"spec/v2/errors.json": "296117235d21ce4a393371c2f80caf03a4ae93d1f80a89f87cd3f56902cf5b01",
|
|
240
242
|
"spec/v2/event-codemap.json": "37869a03cdfd8758b57e6f350641a6ebbd383231cebda51f5473ad85f94ab74c",
|
|
241
243
|
"spec/v2/event-codemap.schema.json": "b173f2a9bcc0bf9b62a474ce3b91e1431d597e64fd1560fc58662cd8606eaf9c",
|
|
242
244
|
"spec/v2/ext/README.md": "ff91a503e0795e1b898e37d9e445add2d5975529723f7b32b2599b60a24c1ae3",
|
|
@@ -261,6 +263,7 @@
|
|
|
261
263
|
"spec/v2/facets/a2a.schema.json": "6b0bceddec6d18d5115aa7d04720a0cc1ad7a9a0a78f53c208b34becaba5d16e",
|
|
262
264
|
"spec/v2/facets/aiProviders.schema.json": "0c76e48e5d487b5be3b3ab1f6512a4e206c840ee5087d1336c7d7e2853b58d03",
|
|
263
265
|
"spec/v2/facets/auth.schema.json": "73440c944ad12c41aab0618aeb799a90a0b59e97fc685527f248afb7d015381a",
|
|
266
|
+
"spec/v2/facets/envelopeStrictness.schema.json": "28be0a27f880bd45ec1222a16155f5e9167bbca57bf0322970fe1eb2654562aa",
|
|
264
267
|
"spec/v2/facets/heartbeat.schema.json": "81d7fa1895a8b0241bd07cf00a7e7905bef0fd14eb3427325261c62eee5746a6",
|
|
265
268
|
"spec/v2/facets/interrupt.schema.json": "c76c58c0abd99de619f8c8afad246568f5bc9cce3b7a0d097d16d87eba84be3a",
|
|
266
269
|
"spec/v2/facets/mcp.schema.json": "f56609fe24ba6160ad29ae31aa16043354ff005e5cb6a0f3871c4d226087cc08",
|
|
@@ -268,14 +271,16 @@
|
|
|
268
271
|
"spec/v2/facets/replay.schema.json": "0a5aefb0108c708c6794fadd533cf256709704c4f16dbf44cd63fa8980c78018",
|
|
269
272
|
"spec/v2/facets/runList.schema.json": "6223e1baaebbb9f4faa71bfe968f8d22b4aa88046d0e43e8d5f56409e7f86e90",
|
|
270
273
|
"spec/v2/facets/sandbox.schema.json": "e75f54486d387b2d089791aa93b5093cd1450f1920753a0f97fc23acdfe978ed",
|
|
274
|
+
"spec/v2/facets/schemaVersions.schema.json": "890d3416c4b66511d51f329abc68e6f467f4338f16807e489fe682999b2b56b9",
|
|
275
|
+
"spec/v2/facets/supportedEnvelopes.schema.json": "644f22cc2236e30a611b5b7f1ba0458ff1925d68b94c514d9672583224e126bd",
|
|
271
276
|
"spec/v2/facets/webhooks.schema.json": "4bf3f8eb3161a43910efac4c44ccaf9567060c9da52d4cf09bcf3888d1b92192",
|
|
272
277
|
"spec/v2/facets/workflowChainPacks.schema.json": "cd30907ac92396866a524e4db8d8c1537e3818cfff455d780efd72bcd0ebdac1",
|
|
273
278
|
"spec/v2/id-field-bindings.json": "e73c06f3055ad30173507ac817a458b96362c8f26209ba105c53653292cf63d3",
|
|
274
279
|
"spec/v2/path-manifest.json": "c123c9fd77dc1b3f9c2e9346ace80cdae007e6511138894956abda01e61ec1c6",
|
|
275
280
|
"spec/v2/peer-dependency-aliases.json": "d10299280abee08258502925bc327293ee413e0108cd6e6ec75ff6110653308d",
|
|
276
281
|
"spec/v2/profiles.json": "0636f19fceae625390003a347e70ef4797d84766b5c24ce8a02cea52aadebca4",
|
|
277
|
-
"spec/v2/release.json": "
|
|
282
|
+
"spec/v2/release.json": "9439a6dad8f37d50e4634f5aec8d68766cb7a42d50ef3a89f21e79f738f1d4f9",
|
|
278
283
|
"spec/v2/retention-floors.json": "eaf3722d95c79947af1d4269ef85117e126518c588cfcf1a2b21b97269f51624"
|
|
279
284
|
},
|
|
280
|
-
"corpusCommit": "
|
|
285
|
+
"corpusCommit": "d524cb367f593f7615cb9e3e22e5f14737c28501"
|
|
281
286
|
}
|
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.24.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.24.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.24.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.24.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": {
|
|
@@ -339,6 +339,16 @@
|
|
|
339
339
|
"claims-check",
|
|
340
340
|
"negative-existence"
|
|
341
341
|
]
|
|
342
|
+
},
|
|
343
|
+
"kinds": {
|
|
344
|
+
"type": "array",
|
|
345
|
+
"uniqueItems": true,
|
|
346
|
+
"items": {
|
|
347
|
+
"type": "string",
|
|
348
|
+
"minLength": 1,
|
|
349
|
+
"maxLength": 256
|
|
350
|
+
},
|
|
351
|
+
"description": "The envelope `type` strings this host recognizes, as in v1 `Capabilities.supportedEnvelopes`. Universal kinds (`clarification.request`, `schema.request`, `schema.response`, `error`) are always allowed and need not be listed. Every other member MUST be namespaced under the `<org>.` rule (`events.md`). ABSENT IS NOT `[]` AND IS NOT `all`: an engine MUST refuse every non-universal kind with `unknown_envelope_kind` when this seat is absent (`events.md` §\"The envelope-kind catalog\"). The refusal is what makes the protocol-tier invariant `prompt-injection-envelope-typecheck` enforceable at major 2."
|
|
342
352
|
}
|
|
343
353
|
},
|
|
344
354
|
"allOf": [
|
|
@@ -376,8 +386,8 @@
|
|
|
376
386
|
}
|
|
377
387
|
}
|
|
378
388
|
],
|
|
379
|
-
"description": "core/capabilities.md#supportedEnvelopes — witness: witnessable-gated; maturity stable/none",
|
|
380
|
-
"x-openwop-
|
|
389
|
+
"description": "core/capabilities.md#supportedEnvelopes — witness: witnessable-gated; maturity stable/none; RFC 0193",
|
|
390
|
+
"x-openwop-facets-from": "spec/v2/facets/supportedEnvelopes.schema.json"
|
|
381
391
|
},
|
|
382
392
|
"schemaVersions": {
|
|
383
393
|
"type": "object",
|
|
@@ -412,6 +422,19 @@
|
|
|
412
422
|
"claims-check",
|
|
413
423
|
"negative-existence"
|
|
414
424
|
]
|
|
425
|
+
},
|
|
426
|
+
"kinds": {
|
|
427
|
+
"type": "object",
|
|
428
|
+
"propertyNames": {
|
|
429
|
+
"type": "string",
|
|
430
|
+
"minLength": 1,
|
|
431
|
+
"maxLength": 256
|
|
432
|
+
},
|
|
433
|
+
"additionalProperties": {
|
|
434
|
+
"type": "integer",
|
|
435
|
+
"minimum": 0
|
|
436
|
+
},
|
|
437
|
+
"description": "Active schema version per envelope kind, as in v1 `Capabilities.schemaVersions` (e.g. `{\"vendor.acme.prd.create\": 2}`). A kind absent from this map has no advertised floor; an emitted `schemaVersion` is then compared against 0. An emitted version HIGHER than the advertised floor MUST be refused with `unknown_schema_version` regardless of strictness; LOWER is governed by `envelopeStrictness.mode` (`events.md` §\"The envelope-kind catalog\")."
|
|
415
438
|
}
|
|
416
439
|
},
|
|
417
440
|
"allOf": [
|
|
@@ -449,8 +472,8 @@
|
|
|
449
472
|
}
|
|
450
473
|
}
|
|
451
474
|
],
|
|
452
|
-
"description": "core/capabilities.md#schemaVersions — witness: witnessable-gated; maturity stable/none",
|
|
453
|
-
"x-openwop-
|
|
475
|
+
"description": "core/capabilities.md#schemaVersions — witness: witnessable-gated; maturity stable/none; RFC 0193",
|
|
476
|
+
"x-openwop-facets-from": "spec/v2/facets/schemaVersions.schema.json"
|
|
454
477
|
},
|
|
455
478
|
"limits": {
|
|
456
479
|
"type": "object",
|
|
@@ -606,6 +629,13 @@
|
|
|
606
629
|
"claims-check",
|
|
607
630
|
"negative-existence"
|
|
608
631
|
]
|
|
632
|
+
},
|
|
633
|
+
"mode": {
|
|
634
|
+
"enum": [
|
|
635
|
+
"warn",
|
|
636
|
+
"strict"
|
|
637
|
+
],
|
|
638
|
+
"description": "Schema-version drift handling. `warn` (the default when this seat is absent, as in v1): an engine MUST attempt validation against the advertised version and log `envelope_schema_version_drift`. `strict`: the same condition MUST refuse with `unknown_schema_version`. Drift ABOVE the advertised floor refuses under both (`events.md` §\"The envelope-kind catalog\")."
|
|
609
639
|
}
|
|
610
640
|
},
|
|
611
641
|
"allOf": [
|
|
@@ -643,8 +673,8 @@
|
|
|
643
673
|
}
|
|
644
674
|
}
|
|
645
675
|
],
|
|
646
|
-
"description": "core/capabilities.md#envelopeStrictness — witness: claims-check; maturity experimental/none",
|
|
647
|
-
"x-openwop-
|
|
676
|
+
"description": "core/capabilities.md#envelopeStrictness — witness: claims-check; maturity experimental/none; RFC 0193",
|
|
677
|
+
"x-openwop-facets-from": "spec/v2/facets/envelopeStrictness.schema.json"
|
|
648
678
|
},
|
|
649
679
|
"envelopeContracts": {
|
|
650
680
|
"type": "object",
|
|
@@ -259,7 +259,7 @@
|
|
|
259
259
|
"properties": {
|
|
260
260
|
"id": {
|
|
261
261
|
"type": "string",
|
|
262
|
-
"pattern": "^openwop\\.(?!it\\.(?:artifact-schema-compile-bounded|artifact-type-legacy-ids|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|multi-region-effect-vocabulary|normative-example-extraction|openapi-asyncapi-sdk-parity|pack-manifest-extensions|protocol-version-grammar|registry-declarative-kinds|rfc-0147-self-audit|rfc-lifecycle-coherence|semantic-digest-v2|spec-corpus-validity|spec-section-citations|tool-result-trust-monotone|v2-alias-covers-reword|v2-bundle-signature-attributable|v2-corpus-tag-pinned|v2-declaration-parity|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-id-kinds-bound|v2-normative-home-gate|v2-one-signing-scheme|v2-path-parity|v2-release-identity|v2-req-only-assertions|v2-retention-floors|v2-seams-not-in-canonical|v2-security-defaults-table|v2-spec-artifacts-digest|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\\.(?:artifact-schema-compile-bounded|artifact-type-legacy-ids|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|multi-region-effect-vocabulary|normative-example-extraction|openapi-asyncapi-sdk-parity|pack-manifest-extensions|protocol-version-grammar|registry-declarative-kinds|rfc-0147-self-audit|rfc-lifecycle-coherence|semantic-digest-v2|spec-corpus-validity|spec-section-citations|tool-result-trust-monotone|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-id-kinds-bound|v2-normative-home-gate|v2-one-signing-scheme|v2-path-parity|v2-release-identity|v2-req-only-assertions|v2-retention-floors|v2-seams-not-in-canonical|v2-security-defaults-table|v2-spec-artifacts-digest|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": {
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
3
|
"$id": "https://openwop.dev/spec/v2/error-envelope.schema.json",
|
|
4
4
|
"title": "ErrorEnvelope (v2)",
|
|
5
|
-
"description": "GENERATED from spec/v2/errors.json by scripts/generate-error-envelope.mjs (RFC 0171 §B.1).
|
|
5
|
+
"description": "GENERATED from spec/v2/errors.json by scripts/generate-error-envelope.mjs (RFC 0171 §B.1). 101 registered codes; vendor codes match ^(?!openwop\\.)[a-z][a-z0-9]*(-[a-z0-9]+)*\\.[a-z][a-z0-9_]*$. Consumers MUST accept an unknown registered member and MUST NOT act on it (RFC 0171 §A.5).",
|
|
6
6
|
"type": "object",
|
|
7
7
|
"additionalProperties": false,
|
|
8
8
|
"required": [
|
|
@@ -113,7 +113,9 @@
|
|
|
113
113
|
"pack_load_failure",
|
|
114
114
|
"credential_unavailable",
|
|
115
115
|
"pack_registry_unreachable",
|
|
116
|
-
"runner_unavailable"
|
|
116
|
+
"runner_unavailable",
|
|
117
|
+
"unknown_envelope_kind",
|
|
118
|
+
"unknown_schema_version"
|
|
117
119
|
]
|
|
118
120
|
},
|
|
119
121
|
{
|
|
@@ -302,7 +304,9 @@
|
|
|
302
304
|
"pack_load_failure": 500,
|
|
303
305
|
"credential_unavailable": 501,
|
|
304
306
|
"pack_registry_unreachable": 503,
|
|
305
|
-
"runner_unavailable": 503
|
|
307
|
+
"runner_unavailable": 503,
|
|
308
|
+
"unknown_envelope_kind": 422,
|
|
309
|
+
"unknown_schema_version": 422
|
|
306
310
|
},
|
|
307
311
|
"x-openwop-retriable": [
|
|
308
312
|
"residency_unavailable",
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"provenance": {
|
|
5
5
|
"suite": {
|
|
6
6
|
"package": "@openwop/openwop-conformance",
|
|
7
|
-
"version": "2.
|
|
7
|
+
"version": "2.24.0"
|
|
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": "814e8bd538b8bf58e4c8237b8847f3161a0533ddc17797cf3ad35bdc9b4221d5"
|
|
423
423
|
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# Conversation surfaces
|
|
2
|
+
|
|
3
|
+
> **Status: Stable · v2.0 · RFC 0101, 0109, 0110.** Normative contract for the multi-party conversation families.
|
|
4
|
+
> **Normative home:** `multiPartyConversation`, `channelPresence`, `conversationTurnModelProvenance`.
|
|
5
|
+
|
|
6
|
+
## Why this exists
|
|
7
|
+
|
|
8
|
+
RFC 0101 and RFC 0110 are `Accepted`, their wire shapes are frozen in `schemas/v2/`, and conformance covers them — but each deliberately mints no client route for opening a conversation, and so neither was ever given an operative home. The obligation an advertising host takes on is real regardless of who routes the call; it is stated here.
|
|
9
|
+
|
|
10
|
+
## `multiPartyConversation`
|
|
11
|
+
|
|
12
|
+
A host advertising `multiPartyConversation` MUST accept an optional `participants` array of agent references on conversation creation, and MUST refuse a turn from a principal absent from that roster rather than silently accepting it. It MUST refuse a roster that exceeds `multiPartyConversation.maxParticipants` at creation rather than truncating it.
|
|
13
|
+
|
|
14
|
+
## `channelPresence`
|
|
15
|
+
|
|
16
|
+
A host advertising `channelPresence` MUST report present members as a subset of the channel's roster, and MUST NOT include a subject that is not a member. The payload is closed: it carries opaque, non-PII subject references and nothing else.
|
|
17
|
+
|
|
18
|
+
## `conversationTurnModelProvenance`
|
|
19
|
+
|
|
20
|
+
A host that stamps model provenance on an agent turn MUST advertise `conversationTurnModelProvenance`. The stamp is non-secret and non-PII — provider and model identifiers only — and a host MUST NOT place prompt or completion content in it.
|
package/spec/v2/core/errors.md
CHANGED
|
@@ -8,7 +8,7 @@ Every error a v2 host returns is a row in one registry. A client routes on `erro
|
|
|
8
8
|
|
|
9
9
|
## The registry
|
|
10
10
|
|
|
11
|
-
`spec/v2/errors.json` holds one row per code: `{ code, httpStatus, retriable, details, since, deprecated? }` plus the provenance fields `statusSource` and `source`. It registers **
|
|
11
|
+
`spec/v2/errors.json` holds one row per code: `{ code, httpStatus, retriable, details, since, deprecated? }` plus the provenance fields `statusSource` and `source`. It registers **101** codes. `schemas/v2/error-envelope.schema.json` is GENERATED from it and MUST NOT be edited by hand.
|
|
12
12
|
|
|
13
13
|
A host MUST return a registered code, or a vendor code, in every error response. A vendor code MUST match `^(?!openwop\.)[a-z][a-z0-9]*(-[a-z0-9]+)*\.[a-z][a-z0-9_]*$` with its first segment an org registered in `spec/v2/declaration.json`; `openwop.` is reserved. The registry grows by the closed-enum rule in overview.md §0: a producer MUST NOT emit an unregistered member, and a consumer MUST accept an unknown registered member and MUST NOT act on it.
|
|
14
14
|
|
|
@@ -28,7 +28,7 @@ An interrupt has one code per state: a token or run-scoped resolve against an in
|
|
|
28
28
|
|
|
29
29
|
## Codes by HTTP status
|
|
30
30
|
|
|
31
|
-
Generated from `spec/v2/errors.json` (
|
|
31
|
+
Generated from `spec/v2/errors.json` (101 codes; `retriable` and `statusSource` are in the registry).
|
|
32
32
|
|
|
33
33
|
Code | Status
|
|
34
34
|
--- | ---
|
|
@@ -122,6 +122,8 @@ Code | Status
|
|
|
122
122
|
`sandbox_memory_exceeded` | 422
|
|
123
123
|
`sandbox_timeout` | 422
|
|
124
124
|
`token_budget_exceeded` | 422
|
|
125
|
+
`unknown_envelope_kind` | 422
|
|
126
|
+
`unknown_schema_version` | 422
|
|
125
127
|
`client_version_unsupported` | 426
|
|
126
128
|
`rate_limited` | 429
|
|
127
129
|
`event_type_unmapped` | 500
|
package/spec/v2/core/events.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Events
|
|
2
2
|
|
|
3
3
|
> **Status: Stable · RFC 0171 §A, §E; RFC 0176 §A.**
|
|
4
|
-
> **Normative home:** `heartbeat`, `envelopeContracts`.
|
|
4
|
+
> **Normative home:** `heartbeat`, `envelopeContracts`, `envelopes`, `feedback`, `providerUsage`, `supportedEnvelopes`, `schemaVersions`, `envelopeStrictness`.
|
|
5
5
|
|
|
6
6
|
## Why this exists
|
|
7
7
|
|
|
@@ -114,6 +114,30 @@ The response is `{ runId, events, lastSequence, status, isTerminal }` (closed):
|
|
|
114
114
|
|
|
115
115
|
An `eventLogSchemaVersion` of `2` means v1-written. Every reader (poll, stream, fork, diff, debug bundle) MUST translate each event through `spec/v2/event-codemap.json` at storage — `type` is mapped, the payload projected; `sequence` (including `0`), `eventId`, `timestamp`, `causationId` pass through. A type the codemap does not name, carrying no vendor org, MUST fail the read `500 event_type_unmapped`. A host MUST NOT carry a private mapping, nor rewrite era-2 rows in place. **A projection MUST NOT silently drop a property**: carry or fail `500 payload_unprojectable` (hatch `^(openwop-|x-|vendor\.)`; RFC 0185). Fork and replay over an era-2 parent: replay.md.
|
|
116
116
|
|
|
117
|
+
## The envelope-kind catalog
|
|
118
|
+
|
|
119
|
+
`supportedEnvelopes`, `schemaVersions` and `envelopeStrictness` are one flow, read in
|
|
120
|
+
that order on every inbound envelope. v1 carried them as an array, a map and an enum;
|
|
121
|
+
a v2 capability record is an object, so each holds its value in a named seat.
|
|
122
|
+
|
|
123
|
+
`supportedEnvelopes.kinds` is the catalog. A host advertising it MUST refuse an
|
|
124
|
+
emitted `type` that is neither universal nor a member, with `unknown_envelope_kind`.
|
|
125
|
+
**An absent `kinds` is not an empty catalog and is not an unrestricted one**: a host
|
|
126
|
+
advertising `supportedEnvelopes` without it has made no catalog claim, and an engine
|
|
127
|
+
MUST refuse every non-universal kind rather than admit it unchecked. Absence that
|
|
128
|
+
reads as "unrestricted" would let a record claiming `stable` admit any kind an
|
|
129
|
+
attacker can name, which is precisely what `prompt-injection-envelope-typecheck`
|
|
130
|
+
forbids.
|
|
131
|
+
|
|
132
|
+
`schemaVersions.kinds` maps a kind to its advertised floor; a kind absent from the map
|
|
133
|
+
has a floor of `0`. An emitted `schemaVersion` ABOVE the floor MUST be refused with
|
|
134
|
+
`unknown_schema_version` whatever the strictness.
|
|
135
|
+
|
|
136
|
+
`envelopeStrictness.mode` governs drift BELOW the floor only. Under `warn` — the value
|
|
137
|
+
when the seat is absent — an engine MUST validate against the advertised version and
|
|
138
|
+
log `envelope_schema_version_drift`. Under `strict` the same condition MUST refuse with
|
|
139
|
+
`unknown_schema_version`. A host MUST NOT read an absent `mode` as "no checking".
|
|
140
|
+
|
|
117
141
|
## Envelope contracts
|
|
118
142
|
|
|
119
143
|
`envelopeContracts` advertises that a host enforces per-node envelope permission
|
|
@@ -122,3 +146,18 @@ emitted envelope `type` is neither universal nor listed in that node's accepted
|
|
|
122
146
|
set, and MUST refuse it distinctly from the capability-gated `typeId` refusal —
|
|
123
147
|
the two stack rather than substitute.
|
|
124
148
|
|
|
149
|
+
## Envelope, feedback and usage facets
|
|
150
|
+
|
|
151
|
+
`envelopes.tierOneSubsetCompliance` advertises that the host accepts the Tier 1
|
|
152
|
+
structured-output subset shared across major providers; a host advertising it MUST
|
|
153
|
+
accept an envelope restricted to that subset from any provider it advertises, rather
|
|
154
|
+
than refusing on provider-specific grounds.
|
|
155
|
+
|
|
156
|
+
`feedback.targets` names the resources an annotation may be attached to. A host MUST
|
|
157
|
+
refuse an annotation whose target is outside the advertised set, and MUST NOT write it
|
|
158
|
+
to the replayable run event log.
|
|
159
|
+
|
|
160
|
+
`providerUsage.costEstimates` advertises that the host stamps a derived cost on the
|
|
161
|
+
`provider.usage` event. That figure is an estimate from the host's own rate table, and
|
|
162
|
+
a consumer MUST NOT treat it as a billed amount.
|
|
163
|
+
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# Host services
|
|
2
|
+
|
|
3
|
+
> **Status: Stable · v2.0 · RFC 0144.** Normative contract for the advertised `host.*` service surfaces a node pack invokes through `ctx`.
|
|
4
|
+
> **Normative home:** `aiEnvelope`, `promptLibrary`, `agentRuntime`.
|
|
5
|
+
|
|
6
|
+
## Why this exists
|
|
7
|
+
|
|
8
|
+
`spec/v1/host-capabilities.md` describes these three surfaces with a TypeScript sketch, a `**Required methods:**` label and a failure-mode list, and — unlike its sibling sections, which reach for `MUST` constantly — states no obligation. A lowercase section label is not an RFC 2119 keyword, so the contract a host takes on by advertising these families was never written down. v1 is frozen, so it is written here.
|
|
9
|
+
|
|
10
|
+
## `aiEnvelope`
|
|
11
|
+
|
|
12
|
+
A host advertising `aiEnvelope` MUST expose `ctx.aiEnvelope.generate` to pack code, and MUST refuse a node whose `typeId` requires the family when it does not advertise it. It MUST expose `ctx.aiEnvelope.await` when, and only when, it advertises `aiEnvelope.await`.
|
|
13
|
+
|
|
14
|
+
## `promptLibrary`
|
|
15
|
+
|
|
16
|
+
A host advertising `promptLibrary` MUST expose `ctx.promptLibrary.get`, MUST return a pinned version verbatim so that a replayed run resolves the same template, and MUST fail the calling node rather than substitute an unpinned one.
|
|
17
|
+
|
|
18
|
+
## `agentRuntime`
|
|
19
|
+
|
|
20
|
+
A host advertising `agentRuntime` MUST expose `spawn`, `delegate`, `consensus` and `messageSend`, and MUST satisfy `agents.manifestRuntime`, which advertising it implies.
|
package/spec/v2/core/replay.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Replay and Fork
|
|
2
2
|
|
|
3
3
|
> **Status: Stable · RFC 0140, 0041, 0173 §C, 0176 §A.5.**
|
|
4
|
-
> **Normative home:** `eventLog`, `replay`.
|
|
4
|
+
> **Normative home:** `eventLog`, `replay`, `nondeterminismPolicy`.
|
|
5
5
|
|
|
6
6
|
## Why this exists
|
|
7
7
|
|
|
@@ -115,3 +115,12 @@ and the cross-region claim does not apply.
|
|
|
115
115
|
A host advertising `replay` MUST document retention for source snapshots, source logs, the invocation records replay depends on, and forked runs; `retention.days` MAY advertise the window. When the range `fromSeq` needs has expired, the host MUST reject the fork with `410` or `422`; `details` SHOULD carry `sourceRunId`, `fromSeq`, and the boundary.
|
|
116
116
|
|
|
117
117
|
See also: events.md, runs.md, persistence.md, security-defaults.md.
|
|
118
|
+
|
|
119
|
+
## Declared nondeterminism
|
|
120
|
+
|
|
121
|
+
`nondeterminismPolicy` is the host's statement of which nondeterministic sources it
|
|
122
|
+
declares rather than suppresses. A host advertising `nondeterminismPolicy.declared`
|
|
123
|
+
MUST record every declared source in the run's event log at the point it is read, so
|
|
124
|
+
a fork replays the recorded value rather than re-drawing it; a source the host neither
|
|
125
|
+
declares nor suppresses is a replay defect, not a policy choice.
|
|
126
|
+
|
|
@@ -77,7 +77,7 @@ by `minClientVersion` and the additive-change rules.
|
|
|
77
77
|
| 3 | `engineVersion` | unify: integer everywhere; codemod `openwop.codemod.engine-version-unify` | `integer, minimum 0` | this document |
|
|
78
78
|
| 4 | `eventLogSchemaVersion` | first-class, the era key | integer; v2 writes `3` | `persistence.md` |
|
|
79
79
|
| 5 | per-event `schemaVersion` | first-class; §0 growth rule | integer | `events.md` |
|
|
80
|
-
| 6 | `schemaVersions` map | first-class;
|
|
80
|
+
| 6 | `schemaVersions` map | first-class; the map moves into the record's `kinds` seat (RFC 0193) | `propertyNames` = the envelope-kind grammar, values `integer, minimum 0`; NOT a closed enum — a vendor kind is host-published and never corpus-declared | `events.md` |
|
|
81
81
|
| 7 | `version.pinned` | first-class; the v1-pinned-run disposition | integer min/max | `persistence.md` |
|
|
82
82
|
| 8 | `contractProvenance` | delete | — | `capabilities.md` |
|
|
83
83
|
| 9 | `minimumSuiteVersion` | retire into `spec/v2/declaration.json` | semver | `capabilities.md` |
|
package/spec/v2/declaration.json
CHANGED
|
@@ -172,7 +172,7 @@
|
|
|
172
172
|
{
|
|
173
173
|
"key": "supportedEnvelopes",
|
|
174
174
|
"kind": "family",
|
|
175
|
-
"normativeText": ["spec/
|
|
175
|
+
"normativeText": ["spec/v2/core/events.md"],
|
|
176
176
|
"anchor": "core",
|
|
177
177
|
"section": "core/capabilities.md#supportedEnvelopes",
|
|
178
178
|
"peerDependencyId": "supportedEnvelopes",
|
|
@@ -181,15 +181,15 @@
|
|
|
181
181
|
"technical": "stable",
|
|
182
182
|
"adoption": "none"
|
|
183
183
|
},
|
|
184
|
-
"facets": [],
|
|
184
|
+
"facets": ["kinds"],
|
|
185
185
|
"floorScenarios": [],
|
|
186
186
|
"requirementIds": [],
|
|
187
|
-
"owningRfc":
|
|
187
|
+
"owningRfc": "0193"
|
|
188
188
|
},
|
|
189
189
|
{
|
|
190
190
|
"key": "schemaVersions",
|
|
191
191
|
"kind": "family",
|
|
192
|
-
"normativeText": ["spec/
|
|
192
|
+
"normativeText": ["spec/v2/core/events.md"],
|
|
193
193
|
"anchor": "core",
|
|
194
194
|
"section": "core/capabilities.md#schemaVersions",
|
|
195
195
|
"peerDependencyId": "schemaVersions",
|
|
@@ -198,10 +198,10 @@
|
|
|
198
198
|
"technical": "stable",
|
|
199
199
|
"adoption": "none"
|
|
200
200
|
},
|
|
201
|
-
"facets": [],
|
|
201
|
+
"facets": ["kinds"],
|
|
202
202
|
"floorScenarios": [],
|
|
203
203
|
"requirementIds": [],
|
|
204
|
-
"owningRfc":
|
|
204
|
+
"owningRfc": "0193"
|
|
205
205
|
},
|
|
206
206
|
{
|
|
207
207
|
"key": "limits",
|
|
@@ -233,7 +233,7 @@
|
|
|
233
233
|
{
|
|
234
234
|
"key": "envelopeStrictness",
|
|
235
235
|
"kind": "family",
|
|
236
|
-
"normativeText": ["spec/
|
|
236
|
+
"normativeText": ["spec/v2/core/events.md"],
|
|
237
237
|
"anchor": "core",
|
|
238
238
|
"section": "core/capabilities.md#envelopeStrictness",
|
|
239
239
|
"peerDependencyId": "envelopeStrictness",
|
|
@@ -242,10 +242,10 @@
|
|
|
242
242
|
"technical": "experimental",
|
|
243
243
|
"adoption": "none"
|
|
244
244
|
},
|
|
245
|
-
"facets": [],
|
|
245
|
+
"facets": ["mode"],
|
|
246
246
|
"floorScenarios": [],
|
|
247
247
|
"requirementIds": [],
|
|
248
|
-
"owningRfc":
|
|
248
|
+
"owningRfc": "0193"
|
|
249
249
|
},
|
|
250
250
|
{
|
|
251
251
|
"key": "envelopeContracts",
|
|
@@ -269,6 +269,7 @@
|
|
|
269
269
|
{
|
|
270
270
|
"key": "envelopes",
|
|
271
271
|
"kind": "family",
|
|
272
|
+
"normativeText": ["spec/v1/ai-envelope.md", "spec/v2/core/events.md"],
|
|
272
273
|
"anchor": "core",
|
|
273
274
|
"section": "core/capabilities.md#envelopes",
|
|
274
275
|
"peerDependencyId": "envelopes",
|
|
@@ -289,6 +290,7 @@
|
|
|
289
290
|
{
|
|
290
291
|
"key": "prompts",
|
|
291
292
|
"kind": "family",
|
|
293
|
+
"normativeText": ["spec/v1/prompts.md", "spec/v1/capabilities.md"],
|
|
292
294
|
"anchor": "core",
|
|
293
295
|
"section": "core/capabilities.md#prompts",
|
|
294
296
|
"peerDependencyId": "prompts",
|
|
@@ -321,6 +323,7 @@
|
|
|
321
323
|
{
|
|
322
324
|
"key": "nodePackRuntimes",
|
|
323
325
|
"kind": "family",
|
|
326
|
+
"normativeText": ["spec/v1/node-packs.md"],
|
|
324
327
|
"anchor": "core",
|
|
325
328
|
"section": "core/capabilities.md#nodePackRuntimes",
|
|
326
329
|
"peerDependencyId": "nodePackRuntimes",
|
|
@@ -483,6 +486,7 @@
|
|
|
483
486
|
{
|
|
484
487
|
"key": "feedback",
|
|
485
488
|
"kind": "family",
|
|
489
|
+
"normativeText": ["spec/v1/observability.md", "spec/v2/core/events.md"],
|
|
486
490
|
"anchor": "core",
|
|
487
491
|
"section": "core/capabilities.md#feedback",
|
|
488
492
|
"peerDependencyId": "feedback",
|
|
@@ -566,6 +570,7 @@
|
|
|
566
570
|
{
|
|
567
571
|
"key": "multiPartyConversation",
|
|
568
572
|
"kind": "family",
|
|
573
|
+
"normativeText": ["spec/v2/core/conversation.md"],
|
|
569
574
|
"anchor": "core",
|
|
570
575
|
"section": "core/capabilities.md#multiPartyConversation",
|
|
571
576
|
"peerDependencyId": "multiPartyConversation",
|
|
@@ -584,6 +589,7 @@
|
|
|
584
589
|
{
|
|
585
590
|
"key": "conversationTurnModelProvenance",
|
|
586
591
|
"kind": "family",
|
|
592
|
+
"normativeText": ["spec/v2/core/conversation.md"],
|
|
587
593
|
"anchor": "core",
|
|
588
594
|
"section": "core/capabilities.md#conversationTurnModelProvenance",
|
|
589
595
|
"peerDependencyId": "conversationTurnModelProvenance",
|
|
@@ -600,6 +606,7 @@
|
|
|
600
606
|
{
|
|
601
607
|
"key": "channelPresence",
|
|
602
608
|
"kind": "family",
|
|
609
|
+
"normativeText": ["spec/v2/core/conversation.md"],
|
|
603
610
|
"anchor": "core",
|
|
604
611
|
"section": "core/capabilities.md#channelPresence",
|
|
605
612
|
"peerDependencyId": "channelPresence",
|
|
@@ -656,6 +663,7 @@
|
|
|
656
663
|
{
|
|
657
664
|
"key": "providerUsage",
|
|
658
665
|
"kind": "family",
|
|
666
|
+
"normativeText": ["spec/v1/observability.md", "spec/v2/core/events.md"],
|
|
659
667
|
"anchor": "core",
|
|
660
668
|
"section": "core/capabilities.md#providerUsage",
|
|
661
669
|
"peerDependencyId": "providerUsage",
|
|
@@ -1055,6 +1063,7 @@
|
|
|
1055
1063
|
{
|
|
1056
1064
|
"key": "aiEnvelope",
|
|
1057
1065
|
"kind": "family",
|
|
1066
|
+
"normativeText": ["spec/v2/core/host-services.md"],
|
|
1058
1067
|
"anchor": "core",
|
|
1059
1068
|
"section": "core/capabilities.md#aiEnvelope",
|
|
1060
1069
|
"peerDependencyId": "aiEnvelope",
|
|
@@ -1073,6 +1082,7 @@
|
|
|
1073
1082
|
{
|
|
1074
1083
|
"key": "promptLibrary",
|
|
1075
1084
|
"kind": "family",
|
|
1085
|
+
"normativeText": ["spec/v2/core/host-services.md"],
|
|
1076
1086
|
"anchor": "core",
|
|
1077
1087
|
"section": "core/capabilities.md#promptLibrary",
|
|
1078
1088
|
"peerDependencyId": "promptLibrary",
|
|
@@ -1089,6 +1099,7 @@
|
|
|
1089
1099
|
{
|
|
1090
1100
|
"key": "agentRuntime",
|
|
1091
1101
|
"kind": "family",
|
|
1102
|
+
"normativeText": ["spec/v2/core/host-services.md"],
|
|
1092
1103
|
"anchor": "core",
|
|
1093
1104
|
"section": "core/capabilities.md#agentRuntime",
|
|
1094
1105
|
"peerDependencyId": "agentRuntime",
|
|
@@ -1220,6 +1231,7 @@
|
|
|
1220
1231
|
{
|
|
1221
1232
|
"key": "nondeterminismPolicy",
|
|
1222
1233
|
"kind": "family",
|
|
1234
|
+
"normativeText": ["spec/v2/core/replay.md"],
|
|
1223
1235
|
"anchor": "core",
|
|
1224
1236
|
"section": "core/capabilities.md#nondeterminismPolicy",
|
|
1225
1237
|
"peerDependencyId": "nondeterminismPolicy",
|
package/spec/v2/errors.json
CHANGED
|
@@ -957,6 +957,24 @@
|
|
|
957
957
|
"details": null,
|
|
958
958
|
"since": "1.0",
|
|
959
959
|
"source": "spec/v1/rest-endpoints.md §Error response shape"
|
|
960
|
+
},
|
|
961
|
+
{
|
|
962
|
+
"code": "unknown_envelope_kind",
|
|
963
|
+
"httpStatus": 422,
|
|
964
|
+
"statusSource": "v1 prose",
|
|
965
|
+
"retriable": false,
|
|
966
|
+
"details": null,
|
|
967
|
+
"since": "1.0",
|
|
968
|
+
"source": "spec/v1/ai-envelope.md §\"Refusal taxonomy\" (unknown type, not in supportedEnvelopes)"
|
|
969
|
+
},
|
|
970
|
+
{
|
|
971
|
+
"code": "unknown_schema_version",
|
|
972
|
+
"httpStatus": 422,
|
|
973
|
+
"statusSource": "v1 prose",
|
|
974
|
+
"retriable": false,
|
|
975
|
+
"details": null,
|
|
976
|
+
"since": "1.0",
|
|
977
|
+
"source": "spec/v1/ai-envelope.md §\"Schema version advertisement\" (emitted schemaVersion above the advertised floor)"
|
|
960
978
|
}
|
|
961
979
|
]
|
|
962
980
|
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$comment": "RFC 0193 §B — the seat for the v1 enum. v1 default-when-absent was `warn`; the v2 record keeps that default, so an advertised record with no `mode` means `warn` and not `unset`.",
|
|
3
|
+
"properties": {
|
|
4
|
+
"mode": {
|
|
5
|
+
"enum": ["warn", "strict"],
|
|
6
|
+
"description": "Schema-version drift handling. `warn` (the default when this seat is absent, as in v1): an engine MUST attempt validation against the advertised version and log `envelope_schema_version_drift`. `strict`: the same condition MUST refuse with `unknown_schema_version`. Drift ABOVE the advertised floor refuses under both (`events.md` §\"The envelope-kind catalog\")."
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$comment": "RFC 0193 §B — the seat for the v1 map. `versioning.md` axis 6 rules this axis first-class with its own grammar; the generated record had the `retire` shape instead. propertyNames is the kind grammar rather than a closed enum: axis 6 says `additionalProperties: false over declared kinds`, but a vendor kind is host-published and never corpus-declared (`ai-envelope.schema.json` requires exactly that), so a literal enum would forbid the entries the catalog exists to carry. RFC 0193 §D corrects the axis row to match.",
|
|
3
|
+
"properties": {
|
|
4
|
+
"kinds": {
|
|
5
|
+
"type": "object",
|
|
6
|
+
"propertyNames": {
|
|
7
|
+
"type": "string",
|
|
8
|
+
"minLength": 1,
|
|
9
|
+
"maxLength": 256
|
|
10
|
+
},
|
|
11
|
+
"additionalProperties": {
|
|
12
|
+
"type": "integer",
|
|
13
|
+
"minimum": 0
|
|
14
|
+
},
|
|
15
|
+
"description": "Active schema version per envelope kind, as in v1 `Capabilities.schemaVersions` (e.g. `{\"vendor.acme.prd.create\": 2}`). A kind absent from this map has no advertised floor; an emitted `schemaVersion` is then compared against 0. An emitted version HIGHER than the advertised floor MUST be refused with `unknown_schema_version` regardless of strictness; LOWER is governed by `envelopeStrictness.mode` (`events.md` §\"The envelope-kind catalog\")."
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$comment": "RFC 0193 §B — the seat for the v1 array. `supportedEnvelopes` was an array of kind strings in v1; the v2 record is an object, so the catalog needs a name. OPTIONAL, not required: MyndHyve's live v2 document already publishes this record without one, and the v2 root is additionalProperties:false, so a required seat would invalidate a published closed record with no host change (the same rule that kept observability.testSeams). §C makes the absence fail CLOSED instead.",
|
|
3
|
+
"properties": {
|
|
4
|
+
"kinds": {
|
|
5
|
+
"type": "array",
|
|
6
|
+
"uniqueItems": true,
|
|
7
|
+
"items": {
|
|
8
|
+
"type": "string",
|
|
9
|
+
"minLength": 1,
|
|
10
|
+
"maxLength": 256
|
|
11
|
+
},
|
|
12
|
+
"description": "The envelope `type` strings this host recognizes, as in v1 `Capabilities.supportedEnvelopes`. Universal kinds (`clarification.request`, `schema.request`, `schema.response`, `error`) are always allowed and need not be listed. Every other member MUST be namespaced under the `<org>.` rule (`events.md`). ABSENT IS NOT `[]` AND IS NOT `all`: an engine MUST refuse every non-universal kind with `unknown_envelope_kind` when this seat is absent (`events.md` §\"The envelope-kind catalog\"). The refusal is what makes the protocol-tier invariant `prompt-injection-envelope-typecheck` enforceable at major 2."
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
}
|
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.24.0",
|
|
4
|
+
"corpusTag": "v2.24.0",
|
|
5
5
|
"updated": "2026-09-18"
|
|
6
6
|
}
|