@@ -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+
66746685Download 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
69126923owner, rollback path, least-privilege token plan, and documented support
69136924expectation 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+ ````
0 commit comments