@openwop/spec-artifacts 2.0.0-rc.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.
Files changed (229) hide show
  1. package/CORPUS-STAMP.json +234 -0
  2. package/LICENSE +201 -0
  3. package/README.md +7 -0
  4. package/api/.redocly.lint-ignore.yaml +22 -0
  5. package/api/asyncapi.yaml +834 -0
  6. package/api/grpc/openwop.proto +251 -0
  7. package/api/openapi.yaml +2693 -0
  8. package/api/redocly.yaml +23 -0
  9. package/api/seams-v2.yaml +680 -0
  10. package/api/v2/asyncapi.yaml +528 -0
  11. package/api/v2/openapi.yaml +3139 -0
  12. package/api/v2/redocly.yaml +16 -0
  13. package/package.json +10 -0
  14. package/schemas/README.md +144 -0
  15. package/schemas/a2a-task-state.schema.json +78 -0
  16. package/schemas/a2ui-surface-delta-frame.schema.json +48 -0
  17. package/schemas/agent-deployment-transition.schema.json +49 -0
  18. package/schemas/agent-deployment.schema.json +54 -0
  19. package/schemas/agent-eval-suite.schema.json +140 -0
  20. package/schemas/agent-inventory-response.schema.json +115 -0
  21. package/schemas/agent-manifest.schema.json +156 -0
  22. package/schemas/agent-org-chart.schema.json +82 -0
  23. package/schemas/agent-ref.schema.json +63 -0
  24. package/schemas/agent-roster-entry.schema.json +81 -0
  25. package/schemas/agent-roster-response.schema.json +21 -0
  26. package/schemas/ai-envelope.schema.json +134 -0
  27. package/schemas/annotation-create.schema.json +37 -0
  28. package/schemas/annotation.schema.json +56 -0
  29. package/schemas/artifact-type-pack-manifest.schema.json +244 -0
  30. package/schemas/audit-verify-result.schema.json +90 -0
  31. package/schemas/budget-policy.schema.json +18 -0
  32. package/schemas/capabilities.schema.json +4160 -0
  33. package/schemas/certification-bundle-v2.schema.json +118 -0
  34. package/schemas/channel-presence-payload.schema.json +41 -0
  35. package/schemas/channel-written-payload.schema.json +55 -0
  36. package/schemas/chat-card-pack-manifest.schema.json +253 -0
  37. package/schemas/compact-tool-descriptor.schema.json +51 -0
  38. package/schemas/compensation-policy.schema.json +64 -0
  39. package/schemas/conformance-certification-bundle.schema.json +86 -0
  40. package/schemas/connection-pack-manifest.schema.json +353 -0
  41. package/schemas/conversation-event.schema.json +168 -0
  42. package/schemas/conversation-turn.schema.json +117 -0
  43. package/schemas/core-conformance-mock-agent-config.schema.json +152 -0
  44. package/schemas/credential-provenance.schema.json +18 -0
  45. package/schemas/credential-reference.schema.json +21 -0
  46. package/schemas/debug-bundle.schema.json +196 -0
  47. package/schemas/dispatch-config.schema.json +112 -0
  48. package/schemas/envelopes/clarification.request.schema.json +52 -0
  49. package/schemas/envelopes/error.schema.json +30 -0
  50. package/schemas/envelopes/media.audio.schema.json +38 -0
  51. package/schemas/envelopes/media.file.schema.json +37 -0
  52. package/schemas/envelopes/media.image.schema.json +33 -0
  53. package/schemas/envelopes/schema.request.schema.json +26 -0
  54. package/schemas/envelopes/schema.response.schema.json +22 -0
  55. package/schemas/envelopes/ui.a2ui-surface.schema.json +154 -0
  56. package/schemas/error-envelope.schema.json +25 -0
  57. package/schemas/eval-summary.schema.json +92 -0
  58. package/schemas/export-bundle.schema.json +66 -0
  59. package/schemas/form-content-pack-manifest.schema.json +243 -0
  60. package/schemas/frontend-plugin-manifest.schema.json +109 -0
  61. package/schemas/goal.schema.json +104 -0
  62. package/schemas/heartbeat-evaluated.schema.json +14 -0
  63. package/schemas/heartbeat-state-changed.schema.json +14 -0
  64. package/schemas/localized-content-language-settings.schema.json +26 -0
  65. package/schemas/localized-content-page-response.schema.json +60 -0
  66. package/schemas/localized-content-page.schema.json +62 -0
  67. package/schemas/localized-content-section.schema.json +51 -0
  68. package/schemas/memory-entry.schema.json +36 -0
  69. package/schemas/memory-list-options.schema.json +37 -0
  70. package/schemas/node-pack-manifest.schema.json +654 -0
  71. package/schemas/orchestrator-decision.schema.json +90 -0
  72. package/schemas/org-chart-responsibility-view.schema.json +26 -0
  73. package/schemas/pack-lockfile.schema.json +108 -0
  74. package/schemas/prompt-kind.schema.json +8 -0
  75. package/schemas/prompt-pack-manifest.schema.json +117 -0
  76. package/schemas/prompt-ref.schema.json +40 -0
  77. package/schemas/prompt-template.schema.json +149 -0
  78. package/schemas/proposal.schema.json +84 -0
  79. package/schemas/registry-version-manifest.schema.json +208 -0
  80. package/schemas/residency.schema.json +16 -0
  81. package/schemas/run-ancestry-response.schema.json +54 -0
  82. package/schemas/run-diff-response.schema.json +64 -0
  83. package/schemas/run-event-payloads.schema.json +4452 -0
  84. package/schemas/run-event.schema.json +211 -0
  85. package/schemas/run-options.schema.json +80 -0
  86. package/schemas/run-orchestrator-decided-event.schema.json +20 -0
  87. package/schemas/run-snapshot.schema.json +148 -0
  88. package/schemas/security-advisory.schema.json +109 -0
  89. package/schemas/self-hosted-runner-dispatch-frame.schema.json +79 -0
  90. package/schemas/self-hosted-runner-registration.schema.json +53 -0
  91. package/schemas/self-hosted-runner-result-frame.schema.json +38 -0
  92. package/schemas/subject.schema.json +56 -0
  93. package/schemas/suspend-request.schema.json +207 -0
  94. package/schemas/tool-descriptor.schema.json +63 -0
  95. package/schemas/trigger-event.schema.json +222 -0
  96. package/schemas/trigger-subscription-registration.schema.json +67 -0
  97. package/schemas/trigger-subscription.schema.json +26 -0
  98. package/schemas/ui-plugin-message.schema.json +90 -0
  99. package/schemas/v2/a2a-task-state.schema.json +102 -0
  100. package/schemas/v2/a2ui-surface-delta-frame.schema.json +62 -0
  101. package/schemas/v2/agent-deployment-transition.schema.json +67 -0
  102. package/schemas/v2/agent-deployment.schema.json +68 -0
  103. package/schemas/v2/agent-eval-suite.schema.json +214 -0
  104. package/schemas/v2/agent-inventory-response.schema.json +172 -0
  105. package/schemas/v2/agent-manifest.schema.json +218 -0
  106. package/schemas/v2/agent-org-chart.schema.json +149 -0
  107. package/schemas/v2/agent-ref.schema.json +67 -0
  108. package/schemas/v2/agent-roster-entry.schema.json +104 -0
  109. package/schemas/v2/agent-roster-response.schema.json +27 -0
  110. package/schemas/v2/ai-envelope.schema.json +167 -0
  111. package/schemas/v2/annotation-create.schema.json +109 -0
  112. package/schemas/v2/annotation.schema.json +142 -0
  113. package/schemas/v2/artifact-type-pack-manifest.schema.json +245 -0
  114. package/schemas/v2/audit-verify-result.schema.json +110 -0
  115. package/schemas/v2/budget-policy.schema.json +61 -0
  116. package/schemas/v2/capabilities.schema.json +7644 -0
  117. package/schemas/v2/certification-bundle.schema.json +401 -0
  118. package/schemas/v2/channel-presence-payload.schema.json +60 -0
  119. package/schemas/v2/channel-written-payload.schema.json +64 -0
  120. package/schemas/v2/chat-card-pack-manifest.schema.json +254 -0
  121. package/schemas/v2/compact-tool-descriptor.schema.json +108 -0
  122. package/schemas/v2/compensation-policy.schema.json +91 -0
  123. package/schemas/v2/compensation-projection.schema.json +95 -0
  124. package/schemas/v2/configurable.schema.json +110 -0
  125. package/schemas/v2/connection-pack-manifest.schema.json +354 -0
  126. package/schemas/v2/conversation-event.schema.json +281 -0
  127. package/schemas/v2/conversation-turn.schema.json +165 -0
  128. package/schemas/v2/credential-provenance.schema.json +62 -0
  129. package/schemas/v2/credential-reference.schema.json +28 -0
  130. package/schemas/v2/debug-bundle.schema.json +312 -0
  131. package/schemas/v2/dispatch-config.schema.json +147 -0
  132. package/schemas/v2/effect-ledger-projection.schema.json +71 -0
  133. package/schemas/v2/effect-seam-manifest.schema.json +98 -0
  134. package/schemas/v2/envelopes/clarification.request.schema.json +59 -0
  135. package/schemas/v2/envelopes/error.schema.json +35 -0
  136. package/schemas/v2/envelopes/media.audio.schema.json +41 -0
  137. package/schemas/v2/envelopes/media.file.schema.json +40 -0
  138. package/schemas/v2/envelopes/media.image.schema.json +36 -0
  139. package/schemas/v2/envelopes/schema.request.schema.json +29 -0
  140. package/schemas/v2/envelopes/schema.response.schema.json +26 -0
  141. package/schemas/v2/envelopes/ui.a2ui-surface.schema.json +292 -0
  142. package/schemas/v2/error-envelope.schema.json +229 -0
  143. package/schemas/v2/eval-summary.schema.json +166 -0
  144. package/schemas/v2/export-bundle.schema.json +94 -0
  145. package/schemas/v2/form-content-pack-manifest.schema.json +241 -0
  146. package/schemas/v2/frontend-plugin-manifest.schema.json +152 -0
  147. package/schemas/v2/goal.schema.json +188 -0
  148. package/schemas/v2/heartbeat-evaluated.schema.json +34 -0
  149. package/schemas/v2/heartbeat-state-changed.schema.json +31 -0
  150. package/schemas/v2/ids.schema.json +31 -0
  151. package/schemas/v2/localized-content-language-settings.schema.json +34 -0
  152. package/schemas/v2/localized-content-page-response.schema.json +94 -0
  153. package/schemas/v2/localized-content-page.schema.json +87 -0
  154. package/schemas/v2/localized-content-section.schema.json +63 -0
  155. package/schemas/v2/memory-entry.schema.json +45 -0
  156. package/schemas/v2/memory-list-options.schema.json +41 -0
  157. package/schemas/v2/node-pack-manifest.schema.json +657 -0
  158. package/schemas/v2/orchestrator-decision.schema.json +120 -0
  159. package/schemas/v2/org-chart-responsibility-view.schema.json +36 -0
  160. package/schemas/v2/pack-lockfile.schema.json +139 -0
  161. package/schemas/v2/prompt-kind.schema.json +14 -0
  162. package/schemas/v2/prompt-pack-manifest.schema.json +118 -0
  163. package/schemas/v2/prompt-ref.schema.json +42 -0
  164. package/schemas/v2/prompt-template.schema.json +209 -0
  165. package/schemas/v2/proposal.schema.json +145 -0
  166. package/schemas/v2/registry-version-manifest.schema.json +292 -0
  167. package/schemas/v2/residency.schema.json +19 -0
  168. package/schemas/v2/run-ancestry-response.schema.json +68 -0
  169. package/schemas/v2/run-diff-response.schema.json +80 -0
  170. package/schemas/v2/run-event-payloads.schema.json +4588 -0
  171. package/schemas/v2/run-event.schema.json +324 -0
  172. package/schemas/v2/run-options.schema.json +90 -0
  173. package/schemas/v2/run-orchestrator-decided-event.schema.json +22 -0
  174. package/schemas/v2/run-snapshot.schema.json +207 -0
  175. package/schemas/v2/security-advisory.schema.json +138 -0
  176. package/schemas/v2/self-hosted-runner-dispatch-frame.schema.json +119 -0
  177. package/schemas/v2/self-hosted-runner-registration.schema.json +74 -0
  178. package/schemas/v2/self-hosted-runner-result-frame.schema.json +47 -0
  179. package/schemas/v2/subject-link.schema.json +69 -0
  180. package/schemas/v2/subject.schema.json +597 -0
  181. package/schemas/v2/suspend-request.schema.json +370 -0
  182. package/schemas/v2/tool-descriptor.schema.json +150 -0
  183. package/schemas/v2/trigger-event.schema.json +508 -0
  184. package/schemas/v2/trigger-subscription-registration.schema.json +99 -0
  185. package/schemas/v2/trigger-subscription.schema.json +79 -0
  186. package/schemas/v2/ui-plugin-message.schema.json +149 -0
  187. package/schemas/v2/workflow-chain-pack-manifest.schema.json +610 -0
  188. package/schemas/v2/workflow-definition.schema.json +864 -0
  189. package/schemas/v2/workload-identity.schema.json +115 -0
  190. package/schemas/v2/workspace-file-create.schema.json +23 -0
  191. package/schemas/v2/workspace-file.schema.json +45 -0
  192. package/schemas/workflow-chain-pack-manifest.schema.json +615 -0
  193. package/schemas/workflow-definition.schema.json +850 -0
  194. package/schemas/workload-identity.schema.json +79 -0
  195. package/schemas/workspace-file-create.schema.json +20 -0
  196. package/schemas/workspace-file.schema.json +39 -0
  197. package/spec/v1/alias-detectors.json +283 -0
  198. package/spec/v1/capability-declaration-classes.json +176 -0
  199. package/spec/v1/core-standard-manifest.json +423 -0
  200. package/spec/v1/deprecations.json +854 -0
  201. package/spec/v1/deprecations.schema.json +187 -0
  202. package/spec/v1/event-codemap.json +1089 -0
  203. package/spec/v1/event-codemap.schema.json +41 -0
  204. package/spec/v1/extensions.json +1273 -0
  205. package/spec/v1/gaps.json +14581 -0
  206. package/spec/v1/gaps.schema.json +55 -0
  207. package/spec/v1/migrations.json +1822 -0
  208. package/spec/v1/migrations.schema.json +44 -0
  209. package/spec/v1/operation-path-manifest.json +462 -0
  210. package/spec/v1/spec-gaps.json +4823 -0
  211. package/spec/v2/declaration.json +1862 -0
  212. package/spec/v2/declaration.schema.json +305 -0
  213. package/spec/v2/errors.json +837 -0
  214. package/spec/v2/event-codemap.json +1099 -0
  215. package/spec/v2/event-codemap.schema.json +114 -0
  216. package/spec/v2/ext/provider-idempotency/registry.json +6 -0
  217. package/spec/v2/facets/a2a.schema.json +51 -0
  218. package/spec/v2/facets/aiProviders.schema.json +56 -0
  219. package/spec/v2/facets/auth.schema.json +91 -0
  220. package/spec/v2/facets/heartbeat.schema.json +20 -0
  221. package/spec/v2/facets/interrupt.schema.json +29 -0
  222. package/spec/v2/facets/mcp.schema.json +81 -0
  223. package/spec/v2/facets/replay.schema.json +34 -0
  224. package/spec/v2/facets/sandbox.schema.json +31 -0
  225. package/spec/v2/facets/webhooks.schema.json +18 -0
  226. package/spec/v2/path-manifest.json +279 -0
  227. package/spec/v2/peer-dependency-aliases.json +165 -0
  228. package/spec/v2/profiles.json +45 -0
  229. package/spec/v2/release.json +6 -0
