Machine output coverage

Which commands speak --json, which produce machine-readable output another way, and where a real gap remains — audited per command against the shipped command grammar, and machine-checked by the offline test suite so this page cannot silently rot when a command is added or gains a flag.

If you are scripting against SBOMFlow, start with the CLI overview's integration contract; this page is the per-command census behind it.

The machine interface, in order of authority

  1. Artifacts on disk are the API. SBOMFlow's product is deterministic, versioned JSON files. A command that writes artifacts already has a machine interface — usually a richer one than any terminal flag could carry. sbomflow schema list names the families; sbomflow schema show <family> documents the fields offline.
  2. --json where operators read terminals. Read/status commands emit one pure, versioned JSON document on stdout (schema_version on every payload), with the same exit codes as the human output. Stdout stays pure: progress, notes and warnings go to stderr.
  3. Exit codes are a machine contract of their own. Every command's exit code follows the published exit-code reference, and errors carry stable [E0xx] codes in both text and JSON.

A universal "result envelope" wrapping every command's stdout is a recorded rejection, not an oversight: artifacts on disk are the primary machine interface, and re-wrapping every command's output for symmetry would break existing consumers without serving a named need.

The census

At v0.2 the CLI grammar has 122 command paths (78 top-level commands + 44 nested verbs). Of these, 36 take --json, 2 are machine-native without a flag, 59 produce artifacts on disk as their machine interface, 22 are human-only by design, and 3 are audited gaps where adding --json is planned.

VerdictCountMeaning
has-json36Takes --json; one versioned JSON document on stdout.
machine-native2Machine output is already the default: JSON with no flag, or a CI-native format.
artifact-suffices59The command's product is deterministic files on disk (or an identical sibling surface already speaks --json); a terminal flag would duplicate the real interface.
human-only-by-design22Prose, interactive or dispatch surfaces for a person at a terminal; a machine consumer has no job here (14 of the 22 are bare group names that print usage).
add3A real machine-consumer job is unserved today; exposing --json is planned as a follow-up change.

Every verdict below was audited against the command's implementation, not its help text: what it writes, what its exit code means, and which sibling command already serves the same data.

The audited matrix

<!-- JSON-COVERAGE:BEGIN — machine-checked against the shipped CLI grammar by the offline test suite. Every command path appears exactly once as the row's first backtick token; the verdict column uses only the five values defined above; a row's has-json verdict must match the real parser. Do not add, remove, or reword rows without re-running the suite. -->

