@openwop/spec-artifacts 2.45.22 → 2.45.23

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.
@@ -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 §Proposal; spec/v1/capabilities.md §Discovery document root (\"deprecated legacy shape, tolerated only by the schema's additionalProperties: true\")",
12
+ "authority": "RFC 0073 \u00a7Proposal; spec/v1/capabilities.md \u00a7Discovery 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,
@@ -27,7 +27,7 @@
27
27
  "v2.0-cut",
28
28
  "v1-end-of-support"
29
29
  ],
30
- "note": " RFC 0176 §C.2: absent from the v2 representation at the cut; removed from the v1 representation at v1 end-of-support."
30
+ "note": " RFC 0176 \u00a7C.2: absent from the v2 representation at the cut; removed from the v1 representation at v1 end-of-support."
31
31
  },
32
32
  {
33
33
  "id": "openwop.deprecation.host-dotted-mirror",
@@ -35,9 +35,9 @@
35
35
  "surface": "host-side `host.<family>` dotted mirror of root capability families",
36
36
  "kind": "discovery-shape",
37
37
  "deprecatedIn": "RFC 0073 (v1.1)",
38
- "authority": "RFC 0073 §3 \"Reference host — canonical root + deprecated mirror\"; retirement gated on the v2 major (RFC 0073 UQ1/UQ2)",
38
+ "authority": "RFC 0073 \u00a73 \"Reference host \u2014 canonical root + deprecated mirror\"; retirement gated on the v2 major (RFC 0073 UQ1/UQ2)",
39
39
  "removeIn": "2.0",
40
- "replacement": "one declaration file: document-root key ≡ pack peer-dependency identifier ≡ spec section anchor (v2 program C.2)",
40
+ "replacement": "one declaration file: document-root key \u2261 pack peer-dependency identifier \u2261 spec section anchor (v2 program C.2)",
41
41
  "codemod": null,
42
42
  "sources": [
43
43
  {
@@ -49,15 +49,15 @@
49
49
  "v2.0-cut",
50
50
  "v1-end-of-support"
51
51
  ],
52
- "note": " RFC 0176 §C.2: absent from the v2 representation at the cut; removed from the v1 representation at v1 end-of-support."
52
+ "note": " RFC 0176 \u00a7C.2: absent from the v2 representation at the cut; removed from the v1 representation at v1 end-of-support."
53
53
  },
54
54
  {
55
55
  "id": "openwop.deprecation.profile-openwop-core-alias",
56
56
  "status": "deprecated",
57
57
  "surface": "profile id `openwop-core` (alias of `openwop-discovery-core`)",
58
58
  "kind": "profile-id",
59
- "deprecatedIn": "RFC 0155 §A (v1.2, 2026-08-16)",
60
- "authority": "spec/v1/profiles.md §`openwop-discovery-core` (canonical) — alias `openwop-core` (deprecated); RFC 0155 §A: removal \"no earlier than v2\"",
59
+ "deprecatedIn": "RFC 0155 \u00a7A (v1.2, 2026-08-16)",
60
+ "authority": "spec/v1/profiles.md \u00a7`openwop-discovery-core` (canonical) \u2014 alias `openwop-core` (deprecated); RFC 0155 \u00a7A: removal \"no earlier than v2\"",
61
61
  "removeIn": "2.0",
62
62
  "replacement": "openwop-discovery-core",
63
63
  "codemod": null,
@@ -74,8 +74,8 @@
74
74
  "status": "deprecated",
75
75
  "surface": "state-key prefix conventions as a back-compat layer over typed channels",
76
76
  "kind": "prose-convention",
77
- "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\")",
78
- "authority": "spec/v1/channels-and-reducers.md §Why this exists",
77
+ "deprecatedIn": "spec/v1/channels-and-reducers.md (v1.0; no RFC cited \u2014 the spec text says the conventions are \"a back-compat layer that the spec deprecates over time\")",
78
+ "authority": "spec/v1/channels-and-reducers.md \u00a7Why this exists",
79
79
  "removeIn": "2.0",
80
80
  "replacement": "typed channels with explicit reducers",
81
81
  "codemod": null,
@@ -93,8 +93,8 @@
93
93
  "status": "deprecated",
94
94
  "surface": "capabilities.a2a `supported: true` without `protocolVersions[]`",
95
95
  "kind": "discovery-field",
96
- "deprecatedIn": "RFC 0152 §A",
97
- "authority": "spec/v1/a2a-integration.md §Discovery: \"`supported: true` without `protocolVersions` is deprecated\"",
96
+ "deprecatedIn": "RFC 0152 \u00a7A",
97
+ "authority": "spec/v1/a2a-integration.md \u00a7Discovery: \"`supported: true` without `protocolVersions` is deprecated\"",
98
98
  "removeIn": "2.0",
99
99
  "replacement": "non-empty `protocolVersions[]` + `preferredVersion` (v2: a capability facet under the closed root, v2 program C.2)",
100
100
  "codemod": null,
@@ -111,8 +111,8 @@
111
111
  "status": "deprecated",
112
112
  "surface": "capabilities.mcp `supported: true` without `protocolVersions[]`",
113
113
  "kind": "discovery-field",
114
- "deprecatedIn": "RFC 0153 §A",
115
- "authority": "spec/v1/mcp-integration.md §Discovery: \"Unqualified `supported: true` is deprecated and cannot substantiate a current-MCP claim\"",
114
+ "deprecatedIn": "RFC 0153 \u00a7A",
115
+ "authority": "spec/v1/mcp-integration.md \u00a7Discovery: \"Unqualified `supported: true` is deprecated and cannot substantiate a current-MCP claim\"",
116
116
  "removeIn": "2.0",
117
117
  "replacement": "non-empty `protocolVersions[]` (MCP date form) + `preferredVersion`",
118
118
  "codemod": null,
@@ -130,7 +130,7 @@
130
130
  "surface": "workflow node `config.outputArtifactType` bag entry",
131
131
  "kind": "schema-field",
132
132
  "deprecatedIn": "schemas/workflow-definition.schema.json (first-class `artifactType` field)",
133
- "authority": "schemas/workflow-definition.schema.json — `artifactType` description: \"replaces the deprecated config.outputArtifactType bag entry\"",
133
+ "authority": "schemas/workflow-definition.schema.json \u2014 `artifactType` description: \"replaces the deprecated config.outputArtifactType bag entry\"",
134
134
  "removeIn": "2.0",
135
135
  "replacement": "node.artifactType",
136
136
  "codemod": null,
@@ -148,7 +148,7 @@
148
148
  "surface": "workflow node `config.chatCard` bag entry",
149
149
  "kind": "schema-field",
150
150
  "deprecatedIn": "schemas/workflow-definition.schema.json (first-class `chatCard` field)",
151
- "authority": "schemas/workflow-definition.schema.json — `chatCard` description: \"replaces the deprecated config.chatCard bag entry\"",
151
+ "authority": "schemas/workflow-definition.schema.json \u2014 `chatCard` description: \"replaces the deprecated config.chatCard bag entry\"",
152
152
  "removeIn": "2.0",
153
153
  "replacement": "node.chatCard",
154
154
  "codemod": null,
@@ -166,7 +166,7 @@
166
166
  "surface": "capabilities.auth.subjectLinking",
167
167
  "kind": "discovery-field",
168
168
  "deprecatedIn": "RFC 0164 (suite 1.151.0, 2026-09-02)",
169
- "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",
169
+ "authority": "RFC 0164 \u00a7A.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",
170
170
  "removeIn": "2.0",
171
171
  "replacement": "the profile pair itself; v2 Subject record with `keyClass` (v2 program C.3)",
172
172
  "codemod": null,
@@ -188,7 +188,7 @@
188
188
  "surface": "certification bundle format v1 (schemas/conformance-certification-bundle.schema.json, `bundleVersion: \"1\"`)",
189
189
  "kind": "artifact",
190
190
  "deprecatedIn": "RFC 0148 (suite 1.114.0, 2026-08-12); `--certify` default flipped to v2 at suite 1.152.0",
191
- "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)",
191
+ "authority": "COMPATIBILITY.md \u00a72 \"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)",
192
192
  "removeIn": "2.0",
193
193
  "replacement": "certification bundle v2 (schemas/certification-bundle-v2.schema.json); bundle v3 at v2.0 (v2 program C.1)",
194
194
  "codemod": null,
@@ -209,8 +209,8 @@
209
209
  "status": "deprecated",
210
210
  "surface": "`Capabilities-Etag` response header on GET /.well-known/openwop",
211
211
  "kind": "header",
212
- "deprecatedIn": "RFC 0165 §C.2 (suite 1.155.0, 2026-09-02)",
213
- "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",
212
+ "deprecatedIn": "RFC 0165 \u00a7C.2 (suite 1.155.0, 2026-09-02)",
213
+ "authority": "RFC 0165 \u00a7C.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",
214
214
  "removeIn": "2.0",
215
215
  "replacement": "standard `ETag` / `If-None-Match` on the discovery document (dual-emitted through v1.x)",
216
216
  "codemod": null,
@@ -221,14 +221,14 @@
221
221
  },
222
222
  {
223
223
  "file": "RFCS/0165-v2-preparation-wire-shapes.md",
224
- "token": "§C.2 Discovery cache validator"
224
+ "token": "\u00a7C.2 Discovery cache validator"
225
225
  }
226
226
  ],
