@openwop/spec-artifacts 2.15.1 → 2.16.0
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 +13 -13
- package/api/seams-v2.yaml +1 -1
- package/api/v2/asyncapi.yaml +1 -1
- package/api/v2/openapi.yaml +1 -1
- package/package.json +1 -1
- package/schemas/v2/capabilities.schema.json +36 -29
- package/spec/v1/core-standard-manifest.json +2 -2
- package/spec/v1/gaps.json +51 -0
- package/spec/v2/core/capabilities.md +1 -1
- package/spec/v2/facets/packs.schema.json +1 -1
- package/spec/v2/facets/workflowChainPacks.schema.json +3 -3
- package/spec/v2/release.json +2 -2
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.
|
|
5
|
-
"corpusTag": "v2.
|
|
4
|
+
"version": "2.16.0",
|
|
5
|
+
"corpusTag": "v2.16.0",
|
|
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": "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": "46bc549d6de6a8fa0a53f43e09249cd3e18936eecb114e1836e93e3ea8f1f5ea",
|
|
13
|
+
"api/v2/asyncapi.yaml": "c2e3abf4ee265d494fe38bca4b2148bc86e2a9520d61f8aec4b771cec08a699e",
|
|
14
|
+
"api/v2/openapi.yaml": "719478209c8a296f5d756010da2b5eeb1d058635253427148ca3f02598cb413c",
|
|
15
15
|
"api/v2/redocly.yaml": "1e66b60e6118ad11a823bb620678be464d99dfe50a40e3e6f93ec9429b88b34c",
|
|
16
16
|
"schemas/README.md": "0c0b737ffcf8f30e7d2809cec8a498232de710f41443212922ad8337cdde0b51",
|
|
17
17
|
"schemas/a2a-task-state.schema.json": "c9365918f993f943b4b619d42551eb066a1ed33a08d895d51b395432a5b1f1bc",
|
|
@@ -115,7 +115,7 @@
|
|
|
115
115
|
"schemas/v2/artifact-type-pack-manifest.schema.json": "85630d1b760d0b41cf5a6fad2acfada39abaf7f0befd95cc4334e1e883e9615d",
|
|
116
116
|
"schemas/v2/audit-verify-result.schema.json": "a748dfadb5155adfde8a91045e76b0db6695005fe559035d71670fdd55edb3ba",
|
|
117
117
|
"schemas/v2/budget-policy.schema.json": "c7449daeb6e1d95e7a047b8c2814d3d54748697c27046972834874867d9b5f4c",
|
|
118
|
-
"schemas/v2/capabilities.schema.json": "
|
|
118
|
+
"schemas/v2/capabilities.schema.json": "213c5cbe7ae7a337418c9183ed8ec39f1bc4dc39650a9b3c06cea9780dca3f24",
|
|
119
119
|
"schemas/v2/certification-bundle.schema.json": "0bcf8f297266505ca39d30eea8100e3c0fb048f2651717fd746da8129fcb7920",
|
|
120
120
|
"schemas/v2/channel-presence-payload.schema.json": "1c20ad810cb311d47aa0b95d928490826b2468fd161f884cd29e867053e6782f",
|
|
121
121
|
"schemas/v2/channel-written-payload.schema.json": "ccecff3c71a3275ad8db035ac0e04db25e6f8d23cf091ddbcd5a60d1be1cbb6b",
|
|
@@ -201,20 +201,20 @@
|
|
|
201
201
|
"schemas/workspace-file.schema.json": "464de85c2a068243084ee9c1d969bc7cd5d8f7948574e58450d6493c38a0e1e4",
|
|
202
202
|
"spec/v1/alias-detectors.json": "40069d5976eeb6ba1384a648e57e5cfd673db3fce36175115fb8293bee9664d4",
|
|
203
203
|
"spec/v1/capability-declaration-classes.json": "e7729aed5c4b4e1dd02abab0530f14cc95f5d4070fe51fb139e7f5cccefa00c6",
|
|
204
|
-
"spec/v1/core-standard-manifest.json": "
|
|
204
|
+
"spec/v1/core-standard-manifest.json": "e0cdcba53adf7cecf24fc64b69a58306fdea74b2830338a292927315ad4c355c",
|
|
205
205
|
"spec/v1/deprecations.json": "307083ce29c23fd406015951f99a30d78d6187ff061d38dc9732f62191b40f3f",
|
|
206
206
|
"spec/v1/deprecations.schema.json": "18c87e78bedc210431f795ae44c5b5d202f2f3317850d5cf86867d4f1fa1cdfb",
|
|
207
207
|
"spec/v1/event-codemap.json": "3da60d884157793a360da532a9fcbbfb5285636db325a74cec94b34622186d97",
|
|
208
208
|
"spec/v1/event-codemap.schema.json": "d05933b2e88103aff51a2f774df97b9bda065e0fc88dbd9b114cc47a32189174",
|
|
209
209
|
"spec/v1/extensions.json": "79a60754aa16cbdbdb604f8e5c00038af535a1690a4d07bd5ff7c38f0256a7bc",
|
|
210
|
-
"spec/v1/gaps.json": "
|
|
210
|
+
"spec/v1/gaps.json": "9d56a0eb3edde8daea94220343d8a784beebebf324ff3664163a56aa68a29876",
|
|
211
211
|
"spec/v1/gaps.schema.json": "8fd83259f556553c9df0f53e7a82ca8c2a4771d471197f69b4e2ae0ceeacfd66",
|
|
212
212
|
"spec/v1/migrations.json": "8839497d6a4830b53fa7867014a8336f0d725ef2346352e54fb580b7947897af",
|
|
213
213
|
"spec/v1/migrations.schema.json": "886779aa6c22e646db097f5df210adb018a4dd14a7b815465a18c8a7056c8f72",
|
|
214
214
|
"spec/v1/operation-path-manifest.json": "5f5f4e3842669371730ebbd1aace3fb794192615f0018dc144f484ba5db82ac3",
|
|
215
215
|
"spec/v1/spec-gaps.json": "eb3bfcb9c7d05c9a6845d4a40ec9493cfaa5a671932daf1af561310136fdabe8",
|
|
216
216
|
"spec/v2/README.md": "8dbfc17b10f373dba95bdd2e8fec0580f35b380a834d304be3e24e7498170185",
|
|
217
|
-
"spec/v2/core/capabilities.md": "
|
|
217
|
+
"spec/v2/core/capabilities.md": "b3977e799d1d16c6ef9b306d5f07341f52259c19171c02c273a7e8a7a4b34473",
|
|
218
218
|
"spec/v2/core/conformance.md": "a451c0a2ba79d93c55e540ccef480eba7de9602d59bbb03eead05daafde0beac",
|
|
219
219
|
"spec/v2/core/connection-packs.md": "466bdb9dde79d85615ad8281dacfb7bf923ca22d7fb3ed219749e59574c753ed",
|
|
220
220
|
"spec/v2/core/errors.md": "6b6a1480ed889013172d8ce8c6985e321d2f4f73e1d9fae0bac9b961d0dd1a8c",
|
|
@@ -264,18 +264,18 @@
|
|
|
264
264
|
"spec/v2/facets/heartbeat.schema.json": "81d7fa1895a8b0241bd07cf00a7e7905bef0fd14eb3427325261c62eee5746a6",
|
|
265
265
|
"spec/v2/facets/interrupt.schema.json": "c76c58c0abd99de619f8c8afad246568f5bc9cce3b7a0d097d16d87eba84be3a",
|
|
266
266
|
"spec/v2/facets/mcp.schema.json": "f56609fe24ba6160ad29ae31aa16043354ff005e5cb6a0f3871c4d226087cc08",
|
|
267
|
-
"spec/v2/facets/packs.schema.json": "
|
|
267
|
+
"spec/v2/facets/packs.schema.json": "d544a280419c0052ce0f3c3b378f7aa04085cadc31df52a3c8f43da600b131b1",
|
|
268
268
|
"spec/v2/facets/replay.schema.json": "0a5aefb0108c708c6794fadd533cf256709704c4f16dbf44cd63fa8980c78018",
|
|
269
269
|
"spec/v2/facets/runList.schema.json": "6223e1baaebbb9f4faa71bfe968f8d22b4aa88046d0e43e8d5f56409e7f86e90",
|
|
270
270
|
"spec/v2/facets/sandbox.schema.json": "e75f54486d387b2d089791aa93b5093cd1450f1920753a0f97fc23acdfe978ed",
|
|
271
271
|
"spec/v2/facets/webhooks.schema.json": "4bf3f8eb3161a43910efac4c44ccaf9567060c9da52d4cf09bcf3888d1b92192",
|
|
272
|
-
"spec/v2/facets/workflowChainPacks.schema.json": "
|
|
272
|
+
"spec/v2/facets/workflowChainPacks.schema.json": "cd30907ac92396866a524e4db8d8c1537e3818cfff455d780efd72bcd0ebdac1",
|
|
273
273
|
"spec/v2/id-field-bindings.json": "e73c06f3055ad30173507ac817a458b96362c8f26209ba105c53653292cf63d3",
|
|
274
274
|
"spec/v2/path-manifest.json": "c123c9fd77dc1b3f9c2e9346ace80cdae007e6511138894956abda01e61ec1c6",
|
|
275
275
|
"spec/v2/peer-dependency-aliases.json": "d10299280abee08258502925bc327293ee413e0108cd6e6ec75ff6110653308d",
|
|
276
276
|
"spec/v2/profiles.json": "0636f19fceae625390003a347e70ef4797d84766b5c24ce8a02cea52aadebca4",
|
|
277
|
-
"spec/v2/release.json": "
|
|
277
|
+
"spec/v2/release.json": "c7d72623c4045035f3a700b45e4ab7e0f41f2828135a0ea4de597c9a92efc219",
|
|
278
278
|
"spec/v2/retention-floors.json": "eaf3722d95c79947af1d4269ef85117e126518c588cfcf1a2b21b97269f51624"
|
|
279
279
|
},
|
|
280
|
-
"corpusCommit": "
|
|
280
|
+
"corpusCommit": "3ec0076d1f6f317f24bd204c89a03bb1920818d0"
|
|
281
281
|
}
|
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.
|
|
4
|
+
version: 2.16.0
|
|
5
5
|
description: 'GENERATED by scripts/derive-v2-api.py. RFC 0168 §C: the seams are a versioned conformance profile with their
|
|
6
6
|
own document and path space (/conformance/seams/…), validated against the canonical v2 schemas with no tolerance path,
|
|
7
7
|
forbidden from the capability namespace (a host advertises the profile, never a testSeams flag). This document carries
|
package/api/v2/asyncapi.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
asyncapi: 3.1.0
|
|
2
2
|
info:
|
|
3
3
|
title: OpenWOP v2 event streams
|
|
4
|
-
version: 2.
|
|
4
|
+
version: 2.16.0
|
|
5
5
|
description: GENERATED by scripts/derive-v2-api.py (RFC 0171 §E.1, RFC 0172 §C.2). One run-events channel whose address
|
|
6
6
|
is the OpenAPI path key; the server pathname is empty (bare origin). streamMode is a pattern over the closed set and its
|
|
7
7
|
comma-separated combinations (`values` never combines). hostEvents has a real address (RFC 0171 §E.1) — the documented
|
package/api/v2/openapi.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
openapi: 3.1.0
|
|
2
2
|
info:
|
|
3
3
|
title: OpenWOP v2 API
|
|
4
|
-
version: 2.
|
|
4
|
+
version: 2.16.0
|
|
5
5
|
summary: REST surface for declaring, executing, suspending, resuming, and observing multi-step workflows.
|
|
6
6
|
description: GENERATED by scripts/derive-v2-api.py from api/openapi.yaml and the RFC 0167 children (v2 charter Phase 3,
|
|
7
7
|
P3-C). Bare origin, unversioned path keys, negotiation by `OpenWOP-Version` + `protocolVersions[]` (RFC 0172 §A). No seam
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@openwop/spec-artifacts",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.16.0",
|
|
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": {
|
|
@@ -786,7 +786,7 @@
|
|
|
786
786
|
"reliability": {
|
|
787
787
|
"type": "object",
|
|
788
788
|
"additionalProperties": false,
|
|
789
|
-
"description": "RFC 0032 §C. Host emits the envelope-reliability event family on documented adverse paths. Hosts
|
|
789
|
+
"description": "RFC 0032 §C. Host emits the envelope-reliability event family on documented adverse paths. Hosts advertise the family by emitting the record AND explicitly list the events they emit via `events[]`. A host advertising this facet MUST include at least `envelope.retry.exhausted` and `envelope.refusal` in `events[]` (the two MUST-tier events). The other four (`envelope.retry.attempted`, `envelope.truncated`, `envelope.nlToFormat.engaged`, `envelope.recovery.applied`) are SHOULD/MAY-tier per RFC 0032 §B and may be omitted.",
|
|
790
790
|
"properties": {
|
|
791
791
|
"events": {
|
|
792
792
|
"type": "array",
|
|
@@ -802,7 +802,7 @@
|
|
|
802
802
|
]
|
|
803
803
|
},
|
|
804
804
|
"uniqueItems": true,
|
|
805
|
-
"description": "Subset of the six reliability events the host actually emits.
|
|
805
|
+
"description": "Subset of the six reliability events the host actually emits. A host advertising this facet MUST include `envelope.retry.exhausted` and `envelope.refusal`. Conformance scenarios soft-skip for events absent from this list (the event-emission assertion is skipped; other host behavior assertions remain in force)."
|
|
806
806
|
},
|
|
807
807
|
"maxRetryAttempts": {
|
|
808
808
|
"type": "integer",
|
|
@@ -907,7 +907,7 @@
|
|
|
907
907
|
},
|
|
908
908
|
"endpointsSupported": {
|
|
909
909
|
"type": "boolean",
|
|
910
|
-
"description": "RFC 0028 §A. When `true`, the host serves the `/prompts*` REST surface — at minimum the read endpoints (`listPromptTemplates`, `getPromptTemplate`, `renderPromptTemplate`). The mutating endpoints additionally require `mutableLibrary: true`; the pack-install path additionally requires `packsSupported: true`. False or absent = every `/prompts*` request returns `501 capability_not_provided`. Independent of
|
|
910
|
+
"description": "RFC 0028 §A. When `true`, the host serves the `/prompts*` REST surface — at minimum the read endpoints (`listPromptTemplates`, `getPromptTemplate`, `renderPromptTemplate`). The mutating endpoints additionally require `mutableLibrary: true`; the pack-install path additionally requires `packsSupported: true`. False or absent = every `/prompts*` request returns `501 capability_not_provided`. Independent of the family record — a host MAY advertise the family with `endpointsSupported: false` (composition without library REST) or the family omitted and `endpointsSupported: true` (library REST against an external resolver, e.g., a façade host)."
|
|
911
911
|
},
|
|
912
912
|
"templateKinds": {
|
|
913
913
|
"type": "array",
|
|
@@ -929,7 +929,7 @@
|
|
|
929
929
|
]
|
|
930
930
|
},
|
|
931
931
|
"uniqueItems": true,
|
|
932
|
-
"description": "Subset of PromptVariable.source values the host supports. `secret` SHOULD only appear when `
|
|
932
|
+
"description": "Subset of PromptVariable.source values the host supports. `secret` SHOULD only appear when the `secrets` family is advertised."
|
|
933
933
|
},
|
|
934
934
|
"maxTemplateBytes": {
|
|
935
935
|
"type": "integer",
|
|
@@ -1073,7 +1073,7 @@
|
|
|
1073
1073
|
},
|
|
1074
1074
|
"wasm": {
|
|
1075
1075
|
"type": "object",
|
|
1076
|
-
"description": "WASM core-module runtime per RFC 0008. Hosts that load `runtime.language: \"wasm\"` packs MUST advertise
|
|
1076
|
+
"description": "WASM core-module runtime per RFC 0008. Hosts that load `runtime.language: \"wasm\"` packs MUST advertise this facet and at least one entry in `abiVersions[]`. `additionalProperties: true` preserved for future RFC 0008 amendments (e.g., per-pack memory accounting fields).",
|
|
1077
1077
|
"properties": {
|
|
1078
1078
|
"abiVersions": {
|
|
1079
1079
|
"type": "array",
|
|
@@ -1441,7 +1441,7 @@
|
|
|
1441
1441
|
},
|
|
1442
1442
|
"propagatesOnward": {
|
|
1443
1443
|
"type": "boolean",
|
|
1444
|
-
"description": "RFC 0128. When `true`, the host's onward OpenWOP-envelope hops (A2A forwards, trigger/sync events to OpenWOP peers) re-emit the label. Distinct from
|
|
1444
|
+
"description": "RFC 0128. When `true`, the host's onward OpenWOP-envelope hops (A2A forwards, trigger/sync events to OpenWOP peers) re-emit the label. Distinct from the family record only for hosts that read labels but have no onward-hop surface at all; a host WITH onward hops that advertises this facet MUST also propagate."
|
|
1445
1445
|
}
|
|
1446
1446
|
},
|
|
1447
1447
|
"allOf": [
|
|
@@ -2537,7 +2537,7 @@
|
|
|
2537
2537
|
},
|
|
2538
2538
|
"crossHostCausation": {
|
|
2539
2539
|
"type": "object",
|
|
2540
|
-
"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
|
|
2540
|
+
"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`.",
|
|
2541
2541
|
"additionalProperties": false,
|
|
2542
2542
|
"properties": {
|
|
2543
2543
|
"hostId": {
|
|
@@ -2547,13 +2547,13 @@
|
|
|
2547
2547
|
},
|
|
2548
2548
|
"ancestryEndpointSupported": {
|
|
2549
2549
|
"type": "boolean",
|
|
2550
|
-
"description": "Host serves `GET /runs/{runId}/ancestry` returning the cross-host parent chain per RFC 0040 §C. Optional even when crossHostCausation
|
|
2550
|
+
"description": "Host serves `GET /runs/{runId}/ancestry` returning the cross-host parent chain per RFC 0040 §C. Optional even when `crossHostCausation` is advertised — hosts that emit `causationHostId` but don't expose the ancestry-walking endpoint still satisfy the per-event chaining contract; this flag advertises the additional endpoint."
|
|
2551
2551
|
}
|
|
2552
2552
|
}
|
|
2553
2553
|
},
|
|
2554
2554
|
"replayDeterminism": {
|
|
2555
2555
|
"type": "object",
|
|
2556
|
-
"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
|
|
2556
|
+
"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.",
|
|
2557
2557
|
"additionalProperties": false,
|
|
2558
2558
|
"properties": {
|
|
2559
2559
|
"llmCacheKeyRecipe": {
|
|
@@ -2585,7 +2585,7 @@
|
|
|
2585
2585
|
},
|
|
2586
2586
|
"contextBudget": {
|
|
2587
2587
|
"type": "object",
|
|
2588
|
-
"description": "RFC 0111 (`Active`, `version >= 5`). Opt-in, token-denominated bound on the orchestrator transcript the host feeds each iteration, plus a declared summarization contract for turns evicted beyond that budget. SCOPE: governs the RFC 0061 per-iteration ORCHESTRATOR-LOOP transcript (`multi-agent-execution.md` §\"Per-iteration state inputs\" input 3 — the same transcript `transcriptWindow` bounds), NOT a general chat-conversation history. A host whose orchestrator loop does not run real model turns (e.g. a mock supervisor) MUST NOT advertise this block, exactly as it MUST NOT dishonestly advertise `transcriptWindow`. Budget-only advertisement (`transcriptTokenBudget` + `tokenCounter` WITHOUT `summarization
|
|
2588
|
+
"description": "RFC 0111 (`Active`, `version >= 5`). Opt-in, token-denominated bound on the orchestrator transcript the host feeds each iteration, plus a declared summarization contract for turns evicted beyond that budget. SCOPE: governs the RFC 0061 per-iteration ORCHESTRATOR-LOOP transcript (`multi-agent-execution.md` §\"Per-iteration state inputs\" input 3 — the same transcript `transcriptWindow` bounds), NOT a general chat-conversation history. A host whose orchestrator loop does not run real model turns (e.g. a mock supervisor) MUST NOT advertise this block, exactly as it MUST NOT dishonestly advertise `transcriptWindow`. Budget-only advertisement (`transcriptTokenBudget` + `tokenCounter` WITHOUT `summarization`) is valid for a host that HAS a real orchestrator loop but does not summarize. Purely additive: a host that omits this block behaves exactly as today, including `transcriptWindow`'s `absent ⇒ unbounded` default (NOT flipped by this RFC). Complements (does not replace) the event-count `transcriptWindow`; when both bound a turn the host MUST honor whichever is tighter. Summarization here is a NONDETERMINISTIC host output governed exactly like an RFC 0041 envelope: each substitution MUST be recorded as a `context.summarized` event whose `summaryRef` artifact replay reuses (never re-summarizes) per `multi-agent-execution.md` §\"Context economy (RFC 0111)\".",
|
|
2589
2589
|
"additionalProperties": false,
|
|
2590
2590
|
"properties": {
|
|
2591
2591
|
"transcriptTokenBudget": {
|
|
@@ -2606,7 +2606,7 @@
|
|
|
2606
2606
|
"summarization": {
|
|
2607
2607
|
"type": "object",
|
|
2608
2608
|
"additionalProperties": false,
|
|
2609
|
-
"description": "RFC 0111. Declared contract for turns evicted beyond `transcriptTokenBudget`. When
|
|
2609
|
+
"description": "RFC 0111. Declared contract for turns evicted beyond `transcriptTokenBudget`. When this facet is present, the host MAY replace older in-window turns with a host-produced summary; it MUST keep the most recent `keepLastTurns` turns verbatim and MUST NOT summarize the active (most recent) turn. Each substitution MUST be recorded as a `context.summarized` event and is replay-governed under RFC 0041 (replay reuses the recorded `summaryRef`, never re-summarizes).",
|
|
2610
2610
|
"properties": {
|
|
2611
2611
|
"strategy": {
|
|
2612
2612
|
"type": "string",
|
|
@@ -3052,7 +3052,7 @@
|
|
|
3052
3052
|
"scheduled",
|
|
3053
3053
|
"on-demand"
|
|
3054
3054
|
],
|
|
3055
|
-
"description": "How a consolidation pass is initiated. `host-managed`: a host-internal cadence clients do not control (default when absent
|
|
3055
|
+
"description": "How a consolidation pass is initiated. `host-managed`: a host-internal cadence clients do not control (the default when absent). `scheduled`: bound to a `capabilities.scheduling` (RFC 0052) trigger. `on-demand`: the host runs a pass when explicitly requested. A host MAY honor more than one path but advertises the primary."
|
|
3056
3056
|
}
|
|
3057
3057
|
}
|
|
3058
3058
|
},
|
|
@@ -3085,7 +3085,7 @@
|
|
|
3085
3085
|
},
|
|
3086
3086
|
"manifestRuntime": {
|
|
3087
3087
|
"type": "object",
|
|
3088
|
-
"description": "RFC 0070. Agent-manifest runtime floor — the minimal tier that makes a published agent pack (RFC 0003) runnable. When
|
|
3088
|
+
"description": "RFC 0070. Agent-manifest runtime floor — the minimal tier that makes a published agent pack (RFC 0003) runnable. When this facet is present, the host implements RFC 0003 `installAgents`: it loads each installed pack's `agents[]` into an in-process AgentRegistry, resolves `systemPromptRef` + `handoff.*SchemaRef` from the tarball at install (RFC 0003 §C/§D), and can DISPATCH a manifest agent on the existing `core.dispatch`/orchestrator loop (RFC 0007/0037/0061). Does NOT imply swarm/consensus (`host.agentRuntime`), long-term memory (`agents.memoryBackends`), or crews beyond `agents.dispatch`. A host advertising `agentRuntime` is treated as also satisfying this flag (RFC 0070 §B). Hosts that omit this block do not instantiate manifest agents (today's default).",
|
|
3089
3089
|
"additionalProperties": false,
|
|
3090
3090
|
"properties": {
|
|
3091
3091
|
"handoffValidation": {
|
|
@@ -3106,7 +3106,7 @@
|
|
|
3106
3106
|
},
|
|
3107
3107
|
"liveRuntime": {
|
|
3108
3108
|
"type": "object",
|
|
3109
|
-
"description": "RFC 0077. The host executes manifest agents against LIVE models and tools (not the deterministic RFC 0070 sample floor) per the normative AgentManifest→live-run mapping (`multi-agent-execution.md` §\"Live manifest dispatch\"), and emits the `agent.invocation.started`/`agent.invocation.completed` content-free bracket around the existing `agent.*` family. REQUIRES `agents.manifestRuntime
|
|
3109
|
+
"description": "RFC 0077. The host executes manifest agents against LIVE models and tools (not the deterministic RFC 0070 sample floor) per the normative AgentManifest→live-run mapping (`multi-agent-execution.md` §\"Live manifest dispatch\"), and emits the `agent.invocation.started`/`agent.invocation.completed` content-free bracket around the existing `agent.*` family. REQUIRES `agents.manifestRuntime` — `liveRuntime` is a strict superset of the floor. The floor's mandatory safety guarantees (toolAllowlist enforcement, handoff inbound validation, tenant scoping, untrusted-model-output handling, fail-closed per-tool authorization) stay unconditional under `liveRuntime`. Hosts that omit this block run the floor only; the behavioral conformance scenarios skip cleanly.",
|
|
3110
3110
|
"additionalProperties": false,
|
|
3111
3111
|
"properties": {
|
|
3112
3112
|
"structuredOutput": {
|
|
@@ -3150,7 +3150,7 @@
|
|
|
3150
3150
|
"live-shadow"
|
|
3151
3151
|
]
|
|
3152
3152
|
},
|
|
3153
|
-
"description": "Which eval modes the host actually implements (RFC 0081 §D closed vocabulary). Truthful advertisement (RFC 0031): a host advertises ONLY the modes it gates on; a suite requesting an unadvertised mode is rejected at run-create with `400 validation_error`. Absent ⇒ no modes (the host advertises
|
|
3153
|
+
"description": "Which eval modes the host actually implements (RFC 0081 §D closed vocabulary). Truthful advertisement (RFC 0031): a host advertises ONLY the modes it gates on; a suite requesting an unadvertised mode is rejected at run-create with `400 validation_error`. Absent ⇒ no modes (the host advertises the family but gates nothing — effectively shape-only)."
|
|
3154
3154
|
},
|
|
3155
3155
|
"maxTasksPerSuite": {
|
|
3156
3156
|
"type": "integer",
|
|
@@ -3207,7 +3207,7 @@
|
|
|
3207
3207
|
},
|
|
3208
3208
|
"roster": {
|
|
3209
3209
|
"type": "object",
|
|
3210
|
-
"description": "RFC 0086. The host maintains a standing agent roster: named, tenant-scoped agent INSTANCES (the 'digital-twin employee') that reference a manifest/deployment and own a workflow portfolio, discoverable via GET /agents/roster, with trigger-fired portfolio runs attributed to the member via the content-free `roster.run.initiated` event. REQUIRES `agents.manifestRuntime
|
|
3210
|
+
"description": "RFC 0086. The host maintains a standing agent roster: named, tenant-scoped agent INSTANCES (the 'digital-twin employee') that reference a manifest/deployment and own a workflow portfolio, discoverable via GET /agents/roster, with trigger-fired portfolio runs attributed to the member via the content-free `roster.run.initiated` event. REQUIRES `agents.manifestRuntime` (a roster entry instantiates a manifest agent). Triggers compose RFC 0052 (schedule) + RFC 0083 (durable work-item bridge) — no new WorkflowTrigger.type; the concrete work surface (a Kanban board) stays a host/vendor extension (§E). Hosts that omit this block do not maintain a roster (the roster reads 501). The roster-management endpoints + behavioral attribution scenario + reference-host store land at Active → Accepted.",
|
|
3211
3211
|
"additionalProperties": false,
|
|
3212
3212
|
"properties": {
|
|
3213
3213
|
"installScope": {
|
|
@@ -3231,7 +3231,7 @@
|
|
|
3231
3231
|
},
|
|
3232
3232
|
"orgChart": {
|
|
3233
3233
|
"type": "object",
|
|
3234
|
-
"description": "RFC 0087. The host maintains a tenant-scoped, DESCRIPTIVE org-chart over RFC 0086 roster members: departments + roles with acyclic `reportsTo` edges + a derived responsibility roll-up, discoverable via GET /agents/org-chart. The load-bearing guarantee (§B `org-position-no-authority-escalation`): an org edge confers NO authority — it MUST NOT widen `toolAllowlist` (RFC 0002 §A14), grant an RBAC scope (RFC 0049), or bypass an approval gate (RFC 0051); org position MUST NOT be an authorization input. The schema carries no authority-bearing field, and a conformant host MUST NOT derive authority from position out-of-band. REQUIRES `agents.roster
|
|
3234
|
+
"description": "RFC 0087. The host maintains a tenant-scoped, DESCRIPTIVE org-chart over RFC 0086 roster members: departments + roles with acyclic `reportsTo` edges + a derived responsibility roll-up, discoverable via GET /agents/org-chart. The load-bearing guarantee (§B `org-position-no-authority-escalation`): an org edge confers NO authority — it MUST NOT widen `toolAllowlist` (RFC 0002 §A14), grant an RBAC scope (RFC 0049), or bypass an approval gate (RFC 0051); org position MUST NOT be an authorization input. The schema carries no authority-bearing field, and a conformant host MUST NOT derive authority from position out-of-band. REQUIRES `agents.roster` (the chart's members are roster entries). Hosts that omit this block have no org-chart surface (the read 501s). The org-chart-management endpoints + behavioral non-authority scenario + reference-host store land at Active → Accepted.",
|
|
3235
3235
|
"additionalProperties": false,
|
|
3236
3236
|
"properties": {
|
|
3237
3237
|
"installScope": {
|
|
@@ -3457,7 +3457,7 @@
|
|
|
3457
3457
|
"client-requested",
|
|
3458
3458
|
"both"
|
|
3459
3459
|
],
|
|
3460
|
-
"description": "REQUIRED when
|
|
3460
|
+
"description": "REQUIRED when this facet is present, per RFC 0012 §A (enforced by this facet's `required`). `host-managed` runs on a host-internal schedule clients do not control. `client-requested` and `both` are reserved enum values; v1.x normates only `host-managed`."
|
|
3461
3461
|
},
|
|
3462
3462
|
"maxInputEntries": {
|
|
3463
3463
|
"type": "integer",
|
|
@@ -3470,7 +3470,10 @@
|
|
|
3470
3470
|
"description": "Informational ceiling on the distilled entry size. SHOULD be ≤ `memory.maxEntrySizeBytes`."
|
|
3471
3471
|
}
|
|
3472
3472
|
},
|
|
3473
|
-
"additionalProperties": false
|
|
3473
|
+
"additionalProperties": false,
|
|
3474
|
+
"required": [
|
|
3475
|
+
"trigger"
|
|
3476
|
+
]
|
|
3474
3477
|
},
|
|
3475
3478
|
"distillation": {
|
|
3476
3479
|
"type": "object",
|
|
@@ -3513,7 +3516,7 @@
|
|
|
3513
3516
|
},
|
|
3514
3517
|
"writable": {
|
|
3515
3518
|
"type": "boolean",
|
|
3516
|
-
"description": "RFC 0080 §A (`write` dimension). Absent ⇒ the host implements the full RFC 0004 four-operation MemoryAdapter (`put`/`delete` available — i.e. writable), the back-compatible default. A read-only host (`get`/`list` only) MUST set `writable: false` so a consumer can distinguish a read-only store from a read/write one. Only meaningful when
|
|
3519
|
+
"description": "RFC 0080 §A (`write` dimension). Absent ⇒ the host implements the full RFC 0004 four-operation MemoryAdapter (`put`/`delete` available — i.e. writable), the back-compatible default. A read-only host (`get`/`list` only) MUST set `writable: false` so a consumer can distinguish a read-only store from a read/write one. Only meaningful when the family record is present."
|
|
3517
3520
|
},
|
|
3518
3521
|
"search": {
|
|
3519
3522
|
"type": "object",
|
|
@@ -3562,9 +3565,12 @@
|
|
|
3562
3565
|
"chars",
|
|
3563
3566
|
"host-defined"
|
|
3564
3567
|
],
|
|
3565
|
-
"description": "The unit `tokenBudget` is denominated in. REQUIRED when `injectionBudget
|
|
3568
|
+
"description": "The unit `tokenBudget` is denominated in. REQUIRED when `injectionBudget` is advertised (enforced by that facet's `required`). `o200k_base`/`cl100k_base` are tokenizer encodings; `chars` counts UTF-8/Unicode characters of the entry `content` (a tokenizer-free unit a client can reason about directly — preferred over opaque `host-defined`); `host-defined` is an opaque host unit. The over-budget-single-entry-omitted rule applies regardless of unit. RFC 0111 aligns to these same values when it lands (0113 lands first); no shared `$ref` (decoupled)."
|
|
3566
3569
|
}
|
|
3567
|
-
}
|
|
3570
|
+
},
|
|
3571
|
+
"required": [
|
|
3572
|
+
"tokenCounter"
|
|
3573
|
+
]
|
|
3568
3574
|
}
|
|
3569
3575
|
},
|
|
3570
3576
|
"allOf": [
|
|
@@ -3762,7 +3768,8 @@
|
|
|
3762
3768
|
"required": [
|
|
3763
3769
|
"status",
|
|
3764
3770
|
"since",
|
|
3765
|
-
"witness"
|
|
3771
|
+
"witness",
|
|
3772
|
+
"sandboxRoot"
|
|
3766
3773
|
],
|
|
3767
3774
|
"properties": {
|
|
3768
3775
|
"status": {
|
|
@@ -3792,7 +3799,7 @@
|
|
|
3792
3799
|
},
|
|
3793
3800
|
"sandboxRoot": {
|
|
3794
3801
|
"type": "string",
|
|
3795
|
-
"description": "Absolute path. Every fs operation is resolved relative to this root. MUST be set when
|
|
3802
|
+
"description": "Absolute path. Every fs operation is resolved relative to this root. MUST be set when this facet is present."
|
|
3796
3803
|
},
|
|
3797
3804
|
"maxFileSizeBytes": {
|
|
3798
3805
|
"type": "integer",
|
|
@@ -4552,7 +4559,7 @@
|
|
|
4552
4559
|
},
|
|
4553
4560
|
"ssrfGuard": {
|
|
4554
4561
|
"type": "boolean",
|
|
4555
|
-
"description": "Host rejects egress to loopback / RFC 1918 / link-local / cloud-metadata addresses (resolve→pin→connect). MUST be `true` when
|
|
4562
|
+
"description": "Host rejects egress to loopback / RFC 1918 / link-local / cloud-metadata addresses (resolve→pin→connect). MUST be `true` when this facet is present (the `http-client-ssrf-guard` invariant)."
|
|
4556
4563
|
},
|
|
4557
4564
|
"maxResponseBodyBytes": {
|
|
4558
4565
|
"type": "integer",
|
|
@@ -6545,7 +6552,7 @@
|
|
|
6545
6552
|
},
|
|
6546
6553
|
"subChains": {
|
|
6547
6554
|
"type": "object",
|
|
6548
|
-
"description": "RFC 0133 (workflow-chain composition, `Accepted`). OPTIONAL. When
|
|
6555
|
+
"description": "RFC 0133 (workflow-chain composition, `Accepted`). OPTIONAL. When this facet is present, the host's `POST …/workflows/from-chain` implements RUNTIME sub-chain composition per `workflow-chain-packs.md` §\"Sub-chain composition (RFC 0133)\": for each `config.subChainRef` reachable from a parent chain, it resolves the referenced chain (sibling or external), recursively expands + co-registers it as its own owned workflow (deterministic TENANT-SCOPED id from `(tenantId, childChainId, version)` — two tenants never collide on the global registry, a shared child registers once across parents in a tenant, a repeat instantiation converges), rewrites the referencing node's `subChainRef` → the minted child `config.workflowId`, and dispatches the child as a child run (`core.subWorkflow` / `core.dispatch` child-run); the `from-chain` response carries `{ workflowId, subChainWorkflowIds[], nodeCount }`. Bounded by a cycle check (`sub_chain_cycle`) + a depth cap (`sub_chain_max_depth_exceeded`). A host that does NOT advertise this block MUST refuse a `subChains`-bearing chain at author/instantiate time with `sub_chain_unsupported` (422) — it never silently flattens. `producedVariables` (RFC 0133 §2) needs NO flag: it is pure variable emission under the base `workflowChainPacks` record. Conformance scenarios `chain-subchain-fanout.test.ts` + `chain-subchain-unsupported-refused.test.ts` gate on this flag; the server-free `chain-subchain-sibling` / `chain-subchain-cycle-rejected` / `chain-produced-var-roundtrip` legs run unconditionally against the reference library.",
|
|
6549
6556
|
"properties": {
|
|
6550
6557
|
"maxDepth": {
|
|
6551
6558
|
"type": "integer",
|
|
@@ -6635,7 +6642,7 @@
|
|
|
6635
6642
|
"properties": {
|
|
6636
6643
|
"isolated": {
|
|
6637
6644
|
"type": "boolean",
|
|
6638
|
-
"description": "RFC 0025 §C point 1. MUST be `true` when
|
|
6645
|
+
"description": "RFC 0025 §C point 1. MUST be `true` when this facet is present — guarantees the test catalog is persisted distinctly from the production catalog and that a pack PUT'd via `/v1/packs-test/*` MUST NOT appear in `/v1/packs/*` listings."
|
|
6639
6646
|
},
|
|
6640
6647
|
"catalogResetEndpoint": {
|
|
6641
6648
|
"type": "string",
|
|
@@ -7295,7 +7302,7 @@
|
|
|
7295
7302
|
"minWindowSeconds": {
|
|
7296
7303
|
"type": "integer",
|
|
7297
7304
|
"minimum": 604800,
|
|
7298
|
-
"description": "Documented minimum retention window in seconds. Per production-profile.md §\"Event retention\", MUST be ≥ 604800 (7 days) for public hosts; development-only hosts MAY advertise a smaller window but MUST NOT
|
|
7305
|
+
"description": "Documented minimum retention window in seconds. Per production-profile.md §\"Event retention\", MUST be ≥ 604800 (7 days) for public hosts; development-only hosts MAY advertise a smaller window but MUST NOT advertise this facet while doing so."
|
|
7299
7306
|
},
|
|
7300
7307
|
"testForceExpire": {
|
|
7301
7308
|
"type": "boolean",
|
|
@@ -7306,7 +7313,7 @@
|
|
|
7306
7313
|
},
|
|
7307
7314
|
"debugBundle": {
|
|
7308
7315
|
"type": "object",
|
|
7309
|
-
"description": "Debug-bundle truncation advertisement (production-profile.md §\"Debug bundle behavior\"). Stricter than the existing `capabilities.debugBundle
|
|
7316
|
+
"description": "Debug-bundle truncation advertisement (production-profile.md §\"Debug bundle behavior\"). Stricter than the existing `capabilities.debugBundle` advertised per debug-bundle.md — this block adds the production-profile MUSTs (truncation metadata, redaction).",
|
|
7310
7317
|
"properties": {
|
|
7311
7318
|
"truncationMetadata": {
|
|
7312
7319
|
"type": "boolean",
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"provenance": {
|
|
5
5
|
"suite": {
|
|
6
6
|
"package": "@openwop/openwop-conformance",
|
|
7
|
-
"version": "2.
|
|
7
|
+
"version": "2.16.0"
|
|
8
8
|
},
|
|
9
9
|
"note": "Derived from the corpus at generation time. Regenerate with --write; verify with --check."
|
|
10
10
|
},
|
|
@@ -419,5 +419,5 @@
|
|
|
419
419
|
"$id": "https://openwop.dev/spec/v1/workspace-file.schema.json"
|
|
420
420
|
}
|
|
421
421
|
],
|
|
422
|
-
"digest": "
|
|
422
|
+
"digest": "c0f1590f583e543666dbff52208450cee734e7d602f72832f65dcd6a7feda0c2"
|
|
423
423
|
}
|
package/spec/v1/gaps.json
CHANGED
|
@@ -10467,6 +10467,57 @@
|
|
|
10467
10467
|
}
|
|
10468
10468
|
]
|
|
10469
10469
|
},
|
|
10470
|
+
{
|
|
10471
|
+
"id": "openwop.gap.0192.1",
|
|
10472
|
+
"rfc": "0192",
|
|
10473
|
+
"local": "G1",
|
|
10474
|
+
"section": "§A",
|
|
10475
|
+
"surface": "A host has no way to advertise a facet NEGATIVELY — \"I know about this and do not offer it\". Presence-semantics makes omission the only spelling, which cannot distinguish *unsupported* from *not yet considered*. MyndHyve expresses exactly this today as `extensions.myndhyve.runs.pauseResume.supported = false`, fleeing to the vendor namespace because the core root cannot say it. That is a production host routing around a missing surface, which is evidence the gap is real rather than theoretical.",
|
|
10476
|
+
"witness": "unclassified",
|
|
10477
|
+
"requirementId": null,
|
|
10478
|
+
"disposition": "carried",
|
|
10479
|
+
"target": "openwop.gap.0192.1",
|
|
10480
|
+
"sources": [
|
|
10481
|
+
{
|
|
10482
|
+
"file": "RFCS/registers/0192-facet-advertisement.gaps.md",
|
|
10483
|
+
"token": "G1"
|
|
10484
|
+
}
|
|
10485
|
+
]
|
|
10486
|
+
},
|
|
10487
|
+
{
|
|
10488
|
+
"id": "openwop.gap.0192.2",
|
|
10489
|
+
"rfc": "0192",
|
|
10490
|
+
"local": "G2",
|
|
10491
|
+
"section": "§B",
|
|
10492
|
+
"surface": "The rewrite table is keyed on the exact v1 sentence, so a reworded v1 seed silently stops matching and the ghost returns — caught by §C's gate, but as a new failure rather than as a diff on the table.",
|
|
10493
|
+
"witness": "unclassified",
|
|
10494
|
+
"requirementId": null,
|
|
10495
|
+
"disposition": "carried",
|
|
10496
|
+
"target": "openwop.gap.0192.2",
|
|
10497
|
+
"sources": [
|
|
10498
|
+
{
|
|
10499
|
+
"file": "RFCS/registers/0192-facet-advertisement.gaps.md",
|
|
10500
|
+
"token": "G2"
|
|
10501
|
+
}
|
|
10502
|
+
]
|
|
10503
|
+
},
|
|
10504
|
+
{
|
|
10505
|
+
"id": "openwop.gap.0192.3",
|
|
10506
|
+
"rfc": "0192",
|
|
10507
|
+
"local": "G3",
|
|
10508
|
+
"section": "§A",
|
|
10509
|
+
"surface": "Eight core families carry zero facets, so the facet rule is vacuous for them, and `facetsUncovered` gives them no backstop either (RFC 0190 §B). Nothing in the corpus distinguishes \"this family genuinely has no sub-capabilities\" from \"its facets were never modelled\".",
|
|
10510
|
+
"witness": "unclassified",
|
|
10511
|
+
"requirementId": null,
|
|
10512
|
+
"disposition": "carried",
|
|
10513
|
+
"target": "openwop.gap.0192.3",
|
|
10514
|
+
"sources": [
|
|
10515
|
+
{
|
|
10516
|
+
"file": "RFCS/registers/0192-facet-advertisement.gaps.md",
|
|
10517
|
+
"token": "G3"
|
|
10518
|
+
}
|
|
10519
|
+
]
|
|
10520
|
+
},
|
|
10470
10521
|
{
|
|
10471
10522
|
"id": "openwop.gap.spec.a2a-integration.g1",
|
|
10472
10523
|
"rfc": "0152",
|
|
@@ -37,7 +37,7 @@ Every family at the v2 root is one object:
|
|
|
37
37
|
| `until` in the past | non-conformant; a validator MUST answer `400` `until_in_past` |
|
|
38
38
|
| `witness` | MUST be one of the five wire-legal classes; `unwitnessable` MUST NOT appear on a wire record — such a family lives in `spec/v2/ext/` and is not advertised |
|
|
39
39
|
| `supported` | does not exist; presence of the record is the claim, and a host that does not support a family MUST omit it |
|
|
40
|
-
| facets | the named per-family fields; `aiProviders.providers[]` carries the v1 `supported` list |
|
|
40
|
+
| facets | the named per-family fields; a facet is advertised by the presence of its key, and a host MUST omit the key for a facet it does not offer, except where the facet's own schema states a meaning for its absence; `aiProviders.providers[]` carries the v1 `supported` list |
|
|
41
41
|
|
|
42
42
|
`until` absorbs v1 `tier` / `experimentalUntil`. A family's facets are hand-decided where `spec/v2/facets/<key>.schema.json` exists and otherwise generated from the declaration row.
|
|
43
43
|
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
"properties": {
|
|
8
8
|
"isolated": {
|
|
9
9
|
"type": "boolean",
|
|
10
|
-
"description": "RFC 0025 §C point 1. MUST be `true` when
|
|
10
|
+
"description": "RFC 0025 §C point 1. MUST be `true` when this facet is present — guarantees the test catalog is persisted distinctly from the production catalog and that a pack PUT'd via `/v1/packs-test/*` MUST NOT appear in `/v1/packs/*` listings."
|
|
11
11
|
},
|
|
12
12
|
"catalogResetEndpoint": {
|
|
13
13
|
"type": "string",
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
{
|
|
2
|
-
"$comment": "RFC 0013
|
|
2
|
+
"$comment": "RFC 0013 §Composition depth — the v2 facet set for workflowChainPacks. Two v1-seeded facets are NOT carried into v2: `deferredParameters` (RFC 0124, still `Active`; spec/v2/core/workflow-chain-packs.md §Parameter substitution states the portable per-run deferral \"is a named v2.x additive RFC and is not part of v2.0\", so binding it as an advertisable v2 facet let a host truthfully advertise a capability v2.0 does not define) and `hostExpansionSeam` (a self-described conformance-only test seam on POST /v1/host/sample/workflow-chain:expand — spec/v2/core/conformance.md §The seams profile forbids a test-seam capability flag: seams are the profile openwop-conformance-seams-v2 in the /conformance/seams/ path space, and the v1 path is removeIn 2.0 per spec/v1/deprecations.json). No v2 host bundle advertises either.",
|
|
3
3
|
"properties": {
|
|
4
4
|
"subChains": {
|
|
5
5
|
"type": "object",
|
|
6
|
-
"description": "RFC 0133 (workflow-chain composition, `Accepted`). OPTIONAL. When
|
|
6
|
+
"description": "RFC 0133 (workflow-chain composition, `Accepted`). OPTIONAL. When this facet is present, the host's `POST …/workflows/from-chain` implements RUNTIME sub-chain composition per `workflow-chain-packs.md` §\"Sub-chain composition (RFC 0133)\": for each `config.subChainRef` reachable from a parent chain, it resolves the referenced chain (sibling or external), recursively expands + co-registers it as its own owned workflow (deterministic TENANT-SCOPED id from `(tenantId, childChainId, version)` — two tenants never collide on the global registry, a shared child registers once across parents in a tenant, a repeat instantiation converges), rewrites the referencing node's `subChainRef` → the minted child `config.workflowId`, and dispatches the child as a child run (`core.subWorkflow` / `core.dispatch` child-run); the `from-chain` response carries `{ workflowId, subChainWorkflowIds[], nodeCount }`. Bounded by a cycle check (`sub_chain_cycle`) + a depth cap (`sub_chain_max_depth_exceeded`). A host that does NOT advertise this block MUST refuse a `subChains`-bearing chain at author/instantiate time with `sub_chain_unsupported` (422) — it never silently flattens. `producedVariables` (RFC 0133 §2) needs NO flag: it is pure variable emission under the base `workflowChainPacks` record. Conformance scenarios `chain-subchain-fanout.test.ts` + `chain-subchain-unsupported-refused.test.ts` gate on this flag; the server-free `chain-subchain-sibling` / `chain-subchain-cycle-rejected` / `chain-produced-var-roundtrip` legs run unconditionally against the reference library.",
|
|
7
7
|
"properties": {
|
|
8
8
|
"maxDepth": {
|
|
9
9
|
"type": "integer",
|
|
10
10
|
"minimum": 1,
|
|
11
11
|
"default": 8,
|
|
12
|
-
"description": "RFC 0133
|
|
12
|
+
"description": "RFC 0133 §1.3 (resolves UQ3). RECOMMENDED default 8. The maximum sub-chain nesting depth the host co-expands; exceeding it fails closed with the DISTINCT code `sub_chain_max_depth_exceeded` (the DoS depth backstop, alongside the `sub_chain_cycle` self-composition check — SECURITY `sub-chain-expansion-bounded`)."
|
|
13
13
|
}
|
|
14
14
|
},
|
|
15
15
|
"additionalProperties": false
|
package/spec/v2/release.json
CHANGED
|
@@ -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.
|
|
4
|
-
"corpusTag": "v2.
|
|
3
|
+
"version": "2.16.0",
|
|
4
|
+
"corpusTag": "v2.16.0",
|
|
5
5
|
"updated": "2026-09-18"
|
|
6
6
|
}
|