Skip to content

Publish attested release binaries with provenance and SBOMs - #1435

Open
prk-Jr wants to merge 34 commits into
mainfrom
feature/binary-attestations-phase1
Open

prk-Jr wants to merge 34 commits into
mainfrom
feature/binary-attestations-phase1

Conversation

@prk-Jr

@prk-Jr prk-Jr commented Oct 22, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

  • Publish seven raw release binaries with verifiable build provenance, SPDX 2.3 dependency inventories and Sigstore bundles so operators can authenticate downloaded bytes before running or deploying them.
  • Separate read-only builds, isolated signing and immutable publication; keep operator configuration external and retain exact source/package/target/variant build facts.
  • Deliver Phase 1 of Publish attested release binaries with build provenance and SBOMs #1235 with documented GitHub CLI verification. Full composition, reproducibility and the custom verifier remain later work.

Changes

54 files, +10,823/−50 lines against the reviewed merge base. The retained design, plans, policies and candidate reports describe future phases as well as this implementation; their presence does not claim those phases are implemented or qualified.

All changed files and their purpose
File Change
.github/workflows/format.yml Lint the Phase 1 release shell helper.
.github/workflows/release-build.yml Build seven assets with pinned tools; isolate tag-only provenance/SBOM signing.
.github/workflows/release.yml Call the local builder/signer; validate handoffs and publish/verify one immutable release.
.github/workflows/test.yml Run development and release-mode CLI build-facts regression checks.
AGENTS.md Document the release helper test/lint gate.
CHANGELOG.md Describe attested release binaries and operator verification.
crates/trusted-server-adapter-axum/src/main.rs Resolve and validate runtime host/port settings; preserve loopback defaults and visible startup refusals.
crates/trusted-server-adapter-axum/tests/startup.rs Prove invalid binding fails visibly with logging disabled.
crates/trusted-server-adapter-fastly/build.rs Validate release source control and retain the owning Cargo target.
crates/trusted-server-adapter-fastly/src/main.rs Report immutable build facts in reuse diagnostics; preserve single-mode source headers.
crates/trusted-server-cli/build.rs Validate release identity and derive the owning CLI target.
crates/trusted-server-cli/release-policy.json Carry the reviewed destination consumer policy; no Phase 1 reader.
crates/trusted-server-cli/src/commands/dev/lint/domains.rs Add justified exact reference hosts and lookalike-host regression coverage.
crates/trusted-server-cli/src/lib.rs Make the build-facts test seam available without broadening the public API.
crates/trusted-server-cli/src/run.rs Label package/source/target/variant in CLI version output.
crates/trusted-server-cli/tests/release_build_facts.rs Check real CLI identity, owner build scripts, external tag/run independence and standalone execution.
crates/trusted-server-core/build.rs Use the shared release-aware Git resolver and track its inputs.
crates/trusted-server-core/build_support/git_version.rs Require a full lowercase source SHA in release mode; retain development fallbacks.
crates/trusted-server-core/src/build_info.rs Represent immutable package/source/target/variant facts.
crates/trusted-server-core/src/constants.rs Expose sanitized source identity through existing version constants.
crates/trusted-server-core/src/lib.rs Export the build-info module.
crates/trusted-server-core/tests/git_version_resolve.rs Cover valid, invalid, missing and non-Unicode release inputs plus development fallback.
docs/.vitepress/config.mts Link the release verification guide.
docs/guide/cli.md Explain source-built versus verified downloaded CLI installation.
docs/guide/release-verification.md Document online/offline checks, native startup limits, verified-byte deployment and maintainer recovery/settings.
docs/superpowers/plans/2026-10-13-attested-release-implementation.md Define Phase 1 acceptance and retain the deferred destination implementation plan.
docs/superpowers/plans/2026-10-13-cli-packaging-attestation-integration.md Carry the future packaged-CLI integration plan; packaging is not implemented here.
docs/superpowers/plans/2026-10-13-fastly-prebuilt-edgezero-integration.md Carry the future typed EdgeZero deployment/recovery plan.
docs/superpowers/plans/binary-attestations-phase1-compatibility.md Record contract alignment, phased limits and revision-specific rehearsal history.
docs/superpowers/plans/binary-attestations-slice-map.json Assign retained future work to subsequent slices.
docs/superpowers/specs/2026-01-15-attestation-design.md Mark the historical binary-attestation proposal as superseded.
docs/superpowers/specs/2026-10-09-1235-release-attestation-design.md Define the Phase 1 boundary, compile-time inputs and retained destination contract.
docs/superpowers/specs/2026-10-12-1235-release-attestation-feasibility.md Carry historical feasibility measurements and their qualification limits.
docs/superpowers/specs/2026-10-14-release-tooling-rust-migration.md Carry the future Rust producer migration contract.
docs/superpowers/specs/schemas/release-index-v1.schema.json Preserve the destination index schema; Phase 1 emits no index.
scripts/release/js-composition.md Carry future JS composition design/evidence; no claim of Phase 1 complete composition.
scripts/release/phase1-build.sh Build from the expected source with fresh JS and reject development overrides/config canaries.
scripts/release/phase1.mjs Validate inputs/binaries, form conservative SPDX inventories and run platform startup checks.
scripts/release/phase1.test.mjs Exercise release helpers and the actual inline publisher, including negative/failure paths.
scripts/release/qualification/2026-10-15-consumer-real-fixtures.md Carry revision-pinned historical candidate evidence and explicit qualification gaps; not current Phase 1 proof.
scripts/release/qualification/2026-10-15-js-two-builds.md Carry revision-pinned historical candidate evidence and explicit qualification gaps; not current Phase 1 proof.
scripts/release/qualification/2026-10-16-confined-cargo-candidate.md Carry revision-pinned historical candidate evidence and explicit qualification gaps; not current Phase 1 proof.
scripts/release/qualification/2026-10-16-fastly-canonical-reproduction-equality.md Carry revision-pinned historical candidate evidence and explicit qualification gaps; not current Phase 1 proof.
scripts/release/qualification/2026-10-16-fastly-runtime-gate.md Carry revision-pinned historical candidate evidence and explicit qualification gaps; not current Phase 1 proof.
scripts/release/qualification/2026-10-16-linux-cli-candidate.md Carry revision-pinned historical candidate evidence and explicit qualification gaps; not current Phase 1 proof.
scripts/release/qualification/2026-10-16-producer-normalized-manifests.md Carry revision-pinned historical candidate evidence and explicit qualification gaps; not current Phase 1 proof.
scripts/release/qualification/2026-10-19-apple-sdk-inputs.md Carry revision-pinned historical candidate evidence and explicit qualification gaps; not current Phase 1 proof.
scripts/release/qualification/2026-10-20-apple-cli-candidates.md Carry revision-pinned historical candidate evidence and explicit qualification gaps; not current Phase 1 proof.
scripts/release/qualification/2026-10-20-linux-cli-gnu-follow-up.md Carry revision-pinned historical candidate evidence and explicit qualification gaps; not current Phase 1 proof.
scripts/release/qualification/2026-10-21-candidate-release-index.md Carry revision-pinned historical candidate evidence and explicit qualification gaps; not current Phase 1 proof.
scripts/release/qualification/2026-10-21-four-asset-candidate-join.md Carry revision-pinned historical candidate evidence and explicit qualification gaps; not current Phase 1 proof.
scripts/release/qualification/2026-10-21-native-reproduction-schedule.md Carry revision-pinned historical candidate evidence and explicit qualification gaps; not current Phase 1 proof.
scripts/release/release-cohort.json Retain four original assets and describe three Axum additions; no checked Phase 1 policy reader.
scripts/release/release-tools.json Carry destination tool/qualification records; unqualified/null entries grant no release authority.

Closes

Part of #1235. Keep the issue open: spec/merge approval and upstream immutable-release/tag-ruleset settings remain maintainer obligations. This partial delivery intentionally does not use an auto-closing keyword.

Spec

Phased spec · Implementation plan · Compatibility audit and rehearsal history.

The carried design originated in #1262; its review history and disposition appendix remain linked from the spec. Spec and implementation are combined here by the recorded delivery agreement; maintainer approval is still required. The required Review log now records two fresh independent AI source-review rounds, both without blocking Phase 1 findings. The historical-adapter advisory was addressed with an append-only baseline clarification; original spec bytes remain intact.

How it works

  1. Build: a PR exercises seven hosted builds with pinned Rust/Node tools and locked dependencies. A release starts from a v* tag. The release helper checks the supplied full source SHA, requires fresh npm/JS output, rejects skip/prebuilt/test controls and scans for planted operator values. It produces Fastly wasm, three CLI binaries and three Axum binaries, each with a conservative Cargo/npm SPDX inventory tied to the final executable hash.
  2. Sign: the local, input-free release-build.yml reusable workflow owns signing. Signing runs only for tag pushes with RELEASE_PUBLICATION_ENABLED=true; these jobs do not check out source, compile, or execute the binaries. Provenance covers the executable and its SPDX document. The separate SBOM attestation uses the executable as its subject and the SPDX document as its predicate. Both real action-produced bundles are retained.
  3. Publish: release.yml checks exact build/signer file sets and signed-input digests. It refuses existing matching releases/drafts, creates one draft and retains its release ID through upload/publication. Mutations are single-shot. The distribution contains 7 binaries + 7 SPDX documents + 14 bundles + SHA256SUMS = 29 assets; the checksum file covers the other 28 files. The publisher verifies immutability, release identity, cryptographic membership and a fresh download of every asset against the validated handoff bytes. Only bounded transient read failures may retry.
  4. Consume: operators use independently trusted GitHub CLI/source pins to verify immutable membership and both provenance/SBOM predicates before execution. Separate signer-workflow and exact certificate-identity checks pin release-build.yml at the approved tag. Offline bundle verification uses independently obtained roots and proves build evidence; it does not establish current release membership or authorize deployment. The Fastly route packages the verified wasm without rebuilding it.

Runtime identity stays distinct from release metadata: ts --version labels package/source/target/variant; Fastly reports the full source SHA in x-ts-version. Axum host/port choices remain runtime inputs, preserve the loopback default, and reject invalid or conflicting values with a visible refusal even when logging is off.

Test plan

Verification summary and evidence

Current head: 4940928e800fed00e4bddd8f3727fb52dcb2b296, the later web merge of main 054c7b777 after review-log commit c9a6117dd. Its tree exactly matches the already tested synthetic merge 52978c5b5146f0c008108a9b0bfb2bf2c5de2bb2; fresh CI on this new head also passed. The spec’s two fresh review rounds and their append-only clarification remain intact. Rehearsed implementation: 68eef902a8bddd9024676cc3806fa5377ed67fee in .15. The later main merge includes upstream application changes, with unchanged release machinery, and is not described as docs-only since that rehearsal. No new tag-rehearsal result is claimed. PR release-matrix binaries identify their tested merge ref and remain distinct from the recorded tag assets.

Verification Result and what it establishes Evidence
Current PR checks 32 successful checks; two expected signing/publication skips. PR builds establish build/test coverage, not tag publication. All checks, seven release builds
Rust tests and release identity Adapter/reuse/parity/CLI/build-digest and HTML EOF suites passed. CLI identity tests exercise both development and release modes with an exact supplied fictional source control. Run Tests, Linux CLI job and merge checkout, macOS CLI job
Formatting and lint Rust formatting, target-matched adapter Clippy, CLI/codegen/build-digest Clippy, wasm-clock lint, JS/docs/Markdown formatting, docs build and script lint passed. Run Format
Browser and adapter integration Integration, browser and Fastly EC lifecycle checks passed. Integration Tests
Release failure/regression fixtures 19 helper tests passed, covering handoff corruption, partial uploads, tag/permission/action pins, bad build controls, platform inspection and bounded read/retry behavior. Preflight test log
Actual tag build → sign → publish Fork rehearsal .15 passed all 16 jobs at 68eef902a; seven builds and seven signers produced an immutable prerelease, not Latest. Rehearsal attempt 1, publisher log, immutable release
Downloaded release integrity All 29 immutable assets and all 28 checksum entries verified; publisher re-download matched every signed-handoff byte. Release ID 425726260 currently reports immutable=true, draft=false, prerelease=true. Independent transcript 1/2, transcript 2/2
Signatures, source and SPDX binding All seven binaries passed both predicates and both signer identity checks online without bundles and offline with retained bundles/roots. Exact source/ref/signer pins were enforced; 14 online/offline SPDX comparisons matched the shipped documents. Transcript 1/2, transcript 2/2
Native executable behavior CLI version/source identity, GNU baseline startup, static-musl startup, macOS architecture/minimum OS checks and Axum host-published /health success/invalid-port refusal passed in the recorded rehearsal. These are startup checks, not full platform qualification. Build job logs, runtime results in transcript 2/2

Together, these demonstrate the intended Phase 1 path: reviewed source produces runnable bytes; real tag-only signers attest those bytes and their inventory; the publisher releases the exact immutable distribution; independent verification authenticates the downloaded assets. They do not establish reproducibility, complete native dependency coverage, SLSA Build Level 3 or production deployment.

Completed checks

These checked items refer to the linked hosted evidence, not a claim that every suite was rerun locally.

  • cargo test-fastly, reuse tests, cargo test-axum, Cloudflare, Spin, native CLI and cross-adapter parity checks.
  • All target-matched Clippy aliases, CLI/codegen and native core build-digest lint.
  • cargo fmt --all -- --check.
  • JS build/tests and formatting.
  • Docs/Markdown formatting and VitePress link/build checks.
  • Production Fastly WASM build and all six native release builds.
  • Release helper tests and shellcheck; configuration/source/build-control negative cases.
  • Actual fork tag signing/publication, immutable membership, checksums and online/offline predicate verification.
  • New Fastly provider deployment at this revision — not performed; the documented verified-byte operator route is the selected Phase 1 delivery path.

Historical evidence: .12 success applies to ab6e54936 only. .11 draft-create denial and .14 hosted ARM64 runner-capacity failure remain failures for those attempts; .15 supplies the successful current-implementation rehearsal. No tag or immutable release was reused or overwritten.

Exact signer verification and issue acceptance

Use independently approved REPO, TAG and full COMMIT values from the operator guide. For each asset, run both predicates (https://slsa.dev/provenance/v1 and https://spdx.dev/Document/v2.3) with each mutually exclusive identity option separately:

checks=(--repo "$REPO" --bundle "$asset.$kind.sigstore.json"
  --source-ref "refs/tags/$TAG" --source-digest "$COMMIT"
  --signer-digest "$COMMIT" --deny-self-hosted-runners --predicate-type "$predicate")
gh attestation verify "$asset" "${checks[@]}" \
  --signer-workflow "$REPO/.github/workflows/release-build.yml"
gh attestation verify "$asset" "${checks[@]}" \
  --cert-identity "https://github.com/$REPO/.github/workflows/release-build.yml@refs/tags/$TAG"

The guide includes complete loops, release membership checks, offline roots and SPDX comparisons. The issue's original release.yml signer example is superseded by the reusable release-build.yml identity. artifact-metadata: write is intentionally unnecessary for file attestations.

  • D1: maintainer spec/merge approval remains pending; the required two-round spec review log is complete.
  • D2: no-config requirement and compile-time inventory documented, with audit limits.
  • D3/D4: immutable publication and every binary/predicate/asset verified in fork rehearsal .15; upstream settings remain D7.
  • D5: fresh npm/JS and refusal of development skip/prebuilt controls.
  • D6: verified-release-byte deployment route documented; no production deployment claimed.
  • D7: upstream immutable releases and restricted v* tags configured by maintainers.
  • D8: operator/CLI docs and changelog updated.

Checklist

  • Feature spec ends in a Review log recording two fresh independent AI review rounds and their dispositions.
  • No production unwrap() introduced; release/config error paths are explicit.
  • Application instrumentation uses log; Axum deliberately writes startup refusals to stderr so RUST_LOG=off cannot hide them. This is a disclosed exception to the general logging convention.
  • New release/build-facts/runtime behavior has regression coverage.
  • No new secrets or credentials identified in the reviewed changes.
  • Maintainer review of new reference-host allowlist entries and per-line suppressions completed.

Maintainer decisions and Phase 1 limits

The two-round spec review-log requirement is complete. The review-log fix and subsequent main-merge head both passed CI; this PR is ready for human review. Spec/code approval remains the purpose of human review. Before enabling production publication, maintainers must enable immutable releases and the restricted v* tag ruleset, then explicitly set RELEASE_PUBLICATION_ENABLED=true and authorize the first production tag. RC-branch tag eligibility remains a maintainer decision. Upstream production publication and provider deployment are not claimed by the fork rehearsal.

Reference hosts requiring review: actions.github.io, slsa.dev, spdx.dev, cli.github.com. Per-line suppressions: cyclonedx.org (intermediate-format reference, removed from the allowlist), api.github.com, uploads.github.com.

Phase 1 SBOMs are conservative build dependency inventories, not complete retained-code/native composition or vulnerability scans. Producing-job transfer binding, checked policy consumption, source-branch ancestry enforcement, reproducibility, custom verification/indexes, integrated EdgeZero recovery and further Axum production hardening remain deferred. A compromised build dependency could replace another job's artifact; exact handoff checks do not close that later transfer-binding boundary. Historical candidate reports and frozen policies grant no present release qualification.

@prk-Jr prk-Jr self-assigned this Oct 22, 2026
@prk-Jr

prk-Jr commented Oct 22, 2026

Copy link
Copy Markdown
Collaborator Author

Rehearsal record at 41896cb0798f98e759c020965ed675fe1e8808dc, lightweight fork tag v0.0.0-rehearsal.2.

Run · immutable release. Release ID 420703797, 17 exact assets, no index/build-evidence/build-recipe/rebuild-check/inventory companions.

All four builds and signers passed. Publication, initial release-ID/immutability validation, gh release verify, and all 17 publisher asset checks passed. The job then failed at its final read-only API check with UND_ERR_SOCKET (other side closed). No publication retry, tag reuse or deletion has occurred. A minimal connection-header fix is being validated; the next workflow attempt needs a separately approved fresh tag.

Independent verification below completed with exit status 0: one release verification, 17 asset verifications, 16 attestation verifications (four binaries × provenance/SPDX × signer-prefix/exact tag-ref identity), 16 checksum entries and four signed-SPDX predicate comparisons. It uses the guide commands with only repository/tag/commit substitutions. Workflow CLI: 2.102.0; independent CLI: 2.97.0.

Full independent verification transcript — commands and output
gh version 2.97.0 (2026-07-31)
https://github.com/cli/cli/releases/tag/v2.97.0
+ set -euo pipefail
+ REPO=prk-Jr/trusted-server
+ TAG=v0.0.0-rehearsal.2
+ COMMIT=41896cb0798f98e759c020965ed675fe1e8808dc
+ ASSETS=(trusted-server-fastly.wasm ts-x86_64-unknown-linux-gnu ts-aarch64-apple-darwin ts-x86_64-apple-darwin)
+ gh release download v0.0.0-rehearsal.2 --repo prk-Jr/trusted-server --dir .
++ gh api repos/prk-Jr/trusted-server/releases/tags/v0.0.0-rehearsal.2 --jq .immutable
+ test true = true
+ gh release verify v0.0.0-rehearsal.2 --repo prk-Jr/trusted-server
Resolved tag v0.0.0-rehearsal.2 to sha1:41896cb0798f98e759c020965ed675fe1e8808dc
Loaded attestation from GitHub API
✓ Release v0.0.0-rehearsal.2 verified!

Assets
SHA256SUMS	sha256:476fb3a4f484fbd869ef2999641fec71bda78cbc7060869d781293bf6864f1a5
trusted-server-fastly.wasm	sha256:8631ba5258f70d5379bfa2d760c6942273567c49ca12e8bb887435c1252df544
trusted-server-fastly.wasm.provenance.sigstore.json	sha256:893330290b769329c3086e96cda7e8d26ab79f64e233598f80f21142d631e48b
trusted-server-fastly.wasm.sbom.sigstore.json	sha256:9e573493fcbc26ab5bc24a4be32319da1b0626dc51a24fc940a68f072682a45f
trusted-server-fastly.wasm.spdx.json	sha256:488ecb5253eb92b0ad0781f8cd96cd8c380acc45c05d25eeaf673c6846aec2c5
ts-aarch64-apple-darwin	sha256:e9c304e55fceb4d0e2f6ac14ac5be9bed368b2628d1a90d6f4539757e129469a
ts-aarch64-apple-darwin.provenance.sigstore.json	sha256:e760be21e32de4e56f3ff5f1fc010e9a1f868541a3c4a4b4ae85a6e6b57be94e
ts-aarch64-apple-darwin.sbom.sigstore.json	sha256:3ae4012afd48713ee795b9901bd82073477479e685a27f084a2fe562d8db7daf
ts-aarch64-apple-darwin.spdx.json	sha256:d2d91805e717da7e98535c99536b7040eafd308f793dfda01698f8388a05be1f
ts-x86_64-apple-darwin	sha256:5f7ac1d7f7cf879a08ac8a767aa5dc9f9c92994f2188b2613f2b4739e86de3b0
ts-x86_64-apple-darwin.provenance.sigstore.json	sha256:c7205112b4423c03112a119325a64c13f81ea64308b9112dea828ea7c56887a9
ts-x86_64-apple-darwin.sbom.sigstore.json	sha256:48f523a296fec23e65a87e7294690ae23cd3c5627b8c282714c370976b4e5b73
ts-x86_64-apple-darwin.spdx.json	sha256:d1febe34dc5be26837c9f7cdbbbaabfcf32ced4e18bcbde2e5117f46ae292725
ts-x86_64-unknown-linux-gnu	sha256:18a8ee34706eda39991991b3d69667aa368850e7995d8124389adad9c062794d
ts-x86_64-unknown-linux-gnu.provenance.sigstore.json	sha256:6a96392a7ab2257b51cef295ca755069e408e0fd14d31bee0839262d2fe40136
ts-x86_64-unknown-linux-gnu.sbom.sigstore.json	sha256:5b3f309286752369d3e6485283ffaa8b848d8322ed42e9ef5a4460a83cd175e6
ts-x86_64-unknown-linux-gnu.spdx.json	sha256:e30af27a8dc1df5b348c1a0c6e17bad9d7735178bda342fd857c660f299e464f

+ for asset in "${ASSETS[@]}"
+ for suffix in '' .spdx.json .provenance.sigstore.json .sbom.sigstore.json
+ gh release verify-asset v0.0.0-rehearsal.2 trusted-server-fastly.wasm --repo prk-Jr/trusted-server
Calculated digest for trusted-server-fastly.wasm: sha256:8631ba5258f70d5379bfa2d760c6942273567c49ca12e8bb887435c1252df544
Resolved tag v0.0.0-rehearsal.2 to sha1:41896cb0798f98e759c020965ed675fe1e8808dc
Loaded attestation from GitHub API

✓ Verification succeeded! trusted-server-fastly.wasm is present in release v0.0.0-rehearsal.2
+ for suffix in '' .spdx.json .provenance.sigstore.json .sbom.sigstore.json
+ gh release verify-asset v0.0.0-rehearsal.2 trusted-server-fastly.wasm.spdx.json --repo prk-Jr/trusted-server
Calculated digest for trusted-server-fastly.wasm.spdx.json: sha256:488ecb5253eb92b0ad0781f8cd96cd8c380acc45c05d25eeaf673c6846aec2c5
Resolved tag v0.0.0-rehearsal.2 to sha1:41896cb0798f98e759c020965ed675fe1e8808dc
Loaded attestation from GitHub API

✓ Verification succeeded! trusted-server-fastly.wasm.spdx.json is present in release v0.0.0-rehearsal.2
+ for suffix in '' .spdx.json .provenance.sigstore.json .sbom.sigstore.json
+ gh release verify-asset v0.0.0-rehearsal.2 trusted-server-fastly.wasm.provenance.sigstore.json --repo prk-Jr/trusted-server
Calculated digest for trusted-server-fastly.wasm.provenance.sigstore.json: sha256:893330290b769329c3086e96cda7e8d26ab79f64e233598f80f21142d631e48b
Resolved tag v0.0.0-rehearsal.2 to sha1:41896cb0798f98e759c020965ed675fe1e8808dc
Loaded attestation from GitHub API

✓ Verification succeeded! trusted-server-fastly.wasm.provenance.sigstore.json is present in release v0.0.0-rehearsal.2
+ for suffix in '' .spdx.json .provenance.sigstore.json .sbom.sigstore.json
+ gh release verify-asset v0.0.0-rehearsal.2 trusted-server-fastly.wasm.sbom.sigstore.json --repo prk-Jr/trusted-server
Calculated digest for trusted-server-fastly.wasm.sbom.sigstore.json: sha256:9e573493fcbc26ab5bc24a4be32319da1b0626dc51a24fc940a68f072682a45f
Resolved tag v0.0.0-rehearsal.2 to sha1:41896cb0798f98e759c020965ed675fe1e8808dc
Loaded attestation from GitHub API

✓ Verification succeeded! trusted-server-fastly.wasm.sbom.sigstore.json is present in release v0.0.0-rehearsal.2
+ for asset in "${ASSETS[@]}"
+ for suffix in '' .spdx.json .provenance.sigstore.json .sbom.sigstore.json
+ gh release verify-asset v0.0.0-rehearsal.2 ts-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server
Calculated digest for ts-x86_64-unknown-linux-gnu: sha256:18a8ee34706eda39991991b3d69667aa368850e7995d8124389adad9c062794d
Resolved tag v0.0.0-rehearsal.2 to sha1:41896cb0798f98e759c020965ed675fe1e8808dc
Loaded attestation from GitHub API

✓ Verification succeeded! ts-x86_64-unknown-linux-gnu is present in release v0.0.0-rehearsal.2
+ for suffix in '' .spdx.json .provenance.sigstore.json .sbom.sigstore.json
+ gh release verify-asset v0.0.0-rehearsal.2 ts-x86_64-unknown-linux-gnu.spdx.json --repo prk-Jr/trusted-server
Calculated digest for ts-x86_64-unknown-linux-gnu.spdx.json: sha256:e30af27a8dc1df5b348c1a0c6e17bad9d7735178bda342fd857c660f299e464f
Resolved tag v0.0.0-rehearsal.2 to sha1:41896cb0798f98e759c020965ed675fe1e8808dc
Loaded attestation from GitHub API

✓ Verification succeeded! ts-x86_64-unknown-linux-gnu.spdx.json is present in release v0.0.0-rehearsal.2
+ for suffix in '' .spdx.json .provenance.sigstore.json .sbom.sigstore.json
+ gh release verify-asset v0.0.0-rehearsal.2 ts-x86_64-unknown-linux-gnu.provenance.sigstore.json --repo prk-Jr/trusted-server
Calculated digest for ts-x86_64-unknown-linux-gnu.provenance.sigstore.json: sha256:6a96392a7ab2257b51cef295ca755069e408e0fd14d31bee0839262d2fe40136
Resolved tag v0.0.0-rehearsal.2 to sha1:41896cb0798f98e759c020965ed675fe1e8808dc
Loaded attestation from GitHub API

✓ Verification succeeded! ts-x86_64-unknown-linux-gnu.provenance.sigstore.json is present in release v0.0.0-rehearsal.2
+ for suffix in '' .spdx.json .provenance.sigstore.json .sbom.sigstore.json
+ gh release verify-asset v0.0.0-rehearsal.2 ts-x86_64-unknown-linux-gnu.sbom.sigstore.json --repo prk-Jr/trusted-server
Calculated digest for ts-x86_64-unknown-linux-gnu.sbom.sigstore.json: sha256:5b3f309286752369d3e6485283ffaa8b848d8322ed42e9ef5a4460a83cd175e6
Resolved tag v0.0.0-rehearsal.2 to sha1:41896cb0798f98e759c020965ed675fe1e8808dc
Loaded attestation from GitHub API

✓ Verification succeeded! ts-x86_64-unknown-linux-gnu.sbom.sigstore.json is present in release v0.0.0-rehearsal.2
+ for asset in "${ASSETS[@]}"
+ for suffix in '' .spdx.json .provenance.sigstore.json .sbom.sigstore.json
+ gh release verify-asset v0.0.0-rehearsal.2 ts-aarch64-apple-darwin --repo prk-Jr/trusted-server
Calculated digest for ts-aarch64-apple-darwin: sha256:e9c304e55fceb4d0e2f6ac14ac5be9bed368b2628d1a90d6f4539757e129469a
Resolved tag v0.0.0-rehearsal.2 to sha1:41896cb0798f98e759c020965ed675fe1e8808dc
Loaded attestation from GitHub API

✓ Verification succeeded! ts-aarch64-apple-darwin is present in release v0.0.0-rehearsal.2
+ for suffix in '' .spdx.json .provenance.sigstore.json .sbom.sigstore.json
+ gh release verify-asset v0.0.0-rehearsal.2 ts-aarch64-apple-darwin.spdx.json --repo prk-Jr/trusted-server
Calculated digest for ts-aarch64-apple-darwin.spdx.json: sha256:d2d91805e717da7e98535c99536b7040eafd308f793dfda01698f8388a05be1f
Resolved tag v0.0.0-rehearsal.2 to sha1:41896cb0798f98e759c020965ed675fe1e8808dc
Loaded attestation from GitHub API

✓ Verification succeeded! ts-aarch64-apple-darwin.spdx.json is present in release v0.0.0-rehearsal.2
+ for suffix in '' .spdx.json .provenance.sigstore.json .sbom.sigstore.json
+ gh release verify-asset v0.0.0-rehearsal.2 ts-aarch64-apple-darwin.provenance.sigstore.json --repo prk-Jr/trusted-server
Calculated digest for ts-aarch64-apple-darwin.provenance.sigstore.json: sha256:e760be21e32de4e56f3ff5f1fc010e9a1f868541a3c4a4b4ae85a6e6b57be94e
Resolved tag v0.0.0-rehearsal.2 to sha1:41896cb0798f98e759c020965ed675fe1e8808dc
Loaded attestation from GitHub API

✓ Verification succeeded! ts-aarch64-apple-darwin.provenance.sigstore.json is present in release v0.0.0-rehearsal.2
+ for suffix in '' .spdx.json .provenance.sigstore.json .sbom.sigstore.json
+ gh release verify-asset v0.0.0-rehearsal.2 ts-aarch64-apple-darwin.sbom.sigstore.json --repo prk-Jr/trusted-server
Calculated digest for ts-aarch64-apple-darwin.sbom.sigstore.json: sha256:3ae4012afd48713ee795b9901bd82073477479e685a27f084a2fe562d8db7daf
Resolved tag v0.0.0-rehearsal.2 to sha1:41896cb0798f98e759c020965ed675fe1e8808dc
Loaded attestation from GitHub API

✓ Verification succeeded! ts-aarch64-apple-darwin.sbom.sigstore.json is present in release v0.0.0-rehearsal.2
+ for asset in "${ASSETS[@]}"
+ for suffix in '' .spdx.json .provenance.sigstore.json .sbom.sigstore.json
+ gh release verify-asset v0.0.0-rehearsal.2 ts-x86_64-apple-darwin --repo prk-Jr/trusted-server
Calculated digest for ts-x86_64-apple-darwin: sha256:5f7ac1d7f7cf879a08ac8a767aa5dc9f9c92994f2188b2613f2b4739e86de3b0
Resolved tag v0.0.0-rehearsal.2 to sha1:41896cb0798f98e759c020965ed675fe1e8808dc
Loaded attestation from GitHub API

✓ Verification succeeded! ts-x86_64-apple-darwin is present in release v0.0.0-rehearsal.2
+ for suffix in '' .spdx.json .provenance.sigstore.json .sbom.sigstore.json
+ gh release verify-asset v0.0.0-rehearsal.2 ts-x86_64-apple-darwin.spdx.json --repo prk-Jr/trusted-server
Calculated digest for ts-x86_64-apple-darwin.spdx.json: sha256:d1febe34dc5be26837c9f7cdbbbaabfcf32ced4e18bcbde2e5117f46ae292725
Resolved tag v0.0.0-rehearsal.2 to sha1:41896cb0798f98e759c020965ed675fe1e8808dc
Loaded attestation from GitHub API

✓ Verification succeeded! ts-x86_64-apple-darwin.spdx.json is present in release v0.0.0-rehearsal.2
+ for suffix in '' .spdx.json .provenance.sigstore.json .sbom.sigstore.json
+ gh release verify-asset v0.0.0-rehearsal.2 ts-x86_64-apple-darwin.provenance.sigstore.json --repo prk-Jr/trusted-server
Calculated digest for ts-x86_64-apple-darwin.provenance.sigstore.json: sha256:c7205112b4423c03112a119325a64c13f81ea64308b9112dea828ea7c56887a9
Resolved tag v0.0.0-rehearsal.2 to sha1:41896cb0798f98e759c020965ed675fe1e8808dc
Loaded attestation from GitHub API

✓ Verification succeeded! ts-x86_64-apple-darwin.provenance.sigstore.json is present in release v0.0.0-rehearsal.2
+ for suffix in '' .spdx.json .provenance.sigstore.json .sbom.sigstore.json
+ gh release verify-asset v0.0.0-rehearsal.2 ts-x86_64-apple-darwin.sbom.sigstore.json --repo prk-Jr/trusted-server
Calculated digest for ts-x86_64-apple-darwin.sbom.sigstore.json: sha256:48f523a296fec23e65a87e7294690ae23cd3c5627b8c282714c370976b4e5b73
Resolved tag v0.0.0-rehearsal.2 to sha1:41896cb0798f98e759c020965ed675fe1e8808dc
Loaded attestation from GitHub API

✓ Verification succeeded! ts-x86_64-apple-darwin.sbom.sigstore.json is present in release v0.0.0-rehearsal.2
+ gh release verify-asset v0.0.0-rehearsal.2 SHA256SUMS --repo prk-Jr/trusted-server
Calculated digest for SHA256SUMS: sha256:476fb3a4f484fbd869ef2999641fec71bda78cbc7060869d781293bf6864f1a5
Resolved tag v0.0.0-rehearsal.2 to sha1:41896cb0798f98e759c020965ed675fe1e8808dc
Loaded attestation from GitHub API

✓ Verification succeeded! SHA256SUMS is present in release v0.0.0-rehearsal.2
+ shasum -a 256 --check SHA256SUMS
trusted-server-fastly.wasm: OK
trusted-server-fastly.wasm.spdx.json: OK
trusted-server-fastly.wasm.provenance.sigstore.json: OK
trusted-server-fastly.wasm.sbom.sigstore.json: OK
ts-aarch64-apple-darwin: OK
ts-aarch64-apple-darwin.spdx.json: OK
ts-aarch64-apple-darwin.provenance.sigstore.json: OK
ts-aarch64-apple-darwin.sbom.sigstore.json: OK
ts-x86_64-apple-darwin: OK
ts-x86_64-apple-darwin.spdx.json: OK
ts-x86_64-apple-darwin.provenance.sigstore.json: OK
ts-x86_64-apple-darwin.sbom.sigstore.json: OK
ts-x86_64-unknown-linux-gnu: OK
ts-x86_64-unknown-linux-gnu.spdx.json: OK
ts-x86_64-unknown-linux-gnu.provenance.sigstore.json: OK
ts-x86_64-unknown-linux-gnu.sbom.sigstore.json: OK
+ WORKFLOW=prk-Jr/trusted-server/.github/workflows/release-build.yml
+ for asset in "${ASSETS[@]}"
+ gh attestation verify trusted-server-fastly.wasm --repo prk-Jr/trusted-server --bundle trusted-server-fastly.wasm.provenance.sigstore.json --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml --source-ref refs/tags/v0.0.0-rehearsal.2 --source-digest 41896cb0798f98e759c020965ed675fe1e8808dc --signer-digest 41896cb0798f98e759c020965ed675fe1e8808dc --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1
+ gh attestation verify trusted-server-fastly.wasm --repo prk-Jr/trusted-server --bundle trusted-server-fastly.wasm.sbom.sigstore.json --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml --source-ref refs/tags/v0.0.0-rehearsal.2 --source-digest 41896cb0798f98e759c020965ed675fe1e8808dc --signer-digest 41896cb0798f98e759c020965ed675fe1e8808dc --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3
+ for asset in "${ASSETS[@]}"
+ gh attestation verify ts-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --bundle ts-x86_64-unknown-linux-gnu.provenance.sigstore.json --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml --source-ref refs/tags/v0.0.0-rehearsal.2 --source-digest 41896cb0798f98e759c020965ed675fe1e8808dc --signer-digest 41896cb0798f98e759c020965ed675fe1e8808dc --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1
+ gh attestation verify ts-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --bundle ts-x86_64-unknown-linux-gnu.sbom.sigstore.json --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml --source-ref refs/tags/v0.0.0-rehearsal.2 --source-digest 41896cb0798f98e759c020965ed675fe1e8808dc --signer-digest 41896cb0798f98e759c020965ed675fe1e8808dc --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3
+ for asset in "${ASSETS[@]}"
+ gh attestation verify ts-aarch64-apple-darwin --repo prk-Jr/trusted-server --bundle ts-aarch64-apple-darwin.provenance.sigstore.json --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml --source-ref refs/tags/v0.0.0-rehearsal.2 --source-digest 41896cb0798f98e759c020965ed675fe1e8808dc --signer-digest 41896cb0798f98e759c020965ed675fe1e8808dc --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1
+ gh attestation verify ts-aarch64-apple-darwin --repo prk-Jr/trusted-server --bundle ts-aarch64-apple-darwin.sbom.sigstore.json --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml --source-ref refs/tags/v0.0.0-rehearsal.2 --source-digest 41896cb0798f98e759c020965ed675fe1e8808dc --signer-digest 41896cb0798f98e759c020965ed675fe1e8808dc --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3
+ for asset in "${ASSETS[@]}"
+ gh attestation verify ts-x86_64-apple-darwin --repo prk-Jr/trusted-server --bundle ts-x86_64-apple-darwin.provenance.sigstore.json --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml --source-ref refs/tags/v0.0.0-rehearsal.2 --source-digest 41896cb0798f98e759c020965ed675fe1e8808dc --signer-digest 41896cb0798f98e759c020965ed675fe1e8808dc --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1
+ gh attestation verify ts-x86_64-apple-darwin --repo prk-Jr/trusted-server --bundle ts-x86_64-apple-darwin.sbom.sigstore.json --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml --source-ref refs/tags/v0.0.0-rehearsal.2 --source-digest 41896cb0798f98e759c020965ed675fe1e8808dc --signer-digest 41896cb0798f98e759c020965ed675fe1e8808dc --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3
+ IDENTITY=https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.2
+ for asset in "${ASSETS[@]}"
+ gh attestation verify trusted-server-fastly.wasm --repo prk-Jr/trusted-server --bundle trusted-server-fastly.wasm.provenance.sigstore.json --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.2 --source-ref refs/tags/v0.0.0-rehearsal.2 --source-digest 41896cb0798f98e759c020965ed675fe1e8808dc --signer-digest 41896cb0798f98e759c020965ed675fe1e8808dc --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1
+ gh attestation verify trusted-server-fastly.wasm --repo prk-Jr/trusted-server --bundle trusted-server-fastly.wasm.sbom.sigstore.json --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.2 --source-ref refs/tags/v0.0.0-rehearsal.2 --source-digest 41896cb0798f98e759c020965ed675fe1e8808dc --signer-digest 41896cb0798f98e759c020965ed675fe1e8808dc --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --format json
+ jq -e --slurpfile document trusted-server-fastly.wasm.spdx.json 'length == 1 and .[0].verificationResult.statement.predicate == $document[0]' trusted-server-fastly.wasm.sbom-verification.json
true
+ for asset in "${ASSETS[@]}"
+ gh attestation verify ts-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --bundle ts-x86_64-unknown-linux-gnu.provenance.sigstore.json --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.2 --source-ref refs/tags/v0.0.0-rehearsal.2 --source-digest 41896cb0798f98e759c020965ed675fe1e8808dc --signer-digest 41896cb0798f98e759c020965ed675fe1e8808dc --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1
+ gh attestation verify ts-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --bundle ts-x86_64-unknown-linux-gnu.sbom.sigstore.json --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.2 --source-ref refs/tags/v0.0.0-rehearsal.2 --source-digest 41896cb0798f98e759c020965ed675fe1e8808dc --signer-digest 41896cb0798f98e759c020965ed675fe1e8808dc --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --format json
+ jq -e --slurpfile document ts-x86_64-unknown-linux-gnu.spdx.json 'length == 1 and .[0].verificationResult.statement.predicate == $document[0]' ts-x86_64-unknown-linux-gnu.sbom-verification.json
true
+ for asset in "${ASSETS[@]}"
+ gh attestation verify ts-aarch64-apple-darwin --repo prk-Jr/trusted-server --bundle ts-aarch64-apple-darwin.provenance.sigstore.json --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.2 --source-ref refs/tags/v0.0.0-rehearsal.2 --source-digest 41896cb0798f98e759c020965ed675fe1e8808dc --signer-digest 41896cb0798f98e759c020965ed675fe1e8808dc --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1
+ gh attestation verify ts-aarch64-apple-darwin --repo prk-Jr/trusted-server --bundle ts-aarch64-apple-darwin.sbom.sigstore.json --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.2 --source-ref refs/tags/v0.0.0-rehearsal.2 --source-digest 41896cb0798f98e759c020965ed675fe1e8808dc --signer-digest 41896cb0798f98e759c020965ed675fe1e8808dc --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --format json
+ jq -e --slurpfile document ts-aarch64-apple-darwin.spdx.json 'length == 1 and .[0].verificationResult.statement.predicate == $document[0]' ts-aarch64-apple-darwin.sbom-verification.json
true
+ for asset in "${ASSETS[@]}"
+ gh attestation verify ts-x86_64-apple-darwin --repo prk-Jr/trusted-server --bundle ts-x86_64-apple-darwin.provenance.sigstore.json --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.2 --source-ref refs/tags/v0.0.0-rehearsal.2 --source-digest 41896cb0798f98e759c020965ed675fe1e8808dc --signer-digest 41896cb0798f98e759c020965ed675fe1e8808dc --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1
+ gh attestation verify ts-x86_64-apple-darwin --repo prk-Jr/trusted-server --bundle ts-x86_64-apple-darwin.sbom.sigstore.json --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.2 --source-ref refs/tags/v0.0.0-rehearsal.2 --source-digest 41896cb0798f98e759c020965ed675fe1e8808dc --signer-digest 41896cb0798f98e759c020965ed675fe1e8808dc --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --format json
+ jq -e --slurpfile document ts-x86_64-apple-darwin.spdx.json 'length == 1 and .[0].verificationResult.statement.predicate == $document[0]' ts-x86_64-apple-darwin.sbom-verification.json
true

Verification exit status: 0

@prk-Jr

prk-Jr commented Oct 22, 2026

Copy link
Copy Markdown
Collaborator Author

Successful rehearsal at ca902b6fea57f6cc37d2054687b4996687e9c476, explicitly approved lightweight fork tag v0.0.0-rehearsal.3.

Workflow — all jobs passed · immutable release · publisher log.

Release ID 420812096: immutable=true, draft=false, 17 exact nonempty assets (four binaries, four SPDX2.3 documents, eight real action-produced bundles and SHA256SUMS). No index, inventory, build-evidence, build-recipe or rebuild-check companions.

All four builds, all four isolated signing jobs, publication, cryptographic release/membership verification and the final release-ID/API read passed. The connection fix is exercised successfully; no mutation retry or tag reuse occurred. Immutable .2 remains untouched. No IAB tags, releases or settings were changed.

Independent verification completed with exit status 0 using checksum-verified GitHub CLI2.102.0, matching the publisher's recorded version: one release verification, 17 asset verifications, 16 attestation verifications (four binaries × provenance/SPDX × signer-prefix/exact tag-ref identity), all16 checksum entries and four signed-SPDX predicate comparisons. Commands are the guide's verification blocks with only repository/tag/commit substitutions.

Full verification transcript — commands and output
gh version 2.102.0 (2026-09-30)
https://github.com/cli/cli/releases/tag/v2.102.0
+ set -euo pipefail
+ REPO=prk-Jr/trusted-server
+ TAG=v0.0.0-rehearsal.3
+ COMMIT=ca902b6fea57f6cc37d2054687b4996687e9c476
+ ASSETS=(trusted-server-fastly.wasm ts-x86_64-unknown-linux-gnu ts-aarch64-apple-darwin ts-x86_64-apple-darwin)
+ gh release download v0.0.0-rehearsal.3 --repo prk-Jr/trusted-server --dir .
++ gh api repos/prk-Jr/trusted-server/releases/tags/v0.0.0-rehearsal.3 --jq .immutable
+ test true = true
+ gh release verify v0.0.0-rehearsal.3 --repo prk-Jr/trusted-server
Resolved tag v0.0.0-rehearsal.3 to sha1:ca902b6fea57f6cc37d2054687b4996687e9c476
Loaded attestation from GitHub API
✓ Release v0.0.0-rehearsal.3 verified!

Assets
SHA256SUMS	sha256:29686a2ae6ada2c3fd0ac199ae6de311f911833a8c54fa440dd1ea7b96af80fa
trusted-server-fastly.wasm	sha256:89d37e3c609352c02db926f84855207cced5bdbf20ebe64e749508201930839a
trusted-server-fastly.wasm.provenance.sigstore.json	sha256:5496be6f043325eb48825f7b4a47cad8101ece122b8079dd6de9cd0b594de027
trusted-server-fastly.wasm.sbom.sigstore.json	sha256:ed1cc14bc191263001bc223450d5e927f6190f94a87287fa91f0675248789685
trusted-server-fastly.wasm.spdx.json	sha256:39ce9539a54c3b429c63703bddcdad8003b7f82acee9fa65cb64f3dc7f1389fa
ts-aarch64-apple-darwin	sha256:e9c304e55fceb4d0e2f6ac14ac5be9bed368b2628d1a90d6f4539757e129469a
ts-aarch64-apple-darwin.provenance.sigstore.json	sha256:5077668b55b4d60c9da64e128898d168c40b08d4b0ed8c056f0b1cddcd4e03b9
ts-aarch64-apple-darwin.sbom.sigstore.json	sha256:abfdb64938a232d8bda4c9dea6a033b17ce8d99180bb45f0ff04f85db216ecc3
ts-aarch64-apple-darwin.spdx.json	sha256:829d68025e1819349df37f48dfc920f077987aafaae295be1dad3745c465b82b
ts-x86_64-apple-darwin	sha256:5f7ac1d7f7cf879a08ac8a767aa5dc9f9c92994f2188b2613f2b4739e86de3b0
ts-x86_64-apple-darwin.provenance.sigstore.json	sha256:33bff32c9168afd637f05d42dfebf5868f56df67bdb78311bbd10d3c94a95887
ts-x86_64-apple-darwin.sbom.sigstore.json	sha256:27fb0981574dccad90fd3727722791efa9f652c11123c582c6e0531c0a330e96
ts-x86_64-apple-darwin.spdx.json	sha256:4c526f338f566d390df2ed86161b77d5d56b7fef97f381200dbfd41e8b1e111c
ts-x86_64-unknown-linux-gnu	sha256:2e734d6373ff472eb9799cbdefff5c235c97a3689c2e9a41adbc9f6df3b36c22
ts-x86_64-unknown-linux-gnu.provenance.sigstore.json	sha256:090fa5ed56e352571ba8d56b7599ad315fdcf77c8227fd1aeb4dc320f3f6f150
ts-x86_64-unknown-linux-gnu.sbom.sigstore.json	sha256:c34a77631639638b47b779096fa866633e4a37fd8b19d52339e1b35362348ba1
ts-x86_64-unknown-linux-gnu.spdx.json	sha256:da354431226d3dd9f51bc9ec09cc8ab560cfa0bc231657dc3fde3b6b3d6ff549

+ for asset in "${ASSETS[@]}"
+ for suffix in '' .spdx.json .provenance.sigstore.json .sbom.sigstore.json
+ gh release verify-asset v0.0.0-rehearsal.3 trusted-server-fastly.wasm --repo prk-Jr/trusted-server
Calculated digest for trusted-server-fastly.wasm: sha256:89d37e3c609352c02db926f84855207cced5bdbf20ebe64e749508201930839a
Resolved tag v0.0.0-rehearsal.3 to sha1:ca902b6fea57f6cc37d2054687b4996687e9c476
Loaded attestation from GitHub API

✓ Verification succeeded! trusted-server-fastly.wasm is present in release v0.0.0-rehearsal.3
+ for suffix in '' .spdx.json .provenance.sigstore.json .sbom.sigstore.json
+ gh release verify-asset v0.0.0-rehearsal.3 trusted-server-fastly.wasm.spdx.json --repo prk-Jr/trusted-server
Calculated digest for trusted-server-fastly.wasm.spdx.json: sha256:39ce9539a54c3b429c63703bddcdad8003b7f82acee9fa65cb64f3dc7f1389fa
Resolved tag v0.0.0-rehearsal.3 to sha1:ca902b6fea57f6cc37d2054687b4996687e9c476
Loaded attestation from GitHub API

✓ Verification succeeded! trusted-server-fastly.wasm.spdx.json is present in release v0.0.0-rehearsal.3
+ for suffix in '' .spdx.json .provenance.sigstore.json .sbom.sigstore.json
+ gh release verify-asset v0.0.0-rehearsal.3 trusted-server-fastly.wasm.provenance.sigstore.json --repo prk-Jr/trusted-server
Calculated digest for trusted-server-fastly.wasm.provenance.sigstore.json: sha256:5496be6f043325eb48825f7b4a47cad8101ece122b8079dd6de9cd0b594de027
Resolved tag v0.0.0-rehearsal.3 to sha1:ca902b6fea57f6cc37d2054687b4996687e9c476
Loaded attestation from GitHub API

✓ Verification succeeded! trusted-server-fastly.wasm.provenance.sigstore.json is present in release v0.0.0-rehearsal.3
+ for suffix in '' .spdx.json .provenance.sigstore.json .sbom.sigstore.json
+ gh release verify-asset v0.0.0-rehearsal.3 trusted-server-fastly.wasm.sbom.sigstore.json --repo prk-Jr/trusted-server
Calculated digest for trusted-server-fastly.wasm.sbom.sigstore.json: sha256:ed1cc14bc191263001bc223450d5e927f6190f94a87287fa91f0675248789685
Resolved tag v0.0.0-rehearsal.3 to sha1:ca902b6fea57f6cc37d2054687b4996687e9c476
Loaded attestation from GitHub API

✓ Verification succeeded! trusted-server-fastly.wasm.sbom.sigstore.json is present in release v0.0.0-rehearsal.3
+ for asset in "${ASSETS[@]}"
+ for suffix in '' .spdx.json .provenance.sigstore.json .sbom.sigstore.json
+ gh release verify-asset v0.0.0-rehearsal.3 ts-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server
Calculated digest for ts-x86_64-unknown-linux-gnu: sha256:2e734d6373ff472eb9799cbdefff5c235c97a3689c2e9a41adbc9f6df3b36c22
Resolved tag v0.0.0-rehearsal.3 to sha1:ca902b6fea57f6cc37d2054687b4996687e9c476
Loaded attestation from GitHub API

✓ Verification succeeded! ts-x86_64-unknown-linux-gnu is present in release v0.0.0-rehearsal.3
+ for suffix in '' .spdx.json .provenance.sigstore.json .sbom.sigstore.json
+ gh release verify-asset v0.0.0-rehearsal.3 ts-x86_64-unknown-linux-gnu.spdx.json --repo prk-Jr/trusted-server
Calculated digest for ts-x86_64-unknown-linux-gnu.spdx.json: sha256:da354431226d3dd9f51bc9ec09cc8ab560cfa0bc231657dc3fde3b6b3d6ff549
Resolved tag v0.0.0-rehearsal.3 to sha1:ca902b6fea57f6cc37d2054687b4996687e9c476
Loaded attestation from GitHub API

✓ Verification succeeded! ts-x86_64-unknown-linux-gnu.spdx.json is present in release v0.0.0-rehearsal.3
+ for suffix in '' .spdx.json .provenance.sigstore.json .sbom.sigstore.json
+ gh release verify-asset v0.0.0-rehearsal.3 ts-x86_64-unknown-linux-gnu.provenance.sigstore.json --repo prk-Jr/trusted-server
Calculated digest for ts-x86_64-unknown-linux-gnu.provenance.sigstore.json: sha256:090fa5ed56e352571ba8d56b7599ad315fdcf77c8227fd1aeb4dc320f3f6f150
Resolved tag v0.0.0-rehearsal.3 to sha1:ca902b6fea57f6cc37d2054687b4996687e9c476
Loaded attestation from GitHub API

✓ Verification succeeded! ts-x86_64-unknown-linux-gnu.provenance.sigstore.json is present in release v0.0.0-rehearsal.3
+ for suffix in '' .spdx.json .provenance.sigstore.json .sbom.sigstore.json
+ gh release verify-asset v0.0.0-rehearsal.3 ts-x86_64-unknown-linux-gnu.sbom.sigstore.json --repo prk-Jr/trusted-server
Calculated digest for ts-x86_64-unknown-linux-gnu.sbom.sigstore.json: sha256:c34a77631639638b47b779096fa866633e4a37fd8b19d52339e1b35362348ba1
Resolved tag v0.0.0-rehearsal.3 to sha1:ca902b6fea57f6cc37d2054687b4996687e9c476
Loaded attestation from GitHub API

✓ Verification succeeded! ts-x86_64-unknown-linux-gnu.sbom.sigstore.json is present in release v0.0.0-rehearsal.3
+ for asset in "${ASSETS[@]}"
+ for suffix in '' .spdx.json .provenance.sigstore.json .sbom.sigstore.json
+ gh release verify-asset v0.0.0-rehearsal.3 ts-aarch64-apple-darwin --repo prk-Jr/trusted-server
Calculated digest for ts-aarch64-apple-darwin: sha256:e9c304e55fceb4d0e2f6ac14ac5be9bed368b2628d1a90d6f4539757e129469a
Resolved tag v0.0.0-rehearsal.3 to sha1:ca902b6fea57f6cc37d2054687b4996687e9c476
Loaded attestation from GitHub API

✓ Verification succeeded! ts-aarch64-apple-darwin is present in release v0.0.0-rehearsal.3
+ for suffix in '' .spdx.json .provenance.sigstore.json .sbom.sigstore.json
+ gh release verify-asset v0.0.0-rehearsal.3 ts-aarch64-apple-darwin.spdx.json --repo prk-Jr/trusted-server
Calculated digest for ts-aarch64-apple-darwin.spdx.json: sha256:829d68025e1819349df37f48dfc920f077987aafaae295be1dad3745c465b82b
Resolved tag v0.0.0-rehearsal.3 to sha1:ca902b6fea57f6cc37d2054687b4996687e9c476
Loaded attestation from GitHub API

✓ Verification succeeded! ts-aarch64-apple-darwin.spdx.json is present in release v0.0.0-rehearsal.3
+ for suffix in '' .spdx.json .provenance.sigstore.json .sbom.sigstore.json
+ gh release verify-asset v0.0.0-rehearsal.3 ts-aarch64-apple-darwin.provenance.sigstore.json --repo prk-Jr/trusted-server
Calculated digest for ts-aarch64-apple-darwin.provenance.sigstore.json: sha256:5077668b55b4d60c9da64e128898d168c40b08d4b0ed8c056f0b1cddcd4e03b9
Resolved tag v0.0.0-rehearsal.3 to sha1:ca902b6fea57f6cc37d2054687b4996687e9c476
Loaded attestation from GitHub API

✓ Verification succeeded! ts-aarch64-apple-darwin.provenance.sigstore.json is present in release v0.0.0-rehearsal.3
+ for suffix in '' .spdx.json .provenance.sigstore.json .sbom.sigstore.json
+ gh release verify-asset v0.0.0-rehearsal.3 ts-aarch64-apple-darwin.sbom.sigstore.json --repo prk-Jr/trusted-server
Calculated digest for ts-aarch64-apple-darwin.sbom.sigstore.json: sha256:abfdb64938a232d8bda4c9dea6a033b17ce8d99180bb45f0ff04f85db216ecc3
Resolved tag v0.0.0-rehearsal.3 to sha1:ca902b6fea57f6cc37d2054687b4996687e9c476
Loaded attestation from GitHub API

✓ Verification succeeded! ts-aarch64-apple-darwin.sbom.sigstore.json is present in release v0.0.0-rehearsal.3
+ for asset in "${ASSETS[@]}"
+ for suffix in '' .spdx.json .provenance.sigstore.json .sbom.sigstore.json
+ gh release verify-asset v0.0.0-rehearsal.3 ts-x86_64-apple-darwin --repo prk-Jr/trusted-server
Calculated digest for ts-x86_64-apple-darwin: sha256:5f7ac1d7f7cf879a08ac8a767aa5dc9f9c92994f2188b2613f2b4739e86de3b0
Resolved tag v0.0.0-rehearsal.3 to sha1:ca902b6fea57f6cc37d2054687b4996687e9c476
Loaded attestation from GitHub API

✓ Verification succeeded! ts-x86_64-apple-darwin is present in release v0.0.0-rehearsal.3
+ for suffix in '' .spdx.json .provenance.sigstore.json .sbom.sigstore.json
+ gh release verify-asset v0.0.0-rehearsal.3 ts-x86_64-apple-darwin.spdx.json --repo prk-Jr/trusted-server
Calculated digest for ts-x86_64-apple-darwin.spdx.json: sha256:4c526f338f566d390df2ed86161b77d5d56b7fef97f381200dbfd41e8b1e111c
Resolved tag v0.0.0-rehearsal.3 to sha1:ca902b6fea57f6cc37d2054687b4996687e9c476
Loaded attestation from GitHub API

✓ Verification succeeded! ts-x86_64-apple-darwin.spdx.json is present in release v0.0.0-rehearsal.3
+ for suffix in '' .spdx.json .provenance.sigstore.json .sbom.sigstore.json
+ gh release verify-asset v0.0.0-rehearsal.3 ts-x86_64-apple-darwin.provenance.sigstore.json --repo prk-Jr/trusted-server
Calculated digest for ts-x86_64-apple-darwin.provenance.sigstore.json: sha256:33bff32c9168afd637f05d42dfebf5868f56df67bdb78311bbd10d3c94a95887
Resolved tag v0.0.0-rehearsal.3 to sha1:ca902b6fea57f6cc37d2054687b4996687e9c476
Loaded attestation from GitHub API

✓ Verification succeeded! ts-x86_64-apple-darwin.provenance.sigstore.json is present in release v0.0.0-rehearsal.3
+ for suffix in '' .spdx.json .provenance.sigstore.json .sbom.sigstore.json
+ gh release verify-asset v0.0.0-rehearsal.3 ts-x86_64-apple-darwin.sbom.sigstore.json --repo prk-Jr/trusted-server
Calculated digest for ts-x86_64-apple-darwin.sbom.sigstore.json: sha256:27fb0981574dccad90fd3727722791efa9f652c11123c582c6e0531c0a330e96
Resolved tag v0.0.0-rehearsal.3 to sha1:ca902b6fea57f6cc37d2054687b4996687e9c476
Loaded attestation from GitHub API

✓ Verification succeeded! ts-x86_64-apple-darwin.sbom.sigstore.json is present in release v0.0.0-rehearsal.3
+ gh release verify-asset v0.0.0-rehearsal.3 SHA256SUMS --repo prk-Jr/trusted-server
Calculated digest for SHA256SUMS: sha256:29686a2ae6ada2c3fd0ac199ae6de311f911833a8c54fa440dd1ea7b96af80fa
Resolved tag v0.0.0-rehearsal.3 to sha1:ca902b6fea57f6cc37d2054687b4996687e9c476
Loaded attestation from GitHub API

✓ Verification succeeded! SHA256SUMS is present in release v0.0.0-rehearsal.3
+ shasum -a 256 --check SHA256SUMS
trusted-server-fastly.wasm: OK
trusted-server-fastly.wasm.spdx.json: OK
trusted-server-fastly.wasm.provenance.sigstore.json: OK
trusted-server-fastly.wasm.sbom.sigstore.json: OK
ts-aarch64-apple-darwin: OK
ts-aarch64-apple-darwin.spdx.json: OK
ts-aarch64-apple-darwin.provenance.sigstore.json: OK
ts-aarch64-apple-darwin.sbom.sigstore.json: OK
ts-x86_64-apple-darwin: OK
ts-x86_64-apple-darwin.spdx.json: OK
ts-x86_64-apple-darwin.provenance.sigstore.json: OK
ts-x86_64-apple-darwin.sbom.sigstore.json: OK
ts-x86_64-unknown-linux-gnu: OK
ts-x86_64-unknown-linux-gnu.spdx.json: OK
ts-x86_64-unknown-linux-gnu.provenance.sigstore.json: OK
ts-x86_64-unknown-linux-gnu.sbom.sigstore.json: OK
+ WORKFLOW=prk-Jr/trusted-server/.github/workflows/release-build.yml
+ for asset in "${ASSETS[@]}"
+ gh attestation verify trusted-server-fastly.wasm --repo prk-Jr/trusted-server --bundle trusted-server-fastly.wasm.provenance.sigstore.json --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml --source-ref refs/tags/v0.0.0-rehearsal.3 --source-digest ca902b6fea57f6cc37d2054687b4996687e9c476 --signer-digest ca902b6fea57f6cc37d2054687b4996687e9c476 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1
+ gh attestation verify trusted-server-fastly.wasm --repo prk-Jr/trusted-server --bundle trusted-server-fastly.wasm.sbom.sigstore.json --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml --source-ref refs/tags/v0.0.0-rehearsal.3 --source-digest ca902b6fea57f6cc37d2054687b4996687e9c476 --signer-digest ca902b6fea57f6cc37d2054687b4996687e9c476 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3
+ for asset in "${ASSETS[@]}"
+ gh attestation verify ts-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --bundle ts-x86_64-unknown-linux-gnu.provenance.sigstore.json --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml --source-ref refs/tags/v0.0.0-rehearsal.3 --source-digest ca902b6fea57f6cc37d2054687b4996687e9c476 --signer-digest ca902b6fea57f6cc37d2054687b4996687e9c476 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1
+ gh attestation verify ts-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --bundle ts-x86_64-unknown-linux-gnu.sbom.sigstore.json --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml --source-ref refs/tags/v0.0.0-rehearsal.3 --source-digest ca902b6fea57f6cc37d2054687b4996687e9c476 --signer-digest ca902b6fea57f6cc37d2054687b4996687e9c476 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3
+ for asset in "${ASSETS[@]}"
+ gh attestation verify ts-aarch64-apple-darwin --repo prk-Jr/trusted-server --bundle ts-aarch64-apple-darwin.provenance.sigstore.json --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml --source-ref refs/tags/v0.0.0-rehearsal.3 --source-digest ca902b6fea57f6cc37d2054687b4996687e9c476 --signer-digest ca902b6fea57f6cc37d2054687b4996687e9c476 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1
+ gh attestation verify ts-aarch64-apple-darwin --repo prk-Jr/trusted-server --bundle ts-aarch64-apple-darwin.sbom.sigstore.json --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml --source-ref refs/tags/v0.0.0-rehearsal.3 --source-digest ca902b6fea57f6cc37d2054687b4996687e9c476 --signer-digest ca902b6fea57f6cc37d2054687b4996687e9c476 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3
+ for asset in "${ASSETS[@]}"
+ gh attestation verify ts-x86_64-apple-darwin --repo prk-Jr/trusted-server --bundle ts-x86_64-apple-darwin.provenance.sigstore.json --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml --source-ref refs/tags/v0.0.0-rehearsal.3 --source-digest ca902b6fea57f6cc37d2054687b4996687e9c476 --signer-digest ca902b6fea57f6cc37d2054687b4996687e9c476 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1
+ gh attestation verify ts-x86_64-apple-darwin --repo prk-Jr/trusted-server --bundle ts-x86_64-apple-darwin.sbom.sigstore.json --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml --source-ref refs/tags/v0.0.0-rehearsal.3 --source-digest ca902b6fea57f6cc37d2054687b4996687e9c476 --signer-digest ca902b6fea57f6cc37d2054687b4996687e9c476 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3
+ IDENTITY=https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.3
+ for asset in "${ASSETS[@]}"
+ gh attestation verify trusted-server-fastly.wasm --repo prk-Jr/trusted-server --bundle trusted-server-fastly.wasm.provenance.sigstore.json --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.3 --source-ref refs/tags/v0.0.0-rehearsal.3 --source-digest ca902b6fea57f6cc37d2054687b4996687e9c476 --signer-digest ca902b6fea57f6cc37d2054687b4996687e9c476 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1
+ gh attestation verify trusted-server-fastly.wasm --repo prk-Jr/trusted-server --bundle trusted-server-fastly.wasm.sbom.sigstore.json --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.3 --source-ref refs/tags/v0.0.0-rehearsal.3 --source-digest ca902b6fea57f6cc37d2054687b4996687e9c476 --signer-digest ca902b6fea57f6cc37d2054687b4996687e9c476 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --format json
+ jq -e --slurpfile document trusted-server-fastly.wasm.spdx.json 'length == 1 and .[0].verificationResult.statement.predicate == $document[0]' trusted-server-fastly.wasm.sbom-verification.json
true
+ for asset in "${ASSETS[@]}"
+ gh attestation verify ts-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --bundle ts-x86_64-unknown-linux-gnu.provenance.sigstore.json --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.3 --source-ref refs/tags/v0.0.0-rehearsal.3 --source-digest ca902b6fea57f6cc37d2054687b4996687e9c476 --signer-digest ca902b6fea57f6cc37d2054687b4996687e9c476 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1
+ gh attestation verify ts-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --bundle ts-x86_64-unknown-linux-gnu.sbom.sigstore.json --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.3 --source-ref refs/tags/v0.0.0-rehearsal.3 --source-digest ca902b6fea57f6cc37d2054687b4996687e9c476 --signer-digest ca902b6fea57f6cc37d2054687b4996687e9c476 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --format json
+ jq -e --slurpfile document ts-x86_64-unknown-linux-gnu.spdx.json 'length == 1 and .[0].verificationResult.statement.predicate == $document[0]' ts-x86_64-unknown-linux-gnu.sbom-verification.json
true
+ for asset in "${ASSETS[@]}"
+ gh attestation verify ts-aarch64-apple-darwin --repo prk-Jr/trusted-server --bundle ts-aarch64-apple-darwin.provenance.sigstore.json --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.3 --source-ref refs/tags/v0.0.0-rehearsal.3 --source-digest ca902b6fea57f6cc37d2054687b4996687e9c476 --signer-digest ca902b6fea57f6cc37d2054687b4996687e9c476 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1
+ gh attestation verify ts-aarch64-apple-darwin --repo prk-Jr/trusted-server --bundle ts-aarch64-apple-darwin.sbom.sigstore.json --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.3 --source-ref refs/tags/v0.0.0-rehearsal.3 --source-digest ca902b6fea57f6cc37d2054687b4996687e9c476 --signer-digest ca902b6fea57f6cc37d2054687b4996687e9c476 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --format json
+ jq -e --slurpfile document ts-aarch64-apple-darwin.spdx.json 'length == 1 and .[0].verificationResult.statement.predicate == $document[0]' ts-aarch64-apple-darwin.sbom-verification.json
true
+ for asset in "${ASSETS[@]}"
+ gh attestation verify ts-x86_64-apple-darwin --repo prk-Jr/trusted-server --bundle ts-x86_64-apple-darwin.provenance.sigstore.json --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.3 --source-ref refs/tags/v0.0.0-rehearsal.3 --source-digest ca902b6fea57f6cc37d2054687b4996687e9c476 --signer-digest ca902b6fea57f6cc37d2054687b4996687e9c476 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1
+ gh attestation verify ts-x86_64-apple-darwin --repo prk-Jr/trusted-server --bundle ts-x86_64-apple-darwin.sbom.sigstore.json --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.3 --source-ref refs/tags/v0.0.0-rehearsal.3 --source-digest ca902b6fea57f6cc37d2054687b4996687e9c476 --signer-digest ca902b6fea57f6cc37d2054687b4996687e9c476 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --format json
+ jq -e --slurpfile document ts-x86_64-apple-darwin.spdx.json 'length == 1 and .[0].verificationResult.statement.predicate == $document[0]' ts-x86_64-apple-darwin.sbom-verification.json
true

Verification exit status: 0

@prk-Jr

prk-Jr commented Oct 22, 2026

Copy link
Copy Markdown
Collaborator Author

Rehearsal v0.0.0-rehearsal.4 — offline verification and local Fastly execution at 922c2211c0cc7941bfc8ffa9f775ef8ac0971232.

GitHub CLI 2.102.0 matches the publisher log. Its official macOS ARM archive was checksum-verified (SHA-256 da922c20d1792e5b2cbf375593d7a658acf034c12c84e007e71c76ef959c337e). Public trust roots were fetched once while online; SHA-256 65ca537f6ed8a47fd0e560c421baa1f6c1efb8b25fc200d8c5c02c0e92eb2b9c. Local directory paths below are normalized; flags, identities, digests and results are unchanged.

Offline proof

All four binaries passed provenance and SPDX verification under OS-enforced network denial, with both signer identity forms, exact source/ref/signer digest pins, self-hosted runners denied, and published-SPDX predicate equality. No --offline flag is used.

gh --version
gh attestation trusted-root > trusted_root.jsonl
shasum -a 256 trusted_root.jsonl
/usr/bin/sandbox-exec -p '(version 1)(allow default)(deny network*)' env GH_TOKEN=offline-verification-no-network bash -x offline-verify.sh
gh version 2.102.0 (2026-09-30)
https://github.com/cli/cli/releases/tag/v2.102.0

curl: (6) Could not resolve host: api.github.com
SUCCESS: network-denial control refused an external HTTPS request (curl exit 6).
Full offline commands and success output
+ set -euxo pipefail
+ REPO=prk-Jr/trusted-server
+ TAG=v0.0.0-rehearsal.4
+ COMMIT=922c2211c0cc7941bfc8ffa9f775ef8ac0971232
+ WORKFLOW=prk-Jr/trusted-server/.github/workflows/release-build.yml
+ IDENTITY=https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.4
+ ASSETS=(trusted-server-fastly.wasm ts-x86_64-unknown-linux-gnu ts-aarch64-apple-darwin ts-x86_64-apple-darwin)
+ for asset in "${ASSETS[@]}"
+ for kind in provenance sbom
+ predicate=https://slsa.dev/provenance/v1
+ [[ provenance == sbom ]]
+ checks=(--repo "$REPO" --bundle "$asset.$kind.sigstore.json" --custom-trusted-root trusted_root.jsonl --source-ref "refs/tags/$TAG" --source-digest "$COMMIT" --signer-digest "$COMMIT" --deny-self-hosted-runners --predicate-type "$predicate")
+ gh attestation verify trusted-server-fastly.wasm --repo prk-Jr/trusted-server --bundle trusted-server-fastly.wasm.provenance.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.4 --source-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --signer-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
+ command gh attestation verify trusted-server-fastly.wasm --repo prk-Jr/trusted-server --bundle trusted-server-fastly.wasm.provenance.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.4 --source-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --signer-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
+ [[ attestation verify == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ printf 'SUCCESS: gh attestation verify %s with requested predicate, signer and source pins\n' trusted-server-fastly.wasm
SUCCESS: gh attestation verify trusted-server-fastly.wasm with requested predicate, signer and source pins
+ gh attestation verify trusted-server-fastly.wasm --repo prk-Jr/trusted-server --bundle trusted-server-fastly.wasm.provenance.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.4 --source-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --signer-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.4 --format json
+ command gh attestation verify trusted-server-fastly.wasm --repo prk-Jr/trusted-server --bundle trusted-server-fastly.wasm.provenance.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.4 --source-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --signer-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.4 --format json
+ [[ attestation verify == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ printf 'SUCCESS: gh attestation verify %s with requested predicate, signer and source pins\n' trusted-server-fastly.wasm
SUCCESS: gh attestation verify trusted-server-fastly.wasm with requested predicate, signer and source pins
+ [[ provenance == sbom ]]
+ for kind in provenance sbom
+ predicate=https://slsa.dev/provenance/v1
+ [[ sbom == sbom ]]
+ predicate=https://spdx.dev/Document/v2.3
+ checks=(--repo "$REPO" --bundle "$asset.$kind.sigstore.json" --custom-trusted-root trusted_root.jsonl --source-ref "refs/tags/$TAG" --source-digest "$COMMIT" --signer-digest "$COMMIT" --deny-self-hosted-runners --predicate-type "$predicate")
+ gh attestation verify trusted-server-fastly.wasm --repo prk-Jr/trusted-server --bundle trusted-server-fastly.wasm.sbom.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.4 --source-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --signer-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
+ command gh attestation verify trusted-server-fastly.wasm --repo prk-Jr/trusted-server --bundle trusted-server-fastly.wasm.sbom.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.4 --source-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --signer-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
+ [[ attestation verify == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ printf 'SUCCESS: gh attestation verify %s with requested predicate, signer and source pins\n' trusted-server-fastly.wasm
SUCCESS: gh attestation verify trusted-server-fastly.wasm with requested predicate, signer and source pins
+ gh attestation verify trusted-server-fastly.wasm --repo prk-Jr/trusted-server --bundle trusted-server-fastly.wasm.sbom.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.4 --source-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --signer-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.4 --format json
+ command gh attestation verify trusted-server-fastly.wasm --repo prk-Jr/trusted-server --bundle trusted-server-fastly.wasm.sbom.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.4 --source-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --signer-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.4 --format json
+ [[ attestation verify == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ printf 'SUCCESS: gh attestation verify %s with requested predicate, signer and source pins\n' trusted-server-fastly.wasm
SUCCESS: gh attestation verify trusted-server-fastly.wasm with requested predicate, signer and source pins
+ [[ sbom == sbom ]]
+ jq -e --slurpfile document trusted-server-fastly.wasm.spdx.json 'length == 1 and .[0].verificationResult.statement.predicate == $document[0]' trusted-server-fastly.wasm.offline-sbom-verification.json
true
+ for asset in "${ASSETS[@]}"
+ for kind in provenance sbom
+ predicate=https://slsa.dev/provenance/v1
+ [[ provenance == sbom ]]
+ checks=(--repo "$REPO" --bundle "$asset.$kind.sigstore.json" --custom-trusted-root trusted_root.jsonl --source-ref "refs/tags/$TAG" --source-digest "$COMMIT" --signer-digest "$COMMIT" --deny-self-hosted-runners --predicate-type "$predicate")
+ gh attestation verify ts-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --bundle ts-x86_64-unknown-linux-gnu.provenance.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.4 --source-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --signer-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
+ command gh attestation verify ts-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --bundle ts-x86_64-unknown-linux-gnu.provenance.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.4 --source-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --signer-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
+ [[ attestation verify == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ printf 'SUCCESS: gh attestation verify %s with requested predicate, signer and source pins\n' ts-x86_64-unknown-linux-gnu
SUCCESS: gh attestation verify ts-x86_64-unknown-linux-gnu with requested predicate, signer and source pins
+ gh attestation verify ts-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --bundle ts-x86_64-unknown-linux-gnu.provenance.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.4 --source-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --signer-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.4 --format json
+ command gh attestation verify ts-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --bundle ts-x86_64-unknown-linux-gnu.provenance.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.4 --source-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --signer-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.4 --format json
+ [[ attestation verify == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ printf 'SUCCESS: gh attestation verify %s with requested predicate, signer and source pins\n' ts-x86_64-unknown-linux-gnu
SUCCESS: gh attestation verify ts-x86_64-unknown-linux-gnu with requested predicate, signer and source pins
+ [[ provenance == sbom ]]
+ for kind in provenance sbom
+ predicate=https://slsa.dev/provenance/v1
+ [[ sbom == sbom ]]
+ predicate=https://spdx.dev/Document/v2.3
+ checks=(--repo "$REPO" --bundle "$asset.$kind.sigstore.json" --custom-trusted-root trusted_root.jsonl --source-ref "refs/tags/$TAG" --source-digest "$COMMIT" --signer-digest "$COMMIT" --deny-self-hosted-runners --predicate-type "$predicate")
+ gh attestation verify ts-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --bundle ts-x86_64-unknown-linux-gnu.sbom.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.4 --source-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --signer-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
+ command gh attestation verify ts-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --bundle ts-x86_64-unknown-linux-gnu.sbom.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.4 --source-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --signer-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
+ [[ attestation verify == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ printf 'SUCCESS: gh attestation verify %s with requested predicate, signer and source pins\n' ts-x86_64-unknown-linux-gnu
SUCCESS: gh attestation verify ts-x86_64-unknown-linux-gnu with requested predicate, signer and source pins
+ gh attestation verify ts-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --bundle ts-x86_64-unknown-linux-gnu.sbom.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.4 --source-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --signer-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.4 --format json
+ command gh attestation verify ts-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --bundle ts-x86_64-unknown-linux-gnu.sbom.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.4 --source-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --signer-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.4 --format json
+ [[ attestation verify == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ printf 'SUCCESS: gh attestation verify %s with requested predicate, signer and source pins\n' ts-x86_64-unknown-linux-gnu
SUCCESS: gh attestation verify ts-x86_64-unknown-linux-gnu with requested predicate, signer and source pins
+ [[ sbom == sbom ]]
+ jq -e --slurpfile document ts-x86_64-unknown-linux-gnu.spdx.json 'length == 1 and .[0].verificationResult.statement.predicate == $document[0]' ts-x86_64-unknown-linux-gnu.offline-sbom-verification.json
true
+ for asset in "${ASSETS[@]}"
+ for kind in provenance sbom
+ predicate=https://slsa.dev/provenance/v1
+ [[ provenance == sbom ]]
+ checks=(--repo "$REPO" --bundle "$asset.$kind.sigstore.json" --custom-trusted-root trusted_root.jsonl --source-ref "refs/tags/$TAG" --source-digest "$COMMIT" --signer-digest "$COMMIT" --deny-self-hosted-runners --predicate-type "$predicate")
+ gh attestation verify ts-aarch64-apple-darwin --repo prk-Jr/trusted-server --bundle ts-aarch64-apple-darwin.provenance.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.4 --source-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --signer-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
+ command gh attestation verify ts-aarch64-apple-darwin --repo prk-Jr/trusted-server --bundle ts-aarch64-apple-darwin.provenance.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.4 --source-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --signer-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
+ [[ attestation verify == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ printf 'SUCCESS: gh attestation verify %s with requested predicate, signer and source pins\n' ts-aarch64-apple-darwin
SUCCESS: gh attestation verify ts-aarch64-apple-darwin with requested predicate, signer and source pins
+ gh attestation verify ts-aarch64-apple-darwin --repo prk-Jr/trusted-server --bundle ts-aarch64-apple-darwin.provenance.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.4 --source-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --signer-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.4 --format json
+ command gh attestation verify ts-aarch64-apple-darwin --repo prk-Jr/trusted-server --bundle ts-aarch64-apple-darwin.provenance.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.4 --source-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --signer-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.4 --format json
+ [[ attestation verify == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ printf 'SUCCESS: gh attestation verify %s with requested predicate, signer and source pins\n' ts-aarch64-apple-darwin
SUCCESS: gh attestation verify ts-aarch64-apple-darwin with requested predicate, signer and source pins
+ [[ provenance == sbom ]]
+ for kind in provenance sbom
+ predicate=https://slsa.dev/provenance/v1
+ [[ sbom == sbom ]]
+ predicate=https://spdx.dev/Document/v2.3
+ checks=(--repo "$REPO" --bundle "$asset.$kind.sigstore.json" --custom-trusted-root trusted_root.jsonl --source-ref "refs/tags/$TAG" --source-digest "$COMMIT" --signer-digest "$COMMIT" --deny-self-hosted-runners --predicate-type "$predicate")
+ gh attestation verify ts-aarch64-apple-darwin --repo prk-Jr/trusted-server --bundle ts-aarch64-apple-darwin.sbom.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.4 --source-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --signer-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
+ command gh attestation verify ts-aarch64-apple-darwin --repo prk-Jr/trusted-server --bundle ts-aarch64-apple-darwin.sbom.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.4 --source-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --signer-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
+ [[ attestation verify == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ printf 'SUCCESS: gh attestation verify %s with requested predicate, signer and source pins\n' ts-aarch64-apple-darwin
SUCCESS: gh attestation verify ts-aarch64-apple-darwin with requested predicate, signer and source pins
+ gh attestation verify ts-aarch64-apple-darwin --repo prk-Jr/trusted-server --bundle ts-aarch64-apple-darwin.sbom.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.4 --source-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --signer-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.4 --format json
+ command gh attestation verify ts-aarch64-apple-darwin --repo prk-Jr/trusted-server --bundle ts-aarch64-apple-darwin.sbom.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.4 --source-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --signer-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.4 --format json
+ [[ attestation verify == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ printf 'SUCCESS: gh attestation verify %s with requested predicate, signer and source pins\n' ts-aarch64-apple-darwin
SUCCESS: gh attestation verify ts-aarch64-apple-darwin with requested predicate, signer and source pins
+ [[ sbom == sbom ]]
+ jq -e --slurpfile document ts-aarch64-apple-darwin.spdx.json 'length == 1 and .[0].verificationResult.statement.predicate == $document[0]' ts-aarch64-apple-darwin.offline-sbom-verification.json
true
+ for asset in "${ASSETS[@]}"
+ for kind in provenance sbom
+ predicate=https://slsa.dev/provenance/v1
+ [[ provenance == sbom ]]
+ checks=(--repo "$REPO" --bundle "$asset.$kind.sigstore.json" --custom-trusted-root trusted_root.jsonl --source-ref "refs/tags/$TAG" --source-digest "$COMMIT" --signer-digest "$COMMIT" --deny-self-hosted-runners --predicate-type "$predicate")
+ gh attestation verify ts-x86_64-apple-darwin --repo prk-Jr/trusted-server --bundle ts-x86_64-apple-darwin.provenance.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.4 --source-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --signer-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
+ command gh attestation verify ts-x86_64-apple-darwin --repo prk-Jr/trusted-server --bundle ts-x86_64-apple-darwin.provenance.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.4 --source-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --signer-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
+ [[ attestation verify == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ printf 'SUCCESS: gh attestation verify %s with requested predicate, signer and source pins\n' ts-x86_64-apple-darwin
SUCCESS: gh attestation verify ts-x86_64-apple-darwin with requested predicate, signer and source pins
+ gh attestation verify ts-x86_64-apple-darwin --repo prk-Jr/trusted-server --bundle ts-x86_64-apple-darwin.provenance.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.4 --source-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --signer-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.4 --format json
+ command gh attestation verify ts-x86_64-apple-darwin --repo prk-Jr/trusted-server --bundle ts-x86_64-apple-darwin.provenance.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.4 --source-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --signer-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.4 --format json
+ [[ attestation verify == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ printf 'SUCCESS: gh attestation verify %s with requested predicate, signer and source pins\n' ts-x86_64-apple-darwin
SUCCESS: gh attestation verify ts-x86_64-apple-darwin with requested predicate, signer and source pins
+ [[ provenance == sbom ]]
+ for kind in provenance sbom
+ predicate=https://slsa.dev/provenance/v1
+ [[ sbom == sbom ]]
+ predicate=https://spdx.dev/Document/v2.3
+ checks=(--repo "$REPO" --bundle "$asset.$kind.sigstore.json" --custom-trusted-root trusted_root.jsonl --source-ref "refs/tags/$TAG" --source-digest "$COMMIT" --signer-digest "$COMMIT" --deny-self-hosted-runners --predicate-type "$predicate")
+ gh attestation verify ts-x86_64-apple-darwin --repo prk-Jr/trusted-server --bundle ts-x86_64-apple-darwin.sbom.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.4 --source-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --signer-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
+ command gh attestation verify ts-x86_64-apple-darwin --repo prk-Jr/trusted-server --bundle ts-x86_64-apple-darwin.sbom.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.4 --source-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --signer-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
+ [[ attestation verify == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ printf 'SUCCESS: gh attestation verify %s with requested predicate, signer and source pins\n' ts-x86_64-apple-darwin
SUCCESS: gh attestation verify ts-x86_64-apple-darwin with requested predicate, signer and source pins
+ gh attestation verify ts-x86_64-apple-darwin --repo prk-Jr/trusted-server --bundle ts-x86_64-apple-darwin.sbom.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.4 --source-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --signer-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.4 --format json
+ command gh attestation verify ts-x86_64-apple-darwin --repo prk-Jr/trusted-server --bundle ts-x86_64-apple-darwin.sbom.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.4 --source-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --signer-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.4 --format json
+ [[ attestation verify == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ printf 'SUCCESS: gh attestation verify %s with requested predicate, signer and source pins\n' ts-x86_64-apple-darwin
SUCCESS: gh attestation verify ts-x86_64-apple-darwin with requested predicate, signer and source pins
+ [[ sbom == sbom ]]
+ jq -e --slurpfile document ts-x86_64-apple-darwin.spdx.json 'length == 1 and .[0].verificationResult.statement.predicate == $document[0]' ts-x86_64-apple-darwin.offline-sbom-verification.json
true
+ printf '%s\n' 'SUCCESS: all four binaries verified offline for provenance and SPDX, both signer identities, exact source pins, and SPDX predicate equality.'
SUCCESS: all four binaries verified offline for provenance and SPDX, both signer identities, exact source pins, and SPDX predicate equality.

Local verified Fastly route

The downloaded wasm and host CLI first passed provenance and immutable release membership checks. Viceroy 0.21.0, pinned in the source tree, served a real configured page: HTTP 200, fixture origin marker, injected JS and the exact full source SHA in x-ts-version. This is local execution only; no Fastly service was contacted or deployed. The first fixture attempt was correctly rejected for unchanged example-domain placeholders; the successful fixture below uses loopback publisher values and public development secrets. Both release binaries remain byte-identical to the published assets.

Complete local commands and output
set -euxo pipefail
REPO_ROOT=<source-checkout>
EVIDENCE=<evidence-directory>
WORK="$EVIDENCE/viceroy-smoke-2"
TS="$EVIDENCE/ts-aarch64-apple-darwin"
WASM="$EVIDENCE/trusted-server-fastly.wasm"
VICEROY=<pinned-runtime-tools>/viceroy
mkdir "$WORK"
for port in 18888 17676; do
  if lsof -nP -iTCP:"$port" -sTCP:LISTEN; then exit 1; fi
done
cp "$REPO_ROOT/edgezero.toml" "$REPO_ROOT/fastly.toml" "$WORK/"
cp "$REPO_ROOT/trusted-server.example.toml" "$WORK/app.toml"
ln -s "$REPO_ROOT/crates" "$WORK/crates"
node - "$WORK" <<'JS'
const fs=require('node:fs');const root=process.argv[2];
const path=`${root}/app.toml`;let text=fs.readFileSync(path,'utf8');text=text.replace('domain = "example.com"','domain = "127.0.0.1"').replace('cookie_domain = ".example.com"','cookie_domain = "127.0.0.1"');text=text.replace('origin_url = "https://origin.example.com"','origin_url = "http://127.0.0.1:18888"');if(!text.includes('origin_url = "http://127.0.0.1:18888"'))throw Error('Origin fixture replacement failed');fs.writeFileSync(path,text);
const fastly=`${root}/fastly.toml`;text=fs.readFileSync(fastly,'utf8').replace('env = "FASTLY_KEY"','data = "fictional-local-api-key"');fs.writeFileSync(fastly,text);
JS
chmod u+x "$TS"
"$TS" --version
(cd "$WORK" && "$TS" config push --adapter fastly --local \
 --manifest "$WORK/edgezero.toml" --app-config "$WORK/app.toml" --no-diff --yes)
"$VICEROY" --version
cat > "$WORK/origin.mjs" <<'JS'
import http from 'node:http';
http.createServer((req,res)=>{res.writeHead(200,{'content-type':'text/html'});res.end('<!doctype html><html><head><title>Local release proof</title></head><body>phase1-verified-origin-marker</body></html>');}).listen(18888,'127.0.0.1');
JS
node "$WORK/origin.mjs" > "$WORK/origin.log" 2>&1 &
origin_pid=$!
cleanup() {
  if [[ -n "${viceroy_pid:-}" ]]; then kill "$viceroy_pid" 2>/dev/null || true; wait "$viceroy_pid" 2>/dev/null || true; fi
  kill "$origin_pid" 2>/dev/null || true
  wait "$origin_pid" 2>/dev/null || true
}
trap cleanup EXIT
"$VICEROY" serve -C "$WORK/fastly.toml" --addr 127.0.0.1:17676 "$WASM" > "$WORK/viceroy.log" 2>&1 &
viceroy_pid=$!
curl --fail --silent --show-error --retry 20 --retry-connrefused --retry-delay 1 \
 --retry-max-time 45 --max-time 30 -H 'Host: 127.0.0.1' \
 -D "$WORK/headers.txt" -o "$WORK/body.html" http://127.0.0.1:17676/
cat "$WORK/headers.txt"
node - "$WORK" <<'JS'
const fs=require('node:fs');const assert=require('node:assert/strict');const crypto=require('node:crypto');const work=process.argv[2];const headers=fs.readFileSync(`${work}/headers.txt`,'utf8');const body=fs.readFileSync(`${work}/body.html`);assert.match(headers,/^HTTP\/1\.1 200/m);assert.match(headers,/^x-ts-version: 922c2211c0cc7941bfc8ffa9f775ef8ac0971232\r?$/im);assert.ok(body.includes('phase1-verified-origin-marker'));assert.ok(body.includes('/static/tsjs=tsjs-unified.min.js'));console.log(`SUCCESS: configured Viceroy page returned HTTP200, origin marker, injected JS and exact release source header; ${body.length} bytes, sha256=${crypto.createHash('sha256').update(body).digest('hex')}`);
JS
+ for asset in trusted-server-fastly.wasm ts-aarch64-apple-darwin
+ gh attestation verify trusted-server-fastly.wasm --repo prk-Jr/trusted-server --bundle trusted-server-fastly.wasm.provenance.sigstore.json --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml --source-ref refs/tags/v0.0.0-rehearsal.4 --source-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --signer-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1
+ gh release verify-asset v0.0.0-rehearsal.4 trusted-server-fastly.wasm --repo prk-Jr/trusted-server
Calculated digest for trusted-server-fastly.wasm: sha256:de00f637e3f2e7d85c86a4f4af3efb74b9f44db1932ceae9cfd7afb527cf2acc
Resolved tag v0.0.0-rehearsal.4 to sha1:922c2211c0cc7941bfc8ffa9f775ef8ac0971232
Loaded attestation from GitHub API

✓ Verification succeeded! trusted-server-fastly.wasm is present in release v0.0.0-rehearsal.4
+ for asset in trusted-server-fastly.wasm ts-aarch64-apple-darwin
+ gh attestation verify ts-aarch64-apple-darwin --repo prk-Jr/trusted-server --bundle ts-aarch64-apple-darwin.provenance.sigstore.json --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml --source-ref refs/tags/v0.0.0-rehearsal.4 --source-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --signer-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1
+ gh release verify-asset v0.0.0-rehearsal.4 ts-aarch64-apple-darwin --repo prk-Jr/trusted-server
Calculated digest for ts-aarch64-apple-darwin: sha256:e9c304e55fceb4d0e2f6ac14ac5be9bed368b2628d1a90d6f4539757e129469a
Resolved tag v0.0.0-rehearsal.4 to sha1:922c2211c0cc7941bfc8ffa9f775ef8ac0971232
Loaded attestation from GitHub API

✓ Verification succeeded! ts-aarch64-apple-darwin is present in release v0.0.0-rehearsal.4
+ REPO_ROOT=<source-checkout>
+ EVIDENCE=<evidence-directory>
+ WORK=<evidence-directory>/viceroy-smoke-2
+ TS=<evidence-directory>/ts-aarch64-apple-darwin
+ WASM=<evidence-directory>/trusted-server-fastly.wasm
+ VICEROY=<pinned-runtime-tools>/viceroy
+ mkdir <evidence-directory>/viceroy-smoke-2
+ for port in 18888 17676
+ lsof -nP -iTCP:18888 -sTCP:LISTEN
+ for port in 18888 17676
+ lsof -nP -iTCP:17676 -sTCP:LISTEN
+ cp <source-checkout>/edgezero.toml <source-checkout>/fastly.toml <evidence-directory>/viceroy-smoke-2/
+ cp <source-checkout>/trusted-server.example.toml <evidence-directory>/viceroy-smoke-2/app.toml
+ ln -s <source-checkout>/crates <evidence-directory>/viceroy-smoke-2/crates
+ node - <evidence-directory>/viceroy-smoke-2
+ chmod u+x <evidence-directory>/ts-aarch64-apple-darwin
+ <evidence-directory>/ts-aarch64-apple-darwin --version
ts 0.1.0
+ cd <evidence-directory>/viceroy-smoke-2
+ <evidence-directory>/ts-aarch64-apple-darwin config push --adapter fastly --local --manifest <evidence-directory>/viceroy-smoke-2/edgezero.toml --app-config <evidence-directory>/viceroy-smoke-2/app.toml --no-diff --yes
wrote 1 physical entries (1 logical) to `[local_server.config_stores.trusted_server_config.contents]` in <evidence-directory>/viceroy-smoke-2/fastly.toml (logical id `trusted_server_config`); restart `fastly compute serve` to pick up changes
pushed-key=trusted_server_config
pushed-store=trusted_server_config
+ <pinned-runtime-tools>/viceroy --version
viceroy 0.21.0
+ cat
+ origin_pid=74910
+ trap cleanup EXIT
+ node <evidence-directory>/viceroy-smoke-2/origin.mjs
+ viceroy_pid=74911
+ curl --fail --silent --show-error --retry 20 --retry-connrefused --retry-delay 1 --retry-max-time 45 --max-time 30 -H 'Host: 127.0.0.1' -D <evidence-directory>/viceroy-smoke-2/headers.txt -o <evidence-directory>/viceroy-smoke-2/body.html http://127.0.0.1:17676/
+ <pinned-runtime-tools>/viceroy serve -C <evidence-directory>/viceroy-smoke-2/fastly.toml --addr 127.0.0.1:17676 <evidence-directory>/trusted-server-fastly.wasm
curl: (7) Failed to connect to 127.0.0.1 port 17676 after 0 ms: Couldn't connect to server
curl: (7) Failed to connect to 127.0.0.1 port 17676 after 0 ms: Couldn't connect to server
+ cat <evidence-directory>/viceroy-smoke-2/headers.txt
HTTP/1.1 200 OK
content-type: text/html
date: Thu, 22 Oct 2026 16:53:48 GMT
connection: keep-alive
keep-alive: timeout=5
x-ts-fastly-version: 0
x-geo-city: San Francisco
x-geo-country: US
x-geo-continent: NorthAmerica
x-geo-coordinates: 37.77869,-122.39557
x-geo-region: CA
x-geo-info-available: true
x-ts-version: 922c2211c0cc7941bfc8ffa9f775ef8ac0971232
transfer-encoding: chunked

+ node - <evidence-directory>/viceroy-smoke-2
SUCCESS: configured Viceroy page returned HTTP200, origin marker, injected JS and exact release source header; 262 bytes, sha256=faafc52e92b3981f7a899b5bb3f6d85cebcb045618bce3727bbd1be3f1b869e2
+ cleanup
+ [[ -n 74911 ]]
+ kill 74911
+ wait 74911
+ true
+ kill 74910
+ wait 74910
+ true

@prk-Jr

prk-Jr commented Oct 22, 2026

Copy link
Copy Markdown
Collaborator Author

Rehearsal v0.0.0-rehearsal.4 passed at 922c2211c0cc7941bfc8ffa9f775ef8ac0971232.

  • Build/sign/publication run: success; all four builds and signing jobs passed. Read-only publisher checks passed; no transient retry was observed in this run.
  • Published immutable release: ID 420956687, draft=false, immutable=true, exactly 17 nonempty assets.
  • Independent GitHub CLI 2.102.0 verification passed: release, every one of 17 assets, all 16 checksum entries, provenance + SPDX for each binary with both signer checks and exact source pins, and all four SPDX predicate comparisons.
  • Complete offline verification and local Viceroy page proof also passed. Offline verification used OS-enforced network denial, with an external-request denial control.

Download record

The ordinary release download was interrupted because transfer throughput was too low. Read-only bounded range downloads fetched the same release URLs; complete assembled files matched the published SHA-256 metadata before verification. No binary was substituted from a CI artifact or another release. Small companions were independently digest-checked as well. Commands and output follow; scripts existed only in the temporary evidence directory.

Download commands and complete digest results
gh api repos/prk-Jr/trusted-server/releases/tags/v0.0.0-rehearsal.4 > release-metadata.json
node range-download.mjs
node small-download.mjs
import fs from 'node:fs';
import {promisify} from 'node:util';
import {execFile} from 'node:child_process';
import crypto from 'node:crypto';
const run=promisify(execFile);
const release=JSON.parse(fs.readFileSync('release-metadata.json'));
const binaries=release.assets.filter(a=> !a.name.includes('.') || a.name.endsWith('.wasm'));
fs.mkdirSync('ranges',{recursive:true});
const tasks=[]; const chunk=2*1024*1024;
for(const a of binaries) for(let offset=0;offset<a.size;offset+=chunk) tasks.push({a,offset,end:Math.min(a.size-1,offset+chunk-1)});
let done=0;
async function worker(){while(tasks.length){const {a,offset,end}=tasks.shift();const out=`ranges/${a.name}.${offset}`; await run('curl',['--fail','--silent','--show-error','--location','--retry','2','--max-time','180','--range',`${offset}-${end}`,'--max-filesize',String(end-offset+1),'--output',out,a.browser_download_url]);if(fs.statSync(out).size!==end-offset+1)throw Error(`Range size mismatch: ${a.name} ${offset}`);done++;if(done%16===0)console.log(`Downloaded ${done} ranges`);}}
await Promise.all(Array.from({length:16},worker));
for(const a of binaries){const dest=fs.openSync(`${a.name}.assembled`,'w');const hash=crypto.createHash('sha256');for(let o=0;o<a.size;o+=chunk){const b=fs.readFileSync(`ranges/${a.name}.${o}`);fs.writeSync(dest,b);hash.update(b);}fs.closeSync(dest);if(`sha256:${hash.digest('hex')}`!==a.digest)throw Error(`Digest mismatch: ${a.name}`);fs.renameSync(`${a.name}.assembled`,a.name);console.log(`SUCCESS: ${a.name}: ${a.size} bytes match ${a.digest}`);}
import fs from 'node:fs';import crypto from 'node:crypto';import {promisify} from 'node:util';import {execFile} from 'node:child_process';
const run=promisify(execFile);const {assets}=JSON.parse(fs.readFileSync('release-metadata.json'));await Promise.all(assets.filter(a=>a.size<2*1024*1024).map(async a=>{const valid=()=>fs.existsSync(a.name)&&`sha256:${crypto.createHash('sha256').update(fs.readFileSync(a.name)).digest('hex')}`===a.digest;if(!valid())await run('curl',['--fail','--silent','--show-error','--location','--max-time','180','--output',a.name,a.browser_download_url]);if(!valid())throw Error(`Bad asset: ${a.name}`);console.log(`SUCCESS: ${a.name} matches published digest`);}));
Downloaded 16 ranges
Downloaded 32 ranges
Downloaded 48 ranges
Downloaded 64 ranges
Downloaded 80 ranges
Downloaded 96 ranges
Downloaded 112 ranges
Downloaded 128 ranges
Downloaded 144 ranges
Downloaded 160 ranges
Downloaded 176 ranges
Downloaded 192 ranges
Downloaded 208 ranges
Downloaded 224 ranges
SUCCESS: SHA256SUMS: 1680 bytes match sha256:c8b4b31749f129f129030ccb5537291fe9252812ede3ed411e0bd5b23302fa11
SUCCESS: trusted-server-fastly.wasm: 79205388 bytes match sha256:de00f637e3f2e7d85c86a4f4af3efb74b9f44db1932ceae9cfd7afb527cf2acc
SUCCESS: ts-aarch64-apple-darwin: 41016160 bytes match sha256:e9c304e55fceb4d0e2f6ac14ac5be9bed368b2628d1a90d6f4539757e129469a
SUCCESS: ts-x86_64-apple-darwin: 43716264 bytes match sha256:5f7ac1d7f7cf879a08ac8a767aa5dc9f9c92994f2188b2613f2b4739e86de3b0
SUCCESS: ts-x86_64-unknown-linux-gnu: 301367192 bytes match sha256:31939021aae813bd9235f9e2d5e19b8aff2df829b802f3e231bb4218edddcd23

SUCCESS: SHA256SUMS matches published digest
SUCCESS: trusted-server-fastly.wasm.provenance.sigstore.json matches published digest
SUCCESS: trusted-server-fastly.wasm.sbom.sigstore.json matches published digest
SUCCESS: trusted-server-fastly.wasm.spdx.json matches published digest
SUCCESS: ts-aarch64-apple-darwin.provenance.sigstore.json matches published digest
SUCCESS: ts-aarch64-apple-darwin.sbom.sigstore.json matches published digest
SUCCESS: ts-aarch64-apple-darwin.spdx.json matches published digest
SUCCESS: ts-x86_64-apple-darwin.provenance.sigstore.json matches published digest
SUCCESS: ts-x86_64-apple-darwin.sbom.sigstore.json matches published digest
SUCCESS: ts-x86_64-apple-darwin.spdx.json matches published digest
SUCCESS: ts-x86_64-unknown-linux-gnu.provenance.sigstore.json matches published digest
SUCCESS: ts-x86_64-unknown-linux-gnu.sbom.sigstore.json matches published digest
SUCCESS: ts-x86_64-unknown-linux-gnu.spdx.json matches published digest

Full online verification transcript

A small shell wrapper prints an explicit success line after each successful attestation command; JSON results remain separate for predicate comparison.

gh version 2.102.0 (2026-09-30)
https://github.com/cli/cli/releases/tag/v2.102.0

+ set -euxo pipefail
+ REPO=prk-Jr/trusted-server
+ TAG=v0.0.0-rehearsal.4
+ COMMIT=922c2211c0cc7941bfc8ffa9f775ef8ac0971232
+ ASSETS=(trusted-server-fastly.wasm ts-x86_64-unknown-linux-gnu ts-aarch64-apple-darwin ts-x86_64-apple-darwin)
++ gh api repos/prk-Jr/trusted-server/releases/tags/v0.0.0-rehearsal.4 --jq .immutable
++ command gh api repos/prk-Jr/trusted-server/releases/tags/v0.0.0-rehearsal.4 --jq .immutable
++ [[ api repos/prk-Jr/trusted-server/releases/tags/v0.0.0-rehearsal.4 == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ test true = true
+ gh release verify v0.0.0-rehearsal.4 --repo prk-Jr/trusted-server
+ command gh release verify v0.0.0-rehearsal.4 --repo prk-Jr/trusted-server
Resolved tag v0.0.0-rehearsal.4 to sha1:922c2211c0cc7941bfc8ffa9f775ef8ac0971232
Loaded attestation from GitHub API
✓ Release v0.0.0-rehearsal.4 verified!

Assets
SHA256SUMS	sha256:c8b4b31749f129f129030ccb5537291fe9252812ede3ed411e0bd5b23302fa11
trusted-server-fastly.wasm	sha256:de00f637e3f2e7d85c86a4f4af3efb74b9f44db1932ceae9cfd7afb527cf2acc
trusted-server-fastly.wasm.provenance.sigstore.json	sha256:1bb8bc84fce4ea8fac5aa25d6c17d07e2414dce03f21ac83601612bd35a11b0f
trusted-server-fastly.wasm.sbom.sigstore.json	sha256:11e72f0e7cd734ccf00474dfc9286e8d17026b9a749eacd0ffaeb26fc72ef399
trusted-server-fastly.wasm.spdx.json	sha256:0061b1312ecc193f708443f4eb3e1331aeca29e37359f86b7fbacae80259d28a
ts-aarch64-apple-darwin	sha256:e9c304e55fceb4d0e2f6ac14ac5be9bed368b2628d1a90d6f4539757e129469a
ts-aarch64-apple-darwin.provenance.sigstore.json	sha256:72af781b8d2e78dad49cda954d6353c592ec26fbb4b1352a4ca8bc044887a546
ts-aarch64-apple-darwin.sbom.sigstore.json	sha256:904c2dbbabef22767b5410c214e5a7408e2cba7fed4257b4e87d6a6571616b6c
ts-aarch64-apple-darwin.spdx.json	sha256:cffc12d7a497e28351f55b983fe4597c8de403ffaae47a2710f15517c02420ca
ts-x86_64-apple-darwin	sha256:5f7ac1d7f7cf879a08ac8a767aa5dc9f9c92994f2188b2613f2b4739e86de3b0
ts-x86_64-apple-darwin.provenance.sigstore.json	sha256:b7c4bf502d821cd9394b51964cf0ebaaae1e80065612d331ac8259bfdad8da47
ts-x86_64-apple-darwin.sbom.sigstore.json	sha256:cd5b5825949fc766908d9642f73d21f694e6017e043d316e1a67a1285e0fa708
ts-x86_64-apple-darwin.spdx.json	sha256:e50e59da87302c2580cb913fd139536eae6e7ee25355d99aaf423f0523955302
ts-x86_64-unknown-linux-gnu	sha256:31939021aae813bd9235f9e2d5e19b8aff2df829b802f3e231bb4218edddcd23
ts-x86_64-unknown-linux-gnu.provenance.sigstore.json	sha256:290204585ee557d7f597ff0733ac2b0b4430b1ede1a19020f0a9f2c1aa55c15a
ts-x86_64-unknown-linux-gnu.sbom.sigstore.json	sha256:4faf079fdf6bfea38f13fde5bda87e295bfe0570ff3a78ce700d59edb6b4c6bd
ts-x86_64-unknown-linux-gnu.spdx.json	sha256:d6374385364d06cc6a35223c71b586ba265a8af93084547690085378e394909c

+ [[ release verify == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ for asset in "${ASSETS[@]}"
+ for suffix in '' .spdx.json .provenance.sigstore.json .sbom.sigstore.json
+ gh release verify-asset v0.0.0-rehearsal.4 trusted-server-fastly.wasm --repo prk-Jr/trusted-server
+ command gh release verify-asset v0.0.0-rehearsal.4 trusted-server-fastly.wasm --repo prk-Jr/trusted-server
Calculated digest for trusted-server-fastly.wasm: sha256:de00f637e3f2e7d85c86a4f4af3efb74b9f44db1932ceae9cfd7afb527cf2acc
Resolved tag v0.0.0-rehearsal.4 to sha1:922c2211c0cc7941bfc8ffa9f775ef8ac0971232
Loaded attestation from GitHub API

✓ Verification succeeded! trusted-server-fastly.wasm is present in release v0.0.0-rehearsal.4
+ [[ release verify-asset == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ for suffix in '' .spdx.json .provenance.sigstore.json .sbom.sigstore.json
+ gh release verify-asset v0.0.0-rehearsal.4 trusted-server-fastly.wasm.spdx.json --repo prk-Jr/trusted-server
+ command gh release verify-asset v0.0.0-rehearsal.4 trusted-server-fastly.wasm.spdx.json --repo prk-Jr/trusted-server
Calculated digest for trusted-server-fastly.wasm.spdx.json: sha256:0061b1312ecc193f708443f4eb3e1331aeca29e37359f86b7fbacae80259d28a
Resolved tag v0.0.0-rehearsal.4 to sha1:922c2211c0cc7941bfc8ffa9f775ef8ac0971232
Loaded attestation from GitHub API

✓ Verification succeeded! trusted-server-fastly.wasm.spdx.json is present in release v0.0.0-rehearsal.4
+ [[ release verify-asset == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ for suffix in '' .spdx.json .provenance.sigstore.json .sbom.sigstore.json
+ gh release verify-asset v0.0.0-rehearsal.4 trusted-server-fastly.wasm.provenance.sigstore.json --repo prk-Jr/trusted-server
+ command gh release verify-asset v0.0.0-rehearsal.4 trusted-server-fastly.wasm.provenance.sigstore.json --repo prk-Jr/trusted-server
Calculated digest for trusted-server-fastly.wasm.provenance.sigstore.json: sha256:1bb8bc84fce4ea8fac5aa25d6c17d07e2414dce03f21ac83601612bd35a11b0f
Resolved tag v0.0.0-rehearsal.4 to sha1:922c2211c0cc7941bfc8ffa9f775ef8ac0971232
Loaded attestation from GitHub API

✓ Verification succeeded! trusted-server-fastly.wasm.provenance.sigstore.json is present in release v0.0.0-rehearsal.4
+ [[ release verify-asset == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ for suffix in '' .spdx.json .provenance.sigstore.json .sbom.sigstore.json
+ gh release verify-asset v0.0.0-rehearsal.4 trusted-server-fastly.wasm.sbom.sigstore.json --repo prk-Jr/trusted-server
+ command gh release verify-asset v0.0.0-rehearsal.4 trusted-server-fastly.wasm.sbom.sigstore.json --repo prk-Jr/trusted-server
Calculated digest for trusted-server-fastly.wasm.sbom.sigstore.json: sha256:11e72f0e7cd734ccf00474dfc9286e8d17026b9a749eacd0ffaeb26fc72ef399
Resolved tag v0.0.0-rehearsal.4 to sha1:922c2211c0cc7941bfc8ffa9f775ef8ac0971232
Loaded attestation from GitHub API

✓ Verification succeeded! trusted-server-fastly.wasm.sbom.sigstore.json is present in release v0.0.0-rehearsal.4
+ [[ release verify-asset == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ for asset in "${ASSETS[@]}"
+ for suffix in '' .spdx.json .provenance.sigstore.json .sbom.sigstore.json
+ gh release verify-asset v0.0.0-rehearsal.4 ts-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server
+ command gh release verify-asset v0.0.0-rehearsal.4 ts-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server
Calculated digest for ts-x86_64-unknown-linux-gnu: sha256:31939021aae813bd9235f9e2d5e19b8aff2df829b802f3e231bb4218edddcd23
Resolved tag v0.0.0-rehearsal.4 to sha1:922c2211c0cc7941bfc8ffa9f775ef8ac0971232
Loaded attestation from GitHub API

✓ Verification succeeded! ts-x86_64-unknown-linux-gnu is present in release v0.0.0-rehearsal.4
+ [[ release verify-asset == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ for suffix in '' .spdx.json .provenance.sigstore.json .sbom.sigstore.json
+ gh release verify-asset v0.0.0-rehearsal.4 ts-x86_64-unknown-linux-gnu.spdx.json --repo prk-Jr/trusted-server
+ command gh release verify-asset v0.0.0-rehearsal.4 ts-x86_64-unknown-linux-gnu.spdx.json --repo prk-Jr/trusted-server
Calculated digest for ts-x86_64-unknown-linux-gnu.spdx.json: sha256:d6374385364d06cc6a35223c71b586ba265a8af93084547690085378e394909c
Resolved tag v0.0.0-rehearsal.4 to sha1:922c2211c0cc7941bfc8ffa9f775ef8ac0971232
Loaded attestation from GitHub API

✓ Verification succeeded! ts-x86_64-unknown-linux-gnu.spdx.json is present in release v0.0.0-rehearsal.4
+ [[ release verify-asset == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ for suffix in '' .spdx.json .provenance.sigstore.json .sbom.sigstore.json
+ gh release verify-asset v0.0.0-rehearsal.4 ts-x86_64-unknown-linux-gnu.provenance.sigstore.json --repo prk-Jr/trusted-server
+ command gh release verify-asset v0.0.0-rehearsal.4 ts-x86_64-unknown-linux-gnu.provenance.sigstore.json --repo prk-Jr/trusted-server
Calculated digest for ts-x86_64-unknown-linux-gnu.provenance.sigstore.json: sha256:290204585ee557d7f597ff0733ac2b0b4430b1ede1a19020f0a9f2c1aa55c15a
Resolved tag v0.0.0-rehearsal.4 to sha1:922c2211c0cc7941bfc8ffa9f775ef8ac0971232
Loaded attestation from GitHub API

✓ Verification succeeded! ts-x86_64-unknown-linux-gnu.provenance.sigstore.json is present in release v0.0.0-rehearsal.4
+ [[ release verify-asset == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ for suffix in '' .spdx.json .provenance.sigstore.json .sbom.sigstore.json
+ gh release verify-asset v0.0.0-rehearsal.4 ts-x86_64-unknown-linux-gnu.sbom.sigstore.json --repo prk-Jr/trusted-server
+ command gh release verify-asset v0.0.0-rehearsal.4 ts-x86_64-unknown-linux-gnu.sbom.sigstore.json --repo prk-Jr/trusted-server
Calculated digest for ts-x86_64-unknown-linux-gnu.sbom.sigstore.json: sha256:4faf079fdf6bfea38f13fde5bda87e295bfe0570ff3a78ce700d59edb6b4c6bd
Resolved tag v0.0.0-rehearsal.4 to sha1:922c2211c0cc7941bfc8ffa9f775ef8ac0971232
Loaded attestation from GitHub API

✓ Verification succeeded! ts-x86_64-unknown-linux-gnu.sbom.sigstore.json is present in release v0.0.0-rehearsal.4
+ [[ release verify-asset == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ for asset in "${ASSETS[@]}"
+ for suffix in '' .spdx.json .provenance.sigstore.json .sbom.sigstore.json
+ gh release verify-asset v0.0.0-rehearsal.4 ts-aarch64-apple-darwin --repo prk-Jr/trusted-server
+ command gh release verify-asset v0.0.0-rehearsal.4 ts-aarch64-apple-darwin --repo prk-Jr/trusted-server
Calculated digest for ts-aarch64-apple-darwin: sha256:e9c304e55fceb4d0e2f6ac14ac5be9bed368b2628d1a90d6f4539757e129469a
Resolved tag v0.0.0-rehearsal.4 to sha1:922c2211c0cc7941bfc8ffa9f775ef8ac0971232
Loaded attestation from GitHub API

✓ Verification succeeded! ts-aarch64-apple-darwin is present in release v0.0.0-rehearsal.4
+ [[ release verify-asset == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ for suffix in '' .spdx.json .provenance.sigstore.json .sbom.sigstore.json
+ gh release verify-asset v0.0.0-rehearsal.4 ts-aarch64-apple-darwin.spdx.json --repo prk-Jr/trusted-server
+ command gh release verify-asset v0.0.0-rehearsal.4 ts-aarch64-apple-darwin.spdx.json --repo prk-Jr/trusted-server
Calculated digest for ts-aarch64-apple-darwin.spdx.json: sha256:cffc12d7a497e28351f55b983fe4597c8de403ffaae47a2710f15517c02420ca
Resolved tag v0.0.0-rehearsal.4 to sha1:922c2211c0cc7941bfc8ffa9f775ef8ac0971232
Loaded attestation from GitHub API

✓ Verification succeeded! ts-aarch64-apple-darwin.spdx.json is present in release v0.0.0-rehearsal.4
+ [[ release verify-asset == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ for suffix in '' .spdx.json .provenance.sigstore.json .sbom.sigstore.json
+ gh release verify-asset v0.0.0-rehearsal.4 ts-aarch64-apple-darwin.provenance.sigstore.json --repo prk-Jr/trusted-server
+ command gh release verify-asset v0.0.0-rehearsal.4 ts-aarch64-apple-darwin.provenance.sigstore.json --repo prk-Jr/trusted-server
Calculated digest for ts-aarch64-apple-darwin.provenance.sigstore.json: sha256:72af781b8d2e78dad49cda954d6353c592ec26fbb4b1352a4ca8bc044887a546
Resolved tag v0.0.0-rehearsal.4 to sha1:922c2211c0cc7941bfc8ffa9f775ef8ac0971232
Loaded attestation from GitHub API

✓ Verification succeeded! ts-aarch64-apple-darwin.provenance.sigstore.json is present in release v0.0.0-rehearsal.4
+ [[ release verify-asset == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ for suffix in '' .spdx.json .provenance.sigstore.json .sbom.sigstore.json
+ gh release verify-asset v0.0.0-rehearsal.4 ts-aarch64-apple-darwin.sbom.sigstore.json --repo prk-Jr/trusted-server
+ command gh release verify-asset v0.0.0-rehearsal.4 ts-aarch64-apple-darwin.sbom.sigstore.json --repo prk-Jr/trusted-server
Calculated digest for ts-aarch64-apple-darwin.sbom.sigstore.json: sha256:904c2dbbabef22767b5410c214e5a7408e2cba7fed4257b4e87d6a6571616b6c
Resolved tag v0.0.0-rehearsal.4 to sha1:922c2211c0cc7941bfc8ffa9f775ef8ac0971232
Loaded attestation from GitHub API

✓ Verification succeeded! ts-aarch64-apple-darwin.sbom.sigstore.json is present in release v0.0.0-rehearsal.4
+ [[ release verify-asset == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ for asset in "${ASSETS[@]}"
+ for suffix in '' .spdx.json .provenance.sigstore.json .sbom.sigstore.json
+ gh release verify-asset v0.0.0-rehearsal.4 ts-x86_64-apple-darwin --repo prk-Jr/trusted-server
+ command gh release verify-asset v0.0.0-rehearsal.4 ts-x86_64-apple-darwin --repo prk-Jr/trusted-server
Calculated digest for ts-x86_64-apple-darwin: sha256:5f7ac1d7f7cf879a08ac8a767aa5dc9f9c92994f2188b2613f2b4739e86de3b0
Resolved tag v0.0.0-rehearsal.4 to sha1:922c2211c0cc7941bfc8ffa9f775ef8ac0971232
Loaded attestation from GitHub API

✓ Verification succeeded! ts-x86_64-apple-darwin is present in release v0.0.0-rehearsal.4
+ [[ release verify-asset == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ for suffix in '' .spdx.json .provenance.sigstore.json .sbom.sigstore.json
+ gh release verify-asset v0.0.0-rehearsal.4 ts-x86_64-apple-darwin.spdx.json --repo prk-Jr/trusted-server
+ command gh release verify-asset v0.0.0-rehearsal.4 ts-x86_64-apple-darwin.spdx.json --repo prk-Jr/trusted-server
Calculated digest for ts-x86_64-apple-darwin.spdx.json: sha256:e50e59da87302c2580cb913fd139536eae6e7ee25355d99aaf423f0523955302
Resolved tag v0.0.0-rehearsal.4 to sha1:922c2211c0cc7941bfc8ffa9f775ef8ac0971232
Loaded attestation from GitHub API

✓ Verification succeeded! ts-x86_64-apple-darwin.spdx.json is present in release v0.0.0-rehearsal.4
+ [[ release verify-asset == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ for suffix in '' .spdx.json .provenance.sigstore.json .sbom.sigstore.json
+ gh release verify-asset v0.0.0-rehearsal.4 ts-x86_64-apple-darwin.provenance.sigstore.json --repo prk-Jr/trusted-server
+ command gh release verify-asset v0.0.0-rehearsal.4 ts-x86_64-apple-darwin.provenance.sigstore.json --repo prk-Jr/trusted-server
Calculated digest for ts-x86_64-apple-darwin.provenance.sigstore.json: sha256:b7c4bf502d821cd9394b51964cf0ebaaae1e80065612d331ac8259bfdad8da47
Resolved tag v0.0.0-rehearsal.4 to sha1:922c2211c0cc7941bfc8ffa9f775ef8ac0971232
Loaded attestation from GitHub API

✓ Verification succeeded! ts-x86_64-apple-darwin.provenance.sigstore.json is present in release v0.0.0-rehearsal.4
+ [[ release verify-asset == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ for suffix in '' .spdx.json .provenance.sigstore.json .sbom.sigstore.json
+ gh release verify-asset v0.0.0-rehearsal.4 ts-x86_64-apple-darwin.sbom.sigstore.json --repo prk-Jr/trusted-server
+ command gh release verify-asset v0.0.0-rehearsal.4 ts-x86_64-apple-darwin.sbom.sigstore.json --repo prk-Jr/trusted-server
Calculated digest for ts-x86_64-apple-darwin.sbom.sigstore.json: sha256:cd5b5825949fc766908d9642f73d21f694e6017e043d316e1a67a1285e0fa708
Resolved tag v0.0.0-rehearsal.4 to sha1:922c2211c0cc7941bfc8ffa9f775ef8ac0971232
Loaded attestation from GitHub API

✓ Verification succeeded! ts-x86_64-apple-darwin.sbom.sigstore.json is present in release v0.0.0-rehearsal.4
+ [[ release verify-asset == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ gh release verify-asset v0.0.0-rehearsal.4 SHA256SUMS --repo prk-Jr/trusted-server
+ command gh release verify-asset v0.0.0-rehearsal.4 SHA256SUMS --repo prk-Jr/trusted-server
Calculated digest for SHA256SUMS: sha256:c8b4b31749f129f129030ccb5537291fe9252812ede3ed411e0bd5b23302fa11
Resolved tag v0.0.0-rehearsal.4 to sha1:922c2211c0cc7941bfc8ffa9f775ef8ac0971232
Loaded attestation from GitHub API

✓ Verification succeeded! SHA256SUMS is present in release v0.0.0-rehearsal.4
+ [[ release verify-asset == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ shasum -a 256 --check SHA256SUMS
trusted-server-fastly.wasm: OK
trusted-server-fastly.wasm.spdx.json: OK
trusted-server-fastly.wasm.provenance.sigstore.json: OK
trusted-server-fastly.wasm.sbom.sigstore.json: OK
ts-aarch64-apple-darwin: OK
ts-aarch64-apple-darwin.spdx.json: OK
ts-aarch64-apple-darwin.provenance.sigstore.json: OK
ts-aarch64-apple-darwin.sbom.sigstore.json: OK
ts-x86_64-apple-darwin: OK
ts-x86_64-apple-darwin.spdx.json: OK
ts-x86_64-apple-darwin.provenance.sigstore.json: OK
ts-x86_64-apple-darwin.sbom.sigstore.json: OK
ts-x86_64-unknown-linux-gnu: OK
ts-x86_64-unknown-linux-gnu.spdx.json: OK
ts-x86_64-unknown-linux-gnu.provenance.sigstore.json: OK
ts-x86_64-unknown-linux-gnu.sbom.sigstore.json: OK
+ WORKFLOW=prk-Jr/trusted-server/.github/workflows/release-build.yml
+ for asset in "${ASSETS[@]}"
+ gh attestation verify trusted-server-fastly.wasm --repo prk-Jr/trusted-server --bundle trusted-server-fastly.wasm.provenance.sigstore.json --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml --source-ref refs/tags/v0.0.0-rehearsal.4 --source-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --signer-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1
+ command gh attestation verify trusted-server-fastly.wasm --repo prk-Jr/trusted-server --bundle trusted-server-fastly.wasm.provenance.sigstore.json --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml --source-ref refs/tags/v0.0.0-rehearsal.4 --source-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --signer-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1
+ [[ attestation verify == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ printf 'SUCCESS: gh attestation verify %s with requested predicate, signer and source pins\n' trusted-server-fastly.wasm
SUCCESS: gh attestation verify trusted-server-fastly.wasm with requested predicate, signer and source pins
+ gh attestation verify trusted-server-fastly.wasm --repo prk-Jr/trusted-server --bundle trusted-server-fastly.wasm.sbom.sigstore.json --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml --source-ref refs/tags/v0.0.0-rehearsal.4 --source-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --signer-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3
+ command gh attestation verify trusted-server-fastly.wasm --repo prk-Jr/trusted-server --bundle trusted-server-fastly.wasm.sbom.sigstore.json --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml --source-ref refs/tags/v0.0.0-rehearsal.4 --source-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --signer-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3
+ [[ attestation verify == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ printf 'SUCCESS: gh attestation verify %s with requested predicate, signer and source pins\n' trusted-server-fastly.wasm
SUCCESS: gh attestation verify trusted-server-fastly.wasm with requested predicate, signer and source pins
+ for asset in "${ASSETS[@]}"
+ gh attestation verify ts-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --bundle ts-x86_64-unknown-linux-gnu.provenance.sigstore.json --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml --source-ref refs/tags/v0.0.0-rehearsal.4 --source-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --signer-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1
+ command gh attestation verify ts-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --bundle ts-x86_64-unknown-linux-gnu.provenance.sigstore.json --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml --source-ref refs/tags/v0.0.0-rehearsal.4 --source-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --signer-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1
+ [[ attestation verify == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ printf 'SUCCESS: gh attestation verify %s with requested predicate, signer and source pins\n' ts-x86_64-unknown-linux-gnu
SUCCESS: gh attestation verify ts-x86_64-unknown-linux-gnu with requested predicate, signer and source pins
+ gh attestation verify ts-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --bundle ts-x86_64-unknown-linux-gnu.sbom.sigstore.json --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml --source-ref refs/tags/v0.0.0-rehearsal.4 --source-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --signer-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3
+ command gh attestation verify ts-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --bundle ts-x86_64-unknown-linux-gnu.sbom.sigstore.json --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml --source-ref refs/tags/v0.0.0-rehearsal.4 --source-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --signer-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3
+ [[ attestation verify == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ printf 'SUCCESS: gh attestation verify %s with requested predicate, signer and source pins\n' ts-x86_64-unknown-linux-gnu
SUCCESS: gh attestation verify ts-x86_64-unknown-linux-gnu with requested predicate, signer and source pins
+ for asset in "${ASSETS[@]}"
+ gh attestation verify ts-aarch64-apple-darwin --repo prk-Jr/trusted-server --bundle ts-aarch64-apple-darwin.provenance.sigstore.json --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml --source-ref refs/tags/v0.0.0-rehearsal.4 --source-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --signer-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1
+ command gh attestation verify ts-aarch64-apple-darwin --repo prk-Jr/trusted-server --bundle ts-aarch64-apple-darwin.provenance.sigstore.json --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml --source-ref refs/tags/v0.0.0-rehearsal.4 --source-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --signer-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1
+ [[ attestation verify == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ printf 'SUCCESS: gh attestation verify %s with requested predicate, signer and source pins\n' ts-aarch64-apple-darwin
SUCCESS: gh attestation verify ts-aarch64-apple-darwin with requested predicate, signer and source pins
+ gh attestation verify ts-aarch64-apple-darwin --repo prk-Jr/trusted-server --bundle ts-aarch64-apple-darwin.sbom.sigstore.json --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml --source-ref refs/tags/v0.0.0-rehearsal.4 --source-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --signer-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3
+ command gh attestation verify ts-aarch64-apple-darwin --repo prk-Jr/trusted-server --bundle ts-aarch64-apple-darwin.sbom.sigstore.json --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml --source-ref refs/tags/v0.0.0-rehearsal.4 --source-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --signer-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3
+ [[ attestation verify == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ printf 'SUCCESS: gh attestation verify %s with requested predicate, signer and source pins\n' ts-aarch64-apple-darwin
SUCCESS: gh attestation verify ts-aarch64-apple-darwin with requested predicate, signer and source pins
+ for asset in "${ASSETS[@]}"
+ gh attestation verify ts-x86_64-apple-darwin --repo prk-Jr/trusted-server --bundle ts-x86_64-apple-darwin.provenance.sigstore.json --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml --source-ref refs/tags/v0.0.0-rehearsal.4 --source-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --signer-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1
+ command gh attestation verify ts-x86_64-apple-darwin --repo prk-Jr/trusted-server --bundle ts-x86_64-apple-darwin.provenance.sigstore.json --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml --source-ref refs/tags/v0.0.0-rehearsal.4 --source-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --signer-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1
+ [[ attestation verify == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ printf 'SUCCESS: gh attestation verify %s with requested predicate, signer and source pins\n' ts-x86_64-apple-darwin
SUCCESS: gh attestation verify ts-x86_64-apple-darwin with requested predicate, signer and source pins
+ gh attestation verify ts-x86_64-apple-darwin --repo prk-Jr/trusted-server --bundle ts-x86_64-apple-darwin.sbom.sigstore.json --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml --source-ref refs/tags/v0.0.0-rehearsal.4 --source-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --signer-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3
+ command gh attestation verify ts-x86_64-apple-darwin --repo prk-Jr/trusted-server --bundle ts-x86_64-apple-darwin.sbom.sigstore.json --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml --source-ref refs/tags/v0.0.0-rehearsal.4 --source-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --signer-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3
+ [[ attestation verify == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ printf 'SUCCESS: gh attestation verify %s with requested predicate, signer and source pins\n' ts-x86_64-apple-darwin
SUCCESS: gh attestation verify ts-x86_64-apple-darwin with requested predicate, signer and source pins
+ IDENTITY=https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.4
+ for asset in "${ASSETS[@]}"
+ gh attestation verify trusted-server-fastly.wasm --repo prk-Jr/trusted-server --bundle trusted-server-fastly.wasm.provenance.sigstore.json --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.4 --source-ref refs/tags/v0.0.0-rehearsal.4 --source-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --signer-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1
+ command gh attestation verify trusted-server-fastly.wasm --repo prk-Jr/trusted-server --bundle trusted-server-fastly.wasm.provenance.sigstore.json --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.4 --source-ref refs/tags/v0.0.0-rehearsal.4 --source-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --signer-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1
+ [[ attestation verify == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ printf 'SUCCESS: gh attestation verify %s with requested predicate, signer and source pins\n' trusted-server-fastly.wasm
SUCCESS: gh attestation verify trusted-server-fastly.wasm with requested predicate, signer and source pins
+ gh attestation verify trusted-server-fastly.wasm --repo prk-Jr/trusted-server --bundle trusted-server-fastly.wasm.sbom.sigstore.json --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.4 --source-ref refs/tags/v0.0.0-rehearsal.4 --source-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --signer-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --format json
+ command gh attestation verify trusted-server-fastly.wasm --repo prk-Jr/trusted-server --bundle trusted-server-fastly.wasm.sbom.sigstore.json --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.4 --source-ref refs/tags/v0.0.0-rehearsal.4 --source-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --signer-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --format json
+ [[ attestation verify == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ printf 'SUCCESS: gh attestation verify %s with requested predicate, signer and source pins\n' trusted-server-fastly.wasm
SUCCESS: gh attestation verify trusted-server-fastly.wasm with requested predicate, signer and source pins
+ jq -e --slurpfile document trusted-server-fastly.wasm.spdx.json 'length == 1 and .[0].verificationResult.statement.predicate == $document[0]' trusted-server-fastly.wasm.sbom-verification.json
true
+ for asset in "${ASSETS[@]}"
+ gh attestation verify ts-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --bundle ts-x86_64-unknown-linux-gnu.provenance.sigstore.json --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.4 --source-ref refs/tags/v0.0.0-rehearsal.4 --source-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --signer-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1
+ command gh attestation verify ts-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --bundle ts-x86_64-unknown-linux-gnu.provenance.sigstore.json --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.4 --source-ref refs/tags/v0.0.0-rehearsal.4 --source-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --signer-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1
+ [[ attestation verify == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ printf 'SUCCESS: gh attestation verify %s with requested predicate, signer and source pins\n' ts-x86_64-unknown-linux-gnu
SUCCESS: gh attestation verify ts-x86_64-unknown-linux-gnu with requested predicate, signer and source pins
+ gh attestation verify ts-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --bundle ts-x86_64-unknown-linux-gnu.sbom.sigstore.json --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.4 --source-ref refs/tags/v0.0.0-rehearsal.4 --source-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --signer-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --format json
+ command gh attestation verify ts-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --bundle ts-x86_64-unknown-linux-gnu.sbom.sigstore.json --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.4 --source-ref refs/tags/v0.0.0-rehearsal.4 --source-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --signer-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --format json
+ [[ attestation verify == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ printf 'SUCCESS: gh attestation verify %s with requested predicate, signer and source pins\n' ts-x86_64-unknown-linux-gnu
SUCCESS: gh attestation verify ts-x86_64-unknown-linux-gnu with requested predicate, signer and source pins
+ jq -e --slurpfile document ts-x86_64-unknown-linux-gnu.spdx.json 'length == 1 and .[0].verificationResult.statement.predicate == $document[0]' ts-x86_64-unknown-linux-gnu.sbom-verification.json
true
+ for asset in "${ASSETS[@]}"
+ gh attestation verify ts-aarch64-apple-darwin --repo prk-Jr/trusted-server --bundle ts-aarch64-apple-darwin.provenance.sigstore.json --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.4 --source-ref refs/tags/v0.0.0-rehearsal.4 --source-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --signer-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1
+ command gh attestation verify ts-aarch64-apple-darwin --repo prk-Jr/trusted-server --bundle ts-aarch64-apple-darwin.provenance.sigstore.json --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.4 --source-ref refs/tags/v0.0.0-rehearsal.4 --source-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --signer-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1
+ [[ attestation verify == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ printf 'SUCCESS: gh attestation verify %s with requested predicate, signer and source pins\n' ts-aarch64-apple-darwin
SUCCESS: gh attestation verify ts-aarch64-apple-darwin with requested predicate, signer and source pins
+ gh attestation verify ts-aarch64-apple-darwin --repo prk-Jr/trusted-server --bundle ts-aarch64-apple-darwin.sbom.sigstore.json --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.4 --source-ref refs/tags/v0.0.0-rehearsal.4 --source-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --signer-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --format json
+ command gh attestation verify ts-aarch64-apple-darwin --repo prk-Jr/trusted-server --bundle ts-aarch64-apple-darwin.sbom.sigstore.json --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.4 --source-ref refs/tags/v0.0.0-rehearsal.4 --source-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --signer-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --format json
+ [[ attestation verify == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ printf 'SUCCESS: gh attestation verify %s with requested predicate, signer and source pins\n' ts-aarch64-apple-darwin
SUCCESS: gh attestation verify ts-aarch64-apple-darwin with requested predicate, signer and source pins
+ jq -e --slurpfile document ts-aarch64-apple-darwin.spdx.json 'length == 1 and .[0].verificationResult.statement.predicate == $document[0]' ts-aarch64-apple-darwin.sbom-verification.json
true
+ for asset in "${ASSETS[@]}"
+ gh attestation verify ts-x86_64-apple-darwin --repo prk-Jr/trusted-server --bundle ts-x86_64-apple-darwin.provenance.sigstore.json --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.4 --source-ref refs/tags/v0.0.0-rehearsal.4 --source-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --signer-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1
+ command gh attestation verify ts-x86_64-apple-darwin --repo prk-Jr/trusted-server --bundle ts-x86_64-apple-darwin.provenance.sigstore.json --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.4 --source-ref refs/tags/v0.0.0-rehearsal.4 --source-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --signer-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1
+ [[ attestation verify == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ printf 'SUCCESS: gh attestation verify %s with requested predicate, signer and source pins\n' ts-x86_64-apple-darwin
SUCCESS: gh attestation verify ts-x86_64-apple-darwin with requested predicate, signer and source pins
+ gh attestation verify ts-x86_64-apple-darwin --repo prk-Jr/trusted-server --bundle ts-x86_64-apple-darwin.sbom.sigstore.json --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.4 --source-ref refs/tags/v0.0.0-rehearsal.4 --source-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --signer-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --format json
+ command gh attestation verify ts-x86_64-apple-darwin --repo prk-Jr/trusted-server --bundle ts-x86_64-apple-darwin.sbom.sigstore.json --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.4 --source-ref refs/tags/v0.0.0-rehearsal.4 --source-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --signer-digest 922c2211c0cc7941bfc8ffa9f775ef8ac0971232 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --format json
+ [[ attestation verify == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ printf 'SUCCESS: gh attestation verify %s with requested predicate, signer and source pins\n' ts-x86_64-apple-darwin
SUCCESS: gh attestation verify ts-x86_64-apple-darwin with requested predicate, signer and source pins
+ jq -e --slurpfile document ts-x86_64-apple-darwin.spdx.json 'length == 1 and .[0].verificationResult.statement.predicate == $document[0]' ts-x86_64-apple-darwin.sbom-verification.json
true
+ printf '%s\n' 'SUCCESS: release, all 17 assets, 16 checksums, both predicates and both signer identities for each binary, and four SPDX predicate comparisons verified.'
SUCCESS: release, all 17 assets, 16 checksums, both predicates and both signer identities for each binary, and four SPDX predicate comparisons verified.

@prk-Jr

prk-Jr commented Oct 23, 2026

Copy link
Copy Markdown
Collaborator Author

Rehearsal v0.0.0-rehearsal.5 passed at exact implementation SHA 937214a632f9387601dba94f996de78b2e6ee424.

Build/sign/publication run passed all seven builds/signing jobs and immutable publication. Published release: ID 421431085, draft=false, immutable=true, exactly 29 nonempty assets. The 28 checksum entries exclude SHA256SUMS itself. Local directory paths are normalized below; commands, flags, identities, digests and results are unchanged.

Full online verification transcript, part 1. A wrapper prints explicit success after each successful attestation command; JSON output stays separate for SPDX equality.

+ REPO=prk-Jr/trusted-server
+ TAG=v0.0.0-rehearsal.5
+ COMMIT=937214a632f9387601dba94f996de78b2e6ee424
+ ASSETS=(trusted-server-fastly.wasm ts-x86_64-unknown-linux-gnu ts-aarch64-apple-darwin ts-x86_64-apple-darwin trusted-server-axum-x86_64-unknown-linux-gnu trusted-server-axum-x86_64-unknown-linux-musl trusted-server-axum-aarch64-unknown-linux-gnu)
++ gh api repos/prk-Jr/trusted-server/releases/tags/v0.0.0-rehearsal.5 --jq .immutable
++ command gh api repos/prk-Jr/trusted-server/releases/tags/v0.0.0-rehearsal.5 --jq .immutable
++ [[ api repos/prk-Jr/trusted-server/releases/tags/v0.0.0-rehearsal.5 == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ test true = true
+ gh release verify v0.0.0-rehearsal.5 --repo prk-Jr/trusted-server
+ command gh release verify v0.0.0-rehearsal.5 --repo prk-Jr/trusted-server
Resolved tag v0.0.0-rehearsal.5 to sha1:937214a632f9387601dba94f996de78b2e6ee424
Loaded attestation from GitHub API
✓ Release v0.0.0-rehearsal.5 verified!

Assets
SHA256SUMS	sha256:3f38663ad78cef4c1ea44c44efad58f406946382f5b2f997df556eada1d56c79
trusted-server-axum-aarch64-unknown-linux-gnu	sha256:f8f7c3cfd7853f545a38e08bf0a396dd201d241bd3c6b0511d99d0f938022079
trusted-server-axum-aarch64-unknown-linux-gnu.provenance.sigstore.json	sha256:4b76d82e6b093a46ce43c014e42056c8aed9fd8172fc7993831178bd34af6cc7
trusted-server-axum-aarch64-unknown-linux-gnu.sbom.sigstore.json	sha256:a8a3002e5e693efd21f467dea052d7f1b22c7e65589fb47b7b0321657b2e805b
trusted-server-axum-aarch64-unknown-linux-gnu.spdx.json	sha256:a46a7f00fe0618d0d158e56629eb0a4fc73771658bf946addb605cf48e8855d0
trusted-server-axum-x86_64-unknown-linux-gnu	sha256:b85a2cc54c8639d66d79186cf49771161e712762631596cb6f213afa83abd030
trusted-server-axum-x86_64-unknown-linux-gnu.provenance.sigstore.json	sha256:9df3528ad8ec7857c713abe7a3b2bfdc29311eecf7b43d1ff84b2a533233aab2
trusted-server-axum-x86_64-unknown-linux-gnu.sbom.sigstore.json	sha256:bcfa163bf41792a363adfbe47b43675fcc2093c97585d8d3917c636d0de55568
trusted-server-axum-x86_64-unknown-linux-gnu.spdx.json	sha256:a02059e57b64245d046385cdedb93a767f8153fadfb887fec2fdd230e91dee9f
trusted-server-axum-x86_64-unknown-linux-musl	sha256:0216ea9f103a0d79db666ff6351bb29d5391921fa29e971b4d68a76359a40210
trusted-server-axum-x86_64-unknown-linux-musl.provenance.sigstore.json	sha256:28a3f816f399d8fcad31e687eb895c0f4157e75798d493c73e50f72dbb3fe714
trusted-server-axum-x86_64-unknown-linux-musl.sbom.sigstore.json	sha256:552f9f3278327a5ce2a3b28479afacd2271fb77c5e49ddf43ad23e901d5932de
trusted-server-axum-x86_64-unknown-linux-musl.spdx.json	sha256:28ea8ffd121056a2f51accfd4b19a9c1e20cf4001e9850ae1d5c15c6f059b1be
trusted-server-fastly.wasm	sha256:bed94df95e5cb29e8ab3255321bd8bf00aa56ffd60e5de60875323ad433169f0
trusted-server-fastly.wasm.provenance.sigstore.json	sha256:ada20d6cfab75df65c806f0d409a94e20fc98d530f37b8754793bfc4b9675f7b
trusted-server-fastly.wasm.sbom.sigstore.json	sha256:09df79d511a245eef3ecc475b4aed2fbee6fb5d5f28ecffce080786b4ae67734
trusted-server-fastly.wasm.spdx.json	sha256:8a9151f823605956b1e5cb6a71f7b3c44b30326daa1fc71e0efc74a7fe47d861
ts-aarch64-apple-darwin	sha256:e9c304e55fceb4d0e2f6ac14ac5be9bed368b2628d1a90d6f4539757e129469a
ts-aarch64-apple-darwin.provenance.sigstore.json	sha256:6c8457aca6a32ad2ee1aaacc3e487cd128f91ddde01a8fd890cb44c1445ec28e
ts-aarch64-apple-darwin.sbom.sigstore.json	sha256:9381d35091d84d584abaa2e818faa5669412c5cd9a7577835d6ab4185dea7d1d
ts-aarch64-apple-darwin.spdx.json	sha256:2f84d645eea59ec314d1f7c4ab14b2be3bc430b783bfa09dfadb97c02d428934
ts-x86_64-apple-darwin	sha256:5f7ac1d7f7cf879a08ac8a767aa5dc9f9c92994f2188b2613f2b4739e86de3b0
ts-x86_64-apple-darwin.provenance.sigstore.json	sha256:0dadcf76761adbb724be84959ce7fcae745ac53707947d005f02efa414570378
ts-x86_64-apple-darwin.sbom.sigstore.json	sha256:9621f16ffaef815664aeefcb3af8185e83ac676c87af018c365cbae75f1eb0a5
ts-x86_64-apple-darwin.spdx.json	sha256:31e1e2356e5bdcb2390147cdf4b0eaef2f2c317ac4abc7eb7c0ff2e6873cdf8b
ts-x86_64-unknown-linux-gnu	sha256:1a5945133d5270855c501176cdc098da00d5439f9ecc33a0c07b3c84bf574944
ts-x86_64-unknown-linux-gnu.provenance.sigstore.json	sha256:e798fe2f208c1d2946b38cb6da8b426c90901581298d2125dffa65a69e889484
ts-x86_64-unknown-linux-gnu.sbom.sigstore.json	sha256:6efad56f336a17c1ca68cde1e38b97dac80446d95570f3afdaecfe45d291f606
ts-x86_64-unknown-linux-gnu.spdx.json	sha256:7e930e468e6b7cfd0726fabccd00be11e24286a54bc4f9c814baa82eb4058387

+ [[ release verify == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ for asset in "${ASSETS[@]}"
+ for suffix in '' .spdx.json .provenance.sigstore.json .sbom.sigstore.json
+ gh release verify-asset v0.0.0-rehearsal.5 trusted-server-fastly.wasm --repo prk-Jr/trusted-server
+ command gh release verify-asset v0.0.0-rehearsal.5 trusted-server-fastly.wasm --repo prk-Jr/trusted-server
Calculated digest for trusted-server-fastly.wasm: sha256:bed94df95e5cb29e8ab3255321bd8bf00aa56ffd60e5de60875323ad433169f0
Resolved tag v0.0.0-rehearsal.5 to sha1:937214a632f9387601dba94f996de78b2e6ee424
Loaded attestation from GitHub API

✓ Verification succeeded! trusted-server-fastly.wasm is present in release v0.0.0-rehearsal.5
+ [[ release verify-asset == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ for suffix in '' .spdx.json .provenance.sigstore.json .sbom.sigstore.json
+ gh release verify-asset v0.0.0-rehearsal.5 trusted-server-fastly.wasm.spdx.json --repo prk-Jr/trusted-server
+ command gh release verify-asset v0.0.0-rehearsal.5 trusted-server-fastly.wasm.spdx.json --repo prk-Jr/trusted-server
Calculated digest for trusted-server-fastly.wasm.spdx.json: sha256:8a9151f823605956b1e5cb6a71f7b3c44b30326daa1fc71e0efc74a7fe47d861
Resolved tag v0.0.0-rehearsal.5 to sha1:937214a632f9387601dba94f996de78b2e6ee424
Loaded attestation from GitHub API

✓ Verification succeeded! trusted-server-fastly.wasm.spdx.json is present in release v0.0.0-rehearsal.5
+ [[ release verify-asset == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ for suffix in '' .spdx.json .provenance.sigstore.json .sbom.sigstore.json
+ gh release verify-asset v0.0.0-rehearsal.5 trusted-server-fastly.wasm.provenance.sigstore.json --repo prk-Jr/trusted-server
+ command gh release verify-asset v0.0.0-rehearsal.5 trusted-server-fastly.wasm.provenance.sigstore.json --repo prk-Jr/trusted-server
Calculated digest for trusted-server-fastly.wasm.provenance.sigstore.json: sha256:ada20d6cfab75df65c806f0d409a94e20fc98d530f37b8754793bfc4b9675f7b
Resolved tag v0.0.0-rehearsal.5 to sha1:937214a632f9387601dba94f996de78b2e6ee424
Loaded attestation from GitHub API

✓ Verification succeeded! trusted-server-fastly.wasm.provenance.sigstore.json is present in release v0.0.0-rehearsal.5
+ [[ release verify-asset == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ for suffix in '' .spdx.json .provenance.sigstore.json .sbom.sigstore.json
+ gh release verify-asset v0.0.0-rehearsal.5 trusted-server-fastly.wasm.sbom.sigstore.json --repo prk-Jr/trusted-server
+ command gh release verify-asset v0.0.0-rehearsal.5 trusted-server-fastly.wasm.sbom.sigstore.json --repo prk-Jr/trusted-server
Calculated digest for trusted-server-fastly.wasm.sbom.sigstore.json: sha256:09df79d511a245eef3ecc475b4aed2fbee6fb5d5f28ecffce080786b4ae67734
Resolved tag v0.0.0-rehearsal.5 to sha1:937214a632f9387601dba94f996de78b2e6ee424
Loaded attestation from GitHub API

✓ Verification succeeded! trusted-server-fastly.wasm.sbom.sigstore.json is present in release v0.0.0-rehearsal.5
+ [[ release verify-asset == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ for asset in "${ASSETS[@]}"
+ for suffix in '' .spdx.json .provenance.sigstore.json .sbom.sigstore.json
+ gh release verify-asset v0.0.0-rehearsal.5 ts-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server
+ command gh release verify-asset v0.0.0-rehearsal.5 ts-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server
Calculated digest for ts-x86_64-unknown-linux-gnu: sha256:1a5945133d5270855c501176cdc098da00d5439f9ecc33a0c07b3c84bf574944
Resolved tag v0.0.0-rehearsal.5 to sha1:937214a632f9387601dba94f996de78b2e6ee424
Loaded attestation from GitHub API

✓ Verification succeeded! ts-x86_64-unknown-linux-gnu is present in release v0.0.0-rehearsal.5
+ [[ release verify-asset == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ for suffix in '' .spdx.json .provenance.sigstore.json .sbom.sigstore.json
+ gh release verify-asset v0.0.0-rehearsal.5 ts-x86_64-unknown-linux-gnu.spdx.json --repo prk-Jr/trusted-server
+ command gh release verify-asset v0.0.0-rehearsal.5 ts-x86_64-unknown-linux-gnu.spdx.json --repo prk-Jr/trusted-server
Calculated digest for ts-x86_64-unknown-linux-gnu.spdx.json: sha256:7e930e468e6b7cfd0726fabccd00be11e24286a54bc4f9c814baa82eb4058387
Resolved tag v0.0.0-rehearsal.5 to sha1:937214a632f9387601dba94f996de78b2e6ee424
Loaded attestation from GitHub API

✓ Verification succeeded! ts-x86_64-unknown-linux-gnu.spdx.json is present in release v0.0.0-rehearsal.5
+ [[ release verify-asset == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ for suffix in '' .spdx.json .provenance.sigstore.json .sbom.sigstore.json
+ gh release verify-asset v0.0.0-rehearsal.5 ts-x86_64-unknown-linux-gnu.provenance.sigstore.json --repo prk-Jr/trusted-server
+ command gh release verify-asset v0.0.0-rehearsal.5 ts-x86_64-unknown-linux-gnu.provenance.sigstore.json --repo prk-Jr/trusted-server
Calculated digest for ts-x86_64-unknown-linux-gnu.provenance.sigstore.json: sha256:e798fe2f208c1d2946b38cb6da8b426c90901581298d2125dffa65a69e889484
Resolved tag v0.0.0-rehearsal.5 to sha1:937214a632f9387601dba94f996de78b2e6ee424
Loaded attestation from GitHub API

✓ Verification succeeded! ts-x86_64-unknown-linux-gnu.provenance.sigstore.json is present in release v0.0.0-rehearsal.5
+ [[ release verify-asset == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ for suffix in '' .spdx.json .provenance.sigstore.json .sbom.sigstore.json
+ gh release verify-asset v0.0.0-rehearsal.5 ts-x86_64-unknown-linux-gnu.sbom.sigstore.json --repo prk-Jr/trusted-server
+ command gh release verify-asset v0.0.0-rehearsal.5 ts-x86_64-unknown-linux-gnu.sbom.sigstore.json --repo prk-Jr/trusted-server
Calculated digest for ts-x86_64-unknown-linux-gnu.sbom.sigstore.json: sha256:6efad56f336a17c1ca68cde1e38b97dac80446d95570f3afdaecfe45d291f606
Resolved tag v0.0.0-rehearsal.5 to sha1:937214a632f9387601dba94f996de78b2e6ee424
Loaded attestation from GitHub API

✓ Verification succeeded! ts-x86_64-unknown-linux-gnu.sbom.sigstore.json is present in release v0.0.0-rehearsal.5
+ [[ release verify-asset == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ for asset in "${ASSETS[@]}"
+ for suffix in '' .spdx.json .provenance.sigstore.json .sbom.sigstore.json
+ gh release verify-asset v0.0.0-rehearsal.5 ts-aarch64-apple-darwin --repo prk-Jr/trusted-server
+ command gh release verify-asset v0.0.0-rehearsal.5 ts-aarch64-apple-darwin --repo prk-Jr/trusted-server
Calculated digest for ts-aarch64-apple-darwin: sha256:e9c304e55fceb4d0e2f6ac14ac5be9bed368b2628d1a90d6f4539757e129469a
Resolved tag v0.0.0-rehearsal.5 to sha1:937214a632f9387601dba94f996de78b2e6ee424
Loaded attestation from GitHub API

✓ Verification succeeded! ts-aarch64-apple-darwin is present in release v0.0.0-rehearsal.5
+ [[ release verify-asset == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ for suffix in '' .spdx.json .provenance.sigstore.json .sbom.sigstore.json
+ gh release verify-asset v0.0.0-rehearsal.5 ts-aarch64-apple-darwin.spdx.json --repo prk-Jr/trusted-server
+ command gh release verify-asset v0.0.0-rehearsal.5 ts-aarch64-apple-darwin.spdx.json --repo prk-Jr/trusted-server
Calculated digest for ts-aarch64-apple-darwin.spdx.json: sha256:2f84d645eea59ec314d1f7c4ab14b2be3bc430b783bfa09dfadb97c02d428934
Resolved tag v0.0.0-rehearsal.5 to sha1:937214a632f9387601dba94f996de78b2e6ee424
Loaded attestation from GitHub API

✓ Verification succeeded! ts-aarch64-apple-darwin.spdx.json is present in release v0.0.0-rehearsal.5
+ [[ release verify-asset == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ for suffix in '' .spdx.json .provenance.sigstore.json .sbom.sigstore.json
+ gh release verify-asset v0.0.0-rehearsal.5 ts-aarch64-apple-darwin.provenance.sigstore.json --repo prk-Jr/trusted-server
+ command gh release verify-asset v0.0.0-rehearsal.5 ts-aarch64-apple-darwin.provenance.sigstore.json --repo prk-Jr/trusted-server
Calculated digest for ts-aarch64-apple-darwin.provenance.sigstore.json: sha256:6c8457aca6a32ad2ee1aaacc3e487cd128f91ddde01a8fd890cb44c1445ec28e
Resolved tag v0.0.0-rehearsal.5 to sha1:937214a632f9387601dba94f996de78b2e6ee424
Loaded attestation from GitHub API

✓ Verification succeeded! ts-aarch64-apple-darwin.provenance.sigstore.json is present in release v0.0.0-rehearsal.5
+ [[ release verify-asset == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ for suffix in '' .spdx.json .provenance.sigstore.json .sbom.sigstore.json
+ gh release verify-asset v0.0.0-rehearsal.5 ts-aarch64-apple-darwin.sbom.sigstore.json --repo prk-Jr/trusted-server
+ command gh release verify-asset v0.0.0-rehearsal.5 ts-aarch64-apple-darwin.sbom.sigstore.json --repo prk-Jr/trusted-server
Calculated digest for ts-aarch64-apple-darwin.sbom.sigstore.json: sha256:9381d35091d84d584abaa2e818faa5669412c5cd9a7577835d6ab4185dea7d1d
Resolved tag v0.0.0-rehearsal.5 to sha1:937214a632f9387601dba94f996de78b2e6ee424
Loaded attestation from GitHub API

✓ Verification succeeded! ts-aarch64-apple-darwin.sbom.sigstore.json is present in release v0.0.0-rehearsal.5
+ [[ release verify-asset == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ for asset in "${ASSETS[@]}"
+ for suffix in '' .spdx.json .provenance.sigstore.json .sbom.sigstore.json
+ gh release verify-asset v0.0.0-rehearsal.5 ts-x86_64-apple-darwin --repo prk-Jr/trusted-server
+ command gh release verify-asset v0.0.0-rehearsal.5 ts-x86_64-apple-darwin --repo prk-Jr/trusted-server
Calculated digest for ts-x86_64-apple-darwin: sha256:5f7ac1d7f7cf879a08ac8a767aa5dc9f9c92994f2188b2613f2b4739e86de3b0
Resolved tag v0.0.0-rehearsal.5 to sha1:937214a632f9387601dba94f996de78b2e6ee424
Loaded attestation from GitHub API

✓ Verification succeeded! ts-x86_64-apple-darwin is present in release v0.0.0-rehearsal.5
+ [[ release verify-asset == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ for suffix in '' .spdx.json .provenance.sigstore.json .sbom.sigstore.json
+ gh release verify-asset v0.0.0-rehearsal.5 ts-x86_64-apple-darwin.spdx.json --repo prk-Jr/trusted-server
+ command gh release verify-asset v0.0.0-rehearsal.5 ts-x86_64-apple-darwin.spdx.json --repo prk-Jr/trusted-server
Calculated digest for ts-x86_64-apple-darwin.spdx.json: sha256:31e1e2356e5bdcb2390147cdf4b0eaef2f2c317ac4abc7eb7c0ff2e6873cdf8b
Resolved tag v0.0.0-rehearsal.5 to sha1:937214a632f9387601dba94f996de78b2e6ee424
Loaded attestation from GitHub API

✓ Verification succeeded! ts-x86_64-apple-darwin.spdx.json is present in release v0.0.0-rehearsal.5
+ [[ release verify-asset == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ for suffix in '' .spdx.json .provenance.sigstore.json .sbom.sigstore.json
+ gh release verify-asset v0.0.0-rehearsal.5 ts-x86_64-apple-darwin.provenance.sigstore.json --repo prk-Jr/trusted-server
+ command gh release verify-asset v0.0.0-rehearsal.5 ts-x86_64-apple-darwin.provenance.sigstore.json --repo prk-Jr/trusted-server
Calculated digest for ts-x86_64-apple-darwin.provenance.sigstore.json: sha256:0dadcf76761adbb724be84959ce7fcae745ac53707947d005f02efa414570378
Resolved tag v0.0.0-rehearsal.5 to sha1:937214a632f9387601dba94f996de78b2e6ee424
Loaded attestation from GitHub API

✓ Verification succeeded! ts-x86_64-apple-darwin.provenance.sigstore.json is present in release v0.0.0-rehearsal.5
+ [[ release verify-asset == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ for suffix in '' .spdx.json .provenance.sigstore.json .sbom.sigstore.json
+ gh release verify-asset v0.0.0-rehearsal.5 ts-x86_64-apple-darwin.sbom.sigstore.json --repo prk-Jr/trusted-server
+ command gh release verify-asset v0.0.0-rehearsal.5 ts-x86_64-apple-darwin.sbom.sigstore.json --repo prk-Jr/trusted-server
Calculated digest for ts-x86_64-apple-darwin.sbom.sigstore.json: sha256:9621f16ffaef815664aeefcb3af8185e83ac676c87af018c365cbae75f1eb0a5
Resolved tag v0.0.0-rehearsal.5 to sha1:937214a632f9387601dba94f996de78b2e6ee424
Loaded attestation from GitHub API

✓ Verification succeeded! ts-x86_64-apple-darwin.sbom.sigstore.json is present in release v0.0.0-rehearsal.5
+ [[ release verify-asset == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ for asset in "${ASSETS[@]}"
+ for suffix in '' .spdx.json .provenance.sigstore.json .sbom.sigstore.json
+ gh release verify-asset v0.0.0-rehearsal.5 trusted-server-axum-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server
+ command gh release verify-asset v0.0.0-rehearsal.5 trusted-server-axum-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server
Calculated digest for trusted-server-axum-x86_64-unknown-linux-gnu: sha256:b85a2cc54c8639d66d79186cf49771161e712762631596cb6f213afa83abd030
Resolved tag v0.0.0-rehearsal.5 to sha1:937214a632f9387601dba94f996de78b2e6ee424
Loaded attestation from GitHub API

✓ Verification succeeded! trusted-server-axum-x86_64-unknown-linux-gnu is present in release v0.0.0-rehearsal.5
+ [[ release verify-asset == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ for suffix in '' .spdx.json .provenance.sigstore.json .sbom.sigstore.json
+ gh release verify-asset v0.0.0-rehearsal.5 trusted-server-axum-x86_64-unknown-linux-gnu.spdx.json --repo prk-Jr/trusted-server
+ command gh release verify-asset v0.0.0-rehearsal.5 trusted-server-axum-x86_64-unknown-linux-gnu.spdx.json --repo prk-Jr/trusted-server
Calculated digest for trusted-server-axum-x86_64-unknown-linux-gnu.spdx.json: sha256:a02059e57b64245d046385cdedb93a767f8153fadfb887fec2fdd230e91dee9f
Resolved tag v0.0.0-rehearsal.5 to sha1:937214a632f9387601dba94f996de78b2e6ee424
Loaded attestation from GitHub API

✓ Verification succeeded! trusted-server-axum-x86_64-unknown-linux-gnu.spdx.json is present in release v0.0.0-rehearsal.5
+ [[ release verify-asset == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ for suffix in '' .spdx.json .provenance.sigstore.json .sbom.sigstore.json
+ gh release verify-asset v0.0.0-rehearsal.5 trusted-server-axum-x86_64-unknown-linux-gnu.provenance.sigstore.json --repo prk-Jr/trusted-server
+ command gh release verify-asset v0.0.0-rehearsal.5 trusted-server-axum-x86_64-unknown-linux-gnu.provenance.sigstore.json --repo prk-Jr/trusted-server
Calculated digest for trusted-server-axum-x86_64-unknown-linux-gnu.provenance.sigstore.json: sha256:9df3528ad8ec7857c713abe7a3b2bfdc29311eecf7b43d1ff84b2a533233aab2
Resolved tag v0.0.0-rehearsal.5 to sha1:937214a632f9387601dba94f996de78b2e6ee424
Loaded attestation from GitHub API

✓ Verification succeeded! trusted-server-axum-x86_64-unknown-linux-gnu.provenance.sigstore.json is present in release v0.0.0-rehearsal.5
+ [[ release verify-asset == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ for suffix in '' .spdx.json .provenance.sigstore.json .sbom.sigstore.json
+ gh release verify-asset v0.0.0-rehearsal.5 trusted-server-axum-x86_64-unknown-linux-gnu.sbom.sigstore.json --repo prk-Jr/trusted-server
+ command gh release verify-asset v0.0.0-rehearsal.5 trusted-server-axum-x86_64-unknown-linux-gnu.sbom.sigstore.json --repo prk-Jr/trusted-server
Calculated digest for trusted-server-axum-x86_64-unknown-linux-gnu.sbom.sigstore.json: sha256:bcfa163bf41792a363adfbe47b43675fcc2093c97585d8d3917c636d0de55568
Resolved tag v0.0.0-rehearsal.5 to sha1:937214a632f9387601dba94f996de78b2e6ee424
Loaded attestation from GitHub API

✓ Verification succeeded! trusted-server-axum-x86_64-unknown-linux-gnu.sbom.sigstore.json is present in release v0.0.0-rehearsal.5
+ [[ release verify-asset == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ for asset in "${ASSETS[@]}"
+ for suffix in '' .spdx.json .provenance.sigstore.json .sbom.sigstore.json
+ gh release verify-asset v0.0.0-rehearsal.5 trusted-server-axum-x86_64-unknown-linux-musl --repo prk-Jr/trusted-server
+ command gh release verify-asset v0.0.0-rehearsal.5 trusted-server-axum-x86_64-unknown-linux-musl --repo prk-Jr/trusted-server
Calculated digest for trusted-server-axum-x86_64-unknown-linux-musl: sha256:0216ea9f103a0d79db666ff6351bb29d5391921fa29e971b4d68a76359a40210
Resolved tag v0.0.0-rehearsal.5 to sha1:937214a632f9387601dba94f996de78b2e6ee424
Loaded attestation from GitHub API

✓ Verification succeeded! trusted-server-axum-x86_64-unknown-linux-musl is present in release v0.0.0-rehearsal.5
+ [[ release verify-asset == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ for suffix in '' .spdx.json .provenance.sigstore.json .sbom.sigstore.json
+ gh release verify-asset v0.0.0-rehearsal.5 trusted-server-axum-x86_64-unknown-linux-musl.spdx.json --repo prk-Jr/trusted-server
+ command gh release verify-asset v0.0.0-rehearsal.5 trusted-server-axum-x86_64-unknown-linux-musl.spdx.json --repo prk-Jr/trusted-server
Calculated digest for trusted-server-axum-x86_64-unknown-linux-musl.spdx.json: sha256:28ea8ffd121056a2f51accfd4b19a9c1e20cf4001e9850ae1d5c15c6f059b1be
Resolved tag v0.0.0-rehearsal.5 to sha1:937214a632f9387601dba94f996de78b2e6ee424
Loaded attestation from GitHub API

✓ Verification succeeded! trusted-server-axum-x86_64-unknown-linux-musl.spdx.json is present in release v0.0.0-rehearsal.5
+ [[ release verify-asset == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ for suffix in '' .spdx.json .provenance.sigstore.json .sbom.sigstore.json
+ gh release verify-asset v0.0.0-rehearsal.5 trusted-server-axum-x86_64-unknown-linux-musl.provenance.sigstore.json --repo prk-Jr/trusted-server
+ command gh release verify-asset v0.0.0-rehearsal.5 trusted-server-axum-x86_64-unknown-linux-musl.provenance.sigstore.json --repo prk-Jr/trusted-server
Calculated digest for trusted-server-axum-x86_64-unknown-linux-musl.provenance.sigstore.json: sha256:28a3f816f399d8fcad31e687eb895c0f4157e75798d493c73e50f72dbb3fe714
Resolved tag v0.0.0-rehearsal.5 to sha1:937214a632f9387601dba94f996de78b2e6ee424
Loaded attestation from GitHub API

✓ Verification succeeded! trusted-server-axum-x86_64-unknown-linux-musl.provenance.sigstore.json is present in release v0.0.0-rehearsal.5
+ [[ release verify-asset == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ for suffix in '' .spdx.json .provenance.sigstore.json .sbom.sigstore.json
+ gh release verify-asset v0.0.0-rehearsal.5 trusted-server-axum-x86_64-unknown-linux-musl.sbom.sigstore.json --repo prk-Jr/trusted-server
+ command gh release verify-asset v0.0.0-rehearsal.5 trusted-server-axum-x86_64-unknown-linux-musl.sbom.sigstore.json --repo prk-Jr/trusted-server
Calculated digest for trusted-server-axum-x86_64-unknown-linux-musl.sbom.sigstore.json: sha256:552f9f3278327a5ce2a3b28479afacd2271fb77c5e49ddf43ad23e901d5932de
Resolved tag v0.0.0-rehearsal.5 to sha1:937214a632f9387601dba94f996de78b2e6ee424
Loaded attestation from GitHub API

✓ Verification succeeded! trusted-server-axum-x86_64-unknown-linux-musl.sbom.sigstore.json is present in release v0.0.0-rehearsal.5
+ [[ release verify-asset == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ for asset in "${ASSETS[@]}"
+ for suffix in '' .spdx.json .provenance.sigstore.json .sbom.sigstore.json
+ gh release verify-asset v0.0.0-rehearsal.5 trusted-server-axum-aarch64-unknown-linux-gnu --repo prk-Jr/trusted-server
+ command gh release verify-asset v0.0.0-rehearsal.5 trusted-server-axum-aarch64-unknown-linux-gnu --repo prk-Jr/trusted-server
Calculated digest for trusted-server-axum-aarch64-unknown-linux-gnu: sha256:f8f7c3cfd7853f545a38e08bf0a396dd201d241bd3c6b0511d99d0f938022079
Resolved tag v0.0.0-rehearsal.5 to sha1:937214a632f9387601dba94f996de78b2e6ee424
Loaded attestation from GitHub API

✓ Verification succeeded! trusted-server-axum-aarch64-unknown-linux-gnu is present in release v0.0.0-rehearsal.5
+ [[ release verify-asset == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ for suffix in '' .spdx.json .provenance.sigstore.json .sbom.sigstore.json
+ gh release verify-asset v0.0.0-rehearsal.5 trusted-server-axum-aarch64-unknown-linux-gnu.spdx.json --repo prk-Jr/trusted-server
+ command gh release verify-asset v0.0.0-rehearsal.5 trusted-server-axum-aarch64-unknown-linux-gnu.spdx.json --repo prk-Jr/trusted-server
Calculated digest for trusted-server-axum-aarch64-unknown-linux-gnu.spdx.json: sha256:a46a7f00fe0618d0d158e56629eb0a4fc73771658bf946addb605cf48e8855d0
Resolved tag v0.0.0-rehearsal.5 to sha1:937214a632f9387601dba94f996de78b2e6ee424
Loaded attestation from GitHub API

✓ Verification succeeded! trusted-server-axum-aarch64-unknown-linux-gnu.spdx.json is present in release v0.0.0-rehearsal.5
+ [[ release verify-asset == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ for suffix in '' .spdx.json .provenance.sigstore.json .sbom.sigstore.json
+ gh release verify-asset v0.0.0-rehearsal.5 trusted-server-axum-aarch64-unknown-linux-gnu.provenance.sigstore.json --repo prk-Jr/trusted-server
+ command gh release verify-asset v0.0.0-rehearsal.5 trusted-server-axum-aarch64-unknown-linux-gnu.provenance.sigstore.json --repo prk-Jr/trusted-server
Calculated digest for trusted-server-axum-aarch64-unknown-linux-gnu.provenance.sigstore.json: sha256:4b76d82e6b093a46ce43c014e42056c8aed9fd8172fc7993831178bd34af6cc7
Resolved tag v0.0.0-rehearsal.5 to sha1:937214a632f9387601dba94f996de78b2e6ee424
Loaded attestation from GitHub API

✓ Verification succeeded! trusted-server-axum-aarch64-unknown-linux-gnu.provenance.sigstore.json is present in release v0.0.0-rehearsal.5
+ [[ release verify-asset == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ for suffix in '' .spdx.json .provenance.sigstore.json .sbom.sigstore.json
+ gh release verify-asset v0.0.0-rehearsal.5 trusted-server-axum-aarch64-unknown-linux-gnu.sbom.sigstore.json --repo prk-Jr/trusted-server
+ command gh release verify-asset v0.0.0-rehearsal.5 trusted-server-axum-aarch64-unknown-linux-gnu.sbom.sigstore.json --repo prk-Jr/trusted-server
Calculated digest for trusted-server-axum-aarch64-unknown-linux-gnu.sbom.sigstore.json: sha256:a8a3002e5e693efd21f467dea052d7f1b22c7e65589fb47b7b0321657b2e805b
Resolved tag v0.0.0-rehearsal.5 to sha1:937214a632f9387601dba94f996de78b2e6ee424
Loaded attestation from GitHub API

✓ Verification succeeded! trusted-server-axum-aarch64-unknown-linux-gnu.sbom.sigstore.json is present in release v0.0.0-rehearsal.5
+ [[ release verify-asset == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ gh release verify-asset v0.0.0-rehearsal.5 SHA256SUMS --repo prk-Jr/trusted-server
+ command gh release verify-asset v0.0.0-rehearsal.5 SHA256SUMS --repo prk-Jr/trusted-server
Calculated digest for SHA256SUMS: sha256:3f38663ad78cef4c1ea44c44efad58f406946382f5b2f997df556eada1d56c79
Resolved tag v0.0.0-rehearsal.5 to sha1:937214a632f9387601dba94f996de78b2e6ee424
Loaded attestation from GitHub API

✓ Verification succeeded! SHA256SUMS is present in release v0.0.0-rehearsal.5
+ [[ release verify-asset == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ shasum -a 256 --check SHA256SUMS
trusted-server-axum-x86_64-unknown-linux-gnu: OK
trusted-server-axum-x86_64-unknown-linux-gnu.spdx.json: OK
trusted-server-axum-x86_64-unknown-linux-gnu.provenance.sigstore.json: OK
trusted-server-axum-x86_64-unknown-linux-gnu.sbom.sigstore.json: OK
trusted-server-axum-x86_64-unknown-linux-musl: OK
trusted-server-axum-x86_64-unknown-linux-musl.spdx.json: OK
trusted-server-axum-x86_64-unknown-linux-musl.provenance.sigstore.json: OK
trusted-server-axum-x86_64-unknown-linux-musl.sbom.sigstore.json: OK
trusted-server-axum-aarch64-unknown-linux-gnu: OK
trusted-server-axum-aarch64-unknown-linux-gnu.spdx.json: OK
trusted-server-axum-aarch64-unknown-linux-gnu.provenance.sigstore.json: OK
trusted-server-axum-aarch64-unknown-linux-gnu.sbom.sigstore.json: OK
trusted-server-fastly.wasm: OK
trusted-server-fastly.wasm.spdx.json: OK
trusted-server-fastly.wasm.provenance.sigstore.json: OK
trusted-server-fastly.wasm.sbom.sigstore.json: OK
ts-aarch64-apple-darwin: OK
ts-aarch64-apple-darwin.spdx.json: OK
ts-aarch64-apple-darwin.provenance.sigstore.json: OK
ts-aarch64-apple-darwin.sbom.sigstore.json: OK
ts-x86_64-apple-darwin: OK
ts-x86_64-apple-darwin.spdx.json: OK
ts-x86_64-apple-darwin.provenance.sigstore.json: OK
ts-x86_64-apple-darwin.sbom.sigstore.json: OK
ts-x86_64-unknown-linux-gnu: OK
ts-x86_64-unknown-linux-gnu.spdx.json: OK
ts-x86_64-unknown-linux-gnu.provenance.sigstore.json: OK
ts-x86_64-unknown-linux-gnu.sbom.sigstore.json: OK
+ WORKFLOW=prk-Jr/trusted-server/.github/workflows/release-build.yml
+ for asset in "${ASSETS[@]}"
+ gh attestation verify trusted-server-fastly.wasm --repo prk-Jr/trusted-server --bundle trusted-server-fastly.wasm.provenance.sigstore.json --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml --source-ref refs/tags/v0.0.0-rehearsal.5 --source-digest 937214a632f9387601dba94f996de78b2e6ee424 --signer-digest 937214a632f9387601dba94f996de78b2e6ee424 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1
+ command gh attestation verify trusted-server-fastly.wasm --repo prk-Jr/trusted-server --bundle trusted-server-fastly.wasm.provenance.sigstore.json --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml --source-ref refs/tags/v0.0.0-rehearsal.5 --source-digest 937214a632f9387601dba94f996de78b2e6ee424 --signer-digest 937214a632f9387601dba94f996de78b2e6ee424 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1
+ [[ attestation verify == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ printf 'SUCCESS: gh attestation verify %s with requested predicate, signer and source pins\n' trusted-server-fastly.wasm
SUCCESS: gh attestation verify trusted-server-fastly.wasm with requested predicate, signer and source pins
+ gh attestation verify trusted-server-fastly.wasm --repo prk-Jr/trusted-server --bundle trusted-server-fastly.wasm.sbom.sigstore.json --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml --source-ref refs/tags/v0.0.0-rehearsal.5 --source-digest 937214a632f9387601dba94f996de78b2e6ee424 --signer-digest 937214a632f9387601dba94f996de78b2e6ee424 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3
+ command gh attestation verify trusted-server-fastly.wasm --repo prk-Jr/trusted-server --bundle trusted-server-fastly.wasm.sbom.sigstore.json --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml --source-ref refs/tags/v0.0.0-rehearsal.5 --source-digest 937214a632f9387601dba94f996de78b2e6ee424 --signer-digest 937214a632f9387601dba94f996de78b2e6ee424 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3
+ [[ attestation verify == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ printf 'SUCCESS: gh attestation verify %s with requested predicate, signer and source pins\n' trusted-server-fastly.wasm
SUCCESS: gh attestation verify trusted-server-fastly.wasm with requested predicate, signer and source pins
+ for asset in "${ASSETS[@]}"
+ gh attestation verify ts-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --bundle ts-x86_64-unknown-linux-gnu.provenance.sigstore.json --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml --source-ref refs/tags/v0.0.0-rehearsal.5 --source-digest 937214a632f9387601dba94f996de78b2e6ee424 --signer-digest 937214a632f9387601dba94f996de78b2e6ee424 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1
+ command gh attestation verify ts-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --bundle ts-x86_64-unknown-linux-gnu.provenance.sigstore.json --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml --source-ref refs/tags/v0.0.0-rehearsal.5 --source-digest 937214a632f9387601dba94f996de78b2e6ee424 --signer-digest 937214a632f9387601dba94f996de78b2e6ee424 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1
+ [[ attestation verify == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ printf 'SUCCESS: gh attestation verify %s with requested predicate, signer and source pins\n' ts-x86_64-unknown-linux-gnu
SUCCESS: gh attestation verify ts-x86_64-unknown-linux-gnu with requested predicate, signer and source pins
+ gh attestation verify ts-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --bundle ts-x86_64-unknown-linux-gnu.sbom.sigstore.json --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml --source-ref refs/tags/v0.0.0-rehearsal.5 --source-digest 937214a632f9387601dba94f996de78b2e6ee424 --signer-digest 937214a632f9387601dba94f996de78b2e6ee424 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3
+ command gh attestation verify ts-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --bundle ts-x86_64-unknown-linux-gnu.sbom.sigstore.json --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml --source-ref refs/tags/v0.0.0-rehearsal.5 --source-digest 937214a632f9387601dba94f996de78b2e6ee424 --signer-digest 937214a632f9387601dba94f996de78b2e6ee424 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3
+ [[ attestation verify == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ printf 'SUCCESS: gh attestation verify %s with requested predicate, signer and source pins\n' ts-x86_64-unknown-linux-gnu
SUCCESS: gh attestation verify ts-x86_64-unknown-linux-gnu with requested predicate, signer and source pins
+ for asset in "${ASSETS[@]}"
+ gh attestation verify ts-aarch64-apple-darwin --repo prk-Jr/trusted-server --bundle ts-aarch64-apple-darwin.provenance.sigstore.json --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml --source-ref refs/tags/v0.0.0-rehearsal.5 --source-digest 937214a632f9387601dba94f996de78b2e6ee424 --signer-digest 937214a632f9387601dba94f996de78b2e6ee424 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1
+ command gh attestation verify ts-aarch64-apple-darwin --repo prk-Jr/trusted-server --bundle ts-aarch64-apple-darwin.provenance.sigstore.json --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml --source-ref refs/tags/v0.0.0-rehearsal.5 --source-digest 937214a632f9387601dba94f996de78b2e6ee424 --signer-digest 937214a632f9387601dba94f996de78b2e6ee424 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1
+ [[ attestation verify == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ printf 'SUCCESS: gh attestation verify %s with requested predicate, signer and source pins\n' ts-aarch64-apple-darwin
SUCCESS: gh attestation verify ts-aarch64-apple-darwin with requested predicate, signer and source pins
+ gh attestation verify ts-aarch64-apple-darwin --repo prk-Jr/trusted-server --bundle ts-aarch64-apple-darwin.sbom.sigstore.json --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml --source-ref refs/tags/v0.0.0-rehearsal.5 --source-digest 937214a632f9387601dba94f996de78b2e6ee424 --signer-digest 937214a632f9387601dba94f996de78b2e6ee424 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3
+ command gh attestation verify ts-aarch64-apple-darwin --repo prk-Jr/trusted-server --bundle ts-aarch64-apple-darwin.sbom.sigstore.json --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml --source-ref refs/tags/v0.0.0-rehearsal.5 --source-digest 937214a632f9387601dba94f996de78b2e6ee424 --signer-digest 937214a632f9387601dba94f996de78b2e6ee424 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3
+ [[ attestation verify == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ printf 'SUCCESS: gh attestation verify %s with requested predicate, signer and source pins\n' ts-aarch64-apple-darwin
SUCCESS: gh attestation verify ts-aarch64-apple-darwin with requested predicate, signer and source pins
+ for asset in "${ASSETS[@]}"
+ gh attestation verify ts-x86_64-apple-darwin --repo prk-Jr/trusted-server --bundle ts-x86_64-apple-darwin.provenance.sigstore.json --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml --source-ref refs/tags/v0.0.0-rehearsal.5 --source-digest 937214a632f9387601dba94f996de78b2e6ee424 --signer-digest 937214a632f9387601dba94f996de78b2e6ee424 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1
+ command gh attestation verify ts-x86_64-apple-darwin --repo prk-Jr/trusted-server --bundle ts-x86_64-apple-darwin.provenance.sigstore.json --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml --source-ref refs/tags/v0.0.0-rehearsal.5 --source-digest 937214a632f9387601dba94f996de78b2e6ee424 --signer-digest 937214a632f9387601dba94f996de78b2e6ee424 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1
+ [[ attestation verify == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ printf 'SUCCESS: gh attestation verify %s with requested predicate, signer and source pins\n' ts-x86_64-apple-darwin
SUCCESS: gh attestation verify ts-x86_64-apple-darwin with requested predicate, signer and source pins
+ gh attestation verify ts-x86_64-apple-darwin --repo prk-Jr/trusted-server --bundle ts-x86_64-apple-darwin.sbom.sigstore.json --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml --source-ref refs/tags/v0.0.0-rehearsal.5 --source-digest 937214a632f9387601dba94f996de78b2e6ee424 --signer-digest 937214a632f9387601dba94f996de78b2e6ee424 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3
+ command gh attestation verify ts-x86_64-apple-darwin --repo prk-Jr/trusted-server --bundle ts-x86_64-apple-darwin.sbom.sigstore.json --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml --source-ref refs/tags/v0.0.0-rehearsal.5 --source-digest 937214a632f9387601dba94f996de78b2e6ee424 --signer-digest 937214a632f9387601dba94f996de78b2e6ee424 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3
+ [[ attestation verify == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ printf 'SUCCESS: gh attestation verify %s with requested predicate, signer and source pins\n' ts-x86_64-apple-darwin
SUCCESS: gh attestation verify ts-x86_64-apple-darwin with requested predicate, signer and source pins
+ for asset in "${ASSETS[@]}"
+ gh attestation verify trusted-server-axum-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --bundle trusted-server-axum-x86_64-unknown-linux-gnu.provenance.sigstore.json --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml --source-ref refs/tags/v0.0.0-rehearsal.5 --source-digest 937214a632f9387601dba94f996de78b2e6ee424 --signer-digest 937214a632f9387601dba94f996de78b2e6ee424 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1
+ command gh attestation verify trusted-server-axum-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --bundle trusted-server-axum-x86_64-unknown-linux-gnu.provenance.sigstore.json --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml --source-ref refs/tags/v0.0.0-rehearsal.5 --source-digest 937214a632f9387601dba94f996de78b2e6ee424 --signer-digest 937214a632f9387601dba94f996de78b2e6ee424 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1
+ [[ attestation verify == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ printf 'SUCCESS: gh attestation verify %s with requested predicate, signer and source pins\n' trusted-server-axum-x86_64-unknown-linux-gnu
SUCCESS: gh attestation verify trusted-server-axum-x86_64-unknown-linux-gnu with requested predicate, signer and source pins
+ gh attestation verify trusted-server-axum-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --bundle trusted-server-axum-x86_64-unknown-linux-gnu.sbom.sigstore.json --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml --source-ref refs/tags/v0.0.0-rehearsal.5 --source-digest 937214a632f9387601dba94f996de78b2e6ee424 --signer-digest 937214a632f9387601dba94f996de78b2e6ee424 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3
+ command gh attestation verify trusted-server-axum-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --bundle trusted-server-axum-x86_64-unknown-linux-gnu.sbom.sigstore.json --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml --source-ref refs/tags/v0.0.0-rehearsal.5 --source-digest 937214a632f9387601dba94f996de78b2e6ee424 --signer-digest 937214a632f9387601dba94f996de78b2e6ee424 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3
+ [[ attestation verify == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ printf 'SUCCESS: gh attestation verify %s with requested predicate, signer and source pins\n' trusted-server-axum-x86_64-unknown-linux-gnu
SUCCESS: gh attestation verify trusted-server-axum-x86_64-unknown-linux-gnu with requested predicate, signer and source pins
+ for asset in "${ASSETS[@]}"
+ gh attestation verify trusted-server-axum-x86_64-unknown-linux-musl --repo prk-Jr/trusted-server --bundle trusted-server-axum-x86_64-unknown-linux-musl.provenance.sigstore.json --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml --source-ref refs/tags/v0.0.0-rehearsal.5 --source-digest 937214a632f9387601dba94f996de78b2e6ee424 --signer-digest 937214a632f9387601dba94f996de78b2e6ee424 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1
+ command gh attestation verify trusted-server-axum-x86_64-unknown-linux-musl --repo prk-Jr/trusted-server --bundle trusted-server-axum-x86_64-unknown-linux-musl.provenance.sigstore.json --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml --source-ref refs/tags/v0.0.0-rehearsal.5 --source-digest 937214a632f9387601dba94f996de78b2e6ee424 --signer-digest 937214a632f9387601dba94f996de78b2e6ee424 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1
+ [[ attestation verify == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ printf 'SUCCESS: gh attestation verify %s with requested predicate, signer and source pins\n' trusted-server-axum-x86_64-unknown-linux-musl
SUCCESS: gh attestation verify trusted-server-axum-x86_64-unknown-linux-musl with requested predicate, signer and source pins
+ gh attestation verify trusted-server-axum-x86_64-unknown-linux-musl --repo prk-Jr/trusted-server --bundle trusted-server-axum-x86_64-unknown-linux-musl.sbom.sigstore.json --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml --source-ref refs/tags/v0.0.0-rehearsal.5 --source-digest 937214a632f9387601dba94f996de78b2e6ee424 --signer-digest 937214a632f9387601dba94f996de78b2e6ee424 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3
+ command gh attestation verify trusted-server-axum-x86_64-unknown-linux-musl --repo prk-Jr/trusted-server --bundle trusted-server-axum-x86_64-unknown-linux-musl.sbom.sigstore.json --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml --source-ref refs/tags/v0.0.0-rehearsal.5 --source-digest 937214a632f9387601dba94f996de78b2e6ee424 --signer-digest 937214a632f9387601dba94f996de78b2e6ee424 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3
+ [[ attestation verify == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ printf 'SUCCESS: gh attestation verify %s with requested predicate, signer and source pins\n' trusted-server-axum-x86_64-unknown-linux-musl
SUCCESS: gh attestation verify trusted-server-axum-x86_64-unknown-linux-musl with requested predicate, signer and source pins
+ for asset in "${ASSETS[@]}"
+ gh attestation verify trusted-server-axum-aarch64-unknown-linux-gnu --repo prk-Jr/trusted-server --bundle trusted-server-axum-aarch64-unknown-linux-gnu.provenance.sigstore.json --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml --source-ref refs/tags/v0.0.0-rehearsal.5 --source-digest 937214a632f9387601dba94f996de78b2e6ee424 --signer-digest 937214a632f9387601dba94f996de78b2e6ee424 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1
+ command gh attestation verify trusted-server-axum-aarch64-unknown-linux-gnu --repo prk-Jr/trusted-server --bundle trusted-server-axum-aarch64-unknown-linux-gnu.provenance.sigstore.json --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml --source-ref refs/tags/v0.0.0-rehearsal.5 --source-digest 937214a632f9387601dba94f996de78b2e6ee424 --signer-digest 937214a632f9387601dba94f996de78b2e6ee424 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1
+ [[ attestation verify == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ printf 'SUCCESS: gh attestation verify %s with requested predicate, signer and source pins\n' trusted-server-axum-aarch64-unknown-linux-gnu
SUCCESS: gh attestation verify trusted-server-axum-aarch64-unknown-linux-gnu with requested predicate, signer and source pins
+ gh attestation verify trusted-server-axum-aarch64-unknown-linux-gnu --repo prk-Jr/trusted-server --bundle trusted-server-axum-aarch64-unknown-linux-gnu.sbom.sigstore.json --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml --source-ref refs/tags/v0.0.0-rehearsal.5 --source-digest 937214a632f9387601dba94f996de78b2e6ee424 --signer-digest 937214a632f9387601dba94f996de78b2e6ee424 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3
+ command gh attestation verify trusted-server-axum-aarch64-unknown-linux-gnu --repo prk-Jr/trusted-server --bundle trusted-server-axum-aarch64-unknown-linux-gnu.sbom.sigstore.json --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml --source-ref refs/tags/v0.0.0-rehearsal.5 --source-digest 937214a632f9387601dba94f996de78b2e6ee424 --signer-digest 937214a632f9387601dba94f996de78b2e6ee424 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3
+ [[ attestation verify == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ printf 'SUCCESS: gh attestation verify %s with requested predicate, signer and source pins\n' trusted-server-axum-aarch64-unknown-linux-gnu
SUCCESS: gh attestation verify trusted-server-axum-aarch64-unknown-linux-gnu with requested predicate, signer and source pins
+ IDENTITY=https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.5
+ for asset in "${ASSETS[@]}"
+ gh attestation verify trusted-server-fastly.wasm --repo prk-Jr/trusted-server --bundle trusted-server-fastly.wasm.provenance.sigstore.json --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.5 --source-ref refs/tags/v0.0.0-rehearsal.5 --source-digest 937214a632f9387601dba94f996de78b2e6ee424 --signer-digest 937214a632f9387601dba94f996de78b2e6ee424 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1
+ command gh attestation verify trusted-server-fastly.wasm --repo prk-Jr/trusted-server --bundle trusted-server-fastly.wasm.provenance.sigstore.json --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.5 --source-ref refs/tags/v0.0.0-rehearsal.5 --source-digest 937214a632f9387601dba94f996de78b2e6ee424 --signer-digest 937214a632f9387601dba94f996de78b2e6ee424 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1
+ [[ attestation verify == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ printf 'SUCCESS: gh attestation verify %s with requested predicate, signer and source pins\n' trusted-server-fastly.wasm
SUCCESS: gh attestation verify trusted-server-fastly.wasm with requested predicate, signer and source pins
+ gh attestation verify trusted-server-fastly.wasm --repo prk-Jr/trusted-server --bundle trusted-server-fastly.wasm.sbom.sigstore.json --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.5 --source-ref refs/tags/v0.0.0-rehearsal.5 --source-digest 937214a632f9387601dba94f996de78b2e6ee424 --signer-digest 937214a632f9387601dba94f996de78b2e6ee424 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --format json
+ command gh attestation verify trusted-server-fastly.wasm --repo prk-Jr/trusted-server --bundle trusted-server-fastly.wasm.sbom.sigstore.json --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.5 --source-ref refs/tags/v0.0.0-rehearsal.5 --source-digest 937214a632f9387601dba94f996de78b2e6ee424 --signer-digest 937214a632f9387601dba94f996de78b2e6ee424 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --format json
+ [[ attestation verify == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ printf 'SUCCESS: gh attestation verify %s with requested predicate, signer and source pins\n' trusted-server-fastly.wasm
SUCCESS: gh attestation verify trusted-server-fastly.wasm with requested predicate, signer and source pins
+ jq -e --slurpfile document trusted-server-fastly.wasm.spdx.json 'length == 1 and .[0].verificationResult.statement.predicate == $document[0]' trusted-server-fastly.wasm.sbom-verification.json
true
+ for asset in "${ASSETS[@]}"

@prk-Jr

prk-Jr commented Oct 23, 2026

Copy link
Copy Markdown
Collaborator Author

Rehearsal v0.0.0-rehearsal.5 passed at exact implementation SHA 937214a632f9387601dba94f996de78b2e6ee424.

Build/sign/publication run passed all seven builds/signing jobs and immutable publication. Published release: ID 421431085, draft=false, immutable=true, exactly 29 nonempty assets. The 28 checksum entries exclude SHA256SUMS itself. Local directory paths are normalized below; commands, flags, identities, digests and results are unchanged.

Full online verification transcript, part 2.

+ gh attestation verify ts-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --bundle ts-x86_64-unknown-linux-gnu.provenance.sigstore.json --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.5 --source-ref refs/tags/v0.0.0-rehearsal.5 --source-digest 937214a632f9387601dba94f996de78b2e6ee424 --signer-digest 937214a632f9387601dba94f996de78b2e6ee424 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1
+ command gh attestation verify ts-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --bundle ts-x86_64-unknown-linux-gnu.provenance.sigstore.json --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.5 --source-ref refs/tags/v0.0.0-rehearsal.5 --source-digest 937214a632f9387601dba94f996de78b2e6ee424 --signer-digest 937214a632f9387601dba94f996de78b2e6ee424 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1
+ [[ attestation verify == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ printf 'SUCCESS: gh attestation verify %s with requested predicate, signer and source pins\n' ts-x86_64-unknown-linux-gnu
SUCCESS: gh attestation verify ts-x86_64-unknown-linux-gnu with requested predicate, signer and source pins
+ gh attestation verify ts-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --bundle ts-x86_64-unknown-linux-gnu.sbom.sigstore.json --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.5 --source-ref refs/tags/v0.0.0-rehearsal.5 --source-digest 937214a632f9387601dba94f996de78b2e6ee424 --signer-digest 937214a632f9387601dba94f996de78b2e6ee424 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --format json
+ command gh attestation verify ts-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --bundle ts-x86_64-unknown-linux-gnu.sbom.sigstore.json --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.5 --source-ref refs/tags/v0.0.0-rehearsal.5 --source-digest 937214a632f9387601dba94f996de78b2e6ee424 --signer-digest 937214a632f9387601dba94f996de78b2e6ee424 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --format json
+ [[ attestation verify == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ printf 'SUCCESS: gh attestation verify %s with requested predicate, signer and source pins\n' ts-x86_64-unknown-linux-gnu
SUCCESS: gh attestation verify ts-x86_64-unknown-linux-gnu with requested predicate, signer and source pins
+ jq -e --slurpfile document ts-x86_64-unknown-linux-gnu.spdx.json 'length == 1 and .[0].verificationResult.statement.predicate == $document[0]' ts-x86_64-unknown-linux-gnu.sbom-verification.json
true
+ for asset in "${ASSETS[@]}"
+ gh attestation verify ts-aarch64-apple-darwin --repo prk-Jr/trusted-server --bundle ts-aarch64-apple-darwin.provenance.sigstore.json --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.5 --source-ref refs/tags/v0.0.0-rehearsal.5 --source-digest 937214a632f9387601dba94f996de78b2e6ee424 --signer-digest 937214a632f9387601dba94f996de78b2e6ee424 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1
+ command gh attestation verify ts-aarch64-apple-darwin --repo prk-Jr/trusted-server --bundle ts-aarch64-apple-darwin.provenance.sigstore.json --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.5 --source-ref refs/tags/v0.0.0-rehearsal.5 --source-digest 937214a632f9387601dba94f996de78b2e6ee424 --signer-digest 937214a632f9387601dba94f996de78b2e6ee424 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1
+ [[ attestation verify == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ printf 'SUCCESS: gh attestation verify %s with requested predicate, signer and source pins\n' ts-aarch64-apple-darwin
SUCCESS: gh attestation verify ts-aarch64-apple-darwin with requested predicate, signer and source pins
+ gh attestation verify ts-aarch64-apple-darwin --repo prk-Jr/trusted-server --bundle ts-aarch64-apple-darwin.sbom.sigstore.json --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.5 --source-ref refs/tags/v0.0.0-rehearsal.5 --source-digest 937214a632f9387601dba94f996de78b2e6ee424 --signer-digest 937214a632f9387601dba94f996de78b2e6ee424 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --format json
+ command gh attestation verify ts-aarch64-apple-darwin --repo prk-Jr/trusted-server --bundle ts-aarch64-apple-darwin.sbom.sigstore.json --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.5 --source-ref refs/tags/v0.0.0-rehearsal.5 --source-digest 937214a632f9387601dba94f996de78b2e6ee424 --signer-digest 937214a632f9387601dba94f996de78b2e6ee424 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --format json
+ [[ attestation verify == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ printf 'SUCCESS: gh attestation verify %s with requested predicate, signer and source pins\n' ts-aarch64-apple-darwin
SUCCESS: gh attestation verify ts-aarch64-apple-darwin with requested predicate, signer and source pins
+ jq -e --slurpfile document ts-aarch64-apple-darwin.spdx.json 'length == 1 and .[0].verificationResult.statement.predicate == $document[0]' ts-aarch64-apple-darwin.sbom-verification.json
true
+ for asset in "${ASSETS[@]}"
+ gh attestation verify ts-x86_64-apple-darwin --repo prk-Jr/trusted-server --bundle ts-x86_64-apple-darwin.provenance.sigstore.json --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.5 --source-ref refs/tags/v0.0.0-rehearsal.5 --source-digest 937214a632f9387601dba94f996de78b2e6ee424 --signer-digest 937214a632f9387601dba94f996de78b2e6ee424 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1
+ command gh attestation verify ts-x86_64-apple-darwin --repo prk-Jr/trusted-server --bundle ts-x86_64-apple-darwin.provenance.sigstore.json --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.5 --source-ref refs/tags/v0.0.0-rehearsal.5 --source-digest 937214a632f9387601dba94f996de78b2e6ee424 --signer-digest 937214a632f9387601dba94f996de78b2e6ee424 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1
+ [[ attestation verify == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ printf 'SUCCESS: gh attestation verify %s with requested predicate, signer and source pins\n' ts-x86_64-apple-darwin
SUCCESS: gh attestation verify ts-x86_64-apple-darwin with requested predicate, signer and source pins
+ gh attestation verify ts-x86_64-apple-darwin --repo prk-Jr/trusted-server --bundle ts-x86_64-apple-darwin.sbom.sigstore.json --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.5 --source-ref refs/tags/v0.0.0-rehearsal.5 --source-digest 937214a632f9387601dba94f996de78b2e6ee424 --signer-digest 937214a632f9387601dba94f996de78b2e6ee424 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --format json
+ command gh attestation verify ts-x86_64-apple-darwin --repo prk-Jr/trusted-server --bundle ts-x86_64-apple-darwin.sbom.sigstore.json --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.5 --source-ref refs/tags/v0.0.0-rehearsal.5 --source-digest 937214a632f9387601dba94f996de78b2e6ee424 --signer-digest 937214a632f9387601dba94f996de78b2e6ee424 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --format json
+ [[ attestation verify == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ printf 'SUCCESS: gh attestation verify %s with requested predicate, signer and source pins\n' ts-x86_64-apple-darwin
SUCCESS: gh attestation verify ts-x86_64-apple-darwin with requested predicate, signer and source pins
+ jq -e --slurpfile document ts-x86_64-apple-darwin.spdx.json 'length == 1 and .[0].verificationResult.statement.predicate == $document[0]' ts-x86_64-apple-darwin.sbom-verification.json
true
+ for asset in "${ASSETS[@]}"
+ gh attestation verify trusted-server-axum-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --bundle trusted-server-axum-x86_64-unknown-linux-gnu.provenance.sigstore.json --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.5 --source-ref refs/tags/v0.0.0-rehearsal.5 --source-digest 937214a632f9387601dba94f996de78b2e6ee424 --signer-digest 937214a632f9387601dba94f996de78b2e6ee424 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1
+ command gh attestation verify trusted-server-axum-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --bundle trusted-server-axum-x86_64-unknown-linux-gnu.provenance.sigstore.json --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.5 --source-ref refs/tags/v0.0.0-rehearsal.5 --source-digest 937214a632f9387601dba94f996de78b2e6ee424 --signer-digest 937214a632f9387601dba94f996de78b2e6ee424 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1
+ [[ attestation verify == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ printf 'SUCCESS: gh attestation verify %s with requested predicate, signer and source pins\n' trusted-server-axum-x86_64-unknown-linux-gnu
SUCCESS: gh attestation verify trusted-server-axum-x86_64-unknown-linux-gnu with requested predicate, signer and source pins
+ gh attestation verify trusted-server-axum-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --bundle trusted-server-axum-x86_64-unknown-linux-gnu.sbom.sigstore.json --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.5 --source-ref refs/tags/v0.0.0-rehearsal.5 --source-digest 937214a632f9387601dba94f996de78b2e6ee424 --signer-digest 937214a632f9387601dba94f996de78b2e6ee424 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --format json
+ command gh attestation verify trusted-server-axum-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --bundle trusted-server-axum-x86_64-unknown-linux-gnu.sbom.sigstore.json --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.5 --source-ref refs/tags/v0.0.0-rehearsal.5 --source-digest 937214a632f9387601dba94f996de78b2e6ee424 --signer-digest 937214a632f9387601dba94f996de78b2e6ee424 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --format json
+ [[ attestation verify == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ printf 'SUCCESS: gh attestation verify %s with requested predicate, signer and source pins\n' trusted-server-axum-x86_64-unknown-linux-gnu
SUCCESS: gh attestation verify trusted-server-axum-x86_64-unknown-linux-gnu with requested predicate, signer and source pins
+ jq -e --slurpfile document trusted-server-axum-x86_64-unknown-linux-gnu.spdx.json 'length == 1 and .[0].verificationResult.statement.predicate == $document[0]' trusted-server-axum-x86_64-unknown-linux-gnu.sbom-verification.json
true
+ for asset in "${ASSETS[@]}"
+ gh attestation verify trusted-server-axum-x86_64-unknown-linux-musl --repo prk-Jr/trusted-server --bundle trusted-server-axum-x86_64-unknown-linux-musl.provenance.sigstore.json --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.5 --source-ref refs/tags/v0.0.0-rehearsal.5 --source-digest 937214a632f9387601dba94f996de78b2e6ee424 --signer-digest 937214a632f9387601dba94f996de78b2e6ee424 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1
+ command gh attestation verify trusted-server-axum-x86_64-unknown-linux-musl --repo prk-Jr/trusted-server --bundle trusted-server-axum-x86_64-unknown-linux-musl.provenance.sigstore.json --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.5 --source-ref refs/tags/v0.0.0-rehearsal.5 --source-digest 937214a632f9387601dba94f996de78b2e6ee424 --signer-digest 937214a632f9387601dba94f996de78b2e6ee424 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1
+ [[ attestation verify == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ printf 'SUCCESS: gh attestation verify %s with requested predicate, signer and source pins\n' trusted-server-axum-x86_64-unknown-linux-musl
SUCCESS: gh attestation verify trusted-server-axum-x86_64-unknown-linux-musl with requested predicate, signer and source pins
+ gh attestation verify trusted-server-axum-x86_64-unknown-linux-musl --repo prk-Jr/trusted-server --bundle trusted-server-axum-x86_64-unknown-linux-musl.sbom.sigstore.json --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.5 --source-ref refs/tags/v0.0.0-rehearsal.5 --source-digest 937214a632f9387601dba94f996de78b2e6ee424 --signer-digest 937214a632f9387601dba94f996de78b2e6ee424 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --format json
+ command gh attestation verify trusted-server-axum-x86_64-unknown-linux-musl --repo prk-Jr/trusted-server --bundle trusted-server-axum-x86_64-unknown-linux-musl.sbom.sigstore.json --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.5 --source-ref refs/tags/v0.0.0-rehearsal.5 --source-digest 937214a632f9387601dba94f996de78b2e6ee424 --signer-digest 937214a632f9387601dba94f996de78b2e6ee424 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --format json
+ [[ attestation verify == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ printf 'SUCCESS: gh attestation verify %s with requested predicate, signer and source pins\n' trusted-server-axum-x86_64-unknown-linux-musl
SUCCESS: gh attestation verify trusted-server-axum-x86_64-unknown-linux-musl with requested predicate, signer and source pins
+ jq -e --slurpfile document trusted-server-axum-x86_64-unknown-linux-musl.spdx.json 'length == 1 and .[0].verificationResult.statement.predicate == $document[0]' trusted-server-axum-x86_64-unknown-linux-musl.sbom-verification.json
true
+ for asset in "${ASSETS[@]}"
+ gh attestation verify trusted-server-axum-aarch64-unknown-linux-gnu --repo prk-Jr/trusted-server --bundle trusted-server-axum-aarch64-unknown-linux-gnu.provenance.sigstore.json --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.5 --source-ref refs/tags/v0.0.0-rehearsal.5 --source-digest 937214a632f9387601dba94f996de78b2e6ee424 --signer-digest 937214a632f9387601dba94f996de78b2e6ee424 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1
+ command gh attestation verify trusted-server-axum-aarch64-unknown-linux-gnu --repo prk-Jr/trusted-server --bundle trusted-server-axum-aarch64-unknown-linux-gnu.provenance.sigstore.json --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.5 --source-ref refs/tags/v0.0.0-rehearsal.5 --source-digest 937214a632f9387601dba94f996de78b2e6ee424 --signer-digest 937214a632f9387601dba94f996de78b2e6ee424 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1
+ [[ attestation verify == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ printf 'SUCCESS: gh attestation verify %s with requested predicate, signer and source pins\n' trusted-server-axum-aarch64-unknown-linux-gnu
SUCCESS: gh attestation verify trusted-server-axum-aarch64-unknown-linux-gnu with requested predicate, signer and source pins
+ gh attestation verify trusted-server-axum-aarch64-unknown-linux-gnu --repo prk-Jr/trusted-server --bundle trusted-server-axum-aarch64-unknown-linux-gnu.sbom.sigstore.json --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.5 --source-ref refs/tags/v0.0.0-rehearsal.5 --source-digest 937214a632f9387601dba94f996de78b2e6ee424 --signer-digest 937214a632f9387601dba94f996de78b2e6ee424 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --format json
+ command gh attestation verify trusted-server-axum-aarch64-unknown-linux-gnu --repo prk-Jr/trusted-server --bundle trusted-server-axum-aarch64-unknown-linux-gnu.sbom.sigstore.json --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.5 --source-ref refs/tags/v0.0.0-rehearsal.5 --source-digest 937214a632f9387601dba94f996de78b2e6ee424 --signer-digest 937214a632f9387601dba94f996de78b2e6ee424 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --format json
+ [[ attestation verify == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ printf 'SUCCESS: gh attestation verify %s with requested predicate, signer and source pins\n' trusted-server-axum-aarch64-unknown-linux-gnu
SUCCESS: gh attestation verify trusted-server-axum-aarch64-unknown-linux-gnu with requested predicate, signer and source pins
+ jq -e --slurpfile document trusted-server-axum-aarch64-unknown-linux-gnu.spdx.json 'length == 1 and .[0].verificationResult.statement.predicate == $document[0]' trusted-server-axum-aarch64-unknown-linux-gnu.sbom-verification.json
true
+ printf '%s\n' 'SUCCESS: release, all 29 assets, 28 checksums, both predicates and both signer identities for each binary, and seven SPDX predicate comparisons verified.'
SUCCESS: release, all 29 assets, 28 checksums, both predicates and both signer identities for each binary, and seven SPDX predicate comparisons verified.

@prk-Jr

prk-Jr commented Oct 23, 2026

Copy link
Copy Markdown
Collaborator Author

Rehearsal v0.0.0-rehearsal.5 passed at exact implementation SHA 937214a632f9387601dba94f996de78b2e6ee424.

Build/sign/publication run passed all seven builds/signing jobs and immutable publication. Published release: ID 421431085, draft=false, immutable=true, exactly 29 nonempty assets. The 28 checksum entries exclude SHA256SUMS itself. Local directory paths are normalized below; commands, flags, identities, digests and results are unchanged.

All seven binaries passed provenance and SPDX verification with both signer identity forms, exact source/ref/signer pins, self-hosted runners denied and published-SPDX predicate equality under OS-enforced network denial. No --offline flag is used. GitHub CLI 2.102.0 matches the publisher; its official ARM macOS archive SHA-256 is da922c20d1792e5b2cbf375593d7a658acf034c12c84e007e71c76ef959c337e. Public trust roots were fetched once online.

gh version 2.102.0 (2026-09-30)
https://github.com/cli/cli/releases/tag/v2.102.0

65ca537f6ed8a47fd0e560c421baa1f6c1efb8b25fc200d8c5c02c0e92eb2b9c  <evidence-directory>/trusted_root.jsonl
gh attestation trusted-root > trusted_root.jsonl
shasum -a 256 trusted_root.jsonl
/usr/bin/sandbox-exec -p '(version 1)(allow default)(deny network*)' env GH_TOKEN=offline-verification-no-network bash -x offline-verify.sh
curl: (6) Could not resolve host: example.com
SUCCESS: OS network-denial control blocked external HTTPS; curl exit 6
+ REPO=prk-Jr/trusted-server
+ TAG=v0.0.0-rehearsal.5
+ COMMIT=937214a632f9387601dba94f996de78b2e6ee424
+ WORKFLOW=prk-Jr/trusted-server/.github/workflows/release-build.yml
+ IDENTITY=https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.5
+ ASSETS=(trusted-server-fastly.wasm ts-x86_64-unknown-linux-gnu ts-aarch64-apple-darwin ts-x86_64-apple-darwin trusted-server-axum-x86_64-unknown-linux-gnu trusted-server-axum-x86_64-unknown-linux-musl trusted-server-axum-aarch64-unknown-linux-gnu)
+ for asset in "${ASSETS[@]}"
+ for kind in provenance sbom
+ predicate=https://slsa.dev/provenance/v1
+ [[ provenance == sbom ]]
+ checks=(--repo "$REPO" --bundle "$asset.$kind.sigstore.json" --custom-trusted-root trusted_root.jsonl --source-ref "refs/tags/$TAG" --source-digest "$COMMIT" --signer-digest "$COMMIT" --deny-self-hosted-runners --predicate-type "$predicate")
+ gh attestation verify trusted-server-fastly.wasm --repo prk-Jr/trusted-server --bundle trusted-server-fastly.wasm.provenance.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.5 --source-digest 937214a632f9387601dba94f996de78b2e6ee424 --signer-digest 937214a632f9387601dba94f996de78b2e6ee424 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
+ command gh attestation verify trusted-server-fastly.wasm --repo prk-Jr/trusted-server --bundle trusted-server-fastly.wasm.provenance.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.5 --source-digest 937214a632f9387601dba94f996de78b2e6ee424 --signer-digest 937214a632f9387601dba94f996de78b2e6ee424 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
+ [[ attestation verify == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ printf 'SUCCESS: gh attestation verify %s with requested predicate, signer and source pins\n' trusted-server-fastly.wasm
SUCCESS: gh attestation verify trusted-server-fastly.wasm with requested predicate, signer and source pins
+ gh attestation verify trusted-server-fastly.wasm --repo prk-Jr/trusted-server --bundle trusted-server-fastly.wasm.provenance.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.5 --source-digest 937214a632f9387601dba94f996de78b2e6ee424 --signer-digest 937214a632f9387601dba94f996de78b2e6ee424 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.5 --format json
+ command gh attestation verify trusted-server-fastly.wasm --repo prk-Jr/trusted-server --bundle trusted-server-fastly.wasm.provenance.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.5 --source-digest 937214a632f9387601dba94f996de78b2e6ee424 --signer-digest 937214a632f9387601dba94f996de78b2e6ee424 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.5 --format json
+ [[ attestation verify == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ printf 'SUCCESS: gh attestation verify %s with requested predicate, signer and source pins\n' trusted-server-fastly.wasm
SUCCESS: gh attestation verify trusted-server-fastly.wasm with requested predicate, signer and source pins
+ [[ provenance == sbom ]]
+ for kind in provenance sbom
+ predicate=https://slsa.dev/provenance/v1
+ [[ sbom == sbom ]]
+ predicate=https://spdx.dev/Document/v2.3
+ checks=(--repo "$REPO" --bundle "$asset.$kind.sigstore.json" --custom-trusted-root trusted_root.jsonl --source-ref "refs/tags/$TAG" --source-digest "$COMMIT" --signer-digest "$COMMIT" --deny-self-hosted-runners --predicate-type "$predicate")
+ gh attestation verify trusted-server-fastly.wasm --repo prk-Jr/trusted-server --bundle trusted-server-fastly.wasm.sbom.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.5 --source-digest 937214a632f9387601dba94f996de78b2e6ee424 --signer-digest 937214a632f9387601dba94f996de78b2e6ee424 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
+ command gh attestation verify trusted-server-fastly.wasm --repo prk-Jr/trusted-server --bundle trusted-server-fastly.wasm.sbom.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.5 --source-digest 937214a632f9387601dba94f996de78b2e6ee424 --signer-digest 937214a632f9387601dba94f996de78b2e6ee424 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
+ [[ attestation verify == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ printf 'SUCCESS: gh attestation verify %s with requested predicate, signer and source pins\n' trusted-server-fastly.wasm
SUCCESS: gh attestation verify trusted-server-fastly.wasm with requested predicate, signer and source pins
+ gh attestation verify trusted-server-fastly.wasm --repo prk-Jr/trusted-server --bundle trusted-server-fastly.wasm.sbom.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.5 --source-digest 937214a632f9387601dba94f996de78b2e6ee424 --signer-digest 937214a632f9387601dba94f996de78b2e6ee424 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.5 --format json
+ command gh attestation verify trusted-server-fastly.wasm --repo prk-Jr/trusted-server --bundle trusted-server-fastly.wasm.sbom.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.5 --source-digest 937214a632f9387601dba94f996de78b2e6ee424 --signer-digest 937214a632f9387601dba94f996de78b2e6ee424 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.5 --format json
+ [[ attestation verify == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ printf 'SUCCESS: gh attestation verify %s with requested predicate, signer and source pins\n' trusted-server-fastly.wasm
SUCCESS: gh attestation verify trusted-server-fastly.wasm with requested predicate, signer and source pins
+ [[ sbom == sbom ]]
+ jq -e --slurpfile document trusted-server-fastly.wasm.spdx.json 'length == 1 and .[0].verificationResult.statement.predicate == $document[0]' trusted-server-fastly.wasm.offline-sbom-verification.json
true
+ for asset in "${ASSETS[@]}"
+ for kind in provenance sbom
+ predicate=https://slsa.dev/provenance/v1
+ [[ provenance == sbom ]]
+ checks=(--repo "$REPO" --bundle "$asset.$kind.sigstore.json" --custom-trusted-root trusted_root.jsonl --source-ref "refs/tags/$TAG" --source-digest "$COMMIT" --signer-digest "$COMMIT" --deny-self-hosted-runners --predicate-type "$predicate")
+ gh attestation verify ts-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --bundle ts-x86_64-unknown-linux-gnu.provenance.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.5 --source-digest 937214a632f9387601dba94f996de78b2e6ee424 --signer-digest 937214a632f9387601dba94f996de78b2e6ee424 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
+ command gh attestation verify ts-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --bundle ts-x86_64-unknown-linux-gnu.provenance.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.5 --source-digest 937214a632f9387601dba94f996de78b2e6ee424 --signer-digest 937214a632f9387601dba94f996de78b2e6ee424 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
+ [[ attestation verify == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ printf 'SUCCESS: gh attestation verify %s with requested predicate, signer and source pins\n' ts-x86_64-unknown-linux-gnu
SUCCESS: gh attestation verify ts-x86_64-unknown-linux-gnu with requested predicate, signer and source pins
+ gh attestation verify ts-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --bundle ts-x86_64-unknown-linux-gnu.provenance.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.5 --source-digest 937214a632f9387601dba94f996de78b2e6ee424 --signer-digest 937214a632f9387601dba94f996de78b2e6ee424 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.5 --format json
+ command gh attestation verify ts-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --bundle ts-x86_64-unknown-linux-gnu.provenance.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.5 --source-digest 937214a632f9387601dba94f996de78b2e6ee424 --signer-digest 937214a632f9387601dba94f996de78b2e6ee424 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.5 --format json
+ [[ attestation verify == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ printf 'SUCCESS: gh attestation verify %s with requested predicate, signer and source pins\n' ts-x86_64-unknown-linux-gnu
SUCCESS: gh attestation verify ts-x86_64-unknown-linux-gnu with requested predicate, signer and source pins
+ [[ provenance == sbom ]]
+ for kind in provenance sbom
+ predicate=https://slsa.dev/provenance/v1
+ [[ sbom == sbom ]]
+ predicate=https://spdx.dev/Document/v2.3
+ checks=(--repo "$REPO" --bundle "$asset.$kind.sigstore.json" --custom-trusted-root trusted_root.jsonl --source-ref "refs/tags/$TAG" --source-digest "$COMMIT" --signer-digest "$COMMIT" --deny-self-hosted-runners --predicate-type "$predicate")
+ gh attestation verify ts-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --bundle ts-x86_64-unknown-linux-gnu.sbom.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.5 --source-digest 937214a632f9387601dba94f996de78b2e6ee424 --signer-digest 937214a632f9387601dba94f996de78b2e6ee424 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
+ command gh attestation verify ts-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --bundle ts-x86_64-unknown-linux-gnu.sbom.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.5 --source-digest 937214a632f9387601dba94f996de78b2e6ee424 --signer-digest 937214a632f9387601dba94f996de78b2e6ee424 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
+ [[ attestation verify == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ printf 'SUCCESS: gh attestation verify %s with requested predicate, signer and source pins\n' ts-x86_64-unknown-linux-gnu
SUCCESS: gh attestation verify ts-x86_64-unknown-linux-gnu with requested predicate, signer and source pins
+ gh attestation verify ts-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --bundle ts-x86_64-unknown-linux-gnu.sbom.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.5 --source-digest 937214a632f9387601dba94f996de78b2e6ee424 --signer-digest 937214a632f9387601dba94f996de78b2e6ee424 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.5 --format json
+ command gh attestation verify ts-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --bundle ts-x86_64-unknown-linux-gnu.sbom.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.5 --source-digest 937214a632f9387601dba94f996de78b2e6ee424 --signer-digest 937214a632f9387601dba94f996de78b2e6ee424 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.5 --format json
+ [[ attestation verify == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ printf 'SUCCESS: gh attestation verify %s with requested predicate, signer and source pins\n' ts-x86_64-unknown-linux-gnu
SUCCESS: gh attestation verify ts-x86_64-unknown-linux-gnu with requested predicate, signer and source pins
+ [[ sbom == sbom ]]
+ jq -e --slurpfile document ts-x86_64-unknown-linux-gnu.spdx.json 'length == 1 and .[0].verificationResult.statement.predicate == $document[0]' ts-x86_64-unknown-linux-gnu.offline-sbom-verification.json
true
+ for asset in "${ASSETS[@]}"
+ for kind in provenance sbom
+ predicate=https://slsa.dev/provenance/v1
+ [[ provenance == sbom ]]
+ checks=(--repo "$REPO" --bundle "$asset.$kind.sigstore.json" --custom-trusted-root trusted_root.jsonl --source-ref "refs/tags/$TAG" --source-digest "$COMMIT" --signer-digest "$COMMIT" --deny-self-hosted-runners --predicate-type "$predicate")
+ gh attestation verify ts-aarch64-apple-darwin --repo prk-Jr/trusted-server --bundle ts-aarch64-apple-darwin.provenance.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.5 --source-digest 937214a632f9387601dba94f996de78b2e6ee424 --signer-digest 937214a632f9387601dba94f996de78b2e6ee424 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
+ command gh attestation verify ts-aarch64-apple-darwin --repo prk-Jr/trusted-server --bundle ts-aarch64-apple-darwin.provenance.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.5 --source-digest 937214a632f9387601dba94f996de78b2e6ee424 --signer-digest 937214a632f9387601dba94f996de78b2e6ee424 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
+ [[ attestation verify == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ printf 'SUCCESS: gh attestation verify %s with requested predicate, signer and source pins\n' ts-aarch64-apple-darwin
SUCCESS: gh attestation verify ts-aarch64-apple-darwin with requested predicate, signer and source pins
+ gh attestation verify ts-aarch64-apple-darwin --repo prk-Jr/trusted-server --bundle ts-aarch64-apple-darwin.provenance.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.5 --source-digest 937214a632f9387601dba94f996de78b2e6ee424 --signer-digest 937214a632f9387601dba94f996de78b2e6ee424 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.5 --format json
+ command gh attestation verify ts-aarch64-apple-darwin --repo prk-Jr/trusted-server --bundle ts-aarch64-apple-darwin.provenance.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.5 --source-digest 937214a632f9387601dba94f996de78b2e6ee424 --signer-digest 937214a632f9387601dba94f996de78b2e6ee424 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.5 --format json
+ [[ attestation verify == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ printf 'SUCCESS: gh attestation verify %s with requested predicate, signer and source pins\n' ts-aarch64-apple-darwin
SUCCESS: gh attestation verify ts-aarch64-apple-darwin with requested predicate, signer and source pins
+ [[ provenance == sbom ]]
+ for kind in provenance sbom
+ predicate=https://slsa.dev/provenance/v1
+ [[ sbom == sbom ]]
+ predicate=https://spdx.dev/Document/v2.3
+ checks=(--repo "$REPO" --bundle "$asset.$kind.sigstore.json" --custom-trusted-root trusted_root.jsonl --source-ref "refs/tags/$TAG" --source-digest "$COMMIT" --signer-digest "$COMMIT" --deny-self-hosted-runners --predicate-type "$predicate")
+ gh attestation verify ts-aarch64-apple-darwin --repo prk-Jr/trusted-server --bundle ts-aarch64-apple-darwin.sbom.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.5 --source-digest 937214a632f9387601dba94f996de78b2e6ee424 --signer-digest 937214a632f9387601dba94f996de78b2e6ee424 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
+ command gh attestation verify ts-aarch64-apple-darwin --repo prk-Jr/trusted-server --bundle ts-aarch64-apple-darwin.sbom.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.5 --source-digest 937214a632f9387601dba94f996de78b2e6ee424 --signer-digest 937214a632f9387601dba94f996de78b2e6ee424 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
+ [[ attestation verify == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ printf 'SUCCESS: gh attestation verify %s with requested predicate, signer and source pins\n' ts-aarch64-apple-darwin
SUCCESS: gh attestation verify ts-aarch64-apple-darwin with requested predicate, signer and source pins
+ gh attestation verify ts-aarch64-apple-darwin --repo prk-Jr/trusted-server --bundle ts-aarch64-apple-darwin.sbom.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.5 --source-digest 937214a632f9387601dba94f996de78b2e6ee424 --signer-digest 937214a632f9387601dba94f996de78b2e6ee424 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.5 --format json
+ command gh attestation verify ts-aarch64-apple-darwin --repo prk-Jr/trusted-server --bundle ts-aarch64-apple-darwin.sbom.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.5 --source-digest 937214a632f9387601dba94f996de78b2e6ee424 --signer-digest 937214a632f9387601dba94f996de78b2e6ee424 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.5 --format json
+ [[ attestation verify == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ printf 'SUCCESS: gh attestation verify %s with requested predicate, signer and source pins\n' ts-aarch64-apple-darwin
SUCCESS: gh attestation verify ts-aarch64-apple-darwin with requested predicate, signer and source pins
+ [[ sbom == sbom ]]
+ jq -e --slurpfile document ts-aarch64-apple-darwin.spdx.json 'length == 1 and .[0].verificationResult.statement.predicate == $document[0]' ts-aarch64-apple-darwin.offline-sbom-verification.json
true
+ for asset in "${ASSETS[@]}"
+ for kind in provenance sbom
+ predicate=https://slsa.dev/provenance/v1
+ [[ provenance == sbom ]]
+ checks=(--repo "$REPO" --bundle "$asset.$kind.sigstore.json" --custom-trusted-root trusted_root.jsonl --source-ref "refs/tags/$TAG" --source-digest "$COMMIT" --signer-digest "$COMMIT" --deny-self-hosted-runners --predicate-type "$predicate")
+ gh attestation verify ts-x86_64-apple-darwin --repo prk-Jr/trusted-server --bundle ts-x86_64-apple-darwin.provenance.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.5 --source-digest 937214a632f9387601dba94f996de78b2e6ee424 --signer-digest 937214a632f9387601dba94f996de78b2e6ee424 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
+ command gh attestation verify ts-x86_64-apple-darwin --repo prk-Jr/trusted-server --bundle ts-x86_64-apple-darwin.provenance.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.5 --source-digest 937214a632f9387601dba94f996de78b2e6ee424 --signer-digest 937214a632f9387601dba94f996de78b2e6ee424 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
+ [[ attestation verify == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ printf 'SUCCESS: gh attestation verify %s with requested predicate, signer and source pins\n' ts-x86_64-apple-darwin
SUCCESS: gh attestation verify ts-x86_64-apple-darwin with requested predicate, signer and source pins
+ gh attestation verify ts-x86_64-apple-darwin --repo prk-Jr/trusted-server --bundle ts-x86_64-apple-darwin.provenance.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.5 --source-digest 937214a632f9387601dba94f996de78b2e6ee424 --signer-digest 937214a632f9387601dba94f996de78b2e6ee424 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.5 --format json
+ command gh attestation verify ts-x86_64-apple-darwin --repo prk-Jr/trusted-server --bundle ts-x86_64-apple-darwin.provenance.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.5 --source-digest 937214a632f9387601dba94f996de78b2e6ee424 --signer-digest 937214a632f9387601dba94f996de78b2e6ee424 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.5 --format json
+ [[ attestation verify == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ printf 'SUCCESS: gh attestation verify %s with requested predicate, signer and source pins\n' ts-x86_64-apple-darwin
SUCCESS: gh attestation verify ts-x86_64-apple-darwin with requested predicate, signer and source pins
+ [[ provenance == sbom ]]
+ for kind in provenance sbom
+ predicate=https://slsa.dev/provenance/v1
+ [[ sbom == sbom ]]
+ predicate=https://spdx.dev/Document/v2.3
+ checks=(--repo "$REPO" --bundle "$asset.$kind.sigstore.json" --custom-trusted-root trusted_root.jsonl --source-ref "refs/tags/$TAG" --source-digest "$COMMIT" --signer-digest "$COMMIT" --deny-self-hosted-runners --predicate-type "$predicate")
+ gh attestation verify ts-x86_64-apple-darwin --repo prk-Jr/trusted-server --bundle ts-x86_64-apple-darwin.sbom.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.5 --source-digest 937214a632f9387601dba94f996de78b2e6ee424 --signer-digest 937214a632f9387601dba94f996de78b2e6ee424 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
+ command gh attestation verify ts-x86_64-apple-darwin --repo prk-Jr/trusted-server --bundle ts-x86_64-apple-darwin.sbom.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.5 --source-digest 937214a632f9387601dba94f996de78b2e6ee424 --signer-digest 937214a632f9387601dba94f996de78b2e6ee424 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
+ [[ attestation verify == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ printf 'SUCCESS: gh attestation verify %s with requested predicate, signer and source pins\n' ts-x86_64-apple-darwin
SUCCESS: gh attestation verify ts-x86_64-apple-darwin with requested predicate, signer and source pins
+ gh attestation verify ts-x86_64-apple-darwin --repo prk-Jr/trusted-server --bundle ts-x86_64-apple-darwin.sbom.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.5 --source-digest 937214a632f9387601dba94f996de78b2e6ee424 --signer-digest 937214a632f9387601dba94f996de78b2e6ee424 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.5 --format json
+ command gh attestation verify ts-x86_64-apple-darwin --repo prk-Jr/trusted-server --bundle ts-x86_64-apple-darwin.sbom.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.5 --source-digest 937214a632f9387601dba94f996de78b2e6ee424 --signer-digest 937214a632f9387601dba94f996de78b2e6ee424 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.5 --format json
+ [[ attestation verify == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ printf 'SUCCESS: gh attestation verify %s with requested predicate, signer and source pins\n' ts-x86_64-apple-darwin
SUCCESS: gh attestation verify ts-x86_64-apple-darwin with requested predicate, signer and source pins
+ [[ sbom == sbom ]]
+ jq -e --slurpfile document ts-x86_64-apple-darwin.spdx.json 'length == 1 and .[0].verificationResult.statement.predicate == $document[0]' ts-x86_64-apple-darwin.offline-sbom-verification.json
true
+ for asset in "${ASSETS[@]}"
+ for kind in provenance sbom
+ predicate=https://slsa.dev/provenance/v1
+ [[ provenance == sbom ]]
+ checks=(--repo "$REPO" --bundle "$asset.$kind.sigstore.json" --custom-trusted-root trusted_root.jsonl --source-ref "refs/tags/$TAG" --source-digest "$COMMIT" --signer-digest "$COMMIT" --deny-self-hosted-runners --predicate-type "$predicate")
+ gh attestation verify trusted-server-axum-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --bundle trusted-server-axum-x86_64-unknown-linux-gnu.provenance.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.5 --source-digest 937214a632f9387601dba94f996de78b2e6ee424 --signer-digest 937214a632f9387601dba94f996de78b2e6ee424 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
+ command gh attestation verify trusted-server-axum-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --bundle trusted-server-axum-x86_64-unknown-linux-gnu.provenance.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.5 --source-digest 937214a632f9387601dba94f996de78b2e6ee424 --signer-digest 937214a632f9387601dba94f996de78b2e6ee424 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
+ [[ attestation verify == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ printf 'SUCCESS: gh attestation verify %s with requested predicate, signer and source pins\n' trusted-server-axum-x86_64-unknown-linux-gnu
SUCCESS: gh attestation verify trusted-server-axum-x86_64-unknown-linux-gnu with requested predicate, signer and source pins
+ gh attestation verify trusted-server-axum-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --bundle trusted-server-axum-x86_64-unknown-linux-gnu.provenance.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.5 --source-digest 937214a632f9387601dba94f996de78b2e6ee424 --signer-digest 937214a632f9387601dba94f996de78b2e6ee424 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.5 --format json
+ command gh attestation verify trusted-server-axum-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --bundle trusted-server-axum-x86_64-unknown-linux-gnu.provenance.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.5 --source-digest 937214a632f9387601dba94f996de78b2e6ee424 --signer-digest 937214a632f9387601dba94f996de78b2e6ee424 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.5 --format json
+ [[ attestation verify == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ printf 'SUCCESS: gh attestation verify %s with requested predicate, signer and source pins\n' trusted-server-axum-x86_64-unknown-linux-gnu
SUCCESS: gh attestation verify trusted-server-axum-x86_64-unknown-linux-gnu with requested predicate, signer and source pins
+ [[ provenance == sbom ]]
+ for kind in provenance sbom
+ predicate=https://slsa.dev/provenance/v1
+ [[ sbom == sbom ]]
+ predicate=https://spdx.dev/Document/v2.3
+ checks=(--repo "$REPO" --bundle "$asset.$kind.sigstore.json" --custom-trusted-root trusted_root.jsonl --source-ref "refs/tags/$TAG" --source-digest "$COMMIT" --signer-digest "$COMMIT" --deny-self-hosted-runners --predicate-type "$predicate")
+ gh attestation verify trusted-server-axum-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --bundle trusted-server-axum-x86_64-unknown-linux-gnu.sbom.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.5 --source-digest 937214a632f9387601dba94f996de78b2e6ee424 --signer-digest 937214a632f9387601dba94f996de78b2e6ee424 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
+ command gh attestation verify trusted-server-axum-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --bundle trusted-server-axum-x86_64-unknown-linux-gnu.sbom.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.5 --source-digest 937214a632f9387601dba94f996de78b2e6ee424 --signer-digest 937214a632f9387601dba94f996de78b2e6ee424 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
+ [[ attestation verify == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ printf 'SUCCESS: gh attestation verify %s with requested predicate, signer and source pins\n' trusted-server-axum-x86_64-unknown-linux-gnu
SUCCESS: gh attestation verify trusted-server-axum-x86_64-unknown-linux-gnu with requested predicate, signer and source pins
+ gh attestation verify trusted-server-axum-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --bundle trusted-server-axum-x86_64-unknown-linux-gnu.sbom.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.5 --source-digest 937214a632f9387601dba94f996de78b2e6ee424 --signer-digest 937214a632f9387601dba94f996de78b2e6ee424 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.5 --format json
+ command gh attestation verify trusted-server-axum-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --bundle trusted-server-axum-x86_64-unknown-linux-gnu.sbom.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.5 --source-digest 937214a632f9387601dba94f996de78b2e6ee424 --signer-digest 937214a632f9387601dba94f996de78b2e6ee424 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.5 --format json
+ [[ attestation verify == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ printf 'SUCCESS: gh attestation verify %s with requested predicate, signer and source pins\n' trusted-server-axum-x86_64-unknown-linux-gnu
SUCCESS: gh attestation verify trusted-server-axum-x86_64-unknown-linux-gnu with requested predicate, signer and source pins
+ [[ sbom == sbom ]]
+ jq -e --slurpfile document trusted-server-axum-x86_64-unknown-linux-gnu.spdx.json 'length == 1 and .[0].verificationResult.statement.predicate == $document[0]' trusted-server-axum-x86_64-unknown-linux-gnu.offline-sbom-verification.json
true
+ for asset in "${ASSETS[@]}"
+ for kind in provenance sbom
+ predicate=https://slsa.dev/provenance/v1
+ [[ provenance == sbom ]]
+ checks=(--repo "$REPO" --bundle "$asset.$kind.sigstore.json" --custom-trusted-root trusted_root.jsonl --source-ref "refs/tags/$TAG" --source-digest "$COMMIT" --signer-digest "$COMMIT" --deny-self-hosted-runners --predicate-type "$predicate")
+ gh attestation verify trusted-server-axum-x86_64-unknown-linux-musl --repo prk-Jr/trusted-server --bundle trusted-server-axum-x86_64-unknown-linux-musl.provenance.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.5 --source-digest 937214a632f9387601dba94f996de78b2e6ee424 --signer-digest 937214a632f9387601dba94f996de78b2e6ee424 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
+ command gh attestation verify trusted-server-axum-x86_64-unknown-linux-musl --repo prk-Jr/trusted-server --bundle trusted-server-axum-x86_64-unknown-linux-musl.provenance.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.5 --source-digest 937214a632f9387601dba94f996de78b2e6ee424 --signer-digest 937214a632f9387601dba94f996de78b2e6ee424 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
+ [[ attestation verify == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ printf 'SUCCESS: gh attestation verify %s with requested predicate, signer and source pins\n' trusted-server-axum-x86_64-unknown-linux-musl
SUCCESS: gh attestation verify trusted-server-axum-x86_64-unknown-linux-musl with requested predicate, signer and source pins
+ gh attestation verify trusted-server-axum-x86_64-unknown-linux-musl --repo prk-Jr/trusted-server --bundle trusted-server-axum-x86_64-unknown-linux-musl.provenance.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.5 --source-digest 937214a632f9387601dba94f996de78b2e6ee424 --signer-digest 937214a632f9387601dba94f996de78b2e6ee424 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.5 --format json
+ command gh attestation verify trusted-server-axum-x86_64-unknown-linux-musl --repo prk-Jr/trusted-server --bundle trusted-server-axum-x86_64-unknown-linux-musl.provenance.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.5 --source-digest 937214a632f9387601dba94f996de78b2e6ee424 --signer-digest 937214a632f9387601dba94f996de78b2e6ee424 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.5 --format json
+ [[ attestation verify == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ printf 'SUCCESS: gh attestation verify %s with requested predicate, signer and source pins\n' trusted-server-axum-x86_64-unknown-linux-musl
SUCCESS: gh attestation verify trusted-server-axum-x86_64-unknown-linux-musl with requested predicate, signer and source pins
+ [[ provenance == sbom ]]
+ for kind in provenance sbom
+ predicate=https://slsa.dev/provenance/v1
+ [[ sbom == sbom ]]
+ predicate=https://spdx.dev/Document/v2.3
+ checks=(--repo "$REPO" --bundle "$asset.$kind.sigstore.json" --custom-trusted-root trusted_root.jsonl --source-ref "refs/tags/$TAG" --source-digest "$COMMIT" --signer-digest "$COMMIT" --deny-self-hosted-runners --predicate-type "$predicate")
+ gh attestation verify trusted-server-axum-x86_64-unknown-linux-musl --repo prk-Jr/trusted-server --bundle trusted-server-axum-x86_64-unknown-linux-musl.sbom.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.5 --source-digest 937214a632f9387601dba94f996de78b2e6ee424 --signer-digest 937214a632f9387601dba94f996de78b2e6ee424 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
+ command gh attestation verify trusted-server-axum-x86_64-unknown-linux-musl --repo prk-Jr/trusted-server --bundle trusted-server-axum-x86_64-unknown-linux-musl.sbom.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.5 --source-digest 937214a632f9387601dba94f996de78b2e6ee424 --signer-digest 937214a632f9387601dba94f996de78b2e6ee424 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
+ [[ attestation verify == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ printf 'SUCCESS: gh attestation verify %s with requested predicate, signer and source pins\n' trusted-server-axum-x86_64-unknown-linux-musl
SUCCESS: gh attestation verify trusted-server-axum-x86_64-unknown-linux-musl with requested predicate, signer and source pins
+ gh attestation verify trusted-server-axum-x86_64-unknown-linux-musl --repo prk-Jr/trusted-server --bundle trusted-server-axum-x86_64-unknown-linux-musl.sbom.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.5 --source-digest 937214a632f9387601dba94f996de78b2e6ee424 --signer-digest 937214a632f9387601dba94f996de78b2e6ee424 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.5 --format json
+ command gh attestation verify trusted-server-axum-x86_64-unknown-linux-musl --repo prk-Jr/trusted-server --bundle trusted-server-axum-x86_64-unknown-linux-musl.sbom.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.5 --source-digest 937214a632f9387601dba94f996de78b2e6ee424 --signer-digest 937214a632f9387601dba94f996de78b2e6ee424 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.5 --format json
+ [[ attestation verify == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ printf 'SUCCESS: gh attestation verify %s with requested predicate, signer and source pins\n' trusted-server-axum-x86_64-unknown-linux-musl
SUCCESS: gh attestation verify trusted-server-axum-x86_64-unknown-linux-musl with requested predicate, signer and source pins
+ [[ sbom == sbom ]]
+ jq -e --slurpfile document trusted-server-axum-x86_64-unknown-linux-musl.spdx.json 'length == 1 and .[0].verificationResult.statement.predicate == $document[0]' trusted-server-axum-x86_64-unknown-linux-musl.offline-sbom-verification.json
true
+ for asset in "${ASSETS[@]}"
+ for kind in provenance sbom
+ predicate=https://slsa.dev/provenance/v1
+ [[ provenance == sbom ]]
+ checks=(--repo "$REPO" --bundle "$asset.$kind.sigstore.json" --custom-trusted-root trusted_root.jsonl --source-ref "refs/tags/$TAG" --source-digest "$COMMIT" --signer-digest "$COMMIT" --deny-self-hosted-runners --predicate-type "$predicate")
+ gh attestation verify trusted-server-axum-aarch64-unknown-linux-gnu --repo prk-Jr/trusted-server --bundle trusted-server-axum-aarch64-unknown-linux-gnu.provenance.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.5 --source-digest 937214a632f9387601dba94f996de78b2e6ee424 --signer-digest 937214a632f9387601dba94f996de78b2e6ee424 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
+ command gh attestation verify trusted-server-axum-aarch64-unknown-linux-gnu --repo prk-Jr/trusted-server --bundle trusted-server-axum-aarch64-unknown-linux-gnu.provenance.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.5 --source-digest 937214a632f9387601dba94f996de78b2e6ee424 --signer-digest 937214a632f9387601dba94f996de78b2e6ee424 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
+ [[ attestation verify == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ printf 'SUCCESS: gh attestation verify %s with requested predicate, signer and source pins\n' trusted-server-axum-aarch64-unknown-linux-gnu
SUCCESS: gh attestation verify trusted-server-axum-aarch64-unknown-linux-gnu with requested predicate, signer and source pins
+ gh attestation verify trusted-server-axum-aarch64-unknown-linux-gnu --repo prk-Jr/trusted-server --bundle trusted-server-axum-aarch64-unknown-linux-gnu.provenance.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.5 --source-digest 937214a632f9387601dba94f996de78b2e6ee424 --signer-digest 937214a632f9387601dba94f996de78b2e6ee424 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.5 --format json
+ command gh attestation verify trusted-server-axum-aarch64-unknown-linux-gnu --repo prk-Jr/trusted-server --bundle trusted-server-axum-aarch64-unknown-linux-gnu.provenance.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.5 --source-digest 937214a632f9387601dba94f996de78b2e6ee424 --signer-digest 937214a632f9387601dba94f996de78b2e6ee424 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.5 --format json
+ [[ attestation verify == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ printf 'SUCCESS: gh attestation verify %s with requested predicate, signer and source pins\n' trusted-server-axum-aarch64-unknown-linux-gnu
SUCCESS: gh attestation verify trusted-server-axum-aarch64-unknown-linux-gnu with requested predicate, signer and source pins
+ [[ provenance == sbom ]]
+ for kind in provenance sbom
+ predicate=https://slsa.dev/provenance/v1
+ [[ sbom == sbom ]]
+ predicate=https://spdx.dev/Document/v2.3
+ checks=(--repo "$REPO" --bundle "$asset.$kind.sigstore.json" --custom-trusted-root trusted_root.jsonl --source-ref "refs/tags/$TAG" --source-digest "$COMMIT" --signer-digest "$COMMIT" --deny-self-hosted-runners --predicate-type "$predicate")
+ gh attestation verify trusted-server-axum-aarch64-unknown-linux-gnu --repo prk-Jr/trusted-server --bundle trusted-server-axum-aarch64-unknown-linux-gnu.sbom.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.5 --source-digest 937214a632f9387601dba94f996de78b2e6ee424 --signer-digest 937214a632f9387601dba94f996de78b2e6ee424 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
+ command gh attestation verify trusted-server-axum-aarch64-unknown-linux-gnu --repo prk-Jr/trusted-server --bundle trusted-server-axum-aarch64-unknown-linux-gnu.sbom.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.5 --source-digest 937214a632f9387601dba94f996de78b2e6ee424 --signer-digest 937214a632f9387601dba94f996de78b2e6ee424 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
+ [[ attestation verify == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ printf 'SUCCESS: gh attestation verify %s with requested predicate, signer and source pins\n' trusted-server-axum-aarch64-unknown-linux-gnu
SUCCESS: gh attestation verify trusted-server-axum-aarch64-unknown-linux-gnu with requested predicate, signer and source pins
+ gh attestation verify trusted-server-axum-aarch64-unknown-linux-gnu --repo prk-Jr/trusted-server --bundle trusted-server-axum-aarch64-unknown-linux-gnu.sbom.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.5 --source-digest 937214a632f9387601dba94f996de78b2e6ee424 --signer-digest 937214a632f9387601dba94f996de78b2e6ee424 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.5 --format json
+ command gh attestation verify trusted-server-axum-aarch64-unknown-linux-gnu --repo prk-Jr/trusted-server --bundle trusted-server-axum-aarch64-unknown-linux-gnu.sbom.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.5 --source-digest 937214a632f9387601dba94f996de78b2e6ee424 --signer-digest 937214a632f9387601dba94f996de78b2e6ee424 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.5 --format json
+ [[ attestation verify == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ printf 'SUCCESS: gh attestation verify %s with requested predicate, signer and source pins\n' trusted-server-axum-aarch64-unknown-linux-gnu
SUCCESS: gh attestation verify trusted-server-axum-aarch64-unknown-linux-gnu with requested predicate, signer and source pins
+ [[ sbom == sbom ]]
+ jq -e --slurpfile document trusted-server-axum-aarch64-unknown-linux-gnu.spdx.json 'length == 1 and .[0].verificationResult.statement.predicate == $document[0]' trusted-server-axum-aarch64-unknown-linux-gnu.offline-sbom-verification.json
true
+ printf '%s\n' 'SUCCESS: all seven binaries verified offline for provenance and SPDX, both signer identities, exact source pins, and SPDX predicate equality.'
SUCCESS: all seven binaries verified offline for provenance and SPDX, both signer identities, exact source pins, and SPDX predicate equality.

@prk-Jr

prk-Jr commented Oct 23, 2026

Copy link
Copy Markdown
Collaborator Author

Rehearsal v0.0.0-rehearsal.5 passed at exact implementation SHA 937214a632f9387601dba94f996de78b2e6ee424.

Build/sign/publication run passed all seven builds/signing jobs and immutable publication. Published release: ID 421431085, draft=false, immutable=true, exactly 29 nonempty assets. The 28 checksum entries exclude SHA256SUMS itself. Local directory paths are normalized below; commands, flags, identities, digests and results are unchanged.

Verified release wasm and host CLI were executed locally with pinned Viceroy 0.21.0, fictional loopback configuration and a local Node origin. A real page returned HTTP200, origin marker, injected JS and the exact full source SHA in x-ts-version. No Fastly service was contacted or deployed. GNU startup smokes cover Debian12/Ubuntu22.04/UBI9; ARM uses native Debian12; static musl uses pinned Alpine and a scratch-like rootfs with read-only runtime CA data. These are startup checks, not complete runtime/load qualification.

set -euxo pipefail
REPO_ROOT=<source-checkout>
EVIDENCE=<evidence-directory>
WORK="$EVIDENCE/viceroy-smoke"
TS="$EVIDENCE/ts-aarch64-apple-darwin"
WASM="$EVIDENCE/trusted-server-fastly.wasm"
VICEROY=<pinned-runtime-tools>/viceroy
mkdir "$WORK"
for port in 18888 17676; do
  if lsof -nP -iTCP:"$port" -sTCP:LISTEN; then exit 1; fi
done
cp "$REPO_ROOT/edgezero.toml" "$REPO_ROOT/fastly.toml" "$WORK/"
cp "$REPO_ROOT/trusted-server.example.toml" "$WORK/app.toml"
ln -s "$REPO_ROOT/crates" "$WORK/crates"
node - "$WORK" <<'JS'
const fs=require('node:fs');const root=process.argv[2];
const path=`${root}/app.toml`;let text=fs.readFileSync(path,'utf8');text=text.replace('domain = "example.com"','domain = "127.0.0.1"').replace('cookie_domain = ".example.com"','cookie_domain = "127.0.0.1"');text=text.replace('origin_url = "https://origin.example.com"','origin_url = "http://127.0.0.1:18888"');if(!text.includes('origin_url = "http://127.0.0.1:18888"'))throw Error('Origin fixture replacement failed');fs.writeFileSync(path,text);
const fastly=`${root}/fastly.toml`;text=fs.readFileSync(fastly,'utf8').replace('env = "FASTLY_KEY"','data = "fictional-local-api-key"');fs.writeFileSync(fastly,text);
JS
chmod u+x "$TS"
"$TS" --version
(cd "$WORK" && "$TS" config push --adapter fastly --local \
 --manifest "$WORK/edgezero.toml" --app-config "$WORK/app.toml" --no-diff --yes)
"$VICEROY" --version
cat > "$WORK/origin.mjs" <<'JS'
import http from 'node:http';
http.createServer((req,res)=>{res.writeHead(200,{'content-type':'text/html'});res.end('<!doctype html><html><head><title>Local release proof</title></head><body>phase1-verified-origin-marker</body></html>');}).listen(18888,'127.0.0.1');
JS
node "$WORK/origin.mjs" > "$WORK/origin.log" 2>&1 &
origin_pid=$!
cleanup() {
  if [[ -n "${viceroy_pid:-}" ]]; then kill "$viceroy_pid" 2>/dev/null || true; wait "$viceroy_pid" 2>/dev/null || true; fi
  kill "$origin_pid" 2>/dev/null || true
  wait "$origin_pid" 2>/dev/null || true
}
trap cleanup EXIT
"$VICEROY" serve -C "$WORK/fastly.toml" --addr 127.0.0.1:17676 "$WASM" > "$WORK/viceroy.log" 2>&1 &
viceroy_pid=$!
curl --fail --silent --show-error --retry 20 --retry-connrefused --retry-delay 1 \
 --retry-max-time 45 --max-time 30 -H 'Host: 127.0.0.1' \
 -D "$WORK/headers.txt" -o "$WORK/body.html" http://127.0.0.1:17676/
cat "$WORK/headers.txt"
node - "$WORK" <<'JS'
const fs=require('node:fs');const assert=require('node:assert/strict');const crypto=require('node:crypto');const work=process.argv[2];const headers=fs.readFileSync(`${work}/headers.txt`,'utf8');const body=fs.readFileSync(`${work}/body.html`);assert.match(headers,/^HTTP\/1\.1 200/m);assert.match(headers,/^x-ts-version: 937214a632f9387601dba94f996de78b2e6ee424\r?$/im);assert.ok(body.includes('phase1-verified-origin-marker'));assert.ok(body.includes('/static/tsjs=tsjs-unified.min.js'));console.log(`SUCCESS: configured Viceroy page returned HTTP200, origin marker, injected JS and exact release source header; ${body.length} bytes, sha256=${crypto.createHash('sha256').update(body).digest('hex')}`);
JS
+ REPO_ROOT=<source-checkout>
+ EVIDENCE=<evidence-directory>
+ WORK=<evidence-directory>/viceroy-smoke
+ TS=<evidence-directory>/ts-aarch64-apple-darwin
+ WASM=<evidence-directory>/trusted-server-fastly.wasm
+ VICEROY=<pinned-runtime-tools>/viceroy
+ mkdir <evidence-directory>/viceroy-smoke
+ for port in 18888 17676
+ lsof -nP -iTCP:18888 -sTCP:LISTEN
+ for port in 18888 17676
+ lsof -nP -iTCP:17676 -sTCP:LISTEN
+ cp <source-checkout>/edgezero.toml <source-checkout>/fastly.toml <evidence-directory>/viceroy-smoke/
+ cp <source-checkout>/trusted-server.example.toml <evidence-directory>/viceroy-smoke/app.toml
+ ln -s <source-checkout>/crates <evidence-directory>/viceroy-smoke/crates
+ node - <evidence-directory>/viceroy-smoke
+ chmod u+x <evidence-directory>/ts-aarch64-apple-darwin
+ <evidence-directory>/ts-aarch64-apple-darwin --version
ts 0.1.0
+ cd <evidence-directory>/viceroy-smoke
+ <evidence-directory>/ts-aarch64-apple-darwin config push --adapter fastly --local --manifest <evidence-directory>/viceroy-smoke/edgezero.toml --app-config <evidence-directory>/viceroy-smoke/app.toml --no-diff --yes
wrote 1 physical entries (1 logical) to `[local_server.config_stores.trusted_server_config.contents]` in <evidence-directory>/viceroy-smoke/fastly.toml (logical id `trusted_server_config`); restart `fastly compute serve` to pick up changes
pushed-key=trusted_server_config
pushed-store=trusted_server_config
+ <pinned-runtime-tools>/viceroy --version
viceroy 0.21.0
+ cat
+ origin_pid=10234
+ trap cleanup EXIT
+ node <evidence-directory>/viceroy-smoke/origin.mjs
+ viceroy_pid=10235
+ curl --fail --silent --show-error --retry 20 --retry-connrefused --retry-delay 1 --retry-max-time 45 --max-time 30 -H 'Host: 127.0.0.1' -D <evidence-directory>/viceroy-smoke/headers.txt -o <evidence-directory>/viceroy-smoke/body.html http://127.0.0.1:17676/
+ <pinned-runtime-tools>/viceroy serve -C <evidence-directory>/viceroy-smoke/fastly.toml --addr 127.0.0.1:17676 <evidence-directory>/trusted-server-fastly.wasm
curl: (7) Failed to connect to 127.0.0.1 port 17676 after 0 ms: Couldn't connect to server
curl: (7) Failed to connect to 127.0.0.1 port 17676 after 0 ms: Couldn't connect to server
+ cat <evidence-directory>/viceroy-smoke/headers.txt
HTTP/1.1 200 OK
content-type: text/html
date: Fri, 23 Oct 2026 04:21:06 GMT
connection: keep-alive
keep-alive: timeout=5
x-ts-fastly-version: 0
x-geo-city: San Francisco
x-geo-country: US
x-geo-continent: NorthAmerica
x-geo-coordinates: 37.77869,-122.39557
x-geo-region: CA
x-geo-info-available: true
x-ts-version: 937214a632f9387601dba94f996de78b2e6ee424
transfer-encoding: chunked

+ node - <evidence-directory>/viceroy-smoke
SUCCESS: configured Viceroy page returned HTTP200, origin marker, injected JS and exact release source header; 262 bytes, sha256=faafc52e92b3981f7a899b5bb3f6d85cebcb045618bce3727bbd1be3f1b869e2
+ cleanup
+ [[ -n 10235 ]]
+ kill 10235
+ wait 10235
+ true
+ kill 10234
+ wait 10234
+ true
Rehearsal .5 build/startup output at 937214a632f9387601dba94f996de78b2e6ee424.
Extracts retain every final-byte/version/health SUCCESS and image identity line; full job logs are linked. Axum receives a fictional runtime envelope/secrets and a read-only system CA bundle; no operator values enter build inputs.

trusted-server-fastly.wasm
https://github.com/prk-Jr/trusted-server/actions/runs/39894486002/job/120221655801
2026-10-23T03:23:39.4388773Z SUCCESS: final-byte checks wasm32-wasip1 

ts-x86_64-unknown-linux-gnu
https://github.com/prk-Jr/trusted-server/actions/runs/39894486002/job/120221655819
2026-10-23T03:21:32.9161053Z GNU builder: registry.access.redhat.com/ubi9/ubi:9.6@sha256:dec374e05cc13ebbc0975c9f521f3db6942d27f8ccdf06b180160490eef8bdbc sha256:3bc5d61e715a6a4591cd1736ef9af2f3cec3e3006545b48ac3fc01f82dfbe202
2026-10-23T03:21:33.1134831Z ldd (GNU libc) 2.34
2026-10-23T03:28:36.0807215Z SUCCESS: final-byte checks x86_64-unknown-linux-gnu GLIBC_2.34 GLIBC_2.2.5 GLIBC_2.14 GLIBC_2.3 GLIBC_2.29 GLIBC_2.3.4 GLIBC_2.33 GLIBC_2.28 GLIBC_2.7 GLIBC_2.16 GLIBC_2.10 GLIBC_2.3.2 GLIBC_2.9 GLIBC_2.30 GLIBC_2.4 GLIBC_2.17 GLIBC_2.15 GLIBC_2.32 GLIBC_2.25 GLIBC_2.18 GLIBC_2.5 GLIBC_2.27
2026-10-23T03:28:36.0842547Z SUCCESS: ts 0.1.0
2026-10-23T03:28:37.7940213Z Runtime image: debian:12-slim sha256:8da84df25d28176be84164040cd45e128c6b4c6a80b7d7cbe17fe2b9f198efc2
2026-10-23T03:28:38.6111438Z SUCCESS: ts 0.1.0
2026-10-23T03:28:40.2337502Z Runtime image: ubuntu:22.04 sha256:cee13550f97b8a595506e8e4ca74263ba44924248779a4ba4f942e197652acff
2026-10-23T03:28:40.4147597Z SUCCESS: ts 0.1.0
2026-10-23T03:28:42.3890028Z Runtime image: registry.access.redhat.com/ubi9/ubi-minimal:9.6 sha256:a2c5a85865a585c3bc8b10f6c269358fdf89fe32be4232885166889d85c76421
2026-10-23T03:28:42.5618567Z SUCCESS: ts 0.1.0

ts-aarch64-apple-darwin
https://github.com/prk-Jr/trusted-server/actions/runs/39894486002/job/120221655878
2026-10-23T03:28:41.3891200Z SUCCESS: final-byte checks aarch64-apple-darwin 
2026-10-23T03:28:41.4092670Z SUCCESS: ts 0.1.0

ts-x86_64-apple-darwin
https://github.com/prk-Jr/trusted-server/actions/runs/39894486002/job/120221655820
2026-10-23T03:45:58.2123180Z SUCCESS: final-byte checks x86_64-apple-darwin 
2026-10-23T03:45:58.2307710Z SUCCESS: ts 0.1.0

trusted-server-axum-x86_64-unknown-linux-gnu
https://github.com/prk-Jr/trusted-server/actions/runs/39894486002/job/120221655935
2026-10-23T03:21:44.0810858Z GNU builder: registry.access.redhat.com/ubi9/ubi:9.6@sha256:dec374e05cc13ebbc0975c9f521f3db6942d27f8ccdf06b180160490eef8bdbc sha256:436362b004a1b2e1aad25ecd39169461d46ea5804516c634890ff627b8b03a21
2026-10-23T03:21:44.2780888Z ldd (GNU libc) 2.34
2026-10-23T03:25:42.9566707Z SUCCESS: final-byte checks x86_64-unknown-linux-gnu GLIBC_2.34 GLIBC_2.2.5 GLIBC_2.14 GLIBC_2.3 GLIBC_2.27 GLIBC_2.29 GLIBC_2.7 GLIBC_2.16 GLIBC_2.33 GLIBC_2.3.4 GLIBC_2.10 GLIBC_2.3.2 GLIBC_2.9 GLIBC_2.30 GLIBC_2.17 GLIBC_2.32 GLIBC_2.28 GLIBC_2.25 GLIBC_2.18
2026-10-23T03:25:45.5004618Z Runtime image: debian:12-slim sha256:8da84df25d28176be84164040cd45e128c6b4c6a80b7d7cbe17fe2b9f198efc2
2026-10-23T03:25:45.9554948Z SUCCESS: configured Axum health returned 200 ok: debian:12-slim sha256:8da84df25d28176be84164040cd45e128c6b4c6a80b7d7cbe17fe2b9f198efc2
2026-10-23T03:25:48.4541057Z Runtime image: ubuntu:22.04 sha256:cee13550f97b8a595506e8e4ca74263ba44924248779a4ba4f942e197652acff
2026-10-23T03:25:48.6225796Z SUCCESS: configured Axum health returned 200 ok: ubuntu:22.04 sha256:cee13550f97b8a595506e8e4ca74263ba44924248779a4ba4f942e197652acff
2026-10-23T03:25:51.2992569Z Runtime image: registry.access.redhat.com/ubi9/ubi-minimal:9.6 sha256:a2c5a85865a585c3bc8b10f6c269358fdf89fe32be4232885166889d85c76421
2026-10-23T03:25:51.4595006Z SUCCESS: configured Axum health returned 200 ok: registry.access.redhat.com/ubi9/ubi-minimal:9.6 sha256:a2c5a85865a585c3bc8b10f6c269358fdf89fe32be4232885166889d85c76421

trusted-server-axum-x86_64-unknown-linux-musl
https://github.com/prk-Jr/trusted-server/actions/runs/39894486002/job/120221655764
2026-10-23T03:21:18.2570786Z 13.3.0
2026-10-23T03:23:42.7273213Z SUCCESS: final-byte checks x86_64-unknown-linux-musl 
2026-10-23T03:23:43.6509821Z Runtime image: alpine:3.22.2@sha256:4b7ce07002c69e8f3d704a9c5d6fd3053be500b7f1c69fc0d80990c2ad8dd412 sha256:706db57fb2063f39f69632c5b5c9c439633fda35110e65587c5d85553fd1cc38
2026-10-23T03:23:46.1214767Z SUCCESS: configured Axum health returned 200 ok: alpine:3.22.2@sha256:4b7ce07002c69e8f3d704a9c5d6fd3053be500b7f1c69fc0d80990c2ad8dd412 sha256:706db57fb2063f39f69632c5b5c9c439633fda35110e65587c5d85553fd1cc38
2026-10-23T03:23:46.1958094Z Runtime image: scratch sha256:adc64582cbdfe5d17151d1937d4aac3a35f1d9f1dd71993e977b710d1efc9fb6
2026-10-23T03:23:46.2787583Z SUCCESS: configured Axum health returned 200 ok: scratch sha256:adc64582cbdfe5d17151d1937d4aac3a35f1d9f1dd71993e977b710d1efc9fb6

trusted-server-axum-aarch64-unknown-linux-gnu
https://github.com/prk-Jr/trusted-server/actions/runs/39894486002/job/120221656167
2026-10-23T03:21:29.3448553Z GNU builder: registry.access.redhat.com/ubi9/ubi:9.6@sha256:dec374e05cc13ebbc0975c9f521f3db6942d27f8ccdf06b180160490eef8bdbc sha256:0391b18e549b49d4296a8de7fd651884f26ab6029dc1a297446d0cdae96f738f
2026-10-23T03:21:29.4912420Z ldd (GNU libc) 2.34
2026-10-23T03:24:19.9998959Z SUCCESS: final-byte checks aarch64-unknown-linux-gnu GLIBC_2.17 GLIBC_2.33 GLIBC_2.34 GLIBC_2.29 GLIBC_2.28 GLIBC_2.30 GLIBC_2.27 GLIBC_2.18 GLIBC_2.25 GLIBC_2.32
2026-10-23T03:24:21.6483013Z Runtime image: debian:12-slim sha256:28fe65558df3e10c89e7d685cb86544cdc138f242d12100c5b0981f92aae0853
2026-10-23T03:24:22.4995813Z SUCCESS: configured Axum health returned 200 ok: debian:12-slim sha256:28fe65558df3e10c89e7d685cb86544cdc138f242d12100c5b0981f92aae0853

@prk-Jr

prk-Jr commented Oct 23, 2026

Copy link
Copy Markdown
Collaborator Author

Rehearsal v0.0.0-rehearsal.5 passed at exact implementation SHA 937214a632f9387601dba94f996de78b2e6ee424.

Build/sign/publication run passed all seven builds/signing jobs and immutable publication. Published release: ID 421431085, draft=false, immutable=true, exactly 29 nonempty assets. The 28 checksum entries exclude SHA256SUMS itself. Local directory paths are normalized below; commands, flags, identities, digests and results are unchanged.

All 29 published files were downloaded from this release. Bounded range downloads were assembled and checked against the published SHA-256 metadata; small companions were independently digest-checked. No earlier release or CI artifact substituted for a binary.

gh api repos/prk-Jr/trusted-server/releases/tags/v0.0.0-rehearsal.5 > release-metadata.json
node range-download.mjs
node small-download.mjs
node check-downloads.mjs
import fs from 'node:fs';
import {promisify} from 'node:util';
import {execFile} from 'node:child_process';
import crypto from 'node:crypto';
const run=promisify(execFile);
const release=JSON.parse(fs.readFileSync('release-metadata.json'));
const binaries=release.assets.filter(a=> a.size>=2*1024*1024);
fs.mkdirSync('ranges',{recursive:true});
const tasks=[]; const chunk=2*1024*1024;
for(const a of binaries) for(let offset=0;offset<a.size;offset+=chunk) tasks.push({a,offset,end:Math.min(a.size-1,offset+chunk-1)});
let done=0;
async function worker(){while(tasks.length){const {a,offset,end}=tasks.shift();const out=`ranges/${a.name}.${offset}`; await run('curl',['--fail','--silent','--show-error','--location','--retry','2','--max-time','180','--range',`${offset}-${end}`,'--max-filesize',String(end-offset+1),'--output',out,a.browser_download_url]);if(fs.statSync(out).size!==end-offset+1)throw Error(`Range size mismatch: ${a.name} ${offset}`);done++;if(done%32===0)console.log(`Downloaded ${done} ranges`);}}
await Promise.all(Array.from({length:32},worker));
for(const a of binaries){const dest=fs.openSync(`${a.name}.assembled`,'w');const hash=crypto.createHash('sha256');for(let o=0;o<a.size;o+=chunk){const b=fs.readFileSync(`ranges/${a.name}.${o}`);fs.writeSync(dest,b);hash.update(b);}fs.closeSync(dest);if(`sha256:${hash.digest('hex')}`!==a.digest)throw Error(`Digest mismatch: ${a.name}`);fs.renameSync(`${a.name}.assembled`,a.name);console.log(`SUCCESS: ${a.name}: ${a.size} bytes match ${a.digest}`);}
import fs from 'node:fs';import crypto from 'node:crypto';import {promisify} from 'node:util';import {execFile} from 'node:child_process';
const run=promisify(execFile);const {assets}=JSON.parse(fs.readFileSync('release-metadata.json'));await Promise.all(assets.filter(a=>a.size<2*1024*1024).map(async a=>{const valid=()=>fs.existsSync(a.name)&&`sha256:${crypto.createHash('sha256').update(fs.readFileSync(a.name)).digest('hex')}`===a.digest;if(!valid())await run('curl',['--fail','--silent','--show-error','--location','--max-time','180','--output',a.name,a.browser_download_url]);if(!valid())throw Error(`Bad asset: ${a.name}`);console.log(`SUCCESS: ${a.name} matches published digest`);}));
import fs from'node:fs';import assert from'node:assert/strict';import crypto from'node:crypto';
const release=JSON.parse(fs.readFileSync('release-metadata.json'));const expected=JSON.parse(fs.readFileSync('expected-assets.json'));
assert.equal(release.immutable,true);assert.equal(release.draft,false);assert.deepEqual(release.assets.map(a=>a.name).sort(),expected);assert.equal(expected.length,29);
for(const a of release.assets){assert(fs.lstatSync(a.name).isFile());const bytes=fs.readFileSync(a.name);assert(bytes.length>0);assert.equal(bytes.length,a.size);assert.equal('sha256:'+crypto.createHash('sha256').update(bytes).digest('hex'),a.digest);}
const sums=fs.readFileSync('SHA256SUMS','utf8').trim().split('\n');assert.equal(sums.length,28);assert.deepEqual(sums.map(line=>line.match(/^[a-f0-9]{64}  (.+)$/)[1]).sort(),expected.filter(a=>a!=='SHA256SUMS'));
console.log('SUCCESS: immutable published release contains exactly29 nonempty assets with published digests; SHA256SUMS covers exactly28 companions and binaries, excluding itself.');
Downloaded 32 ranges
Downloaded 64 ranges
Downloaded 96 ranges
Downloaded 128 ranges
Downloaded 160 ranges
Downloaded 192 ranges
Downloaded 224 ranges
Downloaded 256 ranges
Downloaded 288 ranges
Downloaded 320 ranges
Downloaded 352 ranges
Downloaded 384 ranges
Downloaded 416 ranges
SUCCESS: trusted-server-axum-aarch64-unknown-linux-gnu: 136522176 bytes match sha256:f8f7c3cfd7853f545a38e08bf0a396dd201d241bd3c6b0511d99d0f938022079
SUCCESS: trusted-server-axum-x86_64-unknown-linux-gnu: 136384928 bytes match sha256:b85a2cc54c8639d66d79186cf49771161e712762631596cb6f213afa83abd030
SUCCESS: trusted-server-axum-x86_64-unknown-linux-musl: 135732912 bytes match sha256:0216ea9f103a0d79db666ff6351bb29d5391921fa29e971b4d68a76359a40210
SUCCESS: trusted-server-fastly.wasm: 79205388 bytes match sha256:bed94df95e5cb29e8ab3255321bd8bf00aa56ffd60e5de60875323ad433169f0
SUCCESS: ts-aarch64-apple-darwin: 41016160 bytes match sha256:e9c304e55fceb4d0e2f6ac14ac5be9bed368b2628d1a90d6f4539757e129469a
SUCCESS: ts-x86_64-apple-darwin: 43716264 bytes match sha256:5f7ac1d7f7cf879a08ac8a767aa5dc9f9c92994f2188b2613f2b4739e86de3b0
SUCCESS: ts-x86_64-unknown-linux-gnu: 299996528 bytes match sha256:1a5945133d5270855c501176cdc098da00d5439f9ecc33a0c07b3c84bf574944

SUCCESS: trusted-server-axum-aarch64-unknown-linux-gnu.provenance.sigstore.json matches published digest
SUCCESS: SHA256SUMS matches published digest
SUCCESS: trusted-server-axum-x86_64-unknown-linux-musl.provenance.sigstore.json matches published digest
SUCCESS: trusted-server-fastly.wasm.provenance.sigstore.json matches published digest
SUCCESS: trusted-server-axum-x86_64-unknown-linux-gnu.provenance.sigstore.json matches published digest
SUCCESS: ts-aarch64-apple-darwin.provenance.sigstore.json matches published digest
SUCCESS: ts-x86_64-unknown-linux-gnu.provenance.sigstore.json matches published digest
SUCCESS: ts-x86_64-apple-darwin.provenance.sigstore.json matches published digest
SUCCESS: trusted-server-axum-aarch64-unknown-linux-gnu.spdx.json matches published digest
SUCCESS: trusted-server-axum-aarch64-unknown-linux-gnu.sbom.sigstore.json matches published digest
SUCCESS: trusted-server-fastly.wasm.sbom.sigstore.json matches published digest
SUCCESS: trusted-server-axum-x86_64-unknown-linux-gnu.sbom.sigstore.json matches published digest
SUCCESS: trusted-server-axum-x86_64-unknown-linux-gnu.spdx.json matches published digest
SUCCESS: trusted-server-axum-x86_64-unknown-linux-musl.spdx.json matches published digest
SUCCESS: trusted-server-axum-x86_64-unknown-linux-musl.sbom.sigstore.json matches published digest
SUCCESS: ts-x86_64-unknown-linux-gnu.sbom.sigstore.json matches published digest
SUCCESS: trusted-server-fastly.wasm.spdx.json matches published digest
SUCCESS: ts-aarch64-apple-darwin.sbom.sigstore.json matches published digest
SUCCESS: ts-x86_64-unknown-linux-gnu.spdx.json matches published digest
SUCCESS: ts-aarch64-apple-darwin.spdx.json matches published digest
SUCCESS: ts-x86_64-apple-darwin.spdx.json matches published digest
SUCCESS: ts-x86_64-apple-darwin.sbom.sigstore.json matches published digest

SUCCESS: immutable published release contains exactly29 nonempty assets with published digests; SHA256SUMS covers exactly28 companions and binaries, excluding itself.

@prk-Jr

prk-Jr commented Oct 23, 2026

Copy link
Copy Markdown
Collaborator Author

Rehearsal v0.0.0-rehearsal.5 passed at exact implementation SHA 937214a632f9387601dba94f996de78b2e6ee424. The fresh tag is lightweight.

  • Implementation CI: 31 checks passed; signing/publication correctly skipped on the PR.
  • Fork rehearsal: all seven builds, seven signing jobs, immutable publication and post-publish checks passed. No transient read retry was observed.
  • Immutable release, ID 421431085: draft=false, immutable=true, exactly 29 nonempty assets. No upstream tags, releases or settings changed.
  • Independent GitHub CLI 2.102.0 verification passed immutable membership for every asset, 28 checksum entries, provenance + SPDX for each of seven binaries, both exact signer identity forms, source/ref/signer digest pins, self-hosted runners denied, and seven published-SPDX predicate comparisons.
  • Offline attestation verification passed under OS-enforced network denial, including both signer forms and SPDX equality for all seven binaries.
  • Startup/image-ID evidence passed for the GNU baseline, static musl and native CLI targets. Verified release wasm and host CLI served a real configured page in pinned Viceroy 0.21.0: HTTP200, origin marker, injected JS and exact full source header. Runtime CA data is explicitly supplied to Axum smokes.

Full commands and explicit success output:

  1. Online verification: part 1, part 2.
  2. Complete offline verification and network-denial control.
  3. All build/startup outputs, image IDs and local Viceroy proof.
  4. Download commands, complete file digests and checksum coverage.

Any following documentation-only head retains this exact rehearsed implementation SHA. The PR remains draft; no reviewers requested. Maintainer production-release/settings and allowlist review gates remain.

@prk-Jr

prk-Jr commented Oct 23, 2026 •

Copy link
Copy Markdown
Collaborator Author

Rehearsal v0.0.0-rehearsal.9 at 149754d: passed. Fork run. Fresh lightweight tag; exact reviewed head; all seven builds/signing jobs and the publisher passed. The full independent verification also passed.

The publisher found the release attestation available on its first check; no live availability wait was needed. Failure-path tests cover five checks with 2s/5s/10s/20s backoff, the 60s availability deadline, late-success rejection and immediate definitive failures. The release has exactly 29 assets, draft=false, immutable=true, prerelease=true and is not Latest. The documented gh release download command succeeded. All 29 verify-asset checks and 28 SHA256SUMS entries passed. All seven binaries passed provenance and SPDX verification, both signer forms, exact tag/source/signer pins and deny-self-hosted-runners, both with bundles and via online attestation-store lookup without bundles. Networking-denied offline verification passed with an independent binary SHA-256 pin for each asset; every attested SBOM predicate equalled its shipped SPDX document.

Both macOS minimum-OS checks and all CLI package/source/target/variant checks passed. All Axum container smokes proved 0.0.0.0:8080 through a host-published port and exit-1 rejection for both primary and legacy port zero. The publisher re-downloaded all 29 published assets and byte-compared them with the signed checksums and handoff. Pinned Fastly 16.0.0 packed, validated, inspected and byte-compared the verified wasm without deployment. Viceroy returned the expected page/source header and confirmed no Build facts log in default single mode. Full command/output transcripts follow in separate comments. Temporary local paths are redacted.

This supersedes the failed .6 workflow (independent checks passed afterward) and the .7 runner-capacity cancellation. Their tags/releases remain unchanged. Any subsequent review-head update must be docs-only and retain this exact rehearsed implementation SHA. The PR remains draft with no reviewers.

SUCCESS: immutable published release contains exactly29 nonempty assets with published digests; SHA256SUMS covers exactly28 companions and binaries, excluding itself.
Rehearsal .9 build/startup proof at 149754d357901ec874eab6140e92bce3d8613085.
All final-byte, CLI version, macOS minimum-OS, non-loopback Axum health and image identity lines are retained; full job logs are linked.

trusted-server-axum-x86_64-unknown-linux-musl
https://github.com/prk-Jr/trusted-server/actions/runs/39947731545/job/120394453667
build / Build trusted-server-axum-x86_64-unknown-linux-musl	UNKNOWN STEP	2026-10-23T11:45:00.5734022Z SUCCESS: final-byte checks x86_64-unknown-linux-musl 
build / Build trusted-server-axum-x86_64-unknown-linux-musl	UNKNOWN STEP	2026-10-23T11:45:01.0866267Z Runtime image: alpine:3.22.2@sha256:4b7ce07002c69e8f3d704a9c5d6fd3053be500b7f1c69fc0d80990c2ad8dd412 sha256:706db57fb2063f39f69632c5b5c9c439633fda35110e65587c5d85553fd1cc38
build / Build trusted-server-axum-x86_64-unknown-linux-musl	UNKNOWN STEP	2026-10-23T11:45:02.0816962Z SUCCESS: Axum rejects EDGEZERO__ADAPTER__PORT=0; exit 1, ports must be 1–65535: sha256:706db57fb2063f39f69632c5b5c9c439633fda35110e65587c5d85553fd1cc38
build / Build trusted-server-axum-x86_64-unknown-linux-musl	UNKNOWN STEP	2026-10-23T11:45:02.2324529Z SUCCESS: Axum rejects PORT=0; exit 1, ports must be 1–65535: sha256:706db57fb2063f39f69632c5b5c9c439633fda35110e65587c5d85553fd1cc38
build / Build trusted-server-axum-x86_64-unknown-linux-musl	UNKNOWN STEP	2026-10-23T11:45:02.4721728Z SUCCESS: Axum bound to 0.0.0.0:8080; host reached published container port, HTTP 200 ok: alpine:3.22.2@sha256:4b7ce07002c69e8f3d704a9c5d6fd3053be500b7f1c69fc0d80990c2ad8dd412 sha256:706db57fb2063f39f69632c5b5c9c439633fda35110e65587c5d85553fd1cc38
build / Build trusted-server-axum-x86_64-unknown-linux-musl	UNKNOWN STEP	2026-10-23T11:45:02.6246418Z Runtime image: scratch sha256:29096106a2d777c6401cf5de9a7ccdd910cc9c5d44c4ee63b32e77fa0e5e2f14
build / Build trusted-server-axum-x86_64-unknown-linux-musl	UNKNOWN STEP	2026-10-23T11:45:02.7711321Z SUCCESS: Axum rejects EDGEZERO__ADAPTER__PORT=0; exit 1, ports must be 1–65535: sha256:29096106a2d777c6401cf5de9a7ccdd910cc9c5d44c4ee63b32e77fa0e5e2f14
build / Build trusted-server-axum-x86_64-unknown-linux-musl	UNKNOWN STEP	2026-10-23T11:45:02.9099503Z SUCCESS: Axum rejects PORT=0; exit 1, ports must be 1–65535: sha256:29096106a2d777c6401cf5de9a7ccdd910cc9c5d44c4ee63b32e77fa0e5e2f14
build / Build trusted-server-axum-x86_64-unknown-linux-musl	UNKNOWN STEP	2026-10-23T11:45:03.0797104Z SUCCESS: Axum bound to 0.0.0.0:8080; host reached published container port, HTTP 200 ok: scratch sha256:29096106a2d777c6401cf5de9a7ccdd910cc9c5d44c4ee63b32e77fa0e5e2f14

trusted-server-fastly.wasm
https://github.com/prk-Jr/trusted-server/actions/runs/39947731545/job/120394453759
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-23T11:42:35.1251107Z SUCCESS: final-byte checks wasm32-wasip1 

ts-aarch64-apple-darwin
https://github.com/prk-Jr/trusted-server/actions/runs/39947731545/job/120394453814
build / Build ts-aarch64-apple-darwin	UNKNOWN STEP	2026-10-23T11:51:35.7323470Z SUCCESS: Mach-O target and macOS minimum OS 13.0: aarch64-apple-darwin
build / Build ts-aarch64-apple-darwin	UNKNOWN STEP	2026-10-23T11:51:35.7325620Z SUCCESS: final-byte checks aarch64-apple-darwin 
build / Build ts-aarch64-apple-darwin	UNKNOWN STEP	2026-10-23T11:51:35.7457260Z SUCCESS: ts package=0.1.0 source=149754d357901ec874eab6140e92bce3d8613085 target=aarch64-apple-darwin variant=default

trusted-server-axum-x86_64-unknown-linux-gnu
https://github.com/prk-Jr/trusted-server/actions/runs/39947731545/job/120394453835
build / Build trusted-server-axum-x86_64-unknown-linux-gnu	UNKNOWN STEP	2026-10-23T11:41:25.4427614Z GNU builder: registry.access.redhat.com/ubi9/ubi:9.6@sha256:dec374e05cc13ebbc0975c9f521f3db6942d27f8ccdf06b180160490eef8bdbc sha256:a1bffeee16649c24df7779ea1d7b8135341bf47477317b199c98bc9e04e44561
build / Build trusted-server-axum-x86_64-unknown-linux-gnu	UNKNOWN STEP	2026-10-23T11:41:25.5968259Z ldd (GNU libc) 2.34
build / Build trusted-server-axum-x86_64-unknown-linux-gnu	UNKNOWN STEP	2026-10-23T11:43:48.0312050Z SUCCESS: final-byte checks x86_64-unknown-linux-gnu GLIBC_2.34 GLIBC_2.2.5 GLIBC_2.14 GLIBC_2.3 GLIBC_2.27 GLIBC_2.29 GLIBC_2.7 GLIBC_2.16 GLIBC_2.33 GLIBC_2.3.4 GLIBC_2.10 GLIBC_2.3.2 GLIBC_2.9 GLIBC_2.30 GLIBC_2.17 GLIBC_2.32 GLIBC_2.28 GLIBC_2.25 GLIBC_2.18
build / Build trusted-server-axum-x86_64-unknown-linux-gnu	UNKNOWN STEP	2026-10-23T11:43:49.9582729Z Runtime image: debian:12-slim@sha256:7ff6ba31527b9e336162fa061746c366c4b2032f4d2cff2078bea43f78efe3f8 sha256:8da84df25d28176be84164040cd45e128c6b4c6a80b7d7cbe17fe2b9f198efc2
build / Build trusted-server-axum-x86_64-unknown-linux-gnu	UNKNOWN STEP	2026-10-23T11:43:51.0787715Z SUCCESS: Axum rejects EDGEZERO__ADAPTER__PORT=0; exit 1, ports must be 1–65535: sha256:8da84df25d28176be84164040cd45e128c6b4c6a80b7d7cbe17fe2b9f198efc2
build / Build trusted-server-axum-x86_64-unknown-linux-gnu	UNKNOWN STEP	2026-10-23T11:43:51.1698387Z SUCCESS: Axum rejects PORT=0; exit 1, ports must be 1–65535: sha256:8da84df25d28176be84164040cd45e128c6b4c6a80b7d7cbe17fe2b9f198efc2
build / Build trusted-server-axum-x86_64-unknown-linux-gnu	UNKNOWN STEP	2026-10-23T11:43:51.3142818Z SUCCESS: Axum bound to 0.0.0.0:8080; host reached published container port, HTTP 200 ok: debian:12-slim@sha256:7ff6ba31527b9e336162fa061746c366c4b2032f4d2cff2078bea43f78efe3f8 sha256:8da84df25d28176be84164040cd45e128c6b4c6a80b7d7cbe17fe2b9f198efc2
build / Build trusted-server-axum-x86_64-unknown-linux-gnu	UNKNOWN STEP	2026-10-23T11:43:53.2354986Z Runtime image: ubuntu:22.04@sha256:0a9887931b0e38af2e3487ed39e29436b0535c4f3f52e57745baaf79d1898956 sha256:cee13550f97b8a595506e8e4ca74263ba44924248779a4ba4f942e197652acff
build / Build trusted-server-axum-x86_64-unknown-linux-gnu	UNKNOWN STEP	2026-10-23T11:43:53.6569609Z SUCCESS: Axum rejects EDGEZERO__ADAPTER__PORT=0; exit 1, ports must be 1–65535: sha256:cee13550f97b8a595506e8e4ca74263ba44924248779a4ba4f942e197652acff
build / Build trusted-server-axum-x86_64-unknown-linux-gnu	UNKNOWN STEP	2026-10-23T11:43:53.7468978Z SUCCESS: Axum rejects PORT=0; exit 1, ports must be 1–65535: sha256:cee13550f97b8a595506e8e4ca74263ba44924248779a4ba4f942e197652acff
build / Build trusted-server-axum-x86_64-unknown-linux-gnu	UNKNOWN STEP	2026-10-23T11:43:53.8658476Z SUCCESS: Axum bound to 0.0.0.0:8080; host reached published container port, HTTP 200 ok: ubuntu:22.04@sha256:0a9887931b0e38af2e3487ed39e29436b0535c4f3f52e57745baaf79d1898956 sha256:cee13550f97b8a595506e8e4ca74263ba44924248779a4ba4f942e197652acff
build / Build trusted-server-axum-x86_64-unknown-linux-gnu	UNKNOWN STEP	2026-10-23T11:43:56.5695165Z Runtime image: registry.access.redhat.com/ubi9/ubi-minimal:9.6@sha256:34880b64c07f28f64d95737f82f891516de9a3b43583f39970f7bf8e4cfa48b7 sha256:a2c5a85865a585c3bc8b10f6c269358fdf89fe32be4232885166889d85c76421
build / Build trusted-server-axum-x86_64-unknown-linux-gnu	UNKNOWN STEP	2026-10-23T11:43:57.0734364Z SUCCESS: Axum rejects EDGEZERO__ADAPTER__PORT=0; exit 1, ports must be 1–65535: sha256:a2c5a85865a585c3bc8b10f6c269358fdf89fe32be4232885166889d85c76421
build / Build trusted-server-axum-x86_64-unknown-linux-gnu	UNKNOWN STEP	2026-10-23T11:43:57.1659986Z SUCCESS: Axum rejects PORT=0; exit 1, ports must be 1–65535: sha256:a2c5a85865a585c3bc8b10f6c269358fdf89fe32be4232885166889d85c76421
build / Build trusted-server-axum-x86_64-unknown-linux-gnu	UNKNOWN STEP	2026-10-23T11:43:57.2779452Z SUCCESS: Axum bound to 0.0.0.0:8080; host reached published container port, HTTP 200 ok: registry.access.redhat.com/ubi9/ubi-minimal:9.6@sha256:34880b64c07f28f64d95737f82f891516de9a3b43583f39970f7bf8e4cfa48b7 sha256:a2c5a85865a585c3bc8b10f6c269358fdf89fe32be4232885166889d85c76421

ts-x86_64-unknown-linux-gnu
https://github.com/prk-Jr/trusted-server/actions/runs/39947731545/job/120394453879
build / Build ts-x86_64-unknown-linux-gnu	UNKNOWN STEP	2026-10-23T11:41:31.0825110Z GNU builder: registry.access.redhat.com/ubi9/ubi:9.6@sha256:dec374e05cc13ebbc0975c9f521f3db6942d27f8ccdf06b180160490eef8bdbc sha256:efe659f113f189ac51d5685b19624adeb3dd83cd361b2da3e30d950d205cbf3d
build / Build ts-x86_64-unknown-linux-gnu	UNKNOWN STEP	2026-10-23T11:41:31.2718728Z ldd (GNU libc) 2.34
build / Build ts-x86_64-unknown-linux-gnu	UNKNOWN STEP	2026-10-23T11:49:09.4240209Z SUCCESS: final-byte checks x86_64-unknown-linux-gnu GLIBC_2.34 GLIBC_2.2.5 GLIBC_2.14 GLIBC_2.3 GLIBC_2.29 GLIBC_2.3.4 GLIBC_2.33 GLIBC_2.28 GLIBC_2.7 GLIBC_2.16 GLIBC_2.10 GLIBC_2.3.2 GLIBC_2.9 GLIBC_2.30 GLIBC_2.4 GLIBC_2.17 GLIBC_2.15 GLIBC_2.32 GLIBC_2.25 GLIBC_2.18 GLIBC_2.5 GLIBC_2.27
build / Build ts-x86_64-unknown-linux-gnu	UNKNOWN STEP	2026-10-23T11:49:09.4281488Z SUCCESS: ts package=0.1.0 source=149754d357901ec874eab6140e92bce3d8613085 target=x86_64-unknown-linux-gnu variant=default
build / Build ts-x86_64-unknown-linux-gnu	UNKNOWN STEP	2026-10-23T11:49:11.4445220Z Runtime image: debian:12-slim@sha256:7ff6ba31527b9e336162fa061746c366c4b2032f4d2cff2078bea43f78efe3f8 sha256:8da84df25d28176be84164040cd45e128c6b4c6a80b7d7cbe17fe2b9f198efc2
build / Build ts-x86_64-unknown-linux-gnu	UNKNOWN STEP	2026-10-23T11:49:12.2574647Z SUCCESS: ts package=0.1.0 source=149754d357901ec874eab6140e92bce3d8613085 target=x86_64-unknown-linux-gnu variant=default
build / Build ts-x86_64-unknown-linux-gnu	UNKNOWN STEP	2026-10-23T11:49:14.1760930Z Runtime image: ubuntu:22.04@sha256:0a9887931b0e38af2e3487ed39e29436b0535c4f3f52e57745baaf79d1898956 sha256:cee13550f97b8a595506e8e4ca74263ba44924248779a4ba4f942e197652acff
build / Build ts-x86_64-unknown-linux-gnu	UNKNOWN STEP	2026-10-23T11:49:14.3449872Z SUCCESS: ts package=0.1.0 source=149754d357901ec874eab6140e92bce3d8613085 target=x86_64-unknown-linux-gnu variant=default
build / Build ts-x86_64-unknown-linux-gnu	UNKNOWN STEP	2026-10-23T11:49:16.3896864Z Runtime image: registry.access.redhat.com/ubi9/ubi-minimal:9.6@sha256:34880b64c07f28f64d95737f82f891516de9a3b43583f39970f7bf8e4cfa48b7 sha256:a2c5a85865a585c3bc8b10f6c269358fdf89fe32be4232885166889d85c76421
build / Build ts-x86_64-unknown-linux-gnu	UNKNOWN STEP	2026-10-23T11:49:16.5355492Z SUCCESS: ts package=0.1.0 source=149754d357901ec874eab6140e92bce3d8613085 target=x86_64-unknown-linux-gnu variant=default

ts-x86_64-apple-darwin
https://github.com/prk-Jr/trusted-server/actions/runs/39947731545/job/120394453888
build / Build ts-x86_64-apple-darwin	UNKNOWN STEP	2026-10-23T12:05:00.9594680Z SUCCESS: Mach-O target and macOS minimum OS 13.0: x86_64-apple-darwin
build / Build ts-x86_64-apple-darwin	UNKNOWN STEP	2026-10-23T12:05:00.9597140Z SUCCESS: final-byte checks x86_64-apple-darwin 
build / Build ts-x86_64-apple-darwin	UNKNOWN STEP	2026-10-23T12:05:00.9791970Z SUCCESS: ts package=0.1.0 source=149754d357901ec874eab6140e92bce3d8613085 target=x86_64-apple-darwin variant=default

trusted-server-axum-aarch64-unknown-linux-gnu
https://github.com/prk-Jr/trusted-server/actions/runs/39947731545/job/120394453903
build / Build trusted-server-axum-aarch64-unknown-linux-gnu	UNKNOWN STEP	2026-10-23T11:41:31.4787685Z GNU builder: registry.access.redhat.com/ubi9/ubi:9.6@sha256:dec374e05cc13ebbc0975c9f521f3db6942d27f8ccdf06b180160490eef8bdbc sha256:46f3e35478cad9449bc739681cdf09b482f31c0909a454e85d2710b15a3ad08c
build / Build trusted-server-axum-aarch64-unknown-linux-gnu	UNKNOWN STEP	2026-10-23T11:41:31.6228442Z ldd (GNU libc) 2.34
build / Build trusted-server-axum-aarch64-unknown-linux-gnu	UNKNOWN STEP	2026-10-23T11:44:18.0423704Z SUCCESS: final-byte checks aarch64-unknown-linux-gnu GLIBC_2.17 GLIBC_2.33 GLIBC_2.34 GLIBC_2.29 GLIBC_2.28 GLIBC_2.30 GLIBC_2.27 GLIBC_2.18 GLIBC_2.25 GLIBC_2.32
build / Build trusted-server-axum-aarch64-unknown-linux-gnu	UNKNOWN STEP	2026-10-23T11:44:19.6789888Z Runtime image: debian:12-slim@sha256:7ff6ba31527b9e336162fa061746c366c4b2032f4d2cff2078bea43f78efe3f8 sha256:28fe65558df3e10c89e7d685cb86544cdc138f242d12100c5b0981f92aae0853
build / Build trusted-server-axum-aarch64-unknown-linux-gnu	UNKNOWN STEP	2026-10-23T11:44:20.6577740Z SUCCESS: Axum rejects EDGEZERO__ADAPTER__PORT=0; exit 1, ports must be 1–65535: sha256:28fe65558df3e10c89e7d685cb86544cdc138f242d12100c5b0981f92aae0853
build / Build trusted-server-axum-aarch64-unknown-linux-gnu	UNKNOWN STEP	2026-10-23T11:44:20.7649254Z SUCCESS: Axum rejects PORT=0; exit 1, ports must be 1–65535: sha256:28fe65558df3e10c89e7d685cb86544cdc138f242d12100c5b0981f92aae0853
build / Build trusted-server-axum-aarch64-unknown-linux-gnu	UNKNOWN STEP	2026-10-23T11:44:20.9330215Z SUCCESS: Axum bound to 0.0.0.0:8080; host reached published container port, HTTP 200 ok: debian:12-slim@sha256:7ff6ba31527b9e336162fa061746c366c4b2032f4d2cff2078bea43f78efe3f8 sha256:28fe65558df3e10c89e7d685cb86544cdc138f242d12100c5b0981f92aae0853
+ EVIDENCE=<evidence>
+ WORK=<evidence>/fastly-package
+ IMAGE=debian:12-slim@sha256:7ff6ba31527b9e336162fa061746c366c4b2032f4d2cff2078bea43f78efe3f8
+ mkdir <evidence>/fastly-package
+ cp <evidence>/trusted-server-fastly.wasm <evidence>/fastly-package/
+ printf 'manifest_version = 3\nname = "example-app"\n'
+ chmod 777 <evidence>/fastly-package
++ podman machine inspect podman-machine-default --format '{{.State}}'
+ [[ stopped != running ]]
+ trap 'podman machine stop podman-machine-default >/dev/null 2>&1 || true' EXIT
+ podman machine start podman-machine-default
Starting machine "podman-machine-default"

This machine is currently configured in rootless mode. If your containers
require root permissions (e.g. ports < 1024), or if you run into compatibility
issues with non-podman clients, you can switch using the following command:

	podman machine set --rootful

API forwarding listening on: /var/run/docker.sock
Docker API clients default to this address. You do not need to set DOCKER_HOST.

Machine "podman-machine-default" started successfully
+ podman pull debian:12-slim@sha256:7ff6ba31527b9e336162fa061746c366c4b2032f4d2cff2078bea43f78efe3f8
Trying to pull docker.io/library/debian@sha256:7ff6ba31527b9e336162fa061746c366c4b2032f4d2cff2078bea43f78efe3f8...
Getting image source signatures
Copying blob sha256:41b2195c355367079ebad200f9591fe3c2cb886c3b1e67abaaf2090dc11c04d9
Copying config sha256:28fe65558df3e10c89e7d685cb86544cdc138f242d12100c5b0981f92aae0853
Writing manifest to image destination
28fe65558df3e10c89e7d685cb86544cdc138f242d12100c5b0981f92aae0853
+ podman image inspect debian:12-slim@sha256:7ff6ba31527b9e336162fa061746c366c4b2032f4d2cff2078bea43f78efe3f8 --format '{{.Id}}'
28fe65558df3e10c89e7d685cb86544cdc138f242d12100c5b0981f92aae0853
+ podman run --rm --network=none --read-only --cap-drop=ALL --security-opt=no-new-privileges --user=65534:65534 --tmpfs /tmp:rw --env XDG_CONFIG_HOME=/tmp/fastly-config --workdir /work --mount type=bind,src=<evidence>/fastly-package,dst=/work --mount type=bind,src=<evidence>/fastly-linux/fastly,dst=/usr/local/bin/fastly,readonly debian:12-slim@sha256:7ff6ba31527b9e336162fa061746c366c4b2032f4d2cff2078bea43f78efe3f8 sh -ec '
    fastly version
    fastly compute pack --wasm-binary ./trusted-server-fastly.wasm
    fastly compute validate --package ./pkg/example-app.tar.gz
    tar -tzf ./pkg/example-app.tar.gz
    tar -xOzf ./pkg/example-app.tar.gz example-app/bin/main.wasm > packaged.wasm
    cmp trusted-server-fastly.wasm packaged.wasm
    tar -xOzf ./pkg/example-app.tar.gz example-app/fastly.toml > packaged.toml
    cmp fastly.toml packaged.toml
    sha256sum trusted-server-fastly.wasm packaged.wasm fastly.toml packaged.toml pkg/example-app.tar.gz
    echo "SUCCESS: pinned Fastly 16.0.0 packed and validated the verified release wasm; inspected package members and both byte comparisons passed; network disabled and no deployment"
  '
Fastly CLI version v16.0.0 (34cef1b0)
Built with go version go1.26.5 linux/arm64 (2026-10-23)
| Copying wasm binary...
/ Copying wasm binary...
- Copying wasm binary...
✓ Copying wasm binary
| Copying manifest...
/ Copying manifest...
✓ Copying manifest
| Creating example-app.tar.gz file...
/ Creating example-app.tar.gz file...
✓ Creating example-app.tar.gz file
SUCCESS: Validated package /work/pkg/example-app.tar.gz
example-app
example-app/bin
example-app/bin/main.wasm
example-app/fastly.toml
78219e03834c0e7617ac5f97308d2b225867ac9c7755767cf417d2251cc0bc2c  trusted-server-fastly.wasm
78219e03834c0e7617ac5f97308d2b225867ac9c7755767cf417d2251cc0bc2c  packaged.wasm
21b3c0d6f0a329838b23ad87a1d42840cceaff25d0247c1ac9aa5b34784360b2  fastly.toml
21b3c0d6f0a329838b23ad87a1d42840cceaff25d0247c1ac9aa5b34784360b2  packaged.toml
a52c6c028205e1555aa52e5cc495a5b9d60e55bac04747f05d4bee59e4b20ae0  pkg/example-app.tar.gz
SUCCESS: pinned Fastly 16.0.0 packed and validated the verified release wasm; inspected package members and both byte comparisons passed; network disabled and no deployment
+ chmod 755 <evidence>/fastly-package
+ podman machine stop podman-machine-default
+ REPO_ROOT=<checkout>
+ EVIDENCE=<evidence>
+ WORK=<evidence>/viceroy-smoke
+ TS=<evidence>/ts-aarch64-apple-darwin
+ WASM=<evidence>/trusted-server-fastly.wasm
+ VICEROY=<pinned-tools>/viceroy
+ mkdir <evidence>/viceroy-smoke
+ for port in 18888 17676
+ lsof -nP -iTCP:18888 -sTCP:LISTEN
+ for port in 18888 17676
+ lsof -nP -iTCP:17676 -sTCP:LISTEN
+ cp <checkout>/edgezero.toml <checkout>/fastly.toml <evidence>/viceroy-smoke/
+ cp <checkout>/trusted-server.example.toml <evidence>/viceroy-smoke/app.toml
+ ln -s <checkout>/crates <evidence>/viceroy-smoke/crates
+ node - <evidence>/viceroy-smoke
+ chmod u+x <evidence>/ts-aarch64-apple-darwin
+ <evidence>/ts-aarch64-apple-darwin --version
ts package=0.1.0 source=149754d357901ec874eab6140e92bce3d8613085 target=aarch64-apple-darwin variant=default
+ cd <evidence>/viceroy-smoke
+ <evidence>/ts-aarch64-apple-darwin config push --adapter fastly --local --manifest <evidence>/viceroy-smoke/edgezero.toml --app-config <evidence>/viceroy-smoke/app.toml --no-diff --yes
wrote 1 physical entries (1 logical) to `[local_server.config_stores.trusted_server_config.contents]` in <evidence>/viceroy-smoke/fastly.toml (logical id `trusted_server_config`); restart `fastly compute serve` to pick up changes
pushed-key=trusted_server_config
pushed-store=trusted_server_config
+ <pinned-tools>/viceroy --version
viceroy 0.21.0
+ cat
+ origin_pid=36402
+ trap cleanup EXIT
+ node <evidence>/viceroy-smoke/origin.mjs
+ viceroy_pid=36403
+ <pinned-tools>/viceroy serve -C <evidence>/viceroy-smoke/fastly.toml --addr 127.0.0.1:17676 <evidence>/trusted-server-fastly.wasm
+ curl --fail --silent --show-error --retry 20 --retry-connrefused --retry-delay 1 --retry-max-time 45 --max-time 30 -H 'Host: 127.0.0.1' -D <evidence>/viceroy-smoke/headers.txt -o <evidence>/viceroy-smoke/body.html http://127.0.0.1:17676/
curl: (7) Failed to connect to 127.0.0.1 port 17676 after 0 ms: Couldn't connect to server
curl: (7) Failed to connect to 127.0.0.1 port 17676 after 0 ms: Couldn't connect to server
+ cat <evidence>/viceroy-smoke/headers.txt
HTTP/1.1 200 OK
content-type: text/html
date: Fri, 23 Oct 2026 12:24:43 GMT
connection: keep-alive
keep-alive: timeout=5
x-ts-fastly-version: 0
x-geo-city: San Francisco
x-geo-country: US
x-geo-continent: NorthAmerica
x-geo-coordinates: 37.77869,-122.39557
x-geo-region: CA
x-geo-info-available: true
x-ts-version: 149754d357901ec874eab6140e92bce3d8613085
transfer-encoding: chunked

+ node - <evidence>/viceroy-smoke
CHECK: default single mode Viceroy log must not contain Build facts:
SUCCESS: default single mode emits no Build facts log
SUCCESS: configured Viceroy page returned HTTP200, origin marker, injected JS and exact release source header; 262 bytes, sha256=faafc52e92b3981f7a899b5bb3f6d85cebcb045618bce3727bbd1be3f1b869e2
+ cleanup
+ [[ -n 36403 ]]
+ kill 36403
+ wait 36403
+ true
+ kill 36402
+ wait 36402
+ true

Full transcript: online 1 · online 2 · offline 1 · offline 2 · publisher 1

@prk-Jr

prk-Jr commented Oct 23, 2026

Copy link
Copy Markdown
Collaborator Author

Rehearsal v0.0.0-rehearsal.9 at 149754d: passed. Fork run. Fresh lightweight tag; exact reviewed head; all seven builds/signing jobs and the publisher passed. The full independent verification also passed.

online transcript, part 1. Documented download, release/asset verification, checksums, all-seven bundle and online-store verification, both signer forms, both predicates and SPDX equality.

+ set -euo pipefail
+ REPO=prk-Jr/trusted-server
+ TAG=v0.0.0-rehearsal.9
+ COMMIT=149754d357901ec874eab6140e92bce3d8613085
+ ASSETS=(trusted-server-fastly.wasm ts-x86_64-unknown-linux-gnu ts-aarch64-apple-darwin ts-x86_64-apple-darwin trusted-server-axum-x86_64-unknown-linux-gnu trusted-server-axum-x86_64-unknown-linux-musl trusted-server-axum-aarch64-unknown-linux-gnu)
+ WORKFLOW=prk-Jr/trusted-server/.github/workflows/release-build.yml
+ IDENTITY=https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.9
+ gh release download v0.0.0-rehearsal.9 --repo prk-Jr/trusted-server --dir .
+ gh api repos/prk-Jr/trusted-server/releases/tags/v0.0.0-rehearsal.9 --jq '{tag_name,draft,immutable,prerelease}'
{"draft":false,"immutable":true,"prerelease":true,"tag_name":"v0.0.0-rehearsal.9"}
++ gh api repos/prk-Jr/trusted-server/releases/tags/v0.0.0-rehearsal.9 --jq '[.draft == false,.immutable == true,.prerelease == true] | all'
+ test true = true
++ gh api repos/prk-Jr/trusted-server/releases/latest --jq .tag_name
+ latest=v0.0.0-rehearsal.5
+ test v0.0.0-rehearsal.5 '!=' v0.0.0-rehearsal.9
+ echo 'SUCCESS: published immutable prerelease; not Latest'
SUCCESS: published immutable prerelease; not Latest
+ gh release verify v0.0.0-rehearsal.9 --repo prk-Jr/trusted-server
Resolved tag v0.0.0-rehearsal.9 to sha1:149754d357901ec874eab6140e92bce3d8613085
Loaded attestation from GitHub API
✓ Release v0.0.0-rehearsal.9 verified!

Assets
SHA256SUMS	sha256:f15abb8ea2a6f97a55f33a3407f0041219a6de04dca911d05c0c51a5bab96dfa
trusted-server-axum-aarch64-unknown-linux-gnu	sha256:53e4db0197707f0eb9476bfc00daa66c70b0797e943eba60478637f089c378a3
trusted-server-axum-aarch64-unknown-linux-gnu.provenance.sigstore.json	sha256:eee736489562e010d60937c3b9fc8ba2b921bbe1ccb5ec480479cb6233531a00
trusted-server-axum-aarch64-unknown-linux-gnu.sbom.sigstore.json	sha256:01b53644fbd0fb416f258ce3af0fe5b07cbd9e301b5716df046ae27184e7b49c
trusted-server-axum-aarch64-unknown-linux-gnu.spdx.json	sha256:d40d586d24f28cbc28493f5ae6f32c34398bfc921a0bcc8c96bcb5fd9aeb0118
trusted-server-axum-x86_64-unknown-linux-gnu	sha256:fc29b83920e059628b941e5244e066c6d60ecb0c4385cad1c90d1248ba3d196a
trusted-server-axum-x86_64-unknown-linux-gnu.provenance.sigstore.json	sha256:46d80582edd5d769fb0e52d30663bd5c3f1476d603a8017a68cec5ec4d8cfa3d
trusted-server-axum-x86_64-unknown-linux-gnu.sbom.sigstore.json	sha256:a6018cb031267c20d6698a7a8492e0c8a4902615ba31b3a63eb1431d6d95cf05
trusted-server-axum-x86_64-unknown-linux-gnu.spdx.json	sha256:c04db9cfb49e5bffea71703e06ecf78e342fa8e06d90c78cbcd848de331b2520
trusted-server-axum-x86_64-unknown-linux-musl	sha256:c7e71bdb740426aef585e3c941e5bced5c155fe738f61550644fa2845d3b98f9
trusted-server-axum-x86_64-unknown-linux-musl.provenance.sigstore.json	sha256:2f74e810804abe6260f40bd227047cf3028cea84e7e154f327ff56a59cbae712
trusted-server-axum-x86_64-unknown-linux-musl.sbom.sigstore.json	sha256:3e292050df47c9d8e852a13878e4ca07c50050dfd299059fee5137685d8639b4
trusted-server-axum-x86_64-unknown-linux-musl.spdx.json	sha256:27285b8f26b14ff4c7609ce14e3875e11ecb1311ec35712f84842de176848691
trusted-server-fastly.wasm	sha256:78219e03834c0e7617ac5f97308d2b225867ac9c7755767cf417d2251cc0bc2c
trusted-server-fastly.wasm.provenance.sigstore.json	sha256:e23b5d77ea0a930bef5a6e46137ca5029cbf42f268aa9d2559d46e49fa23dc54
trusted-server-fastly.wasm.sbom.sigstore.json	sha256:3f810ed565d7b5ee4541b83677e0aaef3ade22be60d39a1a0abf8da8d903b8c3
trusted-server-fastly.wasm.spdx.json	sha256:013f8ca5a77eab88a9297c8ef823a50593b5a424dbbad27dc7a3aee9a1df9249
ts-aarch64-apple-darwin	sha256:5081f63ede44079a0c53123fdccc480b9bd3013406d0c2efe79b1eba44c66b10
ts-aarch64-apple-darwin.provenance.sigstore.json	sha256:15830f2da77b2ff61083c817b1f59935634d1c2d158618106147ff602e11bf3b
ts-aarch64-apple-darwin.sbom.sigstore.json	sha256:ea46fd4d01afcb01f1293d962732bd15d291f9ec60bfdcc9f456976c87917216
ts-aarch64-apple-darwin.spdx.json	sha256:9e736d3568b1f1632ccebfe3939130a257f34daac5658a73b1fca21e0a8b8d03
ts-x86_64-apple-darwin	sha256:18b195caf41136d80722e6f9692679f9b05383569249d96a8e027705ec273464
ts-x86_64-apple-darwin.provenance.sigstore.json	sha256:655310407d8b1c500285c34fde8e88d65cf9c2f3d334f175a9651d28c4ea1a48
ts-x86_64-apple-darwin.sbom.sigstore.json	sha256:0c27540e842e3ad785f6e378a03b8279a314d29fa597f5778887e72327a51e74
ts-x86_64-apple-darwin.spdx.json	sha256:1db8a999611e33682a78c3b797b30a20f387dfe2aae63a834d378793eedef53d
ts-x86_64-unknown-linux-gnu	sha256:d342f1a5284049cb9055f665261c25844ad219339b25b3e87b9b4bdbe2e0f219
ts-x86_64-unknown-linux-gnu.provenance.sigstore.json	sha256:87707ae550de1d0f96eb841a699e851c2db0da983fd310a35eaa19883e2bbee8
ts-x86_64-unknown-linux-gnu.sbom.sigstore.json	sha256:924995aa9fb810d8292bc632bc96c811e04937d728d70b13dfe7a59f8fb6bd7f
ts-x86_64-unknown-linux-gnu.spdx.json	sha256:58a9f6020a9ab1af2138096982e4d1e788398eccdef6b4f9f80b5f604a1fdf80

+ for asset in "${ASSETS[@]}"
+ for suffix in '' .spdx.json .provenance.sigstore.json .sbom.sigstore.json
+ gh release verify-asset v0.0.0-rehearsal.9 trusted-server-fastly.wasm --repo prk-Jr/trusted-server
Calculated digest for trusted-server-fastly.wasm: sha256:78219e03834c0e7617ac5f97308d2b225867ac9c7755767cf417d2251cc0bc2c
Resolved tag v0.0.0-rehearsal.9 to sha1:149754d357901ec874eab6140e92bce3d8613085
Loaded attestation from GitHub API

✓ Verification succeeded! trusted-server-fastly.wasm is present in release v0.0.0-rehearsal.9
+ for suffix in '' .spdx.json .provenance.sigstore.json .sbom.sigstore.json
+ gh release verify-asset v0.0.0-rehearsal.9 trusted-server-fastly.wasm.spdx.json --repo prk-Jr/trusted-server
Calculated digest for trusted-server-fastly.wasm.spdx.json: sha256:013f8ca5a77eab88a9297c8ef823a50593b5a424dbbad27dc7a3aee9a1df9249
Resolved tag v0.0.0-rehearsal.9 to sha1:149754d357901ec874eab6140e92bce3d8613085
Loaded attestation from GitHub API

✓ Verification succeeded! trusted-server-fastly.wasm.spdx.json is present in release v0.0.0-rehearsal.9
+ for suffix in '' .spdx.json .provenance.sigstore.json .sbom.sigstore.json
+ gh release verify-asset v0.0.0-rehearsal.9 trusted-server-fastly.wasm.provenance.sigstore.json --repo prk-Jr/trusted-server
Calculated digest for trusted-server-fastly.wasm.provenance.sigstore.json: sha256:e23b5d77ea0a930bef5a6e46137ca5029cbf42f268aa9d2559d46e49fa23dc54
Resolved tag v0.0.0-rehearsal.9 to sha1:149754d357901ec874eab6140e92bce3d8613085
Loaded attestation from GitHub API

✓ Verification succeeded! trusted-server-fastly.wasm.provenance.sigstore.json is present in release v0.0.0-rehearsal.9
+ for suffix in '' .spdx.json .provenance.sigstore.json .sbom.sigstore.json
+ gh release verify-asset v0.0.0-rehearsal.9 trusted-server-fastly.wasm.sbom.sigstore.json --repo prk-Jr/trusted-server
Calculated digest for trusted-server-fastly.wasm.sbom.sigstore.json: sha256:3f810ed565d7b5ee4541b83677e0aaef3ade22be60d39a1a0abf8da8d903b8c3
Resolved tag v0.0.0-rehearsal.9 to sha1:149754d357901ec874eab6140e92bce3d8613085
Loaded attestation from GitHub API

✓ Verification succeeded! trusted-server-fastly.wasm.sbom.sigstore.json is present in release v0.0.0-rehearsal.9
+ for kind in provenance sbom
+ predicate=https://slsa.dev/provenance/v1
+ [[ provenance == sbom ]]
+ checks=(--repo "$REPO" --bundle "$asset.$kind.sigstore.json" --source-ref "refs/tags/$TAG" --source-digest "$COMMIT" --signer-digest "$COMMIT" --deny-self-hosted-runners --predicate-type "$predicate")
+ gh attestation verify trusted-server-fastly.wasm --repo prk-Jr/trusted-server --bundle trusted-server-fastly.wasm.provenance.sigstore.json --source-ref refs/tags/v0.0.0-rehearsal.9 --source-digest 149754d357901ec874eab6140e92bce3d8613085 --signer-digest 149754d357901ec874eab6140e92bce3d8613085 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
+ gh attestation verify trusted-server-fastly.wasm --repo prk-Jr/trusted-server --bundle trusted-server-fastly.wasm.provenance.sigstore.json --source-ref refs/tags/v0.0.0-rehearsal.9 --source-digest 149754d357901ec874eab6140e92bce3d8613085 --signer-digest 149754d357901ec874eab6140e92bce3d8613085 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.9 --format json
+ echo 'SUCCESS: trusted-server-fastly.wasm provenance verified with both exact signer identities and source pins'
SUCCESS: trusted-server-fastly.wasm provenance verified with both exact signer identities and source pins
+ [[ provenance == sbom ]]
+ for kind in provenance sbom
+ predicate=https://slsa.dev/provenance/v1
+ [[ sbom == sbom ]]
+ predicate=https://spdx.dev/Document/v2.3
+ checks=(--repo "$REPO" --bundle "$asset.$kind.sigstore.json" --source-ref "refs/tags/$TAG" --source-digest "$COMMIT" --signer-digest "$COMMIT" --deny-self-hosted-runners --predicate-type "$predicate")
+ gh attestation verify trusted-server-fastly.wasm --repo prk-Jr/trusted-server --bundle trusted-server-fastly.wasm.sbom.sigstore.json --source-ref refs/tags/v0.0.0-rehearsal.9 --source-digest 149754d357901ec874eab6140e92bce3d8613085 --signer-digest 149754d357901ec874eab6140e92bce3d8613085 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
+ gh attestation verify trusted-server-fastly.wasm --repo prk-Jr/trusted-server --bundle trusted-server-fastly.wasm.sbom.sigstore.json --source-ref refs/tags/v0.0.0-rehearsal.9 --source-digest 149754d357901ec874eab6140e92bce3d8613085 --signer-digest 149754d357901ec874eab6140e92bce3d8613085 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.9 --format json
+ echo 'SUCCESS: trusted-server-fastly.wasm sbom verified with both exact signer identities and source pins'
SUCCESS: trusted-server-fastly.wasm sbom verified with both exact signer identities and source pins
+ [[ sbom == sbom ]]
+ jq -e --slurpfile document trusted-server-fastly.wasm.spdx.json 'length == 1 and .[0].verificationResult.statement.predicate == $document[0]' trusted-server-fastly.wasm.sbom.verified.json
true
+ echo 'SUCCESS: trusted-server-fastly.wasm attested SPDX predicate equals published companion'
SUCCESS: trusted-server-fastly.wasm attested SPDX predicate equals published companion
+ for asset in "${ASSETS[@]}"
+ for suffix in '' .spdx.json .provenance.sigstore.json .sbom.sigstore.json
+ gh release verify-asset v0.0.0-rehearsal.9 ts-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server
Calculated digest for ts-x86_64-unknown-linux-gnu: sha256:d342f1a5284049cb9055f665261c25844ad219339b25b3e87b9b4bdbe2e0f219
Resolved tag v0.0.0-rehearsal.9 to sha1:149754d357901ec874eab6140e92bce3d8613085
Loaded attestation from GitHub API

✓ Verification succeeded! ts-x86_64-unknown-linux-gnu is present in release v0.0.0-rehearsal.9
+ for suffix in '' .spdx.json .provenance.sigstore.json .sbom.sigstore.json
+ gh release verify-asset v0.0.0-rehearsal.9 ts-x86_64-unknown-linux-gnu.spdx.json --repo prk-Jr/trusted-server
Calculated digest for ts-x86_64-unknown-linux-gnu.spdx.json: sha256:58a9f6020a9ab1af2138096982e4d1e788398eccdef6b4f9f80b5f604a1fdf80
Resolved tag v0.0.0-rehearsal.9 to sha1:149754d357901ec874eab6140e92bce3d8613085
Loaded attestation from GitHub API

✓ Verification succeeded! ts-x86_64-unknown-linux-gnu.spdx.json is present in release v0.0.0-rehearsal.9
+ for suffix in '' .spdx.json .provenance.sigstore.json .sbom.sigstore.json
+ gh release verify-asset v0.0.0-rehearsal.9 ts-x86_64-unknown-linux-gnu.provenance.sigstore.json --repo prk-Jr/trusted-server
Calculated digest for ts-x86_64-unknown-linux-gnu.provenance.sigstore.json: sha256:87707ae550de1d0f96eb841a699e851c2db0da983fd310a35eaa19883e2bbee8
Resolved tag v0.0.0-rehearsal.9 to sha1:149754d357901ec874eab6140e92bce3d8613085
Loaded attestation from GitHub API

✓ Verification succeeded! ts-x86_64-unknown-linux-gnu.provenance.sigstore.json is present in release v0.0.0-rehearsal.9
+ for suffix in '' .spdx.json .provenance.sigstore.json .sbom.sigstore.json
+ gh release verify-asset v0.0.0-rehearsal.9 ts-x86_64-unknown-linux-gnu.sbom.sigstore.json --repo prk-Jr/trusted-server
Calculated digest for ts-x86_64-unknown-linux-gnu.sbom.sigstore.json: sha256:924995aa9fb810d8292bc632bc96c811e04937d728d70b13dfe7a59f8fb6bd7f
Resolved tag v0.0.0-rehearsal.9 to sha1:149754d357901ec874eab6140e92bce3d8613085
Loaded attestation from GitHub API

✓ Verification succeeded! ts-x86_64-unknown-linux-gnu.sbom.sigstore.json is present in release v0.0.0-rehearsal.9
+ for kind in provenance sbom
+ predicate=https://slsa.dev/provenance/v1
+ [[ provenance == sbom ]]
+ checks=(--repo "$REPO" --bundle "$asset.$kind.sigstore.json" --source-ref "refs/tags/$TAG" --source-digest "$COMMIT" --signer-digest "$COMMIT" --deny-self-hosted-runners --predicate-type "$predicate")
+ gh attestation verify ts-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --bundle ts-x86_64-unknown-linux-gnu.provenance.sigstore.json --source-ref refs/tags/v0.0.0-rehearsal.9 --source-digest 149754d357901ec874eab6140e92bce3d8613085 --signer-digest 149754d357901ec874eab6140e92bce3d8613085 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
+ gh attestation verify ts-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --bundle ts-x86_64-unknown-linux-gnu.provenance.sigstore.json --source-ref refs/tags/v0.0.0-rehearsal.9 --source-digest 149754d357901ec874eab6140e92bce3d8613085 --signer-digest 149754d357901ec874eab6140e92bce3d8613085 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.9 --format json
+ echo 'SUCCESS: ts-x86_64-unknown-linux-gnu provenance verified with both exact signer identities and source pins'
SUCCESS: ts-x86_64-unknown-linux-gnu provenance verified with both exact signer identities and source pins
+ [[ provenance == sbom ]]
+ for kind in provenance sbom
+ predicate=https://slsa.dev/provenance/v1
+ [[ sbom == sbom ]]
+ predicate=https://spdx.dev/Document/v2.3
+ checks=(--repo "$REPO" --bundle "$asset.$kind.sigstore.json" --source-ref "refs/tags/$TAG" --source-digest "$COMMIT" --signer-digest "$COMMIT" --deny-self-hosted-runners --predicate-type "$predicate")
+ gh attestation verify ts-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --bundle ts-x86_64-unknown-linux-gnu.sbom.sigstore.json --source-ref refs/tags/v0.0.0-rehearsal.9 --source-digest 149754d357901ec874eab6140e92bce3d8613085 --signer-digest 149754d357901ec874eab6140e92bce3d8613085 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
+ gh attestation verify ts-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --bundle ts-x86_64-unknown-linux-gnu.sbom.sigstore.json --source-ref refs/tags/v0.0.0-rehearsal.9 --source-digest 149754d357901ec874eab6140e92bce3d8613085 --signer-digest 149754d357901ec874eab6140e92bce3d8613085 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.9 --format json
+ echo 'SUCCESS: ts-x86_64-unknown-linux-gnu sbom verified with both exact signer identities and source pins'
SUCCESS: ts-x86_64-unknown-linux-gnu sbom verified with both exact signer identities and source pins
+ [[ sbom == sbom ]]
+ jq -e --slurpfile document ts-x86_64-unknown-linux-gnu.spdx.json 'length == 1 and .[0].verificationResult.statement.predicate == $document[0]' ts-x86_64-unknown-linux-gnu.sbom.verified.json
true
+ echo 'SUCCESS: ts-x86_64-unknown-linux-gnu attested SPDX predicate equals published companion'
SUCCESS: ts-x86_64-unknown-linux-gnu attested SPDX predicate equals published companion
+ for asset in "${ASSETS[@]}"
+ for suffix in '' .spdx.json .provenance.sigstore.json .sbom.sigstore.json
+ gh release verify-asset v0.0.0-rehearsal.9 ts-aarch64-apple-darwin --repo prk-Jr/trusted-server
Calculated digest for ts-aarch64-apple-darwin: sha256:5081f63ede44079a0c53123fdccc480b9bd3013406d0c2efe79b1eba44c66b10
Resolved tag v0.0.0-rehearsal.9 to sha1:149754d357901ec874eab6140e92bce3d8613085
Loaded attestation from GitHub API

✓ Verification succeeded! ts-aarch64-apple-darwin is present in release v0.0.0-rehearsal.9
+ for suffix in '' .spdx.json .provenance.sigstore.json .sbom.sigstore.json
+ gh release verify-asset v0.0.0-rehearsal.9 ts-aarch64-apple-darwin.spdx.json --repo prk-Jr/trusted-server
Calculated digest for ts-aarch64-apple-darwin.spdx.json: sha256:9e736d3568b1f1632ccebfe3939130a257f34daac5658a73b1fca21e0a8b8d03
Resolved tag v0.0.0-rehearsal.9 to sha1:149754d357901ec874eab6140e92bce3d8613085
Loaded attestation from GitHub API

✓ Verification succeeded! ts-aarch64-apple-darwin.spdx.json is present in release v0.0.0-rehearsal.9
+ for suffix in '' .spdx.json .provenance.sigstore.json .sbom.sigstore.json
+ gh release verify-asset v0.0.0-rehearsal.9 ts-aarch64-apple-darwin.provenance.sigstore.json --repo prk-Jr/trusted-server
Calculated digest for ts-aarch64-apple-darwin.provenance.sigstore.json: sha256:15830f2da77b2ff61083c817b1f59935634d1c2d158618106147ff602e11bf3b
Resolved tag v0.0.0-rehearsal.9 to sha1:149754d357901ec874eab6140e92bce3d8613085
Loaded attestation from GitHub API

✓ Verification succeeded! ts-aarch64-apple-darwin.provenance.sigstore.json is present in release v0.0.0-rehearsal.9
+ for suffix in '' .spdx.json .provenance.sigstore.json .sbom.sigstore.json
+ gh release verify-asset v0.0.0-rehearsal.9 ts-aarch64-apple-darwin.sbom.sigstore.json --repo prk-Jr/trusted-server
Calculated digest for ts-aarch64-apple-darwin.sbom.sigstore.json: sha256:ea46fd4d01afcb01f1293d962732bd15d291f9ec60bfdcc9f456976c87917216
Resolved tag v0.0.0-rehearsal.9 to sha1:149754d357901ec874eab6140e92bce3d8613085
Loaded attestation from GitHub API

✓ Verification succeeded! ts-aarch64-apple-darwin.sbom.sigstore.json is present in release v0.0.0-rehearsal.9
+ for kind in provenance sbom
+ predicate=https://slsa.dev/provenance/v1
+ [[ provenance == sbom ]]
+ checks=(--repo "$REPO" --bundle "$asset.$kind.sigstore.json" --source-ref "refs/tags/$TAG" --source-digest "$COMMIT" --signer-digest "$COMMIT" --deny-self-hosted-runners --predicate-type "$predicate")
+ gh attestation verify ts-aarch64-apple-darwin --repo prk-Jr/trusted-server --bundle ts-aarch64-apple-darwin.provenance.sigstore.json --source-ref refs/tags/v0.0.0-rehearsal.9 --source-digest 149754d357901ec874eab6140e92bce3d8613085 --signer-digest 149754d357901ec874eab6140e92bce3d8613085 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
+ gh attestation verify ts-aarch64-apple-darwin --repo prk-Jr/trusted-server --bundle ts-aarch64-apple-darwin.provenance.sigstore.json --source-ref refs/tags/v0.0.0-rehearsal.9 --source-digest 149754d357901ec874eab6140e92bce3d8613085 --signer-digest 149754d357901ec874eab6140e92bce3d8613085 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.9 --format json
+ echo 'SUCCESS: ts-aarch64-apple-darwin provenance verified with both exact signer identities and source pins'
SUCCESS: ts-aarch64-apple-darwin provenance verified with both exact signer identities and source pins
+ [[ provenance == sbom ]]
+ for kind in provenance sbom
+ predicate=https://slsa.dev/provenance/v1
+ [[ sbom == sbom ]]
+ predicate=https://spdx.dev/Document/v2.3
+ checks=(--repo "$REPO" --bundle "$asset.$kind.sigstore.json" --source-ref "refs/tags/$TAG" --source-digest "$COMMIT" --signer-digest "$COMMIT" --deny-self-hosted-runners --predicate-type "$predicate")
+ gh attestation verify ts-aarch64-apple-darwin --repo prk-Jr/trusted-server --bundle ts-aarch64-apple-darwin.sbom.sigstore.json --source-ref refs/tags/v0.0.0-rehearsal.9 --source-digest 149754d357901ec874eab6140e92bce3d8613085 --signer-digest 149754d357901ec874eab6140e92bce3d8613085 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
+ gh attestation verify ts-aarch64-apple-darwin --repo prk-Jr/trusted-server --bundle ts-aarch64-apple-darwin.sbom.sigstore.json --source-ref refs/tags/v0.0.0-rehearsal.9 --source-digest 149754d357901ec874eab6140e92bce3d8613085 --signer-digest 149754d357901ec874eab6140e92bce3d8613085 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.9 --format json
+ echo 'SUCCESS: ts-aarch64-apple-darwin sbom verified with both exact signer identities and source pins'
SUCCESS: ts-aarch64-apple-darwin sbom verified with both exact signer identities and source pins
+ [[ sbom == sbom ]]
+ jq -e --slurpfile document ts-aarch64-apple-darwin.spdx.json 'length == 1 and .[0].verificationResult.statement.predicate == $document[0]' ts-aarch64-apple-darwin.sbom.verified.json
true
+ echo 'SUCCESS: ts-aarch64-apple-darwin attested SPDX predicate equals published companion'
SUCCESS: ts-aarch64-apple-darwin attested SPDX predicate equals published companion
+ for asset in "${ASSETS[@]}"
+ for suffix in '' .spdx.json .provenance.sigstore.json .sbom.sigstore.json
+ gh release verify-asset v0.0.0-rehearsal.9 ts-x86_64-apple-darwin --repo prk-Jr/trusted-server
Calculated digest for ts-x86_64-apple-darwin: sha256:18b195caf41136d80722e6f9692679f9b05383569249d96a8e027705ec273464
Resolved tag v0.0.0-rehearsal.9 to sha1:149754d357901ec874eab6140e92bce3d8613085
Loaded attestation from GitHub API

✓ Verification succeeded! ts-x86_64-apple-darwin is present in release v0.0.0-rehearsal.9
+ for suffix in '' .spdx.json .provenance.sigstore.json .sbom.sigstore.json
+ gh release verify-asset v0.0.0-rehearsal.9 ts-x86_64-apple-darwin.spdx.json --repo prk-Jr/trusted-server
Calculated digest for ts-x86_64-apple-darwin.spdx.json: sha256:1db8a999611e33682a78c3b797b30a20f387dfe2aae63a834d378793eedef53d
Resolved tag v0.0.0-rehearsal.9 to sha1:149754d357901ec874eab6140e92bce3d8613085
Loaded attestation from GitHub API

✓ Verification succeeded! ts-x86_64-apple-darwin.spdx.json is present in release v0.0.0-rehearsal.9
+ for suffix in '' .spdx.json .provenance.sigstore.json .sbom.sigstore.json
+ gh release verify-asset v0.0.0-rehearsal.9 ts-x86_64-apple-darwin.provenance.sigstore.json --repo prk-Jr/trusted-server
Calculated digest for ts-x86_64-apple-darwin.provenance.sigstore.json: sha256:655310407d8b1c500285c34fde8e88d65cf9c2f3d334f175a9651d28c4ea1a48
Resolved tag v0.0.0-rehearsal.9 to sha1:149754d357901ec874eab6140e92bce3d8613085
Loaded attestation from GitHub API

✓ Verification succeeded! ts-x86_64-apple-darwin.provenance.sigstore.json is present in release v0.0.0-rehearsal.9
+ for suffix in '' .spdx.json .provenance.sigstore.json .sbom.sigstore.json
+ gh release verify-asset v0.0.0-rehearsal.9 ts-x86_64-apple-darwin.sbom.sigstore.json --repo prk-Jr/trusted-server
Calculated digest for ts-x86_64-apple-darwin.sbom.sigstore.json: sha256:0c27540e842e3ad785f6e378a03b8279a314d29fa597f5778887e72327a51e74
Resolved tag v0.0.0-rehearsal.9 to sha1:149754d357901ec874eab6140e92bce3d8613085
Loaded attestation from GitHub API

✓ Verification succeeded! ts-x86_64-apple-darwin.sbom.sigstore.json is present in release v0.0.0-rehearsal.9
+ for kind in provenance sbom
+ predicate=https://slsa.dev/provenance/v1
+ [[ provenance == sbom ]]
+ checks=(--repo "$REPO" --bundle "$asset.$kind.sigstore.json" --source-ref "refs/tags/$TAG" --source-digest "$COMMIT" --signer-digest "$COMMIT" --deny-self-hosted-runners --predicate-type "$predicate")
+ gh attestation verify ts-x86_64-apple-darwin --repo prk-Jr/trusted-server --bundle ts-x86_64-apple-darwin.provenance.sigstore.json --source-ref refs/tags/v0.0.0-rehearsal.9 --source-digest 149754d357901ec874eab6140e92bce3d8613085 --signer-digest 149754d357901ec874eab6140e92bce3d8613085 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
+ gh attestation verify ts-x86_64-apple-darwin --repo prk-Jr/trusted-server --bundle ts-x86_64-apple-darwin.provenance.sigstore.json --source-ref refs/tags/v0.0.0-rehearsal.9 --source-digest 149754d357901ec874eab6140e92bce3d8613085 --signer-digest 149754d357901ec874eab6140e92bce3d8613085 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.9 --format json
+ echo 'SUCCESS: ts-x86_64-apple-darwin provenance verified with both exact signer identities and source pins'
SUCCESS: ts-x86_64-apple-darwin provenance verified with both exact signer identities and source pins
+ [[ provenance == sbom ]]
+ for kind in provenance sbom
+ predicate=https://slsa.dev/provenance/v1
+ [[ sbom == sbom ]]
+ predicate=https://spdx.dev/Document/v2.3
+ checks=(--repo "$REPO" --bundle "$asset.$kind.sigstore.json" --source-ref "refs/tags/$TAG" --source-digest "$COMMIT" --signer-digest "$COMMIT" --deny-self-hosted-runners --predicate-type "$predicate")
+ gh attestation verify ts-x86_64-apple-darwin --repo prk-Jr/trusted-server --bundle ts-x86_64-apple-darwin.sbom.sigstore.json --source-ref refs/tags/v0.0.0-rehearsal.9 --source-digest 149754d357901ec874eab6140e92bce3d8613085 --signer-digest 149754d357901ec874eab6140e92bce3d8613085 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
+ gh attestation verify ts-x86_64-apple-darwin --repo prk-Jr/trusted-server --bundle ts-x86_64-apple-darwin.sbom.sigstore.json --source-ref refs/tags/v0.0.0-rehearsal.9 --source-digest 149754d357901ec874eab6140e92bce3d8613085 --signer-digest 149754d357901ec874eab6140e92bce3d8613085 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.9 --format json
+ echo 'SUCCESS: ts-x86_64-apple-darwin sbom verified with both exact signer identities and source pins'
SUCCESS: ts-x86_64-apple-darwin sbom verified with both exact signer identities and source pins
+ [[ sbom == sbom ]]
+ jq -e --slurpfile document ts-x86_64-apple-darwin.spdx.json 'length == 1 and .[0].verificationResult.statement.predicate == $document[0]' ts-x86_64-apple-darwin.sbom.verified.json
true
+ echo 'SUCCESS: ts-x86_64-apple-darwin attested SPDX predicate equals published companion'
SUCCESS: ts-x86_64-apple-darwin attested SPDX predicate equals published companion
+ for asset in "${ASSETS[@]}"
+ for suffix in '' .spdx.json .provenance.sigstore.json .sbom.sigstore.json
+ gh release verify-asset v0.0.0-rehearsal.9 trusted-server-axum-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server
Calculated digest for trusted-server-axum-x86_64-unknown-linux-gnu: sha256:fc29b83920e059628b941e5244e066c6d60ecb0c4385cad1c90d1248ba3d196a
Resolved tag v0.0.0-rehearsal.9 to sha1:149754d357901ec874eab6140e92bce3d8613085
Loaded attestation from GitHub API

✓ Verification succeeded! trusted-server-axum-x86_64-unknown-linux-gnu is present in release v0.0.0-rehearsal.9
+ for suffix in '' .spdx.json .provenance.sigstore.json .sbom.sigstore.json
+ gh release verify-asset v0.0.0-rehearsal.9 trusted-server-axum-x86_64-unknown-linux-gnu.spdx.json --repo prk-Jr/trusted-server
Calculated digest for trusted-server-axum-x86_64-unknown-linux-gnu.spdx.json: sha256:c04db9cfb49e5bffea71703e06ecf78e342fa8e06d90c78cbcd848de331b2520
Resolved tag v0.0.0-rehearsal.9 to sha1:149754d357901ec874eab6140e92bce3d8613085
Loaded attestation from GitHub API

✓ Verification succeeded! trusted-server-axum-x86_64-unknown-linux-gnu.spdx.json is present in release v0.0.0-rehearsal.9
+ for suffix in '' .spdx.json .provenance.sigstore.json .sbom.sigstore.json
+ gh release verify-asset v0.0.0-rehearsal.9 trusted-server-axum-x86_64-unknown-linux-gnu.provenance.sigstore.json --repo prk-Jr/trusted-server
Calculated digest for trusted-server-axum-x86_64-unknown-linux-gnu.provenance.sigstore.json: sha256:46d80582edd5d769fb0e52d30663bd5c3f1476d603a8017a68cec5ec4d8cfa3d
Resolved tag v0.0.0-rehearsal.9 to sha1:149754d357901ec874eab6140e92bce3d8613085
Loaded attestation from GitHub API

✓ Verification succeeded! trusted-server-axum-x86_64-unknown-linux-gnu.provenance.sigstore.json is present in release v0.0.0-rehearsal.9
+ for suffix in '' .spdx.json .provenance.sigstore.json .sbom.sigstore.json
+ gh release verify-asset v0.0.0-rehearsal.9 trusted-server-axum-x86_64-unknown-linux-gnu.sbom.sigstore.json --repo prk-Jr/trusted-server
Calculated digest for trusted-server-axum-x86_64-unknown-linux-gnu.sbom.sigstore.json: sha256:a6018cb031267c20d6698a7a8492e0c8a4902615ba31b3a63eb1431d6d95cf05
Resolved tag v0.0.0-rehearsal.9 to sha1:149754d357901ec874eab6140e92bce3d8613085
Loaded attestation from GitHub API

✓ Verification succeeded! trusted-server-axum-x86_64-unknown-linux-gnu.sbom.sigstore.json is present in release v0.0.0-rehearsal.9
+ for kind in provenance sbom
+ predicate=https://slsa.dev/provenance/v1
+ [[ provenance == sbom ]]
+ checks=(--repo "$REPO" --bundle "$asset.$kind.sigstore.json" --source-ref "refs/tags/$TAG" --source-digest "$COMMIT" --signer-digest "$COMMIT" --deny-self-hosted-runners --predicate-type "$predicate")
+ gh attestation verify trusted-server-axum-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --bundle trusted-server-axum-x86_64-unknown-linux-gnu.provenance.sigstore.json --source-ref refs/tags/v0.0.0-rehearsal.9 --source-digest 149754d357901ec874eab6140e92bce3d8613085 --signer-digest 149754d357901ec874eab6140e92bce3d8613085 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
+ gh attestation verify trusted-server-axum-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --bundle trusted-server-axum-x86_64-unknown-linux-gnu.provenance.sigstore.json --source-ref refs/tags/v0.0.0-rehearsal.9 --source-digest 149754d357901ec874eab6140e92bce3d8613085 --signer-digest 149754d357901ec874eab6140e92bce3d8613085 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.9 --format json
+ echo 'SUCCESS: trusted-server-axum-x86_64-unknown-linux-gnu provenance verified with both exact signer identities and source pins'
SUCCESS: trusted-server-axum-x86_64-unknown-linux-gnu provenance verified with both exact signer identities and source pins
+ [[ provenance == sbom ]]
+ for kind in provenance sbom
+ predicate=https://slsa.dev/provenance/v1
+ [[ sbom == sbom ]]
+ predicate=https://spdx.dev/Document/v2.3
+ checks=(--repo "$REPO" --bundle "$asset.$kind.sigstore.json" --source-ref "refs/tags/$TAG" --source-digest "$COMMIT" --signer-digest "$COMMIT" --deny-self-hosted-runners --predicate-type "$predicate")
+ gh attestation verify trusted-server-axum-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --bundle trusted-server-axum-x86_64-unknown-linux-gnu.sbom.sigstore.json --source-ref refs/tags/v0.0.0-rehearsal.9 --source-digest 149754d357901ec874eab6140e92bce3d8613085 --signer-digest 149754d357901ec874eab6140e92bce3d8613085 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
+ gh attestation verify trusted-server-axum-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --bundle trusted-server-axum-x86_64-unknown-linux-gnu.sbom.sigstore.json --source-ref refs/tags/v0.0.0-rehearsal.9 --source-digest 149754d357901ec874eab6140e92bce3d8613085 --signer-digest 149754d357901ec874eab6140e92bce3d8613085 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.9 --format json
+ echo 'SUCCESS: trusted-server-axum-x86_64-unknown-linux-gnu sbom verified with both exact signer identities and source pins'
SUCCESS: trusted-server-axum-x86_64-unknown-linux-gnu sbom verified with both exact signer identities and source pins
+ [[ sbom == sbom ]]
+ jq -e --slurpfile document trusted-server-axum-x86_64-unknown-linux-gnu.spdx.json 'length == 1 and .[0].verificationResult.statement.predicate == $document[0]' trusted-server-axum-x86_64-unknown-linux-gnu.sbom.verified.json
true
+ echo 'SUCCESS: trusted-server-axum-x86_64-unknown-linux-gnu attested SPDX predicate equals published companion'
SUCCESS: trusted-server-axum-x86_64-unknown-linux-gnu attested SPDX predicate equals published companion
+ for asset in "${ASSETS[@]}"
+ for suffix in '' .spdx.json .provenance.sigstore.json .sbom.sigstore.json
+ gh release verify-asset v0.0.0-rehearsal.9 trusted-server-axum-x86_64-unknown-linux-musl --repo prk-Jr/trusted-server
Calculated digest for trusted-server-axum-x86_64-unknown-linux-musl: sha256:c7e71bdb740426aef585e3c941e5bced5c155fe738f61550644fa2845d3b98f9
Resolved tag v0.0.0-rehearsal.9 to sha1:149754d357901ec874eab6140e92bce3d8613085
Loaded attestation from GitHub API

✓ Verification succeeded! trusted-server-axum-x86_64-unknown-linux-musl is present in release v0.0.0-rehearsal.9
+ for suffix in '' .spdx.json .provenance.sigstore.json .sbom.sigstore.json
+ gh release verify-asset v0.0.0-rehearsal.9 trusted-server-axum-x86_64-unknown-linux-musl.spdx.json --repo prk-Jr/trusted-server
Calculated digest for trusted-server-axum-x86_64-unknown-linux-musl.spdx.json: sha256:27285b8f26b14ff4c7609ce14e3875e11ecb1311ec35712f84842de176848691
Resolved tag v0.0.0-rehearsal.9 to sha1:149754d357901ec874eab6140e92bce3d8613085
Loaded attestation from GitHub API

✓ Verification succeeded! trusted-server-axum-x86_64-unknown-linux-musl.spdx.json is present in release v0.0.0-rehearsal.9
+ for suffix in '' .spdx.json .provenance.sigstore.json .sbom.sigstore.json
+ gh release verify-asset v0.0.0-rehearsal.9 trusted-server-axum-x86_64-unknown-linux-musl.provenance.sigstore.json --repo prk-Jr/trusted-server
Calculated digest for trusted-server-axum-x86_64-unknown-linux-musl.provenance.sigstore.json: sha256:2f74e810804abe6260f40bd227047cf3028cea84e7e154f327ff56a59cbae712
Resolved tag v0.0.0-rehearsal.9 to sha1:149754d357901ec874eab6140e92bce3d8613085
Loaded attestation from GitHub API

✓ Verification succeeded! trusted-server-axum-x86_64-unknown-linux-musl.provenance.sigstore.json is present in release v0.0.0-rehearsal.9
+ for suffix in '' .spdx.json .provenance.sigstore.json .sbom.sigstore.json
+ gh release verify-asset v0.0.0-rehearsal.9 trusted-server-axum-x86_64-unknown-linux-musl.sbom.sigstore.json --repo prk-Jr/trusted-server
Calculated digest for trusted-server-axum-x86_64-unknown-linux-musl.sbom.sigstore.json: sha256:3e292050df47c9d8e852a13878e4ca07c50050dfd299059fee5137685d8639b4
Resolved tag v0.0.0-rehearsal.9 to sha1:149754d357901ec874eab6140e92bce3d8613085
Loaded attestation from GitHub API

✓ Verification succeeded! trusted-server-axum-x86_64-unknown-linux-musl.sbom.sigstore.json is present in release v0.0.0-rehearsal.9
+ for kind in provenance sbom
+ predicate=https://slsa.dev/provenance/v1
+ [[ provenance == sbom ]]
+ checks=(--repo "$REPO" --bundle "$asset.$kind.sigstore.json" --source-ref "refs/tags/$TAG" --source-digest "$COMMIT" --signer-digest "$COMMIT" --deny-self-hosted-runners --predicate-type "$predicate")
+ gh attestation verify trusted-server-axum-x86_64-unknown-linux-musl --repo prk-Jr/trusted-server --bundle trusted-server-axum-x86_64-unknown-linux-musl.provenance.sigstore.json --source-ref refs/tags/v0.0.0-rehearsal.9 --source-digest 149754d357901ec874eab6140e92bce3d8613085 --signer-digest 149754d357901ec874eab6140e92bce3d8613085 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
+ gh attestation verify trusted-server-axum-x86_64-unknown-linux-musl --repo prk-Jr/trusted-server --bundle trusted-server-axum-x86_64-unknown-linux-musl.provenance.sigstore.json --source-ref refs/tags/v0.0.0-rehearsal.9 --source-digest 149754d357901ec874eab6140e92bce3d8613085 --signer-digest 149754d357901ec874eab6140e92bce3d8613085 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.9 --format json
+ echo 'SUCCESS: trusted-server-axum-x86_64-unknown-linux-musl provenance verified with both exact signer identities and source pins'
SUCCESS: trusted-server-axum-x86_64-unknown-linux-musl provenance verified with both exact signer identities and source pins
+ [[ provenance == sbom ]]
+ for kind in provenance sbom
+ predicate=https://slsa.dev/provenance/v1
+ [[ sbom == sbom ]]
+ predicate=https://spdx.dev/Document/v2.3
+ checks=(--repo "$REPO" --bundle "$asset.$kind.sigstore.json" --source-ref "refs/tags/$TAG" --source-digest "$COMMIT" --signer-digest "$COMMIT" --deny-self-hosted-runners --predicate-type "$predicate")
+ gh attestation verify trusted-server-axum-x86_64-unknown-linux-musl --repo prk-Jr/trusted-server --bundle trusted-server-axum-x86_64-unknown-linux-musl.sbom.sigstore.json --source-ref refs/tags/v0.0.0-rehearsal.9 --source-digest 149754d357901ec874eab6140e92bce3d8613085 --signer-digest 149754d357901ec874eab6140e92bce3d8613085 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
+ gh attestation verify trusted-server-axum-x86_64-unknown-linux-musl --repo prk-Jr/trusted-server --bundle trusted-server-axum-x86_64-unknown-linux-musl.sbom.sigstore.json --source-ref refs/tags/v0.0.0-rehearsal.9 --source-digest 149754d357901ec874eab6140e92bce3d8613085 --signer-digest 149754d357901ec874eab6140e92bce3d8613085 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.9 --format json
+ echo 'SUCCESS: trusted-server-axum-x86_64-unknown-linux-musl sbom verified with both exact signer identities and source pins'
SUCCESS: trusted-server-axum-x86_64-unknown-linux-musl sbom verified with both exact signer identities and source pins
+ [[ sbom == sbom ]]
+ jq -e --slurpfile document trusted-server-axum-x86_64-unknown-linux-musl.spdx.json 'length == 1 and .[0].verificationResult.statement.predicate == $document[0]' trusted-server-axum-x86_64-unknown-linux-musl.sbom.verified.json
true
+ echo 'SUCCESS: trusted-server-axum-x86_64-unknown-linux-musl attested SPDX predicate equals published companion'
SUCCESS: trusted-server-axum-x86_64-unknown-linux-musl attested SPDX predicate equals published companion
+ for asset in "${ASSETS[@]}"
+ for suffix in '' .spdx.json .provenance.sigstore.json .sbom.sigstore.json
+ gh release verify-asset v0.0.0-rehearsal.9 trusted-server-axum-aarch64-unknown-linux-gnu --repo prk-Jr/trusted-server
Calculated digest for trusted-server-axum-aarch64-unknown-linux-gnu: sha256:53e4db0197707f0eb9476bfc00daa66c70b0797e943eba60478637f089c378a3

@prk-Jr

prk-Jr commented Oct 23, 2026

Copy link
Copy Markdown
Collaborator Author

Rehearsal v0.0.0-rehearsal.9 at 149754d: passed. Fork run. Fresh lightweight tag; exact reviewed head; all seven builds/signing jobs and the publisher passed. The full independent verification also passed.

online transcript, part 2. Documented download, release/asset verification, checksums, all-seven bundle and online-store verification, both signer forms, both predicates and SPDX equality.

Resolved tag v0.0.0-rehearsal.9 to sha1:149754d357901ec874eab6140e92bce3d8613085
Loaded attestation from GitHub API

✓ Verification succeeded! trusted-server-axum-aarch64-unknown-linux-gnu is present in release v0.0.0-rehearsal.9
+ for suffix in '' .spdx.json .provenance.sigstore.json .sbom.sigstore.json
+ gh release verify-asset v0.0.0-rehearsal.9 trusted-server-axum-aarch64-unknown-linux-gnu.spdx.json --repo prk-Jr/trusted-server
Calculated digest for trusted-server-axum-aarch64-unknown-linux-gnu.spdx.json: sha256:d40d586d24f28cbc28493f5ae6f32c34398bfc921a0bcc8c96bcb5fd9aeb0118
Resolved tag v0.0.0-rehearsal.9 to sha1:149754d357901ec874eab6140e92bce3d8613085
Loaded attestation from GitHub API

✓ Verification succeeded! trusted-server-axum-aarch64-unknown-linux-gnu.spdx.json is present in release v0.0.0-rehearsal.9
+ for suffix in '' .spdx.json .provenance.sigstore.json .sbom.sigstore.json
+ gh release verify-asset v0.0.0-rehearsal.9 trusted-server-axum-aarch64-unknown-linux-gnu.provenance.sigstore.json --repo prk-Jr/trusted-server
Calculated digest for trusted-server-axum-aarch64-unknown-linux-gnu.provenance.sigstore.json: sha256:eee736489562e010d60937c3b9fc8ba2b921bbe1ccb5ec480479cb6233531a00
Resolved tag v0.0.0-rehearsal.9 to sha1:149754d357901ec874eab6140e92bce3d8613085
Loaded attestation from GitHub API

✓ Verification succeeded! trusted-server-axum-aarch64-unknown-linux-gnu.provenance.sigstore.json is present in release v0.0.0-rehearsal.9
+ for suffix in '' .spdx.json .provenance.sigstore.json .sbom.sigstore.json
+ gh release verify-asset v0.0.0-rehearsal.9 trusted-server-axum-aarch64-unknown-linux-gnu.sbom.sigstore.json --repo prk-Jr/trusted-server
Calculated digest for trusted-server-axum-aarch64-unknown-linux-gnu.sbom.sigstore.json: sha256:01b53644fbd0fb416f258ce3af0fe5b07cbd9e301b5716df046ae27184e7b49c
Resolved tag v0.0.0-rehearsal.9 to sha1:149754d357901ec874eab6140e92bce3d8613085
Loaded attestation from GitHub API

✓ Verification succeeded! trusted-server-axum-aarch64-unknown-linux-gnu.sbom.sigstore.json is present in release v0.0.0-rehearsal.9
+ for kind in provenance sbom
+ predicate=https://slsa.dev/provenance/v1
+ [[ provenance == sbom ]]
+ checks=(--repo "$REPO" --bundle "$asset.$kind.sigstore.json" --source-ref "refs/tags/$TAG" --source-digest "$COMMIT" --signer-digest "$COMMIT" --deny-self-hosted-runners --predicate-type "$predicate")
+ gh attestation verify trusted-server-axum-aarch64-unknown-linux-gnu --repo prk-Jr/trusted-server --bundle trusted-server-axum-aarch64-unknown-linux-gnu.provenance.sigstore.json --source-ref refs/tags/v0.0.0-rehearsal.9 --source-digest 149754d357901ec874eab6140e92bce3d8613085 --signer-digest 149754d357901ec874eab6140e92bce3d8613085 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
+ gh attestation verify trusted-server-axum-aarch64-unknown-linux-gnu --repo prk-Jr/trusted-server --bundle trusted-server-axum-aarch64-unknown-linux-gnu.provenance.sigstore.json --source-ref refs/tags/v0.0.0-rehearsal.9 --source-digest 149754d357901ec874eab6140e92bce3d8613085 --signer-digest 149754d357901ec874eab6140e92bce3d8613085 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.9 --format json
+ echo 'SUCCESS: trusted-server-axum-aarch64-unknown-linux-gnu provenance verified with both exact signer identities and source pins'
SUCCESS: trusted-server-axum-aarch64-unknown-linux-gnu provenance verified with both exact signer identities and source pins
+ [[ provenance == sbom ]]
+ for kind in provenance sbom
+ predicate=https://slsa.dev/provenance/v1
+ [[ sbom == sbom ]]
+ predicate=https://spdx.dev/Document/v2.3
+ checks=(--repo "$REPO" --bundle "$asset.$kind.sigstore.json" --source-ref "refs/tags/$TAG" --source-digest "$COMMIT" --signer-digest "$COMMIT" --deny-self-hosted-runners --predicate-type "$predicate")
+ gh attestation verify trusted-server-axum-aarch64-unknown-linux-gnu --repo prk-Jr/trusted-server --bundle trusted-server-axum-aarch64-unknown-linux-gnu.sbom.sigstore.json --source-ref refs/tags/v0.0.0-rehearsal.9 --source-digest 149754d357901ec874eab6140e92bce3d8613085 --signer-digest 149754d357901ec874eab6140e92bce3d8613085 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
+ gh attestation verify trusted-server-axum-aarch64-unknown-linux-gnu --repo prk-Jr/trusted-server --bundle trusted-server-axum-aarch64-unknown-linux-gnu.sbom.sigstore.json --source-ref refs/tags/v0.0.0-rehearsal.9 --source-digest 149754d357901ec874eab6140e92bce3d8613085 --signer-digest 149754d357901ec874eab6140e92bce3d8613085 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.9 --format json
+ echo 'SUCCESS: trusted-server-axum-aarch64-unknown-linux-gnu sbom verified with both exact signer identities and source pins'
SUCCESS: trusted-server-axum-aarch64-unknown-linux-gnu sbom verified with both exact signer identities and source pins
+ [[ sbom == sbom ]]
+ jq -e --slurpfile document trusted-server-axum-aarch64-unknown-linux-gnu.spdx.json 'length == 1 and .[0].verificationResult.statement.predicate == $document[0]' trusted-server-axum-aarch64-unknown-linux-gnu.sbom.verified.json
true
+ echo 'SUCCESS: trusted-server-axum-aarch64-unknown-linux-gnu attested SPDX predicate equals published companion'
SUCCESS: trusted-server-axum-aarch64-unknown-linux-gnu attested SPDX predicate equals published companion
+ gh release verify-asset v0.0.0-rehearsal.9 SHA256SUMS --repo prk-Jr/trusted-server
Calculated digest for SHA256SUMS: sha256:f15abb8ea2a6f97a55f33a3407f0041219a6de04dca911d05c0c51a5bab96dfa
Resolved tag v0.0.0-rehearsal.9 to sha1:149754d357901ec874eab6140e92bce3d8613085
Loaded attestation from GitHub API

✓ Verification succeeded! SHA256SUMS is present in release v0.0.0-rehearsal.9
+ shasum -a 256 --check SHA256SUMS
trusted-server-axum-x86_64-unknown-linux-gnu: OK
trusted-server-axum-x86_64-unknown-linux-gnu.spdx.json: OK
trusted-server-axum-x86_64-unknown-linux-gnu.provenance.sigstore.json: OK
trusted-server-axum-x86_64-unknown-linux-gnu.sbom.sigstore.json: OK
trusted-server-axum-x86_64-unknown-linux-musl: OK
trusted-server-axum-x86_64-unknown-linux-musl.spdx.json: OK
trusted-server-axum-x86_64-unknown-linux-musl.provenance.sigstore.json: OK
trusted-server-axum-x86_64-unknown-linux-musl.sbom.sigstore.json: OK
trusted-server-axum-aarch64-unknown-linux-gnu: OK
trusted-server-axum-aarch64-unknown-linux-gnu.spdx.json: OK
trusted-server-axum-aarch64-unknown-linux-gnu.provenance.sigstore.json: OK
trusted-server-axum-aarch64-unknown-linux-gnu.sbom.sigstore.json: OK
trusted-server-fastly.wasm: OK
trusted-server-fastly.wasm.spdx.json: OK
trusted-server-fastly.wasm.provenance.sigstore.json: OK
trusted-server-fastly.wasm.sbom.sigstore.json: OK
ts-aarch64-apple-darwin: OK
ts-aarch64-apple-darwin.spdx.json: OK
ts-aarch64-apple-darwin.provenance.sigstore.json: OK
ts-aarch64-apple-darwin.sbom.sigstore.json: OK
ts-x86_64-apple-darwin: OK
ts-x86_64-apple-darwin.spdx.json: OK
ts-x86_64-apple-darwin.provenance.sigstore.json: OK
ts-x86_64-apple-darwin.sbom.sigstore.json: OK
ts-x86_64-unknown-linux-gnu: OK
ts-x86_64-unknown-linux-gnu.spdx.json: OK
ts-x86_64-unknown-linux-gnu.provenance.sigstore.json: OK
ts-x86_64-unknown-linux-gnu.sbom.sigstore.json: OK
+ for asset in "${ASSETS[@]}"
+ for kind in provenance sbom
+ predicate=https://slsa.dev/provenance/v1
+ [[ provenance == sbom ]]
+ checks=(--repo "$REPO" --source-ref "refs/tags/$TAG" --source-digest "$COMMIT" --signer-digest "$COMMIT" --deny-self-hosted-runners --predicate-type "$predicate")
+ gh attestation verify trusted-server-fastly.wasm --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.9 --source-digest 149754d357901ec874eab6140e92bce3d8613085 --signer-digest 149754d357901ec874eab6140e92bce3d8613085 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
+ gh attestation verify trusted-server-fastly.wasm --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.9 --source-digest 149754d357901ec874eab6140e92bce3d8613085 --signer-digest 149754d357901ec874eab6140e92bce3d8613085 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.9 --format json
+ [[ provenance == sbom ]]
+ echo 'SUCCESS: trusted-server-fastly.wasm provenance verified online WITHOUT --bundle using both exact signer identities and source pins'
SUCCESS: trusted-server-fastly.wasm provenance verified online WITHOUT --bundle using both exact signer identities and source pins
+ for kind in provenance sbom
+ predicate=https://slsa.dev/provenance/v1
+ [[ sbom == sbom ]]
+ predicate=https://spdx.dev/Document/v2.3
+ checks=(--repo "$REPO" --source-ref "refs/tags/$TAG" --source-digest "$COMMIT" --signer-digest "$COMMIT" --deny-self-hosted-runners --predicate-type "$predicate")
+ gh attestation verify trusted-server-fastly.wasm --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.9 --source-digest 149754d357901ec874eab6140e92bce3d8613085 --signer-digest 149754d357901ec874eab6140e92bce3d8613085 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
+ gh attestation verify trusted-server-fastly.wasm --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.9 --source-digest 149754d357901ec874eab6140e92bce3d8613085 --signer-digest 149754d357901ec874eab6140e92bce3d8613085 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.9 --format json
+ [[ sbom == sbom ]]
+ jq -e --slurpfile document trusted-server-fastly.wasm.spdx.json 'length == 1 and .[0].verificationResult.statement.predicate == $document[0]' trusted-server-fastly.wasm.sbom.online-store.json
true
+ echo 'SUCCESS: trusted-server-fastly.wasm sbom verified online WITHOUT --bundle using both exact signer identities and source pins'
SUCCESS: trusted-server-fastly.wasm sbom verified online WITHOUT --bundle using both exact signer identities and source pins
+ for asset in "${ASSETS[@]}"
+ for kind in provenance sbom
+ predicate=https://slsa.dev/provenance/v1
+ [[ provenance == sbom ]]
+ checks=(--repo "$REPO" --source-ref "refs/tags/$TAG" --source-digest "$COMMIT" --signer-digest "$COMMIT" --deny-self-hosted-runners --predicate-type "$predicate")
+ gh attestation verify ts-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.9 --source-digest 149754d357901ec874eab6140e92bce3d8613085 --signer-digest 149754d357901ec874eab6140e92bce3d8613085 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
+ gh attestation verify ts-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.9 --source-digest 149754d357901ec874eab6140e92bce3d8613085 --signer-digest 149754d357901ec874eab6140e92bce3d8613085 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.9 --format json
+ [[ provenance == sbom ]]
+ echo 'SUCCESS: ts-x86_64-unknown-linux-gnu provenance verified online WITHOUT --bundle using both exact signer identities and source pins'
SUCCESS: ts-x86_64-unknown-linux-gnu provenance verified online WITHOUT --bundle using both exact signer identities and source pins
+ for kind in provenance sbom
+ predicate=https://slsa.dev/provenance/v1
+ [[ sbom == sbom ]]
+ predicate=https://spdx.dev/Document/v2.3
+ checks=(--repo "$REPO" --source-ref "refs/tags/$TAG" --source-digest "$COMMIT" --signer-digest "$COMMIT" --deny-self-hosted-runners --predicate-type "$predicate")
+ gh attestation verify ts-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.9 --source-digest 149754d357901ec874eab6140e92bce3d8613085 --signer-digest 149754d357901ec874eab6140e92bce3d8613085 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
+ gh attestation verify ts-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.9 --source-digest 149754d357901ec874eab6140e92bce3d8613085 --signer-digest 149754d357901ec874eab6140e92bce3d8613085 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.9 --format json
+ [[ sbom == sbom ]]
+ jq -e --slurpfile document ts-x86_64-unknown-linux-gnu.spdx.json 'length == 1 and .[0].verificationResult.statement.predicate == $document[0]' ts-x86_64-unknown-linux-gnu.sbom.online-store.json
true
+ echo 'SUCCESS: ts-x86_64-unknown-linux-gnu sbom verified online WITHOUT --bundle using both exact signer identities and source pins'
SUCCESS: ts-x86_64-unknown-linux-gnu sbom verified online WITHOUT --bundle using both exact signer identities and source pins
+ for asset in "${ASSETS[@]}"
+ for kind in provenance sbom
+ predicate=https://slsa.dev/provenance/v1
+ [[ provenance == sbom ]]
+ checks=(--repo "$REPO" --source-ref "refs/tags/$TAG" --source-digest "$COMMIT" --signer-digest "$COMMIT" --deny-self-hosted-runners --predicate-type "$predicate")
+ gh attestation verify ts-aarch64-apple-darwin --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.9 --source-digest 149754d357901ec874eab6140e92bce3d8613085 --signer-digest 149754d357901ec874eab6140e92bce3d8613085 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
+ gh attestation verify ts-aarch64-apple-darwin --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.9 --source-digest 149754d357901ec874eab6140e92bce3d8613085 --signer-digest 149754d357901ec874eab6140e92bce3d8613085 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.9 --format json
+ [[ provenance == sbom ]]
+ echo 'SUCCESS: ts-aarch64-apple-darwin provenance verified online WITHOUT --bundle using both exact signer identities and source pins'
SUCCESS: ts-aarch64-apple-darwin provenance verified online WITHOUT --bundle using both exact signer identities and source pins
+ for kind in provenance sbom
+ predicate=https://slsa.dev/provenance/v1
+ [[ sbom == sbom ]]
+ predicate=https://spdx.dev/Document/v2.3
+ checks=(--repo "$REPO" --source-ref "refs/tags/$TAG" --source-digest "$COMMIT" --signer-digest "$COMMIT" --deny-self-hosted-runners --predicate-type "$predicate")
+ gh attestation verify ts-aarch64-apple-darwin --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.9 --source-digest 149754d357901ec874eab6140e92bce3d8613085 --signer-digest 149754d357901ec874eab6140e92bce3d8613085 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
+ gh attestation verify ts-aarch64-apple-darwin --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.9 --source-digest 149754d357901ec874eab6140e92bce3d8613085 --signer-digest 149754d357901ec874eab6140e92bce3d8613085 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.9 --format json
+ [[ sbom == sbom ]]
+ jq -e --slurpfile document ts-aarch64-apple-darwin.spdx.json 'length == 1 and .[0].verificationResult.statement.predicate == $document[0]' ts-aarch64-apple-darwin.sbom.online-store.json
true
+ echo 'SUCCESS: ts-aarch64-apple-darwin sbom verified online WITHOUT --bundle using both exact signer identities and source pins'
SUCCESS: ts-aarch64-apple-darwin sbom verified online WITHOUT --bundle using both exact signer identities and source pins
+ for asset in "${ASSETS[@]}"
+ for kind in provenance sbom
+ predicate=https://slsa.dev/provenance/v1
+ [[ provenance == sbom ]]
+ checks=(--repo "$REPO" --source-ref "refs/tags/$TAG" --source-digest "$COMMIT" --signer-digest "$COMMIT" --deny-self-hosted-runners --predicate-type "$predicate")
+ gh attestation verify ts-x86_64-apple-darwin --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.9 --source-digest 149754d357901ec874eab6140e92bce3d8613085 --signer-digest 149754d357901ec874eab6140e92bce3d8613085 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
+ gh attestation verify ts-x86_64-apple-darwin --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.9 --source-digest 149754d357901ec874eab6140e92bce3d8613085 --signer-digest 149754d357901ec874eab6140e92bce3d8613085 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.9 --format json
+ [[ provenance == sbom ]]
+ echo 'SUCCESS: ts-x86_64-apple-darwin provenance verified online WITHOUT --bundle using both exact signer identities and source pins'
SUCCESS: ts-x86_64-apple-darwin provenance verified online WITHOUT --bundle using both exact signer identities and source pins
+ for kind in provenance sbom
+ predicate=https://slsa.dev/provenance/v1
+ [[ sbom == sbom ]]
+ predicate=https://spdx.dev/Document/v2.3
+ checks=(--repo "$REPO" --source-ref "refs/tags/$TAG" --source-digest "$COMMIT" --signer-digest "$COMMIT" --deny-self-hosted-runners --predicate-type "$predicate")
+ gh attestation verify ts-x86_64-apple-darwin --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.9 --source-digest 149754d357901ec874eab6140e92bce3d8613085 --signer-digest 149754d357901ec874eab6140e92bce3d8613085 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
+ gh attestation verify ts-x86_64-apple-darwin --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.9 --source-digest 149754d357901ec874eab6140e92bce3d8613085 --signer-digest 149754d357901ec874eab6140e92bce3d8613085 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.9 --format json
+ [[ sbom == sbom ]]
+ jq -e --slurpfile document ts-x86_64-apple-darwin.spdx.json 'length == 1 and .[0].verificationResult.statement.predicate == $document[0]' ts-x86_64-apple-darwin.sbom.online-store.json
true
+ echo 'SUCCESS: ts-x86_64-apple-darwin sbom verified online WITHOUT --bundle using both exact signer identities and source pins'
SUCCESS: ts-x86_64-apple-darwin sbom verified online WITHOUT --bundle using both exact signer identities and source pins
+ for asset in "${ASSETS[@]}"
+ for kind in provenance sbom
+ predicate=https://slsa.dev/provenance/v1
+ [[ provenance == sbom ]]
+ checks=(--repo "$REPO" --source-ref "refs/tags/$TAG" --source-digest "$COMMIT" --signer-digest "$COMMIT" --deny-self-hosted-runners --predicate-type "$predicate")
+ gh attestation verify trusted-server-axum-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.9 --source-digest 149754d357901ec874eab6140e92bce3d8613085 --signer-digest 149754d357901ec874eab6140e92bce3d8613085 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
+ gh attestation verify trusted-server-axum-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.9 --source-digest 149754d357901ec874eab6140e92bce3d8613085 --signer-digest 149754d357901ec874eab6140e92bce3d8613085 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.9 --format json
+ [[ provenance == sbom ]]
+ echo 'SUCCESS: trusted-server-axum-x86_64-unknown-linux-gnu provenance verified online WITHOUT --bundle using both exact signer identities and source pins'
SUCCESS: trusted-server-axum-x86_64-unknown-linux-gnu provenance verified online WITHOUT --bundle using both exact signer identities and source pins
+ for kind in provenance sbom
+ predicate=https://slsa.dev/provenance/v1
+ [[ sbom == sbom ]]
+ predicate=https://spdx.dev/Document/v2.3
+ checks=(--repo "$REPO" --source-ref "refs/tags/$TAG" --source-digest "$COMMIT" --signer-digest "$COMMIT" --deny-self-hosted-runners --predicate-type "$predicate")
+ gh attestation verify trusted-server-axum-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.9 --source-digest 149754d357901ec874eab6140e92bce3d8613085 --signer-digest 149754d357901ec874eab6140e92bce3d8613085 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
+ gh attestation verify trusted-server-axum-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.9 --source-digest 149754d357901ec874eab6140e92bce3d8613085 --signer-digest 149754d357901ec874eab6140e92bce3d8613085 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.9 --format json
+ [[ sbom == sbom ]]
+ jq -e --slurpfile document trusted-server-axum-x86_64-unknown-linux-gnu.spdx.json 'length == 1 and .[0].verificationResult.statement.predicate == $document[0]' trusted-server-axum-x86_64-unknown-linux-gnu.sbom.online-store.json
true
+ echo 'SUCCESS: trusted-server-axum-x86_64-unknown-linux-gnu sbom verified online WITHOUT --bundle using both exact signer identities and source pins'
SUCCESS: trusted-server-axum-x86_64-unknown-linux-gnu sbom verified online WITHOUT --bundle using both exact signer identities and source pins
+ for asset in "${ASSETS[@]}"
+ for kind in provenance sbom
+ predicate=https://slsa.dev/provenance/v1
+ [[ provenance == sbom ]]
+ checks=(--repo "$REPO" --source-ref "refs/tags/$TAG" --source-digest "$COMMIT" --signer-digest "$COMMIT" --deny-self-hosted-runners --predicate-type "$predicate")
+ gh attestation verify trusted-server-axum-x86_64-unknown-linux-musl --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.9 --source-digest 149754d357901ec874eab6140e92bce3d8613085 --signer-digest 149754d357901ec874eab6140e92bce3d8613085 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
+ gh attestation verify trusted-server-axum-x86_64-unknown-linux-musl --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.9 --source-digest 149754d357901ec874eab6140e92bce3d8613085 --signer-digest 149754d357901ec874eab6140e92bce3d8613085 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.9 --format json
+ [[ provenance == sbom ]]
+ echo 'SUCCESS: trusted-server-axum-x86_64-unknown-linux-musl provenance verified online WITHOUT --bundle using both exact signer identities and source pins'
SUCCESS: trusted-server-axum-x86_64-unknown-linux-musl provenance verified online WITHOUT --bundle using both exact signer identities and source pins
+ for kind in provenance sbom
+ predicate=https://slsa.dev/provenance/v1
+ [[ sbom == sbom ]]
+ predicate=https://spdx.dev/Document/v2.3
+ checks=(--repo "$REPO" --source-ref "refs/tags/$TAG" --source-digest "$COMMIT" --signer-digest "$COMMIT" --deny-self-hosted-runners --predicate-type "$predicate")
+ gh attestation verify trusted-server-axum-x86_64-unknown-linux-musl --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.9 --source-digest 149754d357901ec874eab6140e92bce3d8613085 --signer-digest 149754d357901ec874eab6140e92bce3d8613085 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
+ gh attestation verify trusted-server-axum-x86_64-unknown-linux-musl --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.9 --source-digest 149754d357901ec874eab6140e92bce3d8613085 --signer-digest 149754d357901ec874eab6140e92bce3d8613085 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.9 --format json
+ [[ sbom == sbom ]]
+ jq -e --slurpfile document trusted-server-axum-x86_64-unknown-linux-musl.spdx.json 'length == 1 and .[0].verificationResult.statement.predicate == $document[0]' trusted-server-axum-x86_64-unknown-linux-musl.sbom.online-store.json
true
+ echo 'SUCCESS: trusted-server-axum-x86_64-unknown-linux-musl sbom verified online WITHOUT --bundle using both exact signer identities and source pins'
SUCCESS: trusted-server-axum-x86_64-unknown-linux-musl sbom verified online WITHOUT --bundle using both exact signer identities and source pins
+ for asset in "${ASSETS[@]}"
+ for kind in provenance sbom
+ predicate=https://slsa.dev/provenance/v1
+ [[ provenance == sbom ]]
+ checks=(--repo "$REPO" --source-ref "refs/tags/$TAG" --source-digest "$COMMIT" --signer-digest "$COMMIT" --deny-self-hosted-runners --predicate-type "$predicate")
+ gh attestation verify trusted-server-axum-aarch64-unknown-linux-gnu --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.9 --source-digest 149754d357901ec874eab6140e92bce3d8613085 --signer-digest 149754d357901ec874eab6140e92bce3d8613085 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
+ gh attestation verify trusted-server-axum-aarch64-unknown-linux-gnu --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.9 --source-digest 149754d357901ec874eab6140e92bce3d8613085 --signer-digest 149754d357901ec874eab6140e92bce3d8613085 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.9 --format json
+ [[ provenance == sbom ]]
+ echo 'SUCCESS: trusted-server-axum-aarch64-unknown-linux-gnu provenance verified online WITHOUT --bundle using both exact signer identities and source pins'
SUCCESS: trusted-server-axum-aarch64-unknown-linux-gnu provenance verified online WITHOUT --bundle using both exact signer identities and source pins
+ for kind in provenance sbom
+ predicate=https://slsa.dev/provenance/v1
+ [[ sbom == sbom ]]
+ predicate=https://spdx.dev/Document/v2.3
+ checks=(--repo "$REPO" --source-ref "refs/tags/$TAG" --source-digest "$COMMIT" --signer-digest "$COMMIT" --deny-self-hosted-runners --predicate-type "$predicate")
+ gh attestation verify trusted-server-axum-aarch64-unknown-linux-gnu --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.9 --source-digest 149754d357901ec874eab6140e92bce3d8613085 --signer-digest 149754d357901ec874eab6140e92bce3d8613085 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
+ gh attestation verify trusted-server-axum-aarch64-unknown-linux-gnu --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.9 --source-digest 149754d357901ec874eab6140e92bce3d8613085 --signer-digest 149754d357901ec874eab6140e92bce3d8613085 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.9 --format json
+ [[ sbom == sbom ]]
+ jq -e --slurpfile document trusted-server-axum-aarch64-unknown-linux-gnu.spdx.json 'length == 1 and .[0].verificationResult.statement.predicate == $document[0]' trusted-server-axum-aarch64-unknown-linux-gnu.sbom.online-store.json
true
+ echo 'SUCCESS: trusted-server-axum-aarch64-unknown-linux-gnu sbom verified online WITHOUT --bundle using both exact signer identities and source pins'
SUCCESS: trusted-server-axum-aarch64-unknown-linux-gnu sbom verified online WITHOUT --bundle using both exact signer identities and source pins
+ for asset in ts-aarch64-apple-darwin ts-x86_64-apple-darwin
++ /usr/bin/vtool -show-build ts-aarch64-apple-darwin
+ metadata='ts-aarch64-apple-darwin:
Load command 11
      cmd LC_BUILD_VERSION
  cmdsize 32
 platform MACOS
    minos 13.0
      sdk 15.5
   ntools 1
     tool LD
  version 1167.5'
+ printf '%s\n' 'ts-aarch64-apple-darwin:
Load command 11
      cmd LC_BUILD_VERSION
  cmdsize 32
 platform MACOS
    minos 13.0
      sdk 15.5
   ntools 1
     tool LD
  version 1167.5'
ts-aarch64-apple-darwin:
Load command 11
      cmd LC_BUILD_VERSION
  cmdsize 32
 platform MACOS
    minos 13.0
      sdk 15.5
   ntools 1
     tool LD
  version 1167.5
++ printf '%s\n' 'ts-aarch64-apple-darwin:
Load command 11
      cmd LC_BUILD_VERSION
  cmdsize 32
 platform MACOS
    minos 13.0
      sdk 15.5
   ntools 1
     tool LD
  version 1167.5'
++ awk '$1 == "minos" { print $2 }'
+ test 13.0 = 13.0
+ echo 'SUCCESS: ts-aarch64-apple-darwin minimum macOS is exactly 13.0'
SUCCESS: ts-aarch64-apple-darwin minimum macOS is exactly 13.0
+ for asset in ts-aarch64-apple-darwin ts-x86_64-apple-darwin
++ /usr/bin/vtool -show-build ts-x86_64-apple-darwin
+ metadata='ts-x86_64-apple-darwin:
Load command 11
      cmd LC_BUILD_VERSION
  cmdsize 32
 platform MACOS
    minos 13.0
      sdk 15.5
   ntools 1
     tool LD
  version 1167.5'
+ printf '%s\n' 'ts-x86_64-apple-darwin:
Load command 11
      cmd LC_BUILD_VERSION
  cmdsize 32
 platform MACOS
    minos 13.0
      sdk 15.5
   ntools 1
     tool LD
  version 1167.5'
ts-x86_64-apple-darwin:
Load command 11
      cmd LC_BUILD_VERSION
  cmdsize 32
 platform MACOS
    minos 13.0
      sdk 15.5
   ntools 1
     tool LD
  version 1167.5
++ printf '%s\n' 'ts-x86_64-apple-darwin:
Load command 11
      cmd LC_BUILD_VERSION
  cmdsize 32
 platform MACOS
    minos 13.0
      sdk 15.5
   ntools 1
     tool LD
  version 1167.5'
++ awk '$1 == "minos" { print $2 }'
+ test 13.0 = 13.0
+ echo 'SUCCESS: ts-x86_64-apple-darwin minimum macOS is exactly 13.0'
SUCCESS: ts-x86_64-apple-darwin minimum macOS is exactly 13.0
+ chmod u+x ts-aarch64-apple-darwin
+ ./ts-aarch64-apple-darwin --version
ts package=0.1.0 source=149754d357901ec874eab6140e92bce3d8613085 target=aarch64-apple-darwin variant=default
++ ./ts-aarch64-apple-darwin --version
+ test 'ts package=0.1.0 source=149754d357901ec874eab6140e92bce3d8613085 target=aarch64-apple-darwin variant=default' = 'ts package=0.1.0 source=149754d357901ec874eab6140e92bce3d8613085 target=aarch64-apple-darwin variant=default'
+ echo 'SUCCESS: CLI package/source/target/variant exactly match the approved release source'
SUCCESS: CLI package/source/target/variant exactly match the approved release source
+ echo 'SUCCESS: release, all 29 assets, 28 checksums, both predicates, both signer identities, bundle verification, all-seven online store lookup and SPDX comparisons passed'
SUCCESS: release, all 29 assets, 28 checksums, both predicates, both signer identities, bundle verification, all-seven online store lookup and SPDX comparisons passed

@prk-Jr

prk-Jr commented Oct 23, 2026

Copy link
Copy Markdown
Collaborator Author

Rehearsal v0.0.0-rehearsal.9 at 149754d: passed. Fork run. Fresh lightweight tag; exact reviewed head; all seven builds/signing jobs and the publisher passed. The full independent verification also passed.

offline transcript, part 1. Pinned gh 2.102.0. Trust-root SHA-256: 65ca537f6ed8a47fd0e560c421baa1f6c1efb8b25fc200d8c5c02c0e92eb2b9c. Independent binary pins derive from the cryptographically verified release attestation, separately from the downloaded SHA256SUMS. OS sandbox denied networking including the control request.

53e4db0197707f0eb9476bfc00daa66c70b0797e943eba60478637f089c378a3  trusted-server-axum-aarch64-unknown-linux-gnu
fc29b83920e059628b941e5244e066c6d60ecb0c4385cad1c90d1248ba3d196a  trusted-server-axum-x86_64-unknown-linux-gnu
c7e71bdb740426aef585e3c941e5bced5c155fe738f61550644fa2845d3b98f9  trusted-server-axum-x86_64-unknown-linux-musl
78219e03834c0e7617ac5f97308d2b225867ac9c7755767cf417d2251cc0bc2c  trusted-server-fastly.wasm
5081f63ede44079a0c53123fdccc480b9bd3013406d0c2efe79b1eba44c66b10  ts-aarch64-apple-darwin
18b195caf41136d80722e6f9692679f9b05383569249d96a8e027705ec273464  ts-x86_64-apple-darwin
d342f1a5284049cb9055f665261c25844ad219339b25b3e87b9b4bdbe2e0f219  ts-x86_64-unknown-linux-gnu

SUCCESS: OS sandbox denied the network control
+ REPO=prk-Jr/trusted-server
+ TAG=v0.0.0-rehearsal.9
+ COMMIT=149754d357901ec874eab6140e92bce3d8613085
+ WORKFLOW=prk-Jr/trusted-server/.github/workflows/release-build.yml
+ IDENTITY=https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.9
+ ASSETS=(trusted-server-fastly.wasm ts-x86_64-unknown-linux-gnu ts-aarch64-apple-darwin ts-x86_64-apple-darwin trusted-server-axum-x86_64-unknown-linux-gnu trusted-server-axum-x86_64-unknown-linux-musl trusted-server-axum-aarch64-unknown-linux-gnu)
+ shasum -a 256 --check APPROVED_BINARY_SHA256SUMS
trusted-server-axum-aarch64-unknown-linux-gnu: OK
trusted-server-axum-x86_64-unknown-linux-gnu: OK
trusted-server-axum-x86_64-unknown-linux-musl: OK
trusted-server-fastly.wasm: OK
ts-aarch64-apple-darwin: OK
ts-x86_64-apple-darwin: OK
ts-x86_64-unknown-linux-gnu: OK
+ for asset in "${ASSETS[@]}"
+ for kind in provenance sbom
+ predicate=https://slsa.dev/provenance/v1
+ [[ provenance == sbom ]]
+ checks=(--repo "$REPO" --bundle "$asset.$kind.sigstore.json" --custom-trusted-root trusted_root.jsonl --source-ref "refs/tags/$TAG" --source-digest "$COMMIT" --signer-digest "$COMMIT" --deny-self-hosted-runners --predicate-type "$predicate")
+ gh attestation verify trusted-server-fastly.wasm --repo prk-Jr/trusted-server --bundle trusted-server-fastly.wasm.provenance.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.9 --source-digest 149754d357901ec874eab6140e92bce3d8613085 --signer-digest 149754d357901ec874eab6140e92bce3d8613085 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
+ command gh attestation verify trusted-server-fastly.wasm --repo prk-Jr/trusted-server --bundle trusted-server-fastly.wasm.provenance.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.9 --source-digest 149754d357901ec874eab6140e92bce3d8613085 --signer-digest 149754d357901ec874eab6140e92bce3d8613085 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
+ [[ attestation verify == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ printf 'SUCCESS: gh attestation verify %s with requested predicate, signer and source pins\n' trusted-server-fastly.wasm
SUCCESS: gh attestation verify trusted-server-fastly.wasm with requested predicate, signer and source pins
+ gh attestation verify trusted-server-fastly.wasm --repo prk-Jr/trusted-server --bundle trusted-server-fastly.wasm.provenance.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.9 --source-digest 149754d357901ec874eab6140e92bce3d8613085 --signer-digest 149754d357901ec874eab6140e92bce3d8613085 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.9 --format json
+ command gh attestation verify trusted-server-fastly.wasm --repo prk-Jr/trusted-server --bundle trusted-server-fastly.wasm.provenance.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.9 --source-digest 149754d357901ec874eab6140e92bce3d8613085 --signer-digest 149754d357901ec874eab6140e92bce3d8613085 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.9 --format json
+ [[ attestation verify == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ printf 'SUCCESS: gh attestation verify %s with requested predicate, signer and source pins\n' trusted-server-fastly.wasm
SUCCESS: gh attestation verify trusted-server-fastly.wasm with requested predicate, signer and source pins
+ [[ provenance == sbom ]]
+ for kind in provenance sbom
+ predicate=https://slsa.dev/provenance/v1
+ [[ sbom == sbom ]]
+ predicate=https://spdx.dev/Document/v2.3
+ checks=(--repo "$REPO" --bundle "$asset.$kind.sigstore.json" --custom-trusted-root trusted_root.jsonl --source-ref "refs/tags/$TAG" --source-digest "$COMMIT" --signer-digest "$COMMIT" --deny-self-hosted-runners --predicate-type "$predicate")
+ gh attestation verify trusted-server-fastly.wasm --repo prk-Jr/trusted-server --bundle trusted-server-fastly.wasm.sbom.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.9 --source-digest 149754d357901ec874eab6140e92bce3d8613085 --signer-digest 149754d357901ec874eab6140e92bce3d8613085 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
+ command gh attestation verify trusted-server-fastly.wasm --repo prk-Jr/trusted-server --bundle trusted-server-fastly.wasm.sbom.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.9 --source-digest 149754d357901ec874eab6140e92bce3d8613085 --signer-digest 149754d357901ec874eab6140e92bce3d8613085 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
+ [[ attestation verify == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ printf 'SUCCESS: gh attestation verify %s with requested predicate, signer and source pins\n' trusted-server-fastly.wasm
SUCCESS: gh attestation verify trusted-server-fastly.wasm with requested predicate, signer and source pins
+ gh attestation verify trusted-server-fastly.wasm --repo prk-Jr/trusted-server --bundle trusted-server-fastly.wasm.sbom.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.9 --source-digest 149754d357901ec874eab6140e92bce3d8613085 --signer-digest 149754d357901ec874eab6140e92bce3d8613085 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.9 --format json
+ command gh attestation verify trusted-server-fastly.wasm --repo prk-Jr/trusted-server --bundle trusted-server-fastly.wasm.sbom.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.9 --source-digest 149754d357901ec874eab6140e92bce3d8613085 --signer-digest 149754d357901ec874eab6140e92bce3d8613085 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.9 --format json
+ [[ attestation verify == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ printf 'SUCCESS: gh attestation verify %s with requested predicate, signer and source pins\n' trusted-server-fastly.wasm
SUCCESS: gh attestation verify trusted-server-fastly.wasm with requested predicate, signer and source pins
+ [[ sbom == sbom ]]
+ jq -e --slurpfile document trusted-server-fastly.wasm.spdx.json 'length == 1 and .[0].verificationResult.statement.predicate == $document[0]' trusted-server-fastly.wasm.offline-sbom-verification.json
true
+ for asset in "${ASSETS[@]}"
+ for kind in provenance sbom
+ predicate=https://slsa.dev/provenance/v1
+ [[ provenance == sbom ]]
+ checks=(--repo "$REPO" --bundle "$asset.$kind.sigstore.json" --custom-trusted-root trusted_root.jsonl --source-ref "refs/tags/$TAG" --source-digest "$COMMIT" --signer-digest "$COMMIT" --deny-self-hosted-runners --predicate-type "$predicate")
+ gh attestation verify ts-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --bundle ts-x86_64-unknown-linux-gnu.provenance.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.9 --source-digest 149754d357901ec874eab6140e92bce3d8613085 --signer-digest 149754d357901ec874eab6140e92bce3d8613085 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
+ command gh attestation verify ts-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --bundle ts-x86_64-unknown-linux-gnu.provenance.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.9 --source-digest 149754d357901ec874eab6140e92bce3d8613085 --signer-digest 149754d357901ec874eab6140e92bce3d8613085 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
+ [[ attestation verify == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ printf 'SUCCESS: gh attestation verify %s with requested predicate, signer and source pins\n' ts-x86_64-unknown-linux-gnu
SUCCESS: gh attestation verify ts-x86_64-unknown-linux-gnu with requested predicate, signer and source pins
+ gh attestation verify ts-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --bundle ts-x86_64-unknown-linux-gnu.provenance.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.9 --source-digest 149754d357901ec874eab6140e92bce3d8613085 --signer-digest 149754d357901ec874eab6140e92bce3d8613085 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.9 --format json
+ command gh attestation verify ts-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --bundle ts-x86_64-unknown-linux-gnu.provenance.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.9 --source-digest 149754d357901ec874eab6140e92bce3d8613085 --signer-digest 149754d357901ec874eab6140e92bce3d8613085 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.9 --format json
+ [[ attestation verify == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ printf 'SUCCESS: gh attestation verify %s with requested predicate, signer and source pins\n' ts-x86_64-unknown-linux-gnu
SUCCESS: gh attestation verify ts-x86_64-unknown-linux-gnu with requested predicate, signer and source pins
+ [[ provenance == sbom ]]
+ for kind in provenance sbom
+ predicate=https://slsa.dev/provenance/v1
+ [[ sbom == sbom ]]
+ predicate=https://spdx.dev/Document/v2.3
+ checks=(--repo "$REPO" --bundle "$asset.$kind.sigstore.json" --custom-trusted-root trusted_root.jsonl --source-ref "refs/tags/$TAG" --source-digest "$COMMIT" --signer-digest "$COMMIT" --deny-self-hosted-runners --predicate-type "$predicate")
+ gh attestation verify ts-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --bundle ts-x86_64-unknown-linux-gnu.sbom.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.9 --source-digest 149754d357901ec874eab6140e92bce3d8613085 --signer-digest 149754d357901ec874eab6140e92bce3d8613085 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
+ command gh attestation verify ts-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --bundle ts-x86_64-unknown-linux-gnu.sbom.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.9 --source-digest 149754d357901ec874eab6140e92bce3d8613085 --signer-digest 149754d357901ec874eab6140e92bce3d8613085 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
+ [[ attestation verify == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ printf 'SUCCESS: gh attestation verify %s with requested predicate, signer and source pins\n' ts-x86_64-unknown-linux-gnu
SUCCESS: gh attestation verify ts-x86_64-unknown-linux-gnu with requested predicate, signer and source pins
+ gh attestation verify ts-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --bundle ts-x86_64-unknown-linux-gnu.sbom.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.9 --source-digest 149754d357901ec874eab6140e92bce3d8613085 --signer-digest 149754d357901ec874eab6140e92bce3d8613085 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.9 --format json
+ command gh attestation verify ts-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --bundle ts-x86_64-unknown-linux-gnu.sbom.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.9 --source-digest 149754d357901ec874eab6140e92bce3d8613085 --signer-digest 149754d357901ec874eab6140e92bce3d8613085 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.9 --format json
+ [[ attestation verify == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ printf 'SUCCESS: gh attestation verify %s with requested predicate, signer and source pins\n' ts-x86_64-unknown-linux-gnu
SUCCESS: gh attestation verify ts-x86_64-unknown-linux-gnu with requested predicate, signer and source pins
+ [[ sbom == sbom ]]
+ jq -e --slurpfile document ts-x86_64-unknown-linux-gnu.spdx.json 'length == 1 and .[0].verificationResult.statement.predicate == $document[0]' ts-x86_64-unknown-linux-gnu.offline-sbom-verification.json
true
+ for asset in "${ASSETS[@]}"
+ for kind in provenance sbom
+ predicate=https://slsa.dev/provenance/v1
+ [[ provenance == sbom ]]
+ checks=(--repo "$REPO" --bundle "$asset.$kind.sigstore.json" --custom-trusted-root trusted_root.jsonl --source-ref "refs/tags/$TAG" --source-digest "$COMMIT" --signer-digest "$COMMIT" --deny-self-hosted-runners --predicate-type "$predicate")
+ gh attestation verify ts-aarch64-apple-darwin --repo prk-Jr/trusted-server --bundle ts-aarch64-apple-darwin.provenance.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.9 --source-digest 149754d357901ec874eab6140e92bce3d8613085 --signer-digest 149754d357901ec874eab6140e92bce3d8613085 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
+ command gh attestation verify ts-aarch64-apple-darwin --repo prk-Jr/trusted-server --bundle ts-aarch64-apple-darwin.provenance.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.9 --source-digest 149754d357901ec874eab6140e92bce3d8613085 --signer-digest 149754d357901ec874eab6140e92bce3d8613085 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
+ [[ attestation verify == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ printf 'SUCCESS: gh attestation verify %s with requested predicate, signer and source pins\n' ts-aarch64-apple-darwin
SUCCESS: gh attestation verify ts-aarch64-apple-darwin with requested predicate, signer and source pins
+ gh attestation verify ts-aarch64-apple-darwin --repo prk-Jr/trusted-server --bundle ts-aarch64-apple-darwin.provenance.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.9 --source-digest 149754d357901ec874eab6140e92bce3d8613085 --signer-digest 149754d357901ec874eab6140e92bce3d8613085 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.9 --format json
+ command gh attestation verify ts-aarch64-apple-darwin --repo prk-Jr/trusted-server --bundle ts-aarch64-apple-darwin.provenance.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.9 --source-digest 149754d357901ec874eab6140e92bce3d8613085 --signer-digest 149754d357901ec874eab6140e92bce3d8613085 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.9 --format json
+ [[ attestation verify == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ printf 'SUCCESS: gh attestation verify %s with requested predicate, signer and source pins\n' ts-aarch64-apple-darwin
SUCCESS: gh attestation verify ts-aarch64-apple-darwin with requested predicate, signer and source pins
+ [[ provenance == sbom ]]
+ for kind in provenance sbom
+ predicate=https://slsa.dev/provenance/v1
+ [[ sbom == sbom ]]
+ predicate=https://spdx.dev/Document/v2.3
+ checks=(--repo "$REPO" --bundle "$asset.$kind.sigstore.json" --custom-trusted-root trusted_root.jsonl --source-ref "refs/tags/$TAG" --source-digest "$COMMIT" --signer-digest "$COMMIT" --deny-self-hosted-runners --predicate-type "$predicate")
+ gh attestation verify ts-aarch64-apple-darwin --repo prk-Jr/trusted-server --bundle ts-aarch64-apple-darwin.sbom.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.9 --source-digest 149754d357901ec874eab6140e92bce3d8613085 --signer-digest 149754d357901ec874eab6140e92bce3d8613085 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
+ command gh attestation verify ts-aarch64-apple-darwin --repo prk-Jr/trusted-server --bundle ts-aarch64-apple-darwin.sbom.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.9 --source-digest 149754d357901ec874eab6140e92bce3d8613085 --signer-digest 149754d357901ec874eab6140e92bce3d8613085 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
+ [[ attestation verify == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ printf 'SUCCESS: gh attestation verify %s with requested predicate, signer and source pins\n' ts-aarch64-apple-darwin
SUCCESS: gh attestation verify ts-aarch64-apple-darwin with requested predicate, signer and source pins
+ gh attestation verify ts-aarch64-apple-darwin --repo prk-Jr/trusted-server --bundle ts-aarch64-apple-darwin.sbom.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.9 --source-digest 149754d357901ec874eab6140e92bce3d8613085 --signer-digest 149754d357901ec874eab6140e92bce3d8613085 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.9 --format json
+ command gh attestation verify ts-aarch64-apple-darwin --repo prk-Jr/trusted-server --bundle ts-aarch64-apple-darwin.sbom.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.9 --source-digest 149754d357901ec874eab6140e92bce3d8613085 --signer-digest 149754d357901ec874eab6140e92bce3d8613085 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.9 --format json
+ [[ attestation verify == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ printf 'SUCCESS: gh attestation verify %s with requested predicate, signer and source pins\n' ts-aarch64-apple-darwin
SUCCESS: gh attestation verify ts-aarch64-apple-darwin with requested predicate, signer and source pins
+ [[ sbom == sbom ]]
+ jq -e --slurpfile document ts-aarch64-apple-darwin.spdx.json 'length == 1 and .[0].verificationResult.statement.predicate == $document[0]' ts-aarch64-apple-darwin.offline-sbom-verification.json
true
+ for asset in "${ASSETS[@]}"
+ for kind in provenance sbom
+ predicate=https://slsa.dev/provenance/v1
+ [[ provenance == sbom ]]
+ checks=(--repo "$REPO" --bundle "$asset.$kind.sigstore.json" --custom-trusted-root trusted_root.jsonl --source-ref "refs/tags/$TAG" --source-digest "$COMMIT" --signer-digest "$COMMIT" --deny-self-hosted-runners --predicate-type "$predicate")
+ gh attestation verify ts-x86_64-apple-darwin --repo prk-Jr/trusted-server --bundle ts-x86_64-apple-darwin.provenance.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.9 --source-digest 149754d357901ec874eab6140e92bce3d8613085 --signer-digest 149754d357901ec874eab6140e92bce3d8613085 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
+ command gh attestation verify ts-x86_64-apple-darwin --repo prk-Jr/trusted-server --bundle ts-x86_64-apple-darwin.provenance.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.9 --source-digest 149754d357901ec874eab6140e92bce3d8613085 --signer-digest 149754d357901ec874eab6140e92bce3d8613085 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
+ [[ attestation verify == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ printf 'SUCCESS: gh attestation verify %s with requested predicate, signer and source pins\n' ts-x86_64-apple-darwin
SUCCESS: gh attestation verify ts-x86_64-apple-darwin with requested predicate, signer and source pins
+ gh attestation verify ts-x86_64-apple-darwin --repo prk-Jr/trusted-server --bundle ts-x86_64-apple-darwin.provenance.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.9 --source-digest 149754d357901ec874eab6140e92bce3d8613085 --signer-digest 149754d357901ec874eab6140e92bce3d8613085 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.9 --format json
+ command gh attestation verify ts-x86_64-apple-darwin --repo prk-Jr/trusted-server --bundle ts-x86_64-apple-darwin.provenance.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.9 --source-digest 149754d357901ec874eab6140e92bce3d8613085 --signer-digest 149754d357901ec874eab6140e92bce3d8613085 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.9 --format json
+ [[ attestation verify == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ printf 'SUCCESS: gh attestation verify %s with requested predicate, signer and source pins\n' ts-x86_64-apple-darwin
SUCCESS: gh attestation verify ts-x86_64-apple-darwin with requested predicate, signer and source pins
+ [[ provenance == sbom ]]
+ for kind in provenance sbom
+ predicate=https://slsa.dev/provenance/v1
+ [[ sbom == sbom ]]
+ predicate=https://spdx.dev/Document/v2.3
+ checks=(--repo "$REPO" --bundle "$asset.$kind.sigstore.json" --custom-trusted-root trusted_root.jsonl --source-ref "refs/tags/$TAG" --source-digest "$COMMIT" --signer-digest "$COMMIT" --deny-self-hosted-runners --predicate-type "$predicate")
+ gh attestation verify ts-x86_64-apple-darwin --repo prk-Jr/trusted-server --bundle ts-x86_64-apple-darwin.sbom.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.9 --source-digest 149754d357901ec874eab6140e92bce3d8613085 --signer-digest 149754d357901ec874eab6140e92bce3d8613085 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
+ command gh attestation verify ts-x86_64-apple-darwin --repo prk-Jr/trusted-server --bundle ts-x86_64-apple-darwin.sbom.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.9 --source-digest 149754d357901ec874eab6140e92bce3d8613085 --signer-digest 149754d357901ec874eab6140e92bce3d8613085 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
+ [[ attestation verify == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ printf 'SUCCESS: gh attestation verify %s with requested predicate, signer and source pins\n' ts-x86_64-apple-darwin
SUCCESS: gh attestation verify ts-x86_64-apple-darwin with requested predicate, signer and source pins
+ gh attestation verify ts-x86_64-apple-darwin --repo prk-Jr/trusted-server --bundle ts-x86_64-apple-darwin.sbom.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.9 --source-digest 149754d357901ec874eab6140e92bce3d8613085 --signer-digest 149754d357901ec874eab6140e92bce3d8613085 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.9 --format json
+ command gh attestation verify ts-x86_64-apple-darwin --repo prk-Jr/trusted-server --bundle ts-x86_64-apple-darwin.sbom.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.9 --source-digest 149754d357901ec874eab6140e92bce3d8613085 --signer-digest 149754d357901ec874eab6140e92bce3d8613085 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.9 --format json
+ [[ attestation verify == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ printf 'SUCCESS: gh attestation verify %s with requested predicate, signer and source pins\n' ts-x86_64-apple-darwin
SUCCESS: gh attestation verify ts-x86_64-apple-darwin with requested predicate, signer and source pins
+ [[ sbom == sbom ]]
+ jq -e --slurpfile document ts-x86_64-apple-darwin.spdx.json 'length == 1 and .[0].verificationResult.statement.predicate == $document[0]' ts-x86_64-apple-darwin.offline-sbom-verification.json
true
+ for asset in "${ASSETS[@]}"
+ for kind in provenance sbom
+ predicate=https://slsa.dev/provenance/v1
+ [[ provenance == sbom ]]
+ checks=(--repo "$REPO" --bundle "$asset.$kind.sigstore.json" --custom-trusted-root trusted_root.jsonl --source-ref "refs/tags/$TAG" --source-digest "$COMMIT" --signer-digest "$COMMIT" --deny-self-hosted-runners --predicate-type "$predicate")
+ gh attestation verify trusted-server-axum-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --bundle trusted-server-axum-x86_64-unknown-linux-gnu.provenance.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.9 --source-digest 149754d357901ec874eab6140e92bce3d8613085 --signer-digest 149754d357901ec874eab6140e92bce3d8613085 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
+ command gh attestation verify trusted-server-axum-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --bundle trusted-server-axum-x86_64-unknown-linux-gnu.provenance.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.9 --source-digest 149754d357901ec874eab6140e92bce3d8613085 --signer-digest 149754d357901ec874eab6140e92bce3d8613085 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
+ [[ attestation verify == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ printf 'SUCCESS: gh attestation verify %s with requested predicate, signer and source pins\n' trusted-server-axum-x86_64-unknown-linux-gnu
SUCCESS: gh attestation verify trusted-server-axum-x86_64-unknown-linux-gnu with requested predicate, signer and source pins
+ gh attestation verify trusted-server-axum-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --bundle trusted-server-axum-x86_64-unknown-linux-gnu.provenance.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.9 --source-digest 149754d357901ec874eab6140e92bce3d8613085 --signer-digest 149754d357901ec874eab6140e92bce3d8613085 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.9 --format json
+ command gh attestation verify trusted-server-axum-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --bundle trusted-server-axum-x86_64-unknown-linux-gnu.provenance.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.9 --source-digest 149754d357901ec874eab6140e92bce3d8613085 --signer-digest 149754d357901ec874eab6140e92bce3d8613085 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.9 --format json
+ [[ attestation verify == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ printf 'SUCCESS: gh attestation verify %s with requested predicate, signer and source pins\n' trusted-server-axum-x86_64-unknown-linux-gnu
SUCCESS: gh attestation verify trusted-server-axum-x86_64-unknown-linux-gnu with requested predicate, signer and source pins
+ [[ provenance == sbom ]]
+ for kind in provenance sbom
+ predicate=https://slsa.dev/provenance/v1
+ [[ sbom == sbom ]]
+ predicate=https://spdx.dev/Document/v2.3
+ checks=(--repo "$REPO" --bundle "$asset.$kind.sigstore.json" --custom-trusted-root trusted_root.jsonl --source-ref "refs/tags/$TAG" --source-digest "$COMMIT" --signer-digest "$COMMIT" --deny-self-hosted-runners --predicate-type "$predicate")
+ gh attestation verify trusted-server-axum-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --bundle trusted-server-axum-x86_64-unknown-linux-gnu.sbom.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.9 --source-digest 149754d357901ec874eab6140e92bce3d8613085 --signer-digest 149754d357901ec874eab6140e92bce3d8613085 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
+ command gh attestation verify trusted-server-axum-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --bundle trusted-server-axum-x86_64-unknown-linux-gnu.sbom.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.9 --source-digest 149754d357901ec874eab6140e92bce3d8613085 --signer-digest 149754d357901ec874eab6140e92bce3d8613085 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
+ [[ attestation verify == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ printf 'SUCCESS: gh attestation verify %s with requested predicate, signer and source pins\n' trusted-server-axum-x86_64-unknown-linux-gnu
SUCCESS: gh attestation verify trusted-server-axum-x86_64-unknown-linux-gnu with requested predicate, signer and source pins
+ gh attestation verify trusted-server-axum-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --bundle trusted-server-axum-x86_64-unknown-linux-gnu.sbom.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.9 --source-digest 149754d357901ec874eab6140e92bce3d8613085 --signer-digest 149754d357901ec874eab6140e92bce3d8613085 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.9 --format json
+ command gh attestation verify trusted-server-axum-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --bundle trusted-server-axum-x86_64-unknown-linux-gnu.sbom.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.9 --source-digest 149754d357901ec874eab6140e92bce3d8613085 --signer-digest 149754d357901ec874eab6140e92bce3d8613085 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.9 --format json
+ [[ attestation verify == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ printf 'SUCCESS: gh attestation verify %s with requested predicate, signer and source pins\n' trusted-server-axum-x86_64-unknown-linux-gnu
SUCCESS: gh attestation verify trusted-server-axum-x86_64-unknown-linux-gnu with requested predicate, signer and source pins
+ [[ sbom == sbom ]]
+ jq -e --slurpfile document trusted-server-axum-x86_64-unknown-linux-gnu.spdx.json 'length == 1 and .[0].verificationResult.statement.predicate == $document[0]' trusted-server-axum-x86_64-unknown-linux-gnu.offline-sbom-verification.json
true
+ for asset in "${ASSETS[@]}"
+ for kind in provenance sbom
+ predicate=https://slsa.dev/provenance/v1
+ [[ provenance == sbom ]]
+ checks=(--repo "$REPO" --bundle "$asset.$kind.sigstore.json" --custom-trusted-root trusted_root.jsonl --source-ref "refs/tags/$TAG" --source-digest "$COMMIT" --signer-digest "$COMMIT" --deny-self-hosted-runners --predicate-type "$predicate")
+ gh attestation verify trusted-server-axum-x86_64-unknown-linux-musl --repo prk-Jr/trusted-server --bundle trusted-server-axum-x86_64-unknown-linux-musl.provenance.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.9 --source-digest 149754d357901ec874eab6140e92bce3d8613085 --signer-digest 149754d357901ec874eab6140e92bce3d8613085 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
+ command gh attestation verify trusted-server-axum-x86_64-unknown-linux-musl --repo prk-Jr/trusted-server --bundle trusted-server-axum-x86_64-unknown-linux-musl.provenance.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.9 --source-digest 149754d357901ec874eab6140e92bce3d8613085 --signer-digest 149754d357901ec874eab6140e92bce3d8613085 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
+ [[ attestation verify == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ printf 'SUCCESS: gh attestation verify %s with requested predicate, signer and source pins\n' trusted-server-axum-x86_64-unknown-linux-musl
SUCCESS: gh attestation verify trusted-server-axum-x86_64-unknown-linux-musl with requested predicate, signer and source pins
+ gh attestation verify trusted-server-axum-x86_64-unknown-linux-musl --repo prk-Jr/trusted-server --bundle trusted-server-axum-x86_64-unknown-linux-musl.provenance.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.9 --source-digest 149754d357901ec874eab6140e92bce3d8613085 --signer-digest 149754d357901ec874eab6140e92bce3d8613085 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.9 --format json
+ command gh attestation verify trusted-server-axum-x86_64-unknown-linux-musl --repo prk-Jr/trusted-server --bundle trusted-server-axum-x86_64-unknown-linux-musl.provenance.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.9 --source-digest 149754d357901ec874eab6140e92bce3d8613085 --signer-digest 149754d357901ec874eab6140e92bce3d8613085 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.9 --format json
+ [[ attestation verify == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ printf 'SUCCESS: gh attestation verify %s with requested predicate, signer and source pins\n' trusted-server-axum-x86_64-unknown-linux-musl
SUCCESS: gh attestation verify trusted-server-axum-x86_64-unknown-linux-musl with requested predicate, signer and source pins
+ [[ provenance == sbom ]]
+ for kind in provenance sbom
+ predicate=https://slsa.dev/provenance/v1
+ [[ sbom == sbom ]]
+ predicate=https://spdx.dev/Document/v2.3
+ checks=(--repo "$REPO" --bundle "$asset.$kind.sigstore.json" --custom-trusted-root trusted_root.jsonl --source-ref "refs/tags/$TAG" --source-digest "$COMMIT" --signer-digest "$COMMIT" --deny-self-hosted-runners --predicate-type "$predicate")
+ gh attestation verify trusted-server-axum-x86_64-unknown-linux-musl --repo prk-Jr/trusted-server --bundle trusted-server-axum-x86_64-unknown-linux-musl.sbom.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.9 --source-digest 149754d357901ec874eab6140e92bce3d8613085 --signer-digest 149754d357901ec874eab6140e92bce3d8613085 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
+ command gh attestation verify trusted-server-axum-x86_64-unknown-linux-musl --repo prk-Jr/trusted-server --bundle trusted-server-axum-x86_64-unknown-linux-musl.sbom.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.9 --source-digest 149754d357901ec874eab6140e92bce3d8613085 --signer-digest 149754d357901ec874eab6140e92bce3d8613085 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
+ [[ attestation verify == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ printf 'SUCCESS: gh attestation verify %s with requested predicate, signer and source pins\n' trusted-server-axum-x86_64-unknown-linux-musl
SUCCESS: gh attestation verify trusted-server-axum-x86_64-unknown-linux-musl with requested predicate, signer and source pins
+ gh attestation verify trusted-server-axum-x86_64-unknown-linux-musl --repo prk-Jr/trusted-server --bundle trusted-server-axum-x86_64-unknown-linux-musl.sbom.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.9 --source-digest 149754d357901ec874eab6140e92bce3d8613085 --signer-digest 149754d357901ec874eab6140e92bce3d8613085 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.9 --format json
+ command gh attestation verify trusted-server-axum-x86_64-unknown-linux-musl --repo prk-Jr/trusted-server --bundle trusted-server-axum-x86_64-unknown-linux-musl.sbom.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.9 --source-digest 149754d357901ec874eab6140e92bce3d8613085 --signer-digest 149754d357901ec874eab6140e92bce3d8613085 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.9 --format json

@prk-Jr

prk-Jr commented Oct 23, 2026

Copy link
Copy Markdown
Collaborator Author

Rehearsal v0.0.0-rehearsal.9 at 149754d: passed. Fork run. Fresh lightweight tag; exact reviewed head; all seven builds/signing jobs and the publisher passed. The full independent verification also passed.

offline transcript, part 2. Pinned gh 2.102.0. Trust-root SHA-256: 65ca537f6ed8a47fd0e560c421baa1f6c1efb8b25fc200d8c5c02c0e92eb2b9c. Independent binary pins derive from the cryptographically verified release attestation, separately from the downloaded SHA256SUMS. OS sandbox denied networking including the control request.

+ [[ attestation verify == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ printf 'SUCCESS: gh attestation verify %s with requested predicate, signer and source pins\n' trusted-server-axum-x86_64-unknown-linux-musl
SUCCESS: gh attestation verify trusted-server-axum-x86_64-unknown-linux-musl with requested predicate, signer and source pins
+ [[ sbom == sbom ]]
+ jq -e --slurpfile document trusted-server-axum-x86_64-unknown-linux-musl.spdx.json 'length == 1 and .[0].verificationResult.statement.predicate == $document[0]' trusted-server-axum-x86_64-unknown-linux-musl.offline-sbom-verification.json
true
+ for asset in "${ASSETS[@]}"
+ for kind in provenance sbom
+ predicate=https://slsa.dev/provenance/v1
+ [[ provenance == sbom ]]
+ checks=(--repo "$REPO" --bundle "$asset.$kind.sigstore.json" --custom-trusted-root trusted_root.jsonl --source-ref "refs/tags/$TAG" --source-digest "$COMMIT" --signer-digest "$COMMIT" --deny-self-hosted-runners --predicate-type "$predicate")
+ gh attestation verify trusted-server-axum-aarch64-unknown-linux-gnu --repo prk-Jr/trusted-server --bundle trusted-server-axum-aarch64-unknown-linux-gnu.provenance.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.9 --source-digest 149754d357901ec874eab6140e92bce3d8613085 --signer-digest 149754d357901ec874eab6140e92bce3d8613085 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
+ command gh attestation verify trusted-server-axum-aarch64-unknown-linux-gnu --repo prk-Jr/trusted-server --bundle trusted-server-axum-aarch64-unknown-linux-gnu.provenance.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.9 --source-digest 149754d357901ec874eab6140e92bce3d8613085 --signer-digest 149754d357901ec874eab6140e92bce3d8613085 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
+ [[ attestation verify == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ printf 'SUCCESS: gh attestation verify %s with requested predicate, signer and source pins\n' trusted-server-axum-aarch64-unknown-linux-gnu
SUCCESS: gh attestation verify trusted-server-axum-aarch64-unknown-linux-gnu with requested predicate, signer and source pins
+ gh attestation verify trusted-server-axum-aarch64-unknown-linux-gnu --repo prk-Jr/trusted-server --bundle trusted-server-axum-aarch64-unknown-linux-gnu.provenance.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.9 --source-digest 149754d357901ec874eab6140e92bce3d8613085 --signer-digest 149754d357901ec874eab6140e92bce3d8613085 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.9 --format json
+ command gh attestation verify trusted-server-axum-aarch64-unknown-linux-gnu --repo prk-Jr/trusted-server --bundle trusted-server-axum-aarch64-unknown-linux-gnu.provenance.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.9 --source-digest 149754d357901ec874eab6140e92bce3d8613085 --signer-digest 149754d357901ec874eab6140e92bce3d8613085 --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.9 --format json
+ [[ attestation verify == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ printf 'SUCCESS: gh attestation verify %s with requested predicate, signer and source pins\n' trusted-server-axum-aarch64-unknown-linux-gnu
SUCCESS: gh attestation verify trusted-server-axum-aarch64-unknown-linux-gnu with requested predicate, signer and source pins
+ [[ provenance == sbom ]]
+ for kind in provenance sbom
+ predicate=https://slsa.dev/provenance/v1
+ [[ sbom == sbom ]]
+ predicate=https://spdx.dev/Document/v2.3
+ checks=(--repo "$REPO" --bundle "$asset.$kind.sigstore.json" --custom-trusted-root trusted_root.jsonl --source-ref "refs/tags/$TAG" --source-digest "$COMMIT" --signer-digest "$COMMIT" --deny-self-hosted-runners --predicate-type "$predicate")
+ gh attestation verify trusted-server-axum-aarch64-unknown-linux-gnu --repo prk-Jr/trusted-server --bundle trusted-server-axum-aarch64-unknown-linux-gnu.sbom.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.9 --source-digest 149754d357901ec874eab6140e92bce3d8613085 --signer-digest 149754d357901ec874eab6140e92bce3d8613085 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
+ command gh attestation verify trusted-server-axum-aarch64-unknown-linux-gnu --repo prk-Jr/trusted-server --bundle trusted-server-axum-aarch64-unknown-linux-gnu.sbom.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.9 --source-digest 149754d357901ec874eab6140e92bce3d8613085 --signer-digest 149754d357901ec874eab6140e92bce3d8613085 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
+ [[ attestation verify == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ printf 'SUCCESS: gh attestation verify %s with requested predicate, signer and source pins\n' trusted-server-axum-aarch64-unknown-linux-gnu
SUCCESS: gh attestation verify trusted-server-axum-aarch64-unknown-linux-gnu with requested predicate, signer and source pins
+ gh attestation verify trusted-server-axum-aarch64-unknown-linux-gnu --repo prk-Jr/trusted-server --bundle trusted-server-axum-aarch64-unknown-linux-gnu.sbom.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.9 --source-digest 149754d357901ec874eab6140e92bce3d8613085 --signer-digest 149754d357901ec874eab6140e92bce3d8613085 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.9 --format json
+ command gh attestation verify trusted-server-axum-aarch64-unknown-linux-gnu --repo prk-Jr/trusted-server --bundle trusted-server-axum-aarch64-unknown-linux-gnu.sbom.sigstore.json --custom-trusted-root trusted_root.jsonl --source-ref refs/tags/v0.0.0-rehearsal.9 --source-digest 149754d357901ec874eab6140e92bce3d8613085 --signer-digest 149754d357901ec874eab6140e92bce3d8613085 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.9 --format json
+ [[ attestation verify == \a\t\t\e\s\t\a\t\i\o\n\ \v\e\r\i\f\y ]]
+ printf 'SUCCESS: gh attestation verify %s with requested predicate, signer and source pins\n' trusted-server-axum-aarch64-unknown-linux-gnu
SUCCESS: gh attestation verify trusted-server-axum-aarch64-unknown-linux-gnu with requested predicate, signer and source pins
+ [[ sbom == sbom ]]
+ jq -e --slurpfile document trusted-server-axum-aarch64-unknown-linux-gnu.spdx.json 'length == 1 and .[0].verificationResult.statement.predicate == $document[0]' trusted-server-axum-aarch64-unknown-linux-gnu.offline-sbom-verification.json
true
+ printf '%s\n' 'SUCCESS: all seven binaries verified offline for provenance and SPDX, both signer identities, exact source pins, and SPDX predicate equality.'
SUCCESS: all seven binaries verified offline for provenance and SPDX, both signer identities, exact source pins, and SPDX predicate equality.

@prk-Jr

prk-Jr commented Oct 23, 2026

Copy link
Copy Markdown
Collaborator Author

Rehearsal v0.0.0-rehearsal.9 at 149754d: passed. Fork run. Fresh lightweight tag; exact reviewed head; all seven builds/signing jobs and the publisher passed. The full independent verification also passed.

publisher transcript, part 1. Publisher output includes the bounded availability check, exact release-attestation binding and post-publication verification.

release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:08:59.1786620Z gh version 2.102.0 (2026-09-30)
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:08:59.1787633Z https://github.com/cli/cli/releases/tag/v2.102.0
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:09:02.7532939Z Created release ID: 421798347
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:01.6603820Z Release attestation available on first check
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:01.6605090Z Verified release: v0.0.0-rehearsal.9 signature and exact attestation bundle match
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:04.2016411Z Verified asset: trusted-server-axum-x86_64-unknown-linux-gnu Calculated digest for trusted-server-axum-x86_64-unknown-linux-gnu: sha256:fc29b83920e059628b941e5244e066c6d60ecb0c4385cad1c90d1248ba3d196a
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:04.2018475Z Resolved tag v0.0.0-rehearsal.9 to sha1:149754d357901ec874eab6140e92bce3d8613085
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:04.2019358Z Loaded attestation from GitHub API
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:04.2019762Z 
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:04.2108866Z ✓ Verification succeeded! trusted-server-axum-x86_64-unknown-linux-gnu is present in release v0.0.0-rehearsal.9
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:04.2111296Z 
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:06.8482612Z Verified asset: trusted-server-axum-x86_64-unknown-linux-gnu.spdx.json Calculated digest for trusted-server-axum-x86_64-unknown-linux-gnu.spdx.json: sha256:c04db9cfb49e5bffea71703e06ecf78e342fa8e06d90c78cbcd848de331b2520
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:06.8485203Z Resolved tag v0.0.0-rehearsal.9 to sha1:149754d357901ec874eab6140e92bce3d8613085
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:06.8486036Z Loaded attestation from GitHub API
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:06.8486415Z 
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:06.8487336Z ✓ Verification succeeded! trusted-server-axum-x86_64-unknown-linux-gnu.spdx.json is present in release v0.0.0-rehearsal.9
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:06.8487953Z 
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:09.0893823Z Verified asset: trusted-server-axum-x86_64-unknown-linux-gnu.provenance.sigstore.json Calculated digest for trusted-server-axum-x86_64-unknown-linux-gnu.provenance.sigstore.json: sha256:46d80582edd5d769fb0e52d30663bd5c3f1476d603a8017a68cec5ec4d8cfa3d
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:09.0896697Z Resolved tag v0.0.0-rehearsal.9 to sha1:149754d357901ec874eab6140e92bce3d8613085
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:09.0897562Z Loaded attestation from GitHub API
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:09.0897993Z 
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:09.0899259Z ✓ Verification succeeded! trusted-server-axum-x86_64-unknown-linux-gnu.provenance.sigstore.json is present in release v0.0.0-rehearsal.9
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:09.0900616Z 
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:11.8988011Z Verified asset: trusted-server-axum-x86_64-unknown-linux-gnu.sbom.sigstore.json Calculated digest for trusted-server-axum-x86_64-unknown-linux-gnu.sbom.sigstore.json: sha256:a6018cb031267c20d6698a7a8492e0c8a4902615ba31b3a63eb1431d6d95cf05
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:11.8990648Z Resolved tag v0.0.0-rehearsal.9 to sha1:149754d357901ec874eab6140e92bce3d8613085
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:11.8991559Z Loaded attestation from GitHub API
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:11.8991938Z 
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:11.8993189Z ✓ Verification succeeded! trusted-server-axum-x86_64-unknown-linux-gnu.sbom.sigstore.json is present in release v0.0.0-rehearsal.9
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:11.8994212Z 
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:15.0622389Z Verified asset: trusted-server-axum-x86_64-unknown-linux-musl Calculated digest for trusted-server-axum-x86_64-unknown-linux-musl: sha256:c7e71bdb740426aef585e3c941e5bced5c155fe738f61550644fa2845d3b98f9
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:15.0623692Z Resolved tag v0.0.0-rehearsal.9 to sha1:149754d357901ec874eab6140e92bce3d8613085
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:15.0624269Z Loaded attestation from GitHub API
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:15.0624524Z 
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:15.0625254Z ✓ Verification succeeded! trusted-server-axum-x86_64-unknown-linux-musl is present in release v0.0.0-rehearsal.9
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:15.0625824Z 
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:17.4871624Z Verified asset: trusted-server-axum-x86_64-unknown-linux-musl.spdx.json Calculated digest for trusted-server-axum-x86_64-unknown-linux-musl.spdx.json: sha256:27285b8f26b14ff4c7609ce14e3875e11ecb1311ec35712f84842de176848691
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:17.4872943Z Resolved tag v0.0.0-rehearsal.9 to sha1:149754d357901ec874eab6140e92bce3d8613085
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:17.4873508Z Loaded attestation from GitHub API
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:17.4873753Z 
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:17.4874507Z ✓ Verification succeeded! trusted-server-axum-x86_64-unknown-linux-musl.spdx.json is present in release v0.0.0-rehearsal.9
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:17.4875096Z 
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:19.9765097Z Verified asset: trusted-server-axum-x86_64-unknown-linux-musl.provenance.sigstore.json Calculated digest for trusted-server-axum-x86_64-unknown-linux-musl.provenance.sigstore.json: sha256:2f74e810804abe6260f40bd227047cf3028cea84e7e154f327ff56a59cbae712
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:19.9767625Z Resolved tag v0.0.0-rehearsal.9 to sha1:149754d357901ec874eab6140e92bce3d8613085
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:19.9768496Z Loaded attestation from GitHub API
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:19.9768905Z 
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:19.9770171Z ✓ Verification succeeded! trusted-server-axum-x86_64-unknown-linux-musl.provenance.sigstore.json is present in release v0.0.0-rehearsal.9
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:19.9771517Z 
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:22.2472517Z Verified asset: trusted-server-axum-x86_64-unknown-linux-musl.sbom.sigstore.json Calculated digest for trusted-server-axum-x86_64-unknown-linux-musl.sbom.sigstore.json: sha256:3e292050df47c9d8e852a13878e4ca07c50050dfd299059fee5137685d8639b4
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:22.2474947Z Resolved tag v0.0.0-rehearsal.9 to sha1:149754d357901ec874eab6140e92bce3d8613085
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:22.2476247Z Loaded attestation from GitHub API
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:22.2476655Z 
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:22.2477859Z ✓ Verification succeeded! trusted-server-axum-x86_64-unknown-linux-musl.sbom.sigstore.json is present in release v0.0.0-rehearsal.9
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:22.2478839Z 
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:24.8846126Z Verified asset: trusted-server-axum-aarch64-unknown-linux-gnu Calculated digest for trusted-server-axum-aarch64-unknown-linux-gnu: sha256:53e4db0197707f0eb9476bfc00daa66c70b0797e943eba60478637f089c378a3
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:24.8847376Z Resolved tag v0.0.0-rehearsal.9 to sha1:149754d357901ec874eab6140e92bce3d8613085
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:24.8847894Z Loaded attestation from GitHub API
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:24.8848406Z 
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:24.8849112Z ✓ Verification succeeded! trusted-server-axum-aarch64-unknown-linux-gnu is present in release v0.0.0-rehearsal.9
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:24.8849655Z 
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:26.7015254Z Verified asset: trusted-server-axum-aarch64-unknown-linux-gnu.spdx.json Calculated digest for trusted-server-axum-aarch64-unknown-linux-gnu.spdx.json: sha256:d40d586d24f28cbc28493f5ae6f32c34398bfc921a0bcc8c96bcb5fd9aeb0118
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:26.7016595Z Resolved tag v0.0.0-rehearsal.9 to sha1:149754d357901ec874eab6140e92bce3d8613085
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:26.7017107Z Loaded attestation from GitHub API
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:26.7017343Z 
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:26.7018113Z ✓ Verification succeeded! trusted-server-axum-aarch64-unknown-linux-gnu.spdx.json is present in release v0.0.0-rehearsal.9
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:26.7018693Z 
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:29.1450022Z Verified asset: trusted-server-axum-aarch64-unknown-linux-gnu.provenance.sigstore.json Calculated digest for trusted-server-axum-aarch64-unknown-linux-gnu.provenance.sigstore.json: sha256:eee736489562e010d60937c3b9fc8ba2b921bbe1ccb5ec480479cb6233531a00
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:29.1451768Z Resolved tag v0.0.0-rehearsal.9 to sha1:149754d357901ec874eab6140e92bce3d8613085
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:29.1452295Z Loaded attestation from GitHub API
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:29.1452535Z 
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:29.1453411Z ✓ Verification succeeded! trusted-server-axum-aarch64-unknown-linux-gnu.provenance.sigstore.json is present in release v0.0.0-rehearsal.9
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:29.1454100Z 
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:32.0576895Z Verified asset: trusted-server-axum-aarch64-unknown-linux-gnu.sbom.sigstore.json Calculated digest for trusted-server-axum-aarch64-unknown-linux-gnu.sbom.sigstore.json: sha256:01b53644fbd0fb416f258ce3af0fe5b07cbd9e301b5716df046ae27184e7b49c
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:32.0579393Z Resolved tag v0.0.0-rehearsal.9 to sha1:149754d357901ec874eab6140e92bce3d8613085
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:32.0580578Z Loaded attestation from GitHub API
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:32.0580995Z 
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:32.0582229Z ✓ Verification succeeded! trusted-server-axum-aarch64-unknown-linux-gnu.sbom.sigstore.json is present in release v0.0.0-rehearsal.9
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:32.0583243Z 
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:34.7839249Z Verified asset: trusted-server-fastly.wasm Calculated digest for trusted-server-fastly.wasm: sha256:78219e03834c0e7617ac5f97308d2b225867ac9c7755767cf417d2251cc0bc2c
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:34.7840652Z Resolved tag v0.0.0-rehearsal.9 to sha1:149754d357901ec874eab6140e92bce3d8613085
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:34.7841191Z Loaded attestation from GitHub API
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:34.7841436Z 
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:34.7842077Z ✓ Verification succeeded! trusted-server-fastly.wasm is present in release v0.0.0-rehearsal.9
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:34.7842540Z 
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:37.4412667Z Verified asset: trusted-server-fastly.wasm.spdx.json Calculated digest for trusted-server-fastly.wasm.spdx.json: sha256:013f8ca5a77eab88a9297c8ef823a50593b5a424dbbad27dc7a3aee9a1df9249
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:37.4414707Z Resolved tag v0.0.0-rehearsal.9 to sha1:149754d357901ec874eab6140e92bce3d8613085
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:37.4415687Z Loaded attestation from GitHub API
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:37.4416121Z 
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:37.4417272Z ✓ Verification succeeded! trusted-server-fastly.wasm.spdx.json is present in release v0.0.0-rehearsal.9
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:37.4418129Z 
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:40.0919163Z Verified asset: trusted-server-fastly.wasm.provenance.sigstore.json Calculated digest for trusted-server-fastly.wasm.provenance.sigstore.json: sha256:e23b5d77ea0a930bef5a6e46137ca5029cbf42f268aa9d2559d46e49fa23dc54
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:40.0920953Z Resolved tag v0.0.0-rehearsal.9 to sha1:149754d357901ec874eab6140e92bce3d8613085
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:40.0921488Z Loaded attestation from GitHub API
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:40.0921729Z 
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:40.0922456Z ✓ Verification succeeded! trusted-server-fastly.wasm.provenance.sigstore.json is present in release v0.0.0-rehearsal.9
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:40.0923016Z 
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:42.6977413Z Verified asset: trusted-server-fastly.wasm.sbom.sigstore.json Calculated digest for trusted-server-fastly.wasm.sbom.sigstore.json: sha256:3f810ed565d7b5ee4541b83677e0aaef3ade22be60d39a1a0abf8da8d903b8c3
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:42.6979497Z Resolved tag v0.0.0-rehearsal.9 to sha1:149754d357901ec874eab6140e92bce3d8613085
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:42.6980037Z Loaded attestation from GitHub API
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:42.6980595Z 
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:42.6981291Z ✓ Verification succeeded! trusted-server-fastly.wasm.sbom.sigstore.json is present in release v0.0.0-rehearsal.9
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:42.6981846Z 
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:45.4476137Z Verified asset: ts-aarch64-apple-darwin Calculated digest for ts-aarch64-apple-darwin: sha256:5081f63ede44079a0c53123fdccc480b9bd3013406d0c2efe79b1eba44c66b10
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:45.4477247Z Resolved tag v0.0.0-rehearsal.9 to sha1:149754d357901ec874eab6140e92bce3d8613085
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:45.4477772Z Loaded attestation from GitHub API
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:45.4478005Z 
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:45.4478606Z ✓ Verification succeeded! ts-aarch64-apple-darwin is present in release v0.0.0-rehearsal.9
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:45.4479061Z 
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:48.0743840Z Verified asset: ts-aarch64-apple-darwin.spdx.json Calculated digest for ts-aarch64-apple-darwin.spdx.json: sha256:9e736d3568b1f1632ccebfe3939130a257f34daac5658a73b1fca21e0a8b8d03
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:48.0745759Z Resolved tag v0.0.0-rehearsal.9 to sha1:149754d357901ec874eab6140e92bce3d8613085
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:48.0746661Z Loaded attestation from GitHub API
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:48.0747113Z 
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:48.0748062Z ✓ Verification succeeded! ts-aarch64-apple-darwin.spdx.json is present in release v0.0.0-rehearsal.9
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:48.0748917Z 
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:50.4227711Z Verified asset: ts-aarch64-apple-darwin.provenance.sigstore.json Calculated digest for ts-aarch64-apple-darwin.provenance.sigstore.json: sha256:15830f2da77b2ff61083c817b1f59935634d1c2d158618106147ff602e11bf3b
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:50.4229020Z Resolved tag v0.0.0-rehearsal.9 to sha1:149754d357901ec874eab6140e92bce3d8613085
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:50.4229572Z Loaded attestation from GitHub API
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:50.4229816Z 
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:50.4230908Z ✓ Verification succeeded! ts-aarch64-apple-darwin.provenance.sigstore.json is present in release v0.0.0-rehearsal.9
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:50.4231507Z 
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:52.9584504Z Verified asset: ts-aarch64-apple-darwin.sbom.sigstore.json Calculated digest for ts-aarch64-apple-darwin.sbom.sigstore.json: sha256:ea46fd4d01afcb01f1293d962732bd15d291f9ec60bfdcc9f456976c87917216
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:52.9585717Z Resolved tag v0.0.0-rehearsal.9 to sha1:149754d357901ec874eab6140e92bce3d8613085
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:52.9586228Z Loaded attestation from GitHub API
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:52.9586465Z 
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:52.9587320Z ✓ Verification succeeded! ts-aarch64-apple-darwin.sbom.sigstore.json is present in release v0.0.0-rehearsal.9
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:52.9588150Z 
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:55.1936681Z Verified asset: ts-x86_64-apple-darwin Calculated digest for ts-x86_64-apple-darwin: sha256:18b195caf41136d80722e6f9692679f9b05383569249d96a8e027705ec273464
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:55.1938352Z Resolved tag v0.0.0-rehearsal.9 to sha1:149754d357901ec874eab6140e92bce3d8613085
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:55.1939205Z Loaded attestation from GitHub API
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:55.1939458Z 
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:55.1940077Z ✓ Verification succeeded! ts-x86_64-apple-darwin is present in release v0.0.0-rehearsal.9
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:55.1940855Z 
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:57.8506698Z Verified asset: ts-x86_64-apple-darwin.spdx.json Calculated digest for ts-x86_64-apple-darwin.spdx.json: sha256:1db8a999611e33682a78c3b797b30a20f387dfe2aae63a834d378793eedef53d
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:57.8508103Z Resolved tag v0.0.0-rehearsal.9 to sha1:149754d357901ec874eab6140e92bce3d8613085
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:57.8508613Z Loaded attestation from GitHub API
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:57.8508841Z 
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:57.8509471Z ✓ Verification succeeded! ts-x86_64-apple-darwin.spdx.json is present in release v0.0.0-rehearsal.9
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:10:57.8509951Z 
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:11:00.5434497Z Verified asset: ts-x86_64-apple-darwin.provenance.sigstore.json Calculated digest for ts-x86_64-apple-darwin.provenance.sigstore.json: sha256:655310407d8b1c500285c34fde8e88d65cf9c2f3d334f175a9651d28c4ea1a48
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:11:00.5436747Z Resolved tag v0.0.0-rehearsal.9 to sha1:149754d357901ec874eab6140e92bce3d8613085
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:11:00.5437270Z Loaded attestation from GitHub API
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:11:00.5437515Z 
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:11:00.5438209Z ✓ Verification succeeded! ts-x86_64-apple-darwin.provenance.sigstore.json is present in release v0.0.0-rehearsal.9
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:11:00.5438774Z 
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:11:03.0474449Z Verified asset: ts-x86_64-apple-darwin.sbom.sigstore.json Calculated digest for ts-x86_64-apple-darwin.sbom.sigstore.json: sha256:0c27540e842e3ad785f6e378a03b8279a314d29fa597f5778887e72327a51e74
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:11:03.0475591Z Resolved tag v0.0.0-rehearsal.9 to sha1:149754d357901ec874eab6140e92bce3d8613085
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:11:03.0476099Z Loaded attestation from GitHub API
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:11:03.0476342Z 
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:11:03.0477004Z ✓ Verification succeeded! ts-x86_64-apple-darwin.sbom.sigstore.json is present in release v0.0.0-rehearsal.9
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:11:03.0477514Z 
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:11:05.8725696Z Verified asset: ts-x86_64-unknown-linux-gnu Calculated digest for ts-x86_64-unknown-linux-gnu: sha256:d342f1a5284049cb9055f665261c25844ad219339b25b3e87b9b4bdbe2e0f219
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:11:05.8727563Z Resolved tag v0.0.0-rehearsal.9 to sha1:149754d357901ec874eab6140e92bce3d8613085
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:11:05.8728511Z Loaded attestation from GitHub API
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:11:05.8728994Z 
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:11:05.8729885Z ✓ Verification succeeded! ts-x86_64-unknown-linux-gnu is present in release v0.0.0-rehearsal.9
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:11:05.8730987Z 
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:11:08.5001602Z Verified asset: ts-x86_64-unknown-linux-gnu.spdx.json Calculated digest for ts-x86_64-unknown-linux-gnu.spdx.json: sha256:58a9f6020a9ab1af2138096982e4d1e788398eccdef6b4f9f80b5f604a1fdf80
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:11:08.5003064Z Resolved tag v0.0.0-rehearsal.9 to sha1:149754d357901ec874eab6140e92bce3d8613085
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:11:08.5003738Z Loaded attestation from GitHub API
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:11:08.5004036Z 
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:11:08.5004826Z ✓ Verification succeeded! ts-x86_64-unknown-linux-gnu.spdx.json is present in release v0.0.0-rehearsal.9
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:11:08.5005507Z 
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:11:10.9919684Z Verified asset: ts-x86_64-unknown-linux-gnu.provenance.sigstore.json Calculated digest for ts-x86_64-unknown-linux-gnu.provenance.sigstore.json: sha256:87707ae550de1d0f96eb841a699e851c2db0da983fd310a35eaa19883e2bbee8
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:11:10.9921243Z Resolved tag v0.0.0-rehearsal.9 to sha1:149754d357901ec874eab6140e92bce3d8613085
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:11:10.9921758Z Loaded attestation from GitHub API
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:11:10.9921992Z 
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:11:10.9922708Z ✓ Verification succeeded! ts-x86_64-unknown-linux-gnu.provenance.sigstore.json is present in release v0.0.0-rehearsal.9
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:11:10.9923279Z 
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:11:13.7357992Z Verified asset: ts-x86_64-unknown-linux-gnu.sbom.sigstore.json Calculated digest for ts-x86_64-unknown-linux-gnu.sbom.sigstore.json: sha256:924995aa9fb810d8292bc632bc96c811e04937d728d70b13dfe7a59f8fb6bd7f
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:11:13.7360073Z Resolved tag v0.0.0-rehearsal.9 to sha1:149754d357901ec874eab6140e92bce3d8613085
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:11:13.7361244Z Loaded attestation from GitHub API
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:11:13.7361639Z 
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:11:13.7362726Z ✓ Verification succeeded! ts-x86_64-unknown-linux-gnu.sbom.sigstore.json is present in release v0.0.0-rehearsal.9
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:11:13.7363345Z 
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:11:16.4492146Z Verified asset: SHA256SUMS Calculated digest for SHA256SUMS: sha256:f15abb8ea2a6f97a55f33a3407f0041219a6de04dca911d05c0c51a5bab96dfa
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:11:16.4493066Z Resolved tag v0.0.0-rehearsal.9 to sha1:149754d357901ec874eab6140e92bce3d8613085
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:11:16.4493587Z Loaded attestation from GitHub API
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:11:16.4493819Z 
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:11:16.4494343Z ✓ Verification succeeded! SHA256SUMS is present in release v0.0.0-rehearsal.9
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:11:16.4494724Z 
release	Verify handoff, create once, publish by release ID and verify	2026-10-23T12:11:26.4668743Z Verified post-publish re-download: all 29 assets byte-identical to signed checksums and handoff
release	Complete job	2026-10-23T12:11:28.1146775Z Cleaning up orphan processes

@prk-Jr
prk-Jr added this pull request to stack #1450 October 26, 2026 11:43
Identify the supplied host or port variable when refusing startup, without forwarding fallback warnings. Preserve EdgeZero validation and cover both port aliases with a regression test.

Retain both core module declarations when integrating the current main branch. Record that the updated binaries still require a fresh release rehearsal.
- Print Axum bind-address refusals to stderr so RUST_LOG=off
  cannot hide them; add a binary-level regression test
- Log and ignore other tags' release attestations instead of
  verifying them after publication
- Time-bound every release API read; mutations stay single-shot
- Run the CLI build-facts test in release mode in CI and compare
  the embedded source with the exact supplied commit
- Assert the v* tag gate and action pinning in both workflows
- Define COMMIT in the maintainer checklist; describe both
  attestation subjects accurately
- Make the Fastly BUILD_INFO constant private
- Supply a fictional commit to the release-mode CLI test so a
  fallback to local git cannot pass, and assert release mode
  matches the supplied control
- Anchor the publication gate assertion to the job-level if
- Document the read timeout and job-bounded mutations
@prk-Jr

prk-Jr commented Oct 27, 2026

Copy link
Copy Markdown
Collaborator Author

Phase 1 rehearsal .11 failed before draft creation

Exact reviewed head ab6e5493636fd3d1db4b22a071189070f90a189a; fork run. All seven builds and all seven signing jobs succeeded. The release job had Contents: write, then the single draft-create POST returned HTTP 403. No release or matching draft exists; .11 remains a lightweight tag at the reviewed SHA. No mutation was retried and the tag will not be reused. This does not clear the publication rehearsal gate.

success build / checks
success build / Build ts-aarch64-apple-darwin
success build / Build trusted-server-axum-x86_64-unknown-linux-musl
success build / Build trusted-server-axum-x86_64-unknown-linux-gnu
success build / Build ts-x86_64-unknown-linux-gnu
success build / Build trusted-server-axum-aarch64-unknown-linux-gnu
success build / Build trusted-server-fastly.wasm
success build / Build ts-x86_64-apple-darwin
success build / sign (trusted-server-axum-aarch64-unknown-linux-gnu)
success build / sign (ts-x86_64-unknown-linux-gnu)
success build / sign (trusted-server-axum-x86_64-unknown-linux-musl)
success build / sign (ts-x86_64-apple-darwin)
success build / sign (ts-aarch64-apple-darwin)
success build / sign (trusted-server-axum-x86_64-unknown-linux-gnu)
success build / sign (trusted-server-fastly.wasm)
failure release
GITHUB_TOKEN permissions: Contents: write; Metadata: read
release	Verify handoff, create once, publish by release ID and verify	2026-10-27T10:35:39.6017955Z Error: GitHub API failed: POST releases 403
release	Verify handoff, create once, publish by release ID and verify	2026-10-27T10:35:39.6021355Z   status: 403,
release	Verify handoff, create once, publish by release ID and verify	2026-10-27T10:35:39.6022018Z   retryAfter: null
release	Verify handoff, create once, publish by release ID and verify	2026-10-27T10:35:39.6124287Z ##[error]Process completed with exit code 1.
GET release by tag: HTTP 404
List releases including drafts: no matching .11 record

Read-only diagnosis found that this SHA is referenced only by the new tag in the fork; the successful Phase 2 .10 SHA was also a fork branch head. That is a recovery hypothesis, not an established cause. No source, token permissions or settings have changed. A fresh-tag rehearsal decision is required before another attempt.

@prk-Jr

prk-Jr commented Oct 27, 2026

Copy link
Copy Markdown
Collaborator Author

Phase 1 exact-head rehearsal .12 passed — transcript 1/2

Reviewed source ab6e5493636fd3d1db4b22a071189070f90a189a; green first attempt. Fresh lightweight tag, seven binaries / 29 immutable prerelease files, not Latest. Full source/ref/signer/certificate pins are retained, including online no-bundle and offline bundle checks. .11 was left untouched after its draft-create denial; .12 also placed the same reviewed SHA at the fork Phase 1 branch head. No source, settings or token permissions changed. This clears the exact-head rehearsal verification gate; the PR remains draft with maintainer settings/spec approval still required.

Independent trust-root acquisition:
$ gh --version
gh version 2.102.0 (2026-09-30)
https://github.com/cli/cli/releases/tag/v2.102.0
$ gh attestation trusted-root > trusted_root.jsonl
$ shasum -a 256 trusted_root.jsonl
65ca537f6ed8a47fd0e560c421baa1f6c1efb8b25fc200d8c5c02c0e92eb2b9c  trusted_root.jsonl

Full independent release verification:
$ export GODEBUG=http2client=0
$ gh --version
gh version 2.102.0 (2026-09-30)
https://github.com/cli/cli/releases/tag/v2.102.0
Phase 1 source: ab6e5493636fd3d1db4b22a071189070f90a189a
Tag: v0.0.0-rehearsal.12
Run: https://github.com/prk-Jr/trusted-server/actions/runs/40490785393
$ gh release download v0.0.0-rehearsal.12 --repo prk-Jr/trusted-server --dir .
$ gh api repos/prk-Jr/trusted-server/releases/tags/v0.0.0-rehearsal.12 > release-metadata.json
$ jq -e --arg tag v0.0.0-rehearsal.12 .immutable\ ==\ true\ and\ .prerelease\ ==\ true\ and\ .draft\ ==\ false\ and\ .tag_name\ ==\ \$tag\ and\ \(.assets\|length\)\ ==\ 29 release-metadata.json
true
PASS: exact29 uploaded assets; all API sizes/digests match; checksum coverage exactly28; no Phase2 companions
$ gh api repos/prk-Jr/trusted-server/releases/latest > latest-release.json
$ jq -e --arg tag v0.0.0-rehearsal.12 .tag_name\ \!=\ \$tag latest-release.json
true
PASS: prerelease is not Latest
$ gh release verify v0.0.0-rehearsal.12 --repo prk-Jr/trusted-server
Resolved tag v0.0.0-rehearsal.12 to sha1:ab6e5493636fd3d1db4b22a071189070f90a189a
Loaded attestation from GitHub API
✓ Release v0.0.0-rehearsal.12 verified!

Assets
SHA256SUMS	sha256:a822122e079f00b6507887f049c089669f76ed23ccc23f0fe548e9c53048ceaa
trusted-server-axum-aarch64-unknown-linux-gnu	sha256:a0aa8058f7e906ee359299868c7e38fe0a350d124585b872a52cd57e626a731d
trusted-server-axum-aarch64-unknown-linux-gnu.provenance.sigstore.json	sha256:8b709137014cdff8bb07cefe10260cfcd1e4846057c09e598afae4dbd7e7736a
trusted-server-axum-aarch64-unknown-linux-gnu.sbom.sigstore.json	sha256:a735bd7f445fdfbc521522e42237145e208218fd7cd457d9d02340dd50f99980
trusted-server-axum-aarch64-unknown-linux-gnu.spdx.json	sha256:4c5e93f257940755cf7a6f11e1f23a6632ddcc45ddfdc2afceddbd2492e17d4f
trusted-server-axum-x86_64-unknown-linux-gnu	sha256:ac12b412db56dbc655a4678a1a47ea1433bb78b54ebd65343a3d165f170f43d1
trusted-server-axum-x86_64-unknown-linux-gnu.provenance.sigstore.json	sha256:5f2113f586e86b23370994755e4324576e29d6e2e735a63aa1819a6e3b9f4cc0
trusted-server-axum-x86_64-unknown-linux-gnu.sbom.sigstore.json	sha256:2b639fd727439883f6b99b89c88fe0e0717eeedefa456a76ab58bd3caef86f8f
trusted-server-axum-x86_64-unknown-linux-gnu.spdx.json	sha256:114f8d1f87d2fe1197cc8566ee4ed3dfc7e296f9fc3709a94aff3daa95064915
trusted-server-axum-x86_64-unknown-linux-musl	sha256:d41b33af1d29711ccbc90f2563e5ec1df5c85828df39ef692259df305ad7e5ae
trusted-server-axum-x86_64-unknown-linux-musl.provenance.sigstore.json	sha256:9cdccad0dbde6432b76cadb687ee58e4ecd1c2c72e554a07fea8622b4a02d077
trusted-server-axum-x86_64-unknown-linux-musl.sbom.sigstore.json	sha256:b199eda8c32e3cc78e809b286e0de469e1536de91a88d9e6d14e646e0baced4b
trusted-server-axum-x86_64-unknown-linux-musl.spdx.json	sha256:97166e7086a3b978635a6cededf7e01c37c3a92a1939f43f4c802c400b4ef35d
trusted-server-fastly.wasm	sha256:1a97cb5aa6b61395eab80abfecb56c795843a92d037311f8ab70f4de299e3c58
trusted-server-fastly.wasm.provenance.sigstore.json	sha256:45a617e963ae05ce0b7b7ab3945fbb01339589e23049aa6de2eedb13924d0e06
trusted-server-fastly.wasm.sbom.sigstore.json	sha256:ae7f9bdacd7098bee1697a71ff6760fc92ad75338ba6de1bf1c6388213efd6af
trusted-server-fastly.wasm.spdx.json	sha256:199f5b50fb08ce7d60ea27d10c6d04f4d3b14351f81204b2c924928aeea8737e
ts-aarch64-apple-darwin	sha256:e27113e91a119553815e4a94e4c25f851719a62487d71940f9ced6b87750e528
ts-aarch64-apple-darwin.provenance.sigstore.json	sha256:55b6579cdf77ddf1b839f8a990dea4de3a0f5ea5a7972d9628dda7e0dc985322
ts-aarch64-apple-darwin.sbom.sigstore.json	sha256:74ac098890dcd5c3eeabc3f4222cc0618a68e8ecb10a62702c49af60c61c2024
ts-aarch64-apple-darwin.spdx.json	sha256:a2e49403188c2da16aa67df1582418f9887c6e3308b5e4cd69cbb420de2550b9
ts-x86_64-apple-darwin	sha256:a6524adbab4fc0984995e13a593c37abfb36d3ee6cdca6709b29543b0784a480
ts-x86_64-apple-darwin.provenance.sigstore.json	sha256:c68c8e73e13868b9025e372791675a79491a3532cd39a3338c4e9fbf57244ea8
ts-x86_64-apple-darwin.sbom.sigstore.json	sha256:c7be8e1e912ba6adc5542e316e97236373a0abfb7005bc3921c29e7a1923edc2
ts-x86_64-apple-darwin.spdx.json	sha256:f70f40e498e5f3562d7772e201a5605b6ccbd22e3e8f73e96b2c112325af928b
ts-x86_64-unknown-linux-gnu	sha256:5ebf0932dac531885e8f417e0ddb34137e0e8b8da7b74a7ea4c80205617dfc22
ts-x86_64-unknown-linux-gnu.provenance.sigstore.json	sha256:d644d5cb102012d1fc9ee9efc97976bcdd340bb03b284f1f5a1cc1f66afa46f4
ts-x86_64-unknown-linux-gnu.sbom.sigstore.json	sha256:60e298e6ce4c6c39dd884f864db55d439e3845e905dc23786d92a530feefe799
ts-x86_64-unknown-linux-gnu.spdx.json	sha256:4be0b67dbc098523d0f51217f826210329c09572bb3dbd2cc8b9db368a252c58

$ gh release verify-asset v0.0.0-rehearsal.12 trusted-server-axum-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server
Calculated digest for trusted-server-axum-x86_64-unknown-linux-gnu: sha256:ac12b412db56dbc655a4678a1a47ea1433bb78b54ebd65343a3d165f170f43d1
Resolved tag v0.0.0-rehearsal.12 to sha1:ab6e5493636fd3d1db4b22a071189070f90a189a
Loaded attestation from GitHub API

✓ Verification succeeded! trusted-server-axum-x86_64-unknown-linux-gnu is present in release v0.0.0-rehearsal.12
$ gh release verify-asset v0.0.0-rehearsal.12 trusted-server-axum-x86_64-unknown-linux-gnu.spdx.json --repo prk-Jr/trusted-server
Calculated digest for trusted-server-axum-x86_64-unknown-linux-gnu.spdx.json: sha256:114f8d1f87d2fe1197cc8566ee4ed3dfc7e296f9fc3709a94aff3daa95064915
Resolved tag v0.0.0-rehearsal.12 to sha1:ab6e5493636fd3d1db4b22a071189070f90a189a
Loaded attestation from GitHub API

✓ Verification succeeded! trusted-server-axum-x86_64-unknown-linux-gnu.spdx.json is present in release v0.0.0-rehearsal.12
$ gh release verify-asset v0.0.0-rehearsal.12 trusted-server-axum-x86_64-unknown-linux-gnu.provenance.sigstore.json --repo prk-Jr/trusted-server
Calculated digest for trusted-server-axum-x86_64-unknown-linux-gnu.provenance.sigstore.json: sha256:5f2113f586e86b23370994755e4324576e29d6e2e735a63aa1819a6e3b9f4cc0
Resolved tag v0.0.0-rehearsal.12 to sha1:ab6e5493636fd3d1db4b22a071189070f90a189a
Loaded attestation from GitHub API

✓ Verification succeeded! trusted-server-axum-x86_64-unknown-linux-gnu.provenance.sigstore.json is present in release v0.0.0-rehearsal.12
$ gh release verify-asset v0.0.0-rehearsal.12 trusted-server-axum-x86_64-unknown-linux-gnu.sbom.sigstore.json --repo prk-Jr/trusted-server
Calculated digest for trusted-server-axum-x86_64-unknown-linux-gnu.sbom.sigstore.json: sha256:2b639fd727439883f6b99b89c88fe0e0717eeedefa456a76ab58bd3caef86f8f
Resolved tag v0.0.0-rehearsal.12 to sha1:ab6e5493636fd3d1db4b22a071189070f90a189a
Loaded attestation from GitHub API

✓ Verification succeeded! trusted-server-axum-x86_64-unknown-linux-gnu.sbom.sigstore.json is present in release v0.0.0-rehearsal.12
$ gh release verify-asset v0.0.0-rehearsal.12 trusted-server-axum-x86_64-unknown-linux-musl --repo prk-Jr/trusted-server
Calculated digest for trusted-server-axum-x86_64-unknown-linux-musl: sha256:d41b33af1d29711ccbc90f2563e5ec1df5c85828df39ef692259df305ad7e5ae
Resolved tag v0.0.0-rehearsal.12 to sha1:ab6e5493636fd3d1db4b22a071189070f90a189a
Loaded attestation from GitHub API

✓ Verification succeeded! trusted-server-axum-x86_64-unknown-linux-musl is present in release v0.0.0-rehearsal.12
$ gh release verify-asset v0.0.0-rehearsal.12 trusted-server-axum-x86_64-unknown-linux-musl.spdx.json --repo prk-Jr/trusted-server
Calculated digest for trusted-server-axum-x86_64-unknown-linux-musl.spdx.json: sha256:97166e7086a3b978635a6cededf7e01c37c3a92a1939f43f4c802c400b4ef35d
Resolved tag v0.0.0-rehearsal.12 to sha1:ab6e5493636fd3d1db4b22a071189070f90a189a
Loaded attestation from GitHub API

✓ Verification succeeded! trusted-server-axum-x86_64-unknown-linux-musl.spdx.json is present in release v0.0.0-rehearsal.12
$ gh release verify-asset v0.0.0-rehearsal.12 trusted-server-axum-x86_64-unknown-linux-musl.provenance.sigstore.json --repo prk-Jr/trusted-server
Calculated digest for trusted-server-axum-x86_64-unknown-linux-musl.provenance.sigstore.json: sha256:9cdccad0dbde6432b76cadb687ee58e4ecd1c2c72e554a07fea8622b4a02d077
Resolved tag v0.0.0-rehearsal.12 to sha1:ab6e5493636fd3d1db4b22a071189070f90a189a
Loaded attestation from GitHub API

✓ Verification succeeded! trusted-server-axum-x86_64-unknown-linux-musl.provenance.sigstore.json is present in release v0.0.0-rehearsal.12
$ gh release verify-asset v0.0.0-rehearsal.12 trusted-server-axum-x86_64-unknown-linux-musl.sbom.sigstore.json --repo prk-Jr/trusted-server
Calculated digest for trusted-server-axum-x86_64-unknown-linux-musl.sbom.sigstore.json: sha256:b199eda8c32e3cc78e809b286e0de469e1536de91a88d9e6d14e646e0baced4b
Resolved tag v0.0.0-rehearsal.12 to sha1:ab6e5493636fd3d1db4b22a071189070f90a189a
Loaded attestation from GitHub API

✓ Verification succeeded! trusted-server-axum-x86_64-unknown-linux-musl.sbom.sigstore.json is present in release v0.0.0-rehearsal.12
$ gh release verify-asset v0.0.0-rehearsal.12 trusted-server-axum-aarch64-unknown-linux-gnu --repo prk-Jr/trusted-server
Calculated digest for trusted-server-axum-aarch64-unknown-linux-gnu: sha256:a0aa8058f7e906ee359299868c7e38fe0a350d124585b872a52cd57e626a731d
Resolved tag v0.0.0-rehearsal.12 to sha1:ab6e5493636fd3d1db4b22a071189070f90a189a
Loaded attestation from GitHub API

✓ Verification succeeded! trusted-server-axum-aarch64-unknown-linux-gnu is present in release v0.0.0-rehearsal.12
$ gh release verify-asset v0.0.0-rehearsal.12 trusted-server-axum-aarch64-unknown-linux-gnu.spdx.json --repo prk-Jr/trusted-server
Calculated digest for trusted-server-axum-aarch64-unknown-linux-gnu.spdx.json: sha256:4c5e93f257940755cf7a6f11e1f23a6632ddcc45ddfdc2afceddbd2492e17d4f
Resolved tag v0.0.0-rehearsal.12 to sha1:ab6e5493636fd3d1db4b22a071189070f90a189a
Loaded attestation from GitHub API

✓ Verification succeeded! trusted-server-axum-aarch64-unknown-linux-gnu.spdx.json is present in release v0.0.0-rehearsal.12
$ gh release verify-asset v0.0.0-rehearsal.12 trusted-server-axum-aarch64-unknown-linux-gnu.provenance.sigstore.json --repo prk-Jr/trusted-server
Calculated digest for trusted-server-axum-aarch64-unknown-linux-gnu.provenance.sigstore.json: sha256:8b709137014cdff8bb07cefe10260cfcd1e4846057c09e598afae4dbd7e7736a
Resolved tag v0.0.0-rehearsal.12 to sha1:ab6e5493636fd3d1db4b22a071189070f90a189a
Loaded attestation from GitHub API

✓ Verification succeeded! trusted-server-axum-aarch64-unknown-linux-gnu.provenance.sigstore.json is present in release v0.0.0-rehearsal.12
$ gh release verify-asset v0.0.0-rehearsal.12 trusted-server-axum-aarch64-unknown-linux-gnu.sbom.sigstore.json --repo prk-Jr/trusted-server
Calculated digest for trusted-server-axum-aarch64-unknown-linux-gnu.sbom.sigstore.json: sha256:a735bd7f445fdfbc521522e42237145e208218fd7cd457d9d02340dd50f99980
Resolved tag v0.0.0-rehearsal.12 to sha1:ab6e5493636fd3d1db4b22a071189070f90a189a
Loaded attestation from GitHub API

✓ Verification succeeded! trusted-server-axum-aarch64-unknown-linux-gnu.sbom.sigstore.json is present in release v0.0.0-rehearsal.12
$ gh release verify-asset v0.0.0-rehearsal.12 trusted-server-fastly.wasm --repo prk-Jr/trusted-server
Calculated digest for trusted-server-fastly.wasm: sha256:1a97cb5aa6b61395eab80abfecb56c795843a92d037311f8ab70f4de299e3c58
Resolved tag v0.0.0-rehearsal.12 to sha1:ab6e5493636fd3d1db4b22a071189070f90a189a
Loaded attestation from GitHub API

✓ Verification succeeded! trusted-server-fastly.wasm is present in release v0.0.0-rehearsal.12
$ gh release verify-asset v0.0.0-rehearsal.12 trusted-server-fastly.wasm.spdx.json --repo prk-Jr/trusted-server
Calculated digest for trusted-server-fastly.wasm.spdx.json: sha256:199f5b50fb08ce7d60ea27d10c6d04f4d3b14351f81204b2c924928aeea8737e
Resolved tag v0.0.0-rehearsal.12 to sha1:ab6e5493636fd3d1db4b22a071189070f90a189a
Loaded attestation from GitHub API

✓ Verification succeeded! trusted-server-fastly.wasm.spdx.json is present in release v0.0.0-rehearsal.12
$ gh release verify-asset v0.0.0-rehearsal.12 trusted-server-fastly.wasm.provenance.sigstore.json --repo prk-Jr/trusted-server
Calculated digest for trusted-server-fastly.wasm.provenance.sigstore.json: sha256:45a617e963ae05ce0b7b7ab3945fbb01339589e23049aa6de2eedb13924d0e06
Resolved tag v0.0.0-rehearsal.12 to sha1:ab6e5493636fd3d1db4b22a071189070f90a189a
Loaded attestation from GitHub API

✓ Verification succeeded! trusted-server-fastly.wasm.provenance.sigstore.json is present in release v0.0.0-rehearsal.12
$ gh release verify-asset v0.0.0-rehearsal.12 trusted-server-fastly.wasm.sbom.sigstore.json --repo prk-Jr/trusted-server
Calculated digest for trusted-server-fastly.wasm.sbom.sigstore.json: sha256:ae7f9bdacd7098bee1697a71ff6760fc92ad75338ba6de1bf1c6388213efd6af
Resolved tag v0.0.0-rehearsal.12 to sha1:ab6e5493636fd3d1db4b22a071189070f90a189a
Loaded attestation from GitHub API

✓ Verification succeeded! trusted-server-fastly.wasm.sbom.sigstore.json is present in release v0.0.0-rehearsal.12
$ gh release verify-asset v0.0.0-rehearsal.12 ts-aarch64-apple-darwin --repo prk-Jr/trusted-server
Calculated digest for ts-aarch64-apple-darwin: sha256:e27113e91a119553815e4a94e4c25f851719a62487d71940f9ced6b87750e528
Resolved tag v0.0.0-rehearsal.12 to sha1:ab6e5493636fd3d1db4b22a071189070f90a189a
Loaded attestation from GitHub API

✓ Verification succeeded! ts-aarch64-apple-darwin is present in release v0.0.0-rehearsal.12
$ gh release verify-asset v0.0.0-rehearsal.12 ts-aarch64-apple-darwin.spdx.json --repo prk-Jr/trusted-server
Calculated digest for ts-aarch64-apple-darwin.spdx.json: sha256:a2e49403188c2da16aa67df1582418f9887c6e3308b5e4cd69cbb420de2550b9
Resolved tag v0.0.0-rehearsal.12 to sha1:ab6e5493636fd3d1db4b22a071189070f90a189a
Loaded attestation from GitHub API

✓ Verification succeeded! ts-aarch64-apple-darwin.spdx.json is present in release v0.0.0-rehearsal.12
$ gh release verify-asset v0.0.0-rehearsal.12 ts-aarch64-apple-darwin.provenance.sigstore.json --repo prk-Jr/trusted-server
Calculated digest for ts-aarch64-apple-darwin.provenance.sigstore.json: sha256:55b6579cdf77ddf1b839f8a990dea4de3a0f5ea5a7972d9628dda7e0dc985322
Resolved tag v0.0.0-rehearsal.12 to sha1:ab6e5493636fd3d1db4b22a071189070f90a189a
Loaded attestation from GitHub API

✓ Verification succeeded! ts-aarch64-apple-darwin.provenance.sigstore.json is present in release v0.0.0-rehearsal.12
$ gh release verify-asset v0.0.0-rehearsal.12 ts-aarch64-apple-darwin.sbom.sigstore.json --repo prk-Jr/trusted-server
Calculated digest for ts-aarch64-apple-darwin.sbom.sigstore.json: sha256:74ac098890dcd5c3eeabc3f4222cc0618a68e8ecb10a62702c49af60c61c2024
Resolved tag v0.0.0-rehearsal.12 to sha1:ab6e5493636fd3d1db4b22a071189070f90a189a
Loaded attestation from GitHub API

✓ Verification succeeded! ts-aarch64-apple-darwin.sbom.sigstore.json is present in release v0.0.0-rehearsal.12
$ gh release verify-asset v0.0.0-rehearsal.12 ts-x86_64-apple-darwin --repo prk-Jr/trusted-server
Calculated digest for ts-x86_64-apple-darwin: sha256:a6524adbab4fc0984995e13a593c37abfb36d3ee6cdca6709b29543b0784a480
Resolved tag v0.0.0-rehearsal.12 to sha1:ab6e5493636fd3d1db4b22a071189070f90a189a
Loaded attestation from GitHub API

✓ Verification succeeded! ts-x86_64-apple-darwin is present in release v0.0.0-rehearsal.12
$ gh release verify-asset v0.0.0-rehearsal.12 ts-x86_64-apple-darwin.spdx.json --repo prk-Jr/trusted-server
Calculated digest for ts-x86_64-apple-darwin.spdx.json: sha256:f70f40e498e5f3562d7772e201a5605b6ccbd22e3e8f73e96b2c112325af928b
Resolved tag v0.0.0-rehearsal.12 to sha1:ab6e5493636fd3d1db4b22a071189070f90a189a
Loaded attestation from GitHub API

✓ Verification succeeded! ts-x86_64-apple-darwin.spdx.json is present in release v0.0.0-rehearsal.12
$ gh release verify-asset v0.0.0-rehearsal.12 ts-x86_64-apple-darwin.provenance.sigstore.json --repo prk-Jr/trusted-server
Calculated digest for ts-x86_64-apple-darwin.provenance.sigstore.json: sha256:c68c8e73e13868b9025e372791675a79491a3532cd39a3338c4e9fbf57244ea8
Resolved tag v0.0.0-rehearsal.12 to sha1:ab6e5493636fd3d1db4b22a071189070f90a189a
Loaded attestation from GitHub API

✓ Verification succeeded! ts-x86_64-apple-darwin.provenance.sigstore.json is present in release v0.0.0-rehearsal.12
$ gh release verify-asset v0.0.0-rehearsal.12 ts-x86_64-apple-darwin.sbom.sigstore.json --repo prk-Jr/trusted-server
Calculated digest for ts-x86_64-apple-darwin.sbom.sigstore.json: sha256:c7be8e1e912ba6adc5542e316e97236373a0abfb7005bc3921c29e7a1923edc2
Resolved tag v0.0.0-rehearsal.12 to sha1:ab6e5493636fd3d1db4b22a071189070f90a189a
Loaded attestation from GitHub API

✓ Verification succeeded! ts-x86_64-apple-darwin.sbom.sigstore.json is present in release v0.0.0-rehearsal.12
$ gh release verify-asset v0.0.0-rehearsal.12 ts-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server
Calculated digest for ts-x86_64-unknown-linux-gnu: sha256:5ebf0932dac531885e8f417e0ddb34137e0e8b8da7b74a7ea4c80205617dfc22
Resolved tag v0.0.0-rehearsal.12 to sha1:ab6e5493636fd3d1db4b22a071189070f90a189a
Loaded attestation from GitHub API

✓ Verification succeeded! ts-x86_64-unknown-linux-gnu is present in release v0.0.0-rehearsal.12
$ gh release verify-asset v0.0.0-rehearsal.12 ts-x86_64-unknown-linux-gnu.spdx.json --repo prk-Jr/trusted-server
Calculated digest for ts-x86_64-unknown-linux-gnu.spdx.json: sha256:4be0b67dbc098523d0f51217f826210329c09572bb3dbd2cc8b9db368a252c58
Resolved tag v0.0.0-rehearsal.12 to sha1:ab6e5493636fd3d1db4b22a071189070f90a189a
Loaded attestation from GitHub API

✓ Verification succeeded! ts-x86_64-unknown-linux-gnu.spdx.json is present in release v0.0.0-rehearsal.12
$ gh release verify-asset v0.0.0-rehearsal.12 ts-x86_64-unknown-linux-gnu.provenance.sigstore.json --repo prk-Jr/trusted-server
Calculated digest for ts-x86_64-unknown-linux-gnu.provenance.sigstore.json: sha256:d644d5cb102012d1fc9ee9efc97976bcdd340bb03b284f1f5a1cc1f66afa46f4
Resolved tag v0.0.0-rehearsal.12 to sha1:ab6e5493636fd3d1db4b22a071189070f90a189a
Loaded attestation from GitHub API

✓ Verification succeeded! ts-x86_64-unknown-linux-gnu.provenance.sigstore.json is present in release v0.0.0-rehearsal.12
$ gh release verify-asset v0.0.0-rehearsal.12 ts-x86_64-unknown-linux-gnu.sbom.sigstore.json --repo prk-Jr/trusted-server
Calculated digest for ts-x86_64-unknown-linux-gnu.sbom.sigstore.json: sha256:60e298e6ce4c6c39dd884f864db55d439e3845e905dc23786d92a530feefe799
Resolved tag v0.0.0-rehearsal.12 to sha1:ab6e5493636fd3d1db4b22a071189070f90a189a
Loaded attestation from GitHub API

✓ Verification succeeded! ts-x86_64-unknown-linux-gnu.sbom.sigstore.json is present in release v0.0.0-rehearsal.12
$ gh release verify-asset v0.0.0-rehearsal.12 SHA256SUMS --repo prk-Jr/trusted-server
Calculated digest for SHA256SUMS: sha256:a822122e079f00b6507887f049c089669f76ed23ccc23f0fe548e9c53048ceaa
Resolved tag v0.0.0-rehearsal.12 to sha1:ab6e5493636fd3d1db4b22a071189070f90a189a
Loaded attestation from GitHub API

✓ Verification succeeded! SHA256SUMS is present in release v0.0.0-rehearsal.12
$ shasum -a 256 --check SHA256SUMS
trusted-server-axum-x86_64-unknown-linux-gnu: OK
trusted-server-axum-x86_64-unknown-linux-gnu.spdx.json: OK
trusted-server-axum-x86_64-unknown-linux-gnu.provenance.sigstore.json: OK
trusted-server-axum-x86_64-unknown-linux-gnu.sbom.sigstore.json: OK
trusted-server-axum-x86_64-unknown-linux-musl: OK
trusted-server-axum-x86_64-unknown-linux-musl.spdx.json: OK
trusted-server-axum-x86_64-unknown-linux-musl.provenance.sigstore.json: OK
trusted-server-axum-x86_64-unknown-linux-musl.sbom.sigstore.json: OK
trusted-server-axum-aarch64-unknown-linux-gnu: OK
trusted-server-axum-aarch64-unknown-linux-gnu.spdx.json: OK
trusted-server-axum-aarch64-unknown-linux-gnu.provenance.sigstore.json: OK
trusted-server-axum-aarch64-unknown-linux-gnu.sbom.sigstore.json: OK
trusted-server-fastly.wasm: OK
trusted-server-fastly.wasm.spdx.json: OK
trusted-server-fastly.wasm.provenance.sigstore.json: OK
trusted-server-fastly.wasm.sbom.sigstore.json: OK
ts-aarch64-apple-darwin: OK
ts-aarch64-apple-darwin.spdx.json: OK
ts-aarch64-apple-darwin.provenance.sigstore.json: OK
ts-aarch64-apple-darwin.sbom.sigstore.json: OK
ts-x86_64-apple-darwin: OK
ts-x86_64-apple-darwin.spdx.json: OK
ts-x86_64-apple-darwin.provenance.sigstore.json: OK
ts-x86_64-apple-darwin.sbom.sigstore.json: OK
ts-x86_64-unknown-linux-gnu: OK
ts-x86_64-unknown-linux-gnu.spdx.json: OK
ts-x86_64-unknown-linux-gnu.provenance.sigstore.json: OK
ts-x86_64-unknown-linux-gnu.sbom.sigstore.json: OK
$ shasum -a 256 --check APPROVED_BINARY_SHA256SUMS
trusted-server-axum-aarch64-unknown-linux-gnu: OK
trusted-server-axum-x86_64-unknown-linux-gnu: OK
trusted-server-axum-x86_64-unknown-linux-musl: OK
trusted-server-fastly.wasm: OK
ts-aarch64-apple-darwin: OK
ts-x86_64-apple-darwin: OK
ts-x86_64-unknown-linux-gnu: OK
$ shasum -a 256 trusted_root.jsonl
65ca537f6ed8a47fd0e560c421baa1f6c1efb8b25fc200d8c5c02c0e92eb2b9c  trusted_root.jsonl
$ gh attestation verify trusted-server-axum-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.12 --source-digest ab6e5493636fd3d1db4b22a071189070f90a189a --signer-digest ab6e5493636fd3d1db4b22a071189070f90a189a --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --bundle trusted-server-axum-x86_64-unknown-linux-gnu.provenance.sigstore.json --custom-trusted-root trusted_root.jsonl --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
$ gh attestation verify trusted-server-axum-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.12 --source-digest ab6e5493636fd3d1db4b22a071189070f90a189a --signer-digest ab6e5493636fd3d1db4b22a071189070f90a189a --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --bundle trusted-server-axum-x86_64-unknown-linux-gnu.provenance.sigstore.json --custom-trusted-root trusted_root.jsonl --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.12 --format json > trusted-server-axum-x86_64-unknown-linux-gnu.offline-provenance.verified.json
$ jq -e length\ ==\ 1 trusted-server-axum-x86_64-unknown-linux-gnu.offline-provenance.verified.json
true
$ jq -e --arg invocation https://github.com/prk-Jr/trusted-server/actions/runs/40490785393/attempts/1 all\(.\[\]\;\ .verificationResult.statement.predicate.runDetails.metadata.invocationId\ ==\ \$invocation\) trusted-server-axum-x86_64-unknown-linux-gnu.offline-provenance.verified.json
true
PASS: trusted-server-axum-x86_64-unknown-linux-gnu offline provenance exact reusable signer and source pins
$ gh attestation verify trusted-server-axum-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.12 --source-digest ab6e5493636fd3d1db4b22a071189070f90a189a --signer-digest ab6e5493636fd3d1db4b22a071189070f90a189a --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
$ gh attestation verify trusted-server-axum-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.12 --source-digest ab6e5493636fd3d1db4b22a071189070f90a189a --signer-digest ab6e5493636fd3d1db4b22a071189070f90a189a --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.12 --format json > trusted-server-axum-x86_64-unknown-linux-gnu.online-provenance.verified.json
$ jq -e length\ ==\ 1 trusted-server-axum-x86_64-unknown-linux-gnu.online-provenance.verified.json
true
$ jq -e --arg invocation https://github.com/prk-Jr/trusted-server/actions/runs/40490785393/attempts/1 all\(.\[\]\;\ .verificationResult.statement.predicate.runDetails.metadata.invocationId\ ==\ \$invocation\) trusted-server-axum-x86_64-unknown-linux-gnu.online-provenance.verified.json
true
PASS: trusted-server-axum-x86_64-unknown-linux-gnu online provenance exact reusable signer and source pins
$ gh attestation verify trusted-server-axum-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.12 --source-digest ab6e5493636fd3d1db4b22a071189070f90a189a --signer-digest ab6e5493636fd3d1db4b22a071189070f90a189a --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --bundle trusted-server-axum-x86_64-unknown-linux-gnu.sbom.sigstore.json --custom-trusted-root trusted_root.jsonl --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
$ gh attestation verify trusted-server-axum-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.12 --source-digest ab6e5493636fd3d1db4b22a071189070f90a189a --signer-digest ab6e5493636fd3d1db4b22a071189070f90a189a --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --bundle trusted-server-axum-x86_64-unknown-linux-gnu.sbom.sigstore.json --custom-trusted-root trusted_root.jsonl --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.12 --format json > trusted-server-axum-x86_64-unknown-linux-gnu.offline-sbom.verified.json
$ jq -e length\ ==\ 1 trusted-server-axum-x86_64-unknown-linux-gnu.offline-sbom.verified.json
true
PASS: trusted-server-axum-x86_64-unknown-linux-gnu offline sbom exact reusable signer and source pins
$ jq -e --slurpfile document trusted-server-axum-x86_64-unknown-linux-gnu.spdx.json length\ ==\ 1\ and\ .\[0\].verificationResult.statement.predicate\ ==\ \$document\[0\] trusted-server-axum-x86_64-unknown-linux-gnu.offline-sbom.verified.json
true
PASS: trusted-server-axum-x86_64-unknown-linux-gnu offline verified SPDX equals shipped SPDX
$ gh attestation verify trusted-server-axum-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.12 --source-digest ab6e5493636fd3d1db4b22a071189070f90a189a --signer-digest ab6e5493636fd3d1db4b22a071189070f90a189a --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
$ gh attestation verify trusted-server-axum-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.12 --source-digest ab6e5493636fd3d1db4b22a071189070f90a189a --signer-digest ab6e5493636fd3d1db4b22a071189070f90a189a --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.12 --format json > trusted-server-axum-x86_64-unknown-linux-gnu.online-sbom.verified.json
$ jq -e length\ ==\ 1 trusted-server-axum-x86_64-unknown-linux-gnu.online-sbom.verified.json
true
PASS: trusted-server-axum-x86_64-unknown-linux-gnu online sbom exact reusable signer and source pins
$ jq -e --slurpfile document trusted-server-axum-x86_64-unknown-linux-gnu.spdx.json length\ ==\ 1\ and\ .\[0\].verificationResult.statement.predicate\ ==\ \$document\[0\] trusted-server-axum-x86_64-unknown-linux-gnu.online-sbom.verified.json
true
PASS: trusted-server-axum-x86_64-unknown-linux-gnu online verified SPDX equals shipped SPDX
$ gh attestation verify trusted-server-axum-x86_64-unknown-linux-musl --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.12 --source-digest ab6e5493636fd3d1db4b22a071189070f90a189a --signer-digest ab6e5493636fd3d1db4b22a071189070f90a189a --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --bundle trusted-server-axum-x86_64-unknown-linux-musl.provenance.sigstore.json --custom-trusted-root trusted_root.jsonl --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
$ gh attestation verify trusted-server-axum-x86_64-unknown-linux-musl --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.12 --source-digest ab6e5493636fd3d1db4b22a071189070f90a189a --signer-digest ab6e5493636fd3d1db4b22a071189070f90a189a --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --bundle trusted-server-axum-x86_64-unknown-linux-musl.provenance.sigstore.json --custom-trusted-root trusted_root.jsonl --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.12 --format json > trusted-server-axum-x86_64-unknown-linux-musl.offline-provenance.verified.json
$ jq -e length\ ==\ 1 trusted-server-axum-x86_64-unknown-linux-musl.offline-provenance.verified.json
true
$ jq -e --arg invocation https://github.com/prk-Jr/trusted-server/actions/runs/40490785393/attempts/1 all\(.\[\]\;\ .verificationResult.statement.predicate.runDetails.metadata.invocationId\ ==\ \$invocation\) trusted-server-axum-x86_64-unknown-linux-musl.offline-provenance.verified.json
true
PASS: trusted-server-axum-x86_64-unknown-linux-musl offline provenance exact reusable signer and source pins
$ gh attestation verify trusted-server-axum-x86_64-unknown-linux-musl --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.12 --source-digest ab6e5493636fd3d1db4b22a071189070f90a189a --signer-digest ab6e5493636fd3d1db4b22a071189070f90a189a --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
$ gh attestation verify trusted-server-axum-x86_64-unknown-linux-musl --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.12 --source-digest ab6e5493636fd3d1db4b22a071189070f90a189a --signer-digest ab6e5493636fd3d1db4b22a071189070f90a189a --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.12 --format json > trusted-server-axum-x86_64-unknown-linux-musl.online-provenance.verified.json
$ jq -e length\ ==\ 1 trusted-server-axum-x86_64-unknown-linux-musl.online-provenance.verified.json
true
$ jq -e --arg invocation https://github.com/prk-Jr/trusted-server/actions/runs/40490785393/attempts/1 all\(.\[\]\;\ .verificationResult.statement.predicate.runDetails.metadata.invocationId\ ==\ \$invocation\) trusted-server-axum-x86_64-unknown-linux-musl.online-provenance.verified.json
true
PASS: trusted-server-axum-x86_64-unknown-linux-musl online provenance exact reusable signer and source pins
$ gh attestation verify trusted-server-axum-x86_64-unknown-linux-musl --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.12 --source-digest ab6e5493636fd3d1db4b22a071189070f90a189a --signer-digest ab6e5493636fd3d1db4b22a071189070f90a189a --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --bundle trusted-server-axum-x86_64-unknown-linux-musl.sbom.sigstore.json --custom-trusted-root trusted_root.jsonl --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
$ gh attestation verify trusted-server-axum-x86_64-unknown-linux-musl --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.12 --source-digest ab6e5493636fd3d1db4b22a071189070f90a189a --signer-digest ab6e5493636fd3d1db4b22a071189070f90a189a --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --bundle trusted-server-axum-x86_64-unknown-linux-musl.sbom.sigstore.json --custom-trusted-root trusted_root.jsonl --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.12 --format json > trusted-server-axum-x86_64-unknown-linux-musl.offline-sbom.verified.json
$ jq -e length\ ==\ 1 trusted-server-axum-x86_64-unknown-linux-musl.offline-sbom.verified.json
true
PASS: trusted-server-axum-x86_64-unknown-linux-musl offline sbom exact reusable signer and source pins
$ jq -e --slurpfile document trusted-server-axum-x86_64-unknown-linux-musl.spdx.json length\ ==\ 1\ and\ .\[0\].verificationResult.statement.predicate\ ==\ \$document\[0\] trusted-server-axum-x86_64-unknown-linux-musl.offline-sbom.verified.json
true
PASS: trusted-server-axum-x86_64-unknown-linux-musl offline verified SPDX equals shipped SPDX
$ gh attestation verify trusted-server-axum-x86_64-unknown-linux-musl --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.12 --source-digest ab6e5493636fd3d1db4b22a071189070f90a189a --signer-digest ab6e5493636fd3d1db4b22a071189070f90a189a --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
$ gh attestation verify trusted-server-axum-x86_64-unknown-linux-musl --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.12 --source-digest ab6e5493636fd3d1db4b22a071189070f90a189a --signer-digest ab6e5493636fd3d1db4b22a071189070f90a189a --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.12 --format json > trusted-server-axum-x86_64-unknown-linux-musl.online-sbom.verified.json
$ jq -e length\ ==\ 1 trusted-server-axum-x86_64-unknown-linux-musl.online-sbom.verified.json
true
PASS: trusted-server-axum-x86_64-unknown-linux-musl online sbom exact reusable signer and source pins
$ jq -e --slurpfile document trusted-server-axum-x86_64-unknown-linux-musl.spdx.json length\ ==\ 1\ and\ .\[0\].verificationResult.statement.predicate\ ==\ \$document\[0\] trusted-server-axum-x86_64-unknown-linux-musl.online-sbom.verified.json
true
PASS: trusted-server-axum-x86_64-unknown-linux-musl online verified SPDX equals shipped SPDX
$ gh attestation verify trusted-server-axum-aarch64-unknown-linux-gnu --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.12 --source-digest ab6e5493636fd3d1db4b22a071189070f90a189a --signer-digest ab6e5493636fd3d1db4b22a071189070f90a189a --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --bundle trusted-server-axum-aarch64-unknown-linux-gnu.provenance.sigstore.json --custom-trusted-root trusted_root.jsonl --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
$ gh attestation verify trusted-server-axum-aarch64-unknown-linux-gnu --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.12 --source-digest ab6e5493636fd3d1db4b22a071189070f90a189a --signer-digest ab6e5493636fd3d1db4b22a071189070f90a189a --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --bundle trusted-server-axum-aarch64-unknown-linux-gnu.provenance.sigstore.json --custom-trusted-root trusted_root.jsonl --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.12 --format json > trusted-server-axum-aarch64-unknown-linux-gnu.offline-provenance.verified.json
$ jq -e length\ ==\ 1 trusted-server-axum-aarch64-unknown-linux-gnu.offline-provenance.verified.json
true
$ jq -e --arg invocation https://github.com/prk-Jr/trusted-server/actions/runs/40490785393/attempts/1 all\(.\[\]\;\ .verificationResult.statement.predicate.runDetails.metadata.invocationId\ ==\ \$invocation\) trusted-server-axum-aarch64-unknown-linux-gnu.offline-provenance.verified.json
true
PASS: trusted-server-axum-aarch64-unknown-linux-gnu offline provenance exact reusable signer and source pins
$ gh attestation verify trusted-server-axum-aarch64-unknown-linux-gnu --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.12 --source-digest ab6e5493636fd3d1db4b22a071189070f90a189a --signer-digest ab6e5493636fd3d1db4b22a071189070f90a189a --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
$ gh attestation verify trusted-server-axum-aarch64-unknown-linux-gnu --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.12 --source-digest ab6e5493636fd3d1db4b22a071189070f90a189a --signer-digest ab6e5493636fd3d1db4b22a071189070f90a189a --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.12 --format json > trusted-server-axum-aarch64-unknown-linux-gnu.online-provenance.verified.json
$ jq -e length\ ==\ 1 trusted-server-axum-aarch64-unknown-linux-gnu.online-provenance.verified.json
true
$ jq -e --arg invocation https://github.com/prk-Jr/trusted-server/actions/runs/40490785393/attempts/1 all\(.\[\]\;\ .verificationResult.statement.predicate.runDetails.metadata.invocationId\ ==\ \$invocation\) trusted-server-axum-aarch64-unknown-linux-gnu.online-provenance.verified.json
true
PASS: trusted-server-axum-aarch64-unknown-linux-gnu online provenance exact reusable signer and source pins
$ gh attestation verify trusted-server-axum-aarch64-unknown-linux-gnu --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.12 --source-digest ab6e5493636fd3d1db4b22a071189070f90a189a --signer-digest ab6e5493636fd3d1db4b22a071189070f90a189a --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --bundle trusted-server-axum-aarch64-unknown-linux-gnu.sbom.sigstore.json --custom-trusted-root trusted_root.jsonl --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
$ gh attestation verify trusted-server-axum-aarch64-unknown-linux-gnu --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.12 --source-digest ab6e5493636fd3d1db4b22a071189070f90a189a --signer-digest ab6e5493636fd3d1db4b22a071189070f90a189a --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --bundle trusted-server-axum-aarch64-unknown-linux-gnu.sbom.sigstore.json --custom-trusted-root trusted_root.jsonl --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.12 --format json > trusted-server-axum-aarch64-unknown-linux-gnu.offline-sbom.verified.json
$ jq -e length\ ==\ 1 trusted-server-axum-aarch64-unknown-linux-gnu.offline-sbom.verified.json
true
PASS: trusted-server-axum-aarch64-unknown-linux-gnu offline sbom exact reusable signer and source pins
$ jq -e --slurpfile document trusted-server-axum-aarch64-unknown-linux-gnu.spdx.json length\ ==\ 1\ and\ .\[0\].verificationResult.statement.predicate\ ==\ \$document\[0\] trusted-server-axum-aarch64-unknown-linux-gnu.offline-sbom.verified.json
true
PASS: trusted-server-axum-aarch64-unknown-linux-gnu offline verified SPDX equals shipped SPDX
$ gh attestation verify trusted-server-axum-aarch64-unknown-linux-gnu --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.12 --source-digest ab6e5493636fd3d1db4b22a071189070f90a189a --signer-digest ab6e5493636fd3d1db4b22a071189070f90a189a --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
$ gh attestation verify trusted-server-axum-aarch64-unknown-linux-gnu --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.12 --source-digest ab6e5493636fd3d1db4b22a071189070f90a189a --signer-digest ab6e5493636fd3d1db4b22a071189070f90a189a --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.12 --format json > trusted-server-axum-aarch64-unknown-linux-gnu.online-sbom.verified.json
$ jq -e length\ ==\ 1 trusted-server-axum-aarch64-unknown-linux-gnu.online-sbom.verified.json
true
PASS: trusted-server-axum-aarch64-unknown-linux-gnu online sbom exact reusable signer and source pins
$ jq -e --slurpfile document trusted-server-axum-aarch64-unknown-linux-gnu.spdx.json length\ ==\ 1\ and\ .\[0\].verificationResult.statement.predicate\ ==\ \$document\[0\] trusted-server-axum-aarch64-unknown-linux-gnu.online-sbom.verified.json
true
PASS: trusted-server-axum-aarch64-unknown-linux-gnu online verified SPDX equals shipped SPDX
$ gh attestation verify trusted-server-fastly.wasm --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.12 --source-digest ab6e5493636fd3d1db4b22a071189070f90a189a --signer-digest ab6e5493636fd3d1db4b22a071189070f90a189a --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --bundle trusted-server-fastly.wasm.provenance.sigstore.json --custom-trusted-root trusted_root.jsonl --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
$ gh attestation verify trusted-server-fastly.wasm --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.12 --source-digest ab6e5493636fd3d1db4b22a071189070f90a189a --signer-digest ab6e5493636fd3d1db4b22a071189070f90a189a --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --bundle trusted-server-fastly.wasm.provenance.sigstore.json --custom-trusted-root trusted_root.jsonl --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.12 --format json > trusted-server-fastly.wasm.offline-provenance.verified.json
$ jq -e length\ ==\ 1 trusted-server-fastly.wasm.offline-provenance.verified.json
true
$ jq -e --arg invocation https://github.com/prk-Jr/trusted-server/actions/runs/40490785393/attempts/1 all\(.\[\]\;\ .verificationResult.statement.predicate.runDetails.metadata.invocationId\ ==\ \$invocation\) trusted-server-fastly.wasm.offline-provenance.verified.json
true
PASS: trusted-server-fastly.wasm offline provenance exact reusable signer and source pins

@prk-Jr

prk-Jr commented Oct 27, 2026

Copy link
Copy Markdown
Collaborator Author

Phase 1 exact-head rehearsal .12 passed — transcript 2/2

Reviewed source ab6e5493636fd3d1db4b22a071189070f90a189a; green first attempt. Fresh lightweight tag, seven binaries / 29 immutable prerelease files, not Latest. Full source/ref/signer/certificate pins are retained, including online no-bundle and offline bundle checks. .11 was left untouched after its draft-create denial; .12 also placed the same reviewed SHA at the fork Phase 1 branch head. No source, settings or token permissions changed. This clears the exact-head rehearsal verification gate; the PR remains draft with maintainer settings/spec approval still required.

$ gh attestation verify trusted-server-fastly.wasm --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.12 --source-digest ab6e5493636fd3d1db4b22a071189070f90a189a --signer-digest ab6e5493636fd3d1db4b22a071189070f90a189a --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
$ gh attestation verify trusted-server-fastly.wasm --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.12 --source-digest ab6e5493636fd3d1db4b22a071189070f90a189a --signer-digest ab6e5493636fd3d1db4b22a071189070f90a189a --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.12 --format json > trusted-server-fastly.wasm.online-provenance.verified.json
$ jq -e length\ ==\ 1 trusted-server-fastly.wasm.online-provenance.verified.json
true
$ jq -e --arg invocation https://github.com/prk-Jr/trusted-server/actions/runs/40490785393/attempts/1 all\(.\[\]\;\ .verificationResult.statement.predicate.runDetails.metadata.invocationId\ ==\ \$invocation\) trusted-server-fastly.wasm.online-provenance.verified.json
true
PASS: trusted-server-fastly.wasm online provenance exact reusable signer and source pins
$ gh attestation verify trusted-server-fastly.wasm --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.12 --source-digest ab6e5493636fd3d1db4b22a071189070f90a189a --signer-digest ab6e5493636fd3d1db4b22a071189070f90a189a --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --bundle trusted-server-fastly.wasm.sbom.sigstore.json --custom-trusted-root trusted_root.jsonl --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
$ gh attestation verify trusted-server-fastly.wasm --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.12 --source-digest ab6e5493636fd3d1db4b22a071189070f90a189a --signer-digest ab6e5493636fd3d1db4b22a071189070f90a189a --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --bundle trusted-server-fastly.wasm.sbom.sigstore.json --custom-trusted-root trusted_root.jsonl --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.12 --format json > trusted-server-fastly.wasm.offline-sbom.verified.json
$ jq -e length\ ==\ 1 trusted-server-fastly.wasm.offline-sbom.verified.json
true
PASS: trusted-server-fastly.wasm offline sbom exact reusable signer and source pins
$ jq -e --slurpfile document trusted-server-fastly.wasm.spdx.json length\ ==\ 1\ and\ .\[0\].verificationResult.statement.predicate\ ==\ \$document\[0\] trusted-server-fastly.wasm.offline-sbom.verified.json
true
PASS: trusted-server-fastly.wasm offline verified SPDX equals shipped SPDX
$ gh attestation verify trusted-server-fastly.wasm --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.12 --source-digest ab6e5493636fd3d1db4b22a071189070f90a189a --signer-digest ab6e5493636fd3d1db4b22a071189070f90a189a --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
$ gh attestation verify trusted-server-fastly.wasm --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.12 --source-digest ab6e5493636fd3d1db4b22a071189070f90a189a --signer-digest ab6e5493636fd3d1db4b22a071189070f90a189a --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.12 --format json > trusted-server-fastly.wasm.online-sbom.verified.json
$ jq -e length\ ==\ 1 trusted-server-fastly.wasm.online-sbom.verified.json
true
PASS: trusted-server-fastly.wasm online sbom exact reusable signer and source pins
$ jq -e --slurpfile document trusted-server-fastly.wasm.spdx.json length\ ==\ 1\ and\ .\[0\].verificationResult.statement.predicate\ ==\ \$document\[0\] trusted-server-fastly.wasm.online-sbom.verified.json
true
PASS: trusted-server-fastly.wasm online verified SPDX equals shipped SPDX
$ gh attestation verify ts-aarch64-apple-darwin --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.12 --source-digest ab6e5493636fd3d1db4b22a071189070f90a189a --signer-digest ab6e5493636fd3d1db4b22a071189070f90a189a --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --bundle ts-aarch64-apple-darwin.provenance.sigstore.json --custom-trusted-root trusted_root.jsonl --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
$ gh attestation verify ts-aarch64-apple-darwin --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.12 --source-digest ab6e5493636fd3d1db4b22a071189070f90a189a --signer-digest ab6e5493636fd3d1db4b22a071189070f90a189a --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --bundle ts-aarch64-apple-darwin.provenance.sigstore.json --custom-trusted-root trusted_root.jsonl --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.12 --format json > ts-aarch64-apple-darwin.offline-provenance.verified.json
$ jq -e length\ ==\ 1 ts-aarch64-apple-darwin.offline-provenance.verified.json
true
$ jq -e --arg invocation https://github.com/prk-Jr/trusted-server/actions/runs/40490785393/attempts/1 all\(.\[\]\;\ .verificationResult.statement.predicate.runDetails.metadata.invocationId\ ==\ \$invocation\) ts-aarch64-apple-darwin.offline-provenance.verified.json
true
PASS: ts-aarch64-apple-darwin offline provenance exact reusable signer and source pins
$ gh attestation verify ts-aarch64-apple-darwin --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.12 --source-digest ab6e5493636fd3d1db4b22a071189070f90a189a --signer-digest ab6e5493636fd3d1db4b22a071189070f90a189a --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
$ gh attestation verify ts-aarch64-apple-darwin --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.12 --source-digest ab6e5493636fd3d1db4b22a071189070f90a189a --signer-digest ab6e5493636fd3d1db4b22a071189070f90a189a --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.12 --format json > ts-aarch64-apple-darwin.online-provenance.verified.json
$ jq -e length\ ==\ 1 ts-aarch64-apple-darwin.online-provenance.verified.json
true
$ jq -e --arg invocation https://github.com/prk-Jr/trusted-server/actions/runs/40490785393/attempts/1 all\(.\[\]\;\ .verificationResult.statement.predicate.runDetails.metadata.invocationId\ ==\ \$invocation\) ts-aarch64-apple-darwin.online-provenance.verified.json
true
PASS: ts-aarch64-apple-darwin online provenance exact reusable signer and source pins
$ gh attestation verify ts-aarch64-apple-darwin --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.12 --source-digest ab6e5493636fd3d1db4b22a071189070f90a189a --signer-digest ab6e5493636fd3d1db4b22a071189070f90a189a --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --bundle ts-aarch64-apple-darwin.sbom.sigstore.json --custom-trusted-root trusted_root.jsonl --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
$ gh attestation verify ts-aarch64-apple-darwin --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.12 --source-digest ab6e5493636fd3d1db4b22a071189070f90a189a --signer-digest ab6e5493636fd3d1db4b22a071189070f90a189a --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --bundle ts-aarch64-apple-darwin.sbom.sigstore.json --custom-trusted-root trusted_root.jsonl --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.12 --format json > ts-aarch64-apple-darwin.offline-sbom.verified.json
$ jq -e length\ ==\ 1 ts-aarch64-apple-darwin.offline-sbom.verified.json
true
PASS: ts-aarch64-apple-darwin offline sbom exact reusable signer and source pins
$ jq -e --slurpfile document ts-aarch64-apple-darwin.spdx.json length\ ==\ 1\ and\ .\[0\].verificationResult.statement.predicate\ ==\ \$document\[0\] ts-aarch64-apple-darwin.offline-sbom.verified.json
true
PASS: ts-aarch64-apple-darwin offline verified SPDX equals shipped SPDX
$ gh attestation verify ts-aarch64-apple-darwin --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.12 --source-digest ab6e5493636fd3d1db4b22a071189070f90a189a --signer-digest ab6e5493636fd3d1db4b22a071189070f90a189a --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
$ gh attestation verify ts-aarch64-apple-darwin --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.12 --source-digest ab6e5493636fd3d1db4b22a071189070f90a189a --signer-digest ab6e5493636fd3d1db4b22a071189070f90a189a --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.12 --format json > ts-aarch64-apple-darwin.online-sbom.verified.json
$ jq -e length\ ==\ 1 ts-aarch64-apple-darwin.online-sbom.verified.json
true
PASS: ts-aarch64-apple-darwin online sbom exact reusable signer and source pins
$ jq -e --slurpfile document ts-aarch64-apple-darwin.spdx.json length\ ==\ 1\ and\ .\[0\].verificationResult.statement.predicate\ ==\ \$document\[0\] ts-aarch64-apple-darwin.online-sbom.verified.json
true
PASS: ts-aarch64-apple-darwin online verified SPDX equals shipped SPDX
$ gh attestation verify ts-x86_64-apple-darwin --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.12 --source-digest ab6e5493636fd3d1db4b22a071189070f90a189a --signer-digest ab6e5493636fd3d1db4b22a071189070f90a189a --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --bundle ts-x86_64-apple-darwin.provenance.sigstore.json --custom-trusted-root trusted_root.jsonl --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
$ gh attestation verify ts-x86_64-apple-darwin --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.12 --source-digest ab6e5493636fd3d1db4b22a071189070f90a189a --signer-digest ab6e5493636fd3d1db4b22a071189070f90a189a --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --bundle ts-x86_64-apple-darwin.provenance.sigstore.json --custom-trusted-root trusted_root.jsonl --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.12 --format json > ts-x86_64-apple-darwin.offline-provenance.verified.json
$ jq -e length\ ==\ 1 ts-x86_64-apple-darwin.offline-provenance.verified.json
true
$ jq -e --arg invocation https://github.com/prk-Jr/trusted-server/actions/runs/40490785393/attempts/1 all\(.\[\]\;\ .verificationResult.statement.predicate.runDetails.metadata.invocationId\ ==\ \$invocation\) ts-x86_64-apple-darwin.offline-provenance.verified.json
true
PASS: ts-x86_64-apple-darwin offline provenance exact reusable signer and source pins
$ gh attestation verify ts-x86_64-apple-darwin --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.12 --source-digest ab6e5493636fd3d1db4b22a071189070f90a189a --signer-digest ab6e5493636fd3d1db4b22a071189070f90a189a --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
$ gh attestation verify ts-x86_64-apple-darwin --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.12 --source-digest ab6e5493636fd3d1db4b22a071189070f90a189a --signer-digest ab6e5493636fd3d1db4b22a071189070f90a189a --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.12 --format json > ts-x86_64-apple-darwin.online-provenance.verified.json
$ jq -e length\ ==\ 1 ts-x86_64-apple-darwin.online-provenance.verified.json
true
$ jq -e --arg invocation https://github.com/prk-Jr/trusted-server/actions/runs/40490785393/attempts/1 all\(.\[\]\;\ .verificationResult.statement.predicate.runDetails.metadata.invocationId\ ==\ \$invocation\) ts-x86_64-apple-darwin.online-provenance.verified.json
true
PASS: ts-x86_64-apple-darwin online provenance exact reusable signer and source pins
$ gh attestation verify ts-x86_64-apple-darwin --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.12 --source-digest ab6e5493636fd3d1db4b22a071189070f90a189a --signer-digest ab6e5493636fd3d1db4b22a071189070f90a189a --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --bundle ts-x86_64-apple-darwin.sbom.sigstore.json --custom-trusted-root trusted_root.jsonl --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
$ gh attestation verify ts-x86_64-apple-darwin --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.12 --source-digest ab6e5493636fd3d1db4b22a071189070f90a189a --signer-digest ab6e5493636fd3d1db4b22a071189070f90a189a --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --bundle ts-x86_64-apple-darwin.sbom.sigstore.json --custom-trusted-root trusted_root.jsonl --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.12 --format json > ts-x86_64-apple-darwin.offline-sbom.verified.json
$ jq -e length\ ==\ 1 ts-x86_64-apple-darwin.offline-sbom.verified.json
true
PASS: ts-x86_64-apple-darwin offline sbom exact reusable signer and source pins
$ jq -e --slurpfile document ts-x86_64-apple-darwin.spdx.json length\ ==\ 1\ and\ .\[0\].verificationResult.statement.predicate\ ==\ \$document\[0\] ts-x86_64-apple-darwin.offline-sbom.verified.json
true
PASS: ts-x86_64-apple-darwin offline verified SPDX equals shipped SPDX
$ gh attestation verify ts-x86_64-apple-darwin --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.12 --source-digest ab6e5493636fd3d1db4b22a071189070f90a189a --signer-digest ab6e5493636fd3d1db4b22a071189070f90a189a --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
$ gh attestation verify ts-x86_64-apple-darwin --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.12 --source-digest ab6e5493636fd3d1db4b22a071189070f90a189a --signer-digest ab6e5493636fd3d1db4b22a071189070f90a189a --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.12 --format json > ts-x86_64-apple-darwin.online-sbom.verified.json
$ jq -e length\ ==\ 1 ts-x86_64-apple-darwin.online-sbom.verified.json
true
PASS: ts-x86_64-apple-darwin online sbom exact reusable signer and source pins
$ jq -e --slurpfile document ts-x86_64-apple-darwin.spdx.json length\ ==\ 1\ and\ .\[0\].verificationResult.statement.predicate\ ==\ \$document\[0\] ts-x86_64-apple-darwin.online-sbom.verified.json
true
PASS: ts-x86_64-apple-darwin online verified SPDX equals shipped SPDX
$ gh attestation verify ts-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.12 --source-digest ab6e5493636fd3d1db4b22a071189070f90a189a --signer-digest ab6e5493636fd3d1db4b22a071189070f90a189a --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --bundle ts-x86_64-unknown-linux-gnu.provenance.sigstore.json --custom-trusted-root trusted_root.jsonl --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
$ gh attestation verify ts-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.12 --source-digest ab6e5493636fd3d1db4b22a071189070f90a189a --signer-digest ab6e5493636fd3d1db4b22a071189070f90a189a --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --bundle ts-x86_64-unknown-linux-gnu.provenance.sigstore.json --custom-trusted-root trusted_root.jsonl --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.12 --format json > ts-x86_64-unknown-linux-gnu.offline-provenance.verified.json
$ jq -e length\ ==\ 1 ts-x86_64-unknown-linux-gnu.offline-provenance.verified.json
true
$ jq -e --arg invocation https://github.com/prk-Jr/trusted-server/actions/runs/40490785393/attempts/1 all\(.\[\]\;\ .verificationResult.statement.predicate.runDetails.metadata.invocationId\ ==\ \$invocation\) ts-x86_64-unknown-linux-gnu.offline-provenance.verified.json
true
PASS: ts-x86_64-unknown-linux-gnu offline provenance exact reusable signer and source pins
$ gh attestation verify ts-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.12 --source-digest ab6e5493636fd3d1db4b22a071189070f90a189a --signer-digest ab6e5493636fd3d1db4b22a071189070f90a189a --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
$ gh attestation verify ts-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.12 --source-digest ab6e5493636fd3d1db4b22a071189070f90a189a --signer-digest ab6e5493636fd3d1db4b22a071189070f90a189a --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.12 --format json > ts-x86_64-unknown-linux-gnu.online-provenance.verified.json
$ jq -e length\ ==\ 1 ts-x86_64-unknown-linux-gnu.online-provenance.verified.json
true
$ jq -e --arg invocation https://github.com/prk-Jr/trusted-server/actions/runs/40490785393/attempts/1 all\(.\[\]\;\ .verificationResult.statement.predicate.runDetails.metadata.invocationId\ ==\ \$invocation\) ts-x86_64-unknown-linux-gnu.online-provenance.verified.json
true
PASS: ts-x86_64-unknown-linux-gnu online provenance exact reusable signer and source pins
$ gh attestation verify ts-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.12 --source-digest ab6e5493636fd3d1db4b22a071189070f90a189a --signer-digest ab6e5493636fd3d1db4b22a071189070f90a189a --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --bundle ts-x86_64-unknown-linux-gnu.sbom.sigstore.json --custom-trusted-root trusted_root.jsonl --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
$ gh attestation verify ts-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.12 --source-digest ab6e5493636fd3d1db4b22a071189070f90a189a --signer-digest ab6e5493636fd3d1db4b22a071189070f90a189a --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --bundle ts-x86_64-unknown-linux-gnu.sbom.sigstore.json --custom-trusted-root trusted_root.jsonl --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.12 --format json > ts-x86_64-unknown-linux-gnu.offline-sbom.verified.json
$ jq -e length\ ==\ 1 ts-x86_64-unknown-linux-gnu.offline-sbom.verified.json
true
PASS: ts-x86_64-unknown-linux-gnu offline sbom exact reusable signer and source pins
$ jq -e --slurpfile document ts-x86_64-unknown-linux-gnu.spdx.json length\ ==\ 1\ and\ .\[0\].verificationResult.statement.predicate\ ==\ \$document\[0\] ts-x86_64-unknown-linux-gnu.offline-sbom.verified.json
true
PASS: ts-x86_64-unknown-linux-gnu offline verified SPDX equals shipped SPDX
$ gh attestation verify ts-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.12 --source-digest ab6e5493636fd3d1db4b22a071189070f90a189a --signer-digest ab6e5493636fd3d1db4b22a071189070f90a189a --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
$ gh attestation verify ts-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.12 --source-digest ab6e5493636fd3d1db4b22a071189070f90a189a --signer-digest ab6e5493636fd3d1db4b22a071189070f90a189a --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.12 --format json > ts-x86_64-unknown-linux-gnu.online-sbom.verified.json
$ jq -e length\ ==\ 1 ts-x86_64-unknown-linux-gnu.online-sbom.verified.json
true
PASS: ts-x86_64-unknown-linux-gnu online sbom exact reusable signer and source pins
$ jq -e --slurpfile document ts-x86_64-unknown-linux-gnu.spdx.json length\ ==\ 1\ and\ .\[0\].verificationResult.statement.predicate\ ==\ \$document\[0\] ts-x86_64-unknown-linux-gnu.online-sbom.verified.json
true
PASS: ts-x86_64-unknown-linux-gnu online verified SPDX equals shipped SPDX
$ file trusted-server-axum-x86_64-unknown-linux-gnu trusted-server-axum-x86_64-unknown-linux-musl trusted-server-axum-aarch64-unknown-linux-gnu trusted-server-fastly.wasm ts-aarch64-apple-darwin ts-x86_64-apple-darwin ts-x86_64-unknown-linux-gnu
trusted-server-axum-x86_64-unknown-linux-gnu:  ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=e6d23d7ec8af3bb4cfea1b9b928e0411c5e3a7d7, with debug_info, not stripped
trusted-server-axum-x86_64-unknown-linux-musl: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), static-pie linked, with debug_info, not stripped
trusted-server-axum-aarch64-unknown-linux-gnu: ELF 64-bit LSB pie executable, ARM aarch64, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-aarch64.so.1, BuildID[sha1]=4755048e25bb9ac4e0888599cc24537830a72486, for GNU/Linux 3.7.0, with debug_info, not stripped
trusted-server-fastly.wasm:                    WebAssembly (wasm) binary module version 0x1 (MVP)
ts-aarch64-apple-darwin:                       Mach-O 64-bit executable arm64
ts-x86_64-apple-darwin:                        Mach-O 64-bit executable x86_64
ts-x86_64-unknown-linux-gnu:                   ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=c934e04f78e8ca7754a48dad58429e899dba28a3, with debug_info, not stripped
$ ./ts-aarch64-apple-darwin --version
ts package=0.1.0 source=ab6e5493636fd3d1db4b22a071189070f90a189a target=aarch64-apple-darwin variant=default
PASS: exact Phase1 release verification at ab6e5493636fd3d1db4b22a071189070f90a189a with v0.0.0-rehearsal.12

Same-source native and publisher evidence:

macos-intel:
build / Build ts-x86_64-apple-darwin	UNKNOWN STEP	2026-10-27T11:07:05.1652600Z SUCCESS: Mach-O target and macOS minimum OS 13.0: x86_64-apple-darwin
build / Build ts-x86_64-apple-darwin	UNKNOWN STEP	2026-10-27T11:07:05.1660100Z SUCCESS: final-byte checks x86_64-apple-darwin 
build / Build ts-x86_64-apple-darwin	UNKNOWN STEP	2026-10-27T11:07:05.1869330Z SUCCESS: ts package=0.1.0 source=ab6e5493636fd3d1db4b22a071189070f90a189a target=x86_64-apple-darwin variant=default

macos-arm:
build / Build ts-aarch64-apple-darwin	UNKNOWN STEP	2026-10-27T10:54:03.6565060Z SUCCESS: Mach-O target and macOS minimum OS 13.0: aarch64-apple-darwin
build / Build ts-aarch64-apple-darwin	UNKNOWN STEP	2026-10-27T10:54:03.6567570Z SUCCESS: final-byte checks aarch64-apple-darwin 
build / Build ts-aarch64-apple-darwin	UNKNOWN STEP	2026-10-27T10:54:03.6726650Z SUCCESS: ts package=0.1.0 source=ab6e5493636fd3d1db4b22a071189070f90a189a target=aarch64-apple-darwin variant=default

cli-linux:
build / Build ts-x86_64-unknown-linux-gnu	UNKNOWN STEP	2026-10-27T10:52:33.0991925Z SUCCESS: final-byte checks x86_64-unknown-linux-gnu GLIBC_2.34 GLIBC_2.2.5 GLIBC_2.14 GLIBC_2.3 GLIBC_2.29 GLIBC_2.3.4 GLIBC_2.33 GLIBC_2.28 GLIBC_2.7 GLIBC_2.16 GLIBC_2.10 GLIBC_2.3.2 GLIBC_2.9 GLIBC_2.30 GLIBC_2.4 GLIBC_2.17 GLIBC_2.15 GLIBC_2.32 GLIBC_2.25 GLIBC_2.18 GLIBC_2.5 GLIBC_2.27
build / Build ts-x86_64-unknown-linux-gnu	UNKNOWN STEP	2026-10-27T10:52:33.1028743Z SUCCESS: ts package=0.1.0 source=ab6e5493636fd3d1db4b22a071189070f90a189a target=x86_64-unknown-linux-gnu variant=default
build / Build ts-x86_64-unknown-linux-gnu	UNKNOWN STEP	2026-10-27T10:52:35.4624869Z SUCCESS: ts package=0.1.0 source=ab6e5493636fd3d1db4b22a071189070f90a189a target=x86_64-unknown-linux-gnu variant=default
build / Build ts-x86_64-unknown-linux-gnu	UNKNOWN STEP	2026-10-27T10:52:37.0626121Z SUCCESS: ts package=0.1.0 source=ab6e5493636fd3d1db4b22a071189070f90a189a target=x86_64-unknown-linux-gnu variant=default
build / Build ts-x86_64-unknown-linux-gnu	UNKNOWN STEP	2026-10-27T10:52:38.6062591Z SUCCESS: ts package=0.1.0 source=ab6e5493636fd3d1db4b22a071189070f90a189a target=x86_64-unknown-linux-gnu variant=default

axum:
build / Build trusted-server-axum-x86_64-unknown-linux-gnu	UNKNOWN STEP	2026-10-27T10:47:57.2143857Z SUCCESS: final-byte checks x86_64-unknown-linux-gnu GLIBC_2.34 GLIBC_2.2.5 GLIBC_2.14 GLIBC_2.3 GLIBC_2.27 GLIBC_2.29 GLIBC_2.7 GLIBC_2.16 GLIBC_2.33 GLIBC_2.3.4 GLIBC_2.10 GLIBC_2.3.2 GLIBC_2.9 GLIBC_2.30 GLIBC_2.17 GLIBC_2.32 GLIBC_2.28 GLIBC_2.25 GLIBC_2.18
build / Build trusted-server-axum-x86_64-unknown-linux-gnu	UNKNOWN STEP	2026-10-27T10:48:00.2183885Z SUCCESS: Axum rejects EDGEZERO__ADAPTER__PORT=0; exit 1, ports must be 1–65535: sha256:8da84df25d28176be84164040cd45e128c6b4c6a80b7d7cbe17fe2b9f198efc2
build / Build trusted-server-axum-x86_64-unknown-linux-gnu	UNKNOWN STEP	2026-10-27T10:48:00.3195328Z SUCCESS: Axum rejects PORT=0; exit 1, ports must be 1–65535: sha256:8da84df25d28176be84164040cd45e128c6b4c6a80b7d7cbe17fe2b9f198efc2
build / Build trusted-server-axum-x86_64-unknown-linux-gnu	UNKNOWN STEP	2026-10-27T10:48:00.4701200Z SUCCESS: Axum bound to 0.0.0.0:8080; host reached published container port, HTTP 200 ok: debian:12-slim@sha256:7ff6ba31527b9e336162fa061746c366c4b2032f4d2cff2078bea43f78efe3f8 sha256:8da84df25d28176be84164040cd45e128c6b4c6a80b7d7cbe17fe2b9f198efc2
build / Build trusted-server-axum-x86_64-unknown-linux-gnu	UNKNOWN STEP	2026-10-27T10:48:02.5330613Z SUCCESS: Axum rejects EDGEZERO__ADAPTER__PORT=0; exit 1, ports must be 1–65535: sha256:cee13550f97b8a595506e8e4ca74263ba44924248779a4ba4f942e197652acff
build / Build trusted-server-axum-x86_64-unknown-linux-gnu	UNKNOWN STEP	2026-10-27T10:48:02.6710136Z SUCCESS: Axum rejects PORT=0; exit 1, ports must be 1–65535: sha256:cee13550f97b8a595506e8e4ca74263ba44924248779a4ba4f942e197652acff
build / Build trusted-server-axum-x86_64-unknown-linux-gnu	UNKNOWN STEP	2026-10-27T10:48:02.7868698Z SUCCESS: Axum bound to 0.0.0.0:8080; host reached published container port, HTTP 200 ok: ubuntu:22.04@sha256:0a9887931b0e38af2e3487ed39e29436b0535c4f3f52e57745baaf79d1898956 sha256:cee13550f97b8a595506e8e4ca74263ba44924248779a4ba4f942e197652acff
build / Build trusted-server-axum-x86_64-unknown-linux-gnu	UNKNOWN STEP	2026-10-27T10:48:05.5344405Z SUCCESS: Axum rejects EDGEZERO__ADAPTER__PORT=0; exit 1, ports must be 1–65535: sha256:a2c5a85865a585c3bc8b10f6c269358fdf89fe32be4232885166889d85c76421
build / Build trusted-server-axum-x86_64-unknown-linux-gnu	UNKNOWN STEP	2026-10-27T10:48:05.6364699Z SUCCESS: Axum rejects PORT=0; exit 1, ports must be 1–65535: sha256:a2c5a85865a585c3bc8b10f6c269358fdf89fe32be4232885166889d85c76421
build / Build trusted-server-axum-x86_64-unknown-linux-gnu	UNKNOWN STEP	2026-10-27T10:48:05.7863405Z SUCCESS: Axum bound to 0.0.0.0:8080; host reached published container port, HTTP 200 ok: registry.access.redhat.com/ubi9/ubi-minimal:9.6@sha256:34880b64c07f28f64d95737f82f891516de9a3b43583f39970f7bf8e4cfa48b7 sha256:a2c5a85865a585c3bc8b10f6c269358fdf89fe32be4232885166889d85c76421

axum-arm:
build / Build trusted-server-axum-aarch64-unknown-linux-gnu	UNKNOWN STEP	2026-10-27T10:48:18.6394066Z SUCCESS: final-byte checks aarch64-unknown-linux-gnu GLIBC_2.17 GLIBC_2.33 GLIBC_2.34 GLIBC_2.29 GLIBC_2.28 GLIBC_2.30 GLIBC_2.27 GLIBC_2.18 GLIBC_2.25 GLIBC_2.32
build / Build trusted-server-axum-aarch64-unknown-linux-gnu	UNKNOWN STEP	2026-10-27T10:48:21.8037384Z SUCCESS: Axum rejects EDGEZERO__ADAPTER__PORT=0; exit 1, ports must be 1–65535: sha256:28fe65558df3e10c89e7d685cb86544cdc138f242d12100c5b0981f92aae0853
build / Build trusted-server-axum-aarch64-unknown-linux-gnu	UNKNOWN STEP	2026-10-27T10:48:21.9269358Z SUCCESS: Axum rejects PORT=0; exit 1, ports must be 1–65535: sha256:28fe65558df3e10c89e7d685cb86544cdc138f242d12100c5b0981f92aae0853
build / Build trusted-server-axum-aarch64-unknown-linux-gnu	UNKNOWN STEP	2026-10-27T10:48:22.2998229Z SUCCESS: Axum bound to 0.0.0.0:8080; host reached published container port, HTTP 200 ok: debian:12-slim@sha256:7ff6ba31527b9e336162fa061746c366c4b2032f4d2cff2078bea43f78efe3f8 sha256:28fe65558df3e10c89e7d685cb86544cdc138f242d12100c5b0981f92aae0853

axum-musl:
build / Build trusted-server-axum-x86_64-unknown-linux-musl	UNKNOWN STEP	2026-10-27T10:47:40.4714020Z SUCCESS: final-byte checks x86_64-unknown-linux-musl 
build / Build trusted-server-axum-x86_64-unknown-linux-musl	UNKNOWN STEP	2026-10-27T10:47:44.0438969Z SUCCESS: Axum rejects EDGEZERO__ADAPTER__PORT=0; exit 1, ports must be 1–65535: sha256:706db57fb2063f39f69632c5b5c9c439633fda35110e65587c5d85553fd1cc38
build / Build trusted-server-axum-x86_64-unknown-linux-musl	UNKNOWN STEP	2026-10-27T10:47:44.1870531Z SUCCESS: Axum rejects PORT=0; exit 1, ports must be 1–65535: sha256:706db57fb2063f39f69632c5b5c9c439633fda35110e65587c5d85553fd1cc38
build / Build trusted-server-axum-x86_64-unknown-linux-musl	UNKNOWN STEP	2026-10-27T10:47:44.3526215Z SUCCESS: Axum bound to 0.0.0.0:8080; host reached published container port, HTTP 200 ok: alpine:3.22.2@sha256:4b7ce07002c69e8f3d704a9c5d6fd3053be500b7f1c69fc0d80990c2ad8dd412 sha256:706db57fb2063f39f69632c5b5c9c439633fda35110e65587c5d85553fd1cc38
build / Build trusted-server-axum-x86_64-unknown-linux-musl	UNKNOWN STEP	2026-10-27T10:47:44.5905060Z SUCCESS: Axum rejects EDGEZERO__ADAPTER__PORT=0; exit 1, ports must be 1–65535: sha256:bfe50f82a1ac91084d2c7ef8af86fc075427270a89899d8076caa5c90797bfd5
build / Build trusted-server-axum-x86_64-unknown-linux-musl	UNKNOWN STEP	2026-10-27T10:47:44.6943305Z SUCCESS: Axum rejects PORT=0; exit 1, ports must be 1–65535: sha256:bfe50f82a1ac91084d2c7ef8af86fc075427270a89899d8076caa5c90797bfd5
build / Build trusted-server-axum-x86_64-unknown-linux-musl	UNKNOWN STEP	2026-10-27T10:47:44.8170886Z SUCCESS: Axum bound to 0.0.0.0:8080; host reached published container port, HTTP 200 ok: scratch sha256:bfe50f82a1ac91084d2c7ef8af86fc075427270a89899d8076caa5c90797bfd5

fastly:
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T10:47:25.3590024Z SUCCESS: final-byte checks wasm32-wasip1 

release	Verify handoff, create once, publish by release ID and verify	2026-10-27T11:13:15.2636313Z Verified post-publish re-download: all 29 assets byte-identical to signed checksums and handoff

@prk-Jr

prk-Jr commented Oct 27, 2026

Copy link
Copy Markdown
Collaborator Author

Phase 1 rehearsal .14 did not complete — hosted ARM64 runner unavailable.

Source: 68eef902a8bddd9024676cc3806fa5377ed67fee (signed main merge). Exact-head IAB CI passed; fork rehearsal attempt 1 failed because the macOS ARM64 CLI job never acquired a runner.

GitHub job annotation:
The job was not acquired by Runner of type hosted even after multiple attempts

GitHub capacity notice:
Due to capacity constraints, jobs targeting macOS arm64 runners may experience longer queue times.

Result:
Build/check preflight: passed
Fastly, all three Axum builds, Linux CLI, Intel macOS CLI: passed (six builds)
ARM64 macOS CLI: cancelled before any steps; no runner assigned
Signing: skipped
Publication: skipped
Release/draft for v0.0.0-rehearsal.14: none

The lightweight .14 tag remains unchanged. No source, workflow, runner selection, token permissions or settings changed; no signing/publication was attempted. This is a failed rehearsal, not exact-head release evidence. Historical .12 remains attributed to ab6e5493636fd3d1db4b22a071189070f90a189a. A successful fresh rehearsal is still required before proceeding with the Phase 2 merge. The PR remains draft with no reviewers; no IAB tags, releases or settings were touched.

@prk-Jr

prk-Jr commented Oct 28, 2026

Copy link
Copy Markdown
Collaborator Author

Phase 1 main-merge rehearsal .15 passed — transcript 1/2

Source 68eef902a8bddd9024676cc3806fa5377ed67fee; green first attempt, all 16 jobs successful. Fresh lightweight v0.0.0-rehearsal.15: seven binaries / 29 immutable prerelease assets, not Latest. Independent verification passed all assets, 28 checksum entries, both predicates and both signer identities online without bundles and offline with published bundles/custom trusted roots. All source/ref/signer pins remain enforced; 14 SPDX comparisons, native smokes, macOS minimum OS and CLI source identity passed. Full commands and explicit results follow.

Prior .12 stays attributed to ab6e5493636fd3d1db4b22a071189070f90a189a. .14 failed solely on hosted ARM64 runner availability, without signing/publication; its tag remains untouched. Release machinery/source/settings were unchanged between .14 and .15. Local temporary evidence was cleared after interruption, so this independent read-only transcript was reacquired from the existing immutable .15 release; the release workflow was not rerun. The PR remains draft with no reviewers. No IAB tags, releases or settings changed.

Pinned GitHub CLI 2.102.0 archive verified against its official checksums: gh_2.102.0_macOS_arm64.zip: OK.
Independent trusted roots acquired using gh attestation trusted-root; digest follows.

$ gh --version
gh version 2.102.0 (2026-09-30)
https://github.com/cli/cli/releases/tag/v2.102.0
Source 68eef902a8bddd9024676cc3806fa5377ed67fee; tag v0.0.0-rehearsal.15; run https://github.com/prk-Jr/trusted-server/actions/runs/40536697334
$ shasum -a 256 trusted_root.jsonl
65ca537f6ed8a47fd0e560c421baa1f6c1efb8b25fc200d8c5c02c0e92eb2b9c  trusted_root.jsonl
$ gh release download v0.0.0-rehearsal.15 --repo prk-Jr/trusted-server --dir .
$ gh api repos/prk-Jr/trusted-server/releases/tags/v0.0.0-rehearsal.15 > release.json
$ jq -e --arg tag v0.0.0-rehearsal.15 .tag_name==\$tag\ and\ .immutable==true\ and\ .prerelease==true\ and\ .draft==false\ and\ \(.assets\|length\)==29 release.json
true
PASS: exact 29 assets; every API size/digest matches downloaded bytes; checksum coverage exactly 28; no index or deferred companions
$ gh api repos/prk-Jr/trusted-server/releases/latest > latest.json
$ jq -e --arg tag v0.0.0-rehearsal.15 .tag_name\!=\$tag latest.json
true
PASS: prerelease is not Latest
$ gh release verify v0.0.0-rehearsal.15 --repo prk-Jr/trusted-server
Resolved tag v0.0.0-rehearsal.15 to sha1:68eef902a8bddd9024676cc3806fa5377ed67fee
Loaded attestation from GitHub API
✓ Release v0.0.0-rehearsal.15 verified!

Assets
SHA256SUMS	sha256:5b01b2421548a3c0b6a5c5f311b8ae73299bee6d853b6aa2ef3d6cc5466dff9c
trusted-server-axum-aarch64-unknown-linux-gnu	sha256:cbe4bb6c4dff626defcd89737d1517be3b147ba2a24d0eb155d2668c0324094c
trusted-server-axum-aarch64-unknown-linux-gnu.provenance.sigstore.json	sha256:46f7ac2c2e333c69284f6bd7363bc7b27df404e3c4d25c19e37262bfe4e7287c
trusted-server-axum-aarch64-unknown-linux-gnu.sbom.sigstore.json	sha256:10f057195936573a96810a7ee1d276666f8f2c8ed3b70e31b8d4f55d715086fe
trusted-server-axum-aarch64-unknown-linux-gnu.spdx.json	sha256:eff68da8310fe25257431a44f2803f7d75ee68c4785c5d632cc9deeaa0aa0a42
trusted-server-axum-x86_64-unknown-linux-gnu	sha256:612d453f50f9ad1c68c550e5aa83c812a266865a8bb359f4e374a71156a0a280
trusted-server-axum-x86_64-unknown-linux-gnu.provenance.sigstore.json	sha256:8763144ff711dde42669c1ec96abb7bdd288b36cdf9d1d7d40bc8b174f5f9d9c
trusted-server-axum-x86_64-unknown-linux-gnu.sbom.sigstore.json	sha256:30b2814635d6f8d07b9c184212f8ae3f47a15fd0d3505863cf778ecc1592759d
trusted-server-axum-x86_64-unknown-linux-gnu.spdx.json	sha256:59ea1369044618e7d1e1b5c64243479e8bdbb1b1f26c880302e9d4b919d2cbd8
trusted-server-axum-x86_64-unknown-linux-musl	sha256:09a4e1a7c054fb7b1770e158f5bc64d977e0e559197b3f52cbb078c4900bcccf
trusted-server-axum-x86_64-unknown-linux-musl.provenance.sigstore.json	sha256:4da4ddcbc1ca0de8c2273e0a66ba8c75cf13f4d33d7b10e3a27e011df50ab7e8
trusted-server-axum-x86_64-unknown-linux-musl.sbom.sigstore.json	sha256:e12a46fb1a9343905f17c6c4a0e60e35c02c63feab7da601c1f5e964ba076125
trusted-server-axum-x86_64-unknown-linux-musl.spdx.json	sha256:aad6840f37f9a5484af06472c06aab18ab9038cb635e953223807caef8211b83
trusted-server-fastly.wasm	sha256:c97f63ea298f73c0e7750d84f9ae6f4ca8d798fb830474f7709f46b4d2d11a9b
trusted-server-fastly.wasm.provenance.sigstore.json	sha256:574ef31c13583f1b5fcaed51745a8fef19cec06f2e314d2c53db91b9324b746a
trusted-server-fastly.wasm.sbom.sigstore.json	sha256:4d298ab4dcc9de2ea18947db4665619e0841826da8b52bab92dc783cf965bacb
trusted-server-fastly.wasm.spdx.json	sha256:65b7686b9e25e7f72728a88ac3c11df067b94b6d8b0af2c0fcb7903d34c49e7f
ts-aarch64-apple-darwin	sha256:34abc1165ff37c02af3a708c47ddca2451417bec3362dee0f19419e4617fd39a
ts-aarch64-apple-darwin.provenance.sigstore.json	sha256:6f53d968ba3ec06e5236245dbcaa9b81b9eb7e9b7d398e634156edcf9805552b
ts-aarch64-apple-darwin.sbom.sigstore.json	sha256:06c8a8edced92cd55771c32d57bb3974a49ace348f080a4eb09429c6c59b4170
ts-aarch64-apple-darwin.spdx.json	sha256:eb0fe1316d86601ed8d90d960e15a7b8af2bd36738496be83999b3d2c9823826
ts-x86_64-apple-darwin	sha256:150a024b10b76166f7531ec2924c5d36c49b53e05ae3ba45abb4a292b223b0c5
ts-x86_64-apple-darwin.provenance.sigstore.json	sha256:344c478f23a4666257e9ea4b0bd6c4c5cabfb58b7913697983fd9a4fc043f34c
ts-x86_64-apple-darwin.sbom.sigstore.json	sha256:30d11a848ba856d1df47dbd9cc0693602e8dc73e55f54f052104e64ce6a265be
ts-x86_64-apple-darwin.spdx.json	sha256:e90de12e0bed6aa908d085615243a8ee05dd2c0526e512a1ac08f9f80ca9af5e
ts-x86_64-unknown-linux-gnu	sha256:4857b4dccc0c35673da3286d65c793e8e4ba3dd07db386f099b45e7fe4656418
ts-x86_64-unknown-linux-gnu.provenance.sigstore.json	sha256:f253c7e51add0a52327b8699f5b00bd85da3fe84fc89138763fbb0565d55ecda
ts-x86_64-unknown-linux-gnu.sbom.sigstore.json	sha256:528b9c4bdd2fbd8e4f6e72bf66b5f60f0e0d11887855edfc3f49f30189288537
ts-x86_64-unknown-linux-gnu.spdx.json	sha256:e843c1eb2018b21b8f741d97c48eb5b9611046c96bf63d7b4a1adf5a10059fdf

$ gh release verify-asset v0.0.0-rehearsal.15 trusted-server-fastly.wasm --repo prk-Jr/trusted-server
Calculated digest for trusted-server-fastly.wasm: sha256:c97f63ea298f73c0e7750d84f9ae6f4ca8d798fb830474f7709f46b4d2d11a9b
Resolved tag v0.0.0-rehearsal.15 to sha1:68eef902a8bddd9024676cc3806fa5377ed67fee
Loaded attestation from GitHub API

✓ Verification succeeded! trusted-server-fastly.wasm is present in release v0.0.0-rehearsal.15
$ gh release verify-asset v0.0.0-rehearsal.15 trusted-server-fastly.wasm.spdx.json --repo prk-Jr/trusted-server
Calculated digest for trusted-server-fastly.wasm.spdx.json: sha256:65b7686b9e25e7f72728a88ac3c11df067b94b6d8b0af2c0fcb7903d34c49e7f
Resolved tag v0.0.0-rehearsal.15 to sha1:68eef902a8bddd9024676cc3806fa5377ed67fee
Loaded attestation from GitHub API

✓ Verification succeeded! trusted-server-fastly.wasm.spdx.json is present in release v0.0.0-rehearsal.15
$ gh release verify-asset v0.0.0-rehearsal.15 trusted-server-fastly.wasm.provenance.sigstore.json --repo prk-Jr/trusted-server
Calculated digest for trusted-server-fastly.wasm.provenance.sigstore.json: sha256:574ef31c13583f1b5fcaed51745a8fef19cec06f2e314d2c53db91b9324b746a
Resolved tag v0.0.0-rehearsal.15 to sha1:68eef902a8bddd9024676cc3806fa5377ed67fee
Loaded attestation from GitHub API

✓ Verification succeeded! trusted-server-fastly.wasm.provenance.sigstore.json is present in release v0.0.0-rehearsal.15
$ gh release verify-asset v0.0.0-rehearsal.15 trusted-server-fastly.wasm.sbom.sigstore.json --repo prk-Jr/trusted-server
Calculated digest for trusted-server-fastly.wasm.sbom.sigstore.json: sha256:4d298ab4dcc9de2ea18947db4665619e0841826da8b52bab92dc783cf965bacb
Resolved tag v0.0.0-rehearsal.15 to sha1:68eef902a8bddd9024676cc3806fa5377ed67fee
Loaded attestation from GitHub API

✓ Verification succeeded! trusted-server-fastly.wasm.sbom.sigstore.json is present in release v0.0.0-rehearsal.15
$ gh release verify-asset v0.0.0-rehearsal.15 ts-aarch64-apple-darwin --repo prk-Jr/trusted-server
Calculated digest for ts-aarch64-apple-darwin: sha256:34abc1165ff37c02af3a708c47ddca2451417bec3362dee0f19419e4617fd39a
Resolved tag v0.0.0-rehearsal.15 to sha1:68eef902a8bddd9024676cc3806fa5377ed67fee
Loaded attestation from GitHub API

✓ Verification succeeded! ts-aarch64-apple-darwin is present in release v0.0.0-rehearsal.15
$ gh release verify-asset v0.0.0-rehearsal.15 ts-aarch64-apple-darwin.spdx.json --repo prk-Jr/trusted-server
Calculated digest for ts-aarch64-apple-darwin.spdx.json: sha256:eb0fe1316d86601ed8d90d960e15a7b8af2bd36738496be83999b3d2c9823826
Resolved tag v0.0.0-rehearsal.15 to sha1:68eef902a8bddd9024676cc3806fa5377ed67fee
Loaded attestation from GitHub API

✓ Verification succeeded! ts-aarch64-apple-darwin.spdx.json is present in release v0.0.0-rehearsal.15
$ gh release verify-asset v0.0.0-rehearsal.15 ts-aarch64-apple-darwin.provenance.sigstore.json --repo prk-Jr/trusted-server
Calculated digest for ts-aarch64-apple-darwin.provenance.sigstore.json: sha256:6f53d968ba3ec06e5236245dbcaa9b81b9eb7e9b7d398e634156edcf9805552b
Resolved tag v0.0.0-rehearsal.15 to sha1:68eef902a8bddd9024676cc3806fa5377ed67fee
Loaded attestation from GitHub API

✓ Verification succeeded! ts-aarch64-apple-darwin.provenance.sigstore.json is present in release v0.0.0-rehearsal.15
$ gh release verify-asset v0.0.0-rehearsal.15 ts-aarch64-apple-darwin.sbom.sigstore.json --repo prk-Jr/trusted-server
Calculated digest for ts-aarch64-apple-darwin.sbom.sigstore.json: sha256:06c8a8edced92cd55771c32d57bb3974a49ace348f080a4eb09429c6c59b4170
Resolved tag v0.0.0-rehearsal.15 to sha1:68eef902a8bddd9024676cc3806fa5377ed67fee
Loaded attestation from GitHub API

✓ Verification succeeded! ts-aarch64-apple-darwin.sbom.sigstore.json is present in release v0.0.0-rehearsal.15
$ gh release verify-asset v0.0.0-rehearsal.15 ts-x86_64-apple-darwin --repo prk-Jr/trusted-server
Calculated digest for ts-x86_64-apple-darwin: sha256:150a024b10b76166f7531ec2924c5d36c49b53e05ae3ba45abb4a292b223b0c5
Resolved tag v0.0.0-rehearsal.15 to sha1:68eef902a8bddd9024676cc3806fa5377ed67fee
Loaded attestation from GitHub API

✓ Verification succeeded! ts-x86_64-apple-darwin is present in release v0.0.0-rehearsal.15
$ gh release verify-asset v0.0.0-rehearsal.15 ts-x86_64-apple-darwin.spdx.json --repo prk-Jr/trusted-server
Calculated digest for ts-x86_64-apple-darwin.spdx.json: sha256:e90de12e0bed6aa908d085615243a8ee05dd2c0526e512a1ac08f9f80ca9af5e
Resolved tag v0.0.0-rehearsal.15 to sha1:68eef902a8bddd9024676cc3806fa5377ed67fee
Loaded attestation from GitHub API

✓ Verification succeeded! ts-x86_64-apple-darwin.spdx.json is present in release v0.0.0-rehearsal.15
$ gh release verify-asset v0.0.0-rehearsal.15 ts-x86_64-apple-darwin.provenance.sigstore.json --repo prk-Jr/trusted-server
Calculated digest for ts-x86_64-apple-darwin.provenance.sigstore.json: sha256:344c478f23a4666257e9ea4b0bd6c4c5cabfb58b7913697983fd9a4fc043f34c
Resolved tag v0.0.0-rehearsal.15 to sha1:68eef902a8bddd9024676cc3806fa5377ed67fee
Loaded attestation from GitHub API

✓ Verification succeeded! ts-x86_64-apple-darwin.provenance.sigstore.json is present in release v0.0.0-rehearsal.15
$ gh release verify-asset v0.0.0-rehearsal.15 ts-x86_64-apple-darwin.sbom.sigstore.json --repo prk-Jr/trusted-server
Calculated digest for ts-x86_64-apple-darwin.sbom.sigstore.json: sha256:30d11a848ba856d1df47dbd9cc0693602e8dc73e55f54f052104e64ce6a265be
Resolved tag v0.0.0-rehearsal.15 to sha1:68eef902a8bddd9024676cc3806fa5377ed67fee
Loaded attestation from GitHub API

✓ Verification succeeded! ts-x86_64-apple-darwin.sbom.sigstore.json is present in release v0.0.0-rehearsal.15
$ gh release verify-asset v0.0.0-rehearsal.15 ts-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server
Calculated digest for ts-x86_64-unknown-linux-gnu: sha256:4857b4dccc0c35673da3286d65c793e8e4ba3dd07db386f099b45e7fe4656418
Resolved tag v0.0.0-rehearsal.15 to sha1:68eef902a8bddd9024676cc3806fa5377ed67fee
Loaded attestation from GitHub API

✓ Verification succeeded! ts-x86_64-unknown-linux-gnu is present in release v0.0.0-rehearsal.15
$ gh release verify-asset v0.0.0-rehearsal.15 ts-x86_64-unknown-linux-gnu.spdx.json --repo prk-Jr/trusted-server
Calculated digest for ts-x86_64-unknown-linux-gnu.spdx.json: sha256:e843c1eb2018b21b8f741d97c48eb5b9611046c96bf63d7b4a1adf5a10059fdf
Resolved tag v0.0.0-rehearsal.15 to sha1:68eef902a8bddd9024676cc3806fa5377ed67fee
Loaded attestation from GitHub API

✓ Verification succeeded! ts-x86_64-unknown-linux-gnu.spdx.json is present in release v0.0.0-rehearsal.15
$ gh release verify-asset v0.0.0-rehearsal.15 ts-x86_64-unknown-linux-gnu.provenance.sigstore.json --repo prk-Jr/trusted-server
Calculated digest for ts-x86_64-unknown-linux-gnu.provenance.sigstore.json: sha256:f253c7e51add0a52327b8699f5b00bd85da3fe84fc89138763fbb0565d55ecda
Resolved tag v0.0.0-rehearsal.15 to sha1:68eef902a8bddd9024676cc3806fa5377ed67fee
Loaded attestation from GitHub API

✓ Verification succeeded! ts-x86_64-unknown-linux-gnu.provenance.sigstore.json is present in release v0.0.0-rehearsal.15
$ gh release verify-asset v0.0.0-rehearsal.15 ts-x86_64-unknown-linux-gnu.sbom.sigstore.json --repo prk-Jr/trusted-server
Calculated digest for ts-x86_64-unknown-linux-gnu.sbom.sigstore.json: sha256:528b9c4bdd2fbd8e4f6e72bf66b5f60f0e0d11887855edfc3f49f30189288537
Resolved tag v0.0.0-rehearsal.15 to sha1:68eef902a8bddd9024676cc3806fa5377ed67fee
Loaded attestation from GitHub API

✓ Verification succeeded! ts-x86_64-unknown-linux-gnu.sbom.sigstore.json is present in release v0.0.0-rehearsal.15
$ gh release verify-asset v0.0.0-rehearsal.15 trusted-server-axum-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server
Calculated digest for trusted-server-axum-x86_64-unknown-linux-gnu: sha256:612d453f50f9ad1c68c550e5aa83c812a266865a8bb359f4e374a71156a0a280
Resolved tag v0.0.0-rehearsal.15 to sha1:68eef902a8bddd9024676cc3806fa5377ed67fee
Loaded attestation from GitHub API

✓ Verification succeeded! trusted-server-axum-x86_64-unknown-linux-gnu is present in release v0.0.0-rehearsal.15
$ gh release verify-asset v0.0.0-rehearsal.15 trusted-server-axum-x86_64-unknown-linux-gnu.spdx.json --repo prk-Jr/trusted-server
Calculated digest for trusted-server-axum-x86_64-unknown-linux-gnu.spdx.json: sha256:59ea1369044618e7d1e1b5c64243479e8bdbb1b1f26c880302e9d4b919d2cbd8
Resolved tag v0.0.0-rehearsal.15 to sha1:68eef902a8bddd9024676cc3806fa5377ed67fee
Loaded attestation from GitHub API

✓ Verification succeeded! trusted-server-axum-x86_64-unknown-linux-gnu.spdx.json is present in release v0.0.0-rehearsal.15
$ gh release verify-asset v0.0.0-rehearsal.15 trusted-server-axum-x86_64-unknown-linux-gnu.provenance.sigstore.json --repo prk-Jr/trusted-server
Calculated digest for trusted-server-axum-x86_64-unknown-linux-gnu.provenance.sigstore.json: sha256:8763144ff711dde42669c1ec96abb7bdd288b36cdf9d1d7d40bc8b174f5f9d9c
Resolved tag v0.0.0-rehearsal.15 to sha1:68eef902a8bddd9024676cc3806fa5377ed67fee
Loaded attestation from GitHub API

✓ Verification succeeded! trusted-server-axum-x86_64-unknown-linux-gnu.provenance.sigstore.json is present in release v0.0.0-rehearsal.15
$ gh release verify-asset v0.0.0-rehearsal.15 trusted-server-axum-x86_64-unknown-linux-gnu.sbom.sigstore.json --repo prk-Jr/trusted-server
Calculated digest for trusted-server-axum-x86_64-unknown-linux-gnu.sbom.sigstore.json: sha256:30b2814635d6f8d07b9c184212f8ae3f47a15fd0d3505863cf778ecc1592759d
Resolved tag v0.0.0-rehearsal.15 to sha1:68eef902a8bddd9024676cc3806fa5377ed67fee
Loaded attestation from GitHub API

✓ Verification succeeded! trusted-server-axum-x86_64-unknown-linux-gnu.sbom.sigstore.json is present in release v0.0.0-rehearsal.15
$ gh release verify-asset v0.0.0-rehearsal.15 trusted-server-axum-x86_64-unknown-linux-musl --repo prk-Jr/trusted-server
Calculated digest for trusted-server-axum-x86_64-unknown-linux-musl: sha256:09a4e1a7c054fb7b1770e158f5bc64d977e0e559197b3f52cbb078c4900bcccf
Resolved tag v0.0.0-rehearsal.15 to sha1:68eef902a8bddd9024676cc3806fa5377ed67fee
Loaded attestation from GitHub API

✓ Verification succeeded! trusted-server-axum-x86_64-unknown-linux-musl is present in release v0.0.0-rehearsal.15
$ gh release verify-asset v0.0.0-rehearsal.15 trusted-server-axum-x86_64-unknown-linux-musl.spdx.json --repo prk-Jr/trusted-server
Calculated digest for trusted-server-axum-x86_64-unknown-linux-musl.spdx.json: sha256:aad6840f37f9a5484af06472c06aab18ab9038cb635e953223807caef8211b83
Resolved tag v0.0.0-rehearsal.15 to sha1:68eef902a8bddd9024676cc3806fa5377ed67fee
Loaded attestation from GitHub API

✓ Verification succeeded! trusted-server-axum-x86_64-unknown-linux-musl.spdx.json is present in release v0.0.0-rehearsal.15
$ gh release verify-asset v0.0.0-rehearsal.15 trusted-server-axum-x86_64-unknown-linux-musl.provenance.sigstore.json --repo prk-Jr/trusted-server
Calculated digest for trusted-server-axum-x86_64-unknown-linux-musl.provenance.sigstore.json: sha256:4da4ddcbc1ca0de8c2273e0a66ba8c75cf13f4d33d7b10e3a27e011df50ab7e8
Resolved tag v0.0.0-rehearsal.15 to sha1:68eef902a8bddd9024676cc3806fa5377ed67fee
Loaded attestation from GitHub API

✓ Verification succeeded! trusted-server-axum-x86_64-unknown-linux-musl.provenance.sigstore.json is present in release v0.0.0-rehearsal.15
$ gh release verify-asset v0.0.0-rehearsal.15 trusted-server-axum-x86_64-unknown-linux-musl.sbom.sigstore.json --repo prk-Jr/trusted-server
Calculated digest for trusted-server-axum-x86_64-unknown-linux-musl.sbom.sigstore.json: sha256:e12a46fb1a9343905f17c6c4a0e60e35c02c63feab7da601c1f5e964ba076125
Resolved tag v0.0.0-rehearsal.15 to sha1:68eef902a8bddd9024676cc3806fa5377ed67fee
Loaded attestation from GitHub API

✓ Verification succeeded! trusted-server-axum-x86_64-unknown-linux-musl.sbom.sigstore.json is present in release v0.0.0-rehearsal.15
$ gh release verify-asset v0.0.0-rehearsal.15 trusted-server-axum-aarch64-unknown-linux-gnu --repo prk-Jr/trusted-server
Calculated digest for trusted-server-axum-aarch64-unknown-linux-gnu: sha256:cbe4bb6c4dff626defcd89737d1517be3b147ba2a24d0eb155d2668c0324094c
Resolved tag v0.0.0-rehearsal.15 to sha1:68eef902a8bddd9024676cc3806fa5377ed67fee
Loaded attestation from GitHub API

✓ Verification succeeded! trusted-server-axum-aarch64-unknown-linux-gnu is present in release v0.0.0-rehearsal.15
$ gh release verify-asset v0.0.0-rehearsal.15 trusted-server-axum-aarch64-unknown-linux-gnu.spdx.json --repo prk-Jr/trusted-server
Calculated digest for trusted-server-axum-aarch64-unknown-linux-gnu.spdx.json: sha256:eff68da8310fe25257431a44f2803f7d75ee68c4785c5d632cc9deeaa0aa0a42
Resolved tag v0.0.0-rehearsal.15 to sha1:68eef902a8bddd9024676cc3806fa5377ed67fee
Loaded attestation from GitHub API

✓ Verification succeeded! trusted-server-axum-aarch64-unknown-linux-gnu.spdx.json is present in release v0.0.0-rehearsal.15
$ gh release verify-asset v0.0.0-rehearsal.15 trusted-server-axum-aarch64-unknown-linux-gnu.provenance.sigstore.json --repo prk-Jr/trusted-server
Calculated digest for trusted-server-axum-aarch64-unknown-linux-gnu.provenance.sigstore.json: sha256:46f7ac2c2e333c69284f6bd7363bc7b27df404e3c4d25c19e37262bfe4e7287c
Resolved tag v0.0.0-rehearsal.15 to sha1:68eef902a8bddd9024676cc3806fa5377ed67fee
Loaded attestation from GitHub API

✓ Verification succeeded! trusted-server-axum-aarch64-unknown-linux-gnu.provenance.sigstore.json is present in release v0.0.0-rehearsal.15
$ gh release verify-asset v0.0.0-rehearsal.15 trusted-server-axum-aarch64-unknown-linux-gnu.sbom.sigstore.json --repo prk-Jr/trusted-server
Calculated digest for trusted-server-axum-aarch64-unknown-linux-gnu.sbom.sigstore.json: sha256:10f057195936573a96810a7ee1d276666f8f2c8ed3b70e31b8d4f55d715086fe
Resolved tag v0.0.0-rehearsal.15 to sha1:68eef902a8bddd9024676cc3806fa5377ed67fee
Loaded attestation from GitHub API

✓ Verification succeeded! trusted-server-axum-aarch64-unknown-linux-gnu.sbom.sigstore.json is present in release v0.0.0-rehearsal.15
$ gh release verify-asset v0.0.0-rehearsal.15 SHA256SUMS --repo prk-Jr/trusted-server
Calculated digest for SHA256SUMS: sha256:5b01b2421548a3c0b6a5c5f311b8ae73299bee6d853b6aa2ef3d6cc5466dff9c
Resolved tag v0.0.0-rehearsal.15 to sha1:68eef902a8bddd9024676cc3806fa5377ed67fee
Loaded attestation from GitHub API

✓ Verification succeeded! SHA256SUMS is present in release v0.0.0-rehearsal.15
$ shasum -a 256 --check SHA256SUMS
trusted-server-axum-x86_64-unknown-linux-gnu: OK
trusted-server-axum-x86_64-unknown-linux-gnu.spdx.json: OK
trusted-server-axum-x86_64-unknown-linux-gnu.provenance.sigstore.json: OK
trusted-server-axum-x86_64-unknown-linux-gnu.sbom.sigstore.json: OK
trusted-server-axum-x86_64-unknown-linux-musl: OK
trusted-server-axum-x86_64-unknown-linux-musl.spdx.json: OK
trusted-server-axum-x86_64-unknown-linux-musl.provenance.sigstore.json: OK
trusted-server-axum-x86_64-unknown-linux-musl.sbom.sigstore.json: OK
trusted-server-axum-aarch64-unknown-linux-gnu: OK
trusted-server-axum-aarch64-unknown-linux-gnu.spdx.json: OK
trusted-server-axum-aarch64-unknown-linux-gnu.provenance.sigstore.json: OK
trusted-server-axum-aarch64-unknown-linux-gnu.sbom.sigstore.json: OK
trusted-server-fastly.wasm: OK
trusted-server-fastly.wasm.spdx.json: OK
trusted-server-fastly.wasm.provenance.sigstore.json: OK
trusted-server-fastly.wasm.sbom.sigstore.json: OK
ts-aarch64-apple-darwin: OK
ts-aarch64-apple-darwin.spdx.json: OK
ts-aarch64-apple-darwin.provenance.sigstore.json: OK
ts-aarch64-apple-darwin.sbom.sigstore.json: OK
ts-x86_64-apple-darwin: OK
ts-x86_64-apple-darwin.spdx.json: OK
ts-x86_64-apple-darwin.provenance.sigstore.json: OK
ts-x86_64-apple-darwin.sbom.sigstore.json: OK
ts-x86_64-unknown-linux-gnu: OK
ts-x86_64-unknown-linux-gnu.spdx.json: OK
ts-x86_64-unknown-linux-gnu.provenance.sigstore.json: OK
ts-x86_64-unknown-linux-gnu.sbom.sigstore.json: OK
$ shasum -a 256 --check RELEASE_API_BINARY_SHA256SUMS
trusted-server-axum-aarch64-unknown-linux-gnu: OK
trusted-server-axum-x86_64-unknown-linux-gnu: OK
trusted-server-axum-x86_64-unknown-linux-musl: OK
trusted-server-fastly.wasm: OK
ts-aarch64-apple-darwin: OK
ts-x86_64-apple-darwin: OK
ts-x86_64-unknown-linux-gnu: OK
$ gh attestation verify trusted-server-fastly.wasm --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.15 --source-digest 68eef902a8bddd9024676cc3806fa5377ed67fee --signer-digest 68eef902a8bddd9024676cc3806fa5377ed67fee --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --bundle trusted-server-fastly.wasm.provenance.sigstore.json --custom-trusted-root trusted_root.jsonl --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
$ gh attestation verify trusted-server-fastly.wasm --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.15 --source-digest 68eef902a8bddd9024676cc3806fa5377ed67fee --signer-digest 68eef902a8bddd9024676cc3806fa5377ed67fee --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --bundle trusted-server-fastly.wasm.provenance.sigstore.json --custom-trusted-root trusted_root.jsonl --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.15 --format json > trusted-server-fastly.wasm.offline-provenance.verified.json
$ jq -e length\>0 trusted-server-fastly.wasm.offline-provenance.verified.json
true
$ jq -e --arg invocation https://github.com/prk-Jr/trusted-server/actions/runs/40536697334/attempts/1 all\(.\[\]\;\ .verificationResult.statement.predicate.runDetails.metadata.invocationId==\$invocation\) trusted-server-fastly.wasm.offline-provenance.verified.json
true
PASS: trusted-server-fastly.wasm offline provenance exact reusable signer and source pins
$ gh attestation verify trusted-server-fastly.wasm --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.15 --source-digest 68eef902a8bddd9024676cc3806fa5377ed67fee --signer-digest 68eef902a8bddd9024676cc3806fa5377ed67fee --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
$ gh attestation verify trusted-server-fastly.wasm --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.15 --source-digest 68eef902a8bddd9024676cc3806fa5377ed67fee --signer-digest 68eef902a8bddd9024676cc3806fa5377ed67fee --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.15 --format json > trusted-server-fastly.wasm.online-provenance.verified.json
$ jq -e length\>0 trusted-server-fastly.wasm.online-provenance.verified.json
true
$ jq -e --arg invocation https://github.com/prk-Jr/trusted-server/actions/runs/40536697334/attempts/1 all\(.\[\]\;\ .verificationResult.statement.predicate.runDetails.metadata.invocationId==\$invocation\) trusted-server-fastly.wasm.online-provenance.verified.json
true
PASS: trusted-server-fastly.wasm online provenance exact reusable signer and source pins
$ gh attestation verify trusted-server-fastly.wasm --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.15 --source-digest 68eef902a8bddd9024676cc3806fa5377ed67fee --signer-digest 68eef902a8bddd9024676cc3806fa5377ed67fee --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --bundle trusted-server-fastly.wasm.sbom.sigstore.json --custom-trusted-root trusted_root.jsonl --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
$ gh attestation verify trusted-server-fastly.wasm --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.15 --source-digest 68eef902a8bddd9024676cc3806fa5377ed67fee --signer-digest 68eef902a8bddd9024676cc3806fa5377ed67fee --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --bundle trusted-server-fastly.wasm.sbom.sigstore.json --custom-trusted-root trusted_root.jsonl --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.15 --format json > trusted-server-fastly.wasm.offline-sbom.verified.json
$ jq -e length\>0 trusted-server-fastly.wasm.offline-sbom.verified.json
true
PASS: trusted-server-fastly.wasm offline sbom exact reusable signer and source pins
$ jq -e --slurpfile document trusted-server-fastly.wasm.spdx.json length==1\ and\ .\[0\].verificationResult.statement.predicate==\$document\[0\] trusted-server-fastly.wasm.offline-sbom.verified.json
true
PASS: trusted-server-fastly.wasm offline verified SPDX equals shipped SPDX
$ gh attestation verify trusted-server-fastly.wasm --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.15 --source-digest 68eef902a8bddd9024676cc3806fa5377ed67fee --signer-digest 68eef902a8bddd9024676cc3806fa5377ed67fee --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
$ gh attestation verify trusted-server-fastly.wasm --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.15 --source-digest 68eef902a8bddd9024676cc3806fa5377ed67fee --signer-digest 68eef902a8bddd9024676cc3806fa5377ed67fee --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.15 --format json > trusted-server-fastly.wasm.online-sbom.verified.json
$ jq -e length\>0 trusted-server-fastly.wasm.online-sbom.verified.json
true
PASS: trusted-server-fastly.wasm online sbom exact reusable signer and source pins
$ jq -e --slurpfile document trusted-server-fastly.wasm.spdx.json any\(.\[\]\;\ .verificationResult.statement.predicate==\$document\[0\]\) trusted-server-fastly.wasm.online-sbom.verified.json
true
PASS: trusted-server-fastly.wasm online verified SPDX equals shipped SPDX
$ gh attestation verify ts-aarch64-apple-darwin --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.15 --source-digest 68eef902a8bddd9024676cc3806fa5377ed67fee --signer-digest 68eef902a8bddd9024676cc3806fa5377ed67fee --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --bundle ts-aarch64-apple-darwin.provenance.sigstore.json --custom-trusted-root trusted_root.jsonl --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
$ gh attestation verify ts-aarch64-apple-darwin --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.15 --source-digest 68eef902a8bddd9024676cc3806fa5377ed67fee --signer-digest 68eef902a8bddd9024676cc3806fa5377ed67fee --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --bundle ts-aarch64-apple-darwin.provenance.sigstore.json --custom-trusted-root trusted_root.jsonl --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.15 --format json > ts-aarch64-apple-darwin.offline-provenance.verified.json
$ jq -e length\>0 ts-aarch64-apple-darwin.offline-provenance.verified.json
true
$ jq -e --arg invocation https://github.com/prk-Jr/trusted-server/actions/runs/40536697334/attempts/1 all\(.\[\]\;\ .verificationResult.statement.predicate.runDetails.metadata.invocationId==\$invocation\) ts-aarch64-apple-darwin.offline-provenance.verified.json
true
PASS: ts-aarch64-apple-darwin offline provenance exact reusable signer and source pins
$ gh attestation verify ts-aarch64-apple-darwin --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.15 --source-digest 68eef902a8bddd9024676cc3806fa5377ed67fee --signer-digest 68eef902a8bddd9024676cc3806fa5377ed67fee --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
$ gh attestation verify ts-aarch64-apple-darwin --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.15 --source-digest 68eef902a8bddd9024676cc3806fa5377ed67fee --signer-digest 68eef902a8bddd9024676cc3806fa5377ed67fee --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.15 --format json > ts-aarch64-apple-darwin.online-provenance.verified.json
$ jq -e length\>0 ts-aarch64-apple-darwin.online-provenance.verified.json
true
$ jq -e --arg invocation https://github.com/prk-Jr/trusted-server/actions/runs/40536697334/attempts/1 all\(.\[\]\;\ .verificationResult.statement.predicate.runDetails.metadata.invocationId==\$invocation\) ts-aarch64-apple-darwin.online-provenance.verified.json
true
PASS: ts-aarch64-apple-darwin online provenance exact reusable signer and source pins
$ gh attestation verify ts-aarch64-apple-darwin --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.15 --source-digest 68eef902a8bddd9024676cc3806fa5377ed67fee --signer-digest 68eef902a8bddd9024676cc3806fa5377ed67fee --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --bundle ts-aarch64-apple-darwin.sbom.sigstore.json --custom-trusted-root trusted_root.jsonl --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
$ gh attestation verify ts-aarch64-apple-darwin --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.15 --source-digest 68eef902a8bddd9024676cc3806fa5377ed67fee --signer-digest 68eef902a8bddd9024676cc3806fa5377ed67fee --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --bundle ts-aarch64-apple-darwin.sbom.sigstore.json --custom-trusted-root trusted_root.jsonl --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.15 --format json > ts-aarch64-apple-darwin.offline-sbom.verified.json
$ jq -e length\>0 ts-aarch64-apple-darwin.offline-sbom.verified.json
true
PASS: ts-aarch64-apple-darwin offline sbom exact reusable signer and source pins
$ jq -e --slurpfile document ts-aarch64-apple-darwin.spdx.json length==1\ and\ .\[0\].verificationResult.statement.predicate==\$document\[0\] ts-aarch64-apple-darwin.offline-sbom.verified.json
true
PASS: ts-aarch64-apple-darwin offline verified SPDX equals shipped SPDX
$ gh attestation verify ts-aarch64-apple-darwin --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.15 --source-digest 68eef902a8bddd9024676cc3806fa5377ed67fee --signer-digest 68eef902a8bddd9024676cc3806fa5377ed67fee --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
$ gh attestation verify ts-aarch64-apple-darwin --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.15 --source-digest 68eef902a8bddd9024676cc3806fa5377ed67fee --signer-digest 68eef902a8bddd9024676cc3806fa5377ed67fee --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.15 --format json > ts-aarch64-apple-darwin.online-sbom.verified.json
$ jq -e length\>0 ts-aarch64-apple-darwin.online-sbom.verified.json
true
PASS: ts-aarch64-apple-darwin online sbom exact reusable signer and source pins
$ jq -e --slurpfile document ts-aarch64-apple-darwin.spdx.json any\(.\[\]\;\ .verificationResult.statement.predicate==\$document\[0\]\) ts-aarch64-apple-darwin.online-sbom.verified.json
true
PASS: ts-aarch64-apple-darwin online verified SPDX equals shipped SPDX
$ gh attestation verify ts-x86_64-apple-darwin --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.15 --source-digest 68eef902a8bddd9024676cc3806fa5377ed67fee --signer-digest 68eef902a8bddd9024676cc3806fa5377ed67fee --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --bundle ts-x86_64-apple-darwin.provenance.sigstore.json --custom-trusted-root trusted_root.jsonl --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
$ gh attestation verify ts-x86_64-apple-darwin --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.15 --source-digest 68eef902a8bddd9024676cc3806fa5377ed67fee --signer-digest 68eef902a8bddd9024676cc3806fa5377ed67fee --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --bundle ts-x86_64-apple-darwin.provenance.sigstore.json --custom-trusted-root trusted_root.jsonl --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.15 --format json > ts-x86_64-apple-darwin.offline-provenance.verified.json
$ jq -e length\>0 ts-x86_64-apple-darwin.offline-provenance.verified.json
true
$ jq -e --arg invocation https://github.com/prk-Jr/trusted-server/actions/runs/40536697334/attempts/1 all\(.\[\]\;\ .verificationResult.statement.predicate.runDetails.metadata.invocationId==\$invocation\) ts-x86_64-apple-darwin.offline-provenance.verified.json
true
PASS: ts-x86_64-apple-darwin offline provenance exact reusable signer and source pins
$ gh attestation verify ts-x86_64-apple-darwin --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.15 --source-digest 68eef902a8bddd9024676cc3806fa5377ed67fee --signer-digest 68eef902a8bddd9024676cc3806fa5377ed67fee --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
$ gh attestation verify ts-x86_64-apple-darwin --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.15 --source-digest 68eef902a8bddd9024676cc3806fa5377ed67fee --signer-digest 68eef902a8bddd9024676cc3806fa5377ed67fee --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.15 --format json > ts-x86_64-apple-darwin.online-provenance.verified.json
$ jq -e length\>0 ts-x86_64-apple-darwin.online-provenance.verified.json
true
$ jq -e --arg invocation https://github.com/prk-Jr/trusted-server/actions/runs/40536697334/attempts/1 all\(.\[\]\;\ .verificationResult.statement.predicate.runDetails.metadata.invocationId==\$invocation\) ts-x86_64-apple-darwin.online-provenance.verified.json
true
PASS: ts-x86_64-apple-darwin online provenance exact reusable signer and source pins
$ gh attestation verify ts-x86_64-apple-darwin --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.15 --source-digest 68eef902a8bddd9024676cc3806fa5377ed67fee --signer-digest 68eef902a8bddd9024676cc3806fa5377ed67fee --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --bundle ts-x86_64-apple-darwin.sbom.sigstore.json --custom-trusted-root trusted_root.jsonl --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
$ gh attestation verify ts-x86_64-apple-darwin --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.15 --source-digest 68eef902a8bddd9024676cc3806fa5377ed67fee --signer-digest 68eef902a8bddd9024676cc3806fa5377ed67fee --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --bundle ts-x86_64-apple-darwin.sbom.sigstore.json --custom-trusted-root trusted_root.jsonl --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.15 --format json > ts-x86_64-apple-darwin.offline-sbom.verified.json
$ jq -e length\>0 ts-x86_64-apple-darwin.offline-sbom.verified.json
true
PASS: ts-x86_64-apple-darwin offline sbom exact reusable signer and source pins
$ jq -e --slurpfile document ts-x86_64-apple-darwin.spdx.json length==1\ and\ .\[0\].verificationResult.statement.predicate==\$document\[0\] ts-x86_64-apple-darwin.offline-sbom.verified.json
true
PASS: ts-x86_64-apple-darwin offline verified SPDX equals shipped SPDX
$ gh attestation verify ts-x86_64-apple-darwin --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.15 --source-digest 68eef902a8bddd9024676cc3806fa5377ed67fee --signer-digest 68eef902a8bddd9024676cc3806fa5377ed67fee --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
$ gh attestation verify ts-x86_64-apple-darwin --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.15 --source-digest 68eef902a8bddd9024676cc3806fa5377ed67fee --signer-digest 68eef902a8bddd9024676cc3806fa5377ed67fee --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.15 --format json > ts-x86_64-apple-darwin.online-sbom.verified.json
$ jq -e length\>0 ts-x86_64-apple-darwin.online-sbom.verified.json
true
PASS: ts-x86_64-apple-darwin online sbom exact reusable signer and source pins
$ jq -e --slurpfile document ts-x86_64-apple-darwin.spdx.json any\(.\[\]\;\ .verificationResult.statement.predicate==\$document\[0\]\) ts-x86_64-apple-darwin.online-sbom.verified.json
true
PASS: ts-x86_64-apple-darwin online verified SPDX equals shipped SPDX
$ gh attestation verify ts-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.15 --source-digest 68eef902a8bddd9024676cc3806fa5377ed67fee --signer-digest 68eef902a8bddd9024676cc3806fa5377ed67fee --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --bundle ts-x86_64-unknown-linux-gnu.provenance.sigstore.json --custom-trusted-root trusted_root.jsonl --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
$ gh attestation verify ts-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.15 --source-digest 68eef902a8bddd9024676cc3806fa5377ed67fee --signer-digest 68eef902a8bddd9024676cc3806fa5377ed67fee --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --bundle ts-x86_64-unknown-linux-gnu.provenance.sigstore.json --custom-trusted-root trusted_root.jsonl --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.15 --format json > ts-x86_64-unknown-linux-gnu.offline-provenance.verified.json
$ jq -e length\>0 ts-x86_64-unknown-linux-gnu.offline-provenance.verified.json
true
$ jq -e --arg invocation https://github.com/prk-Jr/trusted-server/actions/runs/40536697334/attempts/1 all\(.\[\]\;\ .verificationResult.statement.predicate.runDetails.metadata.invocationId==\$invocation\) ts-x86_64-unknown-linux-gnu.offline-provenance.verified.json
true
PASS: ts-x86_64-unknown-linux-gnu offline provenance exact reusable signer and source pins
$ gh attestation verify ts-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.15 --source-digest 68eef902a8bddd9024676cc3806fa5377ed67fee --signer-digest 68eef902a8bddd9024676cc3806fa5377ed67fee --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
$ gh attestation verify ts-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.15 --source-digest 68eef902a8bddd9024676cc3806fa5377ed67fee --signer-digest 68eef902a8bddd9024676cc3806fa5377ed67fee --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.15 --format json > ts-x86_64-unknown-linux-gnu.online-provenance.verified.json
$ jq -e length\>0 ts-x86_64-unknown-linux-gnu.online-provenance.verified.json
true
$ jq -e --arg invocation https://github.com/prk-Jr/trusted-server/actions/runs/40536697334/attempts/1 all\(.\[\]\;\ .verificationResult.statement.predicate.runDetails.metadata.invocationId==\$invocation\) ts-x86_64-unknown-linux-gnu.online-provenance.verified.json
true
PASS: ts-x86_64-unknown-linux-gnu online provenance exact reusable signer and source pins
$ gh attestation verify ts-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.15 --source-digest 68eef902a8bddd9024676cc3806fa5377ed67fee --signer-digest 68eef902a8bddd9024676cc3806fa5377ed67fee --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --bundle ts-x86_64-unknown-linux-gnu.sbom.sigstore.json --custom-trusted-root trusted_root.jsonl --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml

@prk-Jr

prk-Jr commented Oct 28, 2026

Copy link
Copy Markdown
Collaborator Author

Phase 1 main-merge rehearsal .15 passed — transcript 2/2

Source 68eef902a8bddd9024676cc3806fa5377ed67fee; green first attempt, all 16 jobs successful. Fresh lightweight v0.0.0-rehearsal.15: seven binaries / 29 immutable prerelease assets, not Latest. Independent verification passed all assets, 28 checksum entries, both predicates and both signer identities online without bundles and offline with published bundles/custom trusted roots. All source/ref/signer pins remain enforced; 14 SPDX comparisons, native smokes, macOS minimum OS and CLI source identity passed. Full commands and explicit results follow.

Prior .12 stays attributed to ab6e5493636fd3d1db4b22a071189070f90a189a. .14 failed solely on hosted ARM64 runner availability, without signing/publication; its tag remains untouched. Release machinery/source/settings were unchanged between .14 and .15. Local temporary evidence was cleared after interruption, so this independent read-only transcript was reacquired from the existing immutable .15 release; the release workflow was not rerun. The PR remains draft with no reviewers. No IAB tags, releases or settings changed.

$ gh attestation verify ts-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.15 --source-digest 68eef902a8bddd9024676cc3806fa5377ed67fee --signer-digest 68eef902a8bddd9024676cc3806fa5377ed67fee --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --bundle ts-x86_64-unknown-linux-gnu.sbom.sigstore.json --custom-trusted-root trusted_root.jsonl --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.15 --format json > ts-x86_64-unknown-linux-gnu.offline-sbom.verified.json
$ jq -e length\>0 ts-x86_64-unknown-linux-gnu.offline-sbom.verified.json
true
PASS: ts-x86_64-unknown-linux-gnu offline sbom exact reusable signer and source pins
$ jq -e --slurpfile document ts-x86_64-unknown-linux-gnu.spdx.json length==1\ and\ .\[0\].verificationResult.statement.predicate==\$document\[0\] ts-x86_64-unknown-linux-gnu.offline-sbom.verified.json
true
PASS: ts-x86_64-unknown-linux-gnu offline verified SPDX equals shipped SPDX
$ gh attestation verify ts-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.15 --source-digest 68eef902a8bddd9024676cc3806fa5377ed67fee --signer-digest 68eef902a8bddd9024676cc3806fa5377ed67fee --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
$ gh attestation verify ts-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.15 --source-digest 68eef902a8bddd9024676cc3806fa5377ed67fee --signer-digest 68eef902a8bddd9024676cc3806fa5377ed67fee --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.15 --format json > ts-x86_64-unknown-linux-gnu.online-sbom.verified.json
$ jq -e length\>0 ts-x86_64-unknown-linux-gnu.online-sbom.verified.json
true
PASS: ts-x86_64-unknown-linux-gnu online sbom exact reusable signer and source pins
$ jq -e --slurpfile document ts-x86_64-unknown-linux-gnu.spdx.json any\(.\[\]\;\ .verificationResult.statement.predicate==\$document\[0\]\) ts-x86_64-unknown-linux-gnu.online-sbom.verified.json
true
PASS: ts-x86_64-unknown-linux-gnu online verified SPDX equals shipped SPDX
$ gh attestation verify trusted-server-axum-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.15 --source-digest 68eef902a8bddd9024676cc3806fa5377ed67fee --signer-digest 68eef902a8bddd9024676cc3806fa5377ed67fee --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --bundle trusted-server-axum-x86_64-unknown-linux-gnu.provenance.sigstore.json --custom-trusted-root trusted_root.jsonl --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
$ gh attestation verify trusted-server-axum-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.15 --source-digest 68eef902a8bddd9024676cc3806fa5377ed67fee --signer-digest 68eef902a8bddd9024676cc3806fa5377ed67fee --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --bundle trusted-server-axum-x86_64-unknown-linux-gnu.provenance.sigstore.json --custom-trusted-root trusted_root.jsonl --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.15 --format json > trusted-server-axum-x86_64-unknown-linux-gnu.offline-provenance.verified.json
$ jq -e length\>0 trusted-server-axum-x86_64-unknown-linux-gnu.offline-provenance.verified.json
true
$ jq -e --arg invocation https://github.com/prk-Jr/trusted-server/actions/runs/40536697334/attempts/1 all\(.\[\]\;\ .verificationResult.statement.predicate.runDetails.metadata.invocationId==\$invocation\) trusted-server-axum-x86_64-unknown-linux-gnu.offline-provenance.verified.json
true
PASS: trusted-server-axum-x86_64-unknown-linux-gnu offline provenance exact reusable signer and source pins
$ gh attestation verify trusted-server-axum-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.15 --source-digest 68eef902a8bddd9024676cc3806fa5377ed67fee --signer-digest 68eef902a8bddd9024676cc3806fa5377ed67fee --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
$ gh attestation verify trusted-server-axum-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.15 --source-digest 68eef902a8bddd9024676cc3806fa5377ed67fee --signer-digest 68eef902a8bddd9024676cc3806fa5377ed67fee --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.15 --format json > trusted-server-axum-x86_64-unknown-linux-gnu.online-provenance.verified.json
$ jq -e length\>0 trusted-server-axum-x86_64-unknown-linux-gnu.online-provenance.verified.json
true
$ jq -e --arg invocation https://github.com/prk-Jr/trusted-server/actions/runs/40536697334/attempts/1 all\(.\[\]\;\ .verificationResult.statement.predicate.runDetails.metadata.invocationId==\$invocation\) trusted-server-axum-x86_64-unknown-linux-gnu.online-provenance.verified.json
true
PASS: trusted-server-axum-x86_64-unknown-linux-gnu online provenance exact reusable signer and source pins
$ gh attestation verify trusted-server-axum-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.15 --source-digest 68eef902a8bddd9024676cc3806fa5377ed67fee --signer-digest 68eef902a8bddd9024676cc3806fa5377ed67fee --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --bundle trusted-server-axum-x86_64-unknown-linux-gnu.sbom.sigstore.json --custom-trusted-root trusted_root.jsonl --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
$ gh attestation verify trusted-server-axum-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.15 --source-digest 68eef902a8bddd9024676cc3806fa5377ed67fee --signer-digest 68eef902a8bddd9024676cc3806fa5377ed67fee --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --bundle trusted-server-axum-x86_64-unknown-linux-gnu.sbom.sigstore.json --custom-trusted-root trusted_root.jsonl --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.15 --format json > trusted-server-axum-x86_64-unknown-linux-gnu.offline-sbom.verified.json
$ jq -e length\>0 trusted-server-axum-x86_64-unknown-linux-gnu.offline-sbom.verified.json
true
PASS: trusted-server-axum-x86_64-unknown-linux-gnu offline sbom exact reusable signer and source pins
$ jq -e --slurpfile document trusted-server-axum-x86_64-unknown-linux-gnu.spdx.json length==1\ and\ .\[0\].verificationResult.statement.predicate==\$document\[0\] trusted-server-axum-x86_64-unknown-linux-gnu.offline-sbom.verified.json
true
PASS: trusted-server-axum-x86_64-unknown-linux-gnu offline verified SPDX equals shipped SPDX
$ gh attestation verify trusted-server-axum-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.15 --source-digest 68eef902a8bddd9024676cc3806fa5377ed67fee --signer-digest 68eef902a8bddd9024676cc3806fa5377ed67fee --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
$ gh attestation verify trusted-server-axum-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.15 --source-digest 68eef902a8bddd9024676cc3806fa5377ed67fee --signer-digest 68eef902a8bddd9024676cc3806fa5377ed67fee --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.15 --format json > trusted-server-axum-x86_64-unknown-linux-gnu.online-sbom.verified.json
$ jq -e length\>0 trusted-server-axum-x86_64-unknown-linux-gnu.online-sbom.verified.json
true
PASS: trusted-server-axum-x86_64-unknown-linux-gnu online sbom exact reusable signer and source pins
$ jq -e --slurpfile document trusted-server-axum-x86_64-unknown-linux-gnu.spdx.json any\(.\[\]\;\ .verificationResult.statement.predicate==\$document\[0\]\) trusted-server-axum-x86_64-unknown-linux-gnu.online-sbom.verified.json
true
PASS: trusted-server-axum-x86_64-unknown-linux-gnu online verified SPDX equals shipped SPDX
$ gh attestation verify trusted-server-axum-x86_64-unknown-linux-musl --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.15 --source-digest 68eef902a8bddd9024676cc3806fa5377ed67fee --signer-digest 68eef902a8bddd9024676cc3806fa5377ed67fee --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --bundle trusted-server-axum-x86_64-unknown-linux-musl.provenance.sigstore.json --custom-trusted-root trusted_root.jsonl --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
$ gh attestation verify trusted-server-axum-x86_64-unknown-linux-musl --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.15 --source-digest 68eef902a8bddd9024676cc3806fa5377ed67fee --signer-digest 68eef902a8bddd9024676cc3806fa5377ed67fee --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --bundle trusted-server-axum-x86_64-unknown-linux-musl.provenance.sigstore.json --custom-trusted-root trusted_root.jsonl --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.15 --format json > trusted-server-axum-x86_64-unknown-linux-musl.offline-provenance.verified.json
$ jq -e length\>0 trusted-server-axum-x86_64-unknown-linux-musl.offline-provenance.verified.json
true
$ jq -e --arg invocation https://github.com/prk-Jr/trusted-server/actions/runs/40536697334/attempts/1 all\(.\[\]\;\ .verificationResult.statement.predicate.runDetails.metadata.invocationId==\$invocation\) trusted-server-axum-x86_64-unknown-linux-musl.offline-provenance.verified.json
true
PASS: trusted-server-axum-x86_64-unknown-linux-musl offline provenance exact reusable signer and source pins
$ gh attestation verify trusted-server-axum-x86_64-unknown-linux-musl --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.15 --source-digest 68eef902a8bddd9024676cc3806fa5377ed67fee --signer-digest 68eef902a8bddd9024676cc3806fa5377ed67fee --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
$ gh attestation verify trusted-server-axum-x86_64-unknown-linux-musl --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.15 --source-digest 68eef902a8bddd9024676cc3806fa5377ed67fee --signer-digest 68eef902a8bddd9024676cc3806fa5377ed67fee --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.15 --format json > trusted-server-axum-x86_64-unknown-linux-musl.online-provenance.verified.json
$ jq -e length\>0 trusted-server-axum-x86_64-unknown-linux-musl.online-provenance.verified.json
true
$ jq -e --arg invocation https://github.com/prk-Jr/trusted-server/actions/runs/40536697334/attempts/1 all\(.\[\]\;\ .verificationResult.statement.predicate.runDetails.metadata.invocationId==\$invocation\) trusted-server-axum-x86_64-unknown-linux-musl.online-provenance.verified.json
true
PASS: trusted-server-axum-x86_64-unknown-linux-musl online provenance exact reusable signer and source pins
$ gh attestation verify trusted-server-axum-x86_64-unknown-linux-musl --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.15 --source-digest 68eef902a8bddd9024676cc3806fa5377ed67fee --signer-digest 68eef902a8bddd9024676cc3806fa5377ed67fee --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --bundle trusted-server-axum-x86_64-unknown-linux-musl.sbom.sigstore.json --custom-trusted-root trusted_root.jsonl --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
$ gh attestation verify trusted-server-axum-x86_64-unknown-linux-musl --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.15 --source-digest 68eef902a8bddd9024676cc3806fa5377ed67fee --signer-digest 68eef902a8bddd9024676cc3806fa5377ed67fee --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --bundle trusted-server-axum-x86_64-unknown-linux-musl.sbom.sigstore.json --custom-trusted-root trusted_root.jsonl --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.15 --format json > trusted-server-axum-x86_64-unknown-linux-musl.offline-sbom.verified.json
$ jq -e length\>0 trusted-server-axum-x86_64-unknown-linux-musl.offline-sbom.verified.json
true
PASS: trusted-server-axum-x86_64-unknown-linux-musl offline sbom exact reusable signer and source pins
$ jq -e --slurpfile document trusted-server-axum-x86_64-unknown-linux-musl.spdx.json length==1\ and\ .\[0\].verificationResult.statement.predicate==\$document\[0\] trusted-server-axum-x86_64-unknown-linux-musl.offline-sbom.verified.json
true
PASS: trusted-server-axum-x86_64-unknown-linux-musl offline verified SPDX equals shipped SPDX
$ gh attestation verify trusted-server-axum-x86_64-unknown-linux-musl --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.15 --source-digest 68eef902a8bddd9024676cc3806fa5377ed67fee --signer-digest 68eef902a8bddd9024676cc3806fa5377ed67fee --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
$ gh attestation verify trusted-server-axum-x86_64-unknown-linux-musl --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.15 --source-digest 68eef902a8bddd9024676cc3806fa5377ed67fee --signer-digest 68eef902a8bddd9024676cc3806fa5377ed67fee --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.15 --format json > trusted-server-axum-x86_64-unknown-linux-musl.online-sbom.verified.json
$ jq -e length\>0 trusted-server-axum-x86_64-unknown-linux-musl.online-sbom.verified.json
true
PASS: trusted-server-axum-x86_64-unknown-linux-musl online sbom exact reusable signer and source pins
$ jq -e --slurpfile document trusted-server-axum-x86_64-unknown-linux-musl.spdx.json any\(.\[\]\;\ .verificationResult.statement.predicate==\$document\[0\]\) trusted-server-axum-x86_64-unknown-linux-musl.online-sbom.verified.json
true
PASS: trusted-server-axum-x86_64-unknown-linux-musl online verified SPDX equals shipped SPDX
$ gh attestation verify trusted-server-axum-aarch64-unknown-linux-gnu --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.15 --source-digest 68eef902a8bddd9024676cc3806fa5377ed67fee --signer-digest 68eef902a8bddd9024676cc3806fa5377ed67fee --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --bundle trusted-server-axum-aarch64-unknown-linux-gnu.provenance.sigstore.json --custom-trusted-root trusted_root.jsonl --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
$ gh attestation verify trusted-server-axum-aarch64-unknown-linux-gnu --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.15 --source-digest 68eef902a8bddd9024676cc3806fa5377ed67fee --signer-digest 68eef902a8bddd9024676cc3806fa5377ed67fee --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --bundle trusted-server-axum-aarch64-unknown-linux-gnu.provenance.sigstore.json --custom-trusted-root trusted_root.jsonl --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.15 --format json > trusted-server-axum-aarch64-unknown-linux-gnu.offline-provenance.verified.json
$ jq -e length\>0 trusted-server-axum-aarch64-unknown-linux-gnu.offline-provenance.verified.json
true
$ jq -e --arg invocation https://github.com/prk-Jr/trusted-server/actions/runs/40536697334/attempts/1 all\(.\[\]\;\ .verificationResult.statement.predicate.runDetails.metadata.invocationId==\$invocation\) trusted-server-axum-aarch64-unknown-linux-gnu.offline-provenance.verified.json
true
PASS: trusted-server-axum-aarch64-unknown-linux-gnu offline provenance exact reusable signer and source pins
$ gh attestation verify trusted-server-axum-aarch64-unknown-linux-gnu --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.15 --source-digest 68eef902a8bddd9024676cc3806fa5377ed67fee --signer-digest 68eef902a8bddd9024676cc3806fa5377ed67fee --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
$ gh attestation verify trusted-server-axum-aarch64-unknown-linux-gnu --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.15 --source-digest 68eef902a8bddd9024676cc3806fa5377ed67fee --signer-digest 68eef902a8bddd9024676cc3806fa5377ed67fee --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.15 --format json > trusted-server-axum-aarch64-unknown-linux-gnu.online-provenance.verified.json
$ jq -e length\>0 trusted-server-axum-aarch64-unknown-linux-gnu.online-provenance.verified.json
true
$ jq -e --arg invocation https://github.com/prk-Jr/trusted-server/actions/runs/40536697334/attempts/1 all\(.\[\]\;\ .verificationResult.statement.predicate.runDetails.metadata.invocationId==\$invocation\) trusted-server-axum-aarch64-unknown-linux-gnu.online-provenance.verified.json
true
PASS: trusted-server-axum-aarch64-unknown-linux-gnu online provenance exact reusable signer and source pins
$ gh attestation verify trusted-server-axum-aarch64-unknown-linux-gnu --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.15 --source-digest 68eef902a8bddd9024676cc3806fa5377ed67fee --signer-digest 68eef902a8bddd9024676cc3806fa5377ed67fee --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --bundle trusted-server-axum-aarch64-unknown-linux-gnu.sbom.sigstore.json --custom-trusted-root trusted_root.jsonl --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
$ gh attestation verify trusted-server-axum-aarch64-unknown-linux-gnu --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.15 --source-digest 68eef902a8bddd9024676cc3806fa5377ed67fee --signer-digest 68eef902a8bddd9024676cc3806fa5377ed67fee --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --bundle trusted-server-axum-aarch64-unknown-linux-gnu.sbom.sigstore.json --custom-trusted-root trusted_root.jsonl --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.15 --format json > trusted-server-axum-aarch64-unknown-linux-gnu.offline-sbom.verified.json
$ jq -e length\>0 trusted-server-axum-aarch64-unknown-linux-gnu.offline-sbom.verified.json
true
PASS: trusted-server-axum-aarch64-unknown-linux-gnu offline sbom exact reusable signer and source pins
$ jq -e --slurpfile document trusted-server-axum-aarch64-unknown-linux-gnu.spdx.json length==1\ and\ .\[0\].verificationResult.statement.predicate==\$document\[0\] trusted-server-axum-aarch64-unknown-linux-gnu.offline-sbom.verified.json
true
PASS: trusted-server-axum-aarch64-unknown-linux-gnu offline verified SPDX equals shipped SPDX
$ gh attestation verify trusted-server-axum-aarch64-unknown-linux-gnu --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.15 --source-digest 68eef902a8bddd9024676cc3806fa5377ed67fee --signer-digest 68eef902a8bddd9024676cc3806fa5377ed67fee --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml
$ gh attestation verify trusted-server-axum-aarch64-unknown-linux-gnu --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.15 --source-digest 68eef902a8bddd9024676cc3806fa5377ed67fee --signer-digest 68eef902a8bddd9024676cc3806fa5377ed67fee --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --cert-identity https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/v0.0.0-rehearsal.15 --format json > trusted-server-axum-aarch64-unknown-linux-gnu.online-sbom.verified.json
$ jq -e length\>0 trusted-server-axum-aarch64-unknown-linux-gnu.online-sbom.verified.json
true
PASS: trusted-server-axum-aarch64-unknown-linux-gnu online sbom exact reusable signer and source pins
$ jq -e --slurpfile document trusted-server-axum-aarch64-unknown-linux-gnu.spdx.json any\(.\[\]\;\ .verificationResult.statement.predicate==\$document\[0\]\) trusted-server-axum-aarch64-unknown-linux-gnu.online-sbom.verified.json
true
PASS: trusted-server-axum-aarch64-unknown-linux-gnu online verified SPDX equals shipped SPDX
$ file trusted-server-fastly.wasm ts-aarch64-apple-darwin ts-x86_64-apple-darwin ts-x86_64-unknown-linux-gnu trusted-server-axum-x86_64-unknown-linux-gnu trusted-server-axum-x86_64-unknown-linux-musl trusted-server-axum-aarch64-unknown-linux-gnu
trusted-server-fastly.wasm:                    WebAssembly (wasm) binary module version 0x1 (MVP)
ts-aarch64-apple-darwin:                       Mach-O 64-bit executable arm64
ts-x86_64-apple-darwin:                        Mach-O 64-bit executable x86_64
ts-x86_64-unknown-linux-gnu:                   ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=878dd4e889cf655bab62e84faf31e37a7ddc2541, with debug_info, not stripped
trusted-server-axum-x86_64-unknown-linux-gnu:  ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=69abb93e4b7b8082d31890ff7da8ae89046f2821, with debug_info, not stripped
trusted-server-axum-x86_64-unknown-linux-musl: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), static-pie linked, with debug_info, not stripped
trusted-server-axum-aarch64-unknown-linux-gnu: ELF 64-bit LSB pie executable, ARM aarch64, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-aarch64.so.1, BuildID[sha1]=ff8608499729fcd62c45782768c230b1771a602a, for GNU/Linux 3.7.0, with debug_info, not stripped
$ ./ts-aarch64-apple-darwin --version
ts package=0.1.0 source=68eef902a8bddd9024676cc3806fa5377ed67fee target=aarch64-apple-darwin variant=default
PASS: complete independent verification of v0.0.0-rehearsal.15 at 68eef902a8bddd9024676cc3806fa5377ed67fee

Completed CI evidence (same source/run):

build / Build ts-x86_64-apple-darwin	UNKNOWN STEP	2026-10-27T16:35:06.4601200Z SUCCESS: Mach-O target and macOS minimum OS 13.0: x86_64-apple-darwin
build / Build ts-x86_64-apple-darwin	UNKNOWN STEP	2026-10-27T16:35:06.4605140Z SUCCESS: final-byte checks x86_64-apple-darwin 
build / Build ts-x86_64-apple-darwin	UNKNOWN STEP	2026-10-27T16:35:06.4805780Z SUCCESS: ts package=0.1.0 source=68eef902a8bddd9024676cc3806fa5377ed67fee target=x86_64-apple-darwin variant=default

build / Build ts-aarch64-apple-darwin	UNKNOWN STEP	2026-10-27T16:14:17.5156230Z SUCCESS: Mach-O target and macOS minimum OS 13.0: aarch64-apple-darwin
build / Build ts-aarch64-apple-darwin	UNKNOWN STEP	2026-10-27T16:14:17.5259770Z SUCCESS: final-byte checks aarch64-apple-darwin 
build / Build ts-aarch64-apple-darwin	UNKNOWN STEP	2026-10-27T16:14:17.5425490Z SUCCESS: ts package=0.1.0 source=68eef902a8bddd9024676cc3806fa5377ed67fee target=aarch64-apple-darwin variant=default

build / Build ts-x86_64-unknown-linux-gnu	UNKNOWN STEP	2026-10-27T16:11:21.4798689Z SUCCESS: final-byte checks x86_64-unknown-linux-gnu GLIBC_2.34 GLIBC_2.2.5 GLIBC_2.14 GLIBC_2.3 GLIBC_2.29 GLIBC_2.3.4 GLIBC_2.33 GLIBC_2.28 GLIBC_2.7 GLIBC_2.16 GLIBC_2.10 GLIBC_2.3.2 GLIBC_2.9 GLIBC_2.30 GLIBC_2.4 GLIBC_2.17 GLIBC_2.15 GLIBC_2.32 GLIBC_2.25 GLIBC_2.18 GLIBC_2.5 GLIBC_2.27
build / Build ts-x86_64-unknown-linux-gnu	UNKNOWN STEP	2026-10-27T16:11:21.4834526Z SUCCESS: ts package=0.1.0 source=68eef902a8bddd9024676cc3806fa5377ed67fee target=x86_64-unknown-linux-gnu variant=default
build / Build ts-x86_64-unknown-linux-gnu	UNKNOWN STEP	2026-10-27T16:11:24.6313770Z SUCCESS: ts package=0.1.0 source=68eef902a8bddd9024676cc3806fa5377ed67fee target=x86_64-unknown-linux-gnu variant=default
build / Build ts-x86_64-unknown-linux-gnu	UNKNOWN STEP	2026-10-27T16:11:27.1213347Z SUCCESS: ts package=0.1.0 source=68eef902a8bddd9024676cc3806fa5377ed67fee target=x86_64-unknown-linux-gnu variant=default
build / Build ts-x86_64-unknown-linux-gnu	UNKNOWN STEP	2026-10-27T16:11:29.8071559Z SUCCESS: ts package=0.1.0 source=68eef902a8bddd9024676cc3806fa5377ed67fee target=x86_64-unknown-linux-gnu variant=default

build / Build trusted-server-axum-x86_64-unknown-linux-gnu	UNKNOWN STEP	2026-10-27T16:07:38.7168632Z SUCCESS: final-byte checks x86_64-unknown-linux-gnu GLIBC_2.34 GLIBC_2.2.5 GLIBC_2.14 GLIBC_2.3 GLIBC_2.27 GLIBC_2.29 GLIBC_2.7 GLIBC_2.16 GLIBC_2.33 GLIBC_2.3.4 GLIBC_2.10 GLIBC_2.3.2 GLIBC_2.9 GLIBC_2.30 GLIBC_2.17 GLIBC_2.32 GLIBC_2.28 GLIBC_2.25 GLIBC_2.18
build / Build trusted-server-axum-x86_64-unknown-linux-gnu	UNKNOWN STEP	2026-10-27T16:07:41.4718236Z SUCCESS: Axum rejects EDGEZERO__ADAPTER__PORT=0; exit 1, ports must be 1–65535: sha256:8da84df25d28176be84164040cd45e128c6b4c6a80b7d7cbe17fe2b9f198efc2
build / Build trusted-server-axum-x86_64-unknown-linux-gnu	UNKNOWN STEP	2026-10-27T16:07:41.6102415Z SUCCESS: Axum rejects PORT=0; exit 1, ports must be 1–65535: sha256:8da84df25d28176be84164040cd45e128c6b4c6a80b7d7cbe17fe2b9f198efc2
build / Build trusted-server-axum-x86_64-unknown-linux-gnu	UNKNOWN STEP	2026-10-27T16:07:41.8200261Z SUCCESS: Axum bound to 0.0.0.0:8080; host reached published container port, HTTP 200 ok: debian:12-slim@sha256:7ff6ba31527b9e336162fa061746c366c4b2032f4d2cff2078bea43f78efe3f8 sha256:8da84df25d28176be84164040cd45e128c6b4c6a80b7d7cbe17fe2b9f198efc2
build / Build trusted-server-axum-x86_64-unknown-linux-gnu	UNKNOWN STEP	2026-10-27T16:07:44.3336907Z SUCCESS: Axum rejects EDGEZERO__ADAPTER__PORT=0; exit 1, ports must be 1–65535: sha256:cee13550f97b8a595506e8e4ca74263ba44924248779a4ba4f942e197652acff
build / Build trusted-server-axum-x86_64-unknown-linux-gnu	UNKNOWN STEP	2026-10-27T16:07:44.4551040Z SUCCESS: Axum rejects PORT=0; exit 1, ports must be 1–65535: sha256:cee13550f97b8a595506e8e4ca74263ba44924248779a4ba4f942e197652acff
build / Build trusted-server-axum-x86_64-unknown-linux-gnu	UNKNOWN STEP	2026-10-27T16:07:44.6130480Z SUCCESS: Axum bound to 0.0.0.0:8080; host reached published container port, HTTP 200 ok: ubuntu:22.04@sha256:0a9887931b0e38af2e3487ed39e29436b0535c4f3f52e57745baaf79d1898956 sha256:cee13550f97b8a595506e8e4ca74263ba44924248779a4ba4f942e197652acff
build / Build trusted-server-axum-x86_64-unknown-linux-gnu	UNKNOWN STEP	2026-10-27T16:07:46.9554106Z SUCCESS: Axum rejects EDGEZERO__ADAPTER__PORT=0; exit 1, ports must be 1–65535: sha256:a2c5a85865a585c3bc8b10f6c269358fdf89fe32be4232885166889d85c76421
build / Build trusted-server-axum-x86_64-unknown-linux-gnu	UNKNOWN STEP	2026-10-27T16:07:47.0791100Z SUCCESS: Axum rejects PORT=0; exit 1, ports must be 1–65535: sha256:a2c5a85865a585c3bc8b10f6c269358fdf89fe32be4232885166889d85c76421
build / Build trusted-server-axum-x86_64-unknown-linux-gnu	UNKNOWN STEP	2026-10-27T16:07:47.2296405Z SUCCESS: Axum bound to 0.0.0.0:8080; host reached published container port, HTTP 200 ok: registry.access.redhat.com/ubi9/ubi-minimal:9.6@sha256:34880b64c07f28f64d95737f82f891516de9a3b43583f39970f7bf8e4cfa48b7 sha256:a2c5a85865a585c3bc8b10f6c269358fdf89fe32be4232885166889d85c76421

build / Build trusted-server-axum-x86_64-unknown-linux-musl	UNKNOWN STEP	2026-10-27T16:07:35.8363184Z SUCCESS: final-byte checks x86_64-unknown-linux-musl 
build / Build trusted-server-axum-x86_64-unknown-linux-musl	UNKNOWN STEP	2026-10-27T16:07:38.0133811Z SUCCESS: Axum rejects EDGEZERO__ADAPTER__PORT=0; exit 1, ports must be 1–65535: sha256:706db57fb2063f39f69632c5b5c9c439633fda35110e65587c5d85553fd1cc38
build / Build trusted-server-axum-x86_64-unknown-linux-musl	UNKNOWN STEP	2026-10-27T16:07:38.1462444Z SUCCESS: Axum rejects PORT=0; exit 1, ports must be 1–65535: sha256:706db57fb2063f39f69632c5b5c9c439633fda35110e65587c5d85553fd1cc38
build / Build trusted-server-axum-x86_64-unknown-linux-musl	UNKNOWN STEP	2026-10-27T16:07:38.3631763Z SUCCESS: Axum bound to 0.0.0.0:8080; host reached published container port, HTTP 200 ok: alpine:3.22.2@sha256:4b7ce07002c69e8f3d704a9c5d6fd3053be500b7f1c69fc0d80990c2ad8dd412 sha256:706db57fb2063f39f69632c5b5c9c439633fda35110e65587c5d85553fd1cc38
build / Build trusted-server-axum-x86_64-unknown-linux-musl	UNKNOWN STEP	2026-10-27T16:07:38.6448786Z SUCCESS: Axum rejects EDGEZERO__ADAPTER__PORT=0; exit 1, ports must be 1–65535: sha256:717db5e3bd0408d32c01c727a02cc797a73a8be21ddb8100590e22c8188e4960
build / Build trusted-server-axum-x86_64-unknown-linux-musl	UNKNOWN STEP	2026-10-27T16:07:38.7708012Z SUCCESS: Axum rejects PORT=0; exit 1, ports must be 1–65535: sha256:717db5e3bd0408d32c01c727a02cc797a73a8be21ddb8100590e22c8188e4960
build / Build trusted-server-axum-x86_64-unknown-linux-musl	UNKNOWN STEP	2026-10-27T16:07:38.9321342Z SUCCESS: Axum bound to 0.0.0.0:8080; host reached published container port, HTTP 200 ok: scratch sha256:717db5e3bd0408d32c01c727a02cc797a73a8be21ddb8100590e22c8188e4960

build / Build trusted-server-axum-aarch64-unknown-linux-gnu	UNKNOWN STEP	2026-10-27T16:06:58.0063334Z SUCCESS: final-byte checks aarch64-unknown-linux-gnu GLIBC_2.17 GLIBC_2.33 GLIBC_2.34 GLIBC_2.29 GLIBC_2.28 GLIBC_2.30 GLIBC_2.27 GLIBC_2.18 GLIBC_2.25 GLIBC_2.32
build / Build trusted-server-axum-aarch64-unknown-linux-gnu	UNKNOWN STEP	2026-10-27T16:07:00.6573301Z SUCCESS: Axum rejects EDGEZERO__ADAPTER__PORT=0; exit 1, ports must be 1–65535: sha256:28fe65558df3e10c89e7d685cb86544cdc138f242d12100c5b0981f92aae0853
build / Build trusted-server-axum-aarch64-unknown-linux-gnu	UNKNOWN STEP	2026-10-27T16:07:00.7863043Z SUCCESS: Axum rejects PORT=0; exit 1, ports must be 1–65535: sha256:28fe65558df3e10c89e7d685cb86544cdc138f242d12100c5b0981f92aae0853
build / Build trusted-server-axum-aarch64-unknown-linux-gnu	UNKNOWN STEP	2026-10-27T16:07:00.9797027Z SUCCESS: Axum bound to 0.0.0.0:8080; host reached published container port, HTTP 200 ok: debian:12-slim@sha256:7ff6ba31527b9e336162fa061746c366c4b2032f4d2cff2078bea43f78efe3f8 sha256:28fe65558df3e10c89e7d685cb86544cdc138f242d12100c5b0981f92aae0853

build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T16:06:12.6192250Z SUCCESS: final-byte checks wasm32-wasip1 

release	Verify handoff, create once, publish by release ID and verify	2026-10-27T16:42:45.1296767Z Verified post-publish re-download: all 29 assets byte-identical to signed checksums and handoff

Docs-only since rehearsed 68eef90 (v0.0.0-rehearsal.15).
@prk-Jr
prk-Jr removed this pull request from stack #1450 October 28, 2026 06:37
@prk-Jr prk-Jr changed the title Binary attestations: phase 1 – attested release binaries with provenance and SBOMs Publish attested release binaries with provenance and SBOMs Oct 28, 2026
Docs-only since rehearsed 68eef90. Append actual fresh review outcomes and clarify historical adapter investigation inputs.
@prk-Jr
prk-Jr marked this pull request as ready for review October 28, 2026 07:50

This branch has not been deployed

No deployments
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