@openwop/spec-artifacts 2.46.2 → 2.46.4

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/CORPUS-STAMP.json CHANGED
@@ -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.2",
5
- "corpusTag": "v2.46.2",
4
+ "version": "2.46.4",
5
+ "corpusTag": "v2.46.4",
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": "26eaead22194d03d4d8027eb6b9450ab66c8c15eb1bc77adba2118aa3384d32f",
13
- "api/v2/asyncapi.yaml": "e8e435d575d9ea7312d3dc5e0191f0a9e389e2edc3775975df67b455ff293c4a",
14
- "api/v2/openapi.yaml": "f77e9a4a0f61391341efbc426fa4b4eba215f731cbab0ddde7a229b640d4e6fc",
12
+ "api/seams-v2.yaml": "657ca41ba3259b0e9a1d466e025ec4aeb56cacda1f218bd0f7800f0c3584ec6b",
13
+ "api/v2/asyncapi.yaml": "438b60c9f0d42ddee5973ee135522de8de6dea6f344b929a9c33b5f9f8c18568",
14
+ "api/v2/openapi.yaml": "feecb1ff541e9fcb32731a63d97f0b3748ded7b290ed336b7fff92f28d6fc2ae",
15
15
  "api/v2/redocly.yaml": "1e66b60e6118ad11a823bb620678be464d99dfe50a40e3e6f93ec9429b88b34c",
16
16
  "schemas/README.md": "276fc1d51eb08e14e9127b9fd27761d7046ee33c12000f3a64a801322db8bf58",
17
17
  "schemas/a2a-task-state.schema.json": "75d5049dea8bd873ff0e7546f1c60c8d36c219bec7084264360be54a8be30ae1",
@@ -117,7 +117,7 @@
117
117
  "schemas/v2/artifact.schema.json": "85b9dc284d39b99d2a66fa8cbf47f2dd3d8526d3bd6cc411ad315b372de38975",
118
118
  "schemas/v2/audit-verify-result.schema.json": "14af8e9283510f0a40e48a2059c929ee44e0fc9fa3cc66a95bfbe90b17c48297",
119
119
  "schemas/v2/budget-policy.schema.json": "1de68095db0beb5c7a4be629de26e79f62ebbe748a88d46f36e768edfd1f0d68",
120
- "schemas/v2/capabilities.schema.json": "d859a413ff463ec39acc32a9cb76f2e8c7419e45683d6b7f886861765a9c36c7",
120
+ "schemas/v2/capabilities.schema.json": "ac237b887fa6e3117eddf5568bb7c2a2664f491c140968b060a173e12e79d643",
121
121
  "schemas/v2/certification-bundle.schema.json": "5cfa7fb5247160333e33a58b60d42bcd4e5269d8391d6a112d301e14828892ed",
122
122
  "schemas/v2/channel-presence-payload.schema.json": "fc03df0c20cc12a25f7ee6a47503a4c5931d79fe3d5ff24815e8fd7c1bcb9a87",
123
123
  "schemas/v2/channel-written-payload.schema.json": "ccecff3c71a3275ad8db035ac0e04db25e6f8d23cf091ddbcd5a60d1be1cbb6b",
@@ -133,7 +133,7 @@
133
133
  "schemas/v2/credential-provenance.schema.json": "f86b09e94b1c524dec7d1c6353965665ae8891e9517faef6e742d639c5578c99",
134
134
  "schemas/v2/credential-reference.schema.json": "ea699ce30f58fb2c32d4279158b3f730f70be7b2dc8c3037693a76e66eb3e001",
135
135
  "schemas/v2/debug-bundle.schema.json": "0ec1e0bca9c0a359cc6cf3448e5200a1c3d3d5b1e5efaa6605231477daaf3fee",
136
- "schemas/v2/dispatch-config.schema.json": "5718c1ed7d95672e618bcb1f1da8e38180e144b12151307afc3aba1314dfcef0",
136
+ "schemas/v2/dispatch-config.schema.json": "27cb203d2a5cec90d8eb398569acbd8314ad9b8e231d1acfb8db4aa76f8d8f8b",
137
137
  "schemas/v2/effect-ledger-projection.schema.json": "0d118d385a43921118a76888449c5c3c5618eab1b80914b84a0a1b48d18822c1",
138
138
  "schemas/v2/effect-seam-manifest.schema.json": "197ef9944ab027a50d1b9352f317cbbc12c8ad955fdb14650fb90477052ffef0",
139
139
  "schemas/v2/envelopes/clarification.request.schema.json": "9e39d7b09f0b3ce7902d6aa19ca0eb52867b634efc78a881469c4d44fb3333e7",
@@ -161,7 +161,7 @@
161
161
  "schemas/v2/memory-entry.schema.json": "290576ae84f4fef4cdf975932b87963283b11c50ea3d2654b32cd96aa6537c3d",
162
162
  "schemas/v2/memory-list-options.schema.json": "01ceb7370c4eacd227d2c9b7e1951ee16650abe26a32dc9d6a8e46a07a39093f",
163
163
  "schemas/v2/node-pack-manifest.schema.json": "3eb2db1d84f0b8dbde917686c72c121788a4ce6e42cf13d497a3b68564546d0e",
164
- "schemas/v2/orchestrator-decision.schema.json": "4d4b4c5fe73c22a1f42242b403650206ad58fd981f8fd45795894cebe3a514ae",
164
+ "schemas/v2/orchestrator-decision.schema.json": "503b9b28109d875ec7a1acccb45447312a6b1c7d5f4175a9f43c8338d37bd1b1",
165
165
  "schemas/v2/org-chart-responsibility-view.schema.json": "8a2565e4cdc6737a3946a70799f93642808b92f9c8d56dcdff3a0782053b89a1",
166
166
  "schemas/v2/pack-lockfile.schema.json": "2685417702c105146b780cd99154296a46578fbb10d81c8c713348ee26fea898",
