Export control-gap observations as CycloneDX¶
evidentia gap analyze --format=cyclonedx-vex exports a gap report using
CycloneDX 1.6 by default. Select 1.7 explicitly when needed. Both versions use
the same supported fields and retain each gap's source values.
These exports describe control-gap lifecycle observations. The analysis
object contains only detail; it does not assert vulnerability impact,
component applicability, vulnerable-code presence or exploitability. Accepting
a control risk, marking a control not applicable, or remediating a control gap
does not establish any of those software conclusions.
Before you start¶
Install Evidentia and prepare a control inventory as described in Run a gap analysis. Exporting needs no additional CycloneDX tool or network access. Check the selected schema version and your consumer's handling of gap observations before using the file in another system. Schema validation alone does not establish VEX applicability or interoperability with a particular consumer.
Export the default version¶
The following commands write CycloneDX 1.6 JSON to gap-vex.cdx.json.
Bash
evidentia gap analyze \
--inventory=my-controls.yaml \
--frameworks=nist-800-53-mod \
--format=cyclonedx-vex \
--output=gap-vex.cdx.json
PowerShell
evidentia gap analyze `
--inventory=my-controls.yaml `
--frameworks=nist-800-53-mod `
--format=cyclonedx-vex `
--output=gap-vex.cdx.json
You can also pass --vex-spec-version=1.6 explicitly. Omitting the option
retains the 1.6 default.
Select CycloneDX 1.7¶
Bash
evidentia gap analyze \
--inventory=my-controls.yaml \
--frameworks=nist-800-53-mod \
--format=cyclonedx-vex \
--vex-spec-version=1.7 \
--output=gap-vex-1.7.cdx.json
PowerShell
evidentia gap analyze `
--inventory=my-controls.yaml `
--frameworks=nist-800-53-mod `
--format=cyclonedx-vex `
--vex-spec-version=1.7 `
--output=gap-vex-1.7.cdx.json
Only the exact values 1.6 and 1.7 are accepted. An invalid value or an
explicit version used with another export format exits with status 2 before
inventory loading, analysis, output, report saving or signing. The CLI's input
path checks can run before this option check.
API and console¶
The gap export API accepts the optional JSON member vex_spec_version for
format: "cyclonedx-vex". Omission selects 1.6; explicit "1.6" and "1.7"
select those versions. Invalid typed values, null and unknown request members
produce HTTP 422. An explicitly supplied valid version with another format
produces HTTP 400 after the existing format and report-source checks, before
loading a stored report or creating an export file. A successful VEX response
retains the application/vnd.cyclonedx+json content type and .vex.cdx.json
download suffix.
In the console, choose CycloneDX VEX, then use CycloneDX version. The selector starts at 1.6. A download captures the chosen format and version; both selectors and the export button stay disabled while it runs. Static demo mode reports that VEX export is unavailable instead of downloading native report JSON under a VEX filename. Other demo export formats retain their existing behavior.
Output compatibility¶
Each control gap still produces one vulnerability entry with its existing
identifier, source, severity, description, recommendation and source properties.
The lifecycle details remain literal observations. The export does not add
analysis.state, analysis.justification, analysis.response or an affects
relationship inferred from those observations.
The serial number is a deterministic UUID URN derived from the report ID and the original analysis timestamp representation. Re-exporting that report in either version retains the serial. It is not a content digest, and a different offset representation can produce a different serial for the same instant. This reuse deliberately differs from the publisher's recommendation for a fresh serial per BOM. Consumers must not treat the serial as proof of identical content.
Tool metadata uses publisher. The metadata timestamp is the report's analysis
instant normalized to UTC with six fractional digits, not the time of export.
Naive timestamps, undefined offsets and UTC conversion outside the supported
calendar range are refused without substituting the current time. These
corrections apply to new exports in both versions. Previously written files
are not rewritten.
For the full option list, see the CLI reference. Other export workflows are covered in Emit SARIF and Emit OCSF Detection.