matrixscroll 0.2.5__tar.gz → 0.2.6__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.
Files changed (108) hide show
  1. {matrixscroll-0.2.5 → matrixscroll-0.2.6}/CHANGELOG.md +23 -2
  2. {matrixscroll-0.2.5 → matrixscroll-0.2.6}/CONTRIBUTING.md +1 -1
  3. matrixscroll-0.2.6/PKG-INFO +267 -0
  4. matrixscroll-0.2.6/README.md +216 -0
  5. matrixscroll-0.2.6/docs/ADOPTER_KIT.md +70 -0
  6. matrixscroll-0.2.6/docs/COMMIT_TIME_VS_ARTIFACT_TIME.md +51 -0
  7. {matrixscroll-0.2.5 → matrixscroll-0.2.6}/docs/COMPARISON.md +1 -1
  8. matrixscroll-0.2.6/docs/FIVE_MINUTES.md +78 -0
  9. matrixscroll-0.2.6/docs/ROADMAP_2026-07.md +44 -0
  10. matrixscroll-0.2.6/docs/SE050_POC_SCOPE.md +92 -0
  11. matrixscroll-0.2.6/docs/SE050_USB_PROTOCOL.md +96 -0
  12. matrixscroll-0.2.6/docs/SOFTWARE_PRODUCTS.md +53 -0
  13. {matrixscroll-0.2.5 → matrixscroll-0.2.6}/docs/WHITEPAPER.md +8 -6
  14. matrixscroll-0.2.6/docs/hardware-provider.md +60 -0
  15. matrixscroll-0.2.6/docs/quickstart-agent.md +64 -0
  16. {matrixscroll-0.2.5 → matrixscroll-0.2.6}/docs/quickstart-claude-code.md +5 -4
  17. {matrixscroll-0.2.5 → matrixscroll-0.2.6}/docs/quickstart-git.md +10 -6
  18. {matrixscroll-0.2.5 → matrixscroll-0.2.6}/docs/rekor-guac-bridge-design.md +1 -1
  19. {matrixscroll-0.2.5 → matrixscroll-0.2.6}/docs/superpowers/specs/2026-06-19-matrixscroll-git-design.md +1 -1
  20. matrixscroll-0.2.6/docs/yubikey-bridge.md +54 -0
  21. matrixscroll-0.2.6/docs/yubikey-smoke.md +22 -0
  22. {matrixscroll-0.2.5 → matrixscroll-0.2.6}/examples/ci/protected-branch.yml +3 -3
  23. {matrixscroll-0.2.5 → matrixscroll-0.2.6}/examples/demo/agent-commit-demo.sh +1 -1
  24. {matrixscroll-0.2.5 → matrixscroll-0.2.6}/matrixscroll/__init__.py +5 -3
  25. {matrixscroll-0.2.5 → matrixscroll-0.2.6}/matrixscroll/manifest.py +7 -31
  26. {matrixscroll-0.2.5 → matrixscroll-0.2.6}/matrixscroll/providers/hardware.py +5 -3
  27. matrixscroll-0.2.6/matrixscroll/providers/se050_transport.py +226 -0
  28. {matrixscroll-0.2.5 → matrixscroll-0.2.6}/matrixscroll/providers/yubikey.py +16 -3
  29. {matrixscroll-0.2.5 → matrixscroll-0.2.6}/pyproject.toml +13 -2
  30. {matrixscroll-0.2.5 → matrixscroll-0.2.6}/tests/fixtures/github-gpgsig-commit.txt +0 -1
  31. {matrixscroll-0.2.5 → matrixscroll-0.2.6}/tests/test_git_envelope.py +1 -1
  32. matrixscroll-0.2.6/tests/test_se050_transport.py +120 -0
  33. {matrixscroll-0.2.5 → matrixscroll-0.2.6}/tests/test_yubikey_provider.py +19 -7
  34. matrixscroll-0.2.5/PKG-INFO +0 -224
  35. matrixscroll-0.2.5/README.md +0 -185
  36. matrixscroll-0.2.5/docs/hardware-provider.md +0 -38
  37. matrixscroll-0.2.5/docs/quickstart-copilot.md +0 -52
  38. matrixscroll-0.2.5/docs/quickstart-cursor.md +0 -57
  39. matrixscroll-0.2.5/docs/yubikey-bridge.md +0 -151
  40. matrixscroll-0.2.5/docs/yubikey-smoke.md +0 -35
  41. matrixscroll-0.2.5/matrixscroll/providers/se050_transport.py +0 -67
  42. matrixscroll-0.2.5/tests/test_se050_transport.py +0 -49
  43. {matrixscroll-0.2.5 → matrixscroll-0.2.6}/.gitignore +0 -0
  44. {matrixscroll-0.2.5 → matrixscroll-0.2.6}/LICENSE +0 -0
  45. {matrixscroll-0.2.5 → matrixscroll-0.2.6}/SECURITY.md +0 -0
  46. {matrixscroll-0.2.5 → matrixscroll-0.2.6}/SPEC.md +0 -0
  47. {matrixscroll-0.2.5 → matrixscroll-0.2.6}/controls/agentic_ai_controls.json +0 -0
  48. {matrixscroll-0.2.5 → matrixscroll-0.2.6}/docs/AGENTIC_AI_SECURITY.md +0 -0
  49. {matrixscroll-0.2.5 → matrixscroll-0.2.6}/docs/CI_HARD_GATE.md +0 -0
  50. {matrixscroll-0.2.5 → matrixscroll-0.2.6}/docs/delegation-attestation-rfc.md +0 -0
  51. {matrixscroll-0.2.5 → matrixscroll-0.2.6}/docs/superpowers/plans/2026-06-19-ci-action-plan.md +0 -0
  52. {matrixscroll-0.2.5 → matrixscroll-0.2.6}/docs/superpowers/plans/2026-06-19-sdk-refactor-plan.md +0 -0
  53. {matrixscroll-0.2.5 → matrixscroll-0.2.6}/examples/agentic_ai_evidence_manifest.json +0 -0
  54. {matrixscroll-0.2.5 → matrixscroll-0.2.6}/examples/agentic_ai_evidence_manifest.signed.json +0 -0
  55. {matrixscroll-0.2.5 → matrixscroll-0.2.6}/examples/commit-envelope.json +0 -0
  56. {matrixscroll-0.2.5 → matrixscroll-0.2.6}/examples/commit-envelope.signed.json +0 -0
  57. {matrixscroll-0.2.5 → matrixscroll-0.2.6}/examples/demo/generate_signed_examples.py +0 -0
  58. {matrixscroll-0.2.5 → matrixscroll-0.2.6}/examples/release-manifest.json +0 -0
  59. {matrixscroll-0.2.5 → matrixscroll-0.2.6}/examples/release-manifest.signed.json +0 -0
  60. {matrixscroll-0.2.5 → matrixscroll-0.2.6}/examples/trusted-keys-policy.json +0 -0
  61. {matrixscroll-0.2.5 → matrixscroll-0.2.6}/matrixscroll/_core.py +0 -0
  62. {matrixscroll-0.2.5 → matrixscroll-0.2.6}/matrixscroll/canonical.py +0 -0
  63. {matrixscroll-0.2.5 → matrixscroll-0.2.6}/matrixscroll/cli.py +0 -0
  64. {matrixscroll-0.2.5 → matrixscroll-0.2.6}/matrixscroll/constants.py +0 -0
  65. {matrixscroll-0.2.5 → matrixscroll-0.2.6}/matrixscroll/errors.py +0 -0
  66. {matrixscroll-0.2.5 → matrixscroll-0.2.6}/matrixscroll/gate.py +0 -0
  67. {matrixscroll-0.2.5 → matrixscroll-0.2.6}/matrixscroll/git.py +0 -0
  68. {matrixscroll-0.2.5 → matrixscroll-0.2.6}/matrixscroll/guac_export.py +0 -0
  69. {matrixscroll-0.2.5 → matrixscroll-0.2.6}/matrixscroll/hooks/post-commit +0 -0
  70. {matrixscroll-0.2.5 → matrixscroll-0.2.6}/matrixscroll/hooks/pre-push +0 -0
  71. {matrixscroll-0.2.5 → matrixscroll-0.2.6}/matrixscroll/policy.py +0 -0
  72. {matrixscroll-0.2.5 → matrixscroll-0.2.6}/matrixscroll/providers/__init__.py +0 -0
  73. {matrixscroll-0.2.5 → matrixscroll-0.2.6}/matrixscroll/providers/base.py +0 -0
  74. {matrixscroll-0.2.5 → matrixscroll-0.2.6}/matrixscroll/providers/emulated.py +0 -0
  75. {matrixscroll-0.2.5 → matrixscroll-0.2.6}/matrixscroll/providers/registry.py +0 -0
  76. {matrixscroll-0.2.5 → matrixscroll-0.2.6}/matrixscroll/providers/tpm.py +0 -0
  77. {matrixscroll-0.2.5 → matrixscroll-0.2.6}/matrixscroll/py.typed +0 -0
  78. {matrixscroll-0.2.5 → matrixscroll-0.2.6}/matrixscroll/rekor_publish.py +0 -0
  79. {matrixscroll-0.2.5 → matrixscroll-0.2.6}/schemas/commit-envelope.v1.json +0 -0
  80. {matrixscroll-0.2.5 → matrixscroll-0.2.6}/schemas/evidence-pack.v1.json +0 -0
  81. {matrixscroll-0.2.5 → matrixscroll-0.2.6}/schemas/release-manifest.v1.json +0 -0
  82. {matrixscroll-0.2.5 → matrixscroll-0.2.6}/tests/__init__.py +0 -0
  83. {matrixscroll-0.2.5 → matrixscroll-0.2.6}/tests/test_agentic_guidance.py +0 -0
  84. {matrixscroll-0.2.5 → matrixscroll-0.2.6}/tests/test_canonical.py +0 -0
  85. {matrixscroll-0.2.5 → matrixscroll-0.2.6}/tests/test_cli.py +0 -0
  86. {matrixscroll-0.2.5 → matrixscroll-0.2.6}/tests/test_core.py +0 -0
  87. {matrixscroll-0.2.5 → matrixscroll-0.2.6}/tests/test_gate.py +0 -0
  88. {matrixscroll-0.2.5 → matrixscroll-0.2.6}/tests/test_guac_rekor.py +0 -0
  89. {matrixscroll-0.2.5 → matrixscroll-0.2.6}/tests/test_policy.py +0 -0
  90. {matrixscroll-0.2.5 → matrixscroll-0.2.6}/tests/test_release_metadata.py +0 -0
  91. {matrixscroll-0.2.5 → matrixscroll-0.2.6}/tests/test_tpm_provider.py +0 -0
  92. {matrixscroll-0.2.5 → matrixscroll-0.2.6}/tests/test_vectors.py +0 -0
  93. {matrixscroll-0.2.5 → matrixscroll-0.2.6}/vectors/README.md +0 -0
  94. {matrixscroll-0.2.5 → matrixscroll-0.2.6}/vectors/_fixture_key.json +0 -0
  95. {matrixscroll-0.2.5 → matrixscroll-0.2.6}/vectors/_generate.py +0 -0
  96. {matrixscroll-0.2.5 → matrixscroll-0.2.6}/vectors/tampered_algorithm.json +0 -0
  97. {matrixscroll-0.2.5 → matrixscroll-0.2.6}/vectors/tampered_device_id.json +0 -0
  98. {matrixscroll-0.2.5 → matrixscroll-0.2.6}/vectors/tampered_field.json +0 -0
  99. {matrixscroll-0.2.5 → matrixscroll-0.2.6}/vectors/tampered_nested.json +0 -0
  100. {matrixscroll-0.2.5 → matrixscroll-0.2.6}/vectors/tampered_public_key.json +0 -0
  101. {matrixscroll-0.2.5 → matrixscroll-0.2.6}/vectors/tampered_schema.json +0 -0
  102. {matrixscroll-0.2.5 → matrixscroll-0.2.6}/vectors/tampered_signature.json +0 -0
  103. {matrixscroll-0.2.5 → matrixscroll-0.2.6}/vectors/unsigned_empty_block.json +0 -0
  104. {matrixscroll-0.2.5 → matrixscroll-0.2.6}/vectors/unsigned_no_block.json +0 -0
  105. {matrixscroll-0.2.5 → matrixscroll-0.2.6}/vectors/valid_commit_envelope.json +0 -0
  106. {matrixscroll-0.2.5 → matrixscroll-0.2.6}/vectors/valid_nested.json +0 -0
  107. {matrixscroll-0.2.5 → matrixscroll-0.2.6}/vectors/valid_simple.json +0 -0
  108. {matrixscroll-0.2.5 → matrixscroll-0.2.6}/vectors/valid_unicode.json +0 -0
