motionloom 2.0.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 (112) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +179 -0
  3. package/SKILL.md +122 -0
  4. package/agent-card.json +161 -0
  5. package/assets/library/ATTRIBUTION.md +6 -0
  6. package/assets/library/README.md +20 -0
  7. package/assets/library/avatar-base.svg +19 -0
  8. package/assets/library/error-alert.json +1 -0
  9. package/assets/library/rive/ATTRIBUTION.md +12 -0
  10. package/assets/library/rive/state-machine-test.riv +0 -0
  11. package/assets/library/success-check.json +1 -0
  12. package/bin/motionloom.mjs +81 -0
  13. package/docs/BROWSER-REVIEW-E2E.md +78 -0
  14. package/docs/CATEGORIES.md +16 -0
  15. package/docs/CHECKLIST.md +31 -0
  16. package/docs/DEEP-AUDIT-WORKING-NOTES.md +22 -0
  17. package/docs/FRAMEWORK-SELECTION.md +26 -0
  18. package/docs/PROJECT-MANIFEST.md +37 -0
  19. package/docs/ROADMAP-INTELLIGENCE.md +224 -0
  20. package/docs/audits/1.10.0-attestation-research-notes.md +19 -0
  21. package/docs/audits/1.8.0-trust-boundary-hardening.md +56 -0
  22. package/docs/audits/1.9.0-evidence-interoperability-threat-model.md +37 -0
  23. package/docs/audits/2.0.0-attestation-acceptance.md +30 -0
  24. package/docs/releases/1.5.0.md +25 -0
  25. package/docs/releases/1.6.0.md +27 -0
  26. package/docs/releases/1.7.0.md +23 -0
  27. package/docs/releases/1.8.0.md +23 -0
  28. package/docs/releases/1.9.0.md +21 -0
  29. package/docs/releases/2.0.0.md +21 -0
  30. package/docs/releases/npm-publish-from-workstation.md +88 -0
  31. package/docs/research/AGENT-PROTOCOL-FINDINGS.md +43 -0
  32. package/examples/report-demo/REPORT.md +50 -0
  33. package/examples/report-demo/artifact-manifest.json +25 -0
  34. package/examples/report-demo/decision-log.jsonl +0 -0
  35. package/examples/report-demo/execution-report.json +70 -0
  36. package/examples/report-demo/handoff.json +22 -0
  37. package/examples/report-demo/issue-register.json +5 -0
  38. package/examples/report-demo/task.json +13 -0
  39. package/package.json +95 -0
  40. package/project-context.example.json +26 -0
  41. package/references/browser-review-contract.md +32 -0
  42. package/references/dotlottie-source-notes.md +21 -0
  43. package/references/intelligence-core.md +98 -0
  44. package/references/reporting-contract.md +38 -0
  45. package/references/runtime-capability.md +12 -0
  46. package/references/signed-attestation.md +31 -0
  47. package/schemas/artifact-manifest.schema.json +22 -0
  48. package/schemas/browser-review-candidate.schema.json +24 -0
  49. package/schemas/capability-registry.schema.json +61 -0
  50. package/schemas/continuity-report.schema.json +52 -0
  51. package/schemas/evidence-verifier-report.schema.json +35 -0
  52. package/schemas/execution-report.schema.json +35 -0
  53. package/schemas/fix-plan.schema.json +44 -0
  54. package/schemas/handoff.schema.json +19 -0
  55. package/schemas/motion-ir.schema.json +74 -0
  56. package/schemas/project-graph.schema.json +70 -0
  57. package/schemas/provenance.schema.json +76 -0
  58. package/schemas/runtime-evidence.schema.json +48 -0
  59. package/schemas/runtime-telemetry.schema.json +50 -0
  60. package/schemas/scene-manifest.schema.json +45 -0
  61. package/schemas/semantic-benchmark.schema.json +26 -0
  62. package/schemas/semantic-lint-report.schema.json +48 -0
  63. package/schemas/signed-attestation.schema.json +95 -0
  64. package/schemas/task.schema.json +39 -0
  65. package/schemas/trust-policy.schema.json +53 -0
  66. package/scripts/analyze.sh +13 -0
  67. package/scripts/attestation-keygen.py +63 -0
  68. package/scripts/attestation-verifier.py +178 -0
  69. package/scripts/attestation.py +288 -0
  70. package/scripts/capture-runtime-telemetry.sh +37 -0
  71. package/scripts/devlab.sh +77 -0
  72. package/scripts/eval-intelligence.py +377 -0
  73. package/scripts/evidence-verifier.py +222 -0
  74. package/scripts/fetch-library.sh +57 -0
  75. package/scripts/intelligence.py +1543 -0
  76. package/scripts/manifest.py +61 -0
  77. package/scripts/pr.sh +103 -0
  78. package/scripts/quality-gate.py +378 -0
  79. package/scripts/render-node.mjs +53 -0
  80. package/scripts/render.sh +37 -0
  81. package/scripts/report-contract.py +181 -0
  82. package/scripts/report.py +588 -0
  83. package/scripts/review-hook.py +199 -0
  84. package/scripts/runtime-adapters.mjs +187 -0
  85. package/scripts/skill-doctor.py +150 -0
  86. package/scripts/to-dotlottie.mjs +99 -0
  87. package/scripts/to-dotlottie.sh +25 -0
  88. package/scripts/validate-lottie.py +102 -0
  89. package/src/core/analyzer.py +226 -0
  90. package/src/core/snapshot.py +124 -0
  91. package/src/core/spec.py +240 -0
  92. package/src/output/browser-review-smoke/animation.json +57 -0
  93. package/src/output/browser-review-smoke/browser-review.json +21 -0
  94. package/src/output/browser-review-smoke/manifest.json +22 -0
  95. package/src/output/browser-review-smoke/motion-spec.json +28 -0
  96. package/src/output/browser-review-smoke/snapshot/.render-meta.json +10 -0
  97. package/src/output/browser-review-smoke/snapshot/frame-00.png +0 -0
  98. package/src/output/browser-review-smoke/snapshot/frame-100.png +0 -0
  99. package/src/output/browser-review-smoke/snapshot/frame-50.png +0 -0
  100. package/src/rig/README.md +35 -0
  101. package/src/rig/cutout_rig.py +211 -0
  102. package/templates/framer-motion/ui-micro.tsx +50 -0
  103. package/templates/gsap/scroll-scene.js +54 -0
  104. package/templates/lottie/README.md +21 -0
  105. package/templates/lottie/react-component.tsx +82 -0
  106. package/templates/lottie/scaffold/animation.json +57 -0
  107. package/templates/lottie/scaffold/character-rig.svg +19 -0
  108. package/templates/lottie/vanilla.js +68 -0
  109. package/templates/rive/README.md +36 -0
  110. package/tests/evals/intelligence-cases.json +131 -0
  111. package/tests/scripts/run_tests.py +843 -0
  112. package/tests/scripts/test_attestation.py +172 -0