167
167
  "schemas/v2/part.schema.json": "08b75eaec9a0b4a8cedca7bab732dd906b52b0749eaa444ec1ac015aa43519a5",
@@ -208,14 +208,14 @@
208
208
  "schemas/workspace-file.schema.json": "464de85c2a068243084ee9c1d969bc7cd5d8f7948574e58450d6493c38a0e1e4",
209
209
  "spec/v1/alias-detectors.json": "22444c22bb88c568339ef512553f9fc38146e22b566d11ab8608f655d688d19c",
210
210
  "spec/v1/capability-declaration-classes.json": "e7729aed5c4b4e1dd02abab0530f14cc95f5d4070fe51fb139e7f5cccefa00c6",
211
- "spec/v1/core-standard-manifest.json": "ca8ad2e3392b1cc1c1cd6ce6072f8a000c1a8a68ced7c319944297d90f114f87",
211
+ "spec/v1/core-standard-manifest.json": "a716a260a5226f365c4467486c06e0166d677f77210d9f75e9d8576cfcabae82",
212
212
  "spec/v1/deprecations.json": "e723bc11d7272c71789ad1303bb7f21809a8a024abf57594f9d5c35dc199ece9",
213
213
  "spec/v1/deprecations.schema.json": "3e393c405d2a41b467d8c5e3c468549078df1ce6a6d2588fc488097b95d9b55b",
214
214
  "spec/v1/end-of-support.json": "35f0bf3b70fe78b16e2a2fd81a153fc27e703f6c16376c6fe7cdf1f4f2c4e6d4",
215
215
  "spec/v1/event-codemap.json": "3da60d884157793a360da532a9fcbbfb5285636db325a74cec94b34622186d97",
216
216
  "spec/v1/event-codemap.schema.json": "d05933b2e88103aff51a2f774df97b9bda065e0fc88dbd9b114cc47a32189174",
217
217
  "spec/v1/extensions.json": "79a60754aa16cbdbdb604f8e5c00038af535a1690a4d07bd5ff7c38f0256a7bc",
218
- "spec/v1/gaps.json": "2415b9a2152cb526fa7296b82a433d53ce19194a52389d44f43a81539ac26a1c",
218
+ "spec/v1/gaps.json": "0a9d1b046391d3789a53dee8a3aba8dcc50037b87a5fad8fd5e8a051176c12ad",
219
219
  "spec/v1/gaps.schema.json": "8fd83259f556553c9df0f53e7a82ca8c2a4771d471197f69b4e2ae0ceeacfd66",
220
220
  "spec/v1/migrations.json": "4c50760be70cb644d02427bcaf5749606700edf4513f423903cf3b1d12f5c300",
221
221
  "spec/v1/migrations.schema.json": "886779aa6c22e646db097f5df210adb018a4dd14a7b815465a18c8a7056c8f72",
@@ -229,13 +229,13 @@
229
229
  "spec/v2/core/conversation.md": "8d6abedf6af408a74577753bfca24719d318e2632e10b45ff5d63bdcf31a8aaa",
230
230
  "spec/v2/core/errors.md": "e48838701b86bbfe0ffee77b18a8ffc4e5f04724b4318507d9771da653f8da0f",
231
231
  "spec/v2/core/events.md": "370621629c2439747f2e4ddab4780eea4345354f79e5098739d66823873f3105",
232
- "spec/v2/core/execution.md": "8a0c9db1bbfb97c008ab9328b7333c1cc3318196e78bfbefb49e781bdf4f9d44",
232
+ "spec/v2/core/execution.md": "4218dbb397534940f83ca5d46561f02bf8f3fdf68d2ae7fefe7f2eb2ed771103",
233
233
  "spec/v2/core/form-content-packs.md": "02931227899676fd4581a27017be2a6c4953904717be9b81c29d12f87ab3917d",
234
234
  "spec/v2/core/headers.md": "f69fe81e4a3ad21879bb85948660c16860eb05bf152928c31aa4898f6d7d1887",
235
235
  "spec/v2/core/host-services.md": "168a40935a03867ee82461b5d83d05578be25ee3e5af4eb080587b891231e242",
236
236
  "spec/v2/core/i18n.md": "882904b7d59f992ab1e5f7346167161a54cf665b8fee47e64a3862cf9133a580",
237
237
  "spec/v2/core/idempotency.md": "adbd317a6ebb57c2759c076297b31f67def9e391576bccd0bbea787b13e85872",
238
- "spec/v2/core/identity.md": "02656ffa413b5546342b8580ae928a74e621460746df74d7db50ff4df41d2310",
238
+ "spec/v2/core/identity.md": "d0e3d388484507dd6260601ebf8dd1447b0b0f26ce2fe76c8a5d49e61387cffd",
239
239
  "spec/v2/core/interop.md": "6ec8259117bdb387b9323ca22c707b3b8571c00034e461c4ce79f4070c4d6b4a",
240
240
  "spec/v2/core/interrupt.md": "10f15dfe30baa0fc748aea0a067f9b271bea316fde6b598d78f77edc296f698a",
241
241
  "spec/v2/core/node-pack-runtimes.md": "e1088cb69b8c3c67256c494063328916c2980ab1aa97a7063de25bab82fdb1e5",
@@ -254,7 +254,7 @@
254
254
  "spec/v2/core/workflow-chain-packs.md": "fdce7a8477e269950a2bac05ee6eddbd66eb0b670b464d00054f7196ec05d29c",
255
255
  "spec/v2/corrections.json": "3a8d93e33865b692d26a3b6bfd3819766e206b2e0c2a69669baa4bf833d05a49",
256
256
  "spec/v2/corrections.schema.json": "46bbffb954d13bd9995aebc912ceeb2544f7064331abf25fd6ab85c81a5cec94",
257
- "spec/v2/declaration.json": "6fa19c3a68df5a951f9dabea13afbd4ee3b288a110002461f373b191b3eca99b",
257
+ "spec/v2/declaration.json": "773af65df59ce7bc2b3ab17093e23ac8083a8faaeff643302fe30198deae933b",
258
258
  "spec/v2/declaration.schema.json": "ef951633e4070899f64828f5cf1b5f4870270a0360f81dbb49b5b4d6cd407550",
