Skip to content

Dependency and supply-chain policy

Scope

The project supports Python 3.11–3.13. Runtime dependencies use explicit minimum versions and next-major upper bounds. Development tooling is optional and similarly bounded. A dependency change must preserve the offline test suite, package verification, GET-only enforcement, and credential non-disclosure guarantees.

Updates

Dependabot checks Python packages and GitHub Actions weekly. Its pull requests are proposals, not automatic approvals: maintainers review release notes, security impact, compatibility, and the complete local/CI verification before merging. Major-version updates are handled deliberately rather than grouped or blindly accepted.

GitHub Actions are pinned to immutable commit SHAs with a human-readable release comment. A version-tag-only reference is not sufficient for a security-sensitive workflow.

Reproducibility

The library intentionally has no committed deployment lockfile: consumers may resolve compatible versions within the declared ranges. CI records the Python matrix and resolved environment in job logs. Release artifacts should be built from a clean checkout with SOURCE_DATE_EPOCH set to the release commit time, then checked with make package-check and twine check.

A release SBOM should describe the built distribution environment, not the developer host. CycloneDX JSON is the preferred format. make sbom implements this: it builds a fresh wheel, generates the SBOM from a clean, isolated install of that wheel (never the developer host) using a pinned cyclonedx-bom version installed into a second, separate throwaway venv, and verifies the result offline (scripts/verify_sbom.py — CycloneDX shape, component name, non-empty dependency list, no local home path or editable-install reference) before writing it to the git-ignored dist/sbom/. make sbom is deliberately outside quick/validate/ release-check: it requires network access to install the pinned generator tool and is not needed for every local iteration. Generating the SBOM is not the same as publishing it — attach it to a GitHub Release as an artifact only after owner review of its content, exactly as any other release artifact requires the Owner Approval Gate. SBOM tooling itself is not a runtime dependency of the package.

Security response

Security advisories take priority over the normal update cadence. Dependency findings must be assessed for reachability in this local stdio, GET-only architecture; severity alone does not establish exploitability. Report vulnerabilities through SECURITY.md, not a public issue.