Skip to content

Attestation chain: wire sigil (native Ed25519 endorsement) before cosign — release ships cosign-only (step-6 gap, v1.78–v1.81) #216

Description

@avrabe

Surfaced by the user reviewing the v1.81 release chain. The release attestation is cosign-only; sigil is documented as part of the intended chain but wired into nothing.

Current state (release.yml)

  • cosign sign-blob (keyless OIDC) over SHA256SUMS.txt.sig/.pem/.cosign.bundle
  • actions/attest-build-provenance → in-toto SLSA v1 provenance

Both are Sigstore/Fulcio, CI-level — they prove provenance (came from this workflow, logged in Rekor).

The gap

sigil (PulseEngine-native Ed25519 attestation) is referenced in the design but implemented nowhere:

  • FV-RELAY-STREAM-014 says "Attestation (sigil/cosign, feature-loop step 6)" — but only cosign ships → over-claim to correct.
  • SWARCH-RELAY-SEC-001 marks the relay-sec session-key sigil role (Ed25519 over the X25519 exchange, rekey-on-reboot) as "planned" (line 153) — also unimplemented.
  • sigil isn't installed locally either (external tool, like gale/kiln).

Why sigil belongs before cosign (not redundant)

  • cosign = provenance: "built by this CI", public transparency log.
  • sigil = endorsement: the project's own trust root signing the artifact + binding it to the verification evidence (rivet trace + Kani + witness MC/DC). "Our verified pipeline blessed this, under our key."
  • Order: sigil attests the evidence-bound artifact → cosign wraps it in public CI transparency.

What's been shipping cosign-only

v1.78, v1.79, v1.80, v1.81 — four releases, past the feature-loop's "step-6 N/A for 3 features → file it" threshold.

Asks (two sub-tasks)

  1. Release attestation: wire sigil into release.yml (sign the bundle / evidence manifest with the project Ed25519 key, before cosign). Prereq: sigil installed/available in CI (currently absent) — coordinate with the sigil repo.
  2. Artifact hygiene: correct FV-RELAY-STREAM-014's "sigil/cosign" to "cosign (+ SLSA provenance); sigil planned" until (1) lands, so the artifact stops claiming an unshipped step.

Separately tracks the relay-sec runtime sigil session-key role (SWARCH-RELAY-SEC-001 "planned") — related but distinct from release signing.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions