Summary
Implement plugin signature verification using sigstore (keyless OIDC). At install: verify the sigstore bundle against the bundled WASM hash, resolve the signing identity (e.g. name@acme.dev via GitHub OIDC), check identity matches manifest author, check identity matches the registry record for the slug. Refuse if any check fails.
For air-gapped installs, support offline cosign-key verification as a fallback; operators configure a local trust root.
Open question §15.5: air-gapped sigstore is unresolved. Needs docs/proposals/ design.
Design reference
- docs/02-plugin-system.md §10.2, §15.5 (air-gapped open question)
Acceptance criteria
Dependencies
#27 (bundle parser), #34 (manifest validator)
Complexity
L
Summary
Implement plugin signature verification using sigstore (keyless OIDC). At install: verify the sigstore bundle against the bundled WASM hash, resolve the signing identity (e.g.
name@acme.devvia GitHub OIDC), check identity matches manifestauthor, check identity matches the registry record for the slug. Refuse if any check fails.For air-gapped installs, support offline cosign-key verification as a fallback; operators configure a local trust root.
Open question §15.5: air-gapped sigstore is unresolved. Needs
docs/proposals/design.Design reference
Acceptance criteria
server/plugin.wasm.sig(sigstore bundle JSON)author.emailOR matches a domain in the configured publisher allowlist for the slugcanonical_publisherfor the slugdisabled_by_policy)signing.mode = offline, verifier accepts cosign-key signatures against a configured trust root (PEM bundle of trusted public keys). Sigstore checks skipped.needs-design: §15.5 — propose key-distribution story indocs/proposals/airgap-plugin-signing.mdDependencies
#27 (bundle parser), #34 (manifest validator)
Complexity
L