Safeguard
Compliance•

What should a license decision log record for each dependency?

A license decision log should record package, version, SPDX license, evidence, scope, decision, approver, date and review date. Here is why each matters.

Safeguard Security Team
3 min read

A license decision log should hold, for each dependency decision: package and exact version, the SPDX identifier, where the evidence came from, scope, the decision and its reason, the approver, the date, and an expiry or review date. With those fields, you can answer an auditor or acquirer without reconstructing history.

The fields

FieldWhy it matters
Package and exact versionLicenses can change between releases
License identifierUse SPDX so entries can be compared
Evidence sourceMetadata, LICENSE file or header, with a link
ScopeRuntime, development, build only, vendored
DecisionAllow, allow with conditions, replace, deny
ReasonA line a stranger can understand
ApproverA named role or person
DateShows what you knew when
Review dateForces a second look for exceptions

Why version and evidence are the ones people skip

The npm and Python documentation both let publishers change license fields between releases, and the Python specification notes the older free text License field and the newer License-Expression field. If you only write "package X is MIT", you cannot show which release you checked or which field you read.

A sample entry

package: example-lib
version: 2.4.1
license: Apache-2.0
evidence: LICENSE file in published archive, NOTICE present
scope: runtime, shipped in mobile app
decision: allow, carry NOTICE text in about screen
approver: engineering lead
date: 2026-10-19
review: next major version

Where to keep it

Anywhere with history and access control: a repository folder with reviewed changes, a ticket system, or your compliance tool. What matters is that it is searchable by package and that edits leave a trail.

Link it to the pipeline

Make the gate point to the log. When a rule blocks a package, the message should say which decision entry would allow it, or how to create one. That turns the log from an archive into a working tool. For exception handling with expiry, see license exception and waiver process with expiry.

Keep it small

Do not log every permissive allow. Pre-approved licenses are covered by policy. Log the reviews, unknowns, customs and exceptions, where a human made a call.

This is practical guidance and not legal advice.

Quick check

Do I log each time a version bumps?

Only when the license changed or the policy requires review. Otherwise the policy covers it.

Who should approve?

Whoever your policy names. It is common to have engineering approve routine items and counsel approve hard ones.

Safeguard's policies and compliance and evidence automation can hold this record next to the findings.

Sources

Last reviewed: 19 October 2026.

Never miss an update

Weekly insights on software supply chain security, delivered to your inbox.

Self-healing security runs on Safeguard.

Your first fix PR is minutes away.

No sales call required, even your agent can complete the purchase over MCP.