@openwop/openwop-conformance 2.1.5 → 2.1.6
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,13 @@
|
|
|
1
1
|
# `@openwop/openwop-conformance` Changelog
|
|
2
2
|
|
|
3
|
+
## [2.1.6] — 2026-09-13 — the unknown-run probe is tenant-bound
|
|
4
|
+
|
|
5
|
+
`v2-compensation-read-projection` asserted `404 not_found` for an unknown run
|
|
6
|
+
while probing with a BARE id, which `identity.md` §5 requires a v1-retired host
|
|
7
|
+
to refuse `400 validation_error`. The probe now forms a tenant-bound id from a
|
|
8
|
+
run it creates, so it tests existence rather than spelling and passes on
|
|
9
|
+
overlap and retired hosts alike. No other scenario changed.
|
|
10
|
+
|
|
3
11
|
## [2.1.5] — 2026-09-12 — v1 errata only
|
|
4
12
|
|
|
5
13
|
No scenario changed. The contract peer ships `spec/v1/deprecations.json`, whose
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@openwop/openwop-conformance",
|
|
3
|
-
"version": "2.1.
|
|
3
|
+
"version": "2.1.6",
|
|
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.1.
|
|
59
|
+
"@openwop/spec-artifacts": "2.1.6"
|
|
60
60
|
}
|
|
61
61
|
}
|
|
@@ -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.1.
|
|
5
|
-
"corpusTag": "v2.1.
|
|
4
|
+
"version": "2.1.6",
|
|
5
|
+
"corpusTag": "v2.1.6",
|
|
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": "
|
|
13
|
-
"api/v2/asyncapi.yaml": "
|
|
14
|
-
"api/v2/openapi.yaml": "
|
|
12
|
+
"api/seams-v2.yaml": "d2ae13db2ec6511d29836235f5955c9ff65fcd910ff67a6837e0eafb1cc1098c",
|
|
13
|
+
"api/v2/asyncapi.yaml": "8e723c03dd65f2fcc33b6b337c18d32f2ca5d18d9883d95c33614eabbfb99ad8",
|
|
14
|
+
"api/v2/openapi.yaml": "eb9c2d25f537d383d8c5e0d6ae05572bd5da80aac4e7a7a70eb44163d984d73c",
|
|
15
15
|
"api/v2/redocly.yaml": "1e66b60e6118ad11a823bb620678be464d99dfe50a40e3e6f93ec9429b88b34c",
|
|
16
16
|
"schemas/README.md": "0c0b737ffcf8f30e7d2809cec8a498232de710f41443212922ad8337cdde0b51",
|
|
17
17
|
"schemas/a2a-task-state.schema.json": "c9365918f993f943b4b619d42551eb066a1ed33a08d895d51b395432a5b1f1bc",
|
|
@@ -200,7 +200,7 @@
|
|
|
200
200
|
"schemas/workspace-file.schema.json": "464de85c2a068243084ee9c1d969bc7cd5d8f7948574e58450d6493c38a0e1e4",
|
|
201
201
|
"spec/v1/alias-detectors.json": "fee4594ef49953953ffcd0b3813300067d16b3e65ebff2aac722034ac9b3f545",
|
|
202
202
|
"spec/v1/capability-declaration-classes.json": "e7729aed5c4b4e1dd02abab0530f14cc95f5d4070fe51fb139e7f5cccefa00c6",
|
|
203
|
-
"spec/v1/core-standard-manifest.json": "
|
|
203
|
+
"spec/v1/core-standard-manifest.json": "9d3cb4dc2f8b65a9282d1673a5030d7960eb193d73fcfd789e4cbbd93aff5588",
|
|
204
204
|
"spec/v1/deprecations.json": "a2022c2d6eb501bf406b5d75fe2d431a3fe0158e8509125d2453985eb1bf511a",
|
|
205
205
|
"spec/v1/deprecations.schema.json": "18c87e78bedc210431f795ae44c5b5d202f2f3317850d5cf86867d4f1fa1cdfb",
|
|
206
206
|
"spec/v1/event-codemap.json": "3da60d884157793a360da532a9fcbbfb5285636db325a74cec94b34622186d97",
|
|
@@ -212,14 +212,14 @@
|
|
|
212
212
|
"spec/v1/migrations.schema.json": "886779aa6c22e646db097f5df210adb018a4dd14a7b815465a18c8a7056c8f72",
|
|
213
213
|
"spec/v1/operation-path-manifest.json": "5f5f4e3842669371730ebbd1aace3fb794192615f0018dc144f484ba5db82ac3",
|
|
214
214
|
"spec/v1/spec-gaps.json": "6cc9962c6b969f632e07a78b52a4f61447ff579e2990cbae989866f584a86042",
|
|
215
|
-
"spec/v2/README.md": "
|
|
215
|
+
"spec/v2/README.md": "75a576b3ec0e4ce85ea393f88be358055e7324fb2d196de2809d49122e85f6cf",
|
|
216
216
|
"spec/v2/core/capabilities.md": "c5107a4964e487c20bbb5254cfe1f706e0d9ba7e34da9070bc43b50b385e7948",
|
|
217
217
|
"spec/v2/core/conformance.md": "622084e3c74c4549087f4d861b1bb98cec201a0c5aec23788d27f53a355fde3b",
|
|
218
218
|
"spec/v2/core/connection-packs.md": "1d759681e2962f5103228c52c45f24607ed4bb9ae73e30605f690c1d5a59e9ee",
|
|
219
219
|
"spec/v2/core/errors.md": "74fdb5862f432a831cf0c2eadbe0c8cca6b2660ec578180ae33db54773a1df28",
|
|
220
220
|
"spec/v2/core/events.md": "defe0969d6ec7c980f415cc0d78b9d065782ac7e5638b12a44aa4895a35d6126",
|
|
221
221
|
"spec/v2/core/form-content-packs.md": "6ffaae85d4550be48dd53fb6e2959af8aceb35bd87c5343b722885084f197713",
|
|
222
|
-
"spec/v2/core/headers.md": "
|
|
222
|
+
"spec/v2/core/headers.md": "16e865d6f47f87ac63cdf3010c13661ee1db498ecc422ae913fa99032cbfa7a7",
|
|
223
223
|
"spec/v2/core/idempotency.md": "b86c352d964aebad532727f314e26ed2177d49de382076fa64d3162e2f56118d",
|
|
224
224
|
"spec/v2/core/identity.md": "dd5299f9cdf54640870e1fffae11edb820cf6396ea298c4ebd14c649c4bd4a87",
|
|
225
225
|
"spec/v2/core/interop.md": "d4c404e469e1d9d9be88bc2c939d777e7d7c1d0419b1251c18770f039838a401",
|
|
@@ -270,8 +270,8 @@
|
|
|
270
270
|
"spec/v2/path-manifest.json": "a6f4e652e866889e8bde815874062f62929aee95dc8e58e7152c56adee262163",
|
|
271
271
|
"spec/v2/peer-dependency-aliases.json": "d10299280abee08258502925bc327293ee413e0108cd6e6ec75ff6110653308d",
|
|
272
272
|
"spec/v2/profiles.json": "0636f19fceae625390003a347e70ef4797d84766b5c24ce8a02cea52aadebca4",
|
|
273
|
-
"spec/v2/release.json": "
|
|
273
|
+
"spec/v2/release.json": "972de6d9a79fe5ed397197e1ae54e722e476845e1ea12a484f46ce0e7df12fb6",
|
|
274
274
|
"spec/v2/retention-floors.json": "eaf3722d95c79947af1d4269ef85117e126518c588cfcf1a2b21b97269f51624"
|
|
275
275
|
},
|
|
276
|
-
"corpusCommit": "
|
|
276
|
+
"corpusCommit": "b9b70e63a9c5efc0e5bc7a3efbb675eb551bfce1"
|
|
277
277
|
}
|
|
@@ -75,7 +75,20 @@ describe('RFC 0173 §B — compensation-read-projection (gated on compensation)'
|
|
|
75
75
|
const doc = await discovery();
|
|
76
76
|
if (!doc) return softSkip('blocked', 'discovery unreachable');
|
|
77
77
|
if (!(await gateFamily('compensation'))) return softSkip('inapplicable', 'compensation family not advertised — no obligation (gate recorded under openwop.family.compensation)');
|
|
78
|
-
|
|
78
|
+
// The unknown id MUST be TENANT-BOUND, not bare. A bare id is the v1
|
|
79
|
+
// spelling: `identity.md` §5 admits it through the overlap and requires a
|
|
80
|
+
// host that advertises no `1.x` member to refuse it `400 validation_error`
|
|
81
|
+
// — so on a retired host this probe asked about SHAPE and never reached the
|
|
82
|
+
// existence check it asserts. Found 2026-09-13 by the reference host's
|
|
83
|
+
// retirement lane on its first run; the host was right and the probe was
|
|
84
|
+
// written for the overlap. A bound id answers 404 on both, so this needs no
|
|
85
|
+
// branch on the advertisement — it just needs to stop using the one
|
|
86
|
+
// spelling that is conditional.
|
|
87
|
+
const probe = await driver.post('/runs', { workflowId: FIXTURE });
|
|
88
|
+
const tenant = String((probe.json as { runId?: string }).runId ?? '').split('/')[0];
|
|
89
|
+
if (!tenant) return softSkip('blocked', 'could not learn the caller tenant from a created run, so no tenant-bound unknown id can be formed');
|
|
90
|
+
const unknown = `${tenant}/conformance-no-such-run-0173`;
|
|
91
|
+
const res = await driver.get(`/runs/${encodeURIComponent(unknown)}/compensation`);
|
|
79
92
|
expect(res.status, req('openwop.requirement.0173.compensation-read-projection.not-found', 'openapi.yaml getRunCompensation 404', 'an unknown runId MUST answer 404')).toBe(404);
|
|
80
93
|
expect(
|
|
81
94
|
readErrorCode(res.json),
|