@openwop/spec-artifacts 2.0.0-rc.60 → 2.0.0-rc.62

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,7 +1,7 @@
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.0.0-rc.60",
4
+ "version": "2.0.0-rc.62",
5
5
  "corpusTag": null,
6
6
  "files": {
7
7
  "api/.redocly.lint-ignore.yaml": "bf5a8350b88a72fa43f59605ed8d903ed24b6cfccda5e45509c9f6ed9ee4e712",
@@ -9,9 +9,9 @@
9
9
  "api/grpc/openwop.proto": "c3e72bb17cba514ee98feb6434e6c9b6ea6795bfd086489ec69fd882dd1ad977",
10
10
  "api/openapi.yaml": "39081c59fb696159806b0f2f9a42e7e9ff830d622fcf2ad4159b21357580a955",
11
11
  "api/redocly.yaml": "b0604c89b2ca6d5076ec25725c539dad44a741a811fe524439ee6daef8baa09f",
12
- "api/seams-v2.yaml": "924663b683aeb5374ffbac82b7daab78e98a30794eccf2ac38fd88bbb0e32412",
13
- "api/v2/asyncapi.yaml": "82ae49c3c446692c64fcebc7057542d2e36d1ebd3e70a577e22bedd5bccf9211",
14
- "api/v2/openapi.yaml": "a06f82c9046bcc7f21638e5dcf83603957898e3fb687a9711bf2d7d47e9dad31",
12
+ "api/seams-v2.yaml": "a260397f3c7886e0df74d7f51621188f75207149b1ad92d05bbd6068522434bc",
13
+ "api/v2/asyncapi.yaml": "ba2d0e3d36f65f054e39b59ab8a35e2424333b5851bf133c29832d3ae027780c",
14
+ "api/v2/openapi.yaml": "66ecc397298bbd3c7815e499d4dfca9c4ac41f18941b6e9c8465e2a62f95ece8",
15
15
  "api/v2/redocly.yaml": "1e66b60e6118ad11a823bb620678be464d99dfe50a40e3e6f93ec9429b88b34c",
16
16
  "schemas/README.md": "0c0b737ffcf8f30e7d2809cec8a498232de710f41443212922ad8337cdde0b51",
17
17
  "schemas/a2a-task-state.schema.json": "c9365918f993f943b4b619d42551eb066a1ed33a08d895d51b395432a5b1f1bc",
@@ -132,7 +132,7 @@
132
132
  "schemas/v2/debug-bundle.schema.json": "0bfa4b1d91fefbc12c95670dba9d5eacb72b879bb9a5c074e821ca9ed0fee6fd",
133
133
  "schemas/v2/dispatch-config.schema.json": "4a7db312e6b4a14cf5b1ad2b71367878c77b6321cc456f5b3644dd6434e94cbd",
134
134
  "schemas/v2/effect-ledger-projection.schema.json": "9e690f8e5dbf9aa7c82eef4bf7cf96c024f0f8626ad5bbaca3ff25ac63c7cab2",
135
- "schemas/v2/effect-seam-manifest.schema.json": "3402a2956c810b2bfa9ec1ad0cb79d607ecea122cbe7d1e05184af006b06ef15",
135
+ "schemas/v2/effect-seam-manifest.schema.json": "197ef9944ab027a50d1b9352f317cbbc12c8ad955fdb14650fb90477052ffef0",
136
136
  "schemas/v2/envelopes/clarification.request.schema.json": "9e39d7b09f0b3ce7902d6aa19ca0eb52867b634efc78a881469c4d44fb3333e7",
137
137
  "schemas/v2/envelopes/error.schema.json": "6a11fa3b9d61736fcb5675e6ac9825919aa609dceba13ef5615993d54647802b",
138
138
  "schemas/v2/envelopes/media.audio.schema.json": "a422352240a592c12840172e70835729f72b6b21915d14e926b6ffcd5d52a704",
@@ -199,7 +199,7 @@
199
199
  "schemas/workspace-file.schema.json": "464de85c2a068243084ee9c1d969bc7cd5d8f7948574e58450d6493c38a0e1e4",
200
200
  "spec/v1/alias-detectors.json": "fee4594ef49953953ffcd0b3813300067d16b3e65ebff2aac722034ac9b3f545",
201
201
  "spec/v1/capability-declaration-classes.json": "e7729aed5c4b4e1dd02abab0530f14cc95f5d4070fe51fb139e7f5cccefa00c6",
202
- "spec/v1/core-standard-manifest.json": "2f4d9846f6167092189acb28db6c5035df6ebdd404ddf2e09ff5ebfb5c58b5a4",
202
+ "spec/v1/core-standard-manifest.json": "befa25b1768d3759901eb90f8352957f8aaf018ef1474172cfe988f8cd5454fa",
203
203
  "spec/v1/deprecations.json": "1d5acb69a9b8ccb57275a95605f74aef1d920685f8407c9d382a46b59dc803bb",
204
204
  "spec/v1/deprecations.schema.json": "18c87e78bedc210431f795ae44c5b5d202f2f3317850d5cf86867d4f1fa1cdfb",
205
205
  "spec/v1/event-codemap.json": "3da60d884157793a360da532a9fcbbfb5285636db325a74cec94b34622186d97",
@@ -211,7 +211,7 @@
211
211
  "spec/v1/migrations.schema.json": "886779aa6c22e646db097f5df210adb018a4dd14a7b815465a18c8a7056c8f72",
212
212
  "spec/v1/operation-path-manifest.json": "5f5f4e3842669371730ebbd1aace3fb794192615f0018dc144f484ba5db82ac3",
213
213
  "spec/v1/spec-gaps.json": "6cc9962c6b969f632e07a78b52a4f61447ff579e2990cbae989866f584a86042",
214
- "spec/v2/declaration.json": "936c8f02efde6ab2e9878e38de48a762793c2229a083d435edb608fb40612518",
214
+ "spec/v2/declaration.json": "a624cfa6a46d0b10e0dac40fa49abbe05190aff87a8e852ce125d19379067b00",
215
215
  "spec/v2/declaration.schema.json": "b0881a76228dfbd1b85a2ec7b7259a60197f768344535cdb475db6ff719b0e54",
216
216
  "spec/v2/errors.json": "f179414a92f30b5dadf26e9e57699649a67324bd7186d5287647d17605d137d3",
217
217
  "spec/v2/event-codemap.json": "37869a03cdfd8758b57e6f350641a6ebbd383231cebda51f5473ad85f94ab74c",
@@ -229,9 +229,9 @@
229
229
  "spec/v2/id-field-bindings.json": "d9d1f8e266660b581f11020b9511a65c677e026b1a71ada870682ad77e18555d",
230
230
  "spec/v2/path-manifest.json": "034152e09b1458c66810d4050e20a273b2b9b8fe2d92b66e8b819477de58a1be",
231
231
  "spec/v2/peer-dependency-aliases.json": "d10299280abee08258502925bc327293ee413e0108cd6e6ec75ff6110653308d",
232
- "spec/v2/profiles.json": "bf38fc9c5ad32212385ad798c0744de33837ea80c0ef9bec86ecefb4ea914f27",
233
- "spec/v2/release.json": "21de6736f0658c0d652d87d260967660aeea460fd5defbb097eb748715c23a38",
232
+ "spec/v2/profiles.json": "0636f19fceae625390003a347e70ef4797d84766b5c24ce8a02cea52aadebca4",
233
+ "spec/v2/release.json": "73024738fc047447d7f229b52314a235c99d7adb46d5f340fbe44b618b3495a8",
234
234
  "spec/v2/retention-floors.json": "eaf3722d95c79947af1d4269ef85117e126518c588cfcf1a2b21b97269f51624"
235
235
  },
