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.
- package/CHANGELOG.md +24 -1
- package/README.md +78 -11
- package/ROADMAP.md +8 -5
- package/SKILL.md +24 -5
- package/agent-card.json +31 -5
- package/agent-surfaces.json +1 -1
- package/artifact-adapter-registry.json +53 -0
- package/bin/motionloom.mjs +29 -5
- package/docs/CHECKLIST.md +16 -0
- package/docs/STATUS.md +2 -2
- package/docs/audits/data/deep-stress-latest.json +65 -65
- package/docs/releases/2.4.0.md +31 -0
- package/docs/releases/npm-publish-from-workstation.md +19 -8
- package/docs/research/agent-skill-ecosystem-notes.md +47 -0
- package/docs/research/ai-animation-tools-2026-notes.md +81 -0
- package/docs/research/ai-animation-tools-2026-report.md +168 -0
- package/docs/research/ai-pilot-ingest-notes.md +29 -0
- package/examples/agent-consumer/ai-pilot-scout/CHATGPT-HANDOFF.md +70 -0
- package/examples/agent-consumer/ai-pilot-scout/CODEX-HANDOFF.md +80 -0
- package/examples/agent-consumer/ai-pilot-scout/README.md +39 -0
- package/examples/agent-consumer/ai-pilot-scout/chatgpt-geometry-correction-prompt.md +55 -0
- package/examples/agent-consumer/ai-pilot-scout/chatgpt-pose-generation-prompt.md +78 -0
- package/examples/agent-consumer/ai-pilot-scout/partial-handoff.json +73 -0
- package/examples/agent-consumer/artifact-intake/hero-motion-controls.json +15 -0
- package/examples/agent-consumer/artifact-intake/hero-motion-export.json +14 -0
- package/examples/agent-consumer/artifact-intake/hero-motion-provenance.json +20 -0
- package/examples/agent-consumer/artifact-intake/hero-motion-receipt.json +16 -0
- package/examples/agent-consumer/asset-consistency/assets/forest-back.png +0 -0
- package/examples/agent-consumer/asset-consistency/assets/forest-front.png +0 -0
- package/examples/agent-consumer/asset-consistency/assets/forest-mid.png +0 -0
- package/examples/agent-consumer/asset-consistency/assets/hero-atlas.png +0 -0
- package/examples/agent-consumer/asset-consistency/assets/hero-frame-00.png +0 -0
- package/examples/agent-consumer/asset-consistency/assets/hero-frame-01.png +0 -0
- package/examples/agent-consumer/asset-consistency/assets/hero-frame-02.png +0 -0
- package/examples/agent-consumer/asset-consistency/assets/hero-frame-03.png +0 -0
- package/examples/agent-consumer/asset-consistency/forest-layered-map.json +53 -0
- package/examples/agent-consumer/asset-consistency/hero-atlas-contract.json +24 -0
- package/examples/agent-consumer/asset-consistency/hero-identity.json +51 -0
- package/examples/agent-consumer/asset-consistency/hero-walk-action-set.json +27 -0
- package/examples/agent-consumer/asset-consistency/hero-walk-frame-geometry.json +63 -0
- package/examples/agent-consumer/rig-compatibility/hero-walk-fixture-rig.json +13 -0
- package/examples/agent-consumer/rive-package-gate/README.md +20 -0
- package/examples/agent-consumer/runtime-candidate/hero-walk-candidate.json +18 -0
- package/examples/agent-consumer/runtime-pilot/action-set.json +19 -0
- package/examples/agent-consumer/runtime-pilot/asset-identity.json +44 -0
- package/examples/agent-consumer/runtime-pilot/candidate.json +21 -0
- package/examples/agent-consumer/runtime-pilot/controls.json +35 -0
- package/examples/agent-consumer/runtime-pilot/export.json +17 -0
- package/examples/agent-consumer/runtime-pilot/provenance.json +38 -0
- package/examples/agent-consumer/runtime-pilot/receipt.json +30 -0
- package/package.json +56 -4
- package/references/browser-review-contract.md +7 -1
- package/references/intelligence-core.md +22 -1
- package/rig-adapter-registry.json +39 -0
- package/schemas/action-set.schema.json +42 -0
- package/schemas/artifact-adapter-registry.schema.json +16 -0
- package/schemas/asset-identity.schema.json +117 -0
- package/schemas/asset-provenance.schema.json +1 -1
- package/schemas/atlas-contract.schema.json +48 -0
- package/schemas/control-track.schema.json +18 -0
- package/schemas/export-manifest.schema.json +19 -0
- package/schemas/frame-geometry.schema.json +79 -0
- package/schemas/generation-receipt.schema.json +20 -0
- package/schemas/layered-map.schema.json +75 -0
- package/schemas/rig-adapter-registry.schema.json +14 -0
- package/schemas/rig-compatibility.schema.json +53 -0
- package/schemas/rive-package-manifest.schema.json +43 -0
- package/schemas/runtime-candidate.schema.json +48 -0
- package/schemas/scene-manifest.schema.json +18 -0
- package/scripts/artifact-intake.py +408 -0
- package/scripts/asset-consistency.py +517 -0
- package/scripts/asset-provenance.py +8 -3
- package/scripts/build-ai-pilot.py +504 -0
- package/scripts/isolate-alpha-background.py +147 -0
- package/scripts/quality-gate.py +88 -2
- package/scripts/report.py +85 -0
- package/scripts/resolve-task-bundle.py +84 -0
- package/scripts/review-hook.py +26 -4
- package/scripts/rig-compatibility.py +251 -0
- package/scripts/rive-package-gate.py +245 -0
- package/scripts/runtime-candidate.py +301 -0
- package/scripts/setup.mjs +54 -26
- package/src/output/runtime-pilot-framer/asset-provenance.json +38 -0
- package/src/output/runtime-pilot-framer/browser-review.json +20 -0
- package/src/output/runtime-pilot-framer/framer-motion/runtime-telemetry.json +103 -0
- package/src/output/runtime-pilot-framer/manifest.json +31 -0
- package/src/output/runtime-pilot-framer/motion-spec.json +25 -0
- package/src/output/runtime-pilot-framer/runtime-evidence.json +96 -0
- package/src/output/runtime-pilot-framer/runtime-telemetry.json +100 -0
- package/src/output/runtime-pilot-framer/scene.jsx +52 -0
- package/src/output/runtime-pilot-framer/snapshot/.render-meta.json +9 -0
- package/src/output/runtime-pilot-framer/snapshot/frame-00.png +0 -0
- package/src/output/runtime-pilot-framer/snapshot/frame-100.png +0 -0
- package/src/output/runtime-pilot-framer/snapshot/frame-50.png +0 -0
- package/tests/scripts/run_tests.py +107 -0
- package/tests/scripts/test_ai_pilot_builder.py +128 -0
- package/tests/scripts/test_alpha_isolation.py +60 -0
- package/tests/scripts/test_artifact_intake.py +146 -0
- package/tests/scripts/test_asset_consistency.py +199 -0
- package/tests/scripts/test_rig_compatibility.py +105 -0
- package/tests/scripts/test_rive_package_gate.py +101 -0
- 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
|
+
}
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -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
|
+
}
|