@awebai/oats 0.23.1 → 0.24.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 (159) hide show
  1. package/README.md +7 -4
  2. package/bin/oats-pi-sdk-host.mjs +17 -0
  3. package/bin/oats.mjs +442 -51
  4. package/capabilities/oats-okf/bin/oats-okf-binding.mjs +14 -0
  5. package/capabilities/oats-okf/bin/oats-okf.mjs +79 -11
  6. package/capabilities/oats-okf/lib/binding-wire.mjs +268 -0
  7. package/capabilities/oats-okf/lib/captured-worker.mjs +101 -0
  8. package/capabilities/oats-okf/lib/config.mjs +2 -1
  9. package/capabilities/oats-okf/lib/inspection.mjs +16 -1
  10. package/capabilities/oats-okf/lib/invocation-context.mjs +111 -0
  11. package/capabilities/oats-okf/lib/invocation-shape.mjs +135 -0
  12. package/capabilities/oats-okf/lib/io.mjs +1 -1
  13. package/capabilities/oats-okf/lib/portable-binding.mjs +199 -0
  14. package/capabilities/oats-okf/lib/source-contract.mjs +46 -0
  15. package/capabilities/oats-okf/lib/sources.mjs +123 -3
  16. package/capabilities/oats-okf/lib/stores.mjs +104 -25
  17. package/capabilities/oats-okf/lib/worker.mjs +69 -10
  18. package/capabilities/oats-okf/oats.json +35 -7
  19. package/capabilities/oats-okf/schemas/okf-portable-declaration.schema.json +87 -0
  20. package/capabilities/oats-okf/schemas/okf-portable-payload.schema.json +113 -0
  21. package/capabilities/oats-okf/skills/memory-harvest/SKILL.md +23 -5
  22. package/capabilities/oats-okf/skills/okf/SKILL.md +42 -1
  23. package/docs/artifact-approvals.schema.json +7 -0
  24. package/docs/capability-manifest.schema.json +37 -66
  25. package/docs/captured-invocation-context.schema.json +7 -0
  26. package/docs/captured-resolution.schema.json +7 -0
  27. package/docs/design/2026-09-14-artifact-retention-contract.md +190 -0
  28. package/docs/design/2026-09-14-portable-souls-and-git-workspaces.md +708 -0
  29. package/docs/design/2026-09-14-portable-souls-contract-amendments.md +85 -0
  30. package/docs/design/2026-09-14-portable-souls-explainer.md +750 -0
  31. package/docs/design/2026-09-15-captured-dispatch.md +127 -0
  32. package/docs/design/2026-09-15-captured-resolution-records.md +143 -0
  33. package/docs/design/2026-09-15-package-preparation.md +100 -0
  34. package/docs/design/2026-09-15-portable-data-contract.md +121 -0
  35. package/docs/design/2026-09-15-portable-declarations.md +189 -0
  36. package/docs/design/2026-09-15-portable-souls-handoff.md +150 -0
  37. package/docs/design/2026-09-15-portable-souls-implementation.md +417 -0
  38. package/docs/design/2026-09-15-selection-lock-and-approval.md +122 -0
  39. package/docs/design/2026-09-15-source-observation.md +119 -0
  40. package/docs/design/2026-09-16-captured-admission.md +77 -0
  41. package/docs/design/2026-09-16-captured-helper-dispatch.md +105 -0
  42. package/docs/design/2026-09-16-captured-launch-inputs.md +42 -0
  43. package/docs/design/2026-09-16-command-profile-preparation.md +86 -0
  44. package/docs/design/2026-09-16-fresh-install-first-rollout.md +47 -0
  45. package/docs/design/2026-09-16-fresh-operator-walkthrough.md +277 -0
  46. package/docs/design/2026-09-16-knowledge-capability-contract.md +61 -0
  47. package/docs/design/2026-09-16-messaging-capability-contract.md +59 -0
  48. package/docs/design/2026-09-16-portable-migration-evidence.md +156 -0
  49. package/docs/design/2026-09-16-portable-onboarding.md +177 -0
  50. package/docs/design/2026-09-16-prepare-request-transport.md +26 -0
  51. package/docs/design/2026-09-16-provider-binding-codecs.md +98 -0
  52. package/docs/design/2026-09-16-provider-binding-wire.md +247 -0
  53. package/docs/design/2026-09-17-capability-helper-input-contract.md +95 -0
  54. package/docs/design/2026-09-17-captured-backend-parity.md +53 -0
  55. package/docs/design/2026-09-17-captured-native-start.md +58 -0
  56. package/docs/design/2026-09-17-portable-boundary-hookup.md +19 -0
  57. package/docs/design/2026-09-17-portable-boundary-resources.md +52 -0
  58. package/docs/design/2026-09-17-public-captured-start.md +108 -0
  59. package/docs/design/2026-09-17-public-prepare-request.md +90 -0
  60. package/docs/design/2026-09-18-captured-pi-host.md +205 -0
  61. package/docs/design/2026-09-18-first-cut-release-checklist.md +131 -0
  62. package/docs/design/2026-09-18-herdr-protocol-compatibility.md +60 -0
  63. package/docs/desktop-cli-api.md +5 -2
  64. package/docs/execution-capsule.schema.json +108 -0
  65. package/docs/execution-targets.md +20 -7
  66. package/docs/oats-lock-v3.schema.json +7 -0
  67. package/docs/oats-member.schema.json +38 -0
  68. package/docs/oats-workspace.schema.json +68 -0
  69. package/docs/portable.schema.json +2512 -0
  70. package/docs/provider-check-input.schema.json +7 -0
  71. package/docs/release-notes/v0.23.2.md +49 -0
  72. package/docs/release-notes/v0.24.0.md +104 -0
  73. package/docs/schedules.md +126 -14
  74. package/docs/soul.schema.json +82 -0
  75. package/injects/oats-portable.md +17 -0
  76. package/injects/portable-instance-boundary.md +39 -0
  77. package/injects/portable-work-directory.md +29 -0
  78. package/lib/artifact-approvals.mjs +120 -0
  79. package/lib/artifact-tree.mjs +141 -0
  80. package/lib/capability-artifacts.mjs +179 -0
  81. package/lib/capability-execution.mjs +15 -0
  82. package/lib/capability-inputs.mjs +39 -0
  83. package/lib/capability-provenance.mjs +231 -0
  84. package/lib/captured-action-shape.mjs +21 -0
  85. package/lib/captured-admission-shape.mjs +20 -0
  86. package/lib/captured-binding-file.mjs +36 -0
  87. package/lib/captured-dispatch.mjs +66 -0
  88. package/lib/captured-instance-index.mjs +277 -0
  89. package/lib/captured-invocation-context.mjs +130 -0
  90. package/lib/captured-launch-request.mjs +46 -0
  91. package/lib/captured-operation-process.mjs +15 -0
  92. package/lib/captured-pi-custody.mjs +29 -0
  93. package/lib/captured-pi-host.mjs +167 -0
  94. package/lib/captured-pi-outcome.mjs +172 -0
  95. package/lib/captured-resolutions.mjs +275 -0
  96. package/lib/captured-scaffold.mjs +87 -0
  97. package/lib/captured-selector.mjs +28 -0
  98. package/lib/captured-session-backend.mjs +52 -0
  99. package/lib/captured-source-receipt-file.mjs +72 -0
  100. package/lib/config-data.mjs +104 -0
  101. package/lib/core.mjs +918 -562
  102. package/lib/errors.mjs +7 -0
  103. package/lib/helper-injection-policy.mjs +98 -0
  104. package/lib/herdr.mjs +18 -7
  105. package/lib/instruction-composition.mjs +31 -0
  106. package/lib/legacy-lock-codec.mjs +106 -0
  107. package/lib/manifest-settings.mjs +84 -0
  108. package/lib/package-closure.mjs +48 -0
  109. package/lib/package-materialization.mjs +83 -0
  110. package/lib/pi-sdk-host.mjs +229 -0
  111. package/lib/portable-artifacts.mjs +115 -0
  112. package/lib/portable-choices.mjs +82 -0
  113. package/lib/portable-composition.mjs +136 -0
  114. package/lib/portable-digest.mjs +105 -0
  115. package/lib/portable-files.mjs +26 -0
  116. package/lib/portable-identity.mjs +40 -0
  117. package/lib/portable-lock.mjs +117 -0
  118. package/lib/portable-migration-artifacts.mjs +135 -0
  119. package/lib/portable-migration-evidence.mjs +305 -0
  120. package/lib/portable-migration-store.mjs +199 -0
  121. package/lib/portable-migration.mjs +104 -0
  122. package/lib/portable-onboarding-acceptance.mjs +66 -0
  123. package/lib/portable-onboarding-request.mjs +49 -0
  124. package/lib/portable-onboarding.mjs +230 -0
  125. package/lib/portable-package-preparation.mjs +188 -0
  126. package/lib/portable-policy.mjs +44 -0
  127. package/lib/portable-shape.mjs +35 -0
  128. package/lib/portable-soul.mjs +38 -0
  129. package/lib/portable-state.mjs +80 -0
  130. package/lib/portable-values.mjs +181 -0
  131. package/lib/prepare-composition.mjs +151 -0
  132. package/lib/prepared-bindings.mjs +78 -0
  133. package/lib/prepared-resources.mjs +127 -0
  134. package/lib/provider-binding-broker.mjs +59 -0
  135. package/lib/provider-binding-wire.mjs +110 -0
  136. package/lib/provider-binding.mjs +22 -0
  137. package/lib/repository-observation.mjs +226 -0
  138. package/lib/resolution-shape.mjs +393 -0
  139. package/lib/schedule-capsule.mjs +206 -0
  140. package/lib/schedule.mjs +259 -38
  141. package/lib/servers.mjs +15 -0
  142. package/lib/soul-constraints.mjs +40 -0
  143. package/lib/source-projection.mjs +84 -0
  144. package/lib/source-spec.mjs +189 -0
  145. package/lib/workspace-definition.mjs +126 -0
  146. package/lib/workspace-discovery.mjs +146 -0
  147. package/package-catalog.json +1 -1
  148. package/package.json +3 -2
  149. package/packages/record/lib/capture-cc.mjs +14 -6
  150. package/packages/record/lib/formats.mjs +14 -3
  151. package/packages/record/lib/native-history.mjs +277 -7
  152. package/packages/record/lib/session-snapshot.mjs +25 -5
  153. package/packages/record/lib/sessions-for-home.mjs +30 -13
  154. package/skills/oats/SKILL.md +12 -7
  155. package/skills/oats-config/SKILL.md +12 -9
  156. package/skills/oats-packages/SKILL.md +12 -8
  157. package/skills/oats-portable/SKILL.md +116 -0
  158. package/skills/oats-portable-artifacts/SKILL.md +63 -0
  159. package/skills/oats-portable-setup/SKILL.md +69 -0
