Independent and not affiliated with the FDA, MHRA, ISPE, PDA, or any agency. Get the appgoutham@madhadi.com
madhadi.comData Integrity & GxP Quality
Browse all topics → Articles Templates & Procedures Learning paths GlossaryScenariosToolsRegulatory ReferencesLearning PathsTopics About Start here
Log Plug-and-play starting point CSV / CSA

Log: SOUP Inventory and Vulnerability Monitoring

A plug-and-play, continuously updated log of every Software of Unknown Provenance component in a device or SaMD product: pinned version, purpose, safety class served, required characteristics, transitive dependencies, anomaly and vulnerability source, review cadence, and patch decision, with a filled specimen row.

Document type: Log

Read and copy the template below into your own quality system. It is a generic starting point for your own internal use, provided as is, with no warranty; see the Terms and License. Adopting it does not by itself create compliance.

This is a ready-to-use log for Software of Unknown Provenance (SOUP), the operating systems, third-party libraries, open-source components, and runtime frameworks a device or SaMD product brings in rather than builds. IEC 62304 does not forbid SOUP; it requires that you manage it, and this log is the living record that shows you did. Replace every <<FILL: ...>> placeholder with your own specifics. A filled specimen row follows. This is a continuously updated operational record, not a point-in-time submission artifact; keep it current between releases, not just at them.

Document control header

FieldEntry
Log titleSOUP Inventory and Vulnerability Monitoring
Document number<<FILL: LOG-ID, e.g. LOG-SW-009>>
Software system / product<<FILL: SYSTEM NAME, e.g. companion dosing application>>
Log owner<<FILL: role, e.g. Software Lead or Product Security>>
Parent SOP<<FILL: SOP-ID for SOUP management, or your patch-management SOP>>

1. Purpose

This log identifies every SOUP component in <<FILL: SYSTEM NAME>>, the pinned version deployed, the safety-relevant purpose it serves, and the ongoing evidence that its published anomalies and vulnerabilities have been evaluated. It is the operational record behind the product’s Software Bill of Materials (SBOM) and is what an assessor pulls first when asking how a specific component is managed.

2. Scope

This log covers every SOUP component that ships in the released product, direct dependencies and the transitive dependencies they pull in, at every safety class. It does not cover build-time-only tooling that does not ship (a compiler, a test framework) unless that tooling itself could introduce a defect into the shipped artifact, in which case it is in scope and flagged as such.

3. Field definitions

FieldFormatRequiredWho enters / updates itWhen
Component ID<<FILL: sequential ID, e.g. SOUP-014>>YesSoftware architectOn first addition
Component nameTextYesSoftware architectOn first addition
Source / supplierText (project, vendor, or maintainer)YesSoftware architectOn first addition
Pinned versionExact version string, never “latest” or a rangeYesBuild / release engineerOn first addition and every version change
Direct or transitiveDirect / Transitive (with parent component ID if transitive)YesSoftware architectOn first addition
Purpose in architectureText, where in the architecture it sits and what it doesYesSoftware architectOn first addition
Safety class(es) of items it servesA / B / C, one or moreYesSoftware architect, cross-checked against the classification worksheetOn first addition and on architecture change
Required functional / performance characteristicsTextYes for Class B/CSoftware architectOn first addition
Required environmentOS, runtime, hardware constraintsYesSoftware architectOn first addition
Anomaly / vulnerability source(s) monitoredText, e.g. project tracker, CVE/NVD, vendor advisoriesYesProduct SecurityOn first addition
Review cadenceContinuous / Monthly / Quarterly / At periodic review, set by safety classYesProduct SecurityOn first addition
Last review dateDateYesProduct SecurityEvery review
Known anomalies reviewed (summary)TextYesProduct SecurityEvery review
Open vulnerabilitiesCVE ID(s) and status (assessed / mitigated / accepted / patch pending)Yes if any existProduct SecurityEvery review and on new CVE publication
Update / patch decisionText, including rationale if a patch is deferredYesSoftware Lead / Product SecurityOn each patch evaluation
Rollback path definedYes / No, referenceYesBuild / release engineerOn first addition
Entered / updated by, dateName, dateYesWhoever makes the entryEvery entry

4. Instructions for use

  1. Add a row before the component ships, not after. A component identified during a post-release audit is a finding, not a normal entry.
  2. Capture the full transitive tree, not only top-level packages named in a build manifest. A library your library pulls in ships in your product and carries the same obligation.
  3. Pin exact versions. A version range or a “latest” tag makes the deployed build non-deterministic and unauditable; resolve it to the exact version actually shipped.
  4. Set review cadence by the safety class the component serves, using the default table below unless a documented reason sets a different cadence for a specific component.