227
227
  "removalTrigger": [
228
228
  "v2.0-cut",
229
229
  "v1-end-of-support"
230
230
  ],
231
- "note": " RFC 0176 §C.2: absent from the v2 representation at the cut; removed from the v1 representation at v1 end-of-support."
231
+ "note": " RFC 0176 \u00a7C.2: absent from the v2 representation at the cut; removed from the v1 representation at v1 end-of-support."
232
232
  },
233
233
  {
234
234
  "id": "openwop.deprecation.contract-provenance",
@@ -254,8 +254,8 @@
254
254
  "status": "deprecated",
255
255
  "surface": "the `X-openwop-*` webhook delivery header family (Webhook-Id, Event-Type, Timestamp, Signature, Signature-Algorithm)",
256
256
  "kind": "header",
257
- "deprecatedIn": "RFC 0165 §C.1 (suite 1.155.0, 2026-09-02)",
258
- "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",
257
+ "deprecatedIn": "RFC 0165 \u00a7C.1 (suite 1.155.0, 2026-09-02)",
258
+ "authority": "RFC 0165 \u00a7C.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",
259
259
  "removeIn": "2.0",
260
260
  "replacement": "`OpenWOP-Webhook-Id`, `OpenWOP-Event-Type`, `OpenWOP-Timestamp`, `OpenWOP-Signature: sha256={hex}`, `OpenWOP-Signature-Algorithm`",
261
261
  "codemod": null,
@@ -267,7 +267,7 @@
267
267
  },
268
268
  {
269
269
  "file": "RFCS/0165-v2-preparation-wire-shapes.md",
270
- "token": "§C.1 Webhook headers"
270
+ "token": "\u00a7C.1 Webhook headers"
271
271
  }
272
272
  ],
273
273
  "removalTrigger": "v2.0-cut"
