@openwop/spec-artifacts 2.3.1 → 2.3.2

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.3.1",
5
- "corpusTag": "v2.3.1",
4
+ "version": "2.3.2",
5
+ "corpusTag": "v2.3.2",
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": "435a0973ffffcf4cc97a976d74960f5009a192928024892f16ce3a09032be58f",
13
- "api/v2/asyncapi.yaml": "92073792728f18b3f6359c0890e476c7fd8605f4ead64e5ccf2158122be10288",
14
- "api/v2/openapi.yaml": "05a0e36372f012ceac51f6a20c757e73d6a61c77c902f2730a886390c7dba545",
12
+ "api/seams-v2.yaml": "7c79a7846a32c54f4281bf62dc00f7fa98d512da21d5665f29ab1e184eecb07e",
13
+ "api/v2/asyncapi.yaml": "ca998bb1cfc15d0f43ca113e329eec688fcaf8cfa058d9d146678baa6a7ae88b",
14
+ "api/v2/openapi.yaml": "107e30840cc96f0ba8ff01bc84614b4e6d5ca59502141b586acc1f9c67fc7ac1",
15
15
  "api/v2/redocly.yaml": "1e66b60e6118ad11a823bb620678be464d99dfe50a40e3e6f93ec9429b88b34c",
16
16
  "schemas/README.md": "0c0b737ffcf8f30e7d2809cec8a498232de710f41443212922ad8337cdde0b51",
17
17
  "schemas/a2a-task-state.schema.json": "c9365918f993f943b4b619d42551eb066a1ed33a08d895d51b395432a5b1f1bc",
@@ -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": "72d3332fad8fa36d07439c830acf352eefc6da2379374faa2ebbe49e98b8cb08",
144
+ "schemas/v2/error-envelope.schema.json": "9c8f747e5bea81943d70e0930bc7d26586a4c3a3d90be77f46359b19b7e56cbe",
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": "307884e57946703b6f86ec283034bf56beb68bea4a000743ebbc9eebeed31b07",
@@ -200,7 +200,7 @@
200
200
  "schemas/workspace-file.schema.json": "464de85c2a068243084ee9c1d969bc7cd5d8f7948574e58450d6493c38a0e1e4",
201
201
  "spec/v1/alias-detectors.json": "fee4594ef49953953ffcd0b3813300067d16b3e65ebff2aac722034ac9b3f545",
202
202
  "spec/v1/capability-declaration-classes.json": "e7729aed5c4b4e1dd02abab0530f14cc95f5d4070fe51fb139e7f5cccefa00c6",
203
- "spec/v1/core-standard-manifest.json": "a6fecfb708deb4d6fa5fb65b28fcdaff5101b73f8b9812295ab5c6e44105cd25",
203
+ "spec/v1/core-standard-manifest.json": "bc852483ed0fe13b8d1898aa146794b05ab370d5c336bd26a8d25b25ae69b464",
204
204
  "spec/v1/deprecations.json": "508071308e762c281807b487e8f3840a1a69b978071894593e18f2e2d3e4b5c0",
205
205
  "spec/v1/deprecations.schema.json": "18c87e78bedc210431f795ae44c5b5d202f2f3317850d5cf86867d4f1fa1cdfb",
206
206
  "spec/v1/event-codemap.json": "3da60d884157793a360da532a9fcbbfb5285636db325a74cec94b34622186d97",
@@ -216,8 +216,8 @@
216
216
  "spec/v2/core/capabilities.md": "c5107a4964e487c20bbb5254cfe1f706e0d9ba7e34da9070bc43b50b385e7948",
217
217
  "spec/v2/core/conformance.md": "622084e3c74c4549087f4d861b1bb98cec201a0c5aec23788d27f53a355fde3b",
218
218
  "spec/v2/core/connection-packs.md": "1d759681e2962f5103228c52c45f24607ed4bb9ae73e30605f690c1d5a59e9ee",
219
- "spec/v2/core/errors.md": "74fdb5862f432a831cf0c2eadbe0c8cca6b2660ec578180ae33db54773a1df28",
220
- "spec/v2/core/events.md": "8162bb96730ef8a98b19eb180a0251a107fd629d993fe57345dacf81e53561ca",
219
+ "spec/v2/core/errors.md": "ad85fc830139e587f20deabf88297b91b1fb6ce31e80d5442624a650246ab16e",
220
+ "spec/v2/core/events.md": "20112f459e7f1bcab0e93fbfc2e28719ecd1435228e87c5476b9eaa691558603",
221
221
  "spec/v2/core/form-content-packs.md": "6ffaae85d4550be48dd53fb6e2959af8aceb35bd87c5343b722885084f197713",
222
222
  "spec/v2/core/headers.md": "2dd67d71673539e16612f09f3f2513a384f6566052d7cd8a00885885689854c2",
223
223
  "spec/v2/core/idempotency.md": "b86c352d964aebad532727f314e26ed2177d49de382076fa64d3162e2f56118d",
@@ -235,7 +235,7 @@
235
235
  "spec/v2/core/workflow-chain-packs.md": "ef2b07d2d99334eaec0cc370314e2ad2f84ea58deb699e5d92e6e52d6056613f",
236
236
  "spec/v2/declaration.json": "a09bac61c1b825e4a77b5abc0f86f1f8c20c381e0650eb08c2f6d0ef0aaec1dc",
237
237
  "spec/v2/declaration.schema.json": "c86e3083fb9789c1958ecb4576cc6f71aa90e6f339521139238543ed08211dd4",
238
- "spec/v2/errors.json": "f179414a92f30b5dadf26e9e57699649a67324bd7186d5287647d17605d137d3",
238
+ "spec/v2/errors.json": "4ff032033f02d7e3fb4204581456408ba5e7642b438c1f349bbd1c264e63e419",
239
239
  "spec/v2/event-codemap.json": "37869a03cdfd8758b57e6f350641a6ebbd383231cebda51f5473ad85f94ab74c",
240
240
  "spec/v2/event-codemap.schema.json": "b173f2a9bcc0bf9b62a474ce3b91e1431d597e64fd1560fc58662cd8606eaf9c",
241
241
  "spec/v2/ext/README.md": "c7dea12c48772047f18b111e73be1c236460e72d9bf98026351d148a2ac4f608",
@@ -271,8 +271,8 @@
271
271
  "spec/v2/path-manifest.json": "a6f4e652e866889e8bde815874062f62929aee95dc8e58e7152c56adee262163",
272
272
  "spec/v2/peer-dependency-aliases.json": "d10299280abee08258502925bc327293ee413e0108cd6e6ec75ff6110653308d",
273
273
  "spec/v2/profiles.json": "0636f19fceae625390003a347e70ef4797d84766b5c24ce8a02cea52aadebca4",
274
- "spec/v2/release.json": "1538b049aded80392b532e908ad2014d0ffef5332d3e669e96ce67955222d146",
274
+ "spec/v2/release.json": "7b9a9aa90aa93dcf69076cd0a47c08043f6cf02b104280ab906deb0058c2caad",
275
275
  "spec/v2/retention-floors.json": "eaf3722d95c79947af1d4269ef85117e126518c588cfcf1a2b21b97269f51624"
276
276
  },
277
- "corpusCommit": "01a0723e291e8ef278530aff82b5d9c66c754781"
277
+ "corpusCommit": "bad44bb22b53e538ec05e867299c4c2dddbfee5f"
278
278
  }
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.3.1
4
+ version: 2.3.2
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.3.1
4
+ version: 2.3.2
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.3.1
4
+ version: 2.3.2
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.1",
3
+ "version": "2.3.2",
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). 97 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). 98 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": [
@@ -107,6 +107,7 @@
107
107
  "client_version_unsupported",
108
108
  "rate_limited",
109
109
  "event_type_unmapped",
110
+ "payload_unprojectable",
110
111
  "internal_error",
111
112
  "pack_load_failure",
112
113
  "credential_unavailable",
@@ -164,6 +165,36 @@
164
165
  "additionalProperties": true,
165
166
  "x-openwop-error": "run_state_conflict"
166
167
  },
