Skip to main content

SBOM Evidence Fusion & Dependency Graph Repair Engine

Tracker idea: OC-009
Goal: repair incomplete SBOM dependency graphs using independent evidence while preserving provenance and refusing unsafe "unreachable" conclusions when graph evidence is incomplete.

Why this exists

CycloneDX explicitly notes that components omitted from a dependency graph may have unknown dependencies, not zero dependencies. Existing SBOM tools already aggregate or assemble documents; this project targets a narrower problem: reconcile dependency-edge evidence from independent sources, score relationship confidence, detect degenerate graphs, and keep reachability uncertainty visible.

Implemented end-to-end flow

  1. Ingest CycloneDX JSON, SPDX JSON, npm package-lock.json, pnpm/yarn JSON dependency trees, pip inspect JSON, poetry.lock, Maven dependency:tree text, and generic runtime/build evidence JSON.
  2. Normalize component identity using PURLs when available.
  3. Detect empty/degenerate dependency graphs per source.
  4. Fuse positive edge evidence with source-specific weights.
  5. Classify edges as confirmed, probable, or unknown.
  6. Emit repaired CycloneDX and SPDX documents, a graph-diff summary, and an evidence/provenance sidecar.
  7. Answer reachability queries with reachable, unreachable, or unknown; absence of a path is not treated as proof when completeness is insufficient.
  8. Run a deterministic 100-case synthetic benchmark that measures fusion recovery against known ground truth.

Install

python -m pip install https://github.com/virajsabhaya23/sbom-evidence-fusion/releases/download/v0.1.0/sbom_evidence_fusion-0.1.0-py3-none-any.whl

Demo

sbom-fuse fuse examples/source-a.cdx.json examples/source-b.spdx.json examples/package-lock.json --out-dir demo-out
cat demo-out/evidence-ledger.json

Expected: the alpha -> beta relationship missing from the CycloneDX source is recovered from SPDX + package-lock evidence, and every repaired edge contains source provenance.

Reachability

sbom-fuse reach examples/source-a.cdx.json examples/source-b.spdx.json examples/package-lock.json \
  --from pkg:npm/demo-app@1.0.0 --to pkg:npm/beta@2.0.0 --json

Tests

python -m unittest discover -s tests -v

Benchmark

python benchmark/generate_benchmark.py

The included benchmark is deterministic and synthetic. It validates the fusion algorithm mechanically; it is not represented as the planned real-world 100-project benchmark across Syft/Trivy/Microsoft SBOM Tool/GUAC-style workflows.

Architecture

  • parsers.py: format-specific evidence ingestion
  • identity.py: cross-source component normalization
  • fusion.py: graph diagnostics, evidence fusion, confidence, safe reachability
  • exporters.py: repaired CycloneDX + evidence ledger
  • cli.py: local zero-service CLI

See docs/SPEC.md and docs/THREAT_MODEL.md.

Originality boundary

This repository does not claim originality for SBOM aggregation, graph storage, hidden dependency discovery, or package-manager parsing. The proposed contribution is the combination of:

  • explicit per-edge evidence provenance;
  • confidence-based cross-source relationship repair;
  • graph-degeneracy detection; and
  • uncertainty-aware reachability that refuses a closed-world negative verdict when the evidence base is incomplete.

Those claims still require external validation and independent adoption before they can support any "major significance" argument.

Current limitations

  • Reference implementation supports CycloneDX JSON, SPDX JSON, npm package-lock v2/v3, pnpm/yarn JSON dependency-tree exports, pip inspect JSON, Poetry lock files, and Maven dependency-tree text.
  • Raw pnpm/yarn lockfile YAML is intentionally not parsed without a YAML dependency; use their JSON resolution/list output as evidence.
  • Confidence weights are transparent defaults, not statistically calibrated probabilities.
  • Real-world 100-project multi-generator validation remains required before publication of comparative claims.

License

Apache-2.0

Metadata

Release files for sbom-evidence-fusion 0.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for sbom-evidence-fusion 0.1.1
File Size Uploaded
sbom_evidence_fusion-0.1.1.tar.gz 15.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for sbom-evidence-fusion 0.1.1
File Interpreter ABI Platform
sbom_evidence_fusion-0.1.1-py3-none-any.whl Python 3 none any Details

Total release size: 33.0 kB

Release files / sbom_evidence_fusion-0.1.1.tar.gz

Download URL sbom_evidence_fusion-0.1.1.tar.gz
Size 15.9 kB
Tags Source
SHA-256 checksum
How to use checksums
d034642064bed62cc95a1aeb5b406de873fa06ece08649bd5a081ec9dc2fe66f
BLAKE2b-256 checksum
How to use checksums
40e046a08f11b92fc54fd0a3e0aa34a6cd16cf119a807f2957a4f3f72e5bed1c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 16, 2026.

Transparency log

Release files / sbom_evidence_fusion-0.1.1-py3-none-any.whl

Download URL sbom_evidence_fusion-0.1.1-py3-none-any.whl
Size 17.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
1d72e26fb39961472a92c48e5e152af8f6c8dc0fef3cfeb84725dbe8082d73a1
BLAKE2b-256 checksum
How to use checksums
b9cd357fd52bca1fef73157cf8357d1571fd7d6b60ed48692f1eefa9d2a82f57
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 16, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.1.1 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page