@openwop/spec-artifacts 2.31.0 → 2.32.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 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.31.0",
5
- "corpusTag": "v2.31.0",
4
+ "version": "2.32.0",
5
+ "corpusTag": "v2.32.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": "dfecf104a518efca7b9b915578c4198c6a9e1f8965d8e84fc300bbbafc5503e7",
13
- "api/v2/asyncapi.yaml": "577bd2252f10d8c3dceaac0dc7855925cc466e06fd6bf1613b8e451869fcdc54",
14
- "api/v2/openapi.yaml": "82b884b23460438059a5b38b47b5f3e883d03365013ed8c2632b664417c0f699",
12
+ "api/seams-v2.yaml": "a1db4d5558ec828482688ad34db7a749f6f52ef102158d24036819402720a3e9",
13
+ "api/v2/asyncapi.yaml": "8bfff7d7d9c5ef82196d5b6da1566b36e7070d4996da731c4499fd90b8ee51a7",
14
+ "api/v2/openapi.yaml": "02338e18f6e0ba029dde8b6dadee126904d2ca97b10a6bdd43c7c1a423ad88d7",
15
15
  "api/v2/redocly.yaml": "1e66b60e6118ad11a823bb620678be464d99dfe50a40e3e6f93ec9429b88b34c",
16
16
  "schemas/README.md": "0c0b737ffcf8f30e7d2809cec8a498232de710f41443212922ad8337cdde0b51",
17
17
  "schemas/a2a-task-state.schema.json": "c9365918f993f943b4b619d42551eb066a1ed33a08d895d51b395432a5b1f1bc",
@@ -112,19 +112,19 @@
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": "85630d1b760d0b41cf5a6fad2acfada39abaf7f0befd95cc4334e1e883e9615d",
115
+ "schemas/v2/artifact-type-pack-manifest.schema.json": "f77d8dcc3112afec8b2a8e67e56752d5811deb2c2455b0d6d4c6489eb4c4a829",
116
116
  "schemas/v2/audit-verify-result.schema.json": "a748dfadb5155adfde8a91045e76b0db6695005fe559035d71670fdd55edb3ba",
117
117
  "schemas/v2/budget-policy.schema.json": "c7449daeb6e1d95e7a047b8c2814d3d54748697c27046972834874867d9b5f4c",
118
118
  "schemas/v2/capabilities.schema.json": "e62d44f23c21c8f64b273fcdb083636e801c0de976cbd1f93333f99928dd1025",
119
119
  "schemas/v2/certification-bundle.schema.json": "ab9204e37f9e0bba79857275cd38be2da98e54d26b4ecb97469829efe6ebea28",
120
120
  "schemas/v2/channel-presence-payload.schema.json": "1c20ad810cb311d47aa0b95d928490826b2468fd161f884cd29e867053e6782f",
121
121
  "schemas/v2/channel-written-payload.schema.json": "ccecff3c71a3275ad8db035ac0e04db25e6f8d23cf091ddbcd5a60d1be1cbb6b",
122
- "schemas/v2/chat-card-pack-manifest.schema.json": "8df0d9d273ae22efc6876d5586833f1d4c2e551edc3ac6cf6e8f0719329f03dd",
122
+ "schemas/v2/chat-card-pack-manifest.schema.json": "f7cf09b30d3e1d2251620d84ea9f65541438d015ab44aec10d1dcfe68d8bd496",
123
123
  "schemas/v2/compact-tool-descriptor.schema.json": "b5c418d72082d5b713bf318212a83397e5be98e56d25ca056302b41b8dd8273b",
124
124
  "schemas/v2/compensation-policy.schema.json": "b3c1142637f5bf980f2b0bb67adb47e8cb7abb99a0405a4b6816ccf5d9c089d6",
125
125
  "schemas/v2/compensation-projection.schema.json": "f46977c7076347b5473faa8c4bbe73d8321c33b33c98fff2f26ee7cbada4ed98",
126
126
  "schemas/v2/configurable.schema.json": "33a6884047e2490f723733bf8b74d3b9164e00374cfea6dc3eac5a70dc368861",
