motionloom 2.1.0 → 2.3.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 (46) hide show
  1. package/.agents/skills/motionloom/SKILL.md +14 -0
  2. package/.claude/skills/motionloom.md +5 -0
  3. package/.codex/skills/motionloom.md +11 -0
  4. package/AGENTS.md +17 -0
  5. package/CHANGELOG.md +51 -0
  6. package/README.md +60 -15
  7. package/ROADMAP.md +11 -5
  8. package/SECURITY.md +3 -2
  9. package/SKILL.md +40 -5
  10. package/agent-card.json +42 -4
  11. package/agent-surfaces.json +86 -0
  12. package/bin/motionloom.mjs +26 -3
  13. package/docs/AGENT-INTEGRATION.md +60 -0
  14. package/docs/CHECKLIST.md +7 -1
  15. package/docs/STATUS.md +2 -2
  16. package/docs/audits/ci-replay-remediation-2026-08-13.md +33 -0
  17. package/docs/releases/2.2.0.md +35 -0
  18. package/docs/releases/2.3.0.md +33 -0
  19. package/docs/releases/npm-publish-from-workstation.md +6 -6
  20. package/examples/agent-consumer/README.md +18 -0
  21. package/examples/agent-consumer/ai-generated-pilot/hero-male.json +10 -0
  22. package/examples/agent-consumer/ai-generated-pilot-provenance.json +55 -0
  23. package/examples/agent-consumer/fixture-manifest.json +82 -0
  24. package/package.json +31 -7
  25. package/references/agent-interoperability.md +40 -0
  26. package/references/intelligence-core.md +12 -2
  27. package/schemas/agent-surfaces.schema.json +78 -0
  28. package/schemas/asset-provenance.schema.json +183 -0
  29. package/schemas/remediation-history.schema.json +23 -0
  30. package/schemas/scene-manifest.schema.json +2 -0
  31. package/schemas/visual-truth.schema.json +80 -0
  32. package/scripts/asset-provenance.py +390 -0
  33. package/scripts/devlab.py +1 -1
  34. package/scripts/discovery.py +257 -0
  35. package/scripts/docs-audit.py +30 -2
  36. package/scripts/pr.py +3 -0
  37. package/scripts/quality-gate.py +81 -3
  38. package/scripts/remediation-learning.py +326 -0
  39. package/scripts/report.py +66 -0
  40. package/scripts/setup.mjs +472 -0
  41. package/scripts/skill-doctor.py +2 -1
  42. package/scripts/visual-truth.py +310 -0
  43. package/src/output/browser-review-smoke/asset-provenance.json +77 -0
  44. package/src/output/browser-review-smoke/manifest.json +2 -0
  45. package/src/output/browser-review-smoke/visual-truth.json +68 -0
  46. package/tests/scripts/run_tests.py +83 -0
@@ -0,0 +1,14 @@
1
+ ---
2
+ name: motionloom
3
+ description: Load the canonical MotionLoom Skill from the repository root for project-aware animation production, runtime evidence, Dev Lab review and review-first PR handoff.
4
+ ---
5
+
6
+ # MotionLoom Agent Skills surface
7
+
8
+ This is a **portable discovery alias**, not a second copy of the Skill. Load the canonical [`SKILL.md`](../../../SKILL.md) from the repository root and use [`agent-card.json`](../../../agent-card.json) for machine-readable capabilities. Before using the Skill, run:
9
+
10
+ ```text
11
+ motionloom discovery check --root <motionloom-checkout> --json
12
+ ```
13
+
14
+ Keep the review boundary intact: a candidate may be rendered and reviewed, but approval is never inferred and a PR is never opened without explicit user confirmation.
@@ -0,0 +1,5 @@
1
+ # MotionLoom for Claude Code
2
+
3
+ Use MotionLoom when the task creates, fixes, validates, renders or hands off animation inside an existing project. Load the repository-root [`SKILL.md`](../../SKILL.md) as the canonical instruction source and [`agent-card.json`](../../agent-card.json) for capability discovery. Do not copy or fork the workflow into this file.
4
+
5
+ Start with `motionloom discovery check --root <motionloom-checkout> --json`, then follow the required lifecycle: project context → source binding → runtime evidence → Dev Lab browser review → user-confirmed handoff. `approval` remains `false` until the user explicitly approves.
@@ -0,0 +1,11 @@
1
+ # MotionLoom for Codex
2
+
3
+ Use MotionLoom for project-aware animation work, including Lottie/dotLottie, Rive, GSAP, Framer Motion, body rigs and runtime-backed review. Load the canonical repository-root [`SKILL.md`](../../SKILL.md) and use [`agent-card.json`](../../agent-card.json) rather than duplicating instructions.
4
+
5
+ Verify discovery first:
6
+
7
+ ```text
8
+ motionloom discovery check --root <motionloom-checkout> --json
9
+ ```
10
+
11
+ Always produce task-bound artifacts and runtime evidence, suggest/open the internal Dev Lab after rendering, report unresolved issues, and stop before commit/push/PR unless the user explicitly confirms.
package/AGENTS.md ADDED
@@ -0,0 +1,17 @@
1
+ # MotionLoom Agent Router
2
+
3
+ This repository exposes one canonical Agent Skill: [`SKILL.md`](SKILL.md). Load it when the task concerns animation production, motion design, asset binding, runtime rendering, Dev Lab review or PR handoff. Use [`agent-card.json`](agent-card.json) for machine-readable capabilities and [`agent-surfaces.json`](agent-surfaces.json) for installation/discovery compatibility.
4
+
5
+ ## First action
6
+
7
+ Run the offline discovery check from the checkout root:
8
+
9
+ ```text
10
+ motionloom discovery check --root . --json
11
+ ```
12
+
13
+ Then follow the lifecycle in `SKILL.md`. The repository may coordinate Lottie, dotLottie, Rive, GSAP and Framer Motion, but it does not replace those runtimes. Render evidence, provenance, semantic checks and browser review are separate states. **Do not infer user approval from a passing heuristic, signature, screenshot or quality gate.**
14
+
15
+ ## Source of truth
16
+
17
+ Do not duplicate or edit Agent-specific copies of the workflow. If this router conflicts with `SKILL.md`, the canonical root Skill and machine-readable schemas win. Use `references/agent-interoperability.md` for discovery details and `docs/AGENT-INTEGRATION.md` for installation examples.
package/CHANGELOG.md CHANGED
@@ -2,6 +2,55 @@
2
2
 