CommandMachine output todayVerdictWhy
analyzeartifacts on diskartifact-sufficeswrites the full evidence artifact set (SBOM, findings, gaps, CRA report, gate…); the files are the API
annotateCI-native via --formatmachine-nativeits output IS a machine format: native CI annotations selected with --format (github, gitlab)
approve--jsonhas-jsonread/status surface; one versioned JSON document on stdout
audit--jsonhas-jsonread/status surface; one versioned JSON document on stdout
auditor-packartifacts on diskartifact-sufficeswrites auditor-pack.zip, a self-contained read-only package
backfill--jsonhas-jsonread/status surface; one versioned JSON document on stdout
bundleartifacts on diskartifact-sufficeswrites evidence-bundle.json / .zip, the portable reviewer handoff
caseusage onlyhuman-only-by-designgroup dispatcher: prints usage/guidance only; the machine surfaces are its nested verbs
case assignartifacts on diskartifact-sufficesappends JSON case records to a hash-chained journal; case show with --json is the read side
case correlateartifacts on diskartifact-sufficesappends JSON case records to a hash-chained journal; case show with --json is the read side
case intakeartifacts on diskartifact-sufficesappends JSON case records to a hash-chained journal; case show with --json is the read side
case openartifacts on diskartifact-sufficesappends JSON case records to a hash-chained journal; case show with --json is the read side
case show--jsonhas-jsonread/status surface; one versioned JSON document on stdout
case transitionartifacts on diskartifact-sufficesappends JSON case records to a hash-chained journal; case show with --json is the read side
case triageartifacts on diskartifact-sufficesappends JSON case records to a hash-chained journal; case show with --json is the read side
cmake-evidenceartifacts on diskartifact-sufficeswrites its deterministic evidence JSON (file or stdout)
compare-releasesartifacts on diskartifact-sufficeswrites release-drift.json
configusage onlyhuman-only-by-designgroup dispatcher: prints usage/guidance only; the machine surfaces are its nested verbs
config show--jsonhas-jsonread/status surface; one versioned JSON document on stdout
cosign-verifyartifacts on diskartifact-sufficeswrites its verification observations JSON via --output
dashboardartifacts on diskartifact-sufficesrenders a static human dashboard from release-index.json, which is already the machine surface
decisionsusage onlyhuman-only-by-designgroup dispatcher: prints usage/guidance only; the machine surfaces are its nested verbs
decisions recover--jsonhas-jsonread/status surface; one versioned JSON document on stdout
decisions transactions--jsonhas-jsonread/status surface; one versioned JSON document on stdout
decisions verify-transactions--jsonhas-jsonread/status surface; one versioned JSON document on stdout
diffoscope-compareartifacts on diskartifact-sufficeswrites the diffoscope comparison observations JSON
doctor--jsonhas-jsonread/status surface; one versioned JSON document on stdout
elf-evidenceartifacts on diskartifact-sufficeswrites its deterministic evidence JSON (file or stdout)
emit-user-infoartifacts on diskartifact-sufficeswrites the UNSIGNED CRA Annex II user-information draft files
esp-idf-evidenceartifacts on diskartifact-sufficeswrites its deterministic evidence JSON (file or stdout)
examples--jsonhas-jsonread/status surface; one versioned JSON document on stdout
explaintext for humanshuman-only-by-designrenders a prose explanation composed from artifacts that are already machine-readable on disk
firmware-extractartifacts on diskartifact-sufficeswrites the bounded extraction inventory JSON
gateusage onlyhuman-only-by-designgroup dispatcher: prints usage/guidance only; the machine surfaces are its nested verbs
gate simulate--jsonhas-jsonread/status surface; one versioned JSON document on stdout
help--jsonhas-jsonread/status surface; one versioned JSON document on stdout
indexusage onlyhuman-only-by-designgroup dispatcher: prints usage/guidance only; the machine surfaces are its nested verbs
index query--jsonhas-jsonread/status surface; one versioned JSON document on stdout
index rebuildartifacts on diskartifact-sufficeswrites the derived SQLite index — itself a machine-queryable artifact (index query speaks --json)
index validateexit code + textaddread-only integrity verdict is text-only today; every sibling verifier (store verify, vulndb verify, decisions verify-transactions) speaks --json; planned
index-releasesartifacts on diskartifact-sufficeswrites release-index.json, the machine-readable cross-release index
ingest-grypeartifacts on diskartifact-sufficeswrites sourced-observation JSON artifacts
ingest-sarifartifacts on diskartifact-sufficeswrites sourced-observation JSON artifacts
ingest-trivyartifacts on diskartifact-sufficeswrites sourced-observation JSON artifacts
initartifacts on diskartifact-sufficesscaffolds sbomflow.yaml and inert review templates; the scaffolded files are the product
licenseusage onlyhuman-only-by-designgroup dispatcher: prints usage/guidance only; the machine surfaces are its nested verbs
license inspect--jsonhas-jsonread/status surface; one versioned JSON document on stdout
license status--jsonhas-jsonread/status surface; one versioned JSON document on stdout
license verify--jsonhas-jsonread/status surface; one versioned JSON document on stdout
linker-map-evidenceartifacts on diskartifact-sufficeswrites its deterministic evidence JSON (file or stdout)
mcuboot-evidenceartifacts on diskartifact-sufficeswrites its deterministic evidence JSON (file or stdout)
mcuboot-verifyartifacts on diskartifact-sufficeswrites its verification observations JSON via --output
mender-evidenceartifacts on diskartifact-sufficeswrites its deterministic evidence JSON (file or stdout)
notifyartifacts on diskartifact-sufficeswrites the notification plan artifact; delivery is a separate explicit step
oci-evidenceartifacts on diskartifact-sufficeswrites its deterministic evidence JSON (file or stdout)
passportusage onlyhuman-only-by-designgroup dispatcher: prints usage/guidance only; the machine surfaces are its nested verbs
passport issueartifacts on diskartifact-sufficeswrites the signed passport files; passport verify (with --json) is the read side
passport verify--jsonhas-jsonread/status surface; one versioned JSON document on stdout
policyusage onlyhuman-only-by-designgroup dispatcher: prints usage/guidance only; the machine surfaces are its nested verbs
policy diff--jsonhas-jsonread/status surface; one versioned JSON document on stdout
policy show--jsonhas-jsonread/status surface; one versioned JSON document on stdout
portfolioartifacts on diskartifact-sufficeswrites the cross-product portfolio index plus its dashboard
prov-mapartifacts on diskartifact-sufficeswrites a deterministic PROV mapping JSON (file or stdout)
provenance-checkartifacts on diskartifact-sufficeswrites provenance-check observations JSON; expectations verdicts are in the artifact
quickstartartifacts on diskartifact-sufficeswrites the same artifact set as a first-run wrapper around an offline audit; the terminal summary is a courtesy
rauc-evidenceartifacts on diskartifact-sufficeswrites its deterministic evidence JSON (file or stdout)
recheckartifacts on diskartifact-sufficeswrites the recheck report artifact comparing shipped evidence to newer local advisory data
release-chainusage onlyhuman-only-by-designgroup dispatcher: prints usage/guidance only; the machine surfaces are its nested verbs
release-chain verify--jsonhas-jsonread/status surface; one versioned JSON document on stdout
reportusage onlyhuman-only-by-designgroup dispatcher: prints usage/guidance only; the machine surfaces are its nested verbs
report freshness--jsonhas-jsonread/status surface; one versioned JSON document on stdout
reproducible-compareartifacts on diskartifact-sufficeswrites the digest-comparison JSON for two build trees
review--jsonhas-jsonread/status surface; one versioned JSON document on stdout
review-mergeartifacts on diskartifact-sufficeswrites the merged reviewer decision file plus a conflict report
review-viewartifacts on diskartifact-sufficeswrites reviewer.html, a human console composed from artifacts that are already machine-readable
schemausage onlyhuman-only-by-designgroup dispatcher: prints usage/guidance only; the machine surfaces are its nested verbs
schema listexit code + textaddthe JSON listing already exists internally but the flag is not exposed; planned so schema show and the list speak the same way
schema show--jsonhas-jsonread/status surface; one versioned JSON document on stdout
setuptext for humanshuman-only-by-designinteractive, TTY-gated onboarding; refuses CI and redirected IO by design
sign-bundleartifacts on diskartifact-sufficeswrites detached signature envelope files (formats: sbomflow, in-toto)
standards-view--jsonhas-jsonread/status surface; one versioned JSON document on stdout
storeusage onlyhuman-only-by-designgroup dispatcher: prints usage/guidance only; the machine surfaces are its nested verbs
store addartifacts on diskartifact-sufficesrecords the release into the store (JSON records + index); store list / store show with --json are the read side
store empty-trash--jsonhas-jsonread/status surface; one versioned JSON document on stdout
store list--jsonhas-jsonread/status surface; one versioned JSON document on stdout
store query--jsonhas-jsonread/status surface; one versioned JSON document on stdout
store register-rename--jsonhas-jsonread/status surface; one versioned JSON document on stdout
store retain--jsonhas-jsonread/status surface; one versioned JSON document on stdout
store show--jsonhas-jsonread/status surface; one versioned JSON document on stdout
store timeline--jsonhas-jsonread/status surface; one versioned JSON document on stdout
store verify--jsonhas-jsonread/status surface; one versioned JSON document on stdout
store verify-gates--jsonhas-jsonread/status surface; one versioned JSON document on stdout
support-bundleartifacts on diskartifact-sufficeswrites the redaction-audited diagnostics zip; its contents are structured JSON
swupdate-evidenceartifacts on diskartifact-sufficeswrites its deterministic evidence JSON (file or stdout)
syft-scanartifacts on diskartifact-sufficeswrites syft-result.json (file or stdout) as ingested observations
sync-dependencytrackartifacts on diskartifact-sufficesdry-run by default: writes the machine-readable sync plan artifact; delivery is a separate explicit step
sync-issuesartifacts on diskartifact-sufficesdry-run by default: writes the machine-readable sync plan artifact; delivery is a separate explicit step
sync-jiraartifacts on diskartifact-sufficesdry-run by default: writes the machine-readable sync plan artifact; delivery is a separate explicit step
sync-servicenowartifacts on diskartifact-sufficesdry-run by default: writes the machine-readable sync plan artifact; delivery is a separate explicit step
twister-evidenceartifacts on diskartifact-sufficeswrites its deterministic evidence JSON (file or stdout)
update-manifest-evidenceartifacts on diskartifact-sufficeswrites its deterministic evidence JSON (file or stdout)
upgradeusage onlyhuman-only-by-designgroup dispatcher: prints usage/guidance only; the machine surfaces are its nested verbs
upgrade inspecttext for humanshuman-only-by-designpre-migration eyeball of artifact families/versions; the machine decision surface is upgrade plan with --json
upgrade migrate-copyartifacts on diskartifact-sufficeswrites migrated copies plus upgrade-manifest.json to a new directory, never in place
upgrade plan--jsonhas-jsonread/status surface; one versioned JSON document on stdout
upgrade validateartifacts on diskartifact-sufficesthe identical validation ships as top-level validate, which speaks --json with the same exit contract
uptane-evidenceartifacts on diskartifact-sufficeswrites its deterministic evidence JSON (file or stdout)
validate--jsonhas-jsonread/status surface; one versioned JSON document on stdout
validate-annexii-modelexit code + texthuman-only-by-designpackaged-model self-check; the machine contract is the exit code (0 pass, non-zero fail)
validate-article14-modelexit code + texthuman-only-by-designpackaged-model self-check; the machine contract is the exit code (0 pass, non-zero fail)
validate-configartifacts on diskartifact-sufficesthe same config validation surfaces machine-readably in doctor --json (config block: errors and warnings)
validate-graphexit code + texthuman-only-by-designpackaged-model self-check; the machine contract is the exit code (0 pass, non-zero fail)
validate-ssvc-modelexit code + texthuman-only-by-designpackaged-model self-check; the machine contract is the exit code (0 pass, non-zero fail)
validate-techdoc-modelexit code + texthuman-only-by-designpackaged-model self-check; the machine contract is the exit code (0 pass, non-zero fail)
verify-bundleexit code + textaddthe recipient-side handoff verifier reports layer detail as text only; its analogue passport verify speaks --json; planned
verify-package-artifactsartifacts on diskartifact-sufficeswrites digest-verification observations JSON
vulndbusage onlyhuman-only-by-designgroup dispatcher: prints usage/guidance only; the machine surfaces are its nested verbs
vulndb inspectJSON on stdout (no flag)machine-nativeprints its report as JSON on stdout with no flag needed
vulndb pinartifacts on diskartifact-sufficesrecords the active-snapshot pin; vulndb inspect is the JSON read side
vulndb updateartifacts on diskartifact-sufficesrecords a pinned, hashed snapshot plus its manifest (the one explicit network step)
vulndb verify--jsonhas-jsonread/status surface; one versioned JSON document on stdout
zephyr-evidenceartifacts on diskartifact-sufficeswrites its deterministic evidence JSON (file or stdout)