127
- "schemas/v2/connection-pack-manifest.schema.json": "7410a3011b28829b286e3ff764bdb283854dca69ea4b71a8441f8c1c4f1cc948",
127
+ "schemas/v2/connection-pack-manifest.schema.json": "4300e815cf376959f8250ed25ba0545ae8bd525e449c6442326934f451070cc9",
128
128
  "schemas/v2/conversation-event.schema.json": "e87b7fb36ab4ca0afe9f77993654065b28b67e5f24b20175907f90e238942025",
129
129
  "schemas/v2/conversation-turn.schema.json": "a15b43dc15dbcc6aaf216bfab7424c540b514d7e40e661a732384aad45387006",
130
130
  "schemas/v2/credential-provenance.schema.json": "f86b09e94b1c524dec7d1c6353965665ae8891e9517faef6e742d639c5578c99",
@@ -144,7 +144,7 @@
144
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
- "schemas/v2/form-content-pack-manifest.schema.json": "461529e4287ec3b15a9fbcde57226a1c6f17ea3ae71b33b418e6f595ff0619fe",
147
+ "schemas/v2/form-content-pack-manifest.schema.json": "8ec157cf51241d4df800398e811d2c35addd076b929c58be3ce3dcd671c67641",
148
148
  "schemas/v2/frontend-plugin-manifest.schema.json": "fed6b8ddb3056c53b1bfc91525410a4445a3c37a8bf9eb9f6f9964ffea26d993",
149
149
  "schemas/v2/goal.schema.json": "146c4182e36d3538778f947e668a92cdb69ec42ee0820104b00063b035e342d7",
150
150
  "schemas/v2/heartbeat-evaluated.schema.json": "4086b1ba1d0547c08b038dfb263ac89416a3e406430db1250156fb2f9b74f8d6",
@@ -156,12 +156,12 @@
156
156
  "schemas/v2/localized-content-section.schema.json": "29c7bad0ad9ebc6c45211282e8afb3fdb35a4ca075ce0404b6e2c29f35fa5313",
157
157
  "schemas/v2/memory-entry.schema.json": "290576ae84f4fef4cdf975932b87963283b11c50ea3d2654b32cd96aa6537c3d",
158
158
  "schemas/v2/memory-list-options.schema.json": "f66703bccb68efb28391c273abb66aa117ee5b5ce475c477846ed700c336afcd",
159
- "schemas/v2/node-pack-manifest.schema.json": "0da826ca63a29026f7a9551748048104910e0d9962db6bad2b50b97a24a9ea30",
159
+ "schemas/v2/node-pack-manifest.schema.json": "47d122f7d4711eaa13464c5487c26ed36103b7c85adf1987004bf2d6842d663b",
160
160
  "schemas/v2/orchestrator-decision.schema.json": "2da17538e84cfbe70151eb118f1ccf670cff58b8697148e394074d32ac4af6b4",
161
161
  "schemas/v2/org-chart-responsibility-view.schema.json": "8a2565e4cdc6737a3946a70799f93642808b92f9c8d56dcdff3a0782053b89a1",
162
162
  "schemas/v2/pack-lockfile.schema.json": "2685417702c105146b780cd99154296a46578fbb10d81c8c713348ee26fea898",
163
163
  "schemas/v2/prompt-kind.schema.json": "67251c937a5a91fb97c0422050e808dc0c162a9b8561366814cf87b0a7f62e00",
164
- "schemas/v2/prompt-pack-manifest.schema.json": "8e77d23840250640d26f2f99c1c5902e79bf4a6974cae2d6c6637176236bddb9",
164
+ "schemas/v2/prompt-pack-manifest.schema.json": "4b1e510341cc6ba167b007ecae38ce0d71d5b89c751671777c5457da926e9744",
165
165
  "schemas/v2/prompt-ref.schema.json": "11538fa36a7a652c93100cac4f1857eb4130137b546e3d94890618636d44b729",
166
166
  "schemas/v2/prompt-template.schema.json": "494fc83028cb3af5dbb8a943d0e83b2348f7775e9fa02369162bcb58a6f81559",
167
167
  "schemas/v2/proposal.schema.json": "cb5ea4fcb54be94fd2a92cf2799357dc73335181a89f5766f432d69e21cc3a80",
@@ -189,7 +189,7 @@
189
189
  "schemas/v2/ui-plugin-message.schema.json": "879d65867c01656b3962d64283e66364dcb8f626ad26c5fcf2d2d55a79ae0ce9",