3
3
  All notable MotionLoom changes are documented here. The project follows semantic versioning for the npm package and keeps major contract changes in dedicated release notes under [`docs/releases/`](docs/releases/).
4
4
 
5
+ ## [Unreleased]
6
+
7
+ No unreleased changes are recorded.
8
+
9
+ ## [2.3.0] - 2026-08-14
10
+
11
+ ### Added
12
+
13
+ - AI-first, human-governed asset provenance contract with explicit authority/origin tiers, readiness states, generator/derivation metadata, per-file SHA-256, license/source records, runtime evidence and human-review boundaries.
14
+ - Cross-platform `motionloom asset-provenance` commands for validation, classification, reporting and runtime/production checks, plus a transparent AI-generated pilot fixture.
15
+ - One-command `npx --yes motionloom setup` onboarding for real projects, with package-manager detection, local devDependency installation, project-bound context and durable Project Memory bootstrap.
16
+ - Read-only `motionloom status`, safe `motionloom repair`, dry-run JSON output and an idempotent managed `AGENTS.md` router for Agent integration.
17
+ - Canonical `npx` installation recipe in Agent discovery plus Ubuntu/macOS/Windows onboarding regressions and package/docs guards.
18
+
19
+ ### Fixed
20
+
21
+ - Production quality and PR preflight now fail closed when an asset is unknown, self-asserted as artist-authored, not production-eligible or missing a manifest-bound provenance record; `production_approved` remains human-only.
22
+ - Setup JSON output no longer mixes package-manager logs with machine-readable results, and repair/status routing does not trigger an unintended full setup.
23
+
24
+ ### Verified
25
+
26
+ - Full regression, onboarding and installation-matrix tests, discovery contract, docs audit, Skill Doctor, skill-creator validation, quality validation, npm tarball dry-run and diff hygiene pass.
27
+
28
+ ### Boundary
29
+
30
+ - Setup never commits, pushes, opens a PR, grants approval or promotes asset provenance. User review remains required before any PR handoff.
31
+
32
+ ## [2.2.0] - 2026-08-13
33
+
34
+ ### Added
35
+
36
+ - Canonical Agent interoperability surfaces for `.agents/skills`, `.claude`, `.codex`, source discovery and cross-platform installation checks.
37
+ - Consumer fixtures for Lottie/dotLottie, Rive, GSAP, Framer Motion, body rigs and multi-scene continuity.
38
+ - Visual Truth Contract with frame hashes, runtime/source provenance, deterministic perceptual signals, region explanations and review-required semantics.
39
+ - Append-only, hash-chained Remediation Learning ledger for user-confirmed outcomes, correction counts, first-pass acceptance, issue-class outliers and benchmark provenance.
40
+
41
+ ### Fixed
42
+
43
+ - Quality CI now rebuilds the context-bound replay bundle after runtime, report and attestation artifacts are generated, preventing stale replay hashes from rejecting an otherwise valid changed-scene gate.
44
+
45
+ ### Verified
46
+
47
+ - Mainline Quality, Documentation and Package Hygiene, and Security workflows pass on the replay-remediation commit.
48
+ - The local release candidate passes the full regression, docs/Skill validation, runtime adapter, discovery, installation matrix, Visual Truth, Remediation Learning, attestation and npm tarball checks.
49
+
50
+ ### Boundary
51
+
52
+ - This is a release candidate prepared from the green mainline. Remote tag creation, GitHub Release creation and npm publication remain explicit maintainer actions; evidence and heuristics never grant user approval.
53
+
5
54
  ## [2.1.0] - 2026-08-13
6
55
 
7
56
  ### Added
@@ -37,5 +86,7 @@ See the [2.0.0 release note](docs/releases/2.0.0.md).
37
86
 
38
87
  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/).
39
88
 
