feat: dependency hygiene engine - stale floors, phantom dependencies, and maintenance risk
@sonukapoor is already working on this.
Since Jun 25, 2026.
- Dominant language
- TypeScript
- Stars
- 715
- Forks
- 145
- Avg merge
- 21h 39m
- Merged PRs (30d)
- 66
Description
Three new audits that extend CVE Lite CLI from a vulnerability scanner into a full dependency health platform for JavaScript and TypeScript projects.
The problem
Vulnerability scanning catches CVEs. Override hygiene (OA001-OA008) catches broken security pins. But two more classes of dependency risk sit in the gaps:
- A package that is unmaintained and drags a transitive dep below its latest safe version - invisible to CVE scanners because no advisory exists yet
- A package imported in source code but not properly declared - present only via an override pin or by hoisting accident, a silent deploy-breaker under pnpm strict mode
And one gap in the existing override hygiene rules: a >= security floor that has become redundant because the ecosystem has moved on, but nobody dares remove it because there is no record of why it was added.
The three audits
| Audit | Rule | What it catches |
|---|---|---|
| Stale override floors | OA009 | >= floors where the un-overridden resolution already satisfies the constraint |
| Phantom dependencies | PD001/PD002 | Packages imported in source but not declared - only present via an override pin (PD001) or transitive hoisting (PD002) |
| Maintenance risk | DM001 | Unmaintained packages that constrain transitive deps below their latest safe version |
Why they belong together
They are three stages in the lifecycle of one bad dependency. The worked example is gray-matter:
gray-matteris added - DM001 would flag it as unmaintained (last release 2018)- It pins
js-yaml ^3.x- DM001 drag term; a latent version constraint - A
js-yamlCVE appears - team addsjs-yaml: ">=4.2.0"override floor js-yamlis imported in source - resolves only via that override pin = PD001 phantom- Ecosystem moves past the CVE - the floor is now redundant = OA009 stale floor
One replace action (swap gray-matter) retires the override, the phantom, and the stale floor in a single move. That is why all three audits share one engine and one shared context (lockfile graph, import map, OSV advisories, registry packuments).
Sub-issues
- OA009: Stale override floors - #730
- PD001/PD002: Phantom dependencies - #731
- DM001: Maintenance risk scoring - #732
- DM001: Release staleness signal - #835
- DM001: GitHub archive detection - #836
- CLI performance audit - #837
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Assessment
This issue has not been assessed yet.