190
190
  "schemas/v2/webhook-dead-letter-page.schema.json": "543f5ccc26d8f777684a037172ab7b9fdf70735e5394eeb42e5fa6569503f528",
191
191
  "schemas/v2/webhook-delivery.schema.json": "4e8ab3b722ad1731adf0548c1217f0de62da40de14e8abf77533aee4ace4c079",
192
- "schemas/v2/workflow-chain-pack-manifest.schema.json": "b61cc945b4df1c7093a1058fa71ee59ef10bacb3433ae4d7ae7536136e616cc2",
192
+ "schemas/v2/workflow-chain-pack-manifest.schema.json": "58fa5b67c6e3a320f77aa1eb5d5fa7c6c9b3356afe8b75ad74a7cf082496e04b",
193
193
  "schemas/v2/workflow-definition.schema.json": "9aafddec32b84eb6aec3185be024850f1b9444c6193568771b0b636595fef136",
194
194
  "schemas/v2/workload-identity.schema.json": "1f589debfac6d70e0908da511550ec69a27b4bcc8314551cd843b6d923605efc",
195
195
  "schemas/v2/workspace-file-create.schema.json": "b6b5260857318c3b67de0231ed15e3a746f525880a763e7b36a7854178dd10d0",
@@ -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": "c8cc668bd5c1e504e8b0171e3c078f770f9d9e5765938750f600defb2fcb986f",
204
+ "spec/v1/core-standard-manifest.json": "01ed93af96a8ca6c562b8fa25658ff2e33a793970133c50838d50ac5e362819e",
205
205
  "spec/v1/deprecations.json": "307083ce29c23fd406015951f99a30d78d6187ff061d38dc9732f62191b40f3f",
206
206
  "spec/v1/deprecations.schema.json": "18c87e78bedc210431f795ae44c5b5d202f2f3317850d5cf86867d4f1fa1cdfb",
207
207
  "spec/v1/event-codemap.json": "3da60d884157793a360da532a9fcbbfb5285636db325a74cec94b34622186d97",
@@ -228,7 +228,7 @@
228
228
  "spec/v2/core/interop.md": "6bd581556b9ab1a1509c01b9a1ec2bcb9e4a8300e68fb01570704417e70f20b9",
229
229
  "spec/v2/core/interrupt.md": "3a926d84b942d4ee7daccc4443c93dc29f6a69f2936ba813182f2c1336db2cbb",
230
230
  "spec/v2/core/overview.md": "7dc00ace32d4e4ce929a383651f0029fc4b7091ec87487b1bf26ead1be209e0e",
231
- "spec/v2/core/packs.md": "cc06de2d49dd08410eececd5c279996ec839680553b332b4f33d6b31989b5757",
231
+ "spec/v2/core/packs.md": "1c0919059760f9a3940a93264a76b7e30f9a0f6f27ff19753cc88f15753d8088",
232
232
  "spec/v2/core/persistence.md": "9e241f84259e38848f4a2ad1c21debb0dffd5f8aafbad26408aa6cc8969bf93b",
233
233
  "spec/v2/core/replay.md": "b980a66e2543107240e3dc4f58131b9f4ff52478737e79ade6d5777b26ad1119",
234
234
  "spec/v2/core/runs.md": "136319842bacbbb300178980e4b83444917d5b193cc5fdd92e39a4902ba8d3c0",
@@ -274,13 +274,13 @@
274
274
  "spec/v2/facets/schemaVersions.schema.json": "890d3416c4b66511d51f329abc68e6f467f4338f16807e489fe682999b2b56b9",
275
275
  "spec/v2/facets/supportedEnvelopes.schema.json": "644f22cc2236e30a611b5b7f1ba0458ff1925d68b94c514d9672583224e126bd",
276
276
  "spec/v2/facets/webhooks.schema.json": "4bf3f8eb3161a43910efac4c44ccaf9567060c9da52d4cf09bcf3888d1b92192",
277
- "spec/v2/facets/workflowChainPacks.schema.json": "cd30907ac92396866a524e4db8d8c1537e3818cfff455d780efd72bcd0ebdac1",
277
+ "spec/v2/facets/workflowChainPacks.schema.json": "ea625ce818fbeb746478f00f31f96ee9613d538e4409c258c1bfb517acdeaba9",
278
278
  "spec/v2/id-field-bindings.json": "e73c06f3055ad30173507ac817a458b96362c8f26209ba105c53653292cf63d3",