89
+ [2.2.0]: docs/releases/2.2.0.md
90
+ [2.3.0]: docs/releases/2.3.0.md
40
91
  [2.1.0]: docs/releases/2.1.0.md
41
92
  [2.0.0]: docs/releases/2.0.0.md
package/README.md CHANGED
@@ -14,7 +14,7 @@ MotionLoom is an independent open-source Agent Skill for building UI motion, Lot
14
14
 
15
15
  > **MotionLoom is not an auto-approval layer.** A valid signature, a passing heuristic, or a successful render proves only the contract it checks. Visual quality, intent, accessibility and PR authorization remain reviewable human decisions.
16
16
 
17
- > **Release posture:** the repository source and `package.json` are at **2.1.0**. The public npm registry currently serves **2.0.0** and no GitHub tag/Release for 2.1.0 exists yet; a maintainer must perform the protected manual release before the registry and GitHub release state change.
17
+ > **Release posture:** `motionloom@2.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
18
 
19
19
  ## Why MotionLoom
20
20
 
@@ -55,15 +55,26 @@ Every handoff is machine-readable. The typical bundle under `artifacts/<task-id>
55
55
 
56
56
  ## Quick start
57
57
 
58
- ### Install the public CLI
58
+ ### Recommended: one command from the project
59
59
 
60
60
  ```bash
61
- npm install --global motionloom
62
- motionloom doctor --json
63
- motionloom --help
61
+ cd /path/to/your/project
62
+ npx --yes motionloom setup
63
+ npx --no-install motionloom status
64
+ ```
65
+
66
+ This is the easiest path for a project owner. The wizard detects the host project, installs MotionLoom locally as a development dependency, merges an idempotent `AGENTS.md` router, runs discovery and creates fresh project context plus durable `.motionloom/project-memory.json`. It never commits, pushes, opens a PR or grants asset approval.
67
+
68
+ Preview or repair the same flow without memorizing low-level commands:
69
+
70
+ ```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
64
75
  ```
65
76
 
66
- MotionLoom supports **Node.js 18+** and **Python 3.11+** on Ubuntu, macOS and Windows. The npm wrapper is the cross-platform surface: it discovers the platform Python executable and delegates to the same canonical contracts used by a repository checkout.
77
+ 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.
67
78
 
68
79
  ### Start from a real project
69
80
 
@@ -72,30 +83,30 @@ Run the first commands from the project that owns the animation. Do not copy the
72
83
  ```bash
73
84
  cd /path/to/your/project
74
85
 
75
- # Understand the project and bootstrap/recover durable memory.
76
- motionloom analyze . --init-memory
77
- motionloom memory inspect --project-root . --json
86
+ # Setup already analyzed the project and bootstrapped durable memory.
87
+ npx --no-install motionloom status --json
88
+ npx --no-install motionloom memory inspect --project-root . --json
78
89
 
79
90
  # Bound traversal when the host project is large; truncation is reported, never hidden.
80
- motionloom analyze . --max-files 2500 --max-bytes 25000000 --max-seconds 10
91
+ npx --no-install motionloom analyze . --max-files 2500 --max-bytes 25000000 --max-seconds 10
81
92
 
82
93
  # Plan and generate the scene using the selected framework.
83
94
  python3 /path/to/MotionLoom/src/core/spec.py generate loading \
84
95
  --context project-context.json --output motion-spec.json --loop
85
96
 
86
97
  # Render real runtime evidence and prepare the Dev Lab review handoff.
87
- motionloom render loading
88
- motionloom devlab loading
98
+ npx --no-install motionloom render loading
99
+ npx --no-install motionloom devlab loading
89
100
 
90
101
  # Validate the exact task bundle before any Git side effect.
91
- motionloom quality-gate --scene loading \
102
+ npx --no-install motionloom quality-gate --scene loading \
92
103
  --context project-context.json \
93
104
  --task-dir artifacts/loading-task \
94
105
  --require-browser-review --require-intelligence --require-p1 \
95
- --require-benchmark --require-telemetry --require-attestation
106
+ --require-benchmark --require-telemetry --require-attestation --require-asset-provenance
96
107
 
97
108
  # Local-only by default. A user must review and explicitly authorize side effects.
98
- motionloom pr loading --task-dir artifacts/loading-task
109
+ npx --no-install motionloom pr loading --task-dir artifacts/loading-task
99
110
  ```
100
111
 
101
112
  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).
@@ -138,6 +149,8 @@ MotionLoom keeps distinct layers distinct:
138
149
  | Layer | It proves | It does not prove |
139
150
  |---|---|---|
140
151
  | Runtime evidence | The selected runtime produced the declared snapshots and observed state | That the motion is aesthetically correct or user-approved |
152
+ | Visual Truth Contract | Baseline/candidate frame identity, dimensions, provenance and review-required regions are bound to the scene | That a changed frame is acceptable or user-approved |
153
+ | Remediation Learning | User-confirmed correction outcomes and deterministic benchmark history with first-pass metrics | That aggregate history can approve a new animation or replace review |
141
154
  | Provenance | Which source/material/product bytes were used and how they hash | That the source is appropriate beyond the declared authority/license contract |
142
155
  | Semantic lint and benchmark | Bounded rule findings, risk signals and performance measurements | Human visual quality or intent acceptance |
143
156
  | Signed attestation | A trusted signer signed the same task-bound hashes under the policy | Reviewer consent, accessibility approval or PR authorization |
@@ -145,6 +158,32 @@ MotionLoom keeps distinct layers distinct:
145
158
 
146
159
  `approval` remains `false` in attestation and verifier artifacts. The default PR mode is local-only (`OPEN_PR=0`); commit, push and pull-request operations remain explicit side effects.
147
160
 
161
+ ## Asset provenance tiers
162
+
163
+ MotionLoom separates **asset origin**, **runtime readiness**, **production eligibility** and **human approval**. This is essential for AI-first workflows: an Agent may create a valid pilot, ingest it into the real runtime and expose it in Dev Lab without being allowed to call that pilot artist-authored or approved for production.
164
+
165
+ | Authority / origin | Runtime behavior | Production behavior |
166
+ |---|---|---|
167
+ | `ai_generated` | `runtime_ready` when hashes, license metadata and runtime evidence pass | Never `production_eligible` |
168
+ | `ai_assisted` | `runtime_ready` after contract validation | Eligible only after recorded human sign-off and full gate |
169
+ | `ai_assisted_human_reviewed` | `runtime_ready` | `review_required` until the declared production gate is complete; no automatic approval |
170
+ | `artist_authored` | Runtime-testable when the package is valid | Eligible after verified authority, license, runtime and quality checks; not from Agent self-assertion |
171
+ | `unknown` | `blocked` | Blocked |
172
+
173
+ The readiness value `production_approved` is reserved for a human decision and is not minted by `asset-provenance`, `quality-gate`, attestation or any Agent. Use the following commands against the exact scene artifact:
174
+
175
+ ```bash
176
+ motionloom asset-provenance validate --input src/output/<scene>/asset-provenance.json --json
177
+ motionloom asset-provenance check --input src/output/<scene>/asset-provenance.json \
178
+ --root src/output/<scene> --mode runtime \
179
+ --manifest src/output/<scene>/manifest.json --json
180
+ motionloom asset-provenance check --input src/output/<scene>/asset-provenance.json \
181
+ --root src/output/<scene> --mode production \
182
+ --manifest src/output/<scene>/manifest.json --json
183
+ ```
184
+
185
+ 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
+
148
187
  ## How an Agent uses the Skill
149
188
 
150
189
  The public integration surfaces are intentionally small and inspectable:
@@ -162,6 +201,7 @@ The Skill can trigger or suggest an internal browser-capable Agent to open the D
162
201
  |---|---|
163
202
  | `SKILL.md` | Installable Agent Skill contract |
164
203
  | `agent-card.json` | Capability discovery and side-effect policy |
204
+ | `agent-surfaces.json`, `.agents/`, `.claude/`, `.codex/` | Cross-Agent discovery aliases and portability contract |
165
205
  | `bin/motionloom.mjs` | Cross-platform npm CLI entrypoint |
166
206
  | `src/core/` | Analyzer, Motion Spec and runtime snapshot engine |
167
207
  | `src/rig/` | Character body rig and pose engine |
@@ -172,6 +212,9 @@ The Skill can trigger or suggest an internal browser-capable Agent to open the D
172
212
  | `docs/` | Framework selection, checklists, audits and release notes |
173
213
  | `dev-lab/` | Self-contained browser review workbench and harness |
174
214
  | `artifacts/<task-id>/` | Per-task evidence, report and handoff bundle |
215
+ | `schemas/visual-truth.schema.json`, `scripts/visual-truth.py` | Provenance-bound visual comparison and review explanation contract |
216
+ | `schemas/remediation-history.schema.json`, `scripts/remediation-learning.py` | Append-only remediation/benchmark ledger and aggregate learning metrics |
217
+ | `schemas/asset-provenance.schema.json`, `scripts/asset-provenance.py` | Tiered origin, authority, readiness, license, hash and human-review gate for asset candidates |
175
218
  | `tests/` | Regression, adversarial and deep-stress evaluation harnesses |
176
219
 
177
220
  ## Documentation map
@@ -184,6 +227,8 @@ The Skill can trigger or suggest an internal browser-capable Agent to open the D
184
227
  | Understand Agent intelligence | [Intelligence Core](references/intelligence-core.md) and [roadmap](ROADMAP.md) |
185
228
  | Run labeled project evaluation | [Project corpus manifest](tests/evals/project-corpus.json) and `python3 scripts/eval-projects.py --allow-insufficient` |
186
229
  | Understand trust boundaries | [Signed attestation](references/signed-attestation.md) and [2.0.0 release note](docs/releases/2.0.0.md) |
230
+ | Classify AI-generated or assisted assets | [Asset provenance tiers](schemas/asset-provenance.schema.json), `motionloom asset-provenance`, and the [production checklist](docs/CHECKLIST.md) |
231
+ | Validate visual truth before review/PR | `motionloom visual-truth build|validate` and [production checklist](docs/CHECKLIST.md) |
187
232
  | 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) |
