@ue-shed/protocol 0.1.0-rc.2 → 0.1.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 (83) hide show
  1. package/README.md +1 -1
  2. package/contracts/cameras/provisioning/v1/README.md +12 -0
  3. package/contracts/cameras/provisioning/v1/fixtures/provision-request-valid.json +14 -0
  4. package/contracts/cameras/provisioning/v1/provision-request.schema.json +90 -0
  5. package/contracts/cameras/review/v1/README.md +39 -10
  6. package/contracts/cameras/review/v1/assessment-capabilities.schema.json +86 -0
  7. package/contracts/cameras/review/v1/capture-request.schema.json +173 -19
  8. package/contracts/cameras/review/v1/capture-response.schema.json +576 -1
  9. package/contracts/cameras/review/v1/fixtures/assessment-capabilities.json +36 -0
  10. package/contracts/cameras/review/v1/fixtures/capture-area.json +42 -0
  11. package/contracts/cameras/review/v1/fixtures/capture-assessed-v2.json +56 -0
  12. package/contracts/cameras/review/v1/fixtures/capture-assessed.json +55 -0
  13. package/contracts/cameras/review/v1/fixtures/capture-clear-failed.json +62 -0
  14. package/contracts/cameras/review/v1/fixtures/capture-clear.json +72 -0
  15. package/contracts/cameras/review/v1/fixtures/capture-request-area-valid.json +29 -0
  16. package/contracts/cameras/review/v1/fixtures/capture-request-clear-valid.json +30 -0
  17. package/contracts/cameras/review/v1/fixtures/capture-request-relative-valid.json +29 -0
  18. package/contracts/cameras/review/v1/fixtures/invalid-assessment-capabilities-supported-without-effective-method.json +14 -0
  19. package/contracts/scenarios/live/v1/README.md +9 -0
  20. package/contracts/scenarios/live/v1/fixtures/cancel-accepted.json +8 -0
  21. package/contracts/scenarios/live/v1/fixtures/execution-request.json +44 -0
  22. package/contracts/scenarios/live/v1/fixtures/prepare-prepared.json +9 -0
  23. package/contracts/scenarios/live/v1/fixtures/start-accepted.json +10 -0
  24. package/contracts/scenarios/live/v1/fixtures/status-active.json +11 -0
  25. package/contracts/scenarios/live/v1/fixtures/status-rejected-stale.json +10 -0
  26. package/contracts/scenarios/live/v1/fixtures/status-terminal-cancelled.json +33 -0
  27. package/contracts/scenarios/live/v1/fixtures/status-terminal-missing-divergence.json +54 -0
  28. package/contracts/uasset-io/v1/README.md +34 -0
  29. package/contracts/uasset-io/v1/event.schema.json +6779 -0
  30. package/contracts/uasset-io/v1/fixtures/invalid/event-result-unknown-kind.json +7 -0
  31. package/contracts/uasset-io/v1/fixtures/invalid/event-unknown-kind.json +6 -0
  32. package/contracts/uasset-io/v1/fixtures/invalid/project-index-page-unbounded.json +7196 -0
  33. package/contracts/uasset-io/v1/fixtures/invalid/project-index-query-oversize-limit.json +15 -0
  34. package/contracts/uasset-io/v1/fixtures/invalid/request-wrong-major.json +6 -0
  35. package/contracts/uasset-io/v1/fixtures/valid/accepted-event.json +7 -0
  36. package/contracts/uasset-io/v1/fixtures/valid/authoring-result-event.json +26 -0
  37. package/contracts/uasset-io/v1/fixtures/valid/extract-text-occurrence-result-event.json +26 -0
  38. package/contracts/uasset-io/v1/fixtures/valid/extract-text-result-event.json +23 -0
  39. package/contracts/uasset-io/v1/fixtures/valid/extract-text-summary-result-event.json +23 -0
  40. package/contracts/uasset-io/v1/fixtures/valid/extract-texture-record-result-event.json +29 -0
  41. package/contracts/uasset-io/v1/fixtures/valid/inspect-result-event.json +29 -0
  42. package/contracts/uasset-io/v1/fixtures/valid/partial-completed-event.json +7 -0
  43. package/contracts/uasset-io/v1/fixtures/valid/project-index-accepted-event.json +7 -0
  44. package/contracts/uasset-io/v1/fixtures/valid/project-index-page-result-event.json +28 -0
  45. package/contracts/uasset-io/v1/fixtures/valid/project-index-progress-event.json +9 -0
  46. package/contracts/uasset-io/v1/fixtures/valid/project-index-query-request.json +19 -0
  47. package/contracts/uasset-io/v1/fixtures/valid/project-index-rebuild-request.json +13 -0
  48. package/contracts/uasset-io/v1/fixtures/valid/project-index-refresh-request.json +13 -0
  49. package/contracts/uasset-io/v1/fixtures/valid/project-index-stale-generation-failed-event.json +11 -0
  50. package/contracts/uasset-io/v1/fixtures/valid/project-index-status-request.json +13 -0
  51. package/contracts/uasset-io/v1/fixtures/valid/project-index-status-result-event.json +22 -0
  52. package/contracts/uasset-io/v1/fixtures/valid/project-index-summary-result-event.json +25 -0
  53. package/contracts/uasset-io/v1/fixtures/valid/saved-world-result-event.json +27 -0
  54. package/contracts/uasset-io/v1/fixtures/valid/scan-asset-result-event.json +47 -0
  55. package/contracts/uasset-io/v1/fixtures/valid/scan-inventory-result-event.json +15 -0
  56. package/contracts/uasset-io/v1/fixtures/valid/scan-request.json +17 -0
  57. package/contracts/uasset-io/v1/fixtures/valid/scan-summary-result-event.json +24 -0
  58. package/contracts/uasset-io/v1/request.schema.json +512 -0
  59. package/dist/companion.d.ts +16 -0
  60. package/dist/companion.d.ts.map +1 -1
  61. package/dist/companion.js +8 -0
  62. package/dist/companion.js.map +1 -1
  63. package/dist/editor-asset-navigation.d.ts +63 -0
  64. package/dist/editor-asset-navigation.d.ts.map +1 -0
  65. package/dist/editor-asset-navigation.js +32 -0
  66. package/dist/editor-asset-navigation.js.map +1 -0
  67. package/dist/index.d.ts +4 -0
  68. package/dist/index.d.ts.map +1 -1
  69. package/dist/index.js +4 -0
  70. package/dist/index.js.map +1 -1
  71. package/dist/saved-world.d.ts +223 -0
  72. package/dist/saved-world.d.ts.map +1 -0
  73. package/dist/saved-world.js +82 -0
  74. package/dist/saved-world.js.map +1 -0
  75. package/dist/uasset-inspection.d.ts +1037 -0
  76. package/dist/uasset-inspection.d.ts.map +1 -0
  77. package/dist/uasset-inspection.js +446 -0
  78. package/dist/uasset-inspection.js.map +1 -0
  79. package/dist/uasset-io.d.ts +2602 -0
  80. package/dist/uasset-io.d.ts.map +1 -0
  81. package/dist/uasset-io.js +306 -0
  82. package/dist/uasset-io.js.map +1 -0
  83. 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