Safety class servedDefault review cadence
CContinuous automated monitoring, reviewed at least monthly, plus off-cycle review on any new relevant CVE
BMonthly automated monitoring, reviewed at least quarterly
AQuarterly, or at the system’s periodic review, whichever is more frequent
  1. Treat a version bump or a patch as a modification, not a routine update. Route it through the maintenance and change-control process, with an impact analysis and regression evidence, before it lands in this log as the new pinned version.
  2. Document unpatched known vulnerabilities explicitly. A justification (the vulnerable code path is unreachable in this configuration, or a compensating control blocks the attack) is acceptable; silence is not.
  3. Reconcile this log against the SBOM at each release so the two never diverge; the SBOM is the machine-readable export, this log is the field-level working record behind it.

5. Retention

Retain this log, and every prior version of it, for the life of the product plus <<FILL: retention period, e.g. the device's expected service life plus regulatory record-retention period>>, since a post-market vulnerability inquiry may require reconstructing exactly what was known and decided at a past point in time.

6. Acceptance criteria

  • Every SOUP component that ships, direct and transitive, has a row with a pinned version.
  • Every row’s review cadence matches the safety class it serves per section 4, and the last-review date is within that cadence.
  • Every open vulnerability has a status and, if unpatched, a documented justification.
  • No row shows a version range or “latest” in the pinned-version field.
  • The log reconciles against the current SBOM at the most recent release with no unexplained discrepancy.

7. The log

Component IDComponent nameSource / supplierPinned versionDirect / transitivePurposeSafety class servedAnomaly/vuln. sourceCadenceLast reviewOpen vulnerabilitiesPatch decisionRollback definedEntered by / date
<<FILL>><<FILL>><<FILL>><<FILL>><<FILL>><<FILL>><<FILL>><<FILL>><<FILL>><<FILL>><<FILL>><<FILL>><<FILL>><<FILL>>

8. Periodic sign-off

PeriodReviewerComponents reviewedOpen items carried forwardSignatureDate
<<FILL: e.g. 2026-Q3>><<FILL>><<FILL: count>><<FILL: count and IDs>>

Filled specimen

FieldEntry
Component IDSOUP-014
Component nameNumerical computing library
Source / supplierOpen-source project, upstream maintainer group
Pinned version1.26.4
Direct or transitiveDirect
Purpose in architectureArray math under the inference pipeline that feeds the dosing recommendation engine
Safety class(es) servedC (feeds ITEM-DOSE)
Required functional/performance characteristicsDeterministic results across supported platforms; documented numerical behavior at boundary values
Required environmentLinux runtime, specified Python and BLAS backend versions
Anomaly / vulnerability source(s) monitoredUpstream project issue tracker; National Vulnerability Database and CVE feed via automated SBOM scanning
Review cadenceContinuous automated monitoring, monthly formal review
Last review date2026-08-15
Known anomalies reviewed (summary)Two open upstream issues reviewed; neither reachable in this configuration (feature not used)
Open vulnerabilitiesNone currently open against the pinned version
Update / patch decision1.26.5 patch release evaluated 2026-08-20; contains an unrelated fix, no exploitable defect in our configuration found in 1.26.4; upgrade scheduled for the next planned release under change request <<FILL: CR number>>, not an emergency patch
Rollback path definedYes, prior container image tagged and retained per the configuration management SOP
Entered / updated by, dateA. Reyes, 2026-08-20

This row shows the pattern an assessor expects: an exact pinned version, a stated safety-class linkage, ongoing (not one-time) monitoring evidence, and a documented, reasoned decision about a discovered update rather than silence or an unexplained gap.

Common inspection findings this log prevents

  • A SOUP inventory that lists only direct dependencies and misses the transitive tree pulled in underneath them.
  • Version ranges instead of pinned versions, so the actual deployed build cannot be reconstructed from the record.
  • A one-time vulnerability scan performed at submission with no ongoing monitoring cadence or named owner afterward.
  • A “minor” version bump treated as a non-event instead of a modification routed through change control with impact analysis.
  • No SBOM, or an SBOM that does not match this log or the shipped binary.
  • An open, known vulnerability with no documented justification for why it was left unpatched.

How to adapt this log

  1. Set your document number and link it to your SOUP-management or patch-management SOP in the header.
  2. If you already generate an SBOM automatically from your build (recommended so it always matches the shipped binary), treat this log as the field-level working record that explains the decisions behind each SBOM entry, and reconcile the two at each release.
  3. Adjust the default review cadence table if your organization’s risk-based rationale supports a different frequency, and document the rationale.
  4. For a large product with hundreds of components, consider generating this log’s transitive-dependency rows automatically from your software composition analysis tool rather than hand-entering them, while keeping the safety-class linkage and patch-decision fields as reviewed, human-owned entries.
  5. Confirm your current SBOM format (commonly SPDX or CycloneDX) and vulnerability feed sources are actually wired into the monitoring described in section 4 before relying on this log as evidence of an active program.
Use madhadi.com as an app Full screen, works offline, one tap from your home screen.