188
233
  | Contribute code or docs | [CONTRIBUTING.md](CONTRIBUTING.md) |
189
234
  | Report a vulnerability or request help | [SECURITY.md](SECURITY.md) and [SUPPORT.md](SUPPORT.md) |
package/ROADMAP.md CHANGED
@@ -2,18 +2,24 @@
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.1.0
5
+ ## Current baseline: 2.3.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 and cross-platform CLI/CI contracts.
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.
8
8
 
9
9
  ## Next milestones
10
10
 
11
11
  | Milestone | Focus | Acceptance signal | Status |
12
12
  |---|---|---|---|
13
- | **2.2** | Visual Truth Contract | Provenance-bound frame comparison with `pass`, `fail`, `warn` and `unknown`; no automatic user approval | Planned |
14
- | **2.3** | Remediation Learning | User-confirmed correction count, first-pass acceptance and rerender-avoidance ledger | Planned |
13
+ | **2.2** | Visual Truth Contract | Provenance-bound frame comparison with `pass`, `fail`, `warn` and `unknown`; no automatic user approval | Included in 2.2.0 candidate |
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
- | **2.5** | Agent Interoperability | Versioned schemas, compatibility matrix and replayable task bundles across Agents | Planned |
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 |
19
+
20
+ ## Working-tree implementation status
21
+
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.
17
23
 
18
24
  ## Product principles
19
25
 
package/SECURITY.md CHANGED
@@ -4,7 +4,8 @@
4
4
 
5
5
  | Version | Security fixes |
6
6
  |---|---|
7
- | `2.1.x` | Supported |
7
+ | `2.2.x` | Release candidate; support begins on publication |
8
+ | `2.1.x` | Current published line; supported until 2.2.0 publication |
8
9
  | `2.0.x` | Best effort while upgrading |
9
10
  | `<2.0.0` | Not supported |
10
11
 
@@ -20,7 +21,7 @@ MotionLoom can read and write files in the host project, invoke runtimes and pre
20
21
 
21
22
  Path guards, task identity, source/manifest hashes, evidence freshness, signer policy and approval invariants are security-relevant contracts. Report any bypass that allows cross-project memory, cross-task evidence, stale runtime output or unreviewed Git side effects.
22
23
 
23
- See the [signed attestation reference](references/signed-attestation.md), [browser review contract](references/browser-review-contract.md) and [2.1.0 release note](docs/releases/2.1.0.md) for the current threat model and limitations.
24
+ See the [signed attestation reference](references/signed-attestation.md), [browser review contract](references/browser-review-contract.md) and [2.2.0 release note](docs/releases/2.2.0.md) for the current threat model and limitations.
24
25
 
25
26
  ## CI/CD controls
26
27
 
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.1.0"
10
+ version: "2.3.0"
11
11
  target_frameworks: "lottie,dotlottie,rive,gsap,framer-motion,spine,threejs"
12
12
  verified_runtimes: "lottie-json,dotlottie-package,svg-cutout-rig,rive,gsap,framer-motion"
13
13
  ---
@@ -18,21 +18,29 @@ metadata:
18
18
 
19
19
  Treat every animation request as a production task, not as an isolated asset-generation prompt. Always bind the work to the host project's context, emit machine-readable artifacts, render through the target runtime, expose review evidence in Dev Lab, and stop before commit when a required gate or user confirmation is missing.
20
20
 
21
+ ## Fast onboarding for a real project
22
+
23
+ When MotionLoom is not installed in the host project, prefer the single cross-platform entrypoint `npx --yes motionloom 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.
24
+
25
+ For Agent or CI composition, consume JSON and preserve the exit code. If the project is already a source checkout, use `node bin/motionloom.mjs setup --project-root <project> --motionloom-root <motionloom-checkout> --skip-install`; do not copy `project-context.json` or `.motionloom/project-memory.json` from the MotionLoom repository.
26
+
21
27
  ## Required workflow
22
28
 
23
- 1. **Understand** — read the host project manifest and run `motionloom analyze <project-path> --init-memory` (or `python scripts/analyze.py <project-path> --init-memory` in a repository checkout). Load `project-context.json` and `.motionloom/project-memory.json` from the audited project. If context is missing, stale or ambiguous, stop at `needs_context` and refresh before generation.
29
+ 1. **Understand** — run `motionloom 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`.
24
30
  2. **Plan** — classify the animation, select a framework, and generate a context-bound `motion-spec.json` with timing, easing, loop, accessibility, performance and source authority.
25
31
  3. **Source** — resolve an authoritative asset from the project or `assets/library/`. Record attribution, license and checksum in the scene manifest's required `source_binding`; the binding's SHA-256 must match the bytes referenced by `manifest.file`. Do not promote an unknown or placeholder asset to production.
32
+ 3a. **Classify asset provenance** — create or load `asset-provenance.json` with `motionloom asset-provenance`. Treat Agent-created material as ingestible only when its origin, generator task, license, file hash and derivation chain are explicit. `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.
26
33
  4. **Generate** — use the matching template or rig implementation. For body animation, preserve named anatomy, pivot and parent-first hierarchy.
