@openwop/openwop-conformance 2.46.41 → 2.46.42
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,8 @@
|
|
|
1
|
+
## [2.46.42] — 2026-11-03 — The fresh chain pack is exact-pinned (RFC 0253)
|
|
2
|
+
|
|
3
|
+
- **`freshChainPack` pins its node** (`core.noop@1.0.0`). At 2.46.41 it referenced `core.noop` with no version, which `workflow-chain-packs.md` §Exact pins makes a host refuse, so a conforming host failed the chain apply, read-back and conflict legs.
|
|
4
|
+
- **`packContentViolations` checks chain pins**, and a self-test fails an unpinned or ranged node reference.
|
|
5
|
+
|
|
1
6
|
## [2.46.41] — 2026-11-02 — Every terminal skipped ends completed (RFC 0257)
|
|
2
7
|
|
|
3
8
|
- **New scenario `v2-all-terminals-skipped` (RFC 0257).** `0257.shape` (server-free) and five host legs: a trigger-rule skip, a condition skip with its positive control, a replay fork, and a `core.subWorkflow` parent. Each leg gates on its fixture in `fixtures[]`.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@openwop/openwop-conformance",
|
|
3
|
-
"version": "2.46.
|
|
3
|
+
"version": "2.46.42",
|
|
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.
|
|
59
|
+
"@openwop/spec-artifacts": "2.46.42"
|
|
60
60
|
}
|
|
61
61
|
}
|
|
@@ -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.
|
|
5
|
-
"corpusTag": "v2.46.
|
|
4
|
+
"version": "2.46.42",
|
|
5
|
+
"corpusTag": "v2.46.42",
|
|
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": "
|
|
13
|
-
"api/v2/asyncapi.yaml": "
|
|
14
|
-
"api/v2/openapi.yaml": "
|
|
12
|
+
"api/seams-v2.yaml": "3cc08eb5617a000616d002aeccbbf464cb3eb5ebb5ee1c633c4e0a119d7e56ec",
|
|
13
|
+
"api/v2/asyncapi.yaml": "35ff697a0a8ff45407b764f1322c0ade27204b8dbec9791f5ec560ca3fcd75d6",
|
|
14
|
+
"api/v2/openapi.yaml": "ed36faabd190c2a4f966340d2fa219c1891f7fbaebf1a1b2e895b5caf209e56e",
|
|
15
15
|
"api/v2/redocly.yaml": "1e66b60e6118ad11a823bb620678be464d99dfe50a40e3e6f93ec9429b88b34c",
|
|
16
16
|
"schemas/README.md": "276fc1d51eb08e14e9127b9fd27761d7046ee33c12000f3a64a801322db8bf58",
|
|
17
17
|
"schemas/a2a-task-state.schema.json": "75d5049dea8bd873ff0e7546f1c60c8d36c219bec7084264360be54a8be30ae1",
|
|
@@ -203,14 +203,14 @@
|
|
|
203
203
|
"schemas/workspace-file.schema.json": "464de85c2a068243084ee9c1d969bc7cd5d8f7948574e58450d6493c38a0e1e4",
|
|
204
204
|
"spec/v1/alias-detectors.json": "202a443678e592a515e33aad7f6ab679a07d8408809f2d4b0f59d156c84ffc65",
|
|
205
205
|
"spec/v1/capability-declaration-classes.json": "e7729aed5c4b4e1dd02abab0530f14cc95f5d4070fe51fb139e7f5cccefa00c6",
|
|
206
|
-
"spec/v1/core-standard-manifest.json": "
|
|
206
|
+
"spec/v1/core-standard-manifest.json": "affd665ea0bd4be705e910e42193a9de94edc2520c6dcc8dad7ea5aa10a0aea2",
|
|
207
207
|
"spec/v1/deprecations.json": "901fdab0a7212627f1838cbb06ae7b7204f0dff528299e56d3d938deecea27c1",
|
|
208
208
|
"spec/v1/deprecations.schema.json": "3e393c405d2a41b467d8c5e3c468549078df1ce6a6d2588fc488097b95d9b55b",
|
|
209
209
|
"spec/v1/end-of-support.json": "35f0bf3b70fe78b16e2a2fd81a153fc27e703f6c16376c6fe7cdf1f4f2c4e6d4",
|
|
210
210
|
"spec/v1/event-codemap.json": "3da60d884157793a360da532a9fcbbfb5285636db325a74cec94b34622186d97",
|
|
211
211
|
"spec/v1/event-codemap.schema.json": "d05933b2e88103aff51a2f774df97b9bda065e0fc88dbd9b114cc47a32189174",
|
|
212
212
|
"spec/v1/extensions.json": "79a60754aa16cbdbdb604f8e5c00038af535a1690a4d07bd5ff7c38f0256a7bc",
|
|
213
|
-
"spec/v1/gaps.json": "
|
|
213
|
+
"spec/v1/gaps.json": "7fb24588b5526d0d7b6105102029373593d986c2177c5a85dfc8f0c29ce69c07",
|
|
214
214
|
"spec/v1/gaps.schema.json": "8fd83259f556553c9df0f53e7a82ca8c2a4771d471197f69b4e2ae0ceeacfd66",
|
|
215
215
|
"spec/v1/migrations.json": "4c50760be70cb644d02427bcaf5749606700edf4513f423903cf3b1d12f5c300",
|
|
216
216
|
"spec/v1/migrations.schema.json": "886779aa6c22e646db097f5df210adb018a4dd14a7b815465a18c8a7056c8f72",
|
|
@@ -305,9 +305,9 @@
|
|
|
305
305
|
"spec/v2/path-manifest.json": "3720e502614f301efc7556e0bfcbfa7b7ad8a37c579256ba6bca82417a2728f1",
|
|
306
306
|
"spec/v2/peer-dependency-aliases.json": "cbf62f551f9295b0ac7ba6cc0466abb153563354a57b0622f3ec6e6689cba47e",
|
|
307
307
|
"spec/v2/profiles.json": "b382b261c7844798575f7c1b37c934f0da19846016a2337d883d4f5ef6e05479",
|
|
308
|
-
"spec/v2/release.json": "
|
|
308
|
+
"spec/v2/release.json": "fd0be285b05d95e06af11bc6d8c3615c58f0bf8f91a06b0829a9c649a1300875",
|
|
309
309
|
"spec/v2/retention-floors.json": "eaf3722d95c79947af1d4269ef85117e126518c588cfcf1a2b21b97269f51624",
|
|
310
|
-
"spec/v2/surface-baseline.json": "
|
|
310
|
+
"spec/v2/surface-baseline.json": "25d5ab5877a70cfa817c9fa1c1d5bed638b021e07bdf5c1d41a5124d3176c3e9"
|
|
311
311
|
},
|
|
312
|
-
"corpusCommit": "
|
|
312
|
+
"corpusCommit": "a3cc5c1b3896e1bc1c56480ed6460dc7f9070b4c"
|
|
313
313
|
}
|
|
@@ -39,7 +39,11 @@ export function packMatches(served: unknown, artifact: unknown): boolean {
|
|
|
39
39
|
|
|
40
40
|
const ENGINES = { openwop: '>=2.0 <3.0.0' };
|
|
41
41
|
|
|
42
|
-
/**
|
|
42
|
+
/**
|
|
43
|
+
* A fresh one-chain `private.*` chain pack the host has never seen. Its node
|
|
44
|
+
* reference is exact-pinned: `workflow-chain-packs.md` §Exact pins makes a host
|
|
45
|
+
* refuse a chain whose reference carries no version.
|
|
46
|
+
*/
|
|
43
47
|
export function freshChainPack(nonce: string, description: string): Rec {
|
|
44
48
|
const name = `private.conformance.c${nonce}`;
|
|
45
49
|
return {
|
|
@@ -47,7 +51,7 @@ export function freshChainPack(nonce: string, description: string): Rec {
|
|
|
47
51
|
chains: [{
|
|
48
52
|
chainId: `${name}.passthrough`, version: '1.0.0', label: 'Pass through', description,
|
|
49
53
|
parameters: { type: 'object', properties: {} },
|
|
50
|
-
dag: { nodes: [{ id: 'n1', typeId: 'core.noop' }] },
|
|
54
|
+
dag: { nodes: [{ id: 'n1', typeId: 'core.noop@1.0.0' }] },
|
|
51
55
|
}],
|
|
52
56
|
};
|
|
53
57
|
}
|
|
@@ -80,6 +84,14 @@ export function packContentViolations(kind: PackKind, pack: Rec): string[] {
|
|
|
80
84
|
const out: string[] = [];
|
|
81
85
|
if (typeof pack['name'] !== 'string' || !pack['name'].startsWith('private.')) out.push('name outside private.*');
|
|
82
86
|
if ('signing' in pack) out.push('carries signing');
|
|
87
|
+
if (kind === 'workflow-chain-pack') {
|
|
88
|
+
for (const c of Array.isArray(pack['chains']) ? pack['chains'].filter(isRec) : []) {
|
|
89
|
+
const dag = isRec(c['dag']) ? c['dag'] : {};
|
|
90
|
+
for (const n of Array.isArray(dag['nodes']) ? dag['nodes'].filter(isRec) : []) {
|
|
91
|
+
if (typeof n['typeId'] !== 'string' || !/@\d+\.\d+\.\d+$/.test(n['typeId'])) out.push(`${String(c['chainId'])}: node ${String(n['id'])} is not exact-pinned`);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
83
95
|
if (kind === 'agent-pack') {
|
|
84
96
|
if (Array.isArray(pack['nodes']) && pack['nodes'].length > 0) out.push('carries nodes');
|
|
85
97
|
const rt = isRec(pack['runtime']) ? pack['runtime'] : {};
|