@openwop/openwop-conformance 1.131.0 → 1.132.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openwop/openwop-conformance",
3
- "version": "1.131.0",
3
+ "version": "1.132.0",
4
4
  "description": "Production-ready black-box conformance suite for OpenWOP v1.0 compliant servers.",
5
5
  "repository": {
6
6
  "type": "git",
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "_comment": "Provenance of this vendored schemas/ copy. See conformance/README.md \u00a7\"Resolving the contract\". Compare against the stamp in your installed @openwop/openwop-conformance to detect a stale hand-copied contract.",
3
- "suiteVersion": "1.131.0",
4
- "corpusCommit": "b2a25cf7013d21838b8b5abeaea7dff12355bfc5"
3
+ "suiteVersion": "1.132.0",
4
+ "corpusCommit": "1f702f91558437558816d0e6af251926942d123f"
5
5
  }
@@ -31,24 +31,29 @@
31
31
  * (soft-skips without the advert, HARD-FAILS under `OPENWOP_REQUIRE_BEHAVIOR=true`)
32
32
  * and records its RFC 0148 §A disposition. The three sub-features are
33
33
  * INDEPENDENTLY optional: a host that wires the base seams but not this
34
- * extension is `blocked` here (named as such via `seamAbsent`) and keeps its
34
+ * extension is `blocked` here (named as such via `softSkip`) and keeps its
35
35
  * `compensation-behavior` witness — the base and the extension are different
36
36
  * claims and are recorded separately.
37
37
  *
38
- * Mode matters, and the first host to advertise pointed it out: `seamAbsent`
39
- * records `blocked` in DEFAULT mode but THROWS under
40
- * `OPENWOP_REQUIRE_BEHAVIOR=true` (RFC 0148 §B an advertised capability
41
- * whose witness seam is missing is a failure in strict certification, not a
42
- * disposition). So a host that flips `compensation.supported` on without the
43
- * §21 recovery extension is honest-red here in strict runs. Wire the extension
44
- * with the advert, or run default mode and read the `blocked` rows.
38
+ * Mode does NOT change that (S24, corrected 2026-08-16 after the first host to
39
+ * wire §21 read the contract back to us): the recovery extension has NO advert
40
+ * flag — `capabilities.compensation` is closed over `supported` /
41
+ * `profileVersion` / `orderingModels` / `manualIntervention` so a host cannot
42
+ * claim or disclaim it, and `seamAbsent` (whose contract is "an ADVERTISED
43
+ * capability whose observation seam is absent", strict-failing) is the wrong
44
+ * tool for it. An absent extension is `softSkip('blocked', …)` in both modes,
45
+ * exactly as §21 says; the ledger still refuses to certify the three §G
46
+ * invariants, so nothing weakens. The BASE seams (`unwind` / `replay`) are a
47
+ * different matter: `compensation.supported` promises them, and a 404 there
48
+ * stays `seamAbsent` (strict-fails) — that is `compensation-behavior`'s wall,
49
+ * not this file's.
45
50
  */
46
51
 
47
52
  import { describe, it, expect } from 'vitest';
48
53
  import { driver } from '../lib/driver.js';
49
54
  import { behaviorGate } from '../lib/behavior-gate.js';
50
55
  import { capabilityFamily } from '../lib/discovery-capabilities.js';
51
- import { seamAbsent } from '../lib/soft-skip.js';
56
+ import { seamAbsent, softSkip } from '../lib/soft-skip.js';
52
57
  import { readErrorCode, readRetriable } from '../lib/error-envelope.js';
53
58
 
54
59
  const PROFILE = 'openwop-compensation';
@@ -93,9 +98,14 @@ async function post(path: string, body: Record<string, unknown>): Promise<{ stat
93
98
  return { status: r.status, json: r.json };
94
99
  }
95
100
 
96
- /** The recovery extension is optional; a base seam that ignores the new fields is `blocked` here, not failed. */
101
+ /**
102
+ * The recovery extension is optional and has no advert flag, so its absence is
103
+ * `blocked` in BOTH modes — `softSkip`, never `seamAbsent` (S24). The three §G
104
+ * invariants stay uncertified either way; strict mode is not entitled to fail
105
+ * a host for a sub-seam it was never asked to claim.
106
+ */
97
107
  function extensionAbsent(what: string): undefined {
98
- return seamAbsent(`the §21 recovery extension is not wired: ${what} (host-sample-test-seams.md §21 "Recovery extension") — retry-stability / operator authority / recorded-facts are unobservable`);
108
+ return softSkip('blocked', `the §21 recovery extension is not wired: ${what} (host-sample-test-seams.md §21 "Recovery extension") — retry-stability / operator authority / recorded-facts are unobservable`);
99
109
  }
100
110
 
101
111
  describe('RFC 0151 §C — inverse-action identity is retry-stable (capability-gated behavior)', () => {