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
fix(sbom): eight preservation defects review found, and the guard that missed one
Every one reproduced before it was fixed and fails a test after.
Identity and sources. Converting SPDX to CycloneDX adopted the source
namespace into the model, minted a fresh serial because CycloneDX has no
namespace slot, and then suppressed the source link by comparing against
the namespace -- so the export named its source neither way. The
comparison is now against the identity the format actually writes. A
document that asserted nothing about itself is also a source now: dropping
it made a merge of two documents look like a conversion of one and publish
the merged inventory under the other's identity.
A conversion keeps the source's creation time. It adopts the source's
identity, and claiming that identity while stating a different creation
time is two claims that disagree. The fixed-point test pinned the
timestamp, which is exactly what hid this; it pins nothing now.
Component data. A homepage vanished on any CycloneDX hop -- the format has
no homepage field, so it travels as the website reference CycloneDX offers
for the same claim, both ways. A document whose only component is its
primary one lost supplier, description, hashes, CPE and references, since
the ingest fallback never applied assertions. Configured provenance
overwrote a root component's own supplier: one names who supplied the
component, the other who produced the project.
Two components minting one canonical package URL discarded the second
along with everything it asserted. They fold through the SDK's InsertNode
now. The guard that exists to catch exactly this spelled the lookup as
`.Node(node.ID)`, so it never saw `.Node(packageID)` -- widened, which
immediately found a second site in explain.
An ingested organization disappeared even on a CycloneDX round trip: the
export filled the one manufacturer slot from configured provenance alone.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
0 commit comments