motionloom 2.3.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 (102) hide show
  1. package/CHANGELOG.md +24 -1
  2. package/README.md +78 -11
  3. package/ROADMAP.md +8 -5
  4. package/SKILL.md +24 -5
  5. package/agent-card.json +31 -5
  6. package/agent-surfaces.json +1 -1
  7. package/artifact-adapter-registry.json +53 -0
  8. package/bin/motionloom.mjs +29 -5
  9. package/docs/CHECKLIST.md +16 -0
  10. package/docs/STATUS.md +2 -2
  11. package/docs/audits/data/deep-stress-latest.json +65 -65
  12. package/docs/releases/2.4.0.md +31 -0
  13. package/docs/releases/npm-publish-from-workstation.md +19 -8
  14. package/docs/research/agent-skill-ecosystem-notes.md +47 -0
  15. package/docs/research/ai-animation-tools-2026-notes.md +81 -0
  16. package/docs/research/ai-animation-tools-2026-report.md +168 -0
  17. package/docs/research/ai-pilot-ingest-notes.md +29 -0
  18. package/examples/agent-consumer/ai-pilot-scout/CHATGPT-HANDOFF.md +70 -0
  19. package/examples/agent-consumer/ai-pilot-scout/CODEX-HANDOFF.md +80 -0
  20. package/examples/agent-consumer/ai-pilot-scout/README.md +39 -0
  21. package/examples/agent-consumer/ai-pilot-scout/chatgpt-geometry-correction-prompt.md +55 -0
  22. package/examples/agent-consumer/ai-pilot-scout/chatgpt-pose-generation-prompt.md +78 -0
  23. package/examples/agent-consumer/ai-pilot-scout/partial-handoff.json +73 -0
  24. package/examples/agent-consumer/artifact-intake/hero-motion-controls.json +15 -0
  25. package/examples/agent-consumer/artifact-intake/hero-motion-export.json +14 -0
  26. package/examples/agent-consumer/artifact-intake/hero-motion-provenance.json +20 -0
  27. package/examples/agent-consumer/artifact-intake/hero-motion-receipt.json +16 -0
  28. package/examples/agent-consumer/asset-consistency/assets/forest-back.png +0 -0
  29. package/examples/agent-consumer/asset-consistency/assets/forest-front.png +0 -0
  30. package/examples/agent-consumer/asset-consistency/assets/forest-mid.png +0 -0
  31. package/examples/agent-consumer/asset-consistency/assets/hero-atlas.png +0 -0
  32. package/examples/agent-consumer/asset-consistency/assets/hero-frame-00.png +0 -0
  33. package/examples/agent-consumer/asset-consistency/assets/hero-frame-01.png +0 -0
  34. package/examples/agent-consumer/asset-consistency/assets/hero-frame-02.png +0 -0
  35. package/examples/agent-consumer/asset-consistency/assets/hero-frame-03.png +0 -0
  36. package/examples/agent-consumer/asset-consistency/forest-layered-map.json +53 -0
  37. package/examples/agent-consumer/asset-consistency/hero-atlas-contract.json +24 -0
  38. package/examples/agent-consumer/asset-consistency/hero-identity.json +51 -0
  39. package/examples/agent-consumer/asset-consistency/hero-walk-action-set.json +27 -0
  40. package/examples/agent-consumer/asset-consistency/hero-walk-frame-geometry.json +63 -0
  41. package/examples/agent-consumer/rig-compatibility/hero-walk-fixture-rig.json +13 -0
  42. package/examples/agent-consumer/rive-package-gate/README.md +20 -0
  43. package/examples/agent-consumer/runtime-candidate/hero-walk-candidate.json +18 -0
  44. package/examples/agent-consumer/runtime-pilot/action-set.json +19 -0
  45. package/examples/agent-consumer/runtime-pilot/asset-identity.json +44 -0
  46. package/examples/agent-consumer/runtime-pilot/candidate.json +21 -0
  47. package/examples/agent-consumer/runtime-pilot/controls.json +35 -0
  48. package/examples/agent-consumer/runtime-pilot/export.json +17 -0
  49. package/examples/agent-consumer/runtime-pilot/provenance.json +38 -0
  50. package/examples/agent-consumer/runtime-pilot/receipt.json +30 -0
  51. package/package.json +56 -4
  52. package/references/browser-review-contract.md +7 -1
  53. package/references/intelligence-core.md +22 -1
  54. package/rig-adapter-registry.json +39 -0
  55. package/schemas/action-set.schema.json +42 -0
  56. package/schemas/artifact-adapter-registry.schema.json +16 -0
  57. package/schemas/asset-identity.schema.json +117 -0
  58. package/schemas/asset-provenance.schema.json +1 -1
  59. package/schemas/atlas-contract.schema.json +48 -0
  60. package/schemas/control-track.schema.json +18 -0
  61. package/schemas/export-manifest.schema.json +19 -0
  62. package/schemas/frame-geometry.schema.json +79 -0
  63. package/schemas/generation-receipt.schema.json +20 -0
  64. package/schemas/layered-map.schema.json +75 -0
  65. package/schemas/rig-adapter-registry.schema.json +14 -0
  66. package/schemas/rig-compatibility.schema.json +53 -0
  67. package/schemas/rive-package-manifest.schema.json +43 -0
  68. package/schemas/runtime-candidate.schema.json +48 -0
  69. package/schemas/scene-manifest.schema.json +18 -0
  70. package/scripts/artifact-intake.py +408 -0
  71. package/scripts/asset-consistency.py +517 -0
  72. package/scripts/asset-provenance.py +8 -3
  73. package/scripts/build-ai-pilot.py +504 -0
  74. package/scripts/isolate-alpha-background.py +147 -0
  75. package/scripts/quality-gate.py +88 -2
  76. package/scripts/report.py +85 -0
  77. package/scripts/resolve-task-bundle.py +84 -0
  78. package/scripts/review-hook.py +26 -4
  79. package/scripts/rig-compatibility.py +251 -0
  80. package/scripts/rive-package-gate.py +245 -0
  81. package/scripts/runtime-candidate.py +301 -0
  82. package/scripts/setup.mjs +54 -26
  83. package/src/output/runtime-pilot-framer/asset-provenance.json +38 -0
  84. package/src/output/runtime-pilot-framer/browser-review.json +20 -0
  85. package/src/output/runtime-pilot-framer/framer-motion/runtime-telemetry.json +103 -0
  86. package/src/output/runtime-pilot-framer/manifest.json +31 -0
  87. package/src/output/runtime-pilot-framer/motion-spec.json +25 -0
  88. package/src/output/runtime-pilot-framer/runtime-evidence.json +96 -0
  89. package/src/output/runtime-pilot-framer/runtime-telemetry.json +100 -0
  90. package/src/output/runtime-pilot-framer/scene.jsx +52 -0
  91. package/src/output/runtime-pilot-framer/snapshot/.render-meta.json +9 -0
  92. package/src/output/runtime-pilot-framer/snapshot/frame-00.png +0 -0
  93. package/src/output/runtime-pilot-framer/snapshot/frame-100.png +0 -0
  94. package/src/output/runtime-pilot-framer/snapshot/frame-50.png +0 -0
  95. package/tests/scripts/run_tests.py +107 -0
  96. package/tests/scripts/test_ai_pilot_builder.py +128 -0
  97. package/tests/scripts/test_alpha_isolation.py +60 -0
  98. package/tests/scripts/test_artifact_intake.py +146 -0
  99. package/tests/scripts/test_asset_consistency.py +199 -0
  100. package/tests/scripts/test_rig_compatibility.py +105 -0
  101. package/tests/scripts/test_rive_package_gate.py +101 -0
  102. package/tests/scripts/test_runtime_candidate.py +95 -0
package/CHANGELOG.md CHANGED
@@ -4,7 +4,29 @@ All notable MotionLoom changes are documented here. The project follows semantic
4
4
 
5
5
  ## [Unreleased]
6
6
 
7
- No unreleased changes are recorded.
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.
8
30
 
9
31
  ## [2.3.0] - 2026-08-14
10
32
 
@@ -87,6 +109,7 @@ See the [2.0.0 release note](docs/releases/2.0.0.md).
87
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/).
88
110
 
89
111
  [2.2.0]: docs/releases/2.2.0.md
112
+ [2.4.0]: docs/releases/2.4.0.md
90
113
  [2.3.0]: docs/releases/2.3.0.md
91
114
  [2.1.0]: docs/releases/2.1.0.md
92
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:** `motionloom@2.3.0` is the current release target and packages one-command onboarding, project-bound setup/status/repair and the AI-first human-governed asset provenance contract. Verify npm/GitHub publication metadata separately; passing evidence never implies user approval.
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,7 +56,7 @@ Every handoff is machine-readable. The typical bundle under `artifacts/<task-id>
55
56
 
56
57
  ## Quick start
57
58
 
58
- ### Recommended: one command from the project
59
+ ### Start once. Continue your normal work.
59
60
 
60
61
  ```bash
61
62
  cd /path/to/your/project