236
- "corpusCommit": "7042d0481198995c594dd9d8dc47ce2b774c782a"
236
+ "corpusCommit": "88b80d84b211802bc2ee83e67fdb9412e258a74b"
237
237
  }
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.0.0-rc.60
4
+ version: 2.0.0-rc.62
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.0.0-rc.60
4
+ version: 2.0.0-rc.62
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.0.0-rc.60
4
+ version: 2.0.0-rc.62
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.0.0-rc.60",
3
+ "version": "2.0.0-rc.62",
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 \u2014 published from the openwop/openwop corpus tag; the peer dependency @openwop/openwop-conformance digest-checks at start (RFC 0168 \u00a7D.2).",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
3
  "$id": "https://openwop.dev/spec/v2/effect-seam-manifest.schema.json",
4
- "title": "Effect-seam manifest (RFC 0173 §C)",
5
- "description": "Host-declared, machine-checkable list of every outbound effect path the node runtime can reach (RFC 0173 §C.1: `{ seam, kind, guarded: true, guardedBy }`; `branchReFires` states the RFC 0140 G6 asymmetry). Served at GET /host/effect-seams (canonical, not a test seam). A seam omitted is invisible to the suite (negative-existence); the RFC 0140 R5 audit is the control.",
4
+ "title": "Effect-seam manifest (RFC 0173 \u00a7C)",
5
+ "description": "Host-declared, machine-checkable list of every outbound effect path the node runtime can reach (RFC 0173 \u00a7C.1: `{ seam, kind, guarded: true, guardedBy }`; `branchReFires` states the RFC 0140 G6 asymmetry). Served at GET /host/effect-seams (canonical, not a test seam). A seam omitted is invisible to the suite (negative-existence); the RFC 0140 R5 audit is the control.",
6
6
  "type": "object",
7
7
  "additionalProperties": false,
