@openwop/openwop-conformance 2.46.32 → 2.46.33

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,3 +1,9 @@
1
+ ## [2.46.33] — 2026-10-27 — RFC 0252 Accepted
2
+
3
+ - **Fix `v2-advertised-fixtures-exist` (RFC 0168 §C.3).** It sampled `fixtures[]` by fixed index and sent each id as `POST /runs {workflowId}`. An RFC 0244 eval suite is started as `{mode: "eval", evalSuiteRef}`, so that request is a correct 404. RFC 0252's three suites shifted the indices onto `conformance-eval-counter-miss`, and openwop-app's 2.46.32 cut recorded `0168.advertised-fixtures-exist` `executed-fail`. The sample now skips the suite's own eval-suite fixture ids; the eval scenarios start those.
4
+ - **Host impact:** a host listing eval suites no longer fails this leg; a host whose advertised workflow fixture 404s still does.
5
+ - RFC 0252's G2 closes on that cut (the six `0252.*` legs `executed-pass`), so the packed `spec/v1/gaps.json` changes.
6
+
1
7
  ## [2.46.32] — 2026-10-26 — RFC 0252 Active
2
8
 
3
9
  - **New scenario `v2-eval-recorded-fixtures` (RFC 0252)** over three fixtures and the counter tool, run in order source, replay (`fixtureRuns: {record: source}`), drift, then the source again as a probe: `0252.shape` (server-free), `source-replayed`, `drift-fails-closed`, `source-refused`, `source-uniform`, `fields-refused`. Judges in `lib/eval-recorded-fixtures-witness.ts` with self-tests.
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "package": "@openwop/spec-artifacts",
3
- "version": "2.46.32",
4
- "stampSha256": "e6decdfd7ff3c1d06ccb5b895967821962de134e122765fa012698d3e1fa5535"
3
+ "version": "2.46.33",
4
+ "stampSha256": "f5b2440074e7dfb4824b0016e7e00bdc1902b43a8336ae093264c82baa7c85c9"
5
5
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openwop/openwop-conformance",
3
- "version": "2.46.32",
3
+ "version": "2.46.33",
4
4
  "description": "Black-box conformance suite for OpenWOP hosts (v2 current; v1 scenarios retained for the frozen v1 tree).",
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.46.32"
59
+ "@openwop/spec-artifacts": "2.46.33"
60
60
  }
61
61
  }