@@ -63,20 +64,31 @@ npx --yes motionloom setup
63
64
  npx --no-install motionloom status
64
65
  ```
65
66
 
66
- This is the easiest path for a project owner. The wizard detects the host project, installs MotionLoom locally as a development dependency, merges an idempotent `AGENTS.md` router, runs discovery and creates fresh project context plus durable `.motionloom/project-memory.json`. It never commits, pushes, opens a PR or grants asset approval.
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.
67
68
 
68
- Preview or repair the same flow without memorizing low-level commands:
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:
69
72
 
70
73
  ```bash
71
- npx --yes motionloom setup --dry-run --json # preview; no install or file changes
72
- npx --yes motionloom setup --yes # accept safe defaults
73
- npx --no-install motionloom status --json # read-only readiness report
74
- npx --no-install motionloom repair --yes # restore only missing managed pieces
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
75
77
  ```
76
78
 
77
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.
78
80
 
79
- ### Start from a real project
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.
84
+
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
80
92
 
81
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.
82
94
 
@@ -101,12 +113,12 @@ npx --no-install motionloom devlab loading
101
113
  # Validate the exact task bundle before any Git side effect.
102
114
  npx --no-install motionloom quality-gate --scene loading \
103
115
  --context project-context.json \
104
- --task-dir artifacts/loading-task \
116
+ --task-dir artifacts/<task-id> \
105
117
  --require-browser-review --require-intelligence --require-p1 \
106
118
  --require-benchmark --require-telemetry --require-attestation --require-asset-provenance
107
119
 
108
120
  # Local-only by default. A user must review and explicitly authorize side effects.
109
- npx --no-install motionloom pr loading --task-dir artifacts/loading-task
121
+ npx --no-install motionloom pr loading --task-dir artifacts/<task-id>
110
122
  ```
111
123
 
112
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).
@@ -184,6 +196,56 @@ motionloom asset-provenance check --input src/output/<scene>/asset-provenance.js
184
196
 
185
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.
186
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
+
187
249
  ## How an Agent uses the Skill
188
250
 
189
251
  The public integration surfaces are intentionally small and inspectable:
@@ -215,6 +277,9 @@ The Skill can trigger or suggest an internal browser-capable Agent to open the D
215
277
  | `schemas/visual-truth.schema.json`, `scripts/visual-truth.py` | Provenance-bound visual comparison and review explanation contract |
216
278
  | `schemas/remediation-history.schema.json`, `scripts/remediation-learning.py` | Append-only remediation/benchmark ledger and aggregate learning metrics |
217
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 |
218
283
  | `tests/` | Regression, adversarial and deep-stress evaluation harnesses |
219
284
 
220
285
  ## Documentation map
@@ -228,6 +293,8 @@ The Skill can trigger or suggest an internal browser-capable Agent to open the D
228
293
  | Run labeled project evaluation | [Project corpus manifest](tests/evals/project-corpus.json) and `python3 scripts/eval-projects.py --allow-insufficient` |
229
294
  | Understand trust boundaries | [Signed attestation](references/signed-attestation.md) and [2.0.0 release note](docs/releases/2.0.0.md) |
230
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) |
231
298
  | Validate visual truth before review/PR | `motionloom visual-truth build|validate` and [production checklist](docs/CHECKLIST.md) |
232
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) |
233
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.3.0 release target
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, AI-first asset provenance and cross-platform CLI/CI contracts. The `2.3.0` release target adds one-command project onboarding without weakening review or Git side-effect boundaries.
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,12 +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 target |
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 target |
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 |
19
22
 
20
23
  ## Working-tree implementation status
21
24
 
22
- The current implementation pass has delivered the contracts behind milestones 2.2, 2.3, 2.5, 2.6 and 2.7: 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; and `npx --yes motionloom setup` bootstraps a project without overwriting its Agent guidance. The remaining work is maintainer release verification 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.
23
26
 
