@ue-shed/protocol 0.7.1 → 0.9.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 (100) hide show
  1. package/contracts/cameras/authoring/v1/README.md +63 -0
  2. package/contracts/cameras/authoring/v1/approval.schema.json +106 -0
  3. package/contracts/cameras/authoring/v1/arrangement.schema.json +1807 -0
  4. package/contracts/cameras/authoring/v1/bridge-request.schema.json +11077 -0
  5. package/contracts/cameras/authoring/v1/bridge-response.schema.json +10523 -0
  6. package/contracts/cameras/authoring/v1/command.schema.json +4115 -0
  7. package/contracts/cameras/authoring/v1/document.schema.json +4421 -0
  8. package/contracts/cameras/authoring/v1/panel-event.schema.json +4891 -0
  9. package/contracts/cameras/authoring/v1/panel-state.schema.json +3560 -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 +1643 -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 +1405 -96
  16. package/contracts/cameras/map-tile/v1/manifest.schema.json +1782 -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/README.md +6 -0
  21. package/contracts/cameras/render/v1/begin-result.schema.json +173 -0
  22. package/contracts/cameras/render/v1/capabilities.schema.json +46 -0
  23. package/contracts/cameras/render/v1/fixtures/invalid-session-editor-previews-type.json +41 -0
  24. package/contracts/cameras/render/v1/fixtures/session-editor-previews.json +41 -0
  25. package/contracts/cameras/render/v1/fixtures/session-scene-capture-editor-previews.json +40 -0
  26. package/contracts/cameras/render/v1/frame-evidence.schema.json +262 -0
  27. package/contracts/cameras/render/v1/frame-status.schema.json +271 -0
  28. package/contracts/cameras/render/v1/policy.schema.json +165 -0
  29. package/contracts/cameras/render/v1/review-inspection-result.schema.json +285 -0
  30. package/contracts/cameras/render/v1/session-request.schema.json +173 -0
  31. package/contracts/cameras/review/v1/README.md +6 -0
  32. package/contracts/cameras/review/v1/capture-request.schema.json +221 -3
  33. package/contracts/cameras/review/v1/capture-response.schema.json +3692 -0
  34. package/contracts/cameras/review/v1/fixtures/capture-authored.json +205 -0
  35. package/contracts/core/v1/WINDOW-ACTIVATION.md +21 -0
  36. package/contracts/core/v1/window-activation-request.schema.json +20 -0
  37. package/contracts/core/v1/window-activation-result.schema.json +49 -0
  38. package/contracts/editor-world/v1/README.md +27 -0
  39. package/contracts/editor-world/v1/operation.schema.json +761 -0
  40. package/contracts/editor-world/v1/state.schema.json +92 -0
  41. package/contracts/uasset-io/v1/README.md +24 -0
  42. package/contracts/uasset-io/v1/event.schema.json +2642 -290
  43. package/contracts/uasset-io/v1/fixtures/invalid/inspect-string-table-nonstring-metadata.json +53 -0
  44. package/contracts/uasset-io/v1/fixtures/invalid/level-sequence-version.json +43 -0
  45. package/contracts/uasset-io/v1/fixtures/invalid/negative-instanced-size.json +97 -0
  46. package/contracts/uasset-io/v1/fixtures/invalid/non-string-metadata.json +97 -0
  47. package/contracts/uasset-io/v1/fixtures/invalid/unknown-native-value.json +97 -0
  48. package/contracts/uasset-io/v1/fixtures/valid/blueprint-request.json +15 -3
  49. package/contracts/uasset-io/v1/fixtures/valid/blueprint-result-event.json +22 -5
  50. package/contracts/uasset-io/v1/fixtures/valid/extract-text-string-table-occurrence-result-event.json +30 -0
  51. package/contracts/uasset-io/v1/fixtures/valid/inspect-native-result-event.json +97 -0
  52. package/contracts/uasset-io/v1/fixtures/valid/inspect-string-table-metadata-result-event.json +53 -0
  53. package/contracts/uasset-io/v1/fixtures/valid/level-sequence-request.json +18 -0
  54. package/contracts/uasset-io/v1/fixtures/valid/level-sequence-result-event.json +43 -0
  55. package/contracts/uasset-io/v1/request.schema.json +14 -0
  56. package/contracts/world/preparation/v1/fixtures/invalid-contract-version.json +10 -0
  57. package/contracts/world/preparation/v1/fixtures/invalid-extra-field.json +11 -0
  58. package/contracts/world/preparation/v1/fixtures/invalid-negative-budget.json +37 -0
  59. package/contracts/world/preparation/v1/fixtures/invalid-region-negative-extent.json +40 -0
  60. package/contracts/world/preparation/v1/fixtures/valid-actor-context.json +37 -0
  61. package/contracts/world/preparation/v1/fixtures/valid-describe.json +10 -0
  62. package/contracts/world/preparation/v1/request.schema.json +897 -0
  63. package/contracts/world/preparation/v1/response.schema.json +449 -0
  64. package/dist/blueprint-graph.d.ts +332 -8
  65. package/dist/blueprint-graph.d.ts.map +1 -1
  66. package/dist/blueprint-graph.js +42 -3
  67. package/dist/blueprint-graph.js.map +1 -1
  68. package/dist/cameras.d.ts +16 -12
  69. package/dist/cameras.d.ts.map +1 -1
  70. package/dist/cameras.js +1 -0
  71. package/dist/cameras.js.map +1 -1
  72. package/dist/companion.d.ts +6 -0
  73. package/dist/companion.d.ts.map +1 -1
  74. package/dist/companion.js +3 -0
  75. package/dist/companion.js.map +1 -1
  76. package/dist/editor-window-activation.d.ts +16 -0
  77. package/dist/editor-window-activation.d.ts.map +1 -0
  78. package/dist/editor-window-activation.js +19 -0
  79. package/dist/editor-window-activation.js.map +1 -0
  80. package/dist/editor-world-control.d.ts +125 -0
  81. package/dist/editor-world-control.d.ts.map +1 -1
  82. package/dist/editor-world-control.js +25 -0
  83. package/dist/editor-world-control.js.map +1 -1
  84. package/dist/index.d.ts +2 -0
  85. package/dist/index.d.ts.map +1 -1
  86. package/dist/index.js +2 -0
  87. package/dist/index.js.map +1 -1
  88. package/dist/level-sequence.d.ts +1315 -0
  89. package/dist/level-sequence.d.ts.map +1 -0
  90. package/dist/level-sequence.js +204 -0
  91. package/dist/level-sequence.js.map +1 -0
  92. package/dist/uasset-inspection.d.ts +128 -55
  93. package/dist/uasset-inspection.d.ts.map +1 -1
  94. package/dist/uasset-inspection.js +39 -2
  95. package/dist/uasset-inspection.js.map +1 -1
  96. package/dist/uasset-io.d.ts +1302 -9
  97. package/dist/uasset-io.d.ts.map +1 -1
  98. package/dist/uasset-io.js +4 -0
  99. package/dist/uasset-io.js.map +1 -1
  100. 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,1450 @@
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
+ "editorPreviews": {
799
+ "type": "object",
800
+ "properties": {
801
+ "revealedChildActors": {
802
+ "type": "integer",
803
+ "allOf": [
804
+ {
805
+ "minimum": 0,
806
+ "maximum": 1000000
807
+ }
808
+ ]
809
+ }
810
+ },
811
+ "required": ["revealedChildActors"],
812
+ "additionalProperties": false
813
+ },
814
+ "editorState": {
815
+ "type": "object",
816
+ "properties": {
817
+ "mapPackageDirtyBefore": {
818
+ "type": "boolean"
819
+ },
820
+ "mapPackageDirtyAfter": {
821
+ "type": "boolean"
822
+ }
823
+ },
824
+ "required": ["mapPackageDirtyBefore", "mapPackageDirtyAfter"],
825
+ "additionalProperties": false
826
+ },
827
+ "camera": {
828
+ "type": "object",
829
+ "properties": {
830
+ "location": {
831
+ "type": "object",
832
+ "properties": {
833
+ "x": {
834
+ "type": "number"
835
+ },
836
+ "y": {
837
+ "type": "number"
838
+ },
839
+ "z": {
840
+ "type": "number"
841
+ }
842
+ },
843
+ "required": ["x", "y", "z"],
844
+ "additionalProperties": false
845
+ },
846
+ "rotation": {
847
+ "type": "object",
848
+ "properties": {
849
+ "pitch": {
850
+ "type": "number"
851
+ },
852
+ "roll": {
853
+ "type": "number"
854
+ },
855
+ "yaw": {
856
+ "type": "number"
857
+ }
858
+ },
859
+ "required": ["pitch", "roll", "yaw"],
860
+ "additionalProperties": false
861
+ },
862
+ "projection": {
863
+ "anyOf": [
864
+ {
865
+ "type": "object",
866
+ "properties": {
867
+ "kind": {
868
+ "type": "string",
869
+ "enum": ["perspective"]
870
+ },
871
+ "horizontalFieldOfView": {
872
+ "type": "number",
873
+ "allOf": [
874
+ {
875
+ "minimum": 5,
876
+ "maximum": 170
877
+ }
878
+ ]
879
+ }
880
+ },
881
+ "required": ["kind", "horizontalFieldOfView"],
882
+ "additionalProperties": false
883
+ },
884
+ {
885
+ "type": "object",
886
+ "properties": {
887
+ "kind": {
888
+ "type": "string",
889
+ "enum": ["orthographic"]
890
+ },
891
+ "width": {
892
+ "type": "number",
893
+ "allOf": [
894
+ {
895
+ "exclusiveMinimum": 0
896
+ },
897
+ {
898
+ "maximum": 1000000000
899
+ }
900
+ ]
901
+ }
902
+ },
903
+ "required": ["kind", "width"],
904
+ "additionalProperties": false
905
+ }
906
+ ]
907
+ }
908
+ },
909
+ "required": ["location", "rotation", "projection"],
910
+ "additionalProperties": false
911
+ },
912
+ "size": {
913
+ "type": "object",
914
+ "properties": {
915
+ "width": {
916
+ "type": "integer",
917
+ "allOf": [
918
+ {
919
+ "minimum": 16,
920
+ "maximum": 16384
921
+ }
922
+ ]
923
+ },
924
+ "height": {
925
+ "type": "integer",
926
+ "allOf": [
927
+ {
928
+ "minimum": 16,
929
+ "maximum": 16384
930
+ }
931
+ ]
932
+ }
933
+ },
934
+ "required": ["width", "height"],
935
+ "additionalProperties": false
936
+ },
937
+ "policy": {
938
+ "type": "object",
939
+ "properties": {
940
+ "visibility": {
941
+ "type": "object",
942
+ "properties": {
943
+ "hide": {
944
+ "type": "array",
945
+ "items": {
946
+ "type": "object",
947
+ "properties": {
948
+ "locator": {
949
+ "anyOf": [
950
+ {
951
+ "type": "object",
952
+ "properties": {
953
+ "kind": {
954
+ "type": "string",
955
+ "enum": ["actor_path"]
956
+ },
957
+ "actorPath": {
958
+ "type": "string",
959
+ "allOf": [
960
+ {
961
+ "pattern": "^\\/Game\\/"
962
+ },
963
+ {
964
+ "maxLength": 4096
965
+ }
966
+ ]
967
+ }
968
+ },
969
+ "required": [
970
+ "kind",
971
+ "actorPath"
972
+ ],
973
+ "additionalProperties": false
974
+ },
975
+ {
976
+ "type": "object",
977
+ "properties": {
978
+ "kind": {
979
+ "type": "string",
980
+ "enum": ["actor_guid"]
981
+ },
982
+ "actorGuid": {
983
+ "type": "string",
984
+ "allOf": [
985
+ {
986
+ "pattern": "^(?!00000000-00000000-00000000-00000000$)[0-9a-fA-F]{8}(?:-[0-9a-fA-F]{8}){3}$"
987
+ }
988
+ ]
989
+ },
990
+ "lastKnownActorPath": {
991
+ "type": "string",
992
+ "allOf": [
993
+ {
994
+ "maxLength": 4096
995
+ }
996
+ ]
997
+ }
998
+ },
999
+ "required": [
1000
+ "kind",
1001
+ "actorGuid",
1002
+ "lastKnownActorPath"
1003
+ ],
1004
+ "additionalProperties": false
1005
+ }
1006
+ ]
1007
+ },
1008
+ "label": {
1009
+ "type": "string",
1010
+ "allOf": [
1011
+ {
1012
+ "maxLength": 256
1013
+ }
1014
+ ]
1015
+ }
1016
+ },
1017
+ "required": ["locator", "label"],
1018
+ "additionalProperties": false
1019
+ },
1020
+ "allOf": [
1021
+ {
1022
+ "maxItems": 256
1023
+ }
1024
+ ]
1025
+ },
1026
+ "protect": {
1027
+ "type": "array",
1028
+ "items": {
1029
+ "type": "object",
1030
+ "properties": {
1031
+ "locator": {
1032
+ "anyOf": [
1033
+ {
1034
+ "type": "object",
1035
+ "properties": {
1036
+ "kind": {
1037
+ "type": "string",
1038
+ "enum": ["actor_path"]
1039
+ },
1040
+ "actorPath": {
1041
+ "type": "string",
1042
+ "allOf": [
1043
+ {
1044
+ "pattern": "^\\/Game\\/"
1045
+ },
1046
+ {
1047
+ "maxLength": 4096
1048
+ }
1049
+ ]
1050
+ }
1051
+ },
1052
+ "required": [
1053
+ "kind",
1054
+ "actorPath"
1055
+ ],
1056
+ "additionalProperties": false
1057
+ },
1058
+ {
1059
+ "type": "object",
1060
+ "properties": {
1061
+ "kind": {
1062
+ "type": "string",
1063
+ "enum": ["actor_guid"]
1064
+ },
1065
+ "actorGuid": {
1066
+ "type": "string",
1067
+ "allOf": [
1068
+ {
1069
+ "pattern": "^(?!00000000-00000000-00000000-00000000$)[0-9a-fA-F]{8}(?:-[0-9a-fA-F]{8}){3}$"
1070
+ }
1071
+ ]
1072
+ },
1073
+ "lastKnownActorPath": {
1074
+ "type": "string",
1075
+ "allOf": [
1076
+ {
1077
+ "maxLength": 4096
1078
+ }
1079
+ ]
1080
+ }
1081
+ },
1082
+ "required": [
1083
+ "kind",
1084
+ "actorGuid",
1085
+ "lastKnownActorPath"
1086
+ ],
1087
+ "additionalProperties": false
1088
+ }
1089
+ ]
1090
+ },
1091
+ "label": {
1092
+ "type": "string",
1093
+ "allOf": [
1094
+ {
1095
+ "maxLength": 256
1096
+ }
1097
+ ]
1098
+ }
1099
+ },
1100
+ "required": ["locator", "label"],
1101
+ "additionalProperties": false
1102
+ },
1103
+ "allOf": [
1104
+ {
1105
+ "maxItems": 256
1106
+ }
1107
+ ]
1108
+ }
1109
+ },
1110
+ "required": ["hide", "protect"],
1111
+ "additionalProperties": false
1112
+ },
1113
+ "renderer": {
1114
+ "anyOf": [
1115
+ {
1116
+ "type": "object",
1117
+ "properties": {
1118
+ "kind": {
1119
+ "type": "string",
1120
+ "enum": ["editor_viewport"]
1121
+ },
1122
+ "strategy": {
1123
+ "type": "string",
1124
+ "enum": ["high_resolution_screenshot"]
1125
+ },
1126
+ "profile": {
1127
+ "type": "string",
1128
+ "enum": ["lit", "observation"]
1129
+ },
1130
+ "vignette": {
1131
+ "type": "string",
1132
+ "enum": ["project", "disabled"]
1133
+ },
1134
+ "fog": {
1135
+ "type": "boolean"
1136
+ },
1137
+ "volumetricFog": {
1138
+ "type": "boolean"
1139
+ },
1140
+ "editorPreviews": {
1141
+ "type": "boolean"
1142
+ }
1143
+ },
1144
+ "required": [
1145
+ "kind",
1146
+ "strategy",
1147
+ "profile",
1148
+ "vignette",
1149
+ "fog",
1150
+ "volumetricFog"
1151
+ ],
1152
+ "additionalProperties": false
1153
+ },
1154
+ {
1155
+ "type": "object",
1156
+ "properties": {
1157
+ "kind": {
1158
+ "type": "string",
1159
+ "enum": ["scene_capture"]
1160
+ },
1161
+ "profile": {
1162
+ "type": "string",
1163
+ "enum": [
1164
+ "full_fidelity",
1165
+ "seam_stable",
1166
+ "scene_capture_defaults",
1167
+ "observation"
1168
+ ]
1169
+ },
1170
+ "lodDistanceScale": {
1171
+ "type": "number",
1172
+ "allOf": [
1173
+ {
1174
+ "minimum": 0.1,
1175
+ "maximum": 100
1176
+ }
1177
+ ]
1178
+ },
1179
+ "fog": {
1180
+ "type": "boolean"
1181
+ },
1182
+ "volumetricFog": {
1183
+ "type": "boolean"
1184
+ },
1185
+ "editorPreviews": {
1186
+ "type": "boolean"
1187
+ }
1188
+ },
1189
+ "required": [
1190
+ "kind",
1191
+ "profile",
1192
+ "lodDistanceScale",
1193
+ "fog",
1194
+ "volumetricFog"
1195
+ ],
1196
+ "additionalProperties": false
1197
+ }
1198
+ ]
1199
+ },
1200
+ "exposure": {
1201
+ "anyOf": [
1202
+ {
1203
+ "type": "object",
1204
+ "properties": {
1205
+ "mode": {
1206
+ "type": "string",
1207
+ "enum": ["project_auto"]
1208
+ }
1209
+ },
1210
+ "required": ["mode"],
1211
+ "additionalProperties": false
1212
+ },
1213
+ {
1214
+ "type": "object",
1215
+ "properties": {
1216
+ "mode": {
1217
+ "type": "string",
1218
+ "enum": ["fixed_ev100"]
1219
+ },
1220
+ "ev100": {
1221
+ "type": "number",
1222
+ "allOf": [
1223
+ {
1224
+ "minimum": -20,
1225
+ "maximum": 30
1226
+ }
1227
+ ]
1228
+ },
1229
+ "compensation": {
1230
+ "type": "string",
1231
+ "enum": ["project"]
1232
+ }
1233
+ },
1234
+ "required": ["mode", "ev100", "compensation"],
1235
+ "additionalProperties": false
1236
+ },
1237
+ {
1238
+ "type": "object",
1239
+ "properties": {
1240
+ "mode": {
1241
+ "type": "string",
1242
+ "enum": ["meter_once"]
1243
+ },
1244
+ "referenceCamera": {
1245
+ "type": "object",
1246
+ "properties": {
1247
+ "location": {
1248
+ "type": "object",
1249
+ "properties": {
1250
+ "x": {
1251
+ "type": "number"
1252
+ },
1253
+ "y": {
1254
+ "type": "number"
1255
+ },
1256
+ "z": {
1257
+ "type": "number"
1258
+ }
1259
+ },
1260
+ "required": ["x", "y", "z"],
1261
+ "additionalProperties": false
1262
+ },
1263
+ "rotation": {
1264
+ "type": "object",
1265
+ "properties": {
1266
+ "pitch": {
1267
+ "type": "number"
1268
+ },
1269
+ "roll": {
1270
+ "type": "number"
1271
+ },
1272
+ "yaw": {
1273
+ "type": "number"
1274
+ }
1275
+ },
1276
+ "required": [
1277
+ "pitch",
1278
+ "roll",
1279
+ "yaw"
1280
+ ],
1281
+ "additionalProperties": false
1282
+ },
1283
+ "projection": {
1284
+ "anyOf": [
1285
+ {
1286
+ "type": "object",
1287
+ "properties": {
1288
+ "kind": {
1289
+ "type": "string",
1290
+ "enum": [
1291
+ "perspective"
1292
+ ]
1293
+ },
1294
+ "horizontalFieldOfView": {
1295
+ "type": "number",
1296
+ "allOf": [
1297
+ {
1298
+ "minimum": 5,
1299
+ "maximum": 170
1300
+ }
1301
+ ]
1302
+ }
1303
+ },
1304
+ "required": [
1305
+ "kind",
1306
+ "horizontalFieldOfView"
1307
+ ],
1308
+ "additionalProperties": false
1309
+ },
1310
+ {
1311
+ "type": "object",
1312
+ "properties": {
1313
+ "kind": {
1314
+ "type": "string",
1315
+ "enum": [
1316
+ "orthographic"
1317
+ ]
1318
+ },
1319
+ "width": {
1320
+ "type": "number",
1321
+ "allOf": [
1322
+ {
1323
+ "exclusiveMinimum": 0
1324
+ },
1325
+ {
1326
+ "maximum": 1000000000
1327
+ }
1328
+ ]
1329
+ }
1330
+ },
1331
+ "required": [
1332
+ "kind",
1333
+ "width"
1334
+ ],
1335
+ "additionalProperties": false
1336
+ }
1337
+ ]
1338
+ }
1339
+ },
1340
+ "required": [
1341
+ "location",
1342
+ "rotation",
1343
+ "projection"
1344
+ ],
1345
+ "additionalProperties": false
1346
+ },
1347
+ "referenceSize": {
1348
+ "type": "object",
1349
+ "properties": {
1350
+ "width": {
1351
+ "type": "integer",
1352
+ "allOf": [
1353
+ {
1354
+ "minimum": 16,
1355
+ "maximum": 16384
1356
+ }
1357
+ ]
1358
+ },
1359
+ "height": {
1360
+ "type": "integer",
1361
+ "allOf": [
1362
+ {
1363
+ "minimum": 16,
1364
+ "maximum": 16384
1365
+ }
1366
+ ]
1367
+ }
1368
+ },
1369
+ "required": ["width", "height"],
1370
+ "additionalProperties": false
1371
+ },
1372
+ "minimumFrames": {
1373
+ "type": "integer",
1374
+ "allOf": [
1375
+ {
1376
+ "minimum": 1,
1377
+ "maximum": 4096
1378
+ }
1379
+ ]
1380
+ }
1381
+ },
1382
+ "required": [
1383
+ "mode",
1384
+ "referenceCamera",
1385
+ "referenceSize",
1386
+ "minimumFrames"
1387
+ ],
1388
+ "additionalProperties": false
1389
+ }
1390
+ ]
1391
+ },
1392
+ "settling": {
1393
+ "type": "object",
1394
+ "properties": {
1395
+ "minimumFrames": {
1396
+ "type": "integer",
1397
+ "allOf": [
1398
+ {
1399
+ "minimum": 1,
1400
+ "maximum": 4096
1401
+ }
1402
+ ]
1403
+ },
1404
+ "timeoutMs": {
1405
+ "type": "integer",
1406
+ "allOf": [
1407
+ {
1408
+ "minimum": 1000,
1409
+ "maximum": 900000
1410
+ }
1411
+ ]
1412
+ },
1413
+ "initialView": {
1414
+ "type": "object",
1415
+ "properties": {
1416
+ "camera": {
1417
+ "type": "object",
1418
+ "properties": {
1419
+ "location": {
1420
+ "type": "object",
1421
+ "properties": {
1422
+ "x": {
1423
+ "type": "number"
1424
+ },
1425
+ "y": {
1426
+ "type": "number"
1427
+ },
1428
+ "z": {
1429
+ "type": "number"
1430
+ }
1431
+ },
1432
+ "required": ["x", "y", "z"],
1433
+ "additionalProperties": false
1434
+ },
1435
+ "rotation": {
1436
+ "type": "object",
1437
+ "properties": {
1438
+ "pitch": {
1439
+ "type": "number"
1440
+ },
1441
+ "roll": {
1442
+ "type": "number"
1443
+ },
1444
+ "yaw": {
1445
+ "type": "number"
1446
+ }
1447
+ },
1448
+ "required": [
1449
+ "pitch",
1450
+ "roll",
1451
+ "yaw"
1452
+ ],
1453
+ "additionalProperties": false
1454
+ },
1455
+ "projection": {
1456
+ "anyOf": [
1457
+ {
1458
+ "type": "object",
1459
+ "properties": {
1460
+ "kind": {
1461
+ "type": "string",
1462
+ "enum": [
1463
+ "perspective"
1464
+ ]
1465
+ },
1466
+ "horizontalFieldOfView": {
1467
+ "type": "number",
1468
+ "allOf": [
1469
+ {
1470
+ "minimum": 5,
1471
+ "maximum": 170
1472
+ }
1473
+ ]
1474
+ }
1475
+ },
1476
+ "required": [
1477
+ "kind",
1478
+ "horizontalFieldOfView"
1479
+ ],
1480
+ "additionalProperties": false
1481
+ },
1482
+ {
1483
+ "type": "object",
1484
+ "properties": {
1485
+ "kind": {
1486
+ "type": "string",
1487
+ "enum": [
1488
+ "orthographic"
1489
+ ]
1490
+ },
1491
+ "width": {
1492
+ "type": "number",
1493
+ "allOf": [
1494
+ {
1495
+ "exclusiveMinimum": 0
1496
+ },
1497
+ {
1498
+ "maximum": 1000000000
1499
+ }
1500
+ ]
1501
+ }
1502
+ },
1503
+ "required": [
1504
+ "kind",
1505
+ "width"
1506
+ ],
1507
+ "additionalProperties": false
1508
+ }
1509
+ ]
1510
+ }
1511
+ },
1512
+ "required": [
1513
+ "location",
1514
+ "rotation",
1515
+ "projection"
1516
+ ],
1517
+ "additionalProperties": false
1518
+ },
1519
+ "size": {
1520
+ "type": "object",
1521
+ "properties": {
1522
+ "width": {
1523
+ "type": "integer",
1524
+ "allOf": [
1525
+ {
1526
+ "minimum": 16,
1527
+ "maximum": 16384
1528
+ }
1529
+ ]
1530
+ },
1531
+ "height": {
1532
+ "type": "integer",
1533
+ "allOf": [
1534
+ {
1535
+ "minimum": 16,
1536
+ "maximum": 16384
1537
+ }
1538
+ ]
1539
+ }
1540
+ },
1541
+ "required": ["width", "height"],
1542
+ "additionalProperties": false
1543
+ },
1544
+ "minimumFrames": {
1545
+ "type": "integer",
1546
+ "allOf": [
1547
+ {
1548
+ "minimum": 1,
1549
+ "maximum": 4096
1550
+ }
1551
+ ]
1552
+ }
1553
+ },
1554
+ "required": ["camera", "size", "minimumFrames"],
1555
+ "additionalProperties": false
1556
+ }
1557
+ },
1558
+ "required": ["minimumFrames", "timeoutMs"],
1559
+ "additionalProperties": false
1560
+ },
1561
+ "time": {
1562
+ "type": "string",
1563
+ "enum": ["live_editor", "freeze_materials_and_ticks"]
1564
+ },
1565
+ "preparation": {
1566
+ "type": "object",
1567
+ "properties": {
1568
+ "geometry": {
1569
+ "anyOf": [
1570
+ {
1571
+ "type": "object",
1572
+ "properties": {
1573
+ "mode": {
1574
+ "type": "string",
1575
+ "enum": ["preserve_loading"]
1576
+ }
1577
+ },
1578
+ "required": ["mode"],
1579
+ "additionalProperties": false
1580
+ },
1581
+ {
1582
+ "type": "object",
1583
+ "properties": {
1584
+ "mode": {
1585
+ "type": "string",
1586
+ "enum": ["camera_regions"]
1587
+ },
1588
+ "maximumRegions": {
1589
+ "type": "integer",
1590
+ "allOf": [
1591
+ {
1592
+ "minimum": 1,
1593
+ "maximum": 64
1594
+ }
1595
+ ]
1596
+ },
1597
+ "extent": {
1598
+ "type": "object",
1599
+ "properties": {
1600
+ "x": {
1601
+ "type": "number",
1602
+ "allOf": [
1603
+ {
1604
+ "minimum": 0,
1605
+ "maximum": 10000000
1606
+ }
1607
+ ]
1608
+ },
1609
+ "y": {
1610
+ "type": "number",
1611
+ "allOf": [
1612
+ {
1613
+ "minimum": 0,
1614
+ "maximum": 10000000
1615
+ }
1616
+ ]
1617
+ },
1618
+ "z": {
1619
+ "type": "number",
1620
+ "allOf": [
1621
+ {
1622
+ "minimum": 0,
1623
+ "maximum": 10000000
1624
+ }
1625
+ ]
1626
+ }
1627
+ },
1628
+ "required": ["x", "y", "z"],
1629
+ "additionalProperties": false
1630
+ }
1631
+ },
1632
+ "required": [
1633
+ "mode",
1634
+ "maximumRegions",
1635
+ "extent"
1636
+ ],
1637
+ "additionalProperties": false
1638
+ }
1639
+ ]
1640
+ },
1641
+ "dataLayers": {
1642
+ "type": "array",
1643
+ "items": {
1644
+ "type": "object",
1645
+ "properties": {
1646
+ "assetPath": {
1647
+ "type": "string",
1648
+ "allOf": [
1649
+ {
1650
+ "pattern": "^\\/[A-Za-z0-9_./-]+$"
1651
+ },
1652
+ {
1653
+ "maxLength": 1024
1654
+ }
1655
+ ]
1656
+ },
1657
+ "loaded": {
1658
+ "type": "boolean"
1659
+ },
1660
+ "visible": {
1661
+ "type": "boolean"
1662
+ }
1663
+ },
1664
+ "required": ["assetPath", "loaded", "visible"],
1665
+ "additionalProperties": false
1666
+ },
1667
+ "allOf": [
1668
+ {
1669
+ "maxItems": 64
1670
+ }
1671
+ ]
1672
+ }
1673
+ },
1674
+ "required": ["geometry", "dataLayers"],
1675
+ "additionalProperties": false
1676
+ }
1677
+ },
1678
+ "required": [
1679
+ "renderer",
1680
+ "exposure",
1681
+ "settling",
1682
+ "time",
1683
+ "preparation"
1684
+ ],
1685
+ "additionalProperties": false
1686
+ },
1687
+ "exposureEV100": {
1688
+ "anyOf": [
1689
+ {
1690
+ "type": "number"
1691
+ },
1692
+ {
1693
+ "type": "null"
1694
+ }
1695
+ ]
1696
+ },
1697
+ "preparation": {
1698
+ "type": "object",
1699
+ "properties": {
1700
+ "status": {
1701
+ "type": "string",
1702
+ "enum": ["preserved", "ready", "partial"]
1703
+ },
1704
+ "regionsHeld": {
1705
+ "type": "integer",
1706
+ "allOf": [
1707
+ {
1708
+ "minimum": 0,
1709
+ "maximum": 64
1710
+ }
1711
+ ]
1712
+ },
1713
+ "dataLayersApplied": {
1714
+ "type": "integer",
1715
+ "allOf": [
1716
+ {
1717
+ "minimum": 0,
1718
+ "maximum": 64
1719
+ }
1720
+ ]
1721
+ },
1722
+ "limitations": {
1723
+ "type": "array",
1724
+ "items": {
1725
+ "type": "string",
1726
+ "allOf": [
1727
+ {
1728
+ "minLength": 1
1729
+ },
1730
+ {
1731
+ "maxLength": 1024
1732
+ }
1733
+ ]
1734
+ }
1735
+ }
1736
+ },
1737
+ "required": [
1738
+ "status",
1739
+ "regionsHeld",
1740
+ "dataLayersApplied",
1741
+ "limitations"
1742
+ ],
1743
+ "additionalProperties": false
1744
+ },
1745
+ "settling": {
1746
+ "type": "object",
1747
+ "properties": {
1748
+ "renderedFrames": {
1749
+ "type": "integer",
1750
+ "allOf": [
1751
+ {
1752
+ "minimum": 0,
1753
+ "maximum": 1000000
1754
+ }
1755
+ ]
1756
+ },
1757
+ "elapsedMs": {
1758
+ "type": "number",
1759
+ "allOf": [
1760
+ {
1761
+ "minimum": 0
1762
+ }
1763
+ ]
1764
+ },
1765
+ "convergence": {
1766
+ "type": "string",
1767
+ "enum": ["not_assessed"]
1768
+ }
1769
+ },
1770
+ "required": ["renderedFrames", "elapsedMs", "convergence"],
1771
+ "additionalProperties": false
1772
+ },
1773
+ "engineVersion": {
1774
+ "type": "string",
1775
+ "allOf": [
1776
+ {
1777
+ "minLength": 1
1778
+ },
1779
+ {
1780
+ "maxLength": 1024
1781
+ }
1782
+ ]
1783
+ },
1784
+ "pluginVersion": {
1785
+ "type": "string",
1786
+ "allOf": [
1787
+ {
1788
+ "minLength": 1
1789
+ },
1790
+ {
1791
+ "maxLength": 1024
1792
+ }
1793
+ ]
1794
+ }
1795
+ },
1796
+ "required": [
1797
+ "editorState",
1798
+ "camera",
1799
+ "size",
1800
+ "policy",
1801
+ "exposureEV100",
1802
+ "preparation",
1803
+ "settling",
1804
+ "engineVersion",
1805
+ "pluginVersion"
1806
+ ],
1807
+ "additionalProperties": false
1808
+ },
222
1809
  "bytes": {
223
1810
  "type": "integer",
224
- "minimum": 1
1811
+ "allOf": [
1812
+ {
1813
+ "exclusiveMinimum": 0
1814
+ }
1815
+ ]
225
1816
  },