8
8
  "required": [
@@ -69,15 +69,18 @@
69
69
  "type": "string",
70
70
  "enum": [
71
71
  "http",
72
+ "smtp",
72
73
  "queue",
73
74
  "storage",
74
75
  "provider-sdk",
75
- "webhook-fanout"
76
- ]
76
+ "webhook-fanout",
77
+ "other"
78
+ ],
79
+ "description": "The outbound WIRE MECHANISM this seam leaves the host by \u2014 not the suite's driving mechanism, and not the business purpose. `other` is the escape for a mechanism this list does not name (raw TCP, gRPC, a filesystem write, a device SDK); a row using it MUST carry `note` saying which, so an unnameable mechanism is still auditable and no seam can hide behind a vague label. Completeness outranks driveability: a path the suite cannot drive (SMTP, for one) is still MUST-list \u2014 the scenario records it `inapplicable` with that reason, and an omitted row is invisible to the suite entirely (replay.md)."
77
80
  },
78
81
  "guarded": {
79
82
  "const": true,
80
- "description": "RFC 0173 §C.1 every row MUST be guarded; the scenario asserts it and drives one seam of each kind through the suite's receiver."
83
+ "description": "RFC 0173 \u00a7C.1 \u2014 every row MUST be guarded; the scenario asserts it and drives one seam of each kind through the suite's receiver."
81
84
  },
82
85
  "guardedBy": {
83
86
  "type": "string",
@@ -86,11 +89,31 @@
86
89
  },
87
90
  "branchReFires": {
88
91
  "type": "boolean",
89
- "description": "RFC 0140 G6 a `branch` fork re-fires this seam by design; stated here and witnessed as a permission."
92
+ "description": "RFC 0140 G6 \u2014 a `branch` fork re-fires this seam by design; stated here and witnessed as a permission."
90
93
  },
91
94
  "note": {
92
- "type": "string"
95
+ "type": "string",
96
+ "description": "Free text. REQUIRED when `kind` is `other`, where it MUST name the mechanism."
93
97
  }
98
+ },
99
+ "if": {
100
+ "properties": {
101
+ "kind": {
102
+ "const": "other"
103
+ }
104
+ },
105
+ "required": [
106
+ "kind"
107
+ ]
108
+ },
109
+ "then": {
110
+ "required": [
111
+ "seam",
112
+ "kind",
113
+ "guarded",
114
+ "guardedBy",
115
+ "note"
116
+ ]
94
117
  }
95
118
  }
96
119
  }
