motionloom 2.3.0 → 2.4.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/CHANGELOG.md +24 -1
  2. package/README.md +78 -11
  3. package/ROADMAP.md +8 -5
  4. package/SKILL.md +24 -5
  5. package/agent-card.json +31 -5
  6. package/agent-surfaces.json +1 -1
  7. package/artifact-adapter-registry.json +53 -0
  8. package/bin/motionloom.mjs +29 -5
  9. package/docs/CHECKLIST.md +16 -0
  10. package/docs/STATUS.md +2 -2
  11. package/docs/audits/data/deep-stress-latest.json +65 -65
  12. package/docs/releases/2.4.0.md +31 -0
  13. package/docs/releases/npm-publish-from-workstation.md +19 -8
  14. package/docs/research/agent-skill-ecosystem-notes.md +47 -0
  15. package/docs/research/ai-animation-tools-2026-notes.md +81 -0
  16. package/docs/research/ai-animation-tools-2026-report.md +168 -0
  17. package/docs/research/ai-pilot-ingest-notes.md +29 -0
  18. package/examples/agent-consumer/ai-pilot-scout/CHATGPT-HANDOFF.md +70 -0
  19. package/examples/agent-consumer/ai-pilot-scout/CODEX-HANDOFF.md +80 -0
  20. package/examples/agent-consumer/ai-pilot-scout/README.md +39 -0
  21. package/examples/agent-consumer/ai-pilot-scout/chatgpt-geometry-correction-prompt.md +55 -0
  22. package/examples/agent-consumer/ai-pilot-scout/chatgpt-pose-generation-prompt.md +78 -0
  23. package/examples/agent-consumer/ai-pilot-scout/partial-handoff.json +73 -0
  24. package/examples/agent-consumer/artifact-intake/hero-motion-controls.json +15 -0
  25. package/examples/agent-consumer/artifact-intake/hero-motion-export.json +14 -0
  26. package/examples/agent-consumer/artifact-intake/hero-motion-provenance.json +20 -0
  27. package/examples/agent-consumer/artifact-intake/hero-motion-receipt.json +16 -0
  28. package/examples/agent-consumer/asset-consistency/assets/forest-back.png +0 -0
  29. package/examples/agent-consumer/asset-consistency/assets/forest-front.png +0 -0
  30. package/examples/agent-consumer/asset-consistency/assets/forest-mid.png +0 -0
  31. package/examples/agent-consumer/asset-consistency/assets/hero-atlas.png +0 -0
  32. package/examples/agent-consumer/asset-consistency/assets/hero-frame-00.png +0 -0
  33. package/examples/agent-consumer/asset-consistency/assets/hero-frame-01.png +0 -0
  34. package/examples/agent-consumer/asset-consistency/assets/hero-frame-02.png +0 -0
  35. package/examples/agent-consumer/asset-consistency/assets/hero-frame-03.png +0 -0
  36. package/examples/agent-consumer/asset-consistency/forest-layered-map.json +53 -0
  37. package/examples/agent-consumer/asset-consistency/hero-atlas-contract.json +24 -0
  38. package/examples/agent-consumer/asset-consistency/hero-identity.json +51 -0
  39. package/examples/agent-consumer/asset-consistency/hero-walk-action-set.json +27 -0
  40. package/examples/agent-consumer/asset-consistency/hero-walk-frame-geometry.json +63 -0
  41. package/examples/agent-consumer/rig-compatibility/hero-walk-fixture-rig.json +13 -0
  42. package/examples/agent-consumer/rive-package-gate/README.md +20 -0
  43. package/examples/agent-consumer/runtime-candidate/hero-walk-candidate.json +18 -0
  44. package/examples/agent-consumer/runtime-pilot/action-set.json +19 -0
  45. package/examples/agent-consumer/runtime-pilot/asset-identity.json +44 -0
  46. package/examples/agent-consumer/runtime-pilot/candidate.json +21 -0
  47. package/examples/agent-consumer/runtime-pilot/controls.json +35 -0
  48. package/examples/agent-consumer/runtime-pilot/export.json +17 -0
  49. package/examples/agent-consumer/runtime-pilot/provenance.json +38 -0
  50. package/examples/agent-consumer/runtime-pilot/receipt.json +30 -0
  51. package/package.json +56 -4
  52. package/references/browser-review-contract.md +7 -1
  53. package/references/intelligence-core.md +22 -1
  54. package/rig-adapter-registry.json +39 -0
  55. package/schemas/action-set.schema.json +42 -0
  56. package/schemas/artifact-adapter-registry.schema.json +16 -0
  57. package/schemas/asset-identity.schema.json +117 -0
  58. package/schemas/asset-provenance.schema.json +1 -1
  59. package/schemas/atlas-contract.schema.json +48 -0
  60. package/schemas/control-track.schema.json +18 -0
  61. package/schemas/export-manifest.schema.json +19 -0
  62. package/schemas/frame-geometry.schema.json +79 -0
  63. package/schemas/generation-receipt.schema.json +20 -0
  64. package/schemas/layered-map.schema.json +75 -0
  65. package/schemas/rig-adapter-registry.schema.json +14 -0
  66. package/schemas/rig-compatibility.schema.json +53 -0
  67. package/schemas/rive-package-manifest.schema.json +43 -0
  68. package/schemas/runtime-candidate.schema.json +48 -0
  69. package/schemas/scene-manifest.schema.json +18 -0
  70. package/scripts/artifact-intake.py +408 -0
  71. package/scripts/asset-consistency.py +517 -0
  72. package/scripts/asset-provenance.py +8 -3
  73. package/scripts/build-ai-pilot.py +504 -0
  74. package/scripts/isolate-alpha-background.py +147 -0
  75. package/scripts/quality-gate.py +88 -2
  76. package/scripts/report.py +85 -0
  77. package/scripts/resolve-task-bundle.py +84 -0
  78. package/scripts/review-hook.py +26 -4
  79. package/scripts/rig-compatibility.py +251 -0
  80. package/scripts/rive-package-gate.py +245 -0
  81. package/scripts/runtime-candidate.py +301 -0
  82. package/scripts/setup.mjs +54 -26
  83. package/src/output/runtime-pilot-framer/asset-provenance.json +38 -0
  84. package/src/output/runtime-pilot-framer/browser-review.json +20 -0
  85. package/src/output/runtime-pilot-framer/framer-motion/runtime-telemetry.json +103 -0
  86. package/src/output/runtime-pilot-framer/manifest.json +31 -0
  87. package/src/output/runtime-pilot-framer/motion-spec.json +25 -0
  88. package/src/output/runtime-pilot-framer/runtime-evidence.json +96 -0
  89. package/src/output/runtime-pilot-framer/runtime-telemetry.json +100 -0
  90. package/src/output/runtime-pilot-framer/scene.jsx +52 -0
  91. package/src/output/runtime-pilot-framer/snapshot/.render-meta.json +9 -0
  92. package/src/output/runtime-pilot-framer/snapshot/frame-00.png +0 -0
  93. package/src/output/runtime-pilot-framer/snapshot/frame-100.png +0 -0
  94. package/src/output/runtime-pilot-framer/snapshot/frame-50.png +0 -0
  95. package/tests/scripts/run_tests.py +107 -0
  96. package/tests/scripts/test_ai_pilot_builder.py +128 -0
  97. package/tests/scripts/test_alpha_isolation.py +60 -0
  98. package/tests/scripts/test_artifact_intake.py +146 -0
  99. package/tests/scripts/test_asset_consistency.py +199 -0
  100. package/tests/scripts/test_rig_compatibility.py +105 -0
  101. package/tests/scripts/test_rive_package_gate.py +101 -0
  102. package/tests/scripts/test_runtime_candidate.py +95 -0
@@ -0,0 +1,15 @@
1
+ {
2
+ "schema_version": "0.1",
3
+ "control_id": "hero-motion-pilot-controls",
4
+ "asset_id": "character/hero-male",
5
+ "created_at": "2026-08-15T00:00:00Z",
6
+ "references": [
7
+ {"id": "hero-frame-zero", "path": "examples/agent-consumer/asset-consistency/assets/hero-frame-00.png", "sha256": "75ce90653a01a23bcfab1aef83647d6364d3edbf6e4a44b84c635338c12b9248", "role": "identity"}
8
+ ],
9
+ "tracks": [
10
+ {"id": "hero-identity-lock", "kind": "identity", "binding": "required", "value_hash": "c24b2cb26f222d5b5febf77d8c79fca50e0dcf0d0b6961f52e58d8ee60e0d351"},
11
+ {"id": "hero-style-lock", "kind": "style", "binding": "required", "value_hash": "5a8430e6968ec460c5ed504d216e82ccdb923369b2ba5c284ed6328fae2a36cc"},
12
+ {"id": "hero-walk-poses", "kind": "pose", "binding": "required", "value_hash": "2eb4b7dcbf9ae8e41ae4178205616152fa40c2d5cc55617e6e0d32d832e0d9c9", "samples": 4}
13
+ ],
14
+ "output_profile": {"kind": "frame_sequence", "fps": 12, "expected_frame_count": 4, "loop": true}
15
+ }
@@ -0,0 +1,14 @@
1
+ {
2
+ "schema_version": "0.1",
3
+ "manifest_id": "hero-motion-pilot-export",
4
+ "asset_id": "character/hero-male",
5
+ "created_at": "2026-08-15T00:00:00Z",
6
+ "receipt_ref": "examples/agent-consumer/artifact-intake/hero-motion-receipt.json",
7
+ "control_track_ref": "examples/agent-consumer/artifact-intake/hero-motion-controls.json",
8
+ "outputs": [
9
+ {"path": "examples/agent-consumer/asset-consistency/assets/hero-frame-00.png", "role": "frame-00", "sha256": "75ce90653a01a23bcfab1aef83647d6364d3edbf6e4a44b84c635338c12b9248", "bytes": 97, "target": "preview"},
10
+ {"path": "examples/agent-consumer/asset-consistency/assets/hero-frame-01.png", "role": "frame-01", "sha256": "1eaf21df83ed49e490ceb7db1e1a14c58e5227bcb4f1fd79a70e8ad3ee7d38ad", "bytes": 97, "target": "runtime_candidate"},
11
+ {"path": "examples/agent-consumer/asset-consistency/assets/hero-frame-02.png", "role": "frame-02", "sha256": "de88659cb7a57ae9c10b6e3e84e04e54bdc07e9971d5c42160a315d41b38fbc3", "bytes": 97, "target": "runtime_candidate"},
12
+ {"path": "examples/agent-consumer/asset-consistency/assets/hero-frame-03.png", "role": "frame-03", "sha256": "161d906dc850cd3d3ee970b97406fc36bcdf1c34222ac94171a05672bf64d957", "bytes": 97, "target": "runtime_candidate"}
13
+ ]
14
+ }
@@ -0,0 +1,20 @@
1
+ {
2
+ "schema_version": "1.0",
3
+ "provenance_id": "hero-motion-pilot-provenance",
4
+ "task_id": "artifact-intake-example",
5
+ "scene": "hero-walk-fixture",
6
+ "created_at": "2026-08-15T00:00:00Z",
7
+ "asset": {"id": "character/hero-male", "path": "examples/agent-consumer/asset-consistency/assets/hero-frame-00.png", "type": "runtime-pilot", "framework": "body-rig"},
8
+ "authority": "ai_generated",
9
+ "readiness": "runtime_ready",
10
+ "generator": {"model": "fixture-model", "task_id": "artifact-intake-example", "source": "fixture.local-artifact-intake", "generated_at": "2026-08-15T00:00:00Z"},
11
+ "license": {"spdx": "UNLICENSED", "source": "MotionLoom fixture", "attribution": "not required"},
12
+ "files": [
13
+ {"path": "examples/agent-consumer/asset-consistency/assets/hero-frame-00.png", "role": "frame-00", "sha256": "75ce90653a01a23bcfab1aef83647d6364d3edbf6e4a44b84c635338c12b9248"},
14
+ {"path": "examples/agent-consumer/asset-consistency/assets/hero-frame-01.png", "role": "frame-01", "sha256": "1eaf21df83ed49e490ceb7db1e1a14c58e5227bcb4f1fd79a70e8ad3ee7d38ad"},
15
+ {"path": "examples/agent-consumer/asset-consistency/assets/hero-frame-02.png", "role": "frame-02", "sha256": "de88659cb7a57ae9c10b6e3e84e04e54bdc07e9971d5c42160a315d41b38fbc3"},
16
+ {"path": "examples/agent-consumer/asset-consistency/assets/hero-frame-03.png", "role": "frame-03", "sha256": "161d906dc850cd3d3ee970b97406fc36bcdf1c34222ac94171a05672bf64d957"}
17
+ ],
18
+ "provenance_chain": [{"step": "generate", "actor": "fixture:local-artifact-intake", "source": "MotionLoom regression fixture", "timestamp": "2026-08-15T00:00:00Z"}],
19
+ "runtime_evidence": {"status": "not_run", "runtime": "fixture-only", "tested_at": "2026-08-15T00:00:00Z"}
20
+ }
@@ -0,0 +1,16 @@
1
+ {
2
+ "schema_version": "0.1",
3
+ "receipt_id": "hero-motion-pilot-receipt",
4
+ "created_at": "2026-08-15T00:00:00Z",
5
+ "asset": {"id": "character/hero-male", "kind": "frame_sequence", "intended_use": "runtime_candidate"},
6
+ "authority": "ai_generated",
7
+ "provider": {"adapter_id": "fixture.local-artifact-intake", "kind": "fixture", "invocation_mode": "none", "task_id": "artifact-intake-example", "model": "fixture-model", "generated_at": "2026-08-15T00:00:00Z", "cost_class": "included", "prompt_hash": "65e32d0806160325a1cb3936963bbab4e2bdf1f65ee6d544fd484b5cb844cd9f"},
8
+ "control_track_ref": "examples/agent-consumer/artifact-intake/hero-motion-controls.json",
9
+ "provenance_ref": "examples/agent-consumer/artifact-intake/hero-motion-provenance.json",
10
+ "outputs": [
11
+ {"path": "examples/agent-consumer/asset-consistency/assets/hero-frame-00.png", "role": "frame-00", "sha256": "75ce90653a01a23bcfab1aef83647d6364d3edbf6e4a44b84c635338c12b9248", "bytes": 97},
12
+ {"path": "examples/agent-consumer/asset-consistency/assets/hero-frame-01.png", "role": "frame-01", "sha256": "1eaf21df83ed49e490ceb7db1e1a14c58e5227bcb4f1fd79a70e8ad3ee7d38ad", "bytes": 97},
13
+ {"path": "examples/agent-consumer/asset-consistency/assets/hero-frame-02.png", "role": "frame-02", "sha256": "de88659cb7a57ae9c10b6e3e84e04e54bdc07e9971d5c42160a315d41b38fbc3", "bytes": 97},
14
+ {"path": "examples/agent-consumer/asset-consistency/assets/hero-frame-03.png", "role": "frame-03", "sha256": "161d906dc850cd3d3ee970b97406fc36bcdf1c34222ac94171a05672bf64d957", "bytes": 97}
15
+ ]
16
+ }
@@ -0,0 +1,53 @@
1
+ {
2
+ "schema_version": "0.1",
3
+ "map_id": "forest-demo",
4
+ "coordinate_system": "world_y_up",
5
+ "world_bounds": {"x": 0, "y": 0, "width": 128, "height": 72},
6
+ "camera": {
7
+ "viewport_width": 32,
8
+ "viewport_height": 18,
9
+ "safe_bounds": {"x": 16, "y": 8, "width": 96, "height": 56},
10
+ "seam_tolerance": 0.08
11
+ },
12
+ "layers": [
13
+ {
14
+ "layer_id": "forest.back",
15
+ "role": "far",
16
+ "image": "assets/forest-back.png",
17
+ "z_index": 0,
18
+ "parallax": {"x": 0.2, "y": 0.2, "reference": "camera"},
19
+ "anchor": "top_left",
20
+ "tileable": {"x": true, "y": false},
21
+ "world_bounds": {"x": 0, "y": 0, "width": 128, "height": 72},
22
+ "camera_safe_bounds": {"x": 16, "y": 8, "width": 96, "height": 56},
23
+ "blend": "normal",
24
+ "opacity": 1
25
+ },
26
+ {
27
+ "layer_id": "forest.mid",
28
+ "role": "mid",
29
+ "image": "assets/forest-mid.png",
30
+ "z_index": 1,
31
+ "parallax": {"x": 0.5, "y": 0.5, "reference": "camera"},
32
+ "anchor": "center",
33
+ "tileable": {"x": false, "y": false},
34
+ "world_bounds": {"x": 0, "y": 0, "width": 128, "height": 72},
35
+ "camera_safe_bounds": {"x": 16, "y": 8, "width": 96, "height": 56},
36
+ "blend": "normal",
37
+ "opacity": 0.85
38
+ },
39
+ {
40
+ "layer_id": "forest.front",
41
+ "role": "foreground",
42
+ "image": "assets/forest-front.png",
43
+ "z_index": 2,
44
+ "parallax": {"x": 0.8, "y": 0.8, "reference": "camera"},
45
+ "anchor": "bottom_left",
46
+ "tileable": {"x": false, "y": false},
47
+ "world_bounds": {"x": 0, "y": 0, "width": 128, "height": 72},
48
+ "camera_safe_bounds": {"x": 16, "y": 8, "width": 96, "height": 56},
49
+ "blend": "normal",
50
+ "opacity": 1
51
+ }
52
+ ]
53
+ }
@@ -0,0 +1,24 @@
1
+ {
2
+ "schema_version": "0.1",
3
+ "image": "assets/hero-atlas.png",
4
+ "allow_rotation": false,
5
+ "padding_px": 1,
6
+ "extrude_px": 1,
7
+ "require_transparent_outside_regions": true,
8
+ "regions": [
9
+ {
10
+ "region_id": "hero.walk.00",
11
+ "frame_id": "walk.00",
12
+ "rect": {"x": 1, "y": 0, "width": 6, "height": 8},
13
+ "trim": false,
14
+ "pivot": {"x": 4, "y": 7}
15
+ },
16
+ {
17
+ "region_id": "hero.walk.01",
18
+ "frame_id": "walk.01",
19
+ "rect": {"x": 9, "y": 0, "width": 6, "height": 8},
20
+ "trim": false,
21
+ "pivot": {"x": 4, "y": 7}
22
+ }
23
+ ]
24
+ }
@@ -0,0 +1,51 @@
1
+ {
2
+ "schema_version": "0.1",
3
+ "asset_id": "character/hero-male",
4
+ "asset_kind": "character",
5
+ "identity": {
6
+ "subject_id": "hero-male",
7
+ "reference_hashes": [
8
+ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
9
+ ],
10
+ "camera": {
11
+ "projection": "orthographic",
12
+ "width": 256,
13
+ "height": 256,
14
+ "focal_length": 50
15
+ },
16
+ "coordinate_system": "screen_y_down",
17
+ "scale": 1,
18
+ "pivot": {
19
+ "x": 0.5,
20
+ "y": 0.875,
21
+ "space": "normalized_canvas"
22
+ },
23
+ "palette_lock": {
24
+ "colors": ["#2864D7", "#96B4D2", "#281E50"],
25
+ "delta_e_tolerance": 4
26
+ },
27
+ "style_profile": "clean-orthographic-pilot",
28
+ "lighting_profile": "flat-key-light"
29
+ },
30
+ "derivation": {
31
+ "origin": "ai_generated",
32
+ "generator": {
33
+ "model": "fixture-generator",
34
+ "task_id": "asset-consistency-fixture",
35
+ "prompt_hash": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
36
+ "seed": 20260815,
37
+ "tool_version": "fixture-1"
38
+ },
39
+ "source_refs": ["fixture://motionloom/asset-consistency/hero-male"],
40
+ "derivation_chain": [
41
+ {
42
+ "step": 0,
43
+ "operation": "deterministic-fixture-generation",
44
+ "input_hashes": ["aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
45
+ "output_hash": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"
46
+ }
47
+ ]
48
+ },
49
+ "provenance_ref": "../ai-generated-pilot-provenance.json",
50
+ "notes": "Synthetic contract fixture only; runtime-ready examples never imply production art or approval."
51
+ }
@@ -0,0 +1,27 @@
1
+ {
2
+ "schema_version": "0.1",
3
+ "asset_identity": "character/hero-male",
4
+ "actions": [
5
+ {
6
+ "action_id": "walk",
7
+ "fps": 12,
8
+ "frames": [
9
+ "assets/hero-frame-00.png",
10
+ "assets/hero-frame-01.png",
11
+ "assets/hero-frame-02.png",
12
+ "assets/hero-frame-03.png"
13
+ ],
14
+ "loop": true,
15
+ "events": ["footstep.left", "footstep.right"],
16
+ "required_sockets": ["hand.r", "foot.l", "foot.r"]
17
+ }
18
+ ],
19
+ "invariants": {
20
+ "canvas_width": 8,
21
+ "canvas_height": 8,
22
+ "pivot_tolerance_px": 0.01,
23
+ "footline_tolerance_px": 0.01,
24
+ "bbox_drift_tolerance_px": 0,
25
+ "min_alpha_pixels": 1
26
+ }
27
+ }
@@ -0,0 +1,63 @@
1
+ {
2
+ "schema_version": "0.1",
3
+ "asset_identity": "character/hero-male",
4
+ "canvas": {
5
+ "width": 8,
6
+ "height": 8,
7
+ "color_space": "srgb",
8
+ "alpha_mode": "straight"
9
+ },
10
+ "invariants": {
11
+ "pivot_tolerance_px": 0.01,
12
+ "footline_tolerance_px": 0.01,
13
+ "bbox_drift_tolerance_px": 0,
14
+ "min_alpha_pixels": 1,
15
+ "allow_external_opaque_pixels": false
16
+ },
17
+ "frames": [
18
+ {
19
+ "frame_id": "walk.00",
20
+ "image": "assets/hero-frame-00.png",
21
+ "rect": {"x": 0, "y": 0, "width": 8, "height": 8},
22
+ "alpha_bbox": {"x": 2, "y": 1, "width": 4, "height": 5},
23
+ "pivot": {"x": 4, "y": 7, "space": "pixels"},
24
+ "footline_px": 6,
25
+ "safe_rect": {"x": 1, "y": 0, "width": 6, "height": 7},
26
+ "bleed_margin_px": 1,
27
+ "sha256": "75ce90653a01a23bcfab1aef83647d6364d3edbf6e4a44b84c635338c12b9248"
28
+ },
29
+ {
30
+ "frame_id": "walk.01",
31
+ "image": "assets/hero-frame-01.png",
32
+ "rect": {"x": 0, "y": 0, "width": 8, "height": 8},
33
+ "alpha_bbox": {"x": 2, "y": 1, "width": 4, "height": 5},
34
+ "pivot": {"x": 4, "y": 7, "space": "pixels"},
35
+ "footline_px": 6,
36
+ "safe_rect": {"x": 1, "y": 0, "width": 6, "height": 7},
37
+ "bleed_margin_px": 1,
38
+ "sha256": "1eaf21df83ed49e490ceb7db1e1a14c58e5227bcb4f1fd79a70e8ad3ee7d38ad"
39
+ },
40
+ {
41
+ "frame_id": "walk.02",
42
+ "image": "assets/hero-frame-02.png",
43
+ "rect": {"x": 0, "y": 0, "width": 8, "height": 8},
44
+ "alpha_bbox": {"x": 2, "y": 1, "width": 4, "height": 5},
45
+ "pivot": {"x": 4, "y": 7, "space": "pixels"},
46
+ "footline_px": 6,
47
+ "safe_rect": {"x": 1, "y": 0, "width": 6, "height": 7},
48
+ "bleed_margin_px": 1,
49
+ "sha256": "de88659cb7a57ae9c10b6e3e84e04e54bdc07e9971d5c42160a315d41b38fbc3"
50
+ },
51
+ {
52
+ "frame_id": "walk.03",
53
+ "image": "assets/hero-frame-03.png",
54
+ "rect": {"x": 0, "y": 0, "width": 8, "height": 8},
55
+ "alpha_bbox": {"x": 2, "y": 1, "width": 4, "height": 5},
56
+ "pivot": {"x": 4, "y": 7, "space": "pixels"},
57
+ "footline_px": 6,
58
+ "safe_rect": {"x": 1, "y": 0, "width": 6, "height": 7},
59
+ "bleed_margin_px": 1,
60
+ "sha256": "161d906dc850cd3d3ee970b97406fc36bcdf1c34222ac94171a05672bf64d957"
61
+ }
62
+ ]
63
+ }
@@ -0,0 +1,13 @@
1
+ {
2
+ "schema_version": "0.1",
3
+ "rig_id": "hero-walk-fixture-rig",
4
+ "asset_id": "character/hero-male",
5
+ "authority": "ai_generated",
6
+ "source": {"kind": "fixture_contract", "path": "examples/agent-consumer/artifact-intake/hero-motion-controls.json", "sha256": "12248cf9644e1ed65dd75d4a513345b7a37fe1f5029386de38f8cc09a15bdf5b"},
7
+ "candidate": {"path": "examples/agent-consumer/runtime-candidate/hero-walk-candidate.json", "sha256": "c9abbfc77a6a4cc61e1554dae465110cd4eaf6652c74d85279c8c1ab970eb044"},
8
+ "bones": [{"id": "root"}, {"id": "torso", "parent": "root"}, {"id": "hand.r", "parent": "torso"}, {"id": "foot.l", "parent": "root"}, {"id": "foot.r", "parent": "root"}],
9
+ "sockets": [{"id": "hand.r", "bone": "hand.r"}, {"id": "foot.l", "bone": "foot.l"}, {"id": "foot.r", "bone": "foot.r"}],
10
+ "actions": [{"id": "walk", "events": ["footstep.left", "footstep.right"]}],
11
+ "requirements": {"sockets": ["hand.r", "foot.l", "foot.r"], "actions": ["walk"], "events": ["footstep.left", "footstep.right"]},
12
+ "runtime": {"adapter_id": "motionloom.sprite-frame-sequence", "target": "sprite", "review_required": true}
13
+ }
@@ -0,0 +1,20 @@
1
+ # Rive package gate — real package handoff
2
+
3
+ This directory intentionally contains **no fake production `.riv` package**. Put a concrete package here only after it exists, then create a manifest that binds its bytes, provenance and runtime proof.
4
+
5
+ ```text
6
+ hero.riv
7
+ hero-provenance.json
8
+ hero-runtime-evidence.json
9
+ hero-rive-package.json
10
+ ```
11
+
12
+ The manifest must use `runtime.adapter_id: "motionloom.rive-runtime"`, list declared state-machine/input/event controls, and preserve `review_required: true`. In strict mode, runtime evidence must bind `source_sha256` to the exact `hero.riv` bytes and report a passing ready Rive framework capture.
13
+
14
+ ```bash
15
+ npx --yes motionloom rive-gate validate \
16
+ --input examples/agent-consumer/rive-package-gate/hero-rive-package.json \
17
+ --root . --strict --json
18
+ ```
19
+
20
+ > A passing gate means only that the package is ready for runtime testing and human review. It never creates artist authority, production eligibility, production approval, a Git push, or a pull request.
@@ -0,0 +1,18 @@
1
+ {
2
+ "schema_version": "0.1",
3
+ "candidate_id": "hero-walk-fixture-candidate",
4
+ "asset_id": "character/hero-male",
5
+ "created_at": "2026-08-15T00:00:00Z",
6
+ "artifact_intake": {
7
+ "registry": "artifact-adapter-registry.json",
8
+ "receipt": "examples/agent-consumer/artifact-intake/hero-motion-receipt.json",
9
+ "controls": "examples/agent-consumer/artifact-intake/hero-motion-controls.json",
10
+ "export_manifest": "examples/agent-consumer/artifact-intake/hero-motion-export.json"
11
+ },
12
+ "consistency": {
13
+ "asset_identity": "examples/agent-consumer/asset-consistency/hero-identity.json",
14
+ "action_set": "examples/agent-consumer/asset-consistency/hero-walk-action-set.json",
15
+ "frame_geometry": "examples/agent-consumer/asset-consistency/hero-walk-frame-geometry.json"
16
+ },
17
+ "runtime": {"target": "sprite", "review_required": true}
18
+ }
@@ -0,0 +1,19 @@
1
+ {
2
+ "schema_version": "0.1",
3
+ "asset_identity": "runtime/framer-motion-pilot",
4
+ "actions": [
5
+ {
6
+ "action_id": "scrubbable-trajectory",
7
+ "frames": ["src/output/runtime-pilot-framer/scene.jsx"],
8
+ "fps": 60,
9
+ "loop": true,
10
+ "events": ["checkpoint-00", "checkpoint-50", "checkpoint-100"],
11
+ "required_sockets": []
12
+ }
13
+ ],
14
+ "invariants": {
15
+ "checkpoint_percentages": [0, 50, 100],
16
+ "progress_domain": [0, 1],
17
+ "runtime_target": "framer-motion"
18
+ }
19
+ }
@@ -0,0 +1,44 @@
1
+ {
2
+ "schema_version": "0.1",
3
+ "asset_id": "runtime/framer-motion-pilot",
4
+ "asset_kind": "ui",
5
+ "identity": {
6
+ "subject_id": "framer-motion-runtime-pilot",
7
+ "reference_hashes": [
8
+ "f4c0e56de842cae6b234566b556e4f07154f8109dde382a474218a9de8b45a8b"
9
+ ],
10
+ "camera": {
11
+ "projection": "orthographic",
12
+ "width": 512,
13
+ "height": 512,
14
+ "focal_length": 50
15
+ },
16
+ "coordinate_system": "screen_y_down",
17
+ "scale": 1,
18
+ "pivot": {
19
+ "x": 0.5,
20
+ "y": 0.5,
21
+ "space": "normalized_canvas"
22
+ },
23
+ "palette_lock": {
24
+ "colors": ["#2563eb", "#f59e0b", "#0f172a"],
25
+ "delta_e_tolerance": 0
26
+ },
27
+ "style_profile": "code-authored-runtime-pilot",
28
+ "lighting_profile": "not-applicable"
29
+ },
30
+ "derivation": {
31
+ "origin": "code_authored",
32
+ "source_refs": ["src/output/runtime-pilot-framer/scene.jsx"],
33
+ "derivation_chain": [
34
+ {
35
+ "step": 0,
36
+ "operation": "repository-code-authoring",
37
+ "input_hashes": [],
38
+ "output_hash": "f4c0e56de842cae6b234566b556e4f07154f8109dde382a474218a9de8b45a8b"
39
+ }
40
+ ]
41
+ },
42
+ "provenance_ref": "provenance.json",
43
+ "notes": "Code-authored Framer Motion pilot. Runtime evidence can establish runtime verification only; human review remains required."
44
+ }
@@ -0,0 +1,21 @@
1
+ {
2
+ "schema_version": "0.1",
3
+ "candidate_id": "runtime-pilot-framer-001",
4
+ "asset_id": "runtime/framer-motion-pilot",
5
+ "created_at": "2026-08-15T00:00:00Z",
6
+ "artifact_intake": {
7
+ "registry": "artifact-adapter-registry.json",
8
+ "receipt": "examples/agent-consumer/runtime-pilot/receipt.json",
9
+ "controls": "examples/agent-consumer/runtime-pilot/controls.json",
10
+ "export_manifest": "examples/agent-consumer/runtime-pilot/export.json"
11
+ },
12
+ "consistency": {
13
+ "asset_identity": "examples/agent-consumer/runtime-pilot/asset-identity.json",
14
+ "action_set": "examples/agent-consumer/runtime-pilot/action-set.json"
15
+ },
16
+ "runtime": {
17
+ "target": "framer-motion",
18
+ "runtime_evidence_ref": "src/output/runtime-pilot-framer/runtime-evidence.json",
19
+ "review_required": true
20
+ }
21
+ }
@@ -0,0 +1,35 @@
1
+ {
2
+ "schema_version": "0.1",
3
+ "control_id": "runtime-pilot-framer-controls",
4
+ "asset_id": "runtime/framer-motion-pilot",
5
+ "created_at": "2026-08-15T00:00:00Z",
6
+ "references": [
7
+ {
8
+ "id": "framer-runtime-source",
9
+ "path": "src/output/runtime-pilot-framer/scene.jsx",
10
+ "sha256": "f4c0e56de842cae6b234566b556e4f07154f8109dde382a474218a9de8b45a8b",
11
+ "role": "motion"
12
+ }
13
+ ],
14
+ "tracks": [
15
+ {
16
+ "id": "source-binding",
17
+ "kind": "source",
18
+ "binding": "required",
19
+ "value_hash": "f4c0e56de842cae6b234566b556e4f07154f8109dde382a474218a9de8b45a8b"
20
+ },
21
+ {
22
+ "id": "scrub-progress",
23
+ "kind": "motion",
24
+ "binding": "required",
25
+ "value_hash": "f4c0e56de842cae6b234566b556e4f07154f8109dde382a474218a9de8b45a8b",
26
+ "samples": 3
27
+ }
28
+ ],
29
+ "output_profile": {
30
+ "kind": "runtime_scene",
31
+ "fps": 60,
32
+ "expected_frame_count": 3,
33
+ "loop": true
34
+ }
35
+ }
@@ -0,0 +1,17 @@
1
+ {
2
+ "schema_version": "0.1",
3
+ "manifest_id": "runtime-pilot-framer-export",
4
+ "asset_id": "runtime/framer-motion-pilot",
5
+ "created_at": "2026-08-15T00:00:00Z",
6
+ "receipt_ref": "examples/agent-consumer/runtime-pilot/receipt.json",
7
+ "control_track_ref": "examples/agent-consumer/runtime-pilot/controls.json",
8
+ "outputs": [
9
+ {
10
+ "path": "src/output/runtime-pilot-framer/scene.jsx",
11
+ "role": "runtime-source",
12
+ "sha256": "f4c0e56de842cae6b234566b556e4f07154f8109dde382a474218a9de8b45a8b",
13
+ "bytes": 1769,
14
+ "target": "runtime_candidate"
15
+ }
16
+ ]
17
+ }
@@ -0,0 +1,38 @@
1
+ {
2
+ "schema_version": "1.0",
3
+ "provenance_id": "runtime-pilot-framer-provenance",
4
+ "task_id": "runtime-pilot-001",
5
+ "scene": "runtime-pilot-framer",
6
+ "created_at": "2026-08-15T00:00:00Z",
7
+ "asset": {
8
+ "id": "runtime/framer-motion-pilot",
9
+ "path": "src/output/runtime-pilot-framer/scene.jsx",
10
+ "type": "runtime_scene",
11
+ "framework": "framer-motion",
12
+ "version": "13.1.0"
13
+ },
14
+ "authority": "code_authored",
15
+ "readiness": "review_required",
16
+ "license": {
17
+ "spdx": "MIT",
18
+ "source": "MotionLoom repository source",
19
+ "attribution": "MotionLoom contributors"
20
+ },
21
+ "files": [
22
+ {
23
+ "path": "src/output/runtime-pilot-framer/scene.jsx",
24
+ "role": "runtime-source",
25
+ "sha256": "f4c0e56de842cae6b234566b556e4f07154f8109dde382a474218a9de8b45a8b",
26
+ "bytes": 1769
27
+ }
28
+ ],
29
+ "provenance_chain": [
30
+ {
31
+ "step": "code-authoring",
32
+ "actor": "MotionLoom runtime-pilot author",
33
+ "source": "src/output/runtime-pilot-framer/scene.jsx",
34
+ "timestamp": "2026-08-15T00:00:00Z",
35
+ "sha256": "f4c0e56de842cae6b234566b556e4f07154f8109dde382a474218a9de8b45a8b"
36
+ }
37
+ ]
38
+ }
@@ -0,0 +1,30 @@
1
+ {
2
+ "schema_version": "0.1",
3
+ "receipt_id": "runtime-pilot-framer-receipt",
4
+ "created_at": "2026-08-15T00:00:00Z",
5
+ "asset": {
6
+ "id": "runtime/framer-motion-pilot",
7
+ "kind": "runtime_scene",
8
+ "intended_use": "runtime_candidate"
9
+ },
10
+ "authority": "code_authored",
11
+ "provider": {
12
+ "adapter_id": "fixture.local-artifact-intake",
13
+ "kind": "fixture",
14
+ "invocation_mode": "none",
15
+ "task_id": "runtime-pilot-001",
16
+ "model": "code-authored-repository-source",
17
+ "generated_at": "2026-08-15T00:00:00Z",
18
+ "cost_class": "included"
19
+ },
20
+ "control_track_ref": "examples/agent-consumer/runtime-pilot/controls.json",
21
+ "provenance_ref": "examples/agent-consumer/runtime-pilot/provenance.json",
22
+ "outputs": [
23
+ {
24
+ "path": "src/output/runtime-pilot-framer/scene.jsx",
25
+ "role": "runtime-source",
26
+ "sha256": "f4c0e56de842cae6b234566b556e4f07154f8109dde382a474218a9de8b45a8b",
27
+ "bytes": 1769
28
+ }
29
+ ]
30
+ }