168
+ {
169
+ "type": "object",
170
+ "additionalProperties": false,
171
+ "required": [
172
+ "type",
173
+ "keys"
174
+ ],
175
+ "properties": {
176
+ "type": {
177
+ "type": "string",
178
+ "description": "the event type whose payload could not be projected"
179
+ },
180
+ "keys": {
181
+ "type": "array",
182
+ "items": {
183
+ "type": "string"
184
+ },
185
+ "minItems": 1,
186
+ "description": "the property names the host could neither carry nor seat"
187
+ },
188
+ "eventId": {
189
+ "$ref": "ids.schema.json#/$defs/eventId"
190
+ },
191
+ "sequence": {
192
+ "type": "integer",
193
+ "minimum": 0
194
+ }
195
+ },
196
+ "x-openwop-error": "payload_unprojectable"
197
+ },
167
198
  {
168
199
  "type": "object",
169
200
  "additionalProperties": true
@@ -264,6 +295,7 @@
264
295
  "client_version_unsupported": 426,
265
296
  "rate_limited": 429,
266
297
  "event_type_unmapped": 500,
298
+ "payload_unprojectable": 500,
267
299
  "internal_error": 500,
268
300
  "pack_load_failure": 500,
269
301
  "credential_unavailable": 501,
@@ -4,7 +4,7 @@
4
4
  "provenance": {
5
5
  "suite": {
6
6
  "package": "@openwop/openwop-conformance",
7
- "version": "2.3.1"
7
+ "version": "2.3.2"
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": "6a7b3fb28350497327f8c773d6b4d74945ac4da608543faabe50c2c911ee2802"
422
+ "digest": "8ca0ec1b640633e708fa9d8600e9bb8b7a66ca0edfb4b0945f01ba26726eb02c"
423
423
  }
@@ -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 **96** 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 **98** 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` (97 codes; `retriable` and `statusSource` are in the registry).
31
+ Generated from `spec/v2/errors.json` (98 codes; `retriable` and `statusSource` are in the registry).
32
32
 
33
33
  Code | Status
34
34
  --- | ---
@@ -125,6 +125,7 @@ Code | Status
125
125
  `rate_limited` | 429
126
126
  `event_type_unmapped` | 500
127
127
  `internal_error` | 500
128
+ `payload_unprojectable` | 500
128
129
  `pack_load_failure` | 500
129
130
  `credential_unavailable` | 501
130
131
  `pack_registry_unreachable` | 503
@@ -102,8 +102,8 @@ Each frame carries `id:`, `event:` and `data:`: `id:` is the `sequence`, `event:
102
102
  | `afterSequence` | Integer ≥ 0; the response carries events with `sequence > afterSequence`. Omission means "from the first event" (sequence 0). `lastSequence` and `since` are not parameters. |
103
103
  | `timeout` | Seconds to wait for new events, 1..60, default 30. |
104
104
 
105
- The response is `{ runId, events, lastSequence, status, isTerminal }` (closed): `lastSequence` is the highest sequence in the log at the time of the response, `-1` when the log is empty, and has no other meaning; `status` is the snapshot status; `isTerminal` is whether the run is terminal. A cursor past the end of the log MUST return `200` with an empty `events` array. The shape is declared here and generated into `api/v2/openapi.yaml` from one definition.
105
+ The response is `{ runId, events, lastSequence, status, isTerminal }` (closed): `lastSequence` is the highest sequence in the log at the time of the response, `-1` when the log is empty; `status` is the snapshot status; `isTerminal` is whether the run is terminal. A cursor past the end of the log MUST return `200` with an empty `events` array. The shape is declared here and generated into `api/v2/openapi.yaml` from one definition.
106
106
 
107
107
  ## Era-2 logs
108
108
 
109
- 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 (defs hatch `^(openwop-|x-|vendor\.)`; RFC 0185). Fork and replay over an era-2 parent: replay.md.
109
+ 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.
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "$schema": "https://openwop.dev/spec/v2/errors.schema.json",
3
- "$comment": "RFC 0171 \u00a7B.1 \u2014 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 (\u00a7B.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 \u2014 closure over details is the RFC 0171 Phase 3 follow-up G-row).",
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-05",
5
+ "updated": "2026-09-17",
6
6
  "vendorCodePattern": "^(?!openwop\\.)[a-z][a-z0-9]*(-[a-z0-9]+)*\\.[a-z][a-z0-9_]*$",
7
7
  "rows": [
8
8
  {
@@ -21,7 +21,7 @@
21
21
  "retriable": false,
22
22
  "details": null,
23
23
  "since": "1.0",
24
- "source": "spec/v1/rest-endpoints.md \u00a7Error response shape"
24
+ "source": "spec/v1/rest-endpoints.md §Error response shape"
25
25
  },
26
26
  {
27
27
  "code": "credential_scope_unsupported",
@@ -30,7 +30,7 @@
30
30
  "retriable": false,
31
31
  "details": null,
32
32
  "since": "1.0",
33
- "source": "spec/v1/rest-endpoints.md \u00a7Error response shape"
33
+ "source": "spec/v1/rest-endpoints.md §Error response shape"
34
34
  },
35
35
  {
36
36
  "code": "delegation_chain_cyclic",
@@ -39,7 +39,7 @@
39
39
  "retriable": false,
40
40
  "details": null,
41
41
  "since": "2.0",
42
- "source": "RFC 0170 \u00a7B.1"
42
+ "source": "RFC 0170 §B.1"
43
43
  },
44
44
  {
45
45
  "code": "delegation_chain_too_long",
@@ -48,7 +48,7 @@
48
48
  "retriable": false,
49
49
  "details": null,
50
50
  "since": "2.0",
51
- "source": "RFC 0170 \u00a7B.1"
51
+ "source": "RFC 0170 §B.1"
52
52
  },
53
53
  {
54
54
  "code": "idempotency_key_invalid",
@@ -57,7 +57,7 @@
57
57
  "retriable": false,
58
58
  "details": null,
59
59
  "since": "2.0",
60
- "source": "RFC 0170 \u00a7D.3"
60
+ "source": "RFC 0170 §D.3"
61
61
  },
62
62
  {
63
63
  "code": "interop_version_unsupported",
@@ -66,7 +66,7 @@
66
66
  "retriable": false,
67
67
  "details": null,
68
68
  "since": "1.0",
69
- "source": "spec/v1/rest-endpoints.md \u00a7Error response shape"
69
+ "source": "spec/v1/rest-endpoints.md §Error response shape"
70
70
  },
71
71
  {
72
72
  "code": "oauth_provider_unsupported",
@@ -75,7 +75,7 @@
75
75
  "retriable": false,
76
76
  "details": null,
77
77
  "since": "1.0",
78
- "source": "spec/v1/rest-endpoints.md \u00a7Error response shape"
78
+ "source": "spec/v1/rest-endpoints.md §Error response shape"
79
79
  },
80
80
  {
81
81
  "code": "oauth_scope_unsupported",
@@ -84,7 +84,7 @@
84
84
  "retriable": false,
85
85
  "details": null,
86
86
  "since": "1.0",
87
- "source": "spec/v1/rest-endpoints.md \u00a7Error response shape"
87
+ "source": "spec/v1/rest-endpoints.md §Error response shape"
88
88
  },
89
89
  {
90
90
  "code": "pack_dependency_cycle",
@@ -102,7 +102,7 @@
102
102
  "retriable": false,
103
103
  "details": null,
104
104
  "since": "2.0",
105
- "source": "RFC 0177 \u00a7A.1"
105
+ "source": "RFC 0177 §A.1"
106
106
  },
107
107
  {
108
108
  "code": "pack_integrity_failure",
@@ -174,7 +174,7 @@
174
174
  "retriable": false,
175
175
  "details": null,
176
176
  "since": "2.0",
177
- "source": "RFC 0172 \u00a7A.3"
177
+ "source": "RFC 0172 §A.3"
178
178
  },
179
179
  {
180
180
  "code": "schedule_horizon_exceeded",
@@ -183,7 +183,7 @@
183
183
  "retriable": false,
184
184
  "details": null,
185
185
  "since": "1.0",
186
- "source": "spec/v1/rest-endpoints.md \u00a7Error response shape"
186
+ "source": "spec/v1/rest-endpoints.md §Error response shape"
187
187
  },
188
188
  {
189
189
  "code": "sub_chain_cycle",
@@ -192,7 +192,7 @@
192
192
  "retriable": false,
193
193
  "details": null,
194
194
  "since": "2.0",
195
- "source": "RFC 0133 \u00a7Unresolved 3 (resolved: maxSubChainDepth 8, fail closed); carried into v2 by RFC 0177 \u00a7E"
195
+ "source": "RFC 0133 §Unresolved 3 (resolved: maxSubChainDepth 8, fail closed); carried into v2 by RFC 0177 §E"
196
196
  },
197
197
  {
198
198
  "code": "sub_chain_depth_exceeded",
@@ -201,7 +201,7 @@
201
201
  "retriable": false,
202
202
  "details": null,
203
203
  "since": "2.0",
204
- "source": "RFC 0133 \u00a7Unresolved 3 \u2014 the depth ceiling breach (distinct from a cycle)"
204
+ "source": "RFC 0133 §Unresolved 3 — the depth ceiling breach (distinct from a cycle)"
205
205
  },
206
206
  {
207
207
  "code": "unsupported_stream_mode",
@@ -226,13 +226,13 @@
226
226
  "debug"
227
227
  ]
228
228
  },
229
- "description": "Each individual mode the host serves; combinations are not listed (events.md \u00a7The events channel)."
229
+ "description": "Each individual mode the host serves; combinations are not listed (events.md §The events channel)."
230
230
  }
231
231
  },
