@ue-shed/protocol 0.7.0 → 0.8.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 (79) hide show
  1. package/contracts/cameras/authoring/v1/README.md +50 -0
  2. package/contracts/cameras/authoring/v1/approval.schema.json +106 -0
  3. package/contracts/cameras/authoring/v1/arrangement.schema.json +1801 -0
  4. package/contracts/cameras/authoring/v1/bridge-request.schema.json +10862 -0
  5. package/contracts/cameras/authoring/v1/bridge-response.schema.json +10323 -0
  6. package/contracts/cameras/authoring/v1/command.schema.json +4109 -0
  7. package/contracts/cameras/authoring/v1/document.schema.json +4409 -0
  8. package/contracts/cameras/authoring/v1/panel-event.schema.json +4885 -0
  9. package/contracts/cameras/authoring/v1/panel-state.schema.json +3548 -0
  10. package/contracts/cameras/authoring/v1/recipe.schema.json +340 -0
  11. package/contracts/cameras/authoring/v1/visibility-preset.schema.json +205 -0
  12. package/contracts/cameras/map-tile/v1/README.md +4 -1
  13. package/contracts/cameras/map-tile/v1/capture-operation.schema.json +1621 -30
  14. package/contracts/cameras/map-tile/v1/capture-request.schema.json +497 -48
  15. package/contracts/cameras/map-tile/v1/capture-response.schema.json +1383 -96
  16. package/contracts/cameras/map-tile/v1/manifest.schema.json +1760 -110
  17. package/contracts/cameras/map-tile/v1/plan.schema.json +394 -200
  18. package/contracts/cameras/map-tile/v1/release-result.schema.json +7 -2
  19. package/contracts/cameras/provisioning/v1/provision-request.schema.json +663 -141
  20. package/contracts/cameras/render/v1/begin-result.schema.json +167 -0
  21. package/contracts/cameras/render/v1/capabilities.schema.json +25 -0
  22. package/contracts/cameras/render/v1/frame-evidence.schema.json +240 -0
  23. package/contracts/cameras/render/v1/frame-status.schema.json +249 -0
  24. package/contracts/cameras/render/v1/policy.schema.json +159 -0
  25. package/contracts/cameras/render/v1/review-inspection-result.schema.json +263 -0
  26. package/contracts/cameras/render/v1/session-request.schema.json +167 -0
  27. package/contracts/cameras/review/v1/README.md +6 -0
  28. package/contracts/cameras/review/v1/capture-request.schema.json +221 -3
  29. package/contracts/cameras/review/v1/capture-response.schema.json +3648 -0
  30. package/contracts/cameras/review/v1/fixtures/capture-authored.json +205 -0
  31. package/contracts/core/v1/WINDOW-ACTIVATION.md +21 -0
  32. package/contracts/core/v1/window-activation-request.schema.json +20 -0
  33. package/contracts/core/v1/window-activation-result.schema.json +49 -0
  34. package/contracts/editor-world/v1/README.md +27 -0
  35. package/contracts/editor-world/v1/operation.schema.json +761 -0
  36. package/contracts/editor-world/v1/state.schema.json +92 -0
  37. package/contracts/uasset-io/v1/event.schema.json +613 -171
  38. package/contracts/uasset-io/v1/fixtures/invalid/inspect-string-table-nonstring-metadata.json +53 -0
  39. package/contracts/uasset-io/v1/fixtures/invalid/negative-instanced-size.json +97 -0
  40. package/contracts/uasset-io/v1/fixtures/invalid/non-string-metadata.json +97 -0
  41. package/contracts/uasset-io/v1/fixtures/invalid/unknown-native-value.json +97 -0
  42. package/contracts/uasset-io/v1/fixtures/valid/extract-text-string-table-occurrence-result-event.json +30 -0
  43. package/contracts/uasset-io/v1/fixtures/valid/inspect-native-result-event.json +97 -0
  44. package/contracts/uasset-io/v1/fixtures/valid/inspect-string-table-metadata-result-event.json +53 -0
  45. package/contracts/world/preparation/v1/fixtures/invalid-contract-version.json +10 -0
  46. package/contracts/world/preparation/v1/fixtures/invalid-extra-field.json +11 -0
  47. package/contracts/world/preparation/v1/fixtures/invalid-negative-budget.json +37 -0
  48. package/contracts/world/preparation/v1/fixtures/invalid-region-negative-extent.json +40 -0
  49. package/contracts/world/preparation/v1/fixtures/valid-actor-context.json +37 -0
  50. package/contracts/world/preparation/v1/fixtures/valid-describe.json +10 -0
  51. package/contracts/world/preparation/v1/request.schema.json +897 -0
  52. package/contracts/world/preparation/v1/response.schema.json +449 -0
  53. package/dist/cameras.d.ts +16 -12
  54. package/dist/cameras.d.ts.map +1 -1
  55. package/dist/cameras.js +1 -0
  56. package/dist/cameras.js.map +1 -1
  57. package/dist/companion.d.ts +6 -0
  58. package/dist/companion.d.ts.map +1 -1
  59. package/dist/companion.js +3 -0
  60. package/dist/companion.js.map +1 -1
  61. package/dist/editor-window-activation.d.ts +16 -0
  62. package/dist/editor-window-activation.d.ts.map +1 -0
  63. package/dist/editor-window-activation.js +19 -0
  64. package/dist/editor-window-activation.js.map +1 -0
  65. package/dist/editor-world-control.d.ts +125 -0
  66. package/dist/editor-world-control.d.ts.map +1 -1
  67. package/dist/editor-world-control.js +25 -0
  68. package/dist/editor-world-control.js.map +1 -1
  69. package/dist/index.d.ts +1 -0
  70. package/dist/index.d.ts.map +1 -1
  71. package/dist/index.js +1 -0
  72. package/dist/index.js.map +1 -1
  73. package/dist/uasset-inspection.d.ts +112 -55
  74. package/dist/uasset-inspection.d.ts.map +1 -1
  75. package/dist/uasset-inspection.js +29 -0
  76. package/dist/uasset-inspection.js.map +1 -1
  77. package/dist/uasset-io.d.ts +54 -0
  78. package/dist/uasset-io.d.ts.map +1 -1
  79. package/package.json +1 -1
@@ -1,102 +1,482 @@
1
1
  {
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
3
  "$id": "https://ue-shed.dev/contracts/cameras/map-tile/v1/manifest.schema.json",
4
- "title": "UE Shed neutral map tile pyramid manifest v1.0",
5
- "description": "Cross-field grid and exhaustive-completion invariants are additionally enforced by conformant producers and decoders.",
6
4
  "type": "object",
7
- "additionalProperties": false,
8
- "required": [
9
- "addressing",
10
- "capturePolicy",
11
- "completedAt",
12
- "contract",
13
- "failures",
14
- "grid",
15
- "gutter",
16
- "levels",
17
- "planId",
18
- "project",
19
- "provenance",
20
- "runId",
21
- "startedAt",
22
- "state",
23
- "tilePixelSize",
24
- "tiles"
25
- ],
26
5
  "properties": {
27
6
  "addressing": {
28
7
  "type": "object",
29
- "additionalProperties": false,
30
- "required": ["children", "parent", "path"],
31
8
  "properties": {
32
9
  "children": {
33
- "const": "z+1: (2r,2c),(2r,2c+1),(2r+1,2c),(2r+1,2c+1)"
10
+ "type": "string",
11
+ "enum": ["z+1: (2r,2c),(2r,2c+1),(2r+1,2c),(2r+1,2c+1)"]
34
12
  },
35
13
  "parent": {
36
- "const": "z-1: (floor(r/2),floor(c/2))"
14
+ "type": "string",
15
+ "enum": ["z-1: (floor(r/2),floor(c/2))"]
37
16
  },
38
17
  "path": {
39
- "const": "Z{zoom:02}/R{row:03}_C{column:03}.png"
18
+ "type": "string",
19
+ "enum": ["Z{zoom:02}/R{row:03}_C{column:03}.png"]
40
20
  }
41
- }
21
+ },
22
+ "required": ["children", "parent", "path"],
23
+ "additionalProperties": false
42
24
  },
43
25
  "capturePolicy": {
44
- "$ref": "plan.schema.json#/$defs/capturePolicy"
26
+ "type": "object",
27
+ "properties": {
28
+ "visibility": {
29
+ "type": "object",
30
+ "properties": {
31
+ "hide": {
32
+ "type": "array",
33
+ "items": {
34
+ "type": "object",
35
+ "properties": {
36
+ "locator": {
37
+ "anyOf": [
38
+ {
39
+ "type": "object",
40
+ "properties": {
41
+ "kind": {
42
+ "type": "string",
43
+ "enum": ["actor_path"]
44
+ },
45
+ "actorPath": {
46
+ "type": "string",
47
+ "allOf": [
48
+ {
49
+ "pattern": "^\\/Game\\/"
50
+ },
51
+ {
52
+ "maxLength": 4096
53
+ }
54
+ ]
55
+ }
56
+ },
57
+ "required": ["kind", "actorPath"],
58
+ "additionalProperties": false
59
+ },
60
+ {
61
+ "type": "object",
62
+ "properties": {
63
+ "kind": {
64
+ "type": "string",
65
+ "enum": ["actor_guid"]
66
+ },
67
+ "actorGuid": {
68
+ "type": "string",
69
+ "allOf": [
70
+ {
71
+ "pattern": "^(?!00000000-00000000-00000000-00000000$)[0-9a-fA-F]{8}(?:-[0-9a-fA-F]{8}){3}$"
72
+ }
73
+ ]
74
+ },
75
+ "lastKnownActorPath": {
76
+ "type": "string",
77
+ "allOf": [
78
+ {
79
+ "maxLength": 4096
80
+ }
81
+ ]
82
+ }
83
+ },
84
+ "required": [
85
+ "kind",
86
+ "actorGuid",
87
+ "lastKnownActorPath"
88
+ ],
89
+ "additionalProperties": false
90
+ }
91
+ ]
92
+ },
93
+ "label": {
94
+ "type": "string",
95
+ "allOf": [
96
+ {
97
+ "maxLength": 256
98
+ }
99
+ ]
100
+ }
101
+ },
102
+ "required": ["locator", "label"],
103
+ "additionalProperties": false
104
+ },
105
+ "allOf": [
106
+ {
107
+ "maxItems": 256
108
+ }
109
+ ]
110
+ },
111
+ "protect": {
112
+ "type": "array",
113
+ "items": {
114
+ "type": "object",
115
+ "properties": {
116
+ "locator": {
117
+ "anyOf": [
118
+ {
119
+ "type": "object",
120
+ "properties": {
121
+ "kind": {
122
+ "type": "string",
123
+ "enum": ["actor_path"]
124
+ },
125
+ "actorPath": {
126
+ "type": "string",
127
+ "allOf": [
128
+ {
129
+ "pattern": "^\\/Game\\/"
130
+ },
131
+ {
132
+ "maxLength": 4096
133
+ }
134
+ ]
135
+ }
136
+ },
137
+ "required": ["kind", "actorPath"],
138
+ "additionalProperties": false
139
+ },
140
+ {
141
+ "type": "object",
142
+ "properties": {
143
+ "kind": {
144
+ "type": "string",
145
+ "enum": ["actor_guid"]
146
+ },
147
+ "actorGuid": {
148
+ "type": "string",
149
+ "allOf": [
150
+ {
151
+ "pattern": "^(?!00000000-00000000-00000000-00000000$)[0-9a-fA-F]{8}(?:-[0-9a-fA-F]{8}){3}$"
152
+ }
153
+ ]
154
+ },
155
+ "lastKnownActorPath": {
156
+ "type": "string",
157
+ "allOf": [
158
+ {
159
+ "maxLength": 4096
160
+ }
161
+ ]
162
+ }
163
+ },
164
+ "required": [
165
+ "kind",
166
+ "actorGuid",
167
+ "lastKnownActorPath"
168
+ ],
169
+ "additionalProperties": false
170
+ }
171
+ ]
172
+ },
173
+ "label": {
174
+ "type": "string",
175
+ "allOf": [
176
+ {
177
+ "maxLength": 256
178
+ }
179
+ ]
180
+ }
181
+ },
182
+ "required": ["locator", "label"],
183
+ "additionalProperties": false
184
+ },
185
+ "allOf": [
186
+ {
187
+ "maxItems": 256
188
+ }
189
+ ]
190
+ }
191
+ },
192
+ "required": ["hide", "protect"],
193
+ "additionalProperties": false
194
+ },
195
+ "dataLayers": {
196
+ "anyOf": [
197
+ {
198
+ "type": "object",
199
+ "properties": {
200
+ "mode": {
201
+ "type": "string",
202
+ "enum": ["unchanged"]
203
+ }
204
+ },
205
+ "required": ["mode"],
206
+ "additionalProperties": false
207
+ },
208
+ {
209
+ "type": "object",
210
+ "properties": {
211
+ "mode": {
212
+ "type": "string",
213
+ "enum": ["explicit"]
214
+ },
215
+ "states": {
216
+ "type": "array",
217
+ "items": {
218
+ "type": "object",
219
+ "properties": {
220
+ "name": {
221
+ "type": "string",
222
+ "allOf": [
223
+ {
224
+ "minLength": 1
225
+ },
226
+ {
227
+ "maxLength": 1024
228
+ }
229
+ ]
230
+ },
231
+ "state": {
232
+ "type": "string",
233
+ "enum": ["unloaded", "loaded", "activated"]
234
+ }
235
+ },
236
+ "required": ["name", "state"],
237
+ "additionalProperties": false
238
+ },
239
+ "allOf": [
240
+ {
241
+ "maxItems": 64
242
+ }
243
+ ]
244
+ }
245
+ },
246
+ "required": ["mode", "states"],
247
+ "additionalProperties": false
248
+ }
249
+ ]
250
+ },
251
+ "orientation": {
252
+ "type": "object",
253
+ "properties": {
254
+ "pitch": {
255
+ "type": "number",
256
+ "enum": [-90]
257
+ },
258
+ "roll": {
259
+ "type": "number",
260
+ "enum": [0]
261
+ },
262
+ "yaw": {
263
+ "type": "number",
264
+ "enum": [0]
265
+ }
266
+ },
267
+ "required": ["pitch", "roll", "yaw"],
268
+ "additionalProperties": false
269
+ },
270
+ "render": {
271
+ "type": "object",
272
+ "properties": {
273
+ "exposureEV100": {
274
+ "type": "number",
275
+ "allOf": [
276
+ {
277
+ "minimum": -20,
278
+ "maximum": 30
279
+ }
280
+ ]
281
+ },
282
+ "effects": {
283
+ "type": "object",
284
+ "properties": {
285
+ "fog": {
286
+ "type": "boolean"
287
+ },
288
+ "volumetricFog": {
289
+ "type": "boolean"
290
+ }
291
+ },
292
+ "required": ["fog", "volumetricFog"],
293
+ "additionalProperties": false
294
+ },
295
+ "lodDistanceScaleByZoom": {
296
+ "type": "array",
297
+ "items": {
298
+ "type": "number",
299
+ "allOf": [
300
+ {
301
+ "minimum": 0.1,
302
+ "maximum": 100
303
+ }
304
+ ]
305
+ },
306
+ "allOf": [
307
+ {
308
+ "minItems": 1
309
+ },
310
+ {
311
+ "maxItems": 24
312
+ }
313
+ ]
314
+ },
315
+ "lodPolicy": {
316
+ "type": "string",
317
+ "enum": ["natural", "fixed_lod_zero", "per_level_distance_scale"]
318
+ },
319
+ "profile": {
320
+ "type": "string",
321
+ "enum": [
322
+ "full_fidelity",
323
+ "seam_stable",
324
+ "scene_capture_defaults",
325
+ "observation"
326
+ ]
327
+ }
328
+ },
329
+ "required": ["effects", "lodPolicy", "profile"],
330
+ "additionalProperties": false
331
+ },
332
+ "z": {
333
+ "type": "number"
334
+ }
335
+ },
336
+ "required": ["dataLayers", "orientation", "render", "z"],
337
+ "additionalProperties": false
45
338
  },
46
339
  "completedAt": {
47
- "$ref": "#/$defs/timestamp"
340
+ "type": "string",
341
+ "allOf": [
342
+ {
343
+ "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d{3})?Z$"
344
+ }
345
+ ]
48
346
  },
49
347
  "contract": {
50
348
  "type": "object",
51
- "additionalProperties": false,
52
- "required": ["name", "version"],
53
349
  "properties": {
54
350
  "name": {
55
- "const": "ue-shed-map-tile-pyramid"
351
+ "type": "string",
352
+ "enum": ["ue-shed-map-tile-pyramid"]
56
353
  },
57
354
  "version": {
58
- "$ref": "plan.schema.json#/$defs/version"
355
+ "type": "object",
356
+ "properties": {
357
+ "major": {
358
+ "type": "number",
359
+ "enum": [1]
360
+ },
361
+ "minor": {
362
+ "type": "number",
363
+ "enum": [0, 1, 2]
364
+ }
365
+ },
366
+ "required": ["major", "minor"],
367
+ "additionalProperties": false
59
368
  }
60
- }
369
+ },
370
+ "required": ["name", "version"],
371
+ "additionalProperties": false
61
372
  },
