@openwop/spec-artifacts 2.41.0 → 2.42.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.41.0",
5
- "corpusTag": "v2.41.0",
4
+ "version": "2.42.0",
5
+ "corpusTag": "v2.42.0",
6
6
  "files": {
7
7
  "api/.redocly.lint-ignore.yaml": "bf5a8350b88a72fa43f59605ed8d903ed24b6cfccda5e45509c9f6ed9ee4e712",
8
8
  "api/asyncapi.yaml": "d5ecb9ee6114582be3b1f662c84bfac9ae96dae7bacb853e461168f70a8e1c7d",
9
9
  "api/grpc/openwop.proto": "c3e72bb17cba514ee98feb6434e6c9b6ea6795bfd086489ec69fd882dd1ad977",
10
10
  "api/openapi.yaml": "6366b5514be71098e9ea41fc81ff52bc39db1a547b353c0b344cc2a2bf5370aa",
11
11
  "api/redocly.yaml": "b0604c89b2ca6d5076ec25725c539dad44a741a811fe524439ee6daef8baa09f",
12
- "api/seams-v2.yaml": "1309f1f087272e74b836b436fa08160a1009feb9c341b6d359332e875ee7475f",
13
- "api/v2/asyncapi.yaml": "b34dcda44b69de1d9d41ede8c2c69cc0fdbb6cc3533588057dd3a71acc42da5a",
14
- "api/v2/openapi.yaml": "12ccdda2cf32ec21392fe84366607e0c69c4e07ae960a9fda3fd407a5cd7be78",
12
+ "api/seams-v2.yaml": "78bc7bc551f7c91c5b8074dbb6050ab74ec39e032833c51a065c2f834f20826c",
13
+ "api/v2/asyncapi.yaml": "677ca1a062a22dfec6efbc5e109a2b0b356e9ee9508b638a85033361dae7a927",
14
+ "api/v2/openapi.yaml": "bd025e0d7ac058148e17925bb824f00dda4084063b612d6be546c221c393af95",
15
15
  "api/v2/redocly.yaml": "1e66b60e6118ad11a823bb620678be464d99dfe50a40e3e6f93ec9429b88b34c",
16
16
  "schemas/README.md": "0c0b737ffcf8f30e7d2809cec8a498232de710f41443212922ad8337cdde0b51",
17
17
  "schemas/a2a-task-state.schema.json": "75d5049dea8bd873ff0e7546f1c60c8d36c219bec7084264360be54a8be30ae1",
@@ -142,7 +142,7 @@
142
142
  "schemas/v2/envelopes/schema.request.schema.json": "be2c5f7aa881cdd252ccff47ac02193659e1393633a1541f4297383205d384a2",
143
143
  "schemas/v2/envelopes/schema.response.schema.json": "d049a081267c06c28879c331b147f3ed821b14ccfd93005c67aff64db0a8c68e",
144
144
  "schemas/v2/envelopes/ui.a2ui-surface.schema.json": "e92a2548ba65454c9e0a34f72ea6768d18f59e61fa5da7668d0b2d5baddaddc8",
145
- "schemas/v2/error-envelope.schema.json": "217fa41cfe5a664e49d0b4dd97d3185b9eaaec9585bc4392aaf93175812ffbee",
145
+ "schemas/v2/error-envelope.schema.json": "b812a33626efd68d492269ff4a713e5a91a59d7071eb2470db99757f260e5d47",
146
146
  "schemas/v2/eval-summary.schema.json": "2f384daf05b8f3b4f604688cae504d6d9971ba41b8c771e55fe9a17e09e86b7a",
147
147
  "schemas/v2/export-bundle.schema.json": "bd28905a7729437ab7f2ad8bb33e13a371b2bf5605a7eb2962a0d246de312d69",
148
148
  "schemas/v2/form-content-pack-manifest.schema.json": "a1942a124e250a6e9fbdb6b811c5a125e78fbcbcaa46dfc71d0636f24710a339",
@@ -204,13 +204,13 @@
204
204
  "schemas/workspace-file.schema.json": "464de85c2a068243084ee9c1d969bc7cd5d8f7948574e58450d6493c38a0e1e4",
205
205
  "spec/v1/alias-detectors.json": "2401fcb1c18cdd688c018b3d716ae6bca85c5e356220ee2b793bd9d81872412d",
206
206
  "spec/v1/capability-declaration-classes.json": "e7729aed5c4b4e1dd02abab0530f14cc95f5d4070fe51fb139e7f5cccefa00c6",
207
- "spec/v1/core-standard-manifest.json": "a8008e40cb7e5e68ccd4fe6761e563354d34b5ab278722fab75bc7ed4bc40cae",
207
+ "spec/v1/core-standard-manifest.json": "da8798e334fbbdc2078e4f83cab486c9f6c5c3cc32c2297d9e5a85eda15a04ad",
208
208
  "spec/v1/deprecations.json": "2d03f4729810280147ea08c630ea65434f2dc5370567d0aac41c3595f8337d40",
209
209
  "spec/v1/deprecations.schema.json": "3e393c405d2a41b467d8c5e3c468549078df1ce6a6d2588fc488097b95d9b55b",
210
210
  "spec/v1/event-codemap.json": "3da60d884157793a360da532a9fcbbfb5285636db325a74cec94b34622186d97",
211
211
  "spec/v1/event-codemap.schema.json": "d05933b2e88103aff51a2f774df97b9bda065e0fc88dbd9b114cc47a32189174",
212
212
  "spec/v1/extensions.json": "79a60754aa16cbdbdb604f8e5c00038af535a1690a4d07bd5ff7c38f0256a7bc",
213
- "spec/v1/gaps.json": "392a3d7f4b869a67d5861fcd47bc7eca83b6805b95b6520a91d9beb91df51c52",
213
+ "spec/v1/gaps.json": "d91c400b704b83e65dd40dbed1c0331a6d005fdb77d3facce0eacea89c4c7f14",
214
214
  "spec/v1/gaps.schema.json": "8fd83259f556553c9df0f53e7a82ca8c2a4771d471197f69b4e2ae0ceeacfd66",
215
215
  "spec/v1/migrations.json": "8839497d6a4830b53fa7867014a8336f0d725ef2346352e54fb580b7947897af",
216
216
  "spec/v1/migrations.schema.json": "886779aa6c22e646db097f5df210adb018a4dd14a7b815465a18c8a7056c8f72",
@@ -221,7 +221,7 @@
221
221
  "spec/v2/core/conformance.md": "e4d3b34ef5b7c6a34675ed59a086143e8bfd0e00d0d04ce0f2a2ec6245275084",
222
222
  "spec/v2/core/connection-packs.md": "7257339a4fc125011bf89961588c949cb058a0c0f7d9808ad08a5288deb3f8fc",
223
223
  "spec/v2/core/conversation.md": "c9a937e410fdb4e092cec2f05a7cab8b5232745090cfb20041c03c70ccbb5cdc",
224
- "spec/v2/core/errors.md": "619cd74381c41acf33d012eb1afd834e148ac292663a1a6fa6744dbaff9661d9",
224
+ "spec/v2/core/errors.md": "870f1a9c9481fb49c8bd39170f0656c2ae46124afd4472fb7a3c18c67be0e561",
225
225
  "spec/v2/core/events.md": "3df1866a89fb765c78adf79b8d51f96c59584dee9aa88d59179b88a681d827da",
226
226
  "spec/v2/core/form-content-packs.md": "55ea021b5f676f5851f420b3597262fbf6642108bddeb726922f8c5dd96c968b",
227
227
  "spec/v2/core/headers.md": "38c03524e3aeea30862432d203faffb8b0b05ec65136d223e96ab06941c3717b",
@@ -230,23 +230,23 @@
230
230
  "spec/v2/core/identity.md": "d15667552019f64316be9b65c6e5696c10766581405f05da3907fb47f36e6459",
231
231
  "spec/v2/core/interop.md": "9a6b37e07c0235856199ace6b3a84f592fa5903fcf6c442f8a18f4d6b6aa5525",
232
232
  "spec/v2/core/interrupt.md": "1dc94f7c791dd5a547b1abafde6a8a76acd3d2993d288057f302f57911dc83bf",
233
- "spec/v2/core/node-pack-runtimes.md": "c435ad506f618831b6c0a9fd9150d83a5dc6caa1e3d755b949af2ff8949f1140",
233
+ "spec/v2/core/node-pack-runtimes.md": "b6de99daf90a72f08ce0e311e63988198964f99346591e466529d9e95dc4b6d9",
234
234
  "spec/v2/core/oauth.md": "38ec0e70d46f328430138559095f261ae4fcd3d32c2d994a2d3e630a062c0e6c",
235
235
  "spec/v2/core/overview.md": "8f9d4a68b6185664e40d226cb82d9a9270a6c6630e3db59bddff300be781947d",
236
236
  "spec/v2/core/packs.md": "91cd577b4a636c1587ef78742e583a203244b8508b289b01a18a8ef2ef0a9b3e",
237
237
  "spec/v2/core/persistence.md": "d32736bd74e51df7c552565b4105a8ec801ece6d2292c8676421368ee9bffec1",
238
- "spec/v2/core/replay.md": "9050256a417171b184122877aa395d264545bb67c20e045315f42baa539f13cd",
238
+ "spec/v2/core/replay.md": "7c11e0dad22d367b94630e00b435ed8f33d0ab76d36adc65e150212d770ad685",
239
239
  "spec/v2/core/runs.md": "c7dcc5116648f42cadecdcd4c949b194272908cbc4b1fbc7321956d5b3a713af",
240
240
  "spec/v2/core/security-defaults.md": "500471a8db7af9b776ac40b4a9a278c9f3d45e1c1dead880114e7fadc7bee37d",
241
241
  "spec/v2/core/tool-catalog.md": "35f1a3fd509db0fc0490ddf400686fe94dc4b20c98064d5ebe776da516153e60",
242
242
  "spec/v2/core/versioning.md": "0aded71d090c8358c3ce17763c120cfc1cc42531a5eaa1b8a2a7016ed9594069",
243
- "spec/v2/core/webhooks.md": "2a44b100c42dd841fe2b8f87179a981be6c0dd26608ce1b14e077318c4ac8201",
243
+ "spec/v2/core/webhooks.md": "221fc8f3222c34ee094723602f286f1b2acad7931188cad6c3611189c9c6acbb",
244
244
  "spec/v2/core/workflow-chain-packs.md": "ee45d3fede3bb6f0cc6abcf0d6c929c7cd213a0fbe862b738a998f929c4d1102",
245
245
  "spec/v2/corrections.json": "cc74ffde74384b0f261a4f625871d922e8661d654d647a8534e21036595cb280",
246
246
  "spec/v2/corrections.schema.json": "4ac595b9a6d7f66d53de03fe0edbe0dc58de46426932387bfdc0ceb3cf949a3e",
247
247
  "spec/v2/declaration.json": "84bd247804e625b0a5d66f2011726626e8a9b21e55c479cc9ba239e6b5c358a6",
248
248
  "spec/v2/declaration.schema.json": "881c08b455aa12c41a0a0ec43a960ab78b75ff1302188f7eaaa43074ed4cff7a",
249
- "spec/v2/errors.json": "287a8bb487be96a2938b2101dd737ee87336440b3777a37dd44954726ed891b1",
249
+ "spec/v2/errors.json": "1064999c8a00f44ab99ce24995fe9a93e6d2d5778e5eacb6621de0d0af1eb37f",
250
250
  "spec/v2/event-codemap.json": "37869a03cdfd8758b57e6f350641a6ebbd383231cebda51f5473ad85f94ab74c",
251
251
  "spec/v2/event-codemap.schema.json": "b173f2a9bcc0bf9b62a474ce3b91e1431d597e64fd1560fc58662cd8606eaf9c",
252
252
  "spec/v2/ext/README.md": "ff91a503e0795e1b898e37d9e445add2d5975529723f7b32b2599b60a24c1ae3",
@@ -294,9 +294,9 @@
294
294
  "spec/v2/path-manifest.json": "ae9b56d03a701061fd48ad0b73cb0373493f6a4547da92763b422295b5e19535",
295
295
  "spec/v2/peer-dependency-aliases.json": "d10299280abee08258502925bc327293ee413e0108cd6e6ec75ff6110653308d",
296
296
  "spec/v2/profiles.json": "0636f19fceae625390003a347e70ef4797d84766b5c24ce8a02cea52aadebca4",
297
- "spec/v2/release.json": "6849e210dc510d008596f51718f01f8deb32c6f5f9c3114f6e2707e778f38dcc",
297
+ "spec/v2/release.json": "b2fb154e00b0aeb9a64c29d56d99fbd21b9de1872e9a047c81f6c1ee7c50a74c",
298
298
  "spec/v2/retention-floors.json": "eaf3722d95c79947af1d4269ef85117e126518c588cfcf1a2b21b97269f51624",
299
- "spec/v2/surface-baseline.json": "18c79a71b4b65cf8f9f8bf345d3828627bb17673b7279de276c1120d540a4746"
299
+ "spec/v2/surface-baseline.json": "fbf584bd7cb6905f0f8280d7d7ae6746fd30f948dc08b4f80aac0afc760f22ce"
300
300
  },
