Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
40 commits
Select commit Hold shift + click to select a range
a599b56
feat(sbom): add bounded software lineage ingestion (#995)
Aug 19, 2026
e9f9ac2
fix(sbom): harden lineage ingestion and verification (#995)
Aug 19, 2026
17f53e2
fix(sbom): close lineage validation and rebinding gaps
Aug 19, 2026
261d2e7
fix(sbom): close lineage verification bypasses
Aug 19, 2026
01eb210
fix(sbom): close independent review blockers
Aug 19, 2026
e5c1b8a
build(sbom): refresh generated artifact
Aug 19, 2026
419420b
fix(sbom): reject explicit null PURLs
Aug 19, 2026
5beb48f
build(sbom): refresh generated artifact
Aug 19, 2026
8d839d0
fix(sbom): close privacy parser and lineage follow-up
Aug 19, 2026
fcd2773
build(sbom): refresh generated artifact
Aug 19, 2026
a06f464
fix(sbom): close authoritative lineage blockers
Aug 19, 2026
619730c
test(sbom): cover markerless private source refs
Aug 19, 2026
c594cd7
fix(sbom): close privacy namespace and scalar blockers
Aug 19, 2026
605246f
fix: harden SBOM lineage privacy and bounded ingestion
Aug 20, 2026
6109831
build: refresh SBOM lineage provenance
Aug 20, 2026
57f3c61
fix: reject escaped oversized SBOM mappings before encoding
Aug 20, 2026
a2820ac
build: refresh final SBOM provenance
Aug 20, 2026
92889c8
fix: close remaining SBOM lineage review blockers
Aug 20, 2026
9bfe78a
build: refresh SBOM artifact provenance
Aug 20, 2026
b030075
fix: cover private IPs in locator paths
Aug 20, 2026
01f3ebd
fix(sbom): bind raw graphs and bound XML identities
Aug 20, 2026
60aaa1c
build: refresh SBOM artifact provenance
Aug 20, 2026
98b164c
fix(sbom): bind external edges and IPv6 privacy
Aug 20, 2026
686c14a
build: refresh SBOM artifact provenance
Aug 20, 2026
d49a638
fix(sbom): bound hostile mappings and document edge receipts
Aug 20, 2026
c7f40fd
build: refresh SBOM artifact provenance
Aug 20, 2026
1aed8c5
fix(sbom): suppress hostile errors and validate format types
Aug 20, 2026
488d96e
build: refresh SBOM artifact provenance
Aug 20, 2026
e48af2d
fix(sbom): sanitize raw mapping and edge iterator failures
Aug 20, 2026
4c29678
build: refresh SBOM artifact provenance
Aug 20, 2026
9be87a5
fix(sbom): require authoritative XML namespaces
Aug 20, 2026
aea92ff
build: refresh SBOM artifact provenance
Aug 20, 2026
12ccbfa
fix(sbom): reject case-variant XML namespaces
Aug 20, 2026
ab0ba12
build: refresh SBOM artifact provenance
Aug 20, 2026
62a9fad
fix(sbom): gate RDF namespaces before parser selection
Aug 20, 2026
7919d4f
build: refresh SBOM artifact provenance
Aug 20, 2026
5aca12a
fix(sbom): preserve raw bytes on Windows readers
Aug 20, 2026
25e03fe
build: refresh SBOM artifact provenance
Aug 20, 2026
994edca
test(sbom): preserve native binary flag in portability probe
Aug 20, 2026
761ca6e
build: refresh SBOM artifact provenance
Aug 20, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -274,7 +274,7 @@ Published as [`io.github.Perseus-Computing-LLC/perseus`](https://registry.modelc

### MCP Tools

<!-- test-count: 2442 — recount with: grep -rE "^\s*def test_" tests/ | wc -l -->
<!-- test-count: 2591 — recount with: grep -rE "^\s*def test_" tests/ | wc -l -->
<!-- The table below documents the current default output of _get_all_mcp_tools({}). Recount before editing. -->
MCP tools resolve live state at invocation time, including the canonical Perseus Vault tool. Two additional sensitive tools — `perseus_query` (run a shell command) and `perseus_agent` (execute a local agent subprocess) — are **not** part of this default set: they require explicit `mcp.tool_allowlist` opt-in because they execute commands in the user's local shell (**not sandboxed, full user permissions apply**).

Expand Down
45 changes: 45 additions & 0 deletions docs/SBOM.md
Original file line number Diff line number Diff line change
Expand Up @@ -95,3 +95,48 @@
- [x] Dependency relationship: listed above
- [x] SBOM author: Perseus Computing LLC
- [x] Timestamp: included

---

## Queryable SBOM and lineage contract (#995)

Perseus also provides an offline, stdlib-only normalization and query surface
for SBOMs produced by an existing scanner or build pipeline. It does not replace
those tools and it does not infer a clean result from an incomplete document.

Supported input formats:

- SPDX 2.2/2.3 JSON and XML;
- CycloneDX 1.4/1.5/1.6 JSON and XML.

Every normalized document records its format/version, source reference, raw
document SHA-256, supplier/timestamp metadata when supplied, component and
relationship counts, and an ingestion digest. Component projections retain
names, versions, package identifiers, licenses, and supplied vulnerability,
VEX, signature, attestation, advisory, or documentation references. Missing
metadata is represented as `partial` coverage with explicit `unknown` fields.

A local graph can add pipeline-owned edges for:

```text
source -> dependency -> build -> artifact -> deployment
```

Each edge carries explicit confidence (`high`, `medium`, `low`, or `unknown`),
coverage (`complete`, `partial`, or `unknown`), and optional evidence
references. The impacted-artifact query returns the traversed path and evidence
references. A query with incomplete coverage returns `unknown` or `partial`;
`not_affected` is never asserted merely because no artifact was found.

Example offline commands:

```bash
perseus sbom ingest build.spdx.json --output normalized.json
# Persisted normalized documents must be rebound to their raw source at merge.
perseus sbom merge normalized.json --raw-documents build.spdx.json --edges pipeline-edges.json --output lineage.json
# Persisted lineage must be rebound again at query in a new process.
perseus sbom query lineage.json CVE-2021-44228 --raw-documents build.spdx.json --edges pipeline-edges.json --json
```

The core path requires no cloud service. Deterministic JSON/XML fixtures and
contract tests live under `tests/fixtures/sbom/` and `tests/test_sbom_lineage.py`.
Loading
Loading