259
259
  "spec/v2/eos-override.json": "4c72d2f6a658943b01c1de1643cf294642091933af7832f38ee5495df684cb2d",
260
260
  "spec/v2/errors.json": "1f0e29455edbd22e28f67f221766209c3c55ac4987beb77993b5702dd7cae131",
@@ -281,7 +281,7 @@
281
281
  "spec/v2/ext/sandbox-runtime-notes/README.md": "0d1290fb1e20b2e35c0b15051541ab6546e4e2a6f693b4f912cb3f7d6a65e92c",
282
282
  "spec/v2/ext/webResearch/README.md": "b675e6f6646128d781b661f754c2393eed86e5935d16c3a22df582a5ce025b9b",
283
283
  "spec/v2/facets/a2a.schema.json": "b68bf5e29e455e46c2ad7cfcccf5963730ec2310ff9db81884550d8df30fd6ef",
284
- "spec/v2/facets/agents.schema.json": "5e4d76d298fb1371b0e47a3b6fcf99ef65ae139d619d25d021d334c42583c4f1",
284
+ "spec/v2/facets/agents.schema.json": "3be9326f7db9c7b9b4268aec731c0c2b087eba33c9bb31669ec75a18961bc40e",
285
285
  "spec/v2/facets/aiProviders.schema.json": "4eb911c2403b8f618325194855a1326680fbda2549dfbfe86a70dd2743f8fb12",
286
286
  "spec/v2/facets/auditLogIntegrity.schema.json": "9a7f81320c8f940c6f4129bc7dd895a4063231c5458a717a08c2cbf9bb886c46",
287
287
  "spec/v2/facets/auth.schema.json": "7d98bc81a0f7d307460d039eebfebd21388091bfe1d538762583940f94c0bd2a",
@@ -313,9 +313,9 @@
313
313
  "spec/v2/path-manifest.json": "7b5679a4dad98c80d855361d88a98c8a4e045af15e310862a05b285b815dc9fc",
314
314
  "spec/v2/peer-dependency-aliases.json": "d10299280abee08258502925bc327293ee413e0108cd6e6ec75ff6110653308d",
315
315
  "spec/v2/profiles.json": "b382b261c7844798575f7c1b37c934f0da19846016a2337d883d4f5ef6e05479",
316
- "spec/v2/release.json": "20e2ffa6bf1e1b10a4e0404a1f27fabdf9bc502ea705118b2ae0a9a0aaa60f40",
316
+ "spec/v2/release.json": "0b8a78d84b40c96afe63c4306283872ffe76e49afd79155e805dbd25985a9d25",
317
317
  "spec/v2/retention-floors.json": "eaf3722d95c79947af1d4269ef85117e126518c588cfcf1a2b21b97269f51624",
318
- "spec/v2/surface-baseline.json": "473b133e092e3107893e23f5d7e8d42d117ad894e4d3db5042a780431302ee84"
318
+ "spec/v2/surface-baseline.json": "40b2b2ee581c614c1d5adf5a11d6a76a8188d5ce4518aca59a2b7221b35b3e61"
319
319
  },
320
- "corpusCommit": "24368a14552d28c785adeea7b72647e8f6ae664e"
320
+ "corpusCommit": "c59d856a6bf3124d5e1fe97e51ba47ad54c5d502"
321
321
  }
package/api/seams-v2.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  openapi: 3.1.0
2
2
  info:
3
3
  title: OpenWOP conformance seams profile (openwop-conformance-seams-v2)
4
- version: 2.46.2
4
+ version: 2.46.4
5
5
  description: 'The OpenWOP conformance seams profile (`openwop-conformance-seams-v2`): test-only operations in their own
6
6
  path space, `/conformance/seams/…`. The profile is versioned and validated against the canonical v2 schemas with no tolerance
7
7
  path. It is not a capability: a host advertises the profile, never a `testSeams` flag.
@@ -1,7 +1,7 @@
1
1
  asyncapi: 3.1.0
2
2
  info:
3
3
  title: OpenWOP v2 event streams
4
- version: 2.46.2
4
+ version: 2.46.4
5
5
  description: 'OpenWOP v2 event streams over SSE. The run-events channel''s address is the OpenAPI path key, and the server
6
6
  pathname is empty (bare origin). `streamMode` is a stream mode from the closed set, or a comma-separated combination of
7
7
  them; `values` never combines. `hostEvents` has a default address, `/host/events`; a host MAY declare another under `heartbeat.deliveryChannel`.
@@ -1,7 +1,7 @@
1
1
  openapi: 3.1.0
2
2
  info:
3
3
  title: OpenWOP v2 API
4
- version: 2.46.2
4
+ version: 2.46.4
5
5
  summary: REST surface for declaring, executing, suspending, resuming, and observing multi-step workflows.
6
6
  description: 'The OpenWOP v2 REST API. Paths are unversioned and served at the bare origin; a client selects a version with
7
7
  the `OpenWOP-Version` header from the host''s `protocolVersions[]`. Conformance seams and test-mode operations are not
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openwop/spec-artifacts",
3
- "version": "2.46.2",
3
+ "version": "2.46.4",
4
4
  "description": "The OpenWOP machine-readable contract: api/ (OpenAPI, AsyncAPI, the seams profile), schemas/ (v1 and v2 JSON Schemas), the spec/v1 and spec/v2 registries (errors, event codemap, declaration, deprecations, migrations, gaps) and CORPUS-STAMP.json — published from the openwop/openwop corpus tag; the peer dependency @openwop/openwop-conformance digest-checks at start (RFC 0168 §D.2).",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
@@ -2612,7 +2612,7 @@
2612
2612
  "pattern": "^x-host-[a-z][a-z0-9-]*-[a-z][a-z0-9-]*$"
2613
2613
  }
2614
2614
  ],
