Bind delivered binaries to verified build source

This commit is contained in:
2026-10-06 00:51:56 +00:00
parent 1d6611601c
commit a1ee067b53
11 changed files with 154 additions and 15 deletions

View File

@@ -40,7 +40,10 @@ func build(ctx context.Context) error {
version into `buildinfo.Version`, and returns the compiler identity, normalized
targets, artifact paths, filenames, and SHA-256 digests. Names follow
`<binary>-<version>-<goos>-<goarch>`; Windows targets add `.exe`. A repeated
target pair is built once, at its first position.
target pair is built once, at its first position. Local builds may use modified
source. `SourceVerified` is true only after a complete build observes clean
source and the same HEAD before and after compilation; binary delivery requires
that fact. This observation is not a source snapshot or attestation guarantee.
The default output directory is `<repository>/dist`; a relative `OutputDir` is
resolved from the repository. Existing files with a selected artifact name are

View File

@@ -54,7 +54,10 @@ understood. The command does not run candidate checks or publish tags.
Pass the Gitea credential explicitly. A `BuildResult` may be supplied for a
binary-producing release; it must identify the same tagged repository commit
and selected version, and its local artifacts must still match their digests.
and selected version, its `SourceVerified` field must confirm the completed
build's clean, unchanged source observations, and its local artifacts must still
match their digests. Cleaning the checkout after a dirty build does not make
that build eligible for delivery.
Leave `Build` nil for a source-only release.
```go

View File

@@ -1,7 +1,6 @@
# ReleaseKit implementation review and remediation
Status: Open. These findings describe work to address; this review changes no
implementation or supported contract.
Status: In progress. Resolution notes record completed fixes and verification.
Date: 2026-10-06
@@ -57,6 +56,8 @@ ownership or runtime dependency weight.
### R1 — High: Delivery accepts binaries built from uncommitted source
Status: Resolved.
Category: Correctness and divergence from tagged-source delivery.
**Evidence:** [The builder](../../internal/build/build.go) records `HEAD` in
@@ -86,6 +87,13 @@ become eligible for tagged delivery merely by cleaning the worktree afterward.
Cover source changes during a build and unchanged clean tagged builds through
the supported API and CLI receipt path.
**Resolution:** Build results and private receipts now carry `SourceVerified`,
set only after completed builds observe clean source and unchanged HEAD. Local
dirty builds remain supported; binary delivery rejects their results and
receipts even after checkout cleanup. API tests cover clean, initially dirty,
and changed-during-build source; a CLI regression covers receipt delivery after
cleanup. The offline suite and public boundary checks pass.
### R2 — High: Some successful page writes are reported as not attempted
Category: Failure handling and recovery-state correctness.