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.
Files changed (114) hide show
  1. package/CHANGELOG.md +48 -1
  2. package/README.md +123 -17
  3. package/ROADMAP.md +8 -3
  4. package/SKILL.md +34 -3
  5. package/agent-card.json +48 -5
  6. package/agent-surfaces.json +8 -1
  7. package/artifact-adapter-registry.json +53 -0
  8. package/bin/motionloom.mjs +41 -4
  9. package/docs/AGENT-INTEGRATION.md +15 -2
  10. package/docs/CHECKLIST.md +21 -0
  11. package/docs/STATUS.md +2 -2
  12. package/docs/audits/data/deep-stress-latest.json +65 -65
  13. package/docs/releases/2.3.0.md +33 -0
  14. package/docs/releases/2.4.0.md +31 -0
  15. package/docs/releases/npm-publish-from-workstation.md +19 -8
  16. package/docs/research/agent-skill-ecosystem-notes.md +47 -0
  17. package/docs/research/ai-animation-tools-2026-notes.md +81 -0
  18. package/docs/research/ai-animation-tools-2026-report.md +168 -0
  19. package/docs/research/ai-pilot-ingest-notes.md +29 -0
  20. package/examples/agent-consumer/ai-generated-pilot/hero-male.json +10 -0
  21. package/examples/agent-consumer/ai-generated-pilot-provenance.json +55 -0
  22. package/examples/agent-consumer/ai-pilot-scout/CHATGPT-HANDOFF.md +70 -0
  23. package/examples/agent-consumer/ai-pilot-scout/CODEX-HANDOFF.md +80 -0
  24. package/examples/agent-consumer/ai-pilot-scout/README.md +39 -0
  25. package/examples/agent-consumer/ai-pilot-scout/chatgpt-geometry-correction-prompt.md +55 -0
  26. package/examples/agent-consumer/ai-pilot-scout/chatgpt-pose-generation-prompt.md +78 -0
  27. package/examples/agent-consumer/ai-pilot-scout/partial-handoff.json +73 -0
  28. package/examples/agent-consumer/artifact-intake/hero-motion-controls.json +15 -0
  29. package/examples/agent-consumer/artifact-intake/hero-motion-export.json +14 -0
  30. package/examples/agent-consumer/artifact-intake/hero-motion-provenance.json +20 -0
  31. package/examples/agent-consumer/artifact-intake/hero-motion-receipt.json +16 -0
  32. package/examples/agent-consumer/asset-consistency/assets/forest-back.png +0 -0
  33. package/examples/agent-consumer/asset-consistency/assets/forest-front.png +0 -0
  34. package/examples/agent-consumer/asset-consistency/assets/forest-mid.png +0 -0
  35. package/examples/agent-consumer/asset-consistency/assets/hero-atlas.png +0 -0
  36. package/examples/agent-consumer/asset-consistency/assets/hero-frame-00.png +0 -0
  37. package/examples/agent-consumer/asset-consistency/assets/hero-frame-01.png +0 -0
  38. package/examples/agent-consumer/asset-consistency/assets/hero-frame-02.png +0 -0
  39. package/examples/agent-consumer/asset-consistency/assets/hero-frame-03.png +0 -0
  40. package/examples/agent-consumer/asset-consistency/forest-layered-map.json +53 -0
  41. package/examples/agent-consumer/asset-consistency/hero-atlas-contract.json +24 -0
  42. package/examples/agent-consumer/asset-consistency/hero-identity.json +51 -0
  43. package/examples/agent-consumer/asset-consistency/hero-walk-action-set.json +27 -0
  44. package/examples/agent-consumer/asset-consistency/hero-walk-frame-geometry.json +63 -0
  45. package/examples/agent-consumer/rig-compatibility/hero-walk-fixture-rig.json +13 -0
  46. package/examples/agent-consumer/rive-package-gate/README.md +20 -0
  47. package/examples/agent-consumer/runtime-candidate/hero-walk-candidate.json +18 -0
  48. package/examples/agent-consumer/runtime-pilot/action-set.json +19 -0
  49. package/examples/agent-consumer/runtime-pilot/asset-identity.json +44 -0
  50. package/examples/agent-consumer/runtime-pilot/candidate.json +21 -0
  51. package/examples/agent-consumer/runtime-pilot/controls.json +35 -0
  52. package/examples/agent-consumer/runtime-pilot/export.json +17 -0
  53. package/examples/agent-consumer/runtime-pilot/provenance.json +38 -0
  54. package/examples/agent-consumer/runtime-pilot/receipt.json +30 -0
  55. package/package.json +65 -4
  56. package/references/agent-interoperability.md +11 -0
  57. package/references/browser-review-contract.md +7 -1
  58. package/references/intelligence-core.md +29 -2
  59. package/rig-adapter-registry.json +39 -0
  60. package/schemas/action-set.schema.json +42 -0
  61. package/schemas/agent-surfaces.schema.json +1 -1
  62. package/schemas/artifact-adapter-registry.schema.json +16 -0
  63. package/schemas/asset-identity.schema.json +117 -0
  64. package/schemas/asset-provenance.schema.json +183 -0
  65. package/schemas/atlas-contract.schema.json +48 -0
  66. package/schemas/control-track.schema.json +18 -0
  67. package/schemas/export-manifest.schema.json +19 -0
  68. package/schemas/frame-geometry.schema.json +79 -0
  69. package/schemas/generation-receipt.schema.json +20 -0
  70. package/schemas/layered-map.schema.json +75 -0
  71. package/schemas/rig-adapter-registry.schema.json +14 -0
  72. package/schemas/rig-compatibility.schema.json +53 -0
  73. package/schemas/rive-package-manifest.schema.json +43 -0
  74. package/schemas/runtime-candidate.schema.json +48 -0
  75. package/schemas/scene-manifest.schema.json +19 -0
  76. package/scripts/artifact-intake.py +408 -0
  77. package/scripts/asset-consistency.py +517 -0
  78. package/scripts/asset-provenance.py +395 -0
  79. package/scripts/build-ai-pilot.py +504 -0
  80. package/scripts/docs-audit.py +14 -2
  81. package/scripts/isolate-alpha-background.py +147 -0
  82. package/scripts/pr.py +2 -0
  83. package/scripts/quality-gate.py +127 -3
  84. package/scripts/report.py +135 -0
  85. package/scripts/resolve-task-bundle.py +84 -0
  86. package/scripts/review-hook.py +26 -4
  87. package/scripts/rig-compatibility.py +251 -0
  88. package/scripts/rive-package-gate.py +245 -0
  89. package/scripts/runtime-candidate.py +301 -0
  90. package/scripts/setup.mjs +500 -0
  91. package/scripts/skill-doctor.py +2 -1
  92. package/src/output/browser-review-smoke/asset-provenance.json +77 -0
  93. package/src/output/browser-review-smoke/manifest.json +1 -0
  94. package/src/output/browser-review-smoke/visual-truth.json +3 -3
  95. package/src/output/runtime-pilot-framer/asset-provenance.json +38 -0
  96. package/src/output/runtime-pilot-framer/browser-review.json +20 -0
  97. package/src/output/runtime-pilot-framer/framer-motion/runtime-telemetry.json +103 -0
  98. package/src/output/runtime-pilot-framer/manifest.json +31 -0
  99. package/src/output/runtime-pilot-framer/motion-spec.json +25 -0
  100. package/src/output/runtime-pilot-framer/runtime-evidence.json +96 -0
  101. package/src/output/runtime-pilot-framer/runtime-telemetry.json +100 -0
  102. package/src/output/runtime-pilot-framer/scene.jsx +52 -0
  103. package/src/output/runtime-pilot-framer/snapshot/.render-meta.json +9 -0
  104. package/src/output/runtime-pilot-framer/snapshot/frame-00.png +0 -0
  105. package/src/output/runtime-pilot-framer/snapshot/frame-100.png +0 -0
  106. package/src/output/runtime-pilot-framer/snapshot/frame-50.png +0 -0
  107. package/tests/scripts/run_tests.py +131 -0
  108. package/tests/scripts/test_ai_pilot_builder.py +128 -0
  109. package/tests/scripts/test_alpha_isolation.py +60 -0
  110. package/tests/scripts/test_artifact_intake.py +146 -0
  111. package/tests/scripts/test_asset_consistency.py +199 -0
  112. package/tests/scripts/test_rig_compatibility.py +105 -0
  113. package/tests/scripts/test_rive_package_gate.py +101 -0
  114. package/tests/scripts/test_runtime_candidate.py +95 -0
