Skip to content

attest-boot: state the verification predicate, and stop advertising the weak one - #165

Merged
bdelanghe merged 2 commits into
mainfrom
claude/script-artifacts-github-actions-3qf23b
Aug 13, 2026
Merged

attest-boot: state the verification predicate, and stop advertising the weak one#165
bdelanghe merged 2 commits into
mainfrom
claude/script-artifacts-github-actions-3qf23b

Conversation

@bdelanghe

Copy link
Copy Markdown
Contributor

attest-boot.yml has signed the bootstrap chain since 2026-08-10, but nothing
states what a verifier must check. An attestation with no predicate behind it
is decoration: --owner accepts any workflow in any repo under the org, and
--repo accepts any workflow in this one — neither is the claim the chain
needs, and the run summary was advertising the second.

docs/boot-attestation-policy.md writes the predicate literally — subject
digest, predicate type, source repo, signer workflow, source ref, OIDC issuer
— plus what happens on failure at each enforcement point. Two decisions worth
naming:

  • Enforcement belongs at the PIN/SUM_* bump, not at boot. The bump is when a
    digest BECOMES trusted, and it happens in CI, online, with a trust root
    already present. Verifying at boot would need network plus a pinned Sigstore
    bundle in the verifying image, which then needs its own provenance story;
    moving the gate to CI terminates that regress at a boundary already gated.
    Boot keeps relying on the digest chain, which already fails closed offline.
  • Ref pinning is left Aspirational on purpose. --signer-workflow constrains
    repo and workflow path but not ref; the ref belongs in --cert-identity, and
    the accepted form has NOT been checked against the gh version this org
    ships. Recording that as unverified rather than asserting it.

The run summary now emits the full predicate and says plainly that --owner and
--repo alone are not the policy.

No gate evaluates the predicate yet — the doc grades itself Aspirational and
names the check as the next step. The predicate had to exist first.

Co-Authored-By: Claude Opus 5 noreply@anthropic.com
Claude-Session: https://claude.ai/code/session_01ELNyzpaVesKrUPkUpDjCXw

…he weak one

attest-boot.yml has signed the bootstrap chain since 2026-08-10, but nothing
states what a verifier must check. An attestation with no predicate behind it
is decoration: `--owner` accepts any workflow in any repo under the org, and
`--repo` accepts any workflow in this one — neither is the claim the chain
needs, and the run summary was advertising the second.

docs/boot-attestation-policy.md writes the predicate literally — subject
digest, predicate type, source repo, signer workflow, source ref, OIDC issuer
— plus what happens on failure at each enforcement point. Two decisions worth
naming:

- Enforcement belongs at the PIN/SUM_* bump, not at boot. The bump is when a
  digest BECOMES trusted, and it happens in CI, online, with a trust root
  already present. Verifying at boot would need network plus a pinned Sigstore
  bundle in the verifying image, which then needs its own provenance story;
  moving the gate to CI terminates that regress at a boundary already gated.
  Boot keeps relying on the digest chain, which already fails closed offline.
- Ref pinning is left Aspirational on purpose. --signer-workflow constrains
  repo and workflow path but not ref; the ref belongs in --cert-identity, and
  the accepted form has NOT been checked against the gh version this org
  ships. Recording that as unverified rather than asserting it.

The run summary now emits the full predicate and says plainly that --owner and
--repo alone are not the policy.

No gate evaluates the predicate yet — the doc grades itself Aspirational and
names the check as the next step. The predicate had to exist first.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01ELNyzpaVesKrUPkUpDjCXw
@bdelanghe
bdelanghe requested a review from a team as a code owner August 13, 2026 05:22
@bdelanghe
bdelanghe merged commit 9e6702b into main Aug 13, 2026
8 checks passed
@bdelanghe
bdelanghe deleted the claude/script-artifacts-github-actions-3qf23b branch August 13, 2026 05:27
@github-project-automation github-project-automation Bot moved this from Todo to Done in Front Desk Aug 13, 2026
@bounded-systems-front-desk bounded-systems-front-desk Bot moved this from Todo to Done in Front Desk Aug 13, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

2 participants