| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
This directory makes Homebase releases reproducible: the same git ref always produces a byte-identical bundle, on any machine. That turns "the deployed app matches the public source" from a promise into a check.
Why it matters here: for a governance platform, control of the frontend is a governance question — a tampered bundle can misrepresent what users sign, without any trace in the source repository. Reproducibility is the foundation for distributing Homebase through channels that don't require trusting any single host or maintainer (content-addressed hosting, release registries, independent build attestation). It runs in parallel with the existing hosted deployment, which continues unchanged.
| Leak | Fix |
|---|---|
| Toolchain drift (node/yarn versions) | Builder image pinned by digest in Dockerfile.build (node 22.12.0, matching .nvmrc) |
| Machine paths in output | Build always runs at /app inside the container; source maps disabled for the artifact |
| Timestamps | SOURCE_DATE_EPOCH = the commit's timestamp; gzip -n; fixed tar mtimes |
| Uncommitted/untracked files | Docker context is git archive <ref> — only committed code can enter a build |
| Environment variance | env.build is the canonical, committed, public-only production env — the only .env a verifiable build sees |
# Build the current commit; artifact + fingerprint land in distribution/out/
distribution/build.sh
# Verify a release against its published hash (from the GitHub Release page)
distribution/verify.sh v1.2.3 <expected-sha256>
# Verify a release against the ON-CHAIN registry (trustless: commit + hash
# are read from the release-registry contract, then rebuilt and compared)
distribution/verify.sh --registry <mainnet|shadownet> <registry-address> <version-key>
# RUN a verified release locally (zero dependencies, Node 18+): reads the
# DAO-approved record from the registry, fetches the artifact from any
# mirror, verifies every file against the on-chain fingerprint, and serves
# the app on localhost. Refuses to serve on any mismatch.
node distribution/run.js --network shadownet --registry <registry-address> --key v6.0.0run.js is deliberately a single dependency-free file: it is the trust anchor of local distribution, so the entire trusted surface should be readable in one sitting. With it, the hosting layer (Netlify, the domain, even GitHub) is demoted to interchangeable mirrors: what you run is provably what governance approved, regardless of who served the bytes.
BUILDHASH is the sha256 over the sorted per-file sha256s of build/ (BUILDMANIFEST holds the per-file list, so any mismatch can be localized to the exact file).
Pushing a v* tag triggers .github/workflows/reproducible-build.yml, which builds, rebuilds from scratch and fails unless both hashes match, then publishes the artifact, BUILDHASH.txt, and the manifest on the GitHub Release.
Releases are recorded in the Registry contract of a Homebase EVM DAO (the app's own audited governance stack — the release process dogfoods the product). Each approved release is a registry entry: key vX.Y.Z, value {"commit":"<sha>","buildhash":"<sha256>","artifact":"<url>"}. Entries only change through a governance proposal (propose → vote → timelock → execute), so "the official build" is a DAO decision, not a hosting-account setting. verify.sh --registry closes the loop: on-chain record → source commit → reproducible rebuild → hash comparison, with no trusted intermediary.
Current registries:
| Network | DAO | Registry | Status |
|---|---|---|---|
| Shadownet | 0xEeDCa7F405210cBCB4E63a67F18e974c821F4Ca1 ("Homebase Distribution (Rehearsal)") | 0x2A847c27663aB55aa36387c4Ce719789e3bc8cE9 | rehearsal, live |
| Mainnet | — | — | planned |
| Back | FazBrowse Home | New Git URL |