Skip to content

Binary attestations: phase 2 – reproducible Fastly builds - #1449

Draft
prk-Jr wants to merge 56 commits into
feature/binary-attestations-phase1from
feature/binary-attestations-phase2
Draft

prk-Jr wants to merge 56 commits into
feature/binary-attestations-phase1from
feature/binary-attestations-phase2

Conversation

@prk-Jr

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

Copy link
Copy Markdown
Collaborator

Summary

  • Require two fresh ordinary Fastly builds to produce identical complete wasm bytes before any release signing. Approved compiler-path normalization preserves debug information; a mismatch prevents release.
  • Publish a real, signed trusted-server-fastly.wasm.rebuild-check.json, with current-run transfer binding. Preserve the seven binary names, reusable signer and existing binary/SPDX verification commands; publication grows to 30 files.
  • Port the Add binary attestation contracts and release build guards #1262 producer graph with controlled qualification closed. Ordinary equality does not prove controlled-recipe qualification or complete composition; the frozen esbuild observer gap remains guarded and visibly skipped.

Changes

Files Change
crates/trusted-server-release/**; workspace manifests/lock Producer port; ordinary observation, authenticated transfer checks, comparison/writer and safe post-reap group observation
crates/trusted-server-js/**; CLI resource discovery Private JS inputs, guarded controlled preparation and runtime resource lookup
.github/workflows/{release,release-build,test,format}.yml; scripts/release/phase1*; AGENTS.md A/B gate, isolated companion signing, 30-file publisher, packaging checks and failure/process tests
Release guide, compatibility/spec/plan docs; domain lint Verification contracts, exact-source evidence and approved reference-host entries

0f89eae size versus Phase 1 4940928e8: 266 new files (one binary fixture), 87,690 new text lines; 42 existing files +4,757/−614. Rust: 79,259 new lines +311 existing additions. Workflow/script/non-Rust test support, including its manifests/fixtures: 6,147 new lines +2,349 existing additions. Remaining text is docs, schemas and lockfile. Frozen source: 122b78664b1235c717e9208fd200f9a9b0c335df.

Closes

Part of #1235. This parent issue tracks the phased work; no separate tracking issue is pending. This PR does not close its remaining maintainer settings/approval requirements.

Spec / Plan

Phase 2 spec with its own two-round review log · Approved Gate 1 design · implementation and normalization plan · phase assignment · compatibility/evidence record.

Test plan

Rehearsed source 5163241b947b1aa335987bd832b9205e4364e4bb: PASS. Fresh lightweight v0.0.0-rehearsal.20 passed all 18 jobs. Full independent verification: transcript 1, 2, 3.

Validation at 5163241b9 Result
Seven builds; two complete Fastly Wasm files; genuine rebuild-check and authenticated upload/API joins Passed; no excluded sections; ordinary qualification remains false
Documented release download; 30 immutable prerelease files, not Latest; release verify and all 30 verify-asset calls Passed; 29 checksums, exact API sizes/digests, published readback equals signed handoff
All seven binaries, provenance + SPDX, online + retained bundles, workflow + exact tag certificate identities Passed all 28 mode/predicate checks and 56 identity invocations; exact source/tag/signer/hosted-runner constraints
Published SPDX equality and companion verification 14 equalities; one-byte and empty-result negatives rejected; companion online/offline provenance and joins passed
Native smoke and pinned Fastly packaging macOS 13.0, full CLI source, Axum non-loopback/invalid ports; pinned Fastly 16 pack/validate/inspect/cmp passed
Exact published Fastly runtime under pinned Viceroy 0.21.0 Three publisher + injected JS responses 200/full source; three actual request/response log pairs, zero build-fact lines; negative controls and listener cleanup passed. Local scope only, no deployment/browser claim

5163241b9 CI: 29 successful checks, four expected skips. Binary, Tests, Format, Integration. Hosted coverage includes 952 Linux producer tests / nine existing ignores, three boundary tests, 18 command tests, 38 JS fixtures and 45 macOS process tests / zero ignores. Independent implementation/security and follow-up reviews found no remaining actionable findings; review limits remain documented. Local pure regressions, strict host checks/clippy and applicable formatting/domain/workflow/shell checks passed.

Current head 0f89eae6932b8aa5b8c514de72c2d154dd1097ae: docs-only since rehearsed 5163241b9. Signed and GitHub-Verified; five Markdown evidence records only. Independent evidence review, pinned-Node docs lint/Prettier/site build, outside-docs Markdown formatting, Rust format, domain lint and whitespace checks passed. Hosted CI on this docs-only head passed: 29 successful checks and four expected skips — Format, Tests, Integration, Binary attestations. The merge-test source tree equals this head. No release machinery or binary changed after the rehearsed source.

5163241b9 observed cost: reproduction 282s plus comparison 122s, overlapping native builds. Canonical/reproduction Wasm SHA-256 4fe7204f17df07a392f4e4b64f31eebf3b02179e57abee689ab0094990d0a572. Different checkout/target roots, job counts, umasks and start times; UID/locale/timezone stayed equal. Controlled qualification remains closed.

Historical evidence keeps its source: .16/runtime supplement at 5fa384336; .17/.18 capacity failures at 36454c526; .19 capacity failure at 5163241b9, no releases for those failed attempts. .10 rerun-all recovery remains at 3ccfe2971; .13 remains at 770a425df. Tags are preserved.

Checklist

  • Phase-specific spec with two fresh review rounds; independent implementation/security review and focused cleanup-fix review recorded.
  • Exact .16 runtime gap closed; post-reap signal-zero fix tested; Phase 3 draft Binary attestations: phase 3 – complete evidence and release index #1463 tracking synchronized.
  • Implementation 36454c526 exact-head CI passed; qualifications/later gates remain closed.
  • Current docs-only 0f89eae69 hosted CI green (29 success, four expected skips).
  • Successful .20 current-source release rehearsal and full published-asset/attestation/runtime verification at 5163241b9; keep draft, request no reviewers.

Human gates and limits

Merging Phase 2 activates the equality gate on the next eligible tag: a second Fastly build plus comparison, no release on mismatch. Native release CI builds each asset once; controlled qualification, later index/SPDX/consumer gates and GNU masking remain closed. Keep draft; request no reviewers. No IAB tags, releases or settings changes.

Allowlist changes needing maintainer review: exact json-schema.org and spdx.org entries, with justification and rejection tests; four per-line api.github.com suppressions, no wildcard/global API-host entry.

Outside-scope CI fix (mirrors main #1454): separate 886cf333a pins only the browser runner to Ubuntu 24.04 with the same comment; later merges retain the upstream fix.

Port the remaining slice 2.3 resource-discovery change from #1262 at 122b786. Preserve the build facts already carried in #1435.

Verify the three pure filesystem tests in development and release-build configurations with exact-name selection guards. CLI clippy, Rust formatting, domain lint and independent review pass.
Record Gate 1 for user approval: real A/B comparison and rebuild-check publication preserve Phase 1 identities while qualification remains closed. The narrower ordinary-release assurance claim requires explicit approval before implementation.
Port the closed producer primitives from #1262 at 122b786. Stage the manifest, error variants and fail-closed entrypoint; keep selection, signing and publication unavailable.

Run 49 audited pure tests locally and wire full process tests and strict clippy into existing Linux CI jobs. Carry schemas unchanged with approved exact reference-host entries and rejection coverage. Document required shared dependency upgrades.
@prk-Jr prk-Jr self-assigned this Oct 26, 2026
@prk-Jr
prk-Jr added this pull request to stack #1450 October 26, 2026 11:43
prk-Jr added 23 commits October 26, 2026 17:14
Record the approved merge activation, permanent companion profile contract, direct upload-action identity bridge, rerun rejection and read-only reusable-caller permissions before implementing the adapter.
Port the five remaining slice 2.3 comment/documentation paths from #1262 at 122b786. Runtime configuration and release-source facts already landed in Phase 1; no executable behavior changes.
Begin the separately approved Gate 1 adapter with strict observation shape, closed qualification claims and canonical/reproduction input/environment pairing. Keep the producer entrypoint closed while runtime pin, filesystem, transfer and equality stages remain pending.

Verify red-green observation, root-alias and bounded-diagnostic regressions; 58 audited pure tests, strict producer clippy, formatting and domain lint pass. Independent review approves this staged unit with explicit runtime preconditions.
Extend the approved ordinary adapter with bounded full-byte equality after input pairing and observed digest/size checks. Retain bounded exact mismatch diagnostics without normalized or excluded regions; keep command assembly and qualified paths closed.

Verify red-green equality coverage, custom-section and EOF differences, mutation-after-observation rejection, 62 audited pure tests and strict clippy. Independent review approves the staged comparison unit.
Reuse the reviewed ZIP32 primitive and negative fixtures from #1262 at 122b786 without moving collection authority into Phase 2. Enforce exact build/observation member sets and source-owned bounds before the original full integrity checks.

Verify red-green profile admission, 71 audited pure tests, strict clippy and an exact-ID read-only probe of the current Fastly archive against its recorded GitHub digest. Independent/security review approves this structural unit; transfer authentication remains pending.
Preserve the incoming main integration, HTML EOF checks and corrected Axum bind diagnostics alongside the reviewed Phase 2 producer work. Resolve the compatibility audit by retaining the diagnostic correction and fresh-rehearsal requirement together with the approved rebuild-check profile and activation notes.
Carry the frozen inspection implementation from 122b786. Render the future recipe reference as inline code until its module lands. Keep release commands closed.
Carry the approved Phase 2 source and staged evidence-test splits from 122b786. Validate all seven ordinary cohort rows while preserving four closed controlled destination contracts. Keep qualified selectors and release execution closed.
Implement the approved Gate 1 canonical source recipe and consumed-output hashing. Use the reviewed Cargo message parser from 122b786 without constructing qualified receipts or enabling release commands.
Carry the reviewed preparation helpers from 122b786 while preserving fresh ordinary npm output. Keep the lifecycle observer unchanged at esbuild 0.27.3, document the current-lock gap, and visibly disable its full collector fixture with an enabling guard. Retain newer npm dependency versions and run subprocess fixtures only in CI.
Carry the remaining reviewed prose and formatting hunks from 122b786. Preserve current runtime changes and describe immutable release metadata without claiming a signed index. Cloudflare shell diagnostics remain identical to its pre-existing baseline.
@prk-Jr

prk-Jr commented Oct 27, 2026

Copy link
Copy Markdown
Collaborator Author

Phase 2 exact-head rehearsal .13 passed — transcript 2/3

Implementation 770a425df4b28caaaef68dfd930bceabd9928046; green first attempt. Seven binaries / 30 immutable prerelease files, not Latest. Both provenance and SPDX verify online and from retained bundles with exact reusable signer/source/certificate pins. The real companion, all asset/checksum joins, SPDX equality, native checks and pinned offline Fastly route pass. Initial read-only downloads encountered a connection timeout; one missing 11 KB bundle was recovered without source/tag/release mutation. CI log fetches also needed read-only TLS retries; no publishing operation was retried. Qualified selectors remain closed. The separately recorded .10 rerun-all proof remains tied to its exact earlier source.

$ gh attestation verify trusted-server-axum-aarch64-unknown-linux-gnu --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.13 --source-digest 770a425df4b28caaaef68dfd930bceabd9928046 --signer-digest 770a425df4b28caaaef68dfd930bceabd9928046 --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.13 --source-digest 770a425df4b28caaaef68dfd930bceabd9928046 --signer-digest 770a425df4b28caaaef68dfd930bceabd9928046 --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.13 --format json > trusted-server-axum-aarch64-unknown-linux-gnu.online-sbom.verified.json
$ jq -e length\ ==\ 1\ and\ all\(.\[\]\;\ .verificationResult.statement.predicateType\ \!=\ null\) trusted-server-axum-aarch64-unknown-linux-gnu.online-sbom.verified.json
true
PASS: trusted-server-axum-aarch64-unknown-linux-gnu online sbom exact reusable-workflow certificate and source pins
$ jq -e --slurpfile document trusted-server-axum-aarch64-unknown-linux-gnu.spdx.json length\ ==\ 1\ and\ all\(.\[\]\;\ .verificationResult.statement.predicate\ ==\ \$document\[0\]\) trusted-server-axum-aarch64-unknown-linux-gnu.online-sbom.verified.json
true
PASS: verified online SPDX predicate equals the published SPDX document (trusted-server-axum-aarch64-unknown-linux-gnu)
$ gh attestation verify trusted-server-fastly.wasm --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.13 --source-digest 770a425df4b28caaaef68dfd930bceabd9928046 --signer-digest 770a425df4b28caaaef68dfd930bceabd9928046 --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.13 --source-digest 770a425df4b28caaaef68dfd930bceabd9928046 --signer-digest 770a425df4b28caaaef68dfd930bceabd9928046 --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.13 --format json > trusted-server-fastly.wasm.offline-provenance.verified.json
$ jq -e length\ ==\ 1\ and\ all\(.\[\]\;\ .verificationResult.statement.predicateType\ \!=\ null\) trusted-server-fastly.wasm.offline-provenance.verified.json
true
$ jq -e --arg invocation https://github.com/prk-Jr/trusted-server/actions/runs/40496605229/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-workflow certificate and source pins
$ gh attestation verify trusted-server-fastly.wasm --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.13 --source-digest 770a425df4b28caaaef68dfd930bceabd9928046 --signer-digest 770a425df4b28caaaef68dfd930bceabd9928046 --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.13 --source-digest 770a425df4b28caaaef68dfd930bceabd9928046 --signer-digest 770a425df4b28caaaef68dfd930bceabd9928046 --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.13 --format json > trusted-server-fastly.wasm.online-provenance.verified.json
$ jq -e length\ ==\ 1\ and\ all\(.\[\]\;\ .verificationResult.statement.predicateType\ \!=\ null\) trusted-server-fastly.wasm.online-provenance.verified.json
true
$ jq -e --arg invocation https://github.com/prk-Jr/trusted-server/actions/runs/40496605229/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-workflow certificate and source pins
$ gh attestation verify trusted-server-fastly.wasm --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.13 --source-digest 770a425df4b28caaaef68dfd930bceabd9928046 --signer-digest 770a425df4b28caaaef68dfd930bceabd9928046 --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.13 --source-digest 770a425df4b28caaaef68dfd930bceabd9928046 --signer-digest 770a425df4b28caaaef68dfd930bceabd9928046 --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.13 --format json > trusted-server-fastly.wasm.offline-sbom.verified.json
$ jq -e length\ ==\ 1\ and\ all\(.\[\]\;\ .verificationResult.statement.predicateType\ \!=\ null\) trusted-server-fastly.wasm.offline-sbom.verified.json
true
PASS: trusted-server-fastly.wasm offline sbom exact reusable-workflow certificate and source pins
$ jq -e --slurpfile document trusted-server-fastly.wasm.spdx.json length\ ==\ 1\ and\ all\(.\[\]\;\ .verificationResult.statement.predicate\ ==\ \$document\[0\]\) trusted-server-fastly.wasm.offline-sbom.verified.json
true
PASS: verified offline SPDX predicate equals the published SPDX document (trusted-server-fastly.wasm)
$ gh attestation verify trusted-server-fastly.wasm --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.13 --source-digest 770a425df4b28caaaef68dfd930bceabd9928046 --signer-digest 770a425df4b28caaaef68dfd930bceabd9928046 --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.13 --source-digest 770a425df4b28caaaef68dfd930bceabd9928046 --signer-digest 770a425df4b28caaaef68dfd930bceabd9928046 --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.13 --format json > trusted-server-fastly.wasm.online-sbom.verified.json
$ jq -e length\ ==\ 1\ and\ all\(.\[\]\;\ .verificationResult.statement.predicateType\ \!=\ null\) trusted-server-fastly.wasm.online-sbom.verified.json
true
PASS: trusted-server-fastly.wasm online sbom exact reusable-workflow certificate and source pins
$ jq -e --slurpfile document trusted-server-fastly.wasm.spdx.json length\ ==\ 1\ and\ all\(.\[\]\;\ .verificationResult.statement.predicate\ ==\ \$document\[0\]\) trusted-server-fastly.wasm.online-sbom.verified.json
true
PASS: verified online SPDX predicate equals the published SPDX document (trusted-server-fastly.wasm)
$ gh attestation verify ts-aarch64-apple-darwin --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.13 --source-digest 770a425df4b28caaaef68dfd930bceabd9928046 --signer-digest 770a425df4b28caaaef68dfd930bceabd9928046 --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.13 --source-digest 770a425df4b28caaaef68dfd930bceabd9928046 --signer-digest 770a425df4b28caaaef68dfd930bceabd9928046 --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.13 --format json > ts-aarch64-apple-darwin.offline-provenance.verified.json
$ jq -e length\ ==\ 1\ and\ all\(.\[\]\;\ .verificationResult.statement.predicateType\ \!=\ null\) ts-aarch64-apple-darwin.offline-provenance.verified.json
true
$ jq -e --arg invocation https://github.com/prk-Jr/trusted-server/actions/runs/40496605229/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-workflow certificate and source pins
$ gh attestation verify ts-aarch64-apple-darwin --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.13 --source-digest 770a425df4b28caaaef68dfd930bceabd9928046 --signer-digest 770a425df4b28caaaef68dfd930bceabd9928046 --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.13 --source-digest 770a425df4b28caaaef68dfd930bceabd9928046 --signer-digest 770a425df4b28caaaef68dfd930bceabd9928046 --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.13 --format json > ts-aarch64-apple-darwin.online-provenance.verified.json
$ jq -e length\ ==\ 1\ and\ all\(.\[\]\;\ .verificationResult.statement.predicateType\ \!=\ null\) ts-aarch64-apple-darwin.online-provenance.verified.json
true
$ jq -e --arg invocation https://github.com/prk-Jr/trusted-server/actions/runs/40496605229/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-workflow certificate and source pins
$ gh attestation verify ts-aarch64-apple-darwin --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.13 --source-digest 770a425df4b28caaaef68dfd930bceabd9928046 --signer-digest 770a425df4b28caaaef68dfd930bceabd9928046 --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.13 --source-digest 770a425df4b28caaaef68dfd930bceabd9928046 --signer-digest 770a425df4b28caaaef68dfd930bceabd9928046 --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.13 --format json > ts-aarch64-apple-darwin.offline-sbom.verified.json
$ jq -e length\ ==\ 1\ and\ all\(.\[\]\;\ .verificationResult.statement.predicateType\ \!=\ null\) ts-aarch64-apple-darwin.offline-sbom.verified.json
true
PASS: ts-aarch64-apple-darwin offline sbom exact reusable-workflow certificate and source pins
$ jq -e --slurpfile document ts-aarch64-apple-darwin.spdx.json length\ ==\ 1\ and\ all\(.\[\]\;\ .verificationResult.statement.predicate\ ==\ \$document\[0\]\) ts-aarch64-apple-darwin.offline-sbom.verified.json
true
PASS: verified offline SPDX predicate equals the published SPDX document (ts-aarch64-apple-darwin)
$ gh attestation verify ts-aarch64-apple-darwin --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.13 --source-digest 770a425df4b28caaaef68dfd930bceabd9928046 --signer-digest 770a425df4b28caaaef68dfd930bceabd9928046 --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.13 --source-digest 770a425df4b28caaaef68dfd930bceabd9928046 --signer-digest 770a425df4b28caaaef68dfd930bceabd9928046 --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.13 --format json > ts-aarch64-apple-darwin.online-sbom.verified.json
$ jq -e length\ ==\ 1\ and\ all\(.\[\]\;\ .verificationResult.statement.predicateType\ \!=\ null\) ts-aarch64-apple-darwin.online-sbom.verified.json
true
PASS: ts-aarch64-apple-darwin online sbom exact reusable-workflow certificate and source pins
$ jq -e --slurpfile document ts-aarch64-apple-darwin.spdx.json length\ ==\ 1\ and\ all\(.\[\]\;\ .verificationResult.statement.predicate\ ==\ \$document\[0\]\) ts-aarch64-apple-darwin.online-sbom.verified.json
true
PASS: verified online SPDX predicate equals the published SPDX document (ts-aarch64-apple-darwin)
$ gh attestation verify ts-x86_64-apple-darwin --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.13 --source-digest 770a425df4b28caaaef68dfd930bceabd9928046 --signer-digest 770a425df4b28caaaef68dfd930bceabd9928046 --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.13 --source-digest 770a425df4b28caaaef68dfd930bceabd9928046 --signer-digest 770a425df4b28caaaef68dfd930bceabd9928046 --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.13 --format json > ts-x86_64-apple-darwin.offline-provenance.verified.json
$ jq -e length\ ==\ 1\ and\ all\(.\[\]\;\ .verificationResult.statement.predicateType\ \!=\ null\) ts-x86_64-apple-darwin.offline-provenance.verified.json
true
$ jq -e --arg invocation https://github.com/prk-Jr/trusted-server/actions/runs/40496605229/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-workflow certificate and source pins
$ gh attestation verify ts-x86_64-apple-darwin --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.13 --source-digest 770a425df4b28caaaef68dfd930bceabd9928046 --signer-digest 770a425df4b28caaaef68dfd930bceabd9928046 --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.13 --source-digest 770a425df4b28caaaef68dfd930bceabd9928046 --signer-digest 770a425df4b28caaaef68dfd930bceabd9928046 --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.13 --format json > ts-x86_64-apple-darwin.online-provenance.verified.json
$ jq -e length\ ==\ 1\ and\ all\(.\[\]\;\ .verificationResult.statement.predicateType\ \!=\ null\) ts-x86_64-apple-darwin.online-provenance.verified.json
true
$ jq -e --arg invocation https://github.com/prk-Jr/trusted-server/actions/runs/40496605229/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-workflow certificate and source pins
$ gh attestation verify ts-x86_64-apple-darwin --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.13 --source-digest 770a425df4b28caaaef68dfd930bceabd9928046 --signer-digest 770a425df4b28caaaef68dfd930bceabd9928046 --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.13 --source-digest 770a425df4b28caaaef68dfd930bceabd9928046 --signer-digest 770a425df4b28caaaef68dfd930bceabd9928046 --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.13 --format json > ts-x86_64-apple-darwin.offline-sbom.verified.json
$ jq -e length\ ==\ 1\ and\ all\(.\[\]\;\ .verificationResult.statement.predicateType\ \!=\ null\) ts-x86_64-apple-darwin.offline-sbom.verified.json
true
PASS: ts-x86_64-apple-darwin offline sbom exact reusable-workflow certificate and source pins
$ jq -e --slurpfile document ts-x86_64-apple-darwin.spdx.json length\ ==\ 1\ and\ all\(.\[\]\;\ .verificationResult.statement.predicate\ ==\ \$document\[0\]\) ts-x86_64-apple-darwin.offline-sbom.verified.json
true
PASS: verified offline SPDX predicate equals the published SPDX document (ts-x86_64-apple-darwin)
$ gh attestation verify ts-x86_64-apple-darwin --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.13 --source-digest 770a425df4b28caaaef68dfd930bceabd9928046 --signer-digest 770a425df4b28caaaef68dfd930bceabd9928046 --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.13 --source-digest 770a425df4b28caaaef68dfd930bceabd9928046 --signer-digest 770a425df4b28caaaef68dfd930bceabd9928046 --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.13 --format json > ts-x86_64-apple-darwin.online-sbom.verified.json
$ jq -e length\ ==\ 1\ and\ all\(.\[\]\;\ .verificationResult.statement.predicateType\ \!=\ null\) ts-x86_64-apple-darwin.online-sbom.verified.json
true
PASS: ts-x86_64-apple-darwin online sbom exact reusable-workflow certificate and source pins
$ jq -e --slurpfile document ts-x86_64-apple-darwin.spdx.json length\ ==\ 1\ and\ all\(.\[\]\;\ .verificationResult.statement.predicate\ ==\ \$document\[0\]\) ts-x86_64-apple-darwin.online-sbom.verified.json
true
PASS: verified online SPDX predicate equals the published SPDX document (ts-x86_64-apple-darwin)
$ gh attestation verify ts-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.13 --source-digest 770a425df4b28caaaef68dfd930bceabd9928046 --signer-digest 770a425df4b28caaaef68dfd930bceabd9928046 --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.13 --source-digest 770a425df4b28caaaef68dfd930bceabd9928046 --signer-digest 770a425df4b28caaaef68dfd930bceabd9928046 --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.13 --format json > ts-x86_64-unknown-linux-gnu.offline-provenance.verified.json
$ jq -e length\ ==\ 1\ and\ all\(.\[\]\;\ .verificationResult.statement.predicateType\ \!=\ null\) ts-x86_64-unknown-linux-gnu.offline-provenance.verified.json
true
$ jq -e --arg invocation https://github.com/prk-Jr/trusted-server/actions/runs/40496605229/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-workflow certificate 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.13 --source-digest 770a425df4b28caaaef68dfd930bceabd9928046 --signer-digest 770a425df4b28caaaef68dfd930bceabd9928046 --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.13 --source-digest 770a425df4b28caaaef68dfd930bceabd9928046 --signer-digest 770a425df4b28caaaef68dfd930bceabd9928046 --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.13 --format json > ts-x86_64-unknown-linux-gnu.online-provenance.verified.json
$ jq -e length\ ==\ 1\ and\ all\(.\[\]\;\ .verificationResult.statement.predicateType\ \!=\ null\) ts-x86_64-unknown-linux-gnu.online-provenance.verified.json
true
$ jq -e --arg invocation https://github.com/prk-Jr/trusted-server/actions/runs/40496605229/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-workflow certificate 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.13 --source-digest 770a425df4b28caaaef68dfd930bceabd9928046 --signer-digest 770a425df4b28caaaef68dfd930bceabd9928046 --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.13 --source-digest 770a425df4b28caaaef68dfd930bceabd9928046 --signer-digest 770a425df4b28caaaef68dfd930bceabd9928046 --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.13 --format json > ts-x86_64-unknown-linux-gnu.offline-sbom.verified.json
$ jq -e length\ ==\ 1\ and\ all\(.\[\]\;\ .verificationResult.statement.predicateType\ \!=\ null\) ts-x86_64-unknown-linux-gnu.offline-sbom.verified.json
true
PASS: ts-x86_64-unknown-linux-gnu offline sbom exact reusable-workflow certificate and source pins
$ jq -e --slurpfile document ts-x86_64-unknown-linux-gnu.spdx.json length\ ==\ 1\ and\ all\(.\[\]\;\ .verificationResult.statement.predicate\ ==\ \$document\[0\]\) ts-x86_64-unknown-linux-gnu.offline-sbom.verified.json
true
PASS: verified offline SPDX predicate equals the published SPDX document (ts-x86_64-unknown-linux-gnu)
$ gh attestation verify ts-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.13 --source-digest 770a425df4b28caaaef68dfd930bceabd9928046 --signer-digest 770a425df4b28caaaef68dfd930bceabd9928046 --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.13 --source-digest 770a425df4b28caaaef68dfd930bceabd9928046 --signer-digest 770a425df4b28caaaef68dfd930bceabd9928046 --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.13 --format json > ts-x86_64-unknown-linux-gnu.online-sbom.verified.json
$ jq -e length\ ==\ 1\ and\ all\(.\[\]\;\ .verificationResult.statement.predicateType\ \!=\ null\) ts-x86_64-unknown-linux-gnu.online-sbom.verified.json
true
PASS: ts-x86_64-unknown-linux-gnu online sbom exact reusable-workflow certificate and source pins
$ jq -e --slurpfile document ts-x86_64-unknown-linux-gnu.spdx.json length\ ==\ 1\ and\ all\(.\[\]\;\ .verificationResult.statement.predicate\ ==\ \$document\[0\]\) ts-x86_64-unknown-linux-gnu.online-sbom.verified.json
true
PASS: verified online SPDX predicate equals the published SPDX document (ts-x86_64-unknown-linux-gnu)
$ gh attestation verify trusted-server-fastly.wasm.rebuild-check.json --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.13 --source-digest 770a425df4b28caaaef68dfd930bceabd9928046 --signer-digest 770a425df4b28caaaef68dfd930bceabd9928046 --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.rebuild-check.json --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.13 --source-digest 770a425df4b28caaaef68dfd930bceabd9928046 --signer-digest 770a425df4b28caaaef68dfd930bceabd9928046 --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.13 --format json > trusted-server-fastly.wasm.rebuild-check.json.offline-provenance.verified.json
$ jq -e length\ ==\ 1\ and\ all\(.\[\]\;\ .verificationResult.statement.predicateType\ \!=\ null\) trusted-server-fastly.wasm.rebuild-check.json.offline-provenance.verified.json
true
$ jq -e --arg invocation https://github.com/prk-Jr/trusted-server/actions/runs/40496605229/attempts/1 all\(.\[\]\;\ .verificationResult.statement.predicate.runDetails.metadata.invocationId\ ==\ \$invocation\) trusted-server-fastly.wasm.rebuild-check.json.offline-provenance.verified.json
true
PASS: trusted-server-fastly.wasm.rebuild-check.json offline provenance exact reusable-workflow certificate and source pins
$ gh attestation verify trusted-server-fastly.wasm.rebuild-check.json --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.13 --source-digest 770a425df4b28caaaef68dfd930bceabd9928046 --signer-digest 770a425df4b28caaaef68dfd930bceabd9928046 --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.rebuild-check.json --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.13 --source-digest 770a425df4b28caaaef68dfd930bceabd9928046 --signer-digest 770a425df4b28caaaef68dfd930bceabd9928046 --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.13 --format json > trusted-server-fastly.wasm.rebuild-check.json.online-provenance.verified.json
$ jq -e length\ ==\ 1\ and\ all\(.\[\]\;\ .verificationResult.statement.predicateType\ \!=\ null\) trusted-server-fastly.wasm.rebuild-check.json.online-provenance.verified.json
true
$ jq -e --arg invocation https://github.com/prk-Jr/trusted-server/actions/runs/40496605229/attempts/1 all\(.\[\]\;\ .verificationResult.statement.predicate.runDetails.metadata.invocationId\ ==\ \$invocation\) trusted-server-fastly.wasm.rebuild-check.json.online-provenance.verified.json
true
PASS: trusted-server-fastly.wasm.rebuild-check.json online provenance exact reusable-workflow certificate and source pins
$ jq -e --arg source 770a425df4b28caaaef68dfd930bceabd9928046 --arg digest 97d8a93d3eae8591055f3cf3f16c6c1da729cac3b2848fae1e1c7c52c8b08b35 --argjson run 40496605229 .version\ ==\ 1\ and\ .profile\ ==\ \"ordinary-release-fastly-byte-equality-v1\"\ and\ .release_qualification\ ==\ false\ and\ .outcome\ ==\ \"matched\"\ and\ .source_commit\ ==\ \$source\ and\ .asset\ ==\ \"trusted-server-fastly.wasm\"\ and\ .canonical_sha256\ ==\ \$digest\ and\ .reproduction_sha256\ ==\ \$digest\ and\ .canonical.run_id\ ==\ \$run\ and\ .reproduction.run_id\ ==\ \$run\ and\ .canonical.run_attempt\ ==\ 1\ and\ .reproduction.run_attempt\ ==\ 1 trusted-server-fastly.wasm.rebuild-check.json
true
$ cat trusted-server-fastly.wasm.rebuild-check.json
{"asset":"trusted-server-fastly.wasm","canonical":{"artifact":{"id":12731660656,"name":"release-trusted-server-fastly.wasm","sha256":"e86445c66aa3fa8c1832c32cc43ef1646dacee1790ab24ecd1d5816611dab326","size":18654097},"environment":{"checkout_root":"/home/runner/work/trusted-server/trusted-server/ordinary-canonical-source","jobs":4,"locale":"C","started_at_seconds":1793100724,"target_root":"/home/runner/work/_temp/ordinary-fastly-canonical-target","timezone":"UTC","uid":1001,"umask":18},"job_id":122163623700,"observation_artifact":{"id":12731450843,"name":"fastly-observation-canonical","sha256":"aaced5cb26ad1ef9ceb03786744047efe0d95ae324b4658e86990eacaa2fc8d5","size":997},"run_attempt":1,"run_id":40496605229,"sha256":"97d8a93d3eae8591055f3cf3f16c6c1da729cac3b2848fae1e1c7c52c8b08b35","size":80019287,"spdx_sha256":"dd21da52a6231bfb7ac9774e3180fa533fe891d1e55ee0f58006b4a82c2158aa"},"canonical_sha256":"97d8a93d3eae8591055f3cf3f16c6c1da729cac3b2848fae1e1c7c52c8b08b35","cargo_lock_sha256":"b83118e2fcb71a9f607a008d40ac3b605b32263032bb140f11399be9da938ccf","gaps":["alternate-user-unqualified","boundary-unqualified","materials-unqualified","tools-unqualified"],"js_inventory_sha256":"31e2b6dd600f5b34d620cd64c4d5a61a81e99637ab8588223ec92f333f9ee740","npm_lock_sha256":"c4b9ea179eb8801fbe9182ca3feb263b8fafe03d9e92a7045f998a74f6b98874","outcome":"matched","profile":"ordinary-release-fastly-byte-equality-v1","recipe_sha256":"7205b2c216610ae3a3a5a4466d4d04727b32ad25075dc931890a3d469b44f8d8","release_qualification":false,"reproduction":{"artifact":{"id":12730843196,"name":"reproduction-trusted-server-fastly.wasm","sha256":"69bc6d9a08c0f7a7cd6c365db7036c29d8ac1240a0331f3bc58bf314dc8e3071","size":18654095},"environment":{"checkout_root":"/home/runner/work/trusted-server/trusted-server/ordinary-reproduction-source","jobs":2,"locale":"C","started_at_seconds":1793101055,"target_root":"/home/runner/work/_temp/ordinary-fastly-reproduction-target","timezone":"UTC","uid":1001,"umask":23},"job_id":122165952717,"observation_artifact":{"id":12731122625,"name":"fastly-observation-reproduction","sha256":"66a0205bf1cb3aa4fcca026f38eb18cce02facc55da69a8a5c2af6106312bcf4","size":995},"run_attempt":1,"run_id":40496605229,"sha256":"97d8a93d3eae8591055f3cf3f16c6c1da729cac3b2848fae1e1c7c52c8b08b35","size":80019287,"spdx_sha256":"f5bc1e6c7e6eee78332585eb0ac24d2a618215bd2a50e07439dffb69bf836f42"},"reproduction_sha256":"97d8a93d3eae8591055f3cf3f16c6c1da729cac3b2848fae1e1c7c52c8b08b35","source_commit":"770a425df4b28caaaef68dfd930bceabd9928046","target":"wasm32-wasip1","tools":{"acquisition":"ordinary-hosted-toolchain","node":{"sha256":"89af8424dd53e560b1933f87ba650d8bf57c83ca5a04600eefb31f416aabbae7","version":"v24.20.0"},"rustc":{"sha256":"859254978c0a0402c32f949f6de0d99aee73be8d15f45aac00ae1448aac51e74","version":"rustc 1.98.1 (48a229cea 2026-09-01)"}},"variant":"default","version":1}
$ gh api --paginate --slurp repos/prk-Jr/trusted-server/actions/runs/40496605229/artifacts > run-artifacts.json
$ gh api --paginate --slurp repos/prk-Jr/trusted-server/actions/runs/40496605229/attempts/1/jobs > run-jobs.json
$ verify nested companion binary/SPDX, distinct producing jobs and four API artifact joins
PASS canonical artifact id=12731660656 sha256=e86445c66aa3fa8c1832c32cc43ef1646dacee1790ab24ecd1d5816611dab326
PASS canonical observation_artifact id=12731450843 sha256=aaced5cb26ad1ef9ceb03786744047efe0d95ae324b4658e86990eacaa2fc8d5
PASS reproduction artifact id=12730843196 sha256=69bc6d9a08c0f7a7cd6c365db7036c29d8ac1240a0331f3bc58bf314dc8e3071
PASS reproduction observation_artifact id=12731122625 sha256=66a0205bf1cb3aa4fcca026f38eb18cce02facc55da69a8a5c2af6106312bcf4
PASS: nested binary/SPDX/target/variant/producing-job and four distinct artifact joins
$ file ts-aarch64-apple-darwin ts-x86_64-apple-darwin ts-x86_64-unknown-linux-gnu trusted-server-fastly.wasm trusted-server-axum-x86_64-unknown-linux-gnu trusted-server-axum-x86_64-unknown-linux-musl trusted-server-axum-aarch64-unknown-linux-gnu
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]=5fe38f0c3d6dfae69e896efe310d4ac74bc0ab76, with debug_info, not stripped
trusted-server-fastly.wasm:                    WebAssembly (wasm) binary module version 0x1 (MVP)
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]=05809374bf87b80edad041d4b77a478491491327, 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]=fc23d32867b7b042e1b8218a930520f2f519bc42, for GNU/Linux 3.7.0, with debug_info, not stripped
$ ./ts-aarch64-apple-darwin --version
ts package=0.1.0 source=770a425df4b28caaaef68dfd930bceabd9928046 target=aarch64-apple-darwin variant=default
PASS: verified native CLI reports the approved source commit
PASS: complete Phase 2 attestation/publication verification for v0.0.0-rehearsal.13 at 770a425df4b28caaaef68dfd930bceabd9928046


Same-tag CI packaging/native evidence:
Canonical Fastly job: https://github.com/prk-Jr/trusted-server/actions/runs/40496605229/job/122163623700
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:34.1433193Z release-assets/trusted-server-fastly.wasm: OK
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:34.1500951Z ##[group]Run set -euxo pipefail
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:34.1501317Z set -euxo pipefail
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:34.1501673Z fastly_version=$(awk '$1 == "fastly" { print $2 }' .tool-versions)
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:34.1502067Z test "$fastly_version" = 16.0.0
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:34.1502630Z route=$(mktemp -d "$RUNNER_TEMP/fastly-route.XXXXXX")
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:34.1503125Z mkdir "$route/tool" "$route/config" "$route/cache" "$route/tmp" "$route/package"
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:34.1503607Z archive="fastly_v${fastly_version}_linux-amd64.tar.gz"
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:34.1504104Z curl --fail --silent --show-error --location --proto '=https' --retry 2 --max-time 30 \
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:34.1504785Z   "https://github.com/fastly/cli/releases/download/v${fastly_version}/$archive" --output "$route/$archive"
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:34.1505624Z printf '%s  %s\n' b1b89112f1f1291ff275393779ffdacba8724ac64091bda0fa6000ae06308459 "$archive" > "$route/CLI.sha256"
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:34.1506215Z (cd "$route" && sha256sum --check CLI.sha256)
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:34.1506550Z tar -xzf "$route/$archive" -C "$route/tool"
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:34.1507041Z cp release-assets/trusted-server-fastly.wasm "$route/package/trusted-server-fastly.wasm"
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:34.1507653Z printf 'manifest_version = 3\nname = "example-app"\n' > "$route/package/fastly.toml"
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:34.1508250Z expected_wasm=$(sha256sum release-assets/trusted-server-fastly.wasm | awk '{print $1}')
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:34.1508837Z expected_manifest=$(sha256sum "$route/package/fastly.toml" | awk '{print $1}')
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:34.1509496Z producer="$RUNNER_TEMP/ordinary-producer-target/x86_64-unknown-linux-gnu/release/trusted-server-release"
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:34.1510018Z node_program=$(command -v node)
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:34.1510333Z host_network=$(readlink /proc/self/ns/net)
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:34.1510738Z sudo unshare --net -- setpriv --reuid="$(id -u)" --regid="$(id -g)" \
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:34.1511285Z   --clear-groups --inh-caps=-all --ambient-caps=-all --bounding-set=-all --no-new-privs \
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:34.1511887Z   env -i PATH="$route/tool:/usr/bin:/bin:/usr/sbin:/sbin" XDG_CONFIG_HOME="$route/config" \
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:34.1512394Z   XDG_CACHE_HOME="$route/cache" TMPDIR="$route/tmp" LC_ALL=C TZ=UTC \
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:34.1513213Z   bash -euxo pipefail -s -- "$route/package" "$producer" "$expected_wasm" "$expected_manifest" "$host_network" "$node_program" <<'ROUTE'
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:34.1513807Z guest_network=$(readlink /proc/self/ns/net)
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:34.1514111Z test -n "$guest_network"
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:34.1514373Z test "$guest_network" != "$5"
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:34.1514665Z active_interfaces=$(ip -o link show up)
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:34.1515182Z test -z "$active_interfaces"
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:34.1515439Z cd "$1"
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:34.1515694Z timeout 15 fastly version | tee cli-version.txt
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:34.1516081Z grep -E '^Fastly CLI version v16\.0\.0( |$)' cli-version.txt
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:34.1516552Z timeout 60 fastly compute pack --wasm-binary ./trusted-server-fastly.wasm
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:34.1517056Z timeout 30 fastly compute validate --package ./pkg/example-app.tar.gz
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:34.1517452Z tar -tzf ./pkg/example-app.tar.gz
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:34.1517787Z timeout 15 "$6" --input-type=commonjs <<'HEADERS'
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:34.1518182Z const fs = require('node:fs'), zlib = require('node:zlib');
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:34.1518622Z const file = './pkg/example-app.tar.gz', stat = fs.lstatSync(file);
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:34.1519168Z if (!stat.isFile() || stat.size > 768 * 1024 * 1024) throw Error('Diagnostic archive bound exceeded');

@prk-Jr

prk-Jr commented Oct 27, 2026

Copy link
Copy Markdown
Collaborator Author

Phase 2 exact-head rehearsal .13 passed — transcript 3/3

Implementation 770a425df4b28caaaef68dfd930bceabd9928046; green first attempt. Seven binaries / 30 immutable prerelease files, not Latest. Both provenance and SPDX verify online and from retained bundles with exact reusable signer/source/certificate pins. The real companion, all asset/checksum joins, SPDX equality, native checks and pinned offline Fastly route pass. Initial read-only downloads encountered a connection timeout; one missing 11 KB bundle was recovered without source/tag/release mutation. CI log fetches also needed read-only TLS retries; no publishing operation was retried. Qualified selectors remain closed. The separately recorded .10 rerun-all proof remains tied to its exact earlier source.

build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:34.1519965Z const bytes = zlib.gunzipSync(fs.readFileSync(file), {maxOutputLength:513 * 1024 * 1024 + 16384});
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:34.1520438Z let offset = 0;
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:34.1520771Z for (let count = 0; count < 8 && offset + 512 <= bytes.length; count++) {
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:34.1521201Z   const header = bytes.subarray(offset, offset + 512);
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:34.1521564Z   if (header.every(byte => byte === 0)) break;
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:34.1522027Z   const field = (start, end) => header.subarray(start, end).toString('utf8').split('\0')[0];
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:34.1523042Z   const hidden = (start, end) => { const data = header.subarray(start, end), zero = data.indexOf(0); return zero >= 0 && data.subarray(zero + 1).some(byte => byte !== 0); };
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:34.1523717Z   const rawSize = field(124, 136).trim();
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:34.1524149Z   if (!/^[0-7]+$/.test(rawSize)) throw Error('Unsupported diagnostic size encoding');
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:34.1524587Z   const size = parseInt(rawSize, 8);
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:34.1525083Z   if (!Number.isSafeInteger(size) || size > bytes.length) throw Error('Diagnostic member bound exceeded');
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:34.1526172Z   console.log('Fastly raw TAR header:', JSON.stringify({path:field(0, 100), type:String.fromCharCode(header[156]), size, prefix:field(345, 500), link:field(157, 257), nonzero_padding:[[0,100],[157,257],[345,500]].some(([start,end]) => hidden(start,end))}));
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:34.1527065Z   offset += 512 + Math.ceil(size / 512) * 512;
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:34.1527356Z }
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:34.1527552Z HEADERS
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:34.1527931Z timeout 30 "$2" inspect-fastly-package --package-dir ./pkg --manifest ./fastly.toml \
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:34.1528453Z   --expected-manifest-sha256 "$4" --expected-wasm-sha256 "$3"
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:34.1528954Z tar -xOzf ./pkg/example-app.tar.gz example-app/bin/main.wasm > packaged.wasm
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:34.1529423Z cmp trusted-server-fastly.wasm packaged.wasm
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:34.1529841Z tar -xOzf ./pkg/example-app.tar.gz example-app/fastly.toml > packaged.toml
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:34.1530243Z cmp fastly.toml packaged.toml
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:34.1530595Z printf '%s  %s\n' "$3" trusted-server-fastly.wasm > input.sha256
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:34.1530965Z sha256sum --check input.sha256
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:34.1531492Z echo 'SUCCESS: pinned Fastly route packed, validated, inspected and byte-compared without credentials or network'
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:34.1532002Z ROUTE
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:34.1532392Z printf '%s  %s\n' "$expected_wasm" release-assets/trusted-server-fastly.wasm | sha256sum --check
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:34.1603446Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0}
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:34.1603798Z ##[endgroup]
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:34.1694538Z ++ awk '$1 == "fastly" { print $2 }' .tool-versions
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:34.1719861Z + fastly_version=16.0.0
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:34.1720396Z + test 16.0.0 = 16.0.0
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:34.1723151Z ++ mktemp -d /home/runner/work/_temp/fastly-route.XXXXXX
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:34.1737062Z + route=/home/runner/work/_temp/fastly-route.ISCkVh
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:34.1739245Z + mkdir /home/runner/work/_temp/fastly-route.ISCkVh/tool /home/runner/work/_temp/fastly-route.ISCkVh/config /home/runner/work/_temp/fastly-route.ISCkVh/cache /home/runner/work/_temp/fastly-route.ISCkVh/tmp /home/runner/work/_temp/fastly-route.ISCkVh/package
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:34.1754876Z + archive=fastly_v16.0.0_linux-amd64.tar.gz
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:34.1756959Z + curl --fail --silent --show-error --location --proto =https --retry 2 --max-time 30 https://github.com/fastly/cli/releases/download/v16.0.0/fastly_v16.0.0_linux-amd64.tar.gz --output /home/runner/work/_temp/fastly-route.ISCkVh/fastly_v16.0.0_linux-amd64.tar.gz
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:34.7206719Z + printf '%s  %s\n' b1b89112f1f1291ff275393779ffdacba8724ac64091bda0fa6000ae06308459 fastly_v16.0.0_linux-amd64.tar.gz
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:34.7209895Z + cd /home/runner/work/_temp/fastly-route.ISCkVh
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:34.7210458Z + sha256sum --check CLI.sha256
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:34.7484452Z fastly_v16.0.0_linux-amd64.tar.gz: OK
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:34.7487781Z + tar -xzf /home/runner/work/_temp/fastly-route.ISCkVh/fastly_v16.0.0_linux-amd64.tar.gz -C /home/runner/work/_temp/fastly-route.ISCkVh/tool
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:34.9517738Z + cp release-assets/trusted-server-fastly.wasm /home/runner/work/_temp/fastly-route.ISCkVh/package/trusted-server-fastly.wasm
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:34.9761353Z + printf 'manifest_version = 3\nname = "example-app"\n'
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:34.9767523Z ++ sha256sum release-assets/trusted-server-fastly.wasm
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:34.9768510Z ++ awk '{print $1}'
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:35.0437388Z + expected_wasm=97d8a93d3eae8591055f3cf3f16c6c1da729cac3b2848fae1e1c7c52c8b08b35
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:35.0441933Z ++ sha256sum /home/runner/work/_temp/fastly-route.ISCkVh/package/fastly.toml
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:35.0443037Z ++ awk '{print $1}'
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:35.0465696Z + expected_manifest=21b3c0d6f0a329838b23ad87a1d42840cceaff25d0247c1ac9aa5b34784360b2
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:35.0467286Z + producer=/home/runner/work/_temp/ordinary-producer-target/x86_64-unknown-linux-gnu/release/trusted-server-release
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:35.0469022Z ++ command -v node
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:35.0472260Z + node_program=/opt/hostedtoolcache/node/24.20.0/x64/bin/node
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:35.0475105Z ++ readlink /proc/self/ns/net
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:35.0486376Z + host_network='net:[4026531833]'
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:35.0489818Z ++ id -u
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:35.0512143Z ++ id -g
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:35.0528134Z + sudo unshare --net -- setpriv --reuid=1001 --regid=1001 --clear-groups --inh-caps=-all --ambient-caps=-all --bounding-set=-all --no-new-privs env -i PATH=/home/runner/work/_temp/fastly-route.ISCkVh/tool:/usr/bin:/bin:/usr/sbin:/sbin XDG_CONFIG_HOME=/home/runner/work/_temp/fastly-route.ISCkVh/config XDG_CACHE_HOME=/home/runner/work/_temp/fastly-route.ISCkVh/cache TMPDIR=/home/runner/work/_temp/fastly-route.ISCkVh/tmp LC_ALL=C TZ=UTC bash -euxo pipefail -s -- /home/runner/work/_temp/fastly-route.ISCkVh/package /home/runner/work/_temp/ordinary-producer-target/x86_64-unknown-linux-gnu/release/trusted-server-release 97d8a93d3eae8591055f3cf3f16c6c1da729cac3b2848fae1e1c7c52c8b08b35 21b3c0d6f0a329838b23ad87a1d42840cceaff25d0247c1ac9aa5b34784360b2 'net:[4026531833]' /opt/hostedtoolcache/node/24.20.0/x64/bin/node
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:35.0928894Z ++ readlink /proc/self/ns/net
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:35.0936295Z + guest_network='net:[4026532266]'
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:35.0936886Z + test -n 'net:[4026532266]'
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:35.0937391Z + test 'net:[4026532266]' '!=' 'net:[4026531833]'
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:35.0939706Z ++ ip -o link show up
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:35.0952743Z + active_interfaces=
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:35.0953086Z + test -z ''
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:35.0953581Z + cd /home/runner/work/_temp/fastly-route.ISCkVh/package
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:35.0957571Z + timeout 15 fastly version
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:35.0958311Z + tee cli-version.txt
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:35.1346439Z Fastly CLI version v16.0.0 (34cef1b0)
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:35.1347267Z Built with go version go1.26.5 linux/amd64 (2026-10-27)
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:35.1371000Z + grep -E '^Fastly CLI version v16\.0\.0( |$)' cli-version.txt
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:35.1381184Z Fastly CLI version v16.0.0 (34cef1b0)
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:35.1383815Z + timeout 60 fastly compute pack --wasm-binary ./trusted-server-fastly.wasm
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:35.1768309Z | Copying wasm binary...
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:35.1771981Z / Copying wasm binary...
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:35.9913854Z - Copying wasm binary...
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:35.9914535Z ✓ Copying wasm binary
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:35.9914802Z | Copying manifest...
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:35.9920526Z / Copying manifest...
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:35.9921023Z ✓ Copying manifest
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:35.9921340Z | Creating example-app.tar.gz file...
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:35.9923356Z / Creating example-app.tar.gz file...
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:35.9924038Z ✓ Creating example-app.tar.gz file
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:35.9990175Z + timeout 30 fastly compute validate --package ./pkg/example-app.tar.gz
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:36.3057383Z SUCCESS: Validated package /home/runner/work/_temp/fastly-route.ISCkVh/package/pkg/example-app.tar.gz
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:36.3073800Z + tar -tzf ./pkg/example-app.tar.gz
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:36.3099744Z example-app
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:36.3100097Z example-app/bin
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:36.3100455Z example-app/bin/main.wasm
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:36.7675038Z example-app/fastly.toml
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:36.7689042Z + timeout 15 /opt/hostedtoolcache/node/24.20.0/x64/bin/node --input-type=commonjs
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:37.0100071Z Fastly raw TAR header: {"path":"example-app","type":"5","size":0,"prefix":"","link":"","nonzero_padding":false}
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:37.0102764Z Fastly raw TAR header: {"path":"example-app/bin","type":"5","size":0,"prefix":"","link":"","nonzero_padding":false}
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:37.0104291Z Fastly raw TAR header: {"path":"example-app/bin/main.wasm","type":"0","size":80019287,"prefix":"","link":"","nonzero_padding":false}
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:37.0105909Z Fastly raw TAR header: {"path":"example-app/fastly.toml","type":"0","size":42,"prefix":"","link":"","nonzero_padding":false}
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:37.0188187Z + timeout 30 /home/runner/work/_temp/ordinary-producer-target/x86_64-unknown-linux-gnu/release/trusted-server-release inspect-fastly-package --package-dir ./pkg --manifest ./fastly.toml --expected-manifest-sha256 21b3c0d6f0a329838b23ad87a1d42840cceaff25d0247c1ac9aa5b34784360b2 --expected-wasm-sha256 97d8a93d3eae8591055f3cf3f16c6c1da729cac3b2848fae1e1c7c52c8b08b35
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:37.5974856Z {"accepted":true,"archive_sha256":"ffa4464a4dc9f95ddae742069b99bb084fd3dda0b735a0ac67883d01a76c666e","check":"manual-fastly-package","limits":{"deployment_authorized":false,"official_release_verified":false,"runtime_validated":false},"manifest_sha256":"21b3c0d6f0a329838b23ad87a1d42840cceaff25d0247c1ac9aa5b34784360b2","module_sha256":"97d8a93d3eae8591055f3cf3f16c6c1da729cac3b2848fae1e1c7c52c8b08b35","package_path":"/home/runner/work/_temp/fastly-route.ISCkVh/package/pkg/example-app.tar.gz"}
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:37.5978133Z + tar -xOzf ./pkg/example-app.tar.gz example-app/bin/main.wasm
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:38.0596498Z + cmp trusted-server-fastly.wasm packaged.wasm
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:38.1095240Z + tar -xOzf ./pkg/example-app.tar.gz example-app/fastly.toml
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:38.5785947Z + cmp fastly.toml packaged.toml
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:38.5796274Z + printf '%s  %s\n' 97d8a93d3eae8591055f3cf3f16c6c1da729cac3b2848fae1e1c7c52c8b08b35 trusted-server-fastly.wasm
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:38.5796988Z + sha256sum --check input.sha256
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:38.6458276Z trusted-server-fastly.wasm: OK
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:38.6462397Z + echo 'SUCCESS: pinned Fastly route packed, validated, inspected and byte-compared without credentials or network'
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:38.6463534Z SUCCESS: pinned Fastly route packed, validated, inspected and byte-compared without credentials or network
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:38.6479970Z + printf '%s  %s\n' 97d8a93d3eae8591055f3cf3f16c6c1da729cac3b2848fae1e1c7c52c8b08b35 release-assets/trusted-server-fastly.wasm
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:38.6481423Z + sha256sum --check
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:38.7145329Z release-assets/trusted-server-fastly.wasm: OK
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:38.7208163Z ##[group]Run actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:38.7208582Z with:
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:38.7208816Z   name: release-trusted-server-fastly.wasm
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:38.7209143Z   path: ordinary-canonical-source/release-assets/*
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:38.7209457Z   if-no-files-found: error
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:38.7209687Z   retention-days: 7
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:38.7209897Z   compression-level: 6
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:38.7210113Z   overwrite: false
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:38.7210326Z   include-hidden-files: false
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:38.7210563Z ##[endgroup]
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:38.8768554Z With the provided path, there will be 2 files uploaded
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:38.8773052Z Artifact name is valid!
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T11:35:38.8773965Z Root directory input is valid!
PASS: packed CI module SHA-256 equals independently verified release wasm: 97d8a93d3eae8591055f3cf3f16c6c1da729cac3b2848fae1e1c7c52c8b08b35

Native evidence (macos-intel):
build / Build ts-x86_64-apple-darwin	UNKNOWN STEP	2026-10-27T11:54:19.5582680Z 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:54:19.5593730Z SUCCESS: final-byte checks x86_64-apple-darwin 
build / Build ts-x86_64-apple-darwin	UNKNOWN STEP	2026-10-27T11:54:19.5723640Z SUCCESS: ts package=0.1.0 source=770a425df4b28caaaef68dfd930bceabd9928046 target=x86_64-apple-darwin variant=default

Native evidence (macos-arm):
build / Build ts-aarch64-apple-darwin	UNKNOWN STEP	2026-10-27T11:39:14.9039020Z SUCCESS: Mach-O target and macOS minimum OS 13.0: aarch64-apple-darwin
build / Build ts-aarch64-apple-darwin	UNKNOWN STEP	2026-10-27T11:39:14.9046800Z SUCCESS: final-byte checks aarch64-apple-darwin 
build / Build ts-aarch64-apple-darwin	UNKNOWN STEP	2026-10-27T11:39:14.9099200Z SUCCESS: ts package=0.1.0 source=770a425df4b28caaaef68dfd930bceabd9928046 target=aarch64-apple-darwin variant=default

Native evidence (cli-linux):
build / Build ts-x86_64-unknown-linux-gnu	UNKNOWN STEP	2026-10-27T11:38:14.2740487Z 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-27T11:38:14.2779795Z SUCCESS: ts package=0.1.0 source=770a425df4b28caaaef68dfd930bceabd9928046 target=x86_64-unknown-linux-gnu variant=default
build / Build ts-x86_64-unknown-linux-gnu	UNKNOWN STEP	2026-10-27T11:38:16.7643381Z SUCCESS: ts package=0.1.0 source=770a425df4b28caaaef68dfd930bceabd9928046 target=x86_64-unknown-linux-gnu variant=default
build / Build ts-x86_64-unknown-linux-gnu	UNKNOWN STEP	2026-10-27T11:38:18.5439735Z SUCCESS: ts package=0.1.0 source=770a425df4b28caaaef68dfd930bceabd9928046 target=x86_64-unknown-linux-gnu variant=default
build / Build ts-x86_64-unknown-linux-gnu	UNKNOWN STEP	2026-10-27T11:38:20.3921667Z SUCCESS: ts package=0.1.0 source=770a425df4b28caaaef68dfd930bceabd9928046 target=x86_64-unknown-linux-gnu variant=default

Native evidence (axum):
build / Build trusted-server-axum-x86_64-unknown-linux-gnu	UNKNOWN STEP	2026-10-27T11:35:06.7898002Z 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-27T11:35:09.6425390Z 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-27T11:35:09.7810318Z 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-27T11:35:10.0000537Z 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-27T11:35:12.5887102Z 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-27T11:35:12.7252172Z 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-27T11:35:12.8943037Z 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-27T11:35:15.2595115Z 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-27T11:35:15.3981821Z 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-27T11:35:15.5582613Z 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

Native evidence (axum-arm):
build / Build trusted-server-axum-aarch64-unknown-linux-gnu	UNKNOWN STEP	2026-10-27T11:33:56.4791951Z 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-27T11:33:58.7909607Z 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-27T11:33:58.8942164Z 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-27T11:33:59.0583750Z SUCCESS: Axum bound to 0.0.0.0:8080; host reached published container port, HTTP 200 ok: debian:12-slim@sha256:7ff6ba31527b9e336162fa061746c366c4b2032f4d2cff2078bea43f78efe3f8 sha256:28fe65558df3e10c89e7d685cb86544cdc138f242d12100c5b0981f92aae0853

Native evidence (axum-musl):
build / Build trusted-server-axum-x86_64-unknown-linux-musl	UNKNOWN STEP	2026-10-27T11:33:11.1291979Z SUCCESS: final-byte checks x86_64-unknown-linux-musl 
build / Build trusted-server-axum-x86_64-unknown-linux-musl	UNKNOWN STEP	2026-10-27T11:33:14.6989328Z 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-27T11:33:14.8035523Z 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-27T11:33:14.9882780Z 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-27T11:33:15.1987711Z SUCCESS: Axum rejects EDGEZERO__ADAPTER__PORT=0; exit 1, ports must be 1–65535: sha256:c58a228a83a1b654f4cb04cf55ca6dce15e2becf7d4f3b753e85602c193cd471
build / Build trusted-server-axum-x86_64-unknown-linux-musl	UNKNOWN STEP	2026-10-27T11:33:15.2968645Z SUCCESS: Axum rejects PORT=0; exit 1, ports must be 1–65535: sha256:c58a228a83a1b654f4cb04cf55ca6dce15e2becf7d4f3b753e85602c193cd471
build / Build trusted-server-axum-x86_64-unknown-linux-musl	UNKNOWN STEP	2026-10-27T11:33:15.4256215Z SUCCESS: Axum bound to 0.0.0.0:8080; host reached published container port, HTTP 200 ok: scratch sha256:c58a228a83a1b654f4cb04cf55ca6dce15e2becf7d4f3b753e85602c193cd471

release	Verify handoff, create once, publish by release ID and verify	2026-10-27T12:00:36.4775916Z Verified post-publish re-download: all 30 assets byte-identical to signed checksums and handoff
Job duration build / Build trusted-server-fastly.wasm: 326 seconds
Job duration build / Reproduce trusted-server-fastly.wasm: 378 seconds
Job duration build / Compare ordinary Fastly release bytes: 116 seconds

Docs-only since rehearsed 770a425 (v0.0.0-rehearsal.13).
…-attestations-phase2

# Conflicts:
#	docs/superpowers/plans/binary-attestations-phase1-compatibility.md
Docs-only after 81020c0. Rehearsal .13 remains attributed exclusively to 770a425; the main integration is not re-rehearsed.
…binary-attestations-phase2

# Conflicts:
#	crates/trusted-server-cli/src/prebid_bundle.rs
@prk-Jr
prk-Jr removed this pull request from stack #1450 October 28, 2026 06:37
Docs-only after 7d55177. Rehearsal .13 remains exclusively at 770a425; no new Phase 2 rehearsal.
Documentation-only merge after 5349b7c. Application inputs from 7d55177 remain unrehearsed; .13 stays exclusively at 770a425.
Tree-equivalent merge after 08e1c33; source, workflows and release machinery are unchanged. Rehearsal .13 remains exclusively at 770a425.
@prk-Jr

prk-Jr commented Oct 28, 2026 •

Copy link
Copy Markdown
Collaborator Author

Phase 2 current-input rehearsal .16 passed — transcript 1/3

Source 5fa3843364f247fdc261c438ab9257323637a42c; green first attempt, all 18 jobs successful. Fresh lightweight v0.0.0-rehearsal.16: seven binaries / 30 immutable prerelease files, not Latest; 29 checksum entries. Both binary predicates and reusable signer identities passed online without bundles and offline with published bundles/custom trusted roots; 14 SPDX equalities plus an exact one-byte negative check, companion provenance/API/upload joins, native checks and offline Fastly packaging passed. Reproduction 269s; comparison 86s, overlapping native builds.

The first independent release download hit a connection timeout; 28 local assets already matched the API and the two missing files were recovered with bounded read-only download retries. The immutable release and workflow were not rerun.

This closes the later-application-input and structured-diagnostic rehearsal gap at this exact source. Historical .13 stays exclusively at 770a425df; the separate .10 rerun-all recovery proof stays attributed to 3ccfe2971. The hosted negative fixture at the exact source requires JSON outcome mismatched / stage bytes and proves no signing/publication sentinel. Phase 3 is a separate plan-only draft; no v2 index or complete-composition claim is made. #1449 stays draft, no reviewers requested. No IAB tags, releases or settings changed.

Pinned GitHub CLI official archive checksum:
gh_2.102.0_macOS_arm64.zip: OK

$ gh --version
gh version 2.102.0 (2026-09-30)
https://github.com/cli/cli/releases/tag/v2.102.0
Source 5fa3843364f247fdc261c438ab9257323637a42c; tag v0.0.0-rehearsal.16; run https://github.com/prk-Jr/trusted-server/actions/runs/40669491236
$ shasum -a 256 trusted_root.jsonl
65ca537f6ed8a47fd0e560c421baa1f6c1efb8b25fc200d8c5c02c0e92eb2b9c  trusted_root.jsonl
$ gh release download v0.0.0-rehearsal.16 --repo prk-Jr/trusted-server --dir .
Get "https://api.github.com/repos/prk-Jr/trusted-server/releases/assets/684648666": dial tcp 20.207.73.85:443: connect: operation timed out

Read-only download recovery: workflow and immutable release remain unchanged; 28 existing files already match API size/digests. Three attempts maximum per missing file, 120-second command deadline, 2s/5s backoff; retry only explicit transport/timeout/5xx/429 failures.
$ gh release download v0.0.0-rehearsal.16 --repo prk-Jr/trusted-server --dir . --pattern trusted-server-axum-x86_64-unknown-linux-musl --clobber
PASS: recovered trusted-server-axum-x86_64-unknown-linux-musl; exact API size/digest
$ gh release download v0.0.0-rehearsal.16 --repo prk-Jr/trusted-server --dir . --pattern trusted-server-fastly.wasm.provenance.sigstore.json --clobber
PASS: recovered trusted-server-fastly.wasm.provenance.sigstore.json; exact API size/digest
PASS: recovery complete; immutable release was not changed or rerun

$ gh --version
gh version 2.102.0 (2026-09-30)
https://github.com/cli/cli/releases/tag/v2.102.0
Source 5fa3843364f247fdc261c438ab9257323637a42c; tag v0.0.0-rehearsal.16; run https://github.com/prk-Jr/trusted-server/actions/runs/40669491236
$ shasum -a 256 trusted_root.jsonl
65ca537f6ed8a47fd0e560c421baa1f6c1efb8b25fc200d8c5c02c0e92eb2b9c  trusted_root.jsonl
$ gh release download v0.0.0-rehearsal.16 --repo prk-Jr/trusted-server --dir . --skip-existing
$ gh api repos/prk-Jr/trusted-server/releases/tags/v0.0.0-rehearsal.16 > release.json
$ jq -e --arg tag v0.0.0-rehearsal.16 .tag_name==\$tag\ and\ .immutable==true\ and\ .prerelease==true\ and\ .draft==false\ and\ \(.assets\|length\)==30 release.json
true
PASS: all seven SPDX roots preserve asset name, exact release-tag version and final binary SHA-256
PASS: exact 30 assets; every API size/digest matches downloaded bytes; checksum coverage exactly 29; only the real Fastly rebuild-check added, no index or deferred companions
$ gh api repos/prk-Jr/trusted-server/releases/latest > latest.json
$ jq -e --arg tag v0.0.0-rehearsal.16 .tag_name\!=\$tag latest.json
true
PASS: prerelease is not Latest
$ gh release verify v0.0.0-rehearsal.16 --repo prk-Jr/trusted-server
Resolved tag v0.0.0-rehearsal.16 to sha1:5fa3843364f247fdc261c438ab9257323637a42c
Loaded attestation from GitHub API
✓ Release v0.0.0-rehearsal.16 verified!

Assets
SHA256SUMS	sha256:07ade8f3c08db6f85abbfa4e493f338c2ca70b318e8199ea1917bc43d354c6c8
trusted-server-axum-aarch64-unknown-linux-gnu	sha256:232b25653ada8a0019abc0b1aff81ea00d2d0c3cc62bb5efba2d40d089060d57
trusted-server-axum-aarch64-unknown-linux-gnu.provenance.sigstore.json	sha256:b10fc85af7d3b79bdba0b3d29761fe37ef2ee3047ec17974d6e3304caf7966d6
trusted-server-axum-aarch64-unknown-linux-gnu.sbom.sigstore.json	sha256:a69d365e66096c9c6b9c51cd290767d1a23fbdc4b1732f8c2191da0790eb95ed
trusted-server-axum-aarch64-unknown-linux-gnu.spdx.json	sha256:598c396ea8fd8bf36be3df6f6f37cfc5b4343ca6f191a7aa1d13999e4449cc3b
trusted-server-axum-x86_64-unknown-linux-gnu	sha256:92e936d9e1807340c7d8c6d9621dc4adf3d193fa8b93428a58830766f5ed69b9
trusted-server-axum-x86_64-unknown-linux-gnu.provenance.sigstore.json	sha256:f85b16d7120736db2857aedb5acf892e93cecaceb672ae6ad906ddce456dbecc
trusted-server-axum-x86_64-unknown-linux-gnu.sbom.sigstore.json	sha256:63e9f7eceddbebec647e66121556159b3e42a29e5e000890efcbd21ce1f88356
trusted-server-axum-x86_64-unknown-linux-gnu.spdx.json	sha256:3abb0ec1799f5163035be770d3ccf55a5eecac7cda5c15c91aa82f13f3cc461d
trusted-server-axum-x86_64-unknown-linux-musl	sha256:e1b843f0789e6c04d136f24eaeb7800ce5ec99c02e4b40cfc68d229995a3683c
trusted-server-axum-x86_64-unknown-linux-musl.provenance.sigstore.json	sha256:563f0246556e3e06f6581b86f654b276fe44b4cd6ac750c4bf0b33fe35b576ec
trusted-server-axum-x86_64-unknown-linux-musl.sbom.sigstore.json	sha256:6b58ad0b799378e99df109f66c7d816c175662e560ee1ea679ae7d4f664e7a08
trusted-server-axum-x86_64-unknown-linux-musl.spdx.json	sha256:28fa2d4dc2883a1316b4de0e3983724e4e5a3e42ca70d76e6614f17251e036be
trusted-server-fastly.wasm	sha256:c02b5fecdf82a194ed62873549efc1489d6333eff1e2fa1285728465b60fa7b9
trusted-server-fastly.wasm.provenance.sigstore.json	sha256:adcdd1f997e4b27581e70dade29d27d5b26b9979fc61884cd0e93fa38c1d4b16
trusted-server-fastly.wasm.rebuild-check.json	sha256:f19931ed21fc1884c181fc0e9670a1463d9ec1b43f66a19774f222b14813ef39
trusted-server-fastly.wasm.sbom.sigstore.json	sha256:9e9933d0cb73f75069712014c51c4bbd06606d35afcec76091872fff6b499395
trusted-server-fastly.wasm.spdx.json	sha256:b2a3bbc9024f4feae92eb1a7d40b0ec92e1f67e8c02063f364b36878f9b7f425
ts-aarch64-apple-darwin	sha256:8aa81fcafb6e42b4a8a74dc526c97e3c72d0d02fa2000f5a52fe2b1fb4d16d2e
ts-aarch64-apple-darwin.provenance.sigstore.json	sha256:023a0d30514335ff9a640f992cf5ed15568388f5fefef318153fc657284e6ed8
ts-aarch64-apple-darwin.sbom.sigstore.json	sha256:3cc6bf7e1b26d4084e3eb048b99467e6a3d6a1e3b65dc99b20332775a5ad0bd9
ts-aarch64-apple-darwin.spdx.json	sha256:c15a7d49c00dabd51ddd7c88deb140a3801159ed2612b2ee8f2eceab3bb6c076
ts-x86_64-apple-darwin	sha256:64668392236182359ca85120f4d63f013ef94bc4988e9756fe5775866ff93ff5
ts-x86_64-apple-darwin.provenance.sigstore.json	sha256:da14748ff043bb0440f5f14b4197f0a14c4815732d759578c2bdf8e613638725
ts-x86_64-apple-darwin.sbom.sigstore.json	sha256:ca36e427f6387fe662c1a33f631a52387f0faa360a8b7813fc38692649ae54b3
ts-x86_64-apple-darwin.spdx.json	sha256:4928784400f19f3ad72a0a7aee55e8d6fe8a72c5a25e7ea90ac8f54e4ab5cb86
ts-x86_64-unknown-linux-gnu	sha256:3c726e12cd93a8ac28d2ee67844a2a6d43af62d3666db76b927eb7a77dfca6cf
ts-x86_64-unknown-linux-gnu.provenance.sigstore.json	sha256:4f8e92909f25c0102f8f299bc0935adac99a9a23cb2fc85fb2d003a121553a32
ts-x86_64-unknown-linux-gnu.sbom.sigstore.json	sha256:8688788dd67b5dc48ac1ada783594de58f68558b5dd7f4b615de424a17e2f4d3
ts-x86_64-unknown-linux-gnu.spdx.json	sha256:78a229dfd7253039b9af69456a6770636974de236043f0f3ebfc293e249d8b38

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

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

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

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

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

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

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

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

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

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

✓ Verification succeeded! ts-x86_64-apple-darwin.spdx.json is present in release v0.0.0-rehearsal.16
$ gh release verify-asset v0.0.0-rehearsal.16 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:da14748ff043bb0440f5f14b4197f0a14c4815732d759578c2bdf8e613638725
Resolved tag v0.0.0-rehearsal.16 to sha1:5fa3843364f247fdc261c438ab9257323637a42c
Loaded attestation from GitHub API

✓ Verification succeeded! ts-x86_64-apple-darwin.provenance.sigstore.json is present in release v0.0.0-rehearsal.16
$ gh release verify-asset v0.0.0-rehearsal.16 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:ca36e427f6387fe662c1a33f631a52387f0faa360a8b7813fc38692649ae54b3
Resolved tag v0.0.0-rehearsal.16 to sha1:5fa3843364f247fdc261c438ab9257323637a42c
Loaded attestation from GitHub API

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

✓ Verification succeeded! ts-x86_64-unknown-linux-gnu is present in release v0.0.0-rehearsal.16
$ gh release verify-asset v0.0.0-rehearsal.16 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:78a229dfd7253039b9af69456a6770636974de236043f0f3ebfc293e249d8b38
Resolved tag v0.0.0-rehearsal.16 to sha1:5fa3843364f247fdc261c438ab9257323637a42c
Loaded attestation from GitHub API

✓ Verification succeeded! ts-x86_64-unknown-linux-gnu.spdx.json is present in release v0.0.0-rehearsal.16
$ gh release verify-asset v0.0.0-rehearsal.16 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:4f8e92909f25c0102f8f299bc0935adac99a9a23cb2fc85fb2d003a121553a32
Resolved tag v0.0.0-rehearsal.16 to sha1:5fa3843364f247fdc261c438ab9257323637a42c
Loaded attestation from GitHub API

✓ Verification succeeded! ts-x86_64-unknown-linux-gnu.provenance.sigstore.json is present in release v0.0.0-rehearsal.16
$ gh release verify-asset v0.0.0-rehearsal.16 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:8688788dd67b5dc48ac1ada783594de58f68558b5dd7f4b615de424a17e2f4d3
Resolved tag v0.0.0-rehearsal.16 to sha1:5fa3843364f247fdc261c438ab9257323637a42c
Loaded attestation from GitHub API

✓ Verification succeeded! ts-x86_64-unknown-linux-gnu.sbom.sigstore.json is present in release v0.0.0-rehearsal.16
$ gh release verify-asset v0.0.0-rehearsal.16 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:92e936d9e1807340c7d8c6d9621dc4adf3d193fa8b93428a58830766f5ed69b9
Resolved tag v0.0.0-rehearsal.16 to sha1:5fa3843364f247fdc261c438ab9257323637a42c
Loaded attestation from GitHub API

✓ Verification succeeded! trusted-server-axum-x86_64-unknown-linux-gnu is present in release v0.0.0-rehearsal.16
$ gh release verify-asset v0.0.0-rehearsal.16 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:3abb0ec1799f5163035be770d3ccf55a5eecac7cda5c15c91aa82f13f3cc461d
Resolved tag v0.0.0-rehearsal.16 to sha1:5fa3843364f247fdc261c438ab9257323637a42c
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.16
$ gh release verify-asset v0.0.0-rehearsal.16 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:f85b16d7120736db2857aedb5acf892e93cecaceb672ae6ad906ddce456dbecc
Resolved tag v0.0.0-rehearsal.16 to sha1:5fa3843364f247fdc261c438ab9257323637a42c
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.16
$ gh release verify-asset v0.0.0-rehearsal.16 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:63e9f7eceddbebec647e66121556159b3e42a29e5e000890efcbd21ce1f88356
Resolved tag v0.0.0-rehearsal.16 to sha1:5fa3843364f247fdc261c438ab9257323637a42c
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.16
$ gh release verify-asset v0.0.0-rehearsal.16 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:e1b843f0789e6c04d136f24eaeb7800ce5ec99c02e4b40cfc68d229995a3683c
Resolved tag v0.0.0-rehearsal.16 to sha1:5fa3843364f247fdc261c438ab9257323637a42c
Loaded attestation from GitHub API

✓ Verification succeeded! trusted-server-axum-x86_64-unknown-linux-musl is present in release v0.0.0-rehearsal.16
$ gh release verify-asset v0.0.0-rehearsal.16 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:28fa2d4dc2883a1316b4de0e3983724e4e5a3e42ca70d76e6614f17251e036be
Resolved tag v0.0.0-rehearsal.16 to sha1:5fa3843364f247fdc261c438ab9257323637a42c
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.16
$ gh release verify-asset v0.0.0-rehearsal.16 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:563f0246556e3e06f6581b86f654b276fe44b4cd6ac750c4bf0b33fe35b576ec
Resolved tag v0.0.0-rehearsal.16 to sha1:5fa3843364f247fdc261c438ab9257323637a42c
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.16
$ gh release verify-asset v0.0.0-rehearsal.16 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:6b58ad0b799378e99df109f66c7d816c175662e560ee1ea679ae7d4f664e7a08
Resolved tag v0.0.0-rehearsal.16 to sha1:5fa3843364f247fdc261c438ab9257323637a42c
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.16
$ gh release verify-asset v0.0.0-rehearsal.16 trusted-server-axum-aarch64-unknown-linux-gnu --repo prk-Jr/trusted-server
Calculated digest for trusted-server-axum-aarch64-unknown-linux-gnu: sha256:232b25653ada8a0019abc0b1aff81ea00d2d0c3cc62bb5efba2d40d089060d57
Resolved tag v0.0.0-rehearsal.16 to sha1:5fa3843364f247fdc261c438ab9257323637a42c
Loaded attestation from GitHub API

✓ Verification succeeded! trusted-server-axum-aarch64-unknown-linux-gnu is present in release v0.0.0-rehearsal.16
$ gh release verify-asset v0.0.0-rehearsal.16 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:598c396ea8fd8bf36be3df6f6f37cfc5b4343ca6f191a7aa1d13999e4449cc3b
Resolved tag v0.0.0-rehearsal.16 to sha1:5fa3843364f247fdc261c438ab9257323637a42c
Loaded attestation from GitHub API

✓ Verification succeeded! trusted-server-axum-aarch64-unknown-linux-gnu.spdx.json is present in release v0.0.0-rehearsal.16
$ gh release verify-asset v0.0.0-rehearsal.16 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:b10fc85af7d3b79bdba0b3d29761fe37ef2ee3047ec17974d6e3304caf7966d6
Resolved tag v0.0.0-rehearsal.16 to sha1:5fa3843364f247fdc261c438ab9257323637a42c
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.16
$ gh release verify-asset v0.0.0-rehearsal.16 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:a69d365e66096c9c6b9c51cd290767d1a23fbdc4b1732f8c2191da0790eb95ed
Resolved tag v0.0.0-rehearsal.16 to sha1:5fa3843364f247fdc261c438ab9257323637a42c
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.16
$ gh release verify-asset v0.0.0-rehearsal.16 trusted-server-fastly.wasm.rebuild-check.json --repo prk-Jr/trusted-server
Calculated digest for trusted-server-fastly.wasm.rebuild-check.json: sha256:f19931ed21fc1884c181fc0e9670a1463d9ec1b43f66a19774f222b14813ef39
Resolved tag v0.0.0-rehearsal.16 to sha1:5fa3843364f247fdc261c438ab9257323637a42c
Loaded attestation from GitHub API

✓ Verification succeeded! trusted-server-fastly.wasm.rebuild-check.json is present in release v0.0.0-rehearsal.16
$ gh release verify-asset v0.0.0-rehearsal.16 SHA256SUMS --repo prk-Jr/trusted-server
Calculated digest for SHA256SUMS: sha256:07ade8f3c08db6f85abbfa4e493f338c2ca70b318e8199ea1917bc43d354c6c8
Resolved tag v0.0.0-rehearsal.16 to sha1:5fa3843364f247fdc261c438ab9257323637a42c
Loaded attestation from GitHub API

✓ Verification succeeded! SHA256SUMS is present in release v0.0.0-rehearsal.16
$ 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.rebuild-check.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.16 --source-digest 5fa3843364f247fdc261c438ab9257323637a42c --signer-digest 5fa3843364f247fdc261c438ab9257323637a42c --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.16 --source-digest 5fa3843364f247fdc261c438ab9257323637a42c --signer-digest 5fa3843364f247fdc261c438ab9257323637a42c --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.16 --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 repo https://github.com/prk-Jr/trusted-server --arg ref refs/tags/v0.0.0-rehearsal.16 --arg source 5fa3843364f247fdc261c438ab9257323637a42c all\(.\[\]\;\ .verificationResult.signature.certificate.sourceRepositoryURI==\$repo\ and\ .verificationResult.signature.certificate.sourceRepositoryRef==\$ref\ and\ .verificationResult.signature.certificate.sourceRepositoryDigest==\$source\ and\ .verificationResult.signature.certificate.buildSignerDigest==\$source\ and\ .verificationResult.signature.certificate.runnerEnvironment==\"github-hosted\"\) trusted-server-fastly.wasm.offline-provenance.verified.json
true
$ jq -e --arg invocation https://github.com/prk-Jr/trusted-server/actions/runs/40669491236/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.16 --source-digest 5fa3843364f247fdc261c438ab9257323637a42c --signer-digest 5fa3843364f247fdc261c438ab9257323637a42c --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.16 --source-digest 5fa3843364f247fdc261c438ab9257323637a42c --signer-digest 5fa3843364f247fdc261c438ab9257323637a42c --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.16 --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 repo https://github.com/prk-Jr/trusted-server --arg ref refs/tags/v0.0.0-rehearsal.16 --arg source 5fa3843364f247fdc261c438ab9257323637a42c all\(.\[\]\;\ .verificationResult.signature.certificate.sourceRepositoryURI==\$repo\ and\ .verificationResult.signature.certificate.sourceRepositoryRef==\$ref\ and\ .verificationResult.signature.certificate.sourceRepositoryDigest==\$source\ and\ .verificationResult.signature.certificate.buildSignerDigest==\$source\ and\ .verificationResult.signature.certificate.runnerEnvironment==\"github-hosted\"\) trusted-server-fastly.wasm.online-provenance.verified.json
true
$ jq -e --arg invocation https://github.com/prk-Jr/trusted-server/actions/runs/40669491236/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.16 --source-digest 5fa3843364f247fdc261c438ab9257323637a42c --signer-digest 5fa3843364f247fdc261c438ab9257323637a42c --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.16 --source-digest 5fa3843364f247fdc261c438ab9257323637a42c --signer-digest 5fa3843364f247fdc261c438ab9257323637a42c --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.16 --format json > trusted-server-fastly.wasm.offline-sbom.verified.json
$ jq -e length\>0 trusted-server-fastly.wasm.offline-sbom.verified.json
true
$ jq -e --arg repo https://github.com/prk-Jr/trusted-server --arg ref refs/tags/v0.0.0-rehearsal.16 --arg source 5fa3843364f247fdc261c438ab9257323637a42c all\(.\[\]\;\ .verificationResult.signature.certificate.sourceRepositoryURI==\$repo\ and\ .verificationResult.signature.certificate.sourceRepositoryRef==\$ref\ and\ .verificationResult.signature.certificate.sourceRepositoryDigest==\$source\ and\ .verificationResult.signature.certificate.buildSignerDigest==\$source\ and\ .verificationResult.signature.certificate.runnerEnvironment==\"github-hosted\"\) 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.16 --source-digest 5fa3843364f247fdc261c438ab9257323637a42c --signer-digest 5fa3843364f247fdc261c438ab9257323637a42c --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.16 --source-digest 5fa3843364f247fdc261c438ab9257323637a42c --signer-digest 5fa3843364f247fdc261c438ab9257323637a42c --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.16 --format json > trusted-server-fastly.wasm.online-sbom.verified.json
$ jq -e length\>0 trusted-server-fastly.wasm.online-sbom.verified.json
true
$ jq -e --arg repo https://github.com/prk-Jr/trusted-server --arg ref refs/tags/v0.0.0-rehearsal.16 --arg source 5fa3843364f247fdc261c438ab9257323637a42c all\(.\[\]\;\ .verificationResult.signature.certificate.sourceRepositoryURI==\$repo\ and\ .verificationResult.signature.certificate.sourceRepositoryRef==\$ref\ and\ .verificationResult.signature.certificate.sourceRepositoryDigest==\$source\ and\ .verificationResult.signature.certificate.buildSignerDigest==\$source\ and\ .verificationResult.signature.certificate.runnerEnvironment==\"github-hosted\"\) 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.16 --source-digest 5fa3843364f247fdc261c438ab9257323637a42c --signer-digest 5fa3843364f247fdc261c438ab9257323637a42c --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.16 --source-digest 5fa3843364f247fdc261c438ab9257323637a42c --signer-digest 5fa3843364f247fdc261c438ab9257323637a42c --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.16 --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 repo https://github.com/prk-Jr/trusted-server --arg ref refs/tags/v0.0.0-rehearsal.16 --arg source 5fa3843364f247fdc261c438ab9257323637a42c all\(.\[\]\;\ .verificationResult.signature.certificate.sourceRepositoryURI==\$repo\ and\ .verificationResult.signature.certificate.sourceRepositoryRef==\$ref\ and\ .verificationResult.signature.certificate.sourceRepositoryDigest==\$source\ and\ .verificationResult.signature.certificate.buildSignerDigest==\$source\ and\ .verificationResult.signature.certificate.runnerEnvironment==\"github-hosted\"\) ts-aarch64-apple-darwin.offline-provenance.verified.json
true
$ jq -e --arg invocation https://github.com/prk-Jr/trusted-server/actions/runs/40669491236/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.16 --source-digest 5fa3843364f247fdc261c438ab9257323637a42c --signer-digest 5fa3843364f247fdc261c438ab9257323637a42c --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.16 --source-digest 5fa3843364f247fdc261c438ab9257323637a42c --signer-digest 5fa3843364f247fdc261c438ab9257323637a42c --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.16 --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 repo https://github.com/prk-Jr/trusted-server --arg ref refs/tags/v0.0.0-rehearsal.16 --arg source 5fa3843364f247fdc261c438ab9257323637a42c all\(.\[\]\;\ .verificationResult.signature.certificate.sourceRepositoryURI==\$repo\ and\ .verificationResult.signature.certificate.sourceRepositoryRef==\$ref\ and\ .verificationResult.signature.certificate.sourceRepositoryDigest==\$source\ and\ .verificationResult.signature.certificate.buildSignerDigest==\$source\ and\ .verificationResult.signature.certificate.runnerEnvironment==\"github-hosted\"\) ts-aarch64-apple-darwin.online-provenance.verified.json
true
$ jq -e --arg invocation https://github.com/prk-Jr/trusted-server/actions/runs/40669491236/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.16 --source-digest 5fa3843364f247fdc261c438ab9257323637a42c --signer-digest 5fa3843364f247fdc261c438ab9257323637a42c --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.16 --source-digest 5fa3843364f247fdc261c438ab9257323637a42c --signer-digest 5fa3843364f247fdc261c438ab9257323637a42c --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.16 --format json > ts-aarch64-apple-darwin.offline-sbom.verified.json
$ jq -e length\>0 ts-aarch64-apple-darwin.offline-sbom.verified.json
true
$ jq -e --arg repo https://github.com/prk-Jr/trusted-server --arg ref refs/tags/v0.0.0-rehearsal.16 --arg source 5fa3843364f247fdc261c438ab9257323637a42c all\(.\[\]\;\ .verificationResult.signature.certificate.sourceRepositoryURI==\$repo\ and\ .verificationResult.signature.certificate.sourceRepositoryRef==\$ref\ and\ .verificationResult.signature.certificate.sourceRepositoryDigest==\$source\ and\ .verificationResult.signature.certificate.buildSignerDigest==\$source\ and\ .verificationResult.signature.certificate.runnerEnvironment==\"github-hosted\"\) 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.16 --source-digest 5fa3843364f247fdc261c438ab9257323637a42c --signer-digest 5fa3843364f247fdc261c438ab9257323637a42c --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.16 --source-digest 5fa3843364f247fdc261c438ab9257323637a42c --signer-digest 5fa3843364f247fdc261c438ab9257323637a42c --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.16 --format json > ts-aarch64-apple-darwin.online-sbom.verified.json
$ jq -e length\>0 ts-aarch64-apple-darwin.online-sbom.verified.json
true
$ jq -e --arg repo https://github.com/prk-Jr/trusted-server --arg ref refs/tags/v0.0.0-rehearsal.16 --arg source 5fa3843364f247fdc261c438ab9257323637a42c all\(.\[\]\;\ .verificationResult.signature.certificate.sourceRepositoryURI==\$repo\ and\ .verificationResult.signature.certificate.sourceRepositoryRef==\$ref\ and\ .verificationResult.signature.certificate.sourceRepositoryDigest==\$source\ and\ .verificationResult.signature.certificate.buildSignerDigest==\$source\ and\ .verificationResult.signature.certificate.runnerEnvironment==\"github-hosted\"\) 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.16 --source-digest 5fa3843364f247fdc261c438ab9257323637a42c --signer-digest 5fa3843364f247fdc261c438ab9257323637a42c --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.16 --source-digest 5fa3843364f247fdc261c438ab9257323637a42c --signer-digest 5fa3843364f247fdc261c438ab9257323637a42c --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.16 --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 repo https://github.com/prk-Jr/trusted-server --arg ref refs/tags/v0.0.0-rehearsal.16 --arg source 5fa3843364f247fdc261c438ab9257323637a42c all\(.\[\]\;\ .verificationResult.signature.certificate.sourceRepositoryURI==\$repo\ and\ .verificationResult.signature.certificate.sourceRepositoryRef==\$ref\ and\ .verificationResult.signature.certificate.sourceRepositoryDigest==\$source\ and\ .verificationResult.signature.certificate.buildSignerDigest==\$source\ and\ .verificationResult.signature.certificate.runnerEnvironment==\"github-hosted\"\) ts-x86_64-apple-darwin.offline-provenance.verified.json
true
$ jq -e --arg invocation https://github.com/prk-Jr/trusted-server/actions/runs/40669491236/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.16 --source-digest 5fa3843364f247fdc261c438ab9257323637a42c --signer-digest 5fa3843364f247fdc261c438ab9257323637a42c --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 --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 2 current-input rehearsal .16 passed — transcript 2/3

Source 5fa3843364f247fdc261c438ab9257323637a42c; green first attempt, all 18 jobs successful. Fresh lightweight v0.0.0-rehearsal.16: seven binaries / 30 immutable prerelease files, not Latest; 29 checksum entries. Both binary predicates and reusable signer identities passed online without bundles and offline with published bundles/custom trusted roots; 14 SPDX equalities plus an exact one-byte negative check, companion provenance/API/upload joins, native checks and offline Fastly packaging passed. Reproduction 269s; comparison 86s, overlapping native builds.

The first independent release download hit a connection timeout; 28 local assets already matched the API and the two missing files were recovered with bounded read-only download retries. The immutable release and workflow were not rerun.

This closes the later-application-input and structured-diagnostic rehearsal gap at this exact source. Historical .13 stays exclusively at 770a425df; the separate .10 rerun-all recovery proof stays attributed to 3ccfe2971. The hosted negative fixture at the exact source requires JSON outcome mismatched / stage bytes and proves no signing/publication sentinel. Phase 3 is a separate plan-only draft; no v2 index or complete-composition claim is made. #1449 stays draft, no reviewers requested. No IAB tags, releases or settings changed.

$ gh attestation verify ts-x86_64-apple-darwin --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.16 --source-digest 5fa3843364f247fdc261c438ab9257323637a42c --signer-digest 5fa3843364f247fdc261c438ab9257323637a42c --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.16 --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 repo https://github.com/prk-Jr/trusted-server --arg ref refs/tags/v0.0.0-rehearsal.16 --arg source 5fa3843364f247fdc261c438ab9257323637a42c all\(.\[\]\;\ .verificationResult.signature.certificate.sourceRepositoryURI==\$repo\ and\ .verificationResult.signature.certificate.sourceRepositoryRef==\$ref\ and\ .verificationResult.signature.certificate.sourceRepositoryDigest==\$source\ and\ .verificationResult.signature.certificate.buildSignerDigest==\$source\ and\ .verificationResult.signature.certificate.runnerEnvironment==\"github-hosted\"\) ts-x86_64-apple-darwin.online-provenance.verified.json
true
$ jq -e --arg invocation https://github.com/prk-Jr/trusted-server/actions/runs/40669491236/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.16 --source-digest 5fa3843364f247fdc261c438ab9257323637a42c --signer-digest 5fa3843364f247fdc261c438ab9257323637a42c --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.16 --source-digest 5fa3843364f247fdc261c438ab9257323637a42c --signer-digest 5fa3843364f247fdc261c438ab9257323637a42c --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.16 --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
$ jq -e --arg repo https://github.com/prk-Jr/trusted-server --arg ref refs/tags/v0.0.0-rehearsal.16 --arg source 5fa3843364f247fdc261c438ab9257323637a42c all\(.\[\]\;\ .verificationResult.signature.certificate.sourceRepositoryURI==\$repo\ and\ .verificationResult.signature.certificate.sourceRepositoryRef==\$ref\ and\ .verificationResult.signature.certificate.sourceRepositoryDigest==\$source\ and\ .verificationResult.signature.certificate.buildSignerDigest==\$source\ and\ .verificationResult.signature.certificate.runnerEnvironment==\"github-hosted\"\) 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.16 --source-digest 5fa3843364f247fdc261c438ab9257323637a42c --signer-digest 5fa3843364f247fdc261c438ab9257323637a42c --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.16 --source-digest 5fa3843364f247fdc261c438ab9257323637a42c --signer-digest 5fa3843364f247fdc261c438ab9257323637a42c --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.16 --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
$ jq -e --arg repo https://github.com/prk-Jr/trusted-server --arg ref refs/tags/v0.0.0-rehearsal.16 --arg source 5fa3843364f247fdc261c438ab9257323637a42c all\(.\[\]\;\ .verificationResult.signature.certificate.sourceRepositoryURI==\$repo\ and\ .verificationResult.signature.certificate.sourceRepositoryRef==\$ref\ and\ .verificationResult.signature.certificate.sourceRepositoryDigest==\$source\ and\ .verificationResult.signature.certificate.buildSignerDigest==\$source\ and\ .verificationResult.signature.certificate.runnerEnvironment==\"github-hosted\"\) 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.16 --source-digest 5fa3843364f247fdc261c438ab9257323637a42c --signer-digest 5fa3843364f247fdc261c438ab9257323637a42c --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.16 --source-digest 5fa3843364f247fdc261c438ab9257323637a42c --signer-digest 5fa3843364f247fdc261c438ab9257323637a42c --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.16 --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 repo https://github.com/prk-Jr/trusted-server --arg ref refs/tags/v0.0.0-rehearsal.16 --arg source 5fa3843364f247fdc261c438ab9257323637a42c all\(.\[\]\;\ .verificationResult.signature.certificate.sourceRepositoryURI==\$repo\ and\ .verificationResult.signature.certificate.sourceRepositoryRef==\$ref\ and\ .verificationResult.signature.certificate.sourceRepositoryDigest==\$source\ and\ .verificationResult.signature.certificate.buildSignerDigest==\$source\ and\ .verificationResult.signature.certificate.runnerEnvironment==\"github-hosted\"\) ts-x86_64-unknown-linux-gnu.offline-provenance.verified.json
true
$ jq -e --arg invocation https://github.com/prk-Jr/trusted-server/actions/runs/40669491236/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.16 --source-digest 5fa3843364f247fdc261c438ab9257323637a42c --signer-digest 5fa3843364f247fdc261c438ab9257323637a42c --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.16 --source-digest 5fa3843364f247fdc261c438ab9257323637a42c --signer-digest 5fa3843364f247fdc261c438ab9257323637a42c --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.16 --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 repo https://github.com/prk-Jr/trusted-server --arg ref refs/tags/v0.0.0-rehearsal.16 --arg source 5fa3843364f247fdc261c438ab9257323637a42c all\(.\[\]\;\ .verificationResult.signature.certificate.sourceRepositoryURI==\$repo\ and\ .verificationResult.signature.certificate.sourceRepositoryRef==\$ref\ and\ .verificationResult.signature.certificate.sourceRepositoryDigest==\$source\ and\ .verificationResult.signature.certificate.buildSignerDigest==\$source\ and\ .verificationResult.signature.certificate.runnerEnvironment==\"github-hosted\"\) ts-x86_64-unknown-linux-gnu.online-provenance.verified.json
true
$ jq -e --arg invocation https://github.com/prk-Jr/trusted-server/actions/runs/40669491236/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.16 --source-digest 5fa3843364f247fdc261c438ab9257323637a42c --signer-digest 5fa3843364f247fdc261c438ab9257323637a42c --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.16 --source-digest 5fa3843364f247fdc261c438ab9257323637a42c --signer-digest 5fa3843364f247fdc261c438ab9257323637a42c --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.16 --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
$ jq -e --arg repo https://github.com/prk-Jr/trusted-server --arg ref refs/tags/v0.0.0-rehearsal.16 --arg source 5fa3843364f247fdc261c438ab9257323637a42c all\(.\[\]\;\ .verificationResult.signature.certificate.sourceRepositoryURI==\$repo\ and\ .verificationResult.signature.certificate.sourceRepositoryRef==\$ref\ and\ .verificationResult.signature.certificate.sourceRepositoryDigest==\$source\ and\ .verificationResult.signature.certificate.buildSignerDigest==\$source\ and\ .verificationResult.signature.certificate.runnerEnvironment==\"github-hosted\"\) 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.16 --source-digest 5fa3843364f247fdc261c438ab9257323637a42c --signer-digest 5fa3843364f247fdc261c438ab9257323637a42c --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.16 --source-digest 5fa3843364f247fdc261c438ab9257323637a42c --signer-digest 5fa3843364f247fdc261c438ab9257323637a42c --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.16 --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
$ jq -e --arg repo https://github.com/prk-Jr/trusted-server --arg ref refs/tags/v0.0.0-rehearsal.16 --arg source 5fa3843364f247fdc261c438ab9257323637a42c all\(.\[\]\;\ .verificationResult.signature.certificate.sourceRepositoryURI==\$repo\ and\ .verificationResult.signature.certificate.sourceRepositoryRef==\$ref\ and\ .verificationResult.signature.certificate.sourceRepositoryDigest==\$source\ and\ .verificationResult.signature.certificate.buildSignerDigest==\$source\ and\ .verificationResult.signature.certificate.runnerEnvironment==\"github-hosted\"\) 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.16 --source-digest 5fa3843364f247fdc261c438ab9257323637a42c --signer-digest 5fa3843364f247fdc261c438ab9257323637a42c --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.16 --source-digest 5fa3843364f247fdc261c438ab9257323637a42c --signer-digest 5fa3843364f247fdc261c438ab9257323637a42c --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.16 --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 repo https://github.com/prk-Jr/trusted-server --arg ref refs/tags/v0.0.0-rehearsal.16 --arg source 5fa3843364f247fdc261c438ab9257323637a42c all\(.\[\]\;\ .verificationResult.signature.certificate.sourceRepositoryURI==\$repo\ and\ .verificationResult.signature.certificate.sourceRepositoryRef==\$ref\ and\ .verificationResult.signature.certificate.sourceRepositoryDigest==\$source\ and\ .verificationResult.signature.certificate.buildSignerDigest==\$source\ and\ .verificationResult.signature.certificate.runnerEnvironment==\"github-hosted\"\) 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/40669491236/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.16 --source-digest 5fa3843364f247fdc261c438ab9257323637a42c --signer-digest 5fa3843364f247fdc261c438ab9257323637a42c --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.16 --source-digest 5fa3843364f247fdc261c438ab9257323637a42c --signer-digest 5fa3843364f247fdc261c438ab9257323637a42c --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.16 --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 repo https://github.com/prk-Jr/trusted-server --arg ref refs/tags/v0.0.0-rehearsal.16 --arg source 5fa3843364f247fdc261c438ab9257323637a42c all\(.\[\]\;\ .verificationResult.signature.certificate.sourceRepositoryURI==\$repo\ and\ .verificationResult.signature.certificate.sourceRepositoryRef==\$ref\ and\ .verificationResult.signature.certificate.sourceRepositoryDigest==\$source\ and\ .verificationResult.signature.certificate.buildSignerDigest==\$source\ and\ .verificationResult.signature.certificate.runnerEnvironment==\"github-hosted\"\) 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/40669491236/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.16 --source-digest 5fa3843364f247fdc261c438ab9257323637a42c --signer-digest 5fa3843364f247fdc261c438ab9257323637a42c --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.16 --source-digest 5fa3843364f247fdc261c438ab9257323637a42c --signer-digest 5fa3843364f247fdc261c438ab9257323637a42c --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.16 --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
$ jq -e --arg repo https://github.com/prk-Jr/trusted-server --arg ref refs/tags/v0.0.0-rehearsal.16 --arg source 5fa3843364f247fdc261c438ab9257323637a42c all\(.\[\]\;\ .verificationResult.signature.certificate.sourceRepositoryURI==\$repo\ and\ .verificationResult.signature.certificate.sourceRepositoryRef==\$ref\ and\ .verificationResult.signature.certificate.sourceRepositoryDigest==\$source\ and\ .verificationResult.signature.certificate.buildSignerDigest==\$source\ and\ .verificationResult.signature.certificate.runnerEnvironment==\"github-hosted\"\) 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.16 --source-digest 5fa3843364f247fdc261c438ab9257323637a42c --signer-digest 5fa3843364f247fdc261c438ab9257323637a42c --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.16 --source-digest 5fa3843364f247fdc261c438ab9257323637a42c --signer-digest 5fa3843364f247fdc261c438ab9257323637a42c --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.16 --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
$ jq -e --arg repo https://github.com/prk-Jr/trusted-server --arg ref refs/tags/v0.0.0-rehearsal.16 --arg source 5fa3843364f247fdc261c438ab9257323637a42c all\(.\[\]\;\ .verificationResult.signature.certificate.sourceRepositoryURI==\$repo\ and\ .verificationResult.signature.certificate.sourceRepositoryRef==\$ref\ and\ .verificationResult.signature.certificate.sourceRepositoryDigest==\$source\ and\ .verificationResult.signature.certificate.buildSignerDigest==\$source\ and\ .verificationResult.signature.certificate.runnerEnvironment==\"github-hosted\"\) 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.16 --source-digest 5fa3843364f247fdc261c438ab9257323637a42c --signer-digest 5fa3843364f247fdc261c438ab9257323637a42c --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.16 --source-digest 5fa3843364f247fdc261c438ab9257323637a42c --signer-digest 5fa3843364f247fdc261c438ab9257323637a42c --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.16 --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 repo https://github.com/prk-Jr/trusted-server --arg ref refs/tags/v0.0.0-rehearsal.16 --arg source 5fa3843364f247fdc261c438ab9257323637a42c all\(.\[\]\;\ .verificationResult.signature.certificate.sourceRepositoryURI==\$repo\ and\ .verificationResult.signature.certificate.sourceRepositoryRef==\$ref\ and\ .verificationResult.signature.certificate.sourceRepositoryDigest==\$source\ and\ .verificationResult.signature.certificate.buildSignerDigest==\$source\ and\ .verificationResult.signature.certificate.runnerEnvironment==\"github-hosted\"\) 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/40669491236/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.16 --source-digest 5fa3843364f247fdc261c438ab9257323637a42c --signer-digest 5fa3843364f247fdc261c438ab9257323637a42c --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.16 --source-digest 5fa3843364f247fdc261c438ab9257323637a42c --signer-digest 5fa3843364f247fdc261c438ab9257323637a42c --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.16 --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 repo https://github.com/prk-Jr/trusted-server --arg ref refs/tags/v0.0.0-rehearsal.16 --arg source 5fa3843364f247fdc261c438ab9257323637a42c all\(.\[\]\;\ .verificationResult.signature.certificate.sourceRepositoryURI==\$repo\ and\ .verificationResult.signature.certificate.sourceRepositoryRef==\$ref\ and\ .verificationResult.signature.certificate.sourceRepositoryDigest==\$source\ and\ .verificationResult.signature.certificate.buildSignerDigest==\$source\ and\ .verificationResult.signature.certificate.runnerEnvironment==\"github-hosted\"\) 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/40669491236/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.16 --source-digest 5fa3843364f247fdc261c438ab9257323637a42c --signer-digest 5fa3843364f247fdc261c438ab9257323637a42c --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.16 --source-digest 5fa3843364f247fdc261c438ab9257323637a42c --signer-digest 5fa3843364f247fdc261c438ab9257323637a42c --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.16 --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
$ jq -e --arg repo https://github.com/prk-Jr/trusted-server --arg ref refs/tags/v0.0.0-rehearsal.16 --arg source 5fa3843364f247fdc261c438ab9257323637a42c all\(.\[\]\;\ .verificationResult.signature.certificate.sourceRepositoryURI==\$repo\ and\ .verificationResult.signature.certificate.sourceRepositoryRef==\$ref\ and\ .verificationResult.signature.certificate.sourceRepositoryDigest==\$source\ and\ .verificationResult.signature.certificate.buildSignerDigest==\$source\ and\ .verificationResult.signature.certificate.runnerEnvironment==\"github-hosted\"\) 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.16 --source-digest 5fa3843364f247fdc261c438ab9257323637a42c --signer-digest 5fa3843364f247fdc261c438ab9257323637a42c --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.16 --source-digest 5fa3843364f247fdc261c438ab9257323637a42c --signer-digest 5fa3843364f247fdc261c438ab9257323637a42c --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.16 --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
$ jq -e --arg repo https://github.com/prk-Jr/trusted-server --arg ref refs/tags/v0.0.0-rehearsal.16 --arg source 5fa3843364f247fdc261c438ab9257323637a42c all\(.\[\]\;\ .verificationResult.signature.certificate.sourceRepositoryURI==\$repo\ and\ .verificationResult.signature.certificate.sourceRepositoryRef==\$ref\ and\ .verificationResult.signature.certificate.sourceRepositoryDigest==\$source\ and\ .verificationResult.signature.certificate.buildSignerDigest==\$source\ and\ .verificationResult.signature.certificate.runnerEnvironment==\"github-hosted\"\) 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.16 --source-digest 5fa3843364f247fdc261c438ab9257323637a42c --signer-digest 5fa3843364f247fdc261c438ab9257323637a42c --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.16 --source-digest 5fa3843364f247fdc261c438ab9257323637a42c --signer-digest 5fa3843364f247fdc261c438ab9257323637a42c --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.16 --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 repo https://github.com/prk-Jr/trusted-server --arg ref refs/tags/v0.0.0-rehearsal.16 --arg source 5fa3843364f247fdc261c438ab9257323637a42c all\(.\[\]\;\ .verificationResult.signature.certificate.sourceRepositoryURI==\$repo\ and\ .verificationResult.signature.certificate.sourceRepositoryRef==\$ref\ and\ .verificationResult.signature.certificate.sourceRepositoryDigest==\$source\ and\ .verificationResult.signature.certificate.buildSignerDigest==\$source\ and\ .verificationResult.signature.certificate.runnerEnvironment==\"github-hosted\"\) 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/40669491236/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.16 --source-digest 5fa3843364f247fdc261c438ab9257323637a42c --signer-digest 5fa3843364f247fdc261c438ab9257323637a42c --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.16 --source-digest 5fa3843364f247fdc261c438ab9257323637a42c --signer-digest 5fa3843364f247fdc261c438ab9257323637a42c --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.16 --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 repo https://github.com/prk-Jr/trusted-server --arg ref refs/tags/v0.0.0-rehearsal.16 --arg source 5fa3843364f247fdc261c438ab9257323637a42c all\(.\[\]\;\ .verificationResult.signature.certificate.sourceRepositoryURI==\$repo\ and\ .verificationResult.signature.certificate.sourceRepositoryRef==\$ref\ and\ .verificationResult.signature.certificate.sourceRepositoryDigest==\$source\ and\ .verificationResult.signature.certificate.buildSignerDigest==\$source\ and\ .verificationResult.signature.certificate.runnerEnvironment==\"github-hosted\"\) 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/40669491236/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.16 --source-digest 5fa3843364f247fdc261c438ab9257323637a42c --signer-digest 5fa3843364f247fdc261c438ab9257323637a42c --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.16 --source-digest 5fa3843364f247fdc261c438ab9257323637a42c --signer-digest 5fa3843364f247fdc261c438ab9257323637a42c --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.16 --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
$ jq -e --arg repo https://github.com/prk-Jr/trusted-server --arg ref refs/tags/v0.0.0-rehearsal.16 --arg source 5fa3843364f247fdc261c438ab9257323637a42c all\(.\[\]\;\ .verificationResult.signature.certificate.sourceRepositoryURI==\$repo\ and\ .verificationResult.signature.certificate.sourceRepositoryRef==\$ref\ and\ .verificationResult.signature.certificate.sourceRepositoryDigest==\$source\ and\ .verificationResult.signature.certificate.buildSignerDigest==\$source\ and\ .verificationResult.signature.certificate.runnerEnvironment==\"github-hosted\"\) 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.16 --source-digest 5fa3843364f247fdc261c438ab9257323637a42c --signer-digest 5fa3843364f247fdc261c438ab9257323637a42c --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.16 --source-digest 5fa3843364f247fdc261c438ab9257323637a42c --signer-digest 5fa3843364f247fdc261c438ab9257323637a42c --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.16 --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
$ jq -e --arg repo https://github.com/prk-Jr/trusted-server --arg ref refs/tags/v0.0.0-rehearsal.16 --arg source 5fa3843364f247fdc261c438ab9257323637a42c all\(.\[\]\;\ .verificationResult.signature.certificate.sourceRepositoryURI==\$repo\ and\ .verificationResult.signature.certificate.sourceRepositoryRef==\$ref\ and\ .verificationResult.signature.certificate.sourceRepositoryDigest==\$source\ and\ .verificationResult.signature.certificate.buildSignerDigest==\$source\ and\ .verificationResult.signature.certificate.runnerEnvironment==\"github-hosted\"\) 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
$ gh attestation verify trusted-server-fastly.wasm.rebuild-check.json --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.16 --source-digest 5fa3843364f247fdc261c438ab9257323637a42c --signer-digest 5fa3843364f247fdc261c438ab9257323637a42c --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 companion with exact --cert-identity (offline) -> verified JSON
$ jq -e length\>0 companion.offline.verified.json
true
PASS: Fastly rebuild-check offline exact reusable signer/source pins
$ gh attestation verify trusted-server-fastly.wasm.rebuild-check.json --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.16 --source-digest 5fa3843364f247fdc261c438ab9257323637a42c --signer-digest 5fa3843364f247fdc261c438ab9257323637a42c --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 companion with exact --cert-identity (online) -> verified JSON
$ jq -e length\>0 companion.online.verified.json
true
PASS: Fastly rebuild-check online exact reusable signer/source pins

@prk-Jr

prk-Jr commented Oct 28, 2026

Copy link
Copy Markdown
Collaborator Author

Phase 2 current-input rehearsal .16 passed — transcript 3/3

Source 5fa3843364f247fdc261c438ab9257323637a42c; green first attempt, all 18 jobs successful. Fresh lightweight v0.0.0-rehearsal.16: seven binaries / 30 immutable prerelease files, not Latest; 29 checksum entries. Both binary predicates and reusable signer identities passed online without bundles and offline with published bundles/custom trusted roots; 14 SPDX equalities plus an exact one-byte negative check, companion provenance/API/upload joins, native checks and offline Fastly packaging passed. Reproduction 269s; comparison 86s, overlapping native builds.

The first independent release download hit a connection timeout; 28 local assets already matched the API and the two missing files were recovered with bounded read-only download retries. The immutable release and workflow were not rerun.

This closes the later-application-input and structured-diagnostic rehearsal gap at this exact source. Historical .13 stays exclusively at 770a425df; the separate .10 rerun-all recovery proof stays attributed to 3ccfe2971. The hosted negative fixture at the exact source requires JSON outcome mismatched / stage bytes and proves no signing/publication sentinel. Phase 3 is a separate plan-only draft; no v2 index or complete-composition claim is made. #1449 stays draft, no reviewers requested. No IAB tags, releases or settings changed.

$ jq -e --arg commit 5fa3843364f247fdc261c438ab9257323637a42c --argjson run 40669491236 .version==1\ and\ .profile==\"ordinary-release-fastly-byte-equality-v1\"\ and\ .release_qualification==false\ and\ .outcome==\"matched\"\ and\ .source_commit==\$commit\ and\ .asset==\"trusted-server-fastly.wasm\"\ and\ .canonical.run_id==\$run\ and\ .reproduction.run_id==\$run\ and\ .canonical.run_attempt==1\ and\ .reproduction.run_attempt==1\ and\ .canonical_sha256==.reproduction_sha256\ and\ .canonical.sha256==.canonical_sha256\ and\ .reproduction.sha256==.canonical_sha256\ and\ \(.canonical.job_id\!=.reproduction.job_id\) trusted-server-fastly.wasm.rebuild-check.json
true
$ jq . trusted-server-fastly.wasm.rebuild-check.json
{
  "asset": "trusted-server-fastly.wasm",
  "canonical": {
    "artifact": {
      "id": 12808156824,
      "name": "release-trusted-server-fastly.wasm",
      "sha256": "f392879541de40f6a1ae0a471f25815ea5ba367d9a059d0e5a3e79ec427eb775",
      "size": 18710582
    },
    "environment": {
      "checkout_root": "/home/runner/work/trusted-server/trusted-server/ordinary-canonical-source",
      "jobs": 4,
      "locale": "C",
      "started_at_seconds": 1793182121,
      "target_root": "/home/runner/work/_temp/ordinary-fastly-canonical-target",
      "timezone": "UTC",
      "uid": 1001,
      "umask": 18
    },
    "job_id": 122752423999,
    "observation_artifact": {
      "id": 12807657962,
      "name": "fastly-observation-canonical",
      "sha256": "b721932238bf7abf039f4c4e85cfdebc6d8bf1fa63b55df77c2666600c28c830",
      "size": 997
    },
    "run_attempt": 1,
    "run_id": 40669491236,
    "sha256": "c02b5fecdf82a194ed62873549efc1489d6333eff1e2fa1285728465b60fa7b9",
    "size": 80207092,
    "spdx_sha256": "b2a3bbc9024f4feae92eb1a7d40b0ec92e1f67e8c02063f364b36878f9b7f425"
  },
  "canonical_sha256": "c02b5fecdf82a194ed62873549efc1489d6333eff1e2fa1285728465b60fa7b9",
  "cargo_lock_sha256": "b83118e2fcb71a9f607a008d40ac3b605b32263032bb140f11399be9da938ccf",
  "gaps": [
    "alternate-user-unqualified",
    "boundary-unqualified",
    "materials-unqualified",
    "tools-unqualified"
  ],
  "js_inventory_sha256": "31e2b6dd600f5b34d620cd64c4d5a61a81e99637ab8588223ec92f333f9ee740",
  "npm_lock_sha256": "c4b9ea179eb8801fbe9182ca3feb263b8fafe03d9e92a7045f998a74f6b98874",
  "outcome": "matched",
  "profile": "ordinary-release-fastly-byte-equality-v1",
  "recipe_sha256": "faaadd2818c7d02f72e142713384a2e3ed91eab02e5f7fd8b7580355a809acaa",
  "release_qualification": false,
  "reproduction": {
    "artifact": {
      "id": 12807249655,
      "name": "reproduction-trusted-server-fastly.wasm",
      "sha256": "758da1e471281a351ece245e8700779c8d5d92e984f095be5c134b16d7afa387",
      "size": 18710580
    },
    "environment": {
      "checkout_root": "/home/runner/work/trusted-server/trusted-server/ordinary-reproduction-source",
      "jobs": 2,
      "locale": "C",
      "started_at_seconds": 1793182442,
      "target_root": "/home/runner/work/_temp/ordinary-fastly-reproduction-target",
      "timezone": "UTC",
      "uid": 1001,
      "umask": 23
    },
    "job_id": 122755082078,
    "observation_artifact": {
      "id": 12808008158,
      "name": "fastly-observation-reproduction",
      "sha256": "599a518c86f353807898d4845e48a2d54c50544f37779721febfdffa8512936f",
      "size": 995
    },
    "run_attempt": 1,
    "run_id": 40669491236,
    "sha256": "c02b5fecdf82a194ed62873549efc1489d6333eff1e2fa1285728465b60fa7b9",
    "size": 80207092,
    "spdx_sha256": "1122f3521fb4a0e34bfae8bddde603d4221f0cdc7afdd5b933aa78f8be06d658"
  },
  "reproduction_sha256": "c02b5fecdf82a194ed62873549efc1489d6333eff1e2fa1285728465b60fa7b9",
  "source_commit": "5fa3843364f247fdc261c438ab9257323637a42c",
  "target": "wasm32-wasip1",
  "tools": {
    "acquisition": "ordinary-hosted-toolchain",
    "node": {
      "sha256": "89af8424dd53e560b1933f87ba650d8bf57c83ca5a04600eefb31f416aabbae7",
      "version": "v24.20.0"
    },
    "rustc": {
      "sha256": "859254978c0a0402c32f949f6de0d99aee73be8d15f45aac00ae1448aac51e74",
      "version": "rustc 1.98.1 (48a229cea 2026-09-01)"
    }
  },
  "variant": "default",
  "version": 1
}
$ node ../verify-companion-joins.mjs
PASS: canonical artifact API-bound id=12808156824 size=18710582 sha256:f392879541de40f6a1ae0a471f25815ea5ba367d9a059d0e5a3e79ec427eb775
PASS: canonical observation_artifact API-bound id=12807657962 size=997 sha256:b721932238bf7abf039f4c4e85cfdebc6d8bf1fa63b55df77c2666600c28c830
PASS: canonical job=122752423999 start=2026-10-28T10:06:51Z end=2026-10-28T10:12:44Z observed={"checkout_root":"/home/runner/work/trusted-server/trusted-server/ordinary-canonical-source","jobs":4,"locale":"C","started_at_seconds":1793182121,"target_root":"/home/runner/work/_temp/ordinary-fastly-canonical-target","timezone":"UTC","uid":1001,"umask":18}
PASS: reproduction artifact API-bound id=12807249655 size=18710580 sha256:758da1e471281a351ece245e8700779c8d5d92e984f095be5c134b16d7afa387
PASS: reproduction observation_artifact API-bound id=12808008158 size=995 sha256:599a518c86f353807898d4845e48a2d54c50544f37779721febfdffa8512936f
PASS: reproduction job=122755082078 start=2026-10-28T10:12:48Z end=2026-10-28T10:17:17Z observed={"checkout_root":"/home/runner/work/trusted-server/trusted-server/ordinary-reproduction-source","jobs":2,"locale":"C","started_at_seconds":1793182442,"target_root":"/home/runner/work/_temp/ordinary-fastly-reproduction-target","timezone":"UTC","uid":1001,"umask":23}
PASS: Build trusted-server-fastly.wasm elapsed 353s
PASS: Reproduce trusted-server-fastly.wasm elapsed 269s
PASS: Compare ordinary Fastly release bytes elapsed 86s
PASS: companion joins, source-owned recipe and lock hashes, actual binary/SPDX digests, deliberate ordinary environment variation; qualification remains false
$ jq -e --slurpfile document <shipped SPDX> any verified online record matches
$ 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: negative SPDX is a copy of shipped bytes with exactly one byte changed and remains valid
$ jq -e --slurpfile document one-byte-negative.spdx.json any verified online record matches (expected false)
false
PASS: one-byte altered SPDX does not match fully pinned verified records
$ 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]=74708d35698bcb1b9138d60e095be3261699f4c1, 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]=0b1b0f06328aa440fc409931663823476ab59118, 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]=f7b85eaa6cba748a65ab69d5265eadd8d121719b, for GNU/Linux 3.7.0, with debug_info, not stripped
$ ./ts-aarch64-apple-darwin --version
ts package=0.1.0 source=5fa3843364f247fdc261c438ab9257323637a42c target=aarch64-apple-darwin variant=default
PASS: complete independent verification of v0.0.0-rehearsal.16 at 5fa3843364f247fdc261c438ab9257323637a42c

Completed producer evidence from the same source/run:

build / Build ts-x86_64-apple-darwin	UNKNOWN STEP	2026-10-28T10:35:07.3685730Z 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-28T10:35:07.3809600Z SUCCESS: final-byte checks x86_64-apple-darwin 
build / Build ts-x86_64-apple-darwin	UNKNOWN STEP	2026-10-28T10:35:07.3909390Z SUCCESS: ts package=0.1.0 source=5fa3843364f247fdc261c438ab9257323637a42c target=x86_64-apple-darwin variant=default

build / Build ts-aarch64-apple-darwin	UNKNOWN STEP	2026-10-28T10:23:12.4859430Z SUCCESS: Mach-O target and macOS minimum OS 13.0: aarch64-apple-darwin
build / Build ts-aarch64-apple-darwin	UNKNOWN STEP	2026-10-28T10:23:12.4860890Z SUCCESS: final-byte checks aarch64-apple-darwin 
build / Build ts-aarch64-apple-darwin	UNKNOWN STEP	2026-10-28T10:23:12.4972460Z SUCCESS: ts package=0.1.0 source=5fa3843364f247fdc261c438ab9257323637a42c target=aarch64-apple-darwin variant=default

build / Build ts-x86_64-unknown-linux-gnu	UNKNOWN STEP	2026-10-28T10:13:41.7099910Z 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-28T10:13:41.7409777Z SUCCESS: ts package=0.1.0 source=5fa3843364f247fdc261c438ab9257323637a42c target=x86_64-unknown-linux-gnu variant=default
build / Build ts-x86_64-unknown-linux-gnu	UNKNOWN STEP	2026-10-28T10:13:45.7328480Z SUCCESS: ts package=0.1.0 source=5fa3843364f247fdc261c438ab9257323637a42c target=x86_64-unknown-linux-gnu variant=default
build / Build ts-x86_64-unknown-linux-gnu	UNKNOWN STEP	2026-10-28T10:13:47.9924344Z SUCCESS: ts package=0.1.0 source=5fa3843364f247fdc261c438ab9257323637a42c target=x86_64-unknown-linux-gnu variant=default
build / Build ts-x86_64-unknown-linux-gnu	UNKNOWN STEP	2026-10-28T10:13:50.7248224Z SUCCESS: ts package=0.1.0 source=5fa3843364f247fdc261c438ab9257323637a42c target=x86_64-unknown-linux-gnu variant=default

build / Build trusted-server-axum-x86_64-unknown-linux-gnu	UNKNOWN STEP	2026-10-28T10:10:54.8354225Z 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-28T10:10:59.9505331Z 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-28T10:11:00.0785081Z 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-28T10:11:00.3486793Z 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-28T10:11:02.8099108Z 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-28T10:11:03.0524659Z 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-28T10:11:03.2807589Z 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-28T10:11:07.0109979Z 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-28T10:11:07.1365494Z 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-28T10:11:07.2918667Z 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-28T10:10:31.1229197Z SUCCESS: final-byte checks x86_64-unknown-linux-musl 
build / Build trusted-server-axum-x86_64-unknown-linux-musl	UNKNOWN STEP	2026-10-28T10:10:34.5300354Z 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-28T10:10:34.6397551Z 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-28T10:10:34.8096753Z 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-28T10:10:35.0458128Z SUCCESS: Axum rejects EDGEZERO__ADAPTER__PORT=0; exit 1, ports must be 1–65535: sha256:faa42b916eeed1cf0437b22395f3064fe378ced775e66d6eab84993f0cafeddf
build / Build trusted-server-axum-x86_64-unknown-linux-musl	UNKNOWN STEP	2026-10-28T10:10:35.1493050Z SUCCESS: Axum rejects PORT=0; exit 1, ports must be 1–65535: sha256:faa42b916eeed1cf0437b22395f3064fe378ced775e66d6eab84993f0cafeddf
build / Build trusted-server-axum-x86_64-unknown-linux-musl	UNKNOWN STEP	2026-10-28T10:10:35.2654182Z SUCCESS: Axum bound to 0.0.0.0:8080; host reached published container port, HTTP 200 ok: scratch sha256:faa42b916eeed1cf0437b22395f3064fe378ced775e66d6eab84993f0cafeddf

build / Build trusted-server-axum-aarch64-unknown-linux-gnu	UNKNOWN STEP	2026-10-28T10:10:36.6435527Z 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-28T10:10:39.1423132Z 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-28T10:10:39.2628371Z 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-28T10:10:39.5499265Z 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-28T10:11:22.8876742Z SUCCESS: final-byte checks wasm32-wasip1 
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-28T10:12:36.5793909Z SUCCESS: Validated package /home/runner/work/_temp/fastly-route.cUEkIl/package/pkg/example-app.tar.gz
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-28T10:12:38.7533414Z SUCCESS: pinned Fastly route packed, validated, inspected and byte-compared without credentials or network

Pinned read-only Fastly route (network namespace denied after pinned tool acquisition):
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-28T10:12:34.8013897Z ^[[36;1m  console.log('Fastly raw TAR header:', JSON.stringify({path:field(0, 100), type:String.fromCharCode(header[156]), size, prefix:field(345, 500), link:field(157, 257), nonzero_padding:[[0,100],[157,257],[345,500]].some(([start,end]) => hidden(start,end))}));^[[0m
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-28T10:12:34.8019403Z ^[[36;1mecho 'SUCCESS: pinned Fastly route packed, validated, inspected and byte-compared without credentials or network'^[[0m
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-28T10:12:35.0355566Z fastly_v16.0.0_linux-amd64.tar.gz: OK
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-28T10:12:35.4621107Z Fastly CLI version v16.0.0 (34cef1b0)
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-28T10:12:35.4656645Z Fastly CLI version v16.0.0 (34cef1b0)
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-28T10:12:35.4659007Z + timeout 60 fastly compute pack --wasm-binary ./trusted-server-fastly.wasm
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-28T10:12:36.2898229Z + timeout 30 fastly compute validate --package ./pkg/example-app.tar.gz
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-28T10:12:37.2448621Z Fastly raw TAR header: {"path":"example-app","type":"5","size":0,"prefix":"","link":"","nonzero_padding":false}
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-28T10:12:37.2452600Z Fastly raw TAR header: {"path":"example-app/bin","type":"5","size":0,"prefix":"","link":"","nonzero_padding":false}
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-28T10:12:37.2455210Z Fastly raw TAR header: {"path":"example-app/bin/main.wasm","type":"0","size":80207092,"prefix":"","link":"","nonzero_padding":false}
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-28T10:12:37.2456856Z Fastly raw TAR header: {"path":"example-app/fastly.toml","type":"0","size":42,"prefix":"","link":"","nonzero_padding":false}
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-28T10:12:38.2146288Z + cmp trusted-server-fastly.wasm packaged.wasm
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-28T10:12:38.6920154Z + cmp fastly.toml packaged.toml
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-28T10:12:38.7531112Z + echo 'SUCCESS: pinned Fastly route packed, validated, inspected and byte-compared without credentials or network'
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-28T10:12:38.7533414Z SUCCESS: pinned Fastly route packed, validated, inspected and byte-compared without credentials or network

release	Verify handoff, create once, publish by release ID and verify	2026-10-28T10:41:26.3385357Z Verified post-publish re-download: all 30 assets byte-identical to signed checksums and handoff

Exact-source IAB hosted negative fixture and typed diagnostics (Run Tests 40664514177; no local process fixture):
cargo test (axum native)	Run release producer primitive and process tests	2026-10-28T09:40:07.3330442Z test ordinary::commands::tests::diagnostic_writer_failure_remains_a_failed_comparison ... ok
cargo test (axum native)	Run release producer primitive and process tests	2026-10-28T09:40:07.3631093Z test ordinary::commands::tests::failed_comparison_retains_bounded_diagnostic_with_explicit_unavailable_facts ... ok
cargo test (axum native)	Run release producer primitive and process tests	2026-10-28T09:40:07.5590547Z test ordinary::tests::typed_failure_stages_distinguish_identity_size_digest_and_complete_bytes ... ok
cargo test (axum native)	Run release producer primitive and process tests	2026-10-28T09:40:54.3891008Z test ordinary_comparison_failure_prevents_signing_and_publication_sentinels ... ok
cargo test (axum native)	Run release producer primitive and process tests	2026-10-28T09:40:54.8189108Z test ordinary_comparison_failure_prevents_signing_and_publication_sentinels ... ok

Companion metadata/source validation helper used above (save as verify-companion-joins.mjs beside the download directory; it uses only read-only APIs):
import fs from 'node:fs'
import assert from 'node:assert/strict'
import { createHash } from 'node:crypto'
import { execFileSync } from 'node:child_process'
const hash = (bytes) => createHash('sha256').update(bytes).digest('hex')
const load = (name) => JSON.parse(fs.readFileSync(name))
const record = load('trusted-server-fastly.wasm.rebuild-check.json')
const run = load('run.json')
const jobs = load('jobs.json')
const artifacts = load('artifacts.json')
const logLines = fs.readFileSync('all-job-logs.txt','utf8').split('\n')
const source = process.env.COMMIT
assert.equal(run.head_sha, source)
assert.equal(run.run_attempt, 1)
assert.equal(run.status, 'completed')
assert.equal(run.conclusion, 'success')
assert.equal(run.repository.full_name, process.env.REPO)
assert.equal(jobs.total_count, jobs.jobs.length)
assert.equal(artifacts.total_count, artifacts.artifacts.length)
const ids = new Set()
const artifactIds = new Set()
for (const role of ['canonical', 'reproduction']) {
  const build = record[role]
  assert.equal(build.run_id, +process.env.RUN)
  assert.equal(build.run_attempt, 1)
  const job = jobs.jobs.filter((job) => job.id === build.job_id)
  assert.equal(job.length, 1)
  const j = job[0]
  assert.equal(j.run_id, +process.env.RUN)
  assert.equal(j.run_attempt, 1)
  assert.equal(j.head_sha, source)
  assert.equal(j.conclusion, 'success')
  assert.equal(j.name, role === 'canonical' ? 'build / Build trusted-server-fastly.wasm' : 'build / Reproduce trusted-server-fastly.wasm')
  assert.ok(!ids.has(j.id)); ids.add(j.id)
  const start = Date.parse(j.started_at), end = Date.parse(j.completed_at)
  assert.ok(start <= build.environment.started_at_seconds * 1000 && build.environment.started_at_seconds * 1000 <= end)
  for (const [kind, expected] of [
    ['artifact', role === 'canonical' ? 'release-trusted-server-fastly.wasm' : 'reproduction-trusted-server-fastly.wasm'],
    ['observation_artifact', `fastly-observation-${role}`],
  ]) {
    const observed = build[kind]
    const matches = artifacts.artifacts.filter((a) => a.id === observed.id)
    assert.equal(matches.length, 1)
    const a = matches[0]
    assert.equal(a.name, expected)
    assert.equal(a.name, observed.name)
    assert.equal(a.digest, `sha256:${observed.sha256}`)
    assert.equal(a.size_in_bytes, observed.size)
    assert.equal(a.expired, false)
    assert.equal(a.workflow_run.id, +process.env.RUN)
    assert.equal(a.workflow_run.head_sha, source)
    assert.equal(a.workflow_run.repository_id, run.repository.id)
    assert.ok(start <= Date.parse(a.created_at) && Date.parse(a.created_at) <= end)
    assert.ok(!artifactIds.has(a.id)); artifactIds.add(a.id)
    const jobLines = logLines.filter(line => line.startsWith(j.name + '\t'))
    const final = jobLines.findIndex(line => line.includes('Artifact ' + a.name + '.zip successfully finalized. Artifact ID ' + a.id))
    assert.ok(final >= 0, 'expected actual upload-action artifact ID in producing-job log')
    const uploadDigest = jobLines.slice(0, final).reverse().find(line => line.includes('SHA256 digest of uploaded artifact zip is '))
    assert.ok(uploadDigest && uploadDigest.includes(observed.sha256), 'expected exact upload-action digest in same producing job')
    console.log(`PASS: ${role} ${kind} API-bound id=${a.id} size=${a.size_in_bytes} ${a.digest}`)
  }
  console.log(`PASS: ${role} job=${j.id} start=${j.started_at} end=${j.completed_at} observed=${JSON.stringify(build.environment)}`)
}
assert.equal(record.canonical_sha256, hash(fs.readFileSync('trusted-server-fastly.wasm')))
assert.equal(record.canonical.size, fs.statSync('trusted-server-fastly.wasm').size)
assert.equal(record.reproduction.size, record.canonical.size)
assert.equal(record.canonical.spdx_sha256, hash(fs.readFileSync('trusted-server-fastly.wasm.spdx.json')))
assert.equal(record.canonical.environment.umask, 0o22)
assert.equal(record.reproduction.environment.umask, 0o27)
assert.equal(record.canonical.environment.jobs, 4)
assert.equal(record.reproduction.environment.jobs, 2)
assert.notEqual(record.canonical.environment.started_at_seconds, record.reproduction.environment.started_at_seconds)
assert.notEqual(record.canonical.environment.checkout_root, record.reproduction.environment.checkout_root)
assert.notEqual(record.canonical.environment.target_root, record.reproduction.environment.target_root)
assert.equal(record.canonical.environment.uid, record.reproduction.environment.uid)
for (const role of ['canonical', 'reproduction']) {
  assert.equal(record[role].environment.locale, 'C')
  assert.equal(record[role].environment.timezone, 'UTC')
}
const sourceBytes = (path) => {
  const response = JSON.parse(execFileSync('gh', ['api', `repos/${process.env.REPO}/contents/${path}?ref=${source}`], {maxBuffer: 4 * 1024 * 1024}))
  assert.equal(response.type, 'file'); assert.equal(response.encoding, 'base64')
  return Buffer.from(response.content, 'base64')
}
const canonical = (v) => Array.isArray(v) ? v.map(canonical) : v && typeof v === 'object' ? Object.fromEntries(Object.keys(v).sort().map(k => [k, canonical(v[k])])) : v
const files = Object.fromEntries(['scripts/release/phase1-build.sh','.cargo/config.toml','Cargo.toml','rust-toolchain.toml','.tool-versions'].map(path => [path, hash(sourceBytes(path))]))
const recipe = {version:1,source_commit:source,package:'trusted-server-adapter-fastly',bin:'trusted-server-adapter-fastly',target:'wasm32-wasip1',profile:'release',default_features:true,features:[],locked:true,files,normalization:{kind:'ordinary-rust-path-remap-v1',target:'wasm32-wasip1',roles:['canonical','reproduction'],source_prefix:'/trusted-server',target_prefix:'/cargo-target'}}
assert.equal(record.recipe_sha256, hash(JSON.stringify(canonical(recipe))+'\n'))
assert.equal(record.cargo_lock_sha256, hash(sourceBytes('Cargo.lock')))
assert.equal(record.npm_lock_sha256, hash(sourceBytes('crates/trusted-server-js/lib/package-lock.json')))
assert.equal(record.tools.node.version, 'v24.20.0')
assert.match(record.tools.rustc.version, /^rustc 1\.98\.1 /)
assert.equal(record.tools.acquisition, 'ordinary-hosted-toolchain')
assert.equal(record.release_qualification, false)
assert.ok(record.gaps.length > 0)
for (const name of ['Build trusted-server-fastly.wasm', 'Reproduce trusted-server-fastly.wasm', 'Compare ordinary Fastly release bytes']) {
 const j = jobs.jobs.find(j => j.name === `build / ${name}`); assert.ok(j)
 console.log(`PASS: ${name} elapsed ${(Date.parse(j.completed_at)-Date.parse(j.started_at))/1000}s`)
}
console.log('PASS: companion joins, source-owned recipe and lock hashes, actual binary/SPDX digests, deliberate ordinary environment variation; qualification remains false')

@prk-Jr

prk-Jr commented Oct 28, 2026

Copy link
Copy Markdown
Collaborator Author

Supplement to rehearsal .16: exact published Fastly runtime evidence — PASS

The original three transcript parts established packaging/validation and byte equality, but did not contain this required runtime check. This supplement closes that historical evidence gap without changing the .16 release or attributing it to another source commit.

PASS — exact rehearsal.16 Fastly WASM runtime/source-header/log check (local Viceroy 0.21.0; no deployment).

  • Release artifact SHA-256: c02b5fecdf82a194ed62873549efc1489d6333eff1e2fa1285728465b60fa7b9, unchanged before/after. Fresh GitHub release asset verification and offline SLSA verification passed with exact release-build.yml signer/source pins for 5fa3843364f247fdc261c438ab9257323637a42c.
  • Normal operator setup: published rehearsal CLI ts config init, then ts config push --adapter fastly --local into private temporary manifests/stores with fictional secrets and a controlled loopback origin. Ran the downloaded WASM directly with pinned Viceroy, without Fastly CLI.
  • Three publisher requests returned HTTP 200 with origin content and injected TSJS; fetching the injected JS returned HTTP 200 (34,615 bytes). All four responses carried the full expected x-ts-version: 5fa3843364f247fdc261c438ab9257323637a42c.
  • Discriminating control: expecting the current Phase 2 head fb48433550ac9f363141f155ba73be2c42307a79 as the source header correctly failed. The header identifies the rehearsed artifact, independently of the checkout.
  • Logging positive control: three actual publisher request lines and three successful origin-response lines appeared on the application tslog endpoint. Build-facts line count across the complete captured log: 0 in default single-request mode.
  • Both owned listeners stopped; connection-refused checks passed. No repository edits, commits, GitHub mutations, deployments, or personal Fastly configuration changes.

Scope: exact published Fastly WASM in local Viceroy with a controlled origin; deployed Fastly behavior and browser execution were not tested. Completed 2026-10-28T14:09:43.853Z.

Detector sensitivity control also passed: the no-build-facts assertion rejected an in-memory copy of the captured log with one synthetic Build facts: line added. The release WASM and original log were unchanged.

Authentication and launch commands (private paths represented by variables):

COMMIT=5fa3843364f247fdc261c438ab9257323637a42c
TAG=v0.0.0-rehearsal.16
gh release verify-asset "$TAG" "$ASSETS/trusted-server-fastly.wasm" --repo prk-Jr/trusted-server
gh attestation verify "$ASSETS/trusted-server-fastly.wasm" \
  --repo prk-Jr/trusted-server --source-ref "refs/tags/$TAG" \
  --source-digest "$COMMIT" --signer-digest "$COMMIT" \
  --deny-self-hosted-runners --predicate-type https://slsa.dev/provenance/v1 \
  --bundle "$ASSETS/trusted-server-fastly.wasm.provenance.sigstore.json" \
  --custom-trusted-root "$ASSETS/trusted_root.jsonl" \
  --cert-identity "https://github.com/prk-Jr/trusted-server/.github/workflows/release-build.yml@refs/tags/$TAG" \
  --format json
"$ASSETS/ts-aarch64-apple-darwin" config init --app-config "$WORKSPACE/trusted-server.toml"
# After configuring only private loopback stores and fictional secrets:
"$ASSETS/ts-aarch64-apple-darwin" config push --adapter fastly --local \
  --manifest "$WORKSPACE/edgezero.toml" --app-config "$WORKSPACE/trusted-server.toml" \
  --yes --no-diff --no-env
"$VICEROY_0_21_0" --config "$WORKSPACE/fastly.toml" \
  --addr 127.0.0.1:19450 --log-stdout --log-stderr \
  "$ASSETS/trusted-server-fastly.wasm"

Explicit results:

Viceroy: viceroy 0.21.0
Release asset verification: Verification succeeded; resolved source 5fa3843364f247fdc261c438ab9257323637a42c
Offline SLSA signature/source/signer/runner checks: PASS
Publisher request 1: HTTP 200; origin marker and injected TSJS present; full source header PASS
Injected JS: HTTP 200; 34615 bytes; full source header PASS
Publisher request 2: HTTP 200; origin marker and injected TSJS present; full source header PASS
Publisher request 3: HTTP 200; origin marker and injected TSJS present; full source header PASS
Origin observed requests: 3
Actual publisher request / successful origin-response tslog lines: 3 / 3
Build facts: lines in original complete log: 0
Wrong-source expectation: rejected as expected
Copied-log detector sensitivity control: rejected one synthetic Build facts line
WASM SHA-256 before == after: c02b5fecdf82a194ed62873549efc1489d6333eff1e2fa1285728465b60fa7b9
Owned listeners stopped / connection-refused checks: PASS

The official Viceroy 0.21.0 Darwin ARM64 archive was checksum-verified against GitHub asset 529469175: 4ae726cf9686c77d16bf2b45db54cc2d295af746ff07a52e20342f4e2b40a8bc. This is local Viceroy evidence, not a deployed Fastly or browser claim.

@prk-Jr

prk-Jr commented Oct 28, 2026

Copy link
Copy Markdown
Collaborator Author

Rehearsal .17 — infrastructure failure; source unchanged

Tag v0.0.0-rehearsal.17 remains a lightweight reference to reviewed, green source 36454c526f70f145eb42a7994a8b6e74dc1df135. Final run: 9 successful jobs, 1 cancelled, 2 skipped.

  • All six binaries that acquired runners built successfully, including Intel macOS. Fastly canonical/reproduction builds and the full-byte comparison passed.
  • The macOS ARM64 job never acquired a runner and executed no steps. Its annotations report hosted-runner acquisition failure and macOS ARM64 capacity constraints. This is a scheduling failure, not a demonstrated source/build failure.
  • Signing and release jobs were skipped. Read-only release lookup/listing confirms no published or draft release for .17 and no leftover draft releases. Published-asset, signature and runtime checks therefore could not be run for this tag.
  • The tag and failed run are preserved: no rerun, deletion, retargeting, settings change or source modification.

The next attempt uses fresh lightweight v0.0.0-rehearsal.18 at the same source under the standing approval, after rechecking exact-head IAB CI and fork preconditions. No cohort member or verification requirement is dropped. Historical .16 runtime evidence remains separately bound to 5fa384336 in its supplement.

@prk-Jr

prk-Jr commented Oct 28, 2026

Copy link
Copy Markdown
Collaborator Author

Rehearsal .18 — repeated ARM64 hosted-runner acquisition failure

The source rehearsed by both tags is 36454c5 on Phase 1 base 4940928. The later documentation-only PR head 5163241 records the open gate; these tag runs do not attest that later head. All four IAB workflow runs for source 36454c5 completed successfully: 29 successful checks and four expected skips. Hosted macOS producer supervision passed all 45 selected tests; Linux producer unit tests passed 952 with nine explicitly ignored tests, boundary integration passed three, command integration passed 18, and the explicit comparison-failure sentinel passed.

Fresh fork rehearsals v0.0.0-rehearsal.17 (https://github.com/prk-Jr/trusted-server/actions/runs/40710926728) and v0.0.0-rehearsal.18 (https://github.com/prk-Jr/trusted-server/actions/runs/40714430928) both hit the same external blocker: the ARM macOS CLI job never acquired a hosted runner. The check annotations report “The job was not acquired by Runner of type hosted even after multiple attempts” and macOS arm64 capacity constraints. No steps ran for those ARM jobs. Rehearsal .17 settled with nine successful jobs, one cancelled job, and two expected skips for signing and release. Rehearsal .18 settled with the same nine successful jobs, one cancelled job, and two skips for signing and release. Neither tag has a published or draft release.

Both lightweight tags remain at the reviewed source commit. No workflow rerun, tag reuse, deletion, retargeting, or settings change was performed. Fresh immutable-publication, attestation and exact-release runtime verification remains pending a successful new rehearsal; the earlier .16 evidence remains historical and is not evidence for the new process cleanup change. The PR remains draft.

No .19 attempt is queued. A fresh successful seven-binary rehearsal remains the release-readiness gate once hosted ARM64 capacity is available; no cohort or verification requirement is waived. The original .16 exact-runtime evidence gap is separately closed: #1449 (comment)

@prk-Jr

prk-Jr commented Oct 29, 2026

Copy link
Copy Markdown
Collaborator Author

Rehearsal .19 — hosted ARM64 runner acquisition failure

Exact reviewed source: 5163241b947b1aa335987bd832b9205e4364e4bb; Phase 1 base: 4940928e800fed00e4bddd8f3727fb52dcb2b296. Current-head IAB CI remains 29 successful checks and four expected skips.

Final fork run 40726649596: 9 successful jobs, 1 cancelled job, 2 skipped jobs. Six binary builds, the second Fastly build and complete-byte comparison passed. The ARM64 macOS CLI job executed zero steps and never acquired a runner. Its annotations say “The job was not acquired by Runner of type hosted even after multiple attempts” and cite macOS ARM64 capacity constraints.

Signing and publication were skipped. Read-only checks found no draft or published .19 release and no leftover drafts. Consequently, published-asset, attestation and exact-release runtime verification could not run; no successful rehearsal is claimed. The lightweight .19 tag remains at the exact source above, untouched. No source, runner, cohort or settings changes were made.

The .16 runtime supplement remains historical evidence for 5fa3843364f247fdc261c438ab9257323637a42c only. The sole readiness gate remains a successful fresh seven-binary rehearsal and its full published-byte verification. Keep this PR draft, with no reviewers requested.

@prk-Jr

prk-Jr commented Oct 29, 2026

Copy link
Copy Markdown
Collaborator Author

Phase 2 exact-head rehearsal .20 — transcript 1/3

Source 5163241b947b1aa335987bd832b9205e4364e4bb; successful first-attempt fork run 40812416995. Tag v0.0.0-rehearsal.20, seven binaries / 30 immutable prerelease assets.

Rehearsal .20 passed at exact reviewed source 5163241b947b1aa335987bd832b9205e4364e4bb — first attempt, all 18 jobs successful. Seven binaries and 30 immutable prerelease assets, not Latest. This closes the successful current-implementation release rehearsal gate at that source. Keep #1449 draft; no reviewers requested. No IAB tag, release or settings changes. Historical .16/.17/.18/.19 records keep their original source/result attribution.

Verification summary:

  • Downloaded using the documented gh release download; verified immutable release membership and all 30 assets; API sizes/digests and 29 SHA256SUMS entries match the downloaded bytes. Published readback confirms all 30 files equal the signed handoff.
  • All seven binaries: provenance and SPDX, online without bundles and offline with published bundles/custom trusted roots. 28 binary mode/predicate checks and 56 signer identity invocations passed. Workflow-prefix and exact tag certificate identities were checked separately, with source ref/digest and signer digest, predicate, repository and hosted-runner constraints retained. All 30 verified binary/companion certificate result sets also pass explicit exact source-repository/ref/digest, signer-digest and runner-environment checks.
  • 14 SPDX equalities passed. Online equality uses jq -e --slurpfile document ... 'any(.[]; .verificationResult.statement.predicate == $document[0])' only after successful pinned verification; one-byte-changed valid JSON and empty-result controls both fail as required. Published offline bundles retain their exactly-one-result check.
  • Fastly rebuild-check provenance passed both online and offline, with both signer identities; exact source/binary/SPDX/recipe/lock/producing-job/upload/API joins pass. Its ordinary profile remains informational, with release_qualification:false.
  • Seven hosted native/format smokes, both macOS minimum OS 13.0 checks, CLI source-version output, Axum non-loopback and invalid-port checks, and checksum-pinned Fastly CLI 16 packaging/validation/archive inspection/byte comparisons passed. Canonical 362s; second Fastly build 282s; comparison 122s, overlapping native work.
  • Exact published WASM SHA-256 4fe7204f17df07a392f4e4b64f31eebf3b02179e57abee689ab0094990d0a572 ran under pinned Viceroy 0.21.0: three publisher responses plus injected JS returned 200 with full source headers; origin observed exactly three requests. Captured request/origin-response log records: 6/6 (logger forwards to endpoint and echoes stdout); build-facts lines: zero. Wrong-source and copied-log sensitivity controls passed; owned listeners stopped. Local Viceroy scope only: no deployed Fastly or browser-runtime claim.

Tool archive checksum validation (recomputed while preparing this record):

GitHub CLI 2.102.0 macOS ARM64 ZIP: SHA-256 da922c20d1792e5b2cbf375593d7a658acf034c12c84e007e71c76ef959c337e — matches the official pinned checksum
Node 24.20.0 Darwin ARM64 archive: SHA-256 40e5607e5ecb3db9192723776da2d75d966260fc74a7a9e731c1bd67dda96bc8 — matches the official pinned checksum
Viceroy 0.21.0 Darwin ARM64 archive: SHA-256 4ae726cf9686c77d16bf2b45db54cc2d295af746ff07a52e20342f4e2b40a8bc — matches the official pinned checksum

Exact published inventory (30 files):

SHA256SUMS	3294 bytes	sha256:86c22940956c7b3b88663c6ed8c8a667f0b2054edbfff76be23005a7f954cf6d
trusted-server-axum-aarch64-unknown-linux-gnu	137729280 bytes	sha256:9bb60b7890a275271efc5733634c093129cb2f8e4d9d754ed7daffd482511356
trusted-server-axum-aarch64-unknown-linux-gnu.provenance.sigstore.json	11506 bytes	sha256:f198e3eb7c66268fc618dff1ad701208a26118e4703287f091cf4333367572cb
trusted-server-axum-aarch64-unknown-linux-gnu.sbom.sigstore.json	797199 bytes	sha256:e672b55c691f68913c2f187e1df476ebf9b8108b63df7ada04c435372efc8f82
trusted-server-axum-aarch64-unknown-linux-gnu.spdx.json	766910 bytes	sha256:166bf7c0abf0b791c5148a31b1d108744d1070ea770bcf41f310eb20e39fcc1b
trusted-server-axum-x86_64-unknown-linux-gnu	137532296 bytes	sha256:0622e7205955fa1d13a9c6b8cd86c18858c41bd366917a49bf2c8ca27bb6e54c
trusted-server-axum-x86_64-unknown-linux-gnu.provenance.sigstore.json	11447 bytes	sha256:895cbe21bf81a84bf1476bc99942135b3bcf1a50dc404413f1f4997bf1890196
trusted-server-axum-x86_64-unknown-linux-gnu.sbom.sigstore.json	798796 bytes	sha256:48ff42e75d16926d33b4d2732341d17ec5bc8865e870bdbf2f2327194544f65a
trusted-server-axum-x86_64-unknown-linux-gnu.spdx.json	768529 bytes	sha256:afe89f5a0e05e60c94558001f09ba829b256462273de32e2ef27e608cc274b86
trusted-server-axum-x86_64-unknown-linux-musl	136875880 bytes	sha256:905e8510268addbc95d83c6210468423120d0798e39bde77b9c4d730d270e339
trusted-server-axum-x86_64-unknown-linux-musl.provenance.sigstore.json	11455 bytes	sha256:63c6f19403ce81832a0b4b1373fa26170eda95ef5c971c7dd654820858fa9ff4
trusted-server-axum-x86_64-unknown-linux-musl.sbom.sigstore.json	798816 bytes	sha256:c15622144af0a8f595eb2bc594da64d3bb9b81b225cdd00cca2e833124267e29
trusted-server-axum-x86_64-unknown-linux-musl.spdx.json	768532 bytes	sha256:89df23f4643cf6fe927337147c0a5527b5a51df06648b6d89c6c21ac179a78d3
trusted-server-fastly.wasm	80207071 bytes	sha256:4fe7204f17df07a392f4e4b64f31eebf3b02179e57abee689ab0094990d0a572
trusted-server-fastly.wasm.provenance.sigstore.json	11540 bytes	sha256:1d4c6f19741ce8454b17b81e426e5ba7bcac3ae2d2eaf6747d3ff0a7cd84fde3
trusted-server-fastly.wasm.rebuild-check.json	2897 bytes	sha256:8fa32e3a674662160fdfb895fb01ae7dc45ffb1b496bb8a311cc764c2c85cb2e
trusted-server-fastly.wasm.sbom.sigstore.json	764108 bytes	sha256:4ff0373dead149f69e78368fc2eef3f8c1edaa04abbbf1ff2e15246b5a2898a5
trusted-server-fastly.wasm.spdx.json	734462 bytes	sha256:f9340b38c8ddfe199a393859f6bca8972f8b42e6be33f7a3a1513d69dd656d50
ts-aarch64-apple-darwin	41087408 bytes	sha256:8446cd69d66bea4e6e600899ee84139e8f429183bbc0a6b3861eb14ef6c934b0
ts-aarch64-apple-darwin.provenance.sigstore.json	11340 bytes	sha256:e271f1d1234ce84b610fb35e85ac4c4dcadc2846b371b8c4ae64c11fc55c232f
ts-aarch64-apple-darwin.sbom.sigstore.json	990063 bytes	sha256:9f7abf17aa284513d42449ec98ec318ef6ffa7dfcc4f4df8238d26016925790b
ts-aarch64-apple-darwin.spdx.json	957352 bytes	sha256:5f3de43658050b81a18db1966ae468855a6c03699eb62a64637a2f5446aa2235
ts-x86_64-apple-darwin	43806768 bytes	sha256:3a10a5c377149e37f32bba8804db7d0601a8d69c61741cfe6b2669855cca4bd8
ts-x86_64-apple-darwin.provenance.sigstore.json	11336 bytes	sha256:16dba2ce423a929a8216da0ca10672231895175e7b40aae342ac4aaf38c678f2
ts-x86_64-apple-darwin.sbom.sigstore.json	990791 bytes	sha256:2478b85de37689c7eaa8ff978772d805658292386cb2705436039384a0fc5fd8
ts-x86_64-apple-darwin.spdx.json	958083 bytes	sha256:d6283295993c71733e4ecacbccc391b62d67efe4d9824f184daef4e4fb9dd74c
ts-x86_64-unknown-linux-gnu	300958128 bytes	sha256:8d1277f8ef06e867294111d910af720d576fb5d847cdde66f412415917656ae5
ts-x86_64-unknown-linux-gnu.provenance.sigstore.json	11266 bytes	sha256:26b59039273d5106ed2b7b904b6be8c8a92367f37aef94ef0ba3d5cef58d64e4
ts-x86_64-unknown-linux-gnu.sbom.sigstore.json	990207 bytes	sha256:56f3b15bf445b2d98d4c4f71d924ad383f8dea39cc802173c5a312f8318fcf11
ts-x86_64-unknown-linux-gnu.spdx.json	957428 bytes	sha256:d30024ee9966d380ae73d00309b895b5fbb23cd63dcbd1e50e7979c1c21005f6

The following is the actual command/output transcript; private temporary roots are replaced with shell-style placeholders. JSON-formatted verification results were retained privately; the transcript includes their explicit boolean policy/equality results.

$ gh api repos/prk-Jr/trusted-server/actions/runs/40812416995 > run.json
true
$ gh api --paginate --slurp repos/prk-Jr/trusted-server/actions/runs/40812416995/jobs\?per_page=100 > jobs-pages.json
$ gh api --paginate --slurp repos/prk-Jr/trusted-server/actions/runs/40812416995/artifacts\?per_page=100 > artifact-pages.json
PASS: exact reviewed head; first attempt; all 18 jobs successful
$ gh run view 40812416995 --repo prk-Jr/trusted-server --log > all-job-logs.txt
$ gh api repos/prk-Jr/trusted-server/releases/tags/v0.0.0-rehearsal.20 > release.json
$ gh api repos/prk-Jr/trusted-server/releases/latest > latest.json
$ jq -e --arg tag v0.0.0-rehearsal.20 .tag_name\!=\$tag latest.json
true
$ 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
$ gh release download v0.0.0-rehearsal.20 --repo prk-Jr/trusted-server --dir .
$ node ../check-assets.mjs
PASS: exact 30 immutable prerelease assets; every API size and digest equals downloaded bytes; SHA256SUMS covers exactly the other 29; all seven SPDX roots have exact name/tag/binary digest
$ gh release verify v0.0.0-rehearsal.20 --repo prk-Jr/trusted-server
Resolved tag v0.0.0-rehearsal.20 to sha1:5163241b947b1aa335987bd832b9205e4364e4bb
Loaded attestation from GitHub API
✓ Release v0.0.0-rehearsal.20 verified!

Assets
SHA256SUMS	sha256:86c22940956c7b3b88663c6ed8c8a667f0b2054edbfff76be23005a7f954cf6d
trusted-server-axum-aarch64-unknown-linux-gnu	sha256:9bb60b7890a275271efc5733634c093129cb2f8e4d9d754ed7daffd482511356
trusted-server-axum-aarch64-unknown-linux-gnu.provenance.sigstore.json	sha256:f198e3eb7c66268fc618dff1ad701208a26118e4703287f091cf4333367572cb
trusted-server-axum-aarch64-unknown-linux-gnu.sbom.sigstore.json	sha256:e672b55c691f68913c2f187e1df476ebf9b8108b63df7ada04c435372efc8f82
trusted-server-axum-aarch64-unknown-linux-gnu.spdx.json	sha256:166bf7c0abf0b791c5148a31b1d108744d1070ea770bcf41f310eb20e39fcc1b
trusted-server-axum-x86_64-unknown-linux-gnu	sha256:0622e7205955fa1d13a9c6b8cd86c18858c41bd366917a49bf2c8ca27bb6e54c
trusted-server-axum-x86_64-unknown-linux-gnu.provenance.sigstore.json	sha256:895cbe21bf81a84bf1476bc99942135b3bcf1a50dc404413f1f4997bf1890196
trusted-server-axum-x86_64-unknown-linux-gnu.sbom.sigstore.json	sha256:48ff42e75d16926d33b4d2732341d17ec5bc8865e870bdbf2f2327194544f65a
trusted-server-axum-x86_64-unknown-linux-gnu.spdx.json	sha256:afe89f5a0e05e60c94558001f09ba829b256462273de32e2ef27e608cc274b86
trusted-server-axum-x86_64-unknown-linux-musl	sha256:905e8510268addbc95d83c6210468423120d0798e39bde77b9c4d730d270e339
trusted-server-axum-x86_64-unknown-linux-musl.provenance.sigstore.json	sha256:63c6f19403ce81832a0b4b1373fa26170eda95ef5c971c7dd654820858fa9ff4
trusted-server-axum-x86_64-unknown-linux-musl.sbom.sigstore.json	sha256:c15622144af0a8f595eb2bc594da64d3bb9b81b225cdd00cca2e833124267e29
trusted-server-axum-x86_64-unknown-linux-musl.spdx.json	sha256:89df23f4643cf6fe927337147c0a5527b5a51df06648b6d89c6c21ac179a78d3
trusted-server-fastly.wasm	sha256:4fe7204f17df07a392f4e4b64f31eebf3b02179e57abee689ab0094990d0a572
trusted-server-fastly.wasm.provenance.sigstore.json	sha256:1d4c6f19741ce8454b17b81e426e5ba7bcac3ae2d2eaf6747d3ff0a7cd84fde3
trusted-server-fastly.wasm.rebuild-check.json	sha256:8fa32e3a674662160fdfb895fb01ae7dc45ffb1b496bb8a311cc764c2c85cb2e
trusted-server-fastly.wasm.sbom.sigstore.json	sha256:4ff0373dead149f69e78368fc2eef3f8c1edaa04abbbf1ff2e15246b5a2898a5
trusted-server-fastly.wasm.spdx.json	sha256:f9340b38c8ddfe199a393859f6bca8972f8b42e6be33f7a3a1513d69dd656d50
ts-aarch64-apple-darwin	sha256:8446cd69d66bea4e6e600899ee84139e8f429183bbc0a6b3861eb14ef6c934b0
ts-aarch64-apple-darwin.provenance.sigstore.json	sha256:e271f1d1234ce84b610fb35e85ac4c4dcadc2846b371b8c4ae64c11fc55c232f
ts-aarch64-apple-darwin.sbom.sigstore.json	sha256:9f7abf17aa284513d42449ec98ec318ef6ffa7dfcc4f4df8238d26016925790b
ts-aarch64-apple-darwin.spdx.json	sha256:5f3de43658050b81a18db1966ae468855a6c03699eb62a64637a2f5446aa2235
ts-x86_64-apple-darwin	sha256:3a10a5c377149e37f32bba8804db7d0601a8d69c61741cfe6b2669855cca4bd8
ts-x86_64-apple-darwin.provenance.sigstore.json	sha256:16dba2ce423a929a8216da0ca10672231895175e7b40aae342ac4aaf38c678f2
ts-x86_64-apple-darwin.sbom.sigstore.json	sha256:2478b85de37689c7eaa8ff978772d805658292386cb2705436039384a0fc5fd8
ts-x86_64-apple-darwin.spdx.json	sha256:d6283295993c71733e4ecacbccc391b62d67efe4d9824f184daef4e4fb9dd74c
ts-x86_64-unknown-linux-gnu	sha256:8d1277f8ef06e867294111d910af720d576fb5d847cdde66f412415917656ae5
ts-x86_64-unknown-linux-gnu.provenance.sigstore.json	sha256:26b59039273d5106ed2b7b904b6be8c8a92367f37aef94ef0ba3d5cef58d64e4
ts-x86_64-unknown-linux-gnu.sbom.sigstore.json	sha256:56f3b15bf445b2d98d4c4f71d924ad383f8dea39cc802173c5a312f8318fcf11
ts-x86_64-unknown-linux-gnu.spdx.json	sha256:d30024ee9966d380ae73d00309b895b5fbb23cd63dcbd1e50e7979c1c21005f6

$ gh release verify-asset v0.0.0-rehearsal.20 trusted-server-fastly.wasm --repo prk-Jr/trusted-server
Calculated digest for trusted-server-fastly.wasm: sha256:4fe7204f17df07a392f4e4b64f31eebf3b02179e57abee689ab0094990d0a572
Resolved tag v0.0.0-rehearsal.20 to sha1:5163241b947b1aa335987bd832b9205e4364e4bb
Loaded attestation from GitHub API

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

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

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

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

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

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

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

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

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

✓ Verification succeeded! ts-x86_64-apple-darwin.spdx.json is present in release v0.0.0-rehearsal.20
$ gh release verify-asset v0.0.0-rehearsal.20 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:16dba2ce423a929a8216da0ca10672231895175e7b40aae342ac4aaf38c678f2
Resolved tag v0.0.0-rehearsal.20 to sha1:5163241b947b1aa335987bd832b9205e4364e4bb
Loaded attestation from GitHub API

✓ Verification succeeded! ts-x86_64-apple-darwin.provenance.sigstore.json is present in release v0.0.0-rehearsal.20
$ gh release verify-asset v0.0.0-rehearsal.20 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:2478b85de37689c7eaa8ff978772d805658292386cb2705436039384a0fc5fd8
Resolved tag v0.0.0-rehearsal.20 to sha1:5163241b947b1aa335987bd832b9205e4364e4bb
Loaded attestation from GitHub API

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

✓ Verification succeeded! ts-x86_64-unknown-linux-gnu is present in release v0.0.0-rehearsal.20
$ gh release verify-asset v0.0.0-rehearsal.20 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:d30024ee9966d380ae73d00309b895b5fbb23cd63dcbd1e50e7979c1c21005f6
Resolved tag v0.0.0-rehearsal.20 to sha1:5163241b947b1aa335987bd832b9205e4364e4bb
Loaded attestation from GitHub API

✓ Verification succeeded! ts-x86_64-unknown-linux-gnu.spdx.json is present in release v0.0.0-rehearsal.20
$ gh release verify-asset v0.0.0-rehearsal.20 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:26b59039273d5106ed2b7b904b6be8c8a92367f37aef94ef0ba3d5cef58d64e4
Resolved tag v0.0.0-rehearsal.20 to sha1:5163241b947b1aa335987bd832b9205e4364e4bb
Loaded attestation from GitHub API

✓ Verification succeeded! ts-x86_64-unknown-linux-gnu.provenance.sigstore.json is present in release v0.0.0-rehearsal.20
$ gh release verify-asset v0.0.0-rehearsal.20 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:56f3b15bf445b2d98d4c4f71d924ad383f8dea39cc802173c5a312f8318fcf11
Resolved tag v0.0.0-rehearsal.20 to sha1:5163241b947b1aa335987bd832b9205e4364e4bb
Loaded attestation from GitHub API

✓ Verification succeeded! ts-x86_64-unknown-linux-gnu.sbom.sigstore.json is present in release v0.0.0-rehearsal.20
$ gh release verify-asset v0.0.0-rehearsal.20 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:0622e7205955fa1d13a9c6b8cd86c18858c41bd366917a49bf2c8ca27bb6e54c
Resolved tag v0.0.0-rehearsal.20 to sha1:5163241b947b1aa335987bd832b9205e4364e4bb
Loaded attestation from GitHub API

✓ Verification succeeded! trusted-server-axum-x86_64-unknown-linux-gnu is present in release v0.0.0-rehearsal.20
$ gh release verify-asset v0.0.0-rehearsal.20 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:afe89f5a0e05e60c94558001f09ba829b256462273de32e2ef27e608cc274b86
Resolved tag v0.0.0-rehearsal.20 to sha1:5163241b947b1aa335987bd832b9205e4364e4bb
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.20
$ gh release verify-asset v0.0.0-rehearsal.20 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:895cbe21bf81a84bf1476bc99942135b3bcf1a50dc404413f1f4997bf1890196
Resolved tag v0.0.0-rehearsal.20 to sha1:5163241b947b1aa335987bd832b9205e4364e4bb
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.20
$ gh release verify-asset v0.0.0-rehearsal.20 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:48ff42e75d16926d33b4d2732341d17ec5bc8865e870bdbf2f2327194544f65a
Resolved tag v0.0.0-rehearsal.20 to sha1:5163241b947b1aa335987bd832b9205e4364e4bb
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.20
$ gh release verify-asset v0.0.0-rehearsal.20 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:905e8510268addbc95d83c6210468423120d0798e39bde77b9c4d730d270e339
Resolved tag v0.0.0-rehearsal.20 to sha1:5163241b947b1aa335987bd832b9205e4364e4bb
Loaded attestation from GitHub API

✓ Verification succeeded! trusted-server-axum-x86_64-unknown-linux-musl is present in release v0.0.0-rehearsal.20
$ gh release verify-asset v0.0.0-rehearsal.20 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:89df23f4643cf6fe927337147c0a5527b5a51df06648b6d89c6c21ac179a78d3
Resolved tag v0.0.0-rehearsal.20 to sha1:5163241b947b1aa335987bd832b9205e4364e4bb
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.20
$ gh release verify-asset v0.0.0-rehearsal.20 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:63c6f19403ce81832a0b4b1373fa26170eda95ef5c971c7dd654820858fa9ff4
Resolved tag v0.0.0-rehearsal.20 to sha1:5163241b947b1aa335987bd832b9205e4364e4bb
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.20
$ gh release verify-asset v0.0.0-rehearsal.20 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:c15622144af0a8f595eb2bc594da64d3bb9b81b225cdd00cca2e833124267e29
Resolved tag v0.0.0-rehearsal.20 to sha1:5163241b947b1aa335987bd832b9205e4364e4bb
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.20
$ gh release verify-asset v0.0.0-rehearsal.20 trusted-server-axum-aarch64-unknown-linux-gnu --repo prk-Jr/trusted-server
Calculated digest for trusted-server-axum-aarch64-unknown-linux-gnu: sha256:9bb60b7890a275271efc5733634c093129cb2f8e4d9d754ed7daffd482511356
Resolved tag v0.0.0-rehearsal.20 to sha1:5163241b947b1aa335987bd832b9205e4364e4bb
Loaded attestation from GitHub API

✓ Verification succeeded! trusted-server-axum-aarch64-unknown-linux-gnu is present in release v0.0.0-rehearsal.20
$ gh release verify-asset v0.0.0-rehearsal.20 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:166bf7c0abf0b791c5148a31b1d108744d1070ea770bcf41f310eb20e39fcc1b
Resolved tag v0.0.0-rehearsal.20 to sha1:5163241b947b1aa335987bd832b9205e4364e4bb
Loaded attestation from GitHub API

✓ Verification succeeded! trusted-server-axum-aarch64-unknown-linux-gnu.spdx.json is present in release v0.0.0-rehearsal.20
$ gh release verify-asset v0.0.0-rehearsal.20 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:f198e3eb7c66268fc618dff1ad701208a26118e4703287f091cf4333367572cb
Resolved tag v0.0.0-rehearsal.20 to sha1:5163241b947b1aa335987bd832b9205e4364e4bb
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.20
$ gh release verify-asset v0.0.0-rehearsal.20 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:e672b55c691f68913c2f187e1df476ebf9b8108b63df7ada04c435372efc8f82
Resolved tag v0.0.0-rehearsal.20 to sha1:5163241b947b1aa335987bd832b9205e4364e4bb
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.20
$ gh release verify-asset v0.0.0-rehearsal.20 trusted-server-fastly.wasm.rebuild-check.json --repo prk-Jr/trusted-server
Calculated digest for trusted-server-fastly.wasm.rebuild-check.json: sha256:8fa32e3a674662160fdfb895fb01ae7dc45ffb1b496bb8a311cc764c2c85cb2e
Resolved tag v0.0.0-rehearsal.20 to sha1:5163241b947b1aa335987bd832b9205e4364e4bb
Loaded attestation from GitHub API

✓ Verification succeeded! trusted-server-fastly.wasm.rebuild-check.json is present in release v0.0.0-rehearsal.20
$ gh release verify-asset v0.0.0-rehearsal.20 SHA256SUMS --repo prk-Jr/trusted-server
Calculated digest for SHA256SUMS: sha256:86c22940956c7b3b88663c6ed8c8a667f0b2054edbfff76be23005a7f954cf6d
Resolved tag v0.0.0-rehearsal.20 to sha1:5163241b947b1aa335987bd832b9205e4364e4bb
Loaded attestation from GitHub API

✓ Verification succeeded! SHA256SUMS is present in release v0.0.0-rehearsal.20
$ 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.rebuild-check.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_AND_COMPANION_SHA256SUMS
trusted-server-fastly.wasm: OK
ts-aarch64-apple-darwin: OK
ts-x86_64-apple-darwin: OK
ts-x86_64-unknown-linux-gnu: OK
trusted-server-axum-x86_64-unknown-linux-gnu: OK
trusted-server-axum-x86_64-unknown-linux-musl: OK
trusted-server-axum-aarch64-unknown-linux-gnu: OK
trusted-server-fastly.wasm.rebuild-check.json: OK
$ gh attestation verify trusted-server-fastly.wasm --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.20 --source-digest 5163241b947b1aa335987bd832b9205e4364e4bb --signer-digest 5163241b947b1aa335987bd832b9205e4364e4bb --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.20 --source-digest 5163241b947b1aa335987bd832b9205e4364e4bb --signer-digest 5163241b947b1aa335987bd832b9205e4364e4bb --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.20 --format json > ../trusted-server-fastly.wasm.offline-provenance.json
$ jq -e --arg repo https://github.com/prk-Jr/trusted-server --arg ref refs/tags/v0.0.0-rehearsal.20 --arg source 5163241b947b1aa335987bd832b9205e4364e4bb length\ \>\ 0\ and\ all\(.\[\]\;\ .verificationResult.signature.certificate.sourceRepositoryURI==\$repo\ and\ .verificationResult.signature.certificate.sourceRepositoryRef==\$ref\ and\ .verificationResult.signature.certificate.sourceRepositoryDigest==\$source\ and\ .verificationResult.signature.certificate.buildSignerDigest==\$source\ and\ .verificationResult.signature.certificate.runnerEnvironment==\"github-hosted\"\) ../trusted-server-fastly.wasm.offline-provenance.json
true
PASS: trusted-server-fastly.wasm offline provenance; both workflow and exact tag certificate identities with all source/signer pins
$ gh attestation verify trusted-server-fastly.wasm --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.20 --source-digest 5163241b947b1aa335987bd832b9205e4364e4bb --signer-digest 5163241b947b1aa335987bd832b9205e4364e4bb --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.20 --source-digest 5163241b947b1aa335987bd832b9205e4364e4bb --signer-digest 5163241b947b1aa335987bd832b9205e4364e4bb --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.20 --format json > ../trusted-server-fastly.wasm.online-provenance.json
$ jq -e --arg repo https://github.com/prk-Jr/trusted-server --arg ref refs/tags/v0.0.0-rehearsal.20 --arg source 5163241b947b1aa335987bd832b9205e4364e4bb length\ \>\ 0\ and\ all\(.\[\]\;\ .verificationResult.signature.certificate.sourceRepositoryURI==\$repo\ and\ .verificationResult.signature.certificate.sourceRepositoryRef==\$ref\ and\ .verificationResult.signature.certificate.sourceRepositoryDigest==\$source\ and\ .verificationResult.signature.certificate.buildSignerDigest==\$source\ and\ .verificationResult.signature.certificate.runnerEnvironment==\"github-hosted\"\) ../trusted-server-fastly.wasm.online-provenance.json
true
PASS: trusted-server-fastly.wasm online provenance; both workflow and exact tag certificate identities with all source/signer pins
$ gh attestation verify trusted-server-fastly.wasm --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.20 --source-digest 5163241b947b1aa335987bd832b9205e4364e4bb --signer-digest 5163241b947b1aa335987bd832b9205e4364e4bb --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.20 --source-digest 5163241b947b1aa335987bd832b9205e4364e4bb --signer-digest 5163241b947b1aa335987bd832b9205e4364e4bb --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.20 --format json > ../trusted-server-fastly.wasm.offline-sbom.json
$ jq -e --arg repo https://github.com/prk-Jr/trusted-server --arg ref refs/tags/v0.0.0-rehearsal.20 --arg source 5163241b947b1aa335987bd832b9205e4364e4bb length\ \>\ 0\ and\ all\(.\[\]\;\ .verificationResult.signature.certificate.sourceRepositoryURI==\$repo\ and\ .verificationResult.signature.certificate.sourceRepositoryRef==\$ref\ and\ .verificationResult.signature.certificate.sourceRepositoryDigest==\$source\ and\ .verificationResult.signature.certificate.buildSignerDigest==\$source\ and\ .verificationResult.signature.certificate.runnerEnvironment==\"github-hosted\"\) ../trusted-server-fastly.wasm.offline-sbom.json
true
PASS: trusted-server-fastly.wasm offline sbom; both workflow and exact tag certificate identities with all source/signer 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.json
true
PASS: trusted-server-fastly.wasm offline verified SBOM predicate equals published SPDX
$ gh attestation verify trusted-server-fastly.wasm --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.20 --source-digest 5163241b947b1aa335987bd832b9205e4364e4bb --signer-digest 5163241b947b1aa335987bd832b9205e4364e4bb --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.20 --source-digest 5163241b947b1aa335987bd832b9205e4364e4bb --signer-digest 5163241b947b1aa335987bd832b9205e4364e4bb --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.20 --format json > ../trusted-server-fastly.wasm.online-sbom.json
$ jq -e --arg repo https://github.com/prk-Jr/trusted-server --arg ref refs/tags/v0.0.0-rehearsal.20 --arg source 5163241b947b1aa335987bd832b9205e4364e4bb length\ \>\ 0\ and\ all\(.\[\]\;\ .verificationResult.signature.certificate.sourceRepositoryURI==\$repo\ and\ .verificationResult.signature.certificate.sourceRepositoryRef==\$ref\ and\ .verificationResult.signature.certificate.sourceRepositoryDigest==\$source\ and\ .verificationResult.signature.certificate.buildSignerDigest==\$source\ and\ .verificationResult.signature.certificate.runnerEnvironment==\"github-hosted\"\) ../trusted-server-fastly.wasm.online-sbom.json
true
PASS: trusted-server-fastly.wasm online sbom; both workflow and exact tag certificate identities with all source/signer pins
$ jq -e --slurpfile document trusted-server-fastly.wasm.spdx.json any\(.\[\]\;\ .verificationResult.statement.predicate\ ==\ \$document\[0\]\) ../trusted-server-fastly.wasm.online-sbom.json
true
PASS: trusted-server-fastly.wasm online verified SBOM predicate equals published SPDX
$ gh attestation verify ts-aarch64-apple-darwin --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.20 --source-digest 5163241b947b1aa335987bd832b9205e4364e4bb --signer-digest 5163241b947b1aa335987bd832b9205e4364e4bb --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.20 --source-digest 5163241b947b1aa335987bd832b9205e4364e4bb --signer-digest 5163241b947b1aa335987bd832b9205e4364e4bb --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.20 --format json > ../ts-aarch64-apple-darwin.offline-provenance.json
$ jq -e --arg repo https://github.com/prk-Jr/trusted-server --arg ref refs/tags/v0.0.0-rehearsal.20 --arg source 5163241b947b1aa335987bd832b9205e4364e4bb length\ \>\ 0\ and\ all\(.\[\]\;\ .verificationResult.signature.certificate.sourceRepositoryURI==\$repo\ and\ .verificationResult.signature.certificate.sourceRepositoryRef==\$ref\ and\ .verificationResult.signature.certificate.sourceRepositoryDigest==\$source\ and\ .verificationResult.signature.certificate.buildSignerDigest==\$source\ and\ .verificationResult.signature.certificate.runnerEnvironment==\"github-hosted\"\) ../ts-aarch64-apple-darwin.offline-provenance.json
true
PASS: ts-aarch64-apple-darwin offline provenance; both workflow and exact tag certificate identities with all source/signer pins
$ gh attestation verify ts-aarch64-apple-darwin --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.20 --source-digest 5163241b947b1aa335987bd832b9205e4364e4bb --signer-digest 5163241b947b1aa335987bd832b9205e4364e4bb --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.20 --source-digest 5163241b947b1aa335987bd832b9205e4364e4bb --signer-digest 5163241b947b1aa335987bd832b9205e4364e4bb --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.20 --format json > ../ts-aarch64-apple-darwin.online-provenance.json
$ jq -e --arg repo https://github.com/prk-Jr/trusted-server --arg ref refs/tags/v0.0.0-rehearsal.20 --arg source 5163241b947b1aa335987bd832b9205e4364e4bb length\ \>\ 0\ and\ all\(.\[\]\;\ .verificationResult.signature.certificate.sourceRepositoryURI==\$repo\ and\ .verificationResult.signature.certificate.sourceRepositoryRef==\$ref\ and\ .verificationResult.signature.certificate.sourceRepositoryDigest==\$source\ and\ .verificationResult.signature.certificate.buildSignerDigest==\$source\ and\ .verificationResult.signature.certificate.runnerEnvironment==\"github-hosted\"\) ../ts-aarch64-apple-darwin.online-provenance.json
true
PASS: ts-aarch64-apple-darwin online provenance; both workflow and exact tag certificate identities with all source/signer pins
$ gh attestation verify ts-aarch64-apple-darwin --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.20 --source-digest 5163241b947b1aa335987bd832b9205e4364e4bb --signer-digest 5163241b947b1aa335987bd832b9205e4364e4bb --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.20 --source-digest 5163241b947b1aa335987bd832b9205e4364e4bb --signer-digest 5163241b947b1aa335987bd832b9205e4364e4bb --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.20 --format json > ../ts-aarch64-apple-darwin.offline-sbom.json
$ jq -e --arg repo https://github.com/prk-Jr/trusted-server --arg ref refs/tags/v0.0.0-rehearsal.20 --arg source 5163241b947b1aa335987bd832b9205e4364e4bb length\ \>\ 0\ and\ all\(.\[\]\;\ .verificationResult.signature.certificate.sourceRepositoryURI==\$repo\ and\ .verificationResult.signature.certificate.sourceRepositoryRef==\$ref\ and\ .verificationResult.signature.certificate.sourceRepositoryDigest==\$source\ and\ .verificationResult.signature.certificate.buildSignerDigest==\$source\ and\ .verificationResult.signature.certificate.runnerEnvironment==\"github-hosted\"\) ../ts-aarch64-apple-darwin.offline-sbom.json
true
PASS: ts-aarch64-apple-darwin offline sbom; both workflow and exact tag certificate identities with all source/signer 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.json
true
PASS: ts-aarch64-apple-darwin offline verified SBOM predicate equals published SPDX
$ gh attestation verify ts-aarch64-apple-darwin --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.20 --source-digest 5163241b947b1aa335987bd832b9205e4364e4bb --signer-digest 5163241b947b1aa335987bd832b9205e4364e4bb --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.20 --source-digest 5163241b947b1aa335987bd832b9205e4364e4bb --signer-digest 5163241b947b1aa335987bd832b9205e4364e4bb --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.20 --format json > ../ts-aarch64-apple-darwin.online-sbom.json
$ jq -e --arg repo https://github.com/prk-Jr/trusted-server --arg ref refs/tags/v0.0.0-rehearsal.20 --arg source 5163241b947b1aa335987bd832b9205e4364e4bb length\ \>\ 0\ and\ all\(.\[\]\;\ .verificationResult.signature.certificate.sourceRepositoryURI==\$repo\ and\ .verificationResult.signature.certificate.sourceRepositoryRef==\$ref\ and\ .verificationResult.signature.certificate.sourceRepositoryDigest==\$source\ and\ .verificationResult.signature.certificate.buildSignerDigest==\$source\ and\ .verificationResult.signature.certificate.runnerEnvironment==\"github-hosted\"\) ../ts-aarch64-apple-darwin.online-sbom.json
true
PASS: ts-aarch64-apple-darwin online sbom; both workflow and exact tag certificate identities with all source/signer pins
$ jq -e --slurpfile document ts-aarch64-apple-darwin.spdx.json any\(.\[\]\;\ .verificationResult.statement.predicate\ ==\ \$document\[0\]\) ../ts-aarch64-apple-darwin.online-sbom.json
true
PASS: ts-aarch64-apple-darwin online verified SBOM predicate equals published SPDX
$ gh attestation verify ts-x86_64-apple-darwin --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.20 --source-digest 5163241b947b1aa335987bd832b9205e4364e4bb --signer-digest 5163241b947b1aa335987bd832b9205e4364e4bb --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.20 --source-digest 5163241b947b1aa335987bd832b9205e4364e4bb --signer-digest 5163241b947b1aa335987bd832b9205e4364e4bb --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.20 --format json > ../ts-x86_64-apple-darwin.offline-provenance.json
$ jq -e --arg repo https://github.com/prk-Jr/trusted-server --arg ref refs/tags/v0.0.0-rehearsal.20 --arg source 5163241b947b1aa335987bd832b9205e4364e4bb length\ \>\ 0\ and\ all\(.\[\]\;\ .verificationResult.signature.certificate.sourceRepositoryURI==\$repo\ and\ .verificationResult.signature.certificate.sourceRepositoryRef==\$ref\ and\ .verificationResult.signature.certificate.sourceRepositoryDigest==\$source\ and\ .verificationResult.signature.certificate.buildSignerDigest==\$source\ and\ .verificationResult.signature.certificate.runnerEnvironment==\"github-hosted\"\) ../ts-x86_64-apple-darwin.offline-provenance.json
true
PASS: ts-x86_64-apple-darwin offline provenance; both workflow and exact tag certificate identities with all source/signer pins
$ gh attestation verify ts-x86_64-apple-darwin --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.20 --source-digest 5163241b947b1aa335987bd832b9205e4364e4bb --signer-digest 5163241b947b1aa335987bd832b9205e4364e4bb --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.20 --source-digest 5163241b947b1aa335987bd832b9205e4364e4bb --signer-digest 5163241b947b1aa335987bd832b9205e4364e4bb --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.20 --format json > ../ts-x86_64-apple-darwin.online-provenance.json
$ jq -e --arg repo https://github.com/prk-Jr/trusted-server --arg ref refs/tags/v0.0.0-rehearsal.20 --arg source 5163241b947b1aa335987bd832b9205e4364e4bb length\ \>\ 0\ and\ all\(.\[\]\;\ .verificationResult.signature.certificate.sourceRepositoryURI==\$repo\ and\ .verificationResult.signature.certificate.sourceRepositoryRef==\$ref\ and\ .verificationResult.signature.certificate.sourceRepositoryDigest==\$source\ and\ .verificationResult.signature.certificate.buildSignerDigest==\$source\ and\ .verificationResult.signature.certificate.runnerEnvironment==\"github-hosted\"\) ../ts-x86_64-apple-darwin.online-provenance.json
true
PASS: ts-x86_64-apple-darwin online provenance; both workflow and exact tag certificate identities with all source/signer pins
$ gh attestation verify ts-x86_64-apple-darwin --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.20 --source-digest 5163241b947b1aa335987bd832b9205e4364e4bb --signer-digest 5163241b947b1aa335987bd832b9205e4364e4bb --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.20 --source-digest 5163241b947b1aa335987bd832b9205e4364e4bb --signer-digest 5163241b947b1aa335987bd832b9205e4364e4bb --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.20 --format json > ../ts-x86_64-apple-darwin.offline-sbom.json

@prk-Jr

prk-Jr commented Oct 29, 2026

Copy link
Copy Markdown
Collaborator Author

Phase 2 exact-head rehearsal .20 — transcript 2/3

Source 5163241b947b1aa335987bd832b9205e4364e4bb; successful first-attempt fork run 40812416995. Tag v0.0.0-rehearsal.20, seven binaries / 30 immutable prerelease assets.

Continued actual verification transcript; full source/tag pins are unchanged.

$ jq -e --arg repo https://github.com/prk-Jr/trusted-server --arg ref refs/tags/v0.0.0-rehearsal.20 --arg source 5163241b947b1aa335987bd832b9205e4364e4bb length\ \>\ 0\ and\ all\(.\[\]\;\ .verificationResult.signature.certificate.sourceRepositoryURI==\$repo\ and\ .verificationResult.signature.certificate.sourceRepositoryRef==\$ref\ and\ .verificationResult.signature.certificate.sourceRepositoryDigest==\$source\ and\ .verificationResult.signature.certificate.buildSignerDigest==\$source\ and\ .verificationResult.signature.certificate.runnerEnvironment==\"github-hosted\"\) ../ts-x86_64-apple-darwin.offline-sbom.json
true
PASS: ts-x86_64-apple-darwin offline sbom; both workflow and exact tag certificate identities with all source/signer 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.json
true
PASS: ts-x86_64-apple-darwin offline verified SBOM predicate equals published SPDX
$ gh attestation verify ts-x86_64-apple-darwin --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.20 --source-digest 5163241b947b1aa335987bd832b9205e4364e4bb --signer-digest 5163241b947b1aa335987bd832b9205e4364e4bb --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.20 --source-digest 5163241b947b1aa335987bd832b9205e4364e4bb --signer-digest 5163241b947b1aa335987bd832b9205e4364e4bb --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.20 --format json > ../ts-x86_64-apple-darwin.online-sbom.json
$ jq -e --arg repo https://github.com/prk-Jr/trusted-server --arg ref refs/tags/v0.0.0-rehearsal.20 --arg source 5163241b947b1aa335987bd832b9205e4364e4bb length\ \>\ 0\ and\ all\(.\[\]\;\ .verificationResult.signature.certificate.sourceRepositoryURI==\$repo\ and\ .verificationResult.signature.certificate.sourceRepositoryRef==\$ref\ and\ .verificationResult.signature.certificate.sourceRepositoryDigest==\$source\ and\ .verificationResult.signature.certificate.buildSignerDigest==\$source\ and\ .verificationResult.signature.certificate.runnerEnvironment==\"github-hosted\"\) ../ts-x86_64-apple-darwin.online-sbom.json
true
PASS: ts-x86_64-apple-darwin online sbom; both workflow and exact tag certificate identities with all source/signer 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.json
true
PASS: ts-x86_64-apple-darwin online verified SBOM predicate equals published SPDX
$ gh attestation verify ts-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.20 --source-digest 5163241b947b1aa335987bd832b9205e4364e4bb --signer-digest 5163241b947b1aa335987bd832b9205e4364e4bb --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.20 --source-digest 5163241b947b1aa335987bd832b9205e4364e4bb --signer-digest 5163241b947b1aa335987bd832b9205e4364e4bb --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.20 --format json > ../ts-x86_64-unknown-linux-gnu.offline-provenance.json
$ jq -e --arg repo https://github.com/prk-Jr/trusted-server --arg ref refs/tags/v0.0.0-rehearsal.20 --arg source 5163241b947b1aa335987bd832b9205e4364e4bb length\ \>\ 0\ and\ all\(.\[\]\;\ .verificationResult.signature.certificate.sourceRepositoryURI==\$repo\ and\ .verificationResult.signature.certificate.sourceRepositoryRef==\$ref\ and\ .verificationResult.signature.certificate.sourceRepositoryDigest==\$source\ and\ .verificationResult.signature.certificate.buildSignerDigest==\$source\ and\ .verificationResult.signature.certificate.runnerEnvironment==\"github-hosted\"\) ../ts-x86_64-unknown-linux-gnu.offline-provenance.json
true
PASS: ts-x86_64-unknown-linux-gnu offline provenance; both workflow and exact tag certificate identities with all source/signer pins
$ gh attestation verify ts-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.20 --source-digest 5163241b947b1aa335987bd832b9205e4364e4bb --signer-digest 5163241b947b1aa335987bd832b9205e4364e4bb --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.20 --source-digest 5163241b947b1aa335987bd832b9205e4364e4bb --signer-digest 5163241b947b1aa335987bd832b9205e4364e4bb --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.20 --format json > ../ts-x86_64-unknown-linux-gnu.online-provenance.json
$ jq -e --arg repo https://github.com/prk-Jr/trusted-server --arg ref refs/tags/v0.0.0-rehearsal.20 --arg source 5163241b947b1aa335987bd832b9205e4364e4bb length\ \>\ 0\ and\ all\(.\[\]\;\ .verificationResult.signature.certificate.sourceRepositoryURI==\$repo\ and\ .verificationResult.signature.certificate.sourceRepositoryRef==\$ref\ and\ .verificationResult.signature.certificate.sourceRepositoryDigest==\$source\ and\ .verificationResult.signature.certificate.buildSignerDigest==\$source\ and\ .verificationResult.signature.certificate.runnerEnvironment==\"github-hosted\"\) ../ts-x86_64-unknown-linux-gnu.online-provenance.json
true
PASS: ts-x86_64-unknown-linux-gnu online provenance; both workflow and exact tag certificate identities with all source/signer pins
$ gh attestation verify ts-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.20 --source-digest 5163241b947b1aa335987bd832b9205e4364e4bb --signer-digest 5163241b947b1aa335987bd832b9205e4364e4bb --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.20 --source-digest 5163241b947b1aa335987bd832b9205e4364e4bb --signer-digest 5163241b947b1aa335987bd832b9205e4364e4bb --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.20 --format json > ../ts-x86_64-unknown-linux-gnu.offline-sbom.json
$ jq -e --arg repo https://github.com/prk-Jr/trusted-server --arg ref refs/tags/v0.0.0-rehearsal.20 --arg source 5163241b947b1aa335987bd832b9205e4364e4bb length\ \>\ 0\ and\ all\(.\[\]\;\ .verificationResult.signature.certificate.sourceRepositoryURI==\$repo\ and\ .verificationResult.signature.certificate.sourceRepositoryRef==\$ref\ and\ .verificationResult.signature.certificate.sourceRepositoryDigest==\$source\ and\ .verificationResult.signature.certificate.buildSignerDigest==\$source\ and\ .verificationResult.signature.certificate.runnerEnvironment==\"github-hosted\"\) ../ts-x86_64-unknown-linux-gnu.offline-sbom.json
true
PASS: ts-x86_64-unknown-linux-gnu offline sbom; both workflow and exact tag certificate identities with all source/signer 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.json
true
PASS: ts-x86_64-unknown-linux-gnu offline verified SBOM predicate equals published SPDX
$ gh attestation verify ts-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.20 --source-digest 5163241b947b1aa335987bd832b9205e4364e4bb --signer-digest 5163241b947b1aa335987bd832b9205e4364e4bb --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.20 --source-digest 5163241b947b1aa335987bd832b9205e4364e4bb --signer-digest 5163241b947b1aa335987bd832b9205e4364e4bb --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.20 --format json > ../ts-x86_64-unknown-linux-gnu.online-sbom.json
$ jq -e --arg repo https://github.com/prk-Jr/trusted-server --arg ref refs/tags/v0.0.0-rehearsal.20 --arg source 5163241b947b1aa335987bd832b9205e4364e4bb length\ \>\ 0\ and\ all\(.\[\]\;\ .verificationResult.signature.certificate.sourceRepositoryURI==\$repo\ and\ .verificationResult.signature.certificate.sourceRepositoryRef==\$ref\ and\ .verificationResult.signature.certificate.sourceRepositoryDigest==\$source\ and\ .verificationResult.signature.certificate.buildSignerDigest==\$source\ and\ .verificationResult.signature.certificate.runnerEnvironment==\"github-hosted\"\) ../ts-x86_64-unknown-linux-gnu.online-sbom.json
true
PASS: ts-x86_64-unknown-linux-gnu online sbom; both workflow and exact tag certificate identities with all source/signer 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.json
true
PASS: ts-x86_64-unknown-linux-gnu online verified SBOM predicate equals published 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.20 --source-digest 5163241b947b1aa335987bd832b9205e4364e4bb --signer-digest 5163241b947b1aa335987bd832b9205e4364e4bb --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.20 --source-digest 5163241b947b1aa335987bd832b9205e4364e4bb --signer-digest 5163241b947b1aa335987bd832b9205e4364e4bb --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.20 --format json > ../trusted-server-axum-x86_64-unknown-linux-gnu.offline-provenance.json
$ jq -e --arg repo https://github.com/prk-Jr/trusted-server --arg ref refs/tags/v0.0.0-rehearsal.20 --arg source 5163241b947b1aa335987bd832b9205e4364e4bb length\ \>\ 0\ and\ all\(.\[\]\;\ .verificationResult.signature.certificate.sourceRepositoryURI==\$repo\ and\ .verificationResult.signature.certificate.sourceRepositoryRef==\$ref\ and\ .verificationResult.signature.certificate.sourceRepositoryDigest==\$source\ and\ .verificationResult.signature.certificate.buildSignerDigest==\$source\ and\ .verificationResult.signature.certificate.runnerEnvironment==\"github-hosted\"\) ../trusted-server-axum-x86_64-unknown-linux-gnu.offline-provenance.json
true
PASS: trusted-server-axum-x86_64-unknown-linux-gnu offline provenance; both workflow and exact tag certificate identities with all source/signer 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.20 --source-digest 5163241b947b1aa335987bd832b9205e4364e4bb --signer-digest 5163241b947b1aa335987bd832b9205e4364e4bb --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.20 --source-digest 5163241b947b1aa335987bd832b9205e4364e4bb --signer-digest 5163241b947b1aa335987bd832b9205e4364e4bb --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.20 --format json > ../trusted-server-axum-x86_64-unknown-linux-gnu.online-provenance.json
$ jq -e --arg repo https://github.com/prk-Jr/trusted-server --arg ref refs/tags/v0.0.0-rehearsal.20 --arg source 5163241b947b1aa335987bd832b9205e4364e4bb length\ \>\ 0\ and\ all\(.\[\]\;\ .verificationResult.signature.certificate.sourceRepositoryURI==\$repo\ and\ .verificationResult.signature.certificate.sourceRepositoryRef==\$ref\ and\ .verificationResult.signature.certificate.sourceRepositoryDigest==\$source\ and\ .verificationResult.signature.certificate.buildSignerDigest==\$source\ and\ .verificationResult.signature.certificate.runnerEnvironment==\"github-hosted\"\) ../trusted-server-axum-x86_64-unknown-linux-gnu.online-provenance.json
true
PASS: trusted-server-axum-x86_64-unknown-linux-gnu online provenance; both workflow and exact tag certificate identities with all source/signer 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.20 --source-digest 5163241b947b1aa335987bd832b9205e4364e4bb --signer-digest 5163241b947b1aa335987bd832b9205e4364e4bb --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.20 --source-digest 5163241b947b1aa335987bd832b9205e4364e4bb --signer-digest 5163241b947b1aa335987bd832b9205e4364e4bb --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.20 --format json > ../trusted-server-axum-x86_64-unknown-linux-gnu.offline-sbom.json
$ jq -e --arg repo https://github.com/prk-Jr/trusted-server --arg ref refs/tags/v0.0.0-rehearsal.20 --arg source 5163241b947b1aa335987bd832b9205e4364e4bb length\ \>\ 0\ and\ all\(.\[\]\;\ .verificationResult.signature.certificate.sourceRepositoryURI==\$repo\ and\ .verificationResult.signature.certificate.sourceRepositoryRef==\$ref\ and\ .verificationResult.signature.certificate.sourceRepositoryDigest==\$source\ and\ .verificationResult.signature.certificate.buildSignerDigest==\$source\ and\ .verificationResult.signature.certificate.runnerEnvironment==\"github-hosted\"\) ../trusted-server-axum-x86_64-unknown-linux-gnu.offline-sbom.json
true
PASS: trusted-server-axum-x86_64-unknown-linux-gnu offline sbom; both workflow and exact tag certificate identities with all source/signer 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.json
true
PASS: trusted-server-axum-x86_64-unknown-linux-gnu offline verified SBOM predicate equals published 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.20 --source-digest 5163241b947b1aa335987bd832b9205e4364e4bb --signer-digest 5163241b947b1aa335987bd832b9205e4364e4bb --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.20 --source-digest 5163241b947b1aa335987bd832b9205e4364e4bb --signer-digest 5163241b947b1aa335987bd832b9205e4364e4bb --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.20 --format json > ../trusted-server-axum-x86_64-unknown-linux-gnu.online-sbom.json
$ jq -e --arg repo https://github.com/prk-Jr/trusted-server --arg ref refs/tags/v0.0.0-rehearsal.20 --arg source 5163241b947b1aa335987bd832b9205e4364e4bb length\ \>\ 0\ and\ all\(.\[\]\;\ .verificationResult.signature.certificate.sourceRepositoryURI==\$repo\ and\ .verificationResult.signature.certificate.sourceRepositoryRef==\$ref\ and\ .verificationResult.signature.certificate.sourceRepositoryDigest==\$source\ and\ .verificationResult.signature.certificate.buildSignerDigest==\$source\ and\ .verificationResult.signature.certificate.runnerEnvironment==\"github-hosted\"\) ../trusted-server-axum-x86_64-unknown-linux-gnu.online-sbom.json
true
PASS: trusted-server-axum-x86_64-unknown-linux-gnu online sbom; both workflow and exact tag certificate identities with all source/signer 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.json
true
PASS: trusted-server-axum-x86_64-unknown-linux-gnu online verified SBOM predicate equals published 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.20 --source-digest 5163241b947b1aa335987bd832b9205e4364e4bb --signer-digest 5163241b947b1aa335987bd832b9205e4364e4bb --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.20 --source-digest 5163241b947b1aa335987bd832b9205e4364e4bb --signer-digest 5163241b947b1aa335987bd832b9205e4364e4bb --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.20 --format json > ../trusted-server-axum-x86_64-unknown-linux-musl.offline-provenance.json
$ jq -e --arg repo https://github.com/prk-Jr/trusted-server --arg ref refs/tags/v0.0.0-rehearsal.20 --arg source 5163241b947b1aa335987bd832b9205e4364e4bb length\ \>\ 0\ and\ all\(.\[\]\;\ .verificationResult.signature.certificate.sourceRepositoryURI==\$repo\ and\ .verificationResult.signature.certificate.sourceRepositoryRef==\$ref\ and\ .verificationResult.signature.certificate.sourceRepositoryDigest==\$source\ and\ .verificationResult.signature.certificate.buildSignerDigest==\$source\ and\ .verificationResult.signature.certificate.runnerEnvironment==\"github-hosted\"\) ../trusted-server-axum-x86_64-unknown-linux-musl.offline-provenance.json
true
PASS: trusted-server-axum-x86_64-unknown-linux-musl offline provenance; both workflow and exact tag certificate identities with all source/signer 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.20 --source-digest 5163241b947b1aa335987bd832b9205e4364e4bb --signer-digest 5163241b947b1aa335987bd832b9205e4364e4bb --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.20 --source-digest 5163241b947b1aa335987bd832b9205e4364e4bb --signer-digest 5163241b947b1aa335987bd832b9205e4364e4bb --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.20 --format json > ../trusted-server-axum-x86_64-unknown-linux-musl.online-provenance.json
$ jq -e --arg repo https://github.com/prk-Jr/trusted-server --arg ref refs/tags/v0.0.0-rehearsal.20 --arg source 5163241b947b1aa335987bd832b9205e4364e4bb length\ \>\ 0\ and\ all\(.\[\]\;\ .verificationResult.signature.certificate.sourceRepositoryURI==\$repo\ and\ .verificationResult.signature.certificate.sourceRepositoryRef==\$ref\ and\ .verificationResult.signature.certificate.sourceRepositoryDigest==\$source\ and\ .verificationResult.signature.certificate.buildSignerDigest==\$source\ and\ .verificationResult.signature.certificate.runnerEnvironment==\"github-hosted\"\) ../trusted-server-axum-x86_64-unknown-linux-musl.online-provenance.json
true
PASS: trusted-server-axum-x86_64-unknown-linux-musl online provenance; both workflow and exact tag certificate identities with all source/signer 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.20 --source-digest 5163241b947b1aa335987bd832b9205e4364e4bb --signer-digest 5163241b947b1aa335987bd832b9205e4364e4bb --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.20 --source-digest 5163241b947b1aa335987bd832b9205e4364e4bb --signer-digest 5163241b947b1aa335987bd832b9205e4364e4bb --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.20 --format json > ../trusted-server-axum-x86_64-unknown-linux-musl.offline-sbom.json
$ jq -e --arg repo https://github.com/prk-Jr/trusted-server --arg ref refs/tags/v0.0.0-rehearsal.20 --arg source 5163241b947b1aa335987bd832b9205e4364e4bb length\ \>\ 0\ and\ all\(.\[\]\;\ .verificationResult.signature.certificate.sourceRepositoryURI==\$repo\ and\ .verificationResult.signature.certificate.sourceRepositoryRef==\$ref\ and\ .verificationResult.signature.certificate.sourceRepositoryDigest==\$source\ and\ .verificationResult.signature.certificate.buildSignerDigest==\$source\ and\ .verificationResult.signature.certificate.runnerEnvironment==\"github-hosted\"\) ../trusted-server-axum-x86_64-unknown-linux-musl.offline-sbom.json
true
PASS: trusted-server-axum-x86_64-unknown-linux-musl offline sbom; both workflow and exact tag certificate identities with all source/signer 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.json
true
PASS: trusted-server-axum-x86_64-unknown-linux-musl offline verified SBOM predicate equals published 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.20 --source-digest 5163241b947b1aa335987bd832b9205e4364e4bb --signer-digest 5163241b947b1aa335987bd832b9205e4364e4bb --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.20 --source-digest 5163241b947b1aa335987bd832b9205e4364e4bb --signer-digest 5163241b947b1aa335987bd832b9205e4364e4bb --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.20 --format json > ../trusted-server-axum-x86_64-unknown-linux-musl.online-sbom.json
$ jq -e --arg repo https://github.com/prk-Jr/trusted-server --arg ref refs/tags/v0.0.0-rehearsal.20 --arg source 5163241b947b1aa335987bd832b9205e4364e4bb length\ \>\ 0\ and\ all\(.\[\]\;\ .verificationResult.signature.certificate.sourceRepositoryURI==\$repo\ and\ .verificationResult.signature.certificate.sourceRepositoryRef==\$ref\ and\ .verificationResult.signature.certificate.sourceRepositoryDigest==\$source\ and\ .verificationResult.signature.certificate.buildSignerDigest==\$source\ and\ .verificationResult.signature.certificate.runnerEnvironment==\"github-hosted\"\) ../trusted-server-axum-x86_64-unknown-linux-musl.online-sbom.json
true
PASS: trusted-server-axum-x86_64-unknown-linux-musl online sbom; both workflow and exact tag certificate identities with all source/signer 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.json
true
PASS: trusted-server-axum-x86_64-unknown-linux-musl online verified SBOM predicate equals published SPDX
$ gh attestation verify trusted-server-axum-aarch64-unknown-linux-gnu --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.20 --source-digest 5163241b947b1aa335987bd832b9205e4364e4bb --signer-digest 5163241b947b1aa335987bd832b9205e4364e4bb --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.20 --source-digest 5163241b947b1aa335987bd832b9205e4364e4bb --signer-digest 5163241b947b1aa335987bd832b9205e4364e4bb --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.20 --format json > ../trusted-server-axum-aarch64-unknown-linux-gnu.offline-provenance.json
$ jq -e --arg repo https://github.com/prk-Jr/trusted-server --arg ref refs/tags/v0.0.0-rehearsal.20 --arg source 5163241b947b1aa335987bd832b9205e4364e4bb length\ \>\ 0\ and\ all\(.\[\]\;\ .verificationResult.signature.certificate.sourceRepositoryURI==\$repo\ and\ .verificationResult.signature.certificate.sourceRepositoryRef==\$ref\ and\ .verificationResult.signature.certificate.sourceRepositoryDigest==\$source\ and\ .verificationResult.signature.certificate.buildSignerDigest==\$source\ and\ .verificationResult.signature.certificate.runnerEnvironment==\"github-hosted\"\) ../trusted-server-axum-aarch64-unknown-linux-gnu.offline-provenance.json
true
PASS: trusted-server-axum-aarch64-unknown-linux-gnu offline provenance; both workflow and exact tag certificate identities with all source/signer pins
$ gh attestation verify trusted-server-axum-aarch64-unknown-linux-gnu --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.20 --source-digest 5163241b947b1aa335987bd832b9205e4364e4bb --signer-digest 5163241b947b1aa335987bd832b9205e4364e4bb --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.20 --source-digest 5163241b947b1aa335987bd832b9205e4364e4bb --signer-digest 5163241b947b1aa335987bd832b9205e4364e4bb --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.20 --format json > ../trusted-server-axum-aarch64-unknown-linux-gnu.online-provenance.json
$ jq -e --arg repo https://github.com/prk-Jr/trusted-server --arg ref refs/tags/v0.0.0-rehearsal.20 --arg source 5163241b947b1aa335987bd832b9205e4364e4bb length\ \>\ 0\ and\ all\(.\[\]\;\ .verificationResult.signature.certificate.sourceRepositoryURI==\$repo\ and\ .verificationResult.signature.certificate.sourceRepositoryRef==\$ref\ and\ .verificationResult.signature.certificate.sourceRepositoryDigest==\$source\ and\ .verificationResult.signature.certificate.buildSignerDigest==\$source\ and\ .verificationResult.signature.certificate.runnerEnvironment==\"github-hosted\"\) ../trusted-server-axum-aarch64-unknown-linux-gnu.online-provenance.json
true
PASS: trusted-server-axum-aarch64-unknown-linux-gnu online provenance; both workflow and exact tag certificate identities with all source/signer pins
$ gh attestation verify trusted-server-axum-aarch64-unknown-linux-gnu --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.20 --source-digest 5163241b947b1aa335987bd832b9205e4364e4bb --signer-digest 5163241b947b1aa335987bd832b9205e4364e4bb --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.20 --source-digest 5163241b947b1aa335987bd832b9205e4364e4bb --signer-digest 5163241b947b1aa335987bd832b9205e4364e4bb --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.20 --format json > ../trusted-server-axum-aarch64-unknown-linux-gnu.offline-sbom.json
$ jq -e --arg repo https://github.com/prk-Jr/trusted-server --arg ref refs/tags/v0.0.0-rehearsal.20 --arg source 5163241b947b1aa335987bd832b9205e4364e4bb length\ \>\ 0\ and\ all\(.\[\]\;\ .verificationResult.signature.certificate.sourceRepositoryURI==\$repo\ and\ .verificationResult.signature.certificate.sourceRepositoryRef==\$ref\ and\ .verificationResult.signature.certificate.sourceRepositoryDigest==\$source\ and\ .verificationResult.signature.certificate.buildSignerDigest==\$source\ and\ .verificationResult.signature.certificate.runnerEnvironment==\"github-hosted\"\) ../trusted-server-axum-aarch64-unknown-linux-gnu.offline-sbom.json
true
PASS: trusted-server-axum-aarch64-unknown-linux-gnu offline sbom; both workflow and exact tag certificate identities with all source/signer 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.json
true
PASS: trusted-server-axum-aarch64-unknown-linux-gnu offline verified SBOM predicate equals published SPDX
$ gh attestation verify trusted-server-axum-aarch64-unknown-linux-gnu --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.20 --source-digest 5163241b947b1aa335987bd832b9205e4364e4bb --signer-digest 5163241b947b1aa335987bd832b9205e4364e4bb --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.20 --source-digest 5163241b947b1aa335987bd832b9205e4364e4bb --signer-digest 5163241b947b1aa335987bd832b9205e4364e4bb --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.20 --format json > ../trusted-server-axum-aarch64-unknown-linux-gnu.online-sbom.json
$ jq -e --arg repo https://github.com/prk-Jr/trusted-server --arg ref refs/tags/v0.0.0-rehearsal.20 --arg source 5163241b947b1aa335987bd832b9205e4364e4bb length\ \>\ 0\ and\ all\(.\[\]\;\ .verificationResult.signature.certificate.sourceRepositoryURI==\$repo\ and\ .verificationResult.signature.certificate.sourceRepositoryRef==\$ref\ and\ .verificationResult.signature.certificate.sourceRepositoryDigest==\$source\ and\ .verificationResult.signature.certificate.buildSignerDigest==\$source\ and\ .verificationResult.signature.certificate.runnerEnvironment==\"github-hosted\"\) ../trusted-server-axum-aarch64-unknown-linux-gnu.online-sbom.json
true
PASS: trusted-server-axum-aarch64-unknown-linux-gnu online sbom; both workflow and exact tag certificate identities with all source/signer 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.json
true
PASS: trusted-server-axum-aarch64-unknown-linux-gnu online verified SBOM predicate equals published SPDX
$ gh attestation verify trusted-server-fastly.wasm.rebuild-check.json --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.20 --source-digest 5163241b947b1aa335987bd832b9205e4364e4bb --signer-digest 5163241b947b1aa335987bd832b9205e4364e4bb --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.rebuild-check.json --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.20 --source-digest 5163241b947b1aa335987bd832b9205e4364e4bb --signer-digest 5163241b947b1aa335987bd832b9205e4364e4bb --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.20 --format json > ../companion.offline-provenance.json
$ jq -e --arg repo https://github.com/prk-Jr/trusted-server --arg ref refs/tags/v0.0.0-rehearsal.20 --arg source 5163241b947b1aa335987bd832b9205e4364e4bb length\ \>\ 0\ and\ all\(.\[\]\;\ .verificationResult.signature.certificate.sourceRepositoryURI==\$repo\ and\ .verificationResult.signature.certificate.sourceRepositoryRef==\$ref\ and\ .verificationResult.signature.certificate.sourceRepositoryDigest==\$source\ and\ .verificationResult.signature.certificate.buildSignerDigest==\$source\ and\ .verificationResult.signature.certificate.runnerEnvironment==\"github-hosted\"\) ../companion.offline-provenance.json
true
PASS: rebuild-check offline provenance; existing binary commands passed unchanged
$ gh attestation verify trusted-server-fastly.wasm.rebuild-check.json --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.20 --source-digest 5163241b947b1aa335987bd832b9205e4364e4bb --signer-digest 5163241b947b1aa335987bd832b9205e4364e4bb --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.rebuild-check.json --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.20 --source-digest 5163241b947b1aa335987bd832b9205e4364e4bb --signer-digest 5163241b947b1aa335987bd832b9205e4364e4bb --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.20 --format json > ../companion.online-provenance.json
$ jq -e --arg repo https://github.com/prk-Jr/trusted-server --arg ref refs/tags/v0.0.0-rehearsal.20 --arg source 5163241b947b1aa335987bd832b9205e4364e4bb length\ \>\ 0\ and\ all\(.\[\]\;\ .verificationResult.signature.certificate.sourceRepositoryURI==\$repo\ and\ .verificationResult.signature.certificate.sourceRepositoryRef==\$ref\ and\ .verificationResult.signature.certificate.sourceRepositoryDigest==\$source\ and\ .verificationResult.signature.certificate.buildSignerDigest==\$source\ and\ .verificationResult.signature.certificate.runnerEnvironment==\"github-hosted\"\) ../companion.online-provenance.json
true
PASS: rebuild-check online provenance; existing binary commands passed unchanged
Prepared one-byte-changed valid SPDX copy; published document unchanged
false
PASS: one-byte-changed SPDX rejected by already-verified online results
false
PASS: empty online results rejected
$ node ../verify-companion-joins.mjs
PASS: canonical artifact API-bound id=12871435870 size=18710584 sha256:1be5782fd708c6c590633e99d2f5de91726d8d3b6e324bf3818095e44fd840b0
PASS: canonical observation_artifact API-bound id=12870553555 size=997 sha256:33b4e5d212e93f790986f137ce8b3cf8874f57b25dd3c6a95d2dabac35c5b131
PASS: canonical job=123245651510 start=2026-10-29T03:30:14Z end=2026-10-29T03:36:16Z observed={"checkout_root":"/home/runner/work/trusted-server/trusted-server/ordinary-canonical-source","jobs":4,"locale":"C","started_at_seconds":1793244725,"target_root":"/home/runner/work/_temp/ordinary-fastly-canonical-target","timezone":"UTC","uid":1001,"umask":18}
PASS: reproduction artifact API-bound id=12871496824 size=18710582 sha256:8ed0286edf8c942b0cfd68ff5bfe8e7b5aee7d875147b526d62d25d0a0276dc6
PASS: reproduction observation_artifact API-bound id=12871417057 size=996 sha256:a4b5c3658e0b758d44409c19a81d4226545b68da12a280a392d96ab828e183ed
PASS: reproduction job=123247706874 start=2026-10-29T03:36:19Z end=2026-10-29T03:41:01Z observed={"checkout_root":"/home/runner/work/trusted-server/trusted-server/ordinary-reproduction-source","jobs":2,"locale":"C","started_at_seconds":1793245059,"target_root":"/home/runner/work/_temp/ordinary-fastly-reproduction-target","timezone":"UTC","uid":1001,"umask":23}
PASS: Build trusted-server-fastly.wasm elapsed 362s
PASS: Reproduce trusted-server-fastly.wasm elapsed 282s
PASS: Compare ordinary Fastly release bytes elapsed 122s
PASS: companion joins, source-owned recipe and lock hashes, actual binary/SPDX digests, deliberate ordinary environment variation; qualification remains false
$ node ../verify-hosted-evidence.mjs
build / Build ts-aarch64-apple-darwin: SUCCESS: final-byte checks aarch64-apple-darwin 
build / Build ts-aarch64-apple-darwin: SUCCESS: ts package=0.1.0 source=5163241b947b1aa335987bd832b9205e4364e4bb target=aarch64-apple-darwin variant=default
build / Build ts-aarch64-apple-darwin: SUCCESS: Mach-O target and macOS minimum OS 13.0: aarch64-apple-darwin
build / Build ts-x86_64-apple-darwin: SUCCESS: final-byte checks x86_64-apple-darwin 
build / Build ts-x86_64-apple-darwin: SUCCESS: ts package=0.1.0 source=5163241b947b1aa335987bd832b9205e4364e4bb target=x86_64-apple-darwin variant=default
build / Build ts-x86_64-apple-darwin: SUCCESS: Mach-O target and macOS minimum OS 13.0: x86_64-apple-darwin
build / Build ts-x86_64-unknown-linux-gnu: 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: SUCCESS: ts package=0.1.0 source=5163241b947b1aa335987bd832b9205e4364e4bb target=x86_64-unknown-linux-gnu variant=default
build / Build trusted-server-axum-x86_64-unknown-linux-gnu: 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

@prk-Jr

prk-Jr commented Oct 29, 2026

Copy link
Copy Markdown
Collaborator Author

Phase 2 exact-head rehearsal .20 — transcript 3/3

Source 5163241b947b1aa335987bd832b9205e4364e4bb; successful first-attempt fork run 40812416995. Tag v0.0.0-rehearsal.20, seven binaries / 30 immutable prerelease assets.

Continued actual verification transcript; full source/tag pins are unchanged.

build / Build trusted-server-axum-x86_64-unknown-linux-gnu: 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: SUCCESS: Axum rejects PORT=0; exit 1, ports must be 1–65535: sha256:8da84df25d28176be84164040cd45e128c6b4c6a80b7d7cbe17fe2b9f198efc2
build / Build trusted-server-axum-x86_64-unknown-linux-gnu: 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-aarch64-unknown-linux-gnu: 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: 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: SUCCESS: Axum rejects PORT=0; exit 1, ports must be 1–65535: sha256:28fe65558df3e10c89e7d685cb86544cdc138f242d12100c5b0981f92aae0853
build / Build trusted-server-axum-aarch64-unknown-linux-gnu: 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-axum-x86_64-unknown-linux-musl: SUCCESS: final-byte checks x86_64-unknown-linux-musl 
build / Build trusted-server-axum-x86_64-unknown-linux-musl: 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: SUCCESS: Axum rejects PORT=0; exit 1, ports must be 1–65535: sha256:706db57fb2063f39f69632c5b5c9c439633fda35110e65587c5d85553fd1cc38
build / Build trusted-server-axum-x86_64-unknown-linux-musl: 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-fastly.wasm: SUCCESS: final-byte checks wasm32-wasip1 
build / Build trusted-server-fastly.wasm: fastly_v16.0.0_linux-amd64.tar.gz: OK
build / Build trusted-server-fastly.wasm: Fastly CLI version v16.0.0 (34cef1b0)
build / Build trusted-server-fastly.wasm: + timeout 60 fastly compute pack --wasm-binary ./trusted-server-fastly.wasm
build / Build trusted-server-fastly.wasm: + timeout 30 fastly compute validate --package ./pkg/example-app.tar.gz
PASS: four exact Fastly package raw members, directories and files, no links/prefixes/hidden padding
build / Build trusted-server-fastly.wasm: + cmp trusted-server-fastly.wasm packaged.wasm
build / Build trusted-server-fastly.wasm: + cmp fastly.toml packaged.toml
build / Build trusted-server-fastly.wasm: SUCCESS: pinned Fastly route packed, validated, inspected and byte-compared without credentials or network
release: Verified post-publish re-download: all 30 assets byte-identical to signed checksums and handoff
PASS: seven binary smoke/format checks; both macOS minimum OS13.0; CLI source facts; Axum non-loopback and invalid ports; pinned Fastly16 offline route; thirty-file published readback
$ 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.rebuild-check.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
PASS: published assets, immutable membership, all online/offline signer/source predicates, SPDX equalities and negative controls, companion joins verified; exact-release runtime remains a separate required check

Exact published-byte runtime supplement:
Exact published Fastly runtime verification
$ ts-aarch64-apple-darwin config init --app-config $WORKSPACE/trusted-server.toml
Initialized config at $WORKSPACE/trusted-server.toml
$ ts-aarch64-apple-darwin config push --adapter fastly --local --manifest $WORKSPACE/edgezero.toml --app-config $WORKSPACE/trusted-server.toml --yes --no-diff --no-env
wrote 1 physical entries (1 logical) to `[local_server.config_stores.trusted_server_config.contents]` in $WORKSPACE/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
$ viceroy --version
viceroy 0.21.0
$ viceroy --config $WORKSPACE/fastly.toml --addr 127.0.0.1:56888 --log-stdout --log-stderr $ASSETS/trusted-server-fastly.wasm
PASS publisher 1: HTTP200, origin marker, injected TSJS, source 5163241b947b1aa335987bd832b9205e4364e4bb
PASS publisher 2: HTTP200, origin marker, injected TSJS, source 5163241b947b1aa335987bd832b9205e4364e4bb
PASS publisher 3: HTTP200, origin marker, injected TSJS, source 5163241b947b1aa335987bd832b9205e4364e4bb
PASS injected JS: HTTP200, 34617 bytes, source 5163241b947b1aa335987bd832b9205e4364e4bb
PASS actual request/origin-response log lines: 6/6; Build facts lines: 0
PASS wrong-source negative control and copied-log detector sensitivity control
PASS owned listeners stopped; connection-refused checks

Raw runtime log excerpt (three requests and three successful responses; each was also echoed to stdout):

tslog :: 2026-10-29T04:05:14.483Z DEBUG [publisher] Proxying request to publisher_origin
tslog :: 2026-10-29T04:05:14.492Z DEBUG [publisher] Publisher origin response received: status=200 OK, header_count=6
tslog :: 2026-10-29T04:05:14.495Z DEBUG [publisher] Proxying request to publisher_origin
tslog :: 2026-10-29T04:05:14.495Z DEBUG [publisher] Publisher origin response received: status=200 OK, header_count=6
tslog :: 2026-10-29T04:05:14.497Z DEBUG [publisher] Proxying request to publisher_origin
tslog :: 2026-10-29T04:05:14.497Z DEBUG [publisher] Publisher origin response received: status=200 OK, header_count=6

Runtime check: PASS at the exact published digest above; all owned listeners stopped. The release verifier’s earlier “runtime remains separate” line precedes the subsequently successful runtime supplement.

@aram356 aram356 linked an issue Oct 29, 2026 that may be closed by this pull request
8 tasks

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.

Publish attested release binaries with build provenance and SBOMs

2 participants