62
373
  "failures": {
63
374
  "type": "array",
64
375
  "items": {
65
376
  "type": "object",
66
- "additionalProperties": false,
67
- "required": ["failure", "key"],
68
377
  "properties": {
69
378
  "failure": {
70
- "$ref": "capture-response.schema.json#/$defs/failure"
379
+ "type": "object",
380
+ "properties": {
381
+ "code": {
382
+ "type": "string",
383
+ "enum": [
384
+ "cancelled",
385
+ "capture_failed",
386
+ "data_layer_policy_unsupported",
387
+ "dirty_state_changed",
388
+ "encoding_failed",
389
+ "invalid_request",
390
+ "map_mismatch",
391
+ "streaming_not_ready",
392
+ "write_failed"
393
+ ]
394
+ },
395
+ "message": {
396
+ "type": "string",
397
+ "allOf": [
398
+ {
399
+ "minLength": 1
400
+ },
401
+ {
402
+ "maxLength": 1024
403
+ }
404
+ ]
405
+ },
406
+ "recovery": {
407
+ "type": "string",
408
+ "allOf": [
409
+ {
410
+ "minLength": 1
411
+ },
412
+ {
413
+ "maxLength": 1024
414
+ }
415
+ ]
416
+ },
417
+ "retrySafe": {
418
+ "type": "boolean"
419
+ }
420
+ },
421
+ "required": ["code", "message", "recovery", "retrySafe"],
422
+ "additionalProperties": false
71
423
  },
72
424
  "key": {
73
- "$ref": "capture-request.schema.json#/$defs/tileKey"
425
+ "type": "object",
426
+ "properties": {
427
+ "zoom": {
428
+ "type": "integer",
429
+ "allOf": [
430
+ {
431
+ "minimum": 0
432
+ }
433
+ ]
434
+ },
435
+ "row": {
436
+ "type": "integer",
437
+ "allOf": [
438
+ {
439
+ "minimum": 0
440
+ }
441
+ ]
442
+ },
443
+ "column": {
444
+ "type": "integer",
445
+ "allOf": [
446
+ {
447
+ "minimum": 0
448
+ }
449
+ ]
450
+ }
451
+ },
452
+ "required": ["zoom", "row", "column"],
453
+ "additionalProperties": false
74
454
  }
75
- }
455
+ },
456
+ "required": ["failure", "key"],
457
+ "additionalProperties": false
76
458
  }
77
459
  },
78
460
  "grid": {
79
461
  "type": "object",
80
- "additionalProperties": false,
81
- "required": ["orientation", "origin", "requestedBounds", "snappedBounds"],
82
462
  "properties": {
83
463
  "orientation": {
84
464
  "type": "object",
85
- "additionalProperties": false,
86
- "required": ["name", "version"],
87
465
  "properties": {
88
466
  "name": {
89
- "const": "rows_max_x_to_min_x_columns_min_y_to_max_y"
467
+ "type": "string",
468
+ "enum": ["rows_max_x_to_min_x_columns_min_y_to_max_y"]
90
469
  },
91
470
  "version": {
92
- "const": 1
471
+ "type": "number",
472
+ "enum": [1]
93
473
  }
94
- }
474
+ },
475
+ "required": ["name", "version"],
476
+ "additionalProperties": false
95
477
  },
96
478
  "origin": {
97
479
  "type": "object",
98
- "additionalProperties": false,
99
- "required": ["x", "y"],
100
480
  "properties": {
101
481
  "x": {
102
482
  "type": "number"
@@ -104,158 +484,1428 @@
104
484
  "y": {
105
485
  "type": "number"
106
486
  }
107
- }
487
+ },
488
+ "required": ["x", "y"],
489
+ "additionalProperties": false
108
490
  },
109
491
  "requestedBounds": {
110
- "$ref": "plan.schema.json#/$defs/bounds"
492
+ "type": "object",
493
+ "properties": {
494
+ "minX": {
495
+ "type": "number"
496
+ },
497
+ "minY": {
498
+ "type": "number"
499
+ },
500
+ "maxX": {
501
+ "type": "number"
502
+ },
503
+ "maxY": {
504
+ "type": "number"
505
+ }
506
+ },
507
+ "required": ["minX", "minY", "maxX", "maxY"],
508
+ "additionalProperties": false
111
509
  },
112
510
  "snappedBounds": {
113
- "$ref": "plan.schema.json#/$defs/bounds"
511
+ "type": "object",
512
+ "properties": {
513
+ "minX": {
514
+ "type": "number"
515
+ },
516
+ "minY": {
517
+ "type": "number"
518
+ },
519
+ "maxX": {
520
+ "type": "number"
521
+ },
522
+ "maxY": {
523
+ "type": "number"
524
+ }
525
+ },
526
+ "required": ["minX", "minY", "maxX", "maxY"],
527
+ "additionalProperties": false
114
528
  }
115
- }
529
+ },
530
+ "required": ["orientation", "origin", "requestedBounds", "snappedBounds"],
531
+ "additionalProperties": false
116
532
  },
117
533
  "gutter": {
118
534
  "type": "object",
119
- "additionalProperties": false,
120
- "required": ["pixels", "rule", "textureAddress"],
121
535
  "properties": {
122
536
  "pixels": {
123
537
  "type": "integer",
124
- "minimum": 0,
125
- "maximum": 32
538
+ "allOf": [
539
+ {
540
+ "minimum": 0,
541
+ "maximum": 32
542
+ }
543
+ ]
126
544
  },
127
545
  "rule": {
128
- "const": "render_overdraw_then_crop"
546
+ "type": "string",
547
+ "enum": ["render_overdraw_then_crop"]
129
548
  },
130
549
  "textureAddress": {
131
- "const": "clamp_to_edge"
550
+ "type": "string",
551
+ "enum": ["clamp_to_edge"]
132
552
  }
133
- }
553
+ },
554
+ "required": ["pixels", "rule", "textureAddress"],
555
+ "additionalProperties": false
134
556
  },
