@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.
|
|
4
|
-
"stampSha256": "
|
|
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.
|
|
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.
|
|
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.
|
|
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": "
|
|
13
|
-
"api/v2/asyncapi.yaml": "
|
|
14
|
-
"api/v2/openapi.yaml": "
|
|
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": "
|
|
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": "
|
|
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": "
|
|
233
|
+
"spec/v2/release.json": "3fb60f16863dce06f3fe38e538e1d5214dfdd57532b865ca626ebc8d1504368d",
|
|
234
234
|
"spec/v2/retention-floors.json": "eaf3722d95c79947af1d4269ef85117e126518c588cfcf1a2b21b97269f51624"
|
|
235
235
|
},
|
|
236
|
-
"corpusCommit": "
|
|
236
|
+
"corpusCommit": "bd32391b7d99df7545b832d365c05e0907ff5013"
|
|
237
237
|
}
|
package/src/lib/era2-seed.ts
CHANGED
|
@@ -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
|
-
|
|
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') {
|