Skip to content

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

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

prk-Jr wants to merge 55 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

5163241 size versus Phase 1 4940928e8: 266 new files (one binary fixture), 87,680 new text lines; 42 existing files +4,755/−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

Fresh rehearsal .19 in progress: fork run 40726649596, exact reviewed source 5163241b947b1aa335987bd832b9205e4364e4bb, fresh lightweight tag. No source or settings changes; readiness remains pending successful seven-binary publication, full attestation/membership checks and exact published-byte runtime verification.

Current head 5163241b947b1aa335987bd832b9205e4364e4bb is docs-only since implementation 36454c526. All three follow-up commits are signed and GitHub-Verified. Current-head hosted CI passed: 29 successful checks and four expected skips; documentation lint, Prettier/site build, domain lint and whitespace checks passed locally. The five records now preserve historical source attribution and leave successful fresh rehearsal explicitly pending.

Implementation 36454c526: 29 hosted checks passed; four expected skips. Local locked host all-target check/strict all-feature clippy passed. The signal-zero regression first failed on the old signal 9; all five pure tests then passed. Independent source/permissions review found no blocking findings. Actual PGID recycling was not reproduced; the regression proves confirmation cannot request a destructive signal. Real process tests ran only in hosted CI.

Validation at implementation 36454c526 Evidence
All seven release builds; Fastly reproduction, full-byte comparison and pinned packaging route Binary attestations passed
Linux producer 952 unit tests / 9 existing ignores; 3 boundary, 18 command and 38 JS fixtures; macOS process selection 45 passed / 0 ignored Tests passed
Target-matched clippy, Rust/JS/docs/domain checks, helper tests, actionlint/shellcheck Format passed
Browser, ordinary and Fastly lifecycle integration Integration passed

Current docs-head checks: Binary, Tests, Format, Integration (all four workflows passed at 5163241b947b1aa335987bd832b9205e4364e4bb).

Required published-byte runtime proof: .16 supplement, exclusively source 5fa3843364f247fdc261c438ab9257323637a42c. Authenticated unchanged Wasm ran under pinned Viceroy 0.21.0: three publisher responses and the injected JS route returned 200 with the full source header; actual request/response logs were visible with zero build-facts lines. Wrong-source/log-sensitivity controls passed; owned listeners stopped. Local Viceroy scope only, no deployment/browser claim. This closes the original evidence gap; it does not rehearse the later code correction.

Prior fresh-attempt capacity failures: .17 and .18, both source 36454c526, lost their queued ARM64 macOS jobs before acquiring any runner. Annotations cite hosted capacity constraints; Fastly reproduction/comparison passed. Final .17 record: 9 successful jobs, one cancellation, signing/release skipped, no draft/published release. Final .18 record: identical 9-success / 1-runner-cancellation / 2-skip result; no release or draft. Tags are preserved; no runner/cohort/setting change or verification waiver.

Historical publication proof: .16 at 5fa384336 passed 18 jobs, 30 immutable prerelease assets, 29 checksums, all online/offline binary predicates/identities, SPDX equality, companion joins/provenance and native/packaging checks. Transcripts 1, 2, 3. An initial download timeout was recovered read-only. Reproduction 269s; comparison 86s. .13 stays at 770a425df; rerun-all recovery and online-SBOM negative control remain historical 3ccfe2971 evidence.

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-head 5163241b9 hosted CI passed (29 success, four expected skips).
  • Successful current-source release rehearsal after ARM64 capacity recovers; 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

Rehearsal .10 verification transcript — part 1/3

Implementation 3ccfe29715a073bd37010ea86037b9c8f89801c7; green first attempt. Seven binaries, 30 release files. The initial read-only download hit HTTP/2 PROTOCOL_ERROR; a single HTTP/1.1 retry recovered the one incomplete asset. No source or release mutation was needed. Rerun-all recovery is a separate pending experiment.

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


Initial documented download (transport failure retained):
$ gh --version
gh version 2.102.0 (2026-09-30)
https://github.com/cli/cli/releases/tag/v2.102.0
Reviewed source: 3ccfe29715a073bd37010ea86037b9c8f89801c7
Tag: v0.0.0-rehearsal.10
Run: https://github.com/prk-Jr/trusted-server/actions/runs/40478046127
$ gh release download v0.0.0-rehearsal.10 --repo prk-Jr/trusted-server --dir .
stream error: stream ID 3; PROTOCOL_ERROR; received from peer


Single read-only transport retry:
$ GODEBUG=http2client=0 gh release download v0.0.0-rehearsal.10 --repo prk-Jr/trusted-server --dir . --pattern trusted-server-axum-aarch64-unknown-linux-gnu --clobber
PASS: single bounded read-only retry completed the incomplete asset


Complete verification:
$ export GODEBUG=http2client=0
$ gh --version
gh version 2.102.0 (2026-09-30)
https://github.com/cli/cli/releases/tag/v2.102.0
Reviewed source: 3ccfe29715a073bd37010ea86037b9c8f89801c7
Tag: v0.0.0-rehearsal.10
Run: https://github.com/prk-Jr/trusted-server/actions/runs/40478046127
Release acquired by the retained gh release download transcript and one read-only transport retry; validate all bytes below.
$ gh api repos/prk-Jr/trusted-server/releases/tags/v0.0.0-rehearsal.10 > release-metadata.json
$ jq -e --arg tag v0.0.0-rehearsal.10 .immutable\ ==\ true\ and\ .prerelease\ ==\ true\ and\ .draft\ ==\ false\ and\ .tag_name\ ==\ \$tag\ and\ \(.assets\|length\)\ ==\ 30 release-metadata.json
true
$ verify exact public membership and API SHA-256 digests
PASS: exactly 30 uploaded public files; every API size/digest matches; SHA256SUMS covers exactly the other 29 files
$ gh api repos/prk-Jr/trusted-server/releases/latest > latest-release.json
$ jq -e --arg tag v0.0.0-rehearsal.10 .tag_name\ \!=\ \$tag latest-release.json
true
PASS: rehearsal prerelease is not Latest
$ gh release verify v0.0.0-rehearsal.10 --repo prk-Jr/trusted-server
Resolved tag v0.0.0-rehearsal.10 to sha1:3ccfe29715a073bd37010ea86037b9c8f89801c7
Loaded attestation from GitHub API
✓ Release v0.0.0-rehearsal.10 verified!

Assets
SHA256SUMS	sha256:a1a68db7f54f747f64e6ece34e9b04ee97a5c68f24d585b8d2f3dc92414fc768
trusted-server-axum-aarch64-unknown-linux-gnu	sha256:7ea300bcea191b26fc63be5e12ddb0cc8aa2353946db98d422ff60d2c4d60563
trusted-server-axum-aarch64-unknown-linux-gnu.provenance.sigstore.json	sha256:c20f2d982bde21ecc400cae4162a72d2b4bf4caaa03fcf9fddb9542ebd5b21b5
trusted-server-axum-aarch64-unknown-linux-gnu.sbom.sigstore.json	sha256:216551b43f9bea818dc6a6c3a044ce750e926bdb59371e08f2acc3fe38193a0c
trusted-server-axum-aarch64-unknown-linux-gnu.spdx.json	sha256:950fb3daa2a5bc7815293f353947af629dfa8fd54c8b9300603f369156332f45
trusted-server-axum-x86_64-unknown-linux-gnu	sha256:4812e7801e04d6b90b011c5a0fba9470ea313dae027307fdedc5681bea354052
trusted-server-axum-x86_64-unknown-linux-gnu.provenance.sigstore.json	sha256:c16fc4061b4a63ce04ab41181b77ac38386428494f72e95ab8ae5378453eef7d
trusted-server-axum-x86_64-unknown-linux-gnu.sbom.sigstore.json	sha256:95c17330316719a123bd6de72db1c93b63cbab5ffc287f7d5e2e4db7efbd3e93
trusted-server-axum-x86_64-unknown-linux-gnu.spdx.json	sha256:259e85056b93232429d014be41f21190aad206fe6036cfdb2e94c3787ae945f3
trusted-server-axum-x86_64-unknown-linux-musl	sha256:6e0f02b213817b2fb9282bc0d5f1f905b3b56e8065ed8a73142a375eccf57c8e
trusted-server-axum-x86_64-unknown-linux-musl.provenance.sigstore.json	sha256:523fee950e823f66c44ccc666dec162a7d01ab23b6352b32444db1c6c337891b
trusted-server-axum-x86_64-unknown-linux-musl.sbom.sigstore.json	sha256:b64c84e1feab8e9f62f8227fae7c1f7d9eaf4cc2c04615a784c5b3611baeb7ec
trusted-server-axum-x86_64-unknown-linux-musl.spdx.json	sha256:a7fb2d05489827794caf25aa6df456c2be1817d53918dc1b0aef0e8120fbe105
trusted-server-fastly.wasm	sha256:38c0851917d4d4db1bde87da7d1dc43455896f3e9c0ce753a6baf12e6e658622
trusted-server-fastly.wasm.provenance.sigstore.json	sha256:a0c95e1fb829c37d7fa83eae5490b98b1906af2ef4dfad809498c29585f75943
trusted-server-fastly.wasm.rebuild-check.json	sha256:7876c99d15e2de87a5abb005f733d414033e9819171a08e8497162aa7e4f5ae3
trusted-server-fastly.wasm.sbom.sigstore.json	sha256:0da460f209cf5822b79e660ee6d899af18bf4c1c1babfcb821a54a83d1485dd5
trusted-server-fastly.wasm.spdx.json	sha256:6518b2cb15663a4eeead4146f722a73f7a0e554d90d6e3ddd3c2589632f35d41
ts-aarch64-apple-darwin	sha256:b80051c0008c8a7603929977b35769d0ae6606b9ad5e7780d82c5736b1ec85a4
ts-aarch64-apple-darwin.provenance.sigstore.json	sha256:e4e639e2211d2a532f36e88f870d001df44d4979679cfbc15b88eb569611dae8
ts-aarch64-apple-darwin.sbom.sigstore.json	sha256:e636728332085a50d1760739fa152517f39e080436418c5c622458dad7a527c5
ts-aarch64-apple-darwin.spdx.json	sha256:d9eaab710e8b975e9c56db2b4ff2e8ce23638b0c0a0df3cb4054bfee799d05d5
ts-x86_64-apple-darwin	sha256:0dc65beed86e25291f912622e824b5582bde209c5f9ddc4504464baadccac352
ts-x86_64-apple-darwin.provenance.sigstore.json	sha256:c617e6a9db2cdea0b152c7b68d970aa1ffe1aef8276a26345d07ef005e3708dd
ts-x86_64-apple-darwin.sbom.sigstore.json	sha256:467f1a987c9be0ed1cc8294b4320ada5928f9efafc460244cf8c45baf17106e7
ts-x86_64-apple-darwin.spdx.json	sha256:e81a746433f73bdd9fc44040bc89f3bf077df7c9cc2e5d60d1e96362632ffeb5
ts-x86_64-unknown-linux-gnu	sha256:e6c9e84710a5f73b05b18963aac8379d0f25f880c53b6a2dce6bae98e08f4011
ts-x86_64-unknown-linux-gnu.provenance.sigstore.json	sha256:0348cad0f4509c7e0db9765c43178a20cc345de529fc3555355d64b4b1c49604
ts-x86_64-unknown-linux-gnu.sbom.sigstore.json	sha256:c54e76e72af9cde4cc0de0e839f28ebfe06d4b7647e4fcbde75528ceac13ef3b
ts-x86_64-unknown-linux-gnu.spdx.json	sha256:e10d420fb5004ddf6c8ce02949b03a04e30c03b9c270d38838cc53d51e9466f2