package/CHANGELOG.md CHANGED
@@ -4,7 +4,52 @@ All notable MotionLoom changes are documented here. The project follows semantic
4
4
 
5
5
  ## [Unreleased]
6
6
 
7
- - No unreleased changes are currently tracked.
7
+ ## [2.4.0] - 2026-08-15
8
+
9
+ ### Added
10
+
11
+ - Deterministic Asset Consistency Compiler with identity, action-set, frame-geometry, atlas and layered-map schemas.
12
+ - Standard-library PNG measurement for alpha bounds, pivot/footline/bbox drift, frame/atlas contamination, region overlap, tile seams, parallax ordering and camera-safe bounds.
13
+ - Cross-platform `motionloom asset-consistency validate|analyze|report` commands, npm smoke scripts, public examples and regression coverage.
14
+ - Provider-neutral Artifact Intake contracts for generation receipts, control tracks, export manifests and hash-bound adapter registry evidence, including an internal-ImageGen-shaped scaffold that makes no provider API call.
15
+ - Control-to-runtime `runtime-candidate` bridge, rig compatibility contracts/registry, public fixtures and cross-platform CLI smoke scripts for skeleton/socket/action/event/export bindings.
16
+ - Dev Lab evidence rail and Pipeline handoff support for Artifact Intake, runtime candidate and rig compatibility findings before a user review decision.
17
+ - Truthful `code_authored` provenance lane for runtime scenes, with a hash-bound Framer Motion pilot rendered by Playwright at 0/50/100%, integrity verification, local-only attestation and a pending human Dev Lab review.
18
+ - Fail-closed task-bundle resolver for Quality CI that binds `task.json.scene` to the changed scene rather than inferring a directory name from the scene slug.
19
+
20
+ ### Fixed
21
+
22
+ - Quality Gate and task reports can validate an explicitly declared `consistency_ref` without forcing legacy scenes to invent a contract; strict production runs fail closed on a non-ready contract.
23
+ - Quality Gate and reports accept explicitly declared Artifact Intake evidence without breaking legacy scenes, and preserve `review_required` rather than flattening adapter/candidate/rig findings to a pass.
24
+ - Quality CI correctly discovers valid task bundles whose task ID differs from the scene slug, including the runtime-first pilot shape.
25
+
26
+ ### Boundary
27
+
28
+ - Consistency evidence measures and reports artifact agreement only. It never grants artist authority, production eligibility, production approval or PR authorization.
29
+ - A provider name, internal-skill metadata, generation receipt, control plan, compatible rig or runtime candidate never grants artist authority, production eligibility, production approval or PR authorization.
30
+
31
+ ## [2.3.0] - 2026-08-14
32
+
33
+ ### Added
34
+
35
+ - AI-first, human-governed asset provenance contract with explicit authority/origin tiers, readiness states, generator/derivation metadata, per-file SHA-256, license/source records, runtime evidence and human-review boundaries.
36
+ - Cross-platform `motionloom asset-provenance` commands for validation, classification, reporting and runtime/production checks, plus a transparent AI-generated pilot fixture.
37
+ - One-command `npx --yes motionloom setup` onboarding for real projects, with package-manager detection, local devDependency installation, project-bound context and durable Project Memory bootstrap.
38
+ - Read-only `motionloom status`, safe `motionloom repair`, dry-run JSON output and an idempotent managed `AGENTS.md` router for Agent integration.
39
+ - Canonical `npx` installation recipe in Agent discovery plus Ubuntu/macOS/Windows onboarding regressions and package/docs guards.
40
+
41
+ ### Fixed
42
+
43
+ - Production quality and PR preflight now fail closed when an asset is unknown, self-asserted as artist-authored, not production-eligible or missing a manifest-bound provenance record; `production_approved` remains human-only.
44
+ - Setup JSON output no longer mixes package-manager logs with machine-readable results, and repair/status routing does not trigger an unintended full setup.
45
+
46
+ ### Verified
47
+
48
+ - Full regression, onboarding and installation-matrix tests, discovery contract, docs audit, Skill Doctor, skill-creator validation, quality validation, npm tarball dry-run and diff hygiene pass.
49
+
50
+ ### Boundary
51
+
52
+ - Setup never commits, pushes, opens a PR, grants approval or promotes asset provenance. User review remains required before any PR handoff.
8
53
 
9
54
  ## [2.2.0] - 2026-08-13
10
55
 
@@ -64,5 +109,7 @@ See the [2.0.0 release note](docs/releases/2.0.0.md).
64
109
  The 1.5.0–1.9.0 milestones established runtime evidence, browser review, Intelligence Core, semantic lint, continuity, telemetry and trust-boundary hardening. Their detailed notes are available in [`docs/releases/`](docs/releases/).
65
110
 
66
111
  [2.2.0]: docs/releases/2.2.0.md
112
+ [2.4.0]: docs/releases/2.4.0.md
113
+ [2.3.0]: docs/releases/2.3.0.md
67
114
  [2.1.0]: docs/releases/2.1.0.md
68
115
  [2.0.0]: docs/releases/2.0.0.md
package/README.md CHANGED
@@ -14,7 +14,7 @@ MotionLoom is an independent open-source Agent Skill for building UI motion, Lot
14
14
 
15
15
  > **MotionLoom is not an auto-approval layer.** A valid signature, a passing heuristic, or a successful render proves only the contract it checks. Visual quality, intent, accessibility and PR authorization remain reviewable human decisions.
16
16
 
17
- > **Release posture:** the repository source and `package.json` are at **2.1.0**. The public npm registry currently serves **2.0.0** and no GitHub tag/Release for 2.1.0 exists yet; a maintainer must perform the protected manual release before the registry and GitHub release state change.
17
+ > **Release posture:** `motionloom@2.4.0` is the next release target. It adds a truthful `code_authored` runtime-first lane, a Framer Motion end-to-end reference candidate, identity-bound Dev Lab review evidence and task-bundle discovery that binds by declared scene identity rather than an inferred directory name. Verify npm/GitHub publication metadata separately; passing evidence never implies user approval.
18
18
 
19
19
  ## Why MotionLoom
20
20
 
@@ -29,6 +29,7 @@ MotionLoom turns that fragile sequence into a bounded production system. Its dur
29
29
  | **Project binding** | Project context, package/design-token discovery and durable `.motionloom/project-memory.json` | Reuse memory across projects or silently continue through missing context |
30
30
  | **Motion planning** | Framework-aware Motion Spec, timing/easing/accessibility budgets and framework selection | Present a template as a project-integrated result |
31
31
  | **Asset provenance** | Required `source_binding`, authority, license and SHA-256 traceability | Promote unknown, unlicensed or placeholder production assets |
32
+ | **Asset consistency** | Measured multi-frame geometry, pivot/footline stability, atlas boundaries and layered-map contracts | Treat a heuristic warning or deterministic pass as artist approval or production authorization |
32
33
  | **Runtime truth** | Lottie/dotLottie, SVG cutout rig, Rive, GSAP and Framer Motion evidence from real runtime paths | Call scaffold, static validation or a heuristic score visual approval |
33
34
  | **Agent intelligence** | Project graph, provenance, Motion IR, replay, semantic lint, continuity and fix plan | Convert confidence, benchmark output or warnings into approval |
34
35
  | **Human review** | Exact candidate URL, frame checkpoints, checklist, review artifact and handoff report in Dev Lab | Confirm, push or open a PR without explicit user authorization |
@@ -55,47 +56,69 @@ Every handoff is machine-readable. The typical bundle under `artifacts/<task-id>
55
56
 
56
57
  ## Quick start
57
58
 
58
- ### Install the public CLI
59
+ ### Start once. Continue your normal work.
59
60
 
60
61
  ```bash
