motionloom 2.6.0 → 2.7.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/AGENTS.md +3 -1
- package/CHANGELOG.md +68 -0
- package/CONTRIBUTING.md +3 -1
- package/README.md +20 -4
- package/SECURITY.md +5 -5
- package/SKILL.md +15 -5
- package/agent-card.json +77 -14
- package/agent-surfaces.json +30 -7
- package/artifact-adapter-registry.json +568 -20
- package/bin/motionloom.mjs +25 -2
- package/capability-registry.json +58 -234
- package/dev-lab/public/devlab.js +36 -3
- package/dev-lab/public/index.html +6 -2
- package/docs/ACTION-SEPARATION.md +104 -0
- package/docs/ASSET-GENERATION-PLANNER.md +101 -0
- package/docs/BRANCH-PROTECTION.md +44 -0
- package/docs/EXTERNAL-CORPUS.md +26 -0
- package/docs/STATUS.md +3 -2
- package/docs/audits/field-test-after-hardening-2026-08-21.md +25 -0
- package/docs/releases/2.6.1.md +57 -0
- package/docs/releases/2.7.0.md +98 -0
- package/examples/agent-consumer/asset-consistency/action-sequence/envelopes/walk.00.json +32 -0
- package/examples/agent-consumer/asset-consistency/action-sequence/envelopes/walk.01.json +32 -0
- package/examples/agent-consumer/asset-consistency/action-sequence/envelopes/walk.02.json +32 -0
- package/examples/agent-consumer/asset-consistency/action-sequence/envelopes/walk.03.json +32 -0
- package/examples/agent-consumer/asset-consistency/action-sequence/hero-walk-action-manifest.json +81 -0
- package/examples/agent-consumer/asset-consistency/action-sequence/verifier-evidence/walk.00.json +26 -0
- package/examples/agent-consumer/asset-consistency/action-sequence/verifier-evidence/walk.01.json +26 -0
- package/examples/agent-consumer/asset-consistency/action-sequence/verifier-evidence/walk.02.json +26 -0
- package/examples/agent-consumer/asset-consistency/action-sequence/verifier-evidence/walk.03.json +26 -0
- package/examples/agent-consumer/asset-planning/pixellab-hero-256x448-request.json +43 -0
- package/examples/agent-consumer/devlab-live-sprite/README.md +30 -0
- package/examples/agent-consumer/devlab-live-sprite/devlab-runtime.json +61 -0
- package/examples/agent-consumer/devlab-live-sprite/frames/idle-00.png +0 -0
- package/examples/agent-consumer/devlab-live-sprite/frames/idle-01.png +0 -0
- package/examples/agent-consumer/devlab-live-sprite/frames/idle-02.png +0 -0
- package/examples/agent-consumer/devlab-live-sprite/frames/reverse-00.png +0 -0
- package/examples/agent-consumer/devlab-live-sprite/frames/reverse-01.png +0 -0
- package/examples/agent-consumer/devlab-live-sprite/frames/reverse-02.png +0 -0
- package/examples/agent-consumer/frame-generation-lock/hero-walk-lock.json +97 -0
- package/package.json +23 -9
- package/references/multi-frame-asset-generation.md +144 -0
- package/schemas/action-separation-verifier-evidence.schema.json +43 -0
- package/schemas/action-sequence-manifest.schema.json +48 -0
- package/schemas/artifact-adapter-registry.schema.json +1 -1
- package/schemas/asset-adaptation.schema.json +21 -0
- package/schemas/asset-generation-plan.schema.json +77 -0
- package/schemas/asset-generation-request.schema.json +104 -0
- package/schemas/frame-envelope.schema.json +62 -0
- package/schemas/frame-generation-lock.schema.json +189 -0
- package/scripts/action-separation.py +410 -0
- package/scripts/asset-adapt.mjs +92 -0
- package/scripts/asset-generation-plan.py +613 -0
- package/scripts/browser_review_consistency.py +64 -0
- package/scripts/fetch-project-corpus.py +91 -0
- package/scripts/frame-generation-lock.py +358 -0
- package/scripts/frame-set-preflight.py +264 -0
- package/scripts/package-consumer-smoke.mjs +20 -0
- package/scripts/quality-gate.py +7 -0
- package/scripts/release-verify.py +25 -0
- package/scripts/report-contract.py +1 -1
- package/scripts/report.py +19 -4
- package/scripts/resolve-task-bundle.py +11 -3
- package/scripts/review-hook.py +51 -2
- package/scripts/skill-doctor.py +42 -0
- package/src/output/browser-review-smoke/browser-review.json +6 -6
- package/tests/scripts/run_tests.py +45 -2
- package/tests/scripts/test_asset_adapt.py +47 -0
- package/tests/scripts/test_asset_consistency.py +77 -4
- package/tests/scripts/test_asset_generation_plan.py +250 -0
- package/tests/scripts/test_attestation.py +24 -8
|
@@ -11,6 +11,6 @@
|
|
|
11
11
|
"registry_id": {"type": "string", "pattern": "^[A-Za-z0-9][A-Za-z0-9._-]{2,127}$"},
|
|
12
12
|
"generated_at": {"type": "string", "format": "date-time"},
|
|
13
13
|
"selection_policy": {"type": "object", "additionalProperties": false, "required": ["require_verified", "allow_scaffold_only"], "properties": {"require_verified": {"type": "boolean"}, "allow_scaffold_only": {"type": "boolean"}}},
|
|
14
|
-
"adapters": {"type": "array", "minItems": 1, "items": {"type": "object", "additionalProperties": false, "required": ["adapter_id", "kind", "status", "adapter_version", "invocation_mode", "cost_class", "inputs", "outputs", "compatibility", "evidence", "limitations", "risk_level", "side_effect_level"], "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"]}, "status": {"type": "string", "enum": ["verified", "scaffold_only", "static_validated", "project_integrated", "disabled"]}, "adapter_version": {"type": "string", "minLength": 1}, "invocation_mode": {"type": "string", "enum": ["none", "manual", "agent-mediated", "api"]}, "cost_class": {"type": "string", "enum": ["included", "metered", "external", "unknown"]}, "inputs": {"type": "array", "items": {"type": "string"}}, "outputs": {"type": "array", "items": {"type": "string"}}, "compatibility": {"type": "object", "additionalProperties": false, "required": ["os"], "properties": {"os": {"type": "array", "items": {"type": "string"}}, "browsers": {"type": "array", "items": {"type": "string"}}}}, "evidence": {"type": "array", "minItems": 1, "items": {"type": "object", "additionalProperties": false, "required": ["path", "sha256", "kind"], "properties": {"path": {"type": "string", "pattern": "^(?!/)(?!.*(?:^|/)\\.\\.(?:/|$)).+"}, "sha256": {"type": "string", "pattern": "^[a-f0-9]{64}$"}, "kind": {"type": "string", "enum": ["runtime", "ci", "browser", "static"]}}}}, "limitations": {"type": "array", "items": {"type": "string"}}, "risk_level": {"type": "string", "enum": ["low", "medium", "high"]}, "side_effect_level": {"type": "string", "enum": ["read", "local_write", "user_review_required", "remote_write"]}}}}
|
|
14
|
+
"adapters": {"type": "array", "minItems": 1, "items": {"type": "object", "additionalProperties": false, "required": ["adapter_id", "kind", "status", "adapter_version", "invocation_mode", "cost_class", "inputs", "outputs", "compatibility", "evidence", "limitations", "risk_level", "side_effect_level"], "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"]}, "status": {"type": "string", "enum": ["verified", "scaffold_only", "static_validated", "project_integrated", "disabled"]}, "adapter_version": {"type": "string", "minLength": 1}, "invocation_mode": {"type": "string", "enum": ["none", "manual", "agent-mediated", "api"]}, "cost_class": {"type": "string", "enum": ["included", "metered", "external", "unknown"]}, "inputs": {"type": "array", "items": {"type": "string"}}, "outputs": {"type": "array", "items": {"type": "string"}}, "compatibility": {"type": "object", "additionalProperties": false, "required": ["os"], "properties": {"os": {"type": "array", "items": {"type": "string"}}, "browsers": {"type": "array", "items": {"type": "string"}}}}, "availability": {"type": "object", "additionalProperties": false, "properties": {"status": {"type": "string", "enum": ["known", "available", "unavailable", "unknown"]}, "environment": {"type": "string"}, "checked_at": {"type": "string", "format": "date-time"}, "reason": {"type": "string"}}}, "capabilities": {"type": "object", "additionalProperties": false, "properties": {"official_docs": {"type": "array", "items": {"type": "string", "format": "uri"}}, "canvas": {"type": "object", "additionalProperties": false, "properties": {"shapes": {"type": "array", "items": {"type": "string", "enum": ["square", "portrait", "landscape"]}}, "allowed_sizes": {"type": "array", "items": {"type": "array", "minItems": 2, "maxItems": 2, "items": {"type": "integer", "minimum": 1}}}, "max_width": {"type": "integer", "minimum": 1}, "max_height": {"type": "integer", "minimum": 1}}}, "frame_behavior": {"type": "object", "additionalProperties": false, "properties": {"mode": {"type": "string", "enum": ["single_frame", "batch_animation", "interpolation", "unknown"]}, "single_frame": {"type": "boolean"}, "max_frames_per_request": {"type": "integer", "minimum": 1}, "frame_count_policy": {"type": "string", "enum": ["fixed", "depends_on_canvas_size", "unknown"]}, "limits_by_canvas": {"type": "array", "items": {"type": "object", "additionalProperties": false, "required": ["canvas", "max_frames_per_request"], "properties": {"canvas": {"type": "array", "minItems": 2, "maxItems": 2, "items": {"type": "integer", "minimum": 1}}, "max_frames_per_request": {"type": "integer", "minimum": 1}}}}}}, "adaptation": {"type": "array", "items": {"type": "string", "enum": ["pad_to_target", "provider_native_resize", "tile_stitch", "integer_upscale"]}}}}, "evidence": {"type": "array", "minItems": 1, "items": {"type": "object", "additionalProperties": false, "required": ["path", "sha256", "kind"], "properties": {"path": {"type": "string", "pattern": "^(?!/)(?!.*(?:^|/)\\.\\.(?:/|$)).+"}, "sha256": {"type": "string", "pattern": "^[a-f0-9]{64}$"}, "kind": {"type": "string", "enum": ["runtime", "ci", "browser", "static"]}}}}, "limitations": {"type": "array", "items": {"type": "string"}}, "risk_level": {"type": "string", "enum": ["low", "medium", "high"]}, "side_effect_level": {"type": "string", "enum": ["read", "local_write", "user_review_required", "remote_write"]}}}}
|
|
15
15
|
}
|
|
16
16
|
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://github.com/lenhonbp/MotionLoom/blob/main/schemas/asset-adaptation.schema.json",
|
|
4
|
+
"title": "MotionLoom asset adaptation report",
|
|
5
|
+
"description": "Deterministic canvas adaptation evidence. It does not grant approval or production eligibility.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"additionalProperties": false,
|
|
8
|
+
"required": ["contract", "schema_version", "operation", "status", "approval", "production_approved", "source", "output", "transform"],
|
|
9
|
+
"properties": {
|
|
10
|
+
"contract": {"const": "motionloom-asset-adaptation"},
|
|
11
|
+
"schema_version": {"const": "0.1"},
|
|
12
|
+
"operation": {"const": "pad"},
|
|
13
|
+
"status": {"const": "built"},
|
|
14
|
+
"approval": {"const": false},
|
|
15
|
+
"production_approved": {"const": false},
|
|
16
|
+
"source": {"type": "object", "additionalProperties": false, "required": ["path", "sha256", "canvas"], "properties": {"path": {"type": "string", "minLength": 1}, "sha256": {"type": "string", "pattern": "^[a-f0-9]{64}$"}, "canvas": {"type": "array", "minItems": 2, "maxItems": 2, "items": {"type": "integer", "minimum": 1}}}},
|
|
17
|
+
"output": {"type": "object", "additionalProperties": false, "required": ["path", "sha256", "canvas"], "properties": {"path": {"type": "string", "minLength": 1}, "sha256": {"type": "string", "pattern": "^[a-f0-9]{64}$"}, "canvas": {"type": "array", "minItems": 2, "maxItems": 2, "items": {"type": "integer", "minimum": 1}}}},
|
|
18
|
+
"transform": {"type": "object", "additionalProperties": false, "required": ["scale", "x", "y", "anchor", "crop", "stretch", "interpolation"], "properties": {"scale": {"type": "integer", "minimum": 1}, "x": {"type": "integer", "minimum": 0}, "y": {"type": "integer", "minimum": 0}, "anchor": {"type": "string", "enum": ["center", "footline"]}, "crop": {"const": false}, "stretch": {"const": false}, "interpolation": {"const": "nearest-neighbour"}}},
|
|
19
|
+
"note": {"type": "string"}
|
|
20
|
+
}
|
|
21
|
+
}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://github.com/lenhonbp/MotionLoom/blob/main/schemas/asset-generation-plan.schema.json",
|
|
4
|
+
"title": "MotionLoom project-aware asset generation plan",
|
|
5
|
+
"description": "Advisory MotionLoom assessment. Recommendations never grant execution authorization or approval.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"additionalProperties": false,
|
|
8
|
+
"required": [
|
|
9
|
+
"contract", "schema_version", "producer", "source", "identity", "status", "decision", "execution_decision",
|
|
10
|
+
"approval", "production_approved", "request", "project", "registry", "providers", "selection",
|
|
11
|
+
"recommendations", "agent_guidance", "next_steps", "warnings"
|
|
12
|
+
],
|
|
13
|
+
"properties": {
|
|
14
|
+
"contract": {"const": "motionloom-asset-generation-plan"},
|
|
15
|
+
"schema_version": {"const": "0.2"},
|
|
16
|
+
"producer": {"const": "MotionLoom"},
|
|
17
|
+
"source": {"type": "string", "minLength": 1},
|
|
18
|
+
"identity": {
|
|
19
|
+
"type": "object",
|
|
20
|
+
"additionalProperties": false,
|
|
21
|
+
"required": ["product", "role"],
|
|
22
|
+
"properties": {"product": {"const": "MotionLoom"}, "role": {"type": "string", "minLength": 1}}
|
|
23
|
+
},
|
|
24
|
+
"status": {"const": "plan_only"},
|
|
25
|
+
"decision": {"type": "string", "enum": ["recommendations_available", "compatible_execution_route_available", "execution_route_requires_review_or_adaptation", "no_execution_eligible_route", "no_safe_recommendation_available"]},
|
|
26
|
+
"execution_decision": {"type": "string", "enum": ["compatible_execution_route_available", "execution_route_requires_review_or_adaptation", "no_execution_eligible_route"]},
|
|
27
|
+
"approval": {"const": false},
|
|
28
|
+
"production_approved": {"const": false},
|
|
29
|
+
"request": {"type": "object"},
|
|
30
|
+
"project": {"type": "object"},
|
|
31
|
+
"registry": {"type": "object"},
|
|
32
|
+
"providers": {"type": "array", "items": {"type": "object"}},
|
|
33
|
+
"selection": {
|
|
34
|
+
"type": "object",
|
|
35
|
+
"required": ["policy", "eligible_count", "provisional_count", "blocked_count", "recommendation_count"],
|
|
36
|
+
"properties": {
|
|
37
|
+
"policy": {"type": "object"},
|
|
38
|
+
"eligible_count": {"type": "integer", "minimum": 0},
|
|
39
|
+
"provisional_count": {"type": "integer", "minimum": 0},
|
|
40
|
+
"blocked_count": {"type": "integer", "minimum": 0},
|
|
41
|
+
"recommendation_count": {"type": "integer", "minimum": 0}
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
"recommendations": {
|
|
45
|
+
"type": "array",
|
|
46
|
+
"items": {
|
|
47
|
+
"type": "object",
|
|
48
|
+
"required": ["adapter_id", "recommendation_status", "execution_status", "execution_evidence_status", "execution_eligible", "user_preference", "availability", "project_fit", "rationale", "agent_guidance", "approval"],
|
|
49
|
+
"properties": {
|
|
50
|
+
"adapter_id": {"type": "string"},
|
|
51
|
+
"recommendation_status": {"type": "string", "enum": ["recommended", "acceptable", "not_recommended"]},
|
|
52
|
+
"execution_status": {"type": "string", "enum": ["verified", "provisional", "blocked"]},
|
|
53
|
+
"execution_evidence_status": {"type": "string", "enum": ["verified", "provisional"]},
|
|
54
|
+
"execution_eligible": {"type": "boolean"},
|
|
55
|
+
"user_preference": {"type": "object"},
|
|
56
|
+
"availability": {"type": "object"},
|
|
57
|
+
"project_fit": {"type": "string", "enum": ["high", "medium", "low"]},
|
|
58
|
+
"rationale": {"type": "array", "items": {"type": "string"}},
|
|
59
|
+
"agent_guidance": {"type": "object"},
|
|
60
|
+
"approval": {"const": false}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
},
|
|
64
|
+
"agent_guidance": {
|
|
65
|
+
"type": "object",
|
|
66
|
+
"required": ["recommended_by", "summary", "next_step", "validation_route"],
|
|
67
|
+
"properties": {
|
|
68
|
+
"recommended_by": {"const": "MotionLoom"},
|
|
69
|
+
"summary": {"type": "string"},
|
|
70
|
+
"next_step": {"type": "string"},
|
|
71
|
+
"validation_route": {"type": "array", "items": {"type": "string"}}
|
|
72
|
+
}
|
|
73
|
+
},
|
|
74
|
+
"next_steps": {"type": "array", "items": {"type": "string"}},
|
|
75
|
+
"warnings": {"type": "array", "items": {"type": "string"}}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://github.com/lenhonbp/MotionLoom/blob/main/schemas/asset-generation-request.schema.json",
|
|
4
|
+
"title": "MotionLoom asset generation request",
|
|
5
|
+
"description": "Provider-neutral request used to plan generation and adaptation. It never invokes a provider or grants approval.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"additionalProperties": false,
|
|
8
|
+
"required": ["schema_version", "request_id", "asset_id", "asset_kind", "target", "generation_policy"],
|
|
9
|
+
"properties": {
|
|
10
|
+
"schema_version": {"const": "0.1"},
|
|
11
|
+
"request_id": {"type": "string", "pattern": "^[A-Za-z0-9][A-Za-z0-9._-]{2,127}$"},
|
|
12
|
+
"asset_id": {"type": "string", "minLength": 1},
|
|
13
|
+
"asset_kind": {"type": "string", "enum": ["image", "frame_sequence", "sprite_atlas", "layered_map", "video", "rigged_2d", "rigged_3d", "runtime_scene"]},
|
|
14
|
+
"target": {
|
|
15
|
+
"type": "object",
|
|
16
|
+
"additionalProperties": false,
|
|
17
|
+
"required": ["canvas", "alpha_mode"],
|
|
18
|
+
"properties": {
|
|
19
|
+
"canvas": {
|
|
20
|
+
"type": "object",
|
|
21
|
+
"additionalProperties": false,
|
|
22
|
+
"required": ["width", "height"],
|
|
23
|
+
"properties": {
|
|
24
|
+
"width": {"type": "integer", "minimum": 1},
|
|
25
|
+
"height": {"type": "integer", "minimum": 1}
|
|
26
|
+
}
|
|
27
|
+
},
|
|
28
|
+
"frame_count": {"type": "integer", "minimum": 1},
|
|
29
|
+
"fps": {"type": "number", "exclusiveMinimum": 0},
|
|
30
|
+
"alpha_mode": {"type": "string", "enum": ["straight", "premultiplied", "opaque"]},
|
|
31
|
+
"pixel_art": {"type": "boolean"},
|
|
32
|
+
"anchor": {"type": "string", "enum": ["center", "footline", "pivot", "top_left"]}
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
"generation_policy": {
|
|
36
|
+
"type": "object",
|
|
37
|
+
"additionalProperties": false,
|
|
38
|
+
"required": ["frame_isolation", "allow_crop", "allow_stretch", "allow_silent_resize"],
|
|
39
|
+
"properties": {
|
|
40
|
+
"frame_isolation": {"type": "string", "enum": ["required", "preferred", "not_required"]},
|
|
41
|
+
"allow_crop": {"const": false},
|
|
42
|
+
"allow_stretch": {"const": false},
|
|
43
|
+
"allow_silent_resize": {"const": false},
|
|
44
|
+
"allow_provider_batch_as_provisional": {"type": "boolean"},
|
|
45
|
+
"integer_scale_only": {"type": "boolean"}
|
|
46
|
+
}
|
|
47
|
+
},
|
|
48
|
+
"actions": {
|
|
49
|
+
"type": "array",
|
|
50
|
+
"items": {
|
|
51
|
+
"type": "object",
|
|
52
|
+
"additionalProperties": false,
|
|
53
|
+
"required": ["action_id", "positive_cues", "negative_cues"],
|
|
54
|
+
"properties": {
|
|
55
|
+
"action_id": {"type": "string", "pattern": "^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$"},
|
|
56
|
+
"positive_cues": {"type": "array", "items": {"type": "string"}},
|
|
57
|
+
"negative_cues": {"type": "array", "items": {"type": "string"}},
|
|
58
|
+
"frame_count": {"type": "integer", "minimum": 1}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
},
|
|
62
|
+
"project_context": {
|
|
63
|
+
"type": "object",
|
|
64
|
+
"additionalProperties": false,
|
|
65
|
+
"properties": {
|
|
66
|
+
"runtime": {"type": "string", "minLength": 1},
|
|
67
|
+
"framework": {"type": "string", "minLength": 1},
|
|
68
|
+
"existing_assets": {"type": "array", "items": {"type": "string", "minLength": 1}},
|
|
69
|
+
"rig_requirements": {"type": "array", "items": {"type": "string", "minLength": 1}},
|
|
70
|
+
"provenance_requirements": {"type": "array", "items": {"type": "string", "minLength": 1}},
|
|
71
|
+
"validation_requirements": {"type": "array", "items": {"type": "string", "minLength": 1}}
|
|
72
|
+
}
|
|
73
|
+
},
|
|
74
|
+
"provider_preferences": {
|
|
75
|
+
"type": "object",
|
|
76
|
+
"additionalProperties": false,
|
|
77
|
+
"properties": {
|
|
78
|
+
"preferred_adapter_ids": {
|
|
79
|
+
"type": "array",
|
|
80
|
+
"uniqueItems": true,
|
|
81
|
+
"items": {"type": "string", "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{2,127}$"}
|
|
82
|
+
},
|
|
83
|
+
"excluded_adapter_ids": {
|
|
84
|
+
"type": "array",
|
|
85
|
+
"uniqueItems": true,
|
|
86
|
+
"items": {"type": "string", "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{2,127}$"}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
},
|
|
90
|
+
"references": {
|
|
91
|
+
"type": "array",
|
|
92
|
+
"items": {
|
|
93
|
+
"type": "object",
|
|
94
|
+
"additionalProperties": false,
|
|
95
|
+
"required": ["id", "role"],
|
|
96
|
+
"properties": {
|
|
97
|
+
"id": {"type": "string", "minLength": 1},
|
|
98
|
+
"role": {"type": "string", "enum": ["identity", "style", "pose", "motion", "palette", "other"]},
|
|
99
|
+
"sha256": {"type": "string", "pattern": "^[a-f0-9]{64}$"}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://motionloom.dev/schemas/frame-envelope.schema.json",
|
|
4
|
+
"title": "MotionLoom Frame Envelope",
|
|
5
|
+
"description": "Hash-bound identity and explicitly classified action-separation evidence for one isolated frame.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"additionalProperties": false,
|
|
8
|
+
"required": ["schema_version", "sequence_id", "action_id", "frame_id", "frame_index", "image", "image_sha256", "identity_lock_sha256", "generator_agent_id", "verifier", "approval"],
|
|
9
|
+
"properties": {
|
|
10
|
+
"schema_version": {"const": "0.2"},
|
|
11
|
+
"sequence_id": {"type": "string", "pattern": "^[a-z0-9][a-z0-9._-]{1,95}$"},
|
|
12
|
+
"action_id": {"type": "string", "pattern": "^[a-z0-9][a-z0-9._-]{1,63}$"},
|
|
13
|
+
"frame_id": {"type": "string", "pattern": "^[a-z0-9][a-z0-9._-]{1,63}$"},
|
|
14
|
+
"frame_index": {"type": "integer", "minimum": 0},
|
|
15
|
+
"image": {"type": "string", "pattern": "^.+\\.png$"},
|
|
16
|
+
"image_sha256": {"type": "string", "pattern": "^[a-f0-9]{64}$"},
|
|
17
|
+
"identity_lock_sha256": {"type": "string", "pattern": "^[a-f0-9]{64}$"},
|
|
18
|
+
"generator_agent_id": {"type": "string", "pattern": "^[a-z0-9][a-z0-9._-]{1,63}$"},
|
|
19
|
+
"verifier": {
|
|
20
|
+
"type": "object",
|
|
21
|
+
"additionalProperties": false,
|
|
22
|
+
"required": ["verifier_id", "verification_mode", "expected_action", "top_competitor", "margin", "threshold", "status", "method"],
|
|
23
|
+
"properties": {
|
|
24
|
+
"verifier_id": {"type": "string", "pattern": "^[a-z0-9][a-z0-9._-]{1,63}$"},
|
|
25
|
+
"verification_mode": {"type": "string", "enum": ["declared", "independently_bound"]},
|
|
26
|
+
"expected_action": {"type": "string", "pattern": "^[a-z0-9][a-z0-9._-]{1,63}$"},
|
|
27
|
+
"top_competitor": {"type": "string", "pattern": "^[a-z0-9][a-z0-9._-]{1,63}$"},
|
|
28
|
+
"margin": {"type": "number", "minimum": 0},
|
|
29
|
+
"threshold": {"type": "number", "minimum": 0},
|
|
30
|
+
"status": {"enum": ["pass", "quarantined"]},
|
|
31
|
+
"method": {"type": "string", "minLength": 1},
|
|
32
|
+
"evidence": {
|
|
33
|
+
"type": "object",
|
|
34
|
+
"additionalProperties": false,
|
|
35
|
+
"required": ["artifact", "artifact_sha256", "result_sha256", "provenance"],
|
|
36
|
+
"properties": {
|
|
37
|
+
"artifact": {"type": "string", "pattern": "^.+\\.json$"},
|
|
38
|
+
"artifact_sha256": {"type": "string", "pattern": "^[a-f0-9]{64}$"},
|
|
39
|
+
"result_sha256": {"type": "string", "pattern": "^[a-f0-9]{64}$"},
|
|
40
|
+
"provenance": {
|
|
41
|
+
"type": "object",
|
|
42
|
+
"additionalProperties": false,
|
|
43
|
+
"required": ["kind", "producer_id", "run_id"],
|
|
44
|
+
"properties": {
|
|
45
|
+
"kind": {"const": "separate_verifier_artifact"},
|
|
46
|
+
"producer_id": {"type": "string", "pattern": "^[a-z0-9][a-z0-9._-]{1,63}$"},
|
|
47
|
+
"run_id": {"type": "string", "minLength": 1}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
},
|
|
53
|
+
"allOf": [
|
|
54
|
+
{
|
|
55
|
+
"if": {"properties": {"verification_mode": {"const": "independently_bound"}}},
|
|
56
|
+
"then": {"required": ["evidence"]}
|
|
57
|
+
}
|
|
58
|
+
]
|
|
59
|
+
},
|
|
60
|
+
"approval": {"const": false}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://motionloom.dev/schemas/frame-generation-lock.schema.json",
|
|
4
|
+
"title": "MotionLoom Frame Generation Lock",
|
|
5
|
+
"description": "Provider-neutral, machine-readable generation constraints that keep independently generated animation frames on one identity, canvas and geometry lock before deterministic post-generation preflight.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"additionalProperties": false,
|
|
8
|
+
"required": [
|
|
9
|
+
"schema_version",
|
|
10
|
+
"lock_id",
|
|
11
|
+
"asset_identity",
|
|
12
|
+
"action_id",
|
|
13
|
+
"reference",
|
|
14
|
+
"canvas",
|
|
15
|
+
"geometry",
|
|
16
|
+
"appearance",
|
|
17
|
+
"source_policy",
|
|
18
|
+
"frames",
|
|
19
|
+
"postflight",
|
|
20
|
+
"trust"
|
|
21
|
+
],
|
|
22
|
+
"properties": {
|
|
23
|
+
"schema_version": { "enum": ["0.1", "0.2"] },
|
|
24
|
+
"lock_id": { "type": "string", "pattern": "^[a-z0-9][a-z0-9._-]{1,95}$" },
|
|
25
|
+
"asset_identity": { "type": "string", "minLength": 1 },
|
|
26
|
+
"action_id": { "type": "string", "pattern": "^[a-z0-9][a-z0-9._-]{1,63}$" },
|
|
27
|
+
"sequence_id": { "type": "string", "pattern": "^[a-z0-9][a-z0-9._-]{1,95}$" },
|
|
28
|
+
"forbidden_action_ids": {
|
|
29
|
+
"type": "array",
|
|
30
|
+
"minItems": 1,
|
|
31
|
+
"uniqueItems": true,
|
|
32
|
+
"items": { "type": "string", "pattern": "^[a-z0-9][a-z0-9._-]{1,63}$" }
|
|
33
|
+
},
|
|
34
|
+
"action_manifest": { "type": "string", "pattern": "^.+\\.json$" },
|
|
35
|
+
"action_contract": {
|
|
36
|
+
"type": "object",
|
|
37
|
+
"additionalProperties": false,
|
|
38
|
+
"required": ["positive_cues", "negative_cues"],
|
|
39
|
+
"properties": {
|
|
40
|
+
"positive_cues": { "type": "array", "minItems": 1, "items": { "type": "string", "minLength": 1 } },
|
|
41
|
+
"negative_cues": { "type": "array", "minItems": 1, "items": { "type": "string", "minLength": 1 } }
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
"reference": {
|
|
45
|
+
"type": "object",
|
|
46
|
+
"additionalProperties": false,
|
|
47
|
+
"required": ["image", "sha256", "role"],
|
|
48
|
+
"properties": {
|
|
49
|
+
"image": { "type": "string", "minLength": 1 },
|
|
50
|
+
"sha256": { "type": "string", "pattern": "^[a-f0-9]{64}$" },
|
|
51
|
+
"role": { "enum": ["identity_anchor", "accepted_frame_anchor"] }
|
|
52
|
+
}
|
|
53
|
+
},
|
|
54
|
+
"canvas": {
|
|
55
|
+
"type": "object",
|
|
56
|
+
"additionalProperties": false,
|
|
57
|
+
"required": ["width", "height", "color_space", "alpha_mode"],
|
|
58
|
+
"properties": {
|
|
59
|
+
"width": { "type": "integer", "minimum": 1 },
|
|
60
|
+
"height": { "type": "integer", "minimum": 1 },
|
|
61
|
+
"color_space": { "enum": ["srgb", "linear-srgb"] },
|
|
62
|
+
"alpha_mode": { "enum": ["straight", "premultiplied"] }
|
|
63
|
+
}
|
|
64
|
+
},
|
|
65
|
+
"geometry": {
|
|
66
|
+
"type": "object",
|
|
67
|
+
"additionalProperties": false,
|
|
68
|
+
"required": ["center_x", "pivot", "footline_px", "safe_rect", "min_padding_px", "target_alpha_bbox", "tolerances"],
|
|
69
|
+
"properties": {
|
|
70
|
+
"center_x": { "type": "number" },
|
|
71
|
+
"pivot": { "$ref": "#/$defs/point" },
|
|
72
|
+
"footline_px": { "type": "number" },
|
|
73
|
+
"safe_rect": { "$ref": "#/$defs/rect" },
|
|
74
|
+
"min_padding_px": { "type": "integer", "minimum": 0 },
|
|
75
|
+
"target_alpha_bbox": {
|
|
76
|
+
"type": "object",
|
|
77
|
+
"additionalProperties": false,
|
|
78
|
+
"required": ["width", "height"],
|
|
79
|
+
"properties": {
|
|
80
|
+
"width": { "type": "integer", "minimum": 1 },
|
|
81
|
+
"height": { "type": "integer", "minimum": 1 }
|
|
82
|
+
}
|
|
83
|
+
},
|
|
84
|
+
"tolerances": {
|
|
85
|
+
"type": "object",
|
|
86
|
+
"additionalProperties": false,
|
|
87
|
+
"required": ["pivot_px", "footline_px", "bbox_width_px", "bbox_height_px"],
|
|
88
|
+
"properties": {
|
|
89
|
+
"pivot_px": { "type": "number", "minimum": 0 },
|
|
90
|
+
"footline_px": { "type": "number", "minimum": 0 },
|
|
91
|
+
"bbox_width_px": { "type": "number", "minimum": 0 },
|
|
92
|
+
"bbox_height_px": { "type": "number", "minimum": 0 }
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
},
|
|
97
|
+
"appearance": {
|
|
98
|
+
"type": "object",
|
|
99
|
+
"additionalProperties": false,
|
|
100
|
+
"required": ["preserve", "forbid", "pixel_art"],
|
|
101
|
+
"properties": {
|
|
102
|
+
"preserve": { "type": "array", "minItems": 1, "items": { "type": "string", "minLength": 1 } },
|
|
103
|
+
"forbid": { "type": "array", "minItems": 1, "items": { "type": "string", "minLength": 1 } },
|
|
104
|
+
"pixel_art": {
|
|
105
|
+
"type": "object",
|
|
106
|
+
"additionalProperties": false,
|
|
107
|
+
"required": ["enabled", "nearest_neighbor_only"],
|
|
108
|
+
"properties": {
|
|
109
|
+
"enabled": { "type": "boolean" },
|
|
110
|
+
"nearest_neighbor_only": { "type": "boolean" }
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
},
|
|
115
|
+
"source_policy": {
|
|
116
|
+
"type": "object",
|
|
117
|
+
"additionalProperties": false,
|
|
118
|
+
"required": ["isolated_frames", "max_frames_per_image", "allow_pose_sheet", "allow_post_resize", "reuse_reference"],
|
|
119
|
+
"properties": {
|
|
120
|
+
"isolated_frames": { "const": true },
|
|
121
|
+
"max_frames_per_image": { "const": 1 },
|
|
122
|
+
"allow_pose_sheet": { "const": false },
|
|
123
|
+
"allow_post_resize": { "const": false },
|
|
124
|
+
"reuse_reference": { "const": true }
|
|
125
|
+
}
|
|
126
|
+
},
|
|
127
|
+
"frames": {
|
|
128
|
+
"type": "array",
|
|
129
|
+
"minItems": 2,
|
|
130
|
+
"items": {
|
|
131
|
+
"type": "object",
|
|
132
|
+
"additionalProperties": false,
|
|
133
|
+
"required": ["frame_id", "pose", "output"],
|
|
134
|
+
"properties": {
|
|
135
|
+
"frame_id": { "type": "string", "pattern": "^[a-z0-9][a-z0-9._-]{1,63}$" },
|
|
136
|
+
"pose": { "type": "string", "minLength": 1 },
|
|
137
|
+
"output": { "type": "string", "pattern": ".+\\.png$" }
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
},
|
|
141
|
+
"postflight": {
|
|
142
|
+
"type": "object",
|
|
143
|
+
"additionalProperties": false,
|
|
144
|
+
"required": ["frame_geometry"],
|
|
145
|
+
"properties": {
|
|
146
|
+
"frame_geometry": { "type": "string", "minLength": 1 }
|
|
147
|
+
}
|
|
148
|
+
},
|
|
149
|
+
"trust": {
|
|
150
|
+
"type": "object",
|
|
151
|
+
"additionalProperties": false,
|
|
152
|
+
"required": ["authority", "review_only", "approval"],
|
|
153
|
+
"properties": {
|
|
154
|
+
"authority": { "enum": ["ai_generated", "ai_assisted", "code_authored", "unknown"] },
|
|
155
|
+
"review_only": { "const": true },
|
|
156
|
+
"approval": { "const": false }
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
},
|
|
160
|
+
"allOf": [
|
|
161
|
+
{
|
|
162
|
+
"if": { "properties": { "schema_version": { "const": "0.2" } } },
|
|
163
|
+
"then": { "required": ["sequence_id", "forbidden_action_ids", "action_contract", "action_manifest"] }
|
|
164
|
+
}
|
|
165
|
+
],
|
|
166
|
+
"$defs": {
|
|
167
|
+
"rect": {
|
|
168
|
+
"type": "object",
|
|
169
|
+
"additionalProperties": false,
|
|
170
|
+
"required": ["x", "y", "width", "height"],
|
|
171
|
+
"properties": {
|
|
172
|
+
"x": { "type": "integer", "minimum": 0 },
|
|
173
|
+
"y": { "type": "integer", "minimum": 0 },
|
|
174
|
+
"width": { "type": "integer", "minimum": 1 },
|
|
175
|
+
"height": { "type": "integer", "minimum": 1 }
|
|
176
|
+
}
|
|
177
|
+
},
|
|
178
|
+
"point": {
|
|
179
|
+
"type": "object",
|
|
180
|
+
"additionalProperties": false,
|
|
181
|
+
"required": ["x", "y", "space"],
|
|
182
|
+
"properties": {
|
|
183
|
+
"x": { "type": "number" },
|
|
184
|
+
"y": { "type": "number" },
|
|
185
|
+
"space": { "enum": ["pixels", "normalized"] }
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
}
|