@@ -0,0 +1,37 @@
1
+ # Evidence Interoperability and Runtime Observability — Threat Model
2
+
3
+ ## Scope
4
+
5
+ This phase adds a narrow, evidence-first slice to MotionLoom: runtime frame telemetry emitted by the existing browser harness and an independent verifier that can validate the evidence bundle without granting approval. The telemetry is an observation of a runtime execution, not a visual-quality score. The verifier is a read-only trust check, not a reviewer and not a PR action.
6
+
7
+ ## Trust zones
8
+
9
+ | Zone | Examples | Trust assumption |
10
+ | --- | --- | --- |
11
+ | Project source | `src/output/<scene>/`, source asset, `manifest.json`, `motion-spec.json` | Untrusted until hashes, source binding and schema contracts agree. |
12
+ | Task evidence | `artifacts/<task-id>/`, browser review, provenance, replay and handoff artifacts | Untrusted input; identity, expiry, path and hash binding must be rechecked. |
13
+ | Runtime observation | Browser harness, runtime evidence and telemetry samples | Measurements are observations from one run; they do not prove human approval or universal performance. |
14
+ | External verifier | `scripts/evidence-verifier.py` and its JSON report | Must be deterministic, read-only, fail closed and independent from builder-side approval state. |
15
+ | Remote side effects | Git push, PR creation, merge and confirm-to-PR | Out of scope for the verifier; remain behind explicit user approval and existing review gates. |
16
+
17
+ ## Threats and controls
18
+
19
+ | Threat | Risk | Required control |
20
+ | --- | --- | --- |
21
+ | Telemetry copied from another scene or task | A valid-looking runtime observation is attached to the wrong artifact | Bind task ID, scene, source hash, manifest hash and Motion IR hash; recompute all local hashes. |
22
+ | Symlink or `..` path escapes | Verifier reads attacker-controlled files outside the declared evidence root | Reject symlink components and require resolved paths to remain under the declared root. |
23
+ | Stale or replayed telemetry | Old evidence is presented as current after source or manifest changes | Verify generated time format, source/manifest/Motion IR hashes and optional freshness policy. |
24
+ | Tampered measurements | Frame metrics are edited after capture | Verify the telemetry file digest when a manifest/inventory binding exists; validate numeric bounds and sample shape. |
25
+ | Telemetry interpreted as approval | A performance observation silently bypasses review | Verifier reports `pass` or `fail` only for evidence integrity and sets `approval=false`; it never emits an approval decision. |
26
+ | Browser/runtime mismatch | Evidence from an incompatible adapter is treated as current | Require framework/runtime identity and preserve browser/OS/toolchain metadata in the report. |
27
+ | Verifier itself becomes a hidden gate bypass | Builder imports mutable project state or accepts missing evidence | Keep the verifier CLI read-only, use stable exit codes, require explicit paths and fail on missing required fields. |
28
+
29
+ ## Contract decisions
30
+
31
+ The first telemetry contract records scrub-point observations and frame-loop timing metadata that the current Playwright harness can measure. It does not claim to provide production fleet FPS, visual similarity, dropped-frame truth across all browsers or a perceptual quality score. Thresholds are policy inputs and must be declared by the caller; the verifier validates integrity and policy evaluation but does not invent approval.
32
+
33
+ The verifier consumes a scene directory and an optional task directory. It may produce a JSON report outside the evidence root, but it must never mutate the input bundle. A successful verification means that the declared evidence is internally consistent under the requested policy. It does not mean that a user approved the animation, that a PR may be opened, or that a remote write is authorized.
34
+
35
+ ## Definition of done for this phase
36
+
37
+ The phase is complete when the telemetry and verifier schemas are machine-checkable, the runtime harness emits telemetry for all verified adapters, the verifier rejects cross-task, stale, tampered and path-escaped evidence, regression/eval/CI invoke it with stable exit codes, and Dev Lab can display the observation without presenting it as approval.
@@ -0,0 +1,30 @@
1
+ # MotionLoom 2.0.0 Attestation Acceptance Audit
2
+
3
+ ## Scope
4
+
5
+ This audit covers the signed-attestation and trust-policy implementation added after the 1.9.0 runtime telemetry milestone. The target is a task-bound, externally verifiable integrity contract that cannot convert cryptographic success into user approval.
6
+
7
+ ## Contract decisions
8
+
9
+ The statement is canonical JSON and includes the task ID, scene, project-context hash, source hash, manifest hash, Motion IR hash, runtime evidence hashes, telemetry bundle hash, verifier report hash, provenance hash, policy version and builder identity. The envelope follows the DSSE payload separation model and signs the canonical payload with Ed25519. The trust policy declares key ID, algorithm, public key, validity, status, rotation limits and fail-closed revocation behavior.
10
+
11
+ The independent verifier checks envelope shape, payload SHA-256, canonical UTF-8 JSON, statement bindings, signature validity, key lookup, key lifecycle and expected task/scene identity. Its output is machine-readable and always sets `approval` to `false`. The report contract and quality gate only accept the attestation when the verifier returns success and its bindings match the selected task bundle.
12
+
13
+ ## Adversarial coverage
14
+
15
+ | Case | Expected behavior | Result |
16
+ | --- | --- | --- |
17
+ | Clean active signer | Verify with exit `0`; preserve `approval: false` | Pass |
18
+ | Payload tamper | Reject with exit `11` | Pass |
19
+ | Expected binding mismatch | Reject with exit `14` | Pass |
20
+ | Revoked signer | Reject with exit `13` | Pass |
21
+ | Unknown signer | Reject with exit `13` | Pass |
22
+ | Symlink/path escape | Reject before evidence is trusted | Pass through existing trust-boundary regression suite |
23
+
24
+ ## Acceptance evidence
25
+
26
+ The focused attestation contract test, the full regression harness, the 25-case Intelligence eval suite, strict report contract and strict quality gate all pass in the working tree. CI installs the pinned cryptography range from `requirements.txt` before running any attestation command.
27
+
28
+ ## Residual risks
29
+
30
+ The repository does not operate a remote key registry, secret manager, transparency log or automatic key rotation service. CI uses an ephemeral job-local key only to prove pipeline wiring; production operators must inject and govern real key material and publish the corresponding trust policy through an approved deployment channel. Visual comparison and benchmark history remain future roadmap work, and neither metric nor attestation can waive human review.
@@ -0,0 +1,25 @@
1
+ # MotionLoom 1.5.0 — Intelligence Core v0.1
2
+
3
+ ## Summary
4
+
5
+ MotionLoom 1.5.0 introduces the first deterministic intelligence layer for project-aware animation work. The release does not add another rendering framework. It makes the existing pipeline more explainable and harder to accept stale, foreign or tampered evidence.
6
+
7
+ ## Added
8
+
9
+ The release adds versioned JSON Schemas for project graph, step-level provenance, capability registry and framework-neutral Motion IR. The stdlib-only `scripts/intelligence.py` CLI builds and validates those contracts and captures/verifies a task-bound replay bundle.
10
+
11
+ Capability selection now checks status, evidence freshness, evidence file hashes, compatibility metadata and side-effect policy. A scaffold-only adapter cannot pass production selection. Strict quality gates can require the Intelligence Core artifacts with `--require-intelligence`.
12
+
13
+ The release also adds `scripts/eval-intelligence.py` and a seven-case adversarial corpus. CI runs this corpus alongside the existing regression suite, Skill Doctor and quality gate. Reporting and handoff documentation now treats graph, provenance, Motion IR and replay as first-class artifacts.
14
+
15
+ ## Safety correction
16
+
17
+ Replay capture excludes generated report and manifest files because lifecycle collection legitimately rewrites them. Runtime/source/spec/review and Intelligence Core artifacts remain hash-bound. This prevents a false stale-replay failure while preserving tamper detection for substantive evidence.
18
+
19
+ ## Not included
20
+
21
+ Semantic motion lint, fix-plan generation, recommendation learning and MCP transport remain future work. They require broader benchmark data and must not be implemented by converting heuristic confidence into an acceptance decision.
22
+
23
+ ## Verification
24
+
25
+ The release was verified with JSON contract parsing, Python compilation, shell syntax checks, Skill Doctor, the full regression suite, the seven-case adversarial eval, strict quality gates for both tracked smoke and professional browser-review task bundles, and `git diff --check`.
@@ -0,0 +1,27 @@
1
+ # MotionLoom 1.6.0 — P1 Feedback Intelligence
2
+
3
+ ## Summary
4
+
5
+ MotionLoom 1.6.0 adds a semantic feedback layer above deterministic runtime and provenance checks. It does not claim to judge aesthetics autonomously. Instead, it identifies explainable risks, binds them to evidence, and gives the next Agent a selective repair plan.
6
+
7
+ ## Added
8
+
9
+ The release adds versioned schemas and canonical CLI commands for `semantic-lint-report.json`, `continuity-report.json` and `fix-plan.json`. Semantic lint evaluates the available Motion IR for intent specificity, timing/easing semantics, accessibility policy, performance constraints and known anti-patterns. Findings carry severity, confidence, evidence references and a human-review requirement.
10
+
11
+ Continuity analysis accepts an ordered set of task bundles and checks shared project context, scene identity, Motion IR compatibility and transition assumptions. It reports context drift without treating a single-scene pass as evidence that an entire sequence is coherent.
12
+
13
+ The fix-plan command converts lint and continuity findings into root cause, affected artifacts, patch scope, selective rerun scope and verification commands. The plan is synchronized into the existing issue register, execution report and handoff; it does not introduce a parallel lifecycle or bypass reviewer consent.
14
+
15
+ The quality gate and report contract can now require P1 artifacts. The bundled Dev Lab stages and displays semantic status, continuity status, fix-plan status and the first actionable findings in the evidence rail before confirm. GitHub Actions runs the P1 regression contracts and preserves the existing strict v0.1 gates.
16
+
17
+ ## Verified behavior
18
+
19
+ The fixture suite covers a human-review warning for generic intent, a matching multi-scene continuity pass, context drift detection, fix-plan source binding and selective lint rerun scope. Smoke and professional task bundles pass schema parsing, regression, eval, Skill Doctor, report contract and strict quality gates.
20
+
21
+ ## Trust boundary
22
+
23
+ Semantic confidence and severity are prioritization signals. They cannot replace source binding, runtime assertions, replay verification, browser review or user approval. A `warn` result must remain visible, become a structured fix plan and be resolved or explicitly reviewed; it must never be rewritten as `pass` by the Agent.
24
+
25
+ ## Remaining scope
26
+
27
+ P2 remains for richer continuity semantics, asset-level visual comparison, performance budget telemetry and recommendation learning. Those features require a broader benchmark corpus and will be added only with false-positive/false-negative evaluation rather than heuristic scoring alone.
@@ -0,0 +1,23 @@
1
+ ## Summary
2
+
3
+ MotionLoom 1.7.0 extends the P1 feedback layer with deterministic performance and perceptual-risk contracts. The release makes lint execution measurable, exposes UI animation budget and frame-rate risks, and keeps easing and reduced-motion guidance visible without turning heuristics into approval.
4
+
5
+ ## Added
6
+
7
+ The semantic linter now emits a non-blocking `perf-animation-budget` warning when a UI-context Motion IR exceeds the default 500 ms interaction budget, a `perf-frame-rate` warning below 30 FPS, and an informational `perf-track-count` finding above ten tracks. It also emits perceptual warnings for linear easing in UI context and an explicit `none` reduced-motion policy. Structural source/spec mismatches remain deterministic errors; heuristic findings remain warnings or information.
8
+
9
+ The new `semantic-lint benchmark` command writes `semantic-lint-benchmark.json`. It measures in-process semantic-lint execution across configurable iterations, records average and p95 milliseconds, declares the evaluated rule set, and passes only when p95 is below the declared threshold. The default contract is 25 iterations and 500 ms. This is an execution-performance signal, not a human visual score or approval token.
10
+
11
+ The strict quality gate accepts `--require-benchmark`, and CI generates and validates the benchmark artifact before running the P1 gate. The Agent Card, README, installable Skill instructions, Intelligence Core reference and package scripts now expose the same command surface. The eval corpus and regression harness cover duration, FPS, linear easing, reduced-motion risk and benchmark threshold behavior.
12
+
13
+ ## Verified behavior
14
+
15
+ The professional task fixture passes Python compilation, the regression harness, the adversarial Intelligence eval corpus and Skill Doctor checks. The benchmark reports a p95 execution time below 500 ms on the canonical fixture. The multi-scene continuity fixtures continue to pass for matching context and report a warning for intentional context drift.
16
+
17
+ ## Trust boundary
18
+
19
+ Performance and perceptual findings are explainable risk signals. They may create a fix-plan entry and a selective rerun request, but they do not replace runtime evidence, source binding, browser review or user consent. A benchmark pass proves only that the semantic lint operation stayed below its declared execution threshold.
20
+
21
+ ## Remaining scope
22
+
23
+ Runtime frame telemetry, asset-level visual comparison, richer transition semantics and recommendation learning remain future work. They require runtime evidence and a broader labeled benchmark corpus rather than a single heuristic score.
@@ -0,0 +1,23 @@
1
+ ## Summary
2
+
3
+ MotionLoom 1.8.0 hardens the evidence and approval trust boundary after the 1.7.0 semantic benchmark milestone. The release makes candidate identity, task roots, replay scope and report selection explicit across the CLI, quality contracts and Dev Lab handoff.
4
+
5
+ ## Added
6
+
7
+ Browser-review lifecycle checks now reject expired or replayed candidates and require the exact task, scene, candidate and reviewer relationship. Report completeness now selects one deterministic passing task bundle per changed scene and fails when equally ranked bundles are ambiguous.
8
+
9
+ Intelligence Core path handling now rejects symlink traversal and resolved files outside declared task/repository roots for graph, provenance, capability evidence and replay. Replay verification binds `task_dir`, `task_id`, scene and every recorded file to the selected task bundle, preventing cross-task replay reuse.
10
+
11
+ Dev Lab artifact intake now requires same-origin `artifact_base` and `task_base` URLs, checks manifest/spec/review/task identity, surfaces candidate expiry and disables review staging when binding is invalid. This is a client-side safety rail backed by repository-side validators; it is not a replacement for cryptographic verification.
12
+
13
+ ## Verified behavior
14
+
15
+ The regression harness now covers foreign candidate review, duplicate scene bundle selection, cross-task replay, symlink artifacts and capability evidence outside the repository. Python compilation and the Dev Lab production build pass. Existing Intelligence Core P0/P1 contracts remain covered by the same deterministic suite.
16
+
17
+ ## Trust boundary
18
+
19
+ Hash chains and path guards provide deterministic repository-local integrity. They do not create an external trust anchor, and semantic lint, benchmark, provenance or Dev Lab state cannot manufacture user approval. `OPEN_PR=0` remains the default; GitHub write actions continue to require explicit confirmation.
20
+
21
+ ## Remaining scope
22
+
23
+ Signed DSSE/in-toto attestation, external verification, runtime frame telemetry, asset-level visual comparison and historical multi-project benchmark aggregation remain future roadmap work.
@@ -0,0 +1,21 @@
1
+ ## Summary
2
+
3
+ MotionLoom 1.9.0 adds an internal evidence-interoperability layer for runtime observability. The real browser adapter harness now emits deterministic scrub-point telemetry, and a read-only external verifier checks whether that evidence is fresh, task-bound, path-safe and hash-consistent before a strict quality gate can accept it.
4
+
5
+ ## Added
6
+
7
+ Runtime telemetry records the scene, task identity, source and manifest hashes, Motion IR hash, runtime adapter metadata, scrub points, observed runtime state hashes and RAF timing. The telemetry contract is versioned in `schemas/runtime-telemetry.schema.json`; the existing runtime evidence contract now exposes the binding fields in a backward-compatible extension.
8
+
9
+ `scripts/evidence-verifier.py` provides a machine-readable verifier result under `schemas/evidence-verifier-report.schema.json`. It is intentionally read-only, has stable exit behavior, rejects stale, tampered, cross-task, symlinked and path-escaped evidence, and always emits `approval: false`. A successful verification proves evidence integrity only; it never replaces runtime assertions, Dev Lab review or user consent.
10
+
11
+ The `--require-telemetry` quality-gate contract and `scripts/capture-runtime-telemetry.sh` CI helper make the sequence reproducible. Report collection and handoff now include the verifier and telemetry artifacts. The Dev Lab evidence rail displays verifier status, telemetry summary and semantic benchmark status, and prevents confirm-to-PR when identity or integrity checks fail.
12
+
13
+ The regression harness and Intelligence eval corpus cover telemetry happy path, state tampering, cross-task identity, stale evidence and symlink escape. The Agent Card, SKILL.md, README and Intelligence reference expose the same command and artifact vocabulary.
14
+
15
+ ## Verified behavior
16
+
17
+ The canonical smoke task passes replay verification after handoff synchronization, runtime telemetry capture, external verification, report completeness, strict quality gate with `--require-telemetry`, regression tests, adversarial Intelligence evals, Skill Doctor and the Dev Lab production build. The phase remains compatible with the existing runtime evidence and review-first approval model.
18
+
19
+ ## Trust boundary and remaining scope
20
+
21
+ This release is an internal integrity contract, not an independent cryptographic trust anchor. A compromised repository or substituted verifier is outside its assurance boundary. Signed DSSE/in-toto-compatible attestations, key rotation/revocation, an independently deployed verifier, asset-level visual comparison and historical benchmark aggregation remain the next roadmap phase.
@@ -0,0 +1,21 @@
1
+ # MotionLoom 2.0.0 — Signed Attestation and Trust Anchor Contract
2
+
3
+ ## Summary
4
+
5
+ MotionLoom 2.0.0 adds a DSSE-compatible signed attestation layer for task-bound animation evidence. The milestone separates **cryptographic integrity and signer identity** from **human approval**: every attestation and verifier report preserves `approval: false`, and the confirm-to-PR flow still requires an approved browser review plus a passing quality gate.
6
+
7
+ ## Added
8
+
9
+ The release adds versioned schemas for `signed-attestation.json` and `trust-policy.json`, a canonical statement builder, an Ed25519 attestation builder, an independent external verifier, and a fixture-only key generator for local/CI plumbing. The verifier uses stable exit codes: `0` verified, `10` malformed envelope, `11` payload mismatch, `12` signature failure, `13` trust-policy failure, `14` expected binding mismatch, and `2` usage or I/O failure.
10
+
11
+ The report contract and quality gate now support `--require-attestation`. CI derives a statement from exact scene/task hashes, signs it with a job-local ephemeral key for verification plumbing, copies the matching policy into the task bundle, and runs the independent verifier. Production deployments must use a managed private key and trust policy outside the repository; the CI fixture is not a production trust anchor.
12
+
13
+ ## Verified behavior
14
+
15
+ Regression and adversarial evaluation cover clean verification, payload tampering, expected task/scene binding mismatch, revoked signer, unknown signer, path safety, and the invariant that a valid signature never becomes approval. The complete suite passes with the 2.0.0 eval corpus, including all previous Intelligence Core, P1 semantic, continuity, runtime telemetry and trust-boundary cases.
16
+
17
+ ## Trust boundary and remaining scope
18
+
19
+ Attestation proves that a trusted signer signed a canonical statement whose bound bytes and identities verify under the selected policy. It does not prove visual quality, accessibility quality, user intent, or reviewer consent. A user must still inspect the Dev Lab, record `review.json`, and explicitly authorize any commit/push/PR side effect.
20
+
21
+ The next roadmap slice is visual comparison with provenance-labeled fixtures and append-only benchmark history with aggregate metrics and outlier detection. Managed key distribution, rotation and transparency logging remain deployment responsibilities rather than hidden behavior inside the Skill repository.
@@ -0,0 +1,88 @@
1
+ # Publish MotionLoom to npm from your workstation
2
+
3
+ This guide publishes the prepared `motionloom@2.0.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
+
5
+ ## 1. Install prerequisites
6
+
7
+ Use Node.js 18 or newer, npm 10 or newer, Git and Python 3.11 or newer. Verify them before cloning:
8
+
9
+ ```bash
10
+ node --version
11
+ npm --version
12
+ git --version
13
+ python3 --version
14
+ ```
15
+
16
+ ## 2. Clone the prepared GitHub release
17
+
18
+ After the npm packaging commit has been pushed to `main`, clone the repository and enter it:
19
+
20
+ ```bash
21
+ git clone https://github.com/lenhonbp/MotionLoom.git
22
+ cd MotionLoom
23
+ git checkout main
24
+ git pull --ff-only origin main
25
+ git log -1 --oneline
26
+ ```
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.
29
+
30
+ ## 3. Authenticate npm locally
31
+
32
+ Start the official npm login flow on your computer:
33
+
34
+ ```bash
35
+ npm login --registry=https://registry.npmjs.org/
36
+ npm whoami
37
+ ```
38
+
39
+ Complete the browser login and 2FA challenge if npm requests them. The second command must print your npm username. If the account uses an organization, confirm that the account has publish permission for the unscoped package name `motionloom`.
40
+
41
+ ## 4. Inspect the package before publishing
42
+
43
+ Run the package checks from the cloned repository:
44
+
45
+ ```bash
46
+ node -e 'JSON.parse(require("fs").readFileSync("package.json", "utf8")); console.log("package.json: valid")'
47
+ npm pack --dry-run --json --ignore-scripts
48
+ npm publish --dry-run --access public
49
+ ```
50
+
51
+ The dry-run should report `motionloom@2.0.0`, public access, approximately 260 kB compressed size and 111 files. 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
+
53
+ ## 5. Publish the package
54
+
55
+ When the dry-run is correct and `npm whoami` shows the intended account, publish the unscoped package publicly:
56
+
57
+ ```bash
58
+ npm publish --access public
59
+ ```
60
+
61
+ The version `2.0.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
+
63
+ ## 6. Verify the registry publication
64
+
65
+ Run the following commands and confirm that they return `2.0.0` and a tarball URL:
66
+
67
+ ```bash
68
+ npm view motionloom version --registry=https://registry.npmjs.org/
69
+ npm view motionloom@2.0.0 name version license dist.tarball dist.shasum --json \
70
+ --registry=https://registry.npmjs.org/
71
+ ```
72
+
73
+ Then test installation in a clean temporary directory:
74
+
75
+ ```bash
76
+ TMP_DIR="$(mktemp -d)"
77
+ cd "$TMP_DIR"
78
+ npm init --yes
79
+ npm install motionloom@2.0.0
80
+ motionloom --help
81
+ motionloom doctor
82
+ ```
83
+
84
+ The CLI should print the MotionLoom command surface. `motionloom doctor` should validate the installed package contract. The Python runtime remains a prerequisite for commands that delegate to Python scripts.
85
+
86
+ ## Troubleshooting
87
+
88
+ If `npm whoami` returns `ENEEDAUTH`, repeat `npm login` on the same computer and registry. 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, stop and choose a scoped name such as `@your-npm-user/motionloom`, then update `name` and `publishConfig` before publishing a new package identity. Never place an npm token in `package.json`, `.npmrc` committed to Git, shell history or chat.
@@ -0,0 +1,43 @@
1
+ # Agent Protocol Findings
2
+
3
+ ## Model Context Protocol
4
+
5
+ Source: <https://modelcontextprotocol.io/specification/2026-07-28>
6
+
7
+ The current MCP specification separates contextual data/resources, prompts/workflows and tools/capabilities. This maps cleanly to MotionLoom's future surface: project context and artifact bundles should be exposed as resources, workflow recipes as prompts or instructions, and side-effecting operations such as prepare-review or confirm-to-PR as tools with explicit input/output schemas.
8
+
9
+ Source: <https://modelcontextprotocol.io/specification/2026-07-28/server/tools>
10
+
11
+ The Tools specification distinguishes malformed protocol requests from actionable tool execution errors. Execution errors should carry self-correcting feedback for the model. It also states that tool invocations should preserve a human-in-the-loop ability to deny invocation. MotionLoom should therefore return structured diagnostics for invalid context, stale evidence, missing source binding and failed runtime checks, while keeping review approval and real PR side effects behind an explicit user confirmation boundary.
12
+
13
+ ## Design implication for MotionLoom
14
+
15
+ MotionLoom should not expose one opaque “make animation” action. It should expose typed stages with discoverable capabilities, machine-readable error classes, resource references to the exact task/artifact bundle, and explicit side-effect levels. The protocol layer must preserve the existing `OPEN_PR=0` default and add an approval token or equivalent short-lived authority for any remote write.
16
+
17
+ ## Provenance and attestations
18
+
19
+ Source: <https://slsa.dev/spec/v1.0/provenance>
20
+
21
+ SLSA models provenance as verifiable information about how an artifact was produced. The model separates the artifact `subject`, the parameterized `buildType`/build definition, the builder identity, and resolved dependencies/materials. Verification is based on trusted signer-builder pairs rather than a generic “generated successfully” flag.
22
+
23
+ Source: <https://github.com/in-toto/docs/blob/master/in-toto-spec.md>
24
+
25
+ in-toto describes a supply chain as an ordered set of steps with explicit actors, materials, products and inspections. Its core value is detecting a step that was omitted, replaced, added or performed by the wrong actor, not merely checking the final file hash.
26
+
27
+ ## Design implication for MotionLoom
28
+
29
+ The current `artifact-manifest.json` is a useful checksum inventory but not yet a complete provenance attestation. A deeper design should add a signed or attestable `provenance.json` containing `materials`, `products`, `step`, `actor`, `builder`, `build_type`, `inputs`, `outputs` and verification policy. The chain should cover analyze, spec, source, generate, render, runtime adapter, browser review, quality gate and confirm—not just the final scene.
30
+
31
+ ## Agent Skill packaging and evaluation
32
+
33
+ Source: <https://agentskills.io/specification>
34
+
35
+ The Agent Skills specification defines a small `SKILL.md` frontmatter contract and recommends progressive disclosure: short metadata for discovery, an instructions body kept below roughly 500 lines, and on-demand resources in `scripts/`, `references/` or `assets/`. MotionLoom should keep the activation contract concise and move framework-specific rules, schemas and long runbooks into referenced files.
36
+
37
+ Source: <https://agentskills.io/skill-creation/evaluating-skills>
38
+
39
+ The evaluation guidance recommends realistic prompts, expected outputs, input files, varied wording and at least one boundary or ambiguous case. It also describes an iterative loop of running evaluations, writing assertions, grading outputs and reviewing patterns with a human.
40
+
41
+ ## Design implication for MotionLoom
42
+
43
+ The current regression suite validates scripts and artifacts, but it does not yet measure whether an Agent selected the correct capability, preserved project intent or produced a useful fix plan. MotionLoom needs an `evals/` corpus with project contexts, animation intents, ambiguous requests, stale source, unsupported runtime and review rejection cases. Each case should grade both machine contracts and human-facing report quality.
@@ -0,0 +1,50 @@
1
+ # Animation Task Report — report-demo
2
+
3
+ ## Status
4
+ - Overall: **created**
5
+ - Confidence: **low**
6
+ - Scene: `onboarding-wave`
7
+ - Project: `example-project`
8
+ - Context hash: ``
9
+
10
+ ## Completed
11
+ | Item | Status | Evidence |
12
+ | --- | --- | --- |
13
+ | Host project context analyzed | pass | ['project-context.json'] |
14
+
15
+ ## Verified
16
+ | Item | Status | Evidence |
17
+ | --- | --- | --- |
18
+ | Motion spec context binding created | pass | ['motion-spec.json'] |
19
+
20
+ ## Not completed
21
+ | Item | Status | Evidence |
22
+ | --- | --- | --- |
23
+ | Runtime render has not been executed in this example | pending | |
24
+
25
+ ## Problems to fix
26
+ | ID | Severity | Problem | Status | Next action |
27
+ | --- | --- | --- | --- | --- |
28
+ | runtime-evidence | P1 | PR evidence is incomplete until runtime snapshots exist | open | Render frames 0/50/100 and attach .render-meta.json |
29
+
30
+ ## Structure review
31
+ - Missing files: `project-context.json`
32
+ - Broken references: `src/output/onboarding-wave/animation.json`
33
+ - Artifact count: **3**
34
+ - Quality gate: **not-run**
35
+
36
+ ## Recommended next Agent / Skill
37
+ | Agent/Skill | Action | Evidence needed |
38
+ | --- | --- | --- |
39
+ | motionloom | Run project analysis and populate context before generation. | |
40
+ | motionloom | | ['snapshot/.render-meta.json', 'review.json'] |
41
+
42
+ ## Evidence files
43
+ | Path | Type | Bytes | SHA-256 |
44
+ | --- | --- | --- | --- |
45
+ | handoff.json | json | 479 | b4b14fce76fa027276ab569c1b74a2de1ebdb3f8f0e3f46d9930a1e3fb5a96ae |
46
+ | issue-register.json | json | 67 | 56667cfd1b718546956e2b0b6a08adb328fe4d7c3df6814dda81b33fb8296504 |
47
+ | task.json | json | 367 | ee315e0c3eee2f12d80d4856623520b894bfdec404f0838973026401b42c2c27 |
48
+
49
+
50
+ _Generated at 2026-08-12T13:57:24Z by `scripts/report.py`._
@@ -0,0 +1,25 @@
1
+ {
2
+ "manifest_version": "1.0",
3
+ "task_id": "report-demo",
4
+ "generated_at": "2026-08-12T13:57:24Z",
5
+ "artifacts": [
6
+ {
7
+ "path": "handoff.json",
8
+ "type": "json",
9
+ "sha256": "b4b14fce76fa027276ab569c1b74a2de1ebdb3f8f0e3f46d9930a1e3fb5a96ae",
10
+ "bytes": 479
11
+ },
12
+ {
13
+ "path": "issue-register.json",
14
+ "type": "json",
15
+ "sha256": "56667cfd1b718546956e2b0b6a08adb328fe4d7c3df6814dda81b33fb8296504",
16
+ "bytes": 67
17
+ },
18
+ {
19
+ "path": "task.json",
20
+ "type": "json",
21
+ "sha256": "ee315e0c3eee2f12d80d4856623520b894bfdec404f0838973026401b42c2c27",
22
+ "bytes": 367
23
+ }
24
+ ]
25
+ }
File without changes
@@ -0,0 +1,70 @@
1
+ {
2
+ "report_version": "1.0",
3
+ "task_id": "report-demo",
4
+ "status": "created",
5
+ "confidence": "low",
6
+ "completed": [
7
+ {
8
+ "id": "analyze",
9
+ "summary": "Host project context analyzed",
10
+ "status": "pass",
11
+ "evidence": [
12
+ "project-context.json"
13
+ ]
14
+ }
15
+ ],
16
+ "verified": [
17
+ {
18
+ "id": "spec",
19
+ "summary": "Motion spec context binding created",
20
+ "status": "pass",
21
+ "evidence": [
22
+ "motion-spec.json"
23
+ ]
24
+ }
25
+ ],
26
+ "not_completed": [
27
+ {
28
+ "id": "runtime",
29
+ "summary": "Runtime render has not been executed in this example",
30
+ "status": "pending",
31
+ "next_action": "Run scripts/render.sh onboarding-wave"
32
+ }
33
+ ],
34
+ "problems": [
35
+ {
36
+ "id": "runtime-evidence",
37
+ "summary": "PR evidence is incomplete until runtime snapshots exist",
38
+ "status": "open",
39
+ "severity": "P1",
40
+ "next_action": "Render frames 0/50/100 and attach .render-meta.json"
41
+ }
42
+ ],
43
+ "structure_review": {
44
+ "missing_files": [
45
+ "project-context.json"
46
+ ],
47
+ "broken_references": [
48
+ "src/output/onboarding-wave/animation.json"
49
+ ],
50
+ "untracked_artifacts": []
51
+ },
52
+ "next_agent": [
53
+ {
54
+ "agent": "motionloom",
55
+ "action": "Run project analysis and populate context before generation."
56
+ },
57
+ {
58
+ "id": "render",
59
+ "summary": "Continue with runtime render and Dev Lab review",
60
+ "status": "pending",
61
+ "agent": "motionloom",
62
+ "skill": "motionloom",
63
+ "evidence_needed": [
64
+ "snapshot/.render-meta.json",
65
+ "review.json"
66
+ ]
67
+ }
68
+ ],
69
+ "generated_at": "2026-08-12T13:57:24Z"
70
+ }
@@ -0,0 +1,22 @@
1
+ {
2
+ "handoff_version": "1.0",
3
+ "task_id": "report-demo",
4
+ "from_agent": "motionloom",
5
+ "to_agent": "motionloom",
6
+ "state": "created",
7
+ "summary": "New animation task initialized.",
8
+ "next_actions": [
9
+ {
10
+ "action": "Analyze host project context",
11
+ "skill": "motionloom",
12
+ "evidence_needed": [
13
+ "project-context.json"
14
+ ]
15
+ }
16
+ ],
17
+ "required_artifacts": [
18
+ "task.json",
19
+ "execution-report.json"
20
+ ],
21
+ "blockers": []
22
+ }
@@ -0,0 +1,5 @@
1
+ {
2
+ "version": "1.0",
3
+ "task_id": "report-demo",
4
+ "issues": []
5
+ }
@@ -0,0 +1,13 @@
1
+ {
2
+ "schema_version": "1.0",
3
+ "task_id": "report-demo",
4
+ "scene": "onboarding-wave",
5
+ "intent": "Demonstrate transparent execution reporting",
6
+ "project_name": "example-project",
7
+ "context_path": "",
8
+ "context_hash": "",
9
+ "state": "created",
10
+ "owner_agent": "motionloom",
11
+ "created_at": "2026-08-12T13:57:24Z",
12
+ "updated_at": "2026-08-12T13:57:24Z"
13
+ }