61
- npm install --global motionloom
62
- motionloom doctor --json
63
- motionloom --help
62
+ cd /path/to/your/project
63
+ npx --yes motionloom setup
64
+ npx --no-install motionloom status
64
65
  ```
65
66
 
66
- MotionLoom supports **Node.js 18+** and **Python 3.11+** on Ubuntu, macOS and Windows. The npm wrapper is the cross-platform surface: it discovers the platform Python executable and delegates to the same canonical contracts used by a repository checkout.
67
+ This is the entire first-run path. MotionLoom detects the host project and package manager, installs a local development dependency, creates project-bound memory, and adds a small Agent router without overwriting existing guidance. `motionloom init` is an equivalent alias when an Agent or user prefers that wording. It never creates a scene, calls a generator, runs an asset gate, opens Dev Lab, commits, pushes, opens a PR, or grants approval.
68
+
69
+ After this, keep building your application normally. When you actually begin an animation task, tell your Agent to use MotionLoom. The Agent then reads the relevant workflow rather than showing every schema, contract, or production rule up front.
70
+
71
+ Use these only if you need them:
72
+
73
+ ```bash
74
+ npx --yes motionloom init --dry-run --json # preview; no install or file changes
75
+ npx --no-install motionloom doctor # check the installed package
76
+ npx --no-install motionloom repair --yes # restore only missing managed pieces
77
+ ```
78
+
79
+ MotionLoom supports **Node.js 18+** and **Python 3.11+** on Ubuntu, macOS and Windows. `npx` is the recommended first-run surface; after setup, use the project-local binary through `npx --no-install motionloom ...`. A global install remains optional, not required.
80
+
81
+ ### When you begin animation work
82
+
83
+ The detail level follows the job rather than the installation. A simple interface motion task starts with a scene plan and runtime render. Importing a third-party or AI-generated visual asset adds the intake path. A production runtime package adds rig, provenance and runtime-specific checks. These are safeguards for the affected artifact, not rules imposed on unrelated product work.
67
84
 
68
- ### Start from a real project
85
+ | Your task | Start with | MotionLoom reveals next |
86
+ |---|---|---|
87
+ | UI motion, loading state, page transition | `motionloom analyze . --init-memory` | Scene plan, runtime render and Dev Lab review |
88
+ | Imported or AI-generated frames, sprite atlas, layered map | The same project analysis | Provenance and measured asset-consistency/intake steps |
89
+ | Rive, Spine or other packaged runtime asset | The same project analysis | Package, rig and runtime evidence steps |
90
+
91
+ ### Advanced: start from a real project
69
92
 
70
93
  Run the first commands from the project that owns the animation. Do not copy the example context into production; generate a fresh context from the host project.
71
94
 
72
95
  ```bash
73
96
  cd /path/to/your/project
74
97
 
75
- # Understand the project and bootstrap/recover durable memory.
76
- motionloom analyze . --init-memory
77
- motionloom memory inspect --project-root . --json
98
+ # Setup already analyzed the project and bootstrapped durable memory.
99
+ npx --no-install motionloom status --json
100
+ npx --no-install motionloom memory inspect --project-root . --json
78
101
 
79
102
  # Bound traversal when the host project is large; truncation is reported, never hidden.
80
- motionloom analyze . --max-files 2500 --max-bytes 25000000 --max-seconds 10
103
+ npx --no-install motionloom analyze . --max-files 2500 --max-bytes 25000000 --max-seconds 10
81
104
 
82
105
  # Plan and generate the scene using the selected framework.
83
106
  python3 /path/to/MotionLoom/src/core/spec.py generate loading \
84
107
  --context project-context.json --output motion-spec.json --loop
85
108
 
86
109
  # Render real runtime evidence and prepare the Dev Lab review handoff.
87
- motionloom render loading
88
- motionloom devlab loading
110
+ npx --no-install motionloom render loading
111
+ npx --no-install motionloom devlab loading
89
112
 
90
113
  # Validate the exact task bundle before any Git side effect.
91
- motionloom quality-gate --scene loading \
114
+ npx --no-install motionloom quality-gate --scene loading \
92
115
  --context project-context.json \
93
- --task-dir artifacts/loading-task \
116
+ --task-dir artifacts/<task-id> \
94
117
  --require-browser-review --require-intelligence --require-p1 \
95
- --require-benchmark --require-telemetry --require-attestation
118
+ --require-benchmark --require-telemetry --require-attestation --require-asset-provenance
96
119
 
97
120
  # Local-only by default. A user must review and explicitly authorize side effects.
98
- motionloom pr loading --task-dir artifacts/loading-task
121
+ npx --no-install motionloom pr loading --task-dir artifacts/<task-id>
99
122
  ```
100
123
 
101
124
  For a source checkout, use `git clone https://github.com/lenhonbp/MotionLoom.git`, run `npm install`, and replace the global command with `node bin/motionloom.mjs` or the corresponding Python/Node script shown in the [development guide](CONTRIBUTING.md).
@@ -147,6 +170,82 @@ MotionLoom keeps distinct layers distinct:
147
170
 
148
171
  `approval` remains `false` in attestation and verifier artifacts. The default PR mode is local-only (`OPEN_PR=0`); commit, push and pull-request operations remain explicit side effects.
149
172
 
173
+ ## Asset provenance tiers
174
+
175
+ MotionLoom separates **asset origin**, **runtime readiness**, **production eligibility** and **human approval**. This is essential for AI-first workflows: an Agent may create a valid pilot, ingest it into the real runtime and expose it in Dev Lab without being allowed to call that pilot artist-authored or approved for production.
176
+
177
+ | Authority / origin | Runtime behavior | Production behavior |
178
+ |---|---|---|
179
+ | `ai_generated` | `runtime_ready` when hashes, license metadata and runtime evidence pass | Never `production_eligible` |
180
+ | `ai_assisted` | `runtime_ready` after contract validation | Eligible only after recorded human sign-off and full gate |
181
+ | `ai_assisted_human_reviewed` | `runtime_ready` | `review_required` until the declared production gate is complete; no automatic approval |
182
+ | `artist_authored` | Runtime-testable when the package is valid | Eligible after verified authority, license, runtime and quality checks; not from Agent self-assertion |
183
+ | `unknown` | `blocked` | Blocked |
184
+
185
+ The readiness value `production_approved` is reserved for a human decision and is not minted by `asset-provenance`, `quality-gate`, attestation or any Agent. Use the following commands against the exact scene artifact:
186
+
187
+ ```bash
188
+ motionloom asset-provenance validate --input src/output/<scene>/asset-provenance.json --json
189
+ motionloom asset-provenance check --input src/output/<scene>/asset-provenance.json \
190
+ --root src/output/<scene> --mode runtime \
191
+ --manifest src/output/<scene>/manifest.json --json
192
+ motionloom asset-provenance check --input src/output/<scene>/asset-provenance.json \
193
+ --root src/output/<scene> --mode production \
194
+ --manifest src/output/<scene>/manifest.json --json
195
+ ```
196
+
197
+ The [AI-generated pilot fixture](examples/agent-consumer/ai-generated-pilot-provenance.json) demonstrates the intended boundary: it is transparent and runtime-ingestible, but it cannot pass a production gate merely because an Agent declared it complete.
198
+
199
+ ## Asset consistency compiler
200
+
201
+ When an Agent creates a character action across many frames, packs a sprite atlas or builds a parallax background, visual plausibility is not enough. MotionLoom accepts a machine-readable contract and measures the referenced artifacts instead of trusting declared dimensions. The standard-library analyzer supports RGBA, RGB with `tRNS`, indexed PNG palettes and grayscale-with-alpha PNGs, so the npm package remains usable on Ubuntu, macOS and Windows without Pillow or native image dependencies.
202
+
203
+ | Contract | Deterministic checks | Typical failure surfaced |
204
+ |---|---|---|
205
+ | `identity` | Asset ID, style profile, palette/camera/scale/pivot and reference hash | Frame set silently changes character identity or visual rules |
206
+ | `action-set` | FPS, frame count, explicit loop seam, pose timeline, sockets and events | A loop claims continuity without matching first/last frame or required event contract |
207
+ | `frame-geometry` | Canvas size, alpha bounds, SHA-256, pivot/footline drift, bbox drift and opaque pixels outside frame rect | One frame contains bleed from a neighboring frame or shifts the feet/pivot |
208
+ | `atlas` | Region bounds/overlap, rotation policy and opaque pixels outside declared regions | Packing leaves contamination, overlap or ambiguous UV ownership |
209
+ | `layered-map` | Z-order uniqueness, parallax ordering, tile seams, layer/world bounds and camera-safe bounds | A background layer seams at loop edges or the camera can leave world bounds |
210
+
211
+ Run one contract at a time and keep its JSON result in the task bundle:
212
+
213
+ ```bash
214
+ motionloom asset-consistency validate --kind action-set \
215
+ --input src/output/<scene>/hero-walk-action-set.json --root src/output/<scene> --json
216
+ motionloom asset-consistency validate --kind atlas \
217
+ --input src/output/<scene>/hero-atlas-contract.json --root src/output/<scene> --strict --json
218
+ motionloom asset-consistency report --kind layered-map \
219
+ --input src/output/<scene>/forest-layered-map.json --root src/output/<scene> --json
220
+ ```
221
+
222
+ For a production scene, add `consistency_ref` and `consistency_kind` to `manifest.json`. The quality gate and report then bind the contract to the scene only when it is declared; use `--require-asset-consistency` when the task requires the contract to pass. Consistency results expose measured evidence and block mismatches, but they do not grant `artist_authored`, `production_eligible`, `production_approved` or PR authorization.
223
+
224
+ The repository keeps pass/fail examples under [`examples/agent-consumer/asset-consistency/`](examples/agent-consumer/asset-consistency/) and regression coverage in [`tests/scripts/test_asset_consistency.py`](tests/scripts/test_asset_consistency.py). The npm package exposes `asset:consistency` and `asset:audit` for a quick local smoke check.
225
+
226
+ ## Provider-neutral Artifact Intake and runtime candidates
227
+
228
+ An AI image, video, pixel-art, rigging or motion-capture tool can contribute an asset without becoming the source of truth for production. MotionLoom records a **generation receipt** (what generated or transformed the asset), a **control track** (reference/style/pose/camera/action controls) and an **export manifest** (exact emitted files and hashes). The provider-neutral registry then checks whether the adapter is evidence-backed, scaffold-only or blocked; it does not invoke a provider API or hold provider credentials.
229
+
230
+ ```bash
231
+ # Bind an Agent-managed ImageGen-style output or another provider to deterministic artifacts.
232
+ motionloom artifact-intake intake --root <project-root> \
233
+ --registry artifact-adapter-registry.json \
234
+ --receipt <generation-receipt.json> \
235
+ --controls <control-track.json> \
236
+ --export-manifest <export-manifest.json> --json
237
+
238
+ # Permit only an intake bundle and consistency contracts whose refs/hashes agree.
239
+ motionloom runtime-candidate validate --root <project-root> \
240
+ --input <runtime-candidate.json> --json
241
+
242
+ # Validate skeleton/action/socket/event/export compatibility against an adapter registry.
243
+ motionloom rig-compatibility validate --root <project-root> \
244
+ --registry rig-adapter-registry.json --input <rig-compatibility.json> --json
245
+ ```
246
+
247
+ The public bundle under [`examples/agent-consumer/artifact-intake/`](examples/agent-consumer/artifact-intake/) demonstrates an ImageGen-shaped receipt without relying on an external API. It advances only to **`runtime_test_ready`** when hashes and corresponding identity/action/frame contracts agree. The companion rig contract demonstrates adapter/skeleton/socket/event checks. Both evidence classes remain **review-required**: they never promote `ai_generated` material, claim `artist_authored`, replace real runtime evidence or approve a pull request. Dev Lab displays their adapter status, bound paths and findings before the user can record review.
248
+
150
249
  ## How an Agent uses the Skill
