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/SKILL.md
CHANGED
|
@@ -7,30 +7,48 @@ description: >-
|
|
|
7
7
|
validate, review, or deliver animation inside an existing project.
|
|
8
8
|
license: MIT
|
|
9
9
|
metadata:
|
|
10
|
-
version: "2.
|
|
10
|
+
version: "2.1.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
|
---
|
|
14
14
|
|
|
15
15
|
# MotionLoom Skill
|
|
16
16
|
|
|
17
|
+
> Public repository: [github.com/lenhonbp/MotionLoom](https://github.com/lenhonbp/MotionLoom) · npm: [motionloom](https://www.npmjs.com/package/motionloom) · release navigation: [CHANGELOG.md](CHANGELOG.md) · future work: [ROADMAP.md](ROADMAP.md)
|
|
18
|
+
|
|
17
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.
|
|
18
20
|
|
|
19
21
|
## Required workflow
|
|
20
22
|
|
|
21
|
-
1. **Understand** — read the host project manifest and run `
|
|
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.
|
|
22
24
|
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.
|
|
23
25
|
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.
|
|
24
26
|
4. **Generate** — use the matching template or rig implementation. For body animation, preserve named anatomy, pivot and parent-first hierarchy.
|
|
25
|
-
5. **Render** — run
|
|
27
|
+
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.
|
|
26
28
|
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.
|
|
27
29
|
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.
|
|
28
30
|
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.
|
|
29
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.
|
|
30
32
|
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.
|
|
31
|
-
9. **Validate** — run `
|
|
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.
|
|
32
34
|
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.
|
|
33
|
-
11. **Confirm** — only after approved browser review and a passing quality gate run
|
|
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.
|
|
36
|
+
|
|
37
|
+
## Durable Project Memory
|
|
38
|
+
|
|
39
|
+
MotionLoom does not treat chat history as durable project memory. At the beginning of an animation task, load `.motionloom/project-memory.json`, validate its project identity and freshness, then recover the current project context. The memory records motion principles, asset/runtime policy, accepted and rejected decisions, user-confirmed remediation outcomes and invalidation metadata. It must remain task/project-bound and must never be copied across projects merely because the files look similar.
|
|
40
|
+
|
|
41
|
+
Use the cross-platform CLI surface:
|
|
42
|
+
|
|
43
|
+
```text
|
|
44
|
+
motionloom memory init --project-root <project>
|
|
45
|
+
motionloom memory inspect --project-root <project> --json
|
|
46
|
+
motionloom memory refresh --project-root <project> --json
|
|
47
|
+
motionloom memory recover --project-root <project> --json
|
|
48
|
+
motionloom memory validate --project-root <project> --json
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
Only user-confirmed decisions and outcomes may become durable remediation memory. A stale or mismatched memory must produce a machine-readable failure/recovery state; it must not silently influence generation or approval. Ubuntu, macOS and Windows are supported through the Node CLI wrapper and Python path APIs. Do not require Bash, fixed `/tmp` paths, POSIX separators or system `zip`/`unzip` in the npm command surface.
|
|
34
52
|
|
|
35
53
|
## Progressive disclosure
|
|
36
54
|
|
|
@@ -70,12 +88,19 @@ Every production `src/output/<scene>/manifest.json` must include a `source_bindi
|
|
|
70
88
|
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.
|
|
71
89
|
|
|
72
90
|
```bash
|
|
73
|
-
# Package a Lottie JSON scene as a dotLottie v2 archive.
|
|
74
|
-
|
|
91
|
+
# Package a Lottie JSON scene as a dotLottie v2 archive (Node/fflate; no system zip required).
|
|
92
|
+
node scripts/to-dotlottie.mjs --scene-dir src/output/<scene> --output src/output/<scene>/animation.lottie
|
|
93
|
+
|
|
94
|
+
# Initialize and recover durable project memory.
|
|
95
|
+
motionloom memory init --project-root <project-path>
|
|
96
|
+
motionloom memory recover --project-root <project-path> --json
|
|
75
97
|
|
|
76
98
|
# Run the official runtime adapters in a real browser harness.
|
|
77
99
|
node scripts/runtime-adapters.mjs
|
|
78
100
|
|
|
101
|
+
# Capture and verify runtime telemetry without Bash dependencies.
|
|
102
|
+
motionloom runtime-telemetry <scene> artifacts/<task-id>
|
|
103
|
+
|
|
79
104
|
# Build the task-bound Intelligence Core artifacts.
|
|
80
105
|
python3 scripts/intelligence.py motion-ir build --task-dir artifacts/<task-id>
|
|
81
106
|
python3 scripts/intelligence.py graph build --task-dir artifacts/<task-id>
|
|
@@ -96,7 +121,7 @@ python3 scripts/attestation-verifier.py --attestation artifacts/<task-id>/attest
|
|
|
96
121
|
|
|
97
122
|
`runtime-evidence.json` records the runtime package, three scrub points, observed state and generated snapshots. A template alone is never enough to upgrade a framework from `scaffold_only` to `verified`.
|
|
98
123
|
|
|
99
|
-
For an observability-enabled run,
|
|
124
|
+
For an observability-enabled run, use the platform-neutral runtime telemetry entrypoint exposed by the package. It regenerates the real-browser evidence and writes telemetry under the task bundle. `scripts/evidence-verifier.py` then checks task/scene/hash/path/age bindings with stable machine-readable output. A verifier pass means the evidence is internally consistent; it does not mean the animation is approved.
|
|
100
125
|
|
|
101
126
|
## Output contract
|
|
102
127
|
|
package/SUPPORT.md
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# Support
|
|
2
|
+
|
|
3
|
+
MotionLoom is a public Agent Skill and npm package. Start with the [README](README.md), [SKILL.md](SKILL.md), [production checklist](docs/CHECKLIST.md), [framework selection guide](docs/FRAMEWORK-SELECTION.md) and [runtime capability reference](references/runtime-capability.md).
|
|
4
|
+
|
|
5
|
+
## Choose the right channel
|
|
6
|
+
|
|
7
|
+
| Situation | Use |
|
|
8
|
+
|---|---|
|
|
9
|
+
| A reproducible defect in code, schema, CLI or runtime adapter | [Bug report](https://github.com/lenhonbp/MotionLoom/issues/new?template=bug_report.yml) |
|
|
10
|
+
| A proposed capability or workflow improvement | [Feature request](https://github.com/lenhonbp/MotionLoom/issues/new?template=feature_request.yml) |
|
|
11
|
+
| A security or privacy concern | [SECURITY.md](SECURITY.md), never a public issue with exploit details |
|
|
12
|
+
| A documentation correction | Open a small pull request or use a documentation issue |
|
|
13
|
+
| A usage question | Search the README/docs first, then open an issue with the exact command and environment if no answer exists |
|
|
14
|
+
|
|
15
|
+
## Troubleshooting order
|
|
16
|
+
|
|
17
|
+
Run `motionloom doctor --json`, confirm Node/Python versions, inspect the JSON exit code, check that the task bundle and project context belong to the same project, and rerun the smallest relevant contract test. A `needs_context`, `stale`, `invalid` or `blocked` state is an actionable result, not an invitation to bypass the gate.
|
|
18
|
+
|
|
19
|
+
When asking for help, include sanitized command output, the operating system, package version, runtime/framework, task state and a minimal fixture. Do not upload `.motionloom/project-memory.json`, private project context, private assets, credentials, signing keys or browser session data unless they are synthetic and safe to share.
|
|
20
|
+
|
|
21
|
+
## Maintainer response
|
|
22
|
+
|
|
23
|
+
The project is maintained on a best-effort basis. A response may request a reproducible fixture or a contract-level test before implementation. Feature requests are evaluated against the [roadmap](ROADMAP.md), user-control principles and the project's ability to produce verifiable runtime evidence.
|
package/agent-card.json
CHANGED
|
@@ -1,10 +1,17 @@
|
|
|
1
1
|
{
|
|
2
2
|
"card_version": "1.0",
|
|
3
3
|
"name": "motionloom",
|
|
4
|
-
"version": "2.
|
|
5
|
-
"description": "Project-aware animation production with 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.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.",
|
|
6
6
|
"capabilities": [
|
|
7
7
|
"project.analyze",
|
|
8
|
+
"project.memory.init",
|
|
9
|
+
"project.memory.inspect",
|
|
10
|
+
"project.memory.refresh",
|
|
11
|
+
"project.memory.recover",
|
|
12
|
+
"project.memory.validate",
|
|
13
|
+
"project.memory.record-decision",
|
|
14
|
+
"project.memory.record-outcome",
|
|
8
15
|
"project.graph.build",
|
|
9
16
|
"project.graph.validate",
|
|
10
17
|
"motion.plan",
|
|
@@ -80,6 +87,7 @@
|
|
|
80
87
|
"semantic-lint-report",
|
|
81
88
|
"semantic-lint-benchmark",
|
|
82
89
|
"hardening-audit-report",
|
|
90
|
+
"project-memory",
|
|
83
91
|
"continuity-report",
|
|
84
92
|
"fix-plan",
|
|
85
93
|
"pr-patch"
|
|
@@ -124,16 +132,23 @@
|
|
|
124
132
|
}
|
|
125
133
|
],
|
|
126
134
|
"entrypoints": {
|
|
127
|
-
"analyze": "
|
|
135
|
+
"analyze": "motionloom analyze <project-path> --init-memory",
|
|
136
|
+
"memory_init": "motionloom memory init --project-root <project-path>",
|
|
137
|
+
"memory_inspect": "motionloom memory inspect --project-root <project-path> --json",
|
|
138
|
+
"memory_refresh": "motionloom memory refresh --project-root <project-path> --json",
|
|
139
|
+
"memory_recover": "motionloom memory recover --project-root <project-path> --json",
|
|
140
|
+
"memory_validate": "motionloom memory validate --project-root <project-path> --json",
|
|
141
|
+
"memory_decision": "motionloom memory record-decision --project-root <project-path> --id <id> --status accepted|rejected --summary <summary> --user-confirmed",
|
|
142
|
+
"memory_outcome": "motionloom memory record-outcome --project-root <project-path> --id <id> --result <result> --user-confirmed",
|
|
128
143
|
"report_init": "python3 scripts/report.py init --task-id <id>",
|
|
129
144
|
"report_collect": "python3 scripts/report.py collect --task-dir <dir>",
|
|
130
145
|
"report_render": "python3 scripts/report.py render --task-dir <dir>",
|
|
131
146
|
"skill_doctor": "python3 scripts/skill-doctor.py --json",
|
|
132
147
|
"quality_gate": "python3 scripts/quality-gate.py --scene <scene> --context <path>",
|
|
133
148
|
"manifest_bind_source": "python3 scripts/manifest.py bind-source --scene <scene> --source <file> --kind <kind> --authority <authority> --license <license>",
|
|
134
|
-
"dotlottie_package": "
|
|
149
|
+
"dotlottie_package": "motionloom manifest package-dotlottie --scene <scene> [--output <output.lottie>]",
|
|
135
150
|
"runtime_adapter_test": "node scripts/runtime-adapters.mjs",
|
|
136
|
-
"runtime_telemetry": "
|
|
151
|
+
"runtime_telemetry": "node scripts/capture-runtime-telemetry.mjs <scene> artifacts/<task-id>",
|
|
137
152
|
"evidence_verify": "python3 scripts/evidence-verifier.py --scene-dir src/output/<scene> --task-dir artifacts/<task-id> --runtime-evidence runtime-adapters/runtime-evidence.json --max-age-days 1 --output artifacts/<task-id>/evidence-verifier-report.json",
|
|
138
153
|
"intelligence_graph": "python3 scripts/intelligence.py graph build --task-dir artifacts/<task-id>",
|
|
139
154
|
"intelligence_provenance": "python3 scripts/intelligence.py provenance build --task-dir artifacts/<task-id>",
|
|
@@ -152,7 +167,7 @@
|
|
|
152
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",
|
|
153
168
|
"browser_review_prepare": "python3 scripts/review-hook.py prepare --task-dir artifacts/<task-id> --lab-url <internal-lab-url>",
|
|
154
169
|
"browser_review_validate": "python3 scripts/review-hook.py validate --task-dir artifacts/<task-id>",
|
|
155
|
-
"pr_prepare": "
|
|
170
|
+
"pr_prepare": "node scripts/pr.mjs <scene>"
|
|
156
171
|
},
|
|
157
172
|
"report_contract": {
|
|
158
173
|
"required_sections": ["completed", "verified", "not_completed", "problems", "structure_review", "next_agent", "browser_review"],
|
package/bin/motionloom.mjs
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
/**
|
|
3
3
|
* MotionLoom npm entrypoint.
|
|
4
4
|
* Style: Timeline Desk — terse command routing, explicit evidence verbs and
|
|
5
|
-
* no hidden approval side effects. The CLI delegates to
|
|
5
|
+
* no hidden approval side effects. The CLI delegates to shipped Python/Node
|
|
6
6
|
* contracts so npm installation and repository execution use one surface.
|
|
7
7
|
*/
|
|
8
8
|
import { fileURLToPath } from "node:url";
|
|
@@ -13,8 +13,10 @@ const ROOT = resolve(dirname(fileURLToPath(import.meta.url)), "..");
|
|
|
13
13
|
const PYTHON = process.env.MOTIONLOOM_PYTHON || (process.platform === "win32" ? "python" : "python3");
|
|
14
14
|
|
|
15
15
|
const PYTHON_COMMANDS = {
|
|
16
|
-
analyze: "scripts/analyze.
|
|
16
|
+
analyze: "scripts/analyze.py",
|
|
17
|
+
memory: "scripts/project-memory.py",
|
|
17
18
|
attestation: "scripts/attestation.py",
|
|
19
|
+
"attestation-keygen": "scripts/attestation-keygen.py",
|
|
18
20
|
"verify-attestation": "scripts/attestation-verifier.py",
|
|
19
21
|
doctor: "scripts/skill-doctor.py",
|
|
20
22
|
intelligence: "scripts/intelligence.py",
|
|
@@ -24,19 +26,26 @@ const PYTHON_COMMANDS = {
|
|
|
24
26
|
"report-contract": "scripts/report-contract.py",
|
|
25
27
|
report: "scripts/report.py",
|
|
26
28
|
"review-hook": "scripts/review-hook.py",
|
|
29
|
+
devlab: "scripts/devlab.py",
|
|
30
|
+
"runtime-telemetry": "scripts/capture-runtime-telemetry.py",
|
|
31
|
+
render: "scripts/render.py",
|
|
32
|
+
pr: "scripts/pr.py",
|
|
27
33
|
"validate-lottie": "scripts/validate-lottie.py",
|
|
28
34
|
manifest: "scripts/manifest.py",
|
|
35
|
+
test: "tests/scripts/run_tests.py",
|
|
36
|
+
"deep-audit": "tests/scripts/deep-stress.py",
|
|
29
37
|
};
|
|
30
38
|
|
|
31
39
|
function printHelp() {
|
|
32
|
-
console.log(`MotionLoom 2.
|
|
40
|
+
console.log(`MotionLoom 2.1.0 — project-aware animation production and evidence contracts
|
|
33
41
|
|
|
34
42
|
Usage:
|
|
35
43
|
motionloom <command> [args...]
|
|
36
44
|
|
|
37
45
|
Commands:
|
|
38
46
|
doctor Validate the installed Skill package
|
|
39
|
-
analyze Run project analysis
|
|
47
|
+
analyze Run project analysis and refresh Project Memory
|
|
48
|
+
memory Initialize, inspect, refresh, recover or validate memory
|
|
40
49
|
intelligence Build or validate Intelligence Core artifacts
|
|
41
50
|
attestation Build/validate canonical signed-attestation artifacts
|
|
42
51
|
verify-attestation Verify an attestation against a trust policy
|
|
@@ -44,11 +53,20 @@ Commands:
|
|
|
44
53
|
quality-gate Run the strict scene acceptance gate
|
|
45
54
|
report-contract Validate task bundle completeness
|
|
46
55
|
review-hook Prepare or validate browser review handoff
|
|
56
|
+
devlab Prepare or serve the internal Dev Lab cross-platform
|
|
57
|
+
runtime-telemetry Capture and externally verify runtime telemetry
|
|
47
58
|
report Read or update task review reports
|
|
48
59
|
validate-lottie Validate a Lottie animation
|
|
49
60
|
manifest Build or validate a production manifest
|
|
50
61
|
eval-intelligence Run adversarial Intelligence Core evaluation
|
|
51
62
|
|
|
63
|
+
Cross-platform examples:
|
|
64
|
+
motionloom analyze . --init-memory
|
|
65
|
+
motionloom memory recover --project-root .
|
|
66
|
+
motionloom memory refresh --project-root . --json
|
|
67
|
+
motionloom memory record-decision --project-root . --id ui-easing \\
|
|
68
|
+
--status accepted --summary "Use ease-out for UI entry" --user-confirmed
|
|
69
|
+
|
|
52
70
|
The CLI never grants approval or opens a pull request by itself. User review
|
|
53
71
|
and explicit repository side-effect confirmation remain separate gates.
|
|
54
72
|
`);
|
|
@@ -67,7 +85,7 @@ if (!script) {
|
|
|
67
85
|
process.exit(2);
|
|
68
86
|
}
|
|
69
87
|
|
|
70
|
-
const executable = script.endsWith(".
|
|
88
|
+
const executable = script.endsWith(".mjs") ? process.execPath : PYTHON;
|
|
71
89
|
const result = spawnSync(executable, [resolve(ROOT, script), ...args], {
|
|
72
90
|
cwd: ROOT,
|
|
73
91
|
stdio: "inherit",
|
package/docs/STATUS.md
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# MotionLoom Current Status
|
|
2
|
+
|
|
3
|
+
> **Authority:** This document describes the current repository contract. Historical audit snapshots and benchmark reports remain valuable evidence, but they must not be read as claims about the latest checkout.
|
|
4
|
+
|
|
5
|
+
## Current release posture
|
|
6
|
+
|
|
7
|
+
MotionLoom's repository source and package manifest are at version **2.1.0**. The public npm registry currently serves **2.0.0**; the GitHub repository has no tag or GitHub Release for 2.1.0 until an explicitly approved release is performed. The repository has a cross-platform CLI, durable Project Memory, artifact-first handoff, runtime evidence, signed attestation and a browser-based Dev Lab review contract. The protected manual release workflow verifies package/changelog/release-note alignment before publication.
|
|
8
|
+
|
|
9
|
+
The repository is **engineering-ready for continued integration work**, not a universal production certification for every animation framework or every host project. CI status must be read from the latest GitHub Actions run, not inferred from historical audit prose.
|
|
10
|
+
|
|
11
|
+
## Evidence levels
|
|
12
|
+
|
|
13
|
+
| Capability | Current evidence level | What is actually proven | What is not implied |
|
|
14
|
+
|---|---|---|---|
|
|
15
|
+
| Lottie JSON and SVG cutout rig | End-to-end contract evidence | Context binding, source binding, runtime snapshots, Dev Lab review, quality gate and PR preflight have deterministic fixtures | Visual quality for every brand, asset or device |
|
|
16
|
+
| Rive, GSAP and Framer Motion | Adapter and fixture evidence | Framework-specific runtime adapters and smoke checks can render representative scenes through browser/runtime paths | Equivalent coverage to the Lottie path across arbitrary projects |
|
|
17
|
+
| Project Memory | Contract and relocation evidence | Stable project identity, atomic persistence, integrity guard, freshness states and path rebinding after relocation | Automatic correctness of an Agent's inferred decision |
|
|
18
|
+
| Semantic intelligence | Deterministic evaluation evidence | Project graph, provenance, Motion IR, continuity, fix-plan and adversarial/deep-stress contracts; bounded analyzer reports scan budgets and truncation | Human-level design judgment, external-project product-value evidence or guaranteed first-pass acceptance |
|
|
19
|
+
| Dev Lab | Review infrastructure evidence | Identity-bound candidate loading, deterministic scrub/snapshot, user checklist and review export | A visual editor, automatic approval or PR authorization |
|
|
20
|
+
|
|
21
|
+
## Normative sources
|
|
22
|
+
|
|
23
|
+
Use the following order when sources disagree:
|
|
24
|
+
|
|
25
|
+
1. The active schemas, validators and executable tests define machine-enforced behavior.
|
|
26
|
+
2. `SKILL.md`, `agent-card.json` and the current README define the Agent-facing contract.
|
|
27
|
+
3. This status document defines current capability posture and evidence boundaries.
|
|
28
|
+
4. Versioned release notes and focused audit reports explain a release or milestone at the time it was produced.
|
|
29
|
+
5. Root-level historical audit snapshots are context only and must be labeled historical.
|
|
30
|
+
|
|
31
|
+
## Known next work
|
|
32
|
+
|
|
33
|
+
The bounded analyzer has now been exercised against a labeled external corpus; see the [dated evidence note](audits/external-project-corpus-2026-08-13.md). The highest-value remaining evidence work is paired product evaluation across more real projects, then closing version–tag–GitHub Release–npm provenance traceability through an approved manual release. Missing external projects are reported as `insufficient_evidence`, never as a pass. None of these items should weaken the user-review gate or convert heuristic warnings into approval.
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
# MotionLoom 2.1.0 — Deep Stress and Agent Intelligence Evaluation
|
|
2
|
+
|
|
3
|
+
## Executive conclusion
|
|
4
|
+
|
|
5
|
+
MotionLoom đã vượt qua một đợt deep stress **6.900 logical trials** trên canonical smoke task `browser-review-smoke-task`, với seed `20260813`, wall time `25.883117s`, `6.900/6.900` pass, `0` false positive và `0` false negative. Các thử nghiệm gọi trực tiếp validator/helper production và fault-injection trên artifact thật; đây **không phải** tuyên bố rằng đã render 6.900 animation trong browser.
|
|
6
|
+
|
|
7
|
+
Kết luận hiện tại là MotionLoom có nền tảng **trust-boundary, context binding, provenance và review-first** mạnh. Nó đã đủ đáng tin để giảm những vòng chỉnh sửa sai do stale evidence, cross-task mix-up, tamper, wrong scene, replay path escape và attestation sai chữ ký. Tuy nhiên, nó chưa thể được gọi là hệ thống “hiểu chất lượng hình ảnh animation” hoàn chỉnh: visual comparison có nhãn provenance, historical learning, device/browser matrix và đo số vòng sửa thực tế vẫn còn thiếu.
|
|
8
|
+
|
|
9
|
+
## Test matrix and evidence
|
|
10
|
+
|
|
11
|
+
| Contract surface | Trials | Expected result | Observed result | p95 / max |
|
|
12
|
+
| --- | ---: | --- | --- | ---: |
|
|
13
|
+
| Canonical JSON metamorphic ordering | 600 | Reordered mappings serialize identically | 600 pass, 0 FP/FN | 0.027 / 0.216 ms |
|
|
14
|
+
| DSSE Ed25519 round-trip | 250 | Valid signature verifies | 250 pass | 0.144 / 0.163 ms |
|
|
15
|
+
| DSSE payload tamper | 250 | Modified payload is rejected | 250 pass | 0.140 / 0.179 ms |
|
|
16
|
+
| Statement contract | 600 | 200 valid accepted; 400 mutated rejected | 600 pass | 0.008 / 0.060 ms |
|
|
17
|
+
| Attestation verifier boundary | 1,500 | Codes 0, 11, 14 and 13 remain stable | 1,500 pass; 375 per code | 0.505 / 0.842 ms |
|
|
18
|
+
| Strict quality gate | 400 | Canonical production bundle accepted | 400 pass | 29.717 / 45.588 ms |
|
|
19
|
+
| Intelligence P1 | 400 | Graph/P1 reports accepted | 400 pass | 21.977 / 32.027 ms |
|
|
20
|
+
| Replay hash validation | 475 | Clean replay remains clean | 475 pass | 10.210 / 13.316 ms |
|
|
21
|
+
| Semantic lint clean path | 475 | Canonical lint report remains valid | 475 pass | 0.063 / 0.121 ms |
|
|
22
|
+
| Continuity clean path | 475 | Canonical multi-scene continuity remains valid | 475 pass | 0.054 / 0.101 ms |
|
|
23
|
+
| Approval invariant | 475 | Attestation and verifier report remain `approval=false` | 475 pass | 0.149 / 0.203 ms |
|
|
24
|
+
| Fault injection: graph, IR, provenance, replay, P1, continuity, semantic, attestation | 1,000 | Every controlled mutation is rejected | 1,000 pass, 0 FN | 0.095–16.092 ms p95 by case |
|
|
25
|
+
|
|
26
|
+
The machine-readable source is [`data/2.1.0-deep-stress-6900.json`](data/2.1.0-deep-stress-6900.json). Its SHA-256 is `8e4b967a87cf1dab2268c23fc15a98b5ebde1699d81a102505d98ccb89bf3a2d`.
|
|
27
|
+
|
|
28
|
+
The fault corpus deliberately checks task ID substitution, scene substitution, provenance substitution, replay path escape, fix-plan source hash tampering, wrong-scene P1 validation, continuity structural drift, semantic structural drift, attestation approval mutation and payload mutation. The semantic/continuity validator hardening added during this audit closed a real malformed-report acceptance gap; the continuity regression fixture was then corrected to preserve the production SHA-256 context binding rather than a legacy empty placeholder.
|
|
29
|
+
|
|
30
|
+
## Runtime and Dev Lab cross-check
|
|
31
|
+
|
|
32
|
+
The in-process stress run was complemented by a real browser runtime test. Rive, GSAP and Framer Motion all passed the runtime adapter harness with 0/50/100% snapshots, no console errors and telemetry at approximately 16.7–16.8 ms maximum/p95 RAF interval in the sampled run. This establishes that the adapter evidence path works for the canonical examples, but it is not a 5.000-run visual or cross-device benchmark.
|
|
33
|
+
|
|
34
|
+
The Dev Lab production build passed after the attestation rail and Timeline Desk review-driven pass. Two non-blocking operational warnings remain: pnpm ignores the legacy `pnpm` field in `package.json`, and the main JavaScript bundle is approximately 780.38 kB before gzip / 225.37 kB gzip, above the 500 kB advisory threshold. These do not invalidate the current build, but code splitting should be planned before the Lab grows further.
|
|
35
|
+
|
|
36
|
+
## Scorecard
|
|
37
|
+
|
|
38
|
+
The following scores are an engineering rubric based on the evidence above, not a universal benchmark or a claim of autonomous animation taste.
|
|
39
|
+
|
|
40
|
+
| Capability | Score | Evidence-based assessment |
|
|
41
|
+
| --- | ---: | --- |
|
|
42
|
+
| Determinism and contract integrity | **9.5/10** | 6,900/6,900 pass; canonicalization, replay, semantic and continuity paths remained stable. |
|
|
43
|
+
| Trust boundary and evidence identity | **9.4/10** | 1,500 verifier cases plus 1,000 cross-boundary mutations rejected correctly; approval invariant preserved. |
|
|
44
|
+
| Project-aware binding | **8.8/10** | Graph, provenance, Motion IR, task/scene and fix-plan hashes are actively checked; more project archetypes are needed. |
|
|
45
|
+
| Runtime truthfulness | **7.9/10** | Three real adapters pass with telemetry; visual correctness and environment diversity are not yet measured at scale. |
|
|
46
|
+
| Agent handoff and review-first collaboration | **7.8/10** | Reports, issues, fix-plan, continuity, handoff and Dev Lab review rail exist; remediation-cycle outcomes are not yet learned from history. |
|
|
47
|
+
| Performance and operational ergonomics | **8.2/10** | In-process p95 is low and strict gate is under 30 ms in the fixture; browser/device scaling and bundle size remain open. |
|
|
48
|
+
| Release usability | **8.9/10** | `motionloom@2.0.0` is public on npm with a CLI wrapper and workstation release guide; Python/runtime dependencies remain external prerequisites. |
|
|
49
|
+
|
|
50
|
+
**Overall engineering readiness: 8.6/10.** The score is high for evidence integrity and deterministic orchestration, not for end-to-end visual intelligence. The strongest differentiator is that MotionLoom can explain why an artifact is unsafe to trust instead of merely generating another animation.
|
|
51
|
+
|
|
52
|
+
## What is working well
|
|
53
|
+
|
|
54
|
+
MotionLoom now has a credible chain from project context to graph, provenance, Motion IR, runtime evidence, semantic feedback, continuity, signed attestation and review-first handoff. That chain is materially more useful to an Agent than a collection of framework snippets because the Agent can bind an artifact to a task and explain whether a failure is stale context, wrong scene, tampering, unsupported capability or an actual quality issue.
|
|
55
|
+
|
|
56
|
+
The new hardening also demonstrates an important behavior: the system distinguishes a valid signature from user approval. A cryptographically verified bundle remains `approval=false`, and the Dev Lab remains the place where the user sees, tests, fixes and explicitly confirms a PR-side effect. This protects against the common failure mode where automation quietly treats “technically valid” as “approved.”
|
|
57
|
+
|
|
58
|
+
The fix-plan and handoff surfaces are promising for reducing repeated edits. The system can identify a root cause, constrain patch scope and select a rerun scope instead of asking an Agent to regenerate the whole scene. That is the right architecture for reducing accidental churn, even though the audit did not yet measure a historical reduction percentage across real user iterations.
|
|
59
|
+
|
|
60
|
+
## What is not yet proven
|
|
61
|
+
|
|
62
|
+
The 6.900 trials are predominantly deterministic contract tests over one canonical smoke task. They prove boundary behavior, not broad semantic understanding across many project types, animation styles, body rigs, asset families, browser engines, device pixel ratios, reduced-motion settings or long-running timelines.
|
|
63
|
+
|
|
64
|
+
The harness does not yet perform pixel-diff or perceptual comparison against labeled expected frames. Therefore it can prove that a frame was captured, bound and verified, but not that a character’s hand pose, easing feel, silhouette, staging or brand motion is visually correct. A second limitation is that clean-path repetition can hide state leaks that only appear after many different task bundles; a future matrix must rotate fixtures, not only repeat the same fixture.
|
|
65
|
+
|
|
66
|
+
The Agent collaboration score is also necessarily provisional. The repository emits structured reports and actionable handoff data, but it does not yet have a benchmark of “first-pass acceptance rate,” “mean corrections per scene,” “rerender avoidance rate,” or “time from issue to accepted fix.” Without those measures, the claim that MotionLoom reduces user workload is architecturally plausible but not yet empirically quantified.
|
|
67
|
+
|
|
68
|
+
## Prioritized development recommendations
|
|
69
|
+
|
|
70
|
+
| Priority | Recommendation | Why it reduces wrong animation edits | Acceptance metric |
|
|
71
|
+
| --- | --- | --- | --- |
|
|
72
|
+
| P0 | Promote `deep-stress.py` to a documented nightly/PR audit with fixed seeds, thresholds and retained JSON artifacts | Prevents trust-boundary regressions from returning silently | 5,000+ logical trials, 0 FN, 0 FP, stable p95 budget |
|
|
73
|
+
| P0 | Add visual-comparison contract with provenance-labeled 0/50/100% fixtures, pixel diff and perceptual hash | Distinguishes “evidence is valid” from “motion looks correct” | Labeled fixture pass/fail with explainable region-level diff |
|
|
74
|
+
| P1 | Add multi-project corpus: landing UI, product onboarding, body rig, Lottie export, Rive state machine and mixed framework scene | Tests whether project-aware binding generalizes beyond one smoke bundle | At least 10 project archetypes and cross-task mutation coverage |
|
|
75
|
+
| P1 | Add browser matrix for Chromium/WebKit/Firefox, DPR 1/2, reduced motion and 30/60/120 Hz timing | Captures runtime failures that in-process validators cannot see | Zero console errors; telemetry threshold per environment |
|
|
76
|
+
| P1 | Create append-only remediation ledger: issue, proposed fix, patch scope, rerun scope, user outcome | Lets the Agent learn which fixes reduce repeated edits instead of regenerating blindly | Track first-pass acceptance, correction count and rerender avoidance |
|
|
77
|
+
| P1 | Add benchmark history and aggregate metrics by project/context/framework/capability | Detects drift and capability regressions over time | Trend report, outlier alert and reproducible run hash |
|
|
78
|
+
| P2 | Split Dev Lab public route and heavy workbench bundles with dynamic imports; migrate pnpm config to supported settings | Reduces load cost as evidence rails grow | Main chunk below advisory threshold and no pnpm warning |
|
|
79
|
+
| P2 | Add capability confidence and “why this adapter” explanation to Agent handoff | Makes unsupported or stale capability selection visible before rendering | Every selected capability has evidence hash, freshness and reason |
|
|
80
|
+
|
|
81
|
+
## Recommended next milestone
|
|
82
|
+
|
|
83
|
+
The next milestone should be **2.2.0 Visual Truth and Remediation Learning**. It should not add more framework adapters first. It should add labeled visual fixtures, perceptual comparison, multi-project context corpus and the remediation ledger. Only after those are working should historical outcomes influence recommendations; otherwise the Agent risks learning from unverified visual outputs.
|
|
84
|
+
|
|
85
|
+
## Reproduction
|
|
86
|
+
|
|
87
|
+
From the repository root:
|
|
88
|
+
|
|
89
|
+
```bash
|
|
90
|
+
npm run audit:deep
|
|
91
|
+
python3 tests/scripts/run_tests.py
|
|
92
|
+
python3 scripts/eval-intelligence.py
|
|
93
|
+
python3 scripts/skill-doctor.py --json
|
|
94
|
+
npm run runtime:test
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
The deep audit command writes a machine-readable report under `docs/audits/data/` when invoked with the documented script defaults. The strict production checks remain separate so a fast developer test does not accidentally imply that browser review, telemetry, attestation or user approval has occurred.
|