<!-- JSON-COVERAGE:END -->

The three audited gaps

Only three of the 122 paths were verdicted a real gap, all of them read-only verifiers or listings whose sibling commands already speak --json:

  • schema list — the machine-readable listing already exists internally; only the flag is missing. Planned.
  • index validate — integrity notes and errors are free text today; every comparable verifier ships --json. Planned.
  • verify-bundle — bundle verification detail (which layer passed or failed) is text-only; a CI consumer verifying a received handoff currently parses prose. Planned.

"Planned" means exactly that: the flags will arrive in a follow-up change, additively — no existing output, exit code, or artifact changes. Nothing else on this page is a commitment to add flags; the remaining non---json rows are deliberate.

Doctor wishlist facts (recorded verdicts)

The same audit reviewed the two outstanding doctor wishlist rows, and both shipped alongside it as facts-only additions — doctor reports local facts, fabricates nothing, and never decides:

  • offline docs availability — whether sbomflow help error and sbomflow help exit render from this install, with their code counts, and which web docs URLs error messages will print (recorded, never fetched).
  • path length — the absolute target path's length in characters and bytes next to the filesystem's own reported PATH_MAX / NAME_MAX limits, or an honest "not reported" where the platform has no answer.

See Troubleshooting for what doctor reports and why each row is context, never a verdict.