Skip to content

docs(sbom): separate distributed runtime from build-time toolchain - #688

Merged
tcconnally merged 1 commit into
mainfrom
docs/sbom-runtime-vs-buildtime
Jul 6, 2026
Merged

docs(sbom): separate distributed runtime from build-time toolchain#688
tcconnally merged 1 commit into
mainfrom
docs/sbom-runtime-vs-buildtime

Conversation

@tcconnally

Copy link
Copy Markdown
Collaborator

Problem

SBOM.md published a full pip freeze of the development virtualenv — ~140 packages including anthropic, openai, langchain-*, grpcio, cryptography, poetry, twine, mypy — as if it were the product's SBOM.

None of those ship:

  • The distributed package declares dependencies = ["pyyaml>=6.0.1"] (see pyproject.toml).
  • perseus.py's only hard third-party import is yaml.
  • The container image installs requirements-runtime.txt (PyYAML alone).

Publishing the dev freeze as the SBOM overstates the attack surface and misrepresents the software to anyone consuming it as a federal compliance artifact — precisely where it matters most (procurement, Iron Bank/ATO review).

Change

  • Lead with the runtime (distributed) set: CPython + PyYAML, plus clearly-scoped optional extras ([mcp], [dev]).
  • Add machine-readable sbom.cdx.json (CycloneDX 1.5) with package URLs, SHA-256, and a dependency graph — closing the NTIA elements the old file explicitly marked "Not Provided" (SPDX/unique ID, hashes, machine-readable format).
  • Retain the dev/CI freeze, clearly labeled NOT distributed, for build-environment transparency.

No code changes.

🤖 Generated with Claude Code

SBOM.md previously published the full `pip freeze` of the dev virtualenv (~140
packages incl. anthropic, openai, langchain, grpcio, poetry, twine, mypy) as if
it were the product's SBOM. None of those ship: the distributed package declares
`dependencies = ["pyyaml>=6.0.1"]`, and the container image installs only PyYAML.
Presenting the dev freeze as the SBOM overstates the attack surface and
misrepresents the software to anyone reading it as a compliance artifact.

- Lead with the RUNTIME (distributed) set: CPython + PyYAML, plus optional extras.
- Add machine-readable CycloneDX 1.5 `sbom.cdx.json` (purls, SHA-256, dependency
  graph) — closes the NTIA gaps the old file marked "Not Provided".
- Retain the dev/CI freeze, clearly labeled as NOT distributed, for transparency.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@tcconnally
tcconnally merged commit 63b41e7 into main Jul 6, 2026
7 checks passed
@tcconnally
tcconnally deleted the docs/sbom-runtime-vs-buildtime branch July 6, 2026 17:31
tcconnally added a commit that referenced this pull request Aug 30, 2026
)

SBOM.md previously published the full `pip freeze` of the dev virtualenv (~140
packages incl. anthropic, openai, langchain, grpcio, poetry, twine, mypy) as if
it were the product's SBOM. None of those ship: the distributed package declares
`dependencies = ["pyyaml>=6.0.1"]`, and the container image installs only PyYAML.
Presenting the dev freeze as the SBOM overstates the attack surface and
misrepresents the software to anyone reading it as a compliance artifact.

- Lead with the RUNTIME (distributed) set: CPython + PyYAML, plus optional extras.
- Add machine-readable CycloneDX 1.5 `sbom.cdx.json` (purls, SHA-256, dependency
  graph) — closes the NTIA gaps the old file marked "Not Provided".
- Retain the dev/CI freeze, clearly labeled as NOT distributed, for transparency.

Co-authored-by: tcconnally <hermes@perseus.observer>
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant