Lock dependency versions so builds are reproducible and supply-chain safe: lockfile discipline per ecosystem (npm/pip/Go/Rust/Ruby), exact-pin policy for direct vs transitive deps, scheduled audit cadence, upgrade runbooks, and vendoring fallbacks when a registry goes down. Triggers when a project lacks a lockfile, deps drift between environments, upgrades break builds, or a CI pipeline installs at build time.
./install.sh dependency-pinningname: "dependency_pinning" description: "Lock dependency versions so builds are reproducible and supply-chain safe: lockfile discipline per ecosystem (npm/pip/Go/Rust/Ruby), exact-pin policy for direct vs transitive deps, scheduled audit cadence, upgrade runbooks, and vendoring fallbacks when a registry goes down. Triggers when a project lacks a lockfile, deps drift between environments, upgrades break builds, or a CI pipeline installs at build time."
Make every build install the exact same code, in every environment, every time. That means a committed lockfile, installs that refuse to resolve at build time, a policy for how tight each pin is, a cadence for getting off old versions, and a plan for the day the registry is unreachable.
bin/dep-pinning-check.py against the repo root. It flags: missing lockfiles, unpinned or ranged requirements in manifests, CI jobs that resolve instead of installing from a lock, and tag-pinned GitHub Actions.references/ecosystem-lockfiles.md and commit it. A lockfile only protects you if CI installs from it, so fix the CI install step in the same change.package.json, pyproject.toml, go.mod, Cargo.toml) = intent: direct deps with the narrowest range the team can live with. Lockfile = truth: exact versions, every transitive dep, ideally with hashes. Binaries and deployed services lean toward exact pins everywhere; libraries lean toward caret/compatible ranges in the manifest so downstream resolvers keep room to move.references/audit-and-upgrade-runbook.md.references/registry-fallback.md.npm ci-style commands must fail loudly when the lock is stale; that failure is the feature.When this skill is used to set up or fix a repo's dependency discipline, the result includes:
.gitignore. Review lockfile diffs in PRs the way you review code: a lockfile-only PR with no manifest change is worth a second look.latest and never ship. Forbidden in committed manifests. Same for branch names in submodules and moving tags in CI workflows; use commit SHAs.overrides, yarn resolutions, Go version bump) when the direct parent will not move fast enough.bin/dep-pinning-check.py — read-only repo scanner. Run it from the repo root:
bash
python3 ~/workspace/skills/dependency-pinning/bin/dep-pinning-check.py [path]
Exit 0 means the pinning discipline is healthy; non-zero lists findings with severity (error/warn). It never modifies anything. See the header comment for the full check list.
publisher key 2e43c913833850e6d80f939677e3de76e806d47785c0f1caaca90f9d18c98e1e
No ratings yet — be the first to rate it.