@openwop/openwop-conformance 2.31.0 → 2.31.1

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,10 @@
1
1
  # `@openwop/openwop-conformance` Changelog
2
2
 
3
+ ## [2.31.1] — 2026-09-20 — major-correct shared polling
4
+
5
+ - Fixed the shared run polling helper to use `/runs/{runId}` in the major-2 lane and retain `/v1/runs/{runId}` only in the major-1 lane. The old helper combined a `/v1` path with `OpenWOP-Version: 2`, so a conforming host correctly answered `protocol_version_mismatch`; `v2-durability-recovery` then misreported an unreachable run even though it had already failed terminally.
6
+ - Added a two-major self-test that pins both paths. Suite remains pinned to corpus `2.31.0`; this is a conformance-harness patch only.
7
+
3
8
  ## [2.31.0] — 2026-09-19 — the fifth rung row, and the projection helper
4
9
 
5
10
  - `v2-durability-recovery` gains `poison-exhaustion`, completing RFC 0158's `durable-single-instance` rung at major 2. The existing scenario was major-1 only and seam-bound; the port reads the canonical `GET /runs/{runId}/events` and needs **no seam**, so it can never record `blocked` for want of one. The v1 scenario is untouched.
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.31.0 @openwop/spec-artifacts@2.31.0
14
+ npm install --legacy-peer-deps @openwop/openwop-conformance@2.31.1 @openwop/spec-artifacts@2.31.1
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.31.0",
4
- "stampSha256": "6a1c3396dc82087916910d32e2eec70aa589d22110dc3dec2f44472cc0289c5f"
3
+ "version": "2.31.1",
4
+ "stampSha256": "7d8c030abbf9fd38c0f527eaa57d0d1621bdbf1c94463854c33c2399e52866f9"
5
5
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openwop/openwop-conformance",
3
- "version": "2.31.0",
3
+ "version": "2.31.1",
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.31.0"
59
+ "@openwop/spec-artifacts": "2.31.1"
60
60
  }
61
61
  }
@@ -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.31.0",
4
+ "version": "2.31.1",
5
5
  "corpusTag": "v2.31.0",
6
6
  "files": {
7
7
  "api/.redocly.lint-ignore.yaml": "bf5a8350b88a72fa43f59605ed8d903ed24b6cfccda5e45509c9f6ed9ee4e712",
@@ -201,7 +201,7 @@
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": "c8cc668bd5c1e504e8b0171e3c078f770f9d9e5765938750f600defb2fcb986f",
204
+ "spec/v1/core-standard-manifest.json": "0640fb5fdced5af7a5e2ae2108c69da13d79bd3c5373128ee5039e9cd1af0e43",
205
205
  "spec/v1/deprecations.json": "307083ce29c23fd406015951f99a30d78d6187ff061d38dc9732f62191b40f3f",
206
206
  "spec/v1/deprecations.schema.json": "18c87e78bedc210431f795ae44c5b5d202f2f3317850d5cf86867d4f1fa1cdfb",
207
207
  "spec/v1/event-codemap.json": "3da60d884157793a360da532a9fcbbfb5285636db325a74cec94b34622186d97",
@@ -282,5 +282,5 @@
282
282
  "spec/v2/release.json": "92131d62a7fcd12445d7e04eb588e2297f839b7e5e2a87f89ae9e61593f837cd",
283
283
  "spec/v2/retention-floors.json": "eaf3722d95c79947af1d4269ef85117e126518c588cfcf1a2b21b97269f51624"
284
284
  },
285
- "corpusCommit": "cb0aa58bb79366383a13b4b2843f47662888a189"
285
+ "corpusCommit": "691974ccf758a6ea42dad8c38ab6b5570e8f89f2"
286
286
  }
@@ -28,6 +28,7 @@
28
28
  */
29
29
 
30
30
  import { driver } from './driver.js';
31
+ import { targetMajor } from './seams.js';
31
32
 
32
33
  export interface RunSnapshot {
33
34
  readonly runId: string;
@@ -73,9 +74,14 @@ export function scaledTimeoutMs(timeoutMs: number): number {
73
74
  const TERMINAL = new Set(['completed', 'failed', 'cancelled']);
74
75
 
75
76
  export async function getRun(runId: string): Promise<RunSnapshot> {
76
- const res = await driver.get(`/v1/runs/${encodeURIComponent(runId)}`);
77
+ // A major-2 request MUST use the unversioned path space. The driver adds the
78
+ // OpenWOP-Version: 2 header, so retaining `/v1` here asked the host to serve
79
+ // two different majors at once and a conforming negotiator correctly refused
80
+ // it with protocol_version_mismatch. Keep the v1 key only in the v1 lane.
81
+ const prefix = targetMajor() === 2 ? '' : '/v1';
82
+ const res = await driver.get(`${prefix}/runs/${encodeURIComponent(runId)}`);
77
83
  if (res.status !== 200) {
78
- throw new Error(`GET /v1/runs/${runId} returned ${res.status}: ${res.text.slice(0, 200)}`);
84
+ throw new Error(`GET ${prefix}/runs/${runId} returned ${res.status}: ${res.text.slice(0, 200)}`);
79
85
  }
80
86
  return res.json as RunSnapshot;
81
87
  }