@openwop/openwop-conformance 2.18.0 → 2.20.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,18 @@
1
1
  # `@openwop/openwop-conformance` Changelog
2
2
 
3
+ ## [2.20.0] — 2026-09-19 — eleven corpus witnesses; four RFCs Accepted
4
+
5
+ **Why a minor.** Two new coherence scenarios under `conformance/src/coherence/`
6
+ mint the eleven requirement ids RFCs 0189–0192 name, taking the corpus ledger
7
+ from 345 to 357. `spec/v2/core/security-defaults.md` gains a one-word erratum
8
+ (`permanent` → `persisted`) matching the bundle schema's enum.
9
+
10
+ ## [2.19.0] — 2026-09-19 — section-scoped obligations (G10); seven storage families homed
11
+
12
+ **Why a minor.** No conformance code changes. `spec/v2/declaration.json` gains
13
+ seven `normativeText` declarations; the normative-home predicate now reads an
14
+ obligation under a section titled for the family, which G4 had severed.
15
+
3
16
  ## [2.18.0] — 2026-09-19 — fourteen v1-dependent homes; burn-down denominator corrected
4
17
 
5
18
  **Why a minor.** No conformance code changes. `spec/v2/declaration.json` is a
package/README.md CHANGED
@@ -11,7 +11,7 @@
11
11
  # --legacy-peer-deps is REQUIRED, not optional: the exact peer pin is what npm's
12
12
  # default resolver refuses. npm 10.9 fails outright with
13
13
  # "Cannot read properties of null (reading 'edgesOut')" — use npm >= 11.
14
- npm install --legacy-peer-deps @openwop/openwop-conformance@2.18.0 @openwop/spec-artifacts@2.18.0
14
+ npm install --legacy-peer-deps @openwop/openwop-conformance@2.20.0 @openwop/spec-artifacts@2.20.0
15
15
  # or run without install:
16
16
  npx @openwop/openwop-conformance --base-url https://api.example.com --api-key hk_test_...