@@ -4,9 +4,30 @@ 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.2.5] - 2026-06-24
7
+ ## [0.2.6] - 2026-06-21
8
8
 
9
- Post-HN patch: GitHub gpgsig commit binding, SE050 mock transport, YubiKey pubkey export, Rekor/GUAC CLI MVP.
9
+ SDK rollout hardening: generic public attribution, SE050 host transport preview,
10
+ and repo-local hardware rollout docs.
11
+
12
+ ### Added
13
+ - **USB CDC host transport preview** - `SerialSE050Transport` for newline-delimited
14
+ JSON `ping` / `pubkey` / `sign` framing over the RP2350 USB bridge.
15
+ - **Hardware extra** - `pip install "matrixscroll[hardware]"` now pulls in
16
+ `pyserial` for the SE050 host path.
17
+ - **Rollout docs** - adopter kit, five-minute guide, hardware provider quickstart,
18
+ SE050 protocol reference, and contractor-facing PoC scope kept inside the SDK repo.
19
+
20
+ ### Changed
21
+ - **Public quickstarts** - replaced editor-specific public quickstarts with
22
+ generic agent-facing guidance while keeping the manifest schema and API unchanged.
23
+ - **Hardware messaging** - clarified that the SDK now ships a host transport
24
+ preview and mock path, while real device signing still depends on firmware PoC validation.
25
+ - **Release copy** - aligned README, support docs, CI examples, and package metadata
26
+ around the `0.2.6` rollout surface.
27
+
28
+ ## [0.2.5] - 2026-06-20
29
+
30
+ Credibility and compatibility patch: GitHub gpgsig commit binding, SE050 mock transport, YubiKey pubkey export, Rekor/GUAC CLI MVP.
10
31
 
