lockage
Case file 0.1.0 Public evidence

How old is what you already locked?

Inspect every resolved direct and transitive version. Hold CI when a release is younger than your policy—across npm, Python, Rust, and PHP lockfiles.

$npx lockfile-age-audit check --min-age 3d
Evidence 01 / reproducible example

A young dependency can hide two edges deep.

Change the cooldown. The sample stays local and performs no network requests.

Policy verdictHOLD
Resolved package evidence at 2026-08-27 00:00 UTC
Resolved releaseAgeRegistryDependent chainFinding
tiny-transitive@2.0.012 hoursnpmsample-app › parent-lib@1.0.0 › tiny-transitive@2.0.0younger than 3d
parent-lib@1.0.01,928 daysnpmsample-app › parent-lib@1.0.0clear
HOLD  2 releases checked · cooldown 3.0d

! tiny-transitive@2.0.0  12h  npm
  sample-app > parent-lib@1.0.0 > tiny-transitive@2.0.0
Procedure 02 / CI gate

One policy after every resolver.

  1. 01

    Read resolved facts

    Auto-discover a lockfile or pass several. Aliases, workspaces, direct nodes, and transitive edges normalize into one graph.

  2. 02

    Retrieve timestamp evidence

    Public registries are queried with bounded concurrency, retries, and a 24-hour on-disk cache. Offline mode is cache-only.

  3. 03

    Stamp the build

    Exit 0 means compliant, 2 means policy violations, and 1 means the audit could not complete. JSON stays stable for automation.

GitHub Actions

- uses: B-Divyesh/sf-lockfile-age-audit@v0.1.0
  with:
    min-age: 3d
    lockfiles: package-lock.json

pre-commit

- id: lockfile-age
  entry: npx --no-install lockage check --min-age 3d
  language: system
  pass_filenames: false
Scope note 03 / honest boundary

Cooldown is evidence,
not a safety verdict.

This tool does not detect malware, inspect code, consult advisory feeds, or decide which maintainer to trust. Old releases can be harmful. Young releases can be sound.

Private authenticated registries, Go, and Maven are outside 0.1.0. Lockfiles stay local; public registry requests contain only package names and versions.

Read the full threat model →