279
279
  "spec/v2/path-manifest.json": "c123c9fd77dc1b3f9c2e9346ace80cdae007e6511138894956abda01e61ec1c6",
280
280
  "spec/v2/peer-dependency-aliases.json": "d10299280abee08258502925bc327293ee413e0108cd6e6ec75ff6110653308d",
281
281
  "spec/v2/profiles.json": "0636f19fceae625390003a347e70ef4797d84766b5c24ce8a02cea52aadebca4",
282
- "spec/v2/release.json": "92131d62a7fcd12445d7e04eb588e2297f839b7e5e2a87f89ae9e61593f837cd",
282
+ "spec/v2/release.json": "df06e652e6f851338df9b4e0f230bb176511e62691e867f7228d05c4263b1bec",
283
283
  "spec/v2/retention-floors.json": "eaf3722d95c79947af1d4269ef85117e126518c588cfcf1a2b21b97269f51624"
284
284
  },
285
- "corpusCommit": "cb0aa58bb79366383a13b4b2843f47662888a189"
285
+ "corpusCommit": "7091dae28be398d49c446f779b4c91755a80a5ff"
286
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.31.0
4
+ version: 2.32.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
@@ -1,7 +1,7 @@
1
1
  asyncapi: 3.1.0
2
2
  info:
3
3
  title: OpenWOP v2 event streams
4
- version: 2.31.0
4
+ version: 2.32.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
@@ -1,7 +1,7 @@
1
1
  openapi: 3.1.0
2
2
  info:
3
3
  title: OpenWOP v2 API
4
- version: 2.31.0
4
+ version: 2.32.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.31.0",
3
+ "version": "2.32.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": {
@@ -218,32 +218,26 @@
218
218
  },
219
219
  "Signing": {
220
220
  "type": "object",
221
- "description": "Optional signing metadata. See node-packs.md \u00a7signing.",
222
221
  "additionalProperties": false,
222
+ "required": [
223
+ "keyId",
224
+ "scheme"
225
+ ],
223
226
  "properties": {
224
- "publicKeyRef": {
225
- "type": "string",
226
- "description": "Path inside the tarball to the Ed25519 public key (PEM-encoded)."
227
+ "keyId": {
228
+ "$ref": "ids.schema.json#/$defs/keyId"
227
229
  },
228
- "signatureRef": {
229
- "type": "string",
230
- "description": "Path to the detached signature over `pack.json`."
231
- },
232
- "method": {
233
- "type": "string",
234
- "enum": [
235
- "manual",
236
- "sigstore"
237
- ],
238
- "description": "Signing method. `manual` uses publicKeyRef + signatureRef; `sigstore` uses a Sigstore bundle at `pack.json.sigstore`."
230
+ "scheme": {
231
+ "const": "ed25519-canonical-json",
232
+ "description": "RFC 0177 §C.3 — one scheme: a detached 64-byte Ed25519 signature over the canonical-JSON pack.json inside a deterministic tarball. method and publicKeyRef are gone."
239
233
  }
240
- }
234
+ },
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)."
241
236
  }
242
237
  },
243
238
  "patternProperties": {
244
239
  "^(openwop-|x-|vendor\\.)": {
245
240
  "description": "Vendor / host extension escape hatch (RFC 0138). A property matching `^(x-|vendor\\.)` is a HOST EXTENSION: its semantics are unspecified by this protocol, and a consumer that does not recognize one MUST ignore it rather than reject the pack. Resolves the contradiction in `host-extensions.md` \u00a7\"Vendor-prefixed namespaces\", which requires a client receiving an unknown vendor-prefixed field to treat it as opaque \u2014 a field that `additionalProperties: false` previously made impossible to carry. SECURITY: an extension value is PACK-AUTHORED, therefore untrusted; \"ignore\" means ignore. See `node-packs.md` \u00a7\"Vendor extensions on pack manifests\" and the `pack-manifest-extension-opaque` invariant."
246
241
  }
247
- },
248
- "x-openwop-seeded-from": "v1"
242
+ }
249
243
  }