$ gh release verify-asset v0.0.0-rehearsal.10 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:4812e7801e04d6b90b011c5a0fba9470ea313dae027307fdedc5681bea354052
Resolved tag v0.0.0-rehearsal.10 to sha1:3ccfe29715a073bd37010ea86037b9c8f89801c7
Loaded attestation from GitHub API

✓ Verification succeeded! trusted-server-axum-x86_64-unknown-linux-gnu is present in release v0.0.0-rehearsal.10
$ gh release verify-asset v0.0.0-rehearsal.10 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:259e85056b93232429d014be41f21190aad206fe6036cfdb2e94c3787ae945f3
Resolved tag v0.0.0-rehearsal.10 to sha1:3ccfe29715a073bd37010ea86037b9c8f89801c7
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.10
$ gh release verify-asset v0.0.0-rehearsal.10 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:c16fc4061b4a63ce04ab41181b77ac38386428494f72e95ab8ae5378453eef7d
Resolved tag v0.0.0-rehearsal.10 to sha1:3ccfe29715a073bd37010ea86037b9c8f89801c7
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.10
$ gh release verify-asset v0.0.0-rehearsal.10 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:95c17330316719a123bd6de72db1c93b63cbab5ffc287f7d5e2e4db7efbd3e93
Resolved tag v0.0.0-rehearsal.10 to sha1:3ccfe29715a073bd37010ea86037b9c8f89801c7
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.10
$ gh release verify-asset v0.0.0-rehearsal.10 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:6e0f02b213817b2fb9282bc0d5f1f905b3b56e8065ed8a73142a375eccf57c8e
Resolved tag v0.0.0-rehearsal.10 to sha1:3ccfe29715a073bd37010ea86037b9c8f89801c7
Loaded attestation from GitHub API

✓ Verification succeeded! trusted-server-axum-x86_64-unknown-linux-musl is present in release v0.0.0-rehearsal.10
$ gh release verify-asset v0.0.0-rehearsal.10 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:a7fb2d05489827794caf25aa6df456c2be1817d53918dc1b0aef0e8120fbe105
Resolved tag v0.0.0-rehearsal.10 to sha1:3ccfe29715a073bd37010ea86037b9c8f89801c7
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.10
$ gh release verify-asset v0.0.0-rehearsal.10 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:523fee950e823f66c44ccc666dec162a7d01ab23b6352b32444db1c6c337891b
Resolved tag v0.0.0-rehearsal.10 to sha1:3ccfe29715a073bd37010ea86037b9c8f89801c7
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.10
$ gh release verify-asset v0.0.0-rehearsal.10 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:b64c84e1feab8e9f62f8227fae7c1f7d9eaf4cc2c04615a784c5b3611baeb7ec
Resolved tag v0.0.0-rehearsal.10 to sha1:3ccfe29715a073bd37010ea86037b9c8f89801c7
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.10
$ gh release verify-asset v0.0.0-rehearsal.10 trusted-server-axum-aarch64-unknown-linux-gnu --repo prk-Jr/trusted-server
Calculated digest for trusted-server-axum-aarch64-unknown-linux-gnu: sha256:7ea300bcea191b26fc63be5e12ddb0cc8aa2353946db98d422ff60d2c4d60563
Resolved tag v0.0.0-rehearsal.10 to sha1:3ccfe29715a073bd37010ea86037b9c8f89801c7
Loaded attestation from GitHub API

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

✓ Verification succeeded! trusted-server-axum-aarch64-unknown-linux-gnu.spdx.json is present in release v0.0.0-rehearsal.10
$ gh release verify-asset v0.0.0-rehearsal.10 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:c20f2d982bde21ecc400cae4162a72d2b4bf4caaa03fcf9fddb9542ebd5b21b5
Resolved tag v0.0.0-rehearsal.10 to sha1:3ccfe29715a073bd37010ea86037b9c8f89801c7
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.10
$ gh release verify-asset v0.0.0-rehearsal.10 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:216551b43f9bea818dc6a6c3a044ce750e926bdb59371e08f2acc3fe38193a0c
Resolved tag v0.0.0-rehearsal.10 to sha1:3ccfe29715a073bd37010ea86037b9c8f89801c7
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.10
$ gh release verify-asset v0.0.0-rehearsal.10 trusted-server-fastly.wasm --repo prk-Jr/trusted-server
Calculated digest for trusted-server-fastly.wasm: sha256:38c0851917d4d4db1bde87da7d1dc43455896f3e9c0ce753a6baf12e6e658622
Resolved tag v0.0.0-rehearsal.10 to sha1:3ccfe29715a073bd37010ea86037b9c8f89801c7
Loaded attestation from GitHub API

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

✓ Verification succeeded! ts-x86_64-unknown-linux-gnu.sbom.sigstore.json is present in release v0.0.0-rehearsal.10
$ gh release verify-asset v0.0.0-rehearsal.10 trusted-server-fastly.wasm.rebuild-check.json --repo prk-Jr/trusted-server
Calculated digest for trusted-server-fastly.wasm.rebuild-check.json: sha256:7876c99d15e2de87a5abb005f733d414033e9819171a08e8497162aa7e4f5ae3
Resolved tag v0.0.0-rehearsal.10 to sha1:3ccfe29715a073bd37010ea86037b9c8f89801c7
Loaded attestation from GitHub API

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