27
34
  5. **Render** — run the platform-neutral Node entrypoint for scene output, or `node scripts/runtime-adapters.mjs` for the verified Rive/GSAP/Framer Motion adapter matrix. Acceptance requires runtime evidence at 0/50/100%, not a static placeholder. Keep the render metadata beside the snapshots.
28
35
  6. **Bind Intelligence Core** — build a framework-neutral `motion-ir.json`, `project-graph.json`, `provenance.json`, `replay-bundle.json`, `semantic-lint-report.json` and `semantic-lint-benchmark.json` with `python3 scripts/intelligence.py`. Select only a capability registry entry whose status is `verified`, whose evidence is fresh and whose compatibility matches the target environment. A confidence score or benchmark result can prioritize investigation; neither can replace deterministic or human acceptance.
29
36
  6a. **Harden the trust boundary** — keep artifact and task bundles inside the repository/task root, reject symlinked evidence, bind replay to its exact `task_dir`, `task_id` and scene, select one deterministic report bundle per scene, and require browser candidate/review identity and expiry checks before readiness. The Dev Lab must reject cross-origin or identity-mismatched artifact bases. In strict runtime-observability runs, capture `runtime-telemetry.json` and a read-only `evidence-verifier-report.json`; verifier output must preserve `approval: false`. These checks expose risk and prevent evidence mixing, but do not turn heuristics or evidence integrity into approval.
30
37
  6b. **Attest** — derive a canonical statement from the exact scene/task hashes, sign it with an Ed25519 key through `scripts/attestation.py`, and verify it with the independent `scripts/attestation-verifier.py` against a fail-closed `trust-policy.json`. DSSE/SLSA-compatible attestation proves signer and binding integrity only; `approval` must remain `false` and never replaces user review.
31
- 7. **Browser review handoff** — 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.
38
+ 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.
32
39
  8. **Review capture** — the browser Agent calls `window.__lab.getReview()` after the user approves or requests changes, then persists it with `python3 scripts/report.py review --task-dir artifacts/<task-id> --candidate-id <id> --decision approved|changes_requested --reviewer user`. A change request returns to generation; no approval means no PR.
33
- 9. **Validate** — run `motionloom 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`, and `motionloom doctor --json` when validating the Skill package itself.
40
+ 9. **Validate** — run `motionloom asset-provenance check --input src/output/<scene>/asset-provenance.json --root src/output/<scene> --mode runtime|production --manifest src/output/<scene>/manifest.json`, `motionloom visual-truth validate --root . --input src/output/<scene>/visual-truth.json --scene <scene> --task-id <task-id>`, `motionloom review-hook validate --task-dir artifacts/<task-id>`, `motionloom intelligence semantic-lint benchmark --task-dir artifacts/<task-id> --iterations 25 --threshold-ms 500`, `motionloom runtime-telemetry <scene> artifacts/<task-id>`, the independent attestation verifier, `motionloom report-contract --root . --scenes-file <changed-scenes> --require-attestation`, `motionloom quality-gate --scene <scene> --context <context-path> --task-dir artifacts/<task-id> --require-intelligence --require-p1 --require-benchmark --require-telemetry --require-attestation --require-visual-truth --require-asset-provenance`, and `motionloom doctor --json` when validating the Skill package itself.
34
41
  10. **Report** — create or update an artifact bundle with `python3 scripts/report.py`. Record facts with `report.py add`, structural defects with `report.py structure`, collect checksums with `report.py collect`, and run `report.py check` before rendering the final report. The final report must state completed, verified, not completed, blocked/failed, structure problems, browser candidate/review evidence and the recommended next Agent/Skill.
35
- 11. **Confirm** — only after approved browser review and a passing quality gate run the platform-neutral PR preparation command. Commit, push and open PR are explicit side effects.
42
+ 11. **Learn** — after a user-confirmed fix or a deterministic benchmark, record it with `motionloom remediation-learning record-outcome|record-benchmark`. Run `summary` to expose correction count, first-pass acceptance, success rate, issue-class outliers and benchmark pass rate. Only `--user-confirmed` outcomes contribute to remediation acceptance metrics.
43
+ 12. **Confirm** — only after approved browser review and a passing quality gate run the platform-neutral PR preparation command. Commit, push and open PR are explicit side effects.
36
44
 
37
45
  ## Durable Project Memory
38
46
 
@@ -61,6 +69,7 @@ Only user-confirmed decisions and outcomes may become durable remediation memory
61
69
  - Read `docs/ROADMAP-INTELLIGENCE.md` before extending graph, provenance, capability or replay behavior.
62
70
  - Read `references/intelligence-core.md` before building or validating Intelligence Core artifacts.
63
71
  - Read `docs/research/AGENT-PROTOCOL-FINDINGS.md` before exposing MotionLoom through Agent tools or MCP resources.
72
+ - 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.
64
73
 
65
74
  ## Non-negotiable contracts
66
75
 
@@ -72,9 +81,14 @@ Only user-confirmed decisions and outcomes may become durable remediation memory
72
81
  - Destructive Git actions require explicit confirmation. Use `OPEN_PR=0` for local review-only runs.