@@ -4,7 +4,7 @@
4
4
  "provenance": {
5
5
  "suite": {
6
6
  "package": "@openwop/openwop-conformance",
7
- "version": "2.0.0-rc.60"
7
+ "version": "2.0.0-rc.62"
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": "7a832066cef86b863d1996f0a351356897d99dcebddd6e6efc33db37305a2acd"
422
+ "digest": "7c878c1d1da9480be8902ca03578ca7be6a3f694bb45fa72e953b8450e7a7e91"
423
423
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "$schema": "https://openwop.dev/spec/v2/declaration.schema.json",
3
- "$comment": "RFC 0169 §B the one declaration file. Hand-reviewed source (generated FROM nothing, checked AGAINST everything by scripts/check-declaration.mjs). schemas/v2/capabilities.schema.json, spec/v2/profiles.json and spec/v2/peer-dependency-aliases.json are generated from it. Seeded 2026-09-03 (Phase 3, P3-A) from the v1 registries this file retires: every v1 root key is listed with an anchor (core | ext | deleted) so no slot is reserved-but-undefined (§B.3). Values marked planned:* are minted by the suite in P3-E (RFC 0178 precedent). adoption is re-derived from INTEROP-MATRIX bundle evidence at each RC (generator --check).",
3
+ "$comment": "RFC 0169 \u00a7B \u2014 the one declaration file. Hand-reviewed source (generated FROM nothing, checked AGAINST everything by scripts/check-declaration.mjs). schemas/v2/capabilities.schema.json, spec/v2/profiles.json and spec/v2/peer-dependency-aliases.json are generated from it. Seeded 2026-09-03 (Phase 3, P3-A) from the v1 registries this file retires: every v1 root key is listed with an anchor (core | ext | deleted) so no slot is reserved-but-undefined (\u00a7B.3). Values marked planned:* are minted by the suite in P3-E (RFC 0178 precedent). adoption is re-derived from INTEROP-MATRIX bundle evidence at each RC (generator --check).",
4
4
  "version": "2.0",
5
5
  "updated": "2026-09-03",
6
6
  "witnessClasses": [
@@ -62,7 +62,7 @@
62
62
  "key": "supportedTransports",
63
63
  "kind": "metadata",
64
64
  "schema": "metadata/supportedTransports",
65
- "note": "deleted: RFC 0175 §B.1",
65
+ "note": "deleted: RFC 0175 \u00a7B.1",
66
66
  "disposition": "deleted"
67
67
  },
68
68
  {
@@ -125,7 +125,7 @@
125
125
  "key": "signingKeys",
126
126
  "kind": "metadata",
127
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\"",
128
+ "note": "host bundle-signing public keys (RFC 0168 \u00a7E.2); v2-only \u2014 the surface the RFC named when it disposed of \"a signature nobody can check\"",
129
129
  "disposition": "kept"
130
130
  },
131
131
  {
@@ -139,7 +139,7 @@
139
139
  "key": "preferredVersion",
140
140
  "kind": "metadata",
141
141
  "schema": "metadata/preferredVersion",
142
- "note": "root preferredVersion (RFC 0172 §A.1; v1.x additive RFC 0179)",
142
+ "note": "root preferredVersion (RFC 0172 \u00a7A.1; v1.x additive RFC 0179)",
143
143
  "disposition": "kept"
144
144
  }
145
145
  ],
@@ -147,7 +147,7 @@
147
147
  {
148
148
  "key": "contractProvenance",
149
149
  "anchor": "deleted",
150
- "reason": "RFC 0169 §A.5 (unfalsifiable self-declaration)"
150
+ "reason": "RFC 0169 \u00a7A.5 (unfalsifiable self-declaration)"
151
151
  },
152
152
  {
153
153
  "key": "supportedEnvelopes",
@@ -291,7 +291,7 @@
291
291
  {
292
292
  "key": "grpc",
293
293
  "anchor": "deleted",
294
- "reason": "RFC 0175 §A.1 (spec/v2/ext/grpc-transport/, not advertisable)"
294
+ "reason": "RFC 0175 \u00a7A.1 (spec/v2/ext/grpc-transport/, not advertisable)"
295
295
  },
296
296
  {
297
297
  "key": "nodePackRuntimes",
@@ -591,7 +591,7 @@
591
591
  "floorScenarios": [],
592
592
  "requirementIds": [],
593
593
  "owningRfc": "0037",
594
- "note": "RFC 0002–0008 surface; core anchor, facets carry the RFC 0092 requirement vocabulary"
594
+ "note": "RFC 0002\u20130008 surface; core anchor, facets carry the RFC 0092 requirement vocabulary"
595
595
  },
596
596
  {
597
597
  "key": "modelCapabilities",
@@ -659,7 +659,7 @@
659
659
  "floorScenarios": [],
660
660
  "requirementIds": [],
661
661
  "owningRfc": null,
662
- "note": "imageGeneration/videoGeneration are declared facets (RFC 0169 §B.3 with RFC 0177 §B.1: facet paths are not identifiers; peerDependenciesMeta.aiProviders.facets[])",
662
+ "note": "imageGeneration/videoGeneration are declared facets (RFC 0169 \u00a7B.3 with RFC 0177 \u00a7B.1: facet paths are not identifiers; peerDependenciesMeta.aiProviders.facets[])",
663
663
  "facetsFrom": "spec/v2/facets/aiProviders.schema.json"
664
664
  },
665
665
  {
@@ -697,7 +697,7 @@
697
697
  "floorScenarios": [],
698
698
  "requirementIds": [],
699
699
  "owningRfc": "0002",
700
- "note": "RFC 0002–0008 surface; core anchor, facets carry the RFC 0092 requirement vocabulary"
700
+ "note": "RFC 0002\u20130008 surface; core anchor, facets carry the RFC 0092 requirement vocabulary"
701
701
  },
702
702
  {
703
703
  "key": "memory",
@@ -724,7 +724,7 @@
724
724
  "floorScenarios": [],
725
725
  "requirementIds": [],
726
726
  "owningRfc": "0004",
727
- "note": "RFC 0002–0008 surface; core anchor, facets carry the RFC 0092 requirement vocabulary"
727
+ "note": "RFC 0002\u20130008 surface; core anchor, facets carry the RFC 0092 requirement vocabulary"
728
728
  },
729
729
  {
730
730
  "key": "conversationPrimitive",
@@ -1408,7 +1408,7 @@
1408
1408
  "requirementIds": [],
1409
1409
  "owningRfc": "0035",
1410
1410
  "disposition": "externally-gated",
1411
- "reason": "RFC 0169 §C.4 / RFC 0035 non-steward tripwire; status experimental with until = the review date, never stable",
1411
+ "reason": "RFC 0169 \u00a7C.4 / RFC 0035 non-steward tripwire; status experimental with until = the review date, never stable",
1412
1412
  "facetsFrom": "spec/v2/facets/sandbox.schema.json"
1413
1413
  },
1414
1414
  {
@@ -1430,7 +1430,7 @@
1430
1430
  "floorScenarios": [],
1431
1431
  "requirementIds": [],
1432
1432
  "owningRfc": "0151",
1433
- "reason": "RFC 0173 §B core obligation with a declared witness; ext/ only by §D.1 at the cut"
1433
+ "reason": "RFC 0173 \u00a7B core obligation with a declared witness; ext/ only by \u00a7D.1 at the cut"
1434
1434
  },
1435
1435
  {
1436
1436
  "key": "idempotency",
@@ -1606,7 +1606,7 @@
1606
1606
  "floorScenarios": [],
1607
1607
  "requirementIds": [],
1608
1608
  "owningRfc": "0115",
1609
- "reason": "RFC 0169 §C.5 (claims-check; ext/ unless a behavioral witness lands)"
1609
+ "reason": "RFC 0169 \u00a7C.5 (claims-check; ext/ unless a behavioral witness lands)"
1610
1610
  },
1611
1611
  {
1612
1612
  "key": "a2uiSurface",
@@ -1625,7 +1625,7 @@
1625
1625
  "floorScenarios": [],
1626
1626
  "requirementIds": [],
1627
1627
  "owningRfc": "0114",
1628
- "reason": "RFC 0169 §C.5 (deltaTransport claims-check; ext/ unless a behavioral witness lands)"
1628
+ "reason": "RFC 0169 \u00a7C.5 (deltaTransport claims-check; ext/ unless a behavioral witness lands)"
1629
1629
  },
1630
1630
  {
1631
1631
  "key": "brand",
@@ -1642,7 +1642,7 @@
1642
1642
  "floorScenarios": [],
1643
1643
  "requirementIds": [],
1644
1644
  "owningRfc": "0144",
1645
- "reason": "RFC 0169 §B.3 (RFC 0144 extension class; prose-only §host.* section in v1; served under extensions.openwop-app.* by the one host that has it)"
1645
+ "reason": "RFC 0169 \u00a7B.3 (RFC 0144 extension class; prose-only \u00a7host.* section in v1; served under extensions.openwop-app.* by the one host that has it)"
1646
1646
  },
1647
1647
  {
1648
1648
  "key": "canvas",
@@ -1659,7 +1659,7 @@
1659
1659
  "floorScenarios": [],
1660
1660
  "requirementIds": [],
1661
1661
  "owningRfc": "0144",
1662
- "reason": "RFC 0169 §B.3 (RFC 0144 extension class; prose-only §host.* section in v1; served under extensions.openwop-app.* by the one host that has it)"
1662
+ "reason": "RFC 0169 \u00a7B.3 (RFC 0144 extension class; prose-only \u00a7host.* section in v1; served under extensions.openwop-app.* by the one host that has it)"
1663
1663
  },
1664
1664
  {
1665
1665
  "key": "chat",
@@ -1676,7 +1676,7 @@
1676
1676
  "floorScenarios": [],
1677
1677
  "requirementIds": [],
1678
1678
  "owningRfc": "0144",
1679
- "reason": "RFC 0169 §B.3 (RFC 0144 extension class; prose-only §host.* section in v1; served under extensions.openwop-app.* by the one host that has it)"
1679
+ "reason": "RFC 0169 \u00a7B.3 (RFC 0144 extension class; prose-only \u00a7host.* section in v1; served under extensions.openwop-app.* by the one host that has it)"
1680
1680
  },
1681
1681
  {
1682
1682
  "key": "coordination",
@@ -1693,7 +1693,7 @@
1693
1693
  "floorScenarios": [],
1694
1694
  "requirementIds": [],
1695
1695
  "owningRfc": "0144",
1696
- "reason": "RFC 0169 §B.3 (RFC 0144 extension class; prose-only §host.* section in v1; served under extensions.openwop-app.* by the one host that has it)"
1696
+ "reason": "RFC 0169 \u00a7B.3 (RFC 0144 extension class; prose-only \u00a7host.* section in v1; served under extensions.openwop-app.* by the one host that has it)"
1697
1697
  },
1698
1698
  {
1699
1699
  "key": "dataIntegration",
@@ -1710,7 +1710,7 @@
1710
1710
  "floorScenarios": [],
1711
1711
  "requirementIds": [],
1712
1712
  "owningRfc": "0144",
1713
- "reason": "RFC 0169 §B.3 (RFC 0144 extension class; prose-only §host.* section in v1; served under extensions.openwop-app.* by the one host that has it)"
1713
+ "reason": "RFC 0169 \u00a7B.3 (RFC 0144 extension class; prose-only \u00a7host.* section in v1; served under extensions.openwop-app.* by the one host that has it)"
1714
1714
  },
1715
1715
  {
1716
1716
  "key": "entities",
@@ -1727,7 +1727,7 @@
1727
1727
  "floorScenarios": [],
1728
1728
  "requirementIds": [],
1729
1729
  "owningRfc": "0144",
1730
- "reason": "RFC 0169 §B.3 (RFC 0144 extension class; prose-only §host.* section in v1; served under extensions.openwop-app.* by the one host that has it)"
1730
+ "reason": "RFC 0169 \u00a7B.3 (RFC 0144 extension class; prose-only \u00a7host.* section in v1; served under extensions.openwop-app.* by the one host that has it)"
1731
1731
  },
1732
1732
  {
1733
1733
  "key": "kanban",
@@ -1744,7 +1744,7 @@
1744
1744
  "floorScenarios": [],
1745
1745
  "requirementIds": [],
1746
1746
  "owningRfc": "0144",
1747
- "reason": "RFC 0169 §B.3 (RFC 0144 extension class; prose-only §host.* section in v1; served under extensions.openwop-app.* by the one host that has it)"
1747
+ "reason": "RFC 0169 \u00a7B.3 (RFC 0144 extension class; prose-only \u00a7host.* section in v1; served under extensions.openwop-app.* by the one host that has it)"
1748
1748
  },
1749
1749
  {
1750
1750
  "key": "knowledge",
@@ -1761,7 +1761,7 @@
1761
1761
  "floorScenarios": [],
1762
1762
  "requirementIds": [],
1763
1763
  "owningRfc": "0144",
1764
- "reason": "RFC 0169 §B.3 (RFC 0144 extension class; prose-only §host.* section in v1; served under extensions.openwop-app.* by the one host that has it)"
1764
+ "reason": "RFC 0169 \u00a7B.3 (RFC 0144 extension class; prose-only \u00a7host.* section in v1; served under extensions.openwop-app.* by the one host that has it)"
1765
1765
  },
1766
1766
  {
1767
1767
  "key": "launchStudio",
@@ -1778,7 +1778,7 @@
1778
1778
  "floorScenarios": [],
1779
1779
  "requirementIds": [],
1780
1780
  "owningRfc": "0144",
1781
- "reason": "RFC 0169 §B.3 (RFC 0144 extension class; prose-only §host.* section in v1; served under extensions.openwop-app.* by the one host that has it)"
1781
+ "reason": "RFC 0169 \u00a7B.3 (RFC 0144 extension class; prose-only \u00a7host.* section in v1; served under extensions.openwop-app.* by the one host that has it)"
1782
1782
  },
1783
1783
  {
1784
1784
  "key": "messaging",
@@ -1795,7 +1795,7 @@
1795
1795
  "floorScenarios": [],
1796
1796
  "requirementIds": [],
1797
1797
  "owningRfc": "0144",
1798
- "reason": "RFC 0169 §B.3 (RFC 0144 extension class; prose-only §host.* section in v1; served under extensions.openwop-app.* by the one host that has it)"
1798
+ "reason": "RFC 0169 \u00a7B.3 (RFC 0144 extension class; prose-only \u00a7host.* section in v1; served under extensions.openwop-app.* by the one host that has it)"
1799
1799
  },
1800
1800
  {
1801
1801
  "key": "webResearch",
@@ -1812,7 +1812,7 @@
1812
1812
  "floorScenarios": [],
1813
1813
  "requirementIds": [],
1814
1814
  "owningRfc": "0144",
1815
- "reason": "RFC 0169 §B.3 (RFC 0144 extension class; prose-only §host.* section in v1; served under extensions.openwop-app.* by the one host that has it)"
1815
+ "reason": "RFC 0169 \u00a7B.3 (RFC 0144 extension class; prose-only \u00a7host.* section in v1; served under extensions.openwop-app.* by the one host that has it)"
1816
1816
  }
1817
1817
  ],
1818
1818
  "profiles": [
@@ -1830,7 +1830,7 @@
1830
1830
  "v2-preferred-version-default",
1831
1831
  "v2-version-header-honored"
1832
1832
  ],
1833
- "note": "discovery only; the alias openwop-core is deleted (row C2.3). Floor minted rc.45: the closed root, the preferredVersion default, and the header honoured-or-refused each unaided. v2-well-known-one-resource is deliberately absent: it is inapplicable by design for a host advertising one major, which every host becomes at v1 end-of-support, and a floor that expires is not a floor."
1833
+ "note": "discovery only; the alias openwop-core is deleted (row C2.3). Floor minted rc.45: the closed root, the preferredVersion default, and the header honoured-or-refused \u2014 each unaided. v2-well-known-one-resource is deliberately absent: it is inapplicable by design for a host advertising one major, which every host becomes at v1 end-of-support, and a floor that expires is not a floor."
1834
1834
  },