24
27
  ## Product principles
25
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.3.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
  ---
@@ -20,22 +20,27 @@ Treat every animation request as a production task, not as an isolated asset-gen
20
20
 
21
21
  ## Fast onboarding for a real project
22
22
 
23
- When MotionLoom is not installed in the host project, prefer the single cross-platform entrypoint `npx --yes motionloom setup`. 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`. Use `npx --yes motionloom setup --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. Never use setup to commit, push, open a PR, grant approval or promote asset provenance.
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
24
 
25
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
26
 
27
27
  ## Required workflow
28
28
 
29
- 1. **Understand** — run `motionloom setup` once for a new host project, then 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 setup` or `python scripts/analyze.py <project-path> --init-memory`.
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`.
30
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.
31
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. `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.
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`.
33
36
  4. **Generate** — use the matching template or rig implementation. For body animation, preserve named anatomy, pivot and parent-first hierarchy.
34
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.
35
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.
36
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.
37
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.
38
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.
39
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.
40
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.
41
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.
@@ -70,6 +75,7 @@ Only user-confirmed decisions and outcomes may become durable remediation memory
70
75
  - Read `references/intelligence-core.md` before building or validating Intelligence Core artifacts.
71
76
  - Read `docs/research/AGENT-PROTOCOL-FINDINGS.md` before exposing MotionLoom through Agent tools or MCP resources.
72
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.
73
79
 
74
80
  ## Non-negotiable contracts
75
81
 
@@ -81,9 +87,12 @@ Only user-confirmed decisions and outcomes may become durable remediation memory
81
87
  - Destructive Git actions require explicit confirmation. Use `OPEN_PR=0` for local review-only runs.
82
88
  - Intelligence Core artifacts are task-bound: graph, provenance, Motion IR and replay evidence must not be reused across tasks without revalidation.
83
89
  - Provenance hashes materials and products; replay must fail on tampered or missing files; stale capability evidence must not be selected for production acceptance.
84
- - Asset provenance is tiered: `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`.
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`.
85
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.
86
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.
87
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.
88
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.
89
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.
@@ -101,6 +110,8 @@ Every production `src/output/<scene>/manifest.json` must include a `source_bindi
101
110
 
102
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.
103
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
+
104
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.
105
116
 
