Skip to content

ci(release): recompute evidence digest at tag time; adopt shared-CI 0.8.1#14

Merged
rldyourmnd merged 1 commit into
mainfrom
harden/release-integrity-ci-0.8.1
Jul 11, 2026
Merged

ci(release): recompute evidence digest at tag time; adopt shared-CI 0.8.1#14
rldyourmnd merged 1 commit into
mainfrom
harden/release-integrity-ci-0.8.1

Conversation

@rldyourmnd

Copy link
Copy Markdown
Contributor

Why

Independent verification of two confirmed findings against ground truth:

  • Tag-time evidence gate was shape-only. The public Verify release-evidence bundle step checked the digest format but never recomputed it from the tagged tree, and enforced no freshness/completeness. The strong content-recompute lived only in the private harness, which the public tag-push path never runs — so the release control point could not prove the bundle bound to the released content.
  • Shared-CI drift past a permission fix. nddev-ci-workflows advanced 0.7.0 → 0.8.1; feat(release): publish the minimal runtime bundle as a second asset #13 (0a059bc) added the artifact-metadata: write scope the attest jobs require (actions/attest v4.1.1). This repo was still pinned to 0.7.0/eda8ff7, and the publish caller did not grant that scope (reusable-workflow permissions intersect with the caller ceiling).

What

  • Harden Verify release-evidence bundle: recompute setup_digest from git ls-files -s (excluding the bundle itself — identical to scripts/evidence.compute_setup_digest) and fail closed on mismatch; enforce freshness (generated <= now < expires) and structural completeness (vendor, platforms, non-empty checks).
  • Re-pin all 7 shared callers 0.7.0 → 0.8.1 (eda8ff7 → 8b8e3ea).
  • Grant artifact-metadata: write on the publish job.
  • Regenerate build/release-evidence.json so its digest matches the new content.

Verification

  • actionlint clean on all changed workflows.
  • Extracted tag-time verifier run against the checkout → recompute matches compute_setup_digest (sha256:1868c895…); emit_evidence.py --check valid.
  • No workflow_call input changed 0.7.0↔0.8.1 (interface-compatible; only the additive permission + a Syft bump + a SLSA label edit).

Harness pin advance + contract-test updates follow in nddev-harnesses.

….8.1

Harden the tag-time release-evidence gate and consume the shared
supply-chain permission fix.

- Verify release-evidence bundle: recompute setup_digest from the tagged
  tree (git ls-files -s, excluding the bundle) and fail closed on any
  mismatch, so the public release control point — not only the private
  harness — binds the bundle to the exact released content. Also enforce
  freshness (generated <= now < expires) and structural completeness
  (vendor, platforms, non-empty checks).
- Re-pin all shared nddev-ci-workflows callers 0.7.0 -> 0.8.1
  (eda8ff7 -> 8b8e3ea).
- Grant artifact-metadata: write on the publish job so the attest jobs'
  new required scope (0.8.1 #13) is present through the caller ceiling.
- Regenerate build/release-evidence.json for the new content digest.
@rldyourmnd rldyourmnd merged commit 7df8f94 into main Jul 11, 2026
8 checks passed
@rldyourmnd rldyourmnd deleted the harden/release-integrity-ci-0.8.1 branch July 11, 2026 22:15
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant