@ue-shed/protocol 0.1.0-rc.4 → 0.2.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 (107) hide show
  1. package/README.md +3 -2
  2. package/contracts/cameras/map-tile/v1/README.md +44 -0
  3. package/contracts/cameras/map-tile/v1/capture-request.schema.json +68 -0
  4. package/contracts/cameras/map-tile/v1/capture-response.schema.json +115 -0
  5. package/contracts/cameras/map-tile/v1/fixtures/capture-request-valid.json +32 -0
  6. package/contracts/cameras/map-tile/v1/fixtures/capture-response-valid.json +24 -0
  7. package/contracts/cameras/map-tile/v1/fixtures/manifest-invalid-complete.json +41 -0
  8. package/contracts/cameras/map-tile/v1/fixtures/manifest-invalid-grid.json +44 -0
  9. package/contracts/cameras/map-tile/v1/fixtures/manifest-valid.json +60 -0
  10. package/contracts/cameras/map-tile/v1/fixtures/plan-valid.json +27 -0
  11. package/contracts/cameras/map-tile/v1/manifest.schema.json +162 -0
  12. package/contracts/cameras/map-tile/v1/plan.schema.json +176 -0
  13. package/contracts/cameras/provisioning/v1/README.md +14 -0
  14. package/contracts/cameras/provisioning/v1/fixtures/provision-request-valid.json +23 -0
  15. package/contracts/cameras/provisioning/v1/provision-request.schema.json +171 -0
  16. package/contracts/cameras/review/v1/README.md +39 -10
  17. package/contracts/cameras/review/v1/assessment-capabilities.schema.json +86 -0
  18. package/contracts/cameras/review/v1/capture-request.schema.json +173 -19
  19. package/contracts/cameras/review/v1/capture-response.schema.json +576 -1
  20. package/contracts/cameras/review/v1/fixtures/assessment-capabilities.json +36 -0
  21. package/contracts/cameras/review/v1/fixtures/capture-area.json +42 -0
  22. package/contracts/cameras/review/v1/fixtures/capture-assessed-v2.json +56 -0
  23. package/contracts/cameras/review/v1/fixtures/capture-assessed.json +55 -0
  24. package/contracts/cameras/review/v1/fixtures/capture-clear-failed.json +62 -0
  25. package/contracts/cameras/review/v1/fixtures/capture-clear.json +72 -0
  26. package/contracts/cameras/review/v1/fixtures/capture-request-area-valid.json +29 -0
  27. package/contracts/cameras/review/v1/fixtures/capture-request-clear-valid.json +30 -0
  28. package/contracts/cameras/review/v1/fixtures/capture-request-relative-valid.json +29 -0
  29. package/contracts/cameras/review/v1/fixtures/invalid-assessment-capabilities-supported-without-effective-method.json +14 -0
  30. package/contracts/cameras/v1/README.md +6 -3
  31. package/contracts/editor-world/v1/README.md +10 -0
  32. package/contracts/editor-world/v1/request.schema.json +16 -0
  33. package/contracts/editor-world/v1/response.schema.json +93 -0
  34. package/contracts/scenarios/live/v1/README.md +9 -0
  35. package/contracts/scenarios/live/v1/fixtures/cancel-accepted.json +8 -0
  36. package/contracts/scenarios/live/v1/fixtures/execution-request.json +44 -0
  37. package/contracts/scenarios/live/v1/fixtures/prepare-prepared.json +9 -0
  38. package/contracts/scenarios/live/v1/fixtures/start-accepted.json +10 -0
  39. package/contracts/scenarios/live/v1/fixtures/status-active.json +11 -0
  40. package/contracts/scenarios/live/v1/fixtures/status-rejected-stale.json +10 -0
  41. package/contracts/scenarios/live/v1/fixtures/status-terminal-cancelled.json +33 -0
  42. package/contracts/scenarios/live/v1/fixtures/status-terminal-missing-divergence.json +54 -0
  43. package/contracts/uasset-io/v1/README.md +34 -0
  44. package/contracts/uasset-io/v1/event.schema.json +6779 -0
  45. package/contracts/uasset-io/v1/fixtures/invalid/event-result-unknown-kind.json +7 -0
  46. package/contracts/uasset-io/v1/fixtures/invalid/event-unknown-kind.json +6 -0
  47. package/contracts/uasset-io/v1/fixtures/invalid/project-index-page-unbounded.json +7196 -0
  48. package/contracts/uasset-io/v1/fixtures/invalid/project-index-query-oversize-limit.json +15 -0
  49. package/contracts/uasset-io/v1/fixtures/invalid/request-wrong-major.json +6 -0
  50. package/contracts/uasset-io/v1/fixtures/valid/accepted-event.json +7 -0
  51. package/contracts/uasset-io/v1/fixtures/valid/authoring-result-event.json +26 -0
  52. package/contracts/uasset-io/v1/fixtures/valid/extract-text-occurrence-result-event.json +26 -0
  53. package/contracts/uasset-io/v1/fixtures/valid/extract-text-result-event.json +23 -0
  54. package/contracts/uasset-io/v1/fixtures/valid/extract-text-summary-result-event.json +23 -0
  55. package/contracts/uasset-io/v1/fixtures/valid/extract-texture-record-result-event.json +29 -0
  56. package/contracts/uasset-io/v1/fixtures/valid/inspect-result-event.json +29 -0
  57. package/contracts/uasset-io/v1/fixtures/valid/partial-completed-event.json +7 -0
  58. package/contracts/uasset-io/v1/fixtures/valid/project-index-accepted-event.json +7 -0
  59. package/contracts/uasset-io/v1/fixtures/valid/project-index-page-result-event.json +28 -0
  60. package/contracts/uasset-io/v1/fixtures/valid/project-index-progress-event.json +9 -0
  61. package/contracts/uasset-io/v1/fixtures/valid/project-index-query-request.json +19 -0
  62. package/contracts/uasset-io/v1/fixtures/valid/project-index-rebuild-request.json +13 -0
  63. package/contracts/uasset-io/v1/fixtures/valid/project-index-refresh-request.json +13 -0
  64. package/contracts/uasset-io/v1/fixtures/valid/project-index-stale-generation-failed-event.json +11 -0
  65. package/contracts/uasset-io/v1/fixtures/valid/project-index-status-request.json +13 -0
  66. package/contracts/uasset-io/v1/fixtures/valid/project-index-status-result-event.json +22 -0
  67. package/contracts/uasset-io/v1/fixtures/valid/project-index-summary-result-event.json +25 -0
  68. package/contracts/uasset-io/v1/fixtures/valid/saved-world-result-event.json +27 -0
  69. package/contracts/uasset-io/v1/fixtures/valid/scan-asset-result-event.json +47 -0
  70. package/contracts/uasset-io/v1/fixtures/valid/scan-inventory-result-event.json +15 -0
  71. package/contracts/uasset-io/v1/fixtures/valid/scan-request.json +17 -0
  72. package/contracts/uasset-io/v1/fixtures/valid/scan-summary-result-event.json +24 -0
  73. package/contracts/uasset-io/v1/request.schema.json +512 -0
  74. package/dist/authoring.d.ts +6 -1
  75. package/dist/authoring.d.ts.map +1 -1
  76. package/dist/companion.d.ts +30 -0
  77. package/dist/companion.d.ts.map +1 -1
  78. package/dist/companion.js +15 -0
  79. package/dist/companion.js.map +1 -1
  80. package/dist/editor-asset-navigation.d.ts +63 -0
  81. package/dist/editor-asset-navigation.d.ts.map +1 -0
  82. package/dist/editor-asset-navigation.js +32 -0
  83. package/dist/editor-asset-navigation.js.map +1 -0
  84. package/dist/editor-play-session.d.ts +4 -1
  85. package/dist/editor-play-session.d.ts.map +1 -1
  86. package/dist/editor-play-session.js.map +1 -1
  87. package/dist/editor-world-control.d.ts +179 -0
  88. package/dist/editor-world-control.d.ts.map +1 -0
  89. package/dist/editor-world-control.js +47 -0
  90. package/dist/editor-world-control.js.map +1 -0
  91. package/dist/index.d.ts +10 -5
  92. package/dist/index.d.ts.map +1 -1
  93. package/dist/index.js +6 -1
  94. package/dist/index.js.map +1 -1
  95. package/dist/saved-world.d.ts +223 -0
  96. package/dist/saved-world.d.ts.map +1 -0
  97. package/dist/saved-world.js +82 -0
  98. package/dist/saved-world.js.map +1 -0
  99. package/dist/uasset-inspection.d.ts +1037 -0
  100. package/dist/uasset-inspection.d.ts.map +1 -0
  101. package/dist/uasset-inspection.js +446 -0
  102. package/dist/uasset-inspection.js.map +1 -0
  103. package/dist/uasset-io.d.ts +2607 -0
  104. package/dist/uasset-io.d.ts.map +1 -0
  105. package/dist/uasset-io.js +306 -0
  106. package/dist/uasset-io.js.map +1 -0
  107. package/package.json +3 -2
