@openwop/spec-artifacts 2.35.1 → 2.36.1

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.
Files changed (101) hide show
  1. package/CORPUS-STAMP.json +103 -89
  2. package/api/openapi.yaml +325 -4
  3. package/api/seams-v2.yaml +342 -1
  4. package/api/v2/asyncapi.yaml +1 -1
  5. package/api/v2/openapi.yaml +564 -8
  6. package/package.json +1 -1
  7. package/schemas/a2a-task-state.schema.json +3 -3
  8. package/schemas/artifact-type-pack-manifest.schema.json +3 -3
  9. package/schemas/capabilities.schema.json +34 -1
  10. package/schemas/connection-pack-manifest.schema.json +14 -0
  11. package/schemas/debug-bundle.schema.json +20 -0
  12. package/schemas/dispatch-config.schema.json +1 -1
  13. package/schemas/localized-content-language-settings.schema.json +3 -3
  14. package/schemas/localized-content-page.schema.json +2 -2
  15. package/schemas/localized-content-section.schema.json +3 -3
  16. package/schemas/run-event-payloads.schema.json +4 -2
  17. package/schemas/suspend-request.schema.json +61 -4
  18. package/schemas/v2/a2a-task-state.schema.json +10 -9
  19. package/schemas/v2/agent-deployment-transition.schema.json +4 -4
  20. package/schemas/v2/agent-deployment.schema.json +7 -7
  21. package/schemas/v2/agent-eval-suite.schema.json +10 -10
  22. package/schemas/v2/agent-inventory-response.schema.json +8 -2
  23. package/schemas/v2/artifact-type-pack-manifest.schema.json +3 -3
  24. package/schemas/v2/artifact.schema.json +84 -0
  25. package/schemas/v2/capabilities.schema.json +82 -8
  26. package/schemas/v2/certification-bundle.schema.json +1 -1
  27. package/schemas/v2/channel-presence-payload.schema.json +3 -3
  28. package/schemas/v2/connection-pack-manifest.schema.json +14 -0
  29. package/schemas/v2/conversation-event.schema.json +9 -2
  30. package/schemas/v2/conversation-turn.schema.json +19 -12
  31. package/schemas/v2/dispatch-config.schema.json +1 -1
  32. package/schemas/v2/envelopes/ui.a2ui-surface.schema.json +920 -22
  33. package/schemas/v2/error-envelope.schema.json +11 -1
  34. package/schemas/v2/eval-summary.schema.json +1 -2
  35. package/schemas/v2/goal.schema.json +4 -4
  36. package/schemas/v2/localized-content-language-settings.schema.json +3 -3
  37. package/schemas/v2/localized-content-page.schema.json +2 -2
  38. package/schemas/v2/localized-content-section.schema.json +3 -3
  39. package/schemas/v2/node-pack-manifest.schema.json +105 -0
  40. package/schemas/v2/part.schema.json +81 -0
  41. package/schemas/v2/proposal.schema.json +6 -6
  42. package/schemas/v2/run-event-payloads.schema.json +5 -3
  43. package/schemas/v2/self-hosted-runner-dispatch-frame.schema.json +2 -2
  44. package/schemas/v2/self-hosted-runner-result-frame.schema.json +1 -1
  45. package/schemas/v2/suspend-request.schema.json +251 -6
  46. package/schemas/v2/tool-descriptor.schema.json +246 -2
  47. package/schemas/v2/trigger-event.schema.json +1 -2
  48. package/schemas/v2/trigger-subscription.schema.json +1 -2
  49. package/schemas/v2/webhook-verification.schema.json +22 -0
  50. package/schemas/v2/workflow-definition.schema.json +25 -25
  51. package/spec/v1/alias-detectors.json +13 -1
  52. package/spec/v1/core-standard-manifest.json +2 -2
  53. package/spec/v1/deprecations.json +45 -1
  54. package/spec/v1/deprecations.schema.json +119 -4
  55. package/spec/v1/gaps.json +1925 -4
  56. package/spec/v2/README.md +5 -2
  57. package/spec/v2/core/capabilities.md +13 -26
  58. package/spec/v2/core/conformance.md +5 -8
  59. package/spec/v2/core/connection-packs.md +1 -1
  60. package/spec/v2/core/conversation.md +1 -1
  61. package/spec/v2/core/errors.md +8 -3
  62. package/spec/v2/core/events.md +8 -20
  63. package/spec/v2/core/form-content-packs.md +2 -2
  64. package/spec/v2/core/headers.md +5 -4
  65. package/spec/v2/core/host-services.md +6 -2
  66. package/spec/v2/core/idempotency.md +1 -1
  67. package/spec/v2/core/identity.md +23 -12
  68. package/spec/v2/core/interop.md +34 -4
  69. package/spec/v2/core/interrupt.md +6 -3
  70. package/spec/v2/core/node-pack-runtimes.md +20 -0
  71. package/spec/v2/core/oauth.md +32 -0
  72. package/spec/v2/core/overview.md +19 -6
  73. package/spec/v2/core/packs.md +4 -6
  74. package/spec/v2/core/persistence.md +20 -55
  75. package/spec/v2/core/replay.md +5 -11
  76. package/spec/v2/core/runs.md +9 -8
  77. package/spec/v2/core/security-defaults.md +18 -20
  78. package/spec/v2/core/tool-catalog.md +22 -0
  79. package/spec/v2/core/versioning.md +10 -28
  80. package/spec/v2/core/webhooks.md +16 -4
  81. package/spec/v2/core/workflow-chain-packs.md +1 -1
  82. package/spec/v2/corrections.json +32 -0
  83. package/spec/v2/corrections.schema.json +49 -0
  84. package/spec/v2/declaration.json +18 -13
  85. package/spec/v2/declaration.schema.json +3 -1
  86. package/spec/v2/errors.json +46 -1
  87. package/spec/v2/ext/a2uiSurface/README.md +131 -17
  88. package/spec/v2/ext/dataIntegration/README.md +5 -0
  89. package/spec/v2/facets/a2a.schema.json +4 -0
  90. package/spec/v2/facets/auth.schema.json +24 -0
  91. package/spec/v2/facets/mcp.schema.json +4 -0
  92. package/spec/v2/facets/oauth.schema.json +70 -0
  93. package/spec/v2/facets/webhooks.schema.json +23 -2
  94. package/spec/v2/id-field-bindings.json +2 -0
  95. package/spec/v2/interop-map.json +639 -0
  96. package/spec/v2/interop-map.schema.json +458 -0
  97. package/spec/v2/migrations.json +7 -0
  98. package/spec/v2/migrations.schema.json +58 -0
  99. package/spec/v2/path-manifest.json +6 -1
  100. package/spec/v2/release.json +3 -3
  101. package/spec/v2/surface-baseline.json +7981 -0
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.35.0
4
+ version: 2.36.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
@@ -32,6 +32,13 @@ paths:
32
32
 