1835
1835
  {
1836
1836
  "id": "openwop-core-standard",
@@ -1859,12 +1859,15 @@
1859
1859
  "v2-sse-last-event-id"
1860
1860
  ],
1861
1861
  "requirementIds": [],
1862
- "note": "rc.59: five unaided run-surface witnesses joined the floor v2-run-cancel (runs.md §Cancel: 409 run_terminal on a terminal run), v2-run-bulk-cancel (§Cancel: per-entry envelopes, id_tenant_mismatch / not_found, details.maxRunIds), v2-run-pause-resume (§Pause and resume: 409 run_terminal / run_state_conflict, the literal drainPolicy echo, the immediate cut), v2-run-options-limits (capabilities.md limits metadata honoured on create), v2-sse-last-event-id (events.md §SSE frames: Last-Event-ID resumes at the next sequence, never re-emits the resumption point). cancelRun, bulkCancelRuns and pauseRun are core operations by the runs.md surface table (only ancestry, annotations and eval-summary are 404-when-unadvertised), so a host that omits one is blocked, not inapplicable, and the floor refuses it the prose's outcome. Their optional legs (values mode, the conformance-delay / conformance-cancellable fixtures) record inapplicable with the reason and the file row stays a witnessed pass. Measured before the change: the reference host passes all five (rc.58, 179 / 0 / 0 / 42); neither production host satisfies this predicate, so no existing claim moves. seeded from spec/v1/core-standard-manifest.json at P3-B; floor minted rc.45, one or more unaided witnesses per predicate family: interrupt (token scheme), replay (the effect-seam manifest its seam-driven no-re-fire leg lives in v2-effect-seam-no-refire on the seams floor), webhooks (durable delivery), idempotency (Layer-1 key grammar), eventLog (era key, era stamp, closed event type, poll cursor). Deliberately absent: v2-pinned-run-disposition (seam-gated and opt-in), v2-v1-signed-webhook-accepted (a coexistence scenario, driven through the seam; the cut gate is its home), v2-effect-identity-business-key (retry leg seam-driven), v2-approver-enforced (conditional on the refKinds facet)."
1862
+ "note": "rc.59: five unaided run-surface witnesses joined the floor \u2014 v2-run-cancel (runs.md \u00a7Cancel: 409 run_terminal on a terminal run), v2-run-bulk-cancel (\u00a7Cancel: per-entry envelopes, id_tenant_mismatch / not_found, details.maxRunIds), v2-run-pause-resume (\u00a7Pause and resume: 409 run_terminal / run_state_conflict, the literal drainPolicy echo, the immediate cut), v2-run-options-limits (capabilities.md limits metadata honoured on create), v2-sse-last-event-id (events.md \u00a7SSE frames: Last-Event-ID resumes at the next sequence, never re-emits the resumption point). cancelRun, bulkCancelRuns and pauseRun are core operations by the runs.md surface table (only ancestry, annotations and eval-summary are 404-when-unadvertised), so a host that omits one is blocked, not inapplicable, and the floor refuses it \u2014 the prose's outcome. Their optional legs (values mode, the conformance-delay / conformance-cancellable fixtures) record inapplicable with the reason and the file row stays a witnessed pass. Measured before the change: the reference host passes all five (rc.58, 179 / 0 / 0 / 42); neither production host satisfies this predicate, so no existing claim moves. seeded from spec/v1/core-standard-manifest.json at P3-B; floor minted rc.45, one or more unaided witnesses per predicate family: interrupt (token scheme), replay (the effect-seam manifest \u2014 its seam-driven no-re-fire leg lives in v2-effect-seam-no-refire on the seams floor), webhooks (durable delivery), idempotency (Layer-1 key grammar), eventLog (era key, era stamp, closed event type, poll cursor). Deliberately absent: v2-pinned-run-disposition (seam-gated and opt-in), v2-v1-signed-webhook-accepted (a coexistence scenario, driven through the seam; the cut gate is its home), v2-effect-identity-business-key (retry leg seam-driven), v2-approver-enforced (conditional on the refKinds facet)."
1863
1863
  },