@@ -230,29 +230,26 @@
230
230
  },
231
231
  "Signing": {
232
232
  "type": "object",
233
- "description": "Optional signing metadata. See node-packs.md \u00a7signing.",
234
233
  "additionalProperties": false,
234
+ "required": [
235
+ "keyId",
236
+ "scheme"
237
+ ],
235
238
  "properties": {
236
- "publicKeyRef": {
237
- "type": "string"
238
- },
239
- "signatureRef": {
240
- "type": "string"
239
+ "keyId": {
240
+ "$ref": "ids.schema.json#/$defs/keyId"
241
241
  },
242
- "method": {
243
- "type": "string",
244
- "enum": [
245
- "manual",
246
- "sigstore"
247
- ]
242
+ "scheme": {
243
+ "const": "ed25519-canonical-json",
244
+ "description": "RFC 0177 §C.3 — one scheme: a detached 64-byte Ed25519 signature over the canonical-JSON pack.json inside a deterministic tarball. method and publicKeyRef are gone."
248
245
  }
249
- }
246
+ },
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)."
250
248
  }
251
249
  },
252
250
  "patternProperties": {
253
251
  "^(openwop-|x-|vendor\\.)": {
254
252
  "description": "Vendor / host extension escape hatch (RFC 0138). A property matching `^(x-|vendor\\.)` is a HOST EXTENSION: its semantics are unspecified by this protocol, and a consumer that does not recognize one MUST ignore it rather than reject the pack. Resolves the contradiction in `host-extensions.md` \u00a7\"Vendor-prefixed namespaces\", which requires a client receiving an unknown vendor-prefixed field to treat it as opaque \u2014 a field that `additionalProperties: false` previously made impossible to carry. SECURITY: an extension value is PACK-AUTHORED, therefore untrusted; \"ignore\" means ignore. See `node-packs.md` \u00a7\"Vendor extensions on pack manifests\" and the `pack-manifest-extension-opaque` invariant."
255
253
  }
256
- },
257
- "x-openwop-seeded-from": "v1"
254
+ }
258
255
  }
@@ -315,6 +315,24 @@
315
315
  "description": "Vendor / host extension escape hatch (RFC 0138). A property matching `^(x-|vendor\\.)` is a HOST EXTENSION: its semantics are unspecified by this protocol, and a consumer that does not recognize one MUST ignore it rather than reject the pack. Resolves the contradiction in `host-extensions.md` §\"Vendor-prefixed namespaces\", which requires a client receiving an unknown vendor-prefixed field to treat it as opaque — a field that `additionalProperties: false` previously made impossible to carry. SECURITY: an extension value is PACK-AUTHORED, therefore untrusted; \"ignore\" means ignore. See `node-packs.md` §\"Vendor extensions on pack manifests\" and the `pack-manifest-extension-opaque` invariant."
316
316
  }
317
317
  }
318
+ },
319
+ "signing": {
320
+ "type": "object",
321
+ "additionalProperties": false,
322
+ "required": [
323
+ "keyId",
324
+ "scheme"
325
+ ],
326
+ "properties": {
327
+ "keyId": {
328
+ "$ref": "ids.schema.json#/$defs/keyId"
329
+ },
330
+ "scheme": {
331
+ "const": "ed25519-canonical-json",
332
+ "description": "RFC 0177 §C.3 — one scheme: a detached 64-byte Ed25519 signature over the canonical-JSON pack.json inside a deterministic tarball. method and publicKeyRef are gone."
333
+ }
334
+ },
335
+ "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)."
318
336
  }
319
337
  },
320
338
  "$defs": {
@@ -349,6 +367,5 @@
349
367
  "^(openwop-|x-|vendor\\.)": {
350
368
  "description": "Vendor / host extension escape hatch (RFC 0138). A property matching `^(x-|vendor\\.)` is a HOST EXTENSION: its semantics are unspecified by this protocol, and a consumer that does not recognize one MUST ignore it rather than reject the pack. Resolves the contradiction in `host-extensions.md` §\"Vendor-prefixed namespaces\", which requires a client receiving an unknown vendor-prefixed field to treat it as opaque — a field that `additionalProperties: false` previously made impossible to carry. SECURITY: an extension value is PACK-AUTHORED, therefore untrusted; \"ignore\" means ignore. See `node-packs.md` §\"Vendor extensions on pack manifests\" and the `pack-manifest-extension-opaque` invariant."
351
369
  }
352
- },
353
- "x-openwop-seeded-from": "v1"
370
+ }
354
371
  }