73
82
  - Intelligence Core artifacts are task-bound: graph, provenance, Motion IR and replay evidence must not be reused across tasks without revalidation.
74
83
  - 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`.
85
+ - `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
+ - 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.
75
87
  - 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.
76
88
  - 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.
77
89
  - 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.
90
+ - Visual Truth must bind baseline/candidate PNG hashes, dimensions, source, manifest, runtime evidence and Motion IR where available; it explains changed regions for review but never emits approval.
91
+ - Remediation Learning history is append-only and hash-chained; correction counts and first-pass acceptance guide the next Agent but never approve an artifact or replace current-task evidence.
78
92
  - Signed attestation must bind the same task, scene, context, source, manifest, Motion IR and evidence hashes; unknown, expired or revoked signers fail closed. Attestation verification is an integrity result only and must preserve `approval: false`.
79
93
 
80
94
  ## Framework boundary
@@ -85,6 +99,8 @@ The audited production paths are **Lottie JSON runtime rendering, dotLottie v2 p
85
99
 
86
100
  Every production `src/output/<scene>/manifest.json` must include a `source_binding` object matching `schemas/scene-manifest.schema.json`. The acceptance gate rejects a missing binding, a mismatched source path, an unknown license/authority or a stale SHA-256.
87
101
 
102
+ 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
+
88
104
  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.
89
105
 
