Skip to content

fix: publish verifiable build provenance for releases#32

Merged
blimmer merged 1 commit into
mainfrom
fix/release-provenance-attestation
May 29, 2026
Merged

fix: publish verifiable build provenance for releases#32
blimmer merged 1 commit into
mainfrom
fix/release-provenance-attestation

Conversation

@blimmer
Copy link
Copy Markdown
Contributor

@blimmer blimmer commented May 29, 2026

Summary

A friend ran our installer (bash -c "$(curl -fsSL https://patchwave.ai/analyze.sh)") past a due-diligence agent before trusting it. The agent flagged it as sketchier than it is — largely because it never found the source repo and judged only the wrapper script: it called checksums.txt "theater" (the same release controls both the binary and the checksums, so it guards against a corrupted download, not a malicious publisher), noted you're trusting an opaque compiled binary, and said the binary's data destination/telemetry were undisclosed in what it read.

This closes the gaps that are actually closeable:

  • Verifiable build provenance. The release workflow now attests every release artifact with GitHub build provenance — a Sigstore-signed attestation recorded in a public transparency log, verifiable with gh attestation verify <archive> --repo contextbridge/patchwave-analysis. This is the real answer to the "checksums are theater" point: it ties each archive to this repo, commit, and CI run, not just to a hash published next to it.
  • Disclosure in the installer. analyze.sh now links the source, states the privacy posture (anonymous telemetry only; DO_NOT_TRACK=1; report stays local), and points to verification — so a reviewer reading just the script gets the full picture.
  • Verification docs in the README.

What this deliberately does not fix: repo reputation/age, and the inherent tradeoff of running an opaque binary — those can be mitigated (provenance + readable source) but not engineered away.

Review focus

  • Provenance approach. Uses actions/attest-build-provenance with subject-checksums: dist-release/checksums.txt — this is GoReleaser's officially documented integration (GoReleaser has no native provenance generator; it delegates to GitHub's attest action). Considered GoReleaser's cosign signs instead and rejected it: cosign verification is clunkier and less recognizable than gh attestation verify. Note provenance is not retroactive — only releases cut after this merges will verify.

Commits

  • 177f80b — fix: publish verifiable build provenance for releases

A friend ran our installer past a due-diligence agent, which flagged it
as risky: it couldn't find the source repo, checksums.txt offers no
protection against a malicious publisher (the same release controls both
the binary and the checksums), and the binary's behavior/telemetry were
undisclosed in the script it read.

Close the verifiable-trust gaps:

- release.yml attests every release artifact with GitHub build provenance
  (Sigstore-signed, recorded in a public transparency log), verifiable
  with `gh attestation verify`. Stronger than checksums.txt: it ties each
  archive to this repo, commit, and workflow run.
- analyze.sh links the source repo and discloses the privacy posture and
  how to verify what it downloads.
- README documents provenance verification.

Reputation/age and the inherent "trust an opaque binary" tradeoff can't
be engineered away; this closes the parts that can be.
@blimmer blimmer marked this pull request as ready for review May 29, 2026 17:29
@blimmer blimmer requested a review from jcarver989 as a code owner May 29, 2026 17:29
- name: Attest build provenance
uses: actions/attest-build-provenance@a2bbfa25375fe432b6a289bc6b6cd05ecd0c4c32 # v4.1.0
with:
subject-checksums: dist-release/checksums.txt
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We should also do this on PlanBridge

@blimmer blimmer merged commit 560aeee into main May 29, 2026
9 checks passed
@blimmer blimmer deleted the fix/release-provenance-attestation branch May 29, 2026 17:30
blimmer pushed a commit that referenced this pull request May 29, 2026
🤖 I have created a release *beep* *boop*
---


##
[0.2.5](v0.2.4...v0.2.5)
(2026-05-29)


### Bug Fixes

* publish verifiable build provenance for releases
([#32](#32))
([560aeee](560aeee))

---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).

Co-authored-by: contextbridge-pr-automation[bot] <259134118+contextbridge-pr-automation[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant