@openwop/openwop-conformance 2.0.0-rc.62 → 2.0.0-rc.64

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.
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "package": "@openwop/spec-artifacts",
3
- "version": "2.0.0-rc.62",
4
- "stampSha256": "fbd56586d7771310fcb5cde3a98084e0794cd676f6165d132111dfb5d71e4467"
3
+ "version": "2.0.0-rc.64",
4
+ "stampSha256": "5c29710dc65214cae16f4698cec6f2ca4646efa1e9bb472bfcf55e15183f0518"
5
5
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openwop/openwop-conformance",
3
- "version": "2.0.0-rc.62",
3
+ "version": "2.0.0-rc.64",
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.0.0-rc.62"
59
+ "@openwop/spec-artifacts": "2.0.0-rc.64"
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.0.0-rc.62",
4
+ "version": "2.0.0-rc.64",
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": "a260397f3c7886e0df74d7f51621188f75207149b1ad92d05bbd6068522434bc",
13
- "api/v2/asyncapi.yaml": "ba2d0e3d36f65f054e39b59ab8a35e2424333b5851bf133c29832d3ae027780c",
14
- "api/v2/openapi.yaml": "66ecc397298bbd3c7815e499d4dfca9c4ac41f18941b6e9c8465e2a62f95ece8",
12
+ "api/seams-v2.yaml": "620fa28e241d3936fd6b9aac6d6d85c440e9d20baa3c37544c4d6dbdfc403b60",
13
+ "api/v2/asyncapi.yaml": "51b177f3135d573af563a2985fa36efaa82ae7d64e19b1c80bd755b4229f0e0d",
14
+ "api/v2/openapi.yaml": "f3a3cf2c0ad275fa0b847df1ceedcb15caf5283e89a3dcd87b1e296f74d58ce6",
15
15
  "api/v2/redocly.yaml": "1e66b60e6118ad11a823bb620678be464d99dfe50a40e3e6f93ec9429b88b34c",
16
16
  "schemas/README.md": "0c0b737ffcf8f30e7d2809cec8a498232de710f41443212922ad8337cdde0b51",
17
17
  "schemas/a2a-task-state.schema.json": "c9365918f993f943b4b619d42551eb066a1ed33a08d895d51b395432a5b1f1bc",
@@ -131,7 +131,7 @@
131
131
  "schemas/v2/credential-reference.schema.json": "ea699ce30f58fb2c32d4279158b3f730f70be7b2dc8c3037693a76e66eb3e001",
132
132
  "schemas/v2/debug-bundle.schema.json": "0bfa4b1d91fefbc12c95670dba9d5eacb72b879bb9a5c074e821ca9ed0fee6fd",
133
133
  "schemas/v2/dispatch-config.schema.json": "4a7db312e6b4a14cf5b1ad2b71367878c77b6321cc456f5b3644dd6434e94cbd",
134
- "schemas/v2/effect-ledger-projection.schema.json": "9e690f8e5dbf9aa7c82eef4bf7cf96c024f0f8626ad5bbaca3ff25ac63c7cab2",
134
+ "schemas/v2/effect-ledger-projection.schema.json": "928340b243c60aaf04c1b40adb09be8a90340d44f57be1dfff837be10f104822",
135
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",
@@ -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": "befa25b1768d3759901eb90f8352957f8aaf018ef1474172cfe988f8cd5454fa",
202
+ "spec/v1/core-standard-manifest.json": "281d29c567eb67e38a229f083fa7c33cc5a3ec4307f745a7d8617a12bd4216e8",
203
203
  "spec/v1/deprecations.json": "1d5acb69a9b8ccb57275a95605f74aef1d920685f8407c9d382a46b59dc803bb",
204
204
  "spec/v1/deprecations.schema.json": "18c87e78bedc210431f795ae44c5b5d202f2f3317850d5cf86867d4f1fa1cdfb",
205
205
  "spec/v1/event-codemap.json": "3da60d884157793a360da532a9fcbbfb5285636db325a74cec94b34622186d97",
@@ -230,8 +230,8 @@
230
230
  "spec/v2/path-manifest.json": "034152e09b1458c66810d4050e20a273b2b9b8fe2d92b66e8b819477de58a1be",
231
231
  "spec/v2/peer-dependency-aliases.json": "d10299280abee08258502925bc327293ee413e0108cd6e6ec75ff6110653308d",