2615
- "description": "RFC 0044 — the literal `interrupt.kind` the host emits when escalating a below-floor confidence decision per RFC 0039 §A. `clarification` and `approval` are the canonical values matching the clarify-OR-approval choice in RFC 0039 §A; vendor-extension kinds use the canonical host-extension namespace `^x-host-<host>-<kind>$` per `spec/v1/host-extensions.md` §\"Canonical prefixes\". When advertised, hosts MUST emit an interrupt of the advertised kind on every confidence-escalation event AND the host's downstream `interrupt.md` mapping determines the `waiting-*` terminal status. Absent: conformance assumes the host uses one of the two canonical kinds (the relaxed assertion accepts either). Hosts using vendor kinds MUST also publish a non-normative kind-mapping document per RFC 0044 §C."
2615
+ "description": "RFC 0044 — the literal `interrupt.kind` the host emits when escalating a below-floor confidence decision per RFC 0039 §A. `clarification` and `approval` are the canonical values matching the clarify-OR-approval choice in RFC 0039 §A; at v2 the value MUST be one of them (`execution.md` §multiAgent, level 2). The v2 interrupt `kind` is closed, so an `x-host-` value promises an interrupt the payload schema rejects; the pattern remains only so a v1-era document validates, and is removed at 3.0. When advertised, hosts MUST emit an interrupt of the advertised kind on every confidence-escalation event AND the host's downstream `interrupt.md` mapping determines the `waiting-*` terminal status. Absent: conformance assumes the host uses one of the two canonical kinds (the relaxed assertion accepts either)."
2616
2616
  },
2617
2617
  "crossChildMemoryConcurrency": {
2618
2618
  "type": "string",
@@ -2624,7 +2624,7 @@
2624
2624
  },
