motionloom 2.2.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 +48 -1
- package/README.md +123 -17
- package/ROADMAP.md +8 -3
- package/SKILL.md +34 -3
- package/agent-card.json +48 -5
- package/agent-surfaces.json +8 -1
- package/artifact-adapter-registry.json +53 -0
- package/bin/motionloom.mjs +41 -4
- package/docs/AGENT-INTEGRATION.md +15 -2
- package/docs/CHECKLIST.md +21 -0
- package/docs/STATUS.md +2 -2
- package/docs/audits/data/deep-stress-latest.json +65 -65
- package/docs/releases/2.3.0.md +33 -0
- 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-generated-pilot/hero-male.json +10 -0
- package/examples/agent-consumer/ai-generated-pilot-provenance.json +55 -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 +65 -4
- package/references/agent-interoperability.md +11 -0
- package/references/browser-review-contract.md +7 -1
- package/references/intelligence-core.md +29 -2
- package/rig-adapter-registry.json +39 -0
- package/schemas/action-set.schema.json +42 -0
- package/schemas/agent-surfaces.schema.json +1 -1
- package/schemas/artifact-adapter-registry.schema.json +16 -0
- package/schemas/asset-identity.schema.json +117 -0
- package/schemas/asset-provenance.schema.json +183 -0
- 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 +19 -0
- package/scripts/artifact-intake.py +408 -0
- package/scripts/asset-consistency.py +517 -0
- package/scripts/asset-provenance.py +395 -0
- package/scripts/build-ai-pilot.py +504 -0
- package/scripts/docs-audit.py +14 -2
- package/scripts/isolate-alpha-background.py +147 -0
- package/scripts/pr.py +2 -0
- package/scripts/quality-gate.py +127 -3
- package/scripts/report.py +135 -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 +500 -0
- package/scripts/skill-doctor.py +2 -1
- package/src/output/browser-review-smoke/asset-provenance.json +77 -0
- package/src/output/browser-review-smoke/manifest.json +1 -0
- package/src/output/browser-review-smoke/visual-truth.json +3 -3
- 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 +131 -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,117 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://motionloom.dev/schemas/asset-identity.schema.json",
|
|
4
|
+
"title": "MotionLoom Asset Identity Contract",
|
|
5
|
+
"description": "Stable identity and derivation locks shared by generated or code-authored runtime variants.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"additionalProperties": false,
|
|
8
|
+
"required": ["schema_version", "asset_id", "asset_kind", "identity", "derivation"],
|
|
9
|
+
"properties": {
|
|
10
|
+
"schema_version": { "const": "0.1" },
|
|
11
|
+
"asset_id": { "type": "string", "pattern": "^[a-z0-9][a-z0-9._/-]{2,127}$" },
|
|
12
|
+
"asset_kind": {
|
|
13
|
+
"type": "string",
|
|
14
|
+
"enum": ["character", "prop", "effect", "background", "tile", "ui", "rig"]
|
|
15
|
+
},
|
|
16
|
+
"identity": {
|
|
17
|
+
"type": "object",
|
|
18
|
+
"additionalProperties": false,
|
|
19
|
+
"required": ["subject_id", "reference_hashes", "camera", "coordinate_system", "scale", "pivot", "palette_lock"],
|
|
20
|
+
"properties": {
|
|
21
|
+
"subject_id": { "type": "string", "minLength": 1 },
|
|
22
|
+
"reference_hashes": {
|
|
23
|
+
"type": "array",
|
|
24
|
+
"items": { "type": "string", "pattern": "^[a-f0-9]{64}$" },
|
|
25
|
+
"minItems": 1,
|
|
26
|
+
"uniqueItems": true
|
|
27
|
+
},
|
|
28
|
+
"camera": {
|
|
29
|
+
"type": "object",
|
|
30
|
+
"additionalProperties": false,
|
|
31
|
+
"required": ["projection", "width", "height", "focal_length"],
|
|
32
|
+
"properties": {
|
|
33
|
+
"projection": { "enum": ["orthographic", "perspective"] },
|
|
34
|
+
"width": { "type": "integer", "minimum": 1 },
|
|
35
|
+
"height": { "type": "integer", "minimum": 1 },
|
|
36
|
+
"focal_length": { "type": "number", "exclusiveMinimum": 0 }
|
|
37
|
+
}
|
|
38
|
+
},
|
|
39
|
+
"coordinate_system": { "enum": ["screen_y_down", "world_y_up"] },
|
|
40
|
+
"scale": { "type": "number", "exclusiveMinimum": 0 },
|
|
41
|
+
"pivot": {
|
|
42
|
+
"type": "object",
|
|
43
|
+
"additionalProperties": false,
|
|
44
|
+
"required": ["x", "y", "space"],
|
|
45
|
+
"properties": {
|
|
46
|
+
"x": { "type": "number", "minimum": 0, "maximum": 1 },
|
|
47
|
+
"y": { "type": "number", "minimum": 0, "maximum": 1 },
|
|
48
|
+
"space": { "enum": ["normalized_canvas", "world"] }
|
|
49
|
+
}
|
|
50
|
+
},
|
|
51
|
+
"palette_lock": {
|
|
52
|
+
"type": "object",
|
|
53
|
+
"additionalProperties": false,
|
|
54
|
+
"required": ["colors", "delta_e_tolerance"],
|
|
55
|
+
"properties": {
|
|
56
|
+
"colors": {
|
|
57
|
+
"type": "array",
|
|
58
|
+
"items": { "type": "string", "pattern": "^#[0-9a-fA-F]{6}$" },
|
|
59
|
+
"minItems": 1,
|
|
60
|
+
"uniqueItems": true
|
|
61
|
+
},
|
|
62
|
+
"delta_e_tolerance": { "type": "number", "minimum": 0, "maximum": 100 }
|
|
63
|
+
}
|
|
64
|
+
},
|
|
65
|
+
"style_profile": { "type": "string", "minLength": 1 },
|
|
66
|
+
"lighting_profile": { "type": "string", "minLength": 1 }
|
|
67
|
+
}
|
|
68
|
+
},
|
|
69
|
+
"derivation": {
|
|
70
|
+
"type": "object",
|
|
71
|
+
"additionalProperties": false,
|
|
72
|
+
"required": ["origin", "source_refs"],
|
|
73
|
+
"properties": {
|
|
74
|
+
"origin": { "enum": ["ai_generated", "ai_assisted", "ai_assisted_human_reviewed", "artist_authored", "code_authored", "unknown"] },
|
|
75
|
+
"generator": {
|
|
76
|
+
"type": "object",
|
|
77
|
+
"additionalProperties": false,
|
|
78
|
+
"required": ["model", "task_id", "prompt_hash"],
|
|
79
|
+
"properties": {
|
|
80
|
+
"model": { "type": "string", "minLength": 1 },
|
|
81
|
+
"task_id": { "type": "string", "minLength": 1 },
|
|
82
|
+
"prompt_hash": { "type": "string", "pattern": "^[a-f0-9]{64}$" },
|
|
83
|
+
"seed": { "type": ["integer", "string"] },
|
|
84
|
+
"tool_version": { "type": "string" }
|
|
85
|
+
}
|
|
86
|
+
},
|
|
87
|
+
"source_refs": {
|
|
88
|
+
"type": "array",
|
|
89
|
+
"items": { "type": "string", "minLength": 1 },
|
|
90
|
+
"minItems": 1
|
|
91
|
+
},
|
|
92
|
+
"derivation_chain": {
|
|
93
|
+
"type": "array",
|
|
94
|
+
"items": {
|
|
95
|
+
"type": "object",
|
|
96
|
+
"additionalProperties": false,
|
|
97
|
+
"required": ["step", "operation", "input_hashes", "output_hash"],
|
|
98
|
+
"properties": {
|
|
99
|
+
"step": { "type": "integer", "minimum": 0 },
|
|
100
|
+
"operation": { "type": "string", "minLength": 1 },
|
|
101
|
+
"input_hashes": { "type": "array", "items": { "type": "string", "pattern": "^[a-f0-9]{64}$" } },
|
|
102
|
+
"output_hash": { "type": "string", "pattern": "^[a-f0-9]{64}$" }
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
},
|
|
108
|
+
"provenance_ref": { "type": "string", "minLength": 1 },
|
|
109
|
+
"notes": { "type": "string" }
|
|
110
|
+
},
|
|
111
|
+
"allOf": [
|
|
112
|
+
{
|
|
113
|
+
"if": {"properties": {"derivation": {"properties": {"origin": {"enum": ["ai_generated", "ai_assisted", "ai_assisted_human_reviewed"]}}, "required": ["origin"]}}, "required": ["derivation"]},
|
|
114
|
+
"then": {"properties": {"derivation": {"required": ["generator"]}}}
|
|
115
|
+
}
|
|
116
|
+
]
|
|
117
|
+
}
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://github.com/lenhonbp/MotionLoom/blob/main/schemas/asset-provenance.schema.json",
|
|
4
|
+
"title": "MotionLoom asset provenance contract",
|
|
5
|
+
"description": "Asset-level origin, authority, readiness and human-governance contract. This schema never treats an Agent assertion as human approval.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"additionalProperties": false,
|
|
8
|
+
"required": ["schema_version", "provenance_id", "asset", "authority", "readiness", "files", "license", "provenance_chain", "created_at"],
|
|
9
|
+
"properties": {
|
|
10
|
+
"schema_version": {"const": "1.0"},
|
|
11
|
+
"provenance_id": {"type": "string", "pattern": "^[A-Za-z0-9][A-Za-z0-9._-]{2,127}$"},
|
|
12
|
+
"task_id": {"type": "string", "pattern": "^[A-Za-z0-9][A-Za-z0-9._-]{2,127}$"},
|
|
13
|
+
"scene": {"type": "string", "pattern": "^[A-Za-z0-9][A-Za-z0-9._-]{1,63}$"},
|
|
14
|
+
"created_at": {"type": "string", "format": "date-time"},
|
|
15
|
+
"asset": {
|
|
16
|
+
"type": "object",
|
|
17
|
+
"additionalProperties": false,
|
|
18
|
+
"required": ["id", "path", "type", "framework"],
|
|
19
|
+
"properties": {
|
|
20
|
+
"id": {"type": "string", "minLength": 1},
|
|
21
|
+
"path": {"type": "string", "pattern": "^(?!/)(?!.*(?:^|/)\\.\\.(?:/|$)).+"},
|
|
22
|
+
"type": {"type": "string", "minLength": 1},
|
|
23
|
+
"framework": {"type": "string", "minLength": 1},
|
|
24
|
+
"version": {"type": "string", "minLength": 1}
|
|
25
|
+
}
|
|
26
|
+
},
|
|
27
|
+
"authority": {
|
|
28
|
+
"type": "string",
|
|
29
|
+
"enum": ["ai_generated", "ai_assisted", "ai_assisted_human_reviewed", "artist_authored", "code_authored", "unknown"]
|
|
30
|
+
},
|
|
31
|
+
"readiness": {
|
|
32
|
+
"type": "string",
|
|
33
|
+
"enum": ["blocked", "runtime_ready", "review_required", "production_eligible", "production_approved"]
|
|
34
|
+
},
|
|
35
|
+
"generator": {
|
|
36
|
+
"type": "object",
|
|
37
|
+
"additionalProperties": false,
|
|
38
|
+
"required": ["model", "task_id", "source", "generated_at"],
|
|
39
|
+
"properties": {
|
|
40
|
+
"model": {"type": "string", "minLength": 1},
|
|
41
|
+
"task_id": {"type": "string", "minLength": 1},
|
|
42
|
+
"source": {"type": "string", "minLength": 1},
|
|
43
|
+
"generated_at": {"type": "string", "format": "date-time"},
|
|
44
|
+
"prompt_hash": {"type": "string", "pattern": "^[a-f0-9]{64}$"},
|
|
45
|
+
"agent": {"type": "string", "minLength": 1}
|
|
46
|
+
}
|
|
47
|
+
},
|
|
48
|
+
"human_attestation": {
|
|
49
|
+
"type": "object",
|
|
50
|
+
"additionalProperties": false,
|
|
51
|
+
"required": ["attestor", "attestor_type", "decision", "attested_at", "user_confirmed"],
|
|
52
|
+
"properties": {
|
|
53
|
+
"attestor": {"type": "string", "minLength": 1},
|
|
54
|
+
"attestor_type": {"type": "string", "enum": ["artist", "user"]},
|
|
55
|
+
"decision": {"type": "string", "enum": ["artist_authored", "accepted", "rejected"]},
|
|
56
|
+
"attested_at": {"type": "string", "format": "date-time"},
|
|
57
|
+
"user_confirmed": {"const": true},
|
|
58
|
+
"signature": {"type": "string", "minLength": 1}
|
|
59
|
+
}
|
|
60
|
+
},
|
|
61
|
+
"human_review": {
|
|
62
|
+
"type": "object",
|
|
63
|
+
"additionalProperties": false,
|
|
64
|
+
"required": ["reviewer", "decision", "scope", "reviewed_at", "user_confirmed"],
|
|
65
|
+
"properties": {
|
|
66
|
+
"reviewer": {"type": "string", "minLength": 1},
|
|
67
|
+
"decision": {"type": "string", "enum": ["approved", "rejected", "changes_requested"]},
|
|
68
|
+
"scope": {"type": "string", "minLength": 1},
|
|
69
|
+
"reviewed_at": {"type": "string", "format": "date-time"},
|
|
70
|
+
"user_confirmed": {"const": true},
|
|
71
|
+
"notes": {"type": "string"}
|
|
72
|
+
}
|
|
73
|
+
},
|
|
74
|
+
"human_approval": {
|
|
75
|
+
"type": "object",
|
|
76
|
+
"additionalProperties": false,
|
|
77
|
+
"required": ["issued_by", "decision", "approved_at", "user_confirmed"],
|
|
78
|
+
"properties": {
|
|
79
|
+
"issued_by": {
|
|
80
|
+
"type": "object",
|
|
81
|
+
"additionalProperties": false,
|
|
82
|
+
"required": ["id", "type"],
|
|
83
|
+
"properties": {
|
|
84
|
+
"id": {"type": "string", "minLength": 1},
|
|
85
|
+
"type": {"type": "string", "enum": ["user", "artist"]}
|
|
86
|
+
}
|
|
87
|
+
},
|
|
88
|
+
"decision": {"const": "approved"},
|
|
89
|
+
"approved_at": {"type": "string", "format": "date-time"},
|
|
90
|
+
"user_confirmed": {"const": true},
|
|
91
|
+
"notes": {"type": "string"}
|
|
92
|
+
}
|
|
93
|
+
},
|
|
94
|
+
"license": {
|
|
95
|
+
"type": "object",
|
|
96
|
+
"additionalProperties": false,
|
|
97
|
+
"required": ["spdx", "source", "attribution"],
|
|
98
|
+
"properties": {
|
|
99
|
+
"spdx": {"type": "string", "minLength": 1},
|
|
100
|
+
"source": {"type": "string", "minLength": 1},
|
|
101
|
+
"attribution": {"type": "string", "minLength": 1}
|
|
102
|
+
}
|
|
103
|
+
},
|
|
104
|
+
"files": {
|
|
105
|
+
"type": "array",
|
|
106
|
+
"minItems": 1,
|
|
107
|
+
"items": {
|
|
108
|
+
"type": "object",
|
|
109
|
+
"additionalProperties": false,
|
|
110
|
+
"required": ["path", "role", "sha256"],
|
|
111
|
+
"properties": {
|
|
112
|
+
"path": {"type": "string", "pattern": "^(?!/)(?!.*(?:^|/)\\.\\.(?:/|$)).+"},
|
|
113
|
+
"role": {"type": "string", "minLength": 1},
|
|
114
|
+
"sha256": {"type": "string", "pattern": "^[a-f0-9]{64}$"},
|
|
115
|
+
"bytes": {"type": "integer", "minimum": 0}
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
},
|
|
119
|
+
"provenance_chain": {
|
|
120
|
+
"type": "array",
|
|
121
|
+
"minItems": 1,
|
|
122
|
+
"items": {
|
|
123
|
+
"type": "object",
|
|
124
|
+
"additionalProperties": false,
|
|
125
|
+
"required": ["step", "actor", "source", "timestamp"],
|
|
126
|
+
"properties": {
|
|
127
|
+
"step": {"type": "string", "minLength": 1},
|
|
128
|
+
"actor": {"type": "string", "minLength": 1},
|
|
129
|
+
"source": {"type": "string", "minLength": 1},
|
|
130
|
+
"timestamp": {"type": "string", "format": "date-time"},
|
|
131
|
+
"sha256": {"type": "string", "pattern": "^[a-f0-9]{64}$"}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
},
|
|
135
|
+
"runtime_evidence": {
|
|
136
|
+
"type": "object",
|
|
137
|
+
"additionalProperties": false,
|
|
138
|
+
"required": ["status", "runtime", "tested_at"],
|
|
139
|
+
"properties": {
|
|
140
|
+
"status": {"type": "string", "enum": ["pass", "fail", "not_run"]},
|
|
141
|
+
"runtime": {"type": "string", "minLength": 1},
|
|
142
|
+
"tested_at": {"type": "string", "format": "date-time"},
|
|
143
|
+
"evidence_path": {"type": "string", "minLength": 1},
|
|
144
|
+
"sha256": {"type": "string", "pattern": "^[a-f0-9]{64}$"}
|
|
145
|
+
}
|
|
146
|
+
},
|
|
147
|
+
"full_gate": {
|
|
148
|
+
"type": "object",
|
|
149
|
+
"additionalProperties": false,
|
|
150
|
+
"required": ["status", "quality_gate", "visual_truth", "license", "checked_at"],
|
|
151
|
+
"properties": {
|
|
152
|
+
"status": {"type": "string", "enum": ["pass", "fail", "not_run"]},
|
|
153
|
+
"quality_gate": {"const": "pass"},
|
|
154
|
+
"visual_truth": {"const": "pass"},
|
|
155
|
+
"license": {"const": "pass"},
|
|
156
|
+
"checked_at": {"type": "string", "format": "date-time"},
|
|
157
|
+
"report_path": {"type": "string", "minLength": 1}
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
},
|
|
161
|
+
"allOf": [
|
|
162
|
+
{
|
|
163
|
+
"if": {"required": ["authority"], "properties": {"authority": {"enum": ["ai_generated", "ai_assisted", "ai_assisted_human_reviewed"]}}},
|
|
164
|
+
"then": {"required": ["generator"]}
|
|
165
|
+
},
|
|
166
|
+
{
|
|
167
|
+
"if": {"required": ["authority"], "properties": {"authority": {"const": "artist_authored"}}},
|
|
168
|
+
"then": {"required": ["human_attestation"]}
|
|
169
|
+
},
|
|
170
|
+
{
|
|
171
|
+
"if": {"required": ["authority"], "properties": {"authority": {"const": "unknown"}}},
|
|
172
|
+
"then": {"properties": {"readiness": {"const": "blocked"}}}
|
|
173
|
+
},
|
|
174
|
+
{
|
|
175
|
+
"if": {"required": ["readiness"], "properties": {"readiness": {"const": "production_approved"}}},
|
|
176
|
+
"then": {"required": ["human_approval", "full_gate"]}
|
|
177
|
+
},
|
|
178
|
+
{
|
|
179
|
+
"if": {"required": ["readiness"], "properties": {"readiness": {"const": "production_eligible"}}},
|
|
180
|
+
"then": {"required": ["full_gate"]}
|
|
181
|
+
}
|
|
182
|
+
]
|
|
183
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://motionloom.dev/schemas/atlas-contract.schema.json",
|
|
4
|
+
"title": "MotionLoom Atlas Contract",
|
|
5
|
+
"description": "Deterministic atlas geometry and contamination boundary contract.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"additionalProperties": false,
|
|
8
|
+
"required": ["schema_version", "image", "allow_rotation", "padding_px", "extrude_px", "regions"],
|
|
9
|
+
"properties": {
|
|
10
|
+
"schema_version": { "const": "0.1" },
|
|
11
|
+
"image": { "type": "string", "minLength": 1 },
|
|
12
|
+
"allow_rotation": { "const": false },
|
|
13
|
+
"padding_px": { "type": "integer", "minimum": 0 },
|
|
14
|
+
"extrude_px": { "type": "integer", "minimum": 0 },
|
|
15
|
+
"require_transparent_outside_regions": { "type": "boolean" },
|
|
16
|
+
"regions": {
|
|
17
|
+
"type": "array",
|
|
18
|
+
"minItems": 1,
|
|
19
|
+
"items": {
|
|
20
|
+
"type": "object",
|
|
21
|
+
"additionalProperties": false,
|
|
22
|
+
"required": ["region_id", "frame_id", "rect", "trim", "pivot"],
|
|
23
|
+
"properties": {
|
|
24
|
+
"region_id": { "type": "string", "minLength": 1 },
|
|
25
|
+
"frame_id": { "type": "string", "minLength": 1 },
|
|
26
|
+
"rect": {
|
|
27
|
+
"type": "object",
|
|
28
|
+
"additionalProperties": false,
|
|
29
|
+
"required": ["x", "y", "width", "height"],
|
|
30
|
+
"properties": {
|
|
31
|
+
"x": { "type": "integer", "minimum": 0 },
|
|
32
|
+
"y": { "type": "integer", "minimum": 0 },
|
|
33
|
+
"width": { "type": "integer", "minimum": 1 },
|
|
34
|
+
"height": { "type": "integer", "minimum": 1 }
|
|
35
|
+
}
|
|
36
|
+
},
|
|
37
|
+
"trim": { "type": "boolean" },
|
|
38
|
+
"pivot": {
|
|
39
|
+
"type": "object",
|
|
40
|
+
"additionalProperties": false,
|
|
41
|
+
"required": ["x", "y"],
|
|
42
|
+
"properties": { "x": { "type": "number" }, "y": { "type": "number" } }
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://github.com/lenhonbp/MotionLoom/blob/main/schemas/control-track.schema.json",
|
|
4
|
+
"title": "MotionLoom generation control track",
|
|
5
|
+
"description": "Hash-bound generation controls. It stores no prompt plaintext, API token or approval assertion.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"additionalProperties": false,
|
|
8
|
+
"required": ["schema_version", "control_id", "asset_id", "references", "tracks", "output_profile", "created_at"],
|
|
9
|
+
"properties": {
|
|
10
|
+
"schema_version": {"const": "0.1"},
|
|
11
|
+
"control_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
|
+
"references": {"type": "array", "minItems": 1, "items": {"type": "object", "additionalProperties": false, "required": ["id", "path", "sha256", "role"], "properties": {"id": {"type": "string", "minLength": 1}, "path": {"type": "string", "pattern": "^(?!/)(?!.*(?:^|/)\\.\\.(?:/|$)).+"}, "sha256": {"type": "string", "pattern": "^[a-f0-9]{64}$"}, "role": {"type": "string", "enum": ["identity", "style", "pose", "camera", "motion", "palette", "lighting", "other"]}}}},
|
|
15
|
+
"tracks": {"type": "array", "minItems": 1, "items": {"type": "object", "additionalProperties": false, "required": ["id", "kind", "binding", "value_hash"], "properties": {"id": {"type": "string", "minLength": 1}, "kind": {"type": "string", "enum": ["identity", "style", "camera", "motion", "pose", "seed", "negative_prompt", "lighting", "source"]}, "binding": {"type": "string", "enum": ["required", "advisory", "not_applicable"]}, "value_hash": {"type": "string", "pattern": "^[a-f0-9]{64}$"}, "samples": {"type": "integer", "minimum": 0}}}},
|
|
16
|
+
"output_profile": {"type": "object", "additionalProperties": false, "required": ["kind"], "properties": {"kind": {"type": "string", "enum": ["image", "frame_sequence", "sprite_atlas", "layered_map", "video", "rigged_2d", "rigged_3d", "runtime_scene"]}, "fps": {"type": "number", "exclusiveMinimum": 0}, "expected_frame_count": {"type": "integer", "minimum": 1}, "loop": {"type": "boolean"}}}
|
|
17
|
+
}
|
|
18
|
+
}
|
|
@@ -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
|
+
}
|