232
232
  "additionalProperties": true
233
233
  },
234
234
  "since": "1.0",
235
- "source": "api/openapi.yaml UnsupportedStreamMode (RFC 0171 \u00a7B.1 folds the one-member enum)"
235
+ "source": "api/openapi.yaml UnsupportedStreamMode (RFC 0171 §B.1 folds the one-member enum)"
236
236
  },
237
237
  {
238
238
  "code": "until_in_past",
@@ -241,7 +241,7 @@
241
241
  "retriable": false,
242
242
  "details": null,
243
243
  "since": "2.0",
244
- "source": "RFC 0169 \u00a7A.3 (validation_error details.reason in v1; a code in v2)"
244
+ "source": "RFC 0169 §A.3 (validation_error details.reason in v1; a code in v2)"
245
245
  },
246
246
  {
247
247
  "code": "validation_error",
@@ -250,7 +250,7 @@
250
250
  "retriable": false,
251
251
  "details": null,
252
252
  "since": "1.0",
253
- "source": "spec/v1/rest-endpoints.md \u00a7Error response shape"
253
+ "source": "spec/v1/rest-endpoints.md §Error response shape"
254
254
  },
255
255
  {
256
256
  "code": "webhook_url_rejected",
@@ -259,7 +259,7 @@
259
259
  "retriable": false,
260
260
  "details": null,
261
261
  "since": "2.0",
262
- "source": "spec/v2/core/webhooks.md \u00a7Egress"
262
+ "source": "spec/v2/core/webhooks.md §Egress"
263
263
  },
264
264
  {
265
265
  "code": "audience_mismatch",
@@ -268,7 +268,7 @@
268
268
  "retriable": false,
269
269
  "details": null,
270
270
  "since": "2.0",
271
- "source": "RFC 0170 \u00a7B.1"
271
+ "source": "RFC 0170 §B.1"
272
272
  },
273
273
  {
274
274
  "code": "connector_auth_expired",
@@ -277,7 +277,7 @@
277
277
  "retriable": false,
278
278
  "details": null,
279
279
  "since": "1.0",
280
- "source": "spec/v1/rest-endpoints.md \u00a7Error response shape"
280
+ "source": "spec/v1/rest-endpoints.md §Error response shape"
281
281
  },
282
282
  {
283
283
  "code": "credential_revoked",
@@ -286,7 +286,7 @@
286
286
  "retriable": false,
287
287
  "details": null,
288
288
  "since": "2.0",
289
- "source": "RFC 0170 \u00a7B.3"
289
+ "source": "RFC 0170 §B.3"
290
290
  },
291
291
  {
292
292
  "code": "delegation_expired",
@@ -295,7 +295,7 @@
295
295
  "retriable": false,
296
296
  "details": null,
297
297
  "since": "2.0",
298
- "source": "RFC 0170 \u00a7B.1"
298
+ "source": "RFC 0170 §B.1"
299
299
  },