2625
2625
  "crossHostCausation": {
2626
2626
  "type": "object",
2627
- "description": "RFC 0040 §D — Phase 3 cross-host causation linking. When advertised, the host honors the cross-host `causationId` extension (a `causationHostId` field on event payloads pointing at the originating host), W3C `traceparent` propagation across MCP + A2A composition boundaries, and (when `ancestryEndpointSupported: true`) the `GET /runs/{runId}/ancestry` cross-host parent-chain endpoint. Hosts advertising `version: 3` MUST advertise this sub-block with a stable `hostId`.",
2627
+ "description": "RFC 0040 §D — Phase 3 cross-host causation linking. When advertised, the host honors the cross-host `causationId` extension (a `causationHostId` field on event payloads pointing at the originating host), W3C `traceparent` propagation across MCP + A2A composition boundaries, and (when `ancestryEndpointSupported: true`) the `GET /runs/{runId}/ancestry` cross-host parent-chain endpoint. Hosts advertising `version` 3 or higher MUST advertise this sub-block with a non-empty, stable `hostId`.",
2628
2628
  "additionalProperties": false,
2629
2629
  "properties": {
2630
2630
  "hostId": {
@@ -2640,7 +2640,7 @@
2640
2640
  },
2641
2641
  "replayDeterminism": {
2642
2642
  "type": "object",
2643
- "description": "RFC 0041 §D — Phase 4 replay determinism. When advertised, the host honors the LLM cache-key recipe in `replay.md` §\"LLM cache-key recipe\" as NORMATIVE (graduated from informative for version >= 4), emits `replay.divergedAtRefusal` events + fails with `replay_diverged_at_refusal` on refusal-divergence (RFC 0041 §B), and guarantees observable-output-sequence determinism per RFC 0041 §C. Hosts advertising `version: 4` MUST advertise this sub-block.",
2643
+ "description": "RFC 0041 §D — Phase 4 replay determinism. When advertised, the host honors the LLM cache-key recipe in `replay.md` §\"LLM cache-key recipe\" as NORMATIVE (graduated from informative for version >= 4), emits `replay.divergedAtRefusal` events + fails with `replay_diverged_at_refusal` on refusal-divergence (RFC 0041 §B), and guarantees observable-output-sequence determinism per RFC 0041 §C. Hosts advertising `version` 4 or higher MUST advertise this sub-block.",
2644
2644
  "additionalProperties": false,
2645
2645
  "properties": {
2646
2646
  "llmCacheKeyRecipe": {
@@ -2657,7 +2657,7 @@
2657
2657
  },
2658
2658
  "refusalDivergenceEmission": {
2659
2659
  "type": "boolean",
2660
- "description": "Host emits `replay.divergedAtRefusal` events + fails replay with `error.code: replay_diverged_at_refusal` per RFC 0041 §B. Hosts advertising `version: 4` MUST set this to `true`."
2660
+ "description": "Host emits `replay.divergedAtRefusal` events + fails replay with `error.code: replay_diverged_at_refusal` per RFC 0041 §B. Hosts advertising `version` 4 or higher MUST set this to `true`."
2661
2661
  }
2662
2662
  }
2663
2663
  },
@@ -3400,6 +3400,54 @@
3400
3400
  "default": false,
3401
3401
  "description": "RFC 0022. When `true`, the host honors `inputMapping` / `outputMapping` / `perWorkerInputMappings` / `perWorkerOutputMappings` on `DispatchConfig` — building child inputs from parent variables before dispatch and harvesting child variables into parent variables on completion. Implies (but does NOT require) `agents.dispatch: true`. Hosts that set `agents.dispatch: true` but omit / `false` this flag MUST refuse workflows that carry non-empty mapping fields at registration with `validation_error` + `details.requiredCapability: 'agents.dispatchMapping'`."
3402
3402
  },
3403
+ "fanOut": {
3404
+ "type": "object",
3405
+ "additionalProperties": false,
3406
+ "required": [
3407
+ "joinModes",
3408
+ "onChildFailureModes"
3409
+ ],
3410
+ "description": "RFC 0243. OPTIONAL. Present, the host accepts `fanOutPolicy: 'parallel'` on a `core.dispatch` node (`dispatch-config.schema.json`) and joins its children per `joinPolicy`. Absent, it accepts `sequential` and `reject` only. A host MUST NOT advertise `fanOut` without `agents.dispatch: true`. `joinModes` lists the `joinPolicy.mode` values it implements and `onChildFailureModes` the `joinPolicy.onChildFailure` values. `maxFanOut` is its breadth ceiling: the effective concurrency is `min(config.maxConcurrency ?? ∞, maxFanOut ?? ∞)`, children beyond it are dispatched in waves and none is dropped, and absent means no stated ceiling. `perItemInput: true` means it honors `NextWorkerDecision.nextWorkerInputs` (`orchestrator-decision.schema.json`); without it, a non-empty `nextWorkerInputs` MUST fail the dispatch node with `validation_error` and dispatch no child. A host MUST refuse a workflow whose `core.dispatch` node pins what this facet does not admit (`parallel` with `fanOut` absent, a `joinPolicy.mode` outside `joinModes`, a `joinPolicy.onChildFailure` outside `onChildFailureModes`) with `validation_error`, and `details.requiredCapability` names the seat it lacks: `agents.fanOut`, `agents.fanOut.joinModes` or `agents.fanOut.onChildFailureModes`. It MUST refuse when it loads the workflow. If such a workflow is nonetheless readable (`getWorkflow` returns it), `createRun` naming it MUST return `400 validation_error` with that `details.requiredCapability` and create no run.",
3411
+ "properties": {
3412
+ "joinModes": {
3413
+ "type": "array",
3414
+ "minItems": 1,
3415
+ "uniqueItems": true,
3416
+ "items": {
3417
+ "enum": [
3418
+ "wait-all",
3419
+ "quorum",
3420
+ "first",
3421
+ "race"
3422
+ ]
3423
+ },
3424
+ "description": "The `joinPolicy.mode` values the host implements."
3425
+ },
3426
+ "onChildFailureModes": {
3427
+ "type": "array",
3428
+ "minItems": 1,
3429
+ "uniqueItems": true,
3430
+ "items": {
3431
+ "enum": [
3432
+ "collect",
3433
+ "fail-fast",
3434
+ "absorb"
3435
+ ]
3436
+ },
3437
+ "description": "The `joinPolicy.onChildFailure` values the host implements."
3438
+ },
3439
+ "maxFanOut": {
3440
+ "type": "integer",
3441
+ "minimum": 1,
3442
+ "description": "The host's ceiling on children in flight at once for one dispatch node."
3443
+ },
3444
+ "perItemInput": {
3445
+ "type": "boolean",
3446
+ "default": false,
3447
+ "description": "When `true`, the host honors `NextWorkerDecision.nextWorkerInputs`."
3448
+ }
3449
+ }
3450
+ },
3403
3451
  "reasoning": {
3404
3452
  "type": "object",
3405
3453
  "description": "Reasoning-event verbosity configuration.",
@@ -32,7 +32,7 @@
32
32
  "parallel"
33
33
  ],
34
34
  "default": "sequential",
35
- "description": "Behavior when `decision.kind === 'next-worker'` and `nextWorkerIds.length > 1`. `'sequential'` (default) dispatches each in array order, blocking on each child terminal before starting the next; the dispatch node's output reports the LAST child's `childRunId`/`childStatus` (intermediate child-run identifiers surface in the run's event log via standard `node.*` events). `'reject'` fails the dispatch with a structured `'fan_out_unsupported'` error envelope per `error-envelope.md`. `'parallel'` (RFC 0118) dispatches ALL `nextWorkerIds[i]` as child runs concurrently (bounded by `maxConcurrency`) and joins on their terminals per `joinPolicy`; it REQUIRES the host to advertise `capabilities.dispatch.fanOutSupported: true` — a host that does not MUST surface a `validation_error` at `POST /v1/workflows`."
35
+ "description": "Behavior when `decision.kind === 'next-worker'` and `nextWorkerIds.length > 1`. `'sequential'` (default) dispatches each in array order, blocking on each child terminal before starting the next; the dispatch node's output reports the LAST child's `childRunId`/`childStatus` (intermediate child-run identifiers surface in the run's event log via standard `node.*` events). `'reject'` fails the dispatch with a structured `'fan_out_unsupported'` error envelope per `error-envelope.md`. `'parallel'` (RFC 0118) dispatches ALL `nextWorkerIds[i]` as child runs concurrently (bounded by `maxConcurrency`) and joins on their terminals per `joinPolicy`; it REQUIRES the host to advertise `agents.fanOut` (RFC 0243), and a host that does not MUST refuse a `core.dispatch` node pinning it with `validation_error` when the workflow is loaded, as that facet's description states."
36
36
  },
37
37
  "joinPolicy": {
38
38
  "type": "object",
@@ -71,7 +71,7 @@
71
71
  "maxConcurrency": {
72
72
  "type": "integer",
73
73
  "minimum": 1,
74
- "description": "RFC 0118. Maximum number of children dispatched concurrently under `fanOutPolicy: 'parallel'`. When `nextWorkerIds.length` exceeds this, the host dispatches in waves of at most `maxConcurrency`, starting a queued child as each in-flight child terminates (the host MUST NOT silently drop children above the ceiling). Absent → host-defined effective concurrency (a host MAY cap to protect itself and MUST advertise that cap as `capabilities.dispatch.maxFanOut`). The EFFECTIVE concurrency is `min(maxConcurrency ?? ∞, capabilities.dispatch.maxFanOut ?? ∞)`. Does not change join semantics — `joinPolicy` evaluates over the full `nextWorkerIds` set. Meaningful only under `fanOutPolicy: 'parallel'`."
74
+ "description": "RFC 0118. Maximum number of children dispatched concurrently under `fanOutPolicy: 'parallel'`. When `nextWorkerIds.length` exceeds this, the host dispatches in waves of at most `maxConcurrency`, starting a queued child as each in-flight child terminates (the host MUST NOT silently drop children above the ceiling). Absent → host-defined effective concurrency (a host MAY cap to protect itself; a host advertises it as `agents.fanOut.maxFanOut`). The EFFECTIVE concurrency is `min(maxConcurrency ?? ∞, the host's cap ?? ∞)`. Does not change join semantics — `joinPolicy` evaluates over the full `nextWorkerIds` set. Meaningful only under `fanOutPolicy: 'parallel'`."
75
75
  },
76
76
  "iterationCap": {
77
77
  "type": "integer",
@@ -142,6 +142,5 @@
142
142
  "onChildFailure": "fail-fast"
143
143
  }
144
144
  }
