motionloom 2.3.0 → 2.5.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 (113) hide show
  1. package/CHANGELOG.md +45 -1
  2. package/README.md +97 -11
  3. package/ROADMAP.md +8 -5
  4. package/SKILL.md +24 -5
  5. package/agent-card.json +34 -5
  6. package/agent-surfaces.json +1 -1
  7. package/artifact-adapter-registry.json +53 -0
  8. package/bin/motionloom.mjs +43 -6
  9. package/capability-registry.json +308 -0
  10. package/docs/CHECKLIST.md +16 -0
  11. package/docs/STATUS.md +2 -2
  12. package/docs/apple-distribution.md +24 -0
  13. package/docs/architecture/apple/cloudkit.md +18 -0
  14. package/docs/architecture/apple/contracts.md +9 -0
  15. package/docs/architecture/apple/implementation-status-2026-08-16.md +55 -0
  16. package/docs/architecture/apple/studio.md +35 -0
  17. package/docs/audits/data/deep-stress-latest.json +65 -65
  18. package/docs/releases/2.4.0.md +31 -0
  19. package/docs/releases/2.5.0.md +31 -0
  20. package/docs/releases/npm-publish-from-workstation.md +19 -8
  21. package/docs/research/agent-skill-ecosystem-notes.md +47 -0
  22. package/docs/research/ai-animation-tools-2026-notes.md +81 -0
  23. package/docs/research/ai-animation-tools-2026-report.md +168 -0
  24. package/docs/research/ai-pilot-ingest-notes.md +29 -0
  25. package/docs/research/ai-repository-benchmark-2026-08-16.md +75 -0
  26. package/examples/agent-consumer/ai-pilot-scout/CHATGPT-HANDOFF.md +70 -0
  27. package/examples/agent-consumer/ai-pilot-scout/CODEX-HANDOFF.md +80 -0
  28. package/examples/agent-consumer/ai-pilot-scout/README.md +39 -0
  29. package/examples/agent-consumer/ai-pilot-scout/chatgpt-geometry-correction-prompt.md +55 -0
  30. package/examples/agent-consumer/ai-pilot-scout/chatgpt-pose-generation-prompt.md +78 -0
  31. package/examples/agent-consumer/ai-pilot-scout/partial-handoff.json +73 -0
  32. package/examples/agent-consumer/artifact-intake/hero-motion-controls.json +15 -0
  33. package/examples/agent-consumer/artifact-intake/hero-motion-export.json +14 -0
  34. package/examples/agent-consumer/artifact-intake/hero-motion-provenance.json +20 -0
  35. package/examples/agent-consumer/artifact-intake/hero-motion-receipt.json +16 -0
  36. package/examples/agent-consumer/asset-consistency/assets/forest-back.png +0 -0
  37. package/examples/agent-consumer/asset-consistency/assets/forest-front.png +0 -0
  38. package/examples/agent-consumer/asset-consistency/assets/forest-mid.png +0 -0
  39. package/examples/agent-consumer/asset-consistency/assets/hero-atlas.png +0 -0
  40. package/examples/agent-consumer/asset-consistency/assets/hero-frame-00.png +0 -0
  41. package/examples/agent-consumer/asset-consistency/assets/hero-frame-01.png +0 -0
  42. package/examples/agent-consumer/asset-consistency/assets/hero-frame-02.png +0 -0
  43. package/examples/agent-consumer/asset-consistency/assets/hero-frame-03.png +0 -0
  44. package/examples/agent-consumer/asset-consistency/forest-layered-map.json +53 -0
  45. package/examples/agent-consumer/asset-consistency/hero-atlas-contract.json +24 -0
  46. package/examples/agent-consumer/asset-consistency/hero-identity.json +51 -0
  47. package/examples/agent-consumer/asset-consistency/hero-walk-action-set.json +27 -0
  48. package/examples/agent-consumer/asset-consistency/hero-walk-frame-geometry.json +63 -0
  49. package/examples/agent-consumer/rig-compatibility/hero-walk-fixture-rig.json +13 -0
  50. package/examples/agent-consumer/rive-package-gate/README.md +20 -0
  51. package/examples/agent-consumer/runtime-candidate/hero-walk-candidate.json +18 -0
  52. package/examples/agent-consumer/runtime-pilot/action-set.json +19 -0
  53. package/examples/agent-consumer/runtime-pilot/asset-identity.json +44 -0
  54. package/examples/agent-consumer/runtime-pilot/candidate.json +21 -0
  55. package/examples/agent-consumer/runtime-pilot/controls.json +35 -0
  56. package/examples/agent-consumer/runtime-pilot/export.json +17 -0
  57. package/examples/agent-consumer/runtime-pilot/provenance.json +38 -0
  58. package/examples/agent-consumer/runtime-pilot/receipt.json +30 -0
  59. package/package.json +58 -4
  60. package/references/browser-review-contract.md +7 -1
  61. package/references/intelligence-core.md +22 -1
  62. package/rig-adapter-registry.json +39 -0
  63. package/schemas/action-set.schema.json +42 -0
  64. package/schemas/artifact-adapter-registry.schema.json +16 -0
  65. package/schemas/asset-identity.schema.json +117 -0
  66. package/schemas/asset-provenance.schema.json +1 -1
  67. package/schemas/atlas-contract.schema.json +48 -0
  68. package/schemas/control-track.schema.json +18 -0
  69. package/schemas/export-manifest.schema.json +19 -0
  70. package/schemas/frame-geometry.schema.json +79 -0
  71. package/schemas/generation-receipt.schema.json +20 -0
  72. package/schemas/layered-map.schema.json +75 -0
  73. package/schemas/rig-adapter-registry.schema.json +14 -0
  74. package/schemas/rig-compatibility.schema.json +53 -0
  75. package/schemas/rive-package-manifest.schema.json +43 -0
  76. package/schemas/runtime-candidate.schema.json +48 -0
  77. package/schemas/scene-manifest.schema.json +18 -0
  78. package/scripts/artifact-intake.py +408 -0
  79. package/scripts/asset-consistency.py +517 -0
  80. package/scripts/asset-provenance.py +8 -3
  81. package/scripts/attestation.py +8 -0
  82. package/scripts/build-ai-pilot.py +504 -0
  83. package/scripts/evidence-verifier.py +18 -9
  84. package/scripts/intelligence.py +85 -18
  85. package/scripts/isolate-alpha-background.py +147 -0
  86. package/scripts/quality-gate.py +88 -2
  87. package/scripts/report.py +85 -0
  88. package/scripts/resolve-task-bundle.py +84 -0
  89. package/scripts/review-hook.py +26 -4
  90. package/scripts/rig-compatibility.py +251 -0
  91. package/scripts/rive-package-gate.py +245 -0
  92. package/scripts/runtime-candidate.py +301 -0
  93. package/scripts/setup.mjs +54 -26
  94. package/src/output/runtime-pilot-framer/asset-provenance.json +38 -0
  95. package/src/output/runtime-pilot-framer/browser-review.json +20 -0
  96. package/src/output/runtime-pilot-framer/framer-motion/runtime-telemetry.json +103 -0
  97. package/src/output/runtime-pilot-framer/manifest.json +31 -0
  98. package/src/output/runtime-pilot-framer/motion-spec.json +25 -0
  99. package/src/output/runtime-pilot-framer/runtime-evidence.json +96 -0
  100. package/src/output/runtime-pilot-framer/runtime-telemetry.json +100 -0
  101. package/src/output/runtime-pilot-framer/scene.jsx +52 -0
  102. package/src/output/runtime-pilot-framer/snapshot/.render-meta.json +9 -0
  103. package/src/output/runtime-pilot-framer/snapshot/frame-00.png +0 -0
  104. package/src/output/runtime-pilot-framer/snapshot/frame-100.png +0 -0
  105. package/src/output/runtime-pilot-framer/snapshot/frame-50.png +0 -0
  106. package/tests/scripts/run_tests.py +151 -0
  107. package/tests/scripts/test_ai_pilot_builder.py +128 -0
  108. package/tests/scripts/test_alpha_isolation.py +60 -0
  109. package/tests/scripts/test_artifact_intake.py +146 -0
  110. package/tests/scripts/test_asset_consistency.py +199 -0
  111. package/tests/scripts/test_rig_compatibility.py +105 -0
  112. package/tests/scripts/test_rive_package_gate.py +101 -0
  113. package/tests/scripts/test_runtime_candidate.py +95 -0
