Dependency management
Every dependency is a long-term relationship entered in one line
of a requirements file: its bugs become your bugs, its license
binds your distribution, its abandonment becomes your maintenance
burden - and the same is true of everything IT depends on. The
discipline has three phases: vet before adopting, stay current
while depending, and exit deliberately. An agent adding a
dependency without the intake check below is skipping due
diligence on the user's behalf; run it by default and report the
verdicts.
Intake: vet before adopting
Check every axis, not just the one that motivated the search
(rseng-software-reuse finds candidates; this is the gate they pass
through):
- Suitability: does it actually solve the need, at the right
size? A 50MB framework for one function fails this axis;
prefer the smallest dependency that does the job - or the
standard library, which needs no vetting.
- License compliance: identify the license AND the licenses of
its own dependency tree, and check compatibility with the
project (rseng-license-compliance owns the analysis; deps.dev
shows tree-wide licenses in one view). A perfect library under
an incompatible license is not a candidate.
- Trust and vulnerabilities - first AND second degree: check
the package against vulnerability databases (osv.dev covers
the major ecosystems), and check its TRANSITIVE tree - the
dependency's dependencies (deps.dev renders the full graph
with known advisories and OpenSSF Scorecard results). A clean
package pulling a vulnerable or unmaintained transitive is an
inherited problem; also weigh supply-chain signals: release
provenance, maintainer count, typosquatting-adjacent names
(rseng-security).
- Documentation quality: real docs (install, API reference,
examples that run), not just a README stub - undocumented
dependencies transfer their documentation debt to your users
and your future self (rseng-documentation's standards as the
yardstick).
- Maintenance and currency: recent releases, responsive issue
tracker, more than one maintainer; check the LATEST version
and adopt that, never an old version copied from a tutorial
or an LLM's memory - adopting outdated versions imports
already-fixed bugs and already-patched vulnerabilities. Verify
the current version against the registry, not recall - and when
the technology or domain is unfamiliar, research the ecosystem's
CURRENT tooling online (official docs, the community's guide)
before choosing; the state of the art moves faster than training
data, and requirements.txt-era habits are the canonical example
of a stale default.
- Community and continuity: bus factor, governance, whether the
project has a succession story (rseng-maintenance-sustainability
reads these signals) - for load-bearing dependencies, an
abandoned upstream is a foreseeable crisis.
Record the verdict: a one-line entry per adopted dependency in
the decision log (rseng-project-tracking) - what it is for, the
axes checked, any accepted risks. Declined candidates with
reasons are worth a line too (rseng-lessons-learned).
Staying current: the anti-rot regime
- Pin everything with lockfiles (rseng-reproducible-environments):
reproducibility and auditability come from the same mechanism -
you cannot vet what you cannot enumerate.
- Update on a cadence, not on crisis: automated update PRs
(Dependabot/Renovate class) sized to the project's tier -
security updates triaged promptly always; routine updates
batched on a schedule the tests can absorb (rseng-ci-cd runs the
suite against every bump; that is what makes updating cheap).
- Avoid outdatedness deliberately: track how far behind latest
each dependency sits and treat growing lag as debt - the
further behind, the more painful the eventual jump and the
longer the exposure window to fixed bugs. End-of-life versions
of runtimes and libraries (endoflife.date tracks them) are
hard deadlines, not suggestions.
- Read the release notes on major bumps: breaking changes,
deprecations and behavior changes belong in the update PR's
description, with the project's affected call sites named
(rseng-pair-programming's pre-review makes update PRs cheap to
merge).
- Re-audit periodically: the milestone project review
(rseng-code-review) re-runs the intake axes over the EXISTING
tree - licenses change, maintainers leave, advisories land
after adoption.
The transitive tree is your tree
- Know what you actually ship: the lockfile enumerates it; an
SBOM makes it queryable (rseng-security). "We do not use X" is
only true if nothing in the tree does.
- Minimize depth where choices exist: prefer dependencies with
small, well-maintained trees; every transitive node is attack
surface, license surface and rot surface.
- When a transitive is the problem (vulnerable, unmaintained,
license-incompatible): options in order - update the direct
dependency that pulls it, override/pin the transitive where
the ecosystem allows, replace the direct dependency, or
vendor-and-patch as the documented last resort.
Exit deliberately
Removal is part of management: when a dependency rots, duplicates
another, or a few stdlib lines would do, remove it - each removal
deletes risk. Migrations off a dependency get the parity-test
treatment (rseng-legacy-code); keeping a known-bad dependency gets
a dated, reasoned entry in the decision log with a revisit date,
never silence.
Working with this skill
This skill is source-independent: its authority is the ecosystem
services and tool documentation linked below. It gates what
rseng-software-reuse discovers, applies rseng-license-compliance and
rseng-security per axis, and hands the pinning to
rseng-reproducible-environments.
Learn more (verified):
Related skills
Check whether any of these applies before moving on:
- rseng-ci-cd - tests absorb automated update PRs
- rseng-license-compliance - license axis analysis
- rseng-maintenance-sustainability - upstream bus-factor and succession signals
- rseng-reproducible-environments - pinning and lockfiles
- rseng-security - vulnerabilities, SBOM, supply chain signals
- rseng-software-reuse - candidates entering the intake gate
1---2name: rseng-dependency-management3description: Covers the full lifecycle of third-party dependencies: vetting a library before adoption on every axis that matters - suitability, license, trust and vulnerabilities including the transitive tree, documentation, maintenance and version currency - then keeping dependencies current with lockfiles and automated updates, and replacing them when they rot. Use PROACTIVELY whenever a new dependency is about to be added, when dependencies are outdated or unpinned, when the user asks whether a library is safe or well chosen, mentions dependabot/renovate, transitive dependencies or version pinning, or when an audit is due. (Finding candidates: rseng-software-reuse; deep license analysis: rseng-license-compliance; lockfile mechanics: rseng-reproducible-environments.)4license: CC-BY-4.05---67# Dependency management89Every dependency is a long-term relationship entered in one line10of a requirements file: its bugs become your bugs, its license11binds your distribution, its abandonment becomes your maintenance12burden - and the same is true of everything IT depends on. The13discipline has three phases: vet before adopting, stay current14while depending, and exit deliberately. An agent adding a15dependency without the intake check below is skipping due16diligence on the user's behalf; run it by default and report the17verdicts.1819## Intake: vet before adopting2021Check every axis, not just the one that motivated the search22(rseng-software-reuse finds candidates; this is the gate they pass23through):24251. Suitability: does it actually solve the need, at the right26 size? A 50MB framework for one function fails this axis;27 prefer the smallest dependency that does the job - or the28 standard library, which needs no vetting.292. License compliance: identify the license AND the licenses of30 its own dependency tree, and check compatibility with the31 project (rseng-license-compliance owns the analysis; deps.dev32 shows tree-wide licenses in one view). A perfect library under33 an incompatible license is not a candidate.343. Trust and vulnerabilities - first AND second degree: check35 the package against vulnerability databases (osv.dev covers36 the major ecosystems), and check its TRANSITIVE tree - the37 dependency's dependencies (deps.dev renders the full graph38 with known advisories and OpenSSF Scorecard results). A clean39 package pulling a vulnerable or unmaintained transitive is an40 inherited problem; also weigh supply-chain signals: release41 provenance, maintainer count, typosquatting-adjacent names42 (rseng-security).434. Documentation quality: real docs (install, API reference,44 examples that run), not just a README stub - undocumented45 dependencies transfer their documentation debt to your users46 and your future self (rseng-documentation's standards as the47 yardstick).485. Maintenance and currency: recent releases, responsive issue49 tracker, more than one maintainer; check the LATEST version50 and adopt that, never an old version copied from a tutorial51 or an LLM's memory - adopting outdated versions imports52 already-fixed bugs and already-patched vulnerabilities. Verify53 the current version against the registry, not recall - and when54 the technology or domain is unfamiliar, research the ecosystem's55 CURRENT tooling online (official docs, the community's guide)56 before choosing; the state of the art moves faster than training57 data, and requirements.txt-era habits are the canonical example58 of a stale default.596. Community and continuity: bus factor, governance, whether the60 project has a succession story (rseng-maintenance-sustainability61 reads these signals) - for load-bearing dependencies, an62 abandoned upstream is a foreseeable crisis.6364Record the verdict: a one-line entry per adopted dependency in65the decision log (rseng-project-tracking) - what it is for, the66axes checked, any accepted risks. Declined candidates with67reasons are worth a line too (rseng-lessons-learned).6869## Staying current: the anti-rot regime7071- Pin everything with lockfiles (rseng-reproducible-environments):72 reproducibility and auditability come from the same mechanism -73 you cannot vet what you cannot enumerate.74- Update on a cadence, not on crisis: automated update PRs75 (Dependabot/Renovate class) sized to the project's tier -76 security updates triaged promptly always; routine updates77 batched on a schedule the tests can absorb (rseng-ci-cd runs the78 suite against every bump; that is what makes updating cheap).79- Avoid outdatedness deliberately: track how far behind latest80 each dependency sits and treat growing lag as debt - the81 further behind, the more painful the eventual jump and the82 longer the exposure window to fixed bugs. End-of-life versions83 of runtimes and libraries (endoflife.date tracks them) are84 hard deadlines, not suggestions.85- Read the release notes on major bumps: breaking changes,86 deprecations and behavior changes belong in the update PR's87 description, with the project's affected call sites named88 (rseng-pair-programming's pre-review makes update PRs cheap to89 merge).90- Re-audit periodically: the milestone project review91 (rseng-code-review) re-runs the intake axes over the EXISTING92 tree - licenses change, maintainers leave, advisories land93 after adoption.9495## The transitive tree is your tree9697- Know what you actually ship: the lockfile enumerates it; an98 SBOM makes it queryable (rseng-security). "We do not use X" is99 only true if nothing in the tree does.100- Minimize depth where choices exist: prefer dependencies with101 small, well-maintained trees; every transitive node is attack102 surface, license surface and rot surface.103- When a transitive is the problem (vulnerable, unmaintained,104 license-incompatible): options in order - update the direct105 dependency that pulls it, override/pin the transitive where106 the ecosystem allows, replace the direct dependency, or107 vendor-and-patch as the documented last resort.108109## Exit deliberately110111Removal is part of management: when a dependency rots, duplicates112another, or a few stdlib lines would do, remove it - each removal113deletes risk. Migrations off a dependency get the parity-test114treatment (rseng-legacy-code); keeping a known-bad dependency gets115a dated, reasoned entry in the decision log with a revisit date,116never silence.117118## Working with this skill119120This skill is source-independent: its authority is the ecosystem121services and tool documentation linked below. It gates what122rseng-software-reuse discovers, applies rseng-license-compliance and123rseng-security per axis, and hands the pinning to124rseng-reproducible-environments.125126Learn more (verified):127 - https://deps.dev - Open Source Insights: transitive graphs,128 licenses, advisories, Scorecard129 - https://osv.dev - OSV vulnerability database130 - https://endoflife.date - end-of-life dates for runtimes and131 libraries132 - https://docs.github.com/en/code-security/how-tos/secure-your-supply-chain -133 Dependabot automated updates134 - https://docs.renovatebot.com - Renovate automated updates135136<!-- related-skills:begin -->137138## Related skills139140Check whether any of these applies before moving on:141142- rseng-ci-cd - tests absorb automated update PRs143- rseng-license-compliance - license axis analysis144- rseng-maintenance-sustainability - upstream bus-factor and succession signals145- rseng-reproducible-environments - pinning and lockfiles146- rseng-security - vulnerabilities, SBOM, supply chain signals147- rseng-software-reuse - candidates entering the intake gate148149<!-- related-skills:end -->