@openwop/spec-artifacts 2.0.0-rc.38 → 2.0.0-rc.8
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 +31 -33
- package/api/seams-v2.yaml +1 -1
- package/api/v2/asyncapi.yaml +1 -1
- package/api/v2/openapi.yaml +10 -9
- package/package.json +5 -18
- package/schemas/capabilities.schema.json +1 -40
- package/schemas/run-snapshot.schema.json +33 -103
- package/schemas/v2/agent-deployment-transition.schema.json +6 -5
- package/schemas/v2/agent-deployment.schema.json +9 -8
- package/schemas/v2/agent-eval-suite.schema.json +12 -11
- package/schemas/v2/artifact-type-pack-manifest.schema.json +18 -22
- package/schemas/v2/capabilities.schema.json +0 -39
- package/schemas/v2/certification-bundle.schema.json +1 -1
- package/schemas/v2/chat-card-pack-manifest.schema.json +15 -19
- package/schemas/v2/debug-bundle.schema.json +6 -6
- package/schemas/v2/eval-summary.schema.json +10 -17
- package/schemas/v2/goal.schema.json +5 -5
- package/schemas/v2/ids.schema.json +22 -120
- package/schemas/v2/node-pack-manifest.schema.json +31 -27
- package/schemas/v2/proposal.schema.json +8 -7
- package/schemas/v2/run-event-payloads.schema.json +242 -246
- package/schemas/v2/run-event.schema.json +126 -2
- package/schemas/v2/run-snapshot.schema.json +13 -34
- package/schemas/v2/workflow-chain-pack-manifest.schema.json +45 -41
- package/schemas/v2/workflow-definition.schema.json +36 -31
- package/spec/v1/core-standard-manifest.json +2 -2
- package/spec/v1/deprecations.json +67 -79
- package/spec/v1/deprecations.schema.json +7 -23
- package/spec/v1/extensions.json +2 -3
- package/spec/v2/declaration.json +0 -7
- package/spec/v2/release.json +2 -2
- package/schemas/v2/webhook-delivery.schema.json +0 -26
- package/spec/v2/id-field-bindings.json +0 -104
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
"surface": "top-level `capabilities` wrapper object in /.well-known/openwop",
|
|
10
10
|
"kind": "discovery-shape",
|
|
11
11
|
"deprecatedIn": "RFC 0073 (v1.1)",
|
|
12
|
-
"authority": "RFC 0073
|
|
12
|
+
"authority": "RFC 0073 §Proposal; spec/v1/capabilities.md §Discovery document root (\"deprecated legacy shape, tolerated only by the schema's additionalProperties: true\")",
|
|
13
13
|
"removeIn": "2.0",
|
|
14
14
|
"replacement": "capability families at the document root",
|
|
15
15
|
"codemod": null,
|
|
@@ -23,11 +23,8 @@
|
|
|
23
23
|
"token": "deprecated mirror"
|
|
24
24
|
}
|
|
25
25
|
],
|
|
26
|
-
"removalTrigger":
|
|
27
|
-
|
|
28
|
-
"v1-end-of-support"
|
|
29
|
-
],
|
|
30
|
-
"note": " RFC 0176 \u00a7C.2: absent from the v2 representation at the cut; removed from the v1 representation at v1 end-of-support."
|
|
26
|
+
"removalTrigger": "v1-end-of-support",
|
|
27
|
+
"note": " RFC 0176 §C.2: absent from the v2 representation at the cut; removed from the v1 representation at v1 end-of-support."
|
|
31
28
|
},
|
|
32
29
|
{
|
|
33
30
|
"id": "openwop.deprecation.host-dotted-mirror",
|
|
@@ -35,9 +32,9 @@
|
|
|
35
32
|
"surface": "host-side `host.<family>` dotted mirror of root capability families",
|
|
36
33
|
"kind": "discovery-shape",
|
|
37
34
|
"deprecatedIn": "RFC 0073 (v1.1)",
|
|
38
|
-
"authority": "RFC 0073
|
|
35
|
+
"authority": "RFC 0073 §3 \"Reference host — canonical root + deprecated mirror\"; retirement gated on the v2 major (RFC 0073 UQ1/UQ2)",
|
|
39
36
|
"removeIn": "2.0",
|
|
40
|
-
"replacement": "one declaration file: document-root key
|
|
37
|
+
"replacement": "one declaration file: document-root key ≡ pack peer-dependency identifier ≡ spec section anchor (v2 program C.2)",
|
|
41
38
|
"codemod": null,
|
|
42
39
|
"sources": [
|
|
43
40
|
{
|
|
@@ -45,19 +42,16 @@
|
|
|
45
42
|
"token": "canonical root + deprecated mirror"
|
|
46
43
|
}
|
|
47
44
|
],
|
|
48
|
-
"removalTrigger":
|
|
49
|
-
|
|
50
|
-
"v1-end-of-support"
|
|
51
|
-
],
|
|
52
|
-
"note": " RFC 0176 \u00a7C.2: absent from the v2 representation at the cut; removed from the v1 representation at v1 end-of-support."
|
|
45
|
+
"removalTrigger": "v1-end-of-support",
|
|
46
|
+
"note": " RFC 0176 §C.2: absent from the v2 representation at the cut; removed from the v1 representation at v1 end-of-support."
|
|
53
47
|
},
|
|
54
48
|
{
|
|
55
49
|
"id": "openwop.deprecation.profile-openwop-core-alias",
|
|
56
50
|
"status": "deprecated",
|
|
57
51
|
"surface": "profile id `openwop-core` (alias of `openwop-discovery-core`)",
|
|
58
52
|
"kind": "profile-id",
|
|
59
|
-
"deprecatedIn": "RFC 0155
|
|
60
|
-
"authority": "spec/v1/profiles.md
|
|
53
|
+
"deprecatedIn": "RFC 0155 §A (v1.2, 2026-08-16)",
|
|
54
|
+
"authority": "spec/v1/profiles.md §`openwop-discovery-core` (canonical) — alias `openwop-core` (deprecated); RFC 0155 §A: removal \"no earlier than v2\"",
|
|
61
55
|
"removeIn": "2.0",
|
|
62
56
|
"replacement": "openwop-discovery-core",
|
|
63
57
|
"codemod": null,
|
|
@@ -73,8 +67,8 @@
|
|
|
73
67
|
"status": "deprecated",
|
|
74
68
|
"surface": "state-key prefix conventions as a back-compat layer over typed channels",
|
|
75
69
|
"kind": "prose-convention",
|
|
76
|
-
"deprecatedIn": "spec/v1/channels-and-reducers.md (v1.0; no RFC cited
|
|
77
|
-
"authority": "spec/v1/channels-and-reducers.md
|
|
70
|
+
"deprecatedIn": "spec/v1/channels-and-reducers.md (v1.0; no RFC cited — the spec text says the conventions are \"a back-compat layer that the spec deprecates over time\")",
|
|
71
|
+
"authority": "spec/v1/channels-and-reducers.md §Why this exists",
|
|
78
72
|
"removeIn": "2.0",
|
|
79
73
|
"replacement": "typed channels with explicit reducers",
|
|
80
74
|
"codemod": null,
|
|
@@ -91,8 +85,8 @@
|
|
|
91
85
|
"status": "deprecated",
|
|
92
86
|
"surface": "capabilities.a2a `supported: true` without `protocolVersions[]`",
|
|
93
87
|
"kind": "discovery-field",
|
|
94
|
-
"deprecatedIn": "RFC 0152
|
|
95
|
-
"authority": "spec/v1/a2a-integration.md
|
|
88
|
+
"deprecatedIn": "RFC 0152 §A",
|
|
89
|
+
"authority": "spec/v1/a2a-integration.md §Discovery: \"`supported: true` without `protocolVersions` is deprecated\"",
|
|
96
90
|
"removeIn": "2.0",
|
|
97
91
|
"replacement": "non-empty `protocolVersions[]` + `preferredVersion` (v2: a capability facet under the closed root, v2 program C.2)",
|
|
98
92
|
"codemod": null,
|
|
@@ -108,8 +102,8 @@
|
|
|
108
102
|
"status": "deprecated",
|
|
109
103
|
"surface": "capabilities.mcp `supported: true` without `protocolVersions[]`",
|
|
110
104
|
"kind": "discovery-field",
|
|
111
|
-
"deprecatedIn": "RFC 0153
|
|
112
|
-
"authority": "spec/v1/mcp-integration.md
|
|
105
|
+
"deprecatedIn": "RFC 0153 §A",
|
|
106
|
+
"authority": "spec/v1/mcp-integration.md §Discovery: \"Unqualified `supported: true` is deprecated and cannot substantiate a current-MCP claim\"",
|
|
113
107
|
"removeIn": "2.0",
|
|
114
108
|
"replacement": "non-empty `protocolVersions[]` (MCP date form) + `preferredVersion`",
|
|
115
109
|
"codemod": null,
|
|
@@ -126,7 +120,7 @@
|
|
|
126
120
|
"surface": "workflow node `config.outputArtifactType` bag entry",
|
|
127
121
|
"kind": "schema-field",
|
|
128
122
|
"deprecatedIn": "schemas/workflow-definition.schema.json (first-class `artifactType` field)",
|
|
129
|
-
"authority": "schemas/workflow-definition.schema.json
|
|
123
|
+
"authority": "schemas/workflow-definition.schema.json — `artifactType` description: \"replaces the deprecated config.outputArtifactType bag entry\"",
|
|
130
124
|
"removeIn": "2.0",
|
|
131
125
|
"replacement": "node.artifactType",
|
|
132
126
|
"codemod": null,
|
|
@@ -143,7 +137,7 @@
|
|
|
143
137
|
"surface": "workflow node `config.chatCard` bag entry",
|
|
144
138
|
"kind": "schema-field",
|
|
145
139
|
"deprecatedIn": "schemas/workflow-definition.schema.json (first-class `chatCard` field)",
|
|
146
|
-
"authority": "schemas/workflow-definition.schema.json
|
|
140
|
+
"authority": "schemas/workflow-definition.schema.json — `chatCard` description: \"replaces the deprecated config.chatCard bag entry\"",
|
|
147
141
|
"removeIn": "2.0",
|
|
148
142
|
"replacement": "node.chatCard",
|
|
149
143
|
"codemod": null,
|
|
@@ -160,7 +154,7 @@
|
|
|
160
154
|
"surface": "capabilities.auth.subjectLinking",
|
|
161
155
|
"kind": "discovery-field",
|
|
162
156
|
"deprecatedIn": "RFC 0164 (suite 1.151.0, 2026-09-02)",
|
|
163
|
-
"authority": "RFC 0164
|
|
157
|
+
"authority": "RFC 0164 §A.3: the flag is DERIVED (MUST be true whenever both `openwop-auth-saml` and `openwop-auth-scim` are advertised) and deprecated toward v2; the profile pair carries the obligation",
|
|
164
158
|
"removeIn": "2.0",
|
|
165
159
|
"replacement": "the profile pair itself; v2 Subject record with `keyClass` (v2 program C.3)",
|
|
166
160
|
"codemod": null,
|
|
@@ -181,7 +175,7 @@
|
|
|
181
175
|
"surface": "certification bundle format v1 (schemas/conformance-certification-bundle.schema.json, `bundleVersion: \"1\"`)",
|
|
182
176
|
"kind": "artifact",
|
|
183
177
|
"deprecatedIn": "RFC 0148 (suite 1.114.0, 2026-08-12); `--certify` default flipped to v2 at suite 1.152.0",
|
|
184
|
-
"authority": "COMPATIBILITY.md
|
|
178
|
+
"authority": "COMPATIBILITY.md §2 \"Measurement vs. claim\": v1 remains parseable but ceases to substantiate a new certification after the 90-day window that began 2026-08-12 (ends 2026-11-10)",
|
|
185
179
|
"removeIn": "2.0",
|
|
186
180
|
"replacement": "certification bundle v2 (schemas/certification-bundle-v2.schema.json); bundle v3 at v2.0 (v2 program C.1)",
|
|
187
181
|
"codemod": null,
|
|
@@ -201,8 +195,8 @@
|
|
|
201
195
|
"status": "deprecated",
|
|
202
196
|
"surface": "`Capabilities-Etag` response header on GET /.well-known/openwop",
|
|
203
197
|
"kind": "header",
|
|
204
|
-
"deprecatedIn": "RFC 0165
|
|
205
|
-
"authority": "RFC 0165
|
|
198
|
+
"deprecatedIn": "RFC 0165 §C.2 (suite 1.155.0, 2026-09-02)",
|
|
199
|
+
"authority": "RFC 0165 §C.2: hosts SHOULD send a standard ETag on /.well-known/openwop and honor If-None-Match; Capabilities-Etag keeps its semantics through v1.x and is removed at 2.0",
|
|
206
200
|
"removeIn": "2.0",
|
|
207
201
|
"replacement": "standard `ETag` / `If-None-Match` on the discovery document (dual-emitted through v1.x)",
|
|
208
202
|
"codemod": null,
|
|
@@ -213,14 +207,11 @@
|
|
|
213
207
|
},
|
|
214
208
|
{
|
|
215
209
|
"file": "RFCS/0165-v2-preparation-wire-shapes.md",
|
|
216
|
-
"token": "
|
|
210
|
+
"token": "§C.2 Discovery cache validator"
|
|
217
211
|
}
|
|
218
212
|
],
|
|
219
|
-
"removalTrigger":
|
|
220
|
-
|
|
221
|
-
"v1-end-of-support"
|
|
222
|
-
],
|
|
223
|
-
"note": " RFC 0176 \u00a7C.2: absent from the v2 representation at the cut; removed from the v1 representation at v1 end-of-support."
|
|
213
|
+
"removalTrigger": "v1-end-of-support",
|
|
214
|
+
"note": " RFC 0176 §C.2: absent from the v2 representation at the cut; removed from the v1 representation at v1 end-of-support."
|
|
224
215
|
},
|
|
225
216
|
{
|
|
226
217
|
"id": "openwop.deprecation.contract-provenance",
|
|
@@ -245,8 +236,8 @@
|
|
|
245
236
|
"status": "deprecated",
|
|
246
237
|
"surface": "the `X-openwop-*` webhook delivery header family (Webhook-Id, Event-Type, Timestamp, Signature, Signature-Algorithm)",
|
|
247
238
|
"kind": "header",
|
|
248
|
-
"deprecatedIn": "RFC 0165
|
|
249
|
-
"authority": "RFC 0165
|
|
239
|
+
"deprecatedIn": "RFC 0165 §C.1 (suite 1.155.0, 2026-09-02)",
|
|
240
|
+
"authority": "RFC 0165 §C.1: hosts SHOULD dual-emit the `OpenWOP-*` family with identical values; subscribers SHOULD accept either; the `X-openwop-*` family MUST still be sent through v1.x and is removed at 2.0",
|
|
250
241
|
"removeIn": "2.0",
|
|
251
242
|
"replacement": "`OpenWOP-Webhook-Id`, `OpenWOP-Event-Type`, `OpenWOP-Timestamp`, `OpenWOP-Signature: sha256={hex}`, `OpenWOP-Signature-Algorithm`",
|
|
252
243
|
"codemod": null,
|
|
@@ -258,7 +249,7 @@
|
|
|
258
249
|
},
|
|
259
250
|
{
|
|
260
251
|
"file": "RFCS/0165-v2-preparation-wire-shapes.md",
|
|
261
|
-
"token": "
|
|
252
|
+
"token": "§C.1 Webhook headers"
|
|
262
253
|
}
|
|
263
254
|
]
|
|
264
255
|
},
|
|
@@ -290,11 +281,11 @@
|
|
|
290
281
|
"surface": "`engineVersion` typed integer at the discovery root and string on run-event / run-snapshot / three event payloads",
|
|
291
282
|
"kind": "schema-field",
|
|
292
283
|
"deprecatedIn": null,
|
|
293
|
-
"authority": "RFC 0165
|
|
284
|
+
"authority": "RFC 0165 §A.4 (recorded; unification is a v2 C.5 item — changing either type is a COMPATIBILITY §2.2 break in v1.x)",
|
|
294
285
|
"removeIn": "2.0",
|
|
295
286
|
"replacement": "one integer `engineVersion` on every carrier (v2)",
|
|
296
287
|
"codemod": null,
|
|
297
|
-
"note": "In v1.x the per-event value is the decimal string rendering of the root integer (version-negotiation.md
|
|
288
|
+
"note": "In v1.x the per-event value is the decimal string rendering of the root integer (version-negotiation.md §\"Protocol version grammar\").",
|
|
298
289
|
"sources": [
|
|
299
290
|
{
|
|
300
291
|
"file": "spec/v1/version-negotiation.md",
|
|
@@ -312,7 +303,7 @@
|
|
|
312
303
|
"surface": "`since` query parameter on GET /v1/runs/{runId}/events/poll",
|
|
313
304
|
"kind": "discovery-field",
|
|
314
305
|
"deprecatedIn": null,
|
|
315
|
-
"authority": "v2 charter C.4 (RFC 0167
|
|
306
|
+
"authority": "v2 charter C.4 (RFC 0167 §E; version-negotiation.md names `lastSequence` authoritative and `since` back-compat for pre-v1.0 deployments)",
|
|
316
307
|
"removeIn": "2.0",
|
|
317
308
|
"replacement": "`lastSequence` in v1.x; the v2 C.4 child defines the cursor (RFC 0165 G7)",
|
|
318
309
|
"codemod": null,
|
|
@@ -330,7 +321,7 @@
|
|
|
330
321
|
"surface": "`X-Dedup`, `X-Force-Engine-Version`, `X-Pack-Sha`, `X-Pack-Signing-Method` request headers",
|
|
331
322
|
"kind": "header",
|
|
332
323
|
"deprecatedIn": null,
|
|
333
|
-
"authority": "v2 charter C.4 (RFC 0167
|
|
324
|
+
"authority": "v2 charter C.4 (RFC 0167 §E): `OpenWOP-*` for every non-standard header; RFC 0165 §C.1 covered only the webhook family",
|
|
334
325
|
"removeIn": "2.0",
|
|
335
326
|
"replacement": "`OpenWOP-Dedup`, `OpenWOP-Force-Engine-Version` (seam-only, moves to the seams profile), `OpenWOP-Pack-Sha`, `OpenWOP-Pack-Signing-Method`",
|
|
336
327
|
"codemod": null,
|
|
@@ -394,7 +385,7 @@
|
|
|
394
385
|
"surface": "node config `credentialProvider` key",
|
|
395
386
|
"kind": "schema-field",
|
|
396
387
|
"deprecatedIn": "node-packs.md (`provider` is canonical; `credentialProvider` is named as the legacy alias)",
|
|
397
|
-
"authority": "spec/v1/node-packs.md
|
|
388
|
+
"authority": "spec/v1/node-packs.md §Credential resolution (\"and the legacy alias `credentialProvider`\")",
|
|
398
389
|
"removeIn": "2.0",
|
|
399
390
|
"replacement": "`provider`",
|
|
400
391
|
"codemod": null,
|
|
@@ -428,7 +419,7 @@
|
|
|
428
419
|
"surface": "`approvalRequested` / `clarificationRequested` legacy event payload definitions and the free-text `feedback` field",
|
|
429
420
|
"kind": "schema-field",
|
|
430
421
|
"deprecatedIn": "run-event-payloads.schema.json + interrupt-profiles.md (the interrupt primitive `interrupt.requested {kind}` is canonical)",
|
|
431
|
-
"authority": "schemas/run-event-payloads.schema.json $defs approvalRequested / clarificationRequested descriptions; spec/v1/interrupt-profiles.md
|
|
422
|
+
"authority": "schemas/run-event-payloads.schema.json $defs approvalRequested / clarificationRequested descriptions; spec/v1/interrupt-profiles.md §Approval",
|
|
432
423
|
"removeIn": "2.0",
|
|
433
424
|
"replacement": "`interrupt.requested` with `kind: approval | clarification`; `refineFeedback`",
|
|
434
425
|
"codemod": null,
|
|
@@ -448,8 +439,8 @@
|
|
|
448
439
|
"status": "deprecated",
|
|
449
440
|
"surface": "`a2a-0.3-legacy` A2A profile id",
|
|
450
441
|
"kind": "profile-id",
|
|
451
|
-
"deprecatedIn": "RFC 0152
|
|
452
|
-
"authority": "spec/v1/a2a-integration.md
|
|
442
|
+
"deprecatedIn": "RFC 0152 §A (A2A 1.0.0 published 2026-03-12; legacy window ends 2027-03-12)",
|
|
443
|
+
"authority": "spec/v1/a2a-integration.md §Discovery (\"a host SHOULD NOT advertise `a2a-0.3-legacy`\" after 2027-03-12); RFC 0152 register G1/R1",
|
|
453
444
|
"removeIn": "2.0",
|
|
454
445
|
"replacement": "`a2a-1.0` only; the v2 C.8 child removes the legacy path",
|
|
455
446
|
"codemod": null,
|
|
@@ -469,8 +460,8 @@
|
|
|
469
460
|
"status": "deprecated",
|
|
470
461
|
"surface": "`mcp-2025-06-18-legacy` MCP profile id",
|
|
471
462
|
"kind": "profile-id",
|
|
472
|
-
"deprecatedIn": "RFC 0153
|
|
473
|
-
"authority": "spec/v1/mcp-integration.md
|
|
463
|
+
"deprecatedIn": "RFC 0153 §A (current profile accepted 2026-08-12; legacy window ends 2027-08-12)",
|
|
464
|
+
"authority": "spec/v1/mcp-integration.md §Discovery; RFC 0153 register G1/R1",
|
|
474
465
|
"removeIn": "2.0",
|
|
475
466
|
"replacement": "`mcp-2026-07-28` only; the v2 C.8 child removes the legacy path",
|
|
476
467
|
"codemod": null,
|
|
@@ -490,8 +481,8 @@
|
|
|
490
481
|
"status": "deprecated",
|
|
491
482
|
"surface": "`openwop-Webhook-Signature: v1=<hex>` header the pre-1.9.0 SDK helpers read (never in any spec file)",
|
|
492
483
|
"kind": "header",
|
|
493
|
-
"deprecatedIn": "RFC 0165
|
|
494
|
-
"authority": "RFC 0165
|
|
484
|
+
"deprecatedIn": "RFC 0165 §C.3 (SDK-versus-spec defect; fixed in openwop-sdks TS 1.9.0 / Py 1.7.0 / Go v1.6.0)",
|
|
485
|
+
"authority": "RFC 0165 §C.3",
|
|
495
486
|
"removeIn": "2.0",
|
|
496
487
|
"replacement": "`X-openwop-Signature: sha256={hex}` in v1.x; `OpenWOP-Signature` in v2",
|
|
497
488
|
"codemod": null,
|
|
@@ -505,10 +496,10 @@
|
|
|
505
496
|
{
|
|
506
497
|
"id": "openwop.deprecation.undeclared-host-extension-families",
|
|
507
498
|
"status": "proposed",
|
|
508
|
-
"surface": "the 11
|
|
499
|
+
"surface": "the 11 `§host.*` families RFC 0144 classed `extension` (brand, canvas, chat, coordination, dataIntegration, entities, kanban, knowledge, launchStudio, messaging, webResearch) — declared in neither the dotted nor the root spelling",
|
|
509
500
|
"kind": "discovery-shape",
|
|
510
501
|
"deprecatedIn": null,
|
|
511
|
-
"authority": "v2 charter C.2 (RFC 0167
|
|
502
|
+
"authority": "v2 charter C.2 (RFC 0167 §E): one declaration file; extensions live under one namespaced key; RFC 0144 §A classified them deliberately as extension namespaces",
|
|
512
503
|
"removeIn": "2.0",
|
|
513
504
|
"replacement": "the v2 extension namespace key (C.2 child); the prose sections move to spec/v2/ext/",
|
|
514
505
|
"codemod": null,
|
|
@@ -526,9 +517,9 @@
|
|
|
526
517
|
"surface": "the `/v1/` path-key prefix on every versioned operation",
|
|
527
518
|
"kind": "path",
|
|
528
519
|
"deprecatedIn": null,
|
|
529
|
-
"authority": "RFC 0172
|
|
520
|
+
"authority": "RFC 0172 §A.2 (v2 operations are unversioned path keys on a bare origin; v1 keys retained through the overlap and removed with the v1 tree at Phase 5)",
|
|
530
521
|
"removeIn": "2.0",
|
|
531
|
-
"replacement": "unversioned path keys + `OpenWOP-Version` negotiation (RFC 0172
|
|
522
|
+
"replacement": "unversioned path keys + `OpenWOP-Version` negotiation (RFC 0172 §A)",
|
|
532
523
|
"codemod": null,
|
|
533
524
|
"note": "Proposed: the prefix is the v1 wire surface itself and cannot be deprecated inside v1.x; the row exists so the removal has a date and the alias coverage gate sees the surface.",
|
|
534
525
|
"sources": [
|
|
@@ -544,7 +535,7 @@
|
|
|
544
535
|
"surface": "the per-RFC `G<n>` local gap id as the register's ID column",
|
|
545
536
|
"kind": "prose-convention",
|
|
546
537
|
"deprecatedIn": null,
|
|
547
|
-
"authority": "RFC 0178
|
|
538
|
+
"authority": "RFC 0178 §B.2 (the `openwop.gap.<rfc>.<n>` id is canonical; `G<n>` is an alias until 2.1)",
|
|
548
539
|
"removeIn": "2.1",
|
|
549
540
|
"replacement": "`openwop.gap.<rfc>.<n>` in the ID column",
|
|
550
541
|
"codemod": null,
|
|
@@ -562,7 +553,7 @@
|
|
|
562
553
|
"surface": "registry version manifest `deprecated` boolean (an advisory version flag that collides with the JSON Schema `deprecated` annotation keyword)",
|
|
563
554
|
"kind": "schema-field",
|
|
564
555
|
"deprecatedIn": null,
|
|
565
|
-
"authority": "RFC 0178
|
|
556
|
+
"authority": "RFC 0178 §A.1 (renamed so the annotation keyword is unambiguous); the rename rides C.10's registry/v2 re-sign",
|
|
566
557
|
"removeIn": "2.0",
|
|
567
558
|
"replacement": "`versionDeprecated`",
|
|
568
559
|
"codemod": null,
|
|
@@ -580,7 +571,7 @@
|
|
|
580
571
|
"surface": "the two-segment interrupt resume token `base64url(payload).hmac` with no scheme id, algorithm, or key id",
|
|
581
572
|
"kind": "artifact",
|
|
582
573
|
"deprecatedIn": null,
|
|
583
|
-
"authority": "RFC 0170
|
|
574
|
+
"authority": "RFC 0170 §E.1 (`ow2.<alg>.<kid>.<payload>.<mac>`); interrupt.md §Resume tokens' rotation rule references an algorithm-version discriminator the format does not contain",
|
|
584
575
|
"removeIn": "2.0",
|
|
585
576
|
"replacement": "`ow2.<alg>.<kid>.<payload>.<mac>`; issued v1 tokens resolvable under `kid: legacy` until their expiry",
|
|
586
577
|
"codemod": null,
|
|
@@ -598,7 +589,7 @@
|
|
|
598
589
|
"surface": "`details.retryAfter`, `details.retryAfterMs`, `details.retryAfterSeconds` on error envelopes (three body spellings beside the `Retry-After` header)",
|
|
599
590
|
"kind": "schema-field",
|
|
600
591
|
"deprecatedIn": null,
|
|
601
|
-
"authority": "RFC 0171
|
|
592
|
+
"authority": "RFC 0171 §B.2 (retry timing lives in `Retry-After` only)",
|
|
602
593
|
"removeIn": "2.0",
|
|
603
594
|
"replacement": "the `Retry-After` header",
|
|
604
595
|
"codemod": null,
|
|
@@ -620,7 +611,7 @@
|
|
|
620
611
|
"surface": "dotted reserved keys in `RunOptions.configurable` (`ai.provider`, `ai.model`, `ai.credentialRef`, `distillation.tokenBudget`) and the open map they live in",
|
|
621
612
|
"kind": "schema-field",
|
|
622
613
|
"deprecatedIn": null,
|
|
623
|
-
"authority": "RFC 0171
|
|
614
|
+
"authority": "RFC 0171 §D.1 (closed, nested, versioned `configurable`)",
|
|
624
615
|
"removeIn": "2.0",
|
|
625
616
|
"replacement": "`configurable.ai.*`, `configurable.distillation.*`; vendor keys under `configurable.extensions.<org>`",
|
|
626
617
|
"codemod": "openwop.codemod.configurable-v2",
|
|
@@ -638,7 +629,7 @@
|
|
|
638
629
|
"surface": "discovery flags that gate a security-load-bearing MUST: the fourteen `auth.*` gates, `replay.sideEffectSuppression`, `webhooks.durable`, `interrupt.approverRouting` (as a gate), `sandbox.supported` (as a gate)",
|
|
639
630
|
"kind": "discovery-field",
|
|
640
631
|
"deprecatedIn": null,
|
|
641
|
-
"authority": "RFC 0173
|
|
632
|
+
"authority": "RFC 0173 §A.1 (an obligation of the surface, never a discovery flag; RFC 0164 §22's ruling applied corpus-wide)",
|
|
642
633
|
"removeIn": "2.0",
|
|
643
634
|
"replacement": "the obligation binds when the surface is advertised; `auth.lanes[]`, `replay`, `webhooks`, `interrupt.refKinds[]`, `sandbox.isolationModel` stay as facets; relaxations are operator settings recorded in bundle v3 `host.relaxations[]`",
|
|
644
635
|
"codemod": null,
|
|
@@ -664,7 +655,7 @@
|
|
|
664
655
|
"surface": "`supportedTransports[]` at the discovery root (`rest | mcp | a2a | grpc`)",
|
|
665
656
|
"kind": "discovery-field",
|
|
666
657
|
"deprecatedIn": null,
|
|
667
|
-
"authority": "RFC 0175
|
|
658
|
+
"authority": "RFC 0175 §B.1 (REST is the wire; A2A and MCP are compositions with first-class facets; gRPC is demoted)",
|
|
668
659
|
"removeIn": "2.0",
|
|
669
660
|
"replacement": "none; `a2a.*` and `mcp.*` facets",
|
|
670
661
|
"codemod": "openwop.codemod.discovery-document-v2",
|
|
@@ -682,7 +673,7 @@
|
|
|
682
673
|
"surface": "`capabilities.grpc` block and `grpc-transport.md` as a core Stable document with RFC 2119 MUSTs",
|
|
683
674
|
"kind": "discovery-field",
|
|
684
675
|
"deprecatedIn": null,
|
|
685
|
-
"authority": "RFC 0175
|
|
676
|
+
"authority": "RFC 0175 §A.1 (demoted to `spec/v2/ext/grpc-transport/`, `unwitnessable`, `adoption: none`; the door back into core is named)",
|
|
686
677
|
"removeIn": "2.0",
|
|
687
678
|
"replacement": "`spec/v2/ext/grpc-transport/` (documented, not advertised)",
|
|
688
679
|
"codemod": "openwop.codemod.discovery-document-v2",
|
|
@@ -697,16 +688,13 @@
|
|
|
697
688
|
{
|
|
698
689
|
"id": "openwop.deprecation.well-known-wop-alias",
|
|
699
690
|
"status": "proposed",
|
|
700
|
-
"surface": "`/.well-known/wop` served byte-identically with `/.well-known/openwop` (MyndHyve, the wop
|
|
691
|
+
"surface": "`/.well-known/wop` served byte-identically with `/.well-known/openwop` (MyndHyve, the wop → openwop rebrand alias; the C.5 precedent)",
|
|
701
692
|
"kind": "path",
|
|
702
693
|
"deprecatedIn": null,
|
|
703
|
-
"authority": "RFC 0176
|
|
694
|
+
"authority": "RFC 0176 §C.3",
|
|
704
695
|
"removeIn": "2.0",
|
|
705
|
-
"removalTrigger":
|
|
706
|
-
|
|
707
|
-
"v1-end-of-support"
|
|
708
|
-
],
|
|
709
|
-
"replacement": "`/.well-known/openwop` (one resource; RFC 0176 \u00a7C.1)",
|
|
696
|
+
"removalTrigger": "v1-end-of-support",
|
|
697
|
+
"replacement": "`/.well-known/openwop` (one resource; RFC 0176 §C.1)",
|
|
710
698
|
"codemod": null,
|
|
711
699
|
"note": "Proposed: the alias exists in one host and was never registered; it is the model RFC 0172 cites for overlap publication.",
|
|
712
700
|
"sources": [
|
|
@@ -722,11 +710,11 @@
|
|
|
722
710
|
"surface": "`engines.openwop` ranges with no upper bound read as open (146 of 282 published versions)",
|
|
723
711
|
"kind": "schema-field",
|
|
724
712
|
"deprecatedIn": null,
|
|
725
|
-
"authority": "RFC 0177
|
|
713
|
+
"authority": "RFC 0177 §A.1 (absent ceiling ⇒ `<2.0.0`; `pack_engine_unsupported` at install on every publication path)",
|
|
726
714
|
"removeIn": "2.0",
|
|
727
715
|
"replacement": "an explicit `>=x.y.z <M.0.0` range; the v2 schema enforces the grammar",
|
|
728
716
|
"codemod": null,
|
|
729
|
-
"note": "Proposed: no codemod
|
|
717
|
+
"note": "Proposed: no codemod — the author declares compatibility; `openwop.codemod.pack-manifest-v2` refuses a manifest with no v2-satisfiable range.",
|
|
730
718
|
"sources": [
|
|
731
719
|
{
|
|
732
720
|
"file": "spec/v1/node-packs.md",
|
|
@@ -740,7 +728,7 @@
|
|
|
740
728
|
"surface": "peer-dependency identifiers that are not declaration-file keys: `host.*` dotted twins (`host.fs`/`fs`, `host.queueBus`/`queueBus`), `openwop.agents.memoryBackends`, facet paths (`aiProviders.imageGeneration`, `host.aiEnvelope.await`), the reserved-slot prose list",
|
|
741
729
|
"kind": "schema-field",
|
|
742
730
|
"deprecatedIn": null,
|
|
743
|
-
"authority": "RFC 0177
|
|
731
|
+
"authority": "RFC 0177 §B.1–§B.2 (identifier ≡ declaration-file key; `pack_peer_dependency_undefined` reads against the file; generated alias table)",
|
|
744
732
|
"removeIn": "2.0",
|
|
745
733
|
"removalTrigger": "v1-end-of-support",
|
|
746
734
|
"replacement": "`spec/v2/peer-dependency-aliases.json` through the overlap; `peerDependenciesMeta.<family>.facets[]` for facets",
|
|
@@ -756,14 +744,14 @@
|
|
|
756
744
|
{
|
|
757
745
|
"id": "openwop.deprecation.manifest-signing-method",
|
|
758
746
|
"status": "proposed",
|
|
759
|
-
"surface": "`signing.method: manual | ed25519 | sigstore`
|
|
747
|
+
"surface": "`signing.method: manual | ed25519 | sigstore` — two values the schema calls synonymous that the verifier treats as signatures over different bytes",
|
|
760
748
|
"kind": "schema-field",
|
|
761
749
|
"deprecatedIn": null,
|
|
762
|
-
"authority": "RFC 0177
|
|
750
|
+
"authority": "RFC 0177 §C.3 (one `signing.scheme: ed25519-canonical-json`)",
|
|
763
751
|
"removeIn": "2.0",
|
|
764
752
|
"replacement": "`signing.scheme`",
|
|
765
753
|
"codemod": "openwop.codemod.pack-manifest-v2",
|
|
766
|
-
"note": "Proposed: the codemod refuses `ed25519` and `sigstore`
|
|
754
|
+
"note": "Proposed: the codemod refuses `ed25519` and `sigstore` — those packs are re-signed in `registry/v2/`, never relabeled.",
|
|
767
755
|
"sources": [
|
|
768
756
|
{
|
|
769
757
|
"file": "schemas/registry-version-manifest.schema.json",
|
|
@@ -777,7 +765,7 @@
|
|
|
777
765
|
"surface": "`connection-packs.md` clause 6: an installed pack takes precedence over a built-in of the same `provider.id` when its version is greater-than-or-equal",
|
|
778
766
|
"kind": "prose-convention",
|
|
779
767
|
"deprecatedIn": null,
|
|
780
|
-
"authority": "RFC 0177
|
|
768
|
+
"authority": "RFC 0177 §D.1 (RFC 0095 UQ4 decided: fail-closed `connection_provider_conflict`; qualified `<packName>#<id>` form)",
|
|
781
769
|
"removeIn": "2.0",
|
|
782
770
|
"replacement": "fail-closed conflict; the qualified form",
|
|
783
771
|
"codemod": null,
|
|
@@ -795,7 +783,7 @@
|
|
|
795
783
|
"surface": "the nine `/v1/host/sample/*`, `/v1/host/workspace/files*` and `/v1/packs-test/*` seam/test operations in `api/openapi.yaml` and `spec/v1/operation-path-manifest.json`, and the `testSeams` discovery-flag proposals",
|
|
796
784
|
"kind": "path",
|
|
797
785
|
"deprecatedIn": null,
|
|
798
|
-
"authority": "RFC 0168
|
|
786
|
+
"authority": "RFC 0168 §C (seams are the profile `openwop-conformance-seams-v2` with `api/seams-v2.yaml`; forbidden from the capability namespace)",
|
|
799
787
|
"removeIn": "2.0",
|
|
800
788
|
"replacement": "`api/seams-v2.yaml`; `profiles[]` membership",
|
|
801
789
|
"codemod": null,
|
|
@@ -813,7 +801,7 @@
|
|
|
813
801
|
"surface": "the 29 corpus-coherence scenarios reported `blocked` in every host bundle",
|
|
814
802
|
"kind": "artifact",
|
|
815
803
|
"deprecatedIn": null,
|
|
816
|
-
"authority": "RFC 0168
|
|
804
|
+
"authority": "RFC 0168 §D.1 (spec-repo CI; never in a bundle)",
|
|
817
805
|
"removeIn": "2.0",
|
|
818
806
|
"replacement": "`scripts/check-spec-coherence.mjs`",
|
|
819
807
|
"codemod": null,
|
|
@@ -831,11 +819,11 @@
|
|
|
831
819
|
"surface": "the published suite tarball's vendored `api/` and `schemas/` copies (and `src`, suite self-tests)",
|
|
832
820
|
"kind": "artifact",
|
|
833
821
|
"deprecatedIn": null,
|
|
834
|
-
"authority": "RFC 0168
|
|
822
|
+
"authority": "RFC 0168 §D.2 (`dist`, `fixtures`, `vectors` only; corpus as the digest-checked peer dependency `@openwop/spec-artifacts`)",
|
|
835
823
|
"removeIn": "2.0",
|
|
836
824
|
"replacement": "`@openwop/spec-artifacts`",
|
|
837
825
|
"codemod": null,
|
|
838
|
-
"note": "Proposed: the 1.138.1 mechanism
|
|
826
|
+
"note": "Proposed: the 1.138.1 mechanism — one source, no copy.",
|
|
839
827
|
"sources": [
|
|
840
828
|
{
|
|
841
829
|
"file": "conformance/README.md",
|
|
@@ -849,7 +837,7 @@
|
|
|
849
837
|
"surface": "certification bundle v2 (`bundleVersion: \"2\"`, root `additionalProperties: true`, `witnessSha256` absent, unsigned)",
|
|
850
838
|
"kind": "artifact",
|
|
851
839
|
"deprecatedIn": null,
|
|
852
|
-
"authority": "RFC 0168
|
|
840
|
+
"authority": "RFC 0168 §E (bundle v3: closed root, required witness/build/tier/count, Ed25519 attestation)",
|
|
853
841
|
"removeIn": "2.0",
|
|
854
842
|
"removalTrigger": "v1-end-of-support",
|
|
855
843
|
"replacement": "bundle v3 (`schemas/v2/certification-bundle.schema.json`)",
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
3
|
"$id": "https://openwop.dev/spec/v1/deprecations.schema.json",
|
|
4
4
|
"title": "OpenWOP deprecation register",
|
|
5
|
-
"description": "Shape of spec/v1/deprecations.json
|
|
5
|
+
"description": "Shape of spec/v1/deprecations.json — the index of every surface an RFC or spec annotation has deprecated in v1.x (status: deprecated), plus surfaces the v2 program proposes to deprecate but no RFC has yet (status: proposed). In v1.x the register records deprecations; it never creates one (COMPATIBILITY.md §7). It is not a wire artifact and is deliberately kept out of schemas/.",
|
|
6
6
|
"type": "object",
|
|
7
7
|
"additionalProperties": false,
|
|
8
8
|
"required": [
|
|
@@ -95,7 +95,7 @@
|
|
|
95
95
|
"removeIn": {
|
|
96
96
|
"type": "string",
|
|
97
97
|
"pattern": "^[0-9]+\\.[0-9]+$",
|
|
98
|
-
"description": "Protocol major.minor at which the surface is removed. v1.x deprecations remove no earlier than 2.0 (COMPATIBILITY.md
|
|
98
|
+
"description": "Protocol major.minor at which the surface is removed. v1.x deprecations remove no earlier than 2.0 (COMPATIBILITY.md §7)."
|
|
99
99
|
},
|
|
100
100
|
"replacement": {
|
|
101
101
|
"type": "string",
|
|
@@ -136,28 +136,12 @@
|
|
|
136
136
|
}
|
|
137
137
|
},
|
|
138
138
|
"removalTrigger": {
|
|
139
|
-
"
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
"v2.0-cut",
|
|
144
|
-
"v1-end-of-support"
|
|
145
|
-
]
|
|
146
|
-
},
|
|
147
|
-
{
|
|
148
|
-
"type": "array",
|
|
149
|
-
"items": {
|
|
150
|
-
"type": "string",
|
|
151
|
-
"enum": [
|
|
152
|
-
"v2.0-cut",
|
|
153
|
-
"v1-end-of-support"
|
|
154
|
-
]
|
|
155
|
-
},
|
|
156
|
-
"minItems": 1,
|
|
157
|
-
"uniqueItems": true
|
|
158
|
-
}
|
|
139
|
+
"type": "string",
|
|
140
|
+
"enum": [
|
|
141
|
+
"v2.0-cut",
|
|
142
|
+
"v1-end-of-support"
|
|
159
143
|
],
|
|
160
|
-
"description": "RFC 0176
|
|
144
|
+
"description": "RFC 0176 §C.2: the event that removes the surface. v2.0-cut — absent from the v2 representation from the cut; v1-end-of-support — removed from the v1 representation when every INTEROP-MATRIX host has produced a non-vacuous v2 bundle plus 90 days (charter Phase 0 rule). Optional; removeIn stays the version."
|
|
161
145
|
}
|
|
162
146
|
},
|
|
163
147
|
"allOf": [
|
package/spec/v1/extensions.json
CHANGED
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
"rfc": "0155 \u00a7C",
|
|
38
38
|
"coverage": {
|
|
39
39
|
"rule": "Derived by scripts/generate-extension-registry-coverage.mjs from the top-level keys of schemas/capabilities.schema.json. coreFields = the openwop-discovery-core predicate fields (profiles.md); metadataFields = keys that describe the document or host rather than gate an optional feature (each carries its rationale in metadataRationale; a key that gates behaviour may not be listed there); covered = extension families reached by some record capabilityPath; uncovered = every other family. Uncovered means no registry record exists \u2014 not that the family is non-compliant. Regenerate with --write; the gate runs --check.",
|
|
40
|
-
"familiesTotal":
|
|
40
|
+
"familiesTotal": 92,
|
|
41
41
|
"coreFields": [
|
|
42
42
|
"limits",
|
|
43
43
|
"protocolVersion",
|
|
@@ -153,8 +153,7 @@
|
|
|
153
153
|
"workspace"
|
|
154
154
|
],
|
|
155
155
|
"uncovered": [
|
|
156
|
-
"preferredVersion"
|
|
157
|
-
"signingKeys"
|
|
156
|
+
"preferredVersion"
|
|
158
157
|
]
|
|
159
158
|
},
|
|
160
159
|
"extensions": [
|
package/spec/v2/declaration.json
CHANGED
|
@@ -121,13 +121,6 @@
|
|
|
121
121
|
"note": null,
|
|
122
122
|
"disposition": "kept"
|
|
123
123
|
},
|
|
124
|
-
{
|
|
125
|
-
"key": "signingKeys",
|
|
126
|
-
"kind": "metadata",
|
|
127
|
-
"schema": "metadata/signingKeys",
|
|
128
|
-
"note": "host bundle-signing public keys (RFC 0168 §E.2); v2-only — the surface the RFC named when it disposed of \"a signature nobody can check\"",
|
|
129
|
-
"disposition": "kept"
|
|
130
|
-
},
|
|
131
124
|
{
|
|
132
125
|
"key": "discovery",
|
|
133
126
|
"kind": "metadata",
|
package/spec/v2/release.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
|
-
"$comment": "RFC 0172
|
|
3
|
-
"version": "2.0.0-rc.
|
|
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.0.0-rc.8",
|
|
4
4
|
"corpusTag": null,
|
|
5
5
|
"updated": "2026-09-03"
|
|
6
6
|
}
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
-
"$id": "https://openwop.dev/spec/v2/webhook-delivery.schema.json",
|
|
4
|
-
"title": "Webhook delivery envelope (webhooks.md \u00a7Delivery)",
|
|
5
|
-
"description": "The body of an outbound webhook delivery. Written 2026-09-04 because it did not exist: the envelope was specified by one sentence in webhooks.md \u00a7Delivery ('the body is `{ runId, workspaceId, event }` where `event` is the verbatim run event') and no artifact bound it, while the NESTED event.runId was bound all along through run-event.schema.json. Two production hosts arrived at that asymmetry independently \u2014 one asking what major an outbound payload speaks, the other answering from the $ref graph \u2014 and both concluded the gap was a missing artifact rather than a missing paragraph. An emitter that projects correctly could be asserted but not checked, which is the wrong way round.",
|
|
6
|
-
"type": "object",
|
|
7
|
-
"additionalProperties": false,
|
|
8
|
-
"required": [
|
|
9
|
-
"runId",
|
|
10
|
-
"event"
|
|
11
|
-
],
|
|
12
|
-
"properties": {
|
|
13
|
-
"runId": {
|
|
14
|
-
"$ref": "ids.schema.json#/$defs/runId",
|
|
15
|
-
"description": "The run this delivery is about, tenant-bound per identity.md \u00a75. An outbound emission is not a response to a versioned request, so nothing about the request cycle supplies the form \u2014 the grammar does, and it is the same grammar everywhere a v2 runId is rendered. A host that projects on responses and not on emissions hands the subscriber an id the client never saw: the correlation filter matches nothing, with no error, no 4xx and no log line. A tier-1 host hit exactly that, and the silence is why this field is bound here rather than left to the prose."
|
|
16
|
-
},
|
|
17
|
-
"workspaceId": {
|
|
18
|
-
"$ref": "ids.schema.json#/$defs/workspaceId",
|
|
19
|
-
"description": "The workspace the run belongs to. OPTIONAL, and present exactly when RunSnapshot.owner.workspace is (identity.md \u00a71: owner is { tenant, workspace?, subject }). This field was REQUIRED for the first six hours of the schema's life, which made the envelope tighter than the identity model it renders: a run in a single-workspace tenant has no workspace, and the only way a host could satisfy the envelope was to put its tenant id in this field. A tier-1 host proposed exactly that \u2014 `owner.workspace ?? tenantId` \u2014 and asked for a veto. This is the veto. A tenant id in a workspace field is two facts wearing one name, and every consumer downstream would have to know which host lied."
|
|
20
|
-
},
|
|
21
|
-
"event": {
|
|
22
|
-
"$ref": "run-event.schema.json",
|
|
23
|
-
"description": "The verbatim run event (events.md). 'Verbatim' is load-bearing: the envelope is one of the three renderings generated from a single payload definition (RFC 0171 \u00a7A.4), so this is the event as persisted, not a re-serialization. Its own runId is bound by run-event.schema.json to the same $def as the envelope's, which is what made the envelope's omission survivable for as long as it did \u2014 and invisible for just as long."
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
}
|