145
- ],
146
- "x-openwop-seeded-from": "v1"
145
+ ]
147
146
  }
@@ -36,7 +36,7 @@
36
36
  "type": "object",
37
37
  "additionalProperties": true
38
38
  },
39
- "description": "RFC 0126 (data-parallel fan-out). OPTIONAL, index-aligned with `nextWorkerIds`: `nextWorkerInputs[i]` is a per-child input object (child input variable names → values) projected into the child dispatched for `nextWorkerIds[i]`, over the RFC 0022 `inputMapping`/`perWorkerInputMappings` projection (per-item value WINS on key collision). Enables fanning ONE `childWorkflowId` over N runtime items with distinct inputs (the map-over-collection pattern). When present, `nextWorkerInputs.length` MUST equal `nextWorkerIds.length` (a host MUST fail the dispatch node with `validation_error` and dispatch NO child otherwise — length is not JSON-Schema-enforceable, so this is a runtime MUST). Gated on `capabilities.dispatch.perItemInput`: a host NOT advertising it, upon receiving a non-empty `nextWorkerInputs`, MUST fail closed with `validation_error` and MUST NOT silently drop-and-dispatch N identical children (the correctness/spend hazard this closes). Replay-safe: rides the recorded `runOrchestrator.decided` event, re-read verbatim on `:fork`, never recomputed (frozen at decision time). A `sensitive`/secret per-item value MUST NOT appear here in plaintext (use the secret channel). See `node-packs.md` §core.dispatch."
39
+ "description": "RFC 0126 (data-parallel fan-out). OPTIONAL, index-aligned with `nextWorkerIds`: `nextWorkerInputs[i]` is a per-child input object (child input variable names → values) projected into the child dispatched for `nextWorkerIds[i]`, over the RFC 0022 `inputMapping`/`perWorkerInputMappings` projection (per-item value WINS on key collision). Enables fanning ONE `childWorkflowId` over N runtime items with distinct inputs (the map-over-collection pattern). When present, `nextWorkerInputs.length` MUST equal `nextWorkerIds.length` (a host MUST fail the dispatch node with `validation_error` and dispatch NO child otherwise — length is not JSON-Schema-enforceable, so this is a runtime MUST). Gated on `agents.fanOut.perItemInput` (RFC 0243): a host that does not advertise it as `true`, upon receiving a non-empty `nextWorkerInputs`, MUST fail closed with `validation_error` and MUST NOT silently drop-and-dispatch N identical children (the correctness/spend hazard this closes). Replay-safe: rides the recorded `runOrchestrator.decided` event, re-read verbatim on `:fork`, never recomputed (frozen at decision time). A `sensitive`/secret per-item value MUST NOT appear here in plaintext (use the secret channel). See `node-packs.md` §core.dispatch."
40
40
  },
41
41
  "confidence": {
42
42
  "type": "number",
@@ -4,7 +4,7 @@
4
4
  "provenance": {
5
5
  "suite": {
6
6
  "package": "@openwop/openwop-conformance",
7
- "version": "2.46.2"
7
+ "version": "2.46.4"
8
8
  },
9
9
  "note": "Derived from the corpus at generation time. Regenerate with --write; verify with --check."
10
10
  },
@@ -426,5 +426,5 @@
426
426
  "$id": "https://openwop.dev/spec/v1/workspace-file.schema.json"
427
427
  }
428
428
  ],
429
- "digest": "b94248e490ce5281b9512b6f52f4a069c7f23f405eb4fd5d2befe2dcbe4d7baa"
429
+ "digest": "381065a72c5df2e4b22596c653259bf880ed2716be96d641c12543570ef8234c"
430
430
  }
package/spec/v1/gaps.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "./gaps.schema.json",
3
3
  "version": 1,
4
- "updated": "2026-10-12",
4
+ "updated": "2026-10-13",
5
5
  "witnessClasses": [
6
6
  "witnessable-unaided",
7
7
  "witnessable-gated",
@@ -14496,6 +14496,40 @@
14496
14496
  }
14497
14497
  ]
14498
14498
  },
