Skip to content

Commit 91d2b48

Browse files
committed
docs: add release verification guide
1 parent 2fe1298 commit 91d2b48

11 files changed

Lines changed: 297 additions & 2 deletions

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -474,6 +474,7 @@ deployment project, secrets, exchange credentials, and runtime state.
474474
- [docs/railway-deploy.md](docs/railway-deploy.md)
475475
- [docs/distribution.md](docs/distribution.md)
476476
- [docs/release.md](docs/release.md)
477+
- [docs/release-verification.md](docs/release-verification.md)
477478

478479
## Contributor Paths
479480

@@ -571,6 +572,7 @@ Machine-readable entrypoints:
571572
- [Agentic Contribution](docs/agentic-contribution.md)
572573
- [Contributor Issue Board](docs/contributor-issue-board.md)
573574
- [Launch Scorecard](docs/launch-scorecard.md)
575+
- [Release Verification](docs/release-verification.md)
574576
- [Roadmap](docs/roadmap.md)
575577

576578
## License

docs/backlog.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,9 @@ issues and three help-wanted issues for agentic and human contributors.
2323
The corresponding live issues are listed in
2424
[docs/contributor-issue-board.md](contributor-issue-board.md).
2525

26+
Completed seed issues move to the completed section on the board and keep their
27+
source-controlled acceptance criteria in [launch issues](launch-issues.md).
28+
2629
## Example Contribution Shapes
2730

2831
### Add a paper-first strategy plugin
@@ -64,6 +67,7 @@ Evidence:
6467

6568
- [Release notes](releases/v0.1.1.md)
6669
- [Clean-download release evidence](releases/v0.1.1-evidence.md)
70+
- [Release verification guide](release-verification.md)
6771

6872
Do not create new first-release tasks unless a future release target changes
6973
artifact requirements or public safety claims.

docs/contributor-issue-board.md

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,11 @@ Use the GitHub labels when choosing work:
2323

