@ue-shed/protocol 0.5.1 → 0.7.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 (102) hide show
  1. package/contracts/cameras/map-tile/v1/README.md +27 -6
  2. package/contracts/cameras/map-tile/v1/capture-operation.schema.json +69 -0
  3. package/contracts/cameras/map-tile/v1/capture-request.schema.json +2 -1
  4. package/contracts/cameras/map-tile/v1/capture-response.schema.json +97 -25
  5. package/contracts/cameras/map-tile/v1/fixtures/capture-operation-finished-valid.json +41 -0
  6. package/contracts/cameras/map-tile/v1/fixtures/capture-operation-progress-valid.json +13 -0
  7. package/contracts/cameras/map-tile/v1/fixtures/capture-operation-running-valid.json +5 -0
  8. package/contracts/cameras/map-tile/v1/fixtures/capture-request-lit-valid.json +59 -0
  9. package/contracts/cameras/map-tile/v1/fixtures/readiness-blocked.json +11 -0
  10. package/contracts/cameras/map-tile/v1/fixtures/readiness-ready.json +7 -0
  11. package/contracts/cameras/map-tile/v1/fixtures/selection-ready.json +21 -0
  12. package/contracts/cameras/map-tile/v1/fixtures/selection-unavailable.json +6 -0
  13. package/contracts/cameras/map-tile/v1/inspection.md +16 -0
  14. package/contracts/cameras/map-tile/v1/manifest.schema.json +136 -37
  15. package/contracts/cameras/map-tile/v1/plan.schema.json +132 -35
  16. package/contracts/cameras/map-tile/v1/readiness.schema.json +39 -0
  17. package/contracts/cameras/map-tile/v1/release-result.schema.json +12 -0
  18. package/contracts/cameras/map-tile/v1/selection.schema.json +105 -0
  19. package/contracts/cameras/render/v1/README.md +33 -0
  20. package/contracts/cameras/render/v1/begin-result.schema.json +712 -0
  21. package/contracts/cameras/render/v1/capabilities.schema.json +201 -0
  22. package/contracts/cameras/render/v1/end-result.schema.json +185 -0
  23. package/contracts/cameras/render/v1/fixtures/frame-orthographic.json +31 -0
  24. package/contracts/cameras/render/v1/fixtures/frame-perspective.json +31 -0
  25. package/contracts/cameras/render/v1/fixtures/invalid-frame-mixed-projection.json +32 -0
  26. package/contracts/cameras/render/v1/fixtures/invalid-frame-size.json +31 -0
  27. package/contracts/cameras/render/v1/fixtures/invalid-session-backend-fields.json +40 -0
  28. package/contracts/cameras/render/v1/fixtures/invalid-session-budget.json +39 -0
  29. package/contracts/cameras/render/v1/fixtures/invalid-session-future.json +39 -0
  30. package/contracts/cameras/render/v1/fixtures/session-camera-regions.json +51 -0
  31. package/contracts/cameras/render/v1/fixtures/session-editor-viewport.json +40 -0
  32. package/contracts/cameras/render/v1/fixtures/session-scene-capture.json +39 -0
  33. package/contracts/cameras/render/v1/frame-evidence.schema.json +771 -0
  34. package/contracts/cameras/render/v1/frame-request.schema.json +219 -0
  35. package/contracts/cameras/render/v1/frame-status.schema.json +1076 -0
  36. package/contracts/cameras/render/v1/policy.schema.json +510 -0
  37. package/contracts/cameras/render/v1/preflight.schema.json +68 -0
  38. package/contracts/cameras/render/v1/review-inspection-request.schema.json +342 -0
  39. package/contracts/cameras/render/v1/review-inspection-result.schema.json +2030 -0
  40. package/contracts/cameras/render/v1/review-realization-request.schema.json +417 -0
  41. package/contracts/cameras/render/v1/review-realization-result.schema.json +454 -0
  42. package/contracts/cameras/render/v1/session-request.schema.json +617 -0
  43. package/contracts/cameras/review/v1/README.md +7 -0
  44. package/contracts/cameras/review/v1/capture-request.schema.json +247 -61
  45. package/contracts/cameras/review/v1/capture-response.schema.json +820 -192
  46. package/contracts/core/v1/producer-identity.schema.json +44 -0
  47. package/contracts/niagara/preview/v1/common.schema.json +224 -30
  48. package/contracts/niagara/preview/v1/fixtures/background-manifest.json +136 -0
  49. package/contracts/niagara/preview/v1/fixtures/background-receipt.json +112 -0
  50. package/contracts/niagara/preview/v1/fixtures/background-request.json +39 -0
  51. package/contracts/niagara/preview/v1/fixtures/progress.json +8 -0
  52. package/contracts/niagara/preview/v1/fixtures/scene-manifest.json +108 -0
  53. package/contracts/niagara/preview/v1/fixtures/scene-receipt.json +84 -0
  54. package/contracts/niagara/preview/v1/fixtures/scene-request.json +25 -0
  55. package/contracts/niagara/preview/v1/manifest.schema.json +110 -25
  56. package/contracts/niagara/preview/v1/progress.schema.json +37 -0
  57. package/contracts/niagara/preview/v1/receipt.schema.json +75 -16
  58. package/contracts/niagara/preview/v1/request.schema.json +20 -5
  59. package/contracts/niagara/preview/v1/session.md +25 -0
  60. package/contracts/observatory/v1/actor-metadata.schema.json +33 -0
  61. package/contracts/uasset-io/v1/README.md +26 -1
  62. package/contracts/uasset-io/v1/event.schema.json +511 -1
  63. package/contracts/uasset-io/v1/fixtures/invalid/project-index-count-empty-filters.json +23 -0
  64. package/contracts/uasset-io/v1/fixtures/invalid/project-index-dictionary-page-negative-index.json +35 -0
  65. package/contracts/uasset-io/v1/fixtures/valid/blueprint-request.json +6 -0
  66. package/contracts/uasset-io/v1/fixtures/valid/blueprint-result-event.json +58 -0
  67. package/contracts/uasset-io/v1/fixtures/valid/project-index-count-request.json +32 -0
  68. package/contracts/uasset-io/v1/fixtures/valid/project-index-count-result-event.json +20 -0
  69. package/contracts/uasset-io/v1/fixtures/valid/project-index-dictionary-page-result-event.json +35 -0
  70. package/contracts/uasset-io/v1/fixtures/valid/project-index-dictionary-query-request.json +26 -0
  71. package/contracts/uasset-io/v1/request.schema.json +174 -0
  72. package/dist/authoring-review.d.ts +36 -36
  73. package/dist/authoring.d.ts +45 -45
  74. package/dist/authoring.d.ts.map +1 -1
  75. package/dist/blueprint-graph.d.ts +628 -0
  76. package/dist/blueprint-graph.d.ts.map +1 -0
  77. package/dist/blueprint-graph.js +111 -0
  78. package/dist/blueprint-graph.js.map +1 -0
  79. package/dist/companion.d.ts +34 -3
  80. package/dist/companion.d.ts.map +1 -1
  81. package/dist/companion.js +11 -0
  82. package/dist/companion.js.map +1 -1
  83. package/dist/editor-asset-navigation.d.ts +12 -12
  84. package/dist/editor-play-session.d.ts +6 -6
  85. package/dist/editor-world-control.d.ts +8 -8
  86. package/dist/index.d.ts +1 -0
  87. package/dist/index.d.ts.map +1 -1
  88. package/dist/index.js +1 -0
  89. package/dist/index.js.map +1 -1
  90. package/dist/saved-world.d.ts +20 -14
  91. package/dist/saved-world.d.ts.map +1 -1
  92. package/dist/saved-world.js +1 -0
  93. package/dist/saved-world.js.map +1 -1
  94. package/dist/uasset-inspection.d.ts +6 -5
  95. package/dist/uasset-inspection.d.ts.map +1 -1
  96. package/dist/uasset-inspection.js +1 -1
  97. package/dist/uasset-inspection.js.map +1 -1
  98. package/dist/uasset-io.d.ts +648 -129
  99. package/dist/uasset-io.d.ts.map +1 -1
  100. package/dist/uasset-io.js +51 -1
  101. package/dist/uasset-io.js.map +1 -1
  102. package/package.json +1 -1
@@ -14,14 +14,28 @@ capture Z does not define detail. The editor renders `gutterPixels` beyond each
14
14
  units-per-pixel and crops back to `tilePixelSize` before PNG encoding. Consumers use clamp-to-edge
15
15
  sampling inside each published tile.
16
16
 
17
- `captureBackend` is an optional execution hint, not part of the portable plan. Its default
18
- `scene_capture_tiles` behavior remains the v1 tile operation. The experimental
19
- `viewport_high_resolution` value requires one complete zoom level of at most 64 tiles; Unreal
20
- renders that level through the active Level Editor viewport's High Resolution Screenshot path and
21
- then cuts the resulting image into the requested tiles.
17
+ `captureBackend` is an optional execution hint, not part of the portable plan. The default is
18
+ `lit_camera_tiles`, requiring `cameras.lit-map-tile-capture.v1` and an unlocked rendering editor
19
+ viewport. It accepts `full_fidelity` with natural LOD. `overviewBounds` supplies the complete run's
20
+ framing for shared exposure calibration; when omitted the first batch's extent is used. Optional
21
+ `capture.render.exposureEV100` pins the camera exposure range instead of calibrating automatically.
22
+
23
+ Call `BeginMapTileCapture(RequestJson)` to start a batch, then
24
+ `PollMapTileCapture(RunId, OperationId)` until `capture-operation.schema.json` reports `finished`.
25
+ The terminal `response` uses the existing capture-response schema. Polling renews a 120-second
26
+ inactivity lease. A run retains viewport, exposure, and scene-freeze ownership between batches;
27
+ call `EndMapTileCapture(RunId)` in a finalizer on success, failure, and cancellation. End returns
28
+ `{ "released": boolean }`; an unrelated run ID cannot release the owner. Only one batch runs at a
29
+ time, and a run's map and capture policy cannot change between batches.
30
+
31
+ Explicit `scene_capture_tiles` and `viewport_high_resolution` use the synchronous `CaptureMapTiles`
32
+ operation. The latter requires one complete zoom level of at most 64 tiles. The former retains
33
+ SceneCapture profiles and per-level LOD distance scales. Both reject manual exposure rather than
34
+ silently ignoring it. Synchronous `CaptureMapTiles` rejects the default Lit backend and directs
35
+ clients to the asynchronous lifecycle.
22
36
 
