motionloom 2.3.0 → 2.5.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 (113) hide show
  1. package/CHANGELOG.md +45 -1
  2. package/README.md +97 -11
  3. package/ROADMAP.md +8 -5
  4. package/SKILL.md +24 -5
  5. package/agent-card.json +34 -5
  6. package/agent-surfaces.json +1 -1
  7. package/artifact-adapter-registry.json +53 -0
  8. package/bin/motionloom.mjs +43 -6
  9. package/capability-registry.json +308 -0
  10. package/docs/CHECKLIST.md +16 -0
  11. package/docs/STATUS.md +2 -2
  12. package/docs/apple-distribution.md +24 -0
  13. package/docs/architecture/apple/cloudkit.md +18 -0
  14. package/docs/architecture/apple/contracts.md +9 -0
  15. package/docs/architecture/apple/implementation-status-2026-08-16.md +55 -0
  16. package/docs/architecture/apple/studio.md +35 -0
  17. package/docs/audits/data/deep-stress-latest.json +65 -65
  18. package/docs/releases/2.4.0.md +31 -0
  19. package/docs/releases/2.5.0.md +31 -0
  20. package/docs/releases/npm-publish-from-workstation.md +19 -8
  21. package/docs/research/agent-skill-ecosystem-notes.md +47 -0
  22. package/docs/research/ai-animation-tools-2026-notes.md +81 -0
  23. package/docs/research/ai-animation-tools-2026-report.md +168 -0
  24. package/docs/research/ai-pilot-ingest-notes.md +29 -0
  25. package/docs/research/ai-repository-benchmark-2026-08-16.md +75 -0
  26. package/examples/agent-consumer/ai-pilot-scout/CHATGPT-HANDOFF.md +70 -0
  27. package/examples/agent-consumer/ai-pilot-scout/CODEX-HANDOFF.md +80 -0
  28. package/examples/agent-consumer/ai-pilot-scout/README.md +39 -0
  29. package/examples/agent-consumer/ai-pilot-scout/chatgpt-geometry-correction-prompt.md +55 -0
  30. package/examples/agent-consumer/ai-pilot-scout/chatgpt-pose-generation-prompt.md +78 -0
  31. package/examples/agent-consumer/ai-pilot-scout/partial-handoff.json +73 -0
  32. package/examples/agent-consumer/artifact-intake/hero-motion-controls.json +15 -0
  33. package/examples/agent-consumer/artifact-intake/hero-motion-export.json +14 -0
  34. package/examples/agent-consumer/artifact-intake/hero-motion-provenance.json +20 -0
  35. package/examples/agent-consumer/artifact-intake/hero-motion-receipt.json +16 -0
  36. package/examples/agent-consumer/asset-consistency/assets/forest-back.png +0 -0
  37. package/examples/agent-consumer/asset-consistency/assets/forest-front.png +0 -0
  38. package/examples/agent-consumer/asset-consistency/assets/forest-mid.png +0 -0
  39. package/examples/agent-consumer/asset-consistency/assets/hero-atlas.png +0 -0
  40. package/examples/agent-consumer/asset-consistency/assets/hero-frame-00.png +0 -0
  41. package/examples/agent-consumer/asset-consistency/assets/hero-frame-01.png +0 -0
  42. package/examples/agent-consumer/asset-consistency/assets/hero-frame-02.png +0 -0
  43. package/examples/agent-consumer/asset-consistency/assets/hero-frame-03.png +0 -0
  44. package/examples/agent-consumer/asset-consistency/forest-layered-map.json +53 -0
  45. package/examples/agent-consumer/asset-consistency/hero-atlas-contract.json +24 -0
  46. package/examples/agent-consumer/asset-consistency/hero-identity.json +51 -0
  47. package/examples/agent-consumer/asset-consistency/hero-walk-action-set.json +27 -0
  48. package/examples/agent-consumer/asset-consistency/hero-walk-frame-geometry.json +63 -0
  49. package/examples/agent-consumer/rig-compatibility/hero-walk-fixture-rig.json +13 -0
  50. package/examples/agent-consumer/rive-package-gate/README.md +20 -0
  51. package/examples/agent-consumer/runtime-candidate/hero-walk-candidate.json +18 -0
  52. package/examples/agent-consumer/runtime-pilot/action-set.json +19 -0
  53. package/examples/agent-consumer/runtime-pilot/asset-identity.json +44 -0
  54. package/examples/agent-consumer/runtime-pilot/candidate.json +21 -0
  55. package/examples/agent-consumer/runtime-pilot/controls.json +35 -0
  56. package/examples/agent-consumer/runtime-pilot/export.json +17 -0
  57. package/examples/agent-consumer/runtime-pilot/provenance.json +38 -0
  58. package/examples/agent-consumer/runtime-pilot/receipt.json +30 -0
  59. package/package.json +58 -4
  60. package/references/browser-review-contract.md +7 -1
  61. package/references/intelligence-core.md +22 -1
  62. package/rig-adapter-registry.json +39 -0
  63. package/schemas/action-set.schema.json +42 -0
  64. package/schemas/artifact-adapter-registry.schema.json +16 -0
  65. package/schemas/asset-identity.schema.json +117 -0
  66. package/schemas/asset-provenance.schema.json +1 -1
  67. package/schemas/atlas-contract.schema.json +48 -0
  68. package/schemas/control-track.schema.json +18 -0
  69. package/schemas/export-manifest.schema.json +19 -0
  70. package/schemas/frame-geometry.schema.json +79 -0
  71. package/schemas/generation-receipt.schema.json +20 -0
  72. package/schemas/layered-map.schema.json +75 -0
  73. package/schemas/rig-adapter-registry.schema.json +14 -0
  74. package/schemas/rig-compatibility.schema.json +53 -0
  75. package/schemas/rive-package-manifest.schema.json +43 -0
  76. package/schemas/runtime-candidate.schema.json +48 -0
  77. package/schemas/scene-manifest.schema.json +18 -0
  78. package/scripts/artifact-intake.py +408 -0
  79. package/scripts/asset-consistency.py +517 -0
  80. package/scripts/asset-provenance.py +8 -3
  81. package/scripts/attestation.py +8 -0
  82. package/scripts/build-ai-pilot.py +504 -0
  83. package/scripts/evidence-verifier.py +18 -9
  84. package/scripts/intelligence.py +85 -18
  85. package/scripts/isolate-alpha-background.py +147 -0
  86. package/scripts/quality-gate.py +88 -2
  87. package/scripts/report.py +85 -0
  88. package/scripts/resolve-task-bundle.py +84 -0
  89. package/scripts/review-hook.py +26 -4
  90. package/scripts/rig-compatibility.py +251 -0
  91. package/scripts/rive-package-gate.py +245 -0
  92. package/scripts/runtime-candidate.py +301 -0
  93. package/scripts/setup.mjs +54 -26
  94. package/src/output/runtime-pilot-framer/asset-provenance.json +38 -0
  95. package/src/output/runtime-pilot-framer/browser-review.json +20 -0
  96. package/src/output/runtime-pilot-framer/framer-motion/runtime-telemetry.json +103 -0
  97. package/src/output/runtime-pilot-framer/manifest.json +31 -0
  98. package/src/output/runtime-pilot-framer/motion-spec.json +25 -0
  99. package/src/output/runtime-pilot-framer/runtime-evidence.json +96 -0
  100. package/src/output/runtime-pilot-framer/runtime-telemetry.json +100 -0
  101. package/src/output/runtime-pilot-framer/scene.jsx +52 -0
  102. package/src/output/runtime-pilot-framer/snapshot/.render-meta.json +9 -0
  103. package/src/output/runtime-pilot-framer/snapshot/frame-00.png +0 -0
  104. package/src/output/runtime-pilot-framer/snapshot/frame-100.png +0 -0
  105. package/src/output/runtime-pilot-framer/snapshot/frame-50.png +0 -0
  106. package/tests/scripts/run_tests.py +151 -0
  107. package/tests/scripts/test_ai_pilot_builder.py +128 -0
  108. package/tests/scripts/test_alpha_isolation.py +60 -0
  109. package/tests/scripts/test_artifact_intake.py +146 -0
  110. package/tests/scripts/test_asset_consistency.py +199 -0
  111. package/tests/scripts/test_rig_compatibility.py +105 -0
  112. package/tests/scripts/test_rive_package_gate.py +101 -0
  113. package/tests/scripts/test_runtime_candidate.py +95 -0