226
1817
  "hash": {
227
1818
  "type": "string",
228
- "pattern": "^sha256:[a-f0-9]{64}$"
1819
+ "allOf": [
1820
+ {
1821
+ "pattern": "^sha256:[a-f0-9]{64}$"
1822
+ }
1823
+ ]
229
1824
  },
230
1825
  "height": {
231
1826
  "type": "integer",
232
- "minimum": 1
1827
+ "allOf": [
1828
+ {
1829
+ "exclusiveMinimum": 0
1830
+ }
1831
+ ]
233
1832
  },
234
1833
  "key": {
235
- "$ref": "capture-request.schema.json#/$defs/tileKey"
1834
+ "type": "object",
1835
+ "properties": {
1836
+ "zoom": {
1837
+ "type": "integer",
1838
+ "allOf": [
1839
+ {
1840
+ "minimum": 0
1841
+ }
1842
+ ]
1843
+ },
1844
+ "row": {
1845
+ "type": "integer",
1846
+ "allOf": [
1847
+ {
1848
+ "minimum": 0
1849
+ }
1850
+ ]
1851
+ },
1852
+ "column": {
1853
+ "type": "integer",
1854
+ "allOf": [
1855
+ {
1856
+ "minimum": 0
1857
+ }
1858
+ ]
1859
+ }
1860
+ },
1861
+ "required": ["zoom", "row", "column"],
1862
+ "additionalProperties": false
236
1863
  },