1864
1864
  {
1865
1865
  "id": "openwop-conformance-seams-v2",
1866
1866
  "predicate": {
1867
- "families": []
1867
+ "families": [],
1868
+ "metadata": [
1869
+ "conformance"
1870
+ ]
1868
1871
  },
1869
1872
  "floorScenarios": [
1870
1873
  "v2-fork-a-v1-run",
@@ -1872,13 +1875,13 @@
1872
1875
  "v2-v1-signed-webhook-accepted",
1873
1876
  "v2-effect-seam-no-refire"
1874
1877
  ],
1875
- "note": "RFC 0168 §C.1 the seams profile; its own api/seams-v2.yaml; forbidden from the capability namespace. Floor minted rc.45: the four scenarios that are driven through a seam. This profile is the instrument, not a capability predicate: each floor file is ALSO gated on the family it witnesses (fork-a-v1-run and effect-seam-no-refire on replay, effect-identity-business-key on idempotency, v1-signed-webhook-accepted on webhooks), records `inapplicable` when that family is absent, and the profile certifies only on a witnessed pass a seams host advertising none of those families witnesses nothing through the seam and certifies nothing. v2-pinned-run-disposition is absent because it needs a suite opt-in (the change ids a host implements) and records `skipped` without one — a floor row the suite is not allowed to witness cannot certify."
1878
+ "note": "RFC 0168 \u00a7C.1 \u2014 the seams profile; its own api/seams-v2.yaml; forbidden from the capability namespace. Floor minted rc.45: the four scenarios driven through a seam. rc.62 CLAIM FIX: the predicate now requires `conformance` at the discovery root. Until rc.62 the predicate was EMPTY, and `claimedProfilesForV2` treats an empty predicate as vacuously satisfied, so this profile was CLAIMED BY EVERY v2 HOST \u2014 including two production hosts that never advertised it and carried it at `certified: false`. A profile claimed by a host that never advertised it is a claim the host did not make. The predicate is deliberately NECESSARY, not sufficient: it tests that a `conformance` block exists, while the exact advert (`conformance.seamsProfile === openwop-conformance-seams-v2`) is tested per scenario by `seamsProfileAdvertised`. The two compose honestly \u2014 no conformance block means NOT CLAIMED; a block naming some other profile means claimed, every floor row `inapplicable`, witnessCount 0, and therefore not certified and not blocked. This profile is the instrument, not a capability predicate: each floor file is ALSO gated on the family it witnesses (fork-a-v1-run and effect-seam-no-refire on replay, effect-identity-business-key on idempotency, v1-signed-webhook-accepted on webhooks), records `inapplicable` when that family is absent, and the profile certifies only on a witnessed pass \u2014 a seams host advertising none of those families witnesses nothing through the seam and certifies nothing."
1876
1879
  }