300
300
  {
301
301
  "code": "identity_unresolvable",
@@ -304,7 +304,7 @@
304
304
  "retriable": false,
305
305
  "details": null,
306
306
  "since": "2.0",
307
- "source": "RFC 0170 \u00a7B.1"
307
+ "source": "RFC 0170 §B.1"
308
308
  },
309
309
  {
310
310
  "code": "identity_unverified",
@@ -313,7 +313,7 @@
313
313
  "retriable": false,
314
314
  "details": null,
315
315
  "since": "2.0",
316
- "source": "RFC 0170 \u00a7B.1 / RFC 0154"
316
+ "source": "RFC 0170 §B.1 / RFC 0154"
317
317
  },
318
318
  {
319
319
  "code": "interrupt_token_invalid",
@@ -322,7 +322,7 @@
322
322
  "retriable": false,
323
323
  "details": null,
324
324
  "since": "2.0",
325
- "source": "RFC 0170 \u00a7E.1"
325
+ "source": "RFC 0170 §E.1"
326
326
  },
327
327
  {
328
328
  "code": "key_revoked",
@@ -331,7 +331,7 @@
331
331
  "retriable": false,
332
332
  "details": null,
333
333
  "since": "1.0",
334
- "source": "spec/v1/rest-endpoints.md \u00a7Error response shape"
334
+ "source": "spec/v1/rest-endpoints.md §Error response shape"
335
335
  },
336
336
  {
337
337
  "code": "sender_constraint_missing",
@@ -340,7 +340,7 @@
340
340
  "retriable": false,
341
341
  "details": null,
342
342
  "since": "2.0",
343
- "source": "RFC 0170 \u00a7B.4"
343
+ "source": "RFC 0170 §B.4"
344
344
  },
345
345
  {
346
346
  "code": "unauthenticated",
@@ -349,7 +349,7 @@
349
349
  "retriable": false,
350
350
  "details": null,
351
351
  "since": "1.0",
352
- "source": "spec/v1/rest-endpoints.md \u00a7Error response shape"
352
+ "source": "spec/v1/rest-endpoints.md §Error response shape"
353
353
  },
354
354
  {
355
355
  "code": "credential_forbidden",
@@ -358,7 +358,7 @@
358
358
  "retriable": false,
359
359
  "details": null,
360
360
  "since": "1.0",
361
- "source": "spec/v1/rest-endpoints.md \u00a7Error response shape"
361
+ "source": "spec/v1/rest-endpoints.md §Error response shape"
362
362
  },
363
363
  {
364
364
  "code": "delegation_scope_amplified",
@@ -367,7 +367,7 @@
367
367
  "retriable": false,
368
368
  "details": null,
369
369
  "since": "2.0",
370
- "source": "RFC 0170 \u00a7B.1"
370
+ "source": "RFC 0170 §B.1"
371
371
  },
372
372
  {
373
373
  "code": "forbidden",
@@ -394,7 +394,7 @@
394
394
  "retriable": false,
395
395
  "details": null,
396
396
  "since": "2.0",
397
- "source": "RFC 0170 \u00a7D.1 (an id whose tenant segment is not the caller's)"
397
+ "source": "RFC 0170 §D.1 (an id whose tenant segment is not the caller's)"
398
398
  },
399
399
  {
400
400
  "code": "mock_provider_forbidden",
@@ -421,7 +421,7 @@
421
421
  "retriable": false,
422
422
  "details": null,
423
423
  "since": "1.0",
424
- "source": "spec/v1/rest-endpoints.md \u00a7Error response shape"
424
+ "source": "spec/v1/rest-endpoints.md §Error response shape"
425
425
  },
426
426
  {
427
427
  "code": "sandbox_capability_denied",
@@ -430,7 +430,7 @@
430
430
  "retriable": false,
431
431
  "details": null,
432
432
  "since": "1.0",
433
- "source": "spec/v1/rest-endpoints.md \u00a7Error response shape"
433
+ "source": "spec/v1/rest-endpoints.md §Error response shape"
434
434
  },
435
435
  {
436
436
  "code": "sandbox_escape_attempt",
@@ -439,7 +439,7 @@
439
439
  "retriable": false,
440
440
  "details": null,
441
441
  "since": "1.0",
442
- "source": "spec/v1/rest-endpoints.md \u00a7Error response shape"
442
+ "source": "spec/v1/rest-endpoints.md §Error response shape"
443
443
  },
444
444
  {
445
445
  "code": "workspace_membership_required",
@@ -448,7 +448,7 @@
448
448
  "retriable": false,
449
449
  "details": null,
450
450
  "since": "1.0",
451
- "source": "spec/v1/rest-endpoints.md \u00a7Error response shape"
451
+ "source": "spec/v1/rest-endpoints.md §Error response shape"
452
452
  },
453
453
  {
454
454
  "code": "credential_not_found",
@@ -457,7 +457,7 @@
457
457
  "retriable": false,
458
458
  "details": null,
459
459
  "since": "1.0",
460
- "source": "spec/v1/rest-endpoints.md \u00a7Error response shape"
460
+ "source": "spec/v1/rest-endpoints.md §Error response shape"
461
461
  },
462
462
  {
463
463
  "code": "interrupt_not_found",
@@ -475,7 +475,7 @@
475
475
  "retriable": false,
476
476
  "details": null,
477
477
  "since": "1.0",
478
- "source": "spec/v1/rest-endpoints.md \u00a7Error response shape"
478
+ "source": "spec/v1/rest-endpoints.md §Error response shape"
479
479
  },