33
33
  '
34
34
  operationId: getA2ATaskState
35
+ security:
36
+ - ApiKeyAuth:
37
+ - runs:read
38
+ - OAuth2:
39
+ - runs:read
40
+ - OpenIdConnect:
41
+ - runs:read
35
42
  parameters:
36
43
  - name: taskId
37
44
  in: path
@@ -72,6 +79,13 @@ paths:
72
79
 
73
80
  '
74
81
  operationId: listWorkspaceFiles
82
+ security:
83
+ - ApiKeyAuth:
84
+ - workspace:read
85
+ - OAuth2:
86
+ - workspace:read
87
+ - OpenIdConnect:
88
+ - workspace:read
75
89
  parameters:
76
90
  - $ref: '#/components/parameters/WorkspacePrefix'
77
91
  responses:
@@ -112,6 +126,13 @@ paths:
112
126
 
113
127
  '
114
128
  operationId: getWorkspaceFile
129
+ security:
130
+ - ApiKeyAuth:
131
+ - workspace:read
132
+ - OAuth2:
133
+ - workspace:read
134
+ - OpenIdConnect:
135
+ - workspace:read
115
136
  parameters:
116
137
  - $ref: '#/components/parameters/WorkspacePath'
117
138
  - $ref: '#/components/parameters/WorkspaceVersion'
@@ -152,6 +173,13 @@ paths:
152
173
 
153
174
  '
154
175
  operationId: putWorkspaceFile
176
+ security:
177
+ - ApiKeyAuth:
178
+ - workspace:write
179
+ - OAuth2:
180
+ - workspace:write
181
+ - OpenIdConnect:
182
+ - workspace:write
155
183
  parameters:
156
184
  - $ref: '#/components/parameters/WorkspacePath'
157
185
  - $ref: '#/components/parameters/IfMatch'
@@ -203,6 +231,13 @@ paths:
203
231
 
204
232
  '
205
233
  operationId: deleteWorkspaceFile
234
+ security:
235
+ - ApiKeyAuth:
236
+ - workspace:write
237
+ - OAuth2:
238
+ - workspace:write
239
+ - OpenIdConnect:
240
+ - workspace:write
206
241
  parameters:
207
242
  - $ref: '#/components/parameters/WorkspacePath'
208
243
  - $ref: '#/components/parameters/IdempotencyKey'
@@ -259,6 +294,13 @@ paths:
259
294
 
260
295
  '
261
296
  operationId: putTestPackTarball
297
+ security:
298
+ - ApiKeyAuth:
299
+ - packs:publish
300
+ - OAuth2:
301
+ - packs:publish
302
+ - OpenIdConnect:
303
+ - packs:publish
262
304
  parameters:
263
305
  - in: header
264
306
  name: OpenWOP-Pack-Signing-Method
@@ -367,6 +409,13 @@ paths:
367
409
  path is registry-service surface (`registry-operations.md`), not defined in this host document (see the `packs-test`
368
410
  tag scope note).'
369
411
  operationId: getTestPackTarball
412
+ security:
413
+ - ApiKeyAuth:
414
+ - packs:read
415
+ - OAuth2:
416
+ - packs:read
417
+ - OpenIdConnect:
418
+ - packs:read
370
419
  responses:
371
420
  '200':
372
421
  description: Tarball bytes.
@@ -424,6 +473,13 @@ paths:
424
473
 
425
474
  '
426
475
  operationId: deleteTestPackVersion
476
+ security:
477
+ - ApiKeyAuth:
478
+ - packs:publish
479
+ - OAuth2:
480
+ - packs:publish
481
+ - OpenIdConnect:
482
+ - packs:publish
427
483
  responses:
428
484
  '204':
429
485
  description: Version successfully unpublished from the test catalog.
@@ -467,6 +523,13 @@ paths:
467
523
 
468
524
  '
469
525
  operationId: getTestPackSignature
526
+ security:
527
+ - ApiKeyAuth:
528
+ - packs:read
529
+ - OAuth2:
530
+ - packs:read
531
+ - OpenIdConnect:
532
+ - packs:read
470
533
  responses:
471
534
  '200':
472
535
  description: Signature blob.
@@ -733,6 +796,190 @@ paths:
733
796
  $ref: '#/components/responses/ValidationError'
734
797
  '401':
735
798
  $ref: '#/components/responses/Unauthenticated'