1877
1880
  ],
1878
1881
  "aliases": {
1879
1882
  "host.webSearch": {
1880
1883
  "family": "webResearch",
1881
- "note": "two spellings of one §host.* section in published manifests (1 use); the section is webResearch"
1884
+ "note": "two spellings of one \u00a7host.* section in published manifests (1 use); the section is webResearch"
1882
1885
  },
1883
1886
  "host.campaignMessaging": {
1884
1887
  "family": "messaging",
@@ -51,7 +51,10 @@
51
51
  {
52
52
  "id": "openwop-conformance-seams-v2",
53
53
  "predicate": {
54
- "families": []
54
+ "families": [],
55
+ "metadata": [
56
+ "conformance"
57
+ ]
55
58
  },
56
59
  "floorScenarios": [
57
60
  "v2-fork-a-v1-run",
@@ -60,7 +63,7 @@
60
63
  "v2-effect-seam-no-refire"
61
64
  ],
62
65
  "requirementIds": [],
63
- "note": "RFC 0168 §C.1 — the seams profile; its own api/seams-v2.yaml; forbidden from the capability namespace. Floor minted rc.45: the four scenarios that are driven through a seam. This profile is the instrument, not a capability predicate: each floor file is ALSO gated on the family it witnesses (fork-a-v1-run and effect-seam-no-refire on replay, effect-identity-business-key on idempotency, v1-signed-webhook-accepted on webhooks), records `inapplicable` when that family is absent, and the profile certifies only on a witnessed pass — a seams host advertising none of those families witnesses nothing through the seam and certifies nothing. v2-pinned-run-disposition is absent because it needs a suite opt-in (the change ids a host implements) and records `skipped` without one — a floor row the suite is not allowed to witness cannot certify."
66
+ "note": "RFC 0168 §C.1 — the seams profile; its own api/seams-v2.yaml; forbidden from the capability namespace. Floor minted rc.45: the four scenarios driven through a seam. rc.62 CLAIM FIX: the predicate now requires `conformance` at the discovery root. Until rc.62 the predicate was EMPTY, and `claimedProfilesForV2` treats an empty predicate as vacuously satisfied, so this profile was CLAIMED BY EVERY v2 HOST — including two production hosts that never advertised it and carried it at `certified: false`. A profile claimed by a host that never advertised it is a claim the host did not make. The predicate is deliberately NECESSARY, not sufficient: it tests that a `conformance` block exists, while the exact advert (`conformance.seamsProfile === openwop-conformance-seams-v2`) is tested per scenario by `seamsProfileAdvertised`. The two compose honestly — no conformance block means NOT CLAIMED; a block naming some other profile means claimed, every floor row `inapplicable`, witnessCount 0, and therefore not certified and not blocked. This profile is the instrument, not a capability predicate: each floor file is ALSO gated on the family it witnesses (fork-a-v1-run and effect-seam-no-refire on replay, effect-identity-business-key on idempotency, v1-signed-webhook-accepted on webhooks), records `inapplicable` when that family is absent, and the profile certifies only on a witnessed pass — a seams host advertising none of those families witnesses nothing through the seam and certifies nothing."
64
67
  }
65
68
  ]
66
69
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "$comment": "RFC 0172 \u00a7D.1 \u2014 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.60",
3
+ "version": "2.0.0-rc.62",
4
4
  "corpusTag": null,
5
5
  "updated": "2026-09-03"
6
6
  }