301
- "corpusCommit": "d0da968bd70f57f4844b58f1b2544029dc576efb"
301
+ "corpusCommit": "bb35ff0f896edfbc7300c5c71e4e33a678e7f815"
302
302
  }
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.41.0
4
+ version: 2.42.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.41.0
4
+ version: 2.42.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.41.0
4
+ version: 2.42.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.41.0",
3
+ "version": "2.42.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": {
@@ -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). 106 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).",
5
+ "description": "GENERATED from spec/v2/errors.json by scripts/generate-error-envelope.mjs (RFC 0171 §B.1). 107 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": [
@@ -82,6 +82,7 @@
82
82
  "interrupt_already_resolved",
83
83
  "pack_dependency_conflict",
84
84
  "pack_integrity_mismatch",
85
+ "replay_context_summary_unavailable",
85
86
  "replay_diverged_at_refusal",
86
87
  "replay_memory_snapshot_unavailable",
87
88
  "run_already_active",
@@ -278,6 +279,7 @@
278
279
  "interrupt_already_resolved": 409,
279
280
  "pack_dependency_conflict": 409,
280
281
  "pack_integrity_mismatch": 409,
282
+ "replay_context_summary_unavailable": 409,
281
283
  "replay_diverged_at_refusal": 409,
282
284
  "replay_memory_snapshot_unavailable": 409,
283
285
  "run_already_active": 409,
@@ -4,7 +4,7 @@
4
4
  "provenance": {
5
5
  "suite": {
6
6
  "package": "@openwop/openwop-conformance",
7
- "version": "2.41.0"
7
+ "version": "2.42.0"
8
8
  },
9
9
  "note": "Derived from the corpus at generation time. Regenerate with --write; verify with --check."
10
10
  },
@@ -420,5 +420,5 @@
420
420
  "$id": "https://openwop.dev/spec/v1/workspace-file.schema.json"
421
421
  }