2424
- [#23 Expand read-only MCP strategy resources](https://github.com/zero-intel/zero/issues/23)
2525
- [#24 Design public Network empty and stale states](https://github.com/zero-intel/zero/issues/24)
26-
- [#25 Add release evidence reader docs](https://github.com/zero-intel/zero/issues/25)
26+
27+
## Completed Seed Issues
28+
29+
- [#25 Add release evidence reader docs](https://github.com/zero-intel/zero/issues/25) -
30+
delivered in [Release Verification Guide](release-verification.md).
2731

2832
## Contribution Rules
2933

docs/launch-issues.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,8 @@ Labels: `help wanted`, `release`, `docs`, `packaging`
151151

152152
GitHub: [#25](https://github.com/zero-intel/zero/issues/25)
153153

154+
Status: delivered in [Release Verification Guide](release-verification.md).
155+
154156
Add a short guide that explains how a user verifies a ZERO release from scratch:
155157
checksums, GitHub artifact attestations, SBOM/provenance metadata, Homebrew
156158
formula checks, and clean-download evidence.

docs/launch-scorecard.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,8 @@ reserved for ZERO Intelligence.
6161
- Public contribution, security, governance, support, and issue templates
6262
- First-release notes template, live contributor issue board, and launch issue
6363
seed with five good-first issues and three help-wanted issues
64+
- Reader-focused release verification guide covering checksums, attestations,
65+
SBOM/provenance metadata, Homebrew formula drift, and clean-download evidence
6466
- Public boundary audit from the private repo
6567

6668
## Paper-Only

docs/llms-full.txt

Lines changed: 147 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ Use this bundle for retrieval and coding agents. It is not evidence of live trad
4949
- `docs/zero-intelligence.md`
5050
- `docs/model-gateway.md`
5151
- `docs/release.md`
52+
- `docs/release-verification.md`
5253

5354

5455
## Source: `README.md`
@@ -530,6 +531,7 @@ deployment project, secrets, exchange credentials, and runtime state.
530531
- [docs/railway-deploy.md](docs/railway-deploy.md)
531532
- [docs/distribution.md](docs/distribution.md)
532533
- [docs/release.md](docs/release.md)
534+
- [docs/release-verification.md](docs/release-verification.md)
533535

534536
## Contributor Paths
535537

@@ -627,6 +629,7 @@ Machine-readable entrypoints:
627629
- [Agentic Contribution](docs/agentic-contribution.md)
628630
- [Contributor Issue Board](docs/contributor-issue-board.md)
629631
- [Launch Scorecard](docs/launch-scorecard.md)
632+
- [Release Verification](docs/release-verification.md)
630633
- [Roadmap](docs/roadmap.md)
631634

632635
## License
@@ -1106,6 +1109,7 @@ Out of scope:
11061109
- [Proof Packs](proof/README.md)
11071110
- [Railway Deploy](railway-deploy.md)
11081111
- [Release](release.md)
1112+
- [Release Verification](release-verification.md)
11091113

11101114
## Architecture And Contracts
11111115

@@ -5391,7 +5395,11 @@ Use the GitHub labels when choosing work:
53915395

53925396
- [#23 Expand read-only MCP strategy resources](https://github.com/zero-intel/zero/issues/23)
53935397
- [#24 Design public Network empty and stale states](https://github.com/zero-intel/zero/issues/24)
5394-
- [#25 Add release evidence reader docs](https://github.com/zero-intel/zero/issues/25)
5398+
5399+
## Completed Seed Issues
5400+
5401+
- [#25 Add release evidence reader docs](https://github.com/zero-intel/zero/issues/25) -
5402+
delivered in [Release Verification Guide](release-verification.md).
53955403

53965404
## Contribution Rules
53975405

@@ -6671,6 +6679,9 @@ the limitation is called out clearly.
66716679

66726680
## Verification
66736681

6682+
For a reader-focused verification path, start with
6683+
[Release Verification Guide](release-verification.md).
6684+
66746685
Download the artifact bundle and verify its checksum file before running it:
66756686

66766687
```bash
@@ -6912,3 +6923,138 @@ Do not publish package-registry artifacts until the registry channel has an
69126923
owner, rollback path, least-privilege token plan, and documented support
69136924
expectation in [distribution.md](distribution.md).
69146925
````
6926+
6927+
6928+
## Source: `docs/release-verification.md`
6929+
6930+
````markdown
6931+
# Release Verification Guide
6932+
6933+
This guide explains how to verify a ZERO release before installing or sharing
6934+
it. It checks artifact integrity, GitHub artifact attestations, SBOM/provenance
6935+
metadata, the committed Homebrew formula, and the clean-download evidence record.
6936+
6937+
It verifies release integrity only. It does not prove live trading safety,
6938+
hosted custody, future package-registry publication, or profitability.
6939+
6940+
## From A Fresh Clone
6941+
6942+
Use this path when you want the repository verifier to download the release
6943+
from GitHub and check everything in a temporary clean directory:
6944+
6945+
```bash
6946+
git clone https://github.com/zero-intel/zero.git
6947+
cd zero
6948+
just release-evidence v0.1.1
6949+
```
6950+
6951+
For machine-readable output:
6952+
6953+
```bash
6954+
scripts/release_evidence.py v0.1.1 --json
6955+
```
6956+
6957+
The release evidence command:
6958+
6959+
- reads the published GitHub Release metadata;
6960+
- downloads every attached release asset into a clean temporary directory;
6961+
- verifies `SHA256SUMS` with `shasum -a 256 -c SHA256SUMS`;
6962+
- runs `scripts/release_verify.py` against the downloaded directory;
6963+
- verifies executable GitHub artifact attestations;
6964+
- renders a Homebrew formula from the downloaded checksums;
6965+
- fails if the rendered formula differs from the committed `Formula/zero.rb`.
6966+
6967+
The current published evidence is recorded in
6968+
[v0.1.1 release evidence](releases/v0.1.1-evidence.md). That page is evidence
6969+
for `v0.1.1` only; future releases need their own clean-download evidence.
6970+
6971+
## From Downloaded Assets
6972+
6973+
Use this path when you already downloaded all GitHub Release assets into one
6974+
directory:
6975+
6976+
```bash
6977+
cd /path/to/downloaded/zero-release
6978+
shasum -a 256 -c SHA256SUMS
6979+
/path/to/zero/scripts/release_verify.py .
6980+
```
6981+
6982+
Expected launch assets include:
6983+
6984+
- `SHA256SUMS`
6985+
- `zero-linux`
6986+
- `zero-macos`
6987+
- `zero-paper-image.tar`
6988+
- `zero_engine-<version>-py3-none-any.whl`
6989+
- `zero_engine-<version>.tar.gz`
6990+
- `SBOM.spdx.json`
6991+
- `PROVENANCE.json`
6992+
6993+
`scripts/release_verify.py` checks that the checksum manifest covers exactly
6994+
the release assets, every checksum matches, expected launch assets are present,
6995+
assets are non-empty, and the metadata files parse with the expected safety
6996+
claims.
6997+
6998+
## Verify GitHub Artifact Attestations
6999+
7000+
Run attestation verification from the downloaded asset directory:
7001+
7002+
```bash
7003+
gh attestation verify zero-linux -R zero-intel/zero
7004+
gh attestation verify zero-macos -R zero-intel/zero
7005+
```
7006+
7007+
These commands prove that GitHub has signed provenance for the executable
7008+
artifacts attached to the release. They do not prove that the executable is safe
7009+
to use for live capital; they prove release provenance for the downloaded file.
7010+
7011+
## Read SBOM And Provenance
7012+
7013+
The release verifier requires both files:
7014+
7015+
```bash
7016+
python3 -m json.tool SBOM.spdx.json >/dev/null
7017+
python3 -m json.tool PROVENANCE.json >/dev/null
7018+
```
7019+
7020+
`SBOM.spdx.json` records package/component metadata. `PROVENANCE.json` records
7021+
source commit, tag, asset hashes, dirty-state policy, and release assertions
7022+
such as paper-first defaults and no package-registry publication.
7023+
7024+
## Check The Homebrew Formula
7025+
7026+
The public repo works as its own Homebrew tap:
7027+
7028+
```bash
7029+
brew tap zero-intel/zero https://github.com/zero-intel/zero
7030+
brew install zero
7031+
```
7032+
7033+
The committed formula at `Formula/zero.rb` must be generated from a verified
7034+
release directory:
7035+
7036+
```bash
7037+
scripts/homebrew_formula.py /path/to/downloaded/zero-release --tag v0.1.1 --output /tmp/zero.rb
7038+
diff -u Formula/zero.rb /tmp/zero.rb
7039+
scripts/homebrew_formula_check.py
7040+
```
7041+
7042+
The formula drift check proves that the tap points at the same GitHub Release
7043+
assets and checksums as the downloaded release. If the rendered formula differs
7044+
from `Formula/zero.rb`, the tap is stale or the release verification input is
7045+
wrong.
7046+
7047+
## Refuse On Any Failure
7048+
7049+
Do not install or redistribute a release when any of these fail:
7050+
7051+
- `shasum -a 256 -c SHA256SUMS`
7052+
- `scripts/release_verify.py <downloaded-release-dir>`
7053+
- `gh attestation verify zero-linux -R zero-intel/zero`
7054+
- `gh attestation verify zero-macos -R zero-intel/zero`
7055+
- `scripts/homebrew_formula_check.py`
7056+
- `just release-evidence <tag>`
7057+
7058+
Treat failure as an integrity incident until a maintainer publishes corrected
7059+
evidence or replaces the release.
7060+
````

docs/llms.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
- [Proof Packs](proof/README.md)
3333
- [Railway Deploy](railway-deploy.md)
3434
- [Release](release.md)
35+
- [Release Verification](release-verification.md)
3536

3637
## Architecture And Contracts
3738

docs/release-verification.md

Lines changed: 129 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,129 @@
1+
# Release Verification Guide
2+
3+
This guide explains how to verify a ZERO release before installing or sharing
4+
it. It checks artifact integrity, GitHub artifact attestations, SBOM/provenance
5+
metadata, the committed Homebrew formula, and the clean-download evidence record.
6+
7+
It verifies release integrity only. It does not prove live trading safety,
8+
hosted custody, future package-registry publication, or profitability.
9+
10+
## From A Fresh Clone
11+
12+
Use this path when you want the repository verifier to download the release
13+
from GitHub and check everything in a temporary clean directory:
14+
15+
```bash
16+
git clone https://github.com/zero-intel/zero.git
17+
cd zero
18+
just release-evidence v0.1.1
19+
```
20+
21+
For machine-readable output:
22+
23+
```bash
24+
scripts/release_evidence.py v0.1.1 --json
25+
```
26+
27+
The release evidence command:
28+
29+
- reads the published GitHub Release metadata;
30+
- downloads every attached release asset into a clean temporary directory;
31+
- verifies `SHA256SUMS` with `shasum -a 256 -c SHA256SUMS`;
32+
- runs `scripts/release_verify.py` against the downloaded directory;
33+
- verifies executable GitHub artifact attestations;
34+
- renders a Homebrew formula from the downloaded checksums;
35+
- fails if the rendered formula differs from the committed `Formula/zero.rb`.
36+
37+
The current published evidence is recorded in
38+
[v0.1.1 release evidence](releases/v0.1.1-evidence.md). That page is evidence
39+
for `v0.1.1` only; future releases need their own clean-download evidence.
40+
41+
## From Downloaded Assets
42+
43+
Use this path when you already downloaded all GitHub Release assets into one
44+
directory:
45+
46+
```bash
47+
cd /path/to/downloaded/zero-release
48+
shasum -a 256 -c SHA256SUMS
49+
/path/to/zero/scripts/release_verify.py .
50+
```
51+
52+
Expected launch assets include:
53+
54+
- `SHA256SUMS`
55+
- `zero-linux`
56+
- `zero-macos`
57+
- `zero-paper-image.tar`
58+
- `zero_engine-<version>-py3-none-any.whl`
59+
- `zero_engine-<version>.tar.gz`
60+
- `SBOM.spdx.json`
61+
- `PROVENANCE.json`
62+
63+
`scripts/release_verify.py` checks that the checksum manifest covers exactly
64+
the release assets, every checksum matches, expected launch assets are present,
65+
assets are non-empty, and the metadata files parse with the expected safety
66+
claims.
67+
68+
## Verify GitHub Artifact Attestations
69+
70+
Run attestation verification from the downloaded asset directory:
71+
72+
```bash
73+
gh attestation verify zero-linux -R zero-intel/zero
74+
gh attestation verify zero-macos -R zero-intel/zero
75+
```
76+
77+
These commands prove that GitHub has signed provenance for the executable
78+
artifacts attached to the release. They do not prove that the executable is safe
79+
to use for live capital; they prove release provenance for the downloaded file.
80+
81+
## Read SBOM And Provenance
82+
83+
The release verifier requires both files:
84+
85+
```bash
86+
python3 -m json.tool SBOM.spdx.json >/dev/null
87+
python3 -m json.tool PROVENANCE.json >/dev/null
88+
```
89+
90+
`SBOM.spdx.json` records package/component metadata. `PROVENANCE.json` records
91+
source commit, tag, asset hashes, dirty-state policy, and release assertions
92+
such as paper-first defaults and no package-registry publication.
93+
94+
## Check The Homebrew Formula
95+
96+
The public repo works as its own Homebrew tap:
97+
98+
```bash
99+
brew tap zero-intel/zero https://github.com/zero-intel/zero
100+
brew install zero
101+
```
102+
103+
The committed formula at `Formula/zero.rb` must be generated from a verified
104+
release directory:
105+
106+
```bash
107+
scripts/homebrew_formula.py /path/to/downloaded/zero-release --tag v0.1.1 --output /tmp/zero.rb
108+
diff -u Formula/zero.rb /tmp/zero.rb
109+
scripts/homebrew_formula_check.py
110+
```
111+
112+
The formula drift check proves that the tap points at the same GitHub Release
113+
assets and checksums as the downloaded release. If the rendered formula differs
114+
from `Formula/zero.rb`, the tap is stale or the release verification input is
115+
wrong.
116+
117+
## Refuse On Any Failure
118+
119+
Do not install or redistribute a release when any of these fail:
120+
121+
- `shasum -a 256 -c SHA256SUMS`
122+
- `scripts/release_verify.py <downloaded-release-dir>`
123+
- `gh attestation verify zero-linux -R zero-intel/zero`
124+
- `gh attestation verify zero-macos -R zero-intel/zero`
125+
- `scripts/homebrew_formula_check.py`
126+
- `just release-evidence <tag>`
127+
128+
Treat failure as an integrity incident until a maintainer publishes corrected
129+
evidence or replaces the release.

0 commit comments

Comments
 (0)