151
250
 
152
251
  The public integration surfaces are intentionally small and inspectable:
@@ -177,6 +276,10 @@ The Skill can trigger or suggest an internal browser-capable Agent to open the D
177
276
  | `artifacts/<task-id>/` | Per-task evidence, report and handoff bundle |
178
277
  | `schemas/visual-truth.schema.json`, `scripts/visual-truth.py` | Provenance-bound visual comparison and review explanation contract |
179
278
  | `schemas/remediation-history.schema.json`, `scripts/remediation-learning.py` | Append-only remediation/benchmark ledger and aggregate learning metrics |
279
+ | `schemas/asset-provenance.schema.json`, `scripts/asset-provenance.py` | Tiered origin, authority, readiness, license, hash and human-review gate for asset candidates |
280
+ | `schemas/generation-receipt.schema.json`, `scripts/artifact-intake.py` | Provider-neutral receipt/control/export intake with hash-bound adapter evidence |
281
+ | `schemas/runtime-candidate.schema.json`, `scripts/runtime-candidate.py` | Control-to-consistency bridge that permits only hash-compatible runtime test candidates |
282
+ | `schemas/rig-compatibility.schema.json`, `scripts/rig-compatibility.py` | Skeleton/socket/action/event/export compatibility evidence for runtime adapters |
180
283
  | `tests/` | Regression, adversarial and deep-stress evaluation harnesses |
181
284
 
182
285
  ## Documentation map
@@ -189,6 +292,9 @@ The Skill can trigger or suggest an internal browser-capable Agent to open the D
189
292
  | Understand Agent intelligence | [Intelligence Core](references/intelligence-core.md) and [roadmap](ROADMAP.md) |
190
293
  | Run labeled project evaluation | [Project corpus manifest](tests/evals/project-corpus.json) and `python3 scripts/eval-projects.py --allow-insufficient` |
191
294
  | Understand trust boundaries | [Signed attestation](references/signed-attestation.md) and [2.0.0 release note](docs/releases/2.0.0.md) |
295
+ | Classify AI-generated or assisted assets | [Asset provenance tiers](schemas/asset-provenance.schema.json), `motionloom asset-provenance`, and the [production checklist](docs/CHECKLIST.md) |
296
+ | Bind an internal skill or provider output before runtime testing | [Artifact Intake examples](examples/agent-consumer/artifact-intake/), `motionloom artifact-intake`, and [AI/Agent research](docs/research/ai-animation-tools-2026-report.md) |
297
+ | Check control-to-runtime and rig compatibility | `motionloom runtime-candidate`, `motionloom rig-compatibility`, and [production checklist](docs/CHECKLIST.md) |
192
298
  | Validate visual truth before review/PR | `motionloom visual-truth build|validate` and [production checklist](docs/CHECKLIST.md) |
193
299
  | Check current evidence posture | [Current status](docs/STATUS.md), [external corpus evidence](docs/audits/external-project-corpus-2026-08-13.md) and [historical audit snapshot](AUDIT-REPORT.md) |
194
300
  | Contribute code or docs | [CONTRIBUTING.md](CONTRIBUTING.md) |
package/ROADMAP.md CHANGED
@@ -2,9 +2,9 @@
2
2
 
3
3
  MotionLoom's roadmap is organized around one question: **does this reduce incorrect animation iterations while keeping the user in control of quality and Git side effects?** A roadmap item is not complete because a prompt or template exists; it is complete when the contract, evidence, regression coverage and Agent handoff are inspectable.
4
4
 
5
- ## Current baseline: 2.2.0 release candidate
5
+ ## Current baseline: 2.4.0 release target
6
6
 
7
- The current repository baseline includes project-aware analysis, durable Project Memory, context-bound Motion Spec, source binding, real runtime adapters for Lottie/dotLottie/SVG cutout/Rive/GSAP/Framer Motion, Dev Lab browser review, Intelligence Core, semantic and continuity feedback, runtime telemetry, external evidence verification, signed attestation, Agent interoperability surfaces, Visual Truth, Remediation Learning and cross-platform CLI/CI contracts. The package metadata is at `2.2.0`; remote publication remains pending explicit release approval.
7
+ The current repository baseline includes project-aware analysis, durable Project Memory, context-bound Motion Spec, source binding, real runtime adapters for Lottie/dotLottie/SVG cutout/Rive/GSAP/Framer Motion, Dev Lab browser review, Intelligence Core, semantic and continuity feedback, runtime telemetry, external evidence verification, signed attestation, Agent interoperability surfaces, Visual Truth, Remediation Learning, AI-first asset provenance and cross-platform CLI/CI contracts. The `2.4.0` release target adds a code-authored runtime-first lane with a review-first Framer Motion pilot and task resolution by declared scene identity, without weakening review or Git side-effect boundaries.
8
8
 
9
9
  ## Next milestones
10
10
 
@@ -14,10 +14,15 @@ The current repository baseline includes project-aware analysis, durable Project
14
14
  | **2.3** | Remediation Learning | User-confirmed correction count, first-pass acceptance and rerender-avoidance ledger | Included in 2.2.0 candidate |
