Trigger Events and Updates
Decision trees for when to generate, update, or publish transparency artifacts
Knowing precisely when to generate SBOMs, publish VEX documents, or update existing artifacts prevents both waste (unnecessary work) and gaps (missed compliance obligations). This page provides decision trees and automation triggers for each scenario.
Decision framework
Use this decision tree to determine required actions:
EVENT OCCURS
↓
Is this a software change?
├─ YES → Did components change?
│ ├─ YES → Generate new SBOM
│ └─ NO → Re-evaluate (may be config-only)
│
└─ NO → Is this a vulnerability event?
├─ YES → Publish or update VEX
└─ NO → Is this metadata correction?
├─ YES → Update existing artifact
└─ NO → No action requiredSBOM generation triggers
Mandatory SBOM generation
Generate a new SBOM when:
| Trigger | Description | Example | Automation Level |
|---|---|---|---|
| New release | Major, minor, or patch version | 1.0.0 → 1.0.1 | Fully automated (CI/CD) |
| Dependency update | Lock file changed | npm update → new package-lock.json | Fully automated (CI/CD) |
| Component addition | New library/module included | Add authentication library | Fully automated (CI/CD) |
| Component removal | Library/module removed | Remove deprecated dependency | Fully automated (CI/CD) |
| Transitive change | Indirect dependency resolved differently | Same source, different resolved tree | Fully automated (CI/CD) |
| Build config change | Compilation flags or build tools updated | Enable/disable features | Semi-automated (manual trigger) |
Optional SBOM updates
Consider generating new SBOM when:
| Trigger | Rationale | Recommendation |
|---|---|---|
| Metadata correction | Fix typo in supplier name | Update if incorrect data is significant |
| Enrichment | Add pedigree or provenance data | Generate new version with enhanced metadata |
| Format migration | Switch from SPDX to CycloneDX | Treat as new artifact, retain original |
| Re-scan | Rerun tools with better detection | Only if substantially different results |
NOT SBOM generation triggers
Do NOT generate new SBOM when:
| Event | Why Not | Correct Action |
|---|---|---|
| New vulnerability discovered | Software didn't change | Publish/update VEX instead |
| VEX status update | Components unchanged | Update VEX only |
| Documentation update | Code unchanged | No SBOM/VEX action |
| Configuration change | Runtime config (not build-time) | Update deployment docs, not SBOM |
VEX publication triggers
Initial VEX publication
Publish a new VEX document when:
| Trigger | VEX Status | Timeline | Automation Level |
|---|---|---|---|
| CVE published affecting your components | under_investigation | Within 24-48 hours | Automated (alert + draft VEX) |
| Private vulnerability disclosed | under_investigation | Immediately | Manual (confidential) |
| Analysis completed (not affected) | not_affected | Within days-weeks | Semi-automated (human approval) |
| Analysis completed (affected) | affected | Within days-weeks | Semi-automated (human approval) |
VEX updates
Update existing VEX when:
| Trigger | VEX Action | Timeline | Example |
|---|---|---|---|
| Patch/fix released | Change status to fixed | At release time | v1.0.1 fixes CVE-2024-1234 |
| Workaround identified | Add mitigation details | ASAP | Configuration change reduces risk |
| Analysis revised | Update justification | As needed | Initial assessment incorrect |
| Exploit published | Add urgency/severity update | Within hours | Public exploit code available |
| New affected version | Extend scope | When discovered | CVE also affects v2.0.0 |
VEX versioning triggers
Create a new VEX version (increment version number) when:
- Analysis status changes (
under_investigation→affected) - New information becomes available (exploit details, EPSS score)
- Mitigation guidance changes
- Affected version list changes
Do NOT create new VEX version for:
- Typo corrections (minor editorial fixes)
- Formatting changes
- Non-substantive metadata updates
Automation decision tree
Use this decision tree to determine automation strategy:
Can this trigger be automated?
EVENT OCCURS
↓
Is detection automated?
├─ YES → Proceed to automation
└─ NO → Manual detection required
↓
Can detection be automated?
├─ YES → Implement detection automation
└─ NO → Document manual checklist
↓
Is response deterministic?
├─ YES → Fully automate action
│ Examples: CI/CD SBOM generation, initial VEX draft
│
└─ NO → Requires human judgment
↓
Semi-automate:
- System detects event
- System drafts response
- Human reviews and approves
Examples: VEX status determination, vulnerability impact analysisTrigger event matrix
Comprehensive matrix of events and required actions:
| Event Category | Specific Event | SBOM | VEX | Timeline | Automation |
|---|---|---|---|---|---|
| Software Release | Major release (1.0 → 2.0) | ✅ New | Review existing | At release | Full |
| Software Release | Minor release (1.0 → 1.1) | ✅ New | Review existing | At release | Full |
| Software Release | Patch release (1.0.0 → 1.0.1) | ✅ New | Update if fixes CVE | At release | Full |
| Software Release | Hotfix | ✅ New | Update if security fix | Immediately | Full |
| Software Release | Re-release (rebuild) | ✅ New | No change | At rebuild | Full |
| Dependencies | Dependency update | ✅ New | Review applicability | At build | Full |
| Dependencies | Transitive change | ✅ New | Review applicability | At build | Full |
| Dependencies | Lock file change | ✅ New | No change | At commit | Full |
| Vulnerability | New CVE published | No change | ✅ New (under_investigation) | 24-48 hrs | Semi |
| Vulnerability | Analysis complete | No change | ✅ Update status | Days-weeks | Semi |
| Vulnerability | Patch developed | ✅ New (if released) | ✅ Update (fix available) | At fix | Full |
| Vulnerability | Exploit published | No change | ✅ Update urgency | Hours | Semi |
| Vulnerability | Workaround found | No change | ✅ Update mitigation | ASAP | Semi |
| Operational | EOL announcement | Update metadata | ✅ Update (no fixes) | At announcement | Manual |
| Operational | Metadata correction | ✅ New version (optional) | No change | As needed | Manual |
| Operational | Format migration | ✅ New format | No change | Planned | Manual |
Implementation patterns
Pattern 1: CI/CD integration (full automation)
Trigger: Git commit to release branch
Actions:
- Build pipeline starts
- Dependencies resolved
- SBOM generation tool runs
- SBOM validated against schema
- SBOM signed
- SBOM published to repository
- VEX reviewed for applicability (if dependencies changed)
Tools: GitHub Actions, GitLab CI, Jenkins + Syft/CycloneDX plugins
Pattern 2: Vulnerability monitoring (semi-automation)
Trigger: CVE published in NVD/vendor advisory
Actions:
- Monitoring system detects CVE
- System queries SBOM repository for affected products
- System generates draft VEX with
under_investigationstatus - Alert sent to security team
- Human analyzes impact
- Human updates VEX status with justification
- VEX published
Tools: Dependency-Track, vulnerability scanners + custom scripts
Pattern 3: Manual coordination (low-volume)
Trigger: Scheduled review (weekly/monthly)
Actions:
- Review all changes since last SBOM
- Determine if new SBOM needed
- Review all new vulnerabilities
- Determine VEX updates needed
- Batch generate/update artifacts
- Publish together
Suitable for: Legacy systems, low-frequency releases, resource-constrained teams
Handling edge cases
Edge case 1: Multiple releases in single day
Challenge: Don't generate SBOM for every commit during active development.
Solution:
- Generate SBOM only for tagged releases
- Use semantic versioning to distinguish releases from builds
- Pre-release versions (1.0.0-alpha.1) get SBOMs, commits don't
Edge case 2: Vulnerability affecting multiple versions
Challenge: Avoid redundant VEX documents.
Solution:
- Single VEX can reference multiple product versions
- Use version ranges where appropriate
- Clearly indicate which versions affected vs fixed
Edge case 3: Dependency change with same version number
Challenge: Dependency resolved to different patch version due to new release (e.g., ^1.2.0 resolves to 1.2.5 instead of 1.2.3).
Solution:
- Always generate new SBOM when lock file changes
- Hash-based artifact identification catches this
- Document in SBOM metadata that lock file changed
Edge case 4: False positive vulnerability report
Challenge: Automated systems flag vulnerability that doesn't actually affect your product.
Solution:
- Publish VEX with
not_affectedstatus - Include justification explaining why
- Prevents customers from being alarmed by security scanners
Checklist for trigger implementation
Use this checklist when setting up automation:
Detection:
- Can detect event automatically (webhook, polling, filesystem watch)
- Can distinguish between trigger types (release vs commit, major vs minor)
- Can access necessary context (commit messages, dependency diffs, CVE details)
Decision:
- Clear criteria for action (when to generate SBOM, when to update VEX)
- Documented exceptions (edge cases handled appropriately)
- Human approval points identified (where automation defers to judgment)
Action:
- Automated generation/update process
- Validation before publication
- Rollback mechanism if generation fails
- Notifications to relevant teams
Monitoring:
- Logging of all trigger events
- Alerts for failed automations
- Metrics on trigger frequency and response time
- Audit trail for manual overrides
Next steps
- Implement triggers based on your maturity level in Automation Strategies
- Review specific workflows: Generate SBOMs or Publish VEX
- Understand broader context in SBOM and VEX Lifecycle