You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Full write-up: docs/cisa-sbom-minimum-elements-2026.md, on branch claude/tool-sbom-requirements-assessment-jkudvt.
Sourcing caveat, carried from the assessment. Neither cyber.gov.au nor cisa.gov was reachable from the environment this was produced in — 403 on both, and on the regulations.gov copies of the PDF. The requirement set is reconstructed from CISA's 2025 draft, which the 2026 document finalises, plus published analysis of the final. The shape of the requirements is well attested; exact field wording, and anything added or dropped between draft and final, should be checked against the PDF before this is quoted externally. Every gap below is also a gap under the 2021 baseline or under both, so none of the conclusions depend on the 2026 text alone.
Status
Six of twelve data fields met, three partial, six not met. The document is schema-valid, correctly identified by purl, and unusually honest about resolution confidence — but carries none of the four fields the 2026 revision added, and no producer or licence data at all.
#24 is the only item that is a defect rather than a missing feature: _dependency_graph emits dependsOn: [] for components whose parentage was never recorded, and CycloneDX defines that as a positive claim of dependency-free. It is an unearned clean result in the one output format built for machine consumption, and it contradicts the function's own docstring. It should go first regardless of what happens to the rest of this list.
#25 is next on the same grounds: an icebergsca sbom run silently drops dev and test dependencies with nothing in the document saying so.
Items 1–4 need no network access and take the document from six fields to ten.
Out of scope, recorded so it is not re-derived
AI and SaaS. The 2026 document extends transparency considerations to both, with AI SBOM minimum elements as supplemental guidance covering models, datasets, performance indicators and AI-specific infrastructure. Additive to the general minimum elements rather than part of them, and not in scope for a package-manifest scanner. The honest statement is the limitation: a project depending on model weights or datasets has those dependencies invisible to this tool, and Generation Context: say that these SBOMs are pre-build source analysis, and stop inventing a tool version #28 is where that gets said.
SPDX output. The guidance names SPDX and CycloneDX as the acceptable formats and discourages SWID; one satisfies the requirement. CycloneDX was chosen for native VEX. Worth revisiting only if a consumer demands SPDX. (tests/schemas/spdx.schema.json is the licence-ID sibling the CycloneDX schema $refs, not SPDX support.)
CPE identifiers. Deriving them from purls is guesswork and a wrong CPE is worse than none. Better documented as a deliberate omission than attempted.
SBOM ingest.Ingest an existing SBOM and check it against OSV #23. Matters more under the 2026 framing than the 2021 one, since the revision is oriented toward real-time vulnerability management, and a tool that emits SBOMs but cannot consume one covers half that loop.
One caution for all of the above
Every field here adds a place where absence can be misread as absolution. An unknown licence rendered blank reads as unencumbered; a missing hash reads as unverified-but-fine; "unknown provenance" reads as trusted once it is one row among many. The existing safeguards — None distinct from empty, suppressed findings that stay in the report, tests asserting the absence of reassuring strings — are the pattern to extend. Each new field wants its negative test before it wants a renderer.
Umbrella for the assessment of our CycloneDX output against CISA's 2026 Minimum Elements for an SBOM, published 2026-07-29 with NSA, FBI and international partners, and relayed by the ACSC. It replaces the 2021 NTIA baseline outright.
Full write-up:
docs/cisa-sbom-minimum-elements-2026.md, on branchclaude/tool-sbom-requirements-assessment-jkudvt.Sourcing caveat, carried from the assessment. Neither cyber.gov.au nor cisa.gov was reachable from the environment this was produced in — 403 on both, and on the regulations.gov copies of the PDF. The requirement set is reconstructed from CISA's 2025 draft, which the 2026 document finalises, plus published analysis of the final. The shape of the requirements is well attested; exact field wording, and anything added or dropped between draft and final, should be checked against the PDF before this is quoted externally. Every gap below is also a gap under the 2021 baseline or under both, so none of the conclusions depend on the 2026 text alone.
Status
Six of twelve data fields met, three partial, six not met. The document is schema-valid, correctly identified by purl, and unusually honest about resolution confidence — but carries none of the four fields the 2026 revision added, and no producer or licence data at all.
Nothing in the repository claims CISA or NTIA conformance, so there is no over-claim to correct. The gap is capability — with one exception.
Start with #24
#24 is the only item that is a defect rather than a missing feature:
_dependency_graphemitsdependsOn: []for components whose parentage was never recorded, and CycloneDX defines that as a positive claim of dependency-free. It is an unearned clean result in the one output format built for machine consumption, and it contradicts the function's own docstring. It should go first regardless of what happens to the rest of this list.#25 is next on the same grounds: an
icebergsca sbomrun silently drops dev and test dependencies with nothing in the document saying so.Suggested order
dependsOn: []claims a component has no dependencies when we never learned its parentage #24 — the defect.compositionslands here.compositionswith CycloneDXdependsOn: []claims a component has no dependencies when we never learned its parentage #24; read together.lifecyclesand the0.0.0tool-version fallback. One function, no new data.licenses#12 + No Software Producer on any component, and no way to say we do not know #27 — licences and producers. Same registry fetch, same cache namespace, same--offlinequestion; doing them separately pays that cost twice.Items 1–4 need no network access and take the document from six fields to ten.
Out of scope, recorded so it is not re-derived
tests/schemas/spdx.schema.jsonis the licence-ID sibling the CycloneDX schema$refs, not SPDX support.)One caution for all of the above
Every field here adds a place where absence can be misread as absolution. An unknown licence rendered blank reads as unencumbered; a missing hash reads as unverified-but-fine; "unknown provenance" reads as trusted once it is one row among many. The existing safeguards —
Nonedistinct from empty, suppressed findings that stay in the report, tests asserting the absence of reassuring strings — are the pattern to extend. Each new field wants its negative test before it wants a renderer.