Skip to content

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

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

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

  • 2ed1b94 — docs-only since rehearsed 770a425df: port the reviewed Add binary attestation contracts and release build guards #1262 producer graph and enforce ordinary Fastly A/B byte equality with approved compiler-path normalization. Qualification stays closed; GNU masking is excluded.
  • Preserve seven binary names, the reusable signer identity, published-bundle verification and binary-only SPDX attestations.
  • Sign the real Fastly rebuild-check as a third provenance subject; verify its handoff before publishing 30 assets, with checksums covering the other 29. Include offline pinned Fastly packaging and real negative-comparator CI proof.
  • Document online SBOM matching among fully verified records; retain every pin and strict bundle checks. Known gap: the controlled observer still pins esbuild 0.27.3 against lock 0.28.2; its collector stays visibly skipped and guarded. Ordinary builds do not use it.

Changes

Files Change
Release crate; workspace manifest/lock Boundary/material/recipe/composition port; ordinary capture, normalization, bound archive comparison and real writer
JS preparation; release helpers/tests Fresh private bundles, closed controlled preparation, authenticated transport and failure coverage
Release/test/format workflows; AGENTS.md A/B gate, offline pinned Fastly route, isolated companion signing, 30-file publication and negative CI proof
CLI resources/domain lint; guide/plans/spec notes Carried resources, approved reference hosts, compatibility and exact-source verification records

2ed1b94 size against Phase 1 ab6e549: 263 new files (1 binary fixture), 86,814 text lines; 43 existing files +4,595/−615. Rust: 78,501 new lines +311 existing additions, including tests. Workflow/script/non-Rust test code: 4,123 new lines +2,239 existing additions. Remaining lines are docs, schemas and lockfile.

Closes

Part of #1235. Tracking issue number pending; draft text.

Spec / Plan

Spec, assignment, approved Gate 1, implementation/normalization plan, compatibility audit and rehearsal records. Frozen source: 122b786.

Test plan

5349b7c: docs-only exact-SHA record after main integration 7d551777d (054c7b777 merged into Phase 2 only). Release workflows/producer/build facts/manifests/lock/tool pins are unchanged. Seven targeted filesystem tests, CLI/Fastly clippy, format/domain checks and independent review passed. GitHub’s native stack wrapper was removed; both draft PRs retain their bases and source history. This head is mergeable and full exact-head CI is running, including seven builds and Fastly A/B comparison. Phase 1 remains at green docs head 20152315c, with .15 verified at 68eef902a. No new Phase 2 rehearsal: .13 below remains exclusively at 770a425df and does not cover later application inputs.

770a425: all implementation CI passed, including seven builds, full-byte comparison and hosted process/negative-canary tests; PR signing/publication skipped. One lost Intel runner was retried without source/runner/timeout changes. Rehearsal .13 and full transcript passed: 30 immutable prerelease files (not Latest), both predicates/identities online and offline, SPDX equality, companion/run/artifact joins, checksums, native checks and offline Fastly pack/validate/inspect/cmp. Reproduction took 6m18s and comparison 1m56s, overlapping native builds.

3ccfe29: .10 rerun-all transfer proof passed; publication correctly refused the existing immutable release with all assets unchanged. Approved online-SBOM positive/one-byte-negative proof passed against fully verified pinned results. This recovery proof is attributed to its earlier source, not presented as a rerun of 770a425df.