135
557
  "levels": {
136
558
  "type": "array",
137
- "minItems": 1,
138
- "maxItems": 24,
139
559
  "items": {
140
560
  "type": "object",
141
- "additionalProperties": false,
142
- "required": ["columns", "rows", "tileWorldSize", "unitsPerPixel", "zoom"],
143
561
  "properties": {
144
562
  "columns": {
145
563
  "type": "integer",
146
- "minimum": 1
564
+ "allOf": [
565
+ {
566
+ "exclusiveMinimum": 0
567
+ }
568
+ ]
147
569
  },
148
570
  "rows": {
149
571
  "type": "integer",
150
- "minimum": 1
572
+ "allOf": [
573
+ {
574
+ "exclusiveMinimum": 0
575
+ }
576
+ ]
151
577
  },
152
578
  "tileWorldSize": {
153
579
  "type": "number",
154
- "exclusiveMinimum": 0
580
+ "allOf": [
581
+ {
582
+ "exclusiveMinimum": 0
583
+ }
584
+ ]
155
585
  },
156
586
  "unitsPerPixel": {
157
587
  "type": "number",
158
- "exclusiveMinimum": 0
588
+ "allOf": [
589
+ {
590
+ "exclusiveMinimum": 0
591
+ }
592
+ ]
159
593
  },
160
594
  "zoom": {
161
595
  "type": "integer",
162
- "minimum": 0
596
+ "allOf": [
597
+ {
598
+ "minimum": 0
599
+ }
600
+ ]
163
601
  }
602
+ },
603
+ "required": ["columns", "rows", "tileWorldSize", "unitsPerPixel", "zoom"],
604
+ "additionalProperties": false
605
+ },
606
+ "allOf": [
607
+ {
608
+ "minItems": 1
609
+ },
610
+ {
611
+ "maxItems": 24
164
612
  }
165
- }
613
+ ]
166
614
  },
167
615
  "planId": {
168
- "$ref": "plan.schema.json#/$defs/id"
616
+ "type": "string",
617
+ "allOf": [
618
+ {
619
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$"
620
+ }
621
+ ]
169
622
  },
170
623
  "project": {
171
- "$ref": "plan.schema.json#/$defs/project"
624
+ "type": "object",
625
+ "properties": {
626
+ "id": {
627
+ "type": "string",
628
+ "allOf": [
629
+ {
630
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$"
631
+ }
632
+ ]
633
+ },
634
+ "mapPath": {
635
+ "type": "string",
636
+ "allOf": [
637
+ {
638
+ "pattern": "^\\/[A-Za-z0-9_./-]+$"
639
+ }
640
+ ]
641
+ }
642
+ },
643
+ "required": ["id", "mapPath"],
644
+ "additionalProperties": false
172
645
  },
173
646
  "provenance": {
174
647
  "type": "object",
175
- "additionalProperties": false,
176
- "required": ["producer", "tool", "toolVersion"],
177
648
  "properties": {
178
649
  "producer": {
179
650
  "type": "string",
180
- "minLength": 1,
181
- "maxLength": 1024
651
+ "allOf": [
652
+ {
653
+ "minLength": 1
654
+ },
655
+ {
656
+ "maxLength": 1024
657
+ }
658
+ ]
182
659
  },
183
660
  "tool": {
184
- "const": "ue-shed"
661
+ "type": "string",
662
+ "enum": ["ue-shed"]
185
663
  },
186
664
  "toolVersion": {
187
665
  "type": "string",
188
- "minLength": 1,
189
- "maxLength": 1024
666
+ "allOf": [
667
+ {
668
+ "minLength": 1
669
+ },
670
+ {
671
+ "maxLength": 1024
672
+ }
673
+ ]
190
674
  }
191
- }
675
+ },
676
+ "required": ["producer", "tool", "toolVersion"],
677
+ "additionalProperties": false
192
678
  },
193
679
  "runId": {
194
- "$ref": "plan.schema.json#/$defs/id"
680
+ "type": "string",
681
+ "allOf": [
682
+ {
683
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$"
684
+ }
685
+ ]
195
686
  },
196
687
  "startedAt": {
197
- "$ref": "#/$defs/timestamp"
688
+ "type": "string",
689
+ "allOf": [
690
+ {
691
+ "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d{3})?Z$"
692
+ }
693
+ ]
198
694
  },
199
695
  "state": {
696
+ "type": "string",
200
697
  "enum": ["complete", "partial", "cancelled"]
201
698
  },
202
699
  "tilePixelSize": {
203
700
  "type": "integer",
204
- "minimum": 64,
205
- "maximum": 4096
701
+ "allOf": [
702
+ {
703
+ "minimum": 64,
704
+ "maximum": 4096
705
+ }
706
+ ]
206
707
  },