@@ -0,0 +1,19 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://github.com/lenhonbp/MotionLoom/blob/main/schemas/export-manifest.schema.json",
4
+ "title": "MotionLoom artifact export manifest",
5
+ "description": "Binds an output set to its receipt and control track for downstream runtime and Dev Lab evidence. It does not certify production readiness.",
6
+ "type": "object",
7
+ "additionalProperties": false,
8
+ "required": ["schema_version", "manifest_id", "asset_id", "receipt_ref", "control_track_ref", "outputs", "created_at"],
9
+ "properties": {
10
+ "schema_version": {"const": "0.1"},
11
+ "manifest_id": {"type": "string", "pattern": "^[A-Za-z0-9][A-Za-z0-9._-]{2,127}$"},
12
+ "asset_id": {"type": "string", "minLength": 1},
13
+ "created_at": {"type": "string", "format": "date-time"},
14
+ "receipt_ref": {"type": "string", "pattern": "^(?!/)(?!.*(?:^|/)\\.\\.(?:/|$)).+"},
15
+ "control_track_ref": {"type": "string", "pattern": "^(?!/)(?!.*(?:^|/)\\.\\.(?:/|$)).+"},
16
+ "runtime_evidence_ref": {"type": "string", "pattern": "^(?!/)(?!.*(?:^|/)\\.\\.(?:/|$)).+"},
17
+ "outputs": {"type": "array", "minItems": 1, "items": {"type": "object", "additionalProperties": false, "required": ["path", "role", "sha256", "bytes", "target"], "properties": {"path": {"type": "string", "pattern": "^(?!/)(?!.*(?:^|/)\\.\\.(?:/|$)).+"}, "role": {"type": "string", "minLength": 1}, "sha256": {"type": "string", "pattern": "^[a-f0-9]{64}$"}, "bytes": {"type": "integer", "minimum": 0}, "target": {"type": "string", "enum": ["runtime_candidate", "preview", "archive"]}}}}
18
+ }
19
+ }
@@ -0,0 +1,79 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://motionloom.dev/schemas/frame-geometry.schema.json",
4
+ "title": "MotionLoom Frame Geometry Contract",
5
+ "description": "Measured geometry for action frames; measurements are validated against pixels, not trusted from AI self-reporting.",
6
+ "type": "object",
7
+ "additionalProperties": false,
8
+ "required": ["schema_version", "asset_identity", "canvas", "invariants", "frames"],
9
+ "properties": {
10
+ "schema_version": { "const": "0.1" },
11
+ "asset_identity": { "type": "string", "minLength": 1 },
12
+ "canvas": {
13
+ "type": "object",
14
+ "additionalProperties": false,
15
+ "required": ["width", "height", "color_space", "alpha_mode"],
16
+ "properties": {
17
+ "width": { "type": "integer", "minimum": 1 },
18
+ "height": { "type": "integer", "minimum": 1 },
19
+ "color_space": { "enum": ["srgb", "linear-srgb"] },
20
+ "alpha_mode": { "enum": ["straight", "premultiplied"] }
21
+ }
22
+ },
23
+ "invariants": {
24
+ "type": "object",
25
+ "additionalProperties": false,
26
+ "required": ["pivot_tolerance_px", "footline_tolerance_px", "bbox_drift_tolerance_px", "min_alpha_pixels"],
27
+ "properties": {
28
+ "pivot_tolerance_px": { "type": "number", "minimum": 0 },
29
+ "footline_tolerance_px": { "type": "number", "minimum": 0 },
30
+ "bbox_drift_tolerance_px": { "type": "number", "minimum": 0 },
31
+ "min_alpha_pixels": { "type": "integer", "minimum": 1 },
32
+ "allow_external_opaque_pixels": { "type": "boolean" }
33
+ }
34
+ },
35
+ "frames": {
36
+ "type": "array",
37
+ "minItems": 1,
38
+ "items": {
39
+ "type": "object",
40
+ "additionalProperties": false,
41
+ "required": ["frame_id", "image", "rect", "alpha_bbox", "pivot", "footline_px", "safe_rect", "sha256"],
42
+ "properties": {
43
+ "frame_id": { "type": "string", "pattern": "^[a-z0-9][a-z0-9._-]{1,63}$" },
44
+ "image": { "type": "string", "minLength": 1 },
45
+ "rect": { "$ref": "#/$defs/rect" },
46
+ "alpha_bbox": { "$ref": "#/$defs/rect" },
47
+ "pivot": { "$ref": "#/$defs/point" },
48
+ "footline_px": { "type": "number" },
49
+ "safe_rect": { "$ref": "#/$defs/rect" },
50
+ "bleed_margin_px": { "type": "integer", "minimum": 0 },
51
+ "sha256": { "type": "string", "pattern": "^[a-f0-9]{64}$" }
52
+ }
53
+ }
54
+ }
55
+ },
56
+ "$defs": {
57
+ "rect": {
58
+ "type": "object",
59
+ "additionalProperties": false,
60
+ "required": ["x", "y", "width", "height"],
61
+ "properties": {
62
+ "x": { "type": "integer", "minimum": 0 },
63
+ "y": { "type": "integer", "minimum": 0 },
64
+ "width": { "type": "integer", "minimum": 1 },
65
+ "height": { "type": "integer", "minimum": 1 }
66
+ }
67
+ },
68
+ "point": {
69
+ "type": "object",
70
+ "additionalProperties": false,
71
+ "required": ["x", "y", "space"],
72
+ "properties": {
73
+ "x": { "type": "number" },
74
+ "y": { "type": "number" },
75
+ "space": { "enum": ["pixels", "normalized"] }
76
+ }
77
+ }
78
+ }
79
+ }
@@ -0,0 +1,20 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://github.com/lenhonbp/MotionLoom/blob/main/schemas/generation-receipt.schema.json",
4
+ "title": "MotionLoom generation receipt",
5
+ "description": "Provider-neutral, hash-bound receipt for generated or imported visual artifacts. A receipt is evidence, never human approval.",
6
+ "type": "object",
7
+ "additionalProperties": false,
8
+ "required": ["schema_version", "receipt_id", "asset", "authority", "provider", "control_track_ref", "provenance_ref", "outputs", "created_at"],
9
+ "properties": {
10
+ "schema_version": {"const": "0.1"},
11
+ "receipt_id": {"type": "string", "pattern": "^[A-Za-z0-9][A-Za-z0-9._-]{2,127}$"},
12
+ "created_at": {"type": "string", "format": "date-time"},
13
+ "asset": {"type": "object", "additionalProperties": false, "required": ["id", "kind", "intended_use"], "properties": {"id": {"type": "string", "minLength": 1}, "kind": {"type": "string", "enum": ["image", "frame_sequence", "sprite_atlas", "layered_map", "video", "rigged_2d", "rigged_3d", "runtime_scene"]}, "intended_use": {"type": "string", "enum": ["pilot", "runtime_candidate", "reference_only"]}}},
14
+ "authority": {"type": "string", "enum": ["ai_generated", "ai_assisted", "ai_assisted_human_reviewed", "artist_authored", "code_authored", "unknown"]},
15
+ "provider": {"type": "object", "additionalProperties": false, "required": ["adapter_id", "kind", "invocation_mode", "task_id", "model", "generated_at", "cost_class"], "properties": {"adapter_id": {"type": "string", "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{2,127}$"}, "kind": {"type": "string", "enum": ["fixture", "internal_skill", "external_provider", "manual_import"]}, "invocation_mode": {"type": "string", "enum": ["none", "manual", "agent-mediated", "api"]}, "task_id": {"type": "string", "minLength": 1}, "model": {"type": "string", "minLength": 1}, "generated_at": {"type": "string", "format": "date-time"}, "cost_class": {"type": "string", "enum": ["included", "metered", "external", "unknown"]}, "prompt_hash": {"type": "string", "pattern": "^[a-f0-9]{64}$"}}},
16
+ "control_track_ref": {"type": "string", "pattern": "^(?!/)(?!.*(?:^|/)\\.\\.(?:/|$)).+"},
17
+ "provenance_ref": {"type": "string", "pattern": "^(?!/)(?!.*(?:^|/)\\.\\.(?:/|$)).+"},
18
+ "outputs": {"type": "array", "minItems": 1, "items": {"type": "object", "additionalProperties": false, "required": ["path", "role", "sha256", "bytes"], "properties": {"path": {"type": "string", "pattern": "^(?!/)(?!.*(?:^|/)\\.\\.(?:/|$)).+"}, "role": {"type": "string", "minLength": 1}, "sha256": {"type": "string", "pattern": "^[a-f0-9]{64}$"}, "bytes": {"type": "integer", "minimum": 0}}}}
19
+ }
20
+ }
@@ -0,0 +1,75 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://motionloom.dev/schemas/layered-map.schema.json",
4
+ "title": "MotionLoom Layered Map Contract",
5
+ "description": "Multi-layer background contract for deterministic camera, parallax and seam validation.",
6
+ "type": "object",
7
+ "additionalProperties": false,
8
+ "required": ["schema_version", "map_id", "coordinate_system", "world_bounds", "camera", "layers"],
9
+ "properties": {
10
+ "schema_version": { "const": "0.1" },
11
+ "map_id": { "type": "string", "minLength": 1 },
12
+ "coordinate_system": { "enum": ["world_y_up", "screen_y_down"] },
13
+ "world_bounds": { "$ref": "#/$defs/rect" },
14
+ "camera": {
15
+ "type": "object",
16
+ "additionalProperties": false,
17
+ "required": ["viewport_width", "viewport_height", "safe_bounds"],
18
+ "properties": {
19
+ "viewport_width": { "type": "number", "exclusiveMinimum": 0 },
20
+ "viewport_height": { "type": "number", "exclusiveMinimum": 0 },
21
+ "safe_bounds": { "$ref": "#/$defs/rect" },
22
+ "seam_tolerance": { "type": "number", "minimum": 0, "maximum": 1 }
23
+ }
24
+ },
25
+ "layers": {
26
+ "type": "array",
27
+ "minItems": 1,
28
+ "items": {
29
+ "type": "object",
30
+ "additionalProperties": false,
31
+ "required": ["layer_id", "image", "z_index", "parallax", "anchor", "tileable", "world_bounds", "camera_safe_bounds"],
32
+ "properties": {
33
+ "layer_id": { "type": "string", "minLength": 1 },
34
+ "role": { "enum": ["sky", "far", "mid", "near", "ground", "occluder", "foreground", "fx"] },
35
+ "image": { "type": "string", "minLength": 1 },
36
+ "z_index": { "type": "integer" },
37
+ "parallax": {
38
+ "type": "object",
39
+ "additionalProperties": false,
40
+ "required": ["x", "y"],
41
+ "properties": {
42
+ "x": { "type": "number", "minimum": 0 },
43
+ "y": { "type": "number", "minimum": 0 },
44
+ "reference": { "enum": ["camera", "world"] }
45
+ }
46
+ },
47
+ "anchor": { "enum": ["top_left", "center", "bottom_left", "world_origin"] },
48
+ "tileable": {
49
+ "type": "object",
50
+ "additionalProperties": false,
51
+ "required": ["x", "y"],
52
+ "properties": { "x": { "type": "boolean" }, "y": { "type": "boolean" } }
53
+ },
54
+ "world_bounds": { "$ref": "#/$defs/rect" },
55
+ "camera_safe_bounds": { "$ref": "#/$defs/rect" },
56
+ "blend": { "enum": ["normal", "add", "multiply", "screen"] },
57
+ "opacity": { "type": "number", "minimum": 0, "maximum": 1 }
58
+ }
59
+ }
60
+ }
61
+ },
62
+ "$defs": {
63
+ "rect": {
64
+ "type": "object",
65
+ "additionalProperties": false,
66
+ "required": ["x", "y", "width", "height"],
67
+ "properties": {
68
+ "x": { "type": "number" },
69
+ "y": { "type": "number" },
70
+ "width": { "type": "number", "exclusiveMinimum": 0 },
71
+ "height": { "type": "number", "exclusiveMinimum": 0 }
72
+ }
73
+ }
74
+ }
75
+ }
@@ -0,0 +1,14 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://github.com/lenhonbp/MotionLoom/blob/main/schemas/rig-adapter-registry.schema.json",
4
+ "title": "MotionLoom rig runtime adapter registry",
5
+ "type": "object",
6
+ "additionalProperties": false,
7
+ "required": ["schema_version", "registry_id", "generated_at", "adapters"],
8
+ "properties": {
9
+ "schema_version": {"const": "0.1"},
10
+ "registry_id": {"type": "string", "minLength": 1},
11
+ "generated_at": {"type": "string", "format": "date-time"},
12
+ "adapters": {"type": "array", "minItems": 1, "items": {"type": "object", "additionalProperties": false, "required": ["adapter_id", "target", "framework", "status", "evidence", "limitations"], "properties": {"adapter_id": {"type": "string", "minLength": 1}, "target": {"type": "string", "minLength": 1}, "framework": {"type": "string", "minLength": 1}, "status": {"type": "string", "enum": ["verified", "project_integrated", "static_validated", "scaffold_only", "disabled"]}, "evidence": {"type": "array", "minItems": 1, "items": {"type": "object", "required": ["path", "sha256"], "properties": {"path": {"type": "string"}, "sha256": {"type": "string", "pattern": "^[a-f0-9]{64}$"}}, "additionalProperties": true}}, "limitations": {"type": "array", "items": {"type": "string"}}}}}
13
+ }
14
+ }
@@ -0,0 +1,53 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://github.com/lenhonbp/MotionLoom/blob/main/schemas/rig-compatibility.schema.json",
4
+ "title": "MotionLoom rig compatibility evidence",
5
+ "description": "Describes a specific rig/export and checks its sockets, actions, events and runtime adapter compatibility. This is evidence only and never proves artist authority or production approval.",
6
+ "type": "object",
7
+ "additionalProperties": false,
8
+ "required": ["schema_version", "rig_id", "asset_id", "authority", "source", "candidate", "bones", "sockets", "actions", "runtime"],
9
+ "properties": {
10
+ "schema_version": {"const": "0.1"},
11
+ "rig_id": {"type": "string", "pattern": "^[A-Za-z0-9][A-Za-z0-9._-]{2,127}$"},
12
+ "asset_id": {"type": "string", "minLength": 1},
13
+ "authority": {"type": "string", "enum": ["ai_generated", "ai_assisted", "ai_assisted_human_reviewed", "artist_authored", "unknown"]},
14
+ "source": {
15
+ "type": "object",
16
+ "additionalProperties": false,
17
+ "required": ["kind", "path", "sha256"],
18
+ "properties": {
19
+ "kind": {"type": "string", "enum": ["fixture_contract", "procedural_definition", "spine_json", "spine_skel", "rive_file", "lottie_json", "three_asset", "other"]},
20
+ "path": {"type": "string", "pattern": "^(?!/)(?!.*(?:^|/)\\.\\.(?:/|$)).+"},
21
+ "sha256": {"type": "string", "pattern": "^[a-f0-9]{64}$"}
22
+ }
23
+ },
24
+ "candidate": {
25
+ "type": "object",
26
+ "additionalProperties": false,
27
+ "required": ["path", "sha256"],
28
+ "properties": {
29
+ "path": {"type": "string", "pattern": "^(?!/)(?!.*(?:^|/)\\.\\.(?:/|$)).+"},
30
+ "sha256": {"type": "string", "pattern": "^[a-f0-9]{64}$"}
31
+ }
32
+ },
33
+ "bones": {
34
+ "type": "array",
35
+ "minItems": 1,
36
+ "items": {"type": "object", "required": ["id"], "properties": {"id": {"type": "string", "minLength": 1}, "parent": {"type": "string", "minLength": 1}}, "additionalProperties": true}
37
+ },
38
+ "sockets": {"type": "array", "items": {"type": "object", "required": ["id", "bone"], "properties": {"id": {"type": "string", "minLength": 1}, "bone": {"type": "string", "minLength": 1}}, "additionalProperties": true}},
39
+ "actions": {"type": "array", "minItems": 1, "items": {"type": "object", "required": ["id"], "properties": {"id": {"type": "string", "minLength": 1}, "events": {"type": "array", "items": {"type": "string"}}}, "additionalProperties": true}},
40
+ "requirements": {"type": "object", "properties": {"sockets": {"type": "array", "items": {"type": "string"}}, "actions": {"type": "array", "items": {"type": "string"}}, "events": {"type": "array", "items": {"type": "string"}}}, "additionalProperties": false},
41
+ "runtime": {
42
+ "type": "object",
43
+ "additionalProperties": false,
44
+ "required": ["adapter_id", "target", "review_required"],
45
+ "properties": {
46
+ "adapter_id": {"type": "string", "minLength": 1},
47
+ "target": {"type": "string", "minLength": 1},
48
+ "runtime_evidence_ref": {"type": "string", "pattern": "^(?!/)(?!.*(?:^|/)\\.\\.(?:/|$)).+"},
49
+ "review_required": {"const": true}
50
+ }
51
+ }
52
+ }
53
+ }
@@ -0,0 +1,43 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://github.com/lenhonbp/MotionLoom/blob/main/schemas/rive-package-manifest.schema.json",
4
+ "title": "MotionLoom Rive runtime package gate",
5
+ "description": "A hash-bound manifest for a concrete .riv package. Passing this contract is runtime test readiness only; it never grants artist authority, production eligibility, production approval, or PR permission.",
6
+ "type": "object",
7
+ "required": ["schema_version", "package_id", "package_class", "asset", "provenance_ref", "runtime", "actions", "review_required"],
8
+ "properties": {
9
+ "schema_version": {"const": "0.1"},
10
+ "package_id": {"type": "string", "pattern": "^[A-Za-z0-9._-]+$"},
11
+ "package_class": {"enum": ["ai_generated_pilot", "production_candidate"]},
12
+ "asset": {
13
+ "type": "object",
14
+ "required": ["id", "path", "sha256", "bytes"],
15
+ "properties": {
16
+ "id": {"type": "string", "minLength": 1},
17
+ "path": {"type": "string", "pattern": "^(?!/)(?!.*\\.\\.).+\\.riv$"},
18
+ "sha256": {"type": "string", "pattern": "^[a-f0-9]{64}$"},
19
+ "bytes": {"type": "integer", "minimum": 5}
20
+ },
21
+ "additionalProperties": false
22
+ },
23
+ "provenance_ref": {"type": "string", "pattern": "^(?!/)(?!.*\\.\\.).+\\.json$"},
24
+ "runtime": {
25
+ "type": "object",
26
+ "required": ["adapter_id", "target", "required_state_machines", "required_inputs", "required_events", "review_required"],
27
+ "properties": {
28
+ "adapter_id": {"const": "motionloom.rive-runtime"},
29
+ "target": {"const": "rive"},
30
+ "required_state_machines": {"type": "array", "minItems": 1, "items": {"type": "string", "minLength": 1}},
31
+ "required_inputs": {"type": "array", "items": {"type": "string", "minLength": 1}},
32
+ "required_events": {"type": "array", "items": {"type": "string", "minLength": 1}},
33
+ "runtime_evidence_ref": {"type": "string", "pattern": "^(?!/)(?!.*\\.\\.).+\\.json$"},
34
+ "runtime_evidence_sha256": {"type": "string", "pattern": "^[a-f0-9]{64}$"},
35
+ "review_required": {"const": true}
36
+ },
37
+ "additionalProperties": false
38
+ },
39
+ "actions": {"type": "array", "minItems": 1, "items": {"type": "string", "minLength": 1}, "uniqueItems": true},
40
+ "review_required": {"const": true}
41
+ },
42
+ "additionalProperties": false
43
+ }
@@ -0,0 +1,48 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://github.com/lenhonbp/MotionLoom/blob/main/schemas/runtime-candidate.schema.json",
4
+ "title": "MotionLoom runtime candidate bridge",
5
+ "description": "Binds artifact intake evidence to deterministic consistency contracts before an asset may enter runtime testing. It never grants production eligibility, production approval or a pull request.",
6
+ "type": "object",
7
+ "additionalProperties": false,
8
+ "required": ["schema_version", "candidate_id", "asset_id", "created_at", "artifact_intake", "consistency", "runtime"],
9
+ "properties": {
10
+ "schema_version": {"const": "0.1"},
11
+ "candidate_id": {"type": "string", "pattern": "^[A-Za-z0-9][A-Za-z0-9._-]{2,127}$"},
12
+ "asset_id": {"type": "string", "minLength": 1},
13
+ "created_at": {"type": "string", "format": "date-time"},
14
+ "artifact_intake": {
15
+ "type": "object",
16
+ "additionalProperties": false,
17
+ "required": ["registry", "receipt", "controls", "export_manifest"],
18
+ "properties": {
19
+ "registry": {"type": "string", "pattern": "^(?!/)(?!.*(?:^|/)\\.\\.(?:/|$)).+"},
20
+ "receipt": {"type": "string", "pattern": "^(?!/)(?!.*(?:^|/)\\.\\.(?:/|$)).+"},
21
+ "controls": {"type": "string", "pattern": "^(?!/)(?!.*(?:^|/)\\.\\.(?:/|$)).+"},
22
+ "export_manifest": {"type": "string", "pattern": "^(?!/)(?!.*(?:^|/)\\.\\.(?:/|$)).+"}
23
+ }
24
+ },
25
+ "consistency": {
26
+ "type": "object",
27
+ "additionalProperties": false,
28
+ "required": ["asset_identity", "action_set"],
29
+ "properties": {
30
+ "asset_identity": {"type": "string", "pattern": "^(?!/)(?!.*(?:^|/)\\.\\.(?:/|$)).+"},
31
+ "action_set": {"type": "string", "pattern": "^(?!/)(?!.*(?:^|/)\\.\\.(?:/|$)).+"},
32
+ "frame_geometry": {"type": "string", "pattern": "^(?!/)(?!.*(?:^|/)\\.\\.(?:/|$)).+"},
33
+ "atlas": {"type": "string", "pattern": "^(?!/)(?!.*(?:^|/)\\.\\.(?:/|$)).+"},
34
+ "layered_map": {"type": "string", "pattern": "^(?!/)(?!.*(?:^|/)\\.\\.(?:/|$)).+"}
35
+ }
36
+ },
37
+ "runtime": {
38
+ "type": "object",
39
+ "additionalProperties": false,
40
+ "required": ["target", "review_required"],
41
+ "properties": {
42
+ "target": {"type": "string", "enum": ["sprite", "canvas", "lottie", "dotlottie", "rive", "gsap", "framer-motion", "spine", "three"]},
43
+ "runtime_evidence_ref": {"type": "string", "pattern": "^(?!/)(?!.*(?:^|/)\\.\\.(?:/|$)).+"},
44
+ "review_required": {"const": true}
45
+ }
46
+ }
47
+ }
48
+ }
@@ -13,6 +13,24 @@
13
13
  "runtime_evidence": {"type": "string", "minLength": 1, "pattern": "^(?!/)(?!.*\\.\\.).+$"},