package/CHANGELOG.md CHANGED
@@ -4,7 +4,49 @@ 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.5.0] - 2026-08-17
8
+
9
+ ### Added
10
+
11
+ - Read-only `motionloom capability card --format json` discovery surface. It exports the evidence-validated runtime registry for an Agent, including runtime status, adapter/version, compatibility, verification timestamp, inputs/outputs, evidence references, limitations, fallback, risk and side-effect metadata.
12
+ - `pnpm intelligence:card` shortcut and `agent-card.json` command/capability declarations for machine-readable discovery without a parallel capability policy.
13
+ - `capability-registry.json` is included in the npm package allowlist, so the default card command has its verified registry after a normal package installation.
14
+ - Benchmark research ledger comparing public agent workflow, model-serving and AI/video repositories; the release applies the low-risk capability-card lesson and records deferred generation-profile and hash-bound workflow-template work with explicit gates.
15
+ - Native `apps/apple/` alpha in the GitHub source release: shared Swift packages for contracts, review state, macOS bridge, review UI and local-first CloudKit metadata sync, plus unsigned macOS Studio and iOS/iPadOS Review build targets and Apple CI.
16
+
17
+ ### Verified
18
+
19
+ - Capability-card export validates registry evidence before output and fails closed for missing, altered or out-of-repository evidence. It does not select a runtime or infer review/production approval.
20
+ - The repository release target passes the full regression suite, Skill/doctor and documentation gates, package artifact inspection, and GitHub Quality, Security, Documentation and Apple CI checks.
21
+
22
+ ### Boundary
23
+
24
+ - The Apple deliverable is an alpha source release. It has no Apple Developer signing, CloudKit production container, TestFlight distribution or iOS Simulator UI-smoke claim.
25
+ - Capability discovery is not execution authority. Runtime selection still validates current evidence, and attestation/production approval remain non-derived human decisions.
26
+
27
+ ## [2.4.0] - 2026-08-15
28
+
29
+ ### Added
30
+
31
+ - Deterministic Asset Consistency Compiler with identity, action-set, frame-geometry, atlas and layered-map schemas.
32
+ - Standard-library PNG measurement for alpha bounds, pivot/footline/bbox drift, frame/atlas contamination, region overlap, tile seams, parallax ordering and camera-safe bounds.
33
+ - Cross-platform `motionloom asset-consistency validate|analyze|report` commands, npm smoke scripts, public examples and regression coverage.
34
+ - 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.
35
+ - 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.
36
+ - Dev Lab evidence rail and Pipeline handoff support for Artifact Intake, runtime candidate and rig compatibility findings before a user review decision.
37
+ - 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.
38
+ - 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.
39
+
40
+ ### Fixed
41
+
42
+ - 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.
43
+ - 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.
44
+ - Quality CI correctly discovers valid task bundles whose task ID differs from the scene slug, including the runtime-first pilot shape.
45
+
46
+ ### Boundary
47
+
48
+ - Consistency evidence measures and reports artifact agreement only. It never grants artist authority, production eligibility, production approval or PR authorization.
49
+ - 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
50
 