@@ -298,14 +298,14 @@
298
298
  {
299
299
  "id": "openwop.deprecation.engine-version-type-split",
300
300
  "status": "proposed",
301
- "surface": "`engineVersion` typed integer at the discovery root, number on run-snapshot (corrected 2026-09-04 — the prose MUST requires a number), and string on run-event / three event payloads",
301
+ "surface": "`engineVersion` typed integer at the discovery root, number on run-snapshot (corrected 2026-09-04 \u2014 the prose MUST requires a number), and string on run-event / three event payloads",
302
302
  "kind": "schema-field",
303
303
  "deprecatedIn": null,
304
- "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)",
304
+ "authority": "RFC 0165 \u00a7A.4 (recorded; unification is a v2 C.5 item \u2014 changing either type is a COMPATIBILITY \u00a72.2 break in v1.x)",
305
305
  "removeIn": "2.0",
306
306
  "replacement": "one integer `engineVersion` on every carrier (v2)",
307
307
  "codemod": null,
308
- "note": "In v1.x the per-event value is the decimal string rendering of the root integer (version-negotiation.md §\"Protocol version grammar\").",
308
+ "note": "In v1.x the per-event value is the decimal string rendering of the root integer (version-negotiation.md \u00a7\"Protocol version grammar\").",
309
309
  "sources": [
310
310
  {
311
311
  "file": "spec/v1/version-negotiation.md",
@@ -324,7 +324,7 @@
324
324
  "surface": "`since` query parameter on GET /v1/runs/{runId}/events/poll",
325
325
  "kind": "discovery-field",
326
326
  "deprecatedIn": null,
327
- "authority": "v2 charter C.4 (RFC 0167 §E; version-negotiation.md names `lastSequence` authoritative and `since` back-compat for pre-v1.0 deployments)",
327
+ "authority": "v2 charter C.4 (RFC 0167 \u00a7E; version-negotiation.md names `lastSequence` authoritative and `since` back-compat for pre-v1.0 deployments)",
328
328
  "removeIn": "2.0",
329
329
  "replacement": "`lastSequence` in v1.x; the v2 C.4 child defines the cursor (RFC 0165 G7)",
330
330
  "codemod": null,
@@ -343,7 +343,7 @@
343
343
  "surface": "`X-Dedup`, `X-Force-Engine-Version`, `X-Pack-Sha`, `X-Pack-Signing-Method` request headers",
344
344
  "kind": "header",
345
345
  "deprecatedIn": null,
346
- "authority": "v2 charter C.4 (RFC 0167 §E): `OpenWOP-*` for every non-standard header; RFC 0165 §C.1 covered only the webhook family",
346
+ "authority": "v2 charter C.4 (RFC 0167 \u00a7E): `OpenWOP-*` for every non-standard header; RFC 0165 \u00a7C.1 covered only the webhook family",
347
347
  "removeIn": "2.0",
348
348
  "replacement": "`OpenWOP-Dedup`, `OpenWOP-Force-Engine-Version` (seam-only, moves to the seams profile), `OpenWOP-Pack-Sha`, `OpenWOP-Pack-Signing-Method`",
349
349
  "codemod": null,
@@ -410,7 +410,7 @@
410
410
  "surface": "node config `credentialProvider` key",
411
411
  "kind": "schema-field",
412
412
  "deprecatedIn": "node-packs.md (`provider` is canonical; `credentialProvider` is named as the legacy alias)",
413
- "authority": "spec/v1/node-packs.md §Credential resolution (\"and the legacy alias `credentialProvider`\")",
413
+ "authority": "spec/v1/node-packs.md \u00a7Credential resolution (\"and the legacy alias `credentialProvider`\")",
414
414
  "removeIn": "2.0",
415
415
  "replacement": "`provider`",
416
416
  "codemod": null,
@@ -446,7 +446,7 @@
446
446
  "surface": "`approvalRequested` / `clarificationRequested` legacy event payload definitions and the free-text `feedback` field",
447
447
  "kind": "schema-field",
448
448
  "deprecatedIn": "run-event-payloads.schema.json + interrupt-profiles.md (the interrupt primitive `interrupt.requested {kind}` is canonical)",
449
- "authority": "schemas/run-event-payloads.schema.json $defs approvalRequested / clarificationRequested descriptions; spec/v1/interrupt-profiles.md §Approval",
449
+ "authority": "schemas/run-event-payloads.schema.json $defs approvalRequested / clarificationRequested descriptions; spec/v1/interrupt-profiles.md \u00a7Approval",
450
450
  "removeIn": "2.0",
451
451
  "replacement": "`interrupt.requested` with `kind: approval | clarification`; `refineFeedback`",
452
452
  "codemod": null,
@@ -467,8 +467,8 @@
467
467
  "status": "deprecated",
468
468
  "surface": "`a2a-0.3-legacy` A2A profile id",
469
469
  "kind": "profile-id",
470
- "deprecatedIn": "RFC 0152 §A (A2A 1.0.0 published 2026-03-12; legacy window ends 2027-03-12)",
471
- "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",
470
+ "deprecatedIn": "RFC 0152 \u00a7A (A2A 1.0.0 published 2026-03-12; legacy window ends 2027-03-12)",
471
+ "authority": "spec/v1/a2a-integration.md \u00a7Discovery (\"a host SHOULD NOT advertise `a2a-0.3-legacy`\" after 2027-03-12); RFC 0152 register G1/R1",
472
472
  "removeIn": "2.0",
473
473
  "replacement": "`a2a-1.0` only; the v2 C.8 child removes the legacy path",
474
474
  "codemod": null,
@@ -489,8 +489,8 @@
489
489
  "status": "deprecated",
490
490
  "surface": "`mcp-2025-06-18-legacy` MCP profile id",
491
491
  "kind": "profile-id",
492
- "deprecatedIn": "RFC 0153 §A (current profile accepted 2026-08-12; legacy window ends 2027-08-12)",
493
- "authority": "spec/v1/mcp-integration.md §Discovery; RFC 0153 register G1/R1",
492
+ "deprecatedIn": "RFC 0153 \u00a7A (current profile accepted 2026-08-12; legacy window ends 2027-08-12)",
493
+ "authority": "spec/v1/mcp-integration.md \u00a7Discovery; RFC 0153 register G1/R1",
494
494
  "removeIn": "2.0",
495
495
  "replacement": "`mcp-2026-07-28` only; the v2 C.8 child removes the legacy path",
496
496
  "codemod": null,
@@ -511,8 +511,8 @@
511
511
  "status": "deprecated",
512
512
  "surface": "`openwop-Webhook-Signature: v1=<hex>` header the pre-1.9.0 SDK helpers read (never in any spec file)",
513
513
  "kind": "header",
514
- "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)",
515
- "authority": "RFC 0165 §C.3",
514
+ "deprecatedIn": "RFC 0165 \u00a7C.3 (SDK-versus-spec defect; fixed in openwop-sdks TS 1.9.0 / Py 1.7.0 / Go v1.6.0)",
515
+ "authority": "RFC 0165 \u00a7C.3",
516
516
  "removeIn": "2.0",
517
517
  "replacement": "`X-openwop-Signature: sha256={hex}` in v1.x; `OpenWOP-Signature` in v2",
518
518
  "codemod": null,
@@ -527,10 +527,10 @@
527
527
  {
528
528
  "id": "openwop.deprecation.undeclared-host-extension-families",
529
529
  "status": "proposed",
530
- "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",
530
+ "surface": "the 11 `\u00a7host.*` families RFC 0144 classed `extension` (brand, canvas, chat, coordination, dataIntegration, entities, kanban, knowledge, launchStudio, messaging, webResearch) \u2014 declared in neither the dotted nor the root spelling",
531
531
  "kind": "discovery-shape",
532
532
  "deprecatedIn": null,
533
- "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",
533
+ "authority": "v2 charter C.2 (RFC 0167 \u00a7E): one declaration file; extensions live under one namespaced key; RFC 0144 \u00a7A classified them deliberately as extension namespaces",
534
534
  "removeIn": "2.0",
535
535
  "replacement": "the v2 extension namespace key (C.2 child); the prose sections move to spec/v2/ext/",
536
536
  "codemod": null,
@@ -549,9 +549,9 @@
549
549
  "surface": "the `/v1/` path-key prefix on every versioned operation",
550
550
  "kind": "path",
551
551
  "deprecatedIn": null,
552
- "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)",
552
+ "authority": "RFC 0172 \u00a7A.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)",
553
553
  "removeIn": "2.0",
554
- "replacement": "unversioned path keys + `OpenWOP-Version` negotiation (RFC 0172 §A)",
554
+ "replacement": "unversioned path keys + `OpenWOP-Version` negotiation (RFC 0172 \u00a7A)",
555
555
  "codemod": null,
556
556
  "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.",
557
557
  "sources": [
@@ -568,11 +568,11 @@
568
568
  "surface": "the per-RFC `G<n>` local gap id as the register's ID column",
569
569
  "kind": "prose-convention",
570
570
  "deprecatedIn": "RFC 0178 (v2.0)",
571
- "authority": "RFC 0178 §B.2 (the `openwop.gap.<rfc>.<n>` id is canonical; `G<n>` is an alias until 2.1)",
571
+ "authority": "RFC 0178 \u00a7B.2 (the `openwop.gap.<rfc>.<n>` id is canonical; `G<n>` is an alias until 2.1)",
572
572
  "removeIn": "2.1",
573
573
  "replacement": "`openwop.gap.<rfc>.<n>` in the ID column",
574
574
  "codemod": null,
575
- "note": "Proposed: the alias survives through 2.0 so v1 register citations keep resolving; removed at 2.1. Status flipped proposed→deprecated 2026-09-17: the surface has no occurrence in spec/v2, schemas/v2 or api/v2 (token grep, W7).",
575
+ "note": "Proposed: the alias survives through 2.0 so v1 register citations keep resolving; removed at 2.1. Status flipped proposed\u2192deprecated 2026-09-17: the surface has no occurrence in spec/v2, schemas/v2 or api/v2 (token grep, W7).",
576
576
  "sources": [
577
577
  {
578
578
  "file": "spec/v1/gaps.schema.json",
@@ -586,7 +586,7 @@
586
586
  "surface": "registry version manifest `deprecated` boolean (an advisory version flag that collides with the JSON Schema `deprecated` annotation keyword)",
587
587
  "kind": "schema-field",
588
588
  "deprecatedIn": null,
589
- "authority": "RFC 0178 §A.1 (renamed so the annotation keyword is unambiguous); the rename rides C.10's registry/v2 re-sign",
589
+ "authority": "RFC 0178 \u00a7A.1 (renamed so the annotation keyword is unambiguous); the rename rides C.10's registry/v2 re-sign",
590
590
  "removeIn": "2.0",
591
591
  "replacement": "`versionDeprecated`",
592
592
  "codemod": null,
@@ -605,7 +605,7 @@
605
605
  "surface": "the two-segment interrupt resume token `base64url(payload).hmac` with no scheme id, algorithm, or key id",
606
606
  "kind": "artifact",
607
607
  "deprecatedIn": null,
608
- "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",
608
+ "authority": "RFC 0170 \u00a7E.1 (`ow2.<alg>.<kid>.<payload>.<mac>`); interrupt.md \u00a7Resume tokens' rotation rule references an algorithm-version discriminator the format does not contain",
609
609
  "removeIn": "2.0",
610
610
  "replacement": "`ow2.<alg>.<kid>.<payload>.<mac>`; issued v1 tokens resolvable under `kid: legacy` until their expiry",
611
611
  "codemod": null,
@@ -624,7 +624,7 @@
624
624
  "surface": "`details.retryAfter`, `details.retryAfterMs`, `details.retryAfterSeconds` on error envelopes (three body spellings beside the `Retry-After` header)",
625
625
  "kind": "schema-field",
626
626
  "deprecatedIn": null,
627
- "authority": "RFC 0171 §B.2 (retry timing lives in `Retry-After` only)",
627
+ "authority": "RFC 0171 \u00a7B.2 (retry timing lives in `Retry-After` only)",
628
628
  "removeIn": "2.0",
629
629
  "replacement": "the `Retry-After` header",
630
630
  "codemod": null,
@@ -647,7 +647,7 @@
647
647
  "surface": "dotted reserved keys in `RunOptions.configurable` (`ai.provider`, `ai.model`, `ai.credentialRef`, `distillation.tokenBudget`) and the open map they live in",
648
648
  "kind": "schema-field",
649
649
  "deprecatedIn": null,
650
- "authority": "RFC 0171 §D.1 (closed, nested, versioned `configurable`)",
650
+ "authority": "RFC 0171 \u00a7D.1 (closed, nested, versioned `configurable`)",
651
651
  "removeIn": "2.0",
652
652
  "replacement": "`configurable.ai.*`, `configurable.distillation.*`; vendor keys under `configurable.extensions.<org>`",
653
653
  "codemod": "openwop.codemod.configurable-v2",
@@ -666,7 +666,7 @@
666
666
  "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)",
667
667
  "kind": "discovery-field",
668
668
  "deprecatedIn": null,
669
- "authority": "RFC 0173 §A.1 (an obligation of the surface, never a discovery flag; RFC 0164 §22's ruling applied corpus-wide)",
669
+ "authority": "RFC 0173 \u00a7A.1 (an obligation of the surface, never a discovery flag; RFC 0164 \u00a722's ruling applied corpus-wide)",
670
670
  "removeIn": "2.0",
671
671
  "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[]`",
672
672
  "codemod": null,
@@ -693,11 +693,11 @@
693
693
  "surface": "`supportedTransports[]` at the discovery root (`rest | mcp | a2a | grpc`)",
694
694
  "kind": "discovery-field",
695
695
  "deprecatedIn": "RFC 0175 (v2.0)",
696
- "authority": "RFC 0175 §B.1 (REST is the wire; A2A and MCP are compositions with first-class facets; gRPC is demoted)",
696
+ "authority": "RFC 0175 \u00a7B.1 (REST is the wire; A2A and MCP are compositions with first-class facets; gRPC is demoted)",
697
697
  "removeIn": "2.0",
698
698
  "replacement": "none; `a2a.*` and `mcp.*` facets",
699
699
  "codemod": "openwop.codemod.discovery-document-v2",
700
- "note": "Proposed: nothing in the corpus reads the `mcp` or `a2a` members (profiles.md reads only `rest`). Status flipped proposed→deprecated 2026-09-17: the surface has no occurrence in spec/v2, schemas/v2 or api/v2 (token grep, W7).",
700
+ "note": "Proposed: nothing in the corpus reads the `mcp` or `a2a` members (profiles.md reads only `rest`). Status flipped proposed\u2192deprecated 2026-09-17: the surface has no occurrence in spec/v2, schemas/v2 or api/v2 (token grep, W7).",
701
701
  "sources": [
702
702
  {
703
703
  "file": "spec/v1/capabilities.md",
@@ -712,7 +712,7 @@
712
712
  "surface": "`capabilities.grpc` block and `grpc-transport.md` as a core Stable document with RFC 2119 MUSTs",
713
713
  "kind": "discovery-field",
714
714
  "deprecatedIn": null,
715
- "authority": "RFC 0175 §A.1 (demoted to `spec/v2/ext/grpc-transport/`, `unwitnessable`, `adoption: none`; the door back into core is named)",
715
+ "authority": "RFC 0175 \u00a7A.1 (demoted to `spec/v2/ext/grpc-transport/`, `unwitnessable`, `adoption: none`; the door back into core is named)",
716
716
  "removeIn": "2.0",
717
717
  "replacement": "`spec/v2/ext/grpc-transport/` (documented, not advertised)",
718
718
  "codemod": "openwop.codemod.discovery-document-v2",
@@ -728,16 +728,16 @@
728
728
  {
729
729
  "id": "openwop.deprecation.well-known-wop-alias",
730
730
  "status": "proposed",
731
- "surface": "`/.well-known/wop` served byte-identically with `/.well-known/openwop` (MyndHyve, the wop → openwop rebrand alias; the C.5 precedent)",
731
+ "surface": "`/.well-known/wop` served byte-identically with `/.well-known/openwop` (MyndHyve, the wop \u2192 openwop rebrand alias; the C.5 precedent)",
732
732
  "kind": "path",
733
733
  "deprecatedIn": null,
734
- "authority": "RFC 0176 §C.3",
734
+ "authority": "RFC 0176 \u00a7C.3",
735
735
  "removeIn": "2.0",
736
736
  "removalTrigger": [
737
737
  "v2.0-cut",
738
738
  "v1-end-of-support"
739
739
  ],
740
- "replacement": "`/.well-known/openwop` (one resource; RFC 0176 §C.1)",
740
+ "replacement": "`/.well-known/openwop` (one resource; RFC 0176 \u00a7C.1)",
741
741
  "codemod": null,
742
742
  "note": "Proposed: the alias exists in one host and was never registered; it is the model RFC 0172 cites for overlap publication.",
743
743
  "sources": [
@@ -753,11 +753,11 @@
753
753
  "surface": "`engines.openwop` ranges with no upper bound read as open (146 of 282 published versions)",
754
754
  "kind": "schema-field",
755
755
  "deprecatedIn": null,
756
- "authority": "RFC 0177 §A.1 (absent ceiling ⇒ `<2.0.0`; `pack_engine_unsupported` at install on every publication path)",
756
+ "authority": "RFC 0177 \u00a7A.1 (absent ceiling \u21d2 `<2.0.0`; `pack_engine_unsupported` at install on every publication path)",
757
757
  "removeIn": "2.0",
758
758
  "replacement": "an explicit `>=x.y.z <M.0.0` range; the v2 schema enforces the grammar",
759
759
  "codemod": null,
760
- "note": "Proposed: no codemod — the author declares compatibility; `openwop.codemod.pack-manifest-v2` refuses a manifest with no v2-satisfiable range.",
760
+ "note": "Proposed: no codemod \u2014 the author declares compatibility; `openwop.codemod.pack-manifest-v2` refuses a manifest with no v2-satisfiable range.",
761
761
  "sources": [
762
762
  {
763
763
  "file": "spec/v1/node-packs.md",
@@ -772,7 +772,7 @@
772
772
  "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",
773
773
  "kind": "schema-field",
774
774
  "deprecatedIn": null,
775
- "authority": "RFC 0177 §B.1–§B.2 (identifier ≡ declaration-file key; `pack_peer_dependency_undefined` reads against the file; generated alias table)",
775
+ "authority": "RFC 0177 \u00a7B.1\u2013\u00a7B.2 (identifier \u2261 declaration-file key; `pack_peer_dependency_undefined` reads against the file; generated alias table)",
776
776
  "removeIn": "2.0",
777
777
  "removalTrigger": "v1-end-of-support",
778
778
  "replacement": "`spec/v2/peer-dependency-aliases.json` through the overlap; `peerDependenciesMeta.<family>.facets[]` for facets",
@@ -788,14 +788,14 @@
788
788
  {
789
789
  "id": "openwop.deprecation.manifest-signing-method",
790
790
  "status": "deprecated",
791
- "surface": "`signing.method: manual | ed25519 | sigstore` — two values the schema calls synonymous that the verifier treats as signatures over different bytes",
791
+ "surface": "`signing.method: manual | ed25519 | sigstore` \u2014 two values the schema calls synonymous that the verifier treats as signatures over different bytes",
792
792
  "kind": "schema-field",
793
793
  "deprecatedIn": "RFC 0177 (v2.0)",
794
- "authority": "RFC 0177 §C.3 (one `signing.scheme: ed25519-canonical-json`)",
794
+ "authority": "RFC 0177 \u00a7C.3 (one `signing.scheme: ed25519-canonical-json`)",
795
795
  "removeIn": "2.0",
796
796
  "replacement": "`signing.scheme`",
797
797
  "codemod": "openwop.codemod.pack-manifest-v2",
798
- "note": "Proposed: the codemod refuses `ed25519` and `sigstore` — those packs are re-signed in `registry/v2/`, never relabeled. Status flipped proposed→deprecated 2026-09-17: the surface has no occurrence in spec/v2, schemas/v2 or api/v2 (token grep, W7).",
798
+ "note": "Proposed: the codemod refuses `ed25519` and `sigstore` \u2014 those packs are re-signed in `registry/v2/`, never relabeled. Status flipped proposed\u2192deprecated 2026-09-17: the surface has no occurrence in spec/v2, schemas/v2 or api/v2 (token grep, W7).",
799
799
  "sources": [
800
800
  {
801
801
  "file": "schemas/registry-version-manifest.schema.json",
@@ -810,7 +810,7 @@
810
810
  "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",
811
811
  "kind": "prose-convention",
812
812
  "deprecatedIn": null,
813
- "authority": "RFC 0177 §D.1 (RFC 0095 UQ4 decided: fail-closed `connection_provider_conflict`; qualified `<packName>#<id>` form)",
813
+ "authority": "RFC 0177 \u00a7D.1 (RFC 0095 UQ4 decided: fail-closed `connection_provider_conflict`; qualified `<packName>#<id>` form)",
814
814
  "removeIn": "2.0",
815
815
  "replacement": "fail-closed conflict; the qualified form",
816
816
  "codemod": null,
@@ -829,11 +829,11 @@
829
829
  "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`",
830
830
  "kind": "path",
831
831
  "deprecatedIn": "RFC 0168 (v2.0)",
832
- "authority": "RFC 0168 §C (seams are the profile `openwop-conformance-seams-v2` with `api/seams-v2.yaml`; forbidden from the capability namespace)",
832
+ "authority": "RFC 0168 \u00a7C (seams are the profile `openwop-conformance-seams-v2` with `api/seams-v2.yaml`; forbidden from the capability namespace)",
833
833
  "removeIn": "2.0",
834
834
  "replacement": "`api/seams-v2.yaml`; `profiles[]` membership",
835
835
  "codemod": null,
836
- "note": "Proposed: a generated document, not a persisted artifact. Status flipped proposed→deprecated 2026-09-17 on a token grep asserting the surface had no occurrence in spec/v2, schemas/v2 or api/v2. THAT CLAIM WAS FALSE — three residues were present: `packs.testMode` and `observability.testSeams` in schemas/v2/capabilities.schema.json, and an orphaned `packs-test` tag in api/v2/openapi.yaml. Corrected 2026-09-18 by NARROWING this row to the path operations, which its removeIn:2.0 genuinely did satisfy, and moving the two capability facets to their own removeIn:3.0 rows — they CANNOT be removed at 2.x because live v2 discovery documents advertise them (myndhyve emits both; openwop-host-v2-reference emits packs.testMode) and the v2 root is additionalProperties:false. The orphaned tag is deleted in this change. Two lessons: a row that bundles surfaces with different removal horizons cannot be honestly satisfied at either; and check-removal-dates.mjs only reads a row's declared sources[], so a row can certify its own absence by declaring too few.",
836
+ "note": "Proposed: a generated document, not a persisted artifact. Status flipped proposed\u2192deprecated 2026-09-17 on a token grep asserting the surface had no occurrence in spec/v2, schemas/v2 or api/v2. THAT CLAIM WAS FALSE \u2014 three residues were present: `packs.testMode` and `observability.testSeams` in schemas/v2/capabilities.schema.json, and an orphaned `packs-test` tag in api/v2/openapi.yaml. Corrected 2026-09-18 by NARROWING this row to the path operations, which its removeIn:2.0 genuinely did satisfy, and moving the two capability facets to their own removeIn:3.0 rows \u2014 they CANNOT be removed at 2.x because live v2 discovery documents advertise them (myndhyve emits both; openwop-host-v2-reference emits packs.testMode) and the v2 root is additionalProperties:false. The orphaned tag is deleted in this change. Two lessons: a row that bundles surfaces with different removal horizons cannot be honestly satisfied at either; and check-removal-dates.mjs only reads a row's declared sources[], so a row can certify its own absence by declaring too few.",
837
837
  "sources": [
838
838
  {
839
839
  "file": "spec/v1/operation-path-manifest.json",
@@ -848,7 +848,7 @@
848
848
  "surface": "the 29 corpus-coherence scenarios reported `blocked` in every host bundle",
849
849
  "kind": "artifact",
850
850
  "deprecatedIn": null,
851
- "authority": "RFC 0168 §D.1 (spec-repo CI; never in a bundle)",
851
+ "authority": "RFC 0168 \u00a7D.1 (spec-repo CI; never in a bundle)",
852
852
  "removeIn": "2.0",
853
853
  "replacement": "`scripts/check-spec-coherence.mjs`",
854
854
  "codemod": null,
@@ -867,11 +867,11 @@
867
867
  "surface": "the published suite tarball's vendored `api/` and `schemas/` copies (and `src`, suite self-tests)",
868
868
  "kind": "artifact",
869
869
  "deprecatedIn": null,
870
- "authority": "RFC 0168 §D.2 (`dist`, `fixtures`, `vectors` only; corpus as the digest-checked peer dependency `@openwop/spec-artifacts`)",
870
+ "authority": "RFC 0168 \u00a7D.2 (`dist`, `fixtures`, `vectors` only; corpus as the digest-checked peer dependency `@openwop/spec-artifacts`)",
871
871
  "removeIn": "2.0",
872
872
  "replacement": "`@openwop/spec-artifacts`",
873
873
  "codemod": null,
874
- "note": "Proposed: the 1.138.1 mechanism — one source, no copy.",
874
+ "note": "Proposed: the 1.138.1 mechanism \u2014 one source, no copy.",
875
875
  "sources": [
876
876
  {
877
877
  "file": "conformance/README.md",
@@ -886,7 +886,7 @@
886
886
  "surface": "certification bundle v2 (`bundleVersion: \"2\"`, root `additionalProperties: true`, `witnessSha256` absent, unsigned)",
887
887
  "kind": "artifact",
888
888
  "deprecatedIn": null,
889
- "authority": "RFC 0168 §E (bundle v3: closed root, required witness/build/tier/count, Ed25519 attestation)",
889
+ "authority": "RFC 0168 \u00a7E (bundle v3: closed root, required witness/build/tier/count, Ed25519 attestation)",
890
890
  "removeIn": "2.0",
891
891
  "removalTrigger": "v1-end-of-support",
892
892
  "replacement": "bundle v3 (`schemas/v2/certification-bundle.schema.json`)",
@@ -902,10 +902,10 @@
902
902
  {
903
903
  "id": "openwop.deprecation.bare-webhook-id",
904
904
  "status": "deprecated",
905
- "surface": "the bare (opaque-only) spelling of `webhookId` — the `POST /webhooks` response field and every `webhookId` path parameter",
905
+ "surface": "the bare (opaque-only) spelling of `webhookId` \u2014 the `POST /webhooks` response field and every `webhookId` path parameter",
906
906
  "kind": "schema-field",
907
907
  "deprecatedIn": "RFC 0187 (v2.4)",
908
- "authority": "RFC 0187 §A.2; spec/v2/core/identity.md §5 (\"Through the overlap the bare form is admitted on a major-2 path parameter — an affordance with an expiry\")",
908
+ "authority": "RFC 0187 \u00a7A.2; spec/v2/core/identity.md \u00a75 (\"Through the overlap the bare form is admitted on a major-2 path parameter \u2014 an affordance with an expiry\")",
909
909
  "removeIn": "2.0",
910
910
  "removalTrigger": "v1-end-of-support",
911
911
  "replacement": "the tenant-bound form `<tenantId>/<opaque>`, projected per RFC 0184",
@@ -920,14 +920,14 @@
920
920
  {
921
921
  "id": "openwop.deprecation.packs-test-mode-facet",
922
922
  "status": "deprecated",
923
- "surface": "`capabilities.packs.testMode` — the v2 advertisement of the v1 `/v1/packs-test/*` conformance-seam mirror",
923
+ "surface": "`capabilities.packs.testMode` \u2014 the v2 advertisement of the v1 `/v1/packs-test/*` conformance-seam mirror",
924
924
  "kind": "discovery-field",
925
925
  "deprecatedIn": "2.10 (RFC 0189 Phase 1)",
926
- "authority": "spec/v2/core/conformance.md §\"The seams profile\" (a test-seam capability flag MUST NOT be advertised) + spec/v2/path-manifest.json (no packs path in v2)",
926
+ "authority": "spec/v2/core/conformance.md \u00a7\"The seams profile\" (a test-seam capability flag MUST NOT be advertised) + spec/v2/path-manifest.json (no packs path in v2)",
927
927
  "removeIn": "3.0",
928
928
  "replacement": "`openwop-conformance-seams-v2` profile membership (`api/seams-v2.yaml`)",
929
929
  "codemod": null,
930
- "note": "NOT removed at 2.x. Unlike workflowChainPacks.deferredParameters/hostExpansionSeam (2.8.2), which no host advertised, TWO live v2 discovery documents carry this facet — evidence/v2-host-bundles/myndhyve.json and openwop-host-v2-reference.json — and the v2 root is additionalProperties:false, so removal breaks a published closed record with no host change (COMPATIBILITY.md §2.2; §3's second clause fails because deprecation is available and adequate).",
930
+ "note": "NOT removed at 2.x. Unlike workflowChainPacks.deferredParameters/hostExpansionSeam (2.8.2), which no host advertised, TWO live v2 discovery documents carry this facet \u2014 evidence/v2-host-bundles/myndhyve.json and openwop-host-v2-reference.json \u2014 and the v2 root is additionalProperties:false, so removal breaks a published closed record with no host change (COMPATIBILITY.md \u00a72.2; \u00a73's second clause fails because deprecation is available and adequate).",
931
931
  "sources": [
932
932
  {
933
933
  "file": "schemas/v2/capabilities.schema.json",
@@ -943,14 +943,14 @@
943
943
  {
944
944
  "id": "openwop.deprecation.observability-test-seams-facet",
945
945
  "status": "deprecated",
946
- "surface": "`capabilities.observability.testSeams` — a test-seam flag in the capability namespace",
946
+ "surface": "`capabilities.observability.testSeams` \u2014 a test-seam flag in the capability namespace",
947
947
  "kind": "discovery-field",
948
948
  "deprecatedIn": "2.10 (RFC 0189 Phase 1)",
949
- "authority": "spec/v2/core/conformance.md §\"The seams profile\" (a `testSeams` capability flag does not exist and MUST NOT be advertised)",
949
+ "authority": "spec/v2/core/conformance.md \u00a7\"The seams profile\" (a `testSeams` capability flag does not exist and MUST NOT be advertised)",
950
950
  "removeIn": "3.0",
951
951
  "replacement": "`openwop-conformance-seams-v2` profile membership (`api/seams-v2.yaml`)",
952
952
  "codemod": null,
953
- "note": "NOT removed at 2.x. MyndHyve's live v2 discovery document advertises `observability.testSeams: {\"otelScrape\": true}` (evidence/v2-host-bundles/myndhyve.json), so this is the same closed-record hazard as packs.testMode — not the 2.8.2 zero-bundle case.",
953
+ "note": "NOT removed at 2.x. MyndHyve's live v2 discovery document advertises `observability.testSeams: {\"otelScrape\": true}` (evidence/v2-host-bundles/myndhyve.json), so this is the same closed-record hazard as packs.testMode \u2014 not the 2.8.2 zero-bundle case.",
954
954
  "sources": [
955
955
  {
956
956
  "file": "schemas/v2/capabilities.schema.json",
@@ -962,14 +962,14 @@
962
962
  {
963
963
  "id": "openwop.deprecation.v2-a2ui-delta-frame",
964
964
  "status": "deprecated",
965
- "surface": "`schemas/v2/a2ui-surface-delta-frame.schema.json` — the RFC 0114 JSON-Patch transport frame, seeded into v2 and never contracted there",
965
+ "surface": "`schemas/v2/a2ui-surface-delta-frame.schema.json` \u2014 the RFC 0114 JSON-Patch transport frame, seeded into v2 and never contracted there",
966
966
  "kind": "artifact",
967
967
  "deprecatedIn": "2.36 (RFC 0209)",
968
- "authority": "spec/v2/ext/a2uiSurface/README.md §\"`deltaTransport` (deprecated)\" (RFC 0209 §D.15)",
968
+ "authority": "spec/v2/ext/a2uiSurface/README.md \u00a7\"`deltaTransport` (deprecated)\" (RFC 0209 \u00a7D.15)",
969
969
  "removeIn": "3.0",
970
- "replacement": "schema-version-2 `ui.a2ui-surface` envelopes carrying A2UI `updateComponents` / `updateDataModel`, folded per surface (RFC 0209 §C.9)",
970
+ "replacement": "schema-version-2 `ui.a2ui-surface` envelopes carrying A2UI `updateComponents` / `updateDataModel`, folded per surface (RFC 0209 \u00a7C.9)",
971
971
  "codemod": null,
972
- "note": "v2 only; v1 RFC 0114 stands. Removal minor: 2.38 at the earliest (two released minors after the 2.36 deprecation, RFC 0197 §A.2 R2), and only once RFC 0197 is Accepted and its gates (check-v2-retirement.mjs, check-v2-surface-monotone.mjs, a minor-aware check-removal-dates.mjs) are in openwop:check; removeIn moves from 3.0 to that minor in the same PR. Until then 3.0. No committed v2 bundle carries the frame (checked 2026-09-22).",
972
+ "note": "v2 only; v1 RFC 0114 stands. Removal minor: 2.38 at the earliest (two released minors after the 2.36 deprecation, RFC 0197 \u00a7A.2 R2), and only once RFC 0197 is Accepted and its gates (check-v2-retirement.mjs, check-v2-surface-monotone.mjs, a minor-aware check-removal-dates.mjs) are in openwop:check; removeIn moves from 3.0 to that minor in the same PR. Until then 3.0. No committed v2 bundle carries the frame (checked 2026-09-22).",
973
973
  "sources": [
974
974
  {
975
975
  "file": "schemas/v2/a2ui-surface-delta-frame.schema.json",
@@ -980,12 +980,12 @@
980
980
  {
981
981
  "id": "openwop.deprecation.v2-a2ui-delta-transport-facet",
982
982
  "status": "deprecated",
983
- "surface": "`extensions.<org>.a2uiSurface.deltaTransport` in v2 — the RFC 0114 delta-transport facet",
983
+ "surface": "`extensions.<org>.a2uiSurface.deltaTransport` in v2 \u2014 the RFC 0114 delta-transport facet",
984
984
  "kind": "discovery-field",
985
985
  "deprecatedIn": "2.36 (RFC 0209)",
986
- "authority": "spec/v2/ext/a2uiSurface/README.md §\"`deltaTransport` (deprecated)\" (RFC 0209 §D.15)",
986
+ "authority": "spec/v2/ext/a2uiSurface/README.md \u00a7\"`deltaTransport` (deprecated)\" (RFC 0209 \u00a7D.15)",
987
987
  "removeIn": "3.0",
988
- "replacement": "schema-version-2 `ui.a2ui-surface` envelopes carrying A2UI `updateComponents` / `updateDataModel` (RFC 0209 §C.9); a v2 host SHOULD NOT advertise the facet",
988
+ "replacement": "schema-version-2 `ui.a2ui-surface` envelopes carrying A2UI `updateComponents` / `updateDataModel` (RFC 0209 \u00a7C.9); a v2 host SHOULD NOT advertise the facet",
989
989
  "codemod": null,
990
990
  "note": "v2 only; v1 RFC 0114 stands. Removal minor: 2.38 at the earliest, on the same RFC 0197 conditions as openwop.deprecation.v2-a2ui-delta-frame; until then 3.0. No committed v2 bundle advertises the facet (checked 2026-09-22).",
991
991
  "sources": [
@@ -1008,8 +1008,8 @@
1008
1008
  "status": "deprecated",
1009
1009
  "surface": "optional `locale` field on `InterruptPayload.data` and on the interrupt resume payload",
1010
1010
  "kind": "schema-field",
1011
- "deprecatedIn": "RFC 0171 §Migration table row `openwop.migration.C4.17` (v2 closes interrupt data and resume bodies)",
1012
- "authority": "RFCS/0171-v2-wire-envelope.md §Migration table, row openwop.migration.C4.17",
1011
+ "deprecatedIn": "RFC 0171 \u00a7Migration table row `openwop.migration.C4.17` (v2 closes interrupt data and resume bodies)",
1012
+ "authority": "RFCS/0171-v2-wire-envelope.md \u00a7Migration table, row openwop.migration.C4.17",
1013
1013
  "removeIn": "2.0",
1014
1014
  "replacement": "none; the locale a host rendered in is request-scoped (`Content-Language`, spec/v2/core/i18n.md)",
1015
1015
  "codemod": "openwop.codemod.interrupt-locale-drop",
@@ -1031,7 +1031,7 @@
1031
1031
  "surface": "the four v1 dotted names in `envelopes.reliability.events[]` (`envelope.retry.attempted`, `envelope.retry.exhausted`, `envelope.nlToFormat.engaged`, `envelope.recovery.applied`)",
1032
1032
  "kind": "discovery-field",
1033
1033
  "deprecatedIn": "2.45 (RFC 0228)",
1034
- "authority": "RFCS/0228-v1-host-service-error-codes.md §G (the enum gains the v2 hyphenated names; the dotted names stay as deprecated aliases)",
1034
+ "authority": "RFCS/0228-v1-host-service-error-codes.md \u00a7G (the enum gains the v2 hyphenated names; the dotted names stay as deprecated aliases)",
1035
1035
  "removeIn": "3.0",
1036
1036
  "replacement": "the v2 names `envelope.retry-attempted`, `envelope.retry-exhausted`, `envelope.nl-to-format-engaged`, `envelope.recovery-applied` (spec/v2/event-codemap.json); a consumer treats each dotted name as its hyphenated equivalent",
1037
1037
  "codemod": null,
@@ -1052,10 +1052,10 @@
1052
1052
  "status": "deprecated",
1053
1053
  "surface": "per-provider `aiProviders` facet shapes: `selfHosted[]`, the `realtimeVoice` sub-flag object, `promptPrefixCache.{supported, providers[]}`, the per-provider `authModes` map",
1054
1054
  "kind": "discovery-field",
1055
- "deprecatedIn": "RFC 0169 §Migration table row `openwop.migration.C2.11` (v2 narrows the four facets)",
1056
- "authority": "RFCS/0169-v2-discovery-and-capabilities.md §Migration table, row openwop.migration.C2.11",
1055
+ "deprecatedIn": "RFC 0169 \u00a7Migration table row `openwop.migration.C2.11` (v2 narrows the four facets)",
1056
+ "authority": "RFCS/0169-v2-discovery-and-capabilities.md \u00a7Migration table, row openwop.migration.C2.11",
1057
1057
  "removeIn": "2.0",
1058
- "replacement": "`selfHosted`, `realtimeVoice`, `promptPrefixCache` booleans and one `authModes` list (spec/v2/core/host-services.md §aiProviders)",
1058
+ "replacement": "`selfHosted`, `realtimeVoice`, `promptPrefixCache` booleans and one `authModes` list (spec/v2/core/host-services.md \u00a7aiProviders)",
1059
1059
  "codemod": "openwop.codemod.ai-providers-v2-narrow",
1060
1060
  "sources": [
1061
1061
  {
@@ -1064,7 +1064,7 @@
1064
1064
  },
1065
1065
  {
1066
1066
  "file": "spec/v1/capabilities.md",
1067
- "token": "**A.1 — Subset constraint.**"
1067
+ "token": "**A.1 \u2014 Subset constraint.**"
1068
1068
  }
1069
1069
  ],
1070
1070
  "removalTrigger": "v2.0-cut"
@@ -1074,10 +1074,10 @@
1074
1074
  "status": "deprecated",
1075
1075
  "surface": "`aiProviders.supported`",
1076
1076
  "kind": "discovery-field",
1077
- "deprecatedIn": "RFC 0169 §Migration table row `openwop.migration.C2.12` (v2 renames the list `providers`)",
1078
- "authority": "RFCS/0169-v2-discovery-and-capabilities.md §Migration table, row openwop.migration.C2.12",
1077
+ "deprecatedIn": "RFC 0169 \u00a7Migration table row `openwop.migration.C2.12` (v2 renames the list `providers`)",
1078
+ "authority": "RFCS/0169-v2-discovery-and-capabilities.md \u00a7Migration table, row openwop.migration.C2.12",
1079
1079
  "removeIn": "2.0",
1080
- "replacement": "`aiProviders.providers` (spec/v2/core/host-services.md §aiProviders)",
1080
+ "replacement": "`aiProviders.providers` (spec/v2/core/host-services.md \u00a7aiProviders)",
1081
1081
  "codemod": "openwop.codemod.ai-providers-v2-narrow",
1082
1082
  "sources": [
1083
1083
  {
@@ -1094,12 +1094,12 @@
1094
1094
  {
1095
1095
  "id": "openwop.deprecation.subworkflow-parent-link-fields",
1096
1096
  "status": "deprecated",
1097
- "surface": "`RunSnapshot.parentRunId` and `RunSnapshot.parentNodeId` as the `core.subWorkflow` child→parent link",
1097
+ "surface": "`RunSnapshot.parentRunId` and `RunSnapshot.parentNodeId` as the `core.subWorkflow` child\u2192parent link",
1098
1098
  "kind": "schema-field",
1099
- "deprecatedIn": "RFC 0171 §Migration table row `openwop.migration.C4.18` (v2 `parentRunId` is fork lineage; `parentNodeId` has no v2 place)",
1100
- "authority": "RFCS/0171-v2-wire-envelope.md §Migration table, row openwop.migration.C4.18",
1099
+ "deprecatedIn": "RFC 0171 \u00a7Migration table row `openwop.migration.C4.18` (v2 `parentRunId` is fork lineage; `parentNodeId` has no v2 place)",
1100
+ "authority": "RFCS/0171-v2-wire-envelope.md \u00a7Migration table, row openwop.migration.C4.18",
1101
1101
  "removeIn": "2.0",
1102
- "replacement": "`getRunAncestry` `parent.runId` with `cause: \"core.subWorkflow\"` (spec/v2/core/execution.md §subWorkflow)",
1102
+ "replacement": "`getRunAncestry` `parent.runId` with `cause: \"core.subWorkflow\"` (spec/v2/core/execution.md \u00a7subWorkflow)",
1103
1103
  "codemod": "openwop.codemod.subworkflow-parent-link-drop",
1104
1104
  "sources": [
1105
1105
  {
@@ -1112,6 +1112,32 @@
1112
1112
  }
1113
1113
  ],
1114
1114
  "removalTrigger": "v2.0-cut"
1115
+ },
1116
+ {
1117
+ "id": "openwop.deprecation.v2-family-false-booleans",
1118
+ "status": "deprecated",
1119
+ "surface": "`nondeterminismPolicy.declared` and `envelopeContracts.advertised`: required booleans whose `false` value brings back `supported: false`",
1120
+ "kind": "discovery-field",
1121
+ "deprecatedIn": "2.45 (RFC 0237)",
1122
+ "authority": "RFCS/0237-nondeterminism-sources.md \u00a7C (a host that does not offer either family omits it; `false` is not a v2 state)",
1123
+ "removeIn": "3.0",
1124
+ "replacement": "presence is the claim (capabilities.md \u00a72); `nondeterminismPolicy.sources` names what is declared",
1125
+ "codemod": null,
1126
+ "note": "NOT removed at 2.x: both are REQUIRED facets, and overview.md \u00a70a predicate 4 retires only optional surfaces; making them optional is an in-place reshape \u00a70a also forbids. v2 only.",
1127
+ "sources": [
1128
+ {
1129
+ "file": "spec/v2/core/replay.md",
1130
+ "token": "`declared: false` is not a v2 state"
1131
+ },
1132
+ {
1133
+ "file": "spec/v2/core/events.md",
1134
+ "token": "`advertised: false` is not a v2 state"
1135
+ },
1136
+ {
1137
+ "file": "RFCS/0237-nondeterminism-sources.md",
1138
+ "token": "The two required booleans cannot leave inside v2"
1139
+ }
1140
+ ]
1115
1141
  }
1116
1142
  ]
1117
1143
  }