23
37
  The editor accepts no output path. It stages only below `Saved/UEShed/MapTileStaging`, reports every
24
- tile outcome and map package dirty state, and restores transient state before returning. The host
38
+ tile outcome and map package dirty state, and restores transient state when run ownership ends. The host
25
39
  must validate staging containment, hash artifacts, and atomically publish only a manifest whose
26
40
  state is `complete` and whose tile inventory is exhaustive. Partial and cancelled attempts remain
27
41
  diagnostic evidence and are never discoverable as completed runs.
@@ -42,3 +56,10 @@ Control payload rather than giving it hidden editor authority.
42
56
 
43
57
  Change this contract in authority order: JSON Schema and fixtures, conformant Effect codecs,
44
58
  UEShedCameras C++ producer with trusted UE 5.7 evidence, then consumers.
59
+
60
+ Minor 1 adds source `renderEvidence` to capture responses and immutable manifests. The source
61
+ frame resolution can differ from a published tile after gutter cropping, supersampling or slicing.
62
+ `release-result.schema.json` describes the EndMapTileCapture result for this lifecycle; callers
63
+ must require `restoration: restored` before publication. A false `released` means the specified run
64
+ did not own the map adapter; it never releases another owner. Renderer ownership is shared with
65
+ the camera render 1.0 and Review adapters.
@@ -0,0 +1,69 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://ue-shed.dev/contracts/cameras/map-tile/v1/capture-operation.schema.json",
4
+ "title": "UE Shed asynchronous map tile operation v1",
5
+ "oneOf": [
6
+ {
7
+ "type": "object",
8
+ "additionalProperties": false,
9
+ "required": ["state", "operationId", "completedTiles"],
10
+ "properties": {
11
+ "state": {
12
+ "const": "running"
13
+ },
14
+ "operationId": {
15
+ "$ref": "plan.schema.json#/$defs/id"
16
+ },
17
+ "completedTiles": {
18
+ "type": "integer",
19
+ "minimum": 0,
20
+ "maximum": 64
21
+ },
22
+ "phase": {
23
+ "enum": ["exposure_warmup", "tile_warmup", "capturing"]
24
+ },
25
+ "elapsedMs": {
26
+ "type": "number",
27
+ "minimum": 0
28
+ },
29
+ "totalTiles": {
30
+ "type": "integer",
31
+ "minimum": 0,
32
+ "maximum": 64
33
+ },
34
+ "currentTile": {
35
+ "type": "object",
36
+ "additionalProperties": false,
37
+ "required": ["zoom", "row", "column"],
38
+ "properties": {
39
+ "zoom": {
40
+ "type": "integer",
41
+ "minimum": 0
42
+ },
43
+ "row": {
44
+ "type": "integer",
45
+ "minimum": 0
46
+ },
47
+ "column": {
48
+ "type": "integer",
49
+ "minimum": 0
50
+ }
51
+ }
52
+ }
53
+ }
54
+ },
55
+ {
56
+ "type": "object",
57
+ "additionalProperties": false,
58
+ "required": ["state", "response"],
59
+ "properties": {
60
+ "state": {
61
+ "const": "finished"
62
+ },
63
+ "response": {
64
+ "$ref": "capture-response.schema.json"
65
+ }
66
+ }
67
+ }
68
+ ]
69
+ }
@@ -19,8 +19,9 @@
19
19
  "properties": {
20
20
  "capture": { "$ref": "plan.schema.json#/$defs/capturePolicy" },
21
21
  "captureBackend": {
22
- "enum": ["scene_capture_tiles", "viewport_high_resolution"]
22
+ "enum": ["lit_camera_tiles", "scene_capture_tiles", "viewport_high_resolution"]
23
23
  },
24
+ "overviewBounds": { "$ref": "plan.schema.json#/$defs/bounds" },
24
25
  "contract": {
25
26
  "type": "object",
26
27
  "additionalProperties": false,
@@ -15,26 +15,49 @@
15
15
  "tileCounts"
16
16
  ],
17
17
  "properties": {
18
- "actualMapPath": { "type": "string", "pattern": "^/[A-Za-z0-9_./-]+$" },
18
+ "actualMapPath": {
19
+ "type": "string",
20
+ "pattern": "^/[A-Za-z0-9_./-]+$"
21
+ },
19
22
  "contract": {
20
23
  "type": "object",
21
24
  "additionalProperties": false,
22
25
  "required": ["name", "version"],
23
26
  "properties": {
24
- "name": { "const": "ue-shed-map-tile-capture" },
25
- "version": { "$ref": "plan.schema.json#/$defs/version" }
27
+ "name": {
28
+ "const": "ue-shed-map-tile-capture"
29
+ },
30
+ "version": {
31
+ "$ref": "plan.schema.json#/$defs/version"
32
+ }
26
33
  }
27
34
  },
28
- "correlationId": { "$ref": "plan.schema.json#/$defs/id" },
35
+ "correlationId": {
36
+ "$ref": "plan.schema.json#/$defs/id"
37
+ },
29
38
  "dirtyState": {
30
39
  "type": "object",
31
40
  "additionalProperties": false,
32
41
  "required": ["before", "after"],
33
- "properties": { "before": { "type": "boolean" }, "after": { "type": "boolean" } }
42
+ "properties": {
43
+ "before": {
44
+ "type": "boolean"
45
+ },
46
+ "after": {
47
+ "type": "boolean"
48
+ }
49
+ }
50
+ },
51
+ "durationMs": {
52
+ "type": "number",
53
+ "minimum": 0
54
+ },
55
+ "failure": {
56
+ "$ref": "#/$defs/failure"
57
+ },
58
+ "operationId": {
59
+ "$ref": "plan.schema.json#/$defs/id"
34
60
  },
35
- "durationMs": { "type": "number", "minimum": 0 },
36
- "failure": { "$ref": "#/$defs/failure" },
37
- "operationId": { "$ref": "plan.schema.json#/$defs/id" },
38
61
  "results": {
39
62
  "type": "array",
40
63
  "maxItems": 64,
@@ -53,13 +76,35 @@
53
76
  "width"
54
77
  ],
55
78
  "properties": {
56
- "bytes": { "type": "integer", "minimum": 1 },
57
- "captureDurationMs": { "type": "number", "minimum": 0 },
58
- "height": { "type": "integer", "minimum": 1 },
59
- "key": { "$ref": "capture-request.schema.json#/$defs/tileKey" },
60
- "stagedPath": { "type": "string", "minLength": 1 },
61
- "status": { "const": "captured" },
62
- "width": { "type": "integer", "minimum": 1 }
79
+ "bytes": {
80
+ "type": "integer",
81
+ "minimum": 1
82
+ },
83
+ "captureDurationMs": {
84
+ "type": "number",
85
+ "minimum": 0
86
+ },
87
+ "height": {
88
+ "type": "integer",
89
+ "minimum": 1
90
+ },
91
+ "key": {
92
+ "$ref": "capture-request.schema.json#/$defs/tileKey"
93
+ },
94
+ "stagedPath": {
95
+ "type": "string",
96
+ "minLength": 1
97
+ },
98
+ "status": {
99
+ "const": "captured"
100
+ },
101
+ "width": {
102
+ "type": "integer",
103
+ "minimum": 1
104
+ },
105
+ "renderEvidence": {
106
+ "$ref": "../../render/v1/frame-evidence.schema.json"
107
+ }
63
108
  }
64
109
  },
65
110
  {
@@ -67,23 +112,40 @@
67
112
  "additionalProperties": false,
68
113
  "required": ["failure", "key", "status"],
69
114
  "properties": {
70
- "failure": { "$ref": "#/$defs/failure" },
71
- "key": { "$ref": "capture-request.schema.json#/$defs/tileKey" },
72
- "status": { "const": "failed" }
115
+ "failure": {
116
+ "$ref": "#/$defs/failure"
117
+ },
118
+ "key": {
119
+ "$ref": "capture-request.schema.json#/$defs/tileKey"
120
+ },
121
+ "status": {
122
+ "const": "failed"
123
+ }
73
124
  }
74
125
  }
75
126
  ]