480
480
  {
481
481
  "code": "pack_version_not_found",
@@ -493,7 +493,7 @@
493
493
  "retriable": false,
494
494
  "details": null,
495
495
  "since": "1.0",
496
- "source": "spec/v1/rest-endpoints.md \u00a7Error response shape"
496
+ "source": "spec/v1/rest-endpoints.md §Error response shape"
497
497
  },
498
498
  {
499
499
  "code": "signature_not_available",
@@ -511,7 +511,7 @@
511
511
  "retriable": false,
512
512
  "details": null,
513
513
  "since": "2.0",
514
- "source": "RFC 0172 \u00a7A.3"
514
+ "source": "RFC 0172 §A.3"
515
515
  },
516
516
  {
517
517
  "code": "connection_provider_conflict",
@@ -520,7 +520,7 @@
520
520
  "retriable": false,
521
521
  "details": null,
522
522
  "since": "1.0",
523
- "source": "spec/v1/connection-packs.md; RFC 0177 \u00a7D.1 fail-closed"
523
+ "source": "spec/v1/connection-packs.md; RFC 0177 §D.1 fail-closed"
524
524
  },
525
525
  {
526
526
  "code": "envelope_correlation_conflict",
@@ -538,7 +538,7 @@
538
538
  "retriable": false,
539
539
  "details": null,
540
540
  "since": "1.0",
541
- "source": "spec/v1/idempotency.md \u00a7Concurrent duplicates (v1 MUST; RFC 0171 \u00a7B.2 keeps one mismatch code, this is the in-flight state)"
541
+ "source": "spec/v1/idempotency.md §Concurrent duplicates (v1 MUST; RFC 0171 §B.2 keeps one mismatch code, this is the in-flight state)"
542
542
  },
543
543
  {
544
544
  "code": "idempotency_key_mismatch",
@@ -547,7 +547,7 @@
547
547
  "retriable": false,
548
548
  "details": null,
549
549
  "since": "1.0",
550
- "source": "spec/v1/idempotency.md (the only spelling; RFC 0171 \u00a7B.2)"
550
+ "source": "spec/v1/idempotency.md (the only spelling; RFC 0171 §B.2)"
551
551
  },
552
552
  {
553
553
  "code": "interrupt_already_resolved",
@@ -556,7 +556,7 @@
556
556
  "retriable": false,
557
557
  "details": null,
558
558
  "since": "1.0",
559
- "source": "spec/v1/interrupt.md (409/410 overlap: RFC 0171 row C4.6 \u2014 one code per state)"
559
+ "source": "spec/v1/interrupt.md (409/410 overlap: RFC 0171 row C4.6 — one code per state)"
560
560
  },
561
561
  {
562
562
  "code": "pack_dependency_conflict",
@@ -583,7 +583,7 @@
583
583
  "retriable": false,
584
584
  "details": null,
585
585
  "since": "1.0",
586
- "source": "spec/v1/rest-endpoints.md \u00a7Error response shape"
586
+ "source": "spec/v1/rest-endpoints.md §Error response shape"
587
587
  },
588
588
  {
589
589
  "code": "replay_memory_snapshot_unavailable",
@@ -592,7 +592,7 @@
592
592
  "retriable": false,
593
593
  "details": null,
594
594
  "since": "1.0",
595
- "source": "spec/v1/rest-endpoints.md \u00a7Error response shape"
595
+ "source": "spec/v1/rest-endpoints.md §Error response shape"
596
596
  },
597
597
  {
598
598
  "code": "run_already_active",
@@ -601,7 +601,7 @@
601
601
  "retriable": false,
602
602
  "details": null,
603
603
  "since": "1.0",
604
- "source": "spec/v1/rest-endpoints.md \u00a7Error response shape"
604
+ "source": "spec/v1/rest-endpoints.md §Error response shape"
605
605
  },
606
606
  {
607
607
  "code": "run_terminal",
@@ -625,13 +625,13 @@
625
625
  "properties": {
626
626
  "runStatus": {
627
627
  "type": "string",
628
- "description": "The run status that refused the transition (runs.md \u00a7Pause and resume)."
628
+ "description": "The run status that refused the transition (runs.md §Pause and resume)."
629
629
  }
630
630
  },
631
631
  "additionalProperties": true
632
632
  },
633
633
  "since": "2.0",
634
- "source": "spec/v2/core/runs.md \u00a7Pause and resume"
634
+ "source": "spec/v2/core/runs.md §Pause and resume"
635
635
  },
636
636
  {
637
637
  "code": "version_conflict",
@@ -649,7 +649,7 @@
649
649
  "retriable": false,
650
650
  "details": null,
651
651
  "since": "1.0",
652
- "source": "spec/v1/rest-endpoints.md \u00a7Error response shape"
652
+ "source": "spec/v1/rest-endpoints.md §Error response shape"
653
653
  },