237
1864
  "relativePath": {
238
1865
  "type": "string",
239
- "pattern": "^Z[0-9]{2,}/R[0-9]{3,}_C[0-9]{3,}\\.png$"
1866
+ "allOf": [
1867
+ {
1868
+ "pattern": "^Z\\d{2,}\\/R\\d{3,}_C\\d{3,}\\.png$"
1869
+ }
1870
+ ]
240
1871
  },
241
1872
  "width": {
242
1873
  "type": "integer",
243
- "minimum": 1
1874
+ "allOf": [
1875
+ {
1876
+ "exclusiveMinimum": 0
1877
+ }
1878
+ ]
244
1879
  },
245
1880
  "worldBounds": {
246
- "$ref": "plan.schema.json#/$defs/bounds"
247
- },
248
- "renderEvidence": {
249
- "$ref": "../../render/v1/frame-evidence.schema.json"
1881
+ "type": "object",
1882
+ "properties": {
1883
+ "minX": {
1884
+ "type": "number"
1885
+ },
1886
+ "minY": {
1887
+ "type": "number"
1888
+ },
1889
+ "maxX": {
1890
+ "type": "number"
1891
+ },
1892
+ "maxY": {
1893
+ "type": "number"
1894
+ }
1895
+ },
1896
+ "required": ["minX", "minY", "maxX", "maxY"],
1897
+ "additionalProperties": false
250
1898
  }
251
- }
1899
+ },
1900
+ "required": [
1901
+ "bytes",
1902
+ "hash",
1903
+ "height",
1904
+ "key",
1905
+ "relativePath",
1906
+ "width",
1907
+ "worldBounds"
1908
+ ],
1909
+ "additionalProperties": false
252
1910
  }
253
1911
  }
254
1912
  },
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
- }
1913
+ "required": [
1914
+ "addressing",
1915
+ "capturePolicy",
1916
+ "completedAt",
1917
+ "contract",
1918
+ "failures",
1919
+ "grid",
1920
+ "gutter",
1921
+ "levels",
1922
+ "planId",
1923
+ "project",
1924
+ "provenance",
1925
+ "runId",
1926
+ "startedAt",
1927
+ "state",
1928
+ "tilePixelSize",
1929
+ "tiles"
1930
+ ],
1931
+ "additionalProperties": false,
1932
+ "$defs": {}
261
1933
  }