@@ -0,0 +1,2512 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "https://oats.dev/schemas/portable-v1.json",
4
+ "title": "Portable OATS shared wire values v1",
5
+ "description": "Structural schemas only. Strict bounded decoding, canonical source/digest identities, cross-reference equality, constraints, provenance, graph limits and filesystem verification remain mandatory runtime checks. Provider payloads remain opaque; schema acceptance grants no trust, enrollment or privacy guarantee.",
6
+ "$defs": {
7
+ "Hash": {
8
+ "type": "string",
9
+ "minLength": 1,
10
+ "pattern": "^sha256-[a-f0-9]{64}$"
11
+ },
12
+ "RelativePath": {
13
+ "type": "string",
14
+ "minLength": 1,
15
+ "pattern": "^(?![A-Za-z]:)(?!.*(?:^|/)\\.{1,2}(?:/|$))[^/\\\\\u0000]+(?:/[^/\\\\\u0000]+)*$"
16
+ },
17
+ "RootRelativePath": {
18
+ "oneOf": [
19
+ {
20
+ "const": "."
21
+ },
22
+ {
23
+ "type": "string",
24
+ "minLength": 1,
25
+ "pattern": "^(?![A-Za-z]:)(?!.*(?:^|/)\\.{1,2}(?:/|$))[^/\\\\\u0000]+(?:/[^/\\\\\u0000]+)*$"
26
+ }
27
+ ]
28
+ },
29
+ "CapabilityId": {
30
+ "type": "string",
31
+ "minLength": 1,
32
+ "pattern": "^[a-z0-9][a-z0-9._-]*$"
33
+ },
34
+ "TreeIntegrity": {
35
+ "type": "object",
36
+ "properties": {
37
+ "format": {
38
+ "const": "oats.tree-exec.v1"
39
+ },
40
+ "value": {
41
+ "type": "string",
42
+ "minLength": 1,
43
+ "pattern": "^sha256-[a-f0-9]{64}$"
44
+ }
45
+ },
46
+ "required": [
47
+ "format",
48
+ "value"
49
+ ],
50
+ "additionalProperties": false
51
+ },
52
+ "PackageIntegrity": {
53
+ "type": "object",
54
+ "properties": {
55
+ "format": {
56
+ "const": "oats.package-payload-exec.v1"
57
+ },
58
+ "value": {
59
+ "type": "string",
60
+ "minLength": 1,
61
+ "pattern": "^sha256-[a-f0-9]{64}$"
62
+ }
63
+ },
64
+ "required": [
65
+ "format",
66
+ "value"
67
+ ],
68
+ "additionalProperties": false
69
+ },
70
+ "ByteIntegrity": {
71
+ "type": "object",
72
+ "properties": {
73
+ "format": {
74
+ "const": "oats.bytes.v1"
75
+ },
76
+ "value": {
77
+ "type": "string",
78
+ "minLength": 1,
79
+ "pattern": "^sha256-[a-f0-9]{64}$"
80
+ }
81
+ },
82
+ "required": [
83
+ "format",
84
+ "value"
85
+ ],
86
+ "additionalProperties": false
87
+ },
88
+ "ResolutionRef": {
89
+ "type": "object",
90
+ "properties": {
91
+ "schemaVersion": {
92
+ "const": 1
93
+ },
94
+ "id": {
95
+ "type": "string",
96
+ "minLength": 1,
97
+ "pattern": "^sha256-[a-f0-9]{64}$"
98
+ }
99
+ },
100
+ "required": [
101
+ "schemaVersion",
102
+ "id"
103
+ ],
104
+ "additionalProperties": false
105
+ },
106
+ "RepositoryIdentity": {
107
+ "oneOf": [
108
+ {
109
+ "type": "object",
110
+ "properties": {
111
+ "kind": {
112
+ "const": "provider-repository"
113
+ },
114
+ "provider": {
115
+ "type": "string",
116
+ "minLength": 1,
117
+ "pattern": "^[a-z][a-z0-9.-]*$"
118
+ },
119
+ "host": {
120
+ "type": "string",
121
+ "minLength": 1,
122
+ "pattern": "^[a-z0-9](?:[a-z0-9.-]*[a-z0-9])?$"
123
+ },
124
+ "id": {
125
+ "type": "string",
126
+ "minLength": 1
127
+ }
128
+ },
129
+ "required": [
130
+ "kind",
131
+ "provider",
132
+ "host",
133
+ "id"
134
+ ],
135
+ "additionalProperties": false
136
+ },
137
+ {
138
+ "type": "object",
139
+ "properties": {
140
+ "kind": {
141
+ "const": "canonical-remote"
142
+ },
143
+ "remote": {
144
+ "type": "string",
145
+ "minLength": 1,
146
+ "pattern": "^git:.+$"
147
+ }
148
+ },
149
+ "required": [
150
+ "kind",
151
+ "remote"
152
+ ],
153
+ "additionalProperties": false
154
+ }
155
+ ]
156
+ },
157
+ "SoulIdentity": {
158
+ "oneOf": [
159
+ {
160
+ "type": "object",
161
+ "properties": {
162
+ "kind": {
163
+ "const": "git-soul"
164
+ },
165
+ "repository": {
166
+ "$ref": "#/$defs/RepositoryIdentity"
167
+ },
168
+ "exportPath": {
169
+ "type": "string",
170
+ "minLength": 1,
171
+ "pattern": "^(?![A-Za-z]:)(?!.*(?:^|/)\\.{1,2}(?:/|$))[^/\\\\\u0000]+(?:/[^/\\\\\u0000]+)*$"
172
+ }
173
+ },
174
+ "required": [
175
+ "kind",
176
+ "repository",
177
+ "exportPath"
178
+ ],
179
+ "additionalProperties": false
180
+ },
181
+ {
182
+ "type": "object",
183
+ "properties": {
184
+ "kind": {
185
+ "const": "local-soul"
186
+ },
187
+ "source": {
188
+ "type": "string",
189
+ "minLength": 1,
190
+ "pattern": "^path:/.*$"
191
+ },
192
+ "exportPath": {
193
+ "oneOf": [
194
+ {
195
+ "const": "."
196
+ },
197
+ {
198
+ "type": "string",
199
+ "minLength": 1,
200
+ "pattern": "^(?![A-Za-z]:)(?!.*(?:^|/)\\.{1,2}(?:/|$))[^/\\\\\u0000]+(?:/[^/\\\\\u0000]+)*$"
201
+ }
202
+ ]
203
+ }
204
+ },
205
+ "required": [
206
+ "kind",
207
+ "source",
208
+ "exportPath"
209
+ ],
210
+ "additionalProperties": false
211
+ }
212
+ ]
213
+ },
214
+ "WorkspaceIdentity": {
215
+ "type": "object",
216
+ "properties": {
217
+ "repository": {
218
+ "$ref": "#/$defs/RepositoryIdentity"
219
+ },
220
+ "path": {
221
+ "const": "oats-workspace.yaml"
222
+ }
223
+ },
224
+ "required": [
225
+ "repository",
226
+ "path"
227
+ ],
228
+ "additionalProperties": false
229
+ },
230
+ "CapabilityArtifactRef": {
231
+ "type": "object",
232
+ "properties": {
233
+ "kind": {
234
+ "const": "capability"
235
+ },
236
+ "capability": {
237
+ "type": "string",
238
+ "minLength": 1,
239
+ "pattern": "^[a-z0-9][a-z0-9._-]*$"
240
+ },
241
+ "integrity": {
242
+ "$ref": "#/$defs/TreeIntegrity"
243
+ }
244
+ },
245
+ "required": [
246
+ "kind",
247
+ "capability",
248
+ "integrity"
249
+ ],
250
+ "additionalProperties": false
251
+ },
252
+ "SoulArtifactRef": {
253
+ "type": "object",
254
+ "properties": {
255
+ "kind": {
256
+ "const": "soul"
257
+ },
258
+ "identity": {
259
+ "$ref": "#/$defs/SoulIdentity"
260
+ },
261
+ "integrity": {
262
+ "$ref": "#/$defs/TreeIntegrity"
263
+ }
264
+ },
265
+ "required": [
266
+ "kind",
267
+ "identity",
268
+ "integrity"
269
+ ],
270
+ "additionalProperties": false
271
+ },
272
+ "ResourceArtifactRef": {
273
+ "type": "object",
274
+ "properties": {
275
+ "kind": {
276
+ "const": "resource"
277
+ },
278
+ "integrity": {
279
+ "$ref": "#/$defs/TreeIntegrity"
280
+ }
281
+ },
282
+ "required": [
283
+ "kind",
284
+ "integrity"
285
+ ],
286
+ "additionalProperties": false
287
+ },
288
+ "ArtifactRef": {
289
+ "oneOf": [
290
+ {
291
+ "$ref": "#/$defs/CapabilityArtifactRef"
292
+ },
293
+ {
294
+ "$ref": "#/$defs/SoulArtifactRef"
295
+ },
296
+ {
297
+ "$ref": "#/$defs/ResourceArtifactRef"
298
+ }
299
+ ]
300
+ },
301
+ "ResourceRef": {
302
+ "type": "object",
303
+ "properties": {
304
+ "owner": {
305
+ "$ref": "#/$defs/ArtifactRef"
306
+ },
307
+ "path": {
308
+ "oneOf": [
309
+ {
310
+ "const": "."
311
+ },
312
+ {
313
+ "type": "string",
314
+ "minLength": 1,
315
+ "pattern": "^(?![A-Za-z]:)(?!.*(?:^|/)\\.{1,2}(?:/|$))[^/\\\\\u0000]+(?:/[^/\\\\\u0000]+)*$"
316
+ }
317
+ ]
318
+ },
319
+ "kind": {
320
+ "enum": [
321
+ "file",
322
+ "directory",
323
+ "manifest",
324
+ "skill",
325
+ "runtime-package"
326
+ ]
327
+ }
328
+ },
329
+ "required": [
330
+ "owner",
331
+ "path",
332
+ "kind"
333
+ ],
334
+ "additionalProperties": false
335
+ },
336
+ "OperatorDocument": {
337
+ "type": "object",
338
+ "properties": {
339
+ "kind": {
340
+ "const": "operator"
341
+ },
342
+ "id": {
343
+ "type": "string",
344
+ "minLength": 1
345
+ }
346
+ },
347
+ "required": [
348
+ "kind",
349
+ "id"
350
+ ],
351
+ "additionalProperties": false
352
+ },
353
+ "SourceDocument": {
354
+ "oneOf": [
355
+ {
356
+ "type": "object",
357
+ "properties": {
358
+ "kind": {
359
+ "const": "source"
360
+ },
361
+ "source": {
362
+ "type": "string",
363
+ "minLength": 1,
364
+ "pattern": "^git:.+$"
365
+ },
366
+ "revision": {
367
+ "type": "string",
368
+ "minLength": 1,
369
+ "pattern": "^[a-f0-9]{40}$"
370
+ },
371
+ "path": {
372
+ "type": "string",
373
+ "minLength": 1,
374
+ "pattern": "^(?![A-Za-z]:)(?!.*(?:^|/)\\.{1,2}(?:/|$))[^/\\\\\u0000]+(?:/[^/\\\\\u0000]+)*$"
375
+ },
376
+ "integrity": {
377
+ "$ref": "#/$defs/ByteIntegrity"
378
+ }
379
+ },
380
+ "required": [
381
+ "kind",
382
+ "source",
383
+ "revision",
384
+ "path",
385
+ "integrity"
386
+ ],
387
+ "additionalProperties": false
388
+ },
389
+ {
390
+ "type": "object",
391
+ "properties": {
392
+ "kind": {
393
+ "const": "source"
394
+ },
395
+ "source": {
396
+ "type": "string",
397
+ "minLength": 1,
398
+ "pattern": "^path:/.*$"
399
+ },
400
+ "revision": {
401
+ "const": "local"
402
+ },
403
+ "path": {
404
+ "type": "string",
405
+ "minLength": 1,
406
+ "pattern": "^(?![A-Za-z]:)(?!.*(?:^|/)\\.{1,2}(?:/|$))[^/\\\\\u0000]+(?:/[^/\\\\\u0000]+)*$"
407
+ },
408
+ "integrity": {
409
+ "$ref": "#/$defs/ByteIntegrity"
410
+ }
411
+ },
412
+ "required": [
413
+ "kind",
414
+ "source",
415
+ "revision",
416
+ "path",
417
+ "integrity"
418
+ ],
419
+ "additionalProperties": false
420
+ }
421
+ ]
422
+ },
423
+ "DeploymentDocument": {
424
+ "type": "object",
425
+ "properties": {
426
+ "kind": {
427
+ "const": "deployment"
428
+ },
429
+ "path": {
430
+ "type": "string",
431
+ "minLength": 1,
432
+ "pattern": "^(?![A-Za-z]:)(?!.*(?:^|/)\\.{1,2}(?:/|$))[^/\\\\\u0000]+(?:/[^/\\\\\u0000]+)*$"
433
+ },
434
+ "integrity": {
435
+ "$ref": "#/$defs/ByteIntegrity"
436
+ }
437
+ },
438
+ "required": [
439
+ "kind",
440
+ "path",
441
+ "integrity"
442
+ ],
443
+ "additionalProperties": false
444
+ },
445
+ "RecordDocument": {
446
+ "type": "object",
447
+ "properties": {
448
+ "kind": {
449
+ "const": "record"
450
+ },
451
+ "ref": {
452
+ "$ref": "#/$defs/ResolutionRef"
453
+ }
454
+ },
455
+ "required": [
456
+ "kind",
457
+ "ref"
458
+ ],
459
+ "additionalProperties": false
460
+ },
461
+ "ArtifactDocument": {
462
+ "type": "object",
463
+ "properties": {
464
+ "kind": {
465
+ "const": "artifact"
466
+ },
467
+ "owner": {
468
+ "$ref": "#/$defs/ArtifactRef"
469
+ },
470
+ "path": {
471
+ "type": "string",
472
+ "minLength": 1,
473
+ "pattern": "^(?![A-Za-z]:)(?!.*(?:^|/)\\.{1,2}(?:/|$))[^/\\\\\u0000]+(?:/[^/\\\\\u0000]+)*$"
474
+ },
475
+ "integrity": {
476
+ "$ref": "#/$defs/ByteIntegrity"
477
+ }
478
+ },
479
+ "required": [
480
+ "kind",
481
+ "owner",
482
+ "path",
483
+ "integrity"
484
+ ],
485
+ "additionalProperties": false
486
+ },
487
+ "Origin": {
488
+ "type": "object",
489
+ "properties": {
490
+ "kind": {
491
+ "enum": [
492
+ "soul-requirement",
493
+ "soul-default",
494
+ "workspace-default",
495
+ "import-adoption",
496
+ "operator",
497
+ "package-dependency",
498
+ "work-target",
499
+ "migration-evidence",
500
+ "provider-binding",
501
+ "workspace-admission",
502
+ "member-backlink",
503
+ "source-export",
504
+ "manifest-default"
505
+ ]
506
+ },
507
+ "document": {
508
+ "oneOf": [
509
+ {
510
+ "$ref": "#/$defs/SourceDocument"
511
+ },
512
+ {
513
+ "$ref": "#/$defs/DeploymentDocument"
514
+ },
515
+ {
516
+ "$ref": "#/$defs/OperatorDocument"
517
+ },
518
+ {
519
+ "$ref": "#/$defs/RecordDocument"
520
+ },
521
+ {
522
+ "$ref": "#/$defs/ArtifactDocument"
523
+ }
524
+ ]
525
+ },
526
+ "pointer": {
527
+ "type": "string",
528
+ "pattern": "^(?:/(?:[^~]|~[01])*)*$"
529
+ },
530
+ "span": {
531
+ "type": "object",
532
+ "properties": {
533
+ "start": {
534
+ "type": "integer",
535
+ "minimum": 0,
536
+ "maximum": 9007199254740991
537
+ },
538
+ "end": {
539
+ "type": "integer",
540
+ "minimum": 0,
541
+ "maximum": 9007199254740991
542
+ }
543
+ },
544
+ "required": [
545
+ "start",
546
+ "end"
547
+ ],
548
+ "additionalProperties": false
549
+ }
550
+ },
551
+ "required": [
552
+ "kind",
553
+ "document",
554
+ "pointer"
555
+ ],
556
+ "additionalProperties": false
557
+ },
558
+ "OperatorOrigin": {
559
+ "type": "object",
560
+ "properties": {
561
+ "kind": {
562
+ "const": "operator"
563
+ },
564
+ "document": {
565
+ "$ref": "#/$defs/OperatorDocument"
566
+ },
567
+ "pointer": {
568
+ "type": "string",
569
+ "pattern": "^(?:/(?:[^~]|~[01])*)*$"
570
+ },
571
+ "span": {
572
+ "type": "object",
573
+ "properties": {
574
+ "start": {
575
+ "type": "integer",
576
+ "minimum": 0,
577
+ "maximum": 9007199254740991
578
+ },
579
+ "end": {
580
+ "type": "integer",
581
+ "minimum": 0,
582
+ "maximum": 9007199254740991
583
+ }
584
+ },
585
+ "required": [
586
+ "start",
587
+ "end"
588
+ ],
589
+ "additionalProperties": false
590
+ }
591
+ },
592
+ "required": [
593
+ "kind",
594
+ "document",
595
+ "pointer"
596
+ ],
597
+ "additionalProperties": false
598
+ },
599
+ "Constraint": {
600
+ "oneOf": [
601
+ {
602
+ "type": "object",
603
+ "properties": {
604
+ "kind": {
605
+ "const": "equals"
606
+ },
607
+ "value": {},
608
+ "origin": {
609
+ "$ref": "#/$defs/Origin"
610
+ }
611
+ },
612
+ "required": [
613
+ "kind",
614
+ "value",
615
+ "origin"
616
+ ],
617
+ "additionalProperties": false
618
+ },
619
+ {
620
+ "type": "object",
621
+ "properties": {
622
+ "kind": {
623
+ "const": "required"
624
+ },
625
+ "origin": {
626
+ "$ref": "#/$defs/Origin"
627
+ }
628
+ },
629
+ "required": [
630
+ "kind",
631
+ "origin"
632
+ ],
633
+ "additionalProperties": false
634
+ }
635
+ ]
636
+ },
637
+ "Considered": {
638
+ "type": "object",
639
+ "properties": {
640
+ "kind": {
641
+ "enum": [
642
+ "manifest-default",
643
+ "workspace-default",
644
+ "soul-default",
645
+ "import-adoption",
646
+ "operator"
647
+ ]
648
+ },
649
+ "value": {},
650
+ "origin": {
651
+ "$ref": "#/$defs/Origin"
652
+ },
653
+ "disposition": {
654
+ "enum": [
655
+ "selected",
656
+ "overridden"
657
+ ]
658
+ }
659
+ },
660
+ "required": [
661
+ "kind",
662
+ "value",
663
+ "origin",
664
+ "disposition"
665
+ ],
666
+ "additionalProperties": false
667
+ },
668
+ "Choice": {
669
+ "type": "object",
670
+ "properties": {
671
+ "value": {},
672
+ "selectedBy": {
673
+ "oneOf": [
674
+ {
675
+ "type": "null"
676
+ },
677
+ {
678
+ "$ref": "#/$defs/Origin"
679
+ }
680
+ ]
681
+ },
682
+ "constraints": {
683
+ "type": "array",
684
+ "items": {
685
+ "$ref": "#/$defs/Constraint"
686
+ }
687
+ },
688
+ "considered": {
689
+ "type": "array",
690
+ "items": {
691
+ "$ref": "#/$defs/Considered"
692
+ }
693
+ }
694
+ },
695
+ "required": [
696
+ "value",
697
+ "selectedBy",
698
+ "constraints",
699
+ "considered"
700
+ ],
701
+ "additionalProperties": false
702
+ },
703
+ "GitObservation": {
704
+ "type": "object",
705
+ "properties": {
706
+ "identity": {
707
+ "$ref": "#/$defs/RepositoryIdentity"
708
+ },
709
+ "remote": {
710
+ "type": "string",
711
+ "minLength": 1,
712
+ "pattern": "^git:.+$"
713
+ },
714
+ "selector": {
715
+ "type": "string",
716
+ "minLength": 1
717
+ },
718
+ "commit": {
719
+ "type": "string",
720
+ "minLength": 1,
721
+ "pattern": "^[a-f0-9]{40}$"
722
+ },
723
+ "provenance": {
724
+ "type": "array",
725
+ "items": {
726
+ "$ref": "#/$defs/Origin"
727
+ },
728
+ "minItems": 1
729
+ }
730
+ },
731
+ "required": [
732
+ "identity",
733
+ "remote",
734
+ "selector",
735
+ "commit",
736
+ "provenance"
737
+ ],
738
+ "additionalProperties": false
739
+ },
740
+ "LocalObservation": {
741
+ "type": "object",
742
+ "properties": {
743
+ "kind": {
744
+ "const": "local"
745
+ },
746
+ "source": {
747
+ "type": "string",
748
+ "minLength": 1,
749
+ "pattern": "^path:/.*$"
750
+ },
751
+ "integrity": {
752
+ "$ref": "#/$defs/TreeIntegrity"
753
+ },
754
+ "provenance": {
755
+ "type": "array",
756
+ "items": {
757
+ "$ref": "#/$defs/Origin"
758
+ },
759
+ "minItems": 1
760
+ },
761
+ "repository": {
762
+ "$ref": "#/$defs/RepositoryIdentity"
763
+ }
764
+ },
765
+ "required": [
766
+ "kind",
767
+ "source",
768
+ "integrity",
769
+ "provenance"
770
+ ],
771
+ "additionalProperties": false
772
+ },
773
+ "SoulSelection": {
774
+ "type": "object",
775
+ "properties": {
776
+ "identity": {
777
+ "$ref": "#/$defs/SoulIdentity"
778
+ },
779
+ "revision": {
780
+ "oneOf": [
781
+ {
782
+ "$ref": "#/$defs/GitObservation"
783
+ },
784
+ {
785
+ "$ref": "#/$defs/LocalObservation"
786
+ }
787
+ ]
788
+ },
789
+ "alias": {
790
+ "type": "string",
791
+ "minLength": 1,
792
+ "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
793
+ },
794
+ "sourceArtifact": {
795
+ "$ref": "#/$defs/SoulArtifactRef"
796
+ },
797
+ "definition": {
798
+ "type": "string",
799
+ "minLength": 1,
800
+ "pattern": "^(?![A-Za-z]:)(?!.*(?:^|/)\\.{1,2}(?:/|$))[^/\\\\\u0000]+(?:/[^/\\\\\u0000]+)*$"
801
+ },
802
+ "projection": {
803
+ "type": "object",
804
+ "properties": {
805
+ "roots": {
806
+ "type": "array",
807
+ "items": {
808
+ "oneOf": [
809
+ {
810
+ "const": "."
811
+ },
812
+ {
813
+ "type": "string",
814
+ "minLength": 1,
815
+ "pattern": "^(?![A-Za-z]:)(?!.*(?:^|/)\\.{1,2}(?:/|$))[^/\\\\\u0000]+(?:/[^/\\\\\u0000]+)*$"
816
+ }
817
+ ]
818
+ },
819
+ "uniqueItems": true,
820
+ "minItems": 1,
821
+ "description": "Set in canonical UTF-8 order; runtime verifies closure and witnesses."
822
+ }
823
+ },
824
+ "required": [
825
+ "roots"
826
+ ],
827
+ "additionalProperties": false
828
+ }
829
+ },
830
+ "required": [
831
+ "identity",
832
+ "revision",
833
+ "alias",
834
+ "sourceArtifact",
835
+ "definition",
836
+ "projection"
837
+ ],
838
+ "additionalProperties": false
839
+ },
840
+ "PackageRow": {
841
+ "type": "object",
842
+ "properties": {
843
+ "source": {
844
+ "type": "string",
845
+ "minLength": 1,
846
+ "pattern": "^(?:git:.+|path:/.*|catalog:.+)$"
847
+ },
848
+ "path": {
849
+ "oneOf": [
850
+ {
851
+ "const": "."
852
+ },
853
+ {
854
+ "type": "string",
855
+ "minLength": 1,
856
+ "pattern": "^(?![A-Za-z]:)(?!.*(?:^|/)\\.{1,2}(?:/|$))[^/\\\\\u0000]+(?:/[^/\\\\\u0000]+)*$"
857
+ }
858
+ ]
859
+ },
860
+ "version": {
861
+ "type": "string",
862
+ "minLength": 1
863
+ },
864
+ "commit": {
865
+ "oneOf": [
866
+ {
867
+ "type": "string",
868
+ "minLength": 1,
869
+ "pattern": "^[a-f0-9]{40}$"
870
+ },
871
+ {
872
+ "const": "local"
873
+ }
874
+ ]
875
+ },
876
+ "integrity": {
877
+ "$ref": "#/$defs/PackageIntegrity"
878
+ },
879
+ "dependencies": {
880
+ "type": "array",
881
+ "items": {
882
+ "type": "string",
883
+ "minLength": 1,
884
+ "pattern": "^[a-z0-9][a-z0-9._-]*$"
885
+ },
886
+ "uniqueItems": true
887
+ }
888
+ },
889
+ "required": [
890
+ "source",
891
+ "path",
892
+ "version",
893
+ "commit",
894
+ "integrity",
895
+ "dependencies"
896
+ ],
897
+ "additionalProperties": false
898
+ },
899
+ "CapabilityOrigin": {
900
+ "oneOf": [
901
+ {
902
+ "type": "object",
903
+ "properties": {
904
+ "kind": {
905
+ "const": "package"
906
+ },
907
+ "package": {
908
+ "type": "string",
909
+ "minLength": 1,
910
+ "pattern": "^[a-z0-9][a-z0-9._-]*$"
911
+ },
912
+ "path": {
913
+ "oneOf": [
914
+ {
915
+ "const": "."
916
+ },
917
+ {
918
+ "type": "string",
919
+ "minLength": 1,
920
+ "pattern": "^(?![A-Za-z]:)(?!.*(?:^|/)\\.{1,2}(?:/|$))[^/\\\\\u0000]+(?:/[^/\\\\\u0000]+)*$"
921
+ }
922
+ ]
923
+ },
924
+ "projectionVersion": {
925
+ "const": 1
926
+ }
927
+ },
928
+ "required": [
929
+ "kind",
930
+ "package",
931
+ "path",
932
+ "projectionVersion"
933
+ ],
934
+ "additionalProperties": false
935
+ },
936
+ {
937
+ "type": "object",
938
+ "properties": {
939
+ "kind": {
940
+ "const": "local-capability"
941
+ },
942
+ "source": {
943
+ "type": "string",
944
+ "minLength": 1,
945
+ "pattern": "^path:/.*$"
946
+ },
947
+ "authoredAs": {
948
+ "enum": [
949
+ "owned",
950
+ "path"
951
+ ]
952
+ },
953
+ "witness": {
954
+ "$ref": "#/$defs/Origin"
955
+ }
956
+ },
957
+ "required": [
958
+ "kind",
959
+ "source",
960
+ "authoredAs",
961
+ "witness"
962
+ ],
963
+ "additionalProperties": false
964
+ }
965
+ ]
966
+ },
967
+ "CapabilityRow": {
968
+ "type": "object",
969
+ "properties": {
970
+ "version": {
971
+ "type": "string",
972
+ "minLength": 1
973
+ },
974
+ "artifact": {
975
+ "$ref": "#/$defs/CapabilityArtifactRef"
976
+ },
977
+ "origin": {
978
+ "$ref": "#/$defs/CapabilityOrigin"
979
+ }
980
+ },
981
+ "required": [
982
+ "version",
983
+ "artifact",
984
+ "origin"
985
+ ],
986
+ "additionalProperties": false
987
+ },
988
+ "ArtifactSet": {
989
+ "type": "object",
990
+ "properties": {
991
+ "schemaVersion": {
992
+ "const": 1
993
+ },
994
+ "packages": {
995
+ "type": "object",
996
+ "additionalProperties": {
997
+ "$ref": "#/$defs/PackageRow"
998
+ },
999
+ "propertyNames": {
1000
+ "type": "string",
1001
+ "minLength": 1,
1002
+ "pattern": "^[a-z0-9][a-z0-9._-]*$"
1003
+ }
1004
+ },
1005
+ "capabilities": {
1006
+ "type": "object",
1007
+ "additionalProperties": {
1008
+ "$ref": "#/$defs/CapabilityRow"
1009
+ },
1010
+ "propertyNames": {
1011
+ "type": "string",
1012
+ "minLength": 1,
1013
+ "pattern": "^[a-z0-9][a-z0-9._-]*$"
1014
+ }
1015
+ }
1016
+ },
1017
+ "required": [
1018
+ "schemaVersion",
1019
+ "packages",
1020
+ "capabilities"
1021
+ ],
1022
+ "additionalProperties": false
1023
+ },
1024
+ "CredentialRef": {
1025
+ "oneOf": [
1026
+ {
1027
+ "type": "object",
1028
+ "properties": {
1029
+ "kind": {
1030
+ "const": "env"
1031
+ },
1032
+ "name": {
1033
+ "type": "string",
1034
+ "minLength": 1,
1035
+ "pattern": "^[A-Za-z_][A-Za-z0-9_]*$"
1036
+ }
1037
+ },
1038
+ "required": [
1039
+ "kind",
1040
+ "name"
1041
+ ],
1042
+ "additionalProperties": false
1043
+ },
1044
+ {
1045
+ "type": "object",
1046
+ "properties": {
1047
+ "kind": {
1048
+ "const": "provider"
1049
+ },
1050
+ "provider": {
1051
+ "type": "string",
1052
+ "minLength": 1
1053
+ },
1054
+ "key": {
1055
+ "type": "string",
1056
+ "minLength": 1
1057
+ }
1058
+ },
1059
+ "required": [
1060
+ "kind",
1061
+ "provider",
1062
+ "key"
1063
+ ],
1064
+ "additionalProperties": false
1065
+ }
1066
+ ]
1067
+ },
1068
+ "ProviderBinding": {
1069
+ "type": "object",
1070
+ "properties": {
1071
+ "schemaVersion": {
1072
+ "const": 1
1073
+ },
1074
+ "capability": {
1075
+ "type": "string",
1076
+ "minLength": 1,
1077
+ "pattern": "^[a-z0-9][a-z0-9._-]*$"
1078
+ },
1079
+ "payloadContract": {
1080
+ "type": "string",
1081
+ "minLength": 1
1082
+ },
1083
+ "payloadVersion": {
1084
+ "type": "integer",
1085
+ "minimum": 1,
1086
+ "maximum": 9007199254740991
1087
+ },
1088
+ "payload": {},
1089
+ "credentialRefs": {
1090
+ "type": "object",
1091
+ "additionalProperties": {
1092
+ "$ref": "#/$defs/CredentialRef"
1093
+ }
1094
+ },
1095
+ "provenance": {
1096
+ "type": "array",
1097
+ "items": {
1098
+ "$ref": "#/$defs/Origin"
1099
+ }
1100
+ }
1101
+ },
1102
+ "required": [
1103
+ "schemaVersion",
1104
+ "capability",
1105
+ "payloadContract",
1106
+ "payloadVersion",
1107
+ "payload",
1108
+ "credentialRefs",
1109
+ "provenance"
1110
+ ],
1111
+ "additionalProperties": false
1112
+ },
1113
+ "Context": {
1114
+ "oneOf": [
1115
+ {
1116
+ "type": "object",
1117
+ "properties": {
1118
+ "kind": {
1119
+ "const": "workspace"
1120
+ },
1121
+ "identity": {
1122
+ "$ref": "#/$defs/WorkspaceIdentity"
1123
+ },
1124
+ "observation": {
1125
+ "$ref": "#/$defs/Origin"
1126
+ }
1127
+ },
1128
+ "required": [
1129
+ "kind",
1130
+ "identity",
1131
+ "observation"
1132
+ ],
1133
+ "additionalProperties": false
1134
+ },
1135
+ {
1136
+ "type": "object",
1137
+ "properties": {
1138
+ "kind": {
1139
+ "const": "standalone"
1140
+ },
1141
+ "key": {
1142
+ "oneOf": [
1143
+ {
1144
+ "type": "null"
1145
+ },
1146
+ {
1147
+ "type": "string",
1148
+ "minLength": 1
1149
+ }
1150
+ ]
1151
+ }
1152
+ },
1153
+ "required": [
1154
+ "kind",
1155
+ "key"
1156
+ ],
1157
+ "additionalProperties": false
1158
+ }
1159
+ ]
1160
+ },
1161
+ "PrivateContext": {
1162
+ "oneOf": [
1163
+ {
1164
+ "type": "object",
1165
+ "properties": {
1166
+ "kind": {
1167
+ "const": "workspace"
1168
+ },
1169
+ "identity": {
1170
+ "$ref": "#/$defs/WorkspaceIdentity"
1171
+ }
1172
+ },
1173
+ "required": [
1174
+ "kind",
1175
+ "identity"
1176
+ ],
1177
+ "additionalProperties": false
1178
+ },
1179
+ {
1180
+ "type": "object",
1181
+ "properties": {
1182
+ "kind": {
1183
+ "const": "standalone"
1184
+ },
1185
+ "key": {
1186
+ "type": "string",
1187
+ "minLength": 1
1188
+ }
1189
+ },
1190
+ "required": [
1191
+ "kind",
1192
+ "key"
1193
+ ],
1194
+ "additionalProperties": false
1195
+ }
1196
+ ]
1197
+ },
1198
+ "TeamRef": {
1199
+ "type": "object",
1200
+ "properties": {
1201
+ "provider": {
1202
+ "type": "string",
1203
+ "minLength": 1
1204
+ },
1205
+ "id": {
1206
+ "type": "string",
1207
+ "minLength": 1
1208
+ }
1209
+ },
1210
+ "required": [
1211
+ "provider",
1212
+ "id"
1213
+ ],
1214
+ "additionalProperties": false
1215
+ },
1216
+ "MessagingChoice": {
1217
+ "oneOf": [
1218
+ {
1219
+ "type": "object",
1220
+ "properties": {
1221
+ "schemaVersion": {
1222
+ "const": 1
1223
+ },
1224
+ "enabled": {
1225
+ "const": false
1226
+ }
1227
+ },
1228
+ "required": [
1229
+ "schemaVersion",
1230
+ "enabled"
1231
+ ],
1232
+ "additionalProperties": false
1233
+ },
1234
+ {
1235
+ "type": "object",
1236
+ "properties": {
1237
+ "schemaVersion": {
1238
+ "const": 1
1239
+ },
1240
+ "enabled": {
1241
+ "const": true
1242
+ },
1243
+ "privateKey": {
1244
+ "type": "object",
1245
+ "properties": {
1246
+ "provider": {
1247
+ "type": "string",
1248
+ "minLength": 1,
1249
+ "pattern": "^[a-z0-9][a-z0-9._-]*$"
1250
+ },
1251
+ "human": {
1252
+ "$ref": "#/$defs/TeamRef"
1253
+ },
1254
+ "context": {
1255
+ "$ref": "#/$defs/PrivateContext"
1256
+ }
1257
+ },
1258
+ "required": [
1259
+ "provider",
1260
+ "human",
1261
+ "context"
1262
+ ],
1263
+ "additionalProperties": false
1264
+ },
1265
+ "wider": {
1266
+ "type": "array",
1267
+ "items": {
1268
+ "$ref": "#/$defs/TeamRef"
1269
+ },
1270
+ "uniqueItems": true
1271
+ },
1272
+ "provenance": {
1273
+ "type": "array",
1274
+ "items": {
1275
+ "$ref": "#/$defs/Origin"
1276
+ }
1277
+ }
1278
+ },
1279
+ "required": [
1280
+ "schemaVersion",
1281
+ "enabled",
1282
+ "privateKey",
1283
+ "wider",
1284
+ "provenance"
1285
+ ],
1286
+ "additionalProperties": false
1287
+ }
1288
+ ]
1289
+ },
1290
+ "RuntimeResource": {
1291
+ "type": "object",
1292
+ "properties": {
1293
+ "runtime": {
1294
+ "type": "string",
1295
+ "minLength": 1
1296
+ },
1297
+ "package": {
1298
+ "type": "string",
1299
+ "minLength": 1
1300
+ },
1301
+ "resource": {
1302
+ "type": "string",
1303
+ "minLength": 1
1304
+ },
1305
+ "requiredBy": {
1306
+ "type": "array",
1307
+ "items": {
1308
+ "$ref": "#/$defs/Origin"
1309
+ }
1310
+ }
1311
+ },
1312
+ "required": [
1313
+ "runtime",
1314
+ "package",
1315
+ "resource",
1316
+ "requiredBy"
1317
+ ],
1318
+ "additionalProperties": false
1319
+ },
1320
+ "LaunchRecipe": {
1321
+ "type": "object",
1322
+ "required": [
1323
+ "version",
1324
+ "runtime"
1325
+ ],
1326
+ "properties": {
1327
+ "version": {
1328
+ "const": 1
1329
+ },
1330
+ "runtime": {
1331
+ "enum": [
1332
+ "pi",
1333
+ "claude",
1334
+ "codex"
1335
+ ]
1336
+ }
1337
+ },
1338
+ "description": "Envelope only: the sole existing launch codec owns all remaining recipe fields and their interpretation."
1339
+ },
1340
+ "InstructionBlock": {
1341
+ "type": "object",
1342
+ "properties": {
1343
+ "source": {
1344
+ "type": "string",
1345
+ "minLength": 1,
1346
+ "pattern": "^(kernel|work-mode|capability|config):[A-Za-z0-9._:-]+$"
1347
+ },
1348
+ "resource": {
1349
+ "type": "string",
1350
+ "minLength": 1
1351
+ },
1352
+ "choice": {
1353
+ "type": "string",
1354
+ "minLength": 1
1355
+ }
1356
+ },
1357
+ "required": [
1358
+ "source",
1359
+ "resource"
1360
+ ],
1361
+ "additionalProperties": false
1362
+ },
1363
+ "InstructionOmission": {
1364
+ "type": "object",
1365
+ "properties": {
1366
+ "source": {
1367
+ "type": "string",
1368
+ "minLength": 1,
1369
+ "pattern": "^(kernel|work-mode|capability|config):[A-Za-z0-9._:-]+$"
1370
+ },
1371
+ "reason": {
1372
+ "enum": [
1373
+ "disabled",
1374
+ "helper-knowledge",
1375
+ "helper-policy"
1376
+ ]
1377
+ },
1378
+ "choice": {
1379
+ "type": "string",
1380
+ "minLength": 1
1381
+ }
1382
+ },
1383
+ "required": [
1384
+ "source",
1385
+ "reason"
1386
+ ],
1387
+ "additionalProperties": false
1388
+ },
1389
+ "InstructionComposition": {
1390
+ "type": "object",
1391
+ "properties": {
1392
+ "schemaVersion": {
1393
+ "const": 1
1394
+ },
1395
+ "mode": {
1396
+ "enum": [
1397
+ "worktree",
1398
+ "checkout",
1399
+ "attached",
1400
+ "workspace",
1401
+ "directory"
1402
+ ]
1403
+ },
1404
+ "body": {
1405
+ "type": "string",
1406
+ "minLength": 1
1407
+ },
1408
+ "blocks": {
1409
+ "type": "array",
1410
+ "items": {
1411
+ "$ref": "#/$defs/InstructionBlock"
1412
+ }
1413
+ },
1414
+ "omissions": {
1415
+ "type": "array",
1416
+ "items": {
1417
+ "$ref": "#/$defs/InstructionOmission"
1418
+ }
1419
+ },
1420
+ "skills": {
1421
+ "type": "array",
1422
+ "items": {
1423
+ "type": "object",
1424
+ "properties": {
1425
+ "name": {
1426
+ "type": "string",
1427
+ "minLength": 1,
1428
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._-]*$"
1429
+ },
1430
+ "resource": {
1431
+ "type": "string",
1432
+ "minLength": 1
1433
+ }
1434
+ },
1435
+ "required": [
1436
+ "name",
1437
+ "resource"
1438
+ ],
1439
+ "additionalProperties": false
1440
+ }
1441
+ }
1442
+ },
1443
+ "required": [
1444
+ "schemaVersion",
1445
+ "mode",
1446
+ "body",
1447
+ "blocks",
1448
+ "omissions",
1449
+ "skills"
1450
+ ],
1451
+ "additionalProperties": false
1452
+ },
1453
+ "Dispatch": {
1454
+ "type": "object",
1455
+ "properties": {
1456
+ "schemaVersion": {
1457
+ "const": 1
1458
+ },
1459
+ "providerManifests": {
1460
+ "type": "object",
1461
+ "additionalProperties": {
1462
+ "type": "string",
1463
+ "minLength": 1
1464
+ },
1465
+ "propertyNames": {
1466
+ "type": "string",
1467
+ "minLength": 1,
1468
+ "pattern": "^[a-z0-9][a-z0-9._-]*$"
1469
+ }
1470
+ },
1471
+ "settingsChoices": {
1472
+ "type": "object",
1473
+ "additionalProperties": {
1474
+ "type": "object",
1475
+ "additionalProperties": {
1476
+ "type": "string",
1477
+ "minLength": 1
1478
+ }
1479
+ },
1480
+ "propertyNames": {
1481
+ "type": "string",
1482
+ "minLength": 1,
1483
+ "pattern": "^[a-z0-9][a-z0-9._-]*$"
1484
+ }
1485
+ },
1486
+ "launch": {
1487
+ "oneOf": [
1488
+ {
1489
+ "type": "null"
1490
+ },
1491
+ {
1492
+ "$ref": "#/$defs/LaunchRecipe"
1493
+ }
1494
+ ]
1495
+ },
1496
+ "runtimePackages": {
1497
+ "type": "array",
1498
+ "items": {
1499
+ "$ref": "#/$defs/RuntimeResource"
1500
+ }
1501
+ },
1502
+ "hostRequirements": {
1503
+ "type": "array",
1504
+ "items": {}
1505
+ },
1506
+ "workTargetInputs": {
1507
+ "type": "object",
1508
+ "additionalProperties": {
1509
+ "type": "string",
1510
+ "minLength": 1
1511
+ }
1512
+ },
1513
+ "composition": {
1514
+ "$ref": "#/$defs/InstructionComposition"
1515
+ }
1516
+ },
1517
+ "required": [
1518
+ "schemaVersion",
1519
+ "providerManifests",
1520
+ "settingsChoices",
1521
+ "launch",
1522
+ "runtimePackages",
1523
+ "hostRequirements",
1524
+ "workTargetInputs"
1525
+ ],
1526
+ "additionalProperties": false,
1527
+ "allOf": [
1528
+ {
1529
+ "if": {
1530
+ "type": "object",
1531
+ "properties": {
1532
+ "launch": {
1533
+ "type": "object"
1534
+ }
1535
+ },
1536
+ "required": [
1537
+ "launch"
1538
+ ]
1539
+ },
1540
+ "then": {
1541
+ "type": "object",
1542
+ "properties": {
1543
+ "composition": {
1544
+ "$ref": "#/$defs/InstructionComposition"
1545
+ }
1546
+ },
1547
+ "required": [
1548
+ "composition"
1549
+ ]
1550
+ }
1551
+ }
1552
+ ]
1553
+ },
1554
+ "CapturedSubject": {
1555
+ "oneOf": [
1556
+ {
1557
+ "type": "object",
1558
+ "properties": {
1559
+ "kind": {
1560
+ "const": "persistent"
1561
+ },
1562
+ "soul": {
1563
+ "$ref": "#/$defs/SoulSelection"
1564
+ }
1565
+ },
1566
+ "required": [
1567
+ "kind",
1568
+ "soul"
1569
+ ],
1570
+ "additionalProperties": false
1571
+ },
1572
+ {
1573
+ "type": "object",
1574
+ "properties": {
1575
+ "kind": {
1576
+ "const": "helper"
1577
+ },
1578
+ "provider": {
1579
+ "$ref": "#/$defs/CapabilityArtifactRef"
1580
+ },
1581
+ "definition": {
1582
+ "$ref": "#/$defs/ResourceRef"
1583
+ },
1584
+ "name": {
1585
+ "type": "string",
1586
+ "minLength": 1,
1587
+ "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
1588
+ }
1589
+ },
1590
+ "required": [
1591
+ "kind",
1592
+ "provider",
1593
+ "definition",
1594
+ "name"
1595
+ ],
1596
+ "additionalProperties": false
1597
+ }
1598
+ ]
1599
+ },
1600
+ "ExecutionBinding": {
1601
+ "type": "object",
1602
+ "properties": {
1603
+ "schemaVersion": {
1604
+ "const": 1
1605
+ },
1606
+ "deployment": {
1607
+ "type": "string",
1608
+ "minLength": 1
1609
+ },
1610
+ "resolution": {
1611
+ "$ref": "#/$defs/ResolutionRef"
1612
+ }
1613
+ },
1614
+ "required": [
1615
+ "schemaVersion",
1616
+ "deployment",
1617
+ "resolution"
1618
+ ],
1619
+ "additionalProperties": false
1620
+ },
1621
+ "CapturedAction": {
1622
+ "oneOf": [
1623
+ {
1624
+ "type": "object",
1625
+ "properties": {
1626
+ "kind": {
1627
+ "enum": [
1628
+ "inspect",
1629
+ "compose"
1630
+ ]
1631
+ }
1632
+ },
1633
+ "required": [
1634
+ "kind"
1635
+ ],
1636
+ "additionalProperties": false
1637
+ },
1638
+ {
1639
+ "type": "object",
1640
+ "properties": {
1641
+ "kind": {
1642
+ "const": "command"
1643
+ },
1644
+ "capability": {
1645
+ "type": "string",
1646
+ "minLength": 1,
1647
+ "pattern": "^[a-z0-9][a-z0-9._-]*$"
1648
+ },
1649
+ "name": {
1650
+ "type": "string",
1651
+ "minLength": 1
1652
+ }
1653
+ },
1654
+ "required": [
1655
+ "kind",
1656
+ "capability",
1657
+ "name"
1658
+ ],
1659
+ "additionalProperties": false
1660
+ },
1661
+ {
1662
+ "type": "object",
1663
+ "properties": {
1664
+ "kind": {
1665
+ "const": "command"
1666
+ },
1667
+ "namespace": {
1668
+ "type": "string",
1669
+ "minLength": 1
1670
+ },
1671
+ "name": {
1672
+ "type": "string",
1673
+ "minLength": 1
1674
+ }
1675
+ },
1676
+ "required": [
1677
+ "kind",
1678
+ "namespace",
1679
+ "name"
1680
+ ],
1681
+ "additionalProperties": false
1682
+ },
1683
+ {
1684
+ "type": "object",
1685
+ "properties": {
1686
+ "kind": {
1687
+ "const": "hook"
1688
+ },
1689
+ "capability": {
1690
+ "type": "string",
1691
+ "minLength": 1,
1692
+ "pattern": "^[a-z0-9][a-z0-9._-]*$"
1693
+ },
1694
+ "name": {
1695
+ "type": "string",
1696
+ "minLength": 1
1697
+ }
1698
+ },
1699
+ "required": [
1700
+ "kind",
1701
+ "capability",
1702
+ "name"
1703
+ ],
1704
+ "additionalProperties": false
1705
+ },
1706
+ {
1707
+ "type": "object",
1708
+ "properties": {
1709
+ "kind": {
1710
+ "const": "operation"
1711
+ },
1712
+ "slot": {
1713
+ "enum": [
1714
+ "knowledge",
1715
+ "messaging",
1716
+ "tasks"
1717
+ ]
1718
+ },
1719
+ "name": {
1720
+ "type": "string",
1721
+ "minLength": 1
1722
+ }
1723
+ },
1724
+ "required": [
1725
+ "kind",
1726
+ "slot",
1727
+ "name"
1728
+ ],
1729
+ "additionalProperties": false
1730
+ }
1731
+ ]
1732
+ },
1733
+ "IncarnationId": {
1734
+ "type": "string",
1735
+ "minLength": 1,
1736
+ "pattern": "^[a-f0-9]{8}-[a-f0-9]{4}-4[a-f0-9]{3}-[89ab][a-f0-9]{3}-[a-f0-9]{12}$"
1737
+ },
1738
+ "CapturedIntentRef": {
1739
+ "type": "object",
1740
+ "properties": {
1741
+ "schemaVersion": {
1742
+ "const": 1
1743
+ },
1744
+ "executionId": {
1745
+ "type": "string",
1746
+ "minLength": 1,
1747
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$"
1748
+ },
1749
+ "incarnationId": {
1750
+ "$ref": "#/$defs/IncarnationId"
1751
+ },
1752
+ "attempt": {
1753
+ "type": "integer",
1754
+ "minimum": 1,
1755
+ "maximum": 9007199254740991
1756
+ }
1757
+ },
1758
+ "required": [
1759
+ "schemaVersion",
1760
+ "executionId",
1761
+ "incarnationId",
1762
+ "attempt"
1763
+ ],
1764
+ "additionalProperties": false
1765
+ },
1766
+ "CapturedInvocationContext": {
1767
+ "type": "object",
1768
+ "properties": {
1769
+ "schemaVersion": {
1770
+ "const": 1
1771
+ },
1772
+ "executionBinding": {
1773
+ "$ref": "#/$defs/ExecutionBinding"
1774
+ },
1775
+ "subject": {
1776
+ "$ref": "#/$defs/CapturedSubject"
1777
+ },
1778
+ "instance": {
1779
+ "oneOf": [
1780
+ {
1781
+ "type": "null"
1782
+ },
1783
+ {
1784
+ "type": "object",
1785
+ "properties": {
1786
+ "home": {
1787
+ "type": "string",
1788
+ "minLength": 1
1789
+ },
1790
+ "work": {
1791
+ "type": "string",
1792
+ "minLength": 1
1793
+ },
1794
+ "name": {
1795
+ "type": "string",
1796
+ "minLength": 1
1797
+ },
1798
+ "agent": {
1799
+ "type": "string",
1800
+ "minLength": 1
1801
+ },
1802
+ "incarnationId": {
1803
+ "$ref": "#/$defs/IncarnationId"
1804
+ }
1805
+ },
1806
+ "required": [
1807
+ "home",
1808
+ "work",
1809
+ "name",
1810
+ "agent",
1811
+ "incarnationId"
1812
+ ],
1813
+ "additionalProperties": false
1814
+ }
1815
+ ]
1816
+ },
1817
+ "intent": {
1818
+ "oneOf": [
1819
+ {
1820
+ "type": "null"
1821
+ },
1822
+ {
1823
+ "$ref": "#/$defs/CapturedIntentRef"
1824
+ }
1825
+ ]
1826
+ },
1827
+ "context": {
1828
+ "$ref": "#/$defs/Context"
1829
+ },
1830
+ "responsibleHuman": {
1831
+ "oneOf": [
1832
+ {
1833
+ "type": "null"
1834
+ },
1835
+ {
1836
+ "$ref": "#/$defs/TeamRef"
1837
+ }
1838
+ ]
1839
+ },
1840
+ "messagingChoice": {
1841
+ "$ref": "#/$defs/MessagingChoice"
1842
+ },
1843
+ "capability": {
1844
+ "type": "string",
1845
+ "minLength": 1,
1846
+ "pattern": "^[a-z0-9][a-z0-9._-]*$"
1847
+ },
1848
+ "action": {
1849
+ "$ref": "#/$defs/CapturedAction"
1850
+ },
1851
+ "priorReceipt": {}
1852
+ },
1853
+ "required": [
1854
+ "schemaVersion",
1855
+ "executionBinding",
1856
+ "subject",
1857
+ "instance",
1858
+ "intent",
1859
+ "context",
1860
+ "responsibleHuman",
1861
+ "messagingChoice",
1862
+ "capability",
1863
+ "action",
1864
+ "priorReceipt"
1865
+ ],
1866
+ "additionalProperties": false,
1867
+ "description": "Bounded generic projection: exact subject union and validated record/instance equality are mandatory. Incarnation and intent are independently minted durable identities, never a resolution/home/name digest. A null intent grants no mutation authority. Prior receipt is opaque nullable JSON, not credentials."
1868
+ },
1869
+ "ProviderCheckInput": {
1870
+ "type": "object",
1871
+ "properties": {
1872
+ "binding": {
1873
+ "$ref": "#/$defs/ProviderBinding"
1874
+ },
1875
+ "context": {
1876
+ "$ref": "#/$defs/Context"
1877
+ },
1878
+ "action": {
1879
+ "type": "object",
1880
+ "required": [
1881
+ "kind"
1882
+ ],
1883
+ "properties": {
1884
+ "kind": {
1885
+ "type": "string",
1886
+ "minLength": 1
1887
+ }
1888
+ }
1889
+ },
1890
+ "invocation": {
1891
+ "$ref": "#/$defs/CapturedInvocationContext"
1892
+ }
1893
+ },
1894
+ "required": [
1895
+ "binding",
1896
+ "context",
1897
+ "action"
1898
+ ],
1899
+ "additionalProperties": false
1900
+ },
1901
+ "CapturedResolution": {
1902
+ "type": "object",
1903
+ "properties": {
1904
+ "schemaVersion": {
1905
+ "const": 1
1906
+ },
1907
+ "capture": {
1908
+ "enum": [
1909
+ "prepared",
1910
+ "reconstructed"
1911
+ ]
1912
+ },
1913
+ "subject": {
1914
+ "$ref": "#/$defs/CapturedSubject"
1915
+ },
1916
+ "context": {
1917
+ "$ref": "#/$defs/Context"
1918
+ },
1919
+ "artifacts": {
1920
+ "$ref": "#/$defs/ArtifactSet"
1921
+ },
1922
+ "choices": {
1923
+ "type": "object",
1924
+ "additionalProperties": {
1925
+ "$ref": "#/$defs/Choice"
1926
+ },
1927
+ "propertyNames": {
1928
+ "pattern": "^/"
1929
+ }
1930
+ },
1931
+ "bindings": {
1932
+ "type": "object",
1933
+ "additionalProperties": false,
1934
+ "properties": {
1935
+ "knowledge": {
1936
+ "$ref": "#/$defs/ProviderBinding"
1937
+ },
1938
+ "messaging": {
1939
+ "$ref": "#/$defs/ProviderBinding"
1940
+ },
1941
+ "tasks": {
1942
+ "$ref": "#/$defs/ProviderBinding"
1943
+ }
1944
+ }
1945
+ },
1946
+ "messagingChoice": {
1947
+ "$ref": "#/$defs/MessagingChoice"
1948
+ },
1949
+ "resources": {
1950
+ "type": "object",
1951
+ "additionalProperties": {
1952
+ "$ref": "#/$defs/ResourceRef"
1953
+ }
1954
+ },
1955
+ "resourceBundles": {
1956
+ "type": "array",
1957
+ "items": {
1958
+ "$ref": "#/$defs/ResourceArtifactRef"
1959
+ },
1960
+ "uniqueItems": true
1961
+ },
1962
+ "dispatch": {
1963
+ "$ref": "#/$defs/Dispatch"
1964
+ },
1965
+ "helpers": {
1966
+ "type": "object",
1967
+ "additionalProperties": {
1968
+ "$ref": "#/$defs/ResolutionRef"
1969
+ }
1970
+ },
1971
+ "evidence": {
1972
+ "type": "array",
1973
+ "items": {
1974
+ "$ref": "#/$defs/Origin"
1975
+ }
1976
+ }
1977
+ },
1978
+ "required": [
1979
+ "schemaVersion",
1980
+ "capture",
1981
+ "subject",
1982
+ "context",
1983
+ "artifacts",
1984
+ "choices",
1985
+ "bindings",
1986
+ "messagingChoice",
1987
+ "resources",
1988
+ "resourceBundles",
1989
+ "dispatch",
1990
+ "helpers",
1991
+ "evidence"
1992
+ ],
1993
+ "additionalProperties": false,
1994
+ "allOf": [
1995
+ {
1996
+ "if": {
1997
+ "type": "object",
1998
+ "properties": {
1999
+ "capture": {
2000
+ "const": "reconstructed"
2001
+ }
2002
+ },
2003
+ "required": [
2004
+ "capture"
2005
+ ]
2006
+ },
2007
+ "then": {
2008
+ "type": "object",
2009
+ "properties": {
2010
+ "evidence": {
2011
+ "type": "array",
2012
+ "minItems": 1
2013
+ }
2014
+ }
2015
+ }
2016
+ }
2017
+ ]
2018
+ },
2019
+ "CapturedSessionBackend": {
2020
+ "oneOf": [
2021
+ {
2022
+ "type": "object",
2023
+ "properties": {
2024
+ "backend": {
2025
+ "const": "tmux"
2026
+ },
2027
+ "binary": {
2028
+ "type": "string",
2029
+ "minLength": 1,
2030
+ "pattern": "^/",
2031
+ "description": "Runtime also requires a normalized absolute path without NUL."
2032
+ },
2033
+ "socket": {
2034
+ "type": "string",
2035
+ "minLength": 1,
2036
+ "pattern": "^/",
2037
+ "description": "Runtime also requires a normalized absolute path without NUL."
2038
+ },
2039
+ "session": {
2040
+ "type": "string",
2041
+ "minLength": 1,
2042
+ "pattern": "^[A-Za-z0-9_-]+$"
2043
+ }
2044
+ },
2045
+ "required": [
2046
+ "backend",
2047
+ "binary",
2048
+ "socket",
2049
+ "session"
2050
+ ],
2051
+ "additionalProperties": false
2052
+ },
2053
+ {
2054
+ "type": "object",
2055
+ "properties": {
2056
+ "backend": {
2057
+ "const": "herdr"
2058
+ },
2059
+ "binary": {
2060
+ "type": "string",
2061
+ "minLength": 1,
2062
+ "pattern": "^/",
2063
+ "description": "Runtime also requires a normalized absolute path without NUL."
2064
+ },
2065
+ "socket": {
2066
+ "type": "string",
2067
+ "minLength": 1,
2068
+ "pattern": "^/",
2069
+ "description": "Runtime also requires a normalized absolute path without NUL."
2070
+ },
2071
+ "protocol": {
2072
+ "enum": [
2073
+ 20,
2074
+ 22
2075
+ ]
2076
+ }
2077
+ },
2078
+ "required": [
2079
+ "backend",
2080
+ "binary",
2081
+ "socket",
2082
+ "protocol"
2083
+ ],
2084
+ "additionalProperties": false
2085
+ }
2086
+ ]
2087
+ },
2088
+ "CapturedSessionTarget": {
2089
+ "oneOf": [
2090
+ {
2091
+ "type": "object",
2092
+ "properties": {
2093
+ "backend": {
2094
+ "const": "tmux"
2095
+ },
2096
+ "socket": {
2097
+ "type": "string",
2098
+ "minLength": 1,
2099
+ "pattern": "^/",
2100
+ "description": "Runtime also requires a normalized absolute path without NUL."
2101
+ },
2102
+ "session": {
2103
+ "type": "string",
2104
+ "minLength": 1
2105
+ },
2106
+ "window": {
2107
+ "type": "string",
2108
+ "minLength": 1
2109
+ }
2110
+ },
2111
+ "required": [
2112
+ "backend",
2113
+ "socket",
2114
+ "session",
2115
+ "window"
2116
+ ],
2117
+ "additionalProperties": false
2118
+ },
2119
+ {
2120
+ "type": "object",
2121
+ "properties": {
2122
+ "backend": {
2123
+ "const": "herdr"
2124
+ },
2125
+ "binary": {
2126
+ "type": "string",
2127
+ "minLength": 1,
2128
+ "pattern": "^/",
2129
+ "description": "Runtime also requires a normalized absolute path without NUL."
2130
+ },
2131
+ "socket": {
2132
+ "type": "string",
2133
+ "minLength": 1,
2134
+ "pattern": "^/",
2135
+ "description": "Runtime also requires a normalized absolute path without NUL."
2136
+ },
2137
+ "protocol": {
2138
+ "enum": [
2139
+ 20,
2140
+ 22
2141
+ ]
2142
+ },
2143
+ "workspaceId": {
2144
+ "type": "string",
2145
+ "minLength": 1
2146
+ },
2147
+ "paneId": {
2148
+ "type": "string",
2149
+ "minLength": 1
2150
+ },
2151
+ "terminalId": {
2152
+ "type": "string",
2153
+ "minLength": 1
2154
+ }
2155
+ },
2156
+ "required": [
2157
+ "backend",
2158
+ "binary",
2159
+ "socket",
2160
+ "protocol",
2161
+ "workspaceId",
2162
+ "paneId",
2163
+ "terminalId"
2164
+ ],
2165
+ "additionalProperties": false
2166
+ }
2167
+ ]
2168
+ },
2169
+ "CapturedSessionRequest": {
2170
+ "type": "object",
2171
+ "properties": {
2172
+ "schemaVersion": {
2173
+ "const": 1
2174
+ },
2175
+ "backend": {
2176
+ "$ref": "#/$defs/CapturedSessionBackend"
2177
+ },
2178
+ "task": {
2179
+ "type": "string"
2180
+ },
2181
+ "stopGraceMs": {
2182
+ "type": "integer",
2183
+ "minimum": 1,
2184
+ "maximum": 300000
2185
+ }
2186
+ },
2187
+ "required": [
2188
+ "schemaVersion"
2189
+ ],
2190
+ "additionalProperties": false
2191
+ },
2192
+ "CapturedNativeSessionAvailability": {
2193
+ "type": "object",
2194
+ "properties": {
2195
+ "schemaVersion": {
2196
+ "const": 1
2197
+ },
2198
+ "api": {
2199
+ "type": "object",
2200
+ "properties": {
2201
+ "contract": {
2202
+ "const": "oats.captured-session"
2203
+ },
2204
+ "version": {
2205
+ "const": 2
2206
+ },
2207
+ "available": {
2208
+ "const": true
2209
+ },
2210
+ "backends": {
2211
+ "const": [
2212
+ "tmux",
2213
+ "herdr"
2214
+ ]
2215
+ }
2216
+ },
2217
+ "required": [
2218
+ "contract",
2219
+ "version",
2220
+ "available",
2221
+ "backends"
2222
+ ],
2223
+ "additionalProperties": false
2224
+ },
2225
+ "readiness": {
2226
+ "type": "object",
2227
+ "properties": {
2228
+ "status": {
2229
+ "const": "not-checked"
2230
+ }
2231
+ },
2232
+ "required": [
2233
+ "status"
2234
+ ],
2235
+ "additionalProperties": false
2236
+ }
2237
+ },
2238
+ "required": [
2239
+ "schemaVersion",
2240
+ "api",
2241
+ "readiness"
2242
+ ],
2243
+ "additionalProperties": false,
2244
+ "description": "Static callable interface availability only; no selected-record, provider, instance or host readiness is checked. Actual native action validation/receipts remain mandatory."
2245
+ },
2246
+ "Problem": {
2247
+ "type": "object",
2248
+ "properties": {
2249
+ "code": {
2250
+ "type": "string",
2251
+ "minLength": 1
2252
+ },
2253
+ "message": {
2254
+ "type": "string",
2255
+ "minLength": 1
2256
+ },
2257
+ "origins": {
2258
+ "type": "array",
2259
+ "items": {
2260
+ "$ref": "#/$defs/Origin"
2261
+ }
2262
+ },
2263
+ "target": {},
2264
+ "details": {}
2265
+ },
2266
+ "required": [
2267
+ "code",
2268
+ "message",
2269
+ "origins"
2270
+ ],
2271
+ "additionalProperties": false
2272
+ },
2273
+ "PackageRequest": {
2274
+ "type": "object",
2275
+ "properties": {
2276
+ "source": {
2277
+ "type": "string",
2278
+ "minLength": 1,
2279
+ "pattern": "^(?:git:.+|path:/.*|catalog:.+)$"
2280
+ },
2281
+ "path": {
2282
+ "oneOf": [
2283
+ {
2284
+ "const": "."
2285
+ },
2286
+ {
2287
+ "type": "string",
2288
+ "minLength": 1,
2289
+ "pattern": "^(?![A-Za-z]:)(?!.*(?:^|/)\\.{1,2}(?:/|$))[^/\\\\\u0000]+(?:/[^/\\\\\u0000]+)*$"
2290
+ }
2291
+ ]
2292
+ }
2293
+ },
2294
+ "required": [
2295
+ "source",
2296
+ "path"
2297
+ ],
2298
+ "additionalProperties": false
2299
+ },
2300
+ "Freshness": {
2301
+ "type": "object",
2302
+ "properties": {
2303
+ "state": {
2304
+ "enum": [
2305
+ "refreshed",
2306
+ "offline",
2307
+ "failed",
2308
+ "not-checked"
2309
+ ]
2310
+ },
2311
+ "observedAt": {
2312
+ "oneOf": [
2313
+ {
2314
+ "type": "null"
2315
+ },
2316
+ {
2317
+ "type": "string",
2318
+ "minLength": 1,
2319
+ "pattern": "^(?:[0-9]{4}|[+-][0-9]{6})-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}\\.[0-9]{3}Z$"
2320
+ }
2321
+ ]
2322
+ },
2323
+ "problems": {
2324
+ "type": "array",
2325
+ "items": {
2326
+ "$ref": "#/$defs/Problem"
2327
+ }
2328
+ }
2329
+ },
2330
+ "required": [
2331
+ "state",
2332
+ "observedAt",
2333
+ "problems"
2334
+ ],
2335
+ "additionalProperties": false
2336
+ },
2337
+ "Selection": {
2338
+ "type": "object",
2339
+ "properties": {
2340
+ "request": {
2341
+ "$ref": "#/$defs/PackageRequest"
2342
+ },
2343
+ "current": {
2344
+ "oneOf": [
2345
+ {
2346
+ "type": "null"
2347
+ },
2348
+ {
2349
+ "type": "string",
2350
+ "minLength": 1,
2351
+ "pattern": "^sha256-[a-f0-9]{64}$"
2352
+ }
2353
+ ]
2354
+ },
2355
+ "available": {
2356
+ "oneOf": [
2357
+ {
2358
+ "type": "null"
2359
+ },
2360
+ {
2361
+ "type": "string",
2362
+ "minLength": 1,
2363
+ "pattern": "^sha256-[a-f0-9]{64}$"
2364
+ }
2365
+ ]
2366
+ },
2367
+ "freshness": {
2368
+ "$ref": "#/$defs/Freshness"
2369
+ }
2370
+ },
2371
+ "required": [
2372
+ "request",
2373
+ "current",
2374
+ "available",
2375
+ "freshness"
2376
+ ],
2377
+ "additionalProperties": false,
2378
+ "allOf": [
2379
+ {
2380
+ "if": {
2381
+ "type": "object",
2382
+ "properties": {
2383
+ "freshness": {
2384
+ "type": "object",
2385
+ "properties": {
2386
+ "state": {
2387
+ "const": "refreshed"
2388
+ }
2389
+ },
2390
+ "required": [
2391
+ "state"
2392
+ ]
2393
+ }
2394
+ },
2395
+ "required": [
2396
+ "freshness"
2397
+ ]
2398
+ },
2399
+ "then": {
2400
+ "type": "object",
2401
+ "properties": {
2402
+ "available": {
2403
+ "type": "string",
2404
+ "minLength": 1,
2405
+ "pattern": "^sha256-[a-f0-9]{64}$"
2406
+ },
2407
+ "freshness": {
2408
+ "type": "object",
2409
+ "properties": {
2410
+ "observedAt": {
2411
+ "type": "string",
2412
+ "minLength": 1
2413
+ }
2414
+ }
2415
+ }
2416
+ }
2417
+ }
2418
+ }
2419
+ ]
2420
+ },
2421
+ "Lock3": {
2422
+ "type": "object",
2423
+ "properties": {
2424
+ "lockfileVersion": {
2425
+ "const": 3
2426
+ },
2427
+ "artifactSets": {
2428
+ "type": "object",
2429
+ "additionalProperties": {
2430
+ "$ref": "#/$defs/ArtifactSet"
2431
+ },
2432
+ "propertyNames": {
2433
+ "type": "string",
2434
+ "minLength": 1,
2435
+ "pattern": "^sha256-[a-f0-9]{64}$"
2436
+ }
2437
+ },
2438
+ "selections": {
2439
+ "type": "object",
2440
+ "additionalProperties": {
2441
+ "$ref": "#/$defs/Selection"
2442
+ },
2443
+ "propertyNames": {
2444
+ "type": "string",
2445
+ "minLength": 1,
2446
+ "pattern": "^sha256-[a-f0-9]{64}$"
2447
+ }
2448
+ }
2449
+ },
2450
+ "required": [
2451
+ "lockfileVersion",
2452
+ "artifactSets",
2453
+ "selections"
2454
+ ],
2455
+ "additionalProperties": false
2456
+ },
2457
+ "ApprovalEntry": {
2458
+ "type": "object",
2459
+ "properties": {
2460
+ "artifact": {
2461
+ "$ref": "#/$defs/CapabilityArtifactRef"
2462
+ },
2463
+ "approved": {
2464
+ "const": true
2465
+ },
2466
+ "provenance": {
2467
+ "type": "array",
2468
+ "items": {
2469
+ "$ref": "#/$defs/OperatorOrigin"
2470
+ },
2471
+ "minItems": 1
2472
+ }
2473
+ },
2474
+ "required": [
2475
+ "artifact",
2476
+ "approved",
2477
+ "provenance"
2478
+ ],
2479
+ "additionalProperties": false
2480
+ },
2481
+ "ApprovalLedger": {
2482
+ "type": "object",
2483
+ "properties": {
2484
+ "schemaVersion": {
2485
+ "const": 1
2486
+ },
2487
+ "capabilities": {
2488
+ "type": "object",
2489
+ "additionalProperties": {
2490
+ "type": "object",
2491
+ "additionalProperties": {
2492
+ "$ref": "#/$defs/ApprovalEntry"
2493
+ },
2494
+ "propertyNames": {
2495
+ "pattern": "^oats\\.tree-exec\\.v1:sha256-[a-f0-9]{64}$"
2496
+ }
2497
+ },
2498
+ "propertyNames": {
2499
+ "type": "string",
2500
+ "minLength": 1,
2501
+ "pattern": "^[a-z0-9][a-z0-9._-]*$"
2502
+ }
2503
+ }
2504
+ },
2505
+ "required": [
2506
+ "schemaVersion",
2507
+ "capabilities"
2508
+ ],
2509
+ "additionalProperties": false
2510
+ }
2511
+ }
2512
+ }