11
32
  ### Added
12
33
  - **GitHub `gpgsig` commit binding** — verify envelopes against raw commit object SHA when OpenPGP signatures are present.
@@ -36,7 +36,7 @@ For PRs that include agent-assisted commits, publish signed commit envelopes to
36
36
  ```bash
37
37
  matrixscroll hook-install
38
38
  export MATRIXSCROLL_ACTOR_TYPE=agent # or human / ci as appropriate
39
- export MATRIXSCROLL_TOOL=cursor # or your IDE / agent tool name
39
+ export MATRIXSCROLL_TOOL=agent-runner # or your editor / agent tool name
40
40
  git commit -m "feat: your change"
41
41
  matrixscroll envelope-publish-notes --base origin/main --head HEAD
42
42
  git push origin refs/notes/matrixscroll
@@ -0,0 +1,267 @@
1
+ Metadata-Version: 2.4
2
+ Name: matrixscroll
3
+ Version: 0.2.6
4
+ Summary: Signed provenance for agent-assisted Git commits with offline verification; emulated Ed25519 ships today and the SE050 hardware path remains an optional preview.
5
+ Project-URL: Homepage, https://matrixscroll.com
6
+ Project-URL: Documentation, https://matrixscroll.com/docs
7
+ Project-URL: Source, https://github.com/SSX360/matrixscroll
8
+ Project-URL: Issues, https://github.com/SSX360/matrixscroll/issues
9
+ Project-URL: Specification, https://github.com/SSX360/matrixscroll/blob/main/SPEC.md
10
+ Project-URL: Whitepaper, https://github.com/SSX360/matrixscroll/blob/main/docs/WHITEPAPER.md
11
+ Project-URL: Verifier, https://matrixscroll.com/verify
12
+ Project-URL: Compare, https://matrixscroll.com/compare
13
+ Project-URL: Changelog, https://github.com/SSX360/matrixscroll/blob/main/CHANGELOG.md
14
+ Project-URL: Discussions, https://github.com/SSX360/matrixscroll/discussions
15
+ Project-URL: Security, https://github.com/SSX360/matrixscroll/blob/main/SECURITY.md
16
+ Project-URL: GitHub Action, https://github.com/SSX360/matrixscroll-verify-action
17
+ Project-URL: PyPI Provenance, https://pypi.org/project/matrixscroll/
18
+ Project-URL: Tests, https://github.com/SSX360/matrixscroll/tree/main/tests
19
+ Project-URL: Public Roadmap, https://github.com/SSX360/matrixscroll/blob/main/docs/ROADMAP_2026-07.md
20
+ Project-URL: Reference Device, https://matrixscroll.com/device
21
+ Author-email: SSX360 <security@matrixscroll.com>
22
+ License-Expression: Apache-2.0
23
+ License-File: LICENSE
24
+ Keywords: ai,ed25519,matrixscroll,provenance,root-of-trust,secure-element,signing,ssx360,supply-chain
25
+ Classifier: Development Status :: 4 - Beta
26
+ Classifier: Intended Audience :: Developers
27
+ Classifier: Intended Audience :: Information Technology
28
+ Classifier: License :: OSI Approved :: Apache Software License
29
+ Classifier: Operating System :: OS Independent
30
+ Classifier: Programming Language :: Python :: 3
31
+ Classifier: Programming Language :: Python :: 3 :: Only
32
+ Classifier: Programming Language :: Python :: 3.10
33
+ Classifier: Programming Language :: Python :: 3.11
34
+ Classifier: Programming Language :: Python :: 3.12
35
+ Classifier: Programming Language :: Python :: 3.13
36
+ Classifier: Topic :: Security :: Cryptography
37
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
38
+ Classifier: Typing :: Typed
39
+ Requires-Python: >=3.10
40
+ Requires-Dist: cryptography>=41.0
41
+ Provides-Extra: dev
42
+ Requires-Dist: build>=1.0; extra == 'dev'
43
+ Requires-Dist: pytest>=7.4; extra == 'dev'
44
+ Provides-Extra: git
45
+ Provides-Extra: hardware
46
+ Requires-Dist: pyserial>=3.5; extra == 'hardware'
47
+ Provides-Extra: tpm
48
+ Provides-Extra: yubikey
49
+ Requires-Dist: python-pkcs11>=0.7; extra == 'yubikey'
50
+ Description-Content-Type: text/markdown
51
+
52
+ # Matrix Scroll
53
+
54
+ Signed provenance for agent-assisted Git commits with offline verification.
55
+
56
+ Matrix Scroll is a cryptographic evidence layer for Git. When an agent, CI
57
+ workflow, or human operator produces a commit, a signed commit envelope can
58
+ record the actor, tool, and optional bounded scope. Anyone can verify that
59
+ envelope locally, in CI, or in the browser without trusting the editor session
60
+ that produced it.
61
+
62
+ The reference SDK ships pure Ed25519 over canonical manifest bytes today. The
63
+ SSX360 / NXP SE050 path is the compatible next trust layer and remains a
64
+ preview path until device acceptance is complete.
65
+
66
+ ## Honest limits
67
+
68
+ - Shipping now: PyPI `matrixscroll==0.2.6`, Git post-commit hooks,
69
+ `matrixscroll envelope-verify`, Scroll Gate PR verification, browser
70
+ verifier, the GitHub Action, and a USB CDC host transport preview for the
71
+ SE050 rollout path.
72
+ - In progress: RP2350 + SE050 firmware validation, external Ed25519-capable
73
+ hardware key backends, and transparency-log integrations.
74
+ - Not: IAM, sandboxing, prompt filtering, or an agent runtime.
75
+
76
+ ## Quickstart
77
+
78
+ ```bash
79
+ pip install "matrixscroll==0.2.6"
80
+ matrixscroll hook-install
81
+
82
+ export MATRIXSCROLL_ACTOR_TYPE=agent
83
+ export MATRIXSCROLL_TOOL=agent-runner
84
+ git commit -m "feat: agent-assisted change"
85
+
86
+ matrixscroll envelope-verify "$(git rev-parse HEAD)"
87
+ ```
88
+
89
+ See [`docs/quickstart-git.md`](docs/quickstart-git.md) and run
90
+ [`examples/demo/agent-commit-demo.sh`](examples/demo/agent-commit-demo.sh).
91
+
92
+ ## CI verify
93
+
94
+ ### Scroll Gate for a PR commit range
95
+
96
+ ```yaml
97
+ - uses: actions/checkout@v4
98
+ with:
99
+ fetch-depth: 0
100
+ - uses: SSX360/matrixscroll-verify-action@v1
101
+ with:
102
+ head-ref: ${{ github.event.pull_request.head.sha }}
103
+ base-ref: ${{ github.event.pull_request.base.sha }}
104
+ source: notes
105
+ matrixscroll-version: "0.2.6"
106
+ require-mode: emulated
107
+ ```
108
+
109
+ Publish envelopes to git notes before review:
110
+
111
+ ```bash
112
+ matrixscroll envelope-publish-notes --base origin/main --head HEAD
113
+ git push origin refs/notes/matrixscroll
114
+ ```
115
+
116
+ ```yaml
117
+ - uses: actions/checkout@v4
118
+ with:
119
+ fetch-depth: 0
120
+ - uses: SSX360/matrixscroll-verify-action@v1
121
+ with:
122
+ head-ref: ${{ github.event.pull_request.head.sha }}
123
+ base-ref: ${{ github.event.pull_request.base.sha }}
124
+ source: notes
125
+ matrixscroll-version: "0.2.6"
126
+ summary-output: provenance-summary.json
127
+ ```
128
+
129
+ See [`docs/quickstart-git.md`](docs/quickstart-git.md) and
130
+ [`examples/ci/protected-branch.yml`](examples/ci/protected-branch.yml).
131
+
132
+ The `--require-mode`, `--trusted-keys`, and actor or delegation policy checks
133
+ are available in the `0.2.x` line; the examples in this README pin `0.2.6`.
134
+
135
+ ## Why it is different from Sigstore
136
+
137
+ Sigstore, GitHub artifact attestations, and SLSA answer "what was built in
138
+ CI?" Matrix Scroll answers "who signed this commit before push?" The systems
139
+ are complementary: Matrix Scroll signs commit envelopes at commit time, while
140
+ artifact-attestation systems sign build outputs later in the delivery chain.
141
+
142
+ Matrix Scroll does not compete with general authentication keys on their home
143
+ field. Existing hardware roots can become Matrix Scroll signing backends only
144
+ when they preserve the same pure Ed25519 byte contract.
145
+
146
+ ## Public proof links
147
+
148
+ - Browser verifier: <https://matrixscroll.com/verify/>
149
+ - Compare page: <https://matrixscroll.com/compare/>
150
+ - Specification: [`SPEC.md`](SPEC.md)
151
+ - Commit envelope schema: [`schemas/commit-envelope.v1.json`](schemas/commit-envelope.v1.json)
152
+ - Whitepaper: [`docs/WHITEPAPER.md`](docs/WHITEPAPER.md)
153
+ - Conformance vectors: [`vectors/`](vectors/)
154
+ - GitHub Action: <https://github.com/SSX360/matrixscroll-verify-action>
155
+ - Agentic AI controls: [`docs/AGENTIC_AI_SECURITY.md`](docs/AGENTIC_AI_SECURITY.md)
156
+ - Site: <https://matrixscroll.com>
157
+ - Reference device path: <https://matrixscroll.com/device/>
158
+
159
+ ## Python API
160
+
161
+ ```bash
162
+ pip install "matrixscroll==0.2.6"
163
+ ```
164
+
165
+ ```python
166
+ import matrixscroll
167
+
168
+ print(matrixscroll.status())
169
+ # {'schema': 'matrixscroll.identity.v1', 'available': True,
170
+ # 'mode': 'emulated', 'device_id': 'MS-A3F2-9C81', ...}
171
+
172
+ signed = matrixscroll.sign_manifest({"release": "v1.0.0", "artifacts": [...]})
173
+
174
+ assert matrixscroll.verify_manifest(signed)
175
+ ```
176
+
177
+ ## CLI
178
+
179
+ ```bash
180
+ $ matrixscroll status
181
+ {
182
+ "available": true,
183
+ "device_id": "MS-A3F2-9C81",
184
+ "mode": "emulated",
185
+ "public_key": "...",
186
+ "schema": "matrixscroll.identity.v1"
187
+ }
188
+
189
+ $ matrixscroll sign release.json > release.signed.json
190
+ $ matrixscroll verify release.signed.json
191
+ {"device_id": "MS-A3F2-9C81", "mode": "emulated", "ok": true, "signed_at": "..."}
192
+ ```
193
+
194
+ `matrixscroll verify` exits `0` on a valid signature and `2` on failure
195
+ (tampered manifest, missing signature block, wrong schema or algorithm,
196
+ mismatched device ID, malformed public key, unreadable file).
197
+
198
+ ## How it works
199
+
200
+ ```text
201
+ your IDE / agent / CI
202
+ |
203
+ | commit envelope, release manifest, evidence pack, SBOM
204
+ v
205
+ matrixscroll.sign_manifest(...) / post-commit hook
206
+ |
207
+ | canonical JSON (sorted keys, ASCII-escaped, no NaN,
208
+ | signature block excluded from input)
209
+ v
210
+ IdentityProvider --> Ed25519 signature
211
+ (L1 emulated today,
212
+ SSX360 / SE050 roadmap)
213
+ |
214
+ v
215
+ signed document --> matrixscroll.verify_manifest(...)
216
+ (anyone, anywhere, offline)
217
+ ```
218
+
219
+ Switch providers with `MATRIXSCROLL_MODE`. Hardware mode includes a USB CDC
220
+ host transport preview and a mock path for CI; real SE050 signing still
221
+ depends on device firmware validation. External-key backends stay out of the
222
+ mainline until they can sign the same canonical bytes with Ed25519.
223
+
224
+ ## Compliance levels
225
+
226
+ | Level | Provider | Backed by | Status |
227
+ | ----- | -------- | --------- | ------ |
228
+ | **L1** Emulated | `EmulatedProvider` | Software key, file-backed (0600) | Shipping |
229
+ | **L2** Hardware | `HardwareProvider` | NXP SE050 secure element (SSX360) | In progress |
230
+ | **L3** Attested | future | L2 + remote attestation | Roadmap |
231
+
232
+ `status()` exposes the active level via the `mode` and `available` fields.
233
+
234
+ ## Storage and trust boundaries
235
+
236
+ - Emulated key store: `~/.matrixscroll/device.json`
237
+ (override with `MATRIXSCROLL_HOME`).
238
+ - The directory is created `0700`; the seed file is opened `0600` with
239
+ `O_CREAT|O_EXCL` so the private seed is never momentarily world-readable.
240
+ - A corrupt or truncated store fails loud (`IdentityError`) rather than
241
+ silently minting a fresh identity.
242
+ - The planned hardware path holds nothing private on disk; the seed is sealed
243
+ in the secure element.
244
+
245
+ ## Reference implementation, not the only one
246
+
247
+ Matrix Scroll is a protocol. This Python package is the reference. We welcome
248
+ implementations in Rust, Go, TypeScript, and embedded C. Run them against
249
+ [`vectors/`](vectors/) to self-certify. See `CONTRIBUTING.md`.
250
+
251
+ ## Agentic AI guidance proof
252
+
253
+ The repo includes a machine-readable control matrix at
254
+ [`controls/agentic_ai_controls.json`](controls/agentic_ai_controls.json), an
255
+ example bounded-agent evidence manifest at
256
+ [`examples/agentic_ai_evidence_manifest.json`](examples/agentic_ai_evidence_manifest.json),
257
+ and executable checks in `tests/test_agentic_guidance.py`.
258
+
259
+ ## License
260
+
261
+ - Code: **Apache-2.0** (`LICENSE`).
262
+ - Specification text (`SPEC.md`, `vectors/`): **CC0 1.0** - public domain.
263
+
264
+ ## Security
265
+
266
+ See [`SECURITY.md`](SECURITY.md). Report vulnerabilities privately to
267
+ **security@matrixscroll.com** or via a GitHub Security Advisory.
@@ -0,0 +1,216 @@
1
+ # Matrix Scroll
2
+
3
+ Signed provenance for agent-assisted Git commits with offline verification.
4
+
5
+ Matrix Scroll is a cryptographic evidence layer for Git. When an agent, CI
6
+ workflow, or human operator produces a commit, a signed commit envelope can
7
+ record the actor, tool, and optional bounded scope. Anyone can verify that
8
+ envelope locally, in CI, or in the browser without trusting the editor session
9
+ that produced it.
10
+
11
+ The reference SDK ships pure Ed25519 over canonical manifest bytes today. The
12
+ SSX360 / NXP SE050 path is the compatible next trust layer and remains a
13
+ preview path until device acceptance is complete.
14
+
15
+ ## Honest limits
16
+
17
+ - Shipping now: PyPI `matrixscroll==0.2.6`, Git post-commit hooks,
18
+ `matrixscroll envelope-verify`, Scroll Gate PR verification, browser
19
+ verifier, the GitHub Action, and a USB CDC host transport preview for the
20
+ SE050 rollout path.
21
+ - In progress: RP2350 + SE050 firmware validation, external Ed25519-capable
22
+ hardware key backends, and transparency-log integrations.
23
+ - Not: IAM, sandboxing, prompt filtering, or an agent runtime.
24
+
25
+ ## Quickstart
26
+
27
+ ```bash
28
+ pip install "matrixscroll==0.2.6"
29
+ matrixscroll hook-install
30
+
31
+ export MATRIXSCROLL_ACTOR_TYPE=agent
32
+ export MATRIXSCROLL_TOOL=agent-runner
33
+ git commit -m "feat: agent-assisted change"
34
+
35
+ matrixscroll envelope-verify "$(git rev-parse HEAD)"
36
+ ```
37
+
38
+ See [`docs/quickstart-git.md`](docs/quickstart-git.md) and run
39
+ [`examples/demo/agent-commit-demo.sh`](examples/demo/agent-commit-demo.sh).
40
+
41
+ ## CI verify
42
+
43
+ ### Scroll Gate for a PR commit range
44
+
45
+ ```yaml
46
+ - uses: actions/checkout@v4
47
+ with:
48
+ fetch-depth: 0
49
+ - uses: SSX360/matrixscroll-verify-action@v1
50
+ with:
51
+ head-ref: ${{ github.event.pull_request.head.sha }}
52
+ base-ref: ${{ github.event.pull_request.base.sha }}
53
+ source: notes
54
+ matrixscroll-version: "0.2.6"
55
+ require-mode: emulated
56
+ ```
57
+
58
+ Publish envelopes to git notes before review:
59
+
60
+ ```bash
61
+ matrixscroll envelope-publish-notes --base origin/main --head HEAD
62
+ git push origin refs/notes/matrixscroll
63
+ ```
64
+
65
+ ```yaml
66
+ - uses: actions/checkout@v4
67
+ with:
68
+ fetch-depth: 0
69
+ - uses: SSX360/matrixscroll-verify-action@v1
70
+ with:
71
+ head-ref: ${{ github.event.pull_request.head.sha }}
72
+ base-ref: ${{ github.event.pull_request.base.sha }}
73
+ source: notes
74
+ matrixscroll-version: "0.2.6"
75
+ summary-output: provenance-summary.json
76
+ ```
77
+
78
+ See [`docs/quickstart-git.md`](docs/quickstart-git.md) and
79
+ [`examples/ci/protected-branch.yml`](examples/ci/protected-branch.yml).
80
+
81
+ The `--require-mode`, `--trusted-keys`, and actor or delegation policy checks
82
+ are available in the `0.2.x` line; the examples in this README pin `0.2.6`.
83
+
84
+ ## Why it is different from Sigstore
85
+
86
+ Sigstore, GitHub artifact attestations, and SLSA answer "what was built in
87
+ CI?" Matrix Scroll answers "who signed this commit before push?" The systems
88
+ are complementary: Matrix Scroll signs commit envelopes at commit time, while
89
+ artifact-attestation systems sign build outputs later in the delivery chain.
90
+
91
+ Matrix Scroll does not compete with general authentication keys on their home
92
+ field. Existing hardware roots can become Matrix Scroll signing backends only
93
+ when they preserve the same pure Ed25519 byte contract.
94
+
95
+ ## Public proof links
96
+
97
+ - Browser verifier: <https://matrixscroll.com/verify/>
98
+ - Compare page: <https://matrixscroll.com/compare/>
99
+ - Specification: [`SPEC.md`](SPEC.md)
100
+ - Commit envelope schema: [`schemas/commit-envelope.v1.json`](schemas/commit-envelope.v1.json)
101
+ - Whitepaper: [`docs/WHITEPAPER.md`](docs/WHITEPAPER.md)
102
+ - Conformance vectors: [`vectors/`](vectors/)
103
+ - GitHub Action: <https://github.com/SSX360/matrixscroll-verify-action>
104
+ - Agentic AI controls: [`docs/AGENTIC_AI_SECURITY.md`](docs/AGENTIC_AI_SECURITY.md)
105
+ - Site: <https://matrixscroll.com>
106
+ - Reference device path: <https://matrixscroll.com/device/>
107
+
108
+ ## Python API
109
+
110
+ ```bash
111
+ pip install "matrixscroll==0.2.6"
112
+ ```
113
+
114
+ ```python
115
+ import matrixscroll
116
+
117
+ print(matrixscroll.status())
118
+ # {'schema': 'matrixscroll.identity.v1', 'available': True,
119
+ # 'mode': 'emulated', 'device_id': 'MS-A3F2-9C81', ...}
120
+
121
+ signed = matrixscroll.sign_manifest({"release": "v1.0.0", "artifacts": [...]})
122
+
123
+ assert matrixscroll.verify_manifest(signed)
124
+ ```
125
+
126
+ ## CLI
127
+
128
+ ```bash
129
+ $ matrixscroll status
130
+ {
131
+ "available": true,
132
+ "device_id": "MS-A3F2-9C81",
133
+ "mode": "emulated",
134
+ "public_key": "...",
135
+ "schema": "matrixscroll.identity.v1"
136
+ }
137
+
138
+ $ matrixscroll sign release.json > release.signed.json
139
+ $ matrixscroll verify release.signed.json
140
+ {"device_id": "MS-A3F2-9C81", "mode": "emulated", "ok": true, "signed_at": "..."}
141
+ ```
142
+
143
+ `matrixscroll verify` exits `0` on a valid signature and `2` on failure
144
+ (tampered manifest, missing signature block, wrong schema or algorithm,
145
+ mismatched device ID, malformed public key, unreadable file).
146
+
147
+ ## How it works
148
+
149
+ ```text
150
+ your IDE / agent / CI
151
+ |
152
+ | commit envelope, release manifest, evidence pack, SBOM
153
+ v
154
+ matrixscroll.sign_manifest(...) / post-commit hook
155
+ |
156
+ | canonical JSON (sorted keys, ASCII-escaped, no NaN,
157
+ | signature block excluded from input)
158
+ v
159
+ IdentityProvider --> Ed25519 signature
160
+ (L1 emulated today,
161
+ SSX360 / SE050 roadmap)
162
+ |
163
+ v
164
+ signed document --> matrixscroll.verify_manifest(...)
165
+ (anyone, anywhere, offline)
166
+ ```
167
+
168
+ Switch providers with `MATRIXSCROLL_MODE`. Hardware mode includes a USB CDC
169
+ host transport preview and a mock path for CI; real SE050 signing still
170
+ depends on device firmware validation. External-key backends stay out of the
171
+ mainline until they can sign the same canonical bytes with Ed25519.
172
+
173
+ ## Compliance levels
174
+
175
+ | Level | Provider | Backed by | Status |
176
+ | ----- | -------- | --------- | ------ |
177
+ | **L1** Emulated | `EmulatedProvider` | Software key, file-backed (0600) | Shipping |
178
+ | **L2** Hardware | `HardwareProvider` | NXP SE050 secure element (SSX360) | In progress |
179
+ | **L3** Attested | future | L2 + remote attestation | Roadmap |
180
+
181
+ `status()` exposes the active level via the `mode` and `available` fields.
182
+
183
+ ## Storage and trust boundaries
184
+
185
+ - Emulated key store: `~/.matrixscroll/device.json`
186
+ (override with `MATRIXSCROLL_HOME`).
187
+ - The directory is created `0700`; the seed file is opened `0600` with
188
+ `O_CREAT|O_EXCL` so the private seed is never momentarily world-readable.
189
+ - A corrupt or truncated store fails loud (`IdentityError`) rather than
190
+ silently minting a fresh identity.
191
+ - The planned hardware path holds nothing private on disk; the seed is sealed
192
+ in the secure element.
193
+
194
+ ## Reference implementation, not the only one
195
+
196
+ Matrix Scroll is a protocol. This Python package is the reference. We welcome
197
+ implementations in Rust, Go, TypeScript, and embedded C. Run them against
198
+ [`vectors/`](vectors/) to self-certify. See `CONTRIBUTING.md`.
199
+
200
+ ## Agentic AI guidance proof
201
+
202
+ The repo includes a machine-readable control matrix at
203
+ [`controls/agentic_ai_controls.json`](controls/agentic_ai_controls.json), an
204
+ example bounded-agent evidence manifest at
205
+ [`examples/agentic_ai_evidence_manifest.json`](examples/agentic_ai_evidence_manifest.json),
206
+ and executable checks in `tests/test_agentic_guidance.py`.
207
+
208
+ ## License
209
+
210
+ - Code: **Apache-2.0** (`LICENSE`).
211
+ - Specification text (`SPEC.md`, `vectors/`): **CC0 1.0** - public domain.
212
+
213
+ ## Security
214
+
215
+ See [`SECURITY.md`](SECURITY.md). Report vulnerabilities privately to
216
+ **security@matrixscroll.com** or via a GitHub Security Advisory.
@@ -0,0 +1,70 @@
1
+ # Adopter Kit
2
+
3
+ This page is for OSS maintainers, platform teams, and design-partner engineers
4
+ who want to trial Matrix Scroll without changing their core workflow.
5
+
6
+ ## Best first-fit teams
7
+
8
+ - OSS repos with active PR review and at least one protected branch
9
+ - platform or DevSecOps teams evaluating agent-assisted coding controls
10
+ - teams that already use GitHub Actions and can add one verification job
11
+
12
+ ## 15-minute pilot
13
+
14
+ 1. Install `matrixscroll==0.2.6` in one repo.
15
+ 2. Run `matrixscroll hook-install`.
16
+ 3. Make one agent-assisted commit and verify it locally.
17
+ 4. Publish notes with `matrixscroll envelope-publish-notes`.
18
+ 5. Add `SSX360/matrixscroll-verify-action@v1` to PR CI.
19
+
20
+ ## Suggested evaluation workflow
21
+
22
+ ```yaml
23
+ name: Verify PR commit envelopes
24
+
25
+ on:
26
+ pull_request:
27
+ types: [opened, synchronize, reopened]
28
+
29
+ jobs:
30
+ verify-provenance:
31
+ runs-on: ubuntu-latest
32
+ steps:
33
+ - uses: actions/checkout@v4
34
+ with:
35
+ fetch-depth: 0
36
+ - uses: SSX360/matrixscroll-verify-action@v1
37
+ with:
38
+ head-ref: ${{ github.event.pull_request.head.sha }}
39
+ base-ref: ${{ github.event.pull_request.base.sha }}
40
+ source: notes
41
+ matrixscroll-version: "0.2.6"
42
+ require-mode: emulated
43
+ ```
44
+
45
+ ## What to collect during the pilot
46
+
47
+ - one passing local `envelope-verify`
48
+ - one passing PR range check
49
+ - one example of a failed verify after tampering or missing notes
50
+ - reviewer feedback on whether actor / tool attribution is useful
51
+
52
+ ## Success criteria
53
+
54
+ - the team can explain the difference between commit-time and artifact-time proof
55
+ - the GitHub Action is understandable to the repo owner
56
+ - the team can point to one real decision that the envelope data improved
57
+
58
+ ## What not to assume
59
+
60
+ - L1 emulated mode is not a hardware root of trust
61
+ - Matrix Scroll does not replace IAM or sandboxing
62
+ - Matrix Scroll does not replace release-signing or artifact attestations
63
+
64
+ ## Public follow-through
65
+
66
+ If a pilot works, publish one of these:
67
+
68
+ - a short repo note describing the evaluation
69
+ - a screenshot of the passing GitHub Action
70
+ - a testimonial about why commit-time attribution mattered
@@ -0,0 +1,51 @@
1
+ # Commit-Time Proof vs Artifact-Time Proof
2
+
3
+ Matrix Scroll is easiest to understand when compared to the supply-chain tools
4
+ developers already know.
5
+
6
+ ## The short version
7
+
8
+ - **Matrix Scroll:** "Who signed this commit before push?"
9
+ - **Sigstore / GitHub attestations / SLSA:** "What was built in CI?"
10
+
11
+ These answers are different, and mature teams usually want both.
12
+
13
+ ## Side-by-side
14
+
15
+ | Question | Matrix Scroll | Sigstore / GitHub attestations / SLSA |
16
+ |----------|---------------|----------------------------------------|
17
+ | Primary layer | Git commit | Build artifact |
18
+ | Timing | Before push | After build |
19
+ | Main unit | Commit envelope | Package, container, or predicate |
20
+ | Actor / tool in record | Yes | Usually no |
21
+ | Offline verify | Yes | Varies by workflow |
22
+ | Hardware path | In progress | External to the standard flow |
23
+
24
+ ## Where Matrix Scroll fits
25
+
26
+ Use Matrix Scroll when you need:
27
+
28
+ - evidence that an agent, CI job, or human produced a commit
29
+ - a verifier that works on any clone
30
+ - a commit-native gate before merge
31
+
32
+ Use artifact-layer tools when you need:
33
+
34
+ - release signing
35
+ - container provenance
36
+ - SBOM / predicate chains
37
+ - deployment and registry policy
38
+
39
+ ## How to use them together
40
+
41
+ 1. Sign agent-assisted commits with Matrix Scroll.
42
+ 2. Verify commit ranges in PRs with `SSX360/matrixscroll-verify-action@v1`.
43
+ 3. Keep Sigstore, GitHub attestations, or SLSA on the release path.
44
+
45
+ That gives teams both commit-time attribution and artifact-time provenance.
46
+
47
+ ## Public proof links
48
+
49
+ - [Compare page](https://matrixscroll.com/compare/)
50
+ - [Browser verifier](https://matrixscroll.com/verify/)
51
+ - [SPEC.md](../SPEC.md)
@@ -60,7 +60,7 @@ No single competitor listed above combines all four today.
60
60
  - **CI gate:** Scroll Gate ships in **0.2.3+** — PR commit-range verification via `envelope-verify-range`, git notes transport (`refs/notes/matrixscroll`), and filesystem bundles. [`matrixscroll-verify-action`](https://github.com/SSX360/matrixscroll-verify-action) supports `head-ref`/`base-ref` range mode with agent/human counts.
61
61
  - **Owner/delegation attestation:** Optional `delegation` block in commit envelope schema (**0.2.4+**); see [`delegation-attestation-rfc.md`](delegation-attestation-rfc.md). Alien still leads on OIDC/DPoP owner binding.
62
62
  - **Multi-agent commits:** Multiple actors in one envelope — on the roadmap.
63
- - **Rekor / transparency log:** Not shipped yet; would align with Sigstore ecosystem expectations.
63
+ - **Rekor / GUAC export:** Dry-run CLI ships in **0.2.6** (`envelope-publish-rekor`, `envelope-export-guac`); full Rekor upload integration still in progress.
64
64
  - **Hardware:** SSX360 reference device and Scroll Key retail are **in progress**; L1 emulated key is what you can use now.
65
65
 
66
66
  ## When to use what