@@ -244,29 +244,26 @@
244
244
  },
245
245
  "Signing": {
246
246
  "type": "object",
247
- "description": "Optional signing metadata. See node-packs.md §signing.",
248
247
  "additionalProperties": false,
248
+ "required": [
249
+ "keyId",
250
+ "scheme"
251
+ ],
249
252
  "properties": {
250
- "publicKeyRef": {
251
- "type": "string"
253
+ "keyId": {
254
+ "$ref": "ids.schema.json#/$defs/keyId"
252
255
  },
253
- "signatureRef": {
254
- "type": "string"
255
- },
256
- "method": {
257
- "type": "string",
258
- "enum": [
259
- "manual",
260
- "sigstore"
261
- ]
256
+ "scheme": {
257
+ "const": "ed25519-canonical-json",
258
+ "description": "RFC 0177 §C.3 — one scheme: a detached 64-byte Ed25519 signature over the canonical-JSON pack.json inside a deterministic tarball. method and publicKeyRef are gone."
262
259
  }
263
- }
260
+ },
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)."
264
262
  }
265
263
  },
266
264
  "patternProperties": {
267
265
  "^(openwop-|x-|vendor\\.)": {
268
266
  "description": "Vendor / host extension escape hatch (RFC 0138). A property matching `^(x-|vendor\\.)` is a HOST EXTENSION: its semantics are unspecified by this protocol, and a consumer that does not recognize one MUST ignore it rather than reject the pack. Resolves the contradiction in `host-extensions.md` §\"Vendor-prefixed namespaces\", which requires a client receiving an unknown vendor-prefixed field to treat it as opaque — a field that `additionalProperties: false` previously made impossible to carry. SECURITY: an extension value is PACK-AUTHORED, therefore untrusted; \"ignore\" means ignore. See `node-packs.md` §\"Vendor extensions on pack manifests\" and the `pack-manifest-extension-opaque` invariant."
269
267
  }
270
- },
271
- "x-openwop-seeded-from": "v1"
268
+ }
272
269
  }
@@ -632,26 +632,21 @@
632
632
  },
633
633
  "Signing": {
634
634
  "type": "object",
635
- "description": "Optional signing metadata. See node-packs.md \u00a7signing.",
635
+ "additionalProperties": false,
636
+ "required": [
637
+ "keyId",
638
+ "scheme"
639
+ ],
636
640
  "properties": {
637
- "publicKeyRef": {
638
- "type": "string",
639
- "description": "Path inside the tarball to the Ed25519 public key (PEM-encoded)."
640
- },
641
- "signatureRef": {
642
- "type": "string",
643
- "description": "Path to the detached signature over `pack.json`."
641
+ "keyId": {
642
+ "$ref": "ids.schema.json#/$defs/keyId"
644
643
  },
645
- "method": {
646
- "type": "string",
647
- "enum": [
648
- "manual",
649
- "sigstore"
650
- ],
651
- "description": "Signing method. `manual` uses publicKeyRef + signatureRef; `sigstore` uses a Sigstore bundle at `pack.json.sigstore`."
644
+ "scheme": {
645
+ "const": "ed25519-canonical-json",
646
+ "description": "RFC 0177 §C.3 — one scheme: a detached 64-byte Ed25519 signature over the canonical-JSON pack.json inside a deterministic tarball. method and publicKeyRef are gone."
652
647
  }
653
648
  },
654
- "additionalProperties": false
649
+ "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)."
655
650
  }
656
651
  },
657
652
  "patternProperties": {
@@ -89,30 +89,25 @@
89
89
  "signing": {
90
90
  "type": "object",
91
91
  "additionalProperties": false,
92
- "description": "Optional signing metadata. Reuses the Ed25519 + SRI flow from `node-packs.md §Signing` unchanged. Hosts installing this pack MUST verify the signature before accepting any of `prompts[]` per `registry-operations.md §\"Signature verification\"`.",
92
+ "required": [
93
+ "keyId",
94
+ "scheme"
95
+ ],
93
96
  "properties": {
94
- "publicKeyRef": {
95
- "type": "string",
96
- "description": "Path inside the tarball to the Ed25519 public key (PEM-encoded)."
97
- },
98
- "signatureRef": {
99
- "type": "string",
100
- "description": "Path to the detached signature over `pack.json`."
97
+ "keyId": {
98
+ "$ref": "ids.schema.json#/$defs/keyId"
101
99
  },
102
- "method": {
103
- "type": "string",
104
- "enum": [
105
- "manual",
106
- "sigstore"
107
- ]
100
+ "scheme": {
101
+ "const": "ed25519-canonical-json",
102
+ "description": "RFC 0177 §C.3 — one scheme: a detached 64-byte Ed25519 signature over the canonical-JSON pack.json inside a deterministic tarball. method and publicKeyRef are gone."
108
103
  }
109
- }
104
+ },
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)."
110
106
  }
111
107
  },
112
108
  "patternProperties": {
113
109
  "^(openwop-|x-|vendor\\.)": {
114
110
  "description": "Vendor / host extension escape hatch (RFC 0138). A property matching `^(x-|vendor\\.)` is a HOST EXTENSION: its semantics are unspecified by this protocol, and a consumer that does not recognize one MUST ignore it rather than reject the pack. Resolves the contradiction in `host-extensions.md` §\"Vendor-prefixed namespaces\", which requires a client receiving an unknown vendor-prefixed field to treat it as opaque — a field that `additionalProperties: false` previously made impossible to carry. SECURITY: an extension value is PACK-AUTHORED, therefore untrusted; \"ignore\" means ignore. See `node-packs.md` §\"Vendor extensions on pack manifests\" and the `pack-manifest-extension-opaque` invariant."
115
111
  }
116
- },
117
- "x-openwop-seeded-from": "v1"
112
+ }
118
113
  }