package/requirements.json CHANGED
@@ -28024,7 +28024,7 @@
28024
28024
  {
28025
28025
  "id": "openwop.it.v2-advertised-fixtures-exist.a-sampled-advertised-fixture-is-actually-creatable-not-just-listed",
28026
28026
  "file": "v2-advertised-fixtures-exist.test.ts",
28027
- "line": 62,
28027
+ "line": 82,
28028
28028
  "title": "a sampled advertised fixture is actually creatable, not just listed",
28029
28029
  "explicitId": "openwop.requirement.0168.advertised-fixtures-exist",
28030
28030
  "citations": [
@@ -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.46.32",
5
- "corpusTag": "v2.46.32",
4
+ "version": "2.46.33",
5
+ "corpusTag": "v2.46.33",
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": "ac6de5303872664b78ff419c035915593e01599e02835e777a0123de1baeb398",
11
11
  "api/redocly.yaml": "b0604c89b2ca6d5076ec25725c539dad44a741a811fe524439ee6daef8baa09f",
12
- "api/seams-v2.yaml": "2a890e944caa3925d4e5ba1f2f6a74b0a20f5449d1cefddf27fb625b763432f7",
13
- "api/v2/asyncapi.yaml": "6498030118946490e6eeeb96c9c16b95a6334a55b6e5e50f203c94b197a083b3",
14
- "api/v2/openapi.yaml": "2e7da662960ecf05088eeb24b2eb2996f481c16ba5b8fc867e7869ad3f9ab20e",
12
+ "api/seams-v2.yaml": "5a9df970c321dae024496428812312c4ffe30a5b7d8597e13cf3e16ac8cf83ee",
13
+ "api/v2/asyncapi.yaml": "ee10e56b8f54e4b10a200c8ae8f3d8a7203a7180ec7cc059ee269ce9f9417d40",
14
+ "api/v2/openapi.yaml": "f1beb88ada212a38de34aa292141034e87e087824c88de24d074e33edd2b1c30",
15
15
  "api/v2/redocly.yaml": "1e66b60e6118ad11a823bb620678be464d99dfe50a40e3e6f93ec9429b88b34c",
16
16
  "schemas/README.md": "276fc1d51eb08e14e9127b9fd27761d7046ee33c12000f3a64a801322db8bf58",
17
17
  "schemas/a2a-task-state.schema.json": "75d5049dea8bd873ff0e7546f1c60c8d36c219bec7084264360be54a8be30ae1",
@@ -212,14 +212,14 @@
212
212
  "schemas/workspace-file.schema.json": "464de85c2a068243084ee9c1d969bc7cd5d8f7948574e58450d6493c38a0e1e4",
213
213
  "spec/v1/alias-detectors.json": "22444c22bb88c568339ef512553f9fc38146e22b566d11ab8608f655d688d19c",
214
214
  "spec/v1/capability-declaration-classes.json": "e7729aed5c4b4e1dd02abab0530f14cc95f5d4070fe51fb139e7f5cccefa00c6",
215
- "spec/v1/core-standard-manifest.json": "c8cca62eac811cb159b789202137f01c658ea8a88b2a4d7c3b450f28c7cb997f",
215
+ "spec/v1/core-standard-manifest.json": "bed54a1d4e10ac512d091bd71604f30c54a402a45d9acaf47da0e190abf58514",
216
216
  "spec/v1/deprecations.json": "e723bc11d7272c71789ad1303bb7f21809a8a024abf57594f9d5c35dc199ece9",
217
217
  "spec/v1/deprecations.schema.json": "3e393c405d2a41b467d8c5e3c468549078df1ce6a6d2588fc488097b95d9b55b",
218
218
  "spec/v1/end-of-support.json": "35f0bf3b70fe78b16e2a2fd81a153fc27e703f6c16376c6fe7cdf1f4f2c4e6d4",
219
219
  "spec/v1/event-codemap.json": "3da60d884157793a360da532a9fcbbfb5285636db325a74cec94b34622186d97",
220
220
  "spec/v1/event-codemap.schema.json": "d05933b2e88103aff51a2f774df97b9bda065e0fc88dbd9b114cc47a32189174",
221
221
  "spec/v1/extensions.json": "79a60754aa16cbdbdb604f8e5c00038af535a1690a4d07bd5ff7c38f0256a7bc",
222
- "spec/v1/gaps.json": "c2f6e7de84e8f59bc35e59e5afc39ac1359b78c5b857d6c8b45a46803240362c",
222
+ "spec/v1/gaps.json": "e7fc487a951d176e72c353bb88894b308372a15e7e07adf936184a83f1e3acd5",
223
223
  "spec/v1/gaps.schema.json": "8fd83259f556553c9df0f53e7a82ca8c2a4771d471197f69b4e2ae0ceeacfd66",
224
224
  "spec/v1/migrations.json": "4c50760be70cb644d02427bcaf5749606700edf4513f423903cf3b1d12f5c300",
225
225
  "spec/v1/migrations.schema.json": "886779aa6c22e646db097f5df210adb018a4dd14a7b815465a18c8a7056c8f72",
@@ -318,9 +318,9 @@
318
318
  "spec/v2/path-manifest.json": "20f598f56df460ad3ed50aba3d6bc2933ea16a3c96ce125da1c5dd6989d4155c",
319
319
  "spec/v2/peer-dependency-aliases.json": "d10299280abee08258502925bc327293ee413e0108cd6e6ec75ff6110653308d",
320
320
  "spec/v2/profiles.json": "b382b261c7844798575f7c1b37c934f0da19846016a2337d883d4f5ef6e05479",
321
- "spec/v2/release.json": "8ce37c12db023b43d7a517a703130cc8baaafcf46dc49ddf9af8339c80321b59",
321
+ "spec/v2/release.json": "505d0c418355656976df91a85189f13846b37b18404bcdc344f1ab548476cc17",
322
322
  "spec/v2/retention-floors.json": "eaf3722d95c79947af1d4269ef85117e126518c588cfcf1a2b21b97269f51624",
323
- "spec/v2/surface-baseline.json": "920c6c86508e70e620595d76a45b6cd428c9bd665d0208b375c33ace60556fae"
323
+ "spec/v2/surface-baseline.json": "7e7098ed3ebad676c00deb29311c65464fa05718120a21c387101f9829639d04"
324
324
  },
325
- "corpusCommit": "2c0733837695218c74a0875305c704eb500a1665"
325
+ "corpusCommit": "e6bc9e1f7d252f7b1da31f0e98d92a3a0a4a3c4e"
326
326
  }