14
14
  "visual_truth": {"type": "string", "minLength": 1, "pattern": "^(?!/)(?!.*\\.\\.).+$"},
15
15
  "asset_provenance": {"type": "string", "minLength": 1, "pattern": "^(?!/)(?!.*\\.\\.).+$"},
16
+ "asset_identity": {"type": "string", "minLength": 1, "pattern": "^(?!/)(?!.*\\.\\.).+$"},
17
+ "action_set": {"type": "string", "minLength": 1, "pattern": "^(?!/)(?!.*\\.\\.).+$"},
18
+ "frame_geometry": {"type": "string", "minLength": 1, "pattern": "^(?!/)(?!.*\\.\\.).+$"},
19
+ "atlas_contract": {"type": "string", "minLength": 1, "pattern": "^(?!/)(?!.*\\.\\.).+$"},
20
+ "layered_map": {"type": "string", "minLength": 1, "pattern": "^(?!/)(?!.*\\.\\.).+$"},
21
+ "consistency_ref": {"type": "string", "minLength": 1, "pattern": "^(?!/)(?!.*\\.\\.).+$"},
22
+ "consistency_kind": {"type": "string", "enum": ["identity", "action-set", "frame-geometry", "atlas", "layered-map"]},
23
+ "artifact_intake": {
24
+ "type": "object",
25
+ "required": ["registry", "receipt", "controls", "export_manifest"],
26
+ "properties": {
27
+ "registry": {"type": "string", "minLength": 1, "pattern": "^(?!/)(?!.*\\.\\.).+$"},
28
+ "receipt": {"type": "string", "minLength": 1, "pattern": "^(?!/)(?!.*\\.\\.).+$"},
29
+ "controls": {"type": "string", "minLength": 1, "pattern": "^(?!/)(?!.*\\.\\.).+$"},
30
+ "export_manifest": {"type": "string", "minLength": 1, "pattern": "^(?!/)(?!.*\\.\\.).+$"}
31
+ },
32
+ "additionalProperties": false
33
+ },
16
34
  "source_binding": {
17
35
  "type": "object",
18
36
  "required": ["kind", "source_path", "authority", "license", "sha256"],