@@ -0,0 +1,23 @@
1
+ extends:
2
+ - recommended
3
+
4
+ rules:
5
+ # Discovery endpoints (`/.well-known/openwop`, `/v1/openapi.json`) are unauthenticated
6
+ # and take no input — they have no meaningful 4XX response surface. 5XX is the
7
+ # only honest failure mode and is documented inline.
8
+ operation-4xx-response: off
9
+
10
+ # The rule flags `then: { required: [<name>] }` clauses where <name> is not
11
+ # defined in the `then` clause's OWN `properties` block — but in the standard
12
+ # JSON Schema 2020-12 `if/then` conditional-requirement idiom (used by
13
+ # `capabilities.schema.json` to tighten required-fields when `supported: true`),
14
+ # the property IS defined in the parent's `properties` block. Redocly's rule
15
+ # doesn't walk to parent scope, so it false-positives on every valid use of
16
+ # the idiom. Disabling globally is safe because:
17
+ #
18
+ # - the typo-in-required protection the rule provides is also covered by
19
+ # `scripts/check-required-properties-defined.mjs` (which walks parent
20
+ # scope correctly), wired into `openwop-check.sh` step [4/9] (was cited as [7/9] until RFC 0178 §E.3 corrected it);
21
+ # - our only `then/required` sites are the two in `capabilities.schema.json`,
22
+ # both of which are well-formed.
23
+ no-required-schema-properties-undefined: off
@@ -0,0 +1,680 @@
1
+ openapi: 3.1.0
2
+ info:
3
+ title: OpenWOP conformance seams profile (openwop-conformance-seams-v2)
4
+ version: 2.0.0-rc.0
5
+ description: 'GENERATED by scripts/derive-v2-api.py. RFC 0168 §C: the seams are a versioned conformance profile with their
6
+ own document and path space (/conformance/seams/…), validated against the canonical v2 schemas with no tolerance path,
7
+ forbidden from the capability namespace (a host advertises the profile, never a testSeams flag). This document carries
8
+ the nine operations the v1 canonical document used to carry; the remaining host-sample-test-seams.md paths enter with
9
+ the 2.0.0 suite driver (P3-E).'
10
+ servers:
11
+ - url: https://{host}
12
+ description: openwop-compliant server
13
+ variables:
14
+ host:
15
+ default: api.example.com
16
+ description: Replace with your server's hostname.
17
+ paths:
18
+ /conformance/seams/sample/a2a/tasks/{taskId}:
19
+ get:
20
+ tags:
21
+ - host
22
+ summary: Read the persisted durable A2A task projection (RFC 0100, host-extension).
23
+ description: 'Returns the persisted `A2ATaskState` for `taskId` (== the backing
24
+
25
+ `runId`) per RFC 0100 §2 — a host-extension convenience read of the
26
+
27
+ durable projection that survives caller disconnect. The normative A2A
28
+
29
+ read surface remains the A2A `tasks/get` JSON-RPC method. Hosts that do
30
+
31
+ not advertise `capabilities.a2a.durableTasks` return `501`.
32
+
33
+ '
34
+ operationId: getA2ATaskState
35
+ parameters:
36
+ - name: taskId
37
+ in: path
38
+ required: true
39
+ schema:
40
+ type: string
41
+ minLength: 1
42
+ description: The A2A Task.id (equals the backing OpenWOP runId).
43
+ responses:
44
+ '200':
45
+ description: The persisted durable A2A task projection.
46
+ content:
47
+ application/json:
48
+ schema:
49
+ $ref: ../schemas/v2/a2a-task-state.schema.json
50
+ '401':
51
+ $ref: '#/components/responses/Unauthenticated'
52
+ '403':
53
+ $ref: '#/components/responses/Forbidden'
54
+ '404':
55
+ $ref: '#/components/responses/NotFound'
56
+ '501':
57
+ description: Host does not advertise capabilities.a2a.durableTasks (RFC 0100).
58
+ content:
59
+ application/json:
60
+ schema:
61
+ $ref: ../schemas/v2/error-envelope.schema.json
62
+ /conformance/seams/workspace/files:
63
+ get:
64
+ tags:
65
+ - host
66
+ summary: List workspace file metadata for the caller's tenant·workspace (RFC 0059).
67
+ description: 'Returns file metadata (no bodies) for the caller''s `{tenant,
68
+
69
+ workspace}` per RFC 0059 §C. Optional `?prefix=` filters the flat
70
+
71
+ `path` namespace to entries starting with the given prefix.
72
+
73
+ '
74
+ operationId: listWorkspaceFiles
75
+ parameters:
76
+ - $ref: '#/components/parameters/WorkspacePrefix'
77
+ responses:
78
+ '200':
79
+ description: Workspace file metadata (tenant·workspace-scoped; bodies omitted).
80
+ content:
81
+ application/json:
82
+ schema:
83
+ type: object
84
+ required:
85
+ - files
86
+ properties:
87
+ files:
88
+ type: array
89
+ items:
90
+ $ref: ../schemas/v2/workspace-file.schema.json
91
+ additionalProperties: false
92
+ '401':
93
+ $ref: '#/components/responses/Unauthenticated'
94
+ '403':
95
+ $ref: '#/components/responses/Forbidden'
96
+ '501':
97
+ description: Host does not advertise capabilities.workspace.supported (RFC 0059).
98
+ content:
99
+ application/json:
100
+ schema:
101
+ $ref: ../schemas/v2/error-envelope.schema.json
102
+ /conformance/seams/workspace/files/{path}:
103
+ get:
104
+ tags:
105
+ - host
106
+ summary: Read one workspace file (RFC 0059).
107
+ description: 'Returns the `WorkspaceFile` at `path` for the caller''s `{tenant,
108
+
109
+ workspace}`. When `capabilities.workspace.versioned: true`, an
110
+
111
+ optional `?version=N` returns the historical snapshot at version N.
112
+
113
+ '
114
+ operationId: getWorkspaceFile
115
+ parameters:
116
+ - $ref: '#/components/parameters/WorkspacePath'
117
+ - $ref: '#/components/parameters/WorkspaceVersion'
118
+ responses:
119
+ '200':
120
+ description: The workspace file (current version, or `?version=N` when versioned).
121
+ content:
122
+ application/json:
123
+ schema:
124
+ $ref: ../schemas/v2/workspace-file.schema.json
125
+ '401':
126
+ $ref: '#/components/responses/Unauthenticated'
127
+ '403':
128
+ $ref: '#/components/responses/Forbidden'
129
+ '404':
130
+ $ref: '#/components/responses/NotFound'
131
+ '501':
132
+ description: Host does not advertise capabilities.workspace.supported (RFC 0059).
133
+ content:
134
+ application/json:
135
+ schema:
136
+ $ref: ../schemas/v2/error-envelope.schema.json
137
+ put:
138
+ tags:
139
+ - host
140
+ summary: Atomic create/replace of a workspace file (RFC 0059).
141
+ description: 'Atomically creates or replaces the file at `path` per RFC 0059 §C.
142
+
143
+ MUST honor `If-Match: <etag>` — a stale token returns `409
144
+
145
+ workspace_conflict` (`details.currentVersion` carries the live
146
+
147
+ version). On success the host bumps `version`, recomputes `etag`,
148
+
149
+ and emits a `workspace.updated` event. A `content` exceeding
150
+
151
+ `capabilities.workspace.maxFileBytes` returns `workspace_too_large`.
152
+
153
+ '
154
+ operationId: putWorkspaceFile
155
+ parameters:
156
+ - $ref: '#/components/parameters/WorkspacePath'
157
+ - $ref: '#/components/parameters/IfMatch'
158
+ - $ref: '#/components/parameters/IdempotencyKey'
159
+ requestBody:
160
+ required: true
161
+ content:
162
+ application/json:
163
+ schema:
164
+ $ref: ../schemas/v2/workspace-file-create.schema.json
165
+ responses:
166
+ '200':
167
+ description: File created or replaced. Returns the persisted WorkspaceFile.
168
+ content:
169
+ application/json:
170
+ schema:
171
+ $ref: ../schemas/v2/workspace-file.schema.json
172
+ '400':
173
+ $ref: '#/components/responses/ValidationError'
174
+ '401':
175
+ $ref: '#/components/responses/Unauthenticated'
176
+ '403':
177
+ $ref: '#/components/responses/Forbidden'
178
+ '409':
179
+ description: Stale `If-Match` — the file changed since the supplied etag (`workspace_conflict`).
180
+ content:
181
+ application/json:
182
+ schema:
183
+ $ref: ../schemas/v2/error-envelope.schema.json
184
+ '413':
185
+ description: Content exceeds `capabilities.workspace.maxFileBytes` (`workspace_too_large`).
186
+ content:
187
+ application/json:
188
+ schema:
189
+ $ref: ../schemas/v2/error-envelope.schema.json
190
+ '501':
191
+ description: Host does not advertise capabilities.workspace.supported (RFC 0059).
192
+ content:
193
+ application/json:
194
+ schema:
195
+ $ref: ../schemas/v2/error-envelope.schema.json
196
+ delete:
197
+ tags:
198
+ - host
199
+ summary: Delete a workspace file (RFC 0059).
200
+ description: 'Removes the file at `path` (and, when `versioned: true`, writes a
201
+
202
+ tombstone). Emits a `workspace.updated` event on success.
203
+
204
+ '
205
+ operationId: deleteWorkspaceFile
206
+ parameters:
207
+ - $ref: '#/components/parameters/WorkspacePath'
208
+ - $ref: '#/components/parameters/IdempotencyKey'
209
+ responses:
210
+ '204':
211
+ description: File deleted.
212
+ '401':
213
+ $ref: '#/components/responses/Unauthenticated'
214
+ '403':
215
+ $ref: '#/components/responses/Forbidden'
216
+ '404':
217
+ $ref: '#/components/responses/NotFound'
218
+ '501':
219
+ description: Host does not advertise capabilities.workspace.supported (RFC 0059).
220
+ content:
221
+ application/json:
222
+ schema:
223
+ $ref: ../schemas/v2/error-envelope.schema.json
224
+ /conformance/seams/packs-test/{name}/-/{version}.tgz:
225
+ parameters:
226
+ - $ref: '#/components/parameters/PackName'
227
+ - $ref: '#/components/parameters/PackVersion'
228
+ put:
229
+ tags:
230
+ - packs-test
231
+ summary: Publish a pack tarball to the isolated test catalog.
232
+ description: 'Mirror of `PUT /v1/packs/{name}/-/{version}.tgz` per
233
+
234
+ `spec/v1/node-packs.md` §"PUT /v1/packs/{name}/-/{version}.tgz".
235
+
236
+ Request shape, response shape, status codes, and the 19-code
237
+
238
+ publish error catalog (`invalid_pack_scope`, `invalid_pack_name`,
239
+
240
+ `invalid_version`, `invalid_body`, eight `tarball_*` codes,
241
+
242
+ `invalid_manifest`, `manifest_mismatch` (or the granular
243
+
244
+ `manifest_name_mismatch` / `manifest_version_mismatch` pair),
245
+
246
+ `pack_integrity_failure`, `unsupported_runtime`, `forbidden`,
247
+
248
+ `conflict`/`version_conflict`) MUST be served verbatim. The
249
+
250
+ test catalog MUST be isolated per RFC 0025 §C — a pack PUT''d
251
+
252
+ here MUST NOT appear in `GET /v1/packs/{name}` listings.
253
+
254
+ The mirrored production path is registry-service surface
255
+
256
+ (`registry-operations.md`), not defined in this host document
257
+
258
+ (see the `packs-test` tag scope note).
259
+
260
+ '
261
+ operationId: putTestPackTarball
262
+ parameters:
263
+ - in: header
264
+ name: OpenWOP-Pack-Signing-Method
265
+ required: false
266
+ schema:
267
+ type: string
268
+ enum:
269
+ - sigstore
270
+ - manual
271
+ - none
272
+ - in: header
273
+ name: OpenWOP-Pack-Sha256
274
+ required: false
275
+ schema:
276
+ type: string
277
+ pattern: ^sha256-[A-Za-z0-9+/=]+$
278
+ description: Caller-asserted SHA-256 (server verifies; mismatch surfaces `pack_integrity_failure`).
279
+ requestBody:
280
+ required: true
281
+ description: Gzipped tarball bytes (`application/tar+gzip`, `application/gzip`, `application/x-gzip`, or `application/octet-stream`).
282
+ content:
283
+ application/gzip:
284
+ schema:
285
+ type: string
286
+ format: binary
287
+ application/x-gzip:
288
+ schema:
289
+ type: string
290
+ format: binary
291
+ application/tar+gzip:
292
+ schema:
293
+ type: string
294
+ format: binary
295
+ application/octet-stream:
296
+ schema:
297
+ type: string
298
+ format: binary
299
+ responses:
300
+ '200':
301
+ description: Idempotent re-publish — identical sha256 content already published; existing record returned.
302
+ content:
303
+ application/json:
304
+ schema:
305
+ $ref: '#/components/schemas/TestPackPublishRecord'
306
+ '201':
307
+ description: New version published to the test catalog.
308
+ content:
309
+ application/json:
310
+ schema:
311
+ $ref: '#/components/schemas/TestPackPublishRecord'
312
+ '400':
313
+ description: 'One of the 17 spec-documented 400-class publish error codes:
314
+
315
+ URL/scope (`invalid_pack_scope`, `invalid_pack_name`, `invalid_version`),
316
+
317
+ body shape (`invalid_body`),
318
+
319
+ tarball extraction (`tarball_gunzip_failed`, `tarball_too_large`,
320
+
321
+ `tarball_manifest_missing`, `tarball_manifest_too_large`,
322
+
323
+ `tarball_manifest_not_json`, `tarball_entry_missing`,
324
+
325
+ `tarball_entry_too_large`, `tarball_path_traversal`,
326
+
327
+ `tarball_tar_parse_failed`),
328
+
329
+ manifest contents (`invalid_manifest`, `manifest_mismatch` or
330
+
331
+ the granular `manifest_name_mismatch` / `manifest_version_mismatch` pair,
332
+
333
+ `pack_integrity_failure`, `unsupported_runtime`).
334
+
335
+ '
336
+ content:
337
+ application/json:
338
+ schema:
339
+ $ref: ../schemas/v2/error-envelope.schema.json
340
+ '401':
341
+ $ref: '#/components/responses/Unauthenticated'
342
+ '403':
343
+ description: '`forbidden` — caller lacks `packs:publish` scope or the namespace claim.'
344
+ content:
345
+ application/json:
346
+ schema:
347
+ $ref: ../schemas/v2/error-envelope.schema.json
348
+ '404':
349
+ description: 'Host does not advertise `capabilities.packs.testMode.supported: true`, or the test-mode env-gate is
350
+ unset.'
351
+ content:
352
+ application/json:
353
+ schema:
354
+ $ref: ../schemas/v2/error-envelope.schema.json
355
+ '409':
356
+ description: '`conflict` (or `version_conflict`) — `(name, version)` already published with different content.'
357
+ content:
358
+ application/json:
359
+ schema:
360
+ $ref: ../schemas/v2/error-envelope.schema.json
361
+ get:
362
+ tags:
363
+ - packs-test
364
+ summary: Fetch a published test-catalog tarball.
365
+ description: 'Mirror of `GET /v1/packs/{name}/-/{version}.tgz`. Returns the gzipped tarball bytes with `Content-Type:
366
+ application/tar+gzip` and an `ETag: "sha256-..."` matching the manifest''s `tarballSha256`. The mirrored production
367
+ path is registry-service surface (`registry-operations.md`), not defined in this host document (see the `packs-test`
368
+ tag scope note).'
369
+ operationId: getTestPackTarball
370
+ responses:
371
+ '200':
372
+ description: Tarball bytes.
373
+ content:
374
+ application/tar+gzip:
375
+ schema:
376
+ type: string
377
+ format: binary
378
+ '400':
379
+ description: '`invalid_pack_name` or `invalid_version` — URL params malformed.'
380
+ content:
381
+ application/json:
382
+ schema:
383
+ $ref: ../schemas/v2/error-envelope.schema.json
384
+ '401':
385
+ $ref: '#/components/responses/Unauthenticated'
386
+ '403':
387
+ description: '`forbidden` — caller lacks `packs:read` scope.'
388
+ content:
389
+ application/json:
390
+ schema:
391
+ $ref: ../schemas/v2/error-envelope.schema.json
392
+ '404':
393
+ description: 'Pack version not found in the test catalog (or host does not advertise `capabilities.packs.testMode.supported:
394
+ true`).'
395
+ content:
396
+ application/json:
397
+ schema:
398
+ $ref: ../schemas/v2/error-envelope.schema.json
399
+ /conformance/seams/packs-test/{name}/-/{version}:
400
+ parameters:
401
+ - $ref: '#/components/parameters/PackName'
402
+ - $ref: '#/components/parameters/PackVersion'
403
+ delete:
404
+ tags:
405
+ - packs-test
406
+ summary: Unpublish a test-catalog version (mirrors unpublish-window semantics).
407
+ description: 'Mirror of `DELETE /v1/packs/{name}/-/{version}` per
408
+
409
+ `spec/v1/node-packs.md`. Returns `400 unpublish_window_expired`
410
+
411
+ for versions older than the registry''s unpublish window
412
+
413
+ (default 72h). Test-mode implementations MAY shorten the
414
+
415
+ window for tractable conformance fixtures but MUST surface
416
+
417
+ the same error code. The mirrored production path is
418
+
419
+ registry-service surface (`registry-operations.md`), not
420
+
421
+ defined in this host document (see the `packs-test` tag
422
+
423
+ scope note).
424
+
425
+ '
426
+ operationId: deleteTestPackVersion
427
+ responses:
428
+ '204':
429
+ description: Version successfully unpublished from the test catalog.
430
+ '400':
431
+ description: '`unpublish_window_expired`, `invalid_pack_name`, or `invalid_version`.'
432
+ content:
433
+ application/json:
434
+ schema:
435
+ $ref: ../schemas/v2/error-envelope.schema.json
436
+ '401':
437
+ $ref: '#/components/responses/Unauthenticated'
438
+ '403':
439
+ description: '`forbidden` — caller lacks `packs:publish` scope.'
440
+ content:
441
+ application/json:
442
+ schema:
443
+ $ref: ../schemas/v2/error-envelope.schema.json
444
+ '404':
445
+ description: Version doesn't exist in the test catalog, or host does not advertise the test-mode capability.
446
+ content:
447
+ application/json:
448
+ schema:
449
+ $ref: ../schemas/v2/error-envelope.schema.json
450
+ /conformance/seams/packs-test/{name}/-/{version}.sig:
451
+ parameters:
452
+ - $ref: '#/components/parameters/PackName'
453
+ - $ref: '#/components/parameters/PackVersion'
454
+ get:
455
+ tags:
456
+ - packs-test
457
+ summary: Fetch the detached Ed25519 signature for a test-catalog pack.
458
+ description: 'Mirror of `GET /v1/packs/{name}/-/{version}.sig`. Returns the
459
+
460
+ signature blob over `pack.json` for this version. MAY 302-redirect
461
+
462
+ to a storage-backend signed URL. The mirrored production path is
463
+
464
+ registry-service surface (`registry-operations.md`), not defined
465
+
466
+ in this host document (see the `packs-test` tag scope note).
467
+
468
+ '
469
+ operationId: getTestPackSignature
470
+ responses:
471
+ '200':
472
+ description: Signature blob.
473
+ content:
474
+ application/octet-stream:
475
+ schema:
476
+ type: string
477
+ format: binary
478
+ '302':
479
+ description: Redirect to a storage-backend signed URL (clients SHOULD follow).
480
+ headers:
481
+ Location:
482
+ schema:
483
+ type: string
484
+ format: uri
485
+ '400':
486
+ description: '`invalid_pack_name` or `invalid_version` — URL params malformed.'
487
+ content:
488
+ application/json:
489
+ schema:
490
+ $ref: ../schemas/v2/error-envelope.schema.json
491
+ '401':
492
+ $ref: '#/components/responses/Unauthenticated'
493
+ '403':
494
+ description: '`forbidden` — caller lacks `packs:read` scope.'
495
+ content:
496
+ application/json:
497
+ schema:
498
+ $ref: ../schemas/v2/error-envelope.schema.json
499
+ '404':
500
+ description: '`signature_not_available` — version is missing, yanked,
501
+
502
+ unsigned at publish time, OR the registry''s storage backend
503
+
504
+ is unwired. The four cases are intentionally
505
+
506
+ indistinguishable per spec/v1/node-packs.md §"GET /v1/packs/{name}/-/{version}.sig".
507
+
508
+ Also returned when the host does not advertise
509
+
510
+ `capabilities.packs.testMode.supported: true`.
511
+
512
+ '
513
+ content:
514
+ application/json:
515
+ schema:
516
+ $ref: ../schemas/v2/error-envelope.schema.json
517
+ components:
518
+ securitySchemes:
519
+ ApiKeyAuth:
520
+ type: http
521
+ scheme: bearer
522
+ bearerFormat: API key
523
+ description: 'openwop API key. Format implementation-defined; reference impl uses `hk_`/`hk_test_` prefixes.
524
+
525
+ Each key carries one or more scopes from the canonical vocabulary
526
+
527
+ (`manifest:read`, `runs:create`, `runs:read`, `runs:cancel`,
528
+
529
+ `artifacts:read`, `webhooks:manage`, `approvals:respond`, `audit:read`).
530
+
531
+ See `auth.md`.
532
+
533
+ '
534
+ parameters:
535
+ IdempotencyKey:
536
+ in: header
537
+ name: Idempotency-Key
538
+ required: false
539
+ schema:
540
+ type: string
541
+ maxLength: 255
542
+ description: 'Per-mutation idempotency token (see `idempotency.md` Layer 1).
543
+
544
+ Server caches `(tenantId, endpoint, key)` → response for ≥24h.
545
+
546
+ Duplicate requests return the cached response with header
547
+
548
+ `OpenWOP-Idempotent-Replay: true`.
549
+
550
+ '
551
+ WorkspacePath:
552
+ in: path
553
+ name: path
554
+ required: true
555
+ schema:
556
+ type: string
557
+ pattern: ^[A-Za-z0-9][A-Za-z0-9._/-]{0,255}$
558
+ description: 'RFC 0059 workspace-relative file path. Flat namespace with
559
+
560
+ `/`-in-names; no `..`, no leading `/`. Matches
561
+
562
+ `workspace-file.schema.json#path`.
563
+
564
+ '
565
+ WorkspacePrefix:
566
+ in: query
567
+ name: prefix
568
+ required: false
569
+ schema:
570
+ type: string
571
+ maxLength: 256
572
+ description: RFC 0059. Optional prefix filter over the flat `path` namespace for `listWorkspaceFiles`.
573
+ WorkspaceVersion:
574
+ in: query
575
+ name: version
576
+ required: false
577
+ schema:
578
+ type: integer
579
+ minimum: 1
580
+ description: 'RFC 0059. When `capabilities.workspace.versioned: true`, request the
581
+
582
+ historical snapshot at this version. Absent = latest.
583
+
584
+ '
585
+ IfMatch:
586
+ in: header
587
+ name: If-Match
588
+ required: false
589
+ schema:
590
+ type: string
591
+ maxLength: 255
592
+ description: 'RFC 0059 optimistic-concurrency token — the file''s current `etag`.
593
+
594
+ A `PUT` carrying a stale `If-Match` returns `409 workspace_conflict`.
595
+
596
+ '
597
+ PackName:
598
+ in: path
599
+ name: name
600
+ required: true
601
+ schema:
602
+ type: string
603
+ minLength: 3
604
+ maxLength: 214
605
+ description: Reverse-DNS pack name per `spec/v1/node-packs.md` §Naming (e.g. `vendor.acme.salesforce-tools`).
606
+ PackVersion:
607
+ in: path
608
+ name: version
609
+ required: true
610
+ schema:
611
+ type: string
612
+ pattern: ^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-[\w.-]+)?(?:\+[\w.-]+)?$
613
+ description: SemVer 2.0.0 version of the pack.
614
+ responses:
615
+ Unauthenticated:
616
+ description: Missing or invalid credential.
617
+ content:
618
+ application/json:
619
+ schema:
620
+ $ref: '#/components/schemas/Error'
621
+ Forbidden:
622
+ description: Credential valid but lacks required scope or fails resource binding.
623
+ content:
624
+ application/json:
625
+ schema:
626
+ $ref: '#/components/schemas/Error'
627
+ NotFound:
628
+ description: Resource doesn't exist or caller can't see it (do not leak existence).
629
+ content:
630
+ application/json:
631
+ schema:
632
+ $ref: '#/components/schemas/Error'
633
+ ValidationError:
634
+ description: Request body or parameters malformed.
635
+ content:
636
+ application/json:
637
+ schema:
638
+ $ref: '#/components/schemas/Error'
639
+ schemas:
640
+ Error:
641
+ $ref: ../schemas/v2/error-envelope.schema.json
642
+ TestPackPublishRecord:
643
+ description: 'Response body for a successful publish against the test-mode
644
+
645
+ registry namespace (RFC 0025). Mirror of the production publish
646
+
647
+ record returned by `PUT /v1/packs/{name}/-/{version}.tgz`.
648
+
649
+ '
650
+ type: object
651
+ required:
652
+ - name
653
+ - version
654
+ - tarballSha256
655
+ - publishedAt
656
+ properties:
657
+ name:
658
+ type: string
659
+ description: Reverse-DNS pack name as PUT'd.
660
+ version:
661
+ type: string
662
+ description: SemVer 2.0.0 version as PUT'd.
663
+ tarballSha256:
664
+ type: string
665
+ pattern: ^sha256-[A-Za-z0-9+/=]+$
666
+ description: Server-computed SHA-256 over the uploaded tarball bytes.
667
+ publishedAt:
668
+ type: string
669
+ format: date-time
670
+ signed:
671
+ type: boolean
672
+ description: Whether a sibling `.sig` signature blob was persisted.
673
+ signingMethod:
674
+ type: string
675
+ enum:
676
+ - sigstore
677
+ - manual
678
+ - none
679
+ security:
680
+ - ApiKeyAuth: []