15
15
  | **2.4** | Runtime Scale | Multi-project, browser and device corpus with capability compatibility explanations | Planned |
16
16
  | **2.5** | Agent Interoperability | Versioned schemas, compatibility matrix and replayable task bundles across Agents | Included in 2.2.0 candidate |
17
+ | **2.6** | Agent-created Asset Provenance | Explicit origin/authority/readiness tiers; runtime ingest without automatic production approval; fail-closed production gate | Included in 2.3.0 release |
18
+ | **2.7** | One-command Onboarding | Project-bound setup/status/repair, Agent router merge, durable memory bootstrap and cross-platform installation recipe | Included in 2.3.0 release |
19
+ | **2.8** | Asset Consistency Compiler | Measured frame geometry, atlas contamination and layered-map contracts with fail-closed regression and optional scene quality-gate binding | Implemented in working tree; pending validation/release |
20
+ | **2.9** | Provider-neutral Artifact Intake | Hash-bound generation receipt, control track and export manifest for internal skills/providers, with no embedded credentials or automatic authority | Implemented in working tree; pending validation/release |
21
+ | **3.0** | Control-to-runtime and rig evidence | Runtime candidate bridge plus skeleton/socket/action/event/export compatibility evidence surfaced in Dev Lab before user review | Implemented in working tree; pending validation/release |
17
22
 
18
23
  ## Working-tree implementation status
19
24
 
20
- The current implementation pass has delivered the contracts behind milestones 2.2, 2.3 and 2.5: canonical Agent discovery/install surfaces, consumer fixtures and a Ubuntu/macOS/Windows matrix; Visual Truth is bound into scene manifests, Dev Lab handoff and the review-first quality gate; Remediation Learning records hash-chained benchmark/outcome history; and CI replay evidence is rebuilt after generated artifacts. The remaining release work is remote tag/Release creation, npm publication and paired evaluation on additional real projects.
25
+ The current implementation pass has delivered the contracts behind milestones 2.2, 2.3, 2.5, 2.6 and 2.7, and has implemented the 2.8–3.0 layers in the working tree: canonical Agent discovery/install surfaces, consumer fixtures and a Ubuntu/macOS/Windows matrix; Visual Truth is bound into scene manifests, Dev Lab handoff and the review-first quality gate; Remediation Learning records hash-chained benchmark/outcome history; CI replay evidence is rebuilt after generated artifacts; asset provenance remains production fail-closed; `npx --yes motionloom setup` bootstraps a project without overwriting its Agent guidance; consistency contracts measure actual frame/atlas/map artifacts; Artifact Intake binds provider/internal-skill records to actual exports; runtime candidates require compatible contract references; and rig evidence validates adapter/skeleton/socket/event compatibility before review. The remaining work is full validation, maintainer release verification and paired evaluation on additional real projects.
21
26
 
22
27
  ## Product principles
23
28
 
package/SKILL.md CHANGED
@@ -7,7 +7,7 @@ description: >-
7
7
  validate, review, or deliver animation inside an existing project.
8
8
  license: MIT
9
9
  metadata:
10
- version: "2.2.0"
10
+ version: "2.4.0"
11
11
  target_frameworks: "lottie,dotlottie,rive,gsap,framer-motion,spine,threejs"
12
12
  verified_runtimes: "lottie-json,dotlottie-package,svg-cutout-rig,rive,gsap,framer-motion"
13
13
  ---
@@ -18,19 +18,31 @@ metadata:
18
18
 
19
19
  Treat every animation request as a production task, not as an isolated asset-generation prompt. Always bind the work to the host project's context, emit machine-readable artifacts, render through the target runtime, expose review evidence in Dev Lab, and stop before commit when a required gate or user confirmation is missing.
20
20
 
21
+ ## Fast onboarding for a real project
22
+
23
+ When MotionLoom is not installed in the host project, prefer the single cross-platform entrypoint `npx --yes motionloom init`. It detects the project root and package manager, installs a local devDependency, safely merges a marked MotionLoom router block into `AGENTS.md`, runs discovery, creates project-bound context and durable memory, and returns `ready`, `needs_setup` or `blocked`. `init` is a quiet quick start: it must not create a scene, trigger asset/runtime gates, open Dev Lab, commit, push, open a PR, grant approval or promote asset provenance. Use `npx --yes motionloom init --dry-run --json` before mutation, `npx --no-install motionloom status --json` for read-only checks, and `npx --no-install motionloom repair --yes` to re-apply only missing managed pieces. Keep `setup` as a compatible alias.
24
+
25
+ For Agent or CI composition, consume JSON and preserve the exit code. If the project is already a source checkout, use `node bin/motionloom.mjs setup --project-root <project> --motionloom-root <motionloom-checkout> --skip-install`; do not copy `project-context.json` or `.motionloom/project-memory.json` from the MotionLoom repository.
26
+
21
27
  ## Required workflow
22
28
 
23
- 1. **Understand** — read the host project manifest and run `motionloom analyze <project-path> --init-memory` (or `python scripts/analyze.py <project-path> --init-memory` in a repository checkout). Load `project-context.json` and `.motionloom/project-memory.json` from the audited project. If context is missing, stale or ambiguous, stop at `needs_context` and refresh before generation.
29
+ 1. **Understand** — run `motionloom init` once for a new host project, then continue normal product work until an animation task exists. At animation-task start, read the host project manifest and load the generated `project-context.json` and `.motionloom/project-memory.json`. For an already configured project, run `motionloom status --json` and refresh with `motionloom analyze <project-path> --init-memory` when context is missing, stale or ambiguous. In a repository checkout, the equivalent is `node bin/motionloom.mjs init` or `python scripts/analyze.py <project-path> --init-memory`.
24
30
  2. **Plan** — classify the animation, select a framework, and generate a context-bound `motion-spec.json` with timing, easing, loop, accessibility, performance and source authority.
25
31
  3. **Source** — resolve an authoritative asset from the project or `assets/library/`. Record attribution, license and checksum in the scene manifest's required `source_binding`; the binding's SHA-256 must match the bytes referenced by `manifest.file`. Do not promote an unknown or placeholder asset to production.
32
+ 3a. **Classify asset provenance** — create or load `asset-provenance.json` with `motionloom asset-provenance`. Treat Agent-created material as ingestible only when its origin, generator task, license, file hash and derivation chain are explicit. Use `code_authored` for an authored runtime scene such as GSAP or Framer Motion; it may be runtime-tested and marked `review_required`, but never self-promotes to production eligibility or approval. `ai_generated` may be runtime-tested but is never production-eligible; `ai_assisted` requires human sign-off; `artist_authored` and `production_approved` cannot be self-asserted by an Agent or quality gate. Use `check --mode runtime` for candidate ingest and `check --mode production` only for a full production gate.
33
+ 3b. **Compile asset consistency** — when a task contains multi-frame character actions, sprite sheets/atlases or layered maps, create the matching identity, action-set, frame-geometry, atlas and layered-map contracts from `schemas/`. Run `motionloom asset-consistency validate --kind <identity|action-set|frame-geometry|atlas|layered-map> --input <contract> --root <asset-root> --json`. The compiler measures actual PNG alpha bounds, pivot/footline/bbox drift, frame and atlas contamination, region overlap, parallax/z-order, tile seams and camera-safe bounds. A pass is deterministic contract evidence only; it never upgrades provenance, artist authority, production eligibility or human approval.
34
+ 3c. **Ingest generation artifacts** — before using output from an internal skill or external provider, bind it with a `generation-receipt`, `control-track` and `export-manifest`. Run `motionloom artifact-intake intake --root <project-root> --registry artifact-adapter-registry.json --receipt <receipt> --controls <controls> --export-manifest <export> --json`. For a single-character AI frame sequence, first run `motionloom build-ai-pilot`: it rejects painted checkerboards, all-opaque RGBA, insufficient measured padding and canvas-spanning detached residue. Visually inspect the isolated output too: edge-connected alpha removal cannot prove that disconnected opaque artifacts are absent. The core path makes no provider call and stores no secret; adapters are evidence descriptors. Use `--provider chatgpt` for user-provided ChatGPT bytes so the receipt records `openai.chatgpt` and `user-mediated`; never relabel them as `internal-imagegen`. Both adapters are scaffold-only metadata, not proof of runtime readiness, artist authority or approval.
35
+ 3d. **Build the runtime candidate and rig proof** — bind the intake bundle to identity/action/frame contracts with `motionloom runtime-candidate validate --root <project-root> --input <runtime-candidate.json> --json`, then validate the declared skeleton, sockets, actions, events, export target and runtime adapter with `motionloom rig-compatibility validate --root <project-root> --registry rig-adapter-registry.json --input <rig-contract.json> --json`. A passing candidate is `runtime_test_ready` and remains review-required; it cannot stand in for a production rig, human review or `production_approved`.
26
36
  4. **Generate** — use the matching template or rig implementation. For body animation, preserve named anatomy, pivot and parent-first hierarchy.