Outside-scope CI fixes (mirrors main #1454)

886cf33: separately commit the browser job's Ubuntu 24.04 pin and exact explanatory comment from main fd2bf10. The workflow blob is byte-identical to #1454; other jobs/dependencies are unchanged.

Allowlist changes needing maintainer review

Exact approved reference hosts json-schema.org and spdx.org, with justification and subdomain/lookalike tests. Four reviewed per-line api.github.com suppressions cover Actions APIs/test assertions; no global API-host entry or wildcards.

Human gates

  • Merging Phase 2 activates the next real tag's equality gate; no additional switch beyond the existing publication variable. It adds a second Fastly build/comparison; any mismatch prevents release. Controlled qualification and later Phase 3/4 gates remain closed.
  • Keep draft; no reviewers. Maintainer review/merge and the tracking issue remain human actions. No IAB tags, releases or settings changes.

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.
Comment thread scripts/release/phase1.test.mjs Fixed
@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

prk-Jr and others added 6 commits October 27, 2026 17:54
Docs-only since rehearsed 770a425 (v0.0.0-rehearsal.13).
* Add design spec and plan for separate creative click rewrite switch

Spec and implementation plan for #1234: an [auction] rewrite_clicks switch that follows rewrite_creatives when unset, so click wrapping can be controlled independently of asset rewriting.

Signed-off-by: dhruv8sh <dhruv8sh@proton.me>

* Update spec and plan after implementation review

Describe the review fixes: the extended shared-step CHANGELOG entry and the sign status change, rollback in both directions, the reworded Auction Rewrite Control docs and renderGuard note, the fuller body-less matrix fixture, the exact default-output pin, and the stronger proxied-HTML test.

Signed-off-by: dhruv8sh <dhruv8sh@proton.me>

* Split creative URL normalization from rewrite host policy

Replace to_abs with normalize_creative_url and move exclusion policy to Rewrite::should_proxy_asset and Rewrite::should_wrap_click, sharing the case-insensitive proxy host matcher. Normalize exclude_domains at load. This is the shared step for #1231 and #1234.

Signed-off-by: dhruv8sh <dhruv8sh@proton.me>

* Add an auction rewrite_clicks setting that follows rewrite_creatives when unset

Signed-off-by: dhruv8sh <dhruv8sh@proton.me>

* Gate creative asset and click rewriting on separate switches

The rewrite pass registers asset handlers only when rewrite_creatives is on and the anchor handler only when click rewriting resolves on. Base removal and TSJS injection run whenever either is on.

Signed-off-by: dhruv8sh <dhruv8sh@proton.me>

* Apply an explicit rewrite_clicks to HTML fetched through the first-party proxy

Signed-off-by: dhruv8sh <dhruv8sh@proton.me>

* Document rewrite_clicks in the example config and pin its overlay behavior

Signed-off-by: dhruv8sh <dhruv8sh@proton.me>

* Document the rewrite_clicks creative setting

Signed-off-by: dhruv8sh <dhruv8sh@proton.me>

* Address review feedback on the rewrite_clicks spec and plan

Correct the renderGuard caveat for the sandboxed /auction renderer, list the
operator docs that become false, keep a bidder <base target> while dropping
its href, and warn on the public rewrite wrappers.

Also fix citations, the shared CHANGELOG Fixed wording, red-step ordering,
the Step 5 grep, rollout and staged rollback notes, and other precision items.

Signed-off-by: dhruv8sh <dhruv8sh@proton.me>

* Cover suffix spoofing in the rewrite policy test

Restore the example2.com.fake.com style case dropped in the port of
test_rewrite_is_excluded, and point the should_proxy_asset docs at
is_host_allowed in code text so cargo doc stops warning about a link to a
private item.

Signed-off-by: dhruv8sh <dhruv8sh@proton.me>

* Warn that public rewrite wrappers ignore switches

rewrite_creative_html and rewrite_inline_creative_html rewrite assets and
clicks unconditionally. Document that production code must use the
auction processing entry points, which honor both switches.

Signed-off-by: dhruv8sh <dhruv8sh@proton.me>

* Keep a bidder base target when dropping its URL

The rewrite pass removed every <base>, which also dropped target="_blank"
so raw links opened inside the creative iframe. Drop only the href, which
is what can rebase first-party URLs, and remove a <base> left without a
target as before, so default output is unchanged.

Signed-off-by: dhruv8sh <dhruv8sh@proton.me>

* Correct operator docs for rewrite_clicks

Name rewrite_clicks in the orchestration example, environment overrides
and rollback note, fix the rewrite_creatives = false summary, correct the
renderGuard caveat for the sandboxed renderer, and document base target
handling and the inert click guard.

Signed-off-by: dhruv8sh <dhruv8sh@proton.me>

* Expand the CHANGELOG notes for the shared step

List the CSS re-quoting, https: prefixing and sign error text changes in
the Fixed entry, and note that a bidder base target is now kept.

Signed-off-by: dhruv8sh <dhruv8sh@proton.me>

* Align creative click switch docs and tests with review feedback

Describe rewrite_clicks separately from asset rewriting across the operator guides, state the default-config <base target> change in the CHANGELOG, refresh the spec status and rollout, and correct stale exclude_domains and <base> prose.

Add non-http(s) host-bearing schemes to the URL normalizer test and reuse the push helper in the existing auction overlay CLI tests.

Signed-off-by: dhruv8sh <dhruv8sh@proton.me>

* Format the creative click rewrite switch spec with Prettier

Signed-off-by: dhruv8sh <dhruv8sh@proton.me>

* Document EC ID forwarding and close remaining click switch doc gaps

Add a consent and privacy section, adapter coverage and a review log to the spec. State in the operator docs and CHANGELOG that click wrapping decides where the EC ID goes, that no explicit rewrite_clicks reproduces unset when rewrite_creatives is false, and that rollback and the base target change also affect HTML fetched through /first-party/proxy.

Signed-off-by: dhruv8sh <dhruv8sh@proton.me>

* Cite spec EC ID forwarding lines at the stated main commit

Signed-off-by: dhruv8sh <dhruv8sh@proton.me>

---------

Signed-off-by: dhruv8sh <dhruv8sh@proton.me>
Co-authored-by: prk-Jr <49094961+prk-Jr@users.noreply.github.com>
Co-authored-by: AG <132480+aram356@users.noreply.github.com>
…rs (#1291)

* Keep config permissions and hide config text in ts prebid bundle errors

Move the audit atomic writer into a shared fs_util module and use it for the prebid bundle metadata patch, so the config keeps its permissions, is fsynced, and leaves no temp file behind on failure. Report TOML parse errors by byte offset instead of echoing the parser snippet, including in ts audit generate, through one shared toml_error_location helper. Closes #1202.

Signed-off-by: dhruv8sh <dhruv8sh@proton.me>

* Report TOML error line and column and tighten config write tests

Map redacted TOML error spans to line and column, prove mode preservation with a 0640 config, cover the patch_config_metadata parse error, and narrow the atomic writer doc to the mode bits it actually keeps.

Signed-off-by: dhruv8sh <dhruv8sh@proton.me>

* Hide config text in remaining ts audit generate parse errors

Route the dry-run diff and managed-field validation parse errors through toml_error_location, add regression tests, and gitignore .ts-write-* temp files left by an interrupted config write.

Signed-off-by: dhruv8sh <dhruv8sh@proton.me>

* Pin TOML parse error locations in CLI tests and note the fix in the changelog

Assert the exact line and column in the prebid parse-error tests, add a no-echo test for splice_creative_slots, and pin that toml_error_location counts columns in characters. Add a Security changelog entry telling operators to restrict configs an earlier ts prebid client widened.

Signed-off-by: dhruv8sh <dhruv8sh@proton.me>

---------

Signed-off-by: dhruv8sh <dhruv8sh@proton.me>
Co-authored-by: AG <132480+aram356@users.noreply.github.com>
…-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.

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.

3 participants