232
232
  "spec/v2/profiles.json": "0636f19fceae625390003a347e70ef4797d84766b5c24ce8a02cea52aadebca4",
233
- "spec/v2/release.json": "73024738fc047447d7f229b52314a235c99d7adb46d5f340fbe44b618b3495a8",
233
+ "spec/v2/release.json": "3fb60f16863dce06f3fe38e538e1d5214dfdd57532b865ca626ebc8d1504368d",
234
234
  "spec/v2/retention-floors.json": "eaf3722d95c79947af1d4269ef85117e126518c588cfcf1a2b21b97269f51624"
235
235
  },
236
- "corpusCommit": "88b80d84b211802bc2ee83e67fdb9412e258a74b"
236
+ "corpusCommit": "bd32391b7d99df7545b832d365c05e0907ff5013"
237
237
  }
@@ -69,7 +69,18 @@ async function http(fn: () => Promise<OpenWOPResponse>): Promise<OpenWOPResponse
69
69
  export function era2Gate(doc: Record<string, unknown> | null): Seeded | null {
70
70
  if (!doc) return { ok: false, kind: 'blocked', reason: 'discovery unreachable' };
71
71
  if (!seamsProfileAdvertised(doc)) {
72
- return { ok: false, kind: 'blocked', reason: `seams profile not advertised (conformance.seamsProfile !== openwop-conformance-seams-v2) an era-2 log can only be seeded through ${SEED_PATH}` };
72
+ // rc.63: `inapplicable`, not `blocked` — the host never claimed the
73
+ // instrument, so the obligation is out of scope for it (`lib/seams.ts`).
74
+ // rc.62 fixed the fifteen scenarios that call `seamsProfileAdvertised`
75
+ // directly and MISSED this one, which mints the same disposition one call
76
+ // deeper for six scenarios that import only `era2Gate`: era-2-append-
77
+ // vocabulary, fork-a-v1-run, pinned-run-disposition, stream-sse-projection,
78
+ // unmapped-type-refused, v1-events-translated. On MyndHyve's bundle that
79
+ // left 16 rows blocked on advert-absence after rc.62 — the same defect
80
+ // wearing a different import. `blocked` above (discovery unreachable) and
81
+ // below (the seam does not answer) is untouched: those are real failed
82
+ // measurements.
83
+ return { ok: false, kind: 'inapplicable', reason: `seams profile not advertised (conformance.seamsProfile !== openwop-conformance-seams-v2) — an era-2 log can only be seeded through ${SEED_PATH}` };
73
84
  }
74
85
  return null;
75
86
  }
@@ -73,6 +73,22 @@ describe('RFC 0173 §C.2 — effect-seam-no-refire (gated on replay, seam-driven
73
73
  const b = r.json as { effects?: unknown } | null;
74
74
  return Array.isArray(b?.effects) ? (b.effects as unknown[]).length : 0;
75
75
  };
76
+ // The suppression witness is a COMPARISON, and a comparison against an
77
+ // empty source measures nothing. Until rc.64 this leg asserted only
78
+ // `fork <= parent`, so a host whose ledger recorded no attempt for the
79
+ // fired seam read 0 on both sides and PASSED — certifying suppression it
80
+ // had not observed. A tier-1 host found it the honest way: it was building
81
+ // an escapes-only ledger, worked out that both reads would be empty, and
82
+ // refused to ship the projection that would have gone green.
83
+ //
84
+ // `blocked`, not `inapplicable`: this host advertises the seams profile,
85
+ // mounts the seam, and the seam reported firing — the obligation is taken
86
+ // on and the declared witness (RFC 0173 §C.2) produced nothing, so the
87
+ // suite could not measure it. `inapplicable` is for an obligation the host
88
+ // never took on (lib/seams.ts).
89
+ if (countOf(parentEffects) === 0) {
90
+ return softSkip('blocked', `the fired run's effect ledger is empty at GET /runs/{runId}/effects, so a fork that also reads empty would compare 0 against 0 and witness nothing — suppression is observable only against a source attempt the host recorded (RFC 0173 §C.2). A host whose ledger records escapes only, or nothing for this seam, cannot witness this obligation.`);
91
+ }
76
92
  const forked = await driver.post(`/runs/${encodeURIComponent(parentId)}:fork`, { mode: 'replay' });
77
93
  const forkBody = forked.json as { runId?: unknown } | null;
78
94
  if (forked.status !== 201 || typeof forkBody?.runId !== 'string') {