From Inventory to Enforcement
Part 1 established what visibility means: a reliable, continuously updated inventory of every component in the environment, with ownership metadata attached. Visibility is the prerequisite. Control is what makes it operationally useful.
The shift from visibility to control is architectural. It requires three things working together:
A machine-readable artifact that captures what is in each component - the SBOM
A pipeline trigger model that determines when and where checks run
A gating mechanism that enforces policy before code reaches production
Each of these is a design decision, not a tool selection. The tools follow the decisions.
The SBOM: Making Inventory Machine-Readable
A Software Bill of Materials, or SBOM, is a structured, machine-readable record of every open-source component in a given artifact - its name, version, license, and origin. It is what turns the component inventory from a human-readable register into something downstream controls can query automatically.
Two formats dominate the space: SPDX and CycloneDX. Both were evaluated. Syft, the generation tool used across component types, produces both the formats and the outputs are inter-convertible. CycloneDX was retained as the standard format. The deciding factors were toolchain compatibility across the full component surface and directional alignment with the broader BOM ecosystem - CycloneDX's extensibility toward hardware, AI/ML, and SaaS dependency modeling made it the more forward-looking choice for a program that was not planning to stop at software.
The SBOM is an internal operational artifact at this stage. Raw SBOM files were consumed by the product security team, not distributed externally. The value is not the file - it is what the file enables downstream: automated vulnerability matching, license classification, and policy enforcement without manual inspection.
One scoping decision shaped everything else: if it does not ship, it does not count. Build-time and test-time dependencies are tracked separately. The production SBOM covers only what runs in the artifact. That boundary keeps the SBOM useful during incident response, when a bloated file covering build tooling alongside production packages slows down the exact query it is supposed to answer instantly.
The Pipeline Trigger Model
Knowing when to generate and when to enforce are separate decisions.
Generation runs on every build. Every build produces a current SBOM for that artifact at that commit. This keeps the inventory continuously fresh without requiring manual updates.
Sync to the central intelligence layer runs on release branches only. Release branches are the boundary between development and production-bound code. Syncing on release ensures the intelligence layer reflects what is actually heading toward customers - not every experimental branch or work-in-progress build.
Gating runs on every merge request, across all repositories, from day one. There is no phased rollout, no grace period for specific teams. The decision was made jointly with engineering and leadership before rollout: an unapproved package should have no path to production, not even a slow one. The gate is the enforcement point. The exception process is the safety valve.