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.
Files changed (42) hide show
  1. package/CHANGELOG.md +41 -0
  2. package/CODE_OF_CONDUCT.md +19 -0
  3. package/CONTRIBUTING.md +65 -0
  4. package/README.md +187 -134
  5. package/ROADMAP.md +32 -0
  6. package/SECURITY.md +27 -0
  7. package/SKILL.md +33 -8
  8. package/SUPPORT.md +23 -0
  9. package/agent-card.json +21 -6
  10. package/bin/motionloom.mjs +23 -5
  11. package/docs/STATUS.md +33 -0
  12. package/docs/audits/2.1.0-deep-stress-evaluation.md +97 -0
  13. package/docs/audits/data/2.1.0-deep-stress-6900.json +329 -0
  14. package/docs/audits/data/deep-stress-latest.json +329 -0
  15. package/docs/audits/external-project-corpus-2026-08-13.md +26 -0
  16. package/docs/releases/2.1.0.md +23 -0
  17. package/docs/releases/npm-publish-from-workstation.md +6 -6
  18. package/package.json +52 -26
  19. package/references/intelligence-core.md +1 -1
  20. package/schemas/project-memory.schema.json +180 -0
  21. package/scripts/analyze.py +56 -0
  22. package/scripts/capture-runtime-telemetry.py +119 -0
  23. package/scripts/devlab.py +126 -0
  24. package/scripts/docs-audit.py +96 -0
  25. package/scripts/eval-intelligence.py +23 -0
  26. package/scripts/eval-projects.py +156 -0
  27. package/scripts/intelligence.py +106 -6
  28. package/scripts/pr.py +150 -0
  29. package/scripts/prepack-clean.mjs +37 -0
  30. package/scripts/project-memory.py +483 -0
  31. package/scripts/project_memory_loader.py +31 -0
  32. package/scripts/release-verify.py +52 -0
  33. package/scripts/render.py +65 -0
  34. package/scripts/report.py +44 -2
  35. package/scripts/review-hook.py +13 -2
  36. package/scripts/skill-doctor.py +12 -2
  37. package/scripts/to-dotlottie.mjs +26 -20
  38. package/src/core/analyzer.py +174 -25
  39. package/tests/evals/intelligence-cases.json +10 -0
  40. package/tests/evals/project-corpus.json +51 -0
  41. package/tests/scripts/run_tests.py +52 -1
  42. 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.0.0"
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 `bash scripts/analyze.sh <project-path>`. Load `project-context.json` from the audited project. If context is missing or ambiguous, stop at `needs_context`.
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 `bash scripts/render.sh <scene>` 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.
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 `python3 scripts/review-hook.py validate --task-dir artifacts/<task-id>`, `python3 scripts/intelligence.py semantic-lint benchmark --task-dir artifacts/<task-id> --iterations 25 --threshold-ms 500`, `bash scripts/capture-runtime-telemetry.sh <scene> artifacts/<task-id>`, the independent attestation verifier, `python3 scripts/report-contract.py --root . --scenes-file <changed-scenes> --require-attestation`, `python3 scripts/quality-gate.py --scene <scene> --context <context-path> --task-dir artifacts/<task-id> --require-intelligence --require-p1 --require-benchmark --require-telemetry --require-attestation`, and `python3 scripts/skill-doctor.py --json` when validating the Skill package itself.
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 `TASK_DIR=artifacts/<task-id> bash scripts/pr.sh <scene>`. Commit, push and open PR are explicit side effects.
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
- bash scripts/to-dotlottie.sh <scene> [output.lottie]
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, `bash scripts/capture-runtime-telemetry.sh <scene> artifacts/<task-id>` 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.
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.0.0",
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": "bash scripts/analyze.sh <project-path>",
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": "bash scripts/to-dotlottie.sh <scene> [output.lottie]",
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": "bash scripts/capture-runtime-telemetry.sh <scene> artifacts/<task-id>",
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": "bash scripts/pr.sh <scene>"
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"],
@@ -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 the shipped Python
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.sh",
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.0.0 — project-aware animation production and evidence contracts
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 (delegates to scripts/analyze.sh)
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(".sh") ? "bash" : PYTHON;
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.