motionloom 2.0.0 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +41 -0
- package/CODE_OF_CONDUCT.md +19 -0
- package/CONTRIBUTING.md +65 -0
- package/README.md +187 -134
- package/ROADMAP.md +32 -0
- package/SECURITY.md +27 -0
- package/SKILL.md +33 -8
- package/SUPPORT.md +23 -0
- package/agent-card.json +21 -6
- package/bin/motionloom.mjs +23 -5
- package/docs/STATUS.md +33 -0
- package/docs/audits/2.1.0-deep-stress-evaluation.md +97 -0
- package/docs/audits/data/2.1.0-deep-stress-6900.json +329 -0
- package/docs/audits/data/deep-stress-latest.json +329 -0
- package/docs/audits/external-project-corpus-2026-08-13.md +26 -0
- package/docs/releases/2.1.0.md +23 -0
- package/docs/releases/npm-publish-from-workstation.md +6 -6
- package/package.json +52 -26
- package/references/intelligence-core.md +1 -1
- package/schemas/project-memory.schema.json +180 -0
- package/scripts/analyze.py +56 -0
- package/scripts/capture-runtime-telemetry.py +119 -0
- package/scripts/devlab.py +126 -0
- package/scripts/docs-audit.py +96 -0
- package/scripts/eval-intelligence.py +23 -0
- package/scripts/eval-projects.py +156 -0
- package/scripts/intelligence.py +106 -6
- package/scripts/pr.py +150 -0
- package/scripts/prepack-clean.mjs +37 -0
- package/scripts/project-memory.py +483 -0
- package/scripts/project_memory_loader.py +31 -0
- package/scripts/release-verify.py +52 -0
- package/scripts/render.py +65 -0
- package/scripts/report.py +44 -2
- package/scripts/review-hook.py +13 -2
- package/scripts/skill-doctor.py +12 -2
- package/scripts/to-dotlottie.mjs +26 -20
- package/src/core/analyzer.py +174 -25
- package/tests/evals/intelligence-cases.json +10 -0
- package/tests/evals/project-corpus.json +51 -0
- package/tests/scripts/run_tests.py +52 -1
- package/tests/scripts/test_project_memory.py +129 -0
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
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
|
+
|
|
5
|
+
## [2.1.0] - 2026-08-13
|
|
6
|
+
|
|
7
|
+
### Added
|
|
8
|
+
|
|
9
|
+
- Durable, relocatable Project Memory with schema validation, atomic writes, canonical integrity and stable lifecycle exit codes.
|
|
10
|
+
- Cross-platform npm CLI routing for Ubuntu, macOS and Windows without Bash-only user commands or system `zip`/`unzip` dependencies.
|
|
11
|
+
- Memory loader integration for project analysis, reports, review hooks, handoff and downstream Agent continuity.
|
|
12
|
+
- Ubuntu/macOS/Windows CI matrix for Project Memory recovery, CLI routing and npm tarball inspection.
|
|
13
|
+
- Public repository governance documents, contribution workflow, security policy, support guide, roadmap, issue forms and pull-request template.
|
|
14
|
+
|
|
15
|
+
### Fixed
|
|
16
|
+
|
|
17
|
+
- Rebinding a relocated checkout no longer invalidates integrity merely because `project.root_path` changed.
|
|
18
|
+
- Recovery atomically refreshes runtime path, repository and package metadata while preserving the durable project identity contract.
|
|
19
|
+
|
|
20
|
+
### Verified
|
|
21
|
+
|
|
22
|
+
- Full regression, Intelligence Core evaluation, Skill Doctor, strict quality gate, npm package dry-run and Dev Lab production build pass.
|
|
23
|
+
- Relocation coverage includes Git remote identity, Unicode paths, spaces in paths, stale context and user-confirmed outcome invariants.
|
|
24
|
+
|
|
25
|
+
See the [2.1.0 release note](docs/releases/2.1.0.md) for scope, trust boundaries and remaining work.
|
|
26
|
+
|
|
27
|
+
## [2.0.0] - 2026-08-12
|
|
28
|
+
|
|
29
|
+
### Added
|
|
30
|
+
|
|
31
|
+
- DSSE-compatible Ed25519 signed attestation and fail-closed trust policy verification.
|
|
32
|
+
- External verifier, attestation report contract and Dev Lab attestation rail.
|
|
33
|
+
|
|
34
|
+
See the [2.0.0 release note](docs/releases/2.0.0.md).
|
|
35
|
+
|
|
36
|
+
## Earlier releases
|
|
37
|
+
|
|
38
|
+
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
|
+
|
|
40
|
+
[2.1.0]: docs/releases/2.1.0.md
|
|
41
|
+
[2.0.0]: docs/releases/2.0.0.md
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# Code of Conduct
|
|
2
|
+
|
|
3
|
+
## Our commitment
|
|
4
|
+
|
|
5
|
+
We want MotionLoom to be a respectful, technically rigorous and welcoming project for people working on animation, developer tooling and Agent interoperability. Contributors are expected to participate constructively, assume good faith while examining evidence, and make room for different levels of experience.
|
|
6
|
+
|
|
7
|
+
## Expected behavior
|
|
8
|
+
|
|
9
|
+
Use clear and respectful language. Focus criticism on code, contracts, evidence and decisions rather than people. Explain disagreement with reproducible reasoning. Protect private project data, credentials and source assets. Give credit to upstream runtimes, asset authors and contributors.
|
|
10
|
+
|
|
11
|
+
## Unacceptable behavior
|
|
12
|
+
|
|
13
|
+
Harassment, discrimination, personal attacks, threats, doxxing, sexualized conduct, deliberate exposure of private data, spam, bad-faith manipulation of review evidence or attempts to bypass user authorization are not acceptable.
|
|
14
|
+
|
|
15
|
+
## Enforcement
|
|
16
|
+
|
|
17
|
+
Report a conduct concern privately through the repository's maintainer contact or a GitHub private vulnerability report when the concern involves safety or security. Do not include sensitive details in a public issue. Maintainers may remove content, request corrections, restrict participation or close contributions when necessary to protect the community.
|
|
18
|
+
|
|
19
|
+
This code of conduct is adapted for MotionLoom from the [Contributor Covenant](https://www.contributor-covenant.org/version/2/1/code_of_conduct.html).
|
package/CONTRIBUTING.md
ADDED
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# Contributing to MotionLoom
|
|
2
|
+
|
|
3
|
+
Thank you for helping make animation workflows more reliable for coding agents. Contributions are welcome in code, schemas, tests, runtime adapters, documentation, fixtures and reproducible bug reports. Please read the [Code of Conduct](CODE_OF_CONDUCT.md) and [Security Policy](SECURITY.md) before contributing.
|
|
4
|
+
|
|
5
|
+
## Before opening an issue or pull request
|
|
6
|
+
|
|
7
|
+
Search existing issues and documentation first. For a bug, include the operating system, Node/Python versions, exact command, minimal fixture or artifact bundle, expected behavior and observed output. Never attach private project context, credentials, private source assets or trust-policy private keys.
|
|
8
|
+
|
|
9
|
+
For a feature, explain which Agent failure mode it addresses, which contract or schema changes, what evidence would demonstrate correctness, and how the change preserves explicit user approval. A template without a runtime or validation path is not sufficient for a production capability.
|
|
10
|
+
|
|
11
|
+
## Local setup
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
git clone https://github.com/lenhonbp/MotionLoom.git
|
|
15
|
+
cd MotionLoom
|
|
16
|
+
npm install
|
|
17
|
+
python3 -m pip install --requirement requirements.txt
|
|
18
|
+
python3 scripts/skill-doctor.py --json
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
Node.js 18+ and Python 3.11+ are required. On Windows, use `python` if `python3` is not available or set `MOTIONLOOM_PYTHON` for the npm wrapper. Runtime adapter tests may require the Playwright browser installation described by the CI workflow.
|
|
22
|
+
|
|
23
|
+
## Validation commands
|
|
24
|
+
|
|
25
|
+
Run the smallest relevant checks while iterating, then run the complete suite before opening a pull request:
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
python3 -m py_compile scripts/*.py tests/scripts/*.py
|
|
29
|
+
python3 tests/scripts/test_project_memory.py
|
|
30
|
+
python3 tests/scripts/run_tests.py
|
|
31
|
+
python3 scripts/eval-intelligence.py
|
|
32
|
+
python3 scripts/skill-doctor.py --json
|
|
33
|
+
npm run runtime:test
|
|
34
|
+
npm publish --dry-run --access public
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
For changes to a scene or evidence contract, also run the appropriate report contract, browser-review validation, quality gate and `npm run audit:deep`. Keep generated local runtime state and temporary project memory out of the commit.
|
|
38
|
+
|
|
39
|
+
## GitHub Actions and release environments
|
|
40
|
+
|
|
41
|
+
Every pull request should pass the quality and documentation workflows. Security analysis may be skipped for an untrusted fork when GitHub cannot grant security-event permissions; the maintainer must review the resulting status before merge. Dev Lab changes produce a retained build artifact for inspection.
|
|
42
|
+
|
|
43
|
+
The `release.yml` workflow is deliberately `workflow_dispatch`-only. Maintainers must configure the protected `npm-release` environment and its required reviewers before using it. The workflow accepts either an `NPM_TOKEN` environment secret or npm trusted publishing through GitHub OIDC (`id-token: write`). Never put an npm token in repository variables, source files or pull-request logs. Creating a GitHub release is an explicit dispatch input.
|
|
44
|
+
|
|
45
|
+
## Pull request expectations
|
|
46
|
+
|
|
47
|
+
Use a focused branch and a conventional commit-style title such as `feat(memory): ...`, `fix(runtime): ...` or `docs: ...`. A pull request should explain the user-visible change, list changed contracts, identify platform coverage, link tests and state limitations or remaining warnings. Schema changes must include fixtures and backward/forward compatibility notes where relevant.
|
|
48
|
+
|
|
49
|
+
Do not claim a runtime is verified unless real adapter evidence exists. Do not convert a heuristic, benchmark, valid signature or successful build into an approval statement. Do not change `approval` to `true` in fixtures or bypass the user-review gate to make a test pass.
|
|
50
|
+
|
|
51
|
+
## Review and merge policy
|
|
52
|
+
|
|
53
|
+
CI must pass before merge. Changes that affect `SKILL.md`, `agent-card.json`, schemas, quality gates, evidence verification, attestations, runtime adapters or Git side effects require explicit contract review. Maintainers may request a focused adversarial fixture when a change can affect stale evidence, cross-task contamination, path safety or approval invariants.
|
|
54
|
+
|
|
55
|
+
The repository's PR template is a checklist, not a substitute for evidence. Maintainers merge only after the behavior, documentation and trust boundary are clear.
|
|
56
|
+
|
|
57
|
+
## Release process
|
|
58
|
+
|
|
59
|
+
1. Update `CHANGELOG.md` and a dedicated `docs/releases/<version>.md` note.
|
|
60
|
+
2. Update `package.json`, `SKILL.md`, `agent-card.json` and relevant schema/reference versions.
|
|
61
|
+
3. Run the full validation suite and `npm publish --dry-run --access public`.
|
|
62
|
+
4. Create a local commit and obtain explicit maintainer confirmation before pushing.
|
|
63
|
+
5. Publish from the authenticated maintainer workstation, then verify the npm version and GitHub release state.
|
|
64
|
+
|
|
65
|
+
See [ROADMAP.md](ROADMAP.md) for future work and [SUPPORT.md](SUPPORT.md) for help with setup or usage.
|
package/README.md
CHANGED
|
@@ -1,179 +1,232 @@
|
|
|
1
1
|
# MotionLoom
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
[](https://github.com/lenhonbp/MotionLoom/actions/workflows/quality.yml)
|
|
4
|
+
[](https://www.npmjs.com/package/motionloom)
|
|
5
|
+
[](https://www.npmjs.com/package/motionloom)
|
|
6
|
+
[](LICENSE)
|
|
7
|
+
[](https://nodejs.org/)
|
|
8
|
+
[](https://www.python.org/)
|
|
9
|
+
[](https://agentskills.io/specification)
|
|
10
|
+
|
|
11
|
+
**Project-aware animation production and runtime verification for coding agents.**
|
|
12
|
+
|
|
13
|
+
MotionLoom is an independent open-source Agent Skill for building UI motion, Lottie and dotLottie scenes, Rive/GSAP/Framer Motion experiences, character body rigs and traceable animation assets inside an existing project. It does not treat animation as an isolated prompt: it binds the work to the host project's context, records decisions and provenance, renders through a real runtime, hands the exact candidate to an internal Dev Lab, and stops before Git side effects until the user approves.
|
|
14
|
+
|
|
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
|
+
|
|
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.
|
|
18
|
+
|
|
19
|
+
## Why MotionLoom
|
|
20
|
+
|
|
21
|
+
Most animation helpers optimize for generating one asset quickly. That breaks down when an Agent has to work in a real product: it can lose the project's motion language, select an untraceable asset, render a placeholder instead of the target runtime, mix evidence from another task, or open a PR before the user has inspected the result.
|
|
22
|
+
|
|
23
|
+
MotionLoom turns that fragile sequence into a bounded production system. Its durable Project Memory survives long gaps between animation tasks and project relocation; its Intelligence Core keeps context, provenance, capability selection and Motion IR connected; its runtime adapters produce evidence instead of prose claims; and its Dev Lab is a mandatory review handoff rather than a separate Agent or a static demo catalog.
|
|
24
|
+
|
|
25
|
+
## What it provides
|
|
26
|
+
|
|
27
|
+
| Capability | What the Agent gets | What MotionLoom refuses to do |
|
|
28
|
+
|---|---|---|
|
|
29
|
+
| **Project binding** | Project context, package/design-token discovery and durable `.motionloom/project-memory.json` | Reuse memory across projects or silently continue through missing context |
|
|
30
|
+
| **Motion planning** | Framework-aware Motion Spec, timing/easing/accessibility budgets and framework selection | Present a template as a project-integrated result |
|
|
31
|
+
| **Asset provenance** | Required `source_binding`, authority, license and SHA-256 traceability | Promote unknown, unlicensed or placeholder production assets |
|
|
32
|
+
| **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
|
+
| **Agent intelligence** | Project graph, provenance, Motion IR, replay, semantic lint, continuity and fix plan | Convert confidence, benchmark output or warnings into approval |
|
|
34
|
+
| **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 |
|
|
35
|
+
|
|
36
|
+
## The production contract
|
|
37
|
+
|
|
38
|
+
```mermaid
|
|
39
|
+
flowchart LR
|
|
40
|
+
A[Host project] --> B[Analyze + Project Memory]
|
|
41
|
+
B --> C[Context-bound Motion Spec]
|
|
42
|
+
C --> D[Source binding + asset provenance]
|
|
43
|
+
D --> E[Generate / rig / adapt]
|
|
44
|
+
E --> F[Real runtime render]
|
|
45
|
+
F --> G[Intelligence Core + evidence]
|
|
46
|
+
G --> H[Dev Lab browser review]
|
|
47
|
+
H --> I{User approved?}
|
|
48
|
+
I -- changes requested --> D
|
|
49
|
+
I -- no --> J[Report blocked / needs fix]
|
|
50
|
+
I -- yes --> K[Quality gate + attestation]
|
|
51
|
+
K --> L[PR preflight; side effects still explicit]
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
Every handoff is machine-readable. The typical bundle under `artifacts/<task-id>/` includes the task ledger, context hash, motion spec, manifest, runtime snapshots, telemetry, project graph, provenance, lint and continuity reports, fix plan, browser-review candidate, review decision, execution report and next-Agent handoff.
|
|
4
55
|
|
|
5
|
-
##
|
|
56
|
+
## Quick start
|
|
6
57
|
|
|
7
|
-
|
|
58
|
+
### Install the public CLI
|
|
8
59
|
|
|
9
60
|
```bash
|
|
10
61
|
npm install --global motionloom
|
|
11
|
-
motionloom doctor
|
|
62
|
+
motionloom doctor --json
|
|
12
63
|
motionloom --help
|
|
13
64
|
```
|
|
14
65
|
|
|
15
|
-
|
|
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.
|
|
16
67
|
|
|
17
|
-
|
|
68
|
+
### Start from a real project
|
|
69
|
+
|
|
70
|
+
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.
|
|
18
71
|
|
|
19
72
|
```bash
|
|
20
|
-
|
|
21
|
-
bash scripts/analyze.sh /path/to/your/project
|
|
22
|
-
|
|
23
|
-
# 1b. Start a transparent task ledger for Agent/human handoff
|
|
24
|
-
python3 scripts/report.py init --task-id onboarding-wave \
|
|
25
|
-
--scene my-scene --intent "Character wave in onboarding" \
|
|
26
|
-
--project-name your-project
|
|
27
|
-
|
|
28
|
-
# 2. Plan & sign a spec (example: a loading animation)
|
|
29
|
-
python3 src/core/spec.py generate loading --context /path/to/your/project/project-context.json \
|
|
30
|
-
--output motion-spec.json --loop
|
|
31
|
-
|
|
32
|
-
# 3. Generate a body rig, then pose it
|
|
33
|
-
python3 src/rig/cutout_rig.py build \
|
|
34
|
-
--input assets/library/avatar-base.svg --output rigged.svg
|
|
35
|
-
python3 src/rig/cutout_rig.py pose rigged.svg --pose walk \
|
|
36
|
-
--duration 1.2 --fps 30 --out walk.json
|
|
37
|
-
|
|
38
|
-
# 3b. Bind the scene source to an authoritative provenance record
|
|
39
|
-
python3 scripts/manifest.py bind-source --scene my-scene \
|
|
40
|
-
--source animation.json --kind project \
|
|
41
|
-
--authority "host project manifest" --license MIT
|
|
42
|
-
|
|
43
|
-
# 4. Render runtime verification snapshots (0/50/100%; placeholders fail)
|
|
44
|
-
bash scripts/render.sh my-scene
|
|
45
|
-
|
|
46
|
-
# 4b. Package the Lottie source as a dotLottie v2 archive when required
|
|
47
|
-
bash scripts/to-dotlottie.sh my-scene
|
|
48
|
-
|
|
49
|
-
# 4c. Verify Rive, GSAP and Framer Motion through the real browser harness
|
|
50
|
-
node scripts/runtime-adapters.mjs
|
|
51
|
-
|
|
52
|
-
# 4d. Capture runtime telemetry and verify evidence bindings externally
|
|
53
|
-
bash scripts/capture-runtime-telemetry.sh my-scene artifacts/onboarding-wave
|
|
54
|
-
|
|
55
|
-
# 4e. Derive and verify a signed task-bound statement against a managed trust policy
|
|
56
|
-
python3 scripts/attestation.py statement --scene-dir src/output/my-scene \
|
|
57
|
-
--task-dir artifacts/onboarding-wave --context /path/to/your/project/project-context.json \
|
|
58
|
-
--output artifacts/onboarding-wave/attestation-statement.json
|
|
59
|
-
python3 scripts/attestation.py build --statement artifacts/onboarding-wave/attestation-statement.json \
|
|
60
|
-
--private-key <managed-ed25519-key> --key-id <key-id> \
|
|
61
|
-
--output artifacts/onboarding-wave/attestation.json
|
|
62
|
-
python3 scripts/attestation-verifier.py --attestation artifacts/onboarding-wave/attestation.json \
|
|
63
|
-
--trust-policy artifacts/onboarding-wave/trust-policy.json \
|
|
64
|
-
--expected-task-id onboarding-wave --expected-scene my-scene
|
|
65
|
-
|
|
66
|
-
# 5. Boot the Dev Lab to test & fix interactively
|
|
67
|
-
bash scripts/devlab.sh my-scene
|
|
68
|
-
|
|
69
|
-
# 6. Run the acceptance gate, then confirm and ship
|
|
70
|
-
python3 scripts/quality-gate.py --scene my-scene \
|
|
71
|
-
--context /path/to/your/project/project-context.json \
|
|
72
|
-
--task-dir artifacts/onboarding-wave --require-telemetry --require-attestation
|
|
73
|
-
|
|
74
|
-
# 6. Collect evidence and render the user-facing report
|
|
75
|
-
python3 scripts/report.py collect --task-dir artifacts/onboarding-wave
|
|
76
|
-
python3 scripts/report.py render --task-dir artifacts/onboarding-wave
|
|
77
|
-
|
|
78
|
-
# 7. Confirm and ship only after review
|
|
79
|
-
bash scripts/pr.sh my-scene
|
|
80
|
-
```
|
|
73
|
+
cd /path/to/your/project
|
|
81
74
|
|
|
82
|
-
|
|
75
|
+
# Understand the project and bootstrap/recover durable memory.
|
|
76
|
+
motionloom analyze . --init-memory
|
|
77
|
+
motionloom memory inspect --project-root . --json
|
|
83
78
|
|
|
84
|
-
|
|
79
|
+
# 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
|
|
85
81
|
|
|
86
|
-
|
|
82
|
+
# Plan and generate the scene using the selected framework.
|
|
83
|
+
python3 /path/to/MotionLoom/src/core/spec.py generate loading \
|
|
84
|
+
--context project-context.json --output motion-spec.json --loop
|
|
87
85
|
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
86
|
+
# Render real runtime evidence and prepare the Dev Lab review handoff.
|
|
87
|
+
motionloom render loading
|
|
88
|
+
motionloom devlab loading
|
|
89
|
+
|
|
90
|
+
# Validate the exact task bundle before any Git side effect.
|
|
91
|
+
motionloom quality-gate --scene loading \
|
|
92
|
+
--context project-context.json \
|
|
93
|
+
--task-dir artifacts/loading-task \
|
|
94
|
+
--require-browser-review --require-intelligence --require-p1 \
|
|
95
|
+
--require-benchmark --require-telemetry --require-attestation
|
|
96
|
+
|
|
97
|
+
# Local-only by default. A user must review and explicitly authorize side effects.
|
|
98
|
+
motionloom pr loading --task-dir artifacts/loading-task
|
|
93
99
|
```
|
|
94
100
|
|
|
95
|
-
|
|
101
|
+
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).
|
|
96
102
|
|
|
97
|
-
|
|
103
|
+
## Durable Project Memory
|
|
98
104
|
|
|
99
|
-
|
|
105
|
+
Project Memory is the continuity layer for Agents that return to animation after many unrelated tasks or a new context window. It stores project identity, motion principles, asset and runtime policy, accepted/rejected decisions, user-confirmed outcomes and freshness/invalidation state in `.motionloom/project-memory.json`.
|
|
100
106
|
|
|
101
107
|
```bash
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
python3 scripts/intelligence.py semantic-lint benchmark --task-dir artifacts/onboarding-wave \
|
|
108
|
-
--iterations 25 --threshold-ms 500
|
|
109
|
-
bash scripts/capture-runtime-telemetry.sh my-scene artifacts/onboarding-wave
|
|
110
|
-
python3 scripts/intelligence.py continuity build --task-dirs artifacts/onboarding-wave
|
|
111
|
-
python3 scripts/intelligence.py fix-plan build --task-dir artifacts/onboarding-wave \
|
|
112
|
-
--reports semantic-lint-report.json continuity-report.json
|
|
113
|
-
python3 scripts/quality-gate.py --scene my-scene \
|
|
114
|
-
--context /path/to/your/project/project-context.json \
|
|
115
|
-
--task-dir artifacts/onboarding-wave \
|
|
116
|
-
--require-browser-review --require-intelligence --require-p1 --require-benchmark --require-telemetry --require-attestation
|
|
117
|
-
python3 scripts/eval-intelligence.py
|
|
108
|
+
motionloom memory init --project-root <project>
|
|
109
|
+
motionloom memory inspect --project-root <project> --json
|
|
110
|
+
motionloom memory refresh --project-root <project> --json
|
|
111
|
+
motionloom memory recover --project-root <project> --json
|
|
112
|
+
motionloom memory validate --project-root <project> --json
|
|
118
113
|
```
|
|
119
114
|
|
|
120
|
-
|
|
115
|
+
The memory integrity hash excludes only the mutable checkout path; Git remote or package identity remains the project binding. Direct edits to durable content fail closed. A stale, invalid, missing or cross-project memory produces a machine-readable recovery state and cannot silently influence generation or approval. Durable decisions and outcomes require `--user-confirmed`.
|
|
121
116
|
|
|
122
|
-
|
|
117
|
+
Read the [Project Memory schema](schemas/project-memory.schema.json), [2.1.0 release note](docs/releases/2.1.0.md) and [Skill instructions](SKILL.md) for the full lifecycle.
|
|
123
118
|
|
|
124
|
-
|
|
125
|
-
|------|--------|--------------|
|
|
126
|
-
| 01 · Understand | `src/core/analyzer.py` | Reads package.json, design tokens and existing motion language; emits `project-context.json` inside the target project |
|
|
127
|
-
| 02 · Plan | `src/core/spec.py` | Generates & validates the motion spec against the framework matrix, easing canon and performance budget |
|
|
128
|
-
| 03 · Source | `assets/library/` | Vetted, traceable source assets with an attribution table — the authoritative geometry |
|
|
129
|
-
| 04 · Generate | `src/rig/cutout_rig.py`, `templates/` | Canonical templates per framework; 20-bone cutout body rigs with parent-first order |
|
|
130
|
-
| 05 · Dev Lab | `dev-lab/` | Self-contained static workbench: preview rendered evidence, scrub, quality checklist, fix notes, review export |
|
|
131
|
-
| 06 · Confirm → PR | `scripts/pr.sh` | Commits scene + spec + snapshots, opens the PR with an evidence body |
|
|
119
|
+
## Verified runtime matrix
|
|
132
120
|
|
|
133
|
-
|
|
121
|
+
| Runtime or format | Capability level | Evidence path |
|
|
122
|
+
|---|---:|---|
|
|
123
|
+
| Lottie JSON | Contract verified | Runtime snapshot renderer and manifest validation in repository fixtures |
|
|
124
|
+
| dotLottie v2 | Contract verified | Node/`fflate` packaging, manifest entry and checksum validation |
|
|
125
|
+
| SVG cutout body rig | Contract verified | Parent-first hierarchy, named anatomy and pose evidence in repository fixtures |
|
|
126
|
+
| Rive Canvas | Fixture verified | Browser adapter, state-machine/input binding and representative snapshots |
|
|
127
|
+
| GSAP | Fixture verified | Browser adapter, deterministic timeline scrub and representative snapshots |
|
|
128
|
+
| Framer Motion | Fixture verified | Browser adapter, reduced-motion checks and representative snapshots |
|
|
129
|
+
| Spine | Scaffold only | Requires a framework-specific runtime adapter and evidence |
|
|
130
|
+
| Three.js | Scaffold only | Requires a framework-specific runtime adapter and evidence |
|
|
134
131
|
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
| `templates/` | Canonical Lottie / Rive / GSAP / Framer Motion templates |
|
|
141
|
-
| `assets/library/` | Vetted source assets + attribution, including the MIT Rive adapter fixture |
|
|
142
|
-
| `scripts/` | Pipeline CLI plus Intelligence Core (`analyze`, `render`, `devlab`, `pr`, `quality-gate`, `validate-lottie`, `to-dotlottie`, `runtime-adapters`, `capture-runtime-telemetry`, `evidence-verifier`, `attestation`, `attestation-verifier`, `attestation-keygen`, `skill-doctor`, `report`, `report-contract`, `intelligence`, `eval-intelligence`) |
|
|
143
|
-
| `dev-lab/` | Self-contained static Dev Lab + Playwright snapshot harness |
|
|
144
|
-
| `agent-card.json` | Capability discovery, runtime levels and side-effect policy for other Agents |
|
|
145
|
-
| `schemas/` | Task, report, artifact-manifest, scene-manifest, handoff, Intelligence Core, signed-attestation and trust-policy JSON Schemas |
|
|
146
|
-
| `references/` | Progressive-disclosure contracts for reporting, runtime capability, dotLottie packaging and Intelligence Core |
|
|
147
|
-
| `artifacts/<task-id>/` | Per-task ledger, evidence, review, issue register and handoff bundle |
|
|
148
|
-
| `tests/` | Deterministic engine tests |
|
|
149
|
-
| `.github/workflows/quality.yml` | CI that re-runs the quality gate on every PR |
|
|
132
|
+
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.
|
|
133
|
+
|
|
134
|
+
## Evidence, trust and review
|
|
135
|
+
|
|
136
|
+
MotionLoom keeps distinct layers distinct:
|
|
150
137
|
|
|
151
|
-
|
|
138
|
+
| Layer | It proves | It does not prove |
|
|
139
|
+
|---|---|---|
|
|
140
|
+
| Runtime evidence | The selected runtime produced the declared snapshots and observed state | That the motion is aesthetically correct or user-approved |
|
|
141
|
+
| Provenance | Which source/material/product bytes were used and how they hash | That the source is appropriate beyond the declared authority/license contract |
|
|
142
|
+
| Semantic lint and benchmark | Bounded rule findings, risk signals and performance measurements | Human visual quality or intent acceptance |
|
|
143
|
+
| Signed attestation | A trusted signer signed the same task-bound hashes under the policy | Reviewer consent, accessibility approval or PR authorization |
|
|
144
|
+
| Dev Lab review | The user saw the exact candidate and recorded a decision | A future candidate is automatically approved |
|
|
152
145
|
|
|
153
|
-
|
|
146
|
+
`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.
|
|
154
147
|
|
|
155
|
-
##
|
|
148
|
+
## How an Agent uses the Skill
|
|
156
149
|
|
|
157
|
-
The
|
|
150
|
+
The public integration surfaces are intentionally small and inspectable:
|
|
158
151
|
|
|
159
|
-
|
|
152
|
+
1. `SKILL.md` gives the Agent the imperative workflow, progressive-disclosure references and non-negotiable contracts.
|
|
153
|
+
2. `agent-card.json` advertises inputs, outputs, verified capabilities, recommended integrations and side-effect policy.
|
|
154
|
+
3. `motionloom` exposes a cross-platform command surface for analysis, memory, rendering, Dev Lab, evidence, quality and PR preflight.
|
|
155
|
+
4. `artifacts/<task-id>/` provides a durable, machine-readable handoff instead of requiring another Agent to infer state from chat.
|
|
160
156
|
|
|
161
|
-
|
|
157
|
+
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.
|
|
162
158
|
|
|
163
|
-
##
|
|
159
|
+
## Repository map
|
|
160
|
+
|
|
161
|
+
| Path | Purpose |
|
|
162
|
+
|---|---|
|
|
163
|
+
| `SKILL.md` | Installable Agent Skill contract |
|
|
164
|
+
| `agent-card.json` | Capability discovery and side-effect policy |
|
|
165
|
+
| `bin/motionloom.mjs` | Cross-platform npm CLI entrypoint |
|
|
166
|
+
| `src/core/` | Analyzer, Motion Spec and runtime snapshot engine |
|
|
167
|
+
| `src/rig/` | Character body rig and pose engine |
|
|
168
|
+
| `templates/` | Lottie, Rive, GSAP and Framer Motion templates |
|
|
169
|
+
| `scripts/` | Analysis, rendering, evidence, memory, intelligence, reports and PR preflight |
|
|
170
|
+
| `schemas/` | Versioned machine-readable contracts |
|
|
171
|
+
| `references/` | Progressive-disclosure implementation references |
|
|
172
|
+
| `docs/` | Framework selection, checklists, audits and release notes |
|
|
173
|
+
| `dev-lab/` | Self-contained browser review workbench and harness |
|
|
174
|
+
| `artifacts/<task-id>/` | Per-task evidence, report and handoff bundle |
|
|
175
|
+
| `tests/` | Regression, adversarial and deep-stress evaluation harnesses |
|
|
176
|
+
|
|
177
|
+
## Documentation map
|
|
178
|
+
|
|
179
|
+
| Need | Start here |
|
|
180
|
+
|---|---|
|
|
181
|
+
| Install or understand the full lifecycle | [SKILL.md](SKILL.md) |
|
|
182
|
+
| Choose a runtime | [Framework selection](docs/FRAMEWORK-SELECTION.md) and [runtime capability reference](references/runtime-capability.md) |
|
|
183
|
+
| Run a review-ready scene | [Production checklist](docs/CHECKLIST.md) and [browser review contract](references/browser-review-contract.md) |
|
|
184
|
+
| Understand Agent intelligence | [Intelligence Core](references/intelligence-core.md) and [roadmap](ROADMAP.md) |
|
|
185
|
+
| Run labeled project evaluation | [Project corpus manifest](tests/evals/project-corpus.json) and `python3 scripts/eval-projects.py --allow-insufficient` |
|
|
186
|
+
| Understand trust boundaries | [Signed attestation](references/signed-attestation.md) and [2.0.0 release note](docs/releases/2.0.0.md) |
|
|
187
|
+
| 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
|
+
| Contribute code or docs | [CONTRIBUTING.md](CONTRIBUTING.md) |
|
|
189
|
+
| Report a vulnerability or request help | [SECURITY.md](SECURITY.md) and [SUPPORT.md](SUPPORT.md) |
|
|
190
|
+
| See version history | [CHANGELOG.md](CHANGELOG.md) and [release notes](docs/releases/) |
|
|
191
|
+
|
|
192
|
+
## Development and release checks
|
|
164
193
|
|
|
165
|
-
|
|
194
|
+
```bash
|
|
195
|
+
npm install
|
|
196
|
+
python3 scripts/skill-doctor.py --json
|
|
197
|
+
python3 tests/scripts/run_tests.py
|
|
198
|
+
python3 scripts/eval-intelligence.py
|
|
199
|
+
python3 scripts/eval-projects.py --allow-insufficient
|
|
200
|
+
npm run release:verify
|
|
201
|
+
npm run runtime:test
|
|
202
|
+
npm run audit:deep
|
|
203
|
+
npm publish --dry-run --access public
|
|
204
|
+
```
|
|
166
205
|
|
|
167
|
-
The
|
|
206
|
+
The GitHub Actions workflow is designed to run the Project Memory and CLI contract on Ubuntu, macOS and Windows, then run the full evidence-aware quality suite on Ubuntu. Read the latest GitHub Actions run rather than treating this README or a historical audit as proof that the current checkout is green. A package dry-run is part of release preparation. See [CONTRIBUTING.md](CONTRIBUTING.md) for the clean-checkout procedure and [CHANGELOG.md](CHANGELOG.md) for release discipline.
|
|
168
207
|
|
|
169
|
-
|
|
208
|
+
## Automated CI/CD
|
|
170
209
|
|
|
171
|
-
|
|
210
|
+
MotionLoom separates verification from publication. Pull requests and pushes to `main` trigger the quality, documentation, security and relevant Dev Lab workflows when their path filters match. A weekly Dependabot job proposes dependency updates for the root package, Dev Lab and GitHub Actions. The npm release workflow is manual only, protected by the `npm-release` environment, and requires the maintainer to choose the distribution tag; GitHub release creation is an explicit input rather than an automatic side effect.
|
|
172
211
|
|
|
173
|
-
|
|
212
|
+
| Workflow | Trigger | Responsibility |
|
|
213
|
+
|---|---|---|
|
|
214
|
+
| `quality.yml` | Pull request, `main`, manual | Cross-platform memory/CLI matrix and full evidence-aware quality suite |
|
|
215
|
+
| `docs.yml` | Documentation/package changes, `main`, manual | Internal links, metadata, workflow safety, Skill Doctor and npm tarball inspection |
|
|
216
|
+
| `security.yml` | Pull request, `main`, weekly schedule, manual | Dependency review and CodeQL for JavaScript/Python |
|
|
217
|
+
| `devlab.yml` | `dev-lab/**` changes, `main`, manual | Build and retain the browser review workbench artifact |
|
|
218
|
+
| `release.yml` | Manual dispatch only | Regression, npm publish with provenance and optional GitHub release |
|
|
174
219
|
|
|
175
|
-
|
|
220
|
+
To enable npm publication, configure a protected GitHub environment named `npm-release` and either add the `NPM_TOKEN` environment secret or configure npm trusted publishing for this repository. Each manual run must provide `release_version`; the workflow verifies package/changelog/release-note alignment before publishing. The workflow never runs on a pull request and never changes MotionLoom's user-review or approval contract.
|
|
176
221
|
|
|
177
222
|
## License
|
|
178
223
|
|
|
179
|
-
MIT
|
|
224
|
+
MotionLoom is released under the [MIT License](LICENSE). Third-party runtime packages and source assets retain their own licenses and attribution requirements.
|
|
225
|
+
|
|
226
|
+
## References
|
|
227
|
+
|
|
228
|
+
[1]: https://agentskills.io/specification "Agent Skills specification"
|
|
229
|
+
[2]: https://docs.lottiefiles.com/en/runtimes "LottieFiles runtimes"
|
|
230
|
+
[3]: https://dotlottie.io/spec/2.0/ "dotLottie v2 specification"
|
|
231
|
+
[4]: https://rive.app/docs/runtimes/web/web-js "Rive Web runtime"
|
|
232
|
+
[5]: https://gsap.com/resources/a11y/ "GSAP accessibility guidance"
|
package/ROADMAP.md
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# MotionLoom Roadmap
|
|
2
|
+
|
|
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
|
+
|
|
5
|
+
## Current baseline: 2.1.0
|
|
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.
|
|
8
|
+
|
|
9
|
+
## Next milestones
|
|
10
|
+
|
|
11
|
+
| Milestone | Focus | Acceptance signal | Status |
|
|
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 |
|
|
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 |
|
|
17
|
+
|
|
18
|
+
## Product principles
|
|
19
|
+
|
|
20
|
+
MotionLoom will remain project-bound, evidence-first and review-first. Heuristics may prioritize risk but cannot become approval. Attestations may prove signer and byte identity but cannot replace a user. Dev Lab remains a post-render handoff in the pipeline rather than a separate Skill with its own authority. Framework support will be promoted only after real adapter evidence and cross-platform checks pass.
|
|
21
|
+
|
|
22
|
+
## Metrics that matter
|
|
23
|
+
|
|
24
|
+
The project will track acceptance precision, false-approval rate, provenance completeness, replay success, time-to-fix, correction count, first-pass acceptance and rerender avoidance. Metrics must remain tied to labeled fixtures or user-confirmed review records; synthetic scores will not be presented as human visual approval.
|
|
25
|
+
|
|
26
|
+
## Explicitly out of scope
|
|
27
|
+
|
|
28
|
+
MotionLoom will not silently open or push pull requests, claim visual approval from a signature, hide a missing runtime behind a static placeholder, copy memory across projects, or treat a public asset catalog as a license authority. See [SECURITY.md](SECURITY.md), [CONTRIBUTING.md](CONTRIBUTING.md) and the [trust-boundary reference](references/signed-attestation.md) before proposing a roadmap change.
|
|
29
|
+
|
|
30
|
+
## Proposing a roadmap change
|
|
31
|
+
|
|
32
|
+
Open a feature request with the problem, affected Agent workflow, proposed contract, evidence needed, failure modes and how user authority is preserved. A roadmap proposal that cannot explain its trust boundary is not ready for implementation.
|
package/SECURITY.md
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# Security Policy
|
|
2
|
+
|
|
3
|
+
## Supported versions
|
|
4
|
+
|
|
5
|
+
| Version | Security fixes |
|
|
6
|
+
|---|---|
|
|
7
|
+
| `2.1.x` | Supported |
|
|
8
|
+
| `2.0.x` | Best effort while upgrading |
|
|
9
|
+
| `<2.0.0` | Not supported |
|
|
10
|
+
|
|
11
|
+
## Reporting a vulnerability
|
|
12
|
+
|
|
13
|
+
Please do not open a public issue for an exploitable vulnerability, credential exposure, path escape, evidence-bypass bug or supply-chain concern. Use [GitHub Private Vulnerability Reporting](https://github.com/lenhonbp/MotionLoom/security/advisories/new) when available. Include the affected version/commit, operating system, minimal reproduction, impact and a proposed mitigation if known. Redact project names, tokens, private assets, private keys and customer data.
|
|
14
|
+
|
|
15
|
+
If private reporting is unavailable, open a minimal issue titled **Security contact requested** without exploit details and ask the maintainer to enable a private channel. The maintainer will acknowledge a valid report, triage severity, coordinate a fix and publish a release note when disclosure is safe.
|
|
16
|
+
|
|
17
|
+
## Security boundaries
|
|
18
|
+
|
|
19
|
+
MotionLoom can read and write files in the host project, invoke runtimes and prepare Git operations. The npm CLI does not silently push, open a PR or turn evidence into approval. Treat project context, artifact bundles, trust policies, private keys and browser sessions as sensitive. Keep managed signing keys outside the repository and never use CI fixture keys as production trust anchors.
|
|
20
|
+
|
|
21
|
+
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
|
+
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
|
+
|
|
25
|
+
## CI/CD controls
|
|
26
|
+
|
|
27
|
+
GitHub Actions workflows default to read-only repository permissions. The publication workflow is manual-only, uses the protected `npm-release` environment, requests OIDC only for the release job, and keeps npm credentials in environment secrets. Dependency updates are proposed by Dependabot as pull requests rather than applied directly to `main`.
|