[AAASM-3568] 🔒 (python-sdk): SDK supply-chain attestation + SBOM + advisory gate#172
Conversation
… upload Pin `attestations: true` explicitly on the gh-action-pypi-publish step so every wheel/sdist ships a Sigstore-backed PEP 740 attestation minted from the Trusted Publisher OIDC identity. An artifact pushed outside this OIDC-gated workflow carries no attestation, making out-of-band uploads detectable by PyPI and consumers. AAASM-3611. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Add an `sbom` job that runs `cyclonedx-py environment` over the uv-synced resolved virtualenv and uploads `sbom.cdx.json` as a workflow artifact (on both dry-run and real dispatches). The create-github-release job now depends on it, downloads the artifact, and attaches the SBOM to the GitHub Release on the real-publish path, giving consumers a machine-readable dependency manifest to verify against advisory feeds. AAASM-3615. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Add a `dependency-audit` job that resolves the locked environment with `uv sync --frozen` and runs `pip-audit --strict` against the PyPI/OSV advisory databases on every push and PR. A known-vuln (possibly transitive) dependency now fails the job, and the job is wired into the `ci-success` aggregate gate so a red audit blocks the required check. A documented `--ignore-vuln` allowlist (empty by default) mirrors go-sdk's KNOWN_UNFIXED for advisories with no available fix. AAASM-3612. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…cation Add SECURITY.md stating the canonical PyPI name (`agent-assembly`) with a typosquat warning, plus a consumer recipe for verifying PEP 740 attestations on the PyPI files page and the CycloneDX SBOM attached to each GitHub Release. Link it from the README Installation section. AAASM-3628 (python-sdk portion). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Codecov Report✅ All modified and coverable lines are covered by tests. 📢 Thoughts on this report? Let us know! |
|
Merge-readiness review — AAASM-3568 (python-sdk)CI: ALL GREEN. Buckets — tests/build (build-and-test_all unit/integration/contract + codecov), advisory gate ( Scope vs ticket — all three python-sdk subtasks covered, no gap:
Release-time steps (attestation/SBOM attach) only execute on a real release dispatch — confirmed they don't run on this PR and are workflow-valid (CI green). pip-audit gate runs on every PR/push and is live. Verdict: READY TO MERGE. — Claude Code |



Description
Hardens the python-sdk distribution supply chain (Story AAASM-3568). Four focused changes:
attestations: trueon the PyPI Trusted Publisher step so every wheel/sdist ships a Sigstore-backed attestation minted from the existing OIDC identity. An artifact uploaded outside this OIDC-gated workflow carries no attestation and is detectable.sbomjob runscyclonedx-py environmentover the uv-synced resolved venv; the SBOM is attached to the GitHub Release on the real-publish path.dependency-auditjob inci.yamlrunspip-audit --strictagainst the locked environment on every push/PR, wired into theCI Successaggregate gate, with a documented (empty)--ignore-vulnallowlist for unfixable advisories.SECURITY.mddocumenting the canonical PyPI name (agent-assembly, with typosquat warning) and a consumer verification recipe (attestations + SBOM), linked from the README.Builds on the operator-gated, FFI-pin-lockstep publish pipeline (AAASM-3503 / AAASM-3468) without altering its gating.
Type of Change
Breaking Changes
Related Issues
Testing
Validated both changed workflows with
actionlint(clean) and confirmed YAML parses. Workflow/SBOM/attestation behavior is exercised by the release pipeline on a real (or dry-run) dispatch and the pip-audit gate runs in CI on this PR.Checklist
🤖 Generated with Claude Code