9
51
  ## [2.3.0] - 2026-08-14
10
52
 
@@ -87,6 +129,8 @@ See the [2.0.0 release note](docs/releases/2.0.0.md).
87
129
  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
130
 
89
131
  [2.2.0]: docs/releases/2.2.0.md
132
+ [2.5.0]: docs/releases/2.5.0.md
133
+ [2.4.0]: docs/releases/2.4.0.md
90
134
  [2.3.0]: docs/releases/2.3.0.md
91
135
  [2.1.0]: docs/releases/2.1.0.md
92
136
  [2.0.0]: docs/releases/2.0.0.md
package/README.md CHANGED
@@ -6,6 +6,7 @@
6
6
  [![License](https://img.shields.io/github/license/lenhonbp/MotionLoom)](LICENSE)
7
7
  [![Node.js 18+](https://img.shields.io/badge/Node.js-18%2B-339933?logo=node.js&logoColor=white)](https://nodejs.org/)
8
8
  [![Python 3.11+](https://img.shields.io/badge/Python-3.11%2B-3776AB?logo=python&logoColor=white)](https://www.python.org/)
9
+ [![Apple](https://github.com/lenhonbp/MotionLoom/actions/workflows/apple.yml/badge.svg)](https://github.com/lenhonbp/MotionLoom/actions/workflows/apple.yml)
9
10
  [![Agent Skills](https://img.shields.io/badge/Agent%20Skill-compatible-5B5BD6)](https://agentskills.io/specification)
10
11
 
11
12
  **Project-aware animation production and runtime verification for coding agents.**
@@ -14,7 +15,7 @@ MotionLoom is an independent open-source Agent Skill for building UI motion, Lot
14
15
 
15
16
  > **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
17
 
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.
18
+ > **Release posture:** MotionLoom 2.5.0 adds an evidence-bound Agent capability card, benchmark-informed runtime discovery, and the native macOS/iOS review alpha in the GitHub source release under `apps/apple/`. The npm package remains the cross-platform Node/Python Skill and documentation surface; it does not distribute or sign the Xcode app. Verify npm/GitHub publication metadata separately; passing evidence never implies user approval.
18
19
 
19
20
  ## Why MotionLoom
20
21
 
@@ -29,6 +30,7 @@ MotionLoom turns that fragile sequence into a bounded production system. Its dur
29
30
  | **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
31
  | **Motion planning** | Framework-aware Motion Spec, timing/easing/accessibility budgets and framework selection | Present a template as a project-integrated result |
31
32
  | **Asset provenance** | Required `source_binding`, authority, license and SHA-256 traceability | Promote unknown, unlicensed or placeholder production assets |
33
+ | **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
34
  | **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
35
  | **Agent intelligence** | Project graph, provenance, Motion IR, replay, semantic lint, continuity and fix plan | Convert confidence, benchmark output or warnings into approval |
34
36
  | **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 +57,7 @@ Every handoff is machine-readable. The typical bundle under `artifacts/<task-id>
55
57
 
56
58
  ## Quick start
57
59
 
58
- ### Recommended: one command from the project
60
+ ### Start once. Continue your normal work.
59
61
 
60
62
  ```bash
61
63
  cd /path/to/your/project
@@ -63,20 +65,31 @@ npx --yes motionloom setup
63
65
  npx --no-install motionloom status
64
66
  ```
65
67
 
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.
68
+ 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
69
 
68
- Preview or repair the same flow without memorizing low-level commands:
70
+ 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.
71
+
72
+ Use these only if you need them:
69
73
 
70
74
  ```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
75
+ npx --yes motionloom init --dry-run --json # preview; no install or file changes
76
+ npx --no-install motionloom doctor # check the installed package
77
+ npx --no-install motionloom repair --yes # restore only missing managed pieces
75
78
  ```
76
79
 
77
80
  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
81
 
79
- ### Start from a real project
82
+ ### When you begin animation work
83
+
84
+ 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.
85
+
86
+ | Your task | Start with | MotionLoom reveals next |
87
+ |---|---|---|
88
+ | UI motion, loading state, page transition | `motionloom analyze . --init-memory` | Scene plan, runtime render and Dev Lab review |
89
+ | Imported or AI-generated frames, sprite atlas, layered map | The same project analysis | Provenance and measured asset-consistency/intake steps |
90
+ | Rive, Spine or other packaged runtime asset | The same project analysis | Package, rig and runtime evidence steps |
91
+
92
+ ### Advanced: start from a real project
80
93
 
81
94
  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
95
 
@@ -101,12 +114,12 @@ npx --no-install motionloom devlab loading
101
114
  # Validate the exact task bundle before any Git side effect.
102
115
  npx --no-install motionloom quality-gate --scene loading \
103
116
  --context project-context.json \
104
- --task-dir artifacts/loading-task \
117
+ --task-dir artifacts/<task-id> \
105
118
  --require-browser-review --require-intelligence --require-p1 \
106
119
  --require-benchmark --require-telemetry --require-attestation --require-asset-provenance
107
120
 
108
121
  # 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
122
+ npx --no-install motionloom pr loading --task-dir artifacts/<task-id>
110
123
  ```
111
124
 
112
125
  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).
@@ -142,6 +155,14 @@ Read the [Project Memory schema](schemas/project-memory.schema.json), [2.1.0 rel
142
155
 
143
156
  Capability selection uses `agent-card.json` and the capability registry. A runtime is not promoted from `scaffold_only` to `verified` because a template exists; its adapter evidence and CI contract must pass.
144
157
 
158
+ An Agent can inspect the read-only capability card before choosing a renderer:
159
+
160
+ ```bash
161
+ motionloom capability card --format json
162
+ ```
163
+
164
+ The card exposes declared compatibility, evidence references, limitations and fallback paths. It does **not** select a runtime, refresh evidence, infer production approval or replace the verification step; use `motionloom intelligence capabilities select --registry capability-registry.json --capability runtime.<id>` immediately before execution.
165
+
145
166
  ## Evidence, trust and review
146
167
 
147
168
  MotionLoom keeps distinct layers distinct:
@@ -184,6 +205,56 @@ motionloom asset-provenance check --input src/output/<scene>/asset-provenance.js
184
205
 
185
206
  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
207
 
208
+ ## Asset consistency compiler
209
+
210
+ 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.
211
+
212
+ | Contract | Deterministic checks | Typical failure surfaced |
213
+ |---|---|---|
214
+ | `identity` | Asset ID, style profile, palette/camera/scale/pivot and reference hash | Frame set silently changes character identity or visual rules |
215
+ | `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 |
216
+ | `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 |
217
+ | `atlas` | Region bounds/overlap, rotation policy and opaque pixels outside declared regions | Packing leaves contamination, overlap or ambiguous UV ownership |
218
+ | `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 |
219
+
220
+ Run one contract at a time and keep its JSON result in the task bundle:
221
+
222
+ ```bash
223
+ motionloom asset-consistency validate --kind action-set \
224
+ --input src/output/<scene>/hero-walk-action-set.json --root src/output/<scene> --json
225
+ motionloom asset-consistency validate --kind atlas \
226
+ --input src/output/<scene>/hero-atlas-contract.json --root src/output/<scene> --strict --json
227
+ motionloom asset-consistency report --kind layered-map \
228
+ --input src/output/<scene>/forest-layered-map.json --root src/output/<scene> --json
229
+ ```
230
+
231
+ 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.
232
+
233
+ 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.
234
+
235
+ ## Provider-neutral Artifact Intake and runtime candidates
236
+
237
+ 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.
238
+
239
+ ```bash
240
+ # Bind an Agent-managed ImageGen-style output or another provider to deterministic artifacts.
241
+ motionloom artifact-intake intake --root <project-root> \
242
+ --registry artifact-adapter-registry.json \
243
+ --receipt <generation-receipt.json> \
244
+ --controls <control-track.json> \
245
+ --export-manifest <export-manifest.json> --json
246
+
247
+ # Permit only an intake bundle and consistency contracts whose refs/hashes agree.
248
+ motionloom runtime-candidate validate --root <project-root> \
249
+ --input <runtime-candidate.json> --json
250
+
251
+ # Validate skeleton/action/socket/event/export compatibility against an adapter registry.
252
+ motionloom rig-compatibility validate --root <project-root> \
253
+ --registry rig-adapter-registry.json --input <rig-compatibility.json> --json
254
+ ```
255
+
256
+ 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.
257
+
187
258
  ## How an Agent uses the Skill
188
259
 
189
260
  The public integration surfaces are intentionally small and inspectable:
@@ -195,6 +266,14 @@ The public integration surfaces are intentionally small and inspectable:
195
266
 
196
267
  The Skill can trigger or suggest an internal browser-capable Agent to open the Dev Lab after rendering. Dev Lab is post-render review infrastructure, not a competing Skill. The user can request changes, receive a structured fix plan and rerender selectively, or explicitly confirm the PR path.
197
268
 
269
+ ## Native companion apps (alpha)
270
+
271
+ `apps/apple/` contains the native-first Apple companion surface. **MotionLoom Studio for macOS** opens a scoped project, exposes the evidence and timeline inspection surface, and can request only allow-listed local checks. **MotionLoom Review for iPhone and iPad** reads a hash-bound review launch descriptor, scrubs evidence, records annotations, and exports a human review decision.
272
+
273
+ These apps do not replace the Agent, the npm CLI or Dev Lab. They make a project’s artifact state and human review decision visible between Agent sessions. They cannot grant `production_approved`, set `OPEN_PR=1`, push Git changes, publish npm packages, or turn an AI-generated asset into artist-authored material.
274
+
275
+ Read [the Apple workspace guide](apps/apple/README.md), [the contract boundary](docs/architecture/apple/contracts.md), and [the TestFlight preparation guide](docs/apple-distribution.md) before building locally.
276
+
198
277
  ## Repository map
199
278
 
200
279
  | Path | Purpose |
@@ -211,10 +290,14 @@ The Skill can trigger or suggest an internal browser-capable Agent to open the D
211
290
  | `references/` | Progressive-disclosure implementation references |
212
291
  | `docs/` | Framework selection, checklists, audits and release notes |
213
292
  | `dev-lab/` | Self-contained browser review workbench and harness |
293
+ | `apps/apple/` | macOS Studio and iOS/iPadOS Review companion sources, Swift packages, Xcode project and local build guide |
214
294
  | `artifacts/<task-id>/` | Per-task evidence, report and handoff bundle |
215
295
  | `schemas/visual-truth.schema.json`, `scripts/visual-truth.py` | Provenance-bound visual comparison and review explanation contract |
216
296
  | `schemas/remediation-history.schema.json`, `scripts/remediation-learning.py` | Append-only remediation/benchmark ledger and aggregate learning metrics |
217
297
  | `schemas/asset-provenance.schema.json`, `scripts/asset-provenance.py` | Tiered origin, authority, readiness, license, hash and human-review gate for asset candidates |
298
+ | `schemas/generation-receipt.schema.json`, `scripts/artifact-intake.py` | Provider-neutral receipt/control/export intake with hash-bound adapter evidence |
299
+ | `schemas/runtime-candidate.schema.json`, `scripts/runtime-candidate.py` | Control-to-consistency bridge that permits only hash-compatible runtime test candidates |
300
+ | `schemas/rig-compatibility.schema.json`, `scripts/rig-compatibility.py` | Skeleton/socket/action/event/export compatibility evidence for runtime adapters |
218
301
  | `tests/` | Regression, adversarial and deep-stress evaluation harnesses |
219
302
 
220
303
  ## Documentation map
@@ -228,8 +311,11 @@ The Skill can trigger or suggest an internal browser-capable Agent to open the D
228
311
  | Run labeled project evaluation | [Project corpus manifest](tests/evals/project-corpus.json) and `python3 scripts/eval-projects.py --allow-insufficient` |
229
312
  | Understand trust boundaries | [Signed attestation](references/signed-attestation.md) and [2.0.0 release note](docs/releases/2.0.0.md) |
230
313
  | Classify AI-generated or assisted assets | [Asset provenance tiers](schemas/asset-provenance.schema.json), `motionloom asset-provenance`, and the [production checklist](docs/CHECKLIST.md) |
314
+ | 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) |
315
+ | Check control-to-runtime and rig compatibility | `motionloom runtime-candidate`, `motionloom rig-compatibility`, and [production checklist](docs/CHECKLIST.md) |
231
316
  | Validate visual truth before review/PR | `motionloom visual-truth build|validate` and [production checklist](docs/CHECKLIST.md) |
232
317
  | 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) |
318
+ | Build the native review companions | [Apple workspace guide](apps/apple/README.md), [Studio architecture](docs/architecture/apple/studio.md), and [distribution preparation](docs/apple-distribution.md) |
233
319
  | Contribute code or docs | [CONTRIBUTING.md](CONTRIBUTING.md) |
234
320
  | Report a vulnerability or request help | [SECURITY.md](SECURITY.md) and [SUPPORT.md](SUPPORT.md) |
235
321
  | See version history | [CHANGELOG.md](CHANGELOG.md) and [release notes](docs/releases/) |
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.5.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.5.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,9 +28,20 @@
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",
44
+ "capability.card",
34
45
  "capability.select",
35
46
  "replay.capture",
36
47
  "replay.verify",
@@ -76,8 +87,14 @@
76
87
  "host-project",
77
88
  "project-manifest",
78
89
  "animation-request",
79
- "source-asset"
80
- ,"asset-provenance"
90
+ "source-asset",
91
+ "asset-provenance",
92
+ "asset-consistency-contract",
93
+ "generation-receipt",
94
+ "control-track",
95
+ "export-manifest",
96
+ "runtime-candidate",
97
+ "rig-compatibility-contract"
81
98
  ],
82
99
  "output_artifacts": [
83
100
  "agent-discovery-report",
@@ -86,6 +103,10 @@
86
103
  "runtime-scene",
87
104
  "source-binding",
88
105
  "asset-provenance",
106
+ "asset-consistency-report",
107
+ "artifact-intake-report",
108
+ "runtime-candidate-report",
109
+ "rig-compatibility-report",
89
110
  "dotlottie-package",
90
111
  "runtime-evidence",
91
112
  "runtime-telemetry",
@@ -101,6 +122,7 @@
101
122
  "project-graph",
102
123
  "provenance-attestation",
103
124
  "capability-registry",
125
+ "capability-card",
104
126
  "motion-ir",
105
127
  "replay-bundle",
106
128
  "semantic-lint-report",
@@ -154,6 +176,7 @@
154
176
  }
155
177
  ],
156
178
  "entrypoints": {
179
+ "init": "npx --yes motionloom init --project-root <project-path>",
157
180
  "setup": "npx --yes motionloom setup --project-root <project-path>",
158
181
  "setup_dry_run": "npx --yes motionloom setup --project-root <project-path> --dry-run --json",
159
182
  "status": "npx --no-install motionloom status --project-root <project-path> --json",
@@ -182,6 +205,7 @@
182
205
  "intelligence_graph": "python3 scripts/intelligence.py graph build --task-dir artifacts/<task-id>",
183
206
  "intelligence_provenance": "python3 scripts/intelligence.py provenance build --task-dir artifacts/<task-id>",
184
207
  "intelligence_capabilities": "python3 scripts/intelligence.py capabilities build --output capability-registry.json",
208
+ "intelligence_capability_card": "motionloom capability card --format json",
185
209
  "intelligence_motion_ir": "python3 scripts/intelligence.py motion-ir build --task-dir artifacts/<task-id>",
186
210
  "intelligence_replay": "python3 scripts/intelligence.py replay capture --task-dir artifacts/<task-id>",
187
211
  "semantic_lint": "python3 scripts/intelligence.py semantic-lint build --task-dir artifacts/<task-id>",
@@ -192,7 +216,12 @@
192
216
  "asset_provenance_classify": "motionloom asset-provenance classify --input <asset-provenance.json> --json",
193
217
  "asset_provenance_validate": "motionloom asset-provenance validate --input <asset-provenance.json> --json",
194
218
  "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",
219
+ "asset_consistency_validate": "motionloom asset-consistency validate --kind <identity|action-set|frame-geometry|atlas|layered-map> --input <contract.json> --root <asset-root> --json",
220
+ "asset_consistency_report": "motionloom asset-consistency report --kind <identity|action-set|frame-geometry|atlas|layered-map> --input <contract.json> --root <asset-root> --strict --json",
221
+ "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",
222
+ "runtime_candidate_validate": "motionloom runtime-candidate validate --root <project-root> --input <runtime-candidate.json> --json",
223
+ "rig_compatibility_validate": "motionloom rig-compatibility validate --root <project-root> --registry rig-adapter-registry.json --input <rig-compatibility.json> --json",
224
+ "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
225
  "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
226
  "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
227
  "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.5.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
+ }