654
654
  {
655
655
  "code": "interrupt_cancelled",
@@ -676,7 +676,7 @@
676
676
  "retriable": false,
677
677
  "details": null,
678
678
  "since": "2.0",
679
- "source": "spec/v2/core/errors.md \u00a7The envelope \u2014 a request body a host refuses on size before parsing it (RFC 9110 \u00a715.5.14); registered 2026-09-05 because both production hosts had to invent it"
679
+ "source": "spec/v2/core/errors.md §The envelope — a request body a host refuses on size before parsing it (RFC 9110 §15.5.14); registered 2026-09-05 because both production hosts had to invent it"
680
680
  },
681
681
  {
682
682
  "code": "workspace_too_large",
@@ -685,7 +685,7 @@
685
685
  "retriable": false,
686
686
  "details": null,
687
687
  "since": "1.0",
688
- "source": "spec/v1/rest-endpoints.md \u00a7Error response shape"
688
+ "source": "spec/v1/rest-endpoints.md §Error response shape"
689
689
  },
690
690
  {
691
691
  "code": "unsupported_media_type",
@@ -694,7 +694,7 @@
694
694
  "retriable": false,
695
695
  "details": null,
696
696
  "since": "2.0",
697
- "source": "spec/v2/core/errors.md \u00a7The envelope \u2014 a request body whose Content-Type the host does not accept (RFC 9110 \u00a715.5.16); registered 2026-09-05 because both production hosts had to invent it"
697
+ "source": "spec/v2/core/errors.md §The envelope — a request body whose Content-Type the host does not accept (RFC 9110 §15.5.16); registered 2026-09-05 because both production hosts had to invent it"
698
698
  },
699
699
  {
700
700
  "code": "capability_not_provided",
@@ -703,7 +703,7 @@
703
703
  "retriable": false,
704
704
  "details": null,
705
705
  "since": "1.0",
706
- "source": "spec/v1/rest-endpoints.md \u00a7Error response shape"
706
+ "source": "spec/v1/rest-endpoints.md §Error response shape"
707
707
  },
708
708
  {
709
709
  "code": "capability_required",
@@ -712,7 +712,7 @@
712
712
  "retriable": false,
713
713
  "details": null,
714
714
  "since": "1.0",
715
- "source": "spec/v1/rest-endpoints.md \u00a7Error response shape"
715
+ "source": "spec/v1/rest-endpoints.md §Error response shape"
716
716
  },
717
717
  {
718
718
  "code": "credential_required",
@@ -721,7 +721,7 @@
721
721
  "retriable": false,
722
722
  "details": null,
723
723
  "since": "1.0",
724
- "source": "spec/v1/rest-endpoints.md \u00a7Error response shape"
724
+ "source": "spec/v1/rest-endpoints.md §Error response shape"
725
725
  },
726
726
  {
727
727
  "code": "envelope_invalid",
@@ -730,7 +730,7 @@
730
730
  "retriable": false,
731
731
  "details": null,
732
732
  "since": "1.0",
733
- "source": "spec/v1/rest-endpoints.md \u00a7Error response shape"
733
+ "source": "spec/v1/rest-endpoints.md §Error response shape"
734
734
  },
735
735
  {
736
736
  "code": "envelope_refusal",
@@ -739,7 +739,7 @@
739
739
  "retriable": false,
740
740
  "details": null,
741
741
  "since": "1.0",
742
- "source": "spec/v1/rest-endpoints.md \u00a7Error response shape"
742
+ "source": "spec/v1/rest-endpoints.md §Error response shape"
743
743
  },
744
744
  {
745
745
  "code": "envelope_truncation_unrecoverable",
@@ -748,7 +748,7 @@
748
748
  "retriable": false,
749
749
  "details": null,
750
750
  "since": "1.0",
751
- "source": "spec/v1/rest-endpoints.md \u00a7Error response shape"
751
+ "source": "spec/v1/rest-endpoints.md §Error response shape"
752
752
  },
753
753
  {
754
754
  "code": "fork_point_invalid",
@@ -757,7 +757,7 @@
757
757
  "retriable": false,
758
758
  "details": null,
759
759
  "since": "2.0",
760
- "source": "spec/v2/core/runs.md \u00a7Fork"
760
+ "source": "spec/v2/core/runs.md §Fork"
761
761
  },
762
762
  {
763
763
  "code": "loop_limit_exceeded",
@@ -766,7 +766,7 @@
766
766
  "retriable": false,
767
767
  "details": null,
768
768
  "since": "1.0",
769
- "source": "spec/v1/rest-endpoints.md \u00a7Error response shape"
769
+ "source": "spec/v1/rest-endpoints.md §Error response shape"
770
770
  },
771
771
  {
772
772
  "code": "mcp_mrtr_rounds_exceeded",
@@ -775,7 +775,7 @@
775
775
  "retriable": false,
776
776
  "details": null,
777
777
  "since": "2.0",
778
- "source": "RFC 0175 \u00a7E.1"
778
+ "source": "RFC 0175 §E.1"
779
779
  },
780
780
  {
781
781
  "code": "pack_runtime_requirement_unmet",
@@ -793,7 +793,7 @@
793
793
  "retriable": false,
794
794
  "details": null,
795
795
  "since": "1.0",
796
- "source": "spec/v1/rest-endpoints.md \u00a7Error response shape"
796
+ "source": "spec/v1/rest-endpoints.md §Error response shape"
797
797
  },