106
117
  ```bash
@@ -111,6 +122,14 @@ node scripts/to-dotlottie.mjs --scene-dir src/output/<scene> --output src/output
111
122
  motionloom memory init --project-root <project-path>
112
123
  motionloom memory recover --project-root <project-path> --json
113
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
+
114
133
  # Run the official runtime adapters in a real browser harness.
115
134
  node scripts/runtime-adapters.mjs
116
135
 
package/agent-card.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "card_version": "1.0",
3
3
  "name": "motionloom",
4
- "version": "2.3.0",
5
- "description": "Project-aware animation production with durable Project Memory, graph, step-level provenance, tiered asset 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
7
  "project.setup",
8
8
  "project.status",
@@ -28,6 +28,16 @@
28
28
  "asset.provenance.validate",
29
29
  "asset.provenance.report",
30
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",
31
41
  "provenance.emit",
32
42
  "provenance.verify",
33
43
  "capability.discover",
@@ -76,8 +86,14 @@
76
86
  "host-project",
77
87
  "project-manifest",
78
88
  "animation-request",
79
- "source-asset"
80
- ,"asset-provenance"
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"
81
97
  ],
82
98
  "output_artifacts": [
83
99
  "agent-discovery-report",
@@ -86,6 +102,10 @@
86
102
  "runtime-scene",
87
103
  "source-binding",
88
104
  "asset-provenance",
105
+ "asset-consistency-report",
106
+ "artifact-intake-report",
107
+ "runtime-candidate-report",
108
+ "rig-compatibility-report",
89
109
  "dotlottie-package",
90
110
  "runtime-evidence",
91
111
  "runtime-telemetry",
@@ -154,6 +174,7 @@
154
174
  }
155
175
  ],
156
176
  "entrypoints": {
177
+ "init": "npx --yes motionloom init --project-root <project-path>",
157
178
  "setup": "npx --yes motionloom setup --project-root <project-path>",
158
179
  "setup_dry_run": "npx --yes motionloom setup --project-root <project-path> --dry-run --json",
159
180
  "status": "npx --no-install motionloom status --project-root <project-path> --json",
@@ -192,7 +213,12 @@
192
213
  "asset_provenance_classify": "motionloom asset-provenance classify --input <asset-provenance.json> --json",
193
214
  "asset_provenance_validate": "motionloom asset-provenance validate --input <asset-provenance.json> --json",
194
215
  "asset_provenance_report": "motionloom asset-provenance report --input <asset-provenance.json> --json",
195
- "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",
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",
196
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",
197
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",
198
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>",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "schema_version": "1.0",
3
3
  "name": "motionloom",
4
- "version": "2.3.0",
4
+ "version": "2.4.0",
5
5
  "canonical": {
6
6
  "skill": "SKILL.md",
7
7
  "agent_card": "agent-card.json",
@@ -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
+ }
@@ -38,22 +38,34 @@ const PYTHON_COMMANDS = {
38
38
  "visual-truth": "scripts/visual-truth.py",
39
39
  "remediation-learning": "scripts/remediation-learning.py",
40
40
  "asset-provenance": "scripts/asset-provenance.py",
41
+ "asset-consistency": "scripts/asset-consistency.py",
42
+ "artifact-intake": "scripts/artifact-intake.py",
43
+ "runtime-candidate": "scripts/runtime-candidate.py",
44
+ "rig-compatibility": "scripts/rig-compatibility.py",
45
+ "rive-package-gate": "scripts/rive-package-gate.py",
46
+ "pilot-build": "scripts/build-ai-pilot.py",
47
+ "alpha-isolate": "scripts/isolate-alpha-background.py",
41
48
  };
42
49
 
43
50
  const NODE_COMMANDS = {
51
+ init: "scripts/setup.mjs",
44
52
  setup: "scripts/setup.mjs",
45
53
  status: "scripts/setup.mjs",
46
54
  repair: "scripts/setup.mjs",
47
55
  };
48
56
 
49
57
  function printHelp() {
50
- console.log(`MotionLoom 2.2.0 — project-aware animation production and evidence contracts
58
+ console.log(`MotionLoom 2.4.0 — project-aware animation production and evidence contracts
51
59
 
52
60
  Usage:
53
61
  motionloom <command> [args...]
54
62
 
55
- Commands:
63
+ Start here:
64
+ init One safe project setup; no animation gate runs
65
+ status Short read-only readiness report
56
66
  doctor Validate the installed Skill package
67
+
68
+ Use when an animation task needs it:
57
69
  analyze Run project analysis and refresh Project Memory
58
70
  memory Initialize, inspect, refresh, recover or validate memory
59
71
  intelligence Build or validate Intelligence Core artifacts
@@ -73,8 +85,14 @@ Commands:
73
85
  visual-truth Build or validate provenance-bound visual comparisons
74
86
  remediation-learning Record or summarize user-confirmed remediation and benchmark history
75
87
  asset-provenance Validate, classify or report asset origin and production readiness
76
- setup Install and bootstrap MotionLoom in the current project
77
- status Read-only project readiness report
88
+ asset-consistency Validate frame geometry, atlas contamination and layered-map contracts
89
+ artifact-intake Bind generation controls, provenance, adapter metadata and exported bytes
90
+ runtime-candidate Bind intake exports to consistency contracts before runtime testing
91
+ rig-compatibility Validate rig bones, sockets, actions, events and runtime adapter evidence
92
+ rive-package-gate Verify a real .riv package, runtime proof and provenance before testing
93
+ pilot-build Build a review-only hash-bound AI scout pilot from true-alpha PNG sources
94
+ alpha-isolate Isolate an edge-connected flat background; block residual edge contamination
95
+ setup Alias for init (kept for compatibility)
78
96
  repair Re-apply safe missing setup pieces
79
97
 
80
98
  Cross-platform examples:
@@ -88,6 +106,12 @@ Cross-platform examples:
88
106
  motionloom visual-truth validate --root . --input src/output/<scene>/visual-truth.json
89
107
  motionloom remediation-learning summary --history artifacts/remediation-history.jsonl --json
90
108
  motionloom asset-provenance check --input <asset-provenance.json> --root <scene-dir> --mode runtime --json
109
+ motionloom asset-consistency validate --kind frame-geometry --input <frame-geometry.json> --root <scene-dir> --json
110
+ motionloom artifact-intake intake --root <asset-dir> --registry artifact-adapter-registry.json \\
111
+ --receipt <generation-receipt.json> --controls <control-track.json> --export-manifest <export-manifest.json> --json
112
+ motionloom alpha-isolate <opaque.png> <isolated.png> --report <alpha-report.json>
113
+ motionloom rive-package-gate validate --root <package-dir> --registry rig-adapter-registry.json \\
114
+ --input <rive-package-manifest.json> --strict --json
91
115
 
92
116
  The CLI never grants approval or opens a pull request by itself. User review
93
117
  and explicit repository side-effect confirmation remain separate gates.
@@ -108,7 +132,7 @@ if (!script) {
108
132
  }
109
133
 
110
134
  const executable = script.endsWith(".mjs") ? process.execPath : PYTHON;
111
- const delegatedArgs = NODE_COMMANDS[command] && command !== "setup" ? [command, ...args] : args;
135
+ const delegatedArgs = NODE_COMMANDS[command] && !["setup", "init"].includes(command) ? [command, ...args] : command === "init" ? ["init", ...args] : args;
112
136
  const result = spawnSync(executable, [resolve(ROOT, script), ...delegatedArgs], {
113
137
  cwd: ROOT,
114
138
  stdio: "inherit",
package/docs/CHECKLIST.md CHANGED
@@ -28,10 +28,26 @@ A scene is only ready for the confirm-into-PR step when every item below passes.
28
28
  - [ ] `ai_generated` assets may be runtime-ready but are not production-eligible; `unknown` assets are blocked.
29
29
  - [ ] `artist_authored` is backed by a verifiable human/artist record and is not merely an Agent-authored field.
30
30
 
31
+ ## Asset consistency
32
+ - [ ] Multi-frame actions declare an `identity` and `action-set` contract when the asset has shared character/style identity or loop/event requirements.
33
+ - [ ] `frame-geometry` measures the real PNG bytes: canvas size, alpha bounds, frame SHA-256, pivot/footline drift and opaque pixels outside each frame rect.
34
+ - [ ] Sprite atlases declare non-overlapping regions, explicit rotation policy and transparent pixels outside regions; contamination is blocking in strict runs.
35
+ - [ ] Layered maps declare unique layer IDs/z-order, intentional parallax order, tile seam policy, layer/world bounds and camera-safe bounds.
36
+ - [ ] Consistency output is stored with the task evidence and remains separate from provenance authority, production eligibility and user approval.
37
+
38
+ ## Provider-neutral intake and runtime candidate
39
+ - [ ] Every Agent/internal-skill/provider output used by the scene has a hash-bound generation receipt, control track and export manifest; no receipt stores secrets or self-asserts approval.
40
+ - [ ] The selected artifact adapter is declared in `artifact-adapter-registry.json`; `scaffold` or `static-validated` status is not presented as runtime verification or production eligibility.
41
+ - [ ] `runtime-candidate.json` binds the intake bundle to the matching asset identity, action-set and frame geometry/atlas/map contracts; mismatched refs or hashes block the candidate.
42
+ - [ ] A rigmed or motion-capture candidate declares skeleton, sockets, action/event coverage, export target and adapter evidence in `rig-compatibility.json`.
43
+ - [ ] Artifact Intake, runtime candidate and rig findings are present in the task handoff/Dev Lab rail and visibly retain `review_required` until the user records a decision.
44
+
31
45
  ## PR readiness
32
46
  - [ ] Snapshot PNGs exist for 0/50/100%.
33
47
  - [ ] `visual-truth.json` binds real baseline/candidate frames to source, manifest and available runtime/Motion IR hashes; `approval` remains `false`.
34
48
  - [ ] `motion-spec.json` is bound to the exact `project-context.json` hash (implements == planned).
35
49
  - [ ] Dev Lab URL tested on mobile viewport and desktop.
36
50
  - [ ] The production provenance check passes with `--mode production` and reports `production_eligible: true`.
51
+ - [ ] If `manifest.json` declares `consistency_ref`, `quality-gate.py --require-asset-consistency` passes for its declared `consistency_kind`.
52
+ - [ ] If `manifest.json` declares an Artifact Intake bundle, `quality-gate.py --require-artifact-intake` passes and the selected adapter/runtime evidence meets the requested mode.
37
53
  - [ ] `production_approved` and browser-review approval are recorded only from the user's explicit review; attestation approval remains `false`.