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.
- package/CHANGELOG.md +24 -1
- package/README.md +78 -11
- package/ROADMAP.md +8 -5
- package/SKILL.md +24 -5
- package/agent-card.json +31 -5
- package/agent-surfaces.json +1 -1
- package/artifact-adapter-registry.json +53 -0
- package/bin/motionloom.mjs +29 -5
- package/docs/CHECKLIST.md +16 -0
- package/docs/STATUS.md +2 -2
- package/docs/audits/data/deep-stress-latest.json +65 -65
- package/docs/releases/2.4.0.md +31 -0
- package/docs/releases/npm-publish-from-workstation.md +19 -8
- package/docs/research/agent-skill-ecosystem-notes.md +47 -0
- package/docs/research/ai-animation-tools-2026-notes.md +81 -0
- package/docs/research/ai-animation-tools-2026-report.md +168 -0
- package/docs/research/ai-pilot-ingest-notes.md +29 -0
- package/examples/agent-consumer/ai-pilot-scout/CHATGPT-HANDOFF.md +70 -0
- package/examples/agent-consumer/ai-pilot-scout/CODEX-HANDOFF.md +80 -0
- package/examples/agent-consumer/ai-pilot-scout/README.md +39 -0
- package/examples/agent-consumer/ai-pilot-scout/chatgpt-geometry-correction-prompt.md +55 -0
- package/examples/agent-consumer/ai-pilot-scout/chatgpt-pose-generation-prompt.md +78 -0
- package/examples/agent-consumer/ai-pilot-scout/partial-handoff.json +73 -0
- package/examples/agent-consumer/artifact-intake/hero-motion-controls.json +15 -0
- package/examples/agent-consumer/artifact-intake/hero-motion-export.json +14 -0
- package/examples/agent-consumer/artifact-intake/hero-motion-provenance.json +20 -0
- package/examples/agent-consumer/artifact-intake/hero-motion-receipt.json +16 -0
- package/examples/agent-consumer/asset-consistency/assets/forest-back.png +0 -0
- package/examples/agent-consumer/asset-consistency/assets/forest-front.png +0 -0
- package/examples/agent-consumer/asset-consistency/assets/forest-mid.png +0 -0
- package/examples/agent-consumer/asset-consistency/assets/hero-atlas.png +0 -0
- package/examples/agent-consumer/asset-consistency/assets/hero-frame-00.png +0 -0
- package/examples/agent-consumer/asset-consistency/assets/hero-frame-01.png +0 -0
- package/examples/agent-consumer/asset-consistency/assets/hero-frame-02.png +0 -0
- package/examples/agent-consumer/asset-consistency/assets/hero-frame-03.png +0 -0
- package/examples/agent-consumer/asset-consistency/forest-layered-map.json +53 -0
- package/examples/agent-consumer/asset-consistency/hero-atlas-contract.json +24 -0
- package/examples/agent-consumer/asset-consistency/hero-identity.json +51 -0
- package/examples/agent-consumer/asset-consistency/hero-walk-action-set.json +27 -0
- package/examples/agent-consumer/asset-consistency/hero-walk-frame-geometry.json +63 -0
- package/examples/agent-consumer/rig-compatibility/hero-walk-fixture-rig.json +13 -0
- package/examples/agent-consumer/rive-package-gate/README.md +20 -0
- package/examples/agent-consumer/runtime-candidate/hero-walk-candidate.json +18 -0
- package/examples/agent-consumer/runtime-pilot/action-set.json +19 -0
- package/examples/agent-consumer/runtime-pilot/asset-identity.json +44 -0
- package/examples/agent-consumer/runtime-pilot/candidate.json +21 -0
- package/examples/agent-consumer/runtime-pilot/controls.json +35 -0
- package/examples/agent-consumer/runtime-pilot/export.json +17 -0
- package/examples/agent-consumer/runtime-pilot/provenance.json +38 -0
- package/examples/agent-consumer/runtime-pilot/receipt.json +30 -0
- package/package.json +56 -4
- package/references/browser-review-contract.md +7 -1
- package/references/intelligence-core.md +22 -1
- package/rig-adapter-registry.json +39 -0
- package/schemas/action-set.schema.json +42 -0
- package/schemas/artifact-adapter-registry.schema.json +16 -0
- package/schemas/asset-identity.schema.json +117 -0
- package/schemas/asset-provenance.schema.json +1 -1
- package/schemas/atlas-contract.schema.json +48 -0
- package/schemas/control-track.schema.json +18 -0
- package/schemas/export-manifest.schema.json +19 -0
- package/schemas/frame-geometry.schema.json +79 -0
- package/schemas/generation-receipt.schema.json +20 -0
- package/schemas/layered-map.schema.json +75 -0
- package/schemas/rig-adapter-registry.schema.json +14 -0
- package/schemas/rig-compatibility.schema.json +53 -0
- package/schemas/rive-package-manifest.schema.json +43 -0
- package/schemas/runtime-candidate.schema.json +48 -0
- package/schemas/scene-manifest.schema.json +18 -0
- package/scripts/artifact-intake.py +408 -0
- package/scripts/asset-consistency.py +517 -0
- package/scripts/asset-provenance.py +8 -3
- package/scripts/build-ai-pilot.py +504 -0
- package/scripts/isolate-alpha-background.py +147 -0
- package/scripts/quality-gate.py +88 -2
- package/scripts/report.py +85 -0
- package/scripts/resolve-task-bundle.py +84 -0
- package/scripts/review-hook.py +26 -4
- package/scripts/rig-compatibility.py +251 -0
- package/scripts/rive-package-gate.py +245 -0
- package/scripts/runtime-candidate.py +301 -0
- package/scripts/setup.mjs +54 -26
- package/src/output/runtime-pilot-framer/asset-provenance.json +38 -0
- package/src/output/runtime-pilot-framer/browser-review.json +20 -0
- package/src/output/runtime-pilot-framer/framer-motion/runtime-telemetry.json +103 -0
- package/src/output/runtime-pilot-framer/manifest.json +31 -0
- package/src/output/runtime-pilot-framer/motion-spec.json +25 -0
- package/src/output/runtime-pilot-framer/runtime-evidence.json +96 -0
- package/src/output/runtime-pilot-framer/runtime-telemetry.json +100 -0
- package/src/output/runtime-pilot-framer/scene.jsx +52 -0
- package/src/output/runtime-pilot-framer/snapshot/.render-meta.json +9 -0
- package/src/output/runtime-pilot-framer/snapshot/frame-00.png +0 -0
- package/src/output/runtime-pilot-framer/snapshot/frame-100.png +0 -0
- package/src/output/runtime-pilot-framer/snapshot/frame-50.png +0 -0
- package/tests/scripts/run_tests.py +107 -0
- package/tests/scripts/test_ai_pilot_builder.py +128 -0
- package/tests/scripts/test_alpha_isolation.py +60 -0
- package/tests/scripts/test_artifact_intake.py +146 -0
- package/tests/scripts/test_asset_consistency.py +199 -0
- package/tests/scripts/test_rig_compatibility.py +105 -0
- package/tests/scripts/test_rive_package_gate.py +101 -0
- package/tests/scripts/test_runtime_candidate.py +95 -0
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
|
-
|
|
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.
|
|
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
|
-
###
|
|
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
|
|
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
|
-
|
|
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
|
|
72
|
-
npx --
|
|
73
|
-
npx --no-install motionloom
|
|
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
|
-
###
|
|
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
|
|
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
|
|
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.
|
|
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.
|
|
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
|
|
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
|
|
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;
|
|
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.
|
|
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
|
|
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
|
|
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.
|
|
5
|
-
"description": "Project-aware animation production with durable Project Memory,
|
|
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
|
-
|
|
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
|
-
"
|
|
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>",
|
package/agent-surfaces.json
CHANGED
|
@@ -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
|
+
}
|
package/bin/motionloom.mjs
CHANGED
|
@@ -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.
|
|
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
|
-
|
|
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
|
-
|
|
77
|
-
|
|
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
|
|
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`.
|