798
798
  {
799
799
  "code": "residency_unavailable",
@@ -802,7 +802,7 @@
802
802
  "retriable": true,
803
803
  "details": null,
804
804
  "since": "1.0",
805
- "source": "spec/v1/rest-endpoints.md \u00a7Error response shape"
805
+ "source": "spec/v1/rest-endpoints.md §Error response shape"
806
806
  },
807
807
  {
808
808
  "code": "run_timeout",
@@ -811,7 +811,7 @@
811
811
  "retriable": false,
812
812
  "details": null,
813
813
  "since": "1.0",
814
- "source": "spec/v1/rest-endpoints.md \u00a7Error response shape"
814
+ "source": "spec/v1/rest-endpoints.md §Error response shape"
815
815
  },
816
816
  {
817
817
  "code": "sandbox_memory_exceeded",
@@ -820,7 +820,7 @@
820
820
  "retriable": false,
821
821
  "details": null,
822
822
  "since": "1.0",
823
- "source": "spec/v1/rest-endpoints.md \u00a7Error response shape"
823
+ "source": "spec/v1/rest-endpoints.md §Error response shape"
824
824
  },
825
825
  {
826
826
  "code": "sandbox_timeout",
@@ -829,7 +829,7 @@
829
829
  "retriable": false,
830
830
  "details": null,
831
831
  "since": "1.0",
832
- "source": "spec/v1/rest-endpoints.md \u00a7Error response shape"
832
+ "source": "spec/v1/rest-endpoints.md §Error response shape"
833
833
  },
834
834
  {
835
835
  "code": "token_budget_exceeded",
@@ -838,7 +838,7 @@
838
838
  "retriable": false,
839
839
  "details": null,
840
840
  "since": "1.0",
841
- "source": "spec/v1/rest-endpoints.md \u00a7Error response shape"
841
+ "source": "spec/v1/rest-endpoints.md §Error response shape"
842
842
  },
843
843
  {
844
844
  "code": "client_version_unsupported",
@@ -856,7 +856,7 @@
856
856
  "retriable": true,
857
857
  "details": null,
858
858
  "since": "1.0",
859
- "source": "spec/v1/rest-endpoints.md \u00a7Error response shape"
859
+ "source": "spec/v1/rest-endpoints.md §Error response shape"
860
860
  },
861
861
  {
862
862
  "code": "event_type_unmapped",
@@ -865,7 +865,44 @@
865
865
  "retriable": false,
866
866
  "details": null,
867
867
  "since": "2.0",
868
- "source": "RFC 0176 \u00a7A.3 (a run whose log the host cannot translate is not readable)"
868
+ "source": "RFC 0176 §A.3 (a run whose log the host cannot translate is not readable)"
869
+ },
870
+ {
871
+ "code": "payload_unprojectable",
872
+ "httpStatus": 500,
873
+ "statusSource": "v2 decision (sibling of event_type_unmapped)",
874
+ "retriable": false,
875
+ "details": {
876
+ "type": "object",
877
+ "additionalProperties": false,
878
+ "required": [
879
+ "type",
880
+ "keys"
881
+ ],
882
+ "properties": {
883
+ "type": {
884
+ "type": "string",
885
+ "description": "the event type whose payload could not be projected"
886
+ },
887
+ "keys": {
888
+ "type": "array",
889
+ "items": {
890
+ "type": "string"
891
+ },
892
+ "minItems": 1,
893
+ "description": "the property names the host could neither carry nor seat"
894
+ },
895
+ "eventId": {
896
+ "$ref": "ids.schema.json#/$defs/eventId"
897
+ },
898
+ "sequence": {
899
+ "type": "integer",
900
+ "minimum": 0
901
+ }
902
+ }
903
+ },
904
+ "since": "2.3",
905
+ "source": "RFC 0185 §C (a row whose payload the host can neither carry nor seat is not readable under that contract — the property-level sibling of event_type_unmapped; never retried: it is a permanent fact about the row)"
869
906
  },
870
907
  {
871
908
  "code": "internal_error",
@@ -874,7 +911,7 @@
874
911
  "retriable": true,
875
912
  "details": null,
876
913
  "since": "1.0",
877
- "source": "spec/v1/rest-endpoints.md \u00a7Error response shape"
914
+ "source": "spec/v1/rest-endpoints.md §Error response shape"
878
915
  },
879
916
  {
880
917
  "code": "pack_load_failure",
@@ -892,7 +929,7 @@
892
929
  "retriable": false,
893
930
  "details": null,
894
931
  "since": "1.0",
895
- "source": "spec/v1/rest-endpoints.md \u00a7Error response shape"
932
+ "source": "spec/v1/rest-endpoints.md §Error response shape"
896
933
  },
897
934
  {
898
935
  "code": "pack_registry_unreachable",
@@ -910,7 +947,7 @@
910
947
  "retriable": true,
911
948
  "details": null,
912
949
  "since": "1.0",
913
- "source": "spec/v1/rest-endpoints.md \u00a7Error response shape"
950
+ "source": "spec/v1/rest-endpoints.md §Error response shape"
914
951
  }
915
952
  ]
916
953
  }
@@ -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.3.1",
4
- "corpusTag": "v2.3.1",
3
+ "version": "2.3.2",
4
+ "corpusTag": "v2.3.2",
5
5
  "updated": "2026-09-16"
6
6
  }