Skip to content

Industry perspectives / Software supply-chain evidence

New SPDX tools put SBOM change review in focus

A practical OriginChainDB walkthrough: connect component changes to evidence, inspect three live review outcomes and route the real CSV export with Python.

An OriginChainDB perspective.

OriginChainDB can connect a component-change record to its evidence and expose the gaps in a review queue. Here is a small, reproducible SQL workflow, followed by a real console export and a local application handoff.

The database queries and CSV handoff below were executed on 9 October 2026 using synthetic records.

Conceptual three-stage workflow from component-version changes, through evidence joined by a component key, to human review actions.

Open the workflow illustration at full size · Dark version

The development

On 5 October, SPDX announced four additions to its tools directory. They cover work including reviewing SBOM changes, assessing SBOM quality, generating inventories and keeping product records. That expansion raises a practical question for engineering teams: once a component changes, can the reviewer find the corresponding source evidence? Read the SPDX announcement.

A software bill of materials describes software components. A review workflow also needs to connect a particular change to the artifact and decision being examined. Our proposed application keeps that operational record in OriginChainDB. The tested part is deliberately small: two SQL tables, a join, a three-row export and a local routing script.

1. Define the integration boundary

Keep the SBOM generator or comparison tool responsible for producing and validating its own format. An application adapter would map its output into a component-change record, retaining the original documents and provenance separately. The tables here are an application-defined model; OriginChainDB is not being presented as a native SPDX importer.

For this prototype, the team supplies explicit keys such as demo-a. Those keys connect a version change to an evidence reference. Real deployments need a documented identity-mapping rule across releases; a name or document-local identifier alone should not be assumed to establish that mapping.

2. Load a tiny, inspectable change set

Open the console, select the intended demo instance, and open Workbench → New query → SQL. Run the statements in the SQL resource one at a time in a new namespace. The resource creates component_changes and review_evidence. If that namespace already exists, inspect it and use a fresh name for a new run.

The three fictional components have explicit previous and current versions. One has a missing declaration marker; another has no matching evidence row. They are designed to make the rule visible, rather than to represent a customer inventory.

Actual light-mode OriginChainDB Workbench showing parser-kit, image-tools and net-bridge with their previous and current versions and declared-license fields.

Figure 1. Actual console inputs. The three component names and all artifact references are synthetic; private instance labels were blurred before the image was saved.

3. Keep missing evidence in the result

The query starts from the complete change set and uses a LEFT JOIN. A change without an evidence row remains visible. Its CASE expression first flags the demonstration’s NOASSERTION marker, then a missing evidence match, and otherwise returns ready_for_review.

This ordering matters: if both pieces are missing, this example shows the declaration issue first. An application that needs every finding should model separate flags or review tasks instead of treating one status as the complete assessment.

SELECT c.component_key, c.component_name, c.current_version,
       c.declared_license, e.artifact_ref,
       CASE WHEN c.declared_license = 'NOASSERTION' THEN 'declaration_missing'
            WHEN e.component_key IS NULL THEN 'evidence_missing'
            ELSE 'ready_for_review' END AS review_state
FROM academy_news_20261012_components.component_changes c
LEFT JOIN academy_news_20261012_components.review_evidence e
  ON c.component_key = e.component_key
ORDER BY component_key;

Actual Workbench query using LEFT JOIN and CASE to produce declaration_missing, evidence_missing or ready_for_review.

Figure 2. The query as executed. It checks the two modeled conditions; it does not evaluate license compatibility or the contents of an artifact.

4. Explain the observed result

ComponentObserved stateReason in this fixture
parser-kit 1.3ready_for_reviewA declaration and a matching artifact reference are present.
image-tools 2.1declaration_missingThe declared field contains the example’s missing-declaration marker.
net-bridge 4.5evidence_missingThe evidence table has no matching component key.

Expanded live result containing three rows: parser-kit ready_for_review, image-tools declaration_missing and net-bridge evidence_missing.

Figure 3. The actual three-row result. ready_for_review means only that the two modeled inputs are present. It is not an approval, certification or vulnerability assessment.

5. Hand the result to an application

Click Export CSV after checking that the successful result is the intended query. We exported these live rows and ran the supplied Python adapter locally. It rejects missing columns, repeated component keys and unknown states, then maps each state to a review action.

python route-review-rows.py live-review-result.csv

The executed output routed demo-a to standard_review, demo-b to request_declaration, and demo-c to request_source_evidence. Every row retains human_review_required: true. Inspect the actual local output. The adapter writes JSON only; it did not send tickets or contact another service.

A production service could replace the manual export with an authenticated query through a supported client, then present the same review queue. That automated path, the upstream SBOM adapter and external ticket creation are proposed integration work; they were not executed in this example.

6. Make the next iteration dependable

Before expanding the prototype, define how document revisions and component identities are preserved, how missing and blank declarations are normalized, and how multiple evidence artifacts relate to one change. This tiny table permits one evidence row per key; a real many-to-one evidence model needs an explicit selection or aggregation rule to avoid unexpected duplicate results.

Keep original artifacts in an appropriately controlled location and store resolvable references and provenance. Treat SBOM contents and names as untrusted input when importing or displaying them. Parameterize application writes, scope the database identity to its task, and make retries distinguish a repeated import from a new revision.

The useful contribution is an inspectable connection between a change and its evidence. OriginChainDB’s tested SQL behavior lets this prototype retain missing matches, label a review queue and hand the resulting rows to a small application. The next step is to validate the adapter and review policy against the team’s actual data contract.

Reproduce and inspect

Tested through the live OriginChainDB console on 9 October 2026. Deployment version was not exposed by this workflow. Timings visible in screenshots are single observed round trips, not benchmarks.

From reading to building

Put your data to work.

Explore SQL, vector, graph and full-text in one database.

Open the quickstart