@openwop/spec-artifacts 2.45.24 → 2.45.26
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 +15 -15
- package/api/seams-v2.yaml +1 -1
- package/api/v2/asyncapi.yaml +1 -1
- package/api/v2/openapi.yaml +73 -1
- package/package.json +1 -1
- package/schemas/v2/certification-bundle.schema.json +1 -1
- package/schemas/v2/host-event.schema.json +42 -0
- package/spec/v1/core-standard-manifest.json +2 -2
- package/spec/v1/gaps.json +45 -11
- package/spec/v2/core/events.md +4 -3
- package/spec/v2/core/headers.md +6 -6
- package/spec/v2/path-manifest.json +13 -1
- package/spec/v2/release.json +3 -3
- package/spec/v2/surface-baseline.json +3 -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.45.
|
|
5
|
-
"corpusTag": "v2.45.
|
|
4
|
+
"version": "2.45.26",
|
|
5
|
+
"corpusTag": "v2.45.26",
|
|
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": "d3b59eb1f87f42ba118bdbbdfb74e6f499081d8d5ed5fba3b06d5ae561bc90bd",
|
|
13
|
+
"api/v2/asyncapi.yaml": "dc2ed7cd47e0ca326e89badc1f0b0c3a64b2030859559786c711230e5e7474f1",
|
|
14
|
+
"api/v2/openapi.yaml": "3fbb8672105a847d457e13cde09bf65b02b02163cf1082f08b3cec68088a416a",
|
|
15
15
|
"api/v2/redocly.yaml": "1e66b60e6118ad11a823bb620678be464d99dfe50a40e3e6f93ec9429b88b34c",
|
|
16
16
|
"schemas/README.md": "276fc1d51eb08e14e9127b9fd27761d7046ee33c12000f3a64a801322db8bf58",
|
|
17
17
|
"schemas/a2a-task-state.schema.json": "75d5049dea8bd873ff0e7546f1c60c8d36c219bec7084264360be54a8be30ae1",
|
|
@@ -118,7 +118,7 @@
|
|
|
118
118
|
"schemas/v2/audit-verify-result.schema.json": "14af8e9283510f0a40e48a2059c929ee44e0fc9fa3cc66a95bfbe90b17c48297",
|
|
119
119
|
"schemas/v2/budget-policy.schema.json": "1de68095db0beb5c7a4be629de26e79f62ebbe748a88d46f36e768edfd1f0d68",
|
|
120
120
|
"schemas/v2/capabilities.schema.json": "d859a413ff463ec39acc32a9cb76f2e8c7419e45683d6b7f886861765a9c36c7",
|
|
121
|
-
"schemas/v2/certification-bundle.schema.json": "
|
|
121
|
+
"schemas/v2/certification-bundle.schema.json": "93fcdfe54b1db168b702bfaf632b60c7a8a602be92c3fe48c81cf25408c2332b",
|
|
122
122
|
"schemas/v2/channel-presence-payload.schema.json": "fc03df0c20cc12a25f7ee6a47503a4c5931d79fe3d5ff24815e8fd7c1bcb9a87",
|
|
123
123
|
"schemas/v2/channel-written-payload.schema.json": "ccecff3c71a3275ad8db035ac0e04db25e6f8d23cf091ddbcd5a60d1be1cbb6b",
|
|
124
124
|
"schemas/v2/chat-card-pack-manifest.schema.json": "92a57db2fd4b2463f14ef155fef8e3f18afc78960b646459dcf32efc79ff6bf5",
|
|
@@ -152,7 +152,7 @@
|
|
|
152
152
|
"schemas/v2/goal.schema.json": "ad104ed5a3866736b8fed9d7c0b23dc82af526b5bef4afe848f01fc3af2161e9",
|
|
153
153
|
"schemas/v2/heartbeat-evaluated.schema.json": "c897b0792fd518d6e12879851027252af1529f5e420c3eaf434ad7af284ecc05",
|
|
154
154
|
"schemas/v2/heartbeat-state-changed.schema.json": "eb68d0082aa996650e3a6b8ccf32457f959cebc7e6728cc7c331b9d171a4bef6",
|
|
155
|
-
"schemas/v2/host-event.schema.json": "
|
|
155
|
+
"schemas/v2/host-event.schema.json": "655b5475b1aeb41c8fc4ff7b6fc7e31a0fcc18fd59f368336ccbc138e6ba395e",
|
|
156
156
|
"schemas/v2/ids.schema.json": "65cfaa193be0ca9cf48af39c18c553979e3ec1f7fc04509aaa513b322d7b7e4a",
|
|
157
157
|
"schemas/v2/localized-content-language-settings.schema.json": "3c8350a178037a460f5d87466ccaf9ed5fe3d41497786d2504cc66e42152c8cc",
|
|
158
158
|
"schemas/v2/localized-content-page-response.schema.json": "ef48329749758afb21e4d3cbc3f017abb911f75726819457f35b9f1390332c75",
|
|
@@ -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": "
|
|
211
|
+
"spec/v1/core-standard-manifest.json": "cd739e168fa36dd811fd9ed1f506e0716c592e7a61c0d12164f82732ca366177",
|
|
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": "
|
|
218
|
+
"spec/v1/gaps.json": "a0aec8f5ddf1002d46a461a9c7d930c8f0656a19b68bb1f52d183b97cc1962cf",
|
|
219
219
|
"spec/v1/gaps.schema.json": "8fd83259f556553c9df0f53e7a82ca8c2a4771d471197f69b4e2ae0ceeacfd66",
|
|
220
220
|
"spec/v1/migrations.json": "4c50760be70cb644d02427bcaf5749606700edf4513f423903cf3b1d12f5c300",
|
|
221
221
|
"spec/v1/migrations.schema.json": "886779aa6c22e646db097f5df210adb018a4dd14a7b815465a18c8a7056c8f72",
|
|
@@ -228,10 +228,10 @@
|
|
|
228
228
|
"spec/v2/core/connection-packs.md": "c80f95bd6a03698f35c72cdb2b46bd973f49203bbd786c26760e35fa86e6f23d",
|
|
229
229
|
"spec/v2/core/conversation.md": "8d6abedf6af408a74577753bfca24719d318e2632e10b45ff5d63bdcf31a8aaa",
|
|
230
230
|
"spec/v2/core/errors.md": "e48838701b86bbfe0ffee77b18a8ffc4e5f04724b4318507d9771da653f8da0f",
|
|
231
|
-
"spec/v2/core/events.md": "
|
|
231
|
+
"spec/v2/core/events.md": "d0f902edc080e9789e4fd05850a1264d905ebe5b06045b6a7a22486e22ef3091",
|
|
232
232
|
"spec/v2/core/execution.md": "8a0c9db1bbfb97c008ab9328b7333c1cc3318196e78bfbefb49e781bdf4f9d44",
|
|
233
233
|
"spec/v2/core/form-content-packs.md": "02931227899676fd4581a27017be2a6c4953904717be9b81c29d12f87ab3917d",
|
|
234
|
-
"spec/v2/core/headers.md": "
|
|
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",
|
|
@@ -310,12 +310,12 @@
|
|
|
310
310
|
"spec/v2/interop-map.schema.json": "0017c882df34ee215e2e0729de051490e09d43aac3d2c949285698ed51832f12",
|
|
311
311
|
"spec/v2/migrations.json": "651954938a1e154c0b6f1e3dd6e105889d30de3bb65789f21de7f77a12869e9e",
|
|
312
312
|
"spec/v2/migrations.schema.json": "b91ade6320ad1b1185c9495b9424f3aa63438ed8e412c45171c227d82c0afd86",
|
|
313
|
-
"spec/v2/path-manifest.json": "
|
|
313
|
+
"spec/v2/path-manifest.json": "7b5679a4dad98c80d855361d88a98c8a4e045af15e310862a05b285b815dc9fc",
|
|
314
314
|
"spec/v2/peer-dependency-aliases.json": "d10299280abee08258502925bc327293ee413e0108cd6e6ec75ff6110653308d",
|
|
315
315
|
"spec/v2/profiles.json": "180beb9ef2d161766fa23b2987e7e829851e3d316273147cf6a4a3f324befd6b",
|
|
316
|
-
"spec/v2/release.json": "
|
|
316
|
+
"spec/v2/release.json": "7ce8ba7234bfe7eff4c767cc0aa4ddea0495fae08212fe98f63ae312cab06c74",
|
|
317
317
|
"spec/v2/retention-floors.json": "eaf3722d95c79947af1d4269ef85117e126518c588cfcf1a2b21b97269f51624",
|
|
318
|
-
"spec/v2/surface-baseline.json": "
|
|
318
|
+
"spec/v2/surface-baseline.json": "da9da09f5133be09b75820d138c5b4422365b2b8d113597c7fa89c99913069b3"
|
|
319
319
|
},
|
|
320
|
-
"corpusCommit": "
|
|
320
|
+
"corpusCommit": "906642cfb7cea6d4be59f0471866f8ffa3e4c702"
|
|
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.45.
|
|
4
|
+
version: 2.45.26
|
|
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.
|
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.45.
|
|
4
|
+
version: 2.45.26
|
|
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`.
|
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.45.
|
|
4
|
+
version: 2.45.26
|
|
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
|
|
@@ -3559,6 +3559,78 @@ paths:
|
|
|
3559
3559
|
- runs:read
|
|
3560
3560
|
- OpenIdConnect:
|
|
3561
3561
|
- runs:read
|
|
3562
|
+
/host/events/test:
|
|
3563
|
+
post:
|
|
3564
|
+
tags:
|
|
3565
|
+
- host
|
|
3566
|
+
operationId: emitTestHostEvent
|
|
3567
|
+
summary: Emit one test host event to the caller's tenant
|
|
3568
|
+
description: 'Bound on a host listing `host-test.durable-triggered` or `host-test.ephemeral-triggered` in `hostEvents.types[]`,
|
|
3569
|
+
served for each listed class and otherwise answered `404`. Emits one event of the requested class''s reserved type,
|
|
3570
|
+
with an empty payload, through the ordinary host-event path: envelope, `/host/events`, `{ hostEvent }` webhooks, delivery
|
|
3571
|
+
class and tenant gate. It belongs to the caller''s tenant and to `workspaceId` when given, and MUST NOT reach another.
|
|
3572
|
+
A `delivery` whose type is not listed is `400 validation_error`; another tenant''s `workspaceId` is `403 id_tenant_mismatch`,
|
|
3573
|
+
an unknown one `404`. A host SHOULD rate-limit it more tightly than reads.'
|
|
3574
|
+
parameters:
|
|
3575
|
+
- $ref: '#/components/parameters/IdempotencyKey'
|
|
3576
|
+
- $ref: '#/components/parameters/OpenWOPVersion'
|
|
3577
|
+
- $ref: '#/components/parameters/OpenWOPClientVersion'
|
|
3578
|
+
requestBody:
|
|
3579
|
+
required: true
|
|
3580
|
+
content:
|
|
3581
|
+
application/json:
|
|
3582
|
+
schema:
|
|
3583
|
+
type: object
|
|
3584
|
+
additionalProperties: false
|
|
3585
|
+
required:
|
|
3586
|
+
- delivery
|
|
3587
|
+
properties:
|
|
3588
|
+
delivery:
|
|
3589
|
+
type: string
|
|
3590
|
+
enum:
|
|
3591
|
+
- durable
|
|
3592
|
+
- ephemeral
|
|
3593
|
+
workspaceId:
|
|
3594
|
+
$ref: ../../schemas/v2/ids.schema.json#/$defs/workspaceId
|
|
3595
|
+
responses:
|
|
3596
|
+
'202':
|
|
3597
|
+
description: Emitted; `eventId` is the envelope's.
|
|
3598
|
+
content:
|
|
3599
|
+
application/json:
|
|
3600
|
+
schema:
|
|
3601
|
+
type: object
|
|
3602
|
+
additionalProperties: false
|
|
3603
|
+
required:
|
|
3604
|
+
- eventId
|
|
3605
|
+
- type
|
|
3606
|
+
properties:
|
|
3607
|
+
eventId:
|
|
3608
|
+
$ref: ../../schemas/v2/ids.schema.json#/$defs/eventId
|
|
3609
|
+
type:
|
|
3610
|
+
type: string
|
|
3611
|
+
enum:
|
|
3612
|
+
- host-test.durable-triggered
|
|
3613
|
+
- host-test.ephemeral-triggered
|
|
3614
|
+
headers:
|
|
3615
|
+
OpenWOP-Version:
|
|
3616
|
+
$ref: '#/components/headers/OpenWOPVersion'
|
|
3617
|
+
'400':
|
|
3618
|
+
$ref: '#/components/responses/ValidationError'
|
|
3619
|
+
'401':
|
|
3620
|
+
$ref: '#/components/responses/Unauthenticated'
|
|
3621
|
+
'403':
|
|
3622
|
+
$ref: '#/components/responses/Forbidden'
|
|
3623
|
+
'404':
|
|
3624
|
+
$ref: '#/components/responses/NotFound'
|
|
3625
|
+
'429':
|
|
3626
|
+
$ref: '#/components/responses/RateLimited'
|
|
3627
|
+
security:
|
|
3628
|
+
- ApiKeyAuth:
|
|
3629
|
+
- webhooks:manage
|
|
3630
|
+
- OAuth2:
|
|
3631
|
+
- webhooks:manage
|
|
3632
|
+
- OpenIdConnect:
|
|
3633
|
+
- webhooks:manage
|
|
3562
3634
|
components:
|
|
3563
3635
|
securitySchemes:
|
|
3564
3636
|
ApiKeyAuth:
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@openwop/spec-artifacts",
|
|
3
|
-
"version": "2.45.
|
|
3
|
+
"version": "2.45.26",
|
|
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": {
|
|
@@ -266,7 +266,7 @@
|
|
|
266
266
|
"properties": {
|
|
267
267
|
"id": {
|
|
268
268
|
"type": "string",
|
|
269
|
-
"pattern": "^openwop\\.(?!it\\.(?:a2a-parts-schemas|a2ui-v09-profile|artifact-schema-compile-bounded|artifact-type-legacy-ids|bundle-maturity-gate|capability-example-root-layout|certification-floor-enforcement|chain-subchain-unsupported-refused|compensation-profile|core-manifest-and-extension-registry|discovery-canonical-family-no-shadow|edge-condition-truthy-falsy|effect-identity-composition|effect-identity-cross-scope|error-envelope-canonical-shape|event-codemap-complete|form-content-packs|locale-key-grammar|multi-region-effect-vocabulary|node-pack-mcp-server-record|normative-example-extraction|openapi-asyncapi-sdk-parity|openapi-security-declared|pack-manifest-extensions|protocol-version-grammar|registry-declarative-kinds|removal-dates-minor|rfc-0147-self-audit|rfc-lifecycle-coherence|semantic-digest-v2|spec-corpus-validity|spec-section-citations|tool-descriptor-annotations|tool-result-trust-monotone|ui-plugin-fixtures|v1-webhook-rotation-contract|v1-webhook-unregister-contract|v2-ai-envelope-shape-static|v2-alias-covers-reword|v2-artifact-created-static|v2-bundle-signature-attributable|v2-bundle-witness-preimage|v2-colocated-companion|v2-conversation-payload-mirrors|v2-corpus-tag-pinned|v2-declaration-parity|v2-envelope-catalog|v2-envelope-tier-one-universal-static|v2-envelope-variant-discriminator-static|v2-eos-clock|v2-error-registry-prose-parity|v2-event-naming-rule|v2-events-channel-parity|v2-export-bundle-static|v2-externally-gated-never-stable|v2-facet-advertisement|v2-front-door-counts|v2-id-kinds-bound|v2-interop-map-coherent|v2-lane-exp-only-schema|v2-media-inline-cap-static|v2-normative-home-gate|v2-one-signing-scheme|v2-path-parity|v2-provider-usage-payload-static|v2-push-credential-coherent|v2-release-identity|v2-req-only-assertions|v2-retention-floors|v2-retirement-gate|v2-seams-not-in-canonical|v2-security-defaults-table|v2-self-hosted-runner-frames-static|v2-spec-artifacts-digest|v2-surface-monotone-gate|v2-threat-model-template|v2-umbrella-alias-covered|v2-umbrella-child-parts|v2-umbrella-codemod-at-active|v2-umbrella-codemod-legs|v2-umbrella-migration-deprecation|v2-witness-required|versioned-composition-profiles|wasm-fixture-packs|workflow-chain-internal-flag|workload-identity-profile)\\.)(requirement|it|scenario|floor|profile|family)\\.[a-z0-9]",
|
|
269
|
+
"pattern": "^openwop\\.(?!it\\.(?:a2a-parts-schemas|a2ui-v09-profile|artifact-schema-compile-bounded|artifact-type-legacy-ids|bundle-maturity-gate|capability-example-root-layout|certification-floor-enforcement|chain-subchain-unsupported-refused|compensation-profile|core-manifest-and-extension-registry|discovery-canonical-family-no-shadow|edge-condition-truthy-falsy|effect-identity-composition|effect-identity-cross-scope|error-envelope-canonical-shape|event-codemap-complete|form-content-packs|frontend-plugin-schemas|locale-key-grammar|multi-region-effect-vocabulary|node-pack-mcp-server-record|normative-example-extraction|openapi-asyncapi-sdk-parity|openapi-security-declared|pack-manifest-extensions|protocol-version-grammar|registry-declarative-kinds|removal-dates-minor|rfc-0147-self-audit|rfc-lifecycle-coherence|semantic-digest-v2|spec-corpus-validity|spec-section-citations|tool-descriptor-annotations|tool-result-trust-monotone|ui-plugin-fixtures|v1-webhook-rotation-contract|v1-webhook-unregister-contract|v2-ai-envelope-shape-static|v2-alias-covers-reword|v2-artifact-created-static|v2-bundle-signature-attributable|v2-bundle-witness-preimage|v2-colocated-companion|v2-conversation-payload-mirrors|v2-corpus-tag-pinned|v2-declaration-parity|v2-envelope-catalog|v2-envelope-tier-one-universal-static|v2-envelope-variant-discriminator-static|v2-eos-clock|v2-error-registry-prose-parity|v2-event-naming-rule|v2-events-channel-parity|v2-export-bundle-static|v2-externally-gated-never-stable|v2-facet-advertisement|v2-front-door-counts|v2-id-kinds-bound|v2-interop-map-coherent|v2-lane-exp-only-schema|v2-media-inline-cap-static|v2-normative-home-gate|v2-one-signing-scheme|v2-path-parity|v2-provider-usage-payload-static|v2-push-credential-coherent|v2-release-identity|v2-req-only-assertions|v2-retention-floors|v2-retirement-gate|v2-seams-not-in-canonical|v2-security-defaults-table|v2-self-hosted-runner-frames-static|v2-spec-artifacts-digest|v2-surface-monotone-gate|v2-threat-model-template|v2-umbrella-alias-covered|v2-umbrella-child-parts|v2-umbrella-codemod-at-active|v2-umbrella-codemod-legs|v2-umbrella-migration-deprecation|v2-witness-required|versioned-composition-profiles|wasm-fixture-packs|workflow-chain-internal-flag|workload-identity-profile)\\.)(requirement|it|scenario|floor|profile|family)\\.[a-z0-9]",
|
|
270
270
|
"description": "RFC 0168 §A.1 — `openwop.<area>.<slug>`. The suite mints six areas: `requirement` (an explicit `req()` id), `it` (a per-test id from the scenario file and title), `scenario` and `floor` (per-file rows), `profile` (a claimed-profile row) and `family` (a capability gate). The lookahead refuses every id minted from a corpus-coherence file: those run in the spec repo’s CI and MUST NOT appear in a host bundle (conformance.md §\"Two products, two ledgers\"; RFC 0168 §D.1). `scripts/check-req-only.mjs` fails when the list drifts from `conformance/src/coherence/`."
|
|
271
271
|
},
|
|
272
272
|
"scenario": {
|
|
@@ -64,6 +64,48 @@
|
|
|
64
64
|
}
|
|
65
65
|
}
|
|
66
66
|
}
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
"if": {
|
|
70
|
+
"properties": {
|
|
71
|
+
"type": {
|
|
72
|
+
"const": "host-test.durable-triggered"
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
},
|
|
76
|
+
"then": {
|
|
77
|
+
"properties": {
|
|
78
|
+
"delivery": {
|
|
79
|
+
"const": "durable"
|
|
80
|
+
},
|
|
81
|
+
"payload": {
|
|
82
|
+
"type": "object",
|
|
83
|
+
"maxProperties": 0,
|
|
84
|
+
"description": "RFC 0241 §A: a caller-triggered test event (`emitTestHostEvent`) carries no payload."
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
"if": {
|
|
91
|
+
"properties": {
|
|
92
|
+
"type": {
|
|
93
|
+
"const": "host-test.ephemeral-triggered"
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
},
|
|
97
|
+
"then": {
|
|
98
|
+
"properties": {
|
|
99
|
+
"delivery": {
|
|
100
|
+
"const": "ephemeral"
|
|
101
|
+
},
|
|
102
|
+
"payload": {
|
|
103
|
+
"type": "object",
|
|
104
|
+
"maxProperties": 0,
|
|
105
|
+
"description": "RFC 0241 §A: a caller-triggered test event (`emitTestHostEvent`) carries no payload."
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
67
109
|
}
|
|
68
110
|
],
|
|
69
111
|
"examples": [
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"provenance": {
|
|
5
5
|
"suite": {
|
|
6
6
|
"package": "@openwop/openwop-conformance",
|
|
7
|
-
"version": "2.45.
|
|
7
|
+
"version": "2.45.26"
|
|
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": "
|
|
429
|
+
"digest": "570f4623243cb5d4fb8554fb638a63db1db76b71ca87e7efc32ccd2988df7928"
|
|
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-
|
|
4
|
+
"updated": "2026-10-08",
|
|
5
5
|
"witnessClasses": [
|
|
6
6
|
"witnessable-unaided",
|
|
7
7
|
"witnessable-gated",
|
|
@@ -14300,8 +14300,8 @@
|
|
|
14300
14300
|
"surface": "No host installs `conformance-nondeterminism` or lists `nondeterminismPolicy.sources`.",
|
|
14301
14301
|
"witness": "unclassified",
|
|
14302
14302
|
"requirementId": null,
|
|
14303
|
-
"disposition": "
|
|
14304
|
-
"target":
|
|
14303
|
+
"disposition": "closed",
|
|
14304
|
+
"target": null,
|
|
14305
14305
|
"sources": [
|
|
14306
14306
|
{
|
|
14307
14307
|
"file": "RFCS/registers/0237-nondeterminism-sources.gaps.md",
|
|
@@ -14317,8 +14317,8 @@
|
|
|
14317
14317
|
"surface": "No host bundle records the two `openwop.requirement.0237.*` ids yet; the legs shipped in suite 2.45.23.",
|
|
14318
14318
|
"witness": "unclassified",
|
|
14319
14319
|
"requirementId": null,
|
|
14320
|
-
"disposition": "
|
|
14321
|
-
"target":
|
|
14320
|
+
"disposition": "closed",
|
|
14321
|
+
"target": null,
|
|
14322
14322
|
"sources": [
|
|
14323
14323
|
{
|
|
14324
14324
|
"file": "RFCS/registers/0237-nondeterminism-sources.gaps.md",
|
|
@@ -14351,8 +14351,8 @@
|
|
|
14351
14351
|
"surface": "No host serves the frame document or the dispatch operation at the normative paths, so none of the §F rows has a witness. openwop-app dispatches at a vendor path and mounts frames by `srcdoc`.",
|
|
14352
14352
|
"witness": "unclassified",
|
|
14353
14353
|
"requirementId": null,
|
|
14354
|
-
"disposition": "
|
|
14355
|
-
"target":
|
|
14354
|
+
"disposition": "closed",
|
|
14355
|
+
"target": null,
|
|
14356
14356
|
"sources": [
|
|
14357
14357
|
{
|
|
14358
14358
|
"file": "RFCS/registers/0238-ui-plugin-observation-path.gaps.md",
|
|
@@ -14385,8 +14385,8 @@
|
|
|
14385
14385
|
"surface": "The always-on schema legs of `frontend-plugin-packs.test.ts` read only the corpus but run in a major-1 host bundle.",
|
|
14386
14386
|
"witness": "unclassified",
|
|
14387
14387
|
"requirementId": null,
|
|
14388
|
-
"disposition": "
|
|
14389
|
-
"target":
|
|
14388
|
+
"disposition": "closed",
|
|
14389
|
+
"target": null,
|
|
14390
14390
|
"sources": [
|
|
14391
14391
|
{
|
|
14392
14392
|
"file": "RFCS/registers/0238-ui-plugin-observation-path.gaps.md",
|
|
@@ -14402,8 +14402,8 @@
|
|
|
14402
14402
|
"surface": "No host advertises `multiPartyConversation` together with the §E fixture, so none of the §F rows has a witness.",
|
|
14403
14403
|
"witness": "unclassified",
|
|
14404
14404
|
"requirementId": null,
|
|
14405
|
-
"disposition": "
|
|
14406
|
-
"target":
|
|
14405
|
+
"disposition": "closed",
|
|
14406
|
+
"target": null,
|
|
14407
14407
|
"sources": [
|
|
14408
14408
|
{
|
|
14409
14409
|
"file": "RFCS/registers/0239-council-roster-input.gaps.md",
|
|
@@ -14428,6 +14428,40 @@
|
|
|
14428
14428
|
}
|
|
14429
14429
|
]
|
|
14430
14430
|
},
|
|
14431
|
+
{
|
|
14432
|
+
"id": "openwop.gap.0241.1",
|
|
14433
|
+
"rfc": "0241",
|
|
14434
|
+
"local": "G1",
|
|
14435
|
+
"section": "§B, §D",
|
|
14436
|
+
"surface": "No host serves `POST /host/events/test` or lists the §A types, so no production host can witness RFC 0236's event-causing legs.",
|
|
14437
|
+
"witness": "unclassified",
|
|
14438
|
+
"requirementId": null,
|
|
14439
|
+
"disposition": "externally-gated",
|
|
14440
|
+
"target": "host-event-test-trigger-host",
|
|
14441
|
+
"sources": [
|
|
14442
|
+
{
|
|
14443
|
+
"file": "RFCS/registers/0241-host-event-test-trigger.gaps.md",
|
|
14444
|
+
"token": "G1"
|
|
14445
|
+
}
|
|
14446
|
+
]
|
|
14447
|
+
},
|
|
14448
|
+
{
|
|
14449
|
+
"id": "openwop.gap.0241.2",
|
|
14450
|
+
"rfc": "0241",
|
|
14451
|
+
"local": "G2",
|
|
14452
|
+
"section": "§D",
|
|
14453
|
+
"surface": "No host bundle records the six `openwop.requirement.0236.*` ids with §B as the cause.",
|
|
14454
|
+
"witness": "unclassified",
|
|
14455
|
+
"requirementId": null,
|
|
14456
|
+
"disposition": "carried",
|
|
14457
|
+
"target": "openwop.gap.0241.2",
|
|
14458
|
+
"sources": [
|
|
14459
|
+
{
|
|
14460
|
+
"file": "RFCS/registers/0241-host-event-test-trigger.gaps.md",
|
|
14461
|
+
"token": "G2"
|
|
14462
|
+
}
|
|
14463
|
+
]
|
|
14464
|
+
},
|
|
14431
14465
|
{
|
|
14432
14466
|
"id": "openwop.gap.spec.a2a-integration.g1",
|
|
14433
14467
|
"rfc": "0152",
|
package/spec/v2/core/events.md
CHANGED
|
@@ -32,7 +32,7 @@ A run is its append-only event log. Every snapshot, stream, poll, fork and diff
|
|
|
32
32
|
^(?!openwop\.)[a-z][a-z0-9]*(-[a-z0-9]+)*\.[a-z][a-z0-9]*(-[a-z0-9]+)*(\.[a-z][a-z0-9]*(-[a-z0-9]+)*)?$
|
|
33
33
|
```
|
|
34
34
|
|
|
35
|
-
- **Naming.** A protocol type is `domain.verb-ed`: kebab-case, exactly two segments, past tense for a transition (`run.started`, `node.suspend-failed
|
|
35
|
+
- **Naming.** A protocol type is `domain.verb-ed`: kebab-case, exactly two segments, past tense for a transition (`run.started`, `node.suspend-failed`). `domain.noun` is permitted only for an emitted artifact (`output.chunk`, `channel.presence`); each exception is recorded in the codemap.
|
|
36
36
|
- **Reserved prefix.** `openwop.` is the only reserved prefix. `core.`, `community.`, `vendor.`, `private.` and `local.` are pack namespaces, not event namespaces; a type under them is invalid.
|
|
37
37
|
- **Vendor events.** A vendor type's first segment MUST be an org registered in the `extensions` object of `spec/v2/declaration.json` (the org registry, not the `extensions` metadata key a host publishes in discovery). An unregistered org fails validation. An org in `reservedOrgs` is forbidden and never registered. `extensionsKeyPattern` is the shape a vendor type must have, not a permission to use it. `example` is held by the protocol for documentation and conformance and is never assignable to a vendor.
|
|
38
38
|
- **Growth.** The registry grows by the closed-enum rule in [overview.md](overview.md) §0. A producer MUST NOT emit an unregistered protocol type. A consumer MUST accept an unknown registered member and MUST NOT act on it.
|
|
@@ -127,10 +127,11 @@ With `bufferMs` (0..5000) the host accumulates events into one `event: batch` fr
|
|
|
127
127
|
|
|
128
128
|
#### `hostEvents`
|
|
129
129
|
|
|
130
|
-
A host event
|
|
130
|
+
A host event's envelope (`schemas/v2/host-event.schema.json`) has no `runId` or `sequence`. `hostEvents.types[]` lists each emitted type with its `delivery` class. A host advertising it:
|
|
131
131
|
|
|
132
132
|
- MUST deliver each listed type here, `event:` being the type and `data:` the envelope, and MUST emit no other type or class;
|
|
133
|
-
- MUST confine an event naming a `workspaceId` to that workspace, and an ephemeral event to subscribers it is visible to
|
|
133
|
+
- MUST confine an event naming a `workspaceId` to that workspace, and an ephemeral event to subscribers it is visible to;
|
|
134
|
+
- MUST emit each listed `host-test.*` type, only through `emitTestHostEvent`, to the caller's tenant.
|
|
134
135
|
|
|
135
136
|
An ephemeral event MUST NOT be persisted, redelivered on reconnection, or sent through webhooks, A2A push or any sink; its frame has no `id:`. A durable event's `id:` is its `eventId`, and a host SHOULD honour `Last-Event-ID` for it within retention. A vendor payload MUST NOT carry secrets.
|
|
136
137
|
|
package/spec/v2/core/headers.md
CHANGED
|
@@ -13,13 +13,13 @@ Standard headers keep their standard names: `Idempotency-Key`, `ETag`, `If-None-
|
|
|
13
13
|
| Header | Operations | Meaning |
|
|
14
14
|
| --- | --- | --- |
|
|
15
15
|
| `Accept-Language` | 1 | BCP-47 preference list; authoritative for locale selection (i18n.md). A malformed value MUST NOT produce a 400. |
|
|
16
|
-
| `Idempotency-Key` |
|
|
16
|
+
| `Idempotency-Key` | 16 | Per-mutation idempotency token (`idempotency.md` Layer 1). The server caches `(tenantId, endpoint, key)` → response for ≥24h. A duplicate request returns the cached response with `OpenWOP-Idempotent-Replay: true`. |
|
|
17
17
|
| `If-None-Match` | 2 | Conditional request on the discovery document (capabilities.md §1) and the run snapshot (runs.md §Snapshot). A value that matches the current `ETag` (runs.md §Caching and encoding) MUST yield `304 Not Modified` with no body. The 304 carries `OpenWOP-Version` like every response (versioning.md §1.4). |
|
|
18
18
|
| `Last-Event-ID` | 1 | Resume from sequence after this ID. |
|
|
19
|
-
| `OpenWOP-Client-Version` |
|
|
19
|
+
| `OpenWOP-Client-Version` | 61 | The protocol version the client implements (versioning.md §1.5). Compared with `minClientVersion` on major.minor. A malformed value is treated as absent and MUST NOT produce a 400. Never selects a contract. |
|
|
20
20
|
| `OpenWOP-Dedup` | 1 | When set, the host's cross-host claim system rejects a duplicate `(tenantId, scopeId)` pair with `409 Conflict`. |
|
|
21
21
|
| `OpenWOP-Force-Engine-Version` | 1 | Test keys only. The server emits this run's events as if it ran the given engine version, which must be within `Capabilities.testing.forceEngineVersionRange`. Servers MUST reject it on production API keys with `403 force_engine_version_forbidden`. |
|
|
22
|
-
| `OpenWOP-Version` |
|
|
22
|
+
| `OpenWOP-Version` | 61 | Selects one of the host's listed major.minor versions. Absent, `/.well-known/openwop` uses `preferredVersion` and every other unversioned path is v2; an unlisted value is 406 protocol_version_unsupported. |
|
|
23
23
|
|
|
24
24
|
## Cross-origin preflight
|
|
25
25
|
|
|
@@ -36,9 +36,9 @@ A host that answers a CORS preflight for an operation by granting the requesting
|
|
|
36
36
|
| `ETag` | 3 | Standard HTTP validator (RFC 9110 §8.8.3). The obligation is per operation: MUST on the discovery document (capabilities.md §1), SHOULD on the run snapshot (runs.md §Snapshot), a content hash on a prompt template (getPromptTemplate); see each operation. |
|
|
37
37
|
| `Location` | 1 | Canonical URI of the new template. |
|
|
38
38
|
| `OpenWOP-Idempotent-Replay` | 1 | Set when the response was served from the idempotency cache. |
|
|
39
|
-
| `OpenWOP-Version` |
|
|
40
|
-
| `Retry-After` |
|
|
41
|
-
| `WWW-Authenticate` |
|
|
39
|
+
| `OpenWOP-Version` | 61 | The contract that produced this response. It MUST equal the one used. |
|
|
40
|
+
| `Retry-After` | 2 | Seconds until the active claim is stale-eligible. |
|
|
41
|
+
| `WWW-Authenticate` | 54 | A `Bearer` challenge. On a host with an oauth2 or oidc lane it carries `resource_metadata` and `error="invalid_token"`. Never sent on a non-disclosure 404. |
|
|
42
42
|
|
|
43
43
|
## Webhook delivery headers
|
|
44
44
|
|
|
@@ -240,6 +240,18 @@
|
|
|
240
240
|
"authenticated": true,
|
|
241
241
|
"requestBody": false
|
|
242
242
|
},
|
|
243
|
+
{
|
|
244
|
+
"method": "POST",
|
|
245
|
+
"path": "/host/events/test",
|
|
246
|
+
"operationId": "emitTestHostEvent",
|
|
247
|
+
"requestHeaders": [
|
|
248
|
+
"Idempotency-Key",
|
|
249
|
+
"OpenWOP-Client-Version",
|
|
250
|
+
"OpenWOP-Version"
|
|
251
|
+
],
|
|
252
|
+
"authenticated": true,
|
|
253
|
+
"requestBody": true
|
|
254
|
+
},
|
|
243
255
|
{
|
|
244
256
|
"method": "GET",
|
|
245
257
|
"path": "/host/ui-plugins/{packName}/{pluginId}/frame",
|
|
@@ -699,7 +711,7 @@
|
|
|
699
711
|
}
|
|
700
712
|
],
|
|
701
713
|
"counts": {
|
|
702
|
-
"operations":
|
|
714
|
+
"operations": 61,
|
|
703
715
|
"channels": 2
|
|
704
716
|
}
|
|
705
717
|
}
|
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.45.
|
|
4
|
-
"corpusTag": "v2.45.
|
|
5
|
-
"updated": "2026-10-
|
|
3
|
+
"version": "2.45.26",
|
|
4
|
+
"corpusTag": "v2.45.26",
|
|
5
|
+
"updated": "2026-10-08"
|
|
6
6
|
}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"schemas/v2/**/*.json",
|
|
5
5
|
"spec/v2/path-manifest.json"
|
|
6
6
|
],
|
|
7
|
-
"release": "2.45.
|
|
7
|
+
"release": "2.45.26",
|
|
8
8
|
"kinds": {
|
|
9
9
|
"union": [
|
|
10
10
|
"channel",
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
"type"
|
|
19
19
|
]
|
|
20
20
|
},
|
|
21
|
-
"count":
|
|
21
|
+
"count": 8761,
|
|
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\"",
|
|
@@ -8762,6 +8762,7 @@
|
|
|
8762
8762
|
"spec/v2/path-manifest.json#|operation|GET /workflows/{workflowId}",
|
|
8763
8763
|
"spec/v2/path-manifest.json#|operation|POST /agents/{agentId}/deployments",
|
|
8764
8764
|
"spec/v2/path-manifest.json#|operation|POST /content/pages",
|
|
8765
|
+
"spec/v2/path-manifest.json#|operation|POST /host/events/test",
|
|
8765
8766
|
"spec/v2/path-manifest.json#|operation|POST /host/ui-plugins/{packName}/{pluginId}/rpc",
|
|
8766
8767
|
"spec/v2/path-manifest.json#|operation|POST /interrupts/{token}",
|
|
8767
8768
|
"spec/v2/path-manifest.json#|operation|POST /prompts",
|