v0.71.2 — Governance & supply-chain live (ed25519 + scan gate)
Governance & supply-chain controls go live: real ed25519 signatures for adapters and attestations, anti-AI-Jacking namespace pinning on Hub downloads, automatic license-conflict detection at merge, and a backdoor-scan gate that refuses to merge weight-space trojans.
What's New
- ed25519 signing for
soup adapters sign/soup attest— real detached signatures over the adapter Merkle root / the in-toto statement, via a new[sign]extra (pip install 'soup-cli[sign]', pullingcryptography).soup adapters sign --backend ed25519 --key <priv.pem>(or--generate-key <out.pem>, orSOUP_SIGNING_KEY)soup adapters verify [--public-key <trusted.pem>]— cryptographic verify; with a trusted key it's genuine authentication, not just self-consistencysoup attest emit --sign ed25519 --key <priv.pem>writes a<output>.sigsidecar; newsoup attest verify <statement> --signature <sig> [--public-key <pem>]verifies it (canonical-JSON, so it's platform / newline-independent)
- Anti-AI-Jacking namespace pin on Hub downloads — HF model fetches now consult a trust-on-first-use pin store. A repo whose author changes (or whose
created_atjumps backward) is refused unless the namespace shift is explicitly allowed. Fails open when repo metadata is unavailable. - License auto-detection at
soup adapters merge— when--licenseisn't given, the license is read from each adapter'sadapter_config.json/config.json/ model-card frontmatter (HFllama3.1-style ids mapped to canonical) and the conflict gate runs automatically. Overrides (--license-override <reason>) are recorded to the audit log for legal review. - Backdoor-scan gate at
soup adapters merge— refuses to merge any input whosesoup adapters scanreturns FAIL (or can't be scanned) unless--allow-unscannedis passed; WARN is advisory. - Concurrent-safe namespace pin store — SQLite WAL + busy-timeout + a cross-process file lock around get+insert, so concurrent writers don't lose the trust anchor.
Install / Upgrade
pip install --upgrade soup-cli # core
pip install --upgrade 'soup-cli[sign]' # + ed25519 signing (cryptography)Security
- ed25519 verification fails closed — any tamper / wrong key / missing key / unreadable trusted key ⇒ invalid.
- Signing keys and trusted public keys are symlink-rejected and size-capped via a shared hardened reader (no cwd-containment — keys deliberately live outside the project).
--generate-keyrefuses to overwrite any pre-existing path (no-clobber + TOCTOU-safe).- License-conflict overrides are appended (secret-redacted, arg-capped) to the audit log.
Known Limitations
- Sigstore keyless signing stays infra-blocked.
--backend sigstore/--sign sigstoreraise a clear "infra-blocked" error: it needs an OIDC identity provider plus Fulcio/Rekor network round-trips, which cannot be honestly validated offline. The ed25519 half ships fully live; tracked under #179 / #185 (infra-blocked). - Namespace-pin metadata uses HF repo
(author, created_at)only; it fails open when the Hub API is unreachable so a network blip never blocks a legitimate download.
Full notes: see CHANGELOG.md.
🤖 Generated with Claude Code