@@ -0,0 +1,56 @@
1
+ {
2
+ "contract": {
3
+ "name": "ue-shed-review-capture",
4
+ "version": { "major": 1, "minor": 2 }
5
+ },
6
+ "status": "captured",
7
+ "operationId": "capture-assessed-v2",
8
+ "viewId": "structure-follow",
9
+ "resolvedSubject": {
10
+ "kind": "actor_path",
11
+ "actorPath": "/Game/Fixture/Cameras/L_CameraLoad.L_CameraLoad:PersistentLevel.ReviewSubject",
12
+ "transform": {
13
+ "location": { "x": 100, "y": 200, "z": 300 },
14
+ "rotation": { "pitch": 0, "yaw": 45, "roll": 0 }
15
+ }
16
+ },
17
+ "effectiveWorldPose": {
18
+ "aspectRatio": "16:9",
19
+ "fieldOfViewDegrees": 70,
20
+ "projection": "perspective",
21
+ "location": { "x": 1200, "y": -900, "z": 700 },
22
+ "rotation": { "pitch": -20, "yaw": 145, "roll": 0 }
23
+ },
24
+ "mapPath": "/Game/Fixture/Cameras/L_CameraLoad",
25
+ "stagingPath": "C:/fixture/Saved/UEShed/ReviewStaging/capture-assessed-v2/pure.png",
26
+ "width": 1280,
27
+ "height": 720,
28
+ "captureDurationMs": 14.5,
29
+ "mapPackageDirtyBefore": false,
30
+ "mapPackageDirtyAfter": false,
31
+ "subjectProjection": {
32
+ "status": "projected",
33
+ "viewportStatus": "fully_within_viewport",
34
+ "normalizedBounds": { "minX": 0.2, "minY": 0.2, "maxX": 0.8, "maxY": 0.8 },
35
+ "margins": { "left": 0.2, "right": 0.2, "top": 0.2, "bottom": 0.2 }
36
+ },
37
+ "visibility": {
38
+ "status": "assessed",
39
+ "classification": "partial",
40
+ "method": { "method": "ray_samples", "version": 1 },
41
+ "visibleFraction": 0.6666666666666666,
42
+ "sampleCount": 9,
43
+ "assessmentDurationMs": 0.25,
44
+ "limitations": ["Collision rays are diagnostic and may differ from rendered visibility."],
45
+ "occluders": [
46
+ {
47
+ "confidence": 0.3333333333333333,
48
+ "locator": {
49
+ "kind": "actor_path",
50
+ "actorPath": "/Game/Fixture/Cameras/L_CameraLoad.L_CameraLoad:PersistentLevel.ReviewOccluder"
51
+ },
52
+ "reason": "The actor blocked one or more bounded visibility rays."
53
+ }
54
+ ]
55
+ }
56
+ }
@@ -0,0 +1,55 @@
1
+ {
2
+ "contract": {
3
+ "name": "ue-shed-review-capture",
4
+ "version": { "major": 1, "minor": 3 }
5
+ },
6
+ "status": "captured",
7
+ "operationId": "capture-assessed",
8
+ "viewId": "structure-follow",
9
+ "resolvedSubject": {
10
+ "kind": "actor_path",
11
+ "actorPath": "/Game/Fixture/Cameras/L_CameraLoad.L_CameraLoad:PersistentLevel.ReviewSubject",
12
+ "transform": {
13
+ "location": { "x": 100, "y": 200, "z": 300 },
14
+ "rotation": { "pitch": 0, "yaw": 45, "roll": 0 }
15
+ }
16
+ },
17
+ "effectiveWorldPose": {
18
+ "aspectRatio": "16:9",
19
+ "fieldOfViewDegrees": 70,
20
+ "projection": "perspective",
21
+ "location": { "x": 1200, "y": -900, "z": 700 },
22
+ "rotation": { "pitch": -20, "yaw": 145, "roll": 0 }
23
+ },
24
+ "mapPath": "/Game/Fixture/Cameras/L_CameraLoad",
25
+ "stagingPath": "C:/fixture/Saved/UEShed/ReviewStaging/capture-assessed/pure.png",
26
+ "width": 1280,
27
+ "height": 720,
28
+ "captureDurationMs": 14.5,
29
+ "mapPackageDirtyBefore": false,
30
+ "mapPackageDirtyAfter": false,
31
+ "subjectProjection": {
32
+ "status": "projected",
33
+ "viewportStatus": "fully_within_viewport",
34
+ "normalizedBounds": { "minX": 0.2, "minY": 0.2, "maxX": 0.8, "maxY": 0.8 },
35
+ "margins": { "left": 0.2, "right": 0.2, "top": 0.2, "bottom": 0.2 }
36
+ },
37
+ "visibility": {
38
+ "status": "assessed",
39
+ "method": { "method": "ray_samples", "version": 1 },
40
+ "visibleFraction": 0.6666666666666666,
41
+ "sampleCount": 9,
42
+ "assessmentDurationMs": 0.25,
43
+ "limitations": ["Collision rays are diagnostic and may differ from rendered visibility."],
44
+ "occluders": [
45
+ {
46
+ "confidence": 0.3333333333333333,
47
+ "locator": {
48
+ "kind": "actor_path",
49
+ "actorPath": "/Game/Fixture/Cameras/L_CameraLoad.L_CameraLoad:PersistentLevel.ReviewOccluder"
50
+ },
51
+ "reason": "The actor blocked one or more bounded visibility rays."
52
+ }
53
+ ]
54
+ }
55
+ }
@@ -0,0 +1,62 @@
1
+ {
2
+ "contract": {
3
+ "name": "ue-shed-review-capture",
4
+ "version": { "major": 1, "minor": 4 }
5
+ },
6
+ "status": "captured",
7
+ "operationId": "capture-clear-failed",
8
+ "viewId": "structure-clear",
9
+ "resolvedSubject": {
10
+ "kind": "actor_path",
11
+ "actorPath": "/Game/Fixture/Cameras/L_CameraLoad.L_CameraLoad:PersistentLevel.ReviewSubject",
12
+ "transform": {
13
+ "location": { "x": 100, "y": 200, "z": 300 },
14
+ "rotation": { "pitch": 0, "yaw": 45, "roll": 0 }
15
+ }
16
+ },
17
+ "effectiveWorldPose": {
18
+ "aspectRatio": "16:9",
19
+ "fieldOfViewDegrees": 70,
20
+ "projection": "perspective",
21
+ "location": { "x": 1200, "y": -900, "z": 700 },
22
+ "rotation": { "pitch": -20, "yaw": 145, "roll": 0 }
23
+ },
24
+ "mapPath": "/Game/Fixture/Cameras/L_CameraLoad",
25
+ "stagedArtifacts": [
26
+ {
27
+ "variant": "pure",
28
+ "stagingPath": "C:/fixture/Saved/UEShed/ReviewStaging/capture-clear-failed/pure.png"
29
+ }
30
+ ],
31
+ "clearCompanion": {
32
+ "status": "failed",
33
+ "strategy": "hide_explicit",
34
+ "interventions": [],
35
+ "failure": {
36
+ "code": "clear_actor_not_found",
37
+ "message": "A requested Clear actor was not found.",
38
+ "recovery": "Update the explicit Clear actors and retry.",
39
+ "retrySafe": true
40
+ },
41
+ "restoration": {
42
+ "status": "restored",
43
+ "method": "transient_capture_component_lists"
44
+ }
45
+ },
46
+ "width": 1280,
47
+ "height": 720,
48
+ "captureDurationMs": 15.5,
49
+ "mapPackageDirtyBefore": false,
50
+ "mapPackageDirtyAfter": false,
51
+ "subjectProjection": {
52
+ "status": "projected",
53
+ "viewportStatus": "fully_within_viewport",
54
+ "normalizedBounds": { "minX": 0.2, "minY": 0.2, "maxX": 0.8, "maxY": 0.8 },
55
+ "margins": { "left": 0.2, "right": 0.2, "top": 0.2, "bottom": 0.2 }
56
+ },
57
+ "visibility": {
58
+ "status": "not_assessed",
59
+ "reason": "Clear preparation failed after Pure capture.",
60
+ "limitations": []
61
+ }
62
+ }
@@ -0,0 +1,72 @@
1
+ {
2
+ "contract": {
3
+ "name": "ue-shed-review-capture",
4
+ "version": { "major": 1, "minor": 4 }
5
+ },
6
+ "status": "captured",
7
+ "operationId": "capture-clear",
8
+ "viewId": "structure-clear",
9
+ "resolvedSubject": {
10
+ "kind": "actor_path",
11
+ "actorPath": "/Game/Fixture/Cameras/L_CameraLoad.L_CameraLoad:PersistentLevel.ReviewSubject",
12
+ "transform": {
13
+ "location": { "x": 100, "y": 200, "z": 300 },
14
+ "rotation": { "pitch": 0, "yaw": 45, "roll": 0 }
15
+ }
16
+ },
17
+ "effectiveWorldPose": {
18
+ "aspectRatio": "16:9",
19
+ "fieldOfViewDegrees": 70,
20
+ "projection": "perspective",
21
+ "location": { "x": 1200, "y": -900, "z": 700 },
22
+ "rotation": { "pitch": -20, "yaw": 145, "roll": 0 }
23
+ },
24
+ "mapPath": "/Game/Fixture/Cameras/L_CameraLoad",
25
+ "stagedArtifacts": [
26
+ {
27
+ "variant": "pure",
28
+ "stagingPath": "C:/fixture/Saved/UEShed/ReviewStaging/capture-clear/pure.png"
29
+ },
30
+ {
31
+ "variant": "clear",
32
+ "stagingPath": "C:/fixture/Saved/UEShed/ReviewStaging/capture-clear/clear.png"
33
+ }
34
+ ],
35
+ "clearCompanion": {
36
+ "status": "captured",
37
+ "strategy": "hide_explicit",
38
+ "interventions": [
39
+ {
40
+ "type": "hide_actor_components",
41
+ "target": {
42
+ "kind": "actor_path",
43
+ "actorPath": "/Game/Fixture/Cameras/L_CameraLoad.L_CameraLoad:PersistentLevel.ReviewOccluder"
44
+ }
45
+ }
46
+ ],
47
+ "restoration": {
48
+ "status": "restored",
49
+ "method": "transient_capture_component_lists"
50
+ }
51
+ },
52
+ "width": 1280,
53
+ "height": 720,
54
+ "captureDurationMs": 22.5,
55
+ "mapPackageDirtyBefore": false,
56
+ "mapPackageDirtyAfter": false,
57
+ "subjectProjection": {
58
+ "status": "projected",
59
+ "viewportStatus": "fully_within_viewport",
60
+ "normalizedBounds": { "minX": 0.2, "minY": 0.2, "maxX": 0.8, "maxY": 0.8 },
61
+ "margins": { "left": 0.2, "right": 0.2, "top": 0.2, "bottom": 0.2 }
62
+ },
63
+ "visibility": {
64
+ "status": "assessed",
65
+ "method": { "method": "depth_compare", "version": 1 },
66
+ "visibleFraction": 0.4,
67
+ "sampleCount": 6400,
68
+ "assessmentDurationMs": 1.5,
69
+ "limitations": ["Bounded depth comparison."],
70
+ "occluders": []
71
+ }
72
+ }
@@ -0,0 +1,29 @@
1
+ {
2
+ "assessment": { "method": "automatic" },
3
+ "contract": {
4
+ "name": "ue-shed-review-capture",
5
+ "version": { "major": 1, "minor": 3 }
6
+ },
7
+ "operationId": "33333333-3333-4333-8333-333333333333",
8
+ "viewId": "loading-area",
9
+ "expectedMapPath": "/Game/Fixture/Cameras/L_CameraLoad",
10
+ "subject": {
11
+ "kind": "oriented_bounds",
12
+ "bounds": {
13
+ "center": { "x": 0, "y": 0, "z": 200 },
14
+ "extent": { "x": 600, "y": 400, "z": 200 },
15
+ "rotation": { "pitch": 0, "yaw": 30, "roll": 0 }
16
+ }
17
+ },
18
+ "viewpoint": {
19
+ "kind": "world_fixed",
20
+ "approvedPose": {
21
+ "aspectRatio": "16:9",
22
+ "fieldOfViewDegrees": 70,
23
+ "projection": "perspective",
24
+ "location": { "x": 1200, "y": -900, "z": 700 },
25
+ "rotation": { "pitch": -20, "yaw": 145, "roll": 0 }
26
+ }
27
+ },
28
+ "resolution": { "width": 1280, "height": 720 }
29
+ }
@@ -0,0 +1,30 @@
1
+ {
2
+ "assessment": { "method": "automatic" },
3
+ "clearCompanion": {
4
+ "status": "requested",
5
+ "strategy": "hide_explicit",
6
+ "actors": ["/Game/Fixture/Cameras/L_CameraLoad.L_CameraLoad:PersistentLevel.ReviewOccluder"]
7
+ },
8
+ "contract": {
9
+ "name": "ue-shed-review-capture",
10
+ "version": { "major": 1, "minor": 4 }
11
+ },
12
+ "operationId": "33333333-3333-4333-8333-333333333333",
13
+ "viewId": "structure-clear",
14
+ "expectedMapPath": "/Game/Fixture/Cameras/L_CameraLoad",
15
+ "subject": {
16
+ "kind": "actor_path",
17
+ "actorPath": "/Game/Fixture/Cameras/L_CameraLoad.L_CameraLoad:PersistentLevel.ReviewSubject"
18
+ },
19
+ "viewpoint": {
20
+ "kind": "world_fixed",
21
+ "approvedPose": {
22
+ "aspectRatio": "16:9",
23
+ "fieldOfViewDegrees": 70,
24
+ "projection": "perspective",
25
+ "location": { "x": 1200, "y": -900, "z": 700 },
26
+ "rotation": { "pitch": -20, "yaw": 145, "roll": 0 }
27
+ }
28
+ },
29
+ "resolution": { "width": 1280, "height": 720 }
30
+ }
@@ -0,0 +1,29 @@
1
+ {
2
+ "assessment": { "method": "ray_samples", "samplePreset": "standard" },
3
+ "contract": {
4
+ "name": "ue-shed-review-capture",
5
+ "version": { "major": 1, "minor": 3 }
6
+ },
7
+ "operationId": "22222222-2222-4222-8222-222222222222",
8
+ "viewId": "structure-follow",
9
+ "expectedMapPath": "/Game/Fixture/Cameras/L_CameraLoad",
10
+ "subject": {
11
+ "kind": "actor_path",
12
+ "actorPath": "/Game/Fixture/Cameras/L_CameraLoad.L_CameraLoad:PersistentLevel.ReviewSubject"
13
+ },
14
+ "viewpoint": {
15
+ "kind": "target_relative",
16
+ "relativePose": {
17
+ "aspectRatio": "16:9",
18
+ "fieldOfViewDegrees": 70,
19
+ "projection": "perspective",
20
+ "location": { "x": -900, "y": 0, "z": 300 },
21
+ "rotation": { "pitch": -15, "yaw": 0, "roll": 0 }
22
+ },
23
+ "targetSnapshot": {
24
+ "location": { "x": 100, "y": 200, "z": 300 },
25
+ "rotation": { "pitch": 0, "yaw": 45, "roll": 0 }
26
+ }
27
+ },
28
+ "resolution": { "width": 1280, "height": 720 }
29
+ }
@@ -0,0 +1,14 @@
1
+ {
2
+ "contract": {
3
+ "name": "ue-shed-review-assessment-capabilities",
4
+ "version": { "major": 1, "minor": 0 }
5
+ },
6
+ "depthCompareMaximumResolution": { "width": 320, "height": 180 },
7
+ "methods": [
8
+ {
9
+ "requestedMethod": "automatic",
10
+ "status": "supported",
11
+ "limitations": []
12
+ }
13
+ ]
14
+ }
@@ -20,9 +20,9 @@ frames from an old session are disposable.
20
20
  | 40 | f64 | Unreal world seconds at capture request |