27
37
  5. **Render** — run the platform-neutral Node entrypoint for scene output, or `node scripts/runtime-adapters.mjs` for the verified Rive/GSAP/Framer Motion adapter matrix. Acceptance requires runtime evidence at 0/50/100%, not a static placeholder. Keep the render metadata beside the snapshots.
28
38
  6. **Bind Intelligence Core** — build a framework-neutral `motion-ir.json`, `project-graph.json`, `provenance.json`, `replay-bundle.json`, `semantic-lint-report.json` and `semantic-lint-benchmark.json` with `python3 scripts/intelligence.py`. Select only a capability registry entry whose status is `verified`, whose evidence is fresh and whose compatibility matches the target environment. A confidence score or benchmark result can prioritize investigation; neither can replace deterministic or human acceptance.
29
39
  6a. **Harden the trust boundary** — keep artifact and task bundles inside the repository/task root, reject symlinked evidence, bind replay to its exact `task_dir`, `task_id` and scene, select one deterministic report bundle per scene, and require browser candidate/review identity and expiry checks before readiness. The Dev Lab must reject cross-origin or identity-mismatched artifact bases. In strict runtime-observability runs, capture `runtime-telemetry.json` and a read-only `evidence-verifier-report.json`; verifier output must preserve `approval: false`. These checks expose risk and prevent evidence mixing, but do not turn heuristics or evidence integrity into approval.
30
40
  6b. **Attest** — derive a canonical statement from the exact scene/task hashes, sign it with an Ed25519 key through `scripts/attestation.py`, and verify it with the independent `scripts/attestation-verifier.py` against a fail-closed `trust-policy.json`. DSSE/SLSA-compatible attestation proves signer and binding integrity only; `approval` must remain `false` and never replaces user review.
31
41
  7. **Visual truth and browser review handoff** — after runtime rendering, build `visual-truth.json` from real baseline/candidate PNGs with `motionloom visual-truth build`. The contract records frame hashes, dimensions, runtime/source/manifest provenance and region-level review explanations; a changed frame means `review_required`, never automatic failure or approval. Then run `python3 scripts/review-hook.py prepare --task-dir artifacts/<task-id> --lab-url <internal-lab-url>`. The hook prepares the exact candidate and emits a JSON action for a browser-capable Agent. Trigger or suggest that Agent to open the emitted URL, inspect frames 0/50/100, scrub the timeline and ask the user to review. This is not a separate Dev Lab Skill; it is a required post-render handoff.
42
+
43
+ > **Runtime-first reference:** `examples/agent-consumer/runtime-pilot/` and `src/output/runtime-pilot-framer/` demonstrate a code-authored Framer Motion lane with hash-bound Intake controls, deterministic 0/50/100 Playwright frames, strict runtime candidate validation, verifier and `approval: false` attestation before a prepared Dev Lab review. It is evidence of the pipeline, not a release approval or a substitute for an imported art package.
32
44
  8. **Review capture** — the browser Agent calls `window.__lab.getReview()` after the user approves or requests changes, then persists it with `python3 scripts/report.py review --task-dir artifacts/<task-id> --candidate-id <id> --decision approved|changes_requested --reviewer user`. A change request returns to generation; no approval means no PR.
33
- 9. **Validate** — run `motionloom visual-truth validate --root . --input src/output/<scene>/visual-truth.json --scene <scene> --task-id <task-id>`, `motionloom review-hook validate --task-dir artifacts/<task-id>`, `motionloom intelligence semantic-lint benchmark --task-dir artifacts/<task-id> --iterations 25 --threshold-ms 500`, `motionloom runtime-telemetry <scene> artifacts/<task-id>`, the independent attestation verifier, `motionloom report-contract --root . --scenes-file <changed-scenes> --require-attestation`, `motionloom quality-gate --scene <scene> --context <context-path> --task-dir artifacts/<task-id> --require-intelligence --require-p1 --require-benchmark --require-telemetry --require-attestation --require-visual-truth`, and `motionloom doctor --json` when validating the Skill package itself.
45
+ 9. **Validate** — run `motionloom asset-provenance check --input src/output/<scene>/asset-provenance.json --root src/output/<scene> --mode runtime|production --manifest src/output/<scene>/manifest.json`, `motionloom visual-truth validate --root . --input src/output/<scene>/visual-truth.json --scene <scene> --task-id <task-id>`, `motionloom review-hook validate --task-dir artifacts/<task-id>`, `motionloom intelligence semantic-lint benchmark --task-dir artifacts/<task-id> --iterations 25 --threshold-ms 500`, `motionloom runtime-telemetry <scene> artifacts/<task-id>`, the independent attestation verifier, `motionloom report-contract --root . --scenes-file <changed-scenes> --require-attestation`, `motionloom quality-gate --scene <scene> --context <context-path> --task-dir artifacts/<task-id> --require-intelligence --require-p1 --require-benchmark --require-telemetry --require-attestation --require-visual-truth --require-asset-provenance`, and `motionloom doctor --json` when validating the Skill package itself.
34
46
  10. **Report** — create or update an artifact bundle with `python3 scripts/report.py`. Record facts with `report.py add`, structural defects with `report.py structure`, collect checksums with `report.py collect`, and run `report.py check` before rendering the final report. The final report must state completed, verified, not completed, blocked/failed, structure problems, browser candidate/review evidence and the recommended next Agent/Skill.
35
47
  11. **Learn** — after a user-confirmed fix or a deterministic benchmark, record it with `motionloom remediation-learning record-outcome|record-benchmark`. Run `summary` to expose correction count, first-pass acceptance, success rate, issue-class outliers and benchmark pass rate. Only `--user-confirmed` outcomes contribute to remediation acceptance metrics.
36
48
  12. **Confirm** — only after approved browser review and a passing quality gate run the platform-neutral PR preparation command. Commit, push and open PR are explicit side effects.
@@ -63,6 +75,7 @@ Only user-confirmed decisions and outcomes may become durable remediation memory
63
75
  - Read `references/intelligence-core.md` before building or validating Intelligence Core artifacts.
64
76
  - Read `docs/research/AGENT-PROTOCOL-FINDINGS.md` before exposing MotionLoom through Agent tools or MCP resources.
65
77
  - Read `references/agent-interoperability.md` when installing MotionLoom into Codex, Claude Code, Cursor, OpenCode or another Agent environment; run `motionloom discovery check --root <motionloom-checkout> --json` before relying on a surface.
78
+ - Read `docs/research/agent-skill-ecosystem-notes.md` and `docs/research/ai-animation-tools-2026-report.md` before selecting a provider or internal capability; use its evidence to distinguish a scaffold adapter from a verified runtime path.
66
79
 
67
80
  ## Non-negotiable contracts
68
81
 
@@ -74,6 +87,12 @@ Only user-confirmed decisions and outcomes may become durable remediation memory
74
87
  - Destructive Git actions require explicit confirmation. Use `OPEN_PR=0` for local review-only runs.
75
88
  - Intelligence Core artifacts are task-bound: graph, provenance, Motion IR and replay evidence must not be reused across tasks without revalidation.
76
89
  - Provenance hashes materials and products; replay must fail on tampered or missing files; stale capability evidence must not be selected for production acceptance.
