motionloom 2.1.0 → 2.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agents/skills/motionloom/SKILL.md +14 -0
- package/.claude/skills/motionloom.md +5 -0
- package/.codex/skills/motionloom.md +11 -0
- package/AGENTS.md +17 -0
- package/CHANGELOG.md +51 -0
- package/README.md +60 -15
- package/ROADMAP.md +11 -5
- package/SECURITY.md +3 -2
- package/SKILL.md +40 -5
- package/agent-card.json +42 -4
- package/agent-surfaces.json +86 -0
- package/bin/motionloom.mjs +26 -3
- package/docs/AGENT-INTEGRATION.md +60 -0
- package/docs/CHECKLIST.md +7 -1
- package/docs/STATUS.md +2 -2
- package/docs/audits/ci-replay-remediation-2026-08-13.md +33 -0
- package/docs/releases/2.2.0.md +35 -0
- package/docs/releases/2.3.0.md +33 -0
- package/docs/releases/npm-publish-from-workstation.md +6 -6
- package/examples/agent-consumer/README.md +18 -0
- package/examples/agent-consumer/ai-generated-pilot/hero-male.json +10 -0
- package/examples/agent-consumer/ai-generated-pilot-provenance.json +55 -0
- package/examples/agent-consumer/fixture-manifest.json +82 -0
- package/package.json +31 -7
- package/references/agent-interoperability.md +40 -0
- package/references/intelligence-core.md +12 -2
- package/schemas/agent-surfaces.schema.json +78 -0
- package/schemas/asset-provenance.schema.json +183 -0
- package/schemas/remediation-history.schema.json +23 -0
- package/schemas/scene-manifest.schema.json +2 -0
- package/schemas/visual-truth.schema.json +80 -0
- package/scripts/asset-provenance.py +390 -0
- package/scripts/devlab.py +1 -1
- package/scripts/discovery.py +257 -0
- package/scripts/docs-audit.py +30 -2
- package/scripts/pr.py +3 -0
- package/scripts/quality-gate.py +81 -3
- package/scripts/remediation-learning.py +326 -0
- package/scripts/report.py +66 -0
- package/scripts/setup.mjs +472 -0
- package/scripts/skill-doctor.py +2 -1
- package/scripts/visual-truth.py +310 -0
- package/src/output/browser-review-smoke/asset-provenance.json +77 -0
- package/src/output/browser-review-smoke/manifest.json +2 -0
- package/src/output/browser-review-smoke/visual-truth.json +68 -0
- package/tests/scripts/run_tests.py +83 -0
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schema_version": "1.0",
|
|
3
|
+
"name": "motionloom",
|
|
4
|
+
"version": "2.3.0",
|
|
5
|
+
"canonical": {
|
|
6
|
+
"skill": "SKILL.md",
|
|
7
|
+
"agent_card": "agent-card.json",
|
|
8
|
+
"cli": "bin/motionloom.mjs"
|
|
9
|
+
},
|
|
10
|
+
"surfaces": [
|
|
11
|
+
{
|
|
12
|
+
"id": "agents-skills",
|
|
13
|
+
"kind": "agent-skill",
|
|
14
|
+
"path": ".agents/skills/motionloom/SKILL.md",
|
|
15
|
+
"canonical": "SKILL.md",
|
|
16
|
+
"load_mode": "alias",
|
|
17
|
+
"agents": ["codex", "claude-code", "cursor", "opencode"]
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"id": "claude-code",
|
|
21
|
+
"kind": "agent-instructions",
|
|
22
|
+
"path": ".claude/skills/motionloom.md",
|
|
23
|
+
"canonical": "SKILL.md",
|
|
24
|
+
"load_mode": "alias",
|
|
25
|
+
"agents": ["claude-code"]
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
"id": "codex",
|
|
29
|
+
"kind": "agent-instructions",
|
|
30
|
+
"path": ".codex/skills/motionloom.md",
|
|
31
|
+
"canonical": "SKILL.md",
|
|
32
|
+
"load_mode": "alias",
|
|
33
|
+
"agents": ["codex"]
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
"id": "repository-agent-guide",
|
|
37
|
+
"kind": "repository-guide",
|
|
38
|
+
"path": "AGENTS.md",
|
|
39
|
+
"canonical": "SKILL.md",
|
|
40
|
+
"load_mode": "router",
|
|
41
|
+
"agents": ["codex", "claude-code", "cursor", "opencode"]
|
|
42
|
+
}
|
|
43
|
+
],
|
|
44
|
+
"installations": [
|
|
45
|
+
{
|
|
46
|
+
"id": "npx-onboarding",
|
|
47
|
+
"source_kind": "npx",
|
|
48
|
+
"command": "npx --yes motionloom setup",
|
|
49
|
+
"verification": "npx --no-install motionloom status --json",
|
|
50
|
+
"provenance": "npm-registry-resolution-and-project-lockfile"
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
"id": "npm-registry",
|
|
54
|
+
"source_kind": "npm",
|
|
55
|
+
"command": "npm install --save-dev motionloom",
|
|
56
|
+
"verification": "motionloom discovery check --root . --json",
|
|
57
|
+
"provenance": "package-lock-or-pnpm-lock"
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
"id": "github-checkout",
|
|
61
|
+
"source_kind": "git",
|
|
62
|
+
"command": "git clone https://github.com/lenhonbp/MotionLoom.git",
|
|
63
|
+
"verification": "node bin/motionloom.mjs discovery check --root . --json",
|
|
64
|
+
"provenance": "git-commit-and-remote"
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
"id": "local-source",
|
|
68
|
+
"source_kind": "local",
|
|
69
|
+
"command": "node <motionloom-checkout>/bin/motionloom.mjs discovery check --root <motionloom-checkout> --json",
|
|
70
|
+
"verification": "python3 scripts/discovery.py check --root . --json",
|
|
71
|
+
"provenance": "absolute-or-relative-source-path"
|
|
72
|
+
}
|
|
73
|
+
],
|
|
74
|
+
"compatibility": {
|
|
75
|
+
"operating_systems": ["ubuntu", "macos", "windows"],
|
|
76
|
+
"node": ">=18",
|
|
77
|
+
"python": ">=3.11",
|
|
78
|
+
"agents": ["codex", "claude-code", "cursor", "opencode"]
|
|
79
|
+
},
|
|
80
|
+
"rules": {
|
|
81
|
+
"canonical_instruction_source": "SKILL.md",
|
|
82
|
+
"no_surface_copy": true,
|
|
83
|
+
"no_network_required_for_check": true,
|
|
84
|
+
"approval_is_never_inferred": true
|
|
85
|
+
}
|
|
86
|
+
}
|
package/bin/motionloom.mjs
CHANGED
|
@@ -34,10 +34,20 @@ const PYTHON_COMMANDS = {
|
|
|
34
34
|
manifest: "scripts/manifest.py",
|
|
35
35
|
test: "tests/scripts/run_tests.py",
|
|
36
36
|
"deep-audit": "tests/scripts/deep-stress.py",
|
|
37
|
+
discovery: "scripts/discovery.py",
|
|
38
|
+
"visual-truth": "scripts/visual-truth.py",
|
|
39
|
+
"remediation-learning": "scripts/remediation-learning.py",
|
|
40
|
+
"asset-provenance": "scripts/asset-provenance.py",
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
const NODE_COMMANDS = {
|
|
44
|
+
setup: "scripts/setup.mjs",
|
|
45
|
+
status: "scripts/setup.mjs",
|
|
46
|
+
repair: "scripts/setup.mjs",
|
|
37
47
|
};
|
|
38
48
|
|
|
39
49
|
function printHelp() {
|
|
40
|
-
console.log(`MotionLoom 2.
|
|
50
|
+
console.log(`MotionLoom 2.2.0 — project-aware animation production and evidence contracts
|
|
41
51
|
|
|
42
52
|
Usage:
|
|
43
53
|
motionloom <command> [args...]
|
|
@@ -59,6 +69,13 @@ Commands:
|
|
|
59
69
|
validate-lottie Validate a Lottie animation
|
|
60
70
|
manifest Build or validate a production manifest
|
|
61
71
|
eval-intelligence Run adversarial Intelligence Core evaluation
|
|
72
|
+
discovery Check Agent surfaces, source identity and install matrix
|
|
73
|
+
visual-truth Build or validate provenance-bound visual comparisons
|
|
74
|
+
remediation-learning Record or summarize user-confirmed remediation and benchmark history
|
|
75
|
+
asset-provenance Validate, classify or report asset origin and production readiness
|
|
76
|
+
setup Install and bootstrap MotionLoom in the current project
|
|
77
|
+
status Read-only project readiness report
|
|
78
|
+
repair Re-apply safe missing setup pieces
|
|
62
79
|
|
|
63
80
|
Cross-platform examples:
|
|
64
81
|
motionloom analyze . --init-memory
|
|
@@ -66,6 +83,11 @@ Cross-platform examples:
|
|
|
66
83
|
motionloom memory refresh --project-root . --json
|
|
67
84
|
motionloom memory record-decision --project-root . --id ui-easing \\
|
|
68
85
|
--status accepted --summary "Use ease-out for UI entry" --user-confirmed
|
|
86
|
+
motionloom discovery check --root . --json
|
|
87
|
+
motionloom discovery install-matrix --root . --json
|
|
88
|
+
motionloom visual-truth validate --root . --input src/output/<scene>/visual-truth.json
|
|
89
|
+
motionloom remediation-learning summary --history artifacts/remediation-history.jsonl --json
|
|
90
|
+
motionloom asset-provenance check --input <asset-provenance.json> --root <scene-dir> --mode runtime --json
|
|
69
91
|
|
|
70
92
|
The CLI never grants approval or opens a pull request by itself. User review
|
|
71
93
|
and explicit repository side-effect confirmation remain separate gates.
|
|
@@ -78,7 +100,7 @@ if (!command || command === "help" || command === "--help" || command === "-h")
|
|
|
78
100
|
process.exit(0);
|
|
79
101
|
}
|
|
80
102
|
|
|
81
|
-
const script = PYTHON_COMMANDS[command];
|
|
103
|
+
const script = NODE_COMMANDS[command] || PYTHON_COMMANDS[command];
|
|
82
104
|
if (!script) {
|
|
83
105
|
console.error(`Unknown MotionLoom command: ${command}`);
|
|
84
106
|
printHelp();
|
|
@@ -86,7 +108,8 @@ if (!script) {
|
|
|
86
108
|
}
|
|
87
109
|
|
|
88
110
|
const executable = script.endsWith(".mjs") ? process.execPath : PYTHON;
|
|
89
|
-
const
|
|
111
|
+
const delegatedArgs = NODE_COMMANDS[command] && command !== "setup" ? [command, ...args] : args;
|
|
112
|
+
const result = spawnSync(executable, [resolve(ROOT, script), ...delegatedArgs], {
|
|
90
113
|
cwd: ROOT,
|
|
91
114
|
stdio: "inherit",
|
|
92
115
|
env: process.env,
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# Agent interoperability and installation contract
|
|
2
|
+
|
|
3
|
+
MotionLoom is distributed as one Skill with several **discovery surfaces**, not as several independent Skills. The root `SKILL.md` is canonical. `agent-card.json` is the capability contract. `agent-surfaces.json` records the supported surfaces, installation sources and compatibility policy.
|
|
4
|
+
|
|
5
|
+
## Install sources
|
|
6
|
+
|
|
7
|
+
| Source | Typical command | Verification | Provenance to retain |
|
|
8
|
+
|---|---|---|---|
|
|
9
|
+
| One-command onboarding | `npx --yes motionloom setup` | `npx --no-install motionloom status --json` | project lockfile, setup JSON and generated project identity |
|
|
10
|
+
| npm registry | `npm install --save-dev motionloom` | `motionloom discovery check --root . --json` | lockfile and resolved package version |
|
|
11
|
+
| Git checkout | `git clone https://github.com/lenhonbp/MotionLoom.git` | `node bin/motionloom.mjs discovery check --root . --json` | remote URL and commit SHA |
|
|
12
|
+
| Local source | invoke `<checkout>/bin/motionloom.mjs` | `python3 scripts/discovery.py check --root . --json` | source path and local commit if present |
|
|
13
|
+
|
|
14
|
+
The check is offline and read-only. Installation, source identity and capability compatibility are separate from network authentication. A passing check means that the package is structurally discoverable; it does not mean that a scene is runtime-verified or approved. For a new host project, prefer `npx --yes motionloom setup`; use `--dry-run --json` to preview and `status --json` to inspect without mutation. `repair --yes` only restores missing managed pieces.
|
|
15
|
+
|
|
16
|
+
## Agent surfaces
|
|
17
|
+
|
|
18
|
+
| Surface | Path | Role |
|
|
19
|
+
|---|---|---|
|
|
20
|
+
| Agent Skills | `.agents/skills/motionloom/SKILL.md` | Portable alias for Agent Skills discovery |
|
|
21
|
+
| Claude Code | `.claude/skills/motionloom.md` | Claude-specific router to the canonical Skill |
|
|
22
|
+
| Codex | `.codex/skills/motionloom.md` | Codex-specific router to the canonical Skill |
|
|
23
|
+
| Repository router | `AGENTS.md` | Short first-load instructions for repository-aware Agents |
|
|
24
|
+
|
|
25
|
+
These files deliberately remain short. They must not become a second instruction source. Every surface points back to `SKILL.md`; drift is a contract failure and is checked by `motionloom discovery check` and the documentation audit.
|
|
26
|
+
|
|
27
|
+
## Agent compatibility matrix
|
|
28
|
+
|
|
29
|
+
| Agent | Discovery surface | Expected first action | Review boundary |
|
|
30
|
+
|---|---|---|---|
|
|
31
|
+
| Codex | `.codex/skills/motionloom.md`, `.agents/skills/motionloom/SKILL.md` | Run discovery check, load root Skill and Agent Card | No commit/push/PR without explicit user confirmation |
|
|
32
|
+
| Claude Code | `.claude/skills/motionloom.md`, `.agents/skills/motionloom/SKILL.md` | Run discovery check, load root Skill and Agent Card | Same review-first gate |
|
|
33
|
+
| Cursor | `.agents/skills/motionloom/SKILL.md`, `AGENTS.md` | Load canonical Skill through repository rules | Same review-first gate |
|
|
34
|
+
| OpenCode | `.agents/skills/motionloom/SKILL.md`, `AGENTS.md` | Load canonical Skill and run discovery check | Same review-first gate |
|
|
35
|
+
|
|
36
|
+
Support here means that the repository exposes a deterministic discovery contract. It does not claim that every Agent version automatically loads every convention. The Agent must report when a surface is unavailable or when it cannot open the internal Dev Lab.
|
|
37
|
+
|
|
38
|
+
## Required first-run sequence
|
|
39
|
+
|
|
40
|
+
For a new host project, run `npx --yes motionloom setup --json`, inspect the returned `status`, then use `npx --no-install motionloom status --json` before planning. Setup performs project analysis, discovery and durable-memory bootstrap without copying artifacts from the MotionLoom checkout. For an existing installation, run `motionloom discovery check --root <checkout> --json`, then refresh with `motionloom analyze <project> --init-memory` when needed. Load the project context and durable Project Memory before planning. After selecting or generating an asset, create `asset-provenance.json` and run the runtime-mode check before ingest. An AI-generated pilot may proceed to the real runtime and Dev Lab, but it must remain non-production-eligible. After rendering, prepare a task-bound browser candidate and suggest or trigger the internal Dev Lab. Capture user feedback separately from runtime evidence. A valid signature, quality gate or screenshot is not a user approval.
|
|
41
|
+
|
|
42
|
+
## AI-first asset workflow
|
|
43
|
+
|
|
44
|
+
The Agent must distinguish these transitions rather than collapsing them into one `approved` flag:
|
|
45
|
+
|
|
46
|
+
| Transition | Allowed actor | Required evidence |
|
|
47
|
+
|---|---|---|
|
|
48
|
+
| `blocked` → `runtime_ready` | Agent or runtime validator | Safe paths, valid schema, license/source, file hashes and real runtime evidence |
|
|
49
|
+
| `runtime_ready` → `production_eligible` | Contract gate plus human review where the authority tier requires it | Full quality/visual/runtime gate and valid authority record |
|
|
50
|
+
| `production_eligible` → `production_approved` | User or designated human reviewer only | Explicit review decision persisted outside the Agent's self-assertion |
|
|
51
|
+
|
|
52
|
+
Never rewrite `ai_generated` as `artist_authored`, never infer human review from a signature, and never set `production_approved` from `quality-gate`. Use `motionloom asset-provenance report` to show the boundary in a handoff.
|
|
53
|
+
|
|
54
|
+
## Portability policy
|
|
55
|
+
|
|
56
|
+
The npm entrypoint is the public cross-platform surface. Ubuntu, macOS and Windows must use Node argument arrays, Python `pathlib`, UTF-8 JSON and no required Bash, POSIX `/tmp`, system `zip` or system `unzip`. Bash wrappers may remain convenience scripts for repository contributors, but the discovery and validation commands must work through Node/Python on all supported operating systems.
|
|
57
|
+
|
|
58
|
+
## Troubleshooting
|
|
59
|
+
|
|
60
|
+
If discovery fails, do not continue as if the Skill were loaded. Inspect the JSON `errors`, verify that the checkout has not mixed files from different versions, and rerun from the intended root. If the package version and `agent-surfaces.json` disagree, use the same source checkout or reinstall the package. If a runtime dependency is missing, report it as a blocker; do not replace runtime evidence with a static placeholder.
|
package/docs/CHECKLIST.md
CHANGED
|
@@ -23,9 +23,15 @@ A scene is only ready for the confirm-into-PR step when every item below passes.
|
|
|
23
23
|
|
|
24
24
|
## Source traceability
|
|
25
25
|
- [ ] Every geometric asset references an authoritative source (`assets/library/` or the host project) — flagged if invented.
|
|
26
|
-
- [ ] `manifest.json` records framework, source path, license note, spec hash, and completed checklist entries.
|
|
26
|
+
- [ ] `manifest.json` records framework, source path, license note, spec hash, visual-truth path, and completed checklist entries.
|
|
27
|
+
- [ ] `asset-provenance.json` records origin/authority, generator or derivation chain, license/source, per-file SHA-256 and runtime evidence.
|
|
28
|
+
- [ ] `ai_generated` assets may be runtime-ready but are not production-eligible; `unknown` assets are blocked.
|
|
29
|
+
- [ ] `artist_authored` is backed by a verifiable human/artist record and is not merely an Agent-authored field.
|
|
27
30
|
|
|
28
31
|
## PR readiness
|
|
29
32
|
- [ ] Snapshot PNGs exist for 0/50/100%.
|
|
33
|
+
- [ ] `visual-truth.json` binds real baseline/candidate frames to source, manifest and available runtime/Motion IR hashes; `approval` remains `false`.
|
|
30
34
|
- [ ] `motion-spec.json` is bound to the exact `project-context.json` hash (implements == planned).
|
|
31
35
|
- [ ] Dev Lab URL tested on mobile viewport and desktop.
|
|
36
|
+
- [ ] The production provenance check passes with `--mode production` and reports `production_eligible: true`.
|
|
37
|
+
- [ ] `production_approved` and browser-review approval are recorded only from the user's explicit review; attestation approval remains `false`.
|
package/docs/STATUS.md
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
## Current release posture
|
|
6
6
|
|
|
7
|
-
MotionLoom's repository source and package manifest are
|
|
7
|
+
MotionLoom's repository source and package manifest are prepared for **2.3.0 release metadata**. The publication state of the npm registry and GitHub Release/tag must be verified against the latest release workflow rather than inferred from this document. The repository has a cross-platform CLI, one-command project onboarding, durable Project Memory, Agent interoperability surfaces, artifact-first handoff, runtime evidence, Visual Truth, Remediation Learning, signed attestation, AI-first asset provenance and a browser-based Dev Lab review contract. The protected manual release workflow verifies package/changelog/release-note alignment before publication.
|
|
8
8
|
|
|
9
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
10
|
|
|
@@ -30,4 +30,4 @@ Use the following order when sources disagree:
|
|
|
30
30
|
|
|
31
31
|
## Known next work
|
|
32
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
|
|
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 and verification of the 2.3.0 version–tag–GitHub Release–npm provenance chain. 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,33 @@
|
|
|
1
|
+
# CI Replay Remediation — 2026-08-13
|
|
2
|
+
|
|
3
|
+
## Evidence
|
|
4
|
+
|
|
5
|
+
The `MotionLoom Quality` workflow for commit [`d148f21`](https://github.com/lenhonbp/MotionLoom/commit/d148f2175e47e3fc32f7156fc83af82c749b47ed) completed with failure in run [`31709781319`](https://github.com/lenhonbp/MotionLoom/actions/runs/31709781319). Documentation and Package Hygiene and Security Analysis completed successfully on the same commit.
|
|
6
|
+
|
|
7
|
+
The failing step was **Enforce context-bound quality gate**. The recorded rejection was:
|
|
8
|
+
|
|
9
|
+
> `replay bundle has 11 mismatch(es)`
|
|
10
|
+
|
|
11
|
+
The preceding Intelligence, project graph, Motion IR and provenance checks were valid. The failure therefore represented stale replay hashes, not an approval decision or a request to weaken the verifier.
|
|
12
|
+
|
|
13
|
+
## Root cause
|
|
14
|
+
|
|
15
|
+
The Quality workflow treated `replay-bundle.json` as a committed integrity snapshot, but earlier steps intentionally regenerate runtime telemetry, semantic-lint benchmark output, report/manifest output, signed attestation output and rendered runtime evidence for changed scenes. The quality gate then verified the old replay bundle against those newly generated files. A local verification before the generated-artifact phase could pass while the same sequence in CI correctly reported mismatches.
|
|
16
|
+
|
|
17
|
+
## Remediation
|
|
18
|
+
|
|
19
|
+
The workflow now runs the canonical command below after runtime snapshot rendering and before the context-bound quality gate:
|
|
20
|
+
|
|
21
|
+
```text
|
|
22
|
+
python3 scripts/intelligence.py replay capture \
|
|
23
|
+
--task-dir "artifacts/${scene}-task" --root . \
|
|
24
|
+
--output "artifacts/${scene}-task/replay-bundle.json"
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
The change does not remove replay verification, expand exclusions, or turn heuristic evidence into approval. A regression assertion checks that replay capture follows runtime rendering and precedes the quality gate. A temporary task-bundle test also confirms that tampered evidence is rejected, canonical capture rebuilds its hashes, and the rebuilt bundle verifies successfully.
|
|
28
|
+
|
|
29
|
+
## Local verification
|
|
30
|
+
|
|
31
|
+
After the remediation, the following checks passed locally: engine regression, docs audit, Skill Doctor, skill-creator validator, runtime adapter smoke, Agent discovery, installation matrix, Visual Truth validation, Remediation Learning validation, quality attestation with Visual Truth required, npm dry-run, Python syntax compilation and `git diff --check`.
|
|
32
|
+
|
|
33
|
+
This audit records the CI incident and its fix as evidence; it does not change the published `motionloom@2.1.0` version or grant user approval.
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# MotionLoom 2.2.0
|
|
2
|
+
|
|
3
|
+
## Summary
|
|
4
|
+
|
|
5
|
+
MotionLoom 2.2.0 turns the project-aware animation Skill into a more portable Agent production contract. This release candidate adds canonical discovery surfaces, consumer fixtures, cross-platform installation evidence, provenance-bound Visual Truth, append-only Remediation Learning and a CI replay remediation that fails closed without confusing stale evidence with user approval.
|
|
6
|
+
|
|
7
|
+
## Added
|
|
8
|
+
|
|
9
|
+
### Agent interoperability and installation
|
|
10
|
+
|
|
11
|
+
The package now exposes one canonical `SKILL.md` through `.agents/skills`, `.claude`, `.codex` and `AGENTS.md`. The discovery manifest and schema describe source kind, version, canonical files, compatibility and verification commands. The `motionloom discovery check`, `source` and `install-matrix` commands are cross-platform and do not require network access for local contract checks.
|
|
12
|
+
|
|
13
|
+
The consumer fixture manifest covers Lottie/dotLottie, Rive, GSAP, Framer Motion, body rigs and multi-scene continuity. Ubuntu, macOS and Windows are represented as explicit installation-matrix targets rather than an unverified portability claim.
|
|
14
|
+
|
|
15
|
+
### Visual Truth
|
|
16
|
+
|
|
17
|
+
`visual-truth.json` binds baseline and candidate frame hashes, dimensions, scene/task identity, source and manifest provenance, runtime evidence and Motion IR where available. The validator emits deterministic comparison signals and region-level explanations for review. A changed frame produces `review_required`; it never becomes automatic approval.
|
|
18
|
+
|
|
19
|
+
### Remediation Learning
|
|
20
|
+
|
|
21
|
+
The append-only, hash-chained remediation history stores user-confirmed outcomes and deterministic benchmark records. Summaries expose correction count, first-pass acceptance, success rate, issue-class outliers and benchmark pass rate. Unconfirmed outcomes cannot enter acceptance metrics.
|
|
22
|
+
|
|
23
|
+
## Fixed
|
|
24
|
+
|
|
25
|
+
The Quality workflow now rebuilds the exact task-bound replay bundle after runtime, report and attestation artifacts are generated and before the context-bound quality gate. Regression coverage exercises tamper rejection and canonical replay rebuild, preventing stale generated hashes from causing a false CI rejection.
|
|
26
|
+
|
|
27
|
+
## Verified behavior
|
|
28
|
+
|
|
29
|
+
The release candidate passes the full regression harness, docs audit, Skill Doctor, skill-creator validator, runtime adapter smoke, discovery and installation matrix checks, Visual Truth validation, Remediation Learning validation, quality attestation with Visual Truth required, npm package dry-run, Python syntax compilation and diff hygiene. The mainline commit carrying the replay fix also passed Quality, Documentation and Package Hygiene, and Security workflows on GitHub.
|
|
30
|
+
|
|
31
|
+
## Trust boundary and remaining scope
|
|
32
|
+
|
|
33
|
+
This release does not infer approval from visual metrics, heuristics, signatures, attestations or benchmark scores. The user must inspect the Dev Lab review candidate and explicitly approve before PR preparation. Commit, push, tag creation, GitHub Release creation and npm publication remain separate explicit side effects.
|
|
34
|
+
|
|
35
|
+
The next evidence priority is paired evaluation across additional real animation projects to measure first-pass acceptance, correction count, time-to-fix and rerender avoidance without presenting synthetic scores as human approval.
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# MotionLoom 2.3.0
|
|
2
|
+
|
|
3
|
+
## Summary
|
|
4
|
+
|
|
5
|
+
MotionLoom 2.3.0 makes the project-aware animation Skill easier to install and resume in a real project. It introduces a canonical one-command onboarding path while preserving the evidence-first, review-first and local-only safety boundaries established by the previous releases.
|
|
6
|
+
|
|
7
|
+
## Added
|
|
8
|
+
|
|
9
|
+
### One-command project onboarding
|
|
10
|
+
|
|
11
|
+
`npx --yes motionloom setup` detects the host project, selects npm/pnpm/yarn from the project contract, installs MotionLoom as a local development dependency, merges a marked router block into `AGENTS.md`, runs discovery and bootstraps project-bound context plus durable Project Memory. The operation is idempotent and never overwrites unmarked project guidance.
|
|
12
|
+
|
|
13
|
+
Read-only and repair surfaces are available through `npx --no-install motionloom status --json` and `npx --no-install motionloom repair --yes`. `--dry-run --json` exposes the planned changes before mutation, which gives Agents and CI a machine-readable preview.
|
|
14
|
+
|
|
15
|
+
### Agent interoperability
|
|
16
|
+
|
|
17
|
+
The discovery manifest now advertises the `npx` recipe as the preferred onboarding path, while npm, Git checkout and local checkout remain available for contributors and controlled environments. The installation matrix explicitly covers setup, status and repair commands across Ubuntu, macOS and Windows.
|
|
18
|
+
|
|
19
|
+
### Asset provenance
|
|
20
|
+
|
|
21
|
+
The AI-first human-governed asset provenance contract from the 2.2.0 working tree is included in this release. Agents may create assets for runtime ingest and testing, but `ai_generated` does not become production-eligible; `production_approved` remains human-only.
|
|
22
|
+
|
|
23
|
+
## Fixed
|
|
24
|
+
|
|
25
|
+
Machine-readable setup output no longer mixes package-manager installation logs with JSON. Dispatcher routing keeps `status` read-only and prevents `repair` from accidentally becoming an unrestricted full setup. Managed router repair remains idempotent and package-manager agnostic.
|
|
26
|
+
|
|
27
|
+
## Verified behavior
|
|
28
|
+
|
|
29
|
+
The release target passes the full regression harness, onboarding and installation-matrix tests, discovery contract, docs audit, Skill Doctor, skill-creator validation, quality validation, npm tarball dry-run and diff hygiene.
|
|
30
|
+
|
|
31
|
+
## Trust boundary
|
|
32
|
+
|
|
33
|
+
Setup does not commit, push, open a PR, grant user approval or promote asset provenance. Runtime evidence, quality gates, attestations and heuristics remain evidence only. The user must inspect the Dev Lab candidate and explicitly authorize any Git side effect.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Publish MotionLoom to npm from your workstation
|
|
2
2
|
|
|
3
|
-
This guide publishes the prepared `motionloom@2.
|
|
3
|
+
This guide publishes the prepared `motionloom@2.3.0` package from your own computer. The npm password, authenticator code and access token must stay on your computer; never paste them into chat, GitHub issues or repository files.
|
|
4
4
|
|
|
5
5
|
## 1. Install prerequisites
|
|
6
6
|
|
|
@@ -48,7 +48,7 @@ npm pack --dry-run --json --ignore-scripts
|
|
|
48
48
|
npm publish --dry-run --access public
|
|
49
49
|
```
|
|
50
50
|
|
|
51
|
-
The dry-run should report `motionloom@2.
|
|
51
|
+
The dry-run should report `motionloom@2.3.0`, public access, and the current package file list. Do not hard-code a historical file count: inspect the JSON output and compare it with the checked-in package allowlist. The prepack hook removes generated Python bytecode before packaging. Do not publish if the dry-run shows private keys, `.env` files, `artifacts/`, `dev-lab/` or `__pycache__/` entries.
|
|
52
52
|
|
|
53
53
|
## 5. Publish the package
|
|
54
54
|
|
|
@@ -58,15 +58,15 @@ When the dry-run is correct and `npm whoami` shows the intended account, publish
|
|
|
58
58
|
npm publish --access public
|
|
59
59
|
```
|
|
60
60
|
|
|
61
|
-
The version `2.
|
|
61
|
+
The version `2.3.0` becomes immutable on npm after a successful publish. If npm reports that the version already exists, stop and verify the registry instead of trying to overwrite it.
|
|
62
62
|
|
|
63
63
|
## 6. Verify the registry publication
|
|
64
64
|
|
|
65
|
-
Run the following commands and confirm that they return `2.
|
|
65
|
+
Run the following commands and confirm that they return `2.3.0` and a tarball URL:
|
|
66
66
|
|
|
67
67
|
```bash
|
|
68
68
|
npm view motionloom version --registry=https://registry.npmjs.org/
|
|
69
|
-
npm view motionloom@2.
|
|
69
|
+
npm view motionloom@2.3.0 name version license dist.tarball dist.shasum --json \
|
|
70
70
|
--registry=https://registry.npmjs.org/
|
|
71
71
|
```
|
|
72
72
|
|
|
@@ -76,7 +76,7 @@ Then test installation in a clean temporary directory:
|
|
|
76
76
|
TMP_DIR="$(mktemp -d)"
|
|
77
77
|
cd "$TMP_DIR"
|
|
78
78
|
npm init --yes
|
|
79
|
-
npm install motionloom@2.
|
|
79
|
+
npm install motionloom@2.3.0
|
|
80
80
|
motionloom --help
|
|
81
81
|
motionloom doctor
|
|
82
82
|
```
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# Agent consumer fixtures
|
|
2
|
+
|
|
3
|
+
This example set is a small, machine-readable map of how an Agent should consume MotionLoom. It is intentionally not a fake demo application and it does not claim user approval. Each case points to a repository artifact or a real runtime harness and states its evidence level.
|
|
4
|
+
|
|
5
|
+
Run the offline contract checks first:
|
|
6
|
+
|
|
7
|
+
```text
|
|
8
|
+
motionloom discovery check --root . --json
|
|
9
|
+
python3 tests/scripts/test_consumer_fixtures.py
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
For the browser-backed runtime cases, install the repository dependencies and run:
|
|
13
|
+
|
|
14
|
+
```text
|
|
15
|
+
npm run runtime:test
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
The real runtime harness emits deterministic scrub points at 0/50/100% for Rive, GSAP and Framer Motion. The Lottie and dotLottie cases are asset/package contracts; they must not be described as runtime-verified unless corresponding runtime evidence exists in the task bundle. The body-rig and continuity cases exercise structure and cross-scene semantics.
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
{
|
|
2
|
+
"fixture": "ai-generated-pilot",
|
|
3
|
+
"asset_id": "hero-male-ai-pilot",
|
|
4
|
+
"framework": "body-rig",
|
|
5
|
+
"purpose": "Deterministic runtime-ingest fixture; not production art and not artist-authored.",
|
|
6
|
+
"bones": ["root", "pelvis", "chest", "head", "hand_r", "hand_l"],
|
|
7
|
+
"animations": ["idle", "attack", "hit", "death"],
|
|
8
|
+
"events": ["weapon_attach", "vfx_hit"],
|
|
9
|
+
"provenance_note": "This fixture demonstrates AI-generated origin and must remain outside production approval."
|
|
10
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schema_version": "1.0",
|
|
3
|
+
"provenance_id": "hero-male-ai-pilot-provenance",
|
|
4
|
+
"task_id": "mission-1.17.5-ai-pilot",
|
|
5
|
+
"scene": "hero-male-ai-pilot",
|
|
6
|
+
"created_at": "2026-08-14T00:00:00Z",
|
|
7
|
+
"asset": {
|
|
8
|
+
"id": "hero-male-ai-pilot",
|
|
9
|
+
"path": "hero-male.json",
|
|
10
|
+
"type": "runtime-pilot",
|
|
11
|
+
"framework": "body-rig",
|
|
12
|
+
"version": "0.1.0"
|
|
13
|
+
},
|
|
14
|
+
"authority": "ai_generated",
|
|
15
|
+
"readiness": "runtime_ready",
|
|
16
|
+
"generator": {
|
|
17
|
+
"model": "declared-by-agent-at-generation-time",
|
|
18
|
+
"task_id": "mission-1.17.5-ai-pilot",
|
|
19
|
+
"source": "agent-created-pilot",
|
|
20
|
+
"generated_at": "2026-08-14T00:00:00Z",
|
|
21
|
+
"agent": "codex"
|
|
22
|
+
},
|
|
23
|
+
"license": {
|
|
24
|
+
"spdx": "UNLICENSED",
|
|
25
|
+
"source": "internal-generation",
|
|
26
|
+
"attribution": "Generated pilot retained for runtime testing; production distribution requires a separate rights decision."
|
|
27
|
+
},
|
|
28
|
+
"files": [
|
|
29
|
+
{
|
|
30
|
+
"path": "hero-male.json",
|
|
31
|
+
"role": "runtime-pilot",
|
|
32
|
+
"sha256": "fc723dce3005fb2d16fe6df2e20a116f361b2b2b82b4aff7045c186c55190c27"
|
|
33
|
+
}
|
|
34
|
+
],
|
|
35
|
+
"provenance_chain": [
|
|
36
|
+
{
|
|
37
|
+
"step": "generate",
|
|
38
|
+
"actor": "agent:codex",
|
|
39
|
+
"source": "agent-created-pilot",
|
|
40
|
+
"timestamp": "2026-08-14T00:00:00Z"
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
"step": "runtime-test",
|
|
44
|
+
"actor": "runtime:motionloom",
|
|
45
|
+
"source": "internal-runtime-evidence",
|
|
46
|
+
"timestamp": "2026-08-14T00:00:00Z"
|
|
47
|
+
}
|
|
48
|
+
],
|
|
49
|
+
"runtime_evidence": {
|
|
50
|
+
"status": "pass",
|
|
51
|
+
"runtime": "motionloom-body-rig-runtime",
|
|
52
|
+
"tested_at": "2026-08-14T00:00:00Z",
|
|
53
|
+
"evidence_path": "runtime-evidence.json"
|
|
54
|
+
}
|
|
55
|
+
}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schema_version": "1.0",
|
|
3
|
+
"fixture_set": "agent-consumer-smoke",
|
|
4
|
+
"purpose": "Show Agents how to select an animation capability, locate evidence and preserve review boundaries.",
|
|
5
|
+
"repository_root": "..",
|
|
6
|
+
"cases": [
|
|
7
|
+
{
|
|
8
|
+
"id": "lottie-json-source-bound",
|
|
9
|
+
"framework": "lottie",
|
|
10
|
+
"category": "asset-runtime",
|
|
11
|
+
"source": "src/output/browser-review-smoke/animation.json",
|
|
12
|
+
"manifest": "src/output/browser-review-smoke/manifest.json",
|
|
13
|
+
"verification": "python3 scripts/validate-lottie.py src/output/browser-review-smoke/animation.json",
|
|
14
|
+
"evidence_level": "asset-contract",
|
|
15
|
+
"expected": "source_binding and Lottie structural validation; runtime acceptance still requires runtime evidence"
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"id": "dotlottie-package",
|
|
19
|
+
"framework": "dotlottie",
|
|
20
|
+
"category": "asset-package",
|
|
21
|
+
"source": "src/output/browser-review-smoke/animation.json",
|
|
22
|
+
"manifest": "src/output/browser-review-smoke/manifest.json",
|
|
23
|
+
"verification": "node scripts/to-dotlottie.mjs --scene-dir src/output/browser-review-smoke --output <temporary-output>/animation.lottie",
|
|
24
|
+
"evidence_level": "package-contract",
|
|
25
|
+
"expected": "manifest.json selects the initial animation and the archive validates without system zip"
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
"id": "rive-runtime",
|
|
29
|
+
"framework": "rive",
|
|
30
|
+
"category": "browser-runtime",
|
|
31
|
+
"source": "tests/runtime-harness/main.jsx",
|
|
32
|
+
"evidence": "artifacts/runtime-adapters/rive/runtime-evidence.json",
|
|
33
|
+
"verification": "RUNTIME_FRAMEWORKS=rive npm run runtime:test",
|
|
34
|
+
"evidence_level": "runtime-verified-fixture",
|
|
35
|
+
"expected": "real browser adapter, ready=true, runtime state and 0/50/100 snapshots"
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
"id": "gsap-runtime",
|
|
39
|
+
"framework": "gsap",
|
|
40
|
+
"category": "browser-runtime",
|
|
41
|
+
"source": "tests/runtime-harness/main.jsx",
|
|
42
|
+
"evidence": "artifacts/runtime-adapters/gsap/runtime-evidence.json",
|
|
43
|
+
"verification": "RUNTIME_FRAMEWORKS=gsap npm run runtime:test",
|
|
44
|
+
"evidence_level": "runtime-verified-fixture",
|
|
45
|
+
"expected": "real browser adapter, ready=true, runtime state and 0/50/100 snapshots"
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
"id": "framer-motion-runtime",
|
|
49
|
+
"framework": "framer-motion",
|
|
50
|
+
"category": "browser-runtime",
|
|
51
|
+
"source": "tests/runtime-harness/main.jsx",
|
|
52
|
+
"evidence": "artifacts/runtime-adapters/framer-motion/runtime-evidence.json",
|
|
53
|
+
"verification": "RUNTIME_FRAMEWORKS=framer-motion npm run runtime:test",
|
|
54
|
+
"evidence_level": "runtime-verified-fixture",
|
|
55
|
+
"expected": "real browser adapter, ready=true, runtime state and 0/50/100 snapshots"
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
"id": "body-rig",
|
|
59
|
+
"framework": "svg-cutout-rig",
|
|
60
|
+
"category": "body-animation",
|
|
61
|
+
"source": "assets/library/avatar-base.svg",
|
|
62
|
+
"verification": "python3 src/rig/cutout_rig.py build --input assets/library/avatar-base.svg --output <temporary-output>/rigged.svg",
|
|
63
|
+
"evidence_level": "structure-verified-fixture",
|
|
64
|
+
"expected": "named anatomy, pivot markers and parent-first hierarchy remain inspectable"
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
"id": "continuity-multiscene",
|
|
68
|
+
"framework": "framework-neutral",
|
|
69
|
+
"category": "continuity",
|
|
70
|
+
"source": "tests/fixtures/continuity-multiscene",
|
|
71
|
+
"evidence": "tests/fixtures/continuity-multiscene/continuity-report.json",
|
|
72
|
+
"verification": "python3 scripts/intelligence.py continuity validate --report tests/fixtures/continuity-multiscene/continuity-report.json",
|
|
73
|
+
"evidence_level": "semantic-structure-fixture",
|
|
74
|
+
"expected": "scene-01 and scene-02 share continuity while scene-02-drift remains an explicit negative case"
|
|
75
|
+
}
|
|
76
|
+
],
|
|
77
|
+
"review_boundary": {
|
|
78
|
+
"approval": false,
|
|
79
|
+
"user_review_required": true,
|
|
80
|
+
"pr_side_effects": "explicit-confirmation"
|
|
81
|
+
}
|
|
82
|
+
}
|