✓ Verification succeeded! SHA256SUMS is present in release v0.0.0-rehearsal.10
$ 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
$ derive independent binary/companion pins from the authenticated release metadata after release/asset verification
$ shasum -a 256 --check APPROVED_BINARY_AND_CHECK_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
trusted-server-fastly.wasm.rebuild-check.json: OK
ts-aarch64-apple-darwin: OK
ts-x86_64-apple-darwin: OK
ts-x86_64-unknown-linux-gnu: OK
$ shasum -a 256 trusted_root.jsonl
65ca537f6ed8a47fd0e560c421baa1f6c1efb8b25fc200d8c5c02c0e92eb2b9c  trusted_root.jsonl
$ gh attestation verify trusted-server-axum-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.10 --source-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --signer-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --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.10 --source-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --signer-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --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.10 --format json > trusted-server-axum-x86_64-unknown-linux-gnu.offline-provenance.verified.json
$ jq -e length\ ==\ 1\ and\ all\(.\[\]\;\ .verificationResult.statement.predicateType\ \!=\ null\) 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/40478046127/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-workflow certificate 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.10 --source-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --signer-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --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.10 --source-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --signer-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --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.10 --format json > trusted-server-axum-x86_64-unknown-linux-gnu.online-provenance.verified.json
$ jq -e length\ ==\ 1\ and\ all\(.\[\]\;\ .verificationResult.statement.predicateType\ \!=\ null\) 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/40478046127/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-workflow certificate 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.10 --source-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --signer-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --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.10 --source-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --signer-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --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.10 --format json > trusted-server-axum-x86_64-unknown-linux-gnu.offline-sbom.verified.json
$ jq -e length\ ==\ 1\ and\ all\(.\[\]\;\ .verificationResult.statement.predicateType\ \!=\ null\) 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-workflow certificate and source pins
$ jq -e --slurpfile document trusted-server-axum-x86_64-unknown-linux-gnu.spdx.json length\ ==\ 1\ and\ all\(.\[\]\;\ .verificationResult.statement.predicate\ ==\ \$document\[0\]\) trusted-server-axum-x86_64-unknown-linux-gnu.offline-sbom.verified.json
true
PASS: verified offline SPDX predicate equals the published SPDX document (trusted-server-axum-x86_64-unknown-linux-gnu)
$ gh attestation verify trusted-server-axum-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.10 --source-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --signer-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --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.10 --source-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --signer-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --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.10 --format json > trusted-server-axum-x86_64-unknown-linux-gnu.online-sbom.verified.json
$ jq -e length\ ==\ 1\ and\ all\(.\[\]\;\ .verificationResult.statement.predicateType\ \!=\ null\) 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-workflow certificate and source pins
$ jq -e --slurpfile document trusted-server-axum-x86_64-unknown-linux-gnu.spdx.json length\ ==\ 1\ and\ all\(.\[\]\;\ .verificationResult.statement.predicate\ ==\ \$document\[0\]\) trusted-server-axum-x86_64-unknown-linux-gnu.online-sbom.verified.json
true
PASS: verified online SPDX predicate equals the published SPDX document (trusted-server-axum-x86_64-unknown-linux-gnu)
$ gh attestation verify trusted-server-axum-x86_64-unknown-linux-musl --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.10 --source-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --signer-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --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.10 --source-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --signer-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --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.10 --format json > trusted-server-axum-x86_64-unknown-linux-musl.offline-provenance.verified.json
$ jq -e length\ ==\ 1\ and\ all\(.\[\]\;\ .verificationResult.statement.predicateType\ \!=\ null\) 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/40478046127/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-workflow certificate 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.10 --source-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --signer-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --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.10 --source-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --signer-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --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.10 --format json > trusted-server-axum-x86_64-unknown-linux-musl.online-provenance.verified.json
$ jq -e length\ ==\ 1\ and\ all\(.\[\]\;\ .verificationResult.statement.predicateType\ \!=\ null\) 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/40478046127/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-workflow certificate 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.10 --source-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --signer-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --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.10 --source-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --signer-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --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.10 --format json > trusted-server-axum-x86_64-unknown-linux-musl.offline-sbom.verified.json
$ jq -e length\ ==\ 1\ and\ all\(.\[\]\;\ .verificationResult.statement.predicateType\ \!=\ null\) 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-workflow certificate and source pins
$ jq -e --slurpfile document trusted-server-axum-x86_64-unknown-linux-musl.spdx.json length\ ==\ 1\ and\ all\(.\[\]\;\ .verificationResult.statement.predicate\ ==\ \$document\[0\]\) trusted-server-axum-x86_64-unknown-linux-musl.offline-sbom.verified.json
true
PASS: verified offline SPDX predicate equals the published SPDX document (trusted-server-axum-x86_64-unknown-linux-musl)
$ gh attestation verify trusted-server-axum-x86_64-unknown-linux-musl --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.10 --source-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --signer-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --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.10 --source-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --signer-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --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.10 --format json > trusted-server-axum-x86_64-unknown-linux-musl.online-sbom.verified.json
$ jq -e length\ ==\ 1\ and\ all\(.\[\]\;\ .verificationResult.statement.predicateType\ \!=\ null\) 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-workflow certificate and source pins
$ jq -e --slurpfile document trusted-server-axum-x86_64-unknown-linux-musl.spdx.json length\ ==\ 1\ and\ all\(.\[\]\;\ .verificationResult.statement.predicate\ ==\ \$document\[0\]\) trusted-server-axum-x86_64-unknown-linux-musl.online-sbom.verified.json
true
PASS: verified online SPDX predicate equals the published SPDX document (trusted-server-axum-x86_64-unknown-linux-musl)
$ gh attestation verify trusted-server-axum-aarch64-unknown-linux-gnu --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.10 --source-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --signer-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --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.10 --source-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --signer-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --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.10 --format json > trusted-server-axum-aarch64-unknown-linux-gnu.offline-provenance.verified.json
$ jq -e length\ ==\ 1\ and\ all\(.\[\]\;\ .verificationResult.statement.predicateType\ \!=\ null\) 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/40478046127/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-workflow certificate 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.10 --source-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --signer-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --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.10 --source-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --signer-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --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.10 --format json > trusted-server-axum-aarch64-unknown-linux-gnu.online-provenance.verified.json
$ jq -e length\ ==\ 1\ and\ all\(.\[\]\;\ .verificationResult.statement.predicateType\ \!=\ null\) 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/40478046127/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-workflow certificate 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.10 --source-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --signer-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --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.10 --source-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --signer-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --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.10 --format json > trusted-server-axum-aarch64-unknown-linux-gnu.offline-sbom.verified.json
$ jq -e length\ ==\ 1\ and\ all\(.\[\]\;\ .verificationResult.statement.predicateType\ \!=\ null\) trusted-server-axum-aarch64-unknown-linux-gnu.offline-sbom.verified.json
true
PASS: trusted-server-axum-aarch64-unknown-linux-gnu offline 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.offline-sbom.verified.json
true
PASS: verified offline SPDX predicate equals the published SPDX document (trusted-server-axum-aarch64-unknown-linux-gnu)

@prk-Jr

prk-Jr commented Oct 27, 2026 •

Copy link
Copy Markdown
Collaborator Author

Rehearsal .10 verification transcript — part 2/3

Implementation 3ccfe29715a073bd37010ea86037b9c8f89801c7; green first attempt. Seven binaries, 30 release files. The initial read-only download hit HTTP/2 PROTOCOL_ERROR; a single HTTP/1.1 retry recovered the one incomplete asset. No source or release mutation was needed. Rerun-all recovery is a separate pending experiment.

$ gh attestation verify trusted-server-axum-aarch64-unknown-linux-gnu --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.10 --source-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --signer-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --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.10 --source-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --signer-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --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.10 --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.10 --source-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --signer-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --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.10 --source-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --signer-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --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.10 --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/40478046127/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.10 --source-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --signer-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --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.10 --source-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --signer-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --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.10 --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/40478046127/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.10 --source-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --signer-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --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.10 --source-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --signer-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --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.10 --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.10 --source-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --signer-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --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.10 --source-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --signer-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --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.10 --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.10 --source-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --signer-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --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.10 --source-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --signer-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --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.10 --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/40478046127/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.10 --source-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --signer-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --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.10 --source-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --signer-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --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.10 --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/40478046127/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.10 --source-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --signer-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --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.10 --source-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --signer-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --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.10 --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.10 --source-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --signer-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --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.10 --source-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --signer-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --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.10 --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.10 --source-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --signer-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --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.10 --source-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --signer-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --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.10 --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/40478046127/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.10 --source-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --signer-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --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.10 --source-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --signer-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --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.10 --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/40478046127/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.10 --source-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --signer-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --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.10 --source-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --signer-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --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.10 --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.10 --source-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --signer-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --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.10 --source-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --signer-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --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.10 --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.10 --source-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --signer-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --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.10 --source-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --signer-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --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.10 --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/40478046127/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.10 --source-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --signer-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --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.10 --source-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --signer-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --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.10 --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/40478046127/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.10 --source-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --signer-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --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.10 --source-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --signer-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --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.10 --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.10 --source-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --signer-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --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.10 --source-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --signer-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --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.10 --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.10 --source-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --signer-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --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.10 --source-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --signer-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --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.10 --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/40478046127/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.10 --source-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --signer-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --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.10 --source-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --signer-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --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.10 --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/40478046127/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 3ccfe29715a073bd37010ea86037b9c8f89801c7 --arg digest 38c0851917d4d4db1bde87da7d1dc43455896f3e9c0ce753a6baf12e6e658622 --argjson run 40478046127 .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":12721079161,"name":"release-trusted-server-fastly.wasm","sha256":"0e6257f057118e8c17a8f00012eef5c21d111cc416aa85e8cb6200b1eb7a0fcb","size":18654123},"environment":{"checkout_root":"/home/runner/work/trusted-server/trusted-server/ordinary-canonical-source","jobs":4,"locale":"C","started_at_seconds":1793091971,"target_root":"/home/runner/work/_temp/ordinary-fastly-canonical-target","timezone":"UTC","uid":1001,"umask":18},"job_id":122101130937,"observation_artifact":{"id":12720509412,"name":"fastly-observation-canonical","sha256":"f3c60f436c8b65edb4270f51942107ea30338e422280f23cb8d43f1e247c070c","size":994},"run_attempt":1,"run_id":40478046127,"sha256":"38c0851917d4d4db1bde87da7d1dc43455896f3e9c0ce753a6baf12e6e658622","size":80019146,"spdx_sha256":"6518b2cb15663a4eeead4146f722a73f7a0e554d90d6e3ddd3c2589632f35d41"},"canonical_sha256":"38c0851917d4d4db1bde87da7d1dc43455896f3e9c0ce753a6baf12e6e658622","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":"09b85401fbf0ea5ed6d85789789865acbbc006a6c8a932fce621404ee2cab564","release_qualification":false,"reproduction":{"artifact":{"id":12722310495,"name":"reproduction-trusted-server-fastly.wasm","sha256":"ba2b4a7be750ca4d505e7bd56c86baa4a9f0c7e6e342d18a3f9f5d610660037b","size":18654121},"environment":{"checkout_root":"/home/runner/work/trusted-server/trusted-server/ordinary-reproduction-source","jobs":2,"locale":"C","started_at_seconds":1793092217,"target_root":"/home/runner/work/_temp/ordinary-fastly-reproduction-target","timezone":"UTC","uid":1001,"umask":23},"job_id":122102842815,"observation_artifact":{"id":12720969759,"name":"fastly-observation-reproduction","sha256":"a1a09a19d67f86741aefa513caff6240b071113568c27a369cf7874f0c60eff9","size":994},"run_attempt":1,"run_id":40478046127,"sha256":"38c0851917d4d4db1bde87da7d1dc43455896f3e9c0ce753a6baf12e6e658622","size":80019146,"spdx_sha256":"833e752affb823851fbb27f1166d348820da0fd93c0f9858172f7e53716df74e"},"reproduction_sha256":"38c0851917d4d4db1bde87da7d1dc43455896f3e9c0ce753a6baf12e6e658622","source_commit":"3ccfe29715a073bd37010ea86037b9c8f89801c7","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/40478046127/artifacts > run-artifacts.json
$ gh api --paginate --slurp repos/prk-Jr/trusted-server/actions/runs/40478046127/attempts/1/jobs > run-jobs.json
$ verify nested companion binary/SPDX, distinct producing jobs and four API artifact joins
PASS canonical artifact id=12721079161 sha256=0e6257f057118e8c17a8f00012eef5c21d111cc416aa85e8cb6200b1eb7a0fcb
PASS canonical observation_artifact id=12720509412 sha256=f3c60f436c8b65edb4270f51942107ea30338e422280f23cb8d43f1e247c070c
PASS reproduction artifact id=12722310495 sha256=ba2b4a7be750ca4d505e7bd56c86baa4a9f0c7e6e342d18a3f9f5d610660037b
PASS reproduction observation_artifact id=12720969759 sha256=a1a09a19d67f86741aefa513caff6240b071113568c27a369cf7874f0c60eff9
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]=0b3626b04846e4293a52f600e8f7ab3bcbde1a7a, 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]=a70e14ae451f3b6dbea3a54dde9b26eeee87dda8, 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]=6f205f8bf0fb6a74e2b22fa5b66d4086c32796c0, for GNU/Linux 3.7.0, with debug_info, not stripped
$ ./ts-aarch64-apple-darwin --version
ts package=0.1.0 source=3ccfe29715a073bd37010ea86037b9c8f89801c7 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.10 at 3ccfe29715a073bd37010ea86037b9c8f89801c7


