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.
- package/CHANGELOG.md +45 -1
- package/README.md +97 -11
- package/ROADMAP.md +8 -5
- package/SKILL.md +24 -5
- package/agent-card.json +34 -5
- package/agent-surfaces.json +1 -1
- package/artifact-adapter-registry.json +53 -0
- package/bin/motionloom.mjs +43 -6
- package/capability-registry.json +308 -0
- package/docs/CHECKLIST.md +16 -0
- package/docs/STATUS.md +2 -2
- package/docs/apple-distribution.md +24 -0
- package/docs/architecture/apple/cloudkit.md +18 -0
- package/docs/architecture/apple/contracts.md +9 -0
- package/docs/architecture/apple/implementation-status-2026-08-16.md +55 -0
- package/docs/architecture/apple/studio.md +35 -0
- package/docs/audits/data/deep-stress-latest.json +65 -65
- package/docs/releases/2.4.0.md +31 -0
- package/docs/releases/2.5.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/docs/research/ai-repository-benchmark-2026-08-16.md +75 -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 +58 -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/attestation.py +8 -0
- package/scripts/build-ai-pilot.py +504 -0
- package/scripts/evidence-verifier.py +18 -9
- package/scripts/intelligence.py +85 -18
- 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 +151 -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,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"],
|