matrixscroll 0.4.2__tar.gz → 0.5.0__tar.gz
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.
- {matrixscroll-0.4.2 → matrixscroll-0.5.0}/CHANGELOG.md +17 -0
- {matrixscroll-0.4.2 → matrixscroll-0.5.0}/PKG-INFO +33 -31
- {matrixscroll-0.4.2 → matrixscroll-0.5.0}/README.md +28 -28
- {matrixscroll-0.4.2 → matrixscroll-0.5.0}/SPEC.md +55 -0
- {matrixscroll-0.4.2 → matrixscroll-0.5.0}/docs/CRYPTO_BACKEND.md +6 -1
- {matrixscroll-0.4.2 → matrixscroll-0.5.0}/docs/ROADMAP_2026-07.md +2 -2
- {matrixscroll-0.4.2 → matrixscroll-0.5.0}/docs/SECURITY_PROPERTIES.md +1 -1
- {matrixscroll-0.4.2 → matrixscroll-0.5.0}/docs/WHITEPAPER.md +4 -4
- {matrixscroll-0.4.2 → matrixscroll-0.5.0}/docs/commercial/SSX360_SCROLL.md +1 -1
- {matrixscroll-0.4.2 → matrixscroll-0.5.0}/docs/registries-guide.md +11 -4
- matrixscroll-0.5.0/matrixscroll/canonical.py +38 -0
- {matrixscroll-0.4.2 → matrixscroll-0.5.0}/matrixscroll/cli.py +71 -1
- matrixscroll-0.5.0/matrixscroll/constants.py +26 -0
- {matrixscroll-0.4.2 → matrixscroll-0.5.0}/matrixscroll/crypto_backend.py +77 -0
- {matrixscroll-0.4.2 → matrixscroll-0.5.0}/matrixscroll/gate.py +12 -0
- {matrixscroll-0.4.2 → matrixscroll-0.5.0}/matrixscroll/git.py +2 -2
- {matrixscroll-0.4.2 → matrixscroll-0.5.0}/matrixscroll/manifest.py +29 -0
- {matrixscroll-0.4.2 → matrixscroll-0.5.0}/matrixscroll/mcp.py +176 -38
- {matrixscroll-0.4.2 → matrixscroll-0.5.0}/matrixscroll/policy.py +55 -0
- matrixscroll-0.5.0/matrixscroll/pqc.py +208 -0
- {matrixscroll-0.4.2 → matrixscroll-0.5.0}/pyproject.toml +11 -3
- matrixscroll-0.5.0/schemas/commit-envelope.v1.1.json +19 -0
- matrixscroll-0.5.0/schemas/pqc-signature.v1.json +37 -0
- {matrixscroll-0.4.2 → matrixscroll-0.5.0}/tests/test_canonical.py +9 -0
- matrixscroll-0.5.0/tests/test_canonical_pqc.py +16 -0
- {matrixscroll-0.4.2 → matrixscroll-0.5.0}/tests/test_mcp_server.py +36 -1
- matrixscroll-0.5.0/tests/test_pqc.py +100 -0
- matrixscroll-0.4.2/matrixscroll/canonical.py +0 -18
- matrixscroll-0.4.2/matrixscroll/constants.py +0 -12
- {matrixscroll-0.4.2 → matrixscroll-0.5.0}/.gitignore +0 -0
- {matrixscroll-0.4.2 → matrixscroll-0.5.0}/CONTRIBUTING.md +0 -0
- {matrixscroll-0.4.2 → matrixscroll-0.5.0}/LICENSE +0 -0
- {matrixscroll-0.4.2 → matrixscroll-0.5.0}/SECURITY.md +0 -0
- {matrixscroll-0.4.2 → matrixscroll-0.5.0}/controls/agentic_ai_controls.json +0 -0
- {matrixscroll-0.4.2 → matrixscroll-0.5.0}/docs/ADOPTER_KIT.md +0 -0
- {matrixscroll-0.4.2 → matrixscroll-0.5.0}/docs/ADOPTION.md +0 -0
- {matrixscroll-0.4.2 → matrixscroll-0.5.0}/docs/AGENTIC_AI_SECURITY.md +0 -0
- {matrixscroll-0.4.2 → matrixscroll-0.5.0}/docs/CI_HARD_GATE.md +0 -0
- {matrixscroll-0.4.2 → matrixscroll-0.5.0}/docs/COMMIT_TIME_VS_ARTIFACT_TIME.md +0 -0
- {matrixscroll-0.4.2 → matrixscroll-0.5.0}/docs/COMPARISON.md +0 -0
- {matrixscroll-0.4.2 → matrixscroll-0.5.0}/docs/FIVE_MINUTES.md +0 -0
- {matrixscroll-0.4.2 → matrixscroll-0.5.0}/docs/HERO_DEMO.md +0 -0
- {matrixscroll-0.4.2 → matrixscroll-0.5.0}/docs/SE050_POC_SCOPE.md +0 -0
- {matrixscroll-0.4.2 → matrixscroll-0.5.0}/docs/SE050_USB_PROTOCOL.md +0 -0
- {matrixscroll-0.4.2 → matrixscroll-0.5.0}/docs/SOFTWARE_PRODUCTS.md +0 -0
- {matrixscroll-0.4.2 → matrixscroll-0.5.0}/docs/commercial/PLATFORM_PIVOT.md +0 -0
- {matrixscroll-0.4.2 → matrixscroll-0.5.0}/docs/commercial/SCROLL_GATE_V2.md +0 -0
- {matrixscroll-0.4.2 → matrixscroll-0.5.0}/docs/delegation-attestation-rfc.md +0 -0
- {matrixscroll-0.4.2 → matrixscroll-0.5.0}/docs/hardware-provider.md +0 -0
- {matrixscroll-0.4.2 → matrixscroll-0.5.0}/docs/quickstart-agent.md +0 -0
- {matrixscroll-0.4.2 → matrixscroll-0.5.0}/docs/quickstart-claude-code.md +0 -0
- {matrixscroll-0.4.2 → matrixscroll-0.5.0}/docs/quickstart-git.md +0 -0
- {matrixscroll-0.4.2 → matrixscroll-0.5.0}/docs/quickstart-mcp.md +0 -0
- {matrixscroll-0.4.2 → matrixscroll-0.5.0}/docs/rekor-guac-bridge-design.md +0 -0
- {matrixscroll-0.4.2 → matrixscroll-0.5.0}/docs/superpowers/plans/2026-06-19-ci-action-plan.md +0 -0
- {matrixscroll-0.4.2 → matrixscroll-0.5.0}/docs/superpowers/plans/2026-06-19-sdk-refactor-plan.md +0 -0
- {matrixscroll-0.4.2 → matrixscroll-0.5.0}/docs/superpowers/specs/2026-06-19-matrixscroll-git-design.md +0 -0
- {matrixscroll-0.4.2 → matrixscroll-0.5.0}/docs/yubikey-bridge.md +0 -0
- {matrixscroll-0.4.2 → matrixscroll-0.5.0}/docs/yubikey-smoke.md +0 -0
- {matrixscroll-0.4.2 → matrixscroll-0.5.0}/examples/agentic_ai_evidence_manifest.json +0 -0
- {matrixscroll-0.4.2 → matrixscroll-0.5.0}/examples/agentic_ai_evidence_manifest.signed.json +0 -0
- {matrixscroll-0.4.2 → matrixscroll-0.5.0}/examples/ci/protected-branch.yml +0 -0
- {matrixscroll-0.4.2 → matrixscroll-0.5.0}/examples/commit-envelope.json +0 -0
- {matrixscroll-0.4.2 → matrixscroll-0.5.0}/examples/commit-envelope.signed.json +0 -0
- {matrixscroll-0.4.2 → matrixscroll-0.5.0}/examples/demo/agent-commit-demo.sh +0 -0
- {matrixscroll-0.4.2 → matrixscroll-0.5.0}/examples/demo/generate_signed_examples.py +0 -0
- {matrixscroll-0.4.2 → matrixscroll-0.5.0}/examples/demo/hero-self-attestation-demo.sh +0 -0
- {matrixscroll-0.4.2 → matrixscroll-0.5.0}/examples/release-manifest.json +0 -0
- {matrixscroll-0.4.2 → matrixscroll-0.5.0}/examples/release-manifest.signed.json +0 -0
- {matrixscroll-0.4.2 → matrixscroll-0.5.0}/examples/trusted-keys-policy.json +0 -0
- {matrixscroll-0.4.2 → matrixscroll-0.5.0}/matrixscroll/__init__.py +0 -0
- {matrixscroll-0.4.2 → matrixscroll-0.5.0}/matrixscroll/_claim.py +0 -0
- {matrixscroll-0.4.2 → matrixscroll-0.5.0}/matrixscroll/_core.py +0 -0
- {matrixscroll-0.4.2 → matrixscroll-0.5.0}/matrixscroll/_payment.py +0 -0
- {matrixscroll-0.4.2 → matrixscroll-0.5.0}/matrixscroll/cloud/__init__.py +0 -0
- {matrixscroll-0.4.2 → matrixscroll-0.5.0}/matrixscroll/cloud/client.py +0 -0
- {matrixscroll-0.4.2 → matrixscroll-0.5.0}/matrixscroll/errors.py +0 -0
- {matrixscroll-0.4.2 → matrixscroll-0.5.0}/matrixscroll/guac_export.py +0 -0
- {matrixscroll-0.4.2 → matrixscroll-0.5.0}/matrixscroll/hooks/post-commit +0 -0
- {matrixscroll-0.4.2 → matrixscroll-0.5.0}/matrixscroll/hooks/pre-push +0 -0
- {matrixscroll-0.4.2 → matrixscroll-0.5.0}/matrixscroll/mcp_core.py +0 -0
- {matrixscroll-0.4.2 → matrixscroll-0.5.0}/matrixscroll/provenance/__init__.py +0 -0
- {matrixscroll-0.4.2 → matrixscroll-0.5.0}/matrixscroll/provenance/actions.py +0 -0
- {matrixscroll-0.4.2 → matrixscroll-0.5.0}/matrixscroll/providers/__init__.py +0 -0
- {matrixscroll-0.4.2 → matrixscroll-0.5.0}/matrixscroll/providers/base.py +0 -0
- {matrixscroll-0.4.2 → matrixscroll-0.5.0}/matrixscroll/providers/emulated.py +0 -0
- {matrixscroll-0.4.2 → matrixscroll-0.5.0}/matrixscroll/providers/hardware.py +0 -0
- {matrixscroll-0.4.2 → matrixscroll-0.5.0}/matrixscroll/providers/registry.py +0 -0
- {matrixscroll-0.4.2 → matrixscroll-0.5.0}/matrixscroll/providers/se050_transport.py +0 -0
- {matrixscroll-0.4.2 → matrixscroll-0.5.0}/matrixscroll/providers/tpm.py +0 -0
- {matrixscroll-0.4.2 → matrixscroll-0.5.0}/matrixscroll/providers/yubikey.py +0 -0
- {matrixscroll-0.4.2 → matrixscroll-0.5.0}/matrixscroll/py.typed +0 -0
- {matrixscroll-0.4.2 → matrixscroll-0.5.0}/matrixscroll/rekor_publish.py +0 -0
- {matrixscroll-0.4.2 → matrixscroll-0.5.0}/matrixscroll/scroll/README.md +0 -0
- {matrixscroll-0.4.2 → matrixscroll-0.5.0}/matrixscroll/scroll/__init__.py +0 -0
- {matrixscroll-0.4.2 → matrixscroll-0.5.0}/schemas/action-envelope.v1.json +0 -0
- {matrixscroll-0.4.2 → matrixscroll-0.5.0}/schemas/commit-envelope.v1.json +0 -0
- {matrixscroll-0.4.2 → matrixscroll-0.5.0}/schemas/evidence-pack.v1.json +0 -0
- {matrixscroll-0.4.2 → matrixscroll-0.5.0}/schemas/release-manifest.v1.json +0 -0
- {matrixscroll-0.4.2 → matrixscroll-0.5.0}/tests/__init__.py +0 -0
- {matrixscroll-0.4.2 → matrixscroll-0.5.0}/tests/fixtures/github-gpgsig-commit.txt +0 -0
- {matrixscroll-0.4.2 → matrixscroll-0.5.0}/tests/test_agentic_guidance.py +0 -0
- {matrixscroll-0.4.2 → matrixscroll-0.5.0}/tests/test_cli.py +0 -0
- {matrixscroll-0.4.2 → matrixscroll-0.5.0}/tests/test_core.py +0 -0
- {matrixscroll-0.4.2 → matrixscroll-0.5.0}/tests/test_crypto_backend.py +0 -0
- {matrixscroll-0.4.2 → matrixscroll-0.5.0}/tests/test_gate.py +0 -0
- {matrixscroll-0.4.2 → matrixscroll-0.5.0}/tests/test_git_envelope.py +0 -0
- {matrixscroll-0.4.2 → matrixscroll-0.5.0}/tests/test_guac_rekor.py +0 -0
- {matrixscroll-0.4.2 → matrixscroll-0.5.0}/tests/test_mcp_core.py +0 -0
- {matrixscroll-0.4.2 → matrixscroll-0.5.0}/tests/test_policy.py +0 -0
- {matrixscroll-0.4.2 → matrixscroll-0.5.0}/tests/test_provenance.py +0 -0
- {matrixscroll-0.4.2 → matrixscroll-0.5.0}/tests/test_release_metadata.py +0 -0
- {matrixscroll-0.4.2 → matrixscroll-0.5.0}/tests/test_se050_transport.py +0 -0
- {matrixscroll-0.4.2 → matrixscroll-0.5.0}/tests/test_security_properties.py +0 -0
- {matrixscroll-0.4.2 → matrixscroll-0.5.0}/tests/test_tpm_provider.py +0 -0
- {matrixscroll-0.4.2 → matrixscroll-0.5.0}/tests/test_vectors.py +0 -0
- {matrixscroll-0.4.2 → matrixscroll-0.5.0}/tests/test_yubikey_provider.py +0 -0
- {matrixscroll-0.4.2 → matrixscroll-0.5.0}/vectors/README.md +0 -0
- {matrixscroll-0.4.2 → matrixscroll-0.5.0}/vectors/_fixture_key.json +0 -0
- {matrixscroll-0.4.2 → matrixscroll-0.5.0}/vectors/_generate.py +0 -0
- {matrixscroll-0.4.2 → matrixscroll-0.5.0}/vectors/tampered_algorithm.json +0 -0
- {matrixscroll-0.4.2 → matrixscroll-0.5.0}/vectors/tampered_device_id.json +0 -0
- {matrixscroll-0.4.2 → matrixscroll-0.5.0}/vectors/tampered_field.json +0 -0
- {matrixscroll-0.4.2 → matrixscroll-0.5.0}/vectors/tampered_nested.json +0 -0
- {matrixscroll-0.4.2 → matrixscroll-0.5.0}/vectors/tampered_public_key.json +0 -0
- {matrixscroll-0.4.2 → matrixscroll-0.5.0}/vectors/tampered_schema.json +0 -0
- {matrixscroll-0.4.2 → matrixscroll-0.5.0}/vectors/tampered_signature.json +0 -0
- {matrixscroll-0.4.2 → matrixscroll-0.5.0}/vectors/unsigned_empty_block.json +0 -0
- {matrixscroll-0.4.2 → matrixscroll-0.5.0}/vectors/unsigned_no_block.json +0 -0
- {matrixscroll-0.4.2 → matrixscroll-0.5.0}/vectors/valid_commit_envelope.json +0 -0
- {matrixscroll-0.4.2 → matrixscroll-0.5.0}/vectors/valid_nested.json +0 -0
- {matrixscroll-0.4.2 → matrixscroll-0.5.0}/vectors/valid_simple.json +0 -0
- {matrixscroll-0.4.2 → matrixscroll-0.5.0}/vectors/valid_unicode.json +0 -0
|
@@ -4,6 +4,22 @@ All notable changes to the Matrix Scroll Python SDK are documented here. The
|
|
|
4
4
|
format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) and
|
|
5
5
|
this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
6
6
|
|
|
7
|
+
## [0.5.0] - 2026-07-02
|
|
8
|
+
|
|
9
|
+
Post-quantum overlay (v1.1 additive extension).
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
- **SPEC.md §11** — optional `pqc_signatures` array (ML-DSA FIPS 204, SLH-DSA FIPS 205).
|
|
13
|
+
- **`matrixscroll.pqc`** — software-only PQC overlay; Ed25519 `signature` block unchanged.
|
|
14
|
+
- **`matrixscroll pqc-keygen`** — generate/load PQC keys under `~/.matrixscroll/pqc/`.
|
|
15
|
+
- **`MATRIXSCROLL_PQC`** env — attach overlay on sign (e.g. `ml-dsa-65`); hardware mode exempt.
|
|
16
|
+
- **Policy `require_pqc`** — `false` (default), `emulated_only`, or `true` (hardware exempt).
|
|
17
|
+
- **Optional extra `[pqc]`** — `liboqs-python` backend for ML-DSA / SLH-DSA.
|
|
18
|
+
|
|
19
|
+
### Unchanged
|
|
20
|
+
- USB/NFC/SE050 device signing remains **Ed25519-only** (no firmware change).
|
|
21
|
+
- All v1 vectors and Ed25519 verification behavior.
|
|
22
|
+
|
|
7
23
|
## [0.4.2] - 2026-06-29
|
|
8
24
|
|
|
9
25
|
Crypto backend consolidation (middle path).
|
|
@@ -189,6 +205,7 @@ Initial public release. Extracted from the SSX360 reference implementation.
|
|
|
189
205
|
- Device id format: `MS-XXXX-XXXX` (SHA-256 of the raw public key, first 8 hex
|
|
190
206
|
chars, uppercase).
|
|
191
207
|
|
|
208
|
+
[0.5.0]: https://github.com/SSX360/matrixscroll/releases/tag/v0.5.0
|
|
192
209
|
[0.2.2]: https://github.com/SSX360/matrixscroll/releases/tag/v0.2.2
|
|
193
210
|
[0.2.1]: https://github.com/SSX360/matrixscroll/releases/tag/v0.2.1
|
|
194
211
|
[0.2.0]: https://github.com/SSX360/matrixscroll/releases/tag/v0.2.0
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: matrixscroll
|
|
3
|
-
Version: 0.
|
|
4
|
-
Summary: Signed provenance for agent-assisted Git commits with offline verification;
|
|
3
|
+
Version: 0.5.0
|
|
4
|
+
Summary: Signed provenance for agent-assisted Git commits with offline Ed25519 verification; optional ML-DSA/SLH-DSA software overlay (FIPS 204/205). USB/NFC/SE050 hardware remains Ed25519.
|
|
5
5
|
Project-URL: Homepage, https://ssx360.com
|
|
6
6
|
Project-URL: Documentation, https://ssx360.com/docs
|
|
7
7
|
Project-URL: Repository, https://github.com/SSX360/matrixscroll
|
|
@@ -22,7 +22,7 @@ Project-URL: Public Roadmap, https://github.com/SSX360/matrixscroll/blob/main/do
|
|
|
22
22
|
Author-email: SSX360 <security@matrixscroll.com>
|
|
23
23
|
License-Expression: Apache-2.0
|
|
24
24
|
License-File: LICENSE
|
|
25
|
-
Keywords: ai,ed25519,matrixscroll,provenance,root-of-trust,secure-element,signing,ssx360,supply-chain
|
|
25
|
+
Keywords: ai,ed25519,fips-204,fips-205,matrixscroll,ml-dsa,post-quantum,provenance,root-of-trust,secure-element,signing,slh-dsa,ssx360,supply-chain
|
|
26
26
|
Classifier: Development Status :: 4 - Beta
|
|
27
27
|
Classifier: Intended Audience :: Developers
|
|
28
28
|
Classifier: Intended Audience :: Information Technology
|
|
@@ -38,7 +38,7 @@ Classifier: Topic :: Security :: Cryptography
|
|
|
38
38
|
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
39
39
|
Classifier: Typing :: Typed
|
|
40
40
|
Requires-Python: >=3.10
|
|
41
|
-
Requires-Dist: cryptography>=
|
|
41
|
+
Requires-Dist: cryptography>=43.0
|
|
42
42
|
Provides-Extra: dev
|
|
43
43
|
Requires-Dist: build>=1.0; extra == 'dev'
|
|
44
44
|
Requires-Dist: hypothesis>=6.100; extra == 'dev'
|
|
@@ -49,6 +49,8 @@ Provides-Extra: hardware
|
|
|
49
49
|
Requires-Dist: pyserial>=3.5; extra == 'hardware'
|
|
50
50
|
Provides-Extra: mcp
|
|
51
51
|
Requires-Dist: mcp<2.0.0,>=1.0.0; extra == 'mcp'
|
|
52
|
+
Provides-Extra: pqc
|
|
53
|
+
Requires-Dist: liboqs-python>=0.12.0; extra == 'pqc'
|
|
52
54
|
Provides-Extra: tpm
|
|
53
55
|
Provides-Extra: yubikey
|
|
54
56
|
Requires-Dist: python-pkcs11>=0.7; extra == 'yubikey'
|
|
@@ -62,19 +64,16 @@ Description-Content-Type: text/markdown
|
|
|
62
64
|
|
|
63
65
|
**123 tests** · Hypothesis-verified security properties · [Security properties](docs/SECURITY_PROPERTIES.md)
|
|
64
66
|
|
|
65
|
-
**Signed proof of who — or what — wrote every commit.** Matrix Scroll is
|
|
66
|
-
**
|
|
67
|
-
|
|
68
|
-
offline in CLI, browser, and CI.
|
|
69
|
-
|
|
67
|
+
**Signed proof of who — or what — wrote every AI-assisted commit.** Matrix Scroll is an
|
|
68
|
+
**open protocol for cryptographically signed, AI-assisted code provenance** — Ed25519 commit
|
|
69
|
+
envelopes for Git (and universal action envelopes for CI, IaC, and migrations),
|
|
70
|
+
verified offline in CLI, browser, and CI. Software emulated keys ship today; NXP SE050
|
|
71
|
+
secure-element signing is on the roadmap with the same verifier contract.
|
|
70
72
|
|
|
71
|
-
**
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
**Hosted control plane:** identity, billing, and device confirmation live at
|
|
76
|
-
[ssx360.com](https://ssx360.com/). Teams evaluating protected-branch enforcement should
|
|
77
|
-
[book a provenance pilot](https://ssx360.com/contact?intent=pilot);
|
|
73
|
+
**Hosted control plane:** identity, billing, audit ledger, and Scroll Gate live at
|
|
74
|
+
[ssx360.com](https://ssx360.com/). Enterprise teams evaluating protected-branch enforcement should
|
|
75
|
+
[book a provenance pilot](https://ssx360.com/contact?intent=pilot) or visit
|
|
76
|
+
[ssx360.com/enterprise](https://ssx360.com/enterprise).
|
|
78
77
|
Provisioned pilot and team accounts sign in at [ssx360.com/signup](https://ssx360.com/signup).
|
|
79
78
|
|
|
80
79
|
## Compliance evidence mapping
|
|
@@ -104,18 +103,18 @@ Agents sign commits in-loop via the **provenance-only** MCP server:
|
|
|
104
103
|
```
|
|
105
104
|
|
|
106
105
|
```bash
|
|
107
|
-
pip install "matrixscroll[mcp]==0.
|
|
106
|
+
pip install "matrixscroll[mcp]==0.5.0"
|
|
108
107
|
matrixscroll-mcp # stdio — register in Cursor / Claude Desktop / VS Code
|
|
109
108
|
```
|
|
110
109
|
|
|
111
110
|
**MCP tools (provenance verbs only):** `create_envelope`, `sign_action`, `verify_envelope`,
|
|
112
111
|
`verify_pr_range` (Scroll Gate), `publish_notes`, `status`, `audit_export`, `list_envelopes`,
|
|
113
|
-
`connect_card` (SE050 preview).
|
|
112
|
+
`connect_card` (SE050 hardware preview, roadmap).
|
|
114
113
|
|
|
115
114
|
## Also available — CLI & hooks
|
|
116
115
|
|
|
117
116
|
```bash
|
|
118
|
-
pip install "matrixscroll==0.
|
|
117
|
+
pip install "matrixscroll==0.5.0"
|
|
119
118
|
matrixscroll hook-install
|
|
120
119
|
export MATRIXSCROLL_ACTOR_TYPE=agent
|
|
121
120
|
export MATRIXSCROLL_TOOL=agent-runner
|
|
@@ -179,12 +178,12 @@ canonical UTF-8 JSON bytes (see [`SPEC.md`](SPEC.md) §4). Verifiers reject any
|
|
|
179
178
|
|
|
180
179
|
## Honest limits
|
|
181
180
|
|
|
182
|
-
- Shipping now: PyPI `matrixscroll==0.
|
|
181
|
+
- Shipping now: PyPI `matrixscroll==0.5.0`, Git post-commit hooks,
|
|
183
182
|
`matrixscroll sign-action`, `matrixscroll scroll commit` (thin wrapper),
|
|
184
183
|
`matrixscroll envelope-verify`, Scroll Gate PR verification (partial SLSA L1–2),
|
|
185
184
|
verifier, the GitHub Action, and a USB CDC host transport preview for the
|
|
186
185
|
SE050 rollout path. Emulated mode is the default evaluation path.
|
|
187
|
-
- In progress: nRF52840 + SE050 firmware validation
|
|
186
|
+
- In progress: nRF52840 + SE050 firmware validation for hardware-backed signing, external Ed25519-capable
|
|
188
187
|
hardware key backends, and transparency-log integrations.
|
|
189
188
|
- Not: IAM, sandboxing, prompt filtering, or an agent runtime.
|
|
190
189
|
|
|
@@ -194,8 +193,10 @@ canonical UTF-8 JSON bytes (see [`SPEC.md`](SPEC.md) §4). Verifiers reject any
|
|
|
194
193
|
records who or what signed the change before push.
|
|
195
194
|
- Hardware keys and build attestations remain complementary roots and downstream
|
|
196
195
|
proofs; Matrix Scroll covers commit-time provenance.
|
|
197
|
-
- The public contract stays pure Ed25519 over canonical manifest bytes
|
|
198
|
-
whether the signer is emulated today or
|
|
196
|
+
- The public contract stays pure Ed25519 over canonical manifest bytes for the
|
|
197
|
+
required `signature` block — whether the signer is emulated today or
|
|
198
|
+
hardware-backed later. Software signers may optionally attach ML-DSA/SLH-DSA
|
|
199
|
+
overlays (FIPS 204/205) via `matrixscroll[pqc]` without changing hardware firmware.
|
|
199
200
|
|
|
200
201
|
## Common questions
|
|
201
202
|
|
|
@@ -225,7 +226,7 @@ alongside your existing scanners, branch protection, and build attestations.
|
|
|
225
226
|
## Quickstart (CLI)
|
|
226
227
|
|
|
227
228
|
```bash
|
|
228
|
-
pip install "matrixscroll==0.
|
|
229
|
+
pip install "matrixscroll==0.5.0"
|
|
229
230
|
matrixscroll hook-install
|
|
230
231
|
matrixscroll hook-status
|
|
231
232
|
|
|
@@ -252,7 +253,7 @@ See [`docs/quickstart-git.md`](docs/quickstart-git.md) and run
|
|
|
252
253
|
head-ref: ${{ github.event.pull_request.head.sha }}
|
|
253
254
|
base-ref: ${{ github.event.pull_request.base.sha }}
|
|
254
255
|
source: notes
|
|
255
|
-
matrixscroll-version: "0.
|
|
256
|
+
matrixscroll-version: "0.5.0"
|
|
256
257
|
require-mode: emulated
|
|
257
258
|
```
|
|
258
259
|
|
|
@@ -272,7 +273,7 @@ git push origin refs/notes/matrixscroll
|
|
|
272
273
|
head-ref: ${{ github.event.pull_request.head.sha }}
|
|
273
274
|
base-ref: ${{ github.event.pull_request.base.sha }}
|
|
274
275
|
source: notes
|
|
275
|
-
matrixscroll-version: "0.
|
|
276
|
+
matrixscroll-version: "0.5.0"
|
|
276
277
|
summary-output: provenance-summary.json
|
|
277
278
|
```
|
|
278
279
|
|
|
@@ -280,7 +281,7 @@ See [`docs/quickstart-git.md`](docs/quickstart-git.md) and
|
|
|
280
281
|
[`examples/ci/protected-branch.yml`](examples/ci/protected-branch.yml).
|
|
281
282
|
|
|
282
283
|
The `--require-mode`, `--trusted-keys`, and actor or delegation policy checks
|
|
283
|
-
ship in the current release line; examples in this README pin `0.
|
|
284
|
+
ship in the current release line; examples in this README pin `0.5.0`.
|
|
284
285
|
|
|
285
286
|
## Security: Ed25519 via cryptography
|
|
286
287
|
|
|
@@ -312,13 +313,14 @@ when they preserve the same pure Ed25519 byte contract.
|
|
|
312
313
|
- Conformance vectors: [`vectors/`](vectors/)
|
|
313
314
|
- GitHub Action: <https://github.com/SSX360/matrixscroll-verify-action>
|
|
314
315
|
- Agentic AI controls: [`docs/AGENTIC_AI_SECURITY.md`](docs/AGENTIC_AI_SECURITY.md)
|
|
315
|
-
- Site: <https://
|
|
316
|
-
-
|
|
316
|
+
- Site: <https://matrixscroll.com> · Enterprise: <https://ssx360.com/enterprise>
|
|
317
|
+
- [AP2 Vault Card hardware](https://ssx360.com/hardware)
|
|
318
|
+
- SE050 hardware signing: <https://ssx360.com/enterprise#roadmap>
|
|
317
319
|
|
|
318
320
|
## Python API
|
|
319
321
|
|
|
320
322
|
```bash
|
|
321
|
-
pip install "matrixscroll==0.
|
|
323
|
+
pip install "matrixscroll==0.5.0"
|
|
322
324
|
```
|
|
323
325
|
|
|
324
326
|
```python
|
|
@@ -428,7 +430,7 @@ The MCP server exposes **provenance verbs only**: `create_envelope`, `verify_env
|
|
|
428
430
|
Install and register in Cursor / Claude Desktop / VS Code:
|
|
429
431
|
|
|
430
432
|
```bash
|
|
431
|
-
pip install "matrixscroll[mcp]==0.
|
|
433
|
+
pip install "matrixscroll[mcp]==0.5.0"
|
|
432
434
|
matrixscroll-mcp # stdio
|
|
433
435
|
```
|
|
434
436
|
|
|
@@ -6,19 +6,16 @@
|
|
|
6
6
|
|
|
7
7
|
**123 tests** · Hypothesis-verified security properties · [Security properties](docs/SECURITY_PROPERTIES.md)
|
|
8
8
|
|
|
9
|
-
**Signed proof of who — or what — wrote every commit.** Matrix Scroll is
|
|
10
|
-
**
|
|
11
|
-
|
|
12
|
-
offline in CLI, browser, and CI.
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
**
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
**Hosted control plane:** identity, billing, and device confirmation live at
|
|
20
|
-
[ssx360.com](https://ssx360.com/). Teams evaluating protected-branch enforcement should
|
|
21
|
-
[book a provenance pilot](https://ssx360.com/contact?intent=pilot);
|
|
9
|
+
**Signed proof of who — or what — wrote every AI-assisted commit.** Matrix Scroll is an
|
|
10
|
+
**open protocol for cryptographically signed, AI-assisted code provenance** — Ed25519 commit
|
|
11
|
+
envelopes for Git (and universal action envelopes for CI, IaC, and migrations),
|
|
12
|
+
verified offline in CLI, browser, and CI. Software emulated keys ship today; NXP SE050
|
|
13
|
+
secure-element signing is on the roadmap with the same verifier contract.
|
|
14
|
+
|
|
15
|
+
**Hosted control plane:** identity, billing, audit ledger, and Scroll Gate live at
|
|
16
|
+
[ssx360.com](https://ssx360.com/). Enterprise teams evaluating protected-branch enforcement should
|
|
17
|
+
[book a provenance pilot](https://ssx360.com/contact?intent=pilot) or visit
|
|
18
|
+
[ssx360.com/enterprise](https://ssx360.com/enterprise).
|
|
22
19
|
Provisioned pilot and team accounts sign in at [ssx360.com/signup](https://ssx360.com/signup).
|
|
23
20
|
|
|
24
21
|
## Compliance evidence mapping
|
|
@@ -48,18 +45,18 @@ Agents sign commits in-loop via the **provenance-only** MCP server:
|
|
|
48
45
|
```
|
|
49
46
|
|
|
50
47
|
```bash
|
|
51
|
-
pip install "matrixscroll[mcp]==0.
|
|
48
|
+
pip install "matrixscroll[mcp]==0.5.0"
|
|
52
49
|
matrixscroll-mcp # stdio — register in Cursor / Claude Desktop / VS Code
|
|
53
50
|
```
|
|
54
51
|
|
|
55
52
|
**MCP tools (provenance verbs only):** `create_envelope`, `sign_action`, `verify_envelope`,
|
|
56
53
|
`verify_pr_range` (Scroll Gate), `publish_notes`, `status`, `audit_export`, `list_envelopes`,
|
|
57
|
-
`connect_card` (SE050 preview).
|
|
54
|
+
`connect_card` (SE050 hardware preview, roadmap).
|
|
58
55
|
|
|
59
56
|
## Also available — CLI & hooks
|
|
60
57
|
|
|
61
58
|
```bash
|
|
62
|
-
pip install "matrixscroll==0.
|
|
59
|
+
pip install "matrixscroll==0.5.0"
|
|
63
60
|
matrixscroll hook-install
|
|
64
61
|
export MATRIXSCROLL_ACTOR_TYPE=agent
|
|
65
62
|
export MATRIXSCROLL_TOOL=agent-runner
|
|
@@ -123,12 +120,12 @@ canonical UTF-8 JSON bytes (see [`SPEC.md`](SPEC.md) §4). Verifiers reject any
|
|
|
123
120
|
|
|
124
121
|
## Honest limits
|
|
125
122
|
|
|
126
|
-
- Shipping now: PyPI `matrixscroll==0.
|
|
123
|
+
- Shipping now: PyPI `matrixscroll==0.5.0`, Git post-commit hooks,
|
|
127
124
|
`matrixscroll sign-action`, `matrixscroll scroll commit` (thin wrapper),
|
|
128
125
|
`matrixscroll envelope-verify`, Scroll Gate PR verification (partial SLSA L1–2),
|
|
129
126
|
verifier, the GitHub Action, and a USB CDC host transport preview for the
|
|
130
127
|
SE050 rollout path. Emulated mode is the default evaluation path.
|
|
131
|
-
- In progress: nRF52840 + SE050 firmware validation
|
|
128
|
+
- In progress: nRF52840 + SE050 firmware validation for hardware-backed signing, external Ed25519-capable
|
|
132
129
|
hardware key backends, and transparency-log integrations.
|
|
133
130
|
- Not: IAM, sandboxing, prompt filtering, or an agent runtime.
|
|
134
131
|
|
|
@@ -138,8 +135,10 @@ canonical UTF-8 JSON bytes (see [`SPEC.md`](SPEC.md) §4). Verifiers reject any
|
|
|
138
135
|
records who or what signed the change before push.
|
|
139
136
|
- Hardware keys and build attestations remain complementary roots and downstream
|
|
140
137
|
proofs; Matrix Scroll covers commit-time provenance.
|
|
141
|
-
- The public contract stays pure Ed25519 over canonical manifest bytes
|
|
142
|
-
whether the signer is emulated today or
|
|
138
|
+
- The public contract stays pure Ed25519 over canonical manifest bytes for the
|
|
139
|
+
required `signature` block — whether the signer is emulated today or
|
|
140
|
+
hardware-backed later. Software signers may optionally attach ML-DSA/SLH-DSA
|
|
141
|
+
overlays (FIPS 204/205) via `matrixscroll[pqc]` without changing hardware firmware.
|
|
143
142
|
|
|
144
143
|
## Common questions
|
|
145
144
|
|
|
@@ -169,7 +168,7 @@ alongside your existing scanners, branch protection, and build attestations.
|
|
|
169
168
|
## Quickstart (CLI)
|
|
170
169
|
|
|
171
170
|
```bash
|
|
172
|
-
pip install "matrixscroll==0.
|
|
171
|
+
pip install "matrixscroll==0.5.0"
|
|
173
172
|
matrixscroll hook-install
|
|
174
173
|
matrixscroll hook-status
|
|
175
174
|
|
|
@@ -196,7 +195,7 @@ See [`docs/quickstart-git.md`](docs/quickstart-git.md) and run
|
|
|
196
195
|
head-ref: ${{ github.event.pull_request.head.sha }}
|
|
197
196
|
base-ref: ${{ github.event.pull_request.base.sha }}
|
|
198
197
|
source: notes
|
|
199
|
-
matrixscroll-version: "0.
|
|
198
|
+
matrixscroll-version: "0.5.0"
|
|
200
199
|
require-mode: emulated
|
|
201
200
|
```
|
|
202
201
|
|
|
@@ -216,7 +215,7 @@ git push origin refs/notes/matrixscroll
|
|
|
216
215
|
head-ref: ${{ github.event.pull_request.head.sha }}
|
|
217
216
|
base-ref: ${{ github.event.pull_request.base.sha }}
|
|
218
217
|
source: notes
|
|
219
|
-
matrixscroll-version: "0.
|
|
218
|
+
matrixscroll-version: "0.5.0"
|
|
220
219
|
summary-output: provenance-summary.json
|
|
221
220
|
```
|
|
222
221
|
|
|
@@ -224,7 +223,7 @@ See [`docs/quickstart-git.md`](docs/quickstart-git.md) and
|
|
|
224
223
|
[`examples/ci/protected-branch.yml`](examples/ci/protected-branch.yml).
|
|
225
224
|
|
|
226
225
|
The `--require-mode`, `--trusted-keys`, and actor or delegation policy checks
|
|
227
|
-
ship in the current release line; examples in this README pin `0.
|
|
226
|
+
ship in the current release line; examples in this README pin `0.5.0`.
|
|
228
227
|
|
|
229
228
|
## Security: Ed25519 via cryptography
|
|
230
229
|
|
|
@@ -256,13 +255,14 @@ when they preserve the same pure Ed25519 byte contract.
|
|
|
256
255
|
- Conformance vectors: [`vectors/`](vectors/)
|
|
257
256
|
- GitHub Action: <https://github.com/SSX360/matrixscroll-verify-action>
|
|
258
257
|
- Agentic AI controls: [`docs/AGENTIC_AI_SECURITY.md`](docs/AGENTIC_AI_SECURITY.md)
|
|
259
|
-
- Site: <https://
|
|
260
|
-
-
|
|
258
|
+
- Site: <https://matrixscroll.com> · Enterprise: <https://ssx360.com/enterprise>
|
|
259
|
+
- [AP2 Vault Card hardware](https://ssx360.com/hardware)
|
|
260
|
+
- SE050 hardware signing: <https://ssx360.com/enterprise#roadmap>
|
|
261
261
|
|
|
262
262
|
## Python API
|
|
263
263
|
|
|
264
264
|
```bash
|
|
265
|
-
pip install "matrixscroll==0.
|
|
265
|
+
pip install "matrixscroll==0.5.0"
|
|
266
266
|
```
|
|
267
267
|
|
|
268
268
|
```python
|
|
@@ -372,7 +372,7 @@ The MCP server exposes **provenance verbs only**: `create_envelope`, `verify_env
|
|
|
372
372
|
Install and register in Cursor / Claude Desktop / VS Code:
|
|
373
373
|
|
|
374
374
|
```bash
|
|
375
|
-
pip install "matrixscroll[mcp]==0.
|
|
375
|
+
pip install "matrixscroll[mcp]==0.5.0"
|
|
376
376
|
matrixscroll-mcp # stdio
|
|
377
377
|
```
|
|
378
378
|
|
|
@@ -196,3 +196,58 @@ Signed release metadata (version, tag, artifact list). JSON Schema:
|
|
|
196
196
|
|
|
197
197
|
Signed audit or agent-scope evidence. JSON Schema:
|
|
198
198
|
[`schemas/evidence-pack.v1.json`](schemas/evidence-pack.v1.json).
|
|
199
|
+
|
|
200
|
+
## 11. Post-quantum overlay (v1.1 extension)
|
|
201
|
+
|
|
202
|
+
Matrix Scroll v1 **requires** an Ed25519 `signature` block (§5). USB, NFC, and SE050
|
|
203
|
+
hardware signers produce **only** this block today and remain unchanged.
|
|
204
|
+
|
|
205
|
+
Software signers MAY attach an optional `pqc_signatures` array for FIPS 204 (ML-DSA)
|
|
206
|
+
and FIPS 205 (SLH-DSA) post-quantum overlays. This is an **additive** extension;
|
|
207
|
+
verifiers that do not implement PQC MUST still verify Ed25519 and MAY ignore
|
|
208
|
+
`pqc_signatures`.
|
|
209
|
+
|
|
210
|
+
### 11.1 PQC signature block
|
|
211
|
+
|
|
212
|
+
Each element of `pqc_signatures`:
|
|
213
|
+
|
|
214
|
+
```json
|
|
215
|
+
{
|
|
216
|
+
"schema": "matrixscroll.pqc_signature.v1",
|
|
217
|
+
"algorithm": "ml-dsa-65",
|
|
218
|
+
"public_key": "<base64(raw public key bytes)>",
|
|
219
|
+
"value": "<base64(detached signature)>",
|
|
220
|
+
"signed_at": "<RFC 3339 UTC, informational>"
|
|
221
|
+
}
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
Allowed `algorithm` values: `ml-dsa-44`, `ml-dsa-65`, `ml-dsa-87`,
|
|
225
|
+
`slh-dsa-sha2-128s`, `slh-dsa-sha2-128f`.
|
|
226
|
+
|
|
227
|
+
Hardware envelopes (`signature.mode` = `"hardware"`) MUST NOT include
|
|
228
|
+
`pqc_signatures` until secure-element firmware supports PQC. Policy engines
|
|
229
|
+
MUST exempt hardware mode from `require_pqc` rules.
|
|
230
|
+
|
|
231
|
+
### 11.2 Canonical input for PQC (§4.1)
|
|
232
|
+
|
|
233
|
+
PQC signing and verification remove **both** top-level keys `"signature"` and
|
|
234
|
+
`"pqc_signatures"` before applying §4 encoding rules. Because Ed25519 is applied
|
|
235
|
+
first, the PQC signing input is byte-identical to the Ed25519 signing input.
|
|
236
|
+
|
|
237
|
+
### 11.3 Verification
|
|
238
|
+
|
|
239
|
+
1. Verify Ed25519 per §6 (always required).
|
|
240
|
+
2. If `pqc_signatures` is absent, stop (valid for v1-only policy).
|
|
241
|
+
3. For each PQC block: validate `schema`, decode keys, verify against PQC canonical bytes.
|
|
242
|
+
4. If policy requires PQC and verification fails or array is missing (non-hardware), reject.
|
|
243
|
+
|
|
244
|
+
### 11.4 Policy knobs
|
|
245
|
+
|
|
246
|
+
| `require_pqc` | Behavior |
|
|
247
|
+
| ------------- | -------- |
|
|
248
|
+
| `false` (default) | PQC optional |
|
|
249
|
+
| `emulated_only` | Require valid PQC when `signature.mode` is `emulated` or `tpm` |
|
|
250
|
+
| `true` | Require valid PQC for all modes except `hardware` |
|
|
251
|
+
|
|
252
|
+
JSON Schema: [`schemas/pqc-signature.v1.json`](schemas/pqc-signature.v1.json),
|
|
253
|
+
[`schemas/commit-envelope.v1.1.json`](schemas/commit-envelope.v1.1.json).
|
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
# Cryptographic backend (middle path)
|
|
2
2
|
|
|
3
|
-
Matrix Scroll v0.
|
|
3
|
+
Matrix Scroll v0.5.0+ routes all Ed25519 and security-relevant SHA-256
|
|
4
4
|
operations through a single Python module: `matrixscroll/crypto_backend.py`.
|
|
5
5
|
|
|
6
|
+
Post-quantum overlays (ML-DSA FIPS 204, SLH-DSA FIPS 205) are optional and
|
|
7
|
+
implemented via `matrixscroll/pqc.py` when `matrixscroll[pqc]` (liboqs-python)
|
|
8
|
+
is installed. **USB/NFC/SE050 hardware signers remain Ed25519-only.**
|
|
9
|
+
|
|
6
10
|
## Design
|
|
7
11
|
|
|
8
12
|
| Approach | What users install | Crypto implementation |
|
|
@@ -22,6 +26,7 @@ moving primitive work onto battle-tested native code shipped inside official
|
|
|
22
26
|
| Ed25519 key generation | `generate_ed25519_private_key()` | `cryptography.hazmat.primitives.asymmetric.ed25519` |
|
|
23
27
|
| Ed25519 sign / verify | `ed25519_sign`, `ed25519_verify` | Same |
|
|
24
28
|
| SHA-256 (device IDs, gate digests, Rekor bridge) | `sha256`, `sha256_hex` | `cryptography.hazmat.primitives.hashes.SHA256` |
|
|
29
|
+
| ML-DSA / SLH-DSA overlay (optional) | `pqc_sign`, `pqc_verify` | `liboqs-python` via `matrixscroll[pqc]` extra |
|
|
25
30
|
|
|
26
31
|
Git object hashing (`hashlib.sha1` in `matrixscroll/git.py`) stays on the
|
|
27
32
|
stdlib because it implements Git wire-format identifiers, not provenance
|
|
@@ -8,13 +8,13 @@ what ships now before widening the story.
|
|
|
8
8
|
## Baseline on June 21, 2026
|
|
9
9
|
|
|
10
10
|
- GitHub: early public repo, product-first docs, and offline verification
|
|
11
|
-
- Current public release: `matrixscroll==0.
|
|
11
|
+
- Current public release: `matrixscroll==0.5.0`
|
|
12
12
|
- Public trust contract: pure Ed25519 over canonical manifest bytes
|
|
13
13
|
- Hardware path: SSX360 SE050 reference implementation in progress
|
|
14
14
|
|
|
15
15
|
## Next 7 days
|
|
16
16
|
|
|
17
|
-
- Public release: `matrixscroll==0.
|
|
17
|
+
- Public release: `matrixscroll==0.5.0` (universal provenance + scroll commit)
|
|
18
18
|
- make the GitHub Action a real public proof surface
|
|
19
19
|
- align site, README, action docs, and PyPI around one install flow
|
|
20
20
|
- remove broken links and stale release drift from public copy
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Matrix Scroll security properties
|
|
2
2
|
|
|
3
|
-
Machine-checkable guarantees for the reference SDK (v0.
|
|
3
|
+
Machine-checkable guarantees for the reference SDK (v0.5.0). Properties marked
|
|
4
4
|
**verified** have Hypothesis property tests in `tests/test_security_properties.py`.
|
|
5
5
|
Formal TLA+ models are on the public roadmap.
|
|
6
6
|
|
|
@@ -71,7 +71,7 @@ Full wire format: [`SPEC.md`](../SPEC.md). Schema: [`schemas/commit-envelope.v1.
|
|
|
71
71
|
### 1. Install
|
|
72
72
|
|
|
73
73
|
```bash
|
|
74
|
-
pip install "matrixscroll==0.
|
|
74
|
+
pip install "matrixscroll==0.5.0"
|
|
75
75
|
matrixscroll hook-install
|
|
76
76
|
matrixscroll hook-status
|
|
77
77
|
```
|
|
@@ -87,7 +87,7 @@ matrixscroll envelope-verify "$(git rev-parse HEAD)"
|
|
|
87
87
|
|
|
88
88
|
Hooks default to **warn mode**; set `"enforce": true` in `.git/matrixscroll/config.json` to block commits when signing fails. See [`docs/quickstart-git.md`](quickstart-git.md).
|
|
89
89
|
|
|
90
|
-
**Windows:** support landed in matrixscroll **0.2.1**; pin **0.
|
|
90
|
+
**Windows:** support landed in matrixscroll **0.2.1**; pin **0.5.0** in pilot environments.
|
|
91
91
|
|
|
92
92
|
### 3. CI gate
|
|
93
93
|
|
|
@@ -95,12 +95,12 @@ Hooks default to **warn mode**; set `"enforce": true` in `.git/matrixscroll/conf
|
|
|
95
95
|
- uses: SSX360/matrixscroll-verify-action@v1
|
|
96
96
|
with:
|
|
97
97
|
manifest: path/to/signed-manifest.json
|
|
98
|
-
matrixscroll-version: "0.
|
|
98
|
+
matrixscroll-version: "0.5.0"
|
|
99
99
|
require-mode: emulated
|
|
100
100
|
trusted-keys: trusted-keys.json
|
|
101
101
|
```
|
|
102
102
|
|
|
103
|
-
Policy flags (`--require-mode`, `--trusted-keys`) ship in the current release; this whitepaper pins `0.
|
|
103
|
+
Policy flags (`--require-mode`, `--trusted-keys`) ship in the current release; this whitepaper pins `0.5.0` for copy-and-paste examples.
|
|
104
104
|
|
|
105
105
|
### 4. Optional scope manifest
|
|
106
106
|
|
|
@@ -12,7 +12,7 @@ See also the platform copy in [digital-rain/docs/commercial/SSX360_SCROLL.md](ht
|
|
|
12
12
|
## Quick start
|
|
13
13
|
|
|
14
14
|
```bash
|
|
15
|
-
pip install "matrixscroll==0.
|
|
15
|
+
pip install "matrixscroll==0.5.0"
|
|
16
16
|
matrixscroll hook-install
|
|
17
17
|
matrixscroll scroll commit -m "feat: governed commit"
|
|
18
18
|
```
|
|
@@ -5,11 +5,18 @@ This guide details how to submit the `matrixscroll-mcp` server to all major MCP
|
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
## 1. Glama Registry
|
|
8
|
-
- **Status:**
|
|
9
|
-
- **
|
|
8
|
+
- **Status:** Live — quality **A** on [matrixscroll Glama listing](https://glama.ai/mcp/servers/SSX360/matrixscroll) (license A, maintenance A, TDQS tool-set A as of 2026-06-29).
|
|
9
|
+
- **Listing:** [matrixscroll on Glama](https://glama.ai/mcp/servers/SSX360/matrixscroll)
|
|
10
|
+
- **Internal only:** Do **not** submit `digital-rain-mcp` (private SSX360 repo intelligence). If it appears on Glama from an old public scrape, email **support@glama.ai** with server id `xwxknl3sgw` and request delisting of `SSX360/digital-rain`.
|
|
11
|
+
- **TDQS checklist (quality A):**
|
|
12
|
+
1. Every `@mcp.tool()` declares MCP annotations (`readOnlyHint`, `destructiveHint`, `idempotentHint`, `openWorldHint`).
|
|
13
|
+
2. Tool docstrings include **when to use**, **when not to use**, sibling alternatives, side effects, and return shape.
|
|
14
|
+
3. Pydantic `Field(description=...)` on every parameter (Glama introspection reads `tools/list` JSON Schema).
|
|
15
|
+
4. CI guard: `tests/test_mcp_server.py::MCPToolDefinitionTests` asserts ≥80% schema description coverage.
|
|
16
|
+
- **How to publish / re-sync:**
|
|
10
17
|
1. Log in to [Glama.ai](https://glama.ai/mcp).
|
|
11
|
-
2. Sync
|
|
12
|
-
3.
|
|
18
|
+
2. Sync repository `https://github.com/SSX360/matrixscroll` (auto on push; manual sync if stale).
|
|
19
|
+
3. Confirm per-tool TDQS ≥ B and server quality **A** on the listing page.
|
|
13
20
|
|
|
14
21
|
## 2. Official MCP Registry (Model Context Protocol)
|
|
15
22
|
- **Status:** Ready for submission.
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"""Deterministic canonical JSON encoding for Matrix Scroll manifests."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import json
|
|
6
|
+
from typing import Any
|
|
7
|
+
|
|
8
|
+
_SIGNATURE_KEYS = frozenset({"signature", "pqc_signatures"})
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
def _canonical_body(payload: dict[str, Any], *, exclude_pqc: bool) -> dict[str, Any]:
|
|
12
|
+
if exclude_pqc:
|
|
13
|
+
return {k: v for k, v in payload.items() if k not in _SIGNATURE_KEYS}
|
|
14
|
+
return {k: v for k, v in payload.items() if k != "signature"}
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
def _encode(body: dict[str, Any]) -> bytes:
|
|
18
|
+
return json.dumps(
|
|
19
|
+
body,
|
|
20
|
+
sort_keys=True,
|
|
21
|
+
ensure_ascii=True,
|
|
22
|
+
allow_nan=False,
|
|
23
|
+
separators=(",", ":"),
|
|
24
|
+
).encode("utf-8")
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
def canonical_bytes(payload: dict[str, Any]) -> bytes:
|
|
28
|
+
"""Return deterministic signing bytes per SPEC.md section 4 (Ed25519 v1).
|
|
29
|
+
|
|
30
|
+
Excludes ``signature`` and optional ``pqc_signatures`` so Ed25519 verification
|
|
31
|
+
stays valid after a v1.1 PQC overlay is attached.
|
|
32
|
+
"""
|
|
33
|
+
return _encode(_canonical_body(payload, exclude_pqc=True))
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
def canonical_bytes_pqc(payload: dict[str, Any]) -> bytes:
|
|
37
|
+
"""Return signing bytes for PQC overlay (§11) — excludes signature and pqc_signatures."""
|
|
38
|
+
return _encode(_canonical_body(payload, exclude_pqc=True))
|