@@ -424,7 +424,7 @@
424
424
  "config": {
425
425
  "type": "object",
426
426
  "description": "Node config — host-validated against the referenced typeId's config schema. String fields MAY contain `{{params.<name>}}` placeholders that the host MUST substitute at expansion time. RFC 0133: a `core.subWorkflow` / `core.dispatch` (child-run) node MAY carry `subChainRef: string` — a declared `subChains[].ref` (sibling `chainId` or external ref) the host rewrites to the minted child `workflowId` at co-expansion time (§1.3 step 3). A concrete `config.workflowId` inside a fragment remains INVALID — a chain MUST NOT pin a host-specific workflow id (the `not` guard below enforces it).",
427
- "additionalProperties": false,
427
+ "additionalProperties": true,
428
428
  "not": {
429
429
  "required": [
430
430
  "workflowId"
@@ -577,31 +577,26 @@
577
577
  },
578
578
  "Signing": {
579
579
  "type": "object",
580
- "description": "Optional signing metadata. Reuses node-packs.md §signing unchanged.",
580
+ "additionalProperties": false,
581
+ "required": [
582
+ "keyId",
583
+ "scheme"
584
+ ],
581
585
  "properties": {
582
- "publicKeyRef": {
583
- "type": "string",
584
- "description": "Path inside the tarball to the Ed25519 public key (PEM-encoded)."
586
+ "keyId": {
587
+ "$ref": "ids.schema.json#/$defs/keyId"
585
588
  },
586
- "signatureRef": {
587
- "type": "string",
588
- "description": "Path to the detached signature over `pack.json`."
589
- },
590
- "method": {
591
- "type": "string",
592
- "enum": [
593
- "manual",
594
- "sigstore"
595
- ]
589
+ "scheme": {
590
+ "const": "ed25519-canonical-json",
591
+ "description": "RFC 0177 §C.3 — one scheme: a detached 64-byte Ed25519 signature over the canonical-JSON pack.json inside a deterministic tarball. method and publicKeyRef are gone."
596
592
  }
597
593
  },
598
- "additionalProperties": false
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)."
599
595
  }
600
596
  },
601
597
  "patternProperties": {
602
598
  "^(openwop-|x-|vendor\\.)": {
603
599
  "description": "Vendor / host extension escape hatch (RFC 0138). A property matching `^(x-|vendor\\.)` is a HOST EXTENSION: its semantics are unspecified by this protocol, and a consumer that does not recognize one MUST ignore it rather than reject the pack. Resolves the contradiction in `host-extensions.md` §\"Vendor-prefixed namespaces\", which requires a client receiving an unknown vendor-prefixed field to treat it as opaque — a field that `additionalProperties: false` previously made impossible to carry. SECURITY: an extension value is PACK-AUTHORED, therefore untrusted; \"ignore\" means ignore. See `node-packs.md` §\"Vendor extensions on pack manifests\" and the `pack-manifest-extension-opaque` invariant."
604
600
  }
605
- },
606
- "x-openwop-seeded-from": "v1"
601
+ }
607
602
  }