14499
+ {
14500
+ "id": "openwop.gap.0243.1",
14501
+ "rfc": "0243",
14502
+ "local": "G1",
14503
+ "section": "§A.2, §Conformance",
14504
+ "surface": "No host seeds `conformance-dispatch-fanout-race`, so the `createRun` refusal has no witness; every host records the leg `inapplicable`.",
14505
+ "witness": "unclassified",
14506
+ "requirementId": null,
14507
+ "disposition": "transferred",
14508
+ "target": "TODO.md",
14509
+ "sources": [
14510
+ {
14511
+ "file": "RFCS/registers/0243-dispatch-fan-out-seat.gaps.md",
14512
+ "token": "G1"
14513
+ }
14514
+ ]
14515
+ },
14516
+ {
14517
+ "id": "openwop.gap.0243.2",
14518
+ "rfc": "0243",
14519
+ "local": "G2",
14520
+ "section": "§A.3, §A.4",
14521
+ "surface": "No fixture drives a live parallel fan-out or a supervisor emitting `nextWorkerInputs`, so `maxFanOut` waves and the `perItemInput` refusal have no v2 leg.",
14522
+ "witness": "unclassified",
14523
+ "requirementId": null,
14524
+ "disposition": "externally-gated",
14525
+ "target": "host-advertises-agents-fanOut",
14526
+ "sources": [
14527
+ {
14528
+ "file": "RFCS/registers/0243-dispatch-fan-out-seat.gaps.md",
14529
+ "token": "G2"
14530
+ }
14531
+ ]
14532
+ },
14499
14533
  {
14500
14534
  "id": "openwop.gap.spec.a2a-integration.g1",
14501
14535
  "rfc": "0152",
@@ -58,7 +58,7 @@ At level 2:
58
58
  - The host MUST serialize sibling children's writes to the shared scope per parent run. A host advertising `crossChildMemoryConcurrency: "advisory"` is exempt, and SHOULD document last-write-wins.
59
59
  - The host MUST persist memory snapshots by log index: before `fromSeq`, a fork's memory reads MUST return the source run's memory as of `fromSeq`, or the fork is refused ([replay.md](replay.md)).
60
60
 
61
- At level 3, with `crossHostCausation` advertised:
61
+ At level 3, which requires `crossHostCausation`:
62
62
 
63
63
  - An event whose `causationId` names an event on another host MUST carry `causationHostId`, equal to that host's `crossHostCausation.hostId`; a same-host one MUST NOT.
64
64
  - The host MUST propagate the run's trace context into every outbound MCP request and A2A message, and adopt an inbound one, per [interop.md](interop.md).
@@ -85,7 +85,7 @@ At level 6, with `verifier` advertised:
85
85
 
86
86
  | Facets | Records |
87
87
  | --- | --- |
88
- | `profile`, `modelClasses`, `orchestratorPattern`, `orchestrator`, `dispatch`, `dispatchMapping`, `reasoning`, `subRunAttestation` | `dispatch-config` |
88
+ | `profile`, `modelClasses`, `orchestratorPattern`, `orchestrator`, `dispatch`, `dispatchMapping`, `fanOut`, `reasoning`, `subRunAttestation` | `dispatch-config` |
89
89
  | `manifestRuntime`, `liveRuntime` | `agent-manifest`, `agent-inventory-response` |
90
90
  | `memoryBackends`, `memoryConsolidation`, `commitments` | `memory-entry` ([host-services.md](host-services.md)) |
91
91
  | `evalSuite` | `agent-eval-suite`, `eval-summary` |
@@ -160,7 +160,7 @@ The record and both `SubjectRef`s are closed; `a`, `b`, `keyClass`, `issuer`, `t
160
160
 
161
161
  Deactivation sets `deniedAt`; the SAML decision path MUST consult it (the leaver contract). The link is a reference, not a merge: nothing rewrites a subject already stamped on a run.
162
162
 
163
- Advertising both `saml` and `scim` lanes implies the link contract. The `auth.subjectLinkKey` facet (`opaque-idp | configured-immutable`) names the key class the host forms links under.
163
+ Advertising both `saml` and `scim` lanes implies the link contract: the host MUST then advertise `auth.subjectLinkKey` (`opaque-idp | configured-immutable`), and MUST NOT otherwise.
164
164
 
165
165
  ## 4. Resume tokens
166
166
 
@@ -750,6 +750,7 @@
750
750
  "roster",
751
751
  "orgChart",
752
752
  "dispatchMapping",
753
+ "fanOut",
753
754
  "reasoning",
754
755
  "subRunAttestation",
755
756
  "proposals",
@@ -256,6 +256,54 @@
256
256
  "default": false,
257
257
  "description": "RFC 0022. When `true`, the host honors `inputMapping` / `outputMapping` / `perWorkerInputMappings` / `perWorkerOutputMappings` on `DispatchConfig` — building child inputs from parent variables before dispatch and harvesting child variables into parent variables on completion. Implies (but does NOT require) `agents.dispatch: true`. Hosts that set `agents.dispatch: true` but omit / `false` this flag MUST refuse workflows that carry non-empty mapping fields at registration with `validation_error` + `details.requiredCapability: 'agents.dispatchMapping'`."
258
258
  },
259
+ "fanOut": {
260
+ "type": "object",
261
+ "additionalProperties": false,
262
+ "required": [
263
+ "joinModes",
264
+ "onChildFailureModes"
265
+ ],
266
+ "description": "RFC 0243. OPTIONAL. Present, the host accepts `fanOutPolicy: 'parallel'` on a `core.dispatch` node (`dispatch-config.schema.json`) and joins its children per `joinPolicy`. Absent, it accepts `sequential` and `reject` only. A host MUST NOT advertise `fanOut` without `agents.dispatch: true`. `joinModes` lists the `joinPolicy.mode` values it implements and `onChildFailureModes` the `joinPolicy.onChildFailure` values. `maxFanOut` is its breadth ceiling: the effective concurrency is `min(config.maxConcurrency ?? ∞, maxFanOut ?? ∞)`, children beyond it are dispatched in waves and none is dropped, and absent means no stated ceiling. `perItemInput: true` means it honors `NextWorkerDecision.nextWorkerInputs` (`orchestrator-decision.schema.json`); without it, a non-empty `nextWorkerInputs` MUST fail the dispatch node with `validation_error` and dispatch no child. A host MUST refuse a workflow whose `core.dispatch` node pins what this facet does not admit (`parallel` with `fanOut` absent, a `joinPolicy.mode` outside `joinModes`, a `joinPolicy.onChildFailure` outside `onChildFailureModes`) with `validation_error`, and `details.requiredCapability` names the seat it lacks: `agents.fanOut`, `agents.fanOut.joinModes` or `agents.fanOut.onChildFailureModes`. It MUST refuse when it loads the workflow. If such a workflow is nonetheless readable (`getWorkflow` returns it), `createRun` naming it MUST return `400 validation_error` with that `details.requiredCapability` and create no run.",
267
+ "properties": {
268
+ "joinModes": {
269
+ "type": "array",
270
+ "minItems": 1,
271
+ "uniqueItems": true,
272
+ "items": {
273
+ "enum": [
274
+ "wait-all",
275
+ "quorum",
276
+ "first",
277
+ "race"
278
+ ]
279
+ },
280
+ "description": "The `joinPolicy.mode` values the host implements."
281
+ },
282
+ "onChildFailureModes": {
283
+ "type": "array",
284
+ "minItems": 1,
285
+ "uniqueItems": true,
286
+ "items": {
287
+ "enum": [
288
+ "collect",
289
+ "fail-fast",
290
+ "absorb"
291
+ ]
292
+ },
293
+ "description": "The `joinPolicy.onChildFailure` values the host implements."
294
+ },
295
+ "maxFanOut": {
296
+ "type": "integer",
297
+ "minimum": 1,
298
+ "description": "The host's ceiling on children in flight at once for one dispatch node."
299
+ },
300
+ "perItemInput": {
301
+ "type": "boolean",
302
+ "default": false,
303
+ "description": "When `true`, the host honors `NextWorkerDecision.nextWorkerInputs`."
304
+ }
305
+ }
306
+ },
259
307
  "reasoning": {
260
308
  "type": "object",
261
309
  "description": "Reasoning-event verbosity configuration.",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "$comment": "RFC 0172 §D.1 — the one release identity the v2 artifacts derive from. `version` is the next corpus tag `v<version>` (the publish workflow's coordinated-release tag pattern `v*`; RFC 0172's `openwop/v2.<minor>.<patch>` spelling is amended to this at its flip). api/v2/*.yaml info.version, the suite's 2.x version and @openwop/spec-artifacts read it. Bumped by the release PR that cuts the tag, never by hand elsewhere.",
3
- "version": "2.46.2",
4
- "corpusTag": "v2.46.2",
3
+ "version": "2.46.4",
4
+ "corpusTag": "v2.46.4",
5
5
  "updated": "2026-10-12"
6
6
  }
@@ -4,7 +4,7 @@
4
4
  "schemas/v2/**/*.json",
5
5
  "spec/v2/path-manifest.json"
6
6
  ],
7
- "release": "2.46.2",
7
+ "release": "2.46.4",
8
8
  "kinds": {
9
9
  "union": [
10
10
  "channel",
@@ -18,7 +18,7 @@
18
18
  "type"
19
19
  ]
20
20
  },
21
- "count": 8761,
21
+ "count": 8781,
22
22
  "surfaces": [
23
23
  "schemas/v2/a2a-task-state.schema.json#/contextId|type|string",
24
24
  "schemas/v2/a2a-task-state.schema.json#/interruptKind|enum-member|\"approval\"",
@@ -943,6 +943,25 @@
943
943
  "schemas/v2/capabilities.schema.json#/agents/evalSuite|property|maxTasksPerSuite",
944
944
  "schemas/v2/capabilities.schema.json#/agents/evalSuite|property|modes",
945
945
  "schemas/v2/capabilities.schema.json#/agents/evalSuite|type|object",
946
+ "schemas/v2/capabilities.schema.json#/agents/fanOut/joinModes/[]|enum-member|\"first\"",
947
+ "schemas/v2/capabilities.schema.json#/agents/fanOut/joinModes/[]|enum-member|\"quorum\"",
948
+ "schemas/v2/capabilities.schema.json#/agents/fanOut/joinModes/[]|enum-member|\"race\"",
949
+ "schemas/v2/capabilities.schema.json#/agents/fanOut/joinModes/[]|enum-member|\"wait-all\"",
950
+ "schemas/v2/capabilities.schema.json#/agents/fanOut/joinModes|type|array",
951
+ "schemas/v2/capabilities.schema.json#/agents/fanOut/maxFanOut|type|integer",
952
+ "schemas/v2/capabilities.schema.json#/agents/fanOut/onChildFailureModes/[]|enum-member|\"absorb\"",
953
+ "schemas/v2/capabilities.schema.json#/agents/fanOut/onChildFailureModes/[]|enum-member|\"collect\"",
954
+ "schemas/v2/capabilities.schema.json#/agents/fanOut/onChildFailureModes/[]|enum-member|\"fail-fast\"",
955
+ "schemas/v2/capabilities.schema.json#/agents/fanOut/onChildFailureModes|type|array",
956
+ "schemas/v2/capabilities.schema.json#/agents/fanOut/perItemInput|type|boolean",
957
+ "schemas/v2/capabilities.schema.json#/agents/fanOut|closed|true",
958
+ "schemas/v2/capabilities.schema.json#/agents/fanOut|property|joinModes",
959
+ "schemas/v2/capabilities.schema.json#/agents/fanOut|property|maxFanOut",
960
+ "schemas/v2/capabilities.schema.json#/agents/fanOut|property|onChildFailureModes",
961
+ "schemas/v2/capabilities.schema.json#/agents/fanOut|property|perItemInput",
962
+ "schemas/v2/capabilities.schema.json#/agents/fanOut|required|joinModes",
963
+ "schemas/v2/capabilities.schema.json#/agents/fanOut|required|onChildFailureModes",
964
+ "schemas/v2/capabilities.schema.json#/agents/fanOut|type|object",
946
965
  "schemas/v2/capabilities.schema.json#/agents/goals/continuation/[]|enum-member|\"commitment\"",
947
966
  "schemas/v2/capabilities.schema.json#/agents/goals/continuation/[]|enum-member|\"heartbeat\"",
948
967
  "schemas/v2/capabilities.schema.json#/agents/goals/continuation/[]|enum-member|\"manual\"",
@@ -1068,6 +1087,7 @@
1068
1087
  "schemas/v2/capabilities.schema.json#/agents|property|dispatch",
1069
1088
  "schemas/v2/capabilities.schema.json#/agents|property|dispatchMapping",
1070
1089
  "schemas/v2/capabilities.schema.json#/agents|property|evalSuite",
1090
+ "schemas/v2/capabilities.schema.json#/agents|property|fanOut",
1071
1091
  "schemas/v2/capabilities.schema.json#/agents|property|goals",
1072
1092
  "schemas/v2/capabilities.schema.json#/agents|property|liveRuntime",
1073
1093
  "schemas/v2/capabilities.schema.json#/agents|property|manifestRuntime",