207
708
  "tiles": {
208
709
  "type": "array",
209
710
  "items": {
210
711
  "type": "object",
211
- "additionalProperties": false,
212
- "required": [
213
- "bytes",
214
- "hash",
215
- "height",
216
- "key",
217
- "relativePath",
218
- "width",
219
- "worldBounds"
220
- ],
221
712
  "properties": {
713
+ "renderEvidence": {
714
+ "type": "object",
715
+ "properties": {
716
+ "visibilityDiagnostics": {
717
+ "type": "array",
718
+ "items": {
719
+ "type": "object",
720
+ "properties": {
721
+ "locator": {
722
+ "anyOf": [
723
+ {
724
+ "type": "object",
725
+ "properties": {
726
+ "kind": {
727
+ "type": "string",
728
+ "enum": ["actor_path"]
729
+ },
730
+ "actorPath": {
731
+ "type": "string",
732
+ "allOf": [
733
+ {
734
+ "pattern": "^\\/Game\\/"
735
+ },
736
+ {
737
+ "maxLength": 4096
738
+ }
739
+ ]
740
+ }
741
+ },
742
+ "required": ["kind", "actorPath"],
743
+ "additionalProperties": false
744
+ },
745
+ {
746
+ "type": "object",
747
+ "properties": {
748
+ "kind": {
749
+ "type": "string",
750
+ "enum": ["actor_guid"]
751
+ },
752
+ "actorGuid": {
753
+ "type": "string",
754
+ "allOf": [
755
+ {
756
+ "pattern": "^(?!00000000-00000000-00000000-00000000$)[0-9a-fA-F]{8}(?:-[0-9a-fA-F]{8}){3}$"
757
+ }
758
+ ]
759
+ },
760
+ "lastKnownActorPath": {
761
+ "type": "string",
762
+ "allOf": [
763
+ {
764
+ "maxLength": 4096
765
+ }
766
+ ]
767
+ }
768
+ },
769
+ "required": [
770
+ "kind",
771
+ "actorGuid",
772
+ "lastKnownActorPath"
773
+ ],
774
+ "additionalProperties": false
775
+ }
776
+ ]
777
+ },
778
+ "status": {
779
+ "type": "string",
780
+ "enum": [
781
+ "resolved",
782
+ "missing_or_unloaded",
783
+ "ambiguous",
784
+ "unsupported"
785
+ ]
786
+ },
787
+ "actorPath": {
788
+ "type": "string"
789
+ },
790
+ "message": {
791
+ "type": "string"
792
+ }
793
+ },
794
+ "required": ["locator", "status", "actorPath", "message"],
795
+ "additionalProperties": false
796
+ }
797
+ },
798
+ "editorState": {
799
+ "type": "object",
800
+ "properties": {
801
+ "mapPackageDirtyBefore": {
802
+ "type": "boolean"
803
+ },
804
+ "mapPackageDirtyAfter": {
805
+ "type": "boolean"
806
+ }
807
+ },
808
+ "required": ["mapPackageDirtyBefore", "mapPackageDirtyAfter"],
809
+ "additionalProperties": false
810
+ },
811
+ "camera": {
812
+ "type": "object",
813
+ "properties": {
814
+ "location": {
815
+ "type": "object",
816
+ "properties": {
817
+ "x": {
818
+ "type": "number"
819
+ },
820
+ "y": {
821
+ "type": "number"
822
+ },
823
+ "z": {
824
+ "type": "number"
825
+ }
826
+ },
827
+ "required": ["x", "y", "z"],
828
+ "additionalProperties": false
829
+ },
830
+ "rotation": {
831
+ "type": "object",
832
+ "properties": {
833
+ "pitch": {
834
+ "type": "number"
835
+ },
836
+ "roll": {
837
+ "type": "number"
838
+ },
839
+ "yaw": {
840
+ "type": "number"
841
+ }
842
+ },
843
+ "required": ["pitch", "roll", "yaw"],
844
+ "additionalProperties": false
845
+ },
846
+ "projection": {
847
+ "anyOf": [
848
+ {
849
+ "type": "object",
850
+ "properties": {
851
+ "kind": {
852
+ "type": "string",
853
+ "enum": ["perspective"]
854
+ },
855
+ "horizontalFieldOfView": {
856
+ "type": "number",
857
+ "allOf": [
858
+ {
859
+ "minimum": 5,
860
+ "maximum": 170
861
+ }
862
+ ]
863
+ }
864
+ },
865
+ "required": ["kind", "horizontalFieldOfView"],
866
+ "additionalProperties": false
867
+ },
868
+ {
869
+ "type": "object",
870
+ "properties": {
871
+ "kind": {
872
+ "type": "string",
873
+ "enum": ["orthographic"]
874
+ },
875
+ "width": {
876
+ "type": "number",
877
+ "allOf": [
878
+ {
879
+ "exclusiveMinimum": 0
880
+ },
881
+ {
882
+ "maximum": 1000000000
883
+ }
884
+ ]
885
+ }
886
+ },
887
+ "required": ["kind", "width"],
888
+ "additionalProperties": false
889
+ }
890
+ ]
891
+ }
892
+ },
893
+ "required": ["location", "rotation", "projection"],
894
+ "additionalProperties": false
895
+ },
896
+ "size": {
897
+ "type": "object",
898
+ "properties": {
899
+ "width": {
900
+ "type": "integer",
901
+ "allOf": [
902
+ {
903
+ "minimum": 16,
904
+ "maximum": 16384
905
+ }
906
+ ]
907
+ },
908
+ "height": {
909
+ "type": "integer",
910
+ "allOf": [
911
+ {
912
+ "minimum": 16,
913
+ "maximum": 16384
914
+ }
915
+ ]
916
+ }
917
+ },
918
+ "required": ["width", "height"],
919
+ "additionalProperties": false
920
+ },
921
+ "policy": {
922
+ "type": "object",
923
+ "properties": {
924
+ "visibility": {
925
+ "type": "object",
926
+ "properties": {
927
+ "hide": {
928
+ "type": "array",
929
+ "items": {
930
+ "type": "object",
931
+ "properties": {
932
+ "locator": {
933
+ "anyOf": [
934
+ {
935
+ "type": "object",
936
+ "properties": {
937
+ "kind": {
938
+ "type": "string",
939
+ "enum": ["actor_path"]
940
+ },
941
+ "actorPath": {
942
+ "type": "string",
943
+ "allOf": [
944
+ {
945
+ "pattern": "^\\/Game\\/"
946
+ },
947
+ {
948
+ "maxLength": 4096
949
+ }
950
+ ]
951
+ }
952
+ },
953
+ "required": [
954
+ "kind",
955
+ "actorPath"
956
+ ],
957
+ "additionalProperties": false
958
+ },
959
+ {
960
+ "type": "object",
961
+ "properties": {
962
+ "kind": {
963
+ "type": "string",
964
+ "enum": ["actor_guid"]
965
+ },
966
+ "actorGuid": {
967
+ "type": "string",
968
+ "allOf": [
969
+ {
970
+ "pattern": "^(?!00000000-00000000-00000000-00000000$)[0-9a-fA-F]{8}(?:-[0-9a-fA-F]{8}){3}$"
971
+ }
972
+ ]
973
+ },
974
+ "lastKnownActorPath": {
975
+ "type": "string",
976
+ "allOf": [
977
+ {
978
+ "maxLength": 4096
979
+ }
980
+ ]
981
+ }
982
+ },
983
+ "required": [
984
+ "kind",
985
+ "actorGuid",
986
+ "lastKnownActorPath"
987
+ ],
988
+ "additionalProperties": false
989
+ }
990
+ ]
991
+ },
992
+ "label": {
993
+ "type": "string",
994
+ "allOf": [
995
+ {
996
+ "maxLength": 256
997
+ }
998
+ ]
999
+ }
1000
+ },
1001
+ "required": ["locator", "label"],
1002
+ "additionalProperties": false
1003
+ },
1004
+ "allOf": [
1005
+ {
1006
+ "maxItems": 256
1007
+ }
1008
+ ]
1009
+ },
1010
+ "protect": {
1011
+ "type": "array",
1012
+ "items": {
1013
+ "type": "object",
1014
+ "properties": {
1015
+ "locator": {
1016
+ "anyOf": [
1017
+ {
1018
+ "type": "object",
1019
+ "properties": {
1020
+ "kind": {
1021
+ "type": "string",
1022
+ "enum": ["actor_path"]
1023
+ },
1024
+ "actorPath": {
1025
+ "type": "string",
1026
+ "allOf": [
1027
+ {
1028
+ "pattern": "^\\/Game\\/"
1029
+ },
1030
+ {
1031
+ "maxLength": 4096
1032
+ }
1033
+ ]
1034
+ }
1035
+ },
1036
+ "required": [
1037
+ "kind",
1038
+ "actorPath"
1039
+ ],
1040
+ "additionalProperties": false
1041
+ },
1042
+ {
1043
+ "type": "object",
1044
+ "properties": {
1045
+ "kind": {
1046
+ "type": "string",
1047
+ "enum": ["actor_guid"]
1048
+ },
1049
+ "actorGuid": {
1050
+ "type": "string",
1051
+ "allOf": [
1052
+ {
1053
+ "pattern": "^(?!00000000-00000000-00000000-00000000$)[0-9a-fA-F]{8}(?:-[0-9a-fA-F]{8}){3}$"
1054
+ }
1055
+ ]
1056
+ },
1057
+ "lastKnownActorPath": {
1058
+ "type": "string",
1059
+ "allOf": [
1060
+ {
1061
+ "maxLength": 4096
1062
+ }
1063
+ ]
1064
+ }
1065
+ },
1066
+ "required": [
1067
+ "kind",
1068
+ "actorGuid",
1069
+ "lastKnownActorPath"
1070
+ ],
1071
+ "additionalProperties": false
1072
+ }
1073
+ ]
1074
+ },
1075
+ "label": {
1076
+ "type": "string",
1077
+ "allOf": [
1078
+ {
1079
+ "maxLength": 256
1080
+ }
1081
+ ]
1082
+ }
1083
+ },
1084
+ "required": ["locator", "label"],
1085
+ "additionalProperties": false
1086
+ },
1087
+ "allOf": [
1088
+ {
1089
+ "maxItems": 256
1090
+ }
1091
+ ]
1092
+ }
1093
+ },
1094
+ "required": ["hide", "protect"],
1095
+ "additionalProperties": false
1096
+ },
1097
+ "renderer": {
1098
+ "anyOf": [
1099
+ {
1100
+ "type": "object",
1101
+ "properties": {
1102
+ "kind": {
1103
+ "type": "string",
1104
+ "enum": ["editor_viewport"]
1105
+ },
1106
+ "strategy": {
1107
+ "type": "string",
1108
+ "enum": ["high_resolution_screenshot"]
1109
+ },
1110
+ "profile": {
1111
+ "type": "string",
1112
+ "enum": ["lit", "observation"]
1113
+ },
1114
+ "vignette": {
1115
+ "type": "string",
1116
+ "enum": ["project", "disabled"]
1117
+ },
1118
+ "fog": {
1119
+ "type": "boolean"
1120
+ },
1121
+ "volumetricFog": {
1122
+ "type": "boolean"
1123
+ }
1124
+ },
1125
+ "required": [
1126
+ "kind",
1127
+ "strategy",
1128
+ "profile",
1129
+ "vignette",
1130
+ "fog",
1131
+ "volumetricFog"
1132
+ ],
1133
+ "additionalProperties": false
1134
+ },
1135
+ {
1136
+ "type": "object",
1137
+ "properties": {
1138
+ "kind": {
1139
+ "type": "string",
1140
+ "enum": ["scene_capture"]
1141
+ },
1142
+ "profile": {
1143
+ "type": "string",
1144
+ "enum": [
1145
+ "full_fidelity",
1146
+ "seam_stable",
1147
+ "scene_capture_defaults",
1148
+ "observation"
1149
+ ]
1150
+ },
1151
+ "lodDistanceScale": {
1152
+ "type": "number",
1153
+ "allOf": [
1154
+ {
1155
+ "minimum": 0.1,
1156
+ "maximum": 100
1157
+ }
1158
+ ]
1159
+ },
1160
+ "fog": {
1161
+ "type": "boolean"
1162
+ },
1163
+ "volumetricFog": {
1164
+ "type": "boolean"
1165
+ }
1166
+ },
1167
+ "required": [
1168
+ "kind",
1169
+ "profile",
1170
+ "lodDistanceScale",
1171
+ "fog",
1172
+ "volumetricFog"
1173
+ ],
1174
+ "additionalProperties": false
1175
+ }
1176
+ ]
1177
+ },
1178
+ "exposure": {
1179
+ "anyOf": [
1180
+ {
1181
+ "type": "object",
1182
+ "properties": {
1183
+ "mode": {
1184
+ "type": "string",
1185
+ "enum": ["project_auto"]
1186
+ }
1187
+ },
1188
+ "required": ["mode"],
1189
+ "additionalProperties": false
1190
+ },
1191
+ {
1192
+ "type": "object",
1193
+ "properties": {
1194
+ "mode": {
1195
+ "type": "string",
1196
+ "enum": ["fixed_ev100"]
1197
+ },
1198
+ "ev100": {
1199
+ "type": "number",
1200
+ "allOf": [
1201
+ {
1202
+ "minimum": -20,
1203
+ "maximum": 30
1204
+ }
1205
+ ]
1206
+ },
1207
+ "compensation": {
1208
+ "type": "string",
1209
+ "enum": ["project"]
1210
+ }
1211
+ },
1212
+ "required": ["mode", "ev100", "compensation"],
1213
+ "additionalProperties": false
1214
+ },
1215
+ {
1216
+ "type": "object",
1217
+ "properties": {
1218
+ "mode": {
1219
+ "type": "string",
1220
+ "enum": ["meter_once"]
1221
+ },
1222
+ "referenceCamera": {
1223
+ "type": "object",
1224
+ "properties": {
1225
+ "location": {
1226
+ "type": "object",
1227
+ "properties": {
1228
+ "x": {
1229
+ "type": "number"
1230
+ },
1231
+ "y": {
1232
+ "type": "number"
1233
+ },
1234
+ "z": {
1235
+ "type": "number"
1236
+ }
1237
+ },
1238
+ "required": ["x", "y", "z"],
1239
+ "additionalProperties": false
1240
+ },
1241
+ "rotation": {
1242
+ "type": "object",
1243
+ "properties": {
1244
+ "pitch": {
1245
+ "type": "number"
1246
+ },
1247
+ "roll": {
1248
+ "type": "number"
1249
+ },
1250
+ "yaw": {
1251
+ "type": "number"
1252
+ }
1253
+ },
1254
+ "required": [
1255
+ "pitch",
1256
+ "roll",
1257
+ "yaw"
1258
+ ],
1259
+ "additionalProperties": false
1260
+ },
1261
+ "projection": {
1262
+ "anyOf": [
1263
+ {
1264
+ "type": "object",
1265
+ "properties": {
1266
+ "kind": {
1267
+ "type": "string",
1268
+ "enum": [
1269
+ "perspective"
1270
+ ]
1271
+ },
1272
+ "horizontalFieldOfView": {
1273
+ "type": "number",
1274
+ "allOf": [
1275
+ {
1276
+ "minimum": 5,
1277
+ "maximum": 170
1278
+ }
1279
+ ]
1280
+ }
1281
+ },
1282
+ "required": [
1283
+ "kind",
1284
+ "horizontalFieldOfView"
1285
+ ],
1286
+ "additionalProperties": false
1287
+ },
1288
+ {
1289
+ "type": "object",
1290
+ "properties": {
1291
+ "kind": {
1292
+ "type": "string",
1293
+ "enum": [
1294
+ "orthographic"
1295
+ ]
1296
+ },
1297
+ "width": {
1298
+ "type": "number",
1299
+ "allOf": [
1300
+ {
1301
+ "exclusiveMinimum": 0
1302
+ },
1303
+ {
1304
+ "maximum": 1000000000
1305
+ }
1306
+ ]
1307
+ }
1308
+ },
1309
+ "required": [
1310
+ "kind",
1311
+ "width"
1312
+ ],
1313
+ "additionalProperties": false
1314
+ }
1315
+ ]
1316
+ }
1317
+ },
1318
+ "required": [
1319
+ "location",
1320
+ "rotation",
1321
+ "projection"
1322
+ ],
1323
+ "additionalProperties": false
1324
+ },
1325
+ "referenceSize": {
1326
+ "type": "object",
1327
+ "properties": {
1328
+ "width": {
1329
+ "type": "integer",
1330
+ "allOf": [
1331
+ {
1332
+ "minimum": 16,
1333
+ "maximum": 16384
1334
+ }
1335
+ ]
1336
+ },
1337
+ "height": {
1338
+ "type": "integer",
1339
+ "allOf": [
1340
+ {
1341
+ "minimum": 16,
1342
+ "maximum": 16384
1343
+ }
1344
+ ]
1345
+ }
1346
+ },
1347
+ "required": ["width", "height"],
1348
+ "additionalProperties": false
1349
+ },
1350
+ "minimumFrames": {
1351
+ "type": "integer",
1352
+ "allOf": [
1353
+ {
1354
+ "minimum": 1,
1355
+ "maximum": 4096
1356
+ }
1357
+ ]
1358
+ }
1359
+ },
1360
+ "required": [
1361
+ "mode",
1362
+ "referenceCamera",
1363
+ "referenceSize",
1364
+ "minimumFrames"
1365
+ ],
1366
+ "additionalProperties": false
1367
+ }
1368
+ ]
1369
+ },
1370
+ "settling": {
1371
+ "type": "object",
1372
+ "properties": {
1373
+ "minimumFrames": {
1374
+ "type": "integer",
1375
+ "allOf": [
1376
+ {
1377
+ "minimum": 1,
1378
+ "maximum": 4096
1379
+ }
1380
+ ]
1381
+ },
1382
+ "timeoutMs": {
1383
+ "type": "integer",
1384
+ "allOf": [
1385
+ {
1386
+ "minimum": 1000,
1387
+ "maximum": 900000
1388
+ }
1389
+ ]
1390
+ },
1391
+ "initialView": {
1392
+ "type": "object",
1393
+ "properties": {
1394
+ "camera": {
1395
+ "type": "object",
1396
+ "properties": {
1397
+ "location": {
1398
+ "type": "object",
1399
+ "properties": {
1400
+ "x": {
1401
+ "type": "number"
1402
+ },
1403
+ "y": {
1404
+ "type": "number"
1405
+ },
1406
+ "z": {
1407
+ "type": "number"
1408
+ }
1409
+ },
1410
+ "required": ["x", "y", "z"],
1411
+ "additionalProperties": false
1412
+ },
1413
+ "rotation": {
1414
+ "type": "object",
1415
+ "properties": {
1416
+ "pitch": {
1417
+ "type": "number"
1418
+ },
1419
+ "roll": {
1420
+ "type": "number"
1421
+ },
1422
+ "yaw": {
1423
+ "type": "number"
1424
+ }
1425
+ },
1426
+ "required": [
1427
+ "pitch",
1428
+ "roll",
1429
+ "yaw"
1430
+ ],
1431
+ "additionalProperties": false
1432
+ },
1433
+ "projection": {
1434
+ "anyOf": [
1435
+ {
1436
+ "type": "object",
1437
+ "properties": {
1438
+ "kind": {
1439
+ "type": "string",
1440
+ "enum": [
1441
+ "perspective"
1442
+ ]
1443
+ },
1444
+ "horizontalFieldOfView": {
1445
+ "type": "number",
1446
+ "allOf": [
1447
+ {
1448
+ "minimum": 5,
1449
+ "maximum": 170
1450
+ }
1451
+ ]
1452
+ }
1453
+ },
1454
+ "required": [
1455
+ "kind",
1456
+ "horizontalFieldOfView"
1457
+ ],
1458
+ "additionalProperties": false
1459
+ },
1460
+ {
1461
+ "type": "object",
1462
+ "properties": {
1463
+ "kind": {
1464
+ "type": "string",
1465
+ "enum": [
1466
+ "orthographic"
1467
+ ]
1468
+ },
1469
+ "width": {
1470
+ "type": "number",
1471
+ "allOf": [
1472
+ {
1473
+ "exclusiveMinimum": 0
1474
+ },
1475
+ {
1476
+ "maximum": 1000000000
1477
+ }
1478
+ ]
1479
+ }
1480
+ },
1481
+ "required": [
1482
+ "kind",
1483
+ "width"
1484
+ ],
1485
+ "additionalProperties": false
1486
+ }
1487
+ ]
1488
+ }
1489
+ },
1490
+ "required": [
1491
+ "location",
1492
+ "rotation",
1493
+ "projection"
1494
+ ],
1495
+ "additionalProperties": false
1496
+ },
1497
+ "size": {
1498
+ "type": "object",
1499
+ "properties": {
1500
+ "width": {
1501
+ "type": "integer",
1502
+ "allOf": [
1503
+ {
1504
+ "minimum": 16,
1505
+ "maximum": 16384
1506
+ }
1507
+ ]
1508
+ },
1509
+ "height": {
1510
+ "type": "integer",
1511
+ "allOf": [
1512
+ {
1513
+ "minimum": 16,
1514
+ "maximum": 16384
1515
+ }
1516
+ ]
1517
+ }
1518
+ },
1519
+ "required": ["width", "height"],
1520
+ "additionalProperties": false
1521
+ },
1522
+ "minimumFrames": {
1523
+ "type": "integer",
1524
+ "allOf": [
1525
+ {
1526
+ "minimum": 1,
1527
+ "maximum": 4096
1528
+ }
1529
+ ]
1530
+ }
1531
+ },
1532
+ "required": ["camera", "size", "minimumFrames"],
1533
+ "additionalProperties": false
1534
+ }
1535
+ },
1536
+ "required": ["minimumFrames", "timeoutMs"],
1537
+ "additionalProperties": false
1538
+ },
1539
+ "time": {
1540
+ "type": "string",
1541
+ "enum": ["live_editor", "freeze_materials_and_ticks"]
1542
+ },
1543
+ "preparation": {
1544
+ "type": "object",
1545
+ "properties": {
1546
+ "geometry": {
1547
+ "anyOf": [
1548
+ {
1549
+ "type": "object",
1550
+ "properties": {
1551
+ "mode": {
1552
+ "type": "string",
1553
+ "enum": ["preserve_loading"]
1554
+ }
1555
+ },
1556
+ "required": ["mode"],
1557
+ "additionalProperties": false
1558
+ },
1559
+ {
1560
+ "type": "object",
1561
+ "properties": {
1562
+ "mode": {
1563
+ "type": "string",
1564
+ "enum": ["camera_regions"]
1565
+ },
1566
+ "maximumRegions": {
1567
+ "type": "integer",
1568
+ "allOf": [
1569
+ {
1570
+ "minimum": 1,
1571
+ "maximum": 64
1572
+ }
1573
+ ]
1574
+ },
1575
+ "extent": {
1576
+ "type": "object",
1577
+ "properties": {
1578
+ "x": {
1579
+ "type": "number",
1580
+ "allOf": [
1581
+ {
1582
+ "minimum": 0,
1583
+ "maximum": 10000000
1584
+ }
1585
+ ]
1586
+ },
1587
+ "y": {
1588
+ "type": "number",
1589
+ "allOf": [
1590
+ {
1591
+ "minimum": 0,
1592
+ "maximum": 10000000
1593
+ }
1594
+ ]
1595
+ },
1596
+ "z": {
1597
+ "type": "number",
1598
+ "allOf": [
1599
+ {
1600
+ "minimum": 0,
1601
+ "maximum": 10000000
1602
+ }
1603
+ ]
1604
+ }
1605
+ },
1606
+ "required": ["x", "y", "z"],
1607
+ "additionalProperties": false
1608
+ }
1609
+ },
1610
+ "required": [
1611
+ "mode",
1612
+ "maximumRegions",
1613
+ "extent"
1614
+ ],
1615
+ "additionalProperties": false
1616
+ }
1617
+ ]
1618
+ },
1619
+ "dataLayers": {
1620
+ "type": "array",
1621
+ "items": {
1622
+ "type": "object",
1623
+ "properties": {
1624
+ "assetPath": {
1625
+ "type": "string",
1626
+ "allOf": [
1627
+ {
1628
+ "pattern": "^\\/[A-Za-z0-9_./-]+$"
1629
+ },
1630
+ {
1631
+ "maxLength": 1024
1632
+ }
1633
+ ]
1634
+ },
1635
+ "loaded": {
1636
+ "type": "boolean"
1637
+ },
1638
+ "visible": {
1639
+ "type": "boolean"
1640
+ }
1641
+ },
1642
+ "required": ["assetPath", "loaded", "visible"],
1643
+ "additionalProperties": false
1644
+ },
1645
+ "allOf": [
1646
+ {
1647
+ "maxItems": 64
1648
+ }
1649
+ ]
1650
+ }
1651
+ },
1652
+ "required": ["geometry", "dataLayers"],
1653
+ "additionalProperties": false
1654
+ }
1655
+ },
1656
+ "required": [
1657
+ "renderer",
1658
+ "exposure",
1659
+ "settling",
1660
+ "time",
1661
+ "preparation"
1662
+ ],
1663
+ "additionalProperties": false
1664
+ },
1665
+ "exposureEV100": {
1666
+ "anyOf": [
1667
+ {
1668
+ "type": "number"
1669
+ },
1670
+ {
1671
+ "type": "null"
1672
+ }
1673
+ ]
1674
+ },
1675
+ "preparation": {
1676
+ "type": "object",
1677
+ "properties": {
1678
+ "status": {
1679
+ "type": "string",
1680
+ "enum": ["preserved", "ready", "partial"]
1681
+ },
1682
+ "regionsHeld": {
1683
+ "type": "integer",
1684
+ "allOf": [
1685
+ {
1686
+ "minimum": 0,
1687
+ "maximum": 64
1688
+ }
1689
+ ]
1690
+ },
1691
+ "dataLayersApplied": {
1692
+ "type": "integer",
1693
+ "allOf": [
1694
+ {
1695
+ "minimum": 0,
1696
+ "maximum": 64
1697
+ }
1698
+ ]
1699
+ },
1700
+ "limitations": {
1701
+ "type": "array",
1702
+ "items": {
1703
+ "type": "string",
1704
+ "allOf": [
1705
+ {
1706
+ "minLength": 1
1707
+ },
1708
+ {
1709
+ "maxLength": 1024
1710
+ }
1711
+ ]
1712
+ }
1713
+ }
1714
+ },
1715
+ "required": [
1716
+ "status",
1717
+ "regionsHeld",
1718
+ "dataLayersApplied",
1719
+ "limitations"
1720
+ ],
1721
+ "additionalProperties": false
1722
+ },
1723
+ "settling": {
1724
+ "type": "object",
1725
+ "properties": {
1726
+ "renderedFrames": {
1727
+ "type": "integer",
1728
+ "allOf": [
1729
+ {
1730
+ "minimum": 0,
1731
+ "maximum": 1000000
1732
+ }
1733
+ ]
1734
+ },
1735
+ "elapsedMs": {
1736
+ "type": "number",
1737
+ "allOf": [
1738
+ {
1739
+ "minimum": 0
1740
+ }
1741
+ ]
1742
+ },
1743
+ "convergence": {
1744
+ "type": "string",
1745
+ "enum": ["not_assessed"]
1746
+ }
1747
+ },
1748
+ "required": ["renderedFrames", "elapsedMs", "convergence"],
1749
+ "additionalProperties": false
1750
+ },
1751
+ "engineVersion": {
1752
+ "type": "string",
1753
+ "allOf": [
1754
+ {
1755
+ "minLength": 1
1756
+ },
1757
+ {
1758
+ "maxLength": 1024
1759
+ }
1760
+ ]
1761
+ },
1762
+ "pluginVersion": {
1763
+ "type": "string",
1764
+ "allOf": [
1765
+ {
1766
+ "minLength": 1
1767
+ },
1768
+ {
1769
+ "maxLength": 1024
1770
+ }
1771
+ ]
1772
+ }
1773
+ },
1774
+ "required": [
1775
+ "editorState",
1776
+ "camera",
1777
+ "size",
1778
+ "policy",
1779
+ "exposureEV100",
1780
+ "preparation",
1781
+ "settling",
1782
+ "engineVersion",
1783
+ "pluginVersion"
1784
+ ],
1785
+ "additionalProperties": false
1786
+ },
222
1787
  "bytes": {
223
1788
  "type": "integer",
224
- "minimum": 1
1789
+ "allOf": [
1790
+ {
1791
+ "exclusiveMinimum": 0
1792
+ }
1793
+ ]
225
1794
  },
226
1795
  "hash": {
227
1796
  "type": "string",
228
- "pattern": "^sha256:[a-f0-9]{64}$"
1797
+ "allOf": [
1798
+ {
1799
+ "pattern": "^sha256:[a-f0-9]{64}$"
1800
+ }
1801
+ ]
229
1802
  },
230
1803
  "height": {
231
1804
  "type": "integer",
232
- "minimum": 1
1805
+ "allOf": [
1806
+ {
1807
+ "exclusiveMinimum": 0
1808
+ }
1809
+ ]
233
1810
  },
234
1811
  "key": {
235
- "$ref": "capture-request.schema.json#/$defs/tileKey"
1812
+ "type": "object",
1813
+ "properties": {
1814
+ "zoom": {
1815
+ "type": "integer",
1816
+ "allOf": [
1817
+ {
1818
+ "minimum": 0
1819
+ }
1820
+ ]
1821
+ },
1822
+ "row": {
1823
+ "type": "integer",
1824
+ "allOf": [
1825
+ {
1826
+ "minimum": 0
1827
+ }
1828
+ ]
1829
+ },
1830
+ "column": {
1831
+ "type": "integer",
1832
+ "allOf": [
1833
+ {
1834
+ "minimum": 0
1835
+ }
1836
+ ]
1837
+ }
1838
+ },
1839
+ "required": ["zoom", "row", "column"],
1840
+ "additionalProperties": false
236
1841
  },
237
1842
  "relativePath": {
238
1843
  "type": "string",
239
- "pattern": "^Z[0-9]{2,}/R[0-9]{3,}_C[0-9]{3,}\\.png$"
1844
+ "allOf": [
1845
+ {
1846
+ "pattern": "^Z\\d{2,}\\/R\\d{3,}_C\\d{3,}\\.png$"
1847
+ }
1848
+ ]
240
1849
  },
241
1850
  "width": {
242
1851
  "type": "integer",
243
- "minimum": 1
1852
+ "allOf": [
1853
+ {
1854
+ "exclusiveMinimum": 0
1855
+ }
1856
+ ]
244
1857
  },
245
1858
  "worldBounds": {
246
- "$ref": "plan.schema.json#/$defs/bounds"
247
- },
248
- "renderEvidence": {
249
- "$ref": "../../render/v1/frame-evidence.schema.json"
1859
+ "type": "object",
1860
+ "properties": {
1861
+ "minX": {
1862
+ "type": "number"
1863
+ },
1864
+ "minY": {
1865
+ "type": "number"
1866
+ },
1867
+ "maxX": {
1868
+ "type": "number"
1869
+ },
1870
+ "maxY": {
1871
+ "type": "number"
1872
+ }
1873
+ },
1874
+ "required": ["minX", "minY", "maxX", "maxY"],
1875
+ "additionalProperties": false
250
1876
  }
251
- }
1877
+ },
1878
+ "required": [
1879
+ "bytes",
1880
+ "hash",
1881
+ "height",
1882
+ "key",
1883
+ "relativePath",
1884
+ "width",
1885
+ "worldBounds"
1886
+ ],
1887
+ "additionalProperties": false
252
1888
  }
253
1889
  }
254
1890
  },
255
- "$defs": {
256
- "timestamp": {
257
- "type": "string",
258
- "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}(?:\\.[0-9]{3})?Z$"
259
- }
260
- }
1891
+ "required": [
1892
+ "addressing",
1893
+ "capturePolicy",
1894
+ "completedAt",
1895
+ "contract",
1896
+ "failures",
1897
+ "grid",
1898
+ "gutter",
1899
+ "levels",
1900
+ "planId",
1901
+ "project",
1902
+ "provenance",
1903
+ "runId",
1904
+ "startedAt",
1905
+ "state",
1906
+ "tilePixelSize",
1907
+ "tiles"
1908
+ ],
1909
+ "additionalProperties": false,
1910
+ "$defs": {}
261
1911
  }