@@ -35,10 +35,13 @@
35
35
  */
36
36
 
37
37
  import { describe, it, expect } from 'vitest';
38
+ import { readdirSync } from 'node:fs';
39
+ import { join } from 'node:path';
38
40
  import { driver, type OpenWOPResponse } from '../lib/driver.js';
39
41
  import { v2Discovery } from '../lib/v2.js';
40
42
  import { softSkip } from '../lib/soft-skip.js';
41
43
  import { req } from '../lib/requirement-ids.js';
44
+ import { FIXTURES_DIR } from '../lib/paths.js';
42
45
 
43
46
  const ID = 'openwop.requirement.0168.advertised-fixtures-exist';
44
47
  const DOC = 'RFC 0168 §C.3';
@@ -58,12 +61,29 @@ function advertisedIds(doc: Record<string, unknown>): string[] {
58
61
  return Array.isArray(raw) ? raw.filter((x): x is string => typeof x === 'string') : [];
59
62
  }
60
63
 
64
+ /**
65
+ * The RFC 0244 eval suites share `fixtures[]` with workflows but are not
66
+ * workflows: a host starts one as `{mode: "eval", evalSuiteRef}`, never as a
67
+ * `workflowId`, so `POST /runs` with the suite id is a 404 on a conforming host.
68
+ * The sample once missed them by luck of index. RFC 0252 added three suites, the
69
+ * indices shifted, and the 2.46.32 production cut sampled
70
+ * `conformance-eval-counter-miss` and failed a correct host. Starting a suite here
71
+ * instead would run its tasks and move the counter state `v2-eval-trajectory-trials`
72
+ * reads. The eval scenarios start every suite they gate on, and one the host
73
+ * cannot start surfaces there as `blocked`.
74
+ */
75
+ const EVAL_SUITE_IDS = new Set(
76
+ readdirSync(join(FIXTURES_DIR, 'eval-suites'))
77
+ .filter((f) => f.endsWith('.json'))
78
+ .map((f) => f.slice(0, -'.json'.length)),
79
+ );
80
+
61
81
  describe('v2-advertised-fixtures-exist (RFC 0168 §C.3)', () => {
62
82
  it('a sampled advertised fixture is actually creatable, not just listed', async () => {
63
83
  const doc = await v2Discovery().catch(() => null);
64
84
  if (!doc) return softSkip('blocked', 'v2 discovery unreachable');
65
- const ids = advertisedIds(doc);
66
- if (ids.length === 0) return softSkip('inapplicable', 'the host advertises no fixtures[]');
85
+ const ids = advertisedIds(doc).filter((id) => !EVAL_SUITE_IDS.has(id));
86
+ if (ids.length === 0) return softSkip('inapplicable', 'the host advertises no workflow fixtures[]');
67
87
 
68
88
  // Deterministic sample spread across the sorted list, so a failure is
69
89
  // reproducible and a host cannot pass by luck of ordering.