90
106
  ```bash
@@ -101,6 +117,25 @@ node scripts/runtime-adapters.mjs
101
117
  # Capture and verify runtime telemetry without Bash dependencies.
102
118
  motionloom runtime-telemetry <scene> artifacts/<task-id>
103
119
 
120
+ # Build and validate a provenance-bound visual comparison from real runtime PNGs.
121
+ motionloom visual-truth build --root . --scene <scene> \
122
+ --baseline src/output/<scene>/snapshot/frame-00.png \
123
+ --candidate src/output/<scene>/snapshot/frame-100.png \
124
+ --source src/output/<scene>/<source-file> \
125
+ --manifest src/output/<scene>/manifest.json \
126
+ --runtime-evidence artifacts/<task-id>/runtime-adapters/runtime-evidence.json \
127
+ --motion-ir artifacts/<task-id>/motion-ir.json --task-id <task-id> \
128
+ --output src/output/<scene>/visual-truth.json
129
+ motionloom visual-truth validate --root . --input src/output/<scene>/visual-truth.json \
130
+ --scene <scene> --task-id <task-id>
131
+
132
+ # Record only a user-confirmed remediation outcome, then summarize durable learning.
133
+ motionloom remediation-learning record-outcome --history artifacts/remediation-history.jsonl \
134
+ --event-id outcome-001 --issue-id easing-drift --summary "User accepted easing correction" \
135
+ --result pass --correction-count 1 --source-task-id <task-id> --user-confirmed --json
136
+ motionloom remediation-learning summary --history artifacts/remediation-history.jsonl \
137
+ --output artifacts/remediation-summary.json --json
138
+
104
139
  # Build the task-bound Intelligence Core artifacts.
105
140
  python3 scripts/intelligence.py motion-ir build --task-dir artifacts/<task-id>
106
141
  python3 scripts/intelligence.py graph build --task-dir artifacts/<task-id>
package/agent-card.json CHANGED
@@ -1,9 +1,15 @@
1
1
  {
2
2
  "card_version": "1.0",
3
3
  "name": "motionloom",
4
- "version": "2.1.0",
5
- "description": "Project-aware animation production with durable Project Memory, graph, provenance, framework-neutral motion IR, runtime verification and telemetry, DSSE-compatible signed attestation, external evidence verification, semantic feedback, continuity checks, internal browser review, trust-boundary hardening and deterministic Agent handoff.",
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.",
6
6
  "capabilities": [
7
+ "project.setup",
8
+ "project.status",
9
+ "project.repair",
10
+ "agent.discovery.check",
11
+ "agent.discovery.source",
12
+ "agent.discovery.install-matrix",
7
13
  "project.analyze",
8
14
  "project.memory.init",
9
15
  "project.memory.inspect",
@@ -18,6 +24,10 @@
18
24
  "motion.ir.build",
19
25
  "motion.ir.validate",
20
26
  "asset.provenance",
27
+ "asset.provenance.classify",
28
+ "asset.provenance.validate",
29
+ "asset.provenance.report",
30
+ "asset.provenance.production-gate",
21
31
  "provenance.emit",
22
32
  "provenance.verify",
23
33
  "capability.discover",
@@ -42,6 +52,12 @@
42
52
  "runtime.verify.framer-motion",
43
53
  "runtime.telemetry.capture",
44
54
  "runtime.telemetry.validate",
55
+ "visual-truth.build",
56
+ "visual-truth.validate",
57
+ "remediation-learning.record-outcome",
58
+ "remediation-learning.record-benchmark",
59
+ "remediation-learning.validate",
60
+ "remediation-learning.summary",
45
61
  "evidence.verify.external",
46
62
  "attestation.statement.build",
47
63
  "attestation.sign.ed25519",
@@ -61,12 +77,15 @@
61
77
  "project-manifest",
62
78
  "animation-request",
63
79
  "source-asset"
80
+ ,"asset-provenance"
64
81
  ],
65
82
  "output_artifacts": [
83
+ "agent-discovery-report",
66
84
  "project-context",
67
85
  "motion-spec",
68
86
  "runtime-scene",
69
87
  "source-binding",
88
+ "asset-provenance",
70
89
  "dotlottie-package",
71
90
  "runtime-evidence",
72
91
  "runtime-telemetry",
@@ -86,6 +105,9 @@
86
105
  "replay-bundle",
87
106
  "semantic-lint-report",
88
107
  "semantic-lint-benchmark",
108
+ "visual-truth",
109
+ "remediation-history",
110
+ "remediation-summary",
89
111
  "hardening-audit-report",
90
112
  "project-memory",
91
113
  "continuity-report",
@@ -132,6 +154,13 @@
132
154
  }
133
155
  ],
134
156
  "entrypoints": {
157
+ "setup": "npx --yes motionloom setup --project-root <project-path>",
158
+ "setup_dry_run": "npx --yes motionloom setup --project-root <project-path> --dry-run --json",
159
+ "status": "npx --no-install motionloom status --project-root <project-path> --json",
160
+ "repair": "npx --no-install motionloom repair --project-root <project-path> --yes --json",
161
+ "discovery_check": "motionloom discovery check --root <motionloom-checkout> --json",
162
+ "discovery_source": "motionloom discovery source --root <motionloom-checkout> --json",
163
+ "discovery_install_matrix": "motionloom discovery install-matrix --root <motionloom-checkout> --json",
135
164
  "analyze": "motionloom analyze <project-path> --init-memory",
136
165
  "memory_init": "motionloom memory init --project-root <project-path>",
137
166
  "memory_inspect": "motionloom memory inspect --project-root <project-path> --json",
@@ -159,12 +188,21 @@
159
188
  "semantic_lint_benchmark": "python3 scripts/intelligence.py semantic-lint benchmark --task-dir artifacts/<task-id> --iterations 25 --threshold-ms 500",
160
189
  "continuity": "python3 scripts/intelligence.py continuity build --task-dirs artifacts/<task-id>...",
161
190
  "fix_plan": "python3 scripts/intelligence.py fix-plan build --task-dir artifacts/<task-id> --reports semantic-lint-report.json continuity-report.json",
162
- "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",
191
+ "asset_provenance_check": "motionloom asset-provenance check --input src/output/<scene>/asset-provenance.json --root src/output/<scene> --mode runtime|production --manifest src/output/<scene>/manifest.json --json",
192
+ "asset_provenance_classify": "motionloom asset-provenance classify --input <asset-provenance.json> --json",
193
+ "asset_provenance_validate": "motionloom asset-provenance validate --input <asset-provenance.json> --json",
194
+ "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",
163
196
  "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",
164
197
  "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",
165
198
  "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>",
166
199
  "attestation_report": "python3 scripts/attestation-verifier.py --attestation artifacts/<task-id>/attestation.json --trust-policy artifacts/<task-id>/trust-policy.json --expected-task-id <task-id> --expected-scene <scene> --output artifacts/<task-id>/attestation-verifier-report.json",
167
- "quality_gate_attestation": "python3 scripts/quality-gate.py --scene <scene> --context <path> --task-dir artifacts/<task-id> --require-browser-review --require-intelligence --require-p1 --require-benchmark --require-telemetry --require-attestation",
200
+ "quality_gate_attestation": "python3 scripts/quality-gate.py --scene <scene> --context <path> --task-dir artifacts/<task-id> --require-browser-review --require-intelligence --require-p1 --require-benchmark --require-telemetry --require-attestation --require-asset-provenance",
201
+ "visual_truth_build": "motionloom visual-truth build --root <project-path> --scene <scene> --baseline <baseline.png> --candidate <candidate.png> --output src/output/<scene>/visual-truth.json",
202
+ "visual_truth_validate": "motionloom visual-truth validate --root <project-path> --input src/output/<scene>/visual-truth.json --scene <scene> --task-id <task-id>",
203
+ "remediation_record_outcome": "motionloom remediation-learning record-outcome --history artifacts/remediation-history.jsonl --event-id <id> --issue-id <issue-id> --summary <summary> --result pass|fail|partial|unknown --correction-count <n> --user-confirmed",
204
+ "remediation_record_benchmark": "motionloom remediation-learning record-benchmark --history artifacts/remediation-history.jsonl --event-id <id> --operation <operation> --task-id <task-id> --scene <scene> --iterations <n> --p95-ms <ms> --threshold-ms <ms>",
205
+ "remediation_summary": "motionloom remediation-learning summary --history artifacts/remediation-history.jsonl --output artifacts/remediation-summary.json --json",
168
206
  "browser_review_prepare": "python3 scripts/review-hook.py prepare --task-dir artifacts/<task-id> --lab-url <internal-lab-url>",
169
207
  "browser_review_validate": "python3 scripts/review-hook.py validate --task-dir artifacts/<task-id>",
170
208
  "pr_prepare": "node scripts/pr.mjs <scene>"