90
+ - Asset provenance is tiered: `code_authored` is runtime-only and may be `review_required`; `ai_generated` is `runtime_ready` but not `production_eligible`; `ai_assisted` becomes eligible only after human sign-off; `ai_assisted_human_reviewed` remains review-bound; `artist_authored` requires a verified human/artist record and full gate; `unknown` is `blocked`.
91
+ - `production_approved` is a human decision only. An Agent, generator metadata, signed attestation or quality gate may preserve or verify a decision but may never mint it; `approval` remains `false` in machine-generated evidence.
92
+ - Asset provenance binds each declared file to a SHA-256, license/source metadata, generator or derivation chain, runtime evidence and, where applicable, human review. Production checks fail closed on unknown origin, self-asserted artist authority, missing evidence or hash drift.
93
+ - Asset consistency is artifact-first and fail-closed: declared frame geometry, hashes, atlas regions and layered-map bounds must agree with measured runtime/source files. Heuristic warnings remain visible and may become blocking under `--strict`; no consistency result is an approval decision.
94
+ - Artifact Intake is provider-neutral and hash-bound: receipt, control track, export manifest, provenance reference and adapter registry evidence must agree with the actual output bytes. Provider metadata, a prompt, a skill name, a model identifier or an adapter status cannot mint artist authority, production eligibility, runtime proof or approval.
95
+ - A runtime candidate may become `runtime_test_ready` only when its intake and referenced consistency contracts pass. Rig compatibility must bind a supported adapter, skeleton/socket/action/event requirements and runtime evidence; `static-validated` and `scaffold` remain non-production states.
77
96
  - Browser-review candidates are single-use, time-bounded and bound to the exact task, scene and candidate identity; Dev Lab artifact/task bases must be same-origin and identity-consistent before staging a review decision.
78
97
  - Report completeness must select one deterministic passing task bundle per scene and fail on ambiguous ties; a valid artifact is never sufficient to bypass explicit user approval.
79
98
  - Runtime telemetry must bind task, scene, source, manifest, Motion IR and deterministic scrub points; tampered, stale, missing or cross-task telemetry is a verification failure.
@@ -89,6 +108,10 @@ The audited production paths are **Lottie JSON runtime rendering, dotLottie v2 p
89
108
 
90
109
  Every production `src/output/<scene>/manifest.json` must include a `source_binding` object matching `schemas/scene-manifest.schema.json`. The acceptance gate rejects a missing binding, a mismatched source path, an unknown license/authority or a stale SHA-256.
91
110
 
111
+ Every production candidate that includes generated or assisted material must also reference `asset-provenance.json`. Validate it with `motionloom asset-provenance`; use runtime mode to allow safe ingest/testing and production mode to require `production_eligible`. This contract is deliberately separate from step-level `schemas/provenance.schema.json`: the former answers who/what created an asset and whether it may advance, while the latter records the pipeline steps that handled it.
112
+
113
+ For multi-frame or layered assets, reference a consistency contract from the scene manifest with `consistency_ref` and `consistency_kind` (`identity`, `action-set`, `frame-geometry`, `atlas` or `layered-map`). `quality-gate.py --require-asset-consistency` and `report.py` validate the reference only when declared; missing references remain visible rather than being silently inferred.
114
+
92
115
  The Intelligence Core contracts are defined in `schemas/project-graph.schema.json`, `schemas/provenance.schema.json`, `schemas/capability-registry.schema.json`, `schemas/motion-ir.schema.json`, `schemas/signed-attestation.schema.json` and `schemas/trust-policy.schema.json`. They make project relationships, supply-chain steps, runtime selection, framework-neutral intent and signer trust inspectable without relying on prose.
93
116
 