21
21
  | 48 | f64 | producer monotonic milliseconds at capture request |
22
22
  | 56 | f64 | GPU readback latency in milliseconds |
23
- | 64 | u8[16] | producer ID |
24
- | 80 | u8[16] | session ID |
25
- | 96 | u8[16] | camera ID |
23
+ | 64 | u32[4] | producer FGuid words, each little-endian |
24
+ | 80 | u32[4] | session FGuid words, each little-endian |
25
+ | 96 | u32[4] | camera FGuid words, each little-endian |
26
26
  | 112 | u32 | cumulative readback/staging drops |
27
27
  | 116 | u32 | cumulative latest-frame transport replacements |
28
28
  | 120 | u32 | reserved, zero |
@@ -31,3 +31,6 @@ frames from an old session are disposable.
31
31
  The payload is top-to-bottom, tightly packed BGRA8. Live buffers are bounded and latest-frame-wins;
32
32
  sequence gaps are expected and observable. The control plane owns camera listing, schedule tuning,
33
33
  pause/focus, and health. This binary stream never carries durable evidence.
34
+
35
+ To compare an ID with Unreal's `FGuid::ToString(EGuidFormats::Digits)` output, read the four
36
+ little-endian `u32` words and concatenate them as four zero-padded, eight-digit hexadecimal values.
@@ -0,0 +1,10 @@
1
+ # Unreal editor world-control contract v1
2
+
3
+ This contract lets a trusted external client open one explicit `/Game/` map in Unreal Editor
4
+ without player input. The operation never saves, discards, or prompts over dirty work. It returns
5
+ `already_open` when the target is current and otherwise rejects active play sessions, dirty world
6
+ packages, missing maps, and failed loads as typed outcomes.
7
+
8
+ `request.schema.json` and `response.schema.json` are the language-neutral authority shared by
9
+ `@ue-shed/protocol` and `UEShedCoreEditor`. The companion advertises
10
+ `editor.world-control.v1` and its reflected object path before clients may invoke the operation.
@@ -0,0 +1,16 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://ue-shed.dev/contracts/editor-world/v1/request.schema.json",
4
+ "title": "UE Shed editor world open request v1.0",
5
+ "type": "object",
6
+ "additionalProperties": false,
7
+ "required": ["contract", "operationId", "targetMapPath"],
8
+ "properties": {
9
+ "contract": { "$ref": "response.schema.json#/$defs/contract" },
10
+ "operationId": {
11
+ "type": "string",
12
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$"
13
+ },
14
+ "targetMapPath": { "$ref": "response.schema.json#/$defs/gameMapPath" }
15
+ }
16
+ }
@@ -0,0 +1,93 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://ue-shed.dev/contracts/editor-world/v1/response.schema.json",
4
+ "title": "UE Shed editor world open response v1.0",
5
+ "oneOf": [
6
+ {
7
+ "type": "object",
8
+ "additionalProperties": false,
9
+ "required": ["after", "before", "contract", "operationId", "outcome", "targetMapPath"],
10
+ "properties": {
11
+ "after": { "$ref": "#/$defs/snapshot" },
12
+ "before": { "$ref": "#/$defs/snapshot" },
13
+ "contract": { "$ref": "#/$defs/contract" },
14
+ "operationId": { "$ref": "#/$defs/operationId" },
15
+ "outcome": { "enum": ["opened", "already_open"] },
16
+ "targetMapPath": { "$ref": "#/$defs/gameMapPath" }
17
+ }
18
+ },
19
+ {
20
+ "type": "object",
21
+ "additionalProperties": false,
22
+ "required": [
23
+ "after",
24
+ "before",
25
+ "code",
26
+ "contract",
27
+ "message",
28
+ "operationId",
29
+ "outcome",
30
+ "recovery",
31
+ "retrySafe",
32
+ "targetMapPath"
33
+ ],
34
+ "properties": {
35
+ "after": { "$ref": "#/$defs/snapshot" },
36
+ "before": { "$ref": "#/$defs/snapshot" },
37
+ "code": {
38
+ "enum": [
39
+ "dirty_world",
40
+ "invalid_request",
41
+ "map_not_found",
42
+ "open_failed",
43
+ "play_session_active",
44
+ "unavailable"
45
+ ]
46
+ },
47
+ "contract": { "$ref": "#/$defs/contract" },
48
+ "message": { "type": "string" },
49
+ "operationId": { "$ref": "#/$defs/operationId" },
50
+ "outcome": { "const": "rejected" },
51
+ "recovery": { "type": "string" },
52
+ "retrySafe": { "type": "boolean" },
53
+ "targetMapPath": { "$ref": "#/$defs/gameMapPath" }
54
+ }
55
+ }
56
+ ],
57
+ "$defs": {
58
+ "contract": {
59
+ "type": "object",
60
+ "additionalProperties": false,
61
+ "required": ["name", "version"],
62
+ "properties": {
63
+ "name": { "const": "unreal-editor-world-control" },
64
+ "version": {
65
+ "type": "object",
66
+ "additionalProperties": false,
67
+ "required": ["major", "minor"],
68
+ "properties": { "major": { "const": 1 }, "minor": { "const": 0 } }
69
+ }
70
+ }
71
+ },
72
+ "mapPath": { "type": "string", "pattern": "^/[A-Za-z0-9_./-]+$" },
73
+ "gameMapPath": { "type": "string", "pattern": "^/Game/[A-Za-z0-9_./-]+$" },
74
+ "operationId": {
75
+ "type": "string",
76
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$"
77
+ },
78
+ "snapshot": {
79
+ "type": "object",
80
+ "additionalProperties": false,
81
+ "required": ["dirtyWorldPackages", "playSessionActive"],
82
+ "properties": {
83
+ "dirtyWorldPackages": {
84
+ "type": "array",
85
+ "maxItems": 256,
86
+ "items": { "$ref": "#/$defs/mapPath" }
87
+ },
88
+ "mapPath": { "$ref": "#/$defs/mapPath" },
89
+ "playSessionActive": { "type": "boolean" }
90
+ }
91
+ }
92
+ }
93
+ }
@@ -0,0 +1,9 @@
1
+ # Live scenario execution v1 fixtures
2
+
3
+ These JSON fixtures freeze the language-neutral control-plane values shared by
4
+ `@ue-shed/scenarios` and the optional `UEShedScenarios` Unreal plugin. The Effect schemas in
5
+ `packages/scenarios/src/live.ts` own validation; conformance tests decode and re-encode every
6
+ fixture without loss.
7
+
8
+ Version 1 supports only the deterministic Movement Gym PIE slice, `pre_evaluation` input,
9
+ Move/Jump/Interact, one blocking `landing_ready` wait, one `cache_open` probe, and bounded evidence.
@@ -0,0 +1,8 @@
1
+ {
2
+ "_tag": "Accepted",
3
+ "contract": {
4
+ "name": "ue-shed-scenario-execution",
5
+ "version": { "major": 1, "minor": 0 }
6
+ },
7
+ "runId": "run-live-1"
8
+ }
@@ -0,0 +1,44 @@
1
+ {
2
+ "contract": {
3
+ "name": "ue-shed-scenario-execution",
4
+ "version": { "major": 1, "minor": 0 }
5
+ },
6
+ "actions": [
7
+ {
8
+ "actionId": "Move",
9
+ "actionPath": "/Game/Fixture/Input/IA_Move",
10
+ "keyframes": [
11
+ { "atMs": 250, "value": { "_tag": "Axis2D", "x": 0, "y": 1 } },
12
+ { "atMs": 1000, "value": { "_tag": "Axis2D", "x": 0, "y": 0 } }
13
+ ],
14
+ "valueType": "Axis2D"
15
+ },
16
+ {
17
+ "actionId": "Jump",
18
+ "actionPath": "/Game/Fixture/Input/IA_Jump",
19
+ "keyframes": [
20
+ { "atMs": 1200, "value": { "_tag": "Boolean", "value": true } },
21
+ { "atMs": 1250, "value": { "_tag": "Boolean", "value": false } }
22
+ ],
23
+ "valueType": "Boolean"
24
+ },
25
+ {
26
+ "actionId": "Interact",
27
+ "actionPath": "/Game/Fixture/Input/IA_Interact",
28
+ "keyframes": [
29
+ { "atMs": 5200, "value": { "_tag": "Boolean", "value": true } },
30
+ { "atMs": 5250, "value": { "_tag": "Boolean", "value": false } }
31
+ ],
32
+ "valueType": "Boolean"
33
+ }
34
+ ],
35
+ "durationMs": 9216,
36
+ "evidenceLimit": 3,
37
+ "expectedPieSessionId": "pie-session-1",
38
+ "injectionLayer": "pre_evaluation",
39
+ "liveInputPolicy": "isolated",
40
+ "mapPath": "/Game/Fixture/Scenarios/L_MovementGym",
41
+ "probe": { "atMs": 5580, "condition": "cache_open" },
42
+ "scenarioId": "scenario_movement-gym_014",
43
+ "wait": { "atMs": 4100, "condition": "landing_ready", "timeoutMs": 1250 }
44
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "_tag": "Prepared",
3
+ "contract": {
4
+ "name": "ue-shed-scenario-execution",
5
+ "version": { "major": 1, "minor": 0 }
6
+ },
7
+ "mapPath": "/Game/Fixture/Scenarios/L_MovementGym",
8
+ "scenarioId": "scenario_movement-gym_014"
9
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "_tag": "Accepted",
3
+ "contract": {
4
+ "name": "ue-shed-scenario-execution",
5
+ "version": { "major": 1, "minor": 0 }
6
+ },
7
+ "pieSessionId": "pie-session-1",
8
+ "runId": "run-live-1",
9
+ "state": "accepted"
10
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "_tag": "Active",
3
+ "contract": {
4
+ "name": "ue-shed-scenario-execution",
5
+ "version": { "major": 1, "minor": 0 }
6
+ },
7
+ "gameTimeMs": 4100,
8
+ "pieSessionId": "pie-session-1",
9
+ "runId": "run-live-1",
10
+ "state": "waiting"
11
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "_tag": "Rejected",
3
+ "code": "stale_session",
4
+ "contract": {
5
+ "name": "ue-shed-scenario-execution",
6
+ "version": { "major": 1, "minor": 0 }
7
+ },
8
+ "message": "The PIE session changed while the run was active.",
9
+ "recovery": "Start a fresh run against the current PIE session."
10
+ }
@@ -0,0 +1,33 @@
1
+ {
2
+ "_tag": "Terminal",
3
+ "contract": {
4
+ "name": "ue-shed-scenario-execution",
5
+ "version": { "major": 1, "minor": 0 }
6
+ },
7
+ "result": {
8
+ "schemaVersion": 1,
9
+ "id": "run-live-cancelled",
10
+ "scenarioId": "scenario_movement-gym_014",
11
+ "label": "Movement Gym live run",
12
+ "status": "cancelled",
13
+ "recordedAt": "2026-08-11T00:00:00.000Z",
14
+ "durationMs": 2100,
15
+ "engineVersion": "5.7",
16
+ "world": "L_MovementGym:PersistentLevel",
17
+ "evidence": [],
18
+ "divergences": [],
19
+ "pieSessionId": "pie-session-1",
20
+ "lifecycle": [
21
+ { "state": "accepted", "atGameTimeMs": 0 },
22
+ { "state": "isolating", "atGameTimeMs": 0 },
23
+ { "state": "running", "atGameTimeMs": 0 },
24
+ { "state": "cancelling", "atGameTimeMs": 2100 },
25
+ { "state": "terminal", "atGameTimeMs": 2100 }
26
+ ],
27
+ "inputIsolation": {
28
+ "established": true,
29
+ "restored": true,
30
+ "method": "slate_input_preprocessor"
31
+ }
32
+ }
33
+ }