Same-tag CI route and native evidence:
Canonical Fastly job: https://github.com/prk-Jr/trusted-server/actions/runs/40478046127/job/122101130937
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:43.9291914Z release-assets/trusted-server-fastly.wasm: OK
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:43.9401404Z ##[group]Run set -euxo pipefail
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:43.9401641Z set -euxo pipefail
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:43.9401852Z fastly_version=$(awk '$1 == "fastly" { print $2 }' .tool-versions)
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:43.9402080Z test "$fastly_version" = 16.0.0
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:43.9402288Z route=$(mktemp -d "$RUNNER_TEMP/fastly-route.XXXXXX")
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:43.9402564Z mkdir "$route/tool" "$route/config" "$route/cache" "$route/tmp" "$route/package"
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:43.9402844Z archive="fastly_v${fastly_version}_linux-amd64.tar.gz"
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:43.9403136Z curl --fail --silent --show-error --location --proto '=https' --retry 2 --max-time 30 \
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:43.9403532Z   "https://github.com/fastly/cli/releases/download/v${fastly_version}/$archive" --output "$route/$archive"
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:43.9404014Z printf '%s  %s\n' b1b89112f1f1291ff275393779ffdacba8724ac64091bda0fa6000ae06308459 "$archive" > "$route/CLI.sha256"
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:43.9404344Z (cd "$route" && sha256sum --check CLI.sha256)
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:43.9404546Z tar -xzf "$route/$archive" -C "$route/tool"
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:43.9404837Z cp release-assets/trusted-server-fastly.wasm "$route/package/trusted-server-fastly.wasm"
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:43.9405190Z printf 'manifest_version = 3\nname = "example-app"\n' > "$route/package/fastly.toml"
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:43.9405534Z expected_wasm=$(sha256sum release-assets/trusted-server-fastly.wasm | awk '{print $1}')
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:43.9406010Z expected_manifest=$(sha256sum "$route/package/fastly.toml" | awk '{print $1}')
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:43.9406384Z 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-27T09:08:43.9406688Z node_program=$(command -v node)
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:43.9406874Z host_network=$(readlink /proc/self/ns/net)
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:43.9407115Z sudo unshare --net -- setpriv --reuid="$(id -u)" --regid="$(id -g)" \
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:43.9407434Z   --clear-groups --inh-caps=-all --ambient-caps=-all --bounding-set=-all --no-new-privs \
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:43.9407781Z   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-27T09:08:43.9408082Z   XDG_CACHE_HOME="$route/cache" TMPDIR="$route/tmp" LC_ALL=C TZ=UTC \
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:43.9408461Z   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-27T09:08:43.9408803Z guest_network=$(readlink /proc/self/ns/net)
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:43.9408986Z test -n "$guest_network"
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:43.9409147Z test "$guest_network" != "$5"
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:43.9409324Z active_interfaces=$(ip -o link show up)
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:43.9409666Z test -z "$active_interfaces"
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:43.9409822Z cd "$1"
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:43.9409977Z timeout 15 fastly version | tee cli-version.txt
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:43.9410203Z grep -E '^Fastly CLI version v16\.0\.0( |$)' cli-version.txt
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:43.9410481Z timeout 60 fastly compute pack --wasm-binary ./trusted-server-fastly.wasm
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:43.9410779Z timeout 30 fastly compute validate --package ./pkg/example-app.tar.gz
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:43.9411013Z tar -tzf ./pkg/example-app.tar.gz
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:43.9411212Z timeout 15 "$6" --input-type=commonjs <<'HEADERS'
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:43.9411443Z const fs = require('node:fs'), zlib = require('node:zlib');
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:43.9411699Z const file = './pkg/example-app.tar.gz', stat = fs.lstatSync(file);
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:43.9412015Z 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

Rehearsal .10 verification transcript — part 3/3

Implementation 3ccfe29715a073bd37010ea86037b9c8f89801c7; green first attempt. Seven binaries, 30 release files. The initial read-only download hit HTTP/2 PROTOCOL_ERROR; a single HTTP/1.1 retry recovered the one incomplete asset. No source or release mutation was needed. Rerun-all recovery is a separate pending experiment.

build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:43.9412505Z const bytes = zlib.gunzipSync(fs.readFileSync(file), {maxOutputLength:513 * 1024 * 1024 + 16384});
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:43.9412773Z let offset = 0;
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:43.9412969Z for (let count = 0; count < 8 && offset + 512 <= bytes.length; count++) {
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:43.9413221Z   const header = bytes.subarray(offset, offset + 512);
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:43.9413440Z   if (header.every(byte => byte === 0)) break;
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:43.9413709Z   const field = (start, end) => header.subarray(start, end).toString('utf8').split('\0')[0];
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:43.9414175Z   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-27T09:08:43.9414558Z   const rawSize = field(124, 136).trim();
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:43.9414812Z   if (!/^[0-7]+$/.test(rawSize)) throw Error('Unsupported diagnostic size encoding');
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:43.9415069Z   const size = parseInt(rawSize, 8);
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:43.9415361Z   if (!Number.isSafeInteger(size) || size > bytes.length) throw Error('Diagnostic member bound exceeded');
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:43.9416149Z   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-27T09:08:43.9416669Z   offset += 512 + Math.ceil(size / 512) * 512;
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:43.9416843Z }
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:43.9416963Z HEADERS
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:43.9417195Z timeout 30 "$2" inspect-fastly-package --package-dir ./pkg --manifest ./fastly.toml \
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:43.9417501Z   --expected-manifest-sha256 "$4" --expected-wasm-sha256 "$3"
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:43.9417795Z tar -xOzf ./pkg/example-app.tar.gz example-app/bin/main.wasm > packaged.wasm
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:43.9418072Z cmp trusted-server-fastly.wasm packaged.wasm
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:43.9418329Z tar -xOzf ./pkg/example-app.tar.gz example-app/fastly.toml > packaged.toml
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:43.9418568Z cmp fastly.toml packaged.toml
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:43.9418784Z printf '%s  %s\n' "$3" trusted-server-fastly.wasm > input.sha256
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:43.9419004Z sha256sum --check input.sha256
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:43.9429798Z 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-27T09:08:43.9430216Z ROUTE
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:43.9430484Z printf '%s  %s\n' "$expected_wasm" release-assets/trusted-server-fastly.wasm | sha256sum --check
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:43.9485506Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0}
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:43.9485824Z ##[endgroup]
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:43.9559546Z ++ awk '$1 == "fastly" { print $2 }' .tool-versions
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:43.9577178Z + fastly_version=16.0.0
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:43.9577417Z + test 16.0.0 = 16.0.0
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:43.9579516Z ++ mktemp -d /home/runner/work/_temp/fastly-route.XXXXXX
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:43.9589185Z + route=/home/runner/work/_temp/fastly-route.kdSW5r
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:43.9589932Z + mkdir /home/runner/work/_temp/fastly-route.kdSW5r/tool /home/runner/work/_temp/fastly-route.kdSW5r/config /home/runner/work/_temp/fastly-route.kdSW5r/cache /home/runner/work/_temp/fastly-route.kdSW5r/tmp /home/runner/work/_temp/fastly-route.kdSW5r/package
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:43.9601730Z + archive=fastly_v16.0.0_linux-amd64.tar.gz
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:43.9602791Z + 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.kdSW5r/fastly_v16.0.0_linux-amd64.tar.gz
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:44.4700190Z + printf '%s  %s\n' b1b89112f1f1291ff275393779ffdacba8724ac64091bda0fa6000ae06308459 fastly_v16.0.0_linux-amd64.tar.gz
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:44.4702746Z + cd /home/runner/work/_temp/fastly-route.kdSW5r
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:44.4703049Z + sha256sum --check CLI.sha256
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:44.4777405Z fastly_v16.0.0_linux-amd64.tar.gz: OK
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:44.4780061Z + tar -xzf /home/runner/work/_temp/fastly-route.kdSW5r/fastly_v16.0.0_linux-amd64.tar.gz -C /home/runner/work/_temp/fastly-route.kdSW5r/tool
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:44.6168970Z + cp release-assets/trusted-server-fastly.wasm /home/runner/work/_temp/fastly-route.kdSW5r/package/trusted-server-fastly.wasm
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:44.6375365Z + printf 'manifest_version = 3\nname = "example-app"\n'
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:44.6380503Z ++ sha256sum release-assets/trusted-server-fastly.wasm
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:44.6381113Z ++ awk '{print $1}'
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:44.6828711Z + expected_wasm=38c0851917d4d4db1bde87da7d1dc43455896f3e9c0ce753a6baf12e6e658622
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:44.6832305Z ++ sha256sum /home/runner/work/_temp/fastly-route.kdSW5r/package/fastly.toml
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:44.6832864Z ++ awk '{print $1}'
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:44.6851515Z + expected_manifest=21b3c0d6f0a329838b23ad87a1d42840cceaff25d0247c1ac9aa5b34784360b2
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:44.6852286Z + 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-27T09:08:44.6853512Z ++ command -v node
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:44.6855399Z + node_program=/opt/hostedtoolcache/node/24.20.0/x64/bin/node
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:44.6857393Z ++ readlink /proc/self/ns/net
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:44.6865814Z + host_network='net:[4026531833]'
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:44.6868542Z ++ id -u
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:44.6885210Z ++ id -g
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:44.6897696Z + 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.kdSW5r/tool:/usr/bin:/bin:/usr/sbin:/sbin XDG_CONFIG_HOME=/home/runner/work/_temp/fastly-route.kdSW5r/config XDG_CACHE_HOME=/home/runner/work/_temp/fastly-route.kdSW5r/cache TMPDIR=/home/runner/work/_temp/fastly-route.kdSW5r/tmp LC_ALL=C TZ=UTC bash -euxo pipefail -s -- /home/runner/work/_temp/fastly-route.kdSW5r/package /home/runner/work/_temp/ordinary-producer-target/x86_64-unknown-linux-gnu/release/trusted-server-release 38c0851917d4d4db1bde87da7d1dc43455896f3e9c0ce753a6baf12e6e658622 21b3c0d6f0a329838b23ad87a1d42840cceaff25d0247c1ac9aa5b34784360b2 'net:[4026531833]' /opt/hostedtoolcache/node/24.20.0/x64/bin/node
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:44.7144617Z ++ readlink /proc/self/ns/net
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:44.7149759Z + guest_network='net:[4026532311]'
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:44.7150055Z + test -n 'net:[4026532311]'
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:44.7150369Z + test 'net:[4026532311]' '!=' 'net:[4026531833]'
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:44.7152210Z ++ ip -o link show up
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:44.7162007Z + active_interfaces=
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:44.7162234Z + test -z ''
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:44.7162546Z + cd /home/runner/work/_temp/fastly-route.kdSW5r/package
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:44.7164521Z + timeout 15 fastly version
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:44.7165120Z + tee cli-version.txt
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:44.7418612Z Fastly CLI version v16.0.0 (34cef1b0)
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:44.7419083Z Built with go version go1.26.5 linux/amd64 (2026-10-27)
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:44.7440173Z + grep -E '^Fastly CLI version v16\.0\.0( |$)' cli-version.txt
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:44.7449767Z Fastly CLI version v16.0.0 (34cef1b0)
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:44.7451224Z + timeout 60 fastly compute pack --wasm-binary ./trusted-server-fastly.wasm
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:44.7703868Z | Copying wasm binary...
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:45.7973965Z / Copying wasm binary...
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:45.7974541Z ✓ Copying wasm binary
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:45.7974700Z | Copying manifest...
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:45.7974845Z / Copying manifest...
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:45.7978654Z - Copying manifest...
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:45.7978936Z ✓ Copying manifest
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:45.7979861Z | Creating example-app.tar.gz file...
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:45.7980219Z / Creating example-app.tar.gz file...
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:45.7980535Z - Creating example-app.tar.gz file...
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:45.7980984Z ✓ Creating example-app.tar.gz file
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:45.8045092Z + timeout 30 fastly compute validate --package ./pkg/example-app.tar.gz
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:46.0084139Z SUCCESS: Validated package /home/runner/work/_temp/fastly-route.kdSW5r/package/pkg/example-app.tar.gz
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:46.0098618Z + tar -tzf ./pkg/example-app.tar.gz
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:46.0119802Z example-app
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:46.0120032Z example-app/bin
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:46.0120271Z example-app/bin/main.wasm
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:46.3267701Z example-app/fastly.toml
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:46.3276265Z + timeout 15 /opt/hostedtoolcache/node/24.20.0/x64/bin/node --input-type=commonjs
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:46.4906183Z 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-27T09:08:46.4908532Z 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-27T09:08:46.4909344Z Fastly raw TAR header: {"path":"example-app/bin/main.wasm","type":"0","size":80019146,"prefix":"","link":"","nonzero_padding":false}
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:46.4910163Z 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-27T09:08:46.5007810Z + 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 38c0851917d4d4db1bde87da7d1dc43455896f3e9c0ce753a6baf12e6e658622
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:46.9023051Z {"accepted":true,"archive_sha256":"56f38078b5e5ac62232ca5ab565a606b1758ee982d4009f50c90d0cc136a3c1f","check":"manual-fastly-package","limits":{"deployment_authorized":false,"official_release_verified":false,"runtime_validated":false},"manifest_sha256":"21b3c0d6f0a329838b23ad87a1d42840cceaff25d0247c1ac9aa5b34784360b2","module_sha256":"38c0851917d4d4db1bde87da7d1dc43455896f3e9c0ce753a6baf12e6e658622","package_path":"/home/runner/work/_temp/fastly-route.kdSW5r/package/pkg/example-app.tar.gz"}
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:46.9026177Z + tar -xOzf ./pkg/example-app.tar.gz example-app/bin/main.wasm
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:47.2247299Z + cmp trusted-server-fastly.wasm packaged.wasm
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:47.2606445Z + tar -xOzf ./pkg/example-app.tar.gz example-app/fastly.toml
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:47.5737892Z + cmp fastly.toml packaged.toml
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:47.5747116Z + printf '%s  %s\n' 38c0851917d4d4db1bde87da7d1dc43455896f3e9c0ce753a6baf12e6e658622 trusted-server-fastly.wasm
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:47.5747757Z + sha256sum --check input.sha256
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:47.6177921Z trusted-server-fastly.wasm: OK
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:47.6181264Z + 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-27T09:08:47.6181747Z SUCCESS: pinned Fastly route packed, validated, inspected and byte-compared without credentials or network
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:47.6199552Z + printf '%s  %s\n' 38c0851917d4d4db1bde87da7d1dc43455896f3e9c0ce753a6baf12e6e658622 release-assets/trusted-server-fastly.wasm
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:47.6200310Z + sha256sum --check
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:47.6635752Z release-assets/trusted-server-fastly.wasm: OK
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:47.6772512Z ##[group]Run actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:47.6772762Z with:
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:47.6772905Z   name: release-trusted-server-fastly.wasm
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:47.6773122Z   path: ordinary-canonical-source/release-assets/*
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:47.6773309Z   if-no-files-found: error
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:47.6773449Z   retention-days: 7
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:47.6773580Z   compression-level: 6
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:47.6773711Z   overwrite: false
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:47.6773847Z   include-hidden-files: false
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:47.6773997Z ##[endgroup]
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:47.7876570Z With the provided path, there will be 2 files uploaded
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:47.7879064Z Artifact name is valid!
build / Build trusted-server-fastly.wasm	UNKNOWN STEP	2026-10-27T09:08:47.7879748Z Root directory input is valid!
PASS: CI-packed module SHA-256 equals independently verified release Wasm: 38c0851917d4d4db1bde87da7d1dc43455896f3e9c0ce753a6baf12e6e658622

Native evidence (macos-arm):
build / Build ts-aarch64-apple-darwin	UNKNOWN STEP	2026-10-27T09:14:14.6095100Z SUCCESS: Mach-O target and macOS minimum OS 13.0: aarch64-apple-darwin
build / Build ts-aarch64-apple-darwin	UNKNOWN STEP	2026-10-27T09:14:14.6098460Z SUCCESS: final-byte checks aarch64-apple-darwin 
build / Build ts-aarch64-apple-darwin	UNKNOWN STEP	2026-10-27T09:14:14.6235850Z SUCCESS: ts package=0.1.0 source=3ccfe29715a073bd37010ea86037b9c8f89801c7 target=aarch64-apple-darwin variant=default

Native evidence (macos-intel):
build / Build ts-x86_64-apple-darwin	UNKNOWN STEP	2026-10-27T09:23:04.2410490Z 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-27T09:23:04.2412450Z SUCCESS: final-byte checks x86_64-apple-darwin 
build / Build ts-x86_64-apple-darwin	UNKNOWN STEP	2026-10-27T09:23:04.2532230Z SUCCESS: ts package=0.1.0 source=3ccfe29715a073bd37010ea86037b9c8f89801c7 target=x86_64-apple-darwin variant=default

Native evidence (cli-linux):
build / Build ts-x86_64-unknown-linux-gnu	UNKNOWN STEP	2026-10-27T09:12:53.4206259Z 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-27T09:12:53.4242555Z SUCCESS: ts package=0.1.0 source=3ccfe29715a073bd37010ea86037b9c8f89801c7 target=x86_64-unknown-linux-gnu variant=default
build / Build ts-x86_64-unknown-linux-gnu	UNKNOWN STEP	2026-10-27T09:12:56.5325226Z SUCCESS: ts package=0.1.0 source=3ccfe29715a073bd37010ea86037b9c8f89801c7 target=x86_64-unknown-linux-gnu variant=default
build / Build ts-x86_64-unknown-linux-gnu	UNKNOWN STEP	2026-10-27T09:12:58.9274710Z SUCCESS: ts package=0.1.0 source=3ccfe29715a073bd37010ea86037b9c8f89801c7 target=x86_64-unknown-linux-gnu variant=default
build / Build ts-x86_64-unknown-linux-gnu	UNKNOWN STEP	2026-10-27T09:13:01.2210726Z SUCCESS: ts package=0.1.0 source=3ccfe29715a073bd37010ea86037b9c8f89801c7 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-27T09:09:39.5116918Z 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-27T09:09:42.7656419Z 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-27T09:09:42.9171590Z 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-27T09:09:43.1254830Z 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-27T09:09:45.5364025Z 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-27T09:09:45.6740318Z 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-27T09:09:45.8371757Z 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-27T09:09:48.8128688Z 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-27T09:09:48.9488749Z 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-27T09:09:49.1026498Z 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-27T09:08:31.4303474Z 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-27T09:08:33.7799346Z 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-27T09:08:33.8847213Z 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-27T09:08:34.0515150Z 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-27T09:07:53.6439973Z SUCCESS: final-byte checks x86_64-unknown-linux-musl 
build / Build trusted-server-axum-x86_64-unknown-linux-musl	UNKNOWN STEP	2026-10-27T09:07:57.1120844Z 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-27T09:07:57.2130342Z 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-27T09:07:57.3891946Z 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-27T09:07:57.6212717Z SUCCESS: Axum rejects EDGEZERO__ADAPTER__PORT=0; exit 1, ports must be 1–65535: sha256:5ed95e0153e1c38c977193656e8b3e6924e24fca03ecf577920535c2978471e0
build / Build trusted-server-axum-x86_64-unknown-linux-musl	UNKNOWN STEP	2026-10-27T09:07:57.7236745Z SUCCESS: Axum rejects PORT=0; exit 1, ports must be 1–65535: sha256:5ed95e0153e1c38c977193656e8b3e6924e24fca03ecf577920535c2978471e0
build / Build trusted-server-axum-x86_64-unknown-linux-musl	UNKNOWN STEP	2026-10-27T09:07:57.8401337Z SUCCESS: Axum bound to 0.0.0.0:8080; host reached published container port, HTTP 200 ok: scratch sha256:5ed95e0153e1c38c977193656e8b3e6924e24fca03ecf577920535c2978471e0

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

@prk-Jr

prk-Jr commented Oct 27, 2026 •

Copy link
Copy Markdown
Collaborator Author

Rehearsal .10 recovery experiment at 3ccfe29715a073bd37010ea86037b9c8f89801c7

First attempt and full release verification passed. Rerun-all attempt 2 passed all seven builds, the second Fastly build, real archive/current-attempt binding, byte comparison and signing. Publication then refused the existing immutable release before release mutations. This is a successful transfer/recovery check, not a second successful publication; the overall rerun ends red.

$ gh run rerun 40478046127 --repo prk-Jr/trusted-server
success build / checks
success build / Build trusted-server-fastly.wasm
success build / Build trusted-server-axum-x86_64-unknown-linux-musl
success build / Build ts-x86_64-apple-darwin
success build / Build ts-aarch64-apple-darwin
success build / Build trusted-server-axum-aarch64-unknown-linux-gnu
success build / Build trusted-server-axum-x86_64-unknown-linux-gnu
success build / Build ts-x86_64-unknown-linux-gnu
success build / Reproduce trusted-server-fastly.wasm
success build / Compare ordinary Fastly release bytes
success build / sign (trusted-server-axum-x86_64-unknown-linux-gnu)
success build / sign (ts-x86_64-unknown-linux-gnu)
success build / sign (ts-x86_64-apple-darwin)
success build / sign (trusted-server-axum-aarch64-unknown-linux-gnu)
success build / sign (trusted-server-fastly.wasm)
success build / sign (ts-aarch64-apple-darwin)
success build / sign (trusted-server-axum-x86_64-unknown-linux-musl)
failure release
release	Verify handoff, create once, publish by release ID and verify	2026-10-27T10:15:24.1014850Z Error: Release or draft already exists
release	Verify handoff, create once, publish by release ID and verify	2026-10-27T10:15:24.1534721Z ##[error]Process completed with exit code 1.
PASS: release ID, tag, immutable/prerelease state and all 30 asset IDs/sizes/digests are unchanged

Successful real comparison job. No ZIP rules, artifact names or duplicate checks were changed.

A separate post-rerun online-SPDX check exposed a documentation uniqueness assumption: two valid pinned attestations now exist for the same binary; one equals the authenticated published SPDX. Their only predicate differences are creation timestamp and document namespace. Published-bundle verification remains valid. A proposed docs-only online example would accept a verified predicate exactly equal to the shipped SPDX, preserving every identity/source constraint; the docs-only correction is approved and prepared for the final documentation commit. Positive and one-byte-negative proof passed. No workflow or script change is claimed. Stack frames are omitted below; the command, record counts and assertion failure are retained.

$ gh attestation verify trusted-server-fastly.wasm --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.10 --source-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --signer-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --deny-self-hosted-runners --predicate-type https://spdx.dev/Document/v2.3 --signer-workflow prk-Jr/trusted-server/.github/workflows/release-build.yml --format json > post-rerun-fastly-sbom.json
{ verifiedRecords: 2, matchingPublishedSpdx: 1 }
node:internal/modules/run_main:129
    triggerUncaughtException(
    ^

AssertionError [ERR_ASSERTION]: should retain the documented single attestation result
  generatedMessage: false,
  code: 'ERR_ASSERTION',
  actual: 2,
  expected: 1,
  operator: 'strictEqual'
}

Node.js v20.17.0

@prk-Jr

prk-Jr commented Oct 27, 2026

Copy link
Copy Markdown
Collaborator Author

Approved docs-only online-SBOM correction — live positive/negative proof

At .10, re-running signing left two valid attestations for the same source/tag/binary digest, in no guaranteed order. One predicate equals the authenticated immutable published SPDX. Keep every signer/source/tag/predicate pin and use jq -e --slurpfile document <asset>.spdx.json with any(...) only after gh succeeds. Empty/no-match results are false and exit non-zero. Published-bundle checks stay unchanged. The Phase 2 guide/compatibility correction is prepared for the final docs-only commit; no workflow or script change is claimed. Phase 1 is unchanged.

$ gh release verify-asset v0.0.0-rehearsal.10 trusted-server-fastly.wasm.spdx.json --repo prk-Jr/trusted-server
Calculated digest for trusted-server-fastly.wasm.spdx.json: sha256:6518b2cb15663a4eeead4146f722a73f7a0e554d90d6e3ddd3c2589632f35d41
Resolved tag v0.0.0-rehearsal.10 to sha1:3ccfe29715a073bd37010ea86037b9c8f89801c7
Loaded attestation from GitHub API

✓ Verification succeeded! trusted-server-fastly.wasm.spdx.json is present in release v0.0.0-rehearsal.10
$ gh attestation verify trusted-server-fastly.wasm --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.10 --source-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --signer-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --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.10 --source-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --signer-digest 3ccfe29715a073bd37010ea86037b9c8f89801c7 --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.10 --format json > verified-online-sbom.json
$ jq -e --slurpfile document trusted-server-fastly.wasm.spdx.json any\(.\[\]\;\ .verificationResult.statement.predicate\ ==\ \$document\[0\]\) verified-online-sbom.json
true
PASS: positive online SPDX match among fully verified pinned results

Rechecked positive/negative jq cases against the retained fully verified JSON:
PASS: negative SBOM is valid JSON with exactly one byte changed; original published file untouched
$ jq -e --slurpfile document trusted-server-fastly.wasm.spdx.json any\(.\[\]\;\ .verificationResult.statement.predicate\ ==\ \$document\[0\]\) verified-online-sbom.json
true
PASS: positive authenticated SPDX match
$ jq -e --slurpfile document negative.spdx.json any\(.\[\]\;\ .verificationResult.statement.predicate\ ==\ \$document\[0\]\) verified-online-sbom.json
false
PASS: exactly one-byte-changed SPDX rejected with jq -e exit 1

@prk-Jr

prk-Jr commented Oct 27, 2026

Copy link
Copy Markdown
Collaborator Author

Phase 2 exact-head rehearsal .13 passed — transcript 1/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.

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


Initial documented download (connection timeout retained):
$ export GODEBUG=http2client=0
$ gh --version
gh version 2.102.0 (2026-09-30)
https://github.com/cli/cli/releases/tag/v2.102.0
Reviewed source: 770a425df4b28caaaef68dfd930bceabd9928046
Tag: v0.0.0-rehearsal.13
Run: https://github.com/prk-Jr/trusted-server/actions/runs/40496605229
$ gh release download v0.0.0-rehearsal.13 --repo prk-Jr/trusted-server --dir .
Get "https://api.github.com/repos/prk-Jr/trusted-server/releases/assets/681464943": dial tcp 20.207.73.85:443: connect: operation timed out


Single missing-file read-only retry:
$ gh release download v0.0.0-rehearsal.13 --repo prk-Jr/trusted-server --dir . --pattern trusted-server-axum-x86_64-unknown-linux-musl.provenance.sigstore.json --clobber
PASS: single read-only retry recovered the missing provenance bundle


Complete verification:
$ export GODEBUG=http2client=0
$ gh --version
gh version 2.102.0 (2026-09-30)
https://github.com/cli/cli/releases/tag/v2.102.0
Reviewed source: 770a425df4b28caaaef68dfd930bceabd9928046
Tag: v0.0.0-rehearsal.13
Run: https://github.com/prk-Jr/trusted-server/actions/runs/40496605229
Release acquired by the retained gh release download transcript and one read-only transport retry; validate all bytes below.
$ gh api repos/prk-Jr/trusted-server/releases/tags/v0.0.0-rehearsal.13 > release-metadata.json
$ jq -e --arg tag v0.0.0-rehearsal.13 .immutable\ ==\ true\ and\ .prerelease\ ==\ true\ and\ .draft\ ==\ false\ and\ .tag_name\ ==\ \$tag\ and\ \(.assets\|length\)\ ==\ 30 release-metadata.json
true
$ verify exact public membership and API SHA-256 digests
PASS: exactly 30 uploaded public files; every API size/digest matches; SHA256SUMS covers exactly the other 29 files
$ gh api repos/prk-Jr/trusted-server/releases/latest > latest-release.json
$ jq -e --arg tag v0.0.0-rehearsal.13 .tag_name\ \!=\ \$tag latest-release.json
true
PASS: rehearsal prerelease is not Latest
$ gh release verify v0.0.0-rehearsal.13 --repo prk-Jr/trusted-server
Resolved tag v0.0.0-rehearsal.13 to sha1:770a425df4b28caaaef68dfd930bceabd9928046
Loaded attestation from GitHub API
✓ Release v0.0.0-rehearsal.13 verified!

Assets
SHA256SUMS	sha256:ed4acc85b0a46b59c6591b28871b83b17051a32d111d12f0f8ce62291a053391
trusted-server-axum-aarch64-unknown-linux-gnu	sha256:baab13410fd4e0040cb9650403ec81358afc36caad25c6a999b19504522d4510
trusted-server-axum-aarch64-unknown-linux-gnu.provenance.sigstore.json	sha256:23dccb98f70dd3d8f23c75d494874291190ee8d779cdba63cd855e7842ff5220
trusted-server-axum-aarch64-unknown-linux-gnu.sbom.sigstore.json	sha256:36fa981c7b332fd14071c478384867dbd4ce975d28b389196eaf1d1df945b45d
trusted-server-axum-aarch64-unknown-linux-gnu.spdx.json	sha256:62a7a261df9e290f052641cd15df35a21204786029fd741ae529ff04cd6e41a4
trusted-server-axum-x86_64-unknown-linux-gnu	sha256:db8f1eaec15ea41351f3eb1e95b171665ab221f98a67d68fc9772c7d1633d931
trusted-server-axum-x86_64-unknown-linux-gnu.provenance.sigstore.json	sha256:ea594d483047cce2d7f1e7454044277a022780ae95568afd0e7d375bfb19abb7
trusted-server-axum-x86_64-unknown-linux-gnu.sbom.sigstore.json	sha256:bb7d4d58c743908df076aa383be7a30af64758286b6f86ba14db70cd7e0bd066
trusted-server-axum-x86_64-unknown-linux-gnu.spdx.json	sha256:caa2168a695e767e53b42d445c515c8cd0d0d3bbf26bf358efcc5308e9c6cd01
trusted-server-axum-x86_64-unknown-linux-musl	sha256:e71f89b48d89c8e92917ffa865b42ba9c00d6f4cd1a4541d4640a960365f609b
trusted-server-axum-x86_64-unknown-linux-musl.provenance.sigstore.json	sha256:6e57809086d25e107b2e17873a81318fbdd83522df0acedd5994008e73df5284
trusted-server-axum-x86_64-unknown-linux-musl.sbom.sigstore.json	sha256:ae6032dab8b81d0cf840e4ac0ae1b8693a47ea1ce05c8506774dbefc26d7738c
trusted-server-axum-x86_64-unknown-linux-musl.spdx.json	sha256:3ca9d2cf93c413f400a45921d96405ee1f16060b2cc56d083833a81bed07877d
trusted-server-fastly.wasm	sha256:97d8a93d3eae8591055f3cf3f16c6c1da729cac3b2848fae1e1c7c52c8b08b35
trusted-server-fastly.wasm.provenance.sigstore.json	sha256:3b95114fe848ef22598958fc7d7ad6018bbfe9ad02bf01611ecb1f5707c12197
trusted-server-fastly.wasm.rebuild-check.json	sha256:f5fca5b4e4975a3e6c49a76d13fbce5bc483be1c22e9de31aea129d8f6635d84
trusted-server-fastly.wasm.sbom.sigstore.json	sha256:f8bdbb89fd9534156d104de8e794db1cf524adb4a6a28d5ccbbf3d5b9b40a855
trusted-server-fastly.wasm.spdx.json	sha256:dd21da52a6231bfb7ac9774e3180fa533fe891d1e55ee0f58006b4a82c2158aa
ts-aarch64-apple-darwin	sha256:81037ef990fc4e60a8aa9f15f04e362759fdcc16f539d412ba03305ac5acb34d
ts-aarch64-apple-darwin.provenance.sigstore.json	sha256:0ef4a3071f9bba77ecbf906a75eee41f169bb98f429646cf1fb5fcc84cb1f9ce
ts-aarch64-apple-darwin.sbom.sigstore.json	sha256:0e1986f3e55f902c0c55e79f01b0cb782b3483f755ea102f4ecea89b632560a6
ts-aarch64-apple-darwin.spdx.json	sha256:3e86b9c6f55672ee023b4c06430dccb3489c7c2fefb011e1728be0267c609e54
ts-x86_64-apple-darwin	sha256:66249684dc51daeeb7487a41f7ffab32b5790765d02f8360478d4d64461569c6
ts-x86_64-apple-darwin.provenance.sigstore.json	sha256:0d7f472ae82bd30a0d629b8a1fa11608e6a4786d2578f6242e8d6b24db1cb65a
ts-x86_64-apple-darwin.sbom.sigstore.json	sha256:52199f17410be7920d422e43145b8b14dacbce97caa7e29eb50cc95a8c485731
ts-x86_64-apple-darwin.spdx.json	sha256:e9b58b4645e43162a2cfadbdc6b20c0c70c58307ca5fd2c0bc82cb48660edd7e
ts-x86_64-unknown-linux-gnu	sha256:591ddf766055141db739a2cbe7cf72e577363ee0155810a83468fcf431e1c88f
ts-x86_64-unknown-linux-gnu.provenance.sigstore.json	sha256:4149c64a831eaaff2190de6e91721ceb138f04f64e074a7b71f451e6a5358203
ts-x86_64-unknown-linux-gnu.sbom.sigstore.json	sha256:7682f6e9f643372d47968cd9b0c53373ec81fdbf21f206861c6b2a8cb814d9f0
ts-x86_64-unknown-linux-gnu.spdx.json	sha256:33d60865757a00c28d6c7da45da75eae3cc647baf0879372676728e789781c6a

$ gh release verify-asset v0.0.0-rehearsal.13 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:db8f1eaec15ea41351f3eb1e95b171665ab221f98a67d68fc9772c7d1633d931
Resolved tag v0.0.0-rehearsal.13 to sha1:770a425df4b28caaaef68dfd930bceabd9928046
Loaded attestation from GitHub API

✓ Verification succeeded! trusted-server-axum-x86_64-unknown-linux-gnu is present in release v0.0.0-rehearsal.13
$ gh release verify-asset v0.0.0-rehearsal.13 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:caa2168a695e767e53b42d445c515c8cd0d0d3bbf26bf358efcc5308e9c6cd01
Resolved tag v0.0.0-rehearsal.13 to sha1:770a425df4b28caaaef68dfd930bceabd9928046
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.13
$ gh release verify-asset v0.0.0-rehearsal.13 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:ea594d483047cce2d7f1e7454044277a022780ae95568afd0e7d375bfb19abb7
Resolved tag v0.0.0-rehearsal.13 to sha1:770a425df4b28caaaef68dfd930bceabd9928046
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.13
$ gh release verify-asset v0.0.0-rehearsal.13 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:bb7d4d58c743908df076aa383be7a30af64758286b6f86ba14db70cd7e0bd066
Resolved tag v0.0.0-rehearsal.13 to sha1:770a425df4b28caaaef68dfd930bceabd9928046
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.13
$ gh release verify-asset v0.0.0-rehearsal.13 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:e71f89b48d89c8e92917ffa865b42ba9c00d6f4cd1a4541d4640a960365f609b
Resolved tag v0.0.0-rehearsal.13 to sha1:770a425df4b28caaaef68dfd930bceabd9928046
Loaded attestation from GitHub API

✓ Verification succeeded! trusted-server-axum-x86_64-unknown-linux-musl is present in release v0.0.0-rehearsal.13
$ gh release verify-asset v0.0.0-rehearsal.13 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:3ca9d2cf93c413f400a45921d96405ee1f16060b2cc56d083833a81bed07877d
Resolved tag v0.0.0-rehearsal.13 to sha1:770a425df4b28caaaef68dfd930bceabd9928046
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.13
$ gh release verify-asset v0.0.0-rehearsal.13 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:6e57809086d25e107b2e17873a81318fbdd83522df0acedd5994008e73df5284
Resolved tag v0.0.0-rehearsal.13 to sha1:770a425df4b28caaaef68dfd930bceabd9928046
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.13
$ gh release verify-asset v0.0.0-rehearsal.13 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:ae6032dab8b81d0cf840e4ac0ae1b8693a47ea1ce05c8506774dbefc26d7738c
Resolved tag v0.0.0-rehearsal.13 to sha1:770a425df4b28caaaef68dfd930bceabd9928046
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.13
$ gh release verify-asset v0.0.0-rehearsal.13 trusted-server-axum-aarch64-unknown-linux-gnu --repo prk-Jr/trusted-server
Calculated digest for trusted-server-axum-aarch64-unknown-linux-gnu: sha256:baab13410fd4e0040cb9650403ec81358afc36caad25c6a999b19504522d4510
Resolved tag v0.0.0-rehearsal.13 to sha1:770a425df4b28caaaef68dfd930bceabd9928046
Loaded attestation from GitHub API

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

✓ Verification succeeded! trusted-server-axum-aarch64-unknown-linux-gnu.spdx.json is present in release v0.0.0-rehearsal.13
$ gh release verify-asset v0.0.0-rehearsal.13 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:23dccb98f70dd3d8f23c75d494874291190ee8d779cdba63cd855e7842ff5220
Resolved tag v0.0.0-rehearsal.13 to sha1:770a425df4b28caaaef68dfd930bceabd9928046
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.13
$ gh release verify-asset v0.0.0-rehearsal.13 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:36fa981c7b332fd14071c478384867dbd4ce975d28b389196eaf1d1df945b45d
Resolved tag v0.0.0-rehearsal.13 to sha1:770a425df4b28caaaef68dfd930bceabd9928046
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.13
$ gh release verify-asset v0.0.0-rehearsal.13 trusted-server-fastly.wasm --repo prk-Jr/trusted-server
Calculated digest for trusted-server-fastly.wasm: sha256:97d8a93d3eae8591055f3cf3f16c6c1da729cac3b2848fae1e1c7c52c8b08b35
Resolved tag v0.0.0-rehearsal.13 to sha1:770a425df4b28caaaef68dfd930bceabd9928046
Loaded attestation from GitHub API

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

✓ Verification succeeded! ts-x86_64-unknown-linux-gnu.sbom.sigstore.json is present in release v0.0.0-rehearsal.13
$ gh release verify-asset v0.0.0-rehearsal.13 trusted-server-fastly.wasm.rebuild-check.json --repo prk-Jr/trusted-server
Calculated digest for trusted-server-fastly.wasm.rebuild-check.json: sha256:f5fca5b4e4975a3e6c49a76d13fbce5bc483be1c22e9de31aea129d8f6635d84
Resolved tag v0.0.0-rehearsal.13 to sha1:770a425df4b28caaaef68dfd930bceabd9928046
Loaded attestation from GitHub API

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

✓ Verification succeeded! SHA256SUMS is present in release v0.0.0-rehearsal.13
$ 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
$ derive independent binary/companion pins from the authenticated release metadata after release/asset verification
$ shasum -a 256 --check APPROVED_BINARY_AND_CHECK_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
trusted-server-fastly.wasm.rebuild-check.json: OK
ts-aarch64-apple-darwin: OK
ts-x86_64-apple-darwin: OK
ts-x86_64-unknown-linux-gnu: OK
$ shasum -a 256 trusted_root.jsonl
65ca537f6ed8a47fd0e560c421baa1f6c1efb8b25fc200d8c5c02c0e92eb2b9c  trusted_root.jsonl
$ gh attestation verify trusted-server-axum-x86_64-unknown-linux-gnu --repo prk-Jr/trusted-server --source-ref refs/tags/v0.0.0-rehearsal.13 --source-digest 770a425df4b28caaaef68dfd930bceabd9928046 --signer-digest 770a425df4b28caaaef68dfd930bceabd9928046 --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.13 --source-digest 770a425df4b28caaaef68dfd930bceabd9928046 --signer-digest 770a425df4b28caaaef68dfd930bceabd9928046 --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.13 --format json > trusted-server-axum-x86_64-unknown-linux-gnu.offline-provenance.verified.json
$ jq -e length\ ==\ 1\ and\ all\(.\[\]\;\ .verificationResult.statement.predicateType\ \!=\ null\) 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/40496605229/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-workflow certificate 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.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-axum-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 > trusted-server-axum-x86_64-unknown-linux-gnu.online-provenance.verified.json
$ jq -e length\ ==\ 1\ and\ all\(.\[\]\;\ .verificationResult.statement.predicateType\ \!=\ null\) 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/40496605229/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-workflow certificate 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.13 --source-digest 770a425df4b28caaaef68dfd930bceabd9928046 --signer-digest 770a425df4b28caaaef68dfd930bceabd9928046 --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.13 --source-digest 770a425df4b28caaaef68dfd930bceabd9928046 --signer-digest 770a425df4b28caaaef68dfd930bceabd9928046 --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.13 --format json > trusted-server-axum-x86_64-unknown-linux-gnu.offline-sbom.verified.json
$ jq -e length\ ==\ 1\ and\ all\(.\[\]\;\ .verificationResult.statement.predicateType\ \!=\ null\) 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-workflow certificate and source pins
$ jq -e --slurpfile document trusted-server-axum-x86_64-unknown-linux-gnu.spdx.json length\ ==\ 1\ and\ all\(.\[\]\;\ .verificationResult.statement.predicate\ ==\ \$document\[0\]\) trusted-server-axum-x86_64-unknown-linux-gnu.offline-sbom.verified.json
true
PASS: verified offline SPDX predicate equals the published SPDX document (trusted-server-axum-x86_64-unknown-linux-gnu)
$ gh attestation verify trusted-server-axum-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 trusted-server-axum-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 > trusted-server-axum-x86_64-unknown-linux-gnu.online-sbom.verified.json
$ jq -e length\ ==\ 1\ and\ all\(.\[\]\;\ .verificationResult.statement.predicateType\ \!=\ null\) 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-workflow certificate and source pins
$ jq -e --slurpfile document trusted-server-axum-x86_64-unknown-linux-gnu.spdx.json length\ ==\ 1\ and\ all\(.\[\]\;\ .verificationResult.statement.predicate\ ==\ \$document\[0\]\) trusted-server-axum-x86_64-unknown-linux-gnu.online-sbom.verified.json
true
PASS: verified online SPDX predicate equals the published SPDX document (trusted-server-axum-x86_64-unknown-linux-gnu)
$ gh attestation verify trusted-server-axum-x86_64-unknown-linux-musl --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-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.13 --source-digest 770a425df4b28caaaef68dfd930bceabd9928046 --signer-digest 770a425df4b28caaaef68dfd930bceabd9928046 --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.13 --format json > trusted-server-axum-x86_64-unknown-linux-musl.offline-provenance.verified.json
$ jq -e length\ ==\ 1\ and\ all\(.\[\]\;\ .verificationResult.statement.predicateType\ \!=\ null\) 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/40496605229/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-workflow certificate 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.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-axum-x86_64-unknown-linux-musl --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-axum-x86_64-unknown-linux-musl.online-provenance.verified.json
$ jq -e length\ ==\ 1\ and\ all\(.\[\]\;\ .verificationResult.statement.predicateType\ \!=\ null\) 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/40496605229/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-workflow certificate 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.13 --source-digest 770a425df4b28caaaef68dfd930bceabd9928046 --signer-digest 770a425df4b28caaaef68dfd930bceabd9928046 --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.13 --source-digest 770a425df4b28caaaef68dfd930bceabd9928046 --signer-digest 770a425df4b28caaaef68dfd930bceabd9928046 --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.13 --format json > trusted-server-axum-x86_64-unknown-linux-musl.offline-sbom.verified.json
$ jq -e length\ ==\ 1\ and\ all\(.\[\]\;\ .verificationResult.statement.predicateType\ \!=\ null\) 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-workflow certificate and source pins
$ jq -e --slurpfile document trusted-server-axum-x86_64-unknown-linux-musl.spdx.json length\ ==\ 1\ and\ all\(.\[\]\;\ .verificationResult.statement.predicate\ ==\ \$document\[0\]\) trusted-server-axum-x86_64-unknown-linux-musl.offline-sbom.verified.json
true
PASS: verified offline SPDX predicate equals the published SPDX document (trusted-server-axum-x86_64-unknown-linux-musl)
$ gh attestation verify trusted-server-axum-x86_64-unknown-linux-musl --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-x86_64-unknown-linux-musl --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-x86_64-unknown-linux-musl.online-sbom.verified.json
$ jq -e length\ ==\ 1\ and\ all\(.\[\]\;\ .verificationResult.statement.predicateType\ \!=\ null\) 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-workflow certificate and source pins
$ jq -e --slurpfile document trusted-server-axum-x86_64-unknown-linux-musl.spdx.json length\ ==\ 1\ and\ all\(.\[\]\;\ .verificationResult.statement.predicate\ ==\ \$document\[0\]\) trusted-server-axum-x86_64-unknown-linux-musl.online-sbom.verified.json
true
PASS: verified online SPDX predicate equals the published SPDX document (trusted-server-axum-x86_64-unknown-linux-musl)
$ 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://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.13 --source-digest 770a425df4b28caaaef68dfd930bceabd9928046 --signer-digest 770a425df4b28caaaef68dfd930bceabd9928046 --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.13 --format json > trusted-server-axum-aarch64-unknown-linux-gnu.offline-provenance.verified.json
$ jq -e length\ ==\ 1\ and\ all\(.\[\]\;\ .verificationResult.statement.predicateType\ \!=\ null\) 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/40496605229/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-workflow certificate 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.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-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://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-axum-aarch64-unknown-linux-gnu.online-provenance.verified.json
$ jq -e length\ ==\ 1\ and\ all\(.\[\]\;\ .verificationResult.statement.predicateType\ \!=\ null\) 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/40496605229/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-workflow certificate 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.13 --source-digest 770a425df4b28caaaef68dfd930bceabd9928046 --signer-digest 770a425df4b28caaaef68dfd930bceabd9928046 --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.13 --source-digest 770a425df4b28caaaef68dfd930bceabd9928046 --signer-digest 770a425df4b28caaaef68dfd930bceabd9928046 --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.13 --format json > trusted-server-axum-aarch64-unknown-linux-gnu.offline-sbom.verified.json
$ jq -e length\ ==\ 1\ and\ all\(.\[\]\;\ .verificationResult.statement.predicateType\ \!=\ null\) trusted-server-axum-aarch64-unknown-linux-gnu.offline-sbom.verified.json
true
PASS: trusted-server-axum-aarch64-unknown-linux-gnu offline 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.offline-sbom.verified.json
true
PASS: verified offline SPDX predicate equals the published SPDX document (trusted-server-axum-aarch64-unknown-linux-gnu)

@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)

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.

2 participants