799
+ /conformance/seams/sample/a2ui/emit-surface:
800
+ post:
801
+ tags:
802
+ - Seams
803
+ operationId: emitA2uiSurface
804
+ summary: Admit one `ui.a2ui-surface` envelope into a run through the production envelope-admission path — RFC 0209 witness
805
+ description: 'A real `ui.a2ui-surface` envelope is emitted by a model inside a node turn, so the suite cannot choose
806
+ one from the canonical wire. This seam supplies the envelope ONLY. The host MUST admit it through its PRODUCTION envelope-admission
807
+ path — the envelope-kind catalog (`supportedEnvelopes`, `schemaVersions`, `envelopeStrictness`, events.md §"The envelope-kind
808
+ catalog"), validation against the ONE per-kind branch the schema version selects (never the `anyOf` union), the RFC
809
+ 0209 cross-field rules (every message `surfaceId` equals the payload `surfaceId`; a `createSurface.catalogId` equals
810
+ the payload `catalogId`), the surface-fold guard (spec/v2/ext/a2uiSurface/README.md §"The fold"), trust propagation
811
+ and SR-1 redaction — and MUST record it exactly as production would. It MUST NOT be a mock that records without those
812
+ rules. `envelope.nodeId`, when present, binds the surface to that node, so a surface emitted at a node suspended on
813
+ an `approval` interrupt is the surface whose `resume` action would resolve it (§"Trust": a tainted fold blocks that
814
+ interrupt). Refusals use the canonical error envelope: `422 unknown_schema_version` above the floor or under `strict`
815
+ below it, `422 envelope_invalid` for a payload that fails its branch, a cross-field rule or the fold guard, `422 unknown_envelope_kind`
816
+ when the host does not list the kind; `details` SHOULD name the rule. A host that has not wired the seam answers `404`/`405`,
817
+ and the scenario records `inapplicable`.'
818
+ requestBody:
819
+ required: true
820
+ content:
821
+ application/json:
822
+ schema:
823
+ type: object
824
+ additionalProperties: false
825
+ required:
826
+ - runId
827
+ - envelope
828
+ properties:
829
+ runId:
830
+ $ref: ../schemas/v2/ids.schema.json#/$defs/runId
831
+ envelope:
832
+ $ref: ../schemas/v2/ai-envelope.schema.json
833
+ description: A complete AI envelope whose `type` is `ui.a2ui-surface`; `schemaVersion` selects the payload
834
+ branch.
835
+ responses:
836
+ '201':
837
+ description: Admitted and recorded; `sequence` is the run event that records the envelope.
838
+ content:
839
+ application/json:
840
+ schema:
841
+ type: object
842
+ additionalProperties: false
843
+ required:
844
+ - sequence
845
+ properties:
846
+ sequence:
847
+ type: integer
848
+ minimum: 0
849
+ '400':
850
+ $ref: '#/components/responses/ValidationError'
851
+ '401':
852
+ $ref: '#/components/responses/Unauthenticated'
853
+ '404':
854
+ $ref: '#/components/responses/NotFound'
855
+ '422':
856
+ description: Refused by envelope admission (`unknown_schema_version`, `envelope_invalid`, `unknown_envelope_kind`).
857
+ content:
858
+ application/json:
859
+ schema:
860
+ $ref: '#/components/schemas/Error'
861
+ /conformance/seams/sample/oauth/authorize-start:
862
+ post:
863
+ tags:
864
+ - Seams
865
+ operationId: startOAuthAuthorization
866
+ summary: Begin an authorization-code grant for the caller through the production authorization-URL builder — RFC 0199
867
+ §A/§B witness
868
+ description: 'Points `provider` at the given endpoints (the suite''s authorization-server double) — a test-only provider
869
+ definition, or, with `connection`, the connection pack''s provider through the host''s PRODUCTION registration path,
870
+ which runs the RFC 0199 §B.3 discovery and pins its tuple — and then begins an authorization-code grant for the AUTHENTICATED
871
+ caller by calling the host''s PRODUCTION authorization-URL builder, returning the URL a user agent would be redirected
872
+ to. The builder MUST be the one production uses (PKCE S256, a fresh `state` bound to the caller''s Subject and the
873
+ provider, the provider''s fixed redirect URI, `iss` expectations, `resource` for an MCP reach); a seam that assembles
874
+ its own URL measures a stub, and a bundle citing it MUST say which. The grant completes on the host''s PRODUCTION
875
+ callback route, which the suite calls as the user agent. `redirectUri` is a probe: the host MUST ignore it (the redirect
876
+ URI is fixed per provider, oauth.md rule 5). A refused grant — an MCP-reach provider with no `issuer`, `pkce: "unsupported"`,
877
+ or discovered metadata that disagrees with the manifest or the pinned tuple — is `422 connection_auth_metadata_mismatch`
878
+ and no authorization URL is issued. A host that has not wired the seam answers `404`, and the scenarios record `blocked`.'
879
+ requestBody:
880
+ required: true
881
+ content:
882
+ application/json:
883
+ schema:
884
+ type: object
885
+ additionalProperties: false
886
+ required:
887
+ - provider
888
+ properties:
889
+ provider:
890
+ type: string
891
+ minLength: 1
892
+ description: An advertised `oauth.providers[].id`, or the `provider.id` of `connection`.
893
+ authUrl:
894
+ type: string
895
+ format: uri
896
+ tokenUrl:
897
+ type: string
898
+ format: uri
899
+ issuer:
900
+ type: string
901
+ format: uri
902
+ description: The provider's issuer identifier; absent ⇒ an issuer-less provider (provider-unique redirect
903
+ URI).
904
+ pkce:
905
+ type: string
906
+ enum:
907
+ - S256
908
+ - unsupported
909
+ scopes:
910
+ type: array
911
+ items:
912
+ type: string
913
+ minLength: 1
914
+ connection:
915
+ $ref: ../schemas/v2/connection-pack-manifest.schema.json
916
+ description: A connection pack whose provider is reached as an MCP server (RFC 0199 §B); registered through
917
+ the production path.
918
+ redirectUri:
919
+ type: string
920
+ description: A probe the host MUST ignore.
921
+ responses:
922
+ '201':
923
+ description: The authorization URL the user agent would be sent to.
924
+ content:
925
+ application/json:
926
+ schema:
927
+ type: object
928
+ additionalProperties: false
929
+ required:
930
+ - authorizationUrl
931
+ properties:
932
+ authorizationUrl:
933
+ type: string
934
+ format: uri
935
+ '400':
936
+ $ref: '#/components/responses/ValidationError'
937
+ '401':
938
+ $ref: '#/components/responses/Unauthenticated'
939
+ '404':
940
+ $ref: '#/components/responses/NotFound'
941
+ '422':
942
+ description: The grant is refused (`connection_auth_metadata_mismatch`, `oauth_provider_unsupported`); no authorization
943
+ URL is issued.
944
+ content:
945
+ application/json:
946
+ schema:
947
+ $ref: '#/components/schemas/Error'
948
+ /conformance/seams/sample/oauth/expire-refresh:
949
+ post:
950
+ tags:
951
+ - Seams
952
+ operationId: expireOAuthAccessToken
953
+ summary: Expire the caller's stored access token for a provider so its next use refreshes — RFC 0199 §C.2(b) / RFC 0047
954
+ §C.3 witness
955
+ description: 'Marks the access token of the caller''s stored credential for `provider` expired. Nothing else: the next
956
+ node that uses it refreshes through the host''s PRODUCTION refresh path against the provider''s token endpoint (the
957
+ suite''s double, which decides whether the refresh token is still good). A terminal refresh failure then follows oauth.md
958
+ §Token lifecycle — `connector.auth-expired`, and either the node fails `connector_auth_expired` or, under `oauth.credentialInterrupt`,
959
+ it suspends on a `credential` interrupt with `reason: "expired"`. `404` when the caller holds no credential for the
960
+ provider.'
961
+ requestBody:
962
+ required: true
963
+ content:
964
+ application/json:
965
+ schema:
966
+ type: object
967
+ additionalProperties: false
968
+ required:
969
+ - provider
970
+ properties:
971
+ provider:
972
+ type: string
973
+ minLength: 1
974
+ responses:
975
+ '204':
976
+ description: The access token is expired.
977
+ '400':
978
+ $ref: '#/components/responses/ValidationError'
979
+ '401':
980
+ $ref: '#/components/responses/Unauthenticated'
981
+ '404':
982
+ $ref: '#/components/responses/NotFound'
736
983
  components:
737
984
  securitySchemes:
738
985
  ApiKeyAuth:
@@ -749,6 +996,88 @@ components:
749
996
 
750
997
  See `auth.md`.
751
998
 
999
+ '
1000
+ OAuth2:
1001
+ type: oauth2
1002
+ description: 'RFC 0200 §F. OAuth 2.0 lanes — v1 `openwop-auth-oauth2-client-credentials`,
1003
+
1004
+ v2 `auth.lanes[].lane: "oauth2"`. Discovery is RFC 9728 Protected Resource
1005
+
1006
+ Metadata at the path-inserted well-known URI (`identity.md` §2.5).
1007
+
1008
+ Placeholder URLs.
1009
+
1010
+ '
1011
+ flows:
1012
+ clientCredentials:
1013
+ tokenUrl: https://issuer.example/oauth2/token
1014
+ scopes:
1015
+ manifest:read: Read workflow / canvas-type / endpoint manifests
1016
+ runs:create: Create new runs
1017
+ runs:read: Read run state and event stream
1018
+ runs:cancel: Cancel an in-flight run
1019
+ runs:annotate: Record a quality annotation on a run
1020
+ artifacts:read: Read artifacts produced by runs
1021
+ webhooks:manage: Register/unregister webhook subscriptions
1022
+ approvals:respond: Respond to HITL approval gates
1023
+ packs:publish: Publish node-pack versions
1024
+ packs:read: Fetch a published node-pack tarball or signature
1025
+ packs:yank: Yank a node-pack version
1026
+ packs:yank-revert: Reinstate a yanked node-pack version
1027
+ audit:read: Verify audit-log integrity
1028
+ workspace:read: Read agent-workspace files
1029
+ workspace:write: Write agent-workspace files
1030
+ prompts:read: Read and render prompt templates
1031
+ prompts:write: Create, update and delete prompt templates
1032
+ content:read: Read authored content pages and locale settings
1033
+ content:write: Create, publish and translate authored content pages
1034
+ deploy:*: Drive an agent deployment state transition
1035
+ authorizationCode:
1036
+ authorizationUrl: https://issuer.example/oauth2/authorize
1037
+ tokenUrl: https://issuer.example/oauth2/token
1038
+ scopes:
1039
+ manifest:read: Read workflow / canvas-type / endpoint manifests
1040
+ runs:create: Create new runs
1041
+ runs:read: Read run state and event stream
1042
+ runs:cancel: Cancel an in-flight run
1043
+ runs:annotate: Record a quality annotation on a run
1044
+ artifacts:read: Read artifacts produced by runs
1045
+ webhooks:manage: Register/unregister webhook subscriptions
1046
+ approvals:respond: Respond to HITL approval gates
1047
+ packs:publish: Publish node-pack versions
1048
+ packs:read: Fetch a published node-pack tarball or signature
1049
+ packs:yank: Yank a node-pack version
1050
+ packs:yank-revert: Reinstate a yanked node-pack version
1051
+ audit:read: Verify audit-log integrity
1052
+ workspace:read: Read agent-workspace files
1053
+ workspace:write: Write agent-workspace files
1054
+ prompts:read: Read and render prompt templates
1055
+ prompts:write: Create, update and delete prompt templates
1056
+ content:read: Read authored content pages and locale settings
1057
+ content:write: Create, publish and translate authored content pages
1058
+ deploy:*: Drive an agent deployment state transition
1059
+ OpenIdConnect:
1060
+ type: openIdConnect
1061
+ openIdConnectUrl: https://issuer.example/.well-known/openid-configuration
1062
+ description: 'RFC 0200 §F. v1 `openwop-auth-oidc-user-bearer` / v2 `auth.lanes[].lane: "oidc"`.
1063
+
1064
+ An ID token MAY be the bearer only when its `aud` equals the host''s configured
1065
+
1066
+ audience (`identity.md` §2.1); any other `aud` is `audience_mismatch`.
1067
+
1068
+ Placeholder URL.
1069
+
1070
+ '
1071
+ MutualTLS:
1072
+ type: mutualTLS
1073
+ description: 'RFC 0200 §F. v1 `openwop-auth-mtls` / v2 `auth.lanes[].lane: "mtls"`. In OpenWOP
1074
+
1075
+ mTLS is required *in addition to* a bearer, never instead of one, so it appears
1076
+
1077
+ in no canonical requirement below: a host that requires it adds `MutualTLS: []`
1078
+
1079
+ inside each requirement object (AND).
1080
+
752
1081
  '