76
127
  }
77
128
  },
78
- "status": { "enum": ["completed", "partial", "cancelled", "failed"] },
129
+ "status": {
130
+ "enum": ["completed", "partial", "cancelled", "failed"]
131
+ },
79
132
  "tileCounts": {
80
133
  "type": "object",
81
134
  "additionalProperties": false,
82
135
  "required": ["failed", "requested", "succeeded"],
83
136
  "properties": {
84
- "failed": { "type": "integer", "minimum": 0 },
85
- "requested": { "type": "integer", "minimum": 0 },
86
- "succeeded": { "type": "integer", "minimum": 0 }
137
+ "failed": {
138
+ "type": "integer",
139
+ "minimum": 0
140
+ },
141
+ "requested": {
142
+ "type": "integer",
143
+ "minimum": 0
144
+ },
145
+ "succeeded": {
146
+ "type": "integer",
147
+ "minimum": 0
148
+ }
87
149
  }
88
150
  }
89
151
  },
@@ -106,9 +168,19 @@
106
168
  "write_failed"
107
169
  ]
108
170
  },
109
- "message": { "type": "string", "minLength": 1, "maxLength": 1024 },
110
- "recovery": { "type": "string", "minLength": 1, "maxLength": 1024 },
111
- "retrySafe": { "type": "boolean" }
171
+ "message": {
172
+ "type": "string",
173
+ "minLength": 1,
174
+ "maxLength": 1024
175
+ },
176
+ "recovery": {
177
+ "type": "string",
178
+ "minLength": 1,
179
+ "maxLength": 1024
180
+ },
181
+ "retrySafe": {
182
+ "type": "boolean"
183
+ }
112
184
  }