422
422
  ],
423
- "digest": "424ec07ced1562f88cdeb29993927cfb80388b0ce6b17cd49dd70f2b3385dcb9"
423
+ "digest": "f743bd2a34a4fdc805406204d49e27a6389fc5a07803c8d05add8eaeffed8999"
424
424
  }
package/spec/v1/gaps.json CHANGED
@@ -12702,8 +12702,8 @@
12702
12702
  "surface": "Whether `GET /webhooks/{webhookId}/dead-letters` (RFC 0188) still answers after that subscription is unregistered, and whether existing dead-letter records outlive the unregister, is unstated. RFC 0188 requires `404 not_found` only when the facet is not advertised.",
12703
12703
  "witness": "unclassified",
12704
12704
  "requirementId": null,
12705
- "disposition": "transferred",
12706
- "target": "RFCS/0188-webhook-dead-letter-read.md",
12705
+ "disposition": "closed",
12706
+ "target": null,
12707
12707
  "sources": [
12708
12708
  {
12709
12709
  "file": "RFCS/registers/0215-webhook-delivery-isolation.gaps.md",
@@ -12847,6 +12847,40 @@
12847
12847
  }
12848
12848
  ]
12849
12849
  },
12850
+ {
12851
+ "id": "openwop.gap.0217.1",
12852
+ "rfc": "0217",
12853
+ "local": "G1",
12854
+ "section": "§Compatibility",
12855
+ "surface": "MyndHyve's not-found branch answers the unregistered code `subscription_not_found`.",
12856
+ "witness": "unclassified",
12857
+ "requirementId": null,
12858
+ "disposition": "externally-gated",
12859
+ "target": "myndhyve-not-found-code",
12860
+ "sources": [
12861
+ {
12862
+ "file": "RFCS/registers/0217-dead-letter-read-after-unregister.gaps.md",
12863
+ "token": "G1"
12864
+ }
12865
+ ]
12866
+ },
12867
+ {
12868
+ "id": "openwop.gap.0217.2",
12869
+ "rfc": "0217",
12870
+ "local": "G2",
12871
+ "section": "§Compatibility",
12872
+ "surface": "`subscription_not_found` is asserted by the major-1 scenario `webhook-negative` but appears in no v1 or v2 registry.",
12873
+ "witness": "unclassified",
12874
+ "requirementId": null,
12875
+ "disposition": "transferred",
12876
+ "target": "spec/v1",
12877
+ "sources": [
12878
+ {
12879
+ "file": "RFCS/registers/0217-dead-letter-read-after-unregister.gaps.md",
12880
+ "token": "G2"
12881
+ }
12882
+ ]
12883
+ },
12850
12884
  {
12851
12885
  "id": "openwop.gap.spec.a2a-integration.g1",
12852
12886
  "rfc": "0152",
@@ -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 **106** codes. `schemas/v2/error-envelope.schema.json` is GENERATED from it and MUST NOT be edited by hand.
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 **107** 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 overview.md §0.
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` (106 codes; `retriable` and `statusSource` are in the registry).
31
+ Generated from `spec/v2/errors.json` (107 codes; `retriable` and `statusSource` are in the registry).
32
32
 
33
33
  Code | Status
34
34
  --- | ---
@@ -98,6 +98,7 @@ Code | Status
98
98
  `interrupt_already_resolved` | 409
99
99
  `pack_dependency_conflict` | 409
100
100
  `pack_integrity_mismatch` | 409
101
+ `replay_context_summary_unavailable` | 409
101
102
  `replay_diverged_at_refusal` | 409
102
103
  `replay_memory_snapshot_unavailable` | 409
103
104
  `run_already_active` | 409
@@ -17,4 +17,4 @@ A host that loads `wasm` packs MUST advertise `nodePackRuntimes.wasm` with at le
17
17
 
18
18
  ## The MCP registry record
19
19
 
20
- RFC 0203 (`Active`): a `remote` runtime MAY carry `mcpServer`, an inline subset of an MCP Registry `server.json` (schema `2025-12-11`): `name`, `description`, `version`, optional `title`, `websiteUrl` and `repository`, and exactly one `remotes[]` entry of `type: "streamable-http"` with an `https://` URL. It has no `packages[]`, `headers`, `variables` or `_meta`, so it carries no install instruction and no credential. `mcpServer` under any other language, or an `entry` that differs from `remotes[0].url`, makes the manifest invalid (`pack_validation_failed`). The record is by value; this contract defines no registry lookup. A host SHOULD NOT treat `name` as a verified identity: an inline record carries no proof of namespace ownership. A host that authenticates to the server does so through the node's `requiredCredentials` or `auth`.
20
+ RFC 0203 (`Accepted`): a `remote` runtime MAY carry `mcpServer`, an inline subset of an MCP Registry `server.json` (schema `2025-12-11`): `name`, `description`, `version`, optional `title`, `websiteUrl` and `repository`, and exactly one `remotes[]` entry of `type: "streamable-http"` with an `https://` URL. It has no `packages[]`, `headers`, `variables` or `_meta`, so it carries no install instruction and no credential. `mcpServer` under any other language, or an `entry` that differs from `remotes[0].url`, makes the manifest invalid (`pack_validation_failed`). The record is by value; this contract defines no registry lookup. A host SHOULD NOT treat `name` as a verified identity: an inline record carries no proof of namespace ownership. A host that authenticates to the server does so through the node's `requiredCredentials` or `auth`.
@@ -52,6 +52,7 @@ When a replayed node produces an event different from the source at the same seq
52
52
  | `replay_diverged_at_refusal` | fork fails, `409` | The source obtained a valid envelope and the replay a refusal, or the reverse. The host MUST NOT substitute silently; it MUST emit `replay.diverged-at-refusal` naming the node and both envelope kinds and fail the replay with this code (RFC 0041 §B). |
53
53
  | `replay_source_missing` | `node.failed` payload; the fork request still returns `201` | A side-effecting node reached with no recorded source outcome for `(nodeId, attempt)` (§Suppression). |
54
54
  | `replay_memory_snapshot_unavailable` | fork refused, `409` | The host cannot serve memory state as-of `fromSeq`. It MUST refuse rather than substitute current memory; `details.fromSeq` SHOULD name the index (RFC 0039 §B). |
55
+ | `replay_context_summary_unavailable` | fork refused, `409` | The host advertises `multiAgent.executionModel.contextBudget.summarization` and cannot serve, as-of `fromSeq`, a summary artifact (`context.summarized.summaryRef`) the replay would reuse. It MUST refuse rather than re-summarize; `details.fromSeq` SHOULD name the index (RFC 0111). |
55
56
 
56
57
  ## Suppression
57
58
 
@@ -66,7 +66,7 @@ A host advertising both majors MUST send, on every delivery, the `X-openwop-*` f
66
66
  Durable delivery is an obligation of the `webhooks` surface (RFC 0173 §B; security-defaults.md). A host MUST:
67
67
 
68
68
  - retry a failed attempt per its advertised `retryPolicy` (`maxAttempts`, `backoff ∈ none | fixed | exponential`) with backoff between attempts;
69
- - route a delivery whose retries are exhausted to the dead-letter sink, rather than drop it. A host advertising `webhooks.deadLetter` MUST serve `GET /webhooks/{webhookId}/dead-letters` (RFC 0188), and that record MUST NOT carry the delivered body, the delivery headers, or the subscription secret — a dead-letter read names a delivery, it does not replay one. This sink is the DELIVERY sink; the `deadLetter` family (RFC 0053) is the RUN sink and is a different thing;
69
+ - route a delivery whose retries are exhausted to the dead-letter sink, rather than drop it. A host advertising `webhooks.deadLetter` MUST serve `GET /webhooks/{webhookId}/dead-letters` (RFC 0188), and that record MUST NOT carry the delivered body, the delivery headers, or the subscription secret — a dead-letter read names a delivery, it does not replay one. The read belongs to a live subscription: after `unregisterWebhook` answers `204`, `GET /webhooks/{webhookId}/dead-letters` for that id MUST answer `404 not_found`, exactly as for a same-tenant id the host never minted, and the host MAY discard that subscription's records at the unregister. `expiresAt` bounds a record's retention only while its subscription exists (RFC 0217). This sink is the DELIVERY sink; the `deadLetter` family (RFC 0053) is the RUN sink and is a different thing;
70
70
  - deliver each matching event at least once; a receiver MAY observe the same event more than once;
71
71
  - not make the start of an attempt to one subscription wait for an attempt to a *different* subscription to finish (answered, failed, or timed out): one subscription's slow or dead receiver MUST NOT delay another subscription's deliveries (invariant `webhook-delivery-isolation`, RFC 0215 §A.1). The rule is about when an attempt starts, not how soon after an event it must start, and it names no mechanism: a lane per subscription, a concurrent pool or asynchronous I/O all meet it, and a sequential loop over a batch does not;
72
72
  - sustain that while at least **8** subscriptions have attempts outstanding that their receivers have not answered (RFC 0215 §A.2). A host MAY bound concurrent attempts beyond that, and SHOULD NOT let one tenant's unanswered attempts occupy capacity another tenant's deliveries need (§A.3);
@@ -2,7 +2,7 @@
2
2
  "$schema": "https://openwop.dev/spec/v2/errors.schema.json",
3
3
  "$comment": "RFC 0171 §B.1 — the error registry: one row per code {code, httpStatus, retriable, details, since, deprecated?}. schemas/v2/error-envelope.schema.json is GENERATED from it (scripts/generate-error-envelope.mjs). Retry timing lives in Retry-After only (§B.2). statusSource records whether the status was stated in v1 prose, a v1 convention, or decided here. details is null until a code's details schema is registered (a null row means details is an open object for that code — closure over details is the RFC 0171 Phase 3 follow-up G-row).",
4
4
  "version": "2.0",
5
- "updated": "2026-09-23",
5
+ "updated": "2026-09-26",
6
6
  "vendorCodePattern": "^(?!openwop\\.)[a-z][a-z0-9]*(-[a-z0-9]+)*\\.[a-z][a-z0-9_]*$",
7
7
  "rows": [
8
8
  {
@@ -630,6 +630,15 @@
630
630
  "since": "1.0",
631
631
  "source": "spec/v1/node-packs.md"
632
632
  },
633
+ {
634
+ "code": "replay_context_summary_unavailable",
635
+ "httpStatus": 409,
636
+ "statusSource": "v2 decision (sibling of replay_memory_snapshot_unavailable)",
637
+ "retriable": false,
638
+ "details": null,
639
+ "since": "2.42",
640
+ "source": "RFC 0111"
641
+ },
633
642
  {
634
643
  "code": "replay_diverged_at_refusal",
635
644
  "httpStatus": 409,
@@ -642,7 +651,7 @@
642
651
  {
643
652
  "code": "replay_memory_snapshot_unavailable",
644
653
  "httpStatus": 409,
645
- "statusSource": "v1 convention",
654
+ "statusSource": "v2 decision (v1 host-sample-test-seams.md §MAE-3 stated 422; the v1 error list states no status)",
646
655
  "retriable": false,
647
656
  "details": null,
648
657
  "since": "1.0",
@@ -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.41.0",
4
- "corpusTag": "v2.41.0",
3
+ "version": "2.42.0",
4
+ "corpusTag": "v2.42.0",
5
5
  "updated": "2026-09-26"
6
6
  }
@@ -4,7 +4,7 @@
4
4
  "schemas/v2/**/*.json",
5
5
  "spec/v2/path-manifest.json"
6
6
  ],
7
- "release": "2.41.0",
7
+ "release": "2.42.0",
8
8
  "kinds": {
9
9
  "union": [
10
10
  "channel",
@@ -18,7 +18,7 @@
18
18
  "type"
19
19
  ]
20
20
  },
21
- "count": 7960,
21
+ "count": 7961,
22
22
  "surfaces": [
23
23
  "schemas/v2/a2a-task-state.schema.json#/contextId|type|string",
24
24
  "schemas/v2/a2a-task-state.schema.json#/interruptKind|enum-member|\"approval\"",
@@ -4883,6 +4883,7 @@
4883
4883
  "schemas/v2/error-envelope.schema.json#/error|enum-member|\"protocol_version_unsupported\"",
4884
4884
  "schemas/v2/error-envelope.schema.json#/error|enum-member|\"rate_limited\"",
4885
4885
  "schemas/v2/error-envelope.schema.json#/error|enum-member|\"recursion_limit_exceeded\"",
4886
+ "schemas/v2/error-envelope.schema.json#/error|enum-member|\"replay_context_summary_unavailable\"",
4886
4887
  "schemas/v2/error-envelope.schema.json#/error|enum-member|\"replay_diverged_at_refusal\"",
4887
4888
  "schemas/v2/error-envelope.schema.json#/error|enum-member|\"replay_memory_snapshot_unavailable\"",
4888
4889
  "schemas/v2/error-envelope.schema.json#/error|enum-member|\"replay_source_missing\"",