@@ -4,7 +4,7 @@
4
4
  "provenance": {
5
5
  "suite": {
6
6
  "package": "@openwop/openwop-conformance",
7
- "version": "2.31.0"
7
+ "version": "2.32.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": "5755648de17bbe3bf0f696a370d0cb14370c78b8ab258f24a581246ce0e40d70"
422
+ "digest": "d8daed491110e4a1d83ccd5b12c4f81dc59edd9deffcf79122c4f2cab033bfd0"
423
423
  }
@@ -70,6 +70,8 @@ There is one signing scheme. `signing` on a version manifest (`schemas/v2/regist
70
70
  | `keyId` | the signing key id; `publicKeyRef` does not exist |
71
71
  | `method` | does not exist; a manifest carrying it fails validation |
72
72
 
73
+ The same block applies to a **bare manifest** — the `pack.json` inside the tarball, which is the document the signature covers. `signing` is OPTIONAL there, because an authoring-time `pack.json` exists before it is signed; when present it MUST be the identical closed `{ keyId, scheme }` object, and the v1 `{ publicKeyRef, signatureRef, method }` block fails validation on every bare manifest kind (migration row `openwop.migration.C10.1`).
74
+
73
75
  A verifier MUST verify the signature against the issuing registry's key for `keyId` and MUST check the pack name against that key's `permittedNamespaces`. A signature over tarball bytes is not a v2 signature; such a pack MUST be re-signed, not relabeled.
74
76
 
75
77
  ## Version manifests
@@ -1,5 +1,5 @@
1
1
  {
2
- "$comment": "RFC 0013 §Composition depth — the v2 facet set for workflowChainPacks. Two v1-seeded facets are NOT carried into v2: `deferredParameters` (RFC 0124, still `Active`; spec/v2/core/workflow-chain-packs.md §Parameter substitution states the portable per-run deferral \"is a named v2.x additive RFC and is not part of v2.0\", so binding it as an advertisable v2 facet let a host truthfully advertise a capability v2.0 does not define) and `hostExpansionSeam` (a self-described conformance-only test seam on POST /v1/host/sample/workflow-chain:expand — spec/v2/core/conformance.md §The seams profile forbids a test-seam capability flag: seams are the profile openwop-conformance-seams-v2 in the /conformance/seams/ path space, and the v1 path is removeIn 2.0 per spec/v1/deprecations.json). No v2 host bundle advertises either.",
2
+ "$comment": "RFC 0013 §Composition depth — the v2 facet set for workflowChainPacks. Two v1-seeded facets are NOT carried into v2: `deferredParameters` (RFC 0124 — `Accepted` at v1; spec/v2/core/workflow-chain-packs.md §Parameter substitution states the portable per-run deferral \"is a named v2.x additive RFC and is not part of v2.0\", so binding it as an advertisable v2 facet let a host truthfully advertise a capability v2.0 does not define) and `hostExpansionSeam` (a self-described conformance-only test seam on POST /v1/host/sample/workflow-chain:expand — spec/v2/core/conformance.md §The seams profile forbids a test-seam capability flag: seams are the profile openwop-conformance-seams-v2 in the /conformance/seams/ path space, and the v1 path is removeIn 2.0 per spec/v1/deprecations.json). A v2 document that carries either fails `capabilities-root-closed`.",
3
3
  "properties": {
4
4
  "subChains": {
5
5
  "type": "object",
@@ -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.31.0",
4
- "corpusTag": "v2.31.0",
5
- "updated": "2026-09-18"
3
+ "version": "2.32.0",
4
+ "corpusTag": "v2.32.0",
5
+ "updated": "2026-09-20"
6
6
  }