motionloom 2.2.0 → 2.4.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 +48 -1
- package/README.md +123 -17
- package/ROADMAP.md +8 -3
- package/SKILL.md +34 -3
- package/agent-card.json +48 -5
- package/agent-surfaces.json +8 -1
- package/artifact-adapter-registry.json +53 -0
- package/bin/motionloom.mjs +41 -4
- package/docs/AGENT-INTEGRATION.md +15 -2
- package/docs/CHECKLIST.md +21 -0
- package/docs/STATUS.md +2 -2
- package/docs/audits/data/deep-stress-latest.json +65 -65
- package/docs/releases/2.3.0.md +33 -0
- package/docs/releases/2.4.0.md +31 -0
- package/docs/releases/npm-publish-from-workstation.md +19 -8
- package/docs/research/agent-skill-ecosystem-notes.md +47 -0
- package/docs/research/ai-animation-tools-2026-notes.md +81 -0
- package/docs/research/ai-animation-tools-2026-report.md +168 -0
- package/docs/research/ai-pilot-ingest-notes.md +29 -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/ai-pilot-scout/CHATGPT-HANDOFF.md +70 -0
- package/examples/agent-consumer/ai-pilot-scout/CODEX-HANDOFF.md +80 -0
- package/examples/agent-consumer/ai-pilot-scout/README.md +39 -0
- package/examples/agent-consumer/ai-pilot-scout/chatgpt-geometry-correction-prompt.md +55 -0
- package/examples/agent-consumer/ai-pilot-scout/chatgpt-pose-generation-prompt.md +78 -0
- package/examples/agent-consumer/ai-pilot-scout/partial-handoff.json +73 -0
- package/examples/agent-consumer/artifact-intake/hero-motion-controls.json +15 -0
- package/examples/agent-consumer/artifact-intake/hero-motion-export.json +14 -0
- package/examples/agent-consumer/artifact-intake/hero-motion-provenance.json +20 -0
- package/examples/agent-consumer/artifact-intake/hero-motion-receipt.json +16 -0
- package/examples/agent-consumer/asset-consistency/assets/forest-back.png +0 -0
- package/examples/agent-consumer/asset-consistency/assets/forest-front.png +0 -0
- package/examples/agent-consumer/asset-consistency/assets/forest-mid.png +0 -0
- package/examples/agent-consumer/asset-consistency/assets/hero-atlas.png +0 -0
- package/examples/agent-consumer/asset-consistency/assets/hero-frame-00.png +0 -0
- package/examples/agent-consumer/asset-consistency/assets/hero-frame-01.png +0 -0
- package/examples/agent-consumer/asset-consistency/assets/hero-frame-02.png +0 -0
- package/examples/agent-consumer/asset-consistency/assets/hero-frame-03.png +0 -0
- package/examples/agent-consumer/asset-consistency/forest-layered-map.json +53 -0
- package/examples/agent-consumer/asset-consistency/hero-atlas-contract.json +24 -0
- package/examples/agent-consumer/asset-consistency/hero-identity.json +51 -0
- package/examples/agent-consumer/asset-consistency/hero-walk-action-set.json +27 -0
- package/examples/agent-consumer/asset-consistency/hero-walk-frame-geometry.json +63 -0
- package/examples/agent-consumer/rig-compatibility/hero-walk-fixture-rig.json +13 -0
- package/examples/agent-consumer/rive-package-gate/README.md +20 -0
- package/examples/agent-consumer/runtime-candidate/hero-walk-candidate.json +18 -0
- package/examples/agent-consumer/runtime-pilot/action-set.json +19 -0
- package/examples/agent-consumer/runtime-pilot/asset-identity.json +44 -0
- package/examples/agent-consumer/runtime-pilot/candidate.json +21 -0
- package/examples/agent-consumer/runtime-pilot/controls.json +35 -0
- package/examples/agent-consumer/runtime-pilot/export.json +17 -0
- package/examples/agent-consumer/runtime-pilot/provenance.json +38 -0
- package/examples/agent-consumer/runtime-pilot/receipt.json +30 -0
- package/package.json +65 -4
- package/references/agent-interoperability.md +11 -0
- package/references/browser-review-contract.md +7 -1
- package/references/intelligence-core.md +29 -2
- package/rig-adapter-registry.json +39 -0
- package/schemas/action-set.schema.json +42 -0
- package/schemas/agent-surfaces.schema.json +1 -1
- package/schemas/artifact-adapter-registry.schema.json +16 -0
- package/schemas/asset-identity.schema.json +117 -0
- package/schemas/asset-provenance.schema.json +183 -0
- package/schemas/atlas-contract.schema.json +48 -0
- package/schemas/control-track.schema.json +18 -0
- package/schemas/export-manifest.schema.json +19 -0
- package/schemas/frame-geometry.schema.json +79 -0
- package/schemas/generation-receipt.schema.json +20 -0
- package/schemas/layered-map.schema.json +75 -0
- package/schemas/rig-adapter-registry.schema.json +14 -0
- package/schemas/rig-compatibility.schema.json +53 -0
- package/schemas/rive-package-manifest.schema.json +43 -0
- package/schemas/runtime-candidate.schema.json +48 -0
- package/schemas/scene-manifest.schema.json +19 -0
- package/scripts/artifact-intake.py +408 -0
- package/scripts/asset-consistency.py +517 -0
- package/scripts/asset-provenance.py +395 -0
- package/scripts/build-ai-pilot.py +504 -0
- package/scripts/docs-audit.py +14 -2
- package/scripts/isolate-alpha-background.py +147 -0
- package/scripts/pr.py +2 -0
- package/scripts/quality-gate.py +127 -3
- package/scripts/report.py +135 -0
- package/scripts/resolve-task-bundle.py +84 -0
- package/scripts/review-hook.py +26 -4
- package/scripts/rig-compatibility.py +251 -0
- package/scripts/rive-package-gate.py +245 -0
- package/scripts/runtime-candidate.py +301 -0
- package/scripts/setup.mjs +500 -0
- package/scripts/skill-doctor.py +2 -1
- package/src/output/browser-review-smoke/asset-provenance.json +77 -0
- package/src/output/browser-review-smoke/manifest.json +1 -0
- package/src/output/browser-review-smoke/visual-truth.json +3 -3
- package/src/output/runtime-pilot-framer/asset-provenance.json +38 -0
- package/src/output/runtime-pilot-framer/browser-review.json +20 -0
- package/src/output/runtime-pilot-framer/framer-motion/runtime-telemetry.json +103 -0
- package/src/output/runtime-pilot-framer/manifest.json +31 -0
- package/src/output/runtime-pilot-framer/motion-spec.json +25 -0
- package/src/output/runtime-pilot-framer/runtime-evidence.json +96 -0
- package/src/output/runtime-pilot-framer/runtime-telemetry.json +100 -0
- package/src/output/runtime-pilot-framer/scene.jsx +52 -0
- package/src/output/runtime-pilot-framer/snapshot/.render-meta.json +9 -0
- package/src/output/runtime-pilot-framer/snapshot/frame-00.png +0 -0
- package/src/output/runtime-pilot-framer/snapshot/frame-100.png +0 -0
- package/src/output/runtime-pilot-framer/snapshot/frame-50.png +0 -0
- package/tests/scripts/run_tests.py +131 -0
- package/tests/scripts/test_ai_pilot_builder.py +128 -0
- package/tests/scripts/test_alpha_isolation.py +60 -0
- package/tests/scripts/test_artifact_intake.py +146 -0
- package/tests/scripts/test_asset_consistency.py +199 -0
- package/tests/scripts/test_rig_compatibility.py +105 -0
- package/tests/scripts/test_rive_package_gate.py +101 -0
- package/tests/scripts/test_runtime_candidate.py +95 -0
package/bin/motionloom.mjs
CHANGED
|
@@ -37,16 +37,35 @@ const PYTHON_COMMANDS = {
|
|
|
37
37
|
discovery: "scripts/discovery.py",
|
|
38
38
|
"visual-truth": "scripts/visual-truth.py",
|
|
39
39
|
"remediation-learning": "scripts/remediation-learning.py",
|
|
40
|
+
"asset-provenance": "scripts/asset-provenance.py",
|
|
41
|
+
"asset-consistency": "scripts/asset-consistency.py",
|
|
42
|
+
"artifact-intake": "scripts/artifact-intake.py",
|
|
43
|
+
"runtime-candidate": "scripts/runtime-candidate.py",
|
|
44
|
+
"rig-compatibility": "scripts/rig-compatibility.py",
|
|
45
|
+
"rive-package-gate": "scripts/rive-package-gate.py",
|
|
46
|
+
"pilot-build": "scripts/build-ai-pilot.py",
|
|
47
|
+
"alpha-isolate": "scripts/isolate-alpha-background.py",
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
const NODE_COMMANDS = {
|
|
51
|
+
init: "scripts/setup.mjs",
|
|
52
|
+
setup: "scripts/setup.mjs",
|
|
53
|
+
status: "scripts/setup.mjs",
|
|
54
|
+
repair: "scripts/setup.mjs",
|
|
40
55
|
};
|
|
41
56
|
|
|
42
57
|
function printHelp() {
|
|
43
|
-
console.log(`MotionLoom 2.
|
|
58
|
+
console.log(`MotionLoom 2.4.0 — project-aware animation production and evidence contracts
|
|
44
59
|
|
|
45
60
|
Usage:
|
|
46
61
|
motionloom <command> [args...]
|
|
47
62
|
|
|
48
|
-
|
|
63
|
+
Start here:
|
|
64
|
+
init One safe project setup; no animation gate runs
|
|
65
|
+
status Short read-only readiness report
|
|
49
66
|
doctor Validate the installed Skill package
|
|
67
|
+
|
|
68
|
+
Use when an animation task needs it:
|
|
50
69
|
analyze Run project analysis and refresh Project Memory
|
|
51
70
|
memory Initialize, inspect, refresh, recover or validate memory
|
|
52
71
|
intelligence Build or validate Intelligence Core artifacts
|
|
@@ -65,6 +84,16 @@ Commands:
|
|
|
65
84
|
discovery Check Agent surfaces, source identity and install matrix
|
|
66
85
|
visual-truth Build or validate provenance-bound visual comparisons
|
|
67
86
|
remediation-learning Record or summarize user-confirmed remediation and benchmark history
|
|
87
|
+
asset-provenance Validate, classify or report asset origin and production readiness
|
|
88
|
+
asset-consistency Validate frame geometry, atlas contamination and layered-map contracts
|
|
89
|
+
artifact-intake Bind generation controls, provenance, adapter metadata and exported bytes
|
|
90
|
+
runtime-candidate Bind intake exports to consistency contracts before runtime testing
|
|
91
|
+
rig-compatibility Validate rig bones, sockets, actions, events and runtime adapter evidence
|
|
92
|
+
rive-package-gate Verify a real .riv package, runtime proof and provenance before testing
|
|
93
|
+
pilot-build Build a review-only hash-bound AI scout pilot from true-alpha PNG sources
|
|
94
|
+
alpha-isolate Isolate an edge-connected flat background; block residual edge contamination
|
|
95
|
+
setup Alias for init (kept for compatibility)
|
|
96
|
+
repair Re-apply safe missing setup pieces
|
|
68
97
|
|
|
69
98
|
Cross-platform examples:
|
|
70
99
|
motionloom analyze . --init-memory
|
|
@@ -76,6 +105,13 @@ Cross-platform examples:
|
|
|
76
105
|
motionloom discovery install-matrix --root . --json
|
|
77
106
|
motionloom visual-truth validate --root . --input src/output/<scene>/visual-truth.json
|
|
78
107
|
motionloom remediation-learning summary --history artifacts/remediation-history.jsonl --json
|
|
108
|
+
motionloom asset-provenance check --input <asset-provenance.json> --root <scene-dir> --mode runtime --json
|
|
109
|
+
motionloom asset-consistency validate --kind frame-geometry --input <frame-geometry.json> --root <scene-dir> --json
|
|
110
|
+
motionloom artifact-intake intake --root <asset-dir> --registry artifact-adapter-registry.json \\
|
|
111
|
+
--receipt <generation-receipt.json> --controls <control-track.json> --export-manifest <export-manifest.json> --json
|
|
112
|
+
motionloom alpha-isolate <opaque.png> <isolated.png> --report <alpha-report.json>
|
|
113
|
+
motionloom rive-package-gate validate --root <package-dir> --registry rig-adapter-registry.json \\
|
|
114
|
+
--input <rive-package-manifest.json> --strict --json
|
|
79
115
|
|
|
80
116
|
The CLI never grants approval or opens a pull request by itself. User review
|
|
81
117
|
and explicit repository side-effect confirmation remain separate gates.
|
|
@@ -88,7 +124,7 @@ if (!command || command === "help" || command === "--help" || command === "-h")
|
|
|
88
124
|
process.exit(0);
|
|
89
125
|
}
|
|
90
126
|
|
|
91
|
-
const script = PYTHON_COMMANDS[command];
|
|
127
|
+
const script = NODE_COMMANDS[command] || PYTHON_COMMANDS[command];
|
|
92
128
|
if (!script) {
|
|
93
129
|
console.error(`Unknown MotionLoom command: ${command}`);
|
|
94
130
|
printHelp();
|
|
@@ -96,7 +132,8 @@ if (!script) {
|
|
|
96
132
|
}
|
|
97
133
|
|
|
98
134
|
const executable = script.endsWith(".mjs") ? process.execPath : PYTHON;
|
|
99
|
-
const
|
|
135
|
+
const delegatedArgs = NODE_COMMANDS[command] && !["setup", "init"].includes(command) ? [command, ...args] : command === "init" ? ["init", ...args] : args;
|
|
136
|
+
const result = spawnSync(executable, [resolve(ROOT, script), ...delegatedArgs], {
|
|
100
137
|
cwd: ROOT,
|
|
101
138
|
stdio: "inherit",
|
|
102
139
|
env: process.env,
|
|
@@ -6,11 +6,12 @@ MotionLoom is distributed as one Skill with several **discovery surfaces**, not
|
|
|
6
6
|
|
|
7
7
|
| Source | Typical command | Verification | Provenance to retain |
|
|
8
8
|
|---|---|---|---|
|
|
9
|
+
| One-command onboarding | `npx --yes motionloom setup` | `npx --no-install motionloom status --json` | project lockfile, setup JSON and generated project identity |
|
|
9
10
|
| npm registry | `npm install --save-dev motionloom` | `motionloom discovery check --root . --json` | lockfile and resolved package version |
|
|
10
11
|
| Git checkout | `git clone https://github.com/lenhonbp/MotionLoom.git` | `node bin/motionloom.mjs discovery check --root . --json` | remote URL and commit SHA |
|
|
11
12
|
| Local source | invoke `<checkout>/bin/motionloom.mjs` | `python3 scripts/discovery.py check --root . --json` | source path and local commit if present |
|
|
12
13
|
|
|
13
|
-
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.
|
|
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.
|
|
14
15
|
|
|
15
16
|
## Agent surfaces
|
|
16
17
|
|
|
@@ -36,7 +37,19 @@ Support here means that the repository exposes a deterministic discovery contrac
|
|
|
36
37
|
|
|
37
38
|
## Required first-run sequence
|
|
38
39
|
|
|
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.
|
|
40
53
|
|
|
41
54
|
## Portability policy
|
|
42
55
|
|
package/docs/CHECKLIST.md
CHANGED
|
@@ -24,9 +24,30 @@ A scene is only ready for the confirm-into-PR step when every item below passes.
|
|
|
24
24
|
## Source traceability
|
|
25
25
|
- [ ] Every geometric asset references an authoritative source (`assets/library/` or the host project) — flagged if invented.
|
|
26
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.
|
|
30
|
+
|
|
31
|
+
## Asset consistency
|
|
32
|
+
- [ ] Multi-frame actions declare an `identity` and `action-set` contract when the asset has shared character/style identity or loop/event requirements.
|
|
33
|
+
- [ ] `frame-geometry` measures the real PNG bytes: canvas size, alpha bounds, frame SHA-256, pivot/footline drift and opaque pixels outside each frame rect.
|
|
34
|
+
- [ ] Sprite atlases declare non-overlapping regions, explicit rotation policy and transparent pixels outside regions; contamination is blocking in strict runs.
|
|
35
|
+
- [ ] Layered maps declare unique layer IDs/z-order, intentional parallax order, tile seam policy, layer/world bounds and camera-safe bounds.
|
|
36
|
+
- [ ] Consistency output is stored with the task evidence and remains separate from provenance authority, production eligibility and user approval.
|
|
37
|
+
|
|
38
|
+
## Provider-neutral intake and runtime candidate
|
|
39
|
+
- [ ] Every Agent/internal-skill/provider output used by the scene has a hash-bound generation receipt, control track and export manifest; no receipt stores secrets or self-asserts approval.
|
|
40
|
+
- [ ] The selected artifact adapter is declared in `artifact-adapter-registry.json`; `scaffold` or `static-validated` status is not presented as runtime verification or production eligibility.
|
|
41
|
+
- [ ] `runtime-candidate.json` binds the intake bundle to the matching asset identity, action-set and frame geometry/atlas/map contracts; mismatched refs or hashes block the candidate.
|
|
42
|
+
- [ ] A rigmed or motion-capture candidate declares skeleton, sockets, action/event coverage, export target and adapter evidence in `rig-compatibility.json`.
|
|
43
|
+
- [ ] Artifact Intake, runtime candidate and rig findings are present in the task handoff/Dev Lab rail and visibly retain `review_required` until the user records a decision.
|
|
27
44
|
|
|
28
45
|
## PR readiness
|
|
29
46
|
- [ ] Snapshot PNGs exist for 0/50/100%.
|
|
30
47
|
- [ ] `visual-truth.json` binds real baseline/candidate frames to source, manifest and available runtime/Motion IR hashes; `approval` remains `false`.
|
|
31
48
|
- [ ] `motion-spec.json` is bound to the exact `project-context.json` hash (implements == planned).
|
|
32
49
|
- [ ] Dev Lab URL tested on mobile viewport and desktop.
|
|
50
|
+
- [ ] The production provenance check passes with `--mode production` and reports `production_eligible: true`.
|
|
51
|
+
- [ ] If `manifest.json` declares `consistency_ref`, `quality-gate.py --require-asset-consistency` passes for its declared `consistency_kind`.
|
|
52
|
+
- [ ] If `manifest.json` declares an Artifact Intake bundle, `quality-gate.py --require-artifact-intake` passes and the selected adapter/runtime evidence meets the requested mode.
|
|
53
|
+
- [ ] `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.4.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, a truthful code-authored runtime lane 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.4.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.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schema_version": "1.0",
|
|
3
3
|
"audit": "motionloom-deep-stress",
|
|
4
|
-
"generated_at": "2026-08-
|
|
4
|
+
"generated_at": "2026-08-14T18:59:00.435638Z",
|
|
5
5
|
"seed": 20260813,
|
|
6
6
|
"requested_iterations": 5000,
|
|
7
7
|
"actual_iterations": 6900,
|
|
@@ -29,9 +29,9 @@
|
|
|
29
29
|
"codes": {
|
|
30
30
|
"equal": 600
|
|
31
31
|
},
|
|
32
|
-
"p50_ms": 0.
|
|
33
|
-
"p95_ms": 0.
|
|
34
|
-
"max_ms": 0.
|
|
32
|
+
"p50_ms": 0.01868,
|
|
33
|
+
"p95_ms": 0.022651,
|
|
34
|
+
"max_ms": 0.041323,
|
|
35
35
|
"pass_rate": 1.0
|
|
36
36
|
},
|
|
37
37
|
"dsse-ed25519-roundtrip": {
|
|
@@ -43,9 +43,9 @@
|
|
|
43
43
|
"codes": {
|
|
44
44
|
"verified": 250
|
|
45
45
|
},
|
|
46
|
-
"p50_ms": 0.
|
|
47
|
-
"p95_ms": 0.
|
|
48
|
-
"max_ms": 0.
|
|
46
|
+
"p50_ms": 0.129434,
|
|
47
|
+
"p95_ms": 0.145666,
|
|
48
|
+
"max_ms": 0.186531,
|
|
49
49
|
"pass_rate": 1.0
|
|
50
50
|
},
|
|
51
51
|
"dsse-ed25519-tamper": {
|
|
@@ -57,9 +57,9 @@
|
|
|
57
57
|
"codes": {
|
|
58
58
|
"invalid-signature": 250
|
|
59
59
|
},
|
|
60
|
-
"p50_ms": 0.
|
|
61
|
-
"p95_ms": 0.
|
|
62
|
-
"max_ms": 0.
|
|
60
|
+
"p50_ms": 0.131737,
|
|
61
|
+
"p95_ms": 0.155588,
|
|
62
|
+
"max_ms": 0.218171,
|
|
63
63
|
"pass_rate": 1.0
|
|
64
64
|
},
|
|
65
65
|
"statement-contract": {
|
|
@@ -72,9 +72,9 @@
|
|
|
72
72
|
"valid": 200,
|
|
73
73
|
"rejected": 400
|
|
74
74
|
},
|
|
75
|
-
"p50_ms": 0.
|
|
76
|
-
"p95_ms": 0.
|
|
77
|
-
"max_ms": 0.
|
|
75
|
+
"p50_ms": 0.007154,
|
|
76
|
+
"p95_ms": 0.008546,
|
|
77
|
+
"max_ms": 0.06488,
|
|
78
78
|
"pass_rate": 1.0
|
|
79
79
|
},
|
|
80
80
|
"attestation-verifier-boundary": {
|
|
@@ -89,9 +89,9 @@
|
|
|
89
89
|
"14": 375,
|
|
90
90
|
"13": 375
|
|
91
91
|
},
|
|
92
|
-
"p50_ms": 0.
|
|
93
|
-
"p95_ms": 0.
|
|
94
|
-
"max_ms": 0.
|
|
92
|
+
"p50_ms": 0.297953,
|
|
93
|
+
"p95_ms": 0.485624,
|
|
94
|
+
"max_ms": 0.742145,
|
|
95
95
|
"pass_rate": 1.0
|
|
96
96
|
},
|
|
97
97
|
"strict-quality-gate-clean": {
|
|
@@ -103,9 +103,9 @@
|
|
|
103
103
|
"codes": {
|
|
104
104
|
"accepted": 400
|
|
105
105
|
},
|
|
106
|
-
"p50_ms": 25.
|
|
107
|
-
"p95_ms":
|
|
108
|
-
"max_ms":
|
|
106
|
+
"p50_ms": 25.03624,
|
|
107
|
+
"p95_ms": 26.647454,
|
|
108
|
+
"max_ms": 36.626597,
|
|
109
109
|
"pass_rate": 1.0
|
|
110
110
|
},
|
|
111
111
|
"intelligence-p1-clean": {
|
|
@@ -117,9 +117,9 @@
|
|
|
117
117
|
"codes": {
|
|
118
118
|
"accepted": 400
|
|
119
119
|
},
|
|
120
|
-
"p50_ms":
|
|
121
|
-
"p95_ms":
|
|
122
|
-
"max_ms":
|
|
120
|
+
"p50_ms": 18.137953,
|
|
121
|
+
"p95_ms": 18.818408,
|
|
122
|
+
"max_ms": 22.29844,
|
|
123
123
|
"pass_rate": 1.0
|
|
124
124
|
},
|
|
125
125
|
"replay-hash-clean": {
|
|
@@ -131,9 +131,9 @@
|
|
|
131
131
|
"codes": {
|
|
132
132
|
"clean": 475
|
|
133
133
|
},
|
|
134
|
-
"p50_ms":
|
|
135
|
-
"p95_ms":
|
|
136
|
-
"max_ms":
|
|
134
|
+
"p50_ms": 8.196194,
|
|
135
|
+
"p95_ms": 8.346516,
|
|
136
|
+
"max_ms": 9.307598,
|
|
137
137
|
"pass_rate": 1.0
|
|
138
138
|
},
|
|
139
139
|
"semantic-lint-clean": {
|
|
@@ -145,9 +145,9 @@
|
|
|
145
145
|
"codes": {
|
|
146
146
|
"clean": 475
|
|
147
147
|
},
|
|
148
|
-
"p50_ms": 0.
|
|
149
|
-
"p95_ms": 0.
|
|
150
|
-
"max_ms": 0.
|
|
148
|
+
"p50_ms": 0.02188,
|
|
149
|
+
"p95_ms": 0.025799,
|
|
150
|
+
"max_ms": 0.048701,
|
|
151
151
|
"pass_rate": 1.0
|
|
152
152
|
},
|
|
153
153
|
"continuity-clean": {
|
|
@@ -159,9 +159,9 @@
|
|
|
159
159
|
"codes": {
|
|
160
160
|
"clean": 475
|
|
161
161
|
},
|
|
162
|
-
"p50_ms": 0.
|
|
163
|
-
"p95_ms": 0.
|
|
164
|
-
"max_ms": 0.
|
|
162
|
+
"p50_ms": 0.023042,
|
|
163
|
+
"p95_ms": 0.026202,
|
|
164
|
+
"max_ms": 0.045252,
|
|
165
165
|
"pass_rate": 1.0
|
|
166
166
|
},
|
|
167
167
|
"approval-invariant": {
|
|
@@ -173,9 +173,9 @@
|
|
|
173
173
|
"codes": {
|
|
174
174
|
"approval=false": 475
|
|
175
175
|
},
|
|
176
|
-
"p50_ms": 0.
|
|
177
|
-
"p95_ms": 0.
|
|
178
|
-
"max_ms": 0.
|
|
176
|
+
"p50_ms": 0.056737,
|
|
177
|
+
"p95_ms": 0.067291,
|
|
178
|
+
"max_ms": 0.099394,
|
|
179
179
|
"pass_rate": 1.0
|
|
180
180
|
},
|
|
181
181
|
"fault-graph-task-id": {
|
|
@@ -187,9 +187,9 @@
|
|
|
187
187
|
"codes": {
|
|
188
188
|
"rejected": 100
|
|
189
189
|
},
|
|
190
|
-
"p50_ms":
|
|
191
|
-
"p95_ms":
|
|
192
|
-
"max_ms":
|
|
190
|
+
"p50_ms": 14.317844,
|
|
191
|
+
"p95_ms": 14.713064,
|
|
192
|
+
"max_ms": 15.184861,
|
|
193
193
|
"pass_rate": 1.0
|
|
194
194
|
},
|
|
195
195
|
"fault-motion-ir-scene": {
|
|
@@ -201,9 +201,9 @@
|
|
|
201
201
|
"codes": {
|
|
202
202
|
"rejected": 100
|
|
203
203
|
},
|
|
204
|
-
"p50_ms": 2.
|
|
205
|
-
"p95_ms": 2.
|
|
206
|
-
"max_ms": 2.
|
|
204
|
+
"p50_ms": 2.077654,
|
|
205
|
+
"p95_ms": 2.140575,
|
|
206
|
+
"max_ms": 2.284035,
|
|
207
207
|
"pass_rate": 1.0
|
|
208
208
|
},
|
|
209
209
|
"fault-provenance-task-id": {
|
|
@@ -215,9 +215,9 @@
|
|
|
215
215
|
"codes": {
|
|
216
216
|
"rejected": 100
|
|
217
217
|
},
|
|
218
|
-
"p50_ms": 0.
|
|
219
|
-
"p95_ms":
|
|
220
|
-
"max_ms":
|
|
218
|
+
"p50_ms": 0.849407,
|
|
219
|
+
"p95_ms": 0.886464,
|
|
220
|
+
"max_ms": 0.94938,
|
|
221
221
|
"pass_rate": 1.0
|
|
222
222
|
},
|
|
223
223
|
"fault-replay-path-escape": {
|
|
@@ -229,9 +229,9 @@
|
|
|
229
229
|
"codes": {
|
|
230
230
|
"rejected": 100
|
|
231
231
|
},
|
|
232
|
-
"p50_ms": 8.
|
|
233
|
-
"p95_ms":
|
|
234
|
-
"max_ms":
|
|
232
|
+
"p50_ms": 8.246496,
|
|
233
|
+
"p95_ms": 8.347693,
|
|
234
|
+
"max_ms": 9.112055,
|
|
235
235
|
"pass_rate": 1.0
|
|
236
236
|
},
|
|
237
237
|
"fault-p1-fix-plan-hash": {
|
|
@@ -243,9 +243,9 @@
|
|
|
243
243
|
"codes": {
|
|
244
244
|
"rejected": 100
|
|
245
245
|
},
|
|
246
|
-
"p50_ms": 0.
|
|
247
|
-
"p95_ms": 0.
|
|
248
|
-
"max_ms":
|
|
246
|
+
"p50_ms": 0.735113,
|
|
247
|
+
"p95_ms": 0.772903,
|
|
248
|
+
"max_ms": 0.896587,
|
|
249
249
|
"pass_rate": 1.0
|
|
250
250
|
},
|
|
251
251
|
"fault-p1-wrong-scene": {
|
|
@@ -257,9 +257,9 @@
|
|
|
257
257
|
"codes": {
|
|
258
258
|
"rejected": 100
|
|
259
259
|
},
|
|
260
|
-
"p50_ms": 0.
|
|
261
|
-
"p95_ms": 0.
|
|
262
|
-
"max_ms":
|
|
260
|
+
"p50_ms": 0.709162,
|
|
261
|
+
"p95_ms": 0.732217,
|
|
262
|
+
"max_ms": 0.772478,
|
|
263
263
|
"pass_rate": 1.0
|
|
264
264
|
},
|
|
265
265
|
"fault-continuity-structure": {
|
|
@@ -271,9 +271,9 @@
|
|
|
271
271
|
"codes": {
|
|
272
272
|
"rejected": 100
|
|
273
273
|
},
|
|
274
|
-
"p50_ms": 0.
|
|
275
|
-
"p95_ms": 0.
|
|
276
|
-
"max_ms": 0.
|
|
274
|
+
"p50_ms": 0.098924,
|
|
275
|
+
"p95_ms": 0.10896,
|
|
276
|
+
"max_ms": 0.126946,
|
|
277
277
|
"pass_rate": 1.0
|
|
278
278
|
},
|
|
279
279
|
"fault-semantic-structure": {
|
|
@@ -285,9 +285,9 @@
|
|
|
285
285
|
"codes": {
|
|
286
286
|
"rejected": 100
|
|
287
287
|
},
|
|
288
|
-
"p50_ms": 0.
|
|
289
|
-
"p95_ms": 0.
|
|
290
|
-
"max_ms": 0.
|
|
288
|
+
"p50_ms": 0.094954,
|
|
289
|
+
"p95_ms": 0.102869,
|
|
290
|
+
"max_ms": 0.109556,
|
|
291
291
|
"pass_rate": 1.0
|
|
292
292
|
},
|
|
293
293
|
"fault-attestation-approval": {
|
|
@@ -299,9 +299,9 @@
|
|
|
299
299
|
"codes": {
|
|
300
300
|
"10": 100
|
|
301
301
|
},
|
|
302
|
-
"p50_ms": 0.
|
|
303
|
-
"p95_ms": 0.
|
|
304
|
-
"max_ms": 0.
|
|
302
|
+
"p50_ms": 0.224069,
|
|
303
|
+
"p95_ms": 0.2494,
|
|
304
|
+
"max_ms": 0.264081,
|
|
305
305
|
"pass_rate": 1.0
|
|
306
306
|
},
|
|
307
307
|
"fault-attestation-payload": {
|
|
@@ -313,9 +313,9 @@
|
|
|
313
313
|
"codes": {
|
|
314
314
|
"11": 100
|
|
315
315
|
},
|
|
316
|
-
"p50_ms": 0.
|
|
317
|
-
"p95_ms": 0.
|
|
318
|
-
"max_ms": 0.
|
|
316
|
+
"p50_ms": 0.283996,
|
|
317
|
+
"p95_ms": 0.310437,
|
|
318
|
+
"max_ms": 0.370236,
|
|
319
319
|
"pass_rate": 1.0
|
|
320
320
|
}
|
|
321
321
|
},
|
|
@@ -325,5 +325,5 @@
|
|
|
325
325
|
"false_positive": "A clean canonical case was rejected.",
|
|
326
326
|
"false_negative": "A controlled tamper, binding, revocation or invalid-contract case was accepted."
|
|
327
327
|
},
|
|
328
|
-
"wall_time_s": 25.
|
|
328
|
+
"wall_time_s": 25.466197
|
|
329
329
|
}
|
|
@@ -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.
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# MotionLoom 2.4.0
|
|
2
|
+
|
|
3
|
+
## Summary
|
|
4
|
+
|
|
5
|
+
MotionLoom 2.4.0 adds a **runtime-first, code-authored** path for agents that need to prove animation behavior without misclassifying a code scene as an artist-authored or AI-generated visual asset. The reference Framer Motion pilot moves through Artifact Intake, runtime rendering, integrity verification and identity-bound Dev Lab review while maintaining the existing human-governed release boundary.
|
|
6
|
+
|
|
7
|
+
## Added
|
|
8
|
+
|
|
9
|
+
### Truthful runtime-first provenance
|
|
10
|
+
|
|
11
|
+
The Artifact Intake and provenance surfaces now recognize `code_authored` runtime scenes explicitly. Source code, controls, export data and provenance are hash-bound, but this evidence only permits runtime review. It never grants `artist_authored`, `production_eligible`, `production_approved` or PR authorization.
|
|
12
|
+
|
|
13
|
+
### Framer Motion end-to-end reference candidate
|
|
14
|
+
|
|
15
|
+
The repository includes `runtime-pilot-framer`, a code-authored Framer Motion scene rendered by the production adapter at 0%, 50% and 100%. The candidate includes runtime telemetry, an evidence-verifier report, a local-only attestation with `approval: false`, and an identity-bound review handoff for the MotionLoom Dev Lab.
|
|
16
|
+
|
|
17
|
+
### Identity-bound Quality task resolution
|
|
18
|
+
|
|
19
|
+
Quality CI resolves the task bundle by the scene declared in `task.json`, instead of requiring a historical `artifacts/<scene>-task` naming convention. The resolver fails closed for absent, ambiguous or mismatched bindings, and its regression coverage includes a task ID that intentionally differs from the scene slug.
|
|
20
|
+
|
|
21
|
+
## Fixed
|
|
22
|
+
|
|
23
|
+
The Quality workflow no longer fails during runtime telemetry capture for a correctly bound task bundle whose directory name differs from its scene name. All task-aware steps now consume the resolver map rather than reconstructing task paths independently.
|
|
24
|
+
|
|
25
|
+
## Verified behavior
|
|
26
|
+
|
|
27
|
+
Before publication, the target is validated with the full regression harness, `doctor`, documentation audit, Skill validation, package dry-run, diff hygiene and the GitHub Quality, Documentation & Package Hygiene, Security Analysis and Dev Lab Build workflows.
|
|
28
|
+
|
|
29
|
+
## Trust boundary
|
|
30
|
+
|
|
31
|
+
The code-authored lane is **runtime-ready, not production-ready**. Runtime evidence, signature verification, task binding and Dev Lab staging do not replace human visual review. The default remains local-only: MotionLoom does not commit, push, open a pull request, tag a release or publish to npm without the relevant explicit user or maintainer action.
|
|
@@ -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.4.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
|
|
|
@@ -25,7 +25,7 @@ git pull --ff-only origin main
|
|
|
25
25
|
git log -1 --oneline
|
|
26
26
|
```
|
|
27
27
|
|
|
28
|
-
The latest commit must be the npm packaging release announced in the task. Do not publish from an older checkout or from a different fork.
|
|
28
|
+
The latest commit must be the npm packaging release announced in the task. Do not publish from an older checkout or from a different fork. This repository declares `pnpm` as its package manager and intentionally does not ship a `package-lock.json`; do **not** run `npm ci` in the repository. The release verifier and package dry-run do not require a dependency install. If a full workspace install is needed, use the declared package manager with `pnpm install --frozen-lockfile`.
|
|
29
29
|
|
|
30
30
|
## 3. Authenticate npm locally
|
|
31
31
|
|
|
@@ -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.4.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,17 @@ 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
|
-
|
|
61
|
+
Do not add `--provenance` unless the local npm client and its CI/provider integration explicitly support automatic npm provenance. Some workstation setups report `Automatic provenance generation not supported for provider: null`; in that case the package itself is still valid, and the supported fallback for this release is the command above without `--provenance`. Never retry by changing the version or by bypassing the package verification steps.
|
|
62
|
+
|
|
63
|
+
The version `2.4.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
64
|
|
|
63
65
|
## 6. Verify the registry publication
|
|
64
66
|
|
|
65
|
-
Run the following commands and confirm that they return `2.
|
|
67
|
+
Run the following commands and confirm that they return `2.4.0` and a tarball URL:
|
|
66
68
|
|
|
67
69
|
```bash
|
|
68
70
|
npm view motionloom version --registry=https://registry.npmjs.org/
|
|
69
|
-
npm view motionloom@2.
|
|
71
|
+
npm view motionloom@2.4.0 name version license dist.tarball dist.shasum --json \
|
|
70
72
|
--registry=https://registry.npmjs.org/
|
|
71
73
|
```
|
|
72
74
|
|
|
@@ -76,7 +78,7 @@ Then test installation in a clean temporary directory:
|
|
|
76
78
|
TMP_DIR="$(mktemp -d)"
|
|
77
79
|
cd "$TMP_DIR"
|
|
78
80
|
npm init --yes
|
|
79
|
-
npm install motionloom@2.
|
|
81
|
+
npm install motionloom@2.4.0
|
|
80
82
|
motionloom --help
|
|
81
83
|
motionloom doctor
|
|
82
84
|
```
|
|
@@ -85,4 +87,13 @@ The CLI should print the MotionLoom command surface. `motionloom doctor` should
|
|
|
85
87
|
|
|
86
88
|
## Troubleshooting
|
|
87
89
|
|
|
88
|
-
If `npm whoami` returns `ENEEDAUTH`, repeat `npm login` on the same computer and registry. If
|
|
90
|
+
If `npm whoami` returns `ENEEDAUTH`, repeat `npm login` on the same computer and registry. If `npm ci` reports that no `package-lock.json` exists, skip it and use the release verifier directly; this repository is pnpm-managed. If `npm publish --provenance` reports that the provider is `null` or unsupported, retry `npm publish --access public` without that flag. If publishing returns `E404` on the `PUT` request, do not change the package name or version yet. First run these read-only checks against the public registry:
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
npm config get registry
|
|
94
|
+
npm whoami --registry=https://registry.npmjs.org/
|
|
95
|
+
npm view motionloom name version maintainers --json --registry=https://registry.npmjs.org/
|
|
96
|
+
npm access list collaborators motionloom --json --registry=https://registry.npmjs.org/
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
The `npm whoami` result must be the intended publisher, and the collaborators result must show that account with publish-capable access. A mismatch usually means the workstation is authenticated as a different npm user, is using a stale token, or the package is owned by another account or team. Re-authenticate only on the workstation with `npm logout` followed by `npm login --registry=https://registry.npmjs.org/`; never paste the token into chat. If the account is correct but publish access is absent, the package owner must grant the account read-write access or publish from the owner account. If publishing returns `E403`, check package ownership, organization publish permission and 2FA policy; do not disable security controls. If the package name is already claimed by an account you do not control, stop and do not rename this release without an explicit release decision. Never place an npm token in `package.json`, `.npmrc` committed to Git, shell history or chat.
|