+ }
@@ -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
+ }
@@ -0,0 +1,54 @@
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-1",
10
+ "scenarioId": "scenario_movement-gym_014",
11
+ "label": "Movement Gym live run",
12
+ "status": "completed_with_divergence",
13
+ "recordedAt": "2026-08-11T00:00:00.000Z",
14
+ "durationMs": 9216,
15
+ "engineVersion": "5.7",
16
+ "world": "L_MovementGym:PersistentLevel",
17
+ "evidence": [
18
+ {
19
+ "id": "evidence_cache_open",
20
+ "markerId": "marker_cache_state",
21
+ "atMs": 5580,
22
+ "type": "world_state",
23
+ "label": "Cache state",
24
+ "summary": "The fixture state provider returned no cache observation.",
25
+ "status": "missing"
26
+ }
27
+ ],
28
+ "divergences": [
29
+ {
30
+ "id": "divergence_wait_timing",
31
+ "atMs": 4100,
32
+ "severity": "warning",
33
+ "source": "timing",
34
+ "expected": "landing_ready within 1250 ms",
35
+ "observed": "landing_ready after 1310 ms",
36
+ "explanation": "The blocking condition exceeded its expected game-time tolerance."
37
+ }
38
+ ],
39
+ "pieSessionId": "pie-session-1",
40
+ "lifecycle": [
41
+ { "state": "accepted", "atGameTimeMs": 0 },
42
+ { "state": "isolating", "atGameTimeMs": 0 },
43
+ { "state": "running", "atGameTimeMs": 0 },
44
+ { "state": "waiting", "atGameTimeMs": 4100 },
45
+ { "state": "running", "atGameTimeMs": 4100 },
46
+ { "state": "terminal", "atGameTimeMs": 9216 }
47
+ ],
48
+ "inputIsolation": {
49
+ "established": true,
50
+ "restored": true,
51
+ "method": "slate_input_preprocessor"
52
+ }
53
+ }
54
+ }
@@ -0,0 +1,34 @@
1
+ # UAsset IO protocol v1
2
+
3
+ The checked-in JSON Schemas in this directory are the language-neutral authority for the UAsset
4
+ process seam. A caller writes one request to the uasset protocol command's stdin. The command writes
5
+ one NDJSON event stream to stdout.
6
+
7
+ Version 1 carries the complete request envelope, stream-control events, and typed result frames.
8
+ Every frame carries the same contract, requestId, and sequence. A supported request begins with
9
+ accepted and ends with exactly one terminal event. Sequence is contiguous from zero; completed, failed,
10
+ and rejected are terminal. An explicitly supplied empty paths array means zero work and must not
11
+ select a project root.
12
+
13
+ Minor version 1.1 adds bounded Project Index operations (`project_index_status`,
14
+ `project_index_refresh`, `project_index_rebuild`, `project_index_query`) and their typed result
15
+ frames. Version 1.0 operations and the cumulative meaning of `maximumOutputBytes` remain unchanged.
16
+ Paired TypeScript and native workers negotiate additive operations; a worker that cannot decode an
17
+ operation rejects it before `accepted`.
18
+
19
+ Result frames use an explicit result kind. Generic inspection, authoring, scan, compact text,
20
+ compact texture, and saved-world values each have a named schema; there is no untyped result field.
21
+ The shared inspection schemas are exported from `@ue-shed/protocol` so the Effect reader and the
22
+ Rust worker can converge on one wire shape.
23
+
24
+ Expected request or operation failures use rejected or failed and exit 0. Non-zero process exits are
25
+ reserved for failures that prevent the command from establishing or completing the protocol stream.
26
+ Existing human command exit behavior remains unchanged.
27
+
28
+ Change JSON Schema and fixtures first, keep Effect schemas conformant with
29
+ pnpm --filter @ue-shed/protocol contract:check, then add Rust conformance coverage.
30
+
31
+ The TypeScript and Rust sides both run the complete shared fixture set. TypeScript coverage is in
32
+ `packages/protocol/src/uasset-io.test.ts`; Rust coverage is `cargo test -p uasset-io protocol`.
33
+ Adding a result variant requires a valid fixture that both tests decode, plus an invalid fixture when
34
+ the boundary rule needs a rejection case.