753
1082
  parameters:
754
1083
  IdempotencyKey:
@@ -833,12 +1162,24 @@ components:
833
1162
  responses:
834
1163
  Unauthenticated:
835
1164
  description: Missing or invalid credential.
1165
+ headers:
1166
+ WWW-Authenticate:
1167
+ description: RFC 0200 §B — `Bearer` challenge; `resource_metadata` and `error="invalid_token"` on a host with an
1168
+ oauth2/oidc lane. Never on a non-disclosure 404.
1169
+ schema:
1170
+ type: string
836
1171
  content:
837
1172
  application/json:
838
1173
  schema:
839
1174
  $ref: '#/components/schemas/Error'
840
1175
  Forbidden:
841
1176
  description: Credential valid but lacks required scope or fails resource binding.
1177
+ headers:
1178
+ WWW-Authenticate:
1179
+ description: RFC 0200 §B — `error="insufficient_scope"` with every required `scope` on a scope refusal; absent on
1180
+ a resource-binding 403.
1181
+ schema:
1182
+ type: string
842
1183
  content:
843
1184
  application/json:
844
1185
  schema:
@@ -1,7 +1,7 @@
1
1
  asyncapi: 3.1.0
2
2
  info:
3
3
  title: OpenWOP v2 event streams
4
- version: 2.35.0
4
+ version: 2.36.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