113
185
  }
114
186
  }
@@ -0,0 +1,41 @@
1
+ {
2
+ "state": "finished",
3
+ "response": {
4
+ "actualMapPath": "/Game/Fixture/Cameras/L_CameraLoad",
5
+ "contract": {
6
+ "name": "ue-shed-map-tile-capture",
7
+ "version": {
8
+ "major": 1,
9
+ "minor": 0
10
+ }
11
+ },
12
+ "correlationId": "fixture-correlation",
13
+ "dirtyState": {
14
+ "before": false,
15
+ "after": false
16
+ },
17
+ "durationMs": 27.5,
18
+ "operationId": "fixture-operation",
19
+ "results": [
20
+ {
21
+ "bytes": 1234,
22
+ "captureDurationMs": 20.25,
23
+ "height": 256,
24
+ "key": {
25
+ "zoom": 0,
26
+ "row": 0,
27
+ "column": 0
28
+ },
29
+ "stagedPath": "C:/Project/Saved/UEShed/MapTileStaging/fixture-run/Z00/R000_C000.png",
30
+ "status": "captured",
31
+ "width": 256
32
+ }
33
+ ],
34
+ "status": "completed",
35
+ "tileCounts": {
36
+ "failed": 0,
37
+ "requested": 1,
38
+ "succeeded": 1
39
+ }
40
+ }
41
+ }
@@ -0,0 +1,13 @@
1
+ {
2
+ "state": "running",
3
+ "operationId": "fixture-operation",
4
+ "completedTiles": 0,
5
+ "phase": "tile_warmup",
6
+ "elapsedMs": 1234,
7
+ "totalTiles": 4,
8
+ "currentTile": {
9
+ "zoom": 0,
10
+ "row": 0,
11
+ "column": 0
12
+ }
13
+ }
@@ -0,0 +1,5 @@
1
+ {
2
+ "state": "running",
3
+ "operationId": "fixture-operation",
4
+ "completedTiles": 0
5
+ }
@@ -0,0 +1,59 @@
1
+ {
2
+ "capture": {
3
+ "dataLayers": {
4
+ "mode": "unchanged"
5
+ },
6
+ "orientation": {
7
+ "pitch": -90,
8
+ "roll": 0,
9
+ "yaw": 0
10
+ },
11
+ "render": {
12
+ "effects": {
13
+ "fog": false,
14
+ "volumetricFog": false
15
+ },
16
+ "lodPolicy": "natural",
17
+ "profile": "full_fidelity",
18
+ "exposureEV100": -5
19
+ },
20
+ "z": 5000
21
+ },
22
+ "captureBackend": "lit_camera_tiles",
23
+ "contract": {
24
+ "name": "ue-shed-map-tile-capture",
25
+ "version": {
26
+ "major": 1,
27
+ "minor": 0
28
+ }
29
+ },
30
+ "correlationId": "fixture-correlation",
31
+ "expectedMapPath": "/Game/Fixture/Cameras/L_CameraLoad",
32
+ "gutterPixels": 2,
33
+ "operationId": "fixture-operation",
34
+ "planId": "fixture-overview",
35
+ "runId": "fixture-run",
36
+ "tilePixelSize": 256,
37
+ "tiles": [
38
+ {
39
+ "key": {
40
+ "zoom": 0,
41
+ "row": 0,
42
+ "column": 0
43
+ },
44
+ "unitsPerPixel": 4,
45
+ "worldBounds": {
46
+ "minX": 1024,
47
+ "minY": -1024,
48
+ "maxX": 2048,
49
+ "maxY": 0
50
+ }
51
+ }
52
+ ],
53
+ "overviewBounds": {
54
+ "minX": 1024,
55
+ "minY": -1024,
56
+ "maxX": 2048,
57
+ "maxY": 0
58
+ }
59
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "backend": "lit_camera_tiles",
4
+ "ready": false,
5
+ "blockers": [
6
+ {
7
+ "code": "viewport_locked",
8
+ "message": "Unlock the viewport."
9
+ }
10
+ ]
11
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "backend": "lit_camera_tiles",
4
+ "ready": true,
5
+ "actualMapPath": "/Game/Fixture/Map",
6
+ "blockers": []
7
+ }
@@ -0,0 +1,21 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "status": "ready",
4
+ "mapPath": "/Game/Fixture/Map",
5
+ "bounds": {
6
+ "minX": -100,
7
+ "maxX": 100,
8
+ "minY": 50,
9
+ "maxY": 250,
10
+ "minZ": 0,
11
+ "maxZ": 400
12
+ },
13
+ "actors": [
14
+ {
15
+ "path": "/Game/Fixture/Map.A",
16
+ "label": "A",
17
+ "actorGuid": "00000001000000020000000300000004"
18
+ }
19
+ ],
20
+ "skippedActorPaths": []
21
+ }
@@ -0,0 +1,6 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "status": "unavailable",
4
+ "code": "selection_limit",
5
+ "message": "Select between 1 and 1024 actors."
6
+ }
@@ -0,0 +1,16 @@
1
+ # Capture inspection v1
2
+
3
+ `InspectMapCaptureSelection` requires `cameras.capture-selection.v1`. It reads selection in the
4
+ current editor world, rejects PIE and selections outside 1–1024 actors, and combines finite component
5
+ bounds. `skippedActorPaths` identifies actors without usable bounds or in another world. Ready bounds
6
+ must satisfy min <= max on every axis; planar/point selections are valid. Host plan fitting supplies
7
+ positive XY extent. The operation neither modifies selection nor loads additional regions.
8
+
9
+ `InspectMapCaptureReadiness(ExpectedMapPath)` requires `cameras.capture-readiness.v1` and applies to
10
+ Lit capture. `ready` is true exactly when `blockers` is empty. It checks map identity, rendering,
11
+ streaming, viewport locking/overrides, screenshot use, PIE and capture ownership. It does not reserve
12
+ resources, load regions, or guarantee visual completeness. Capture execution repeats shared checks.
13
+
14
+ The running operation's optional phase/elapsed/count/current-tile fields are telemetry for the current
15
+ batch. `currentTile` is absent during whole-map exposure warmup. Existing responses without these
16
+ fields remain valid. Terminal responses and publication rules are unchanged.