17
17
  ```
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "package": "@openwop/spec-artifacts",
3
- "version": "2.18.0",
4
- "stampSha256": "cb3daf13651cc3129a2a994609e3bac2a8ca34f3d418b7fb3b5fd8bed71f602d"
3
+ "version": "2.20.0",
4
+ "stampSha256": "2f03994627c35805e6baae6b21ca88413cfdc5ec7d0be9f523d8edffd32c8b2d"
5
5
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openwop/openwop-conformance",
3
- "version": "2.18.0",
3
+ "version": "2.20.0",
4
4
  "description": "Production-ready black-box conformance suite for OpenWOP v1.0 compliant servers.",
5
5
  "repository": {
6
6
  "type": "git",
@@ -56,6 +56,6 @@
56
56
  "@openwop/spec-artifacts": "file:../spec-artifacts"
57
57
  },
58
58
  "peerDependencies": {
59
- "@openwop/spec-artifacts": "2.18.0"
59
+ "@openwop/spec-artifacts": "2.20.0"
60
60
  }
61
61
  }
package/requirements.json CHANGED
@@ -2,11 +2,11 @@
2
2
  "$comment": "GENERATED by conformance/scripts/generate-requirement-registry.mjs — do not edit. One record per it()/test() in src/scenarios. Ids: openwop.it.<file-stem>.<title-slug>[~n] (src/lib/requirement-ids.ts). A record with id null has an interpolated title; its run-time row is keyed by the rendered title and maps here by file+line only. Renamed ids need a row in requirement-aliases.json.",
3
3
  "generatedFrom": "src/scenarios/*.test.ts",
4
4
  "counts": {
5
- "files": 576,
6
- "tests": 2181,
7
- "withStableId": 2181,
5
+ "files": 578,
6
+ "tests": 2192,
7
+ "withStableId": 2192,
8
8
  "interpolatedTitles": 0,
9
- "explicitIds": 2135
9
+ "explicitIds": 2146
10
10
  },
11
11
  "records": [
12
12
  {
@@ -36035,6 +36035,34 @@
36035
36035
  }
36036
36036
  ]
36037
36037
  },
36038
+ {
36039
+ "id": "openwop.it.v2-facet-advertisement.the-rule-is-stated-where-the-family-rule-lives",
36040
+ "file": "v2-facet-advertisement.test.ts",
36041
+ "line": 54,
36042
+ "title": "the rule is stated where the family rule lives",
36043
+ "explicitId": "openwop.requirement.0192.facet-presence",
36044
+ "citations": [
36045
+ {
36046
+ "section": "RFC 0192 §A",
36047
+ "requirement": null,
36048
+ "interpolated": true
36049
+ }
36050
+ ]
36051
+ },
36052
+ {
36053
+ "id": "openwop.it.v2-facet-advertisement.the-generator-refuses-to-emit-a-description-conditioning-on-a-retired-field",
36054
+ "file": "v2-facet-advertisement.test.ts",
36055
+ "line": 62,
36056
+ "title": "the generator refuses to emit a description conditioning on a retired field",
36057
+ "explicitId": "openwop.requirement.0192.no-supported-ghost",
36058
+ "citations": [
36059
+ {
36060
+ "section": "RFC 0192 §B/§C",
36061
+ "requirement": null,
36062
+ "interpolated": true
36063
+ }
36064
+ ]
36065
+ },
36038
36066
  {
36039
36067
  "id": "openwop.it.v2-id-kinds-bound.every-v2-id-field-refs-its-kind-and-every-id-property-is-triaged",
36040
36068
  "file": "v2-id-kinds-bound.test.ts",
@@ -36049,6 +36077,132 @@
36049
36077
  }
36050
36078
  ]
36051
36079
  },
36080
+ {
36081
+ "id": "openwop.it.v2-normative-home-gate.a-refused-home-class-is-refused-by-name",
36082
+ "file": "v2-normative-home-gate.test.ts",
36083
+ "line": 68,
36084
+ "title": "a refused home class is refused by name",
36085
+ "explicitId": "openwop.requirement.0189.home-class",
36086
+ "citations": [
36087
+ {
36088
+ "section": "RFC 0189 §A / RFC 0190 §B",
36089
+ "requirement": null,
36090
+ "interpolated": true
36091
+ }
36092
+ ]
36093
+ },
36094
+ {
36095
+ "id": "openwop.it.v2-normative-home-gate.a-home-that-names-the-family-but-carries-no-obligation-is-refused",
36096
+ "file": "v2-normative-home-gate.test.ts",
36097
+ "line": 80,
36098
+ "title": "a home that names the family but carries no obligation is refused",
36099
+ "explicitId": "openwop.requirement.0189.content-predicate",
36100
+ "citations": [
36101
+ {
36102
+ "section": "RFC 0189 §B",
36103
+ "requirement": null,
36104
+ "interpolated": true
36105
+ }
36106
+ ]
36107
+ },
36108
+ {
36109
+ "id": "openwop.it.v2-normative-home-gate.the-ratchets-hold-on-the-committed-tree",
36110
+ "file": "v2-normative-home-gate.test.ts",
36111
+ "line": 89,
36112
+ "title": "the ratchets hold on the committed tree",
36113
+ "explicitId": "openwop.requirement.0189.ratchet-monotone",
36114
+ "citations": [
36115
+ {
36116
+ "section": "RFC 0189 §C",
36117
+ "requirement": null,
36118
+ "interpolated": true
36119
+ }
36120
+ ]
36121
+ },
36122
+ {
36123
+ "id": "openwop.it.v2-normative-home-gate.the-deadline-can-actually-fire",
36124
+ "file": "v2-normative-home-gate.test.ts",
36125
+ "line": 95,
36126
+ "title": "the deadline can actually fire",
36127
+ "explicitId": "openwop.requirement.0189.deadline-live",
36128
+ "citations": [
36129
+ {
36130
+ "section": "RFC 0189 §D",
36131
+ "requirement": null,
36132
+ "interpolated": true
36133
+ }
36134
+ ]
36135
+ },
36136
+ {
36137
+ "id": "openwop.it.v2-normative-home-gate.the-budget-measures-what-the-home-gate-accepts",
36138
+ "file": "v2-normative-home-gate.test.ts",
36139
+ "line": 101,
36140
+ "title": "the budget measures what the home gate accepts",
36141
+ "explicitId": "openwop.requirement.0190.budget-denominator",
36142
+ "citations": [
36143
+ {
36144
+ "section": "RFC 0190 §A",
36145
+ "requirement": null,
36146
+ "interpolated": true
36147
+ }
36148
+ ]
36149
+ },
36150
+ {
36151
+ "id": "openwop.it.v2-normative-home-gate.the-cap-grows-only-as-families-are-homed",
36152
+ "file": "v2-normative-home-gate.test.ts",
36153
+ "line": 110,
36154
+ "title": "the cap grows only as families are homed",
36155
+ "explicitId": "openwop.requirement.0190.budget-cap",
36156
+ "citations": [
36157
+ {
36158
+ "section": "RFC 0190 §A",
36159
+ "requirement": null,
36160
+ "interpolated": true
36161
+ }
36162
+ ]
36163
+ },
36164
+ {
36165
+ "id": "openwop.it.v2-normative-home-gate.the-end-of-support-fallback-is-applied-not-printed",
36166
+ "file": "v2-normative-home-gate.test.ts",
36167
+ "line": 118,
36168
+ "title": "the end-of-support fallback is applied, not printed",
36169
+ "explicitId": "openwop.requirement.0190.fallback-applied",
36170
+ "citations": [
36171
+ {
36172
+ "section": "RFC 0190 §C",
36173
+ "requirement": null,
36174
+ "interpolated": true
36175
+ }
36176
+ ]
36177
+ },
36178
+ {
36179
+ "id": "openwop.it.v2-normative-home-gate.v1carried-matches-the-computed-v1-dependent-set",
36180
+ "file": "v2-normative-home-gate.test.ts",
36181
+ "line": 126,
36182
+ "title": "v1Carried matches the computed v1-dependent set",
36183
+ "explicitId": "openwop.requirement.0190.v1carried-matches",
36184
+ "citations": [
36185
+ {
36186
+ "section": "RFC 0190 §C",
36187
+ "requirement": null,
36188
+ "interpolated": true
36189
+ }
36190
+ ]
36191
+ },
36192
+ {
36193
+ "id": "openwop.it.v2-normative-home-gate.a-home-that-does-not-claim-the-family-is-refused",
36194
+ "file": "v2-normative-home-gate.test.ts",
36195
+ "line": 132,
36196
+ "title": "a home that does not claim the family is refused",
36197
+ "explicitId": "openwop.requirement.0191.home-marker",
36198
+ "citations": [
36199
+ {
36200
+ "section": "RFC 0191 §A",
36201
+ "requirement": null,
36202
+ "interpolated": true
36203
+ }
36204
+ ]
36205
+ },
36052
36206
  {
36053
36207
  "id": "openwop.it.v2-one-signing-scheme.registry-version-manifest-signing-has-exactly-one-scheme-ed25519-canonical-json",
36054
36208
  "file": "v2-one-signing-scheme.test.ts",
@@ -1,17 +1,17 @@
1
1
  {
2
2
  "_comment": "Provenance of @openwop/spec-artifacts (RFC 0168 §D.2). files: SHA-256 per file; the conformance suite compares the installed peer against dist/spec-artifacts.lock.json at start.",
3
3
  "package": "@openwop/spec-artifacts",
4
- "version": "2.18.0",
5
- "corpusTag": "v2.18.0",
4
+ "version": "2.20.0",
5
+ "corpusTag": "v2.20.0",
6
6
  "files": {
7
7
  "api/.redocly.lint-ignore.yaml": "bf5a8350b88a72fa43f59605ed8d903ed24b6cfccda5e45509c9f6ed9ee4e712",
8
8
  "api/asyncapi.yaml": "d5ecb9ee6114582be3b1f662c84bfac9ae96dae7bacb853e461168f70a8e1c7d",
9
9
  "api/grpc/openwop.proto": "c3e72bb17cba514ee98feb6434e6c9b6ea6795bfd086489ec69fd882dd1ad977",
10
10
  "api/openapi.yaml": "39081c59fb696159806b0f2f9a42e7e9ff830d622fcf2ad4159b21357580a955",
11
11
  "api/redocly.yaml": "b0604c89b2ca6d5076ec25725c539dad44a741a811fe524439ee6daef8baa09f",
12
- "api/seams-v2.yaml": "08f87bebac34e3084dc37fdb4b346fe7a1e06c3b414cf4352df7d8aea707ebe6",
13
- "api/v2/asyncapi.yaml": "325cd3a067f5c731028e1bf58083732c395a7da26849c526fcea16b7ecc5b21a",
14
- "api/v2/openapi.yaml": "f50c914acca3c9dc9578bee4199b3d21feafc7d2de7ebd9aedd2b861c3d70e09",
12
+ "api/seams-v2.yaml": "2132964437fde6f1d28d1fa9b8e1c37cab4e6a61c2630807c2df1d19313864fb",
13
+ "api/v2/asyncapi.yaml": "60b992b381d2b63dde4085664190979e77cfe6082f6c63d1149fa90e4b78cca9",
14
+ "api/v2/openapi.yaml": "22a4249b402fac7498de47f1b8615d68b6ee3090b10a8afcfbbccf8959fb0f68",
15
15
  "api/v2/redocly.yaml": "1e66b60e6118ad11a823bb620678be464d99dfe50a40e3e6f93ec9429b88b34c",
16
16
  "schemas/README.md": "0c0b737ffcf8f30e7d2809cec8a498232de710f41443212922ad8337cdde0b51",
17
17
  "schemas/a2a-task-state.schema.json": "c9365918f993f943b4b619d42551eb066a1ed33a08d895d51b395432a5b1f1bc",
@@ -116,7 +116,7 @@
116
116
  "schemas/v2/audit-verify-result.schema.json": "a748dfadb5155adfde8a91045e76b0db6695005fe559035d71670fdd55edb3ba",
117
117
  "schemas/v2/budget-policy.schema.json": "c7449daeb6e1d95e7a047b8c2814d3d54748697c27046972834874867d9b5f4c",
118
118
  "schemas/v2/capabilities.schema.json": "213c5cbe7ae7a337418c9183ed8ec39f1bc4dc39650a9b3c06cea9780dca3f24",
119
- "schemas/v2/certification-bundle.schema.json": "0bcf8f297266505ca39d30eea8100e3c0fb048f2651717fd746da8129fcb7920",
119
+ "schemas/v2/certification-bundle.schema.json": "9afcd16cf018d9b0d3b31e3b7e2e844d9289fe7b912a363d0df5a78e4fdfc054",
120
120
  "schemas/v2/channel-presence-payload.schema.json": "1c20ad810cb311d47aa0b95d928490826b2468fd161f884cd29e867053e6782f",
121
121
  "schemas/v2/channel-written-payload.schema.json": "ccecff3c71a3275ad8db035ac0e04db25e6f8d23cf091ddbcd5a60d1be1cbb6b",
122
122
  "schemas/v2/chat-card-pack-manifest.schema.json": "8df0d9d273ae22efc6876d5586833f1d4c2e551edc3ac6cf6e8f0719329f03dd",
@@ -201,13 +201,13 @@
201
201
  "schemas/workspace-file.schema.json": "464de85c2a068243084ee9c1d969bc7cd5d8f7948574e58450d6493c38a0e1e4",
202
202
  "spec/v1/alias-detectors.json": "40069d5976eeb6ba1384a648e57e5cfd673db3fce36175115fb8293bee9664d4",
203
203
  "spec/v1/capability-declaration-classes.json": "e7729aed5c4b4e1dd02abab0530f14cc95f5d4070fe51fb139e7f5cccefa00c6",
204
- "spec/v1/core-standard-manifest.json": "8b43e4919b13e88b1b86fd7e088f0b06edc65c40268329ccdc836c43e4f60493",
204
+ "spec/v1/core-standard-manifest.json": "7a9f26072759124fd30685994d120043eee7abb1501d507a9f11a26f558f9951",
205
205
  "spec/v1/deprecations.json": "307083ce29c23fd406015951f99a30d78d6187ff061d38dc9732f62191b40f3f",
206
206
  "spec/v1/deprecations.schema.json": "18c87e78bedc210431f795ae44c5b5d202f2f3317850d5cf86867d4f1fa1cdfb",
207
207
  "spec/v1/event-codemap.json": "3da60d884157793a360da532a9fcbbfb5285636db325a74cec94b34622186d97",
208
208
  "spec/v1/event-codemap.schema.json": "d05933b2e88103aff51a2f774df97b9bda065e0fc88dbd9b114cc47a32189174",
209
209
  "spec/v1/extensions.json": "79a60754aa16cbdbdb604f8e5c00038af535a1690a4d07bd5ff7c38f0256a7bc",
210
- "spec/v1/gaps.json": "ac54bdfcfdcbf96ddc5ae13c7e8e94a88f3c60c785be760d8a3d1fa902ef82ce",
210
+ "spec/v1/gaps.json": "348f3d5b93057f614b44ce24cc2f96f7675583dee4cea015943ba02d64f840ee",
211
211
  "spec/v1/gaps.schema.json": "8fd83259f556553c9df0f53e7a82ca8c2a4771d471197f69b4e2ae0ceeacfd66",
212
212
  "spec/v1/migrations.json": "8839497d6a4830b53fa7867014a8336f0d725ef2346352e54fb580b7947897af",
213
213
  "spec/v1/migrations.schema.json": "886779aa6c22e646db097f5df210adb018a4dd14a7b815465a18c8a7056c8f72",
@@ -230,11 +230,11 @@
230
230
  "spec/v2/core/persistence.md": "9e241f84259e38848f4a2ad1c21debb0dffd5f8aafbad26408aa6cc8969bf93b",
231
231
  "spec/v2/core/replay.md": "10cc01bf9e4e921fcfac740f3174b2e95cda7ba9a1e13e85cf371c8c2d0fa46a",
232
232
  "spec/v2/core/runs.md": "136319842bacbbb300178980e4b83444917d5b193cc5fdd92e39a4902ba8d3c0",
233
- "spec/v2/core/security-defaults.md": "5c32c0bf4b47975c1428361b225a066cd3966cb37b023ca70bc30152fcbec33b",
233
+ "spec/v2/core/security-defaults.md": "2a54ceaa4cef02c26ee0fbcf44f822ceeea79537c7d5a51ed300f21aa4fea576",
234
234
  "spec/v2/core/versioning.md": "27b88cde88f9060567ef7e46f4897b6be8892ade9f4a46c2ab16e314c515eabd",
235
235
  "spec/v2/core/webhooks.md": "46c1311c1897236f9bf9db5025c8af31dd84cd19208da3e5e9ff69eec9436965",
236
236
  "spec/v2/core/workflow-chain-packs.md": "df78b76dd79f2267fb6b72c08e0911e5f9d5bb1925c6efdd6deda62fe8a51dc8",
237
- "spec/v2/declaration.json": "49307ad6252cd2d21b78ddbbc910f55e8c1ee89a53d04686d28c32f53f6d778b",
237
+ "spec/v2/declaration.json": "6182a370811133d9033591fd357cf6973a9c4e5b01cf25988922d6c621db5d0d",
238
238
  "spec/v2/declaration.schema.json": "c86e3083fb9789c1958ecb4576cc6f71aa90e6f339521139238543ed08211dd4",
239
239
  "spec/v2/errors.json": "aac91b12f954cc90574d310070ae3c651b131055d4389d2c6155242763765195",
240
240
  "spec/v2/event-codemap.json": "37869a03cdfd8758b57e6f350641a6ebbd383231cebda51f5473ad85f94ab74c",
@@ -274,8 +274,8 @@
274
274
  "spec/v2/path-manifest.json": "c123c9fd77dc1b3f9c2e9346ace80cdae007e6511138894956abda01e61ec1c6",
275
275
  "spec/v2/peer-dependency-aliases.json": "d10299280abee08258502925bc327293ee413e0108cd6e6ec75ff6110653308d",
276
276
  "spec/v2/profiles.json": "0636f19fceae625390003a347e70ef4797d84766b5c24ce8a02cea52aadebca4",
277
- "spec/v2/release.json": "3fdc368bea04141d0b459f5a2ffa26bcf40ca3bfc37fa0488afd13b881abdd9d",
277
+ "spec/v2/release.json": "e8d93bad6d3acf1a9ba6b6ff121caeb73bef1371ab930f7adfa9fc29f35f67ef",
278
278
  "spec/v2/retention-floors.json": "eaf3722d95c79947af1d4269ef85117e126518c588cfcf1a2b21b97269f51624"
279
279
  },
280
- "corpusCommit": "bdad62b0dbb80f9e3f908ebab747b5413fff448d"
280
+ "corpusCommit": "766736268b7b82871bda8f4e27a358d6dcdf5888"
281
281
  }