94
117
  ```bash
@@ -99,6 +122,14 @@ node scripts/to-dotlottie.mjs --scene-dir src/output/<scene> --output src/output
99
122
  motionloom memory init --project-root <project-path>
100
123
  motionloom memory recover --project-root <project-path> --json
101
124
 
125
+ # Measure multi-frame, atlas or layered-map consistency from real artifacts.
126
+ motionloom asset-consistency validate --kind frame-geometry \
127
+ --input src/output/<scene>/hero-walk-frame-geometry.json \
128
+ --root src/output/<scene> --json
129
+ motionloom asset-consistency validate --kind atlas \
130
+ --input src/output/<scene>/hero-atlas-contract.json \
131
+ --root src/output/<scene> --strict --json
132
+
102
133
  # Run the official runtime adapters in a real browser harness.
103
134
  node scripts/runtime-adapters.mjs
104
135
 
package/agent-card.json CHANGED
@@ -1,9 +1,12 @@
1
1
  {
2
2
  "card_version": "1.0",
3
3
  "name": "motionloom",
4
- "version": "2.2.0",
5
- "description": "Project-aware animation production with durable Project Memory, graph, provenance, framework-neutral motion IR, runtime verification and telemetry, Visual Truth, Remediation Learning, DSSE-compatible signed attestation, external evidence verification, semantic feedback, continuity checks, internal browser review, trust-boundary hardening and deterministic Agent handoff.",
4
+ "version": "2.4.0",
5
+ "description": "Project-aware animation production with durable Project Memory, provider-neutral Artifact Intake, hash-bound control-to-runtime candidates, tiered asset provenance, framework-neutral motion IR, rig compatibility, runtime verification and telemetry, Visual Truth, Remediation Learning, DSSE-compatible signed attestation, internal browser review, trust-boundary hardening and deterministic Agent handoff.",
6
6
  "capabilities": [
7
+ "project.setup",
8
+ "project.status",
9
+ "project.repair",
7
10
  "agent.discovery.check",
8
11
  "agent.discovery.source",
9
12
  "agent.discovery.install-matrix",
@@ -21,6 +24,20 @@
21
24
  "motion.ir.build",
22
25
  "motion.ir.validate",
23
26
  "asset.provenance",
27
+ "asset.provenance.classify",
28
+ "asset.provenance.validate",
29
+ "asset.provenance.report",
30
+ "asset.provenance.production-gate",
31
+ "asset.consistency.validate",
32
+ "asset.consistency.frame-geometry",
33
+ "asset.consistency.atlas",
34
+ "asset.consistency.layered-map",
35
+ "artifact.intake.validate",
36
+ "artifact.intake.provider-neutral",
37
+ "artifact.intake.control-track",
38
+ "artifact.intake.export-manifest",
39
+ "runtime.candidate.validate",
40
+ "rig.compatibility.validate",
24
41
  "provenance.emit",
25
42
  "provenance.verify",
26
43
  "capability.discover",
@@ -69,7 +86,14 @@
69
86
  "host-project",
70
87
  "project-manifest",
71
88
  "animation-request",
72
- "source-asset"
89
+ "source-asset",
90
+ "asset-provenance",
91
+ "asset-consistency-contract",
92
+ "generation-receipt",
93
+ "control-track",
94
+ "export-manifest",
95
+ "runtime-candidate",
96
+ "rig-compatibility-contract"
73
97
  ],
74
98
  "output_artifacts": [
75
99
  "agent-discovery-report",
@@ -77,6 +101,11 @@
77
101
  "motion-spec",
78
102
  "runtime-scene",
79
103
  "source-binding",
104
+ "asset-provenance",
105
+ "asset-consistency-report",
106
+ "artifact-intake-report",
107
+ "runtime-candidate-report",
108
+ "rig-compatibility-report",
80
109
  "dotlottie-package",
81
110
  "runtime-evidence",
82
111
  "runtime-telemetry",
@@ -145,6 +174,11 @@
145
174
  }
146
175
  ],
147
176
  "entrypoints": {
177
+ "init": "npx --yes motionloom init --project-root <project-path>",
178
+ "setup": "npx --yes motionloom setup --project-root <project-path>",
179
+ "setup_dry_run": "npx --yes motionloom setup --project-root <project-path> --dry-run --json",
180
+ "status": "npx --no-install motionloom status --project-root <project-path> --json",
181
+ "repair": "npx --no-install motionloom repair --project-root <project-path> --yes --json",
148
182
  "discovery_check": "motionloom discovery check --root <motionloom-checkout> --json",
149
183
  "discovery_source": "motionloom discovery source --root <motionloom-checkout> --json",
150
184
  "discovery_install_matrix": "motionloom discovery install-matrix --root <motionloom-checkout> --json",
@@ -175,12 +209,21 @@
175
209
  "semantic_lint_benchmark": "python3 scripts/intelligence.py semantic-lint benchmark --task-dir artifacts/<task-id> --iterations 25 --threshold-ms 500",
176
210
  "continuity": "python3 scripts/intelligence.py continuity build --task-dirs artifacts/<task-id>...",
177
211
  "fix_plan": "python3 scripts/intelligence.py fix-plan build --task-dir artifacts/<task-id> --reports semantic-lint-report.json continuity-report.json",
178
- "quality_gate_p1": "python3 scripts/quality-gate.py --scene <scene> --context <path> --task-dir artifacts/<task-id> --require-browser-review --require-intelligence --require-p1 --require-benchmark --require-telemetry",
212
+ "asset_provenance_check": "motionloom asset-provenance check --input src/output/<scene>/asset-provenance.json --root src/output/<scene> --mode runtime|production --manifest src/output/<scene>/manifest.json --json",
213
+ "asset_provenance_classify": "motionloom asset-provenance classify --input <asset-provenance.json> --json",
214
+ "asset_provenance_validate": "motionloom asset-provenance validate --input <asset-provenance.json> --json",
215
+ "asset_provenance_report": "motionloom asset-provenance report --input <asset-provenance.json> --json",
216
+ "asset_consistency_validate": "motionloom asset-consistency validate --kind <identity|action-set|frame-geometry|atlas|layered-map> --input <contract.json> --root <asset-root> --json",
217
+ "asset_consistency_report": "motionloom asset-consistency report --kind <identity|action-set|frame-geometry|atlas|layered-map> --input <contract.json> --root <asset-root> --strict --json",
218
+ "artifact_intake": "motionloom artifact-intake intake --root <project-root> --registry artifact-adapter-registry.json --receipt <generation-receipt.json> --controls <control-track.json> --export-manifest <export-manifest.json> --json",
219
+ "runtime_candidate_validate": "motionloom runtime-candidate validate --root <project-root> --input <runtime-candidate.json> --json",
220
+ "rig_compatibility_validate": "motionloom rig-compatibility validate --root <project-root> --registry rig-adapter-registry.json --input <rig-compatibility.json> --json",
221
+ "quality_gate_p1": "python3 scripts/quality-gate.py --scene <scene> --context <path> --task-dir artifacts/<task-id> --require-browser-review --require-intelligence --require-p1 --require-benchmark --require-telemetry --require-asset-provenance --require-asset-consistency",
179
222
  "attestation_statement": "python3 scripts/attestation.py statement --scene-dir src/output/<scene> --task-dir artifacts/<task-id> --context <project-context.json> --output artifacts/<task-id>/attestation-statement.json",
180
223
  "attestation_build": "python3 scripts/attestation.py build --statement artifacts/<task-id>/attestation-statement.json --private-key <key> --key-id <key-id> --output artifacts/<task-id>/attestation.json",
181
224
  "attestation_verify": "python3 scripts/attestation-verifier.py --attestation artifacts/<task-id>/attestation.json --trust-policy artifacts/<task-id>/trust-policy.json --expected-task-id <task-id> --expected-scene <scene>",
182
225
  "attestation_report": "python3 scripts/attestation-verifier.py --attestation artifacts/<task-id>/attestation.json --trust-policy artifacts/<task-id>/trust-policy.json --expected-task-id <task-id> --expected-scene <scene> --output artifacts/<task-id>/attestation-verifier-report.json",
183
- "quality_gate_attestation": "python3 scripts/quality-gate.py --scene <scene> --context <path> --task-dir artifacts/<task-id> --require-browser-review --require-intelligence --require-p1 --require-benchmark --require-telemetry --require-attestation",
226
+ "quality_gate_attestation": "python3 scripts/quality-gate.py --scene <scene> --context <path> --task-dir artifacts/<task-id> --require-browser-review --require-intelligence --require-p1 --require-benchmark --require-telemetry --require-attestation --require-asset-provenance",
184
227
  "visual_truth_build": "motionloom visual-truth build --root <project-path> --scene <scene> --baseline <baseline.png> --candidate <candidate.png> --output src/output/<scene>/visual-truth.json",
185
228
  "visual_truth_validate": "motionloom visual-truth validate --root <project-path> --input src/output/<scene>/visual-truth.json --scene <scene> --task-id <task-id>",
186
229
  "remediation_record_outcome": "motionloom remediation-learning record-outcome --history artifacts/remediation-history.jsonl --event-id <id> --issue-id <issue-id> --summary <summary> --result pass|fail|partial|unknown --correction-count <n> --user-confirmed",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "schema_version": "1.0",
3
3
  "name": "motionloom",
4
- "version": "2.2.0",
4
+ "version": "2.4.0",
5
5
  "canonical": {
6
6
  "skill": "SKILL.md",
7
7
  "agent_card": "agent-card.json",
@@ -42,6 +42,13 @@
42
42
  }
43
43
  ],
44
44
  "installations": [
45
+ {
46
+ "id": "npx-onboarding",
47
+ "source_kind": "npx",
48
+ "command": "npx --yes motionloom setup",
49
+ "verification": "npx --no-install motionloom status --json",
50
+ "provenance": "npm-registry-resolution-and-project-lockfile"
51
+ },
45
52
  {
46
53
  "id": "npm-registry",
47
54
  "source_kind": "npm",
@@ -0,0 +1,53 @@
1
+ {
2
+ "schema_version": "0.1",
3
+ "registry_id": "motionloom-artifact-adapters",
4
+ "generated_at": "2026-08-15T00:00:00Z",
5
+ "selection_policy": {"require_verified": true, "allow_scaffold_only": false},
6
+ "adapters": [
7
+ {
8
+ "adapter_id": "fixture.local-artifact-intake",
9
+ "kind": "fixture",
10
+ "status": "static_validated",
11
+ "adapter_version": "0.1",
12
+ "invocation_mode": "none",
13
+ "cost_class": "included",
14
+ "inputs": ["hash-bound-fixture", "control-track"],
15
+ "outputs": ["generation-receipt", "export-manifest"],
16
+ "compatibility": {"os": ["linux", "macos", "windows"]},
17
+ "evidence": [{"path": "docs/research/agent-skill-ecosystem-notes.md", "sha256": "18472ccd959191a4e769675b142076fa3c0103629d67b5be992fa524730cc530", "kind": "static"}],
18
+ "limitations": ["Fixture adapter is regression evidence only and never generates an asset."],
19
+ "risk_level": "low",
20
+ "side_effect_level": "read"
21
+ },
22
+ {
23
+ "adapter_id": "internal.imagegen",
24
+ "kind": "internal_skill",
25
+ "status": "scaffold_only",
26
+ "adapter_version": "0.1",
27
+ "invocation_mode": "agent-mediated",
28
+ "cost_class": "included",
29
+ "inputs": ["reference-images", "control-track", "prompt-hash"],
30
+ "outputs": ["image", "frame-sequence", "generation-receipt"],
31
+ "compatibility": {"os": ["linux", "macos", "windows"]},
32
+ "evidence": [{"path": "docs/research/agent-skill-ecosystem-notes.md", "sha256": "18472ccd959191a4e769675b142076fa3c0103629d67b5be992fa524730cc530", "kind": "static"}],
33
+ "limitations": ["Adapter imports Agent-mediated ImageGen output only; it does not invoke ImageGen or prove a model, seed, license, rig compatibility, runtime quality or human approval."],
34
+ "risk_level": "medium",
35
+ "side_effect_level": "user_review_required"
36
+ },
37
+ {
38
+ "adapter_id": "openai.chatgpt",
39
+ "kind": "external_provider",
40
+ "status": "scaffold_only",
41
+ "adapter_version": "0.1",
42
+ "invocation_mode": "manual",
43
+ "cost_class": "external",
44
+ "inputs": ["user-provided-images", "reference-images", "control-track", "prompt-hash"],
45
+ "outputs": ["image", "frame-sequence", "generation-receipt"],
46
+ "compatibility": {"os": ["linux", "macos", "windows"]},
47
+ "evidence": [{"path": "docs/research/agent-skill-ecosystem-notes.md", "sha256": "18472ccd959191a4e769675b142076fa3c0103629d67b5be992fa524730cc530", "kind": "static"}],
48
+ "limitations": ["Adapter imports user-provided ChatGPT output only; it does not invoke ChatGPT, verify a provider-native task ID, prove a model, seed, license, rig compatibility, runtime quality or human approval."],
49
+ "risk_level": "medium",
50
+ "side_effect_level": "user_review_required"
51
+ }
52
+ ]
53
+ }