feat(enrichment): add deprecated / unmaintained dependency analyzer#3637
Conversation
Add a local, deterministic deprecatedDep REES analyzer that flags a direct dependency a PR newly adds or upgrades when it is an officially deprecated or unmaintained package with a maintained successor. Reuses the shared manifest parser and matches added/upgraded names against a bundled curated list per ecosystem (npm + PyPI); no network, no token. Conservative and fail-safe: only exact list matches are reported, bounded by manifest/patch/finding caps. Closes JSONbored#1511
|
Superagent didn't find any vulnerabilities or security issues in this PR. |
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #3637 +/- ##
=======================================
Coverage 93.20% 93.20%
=======================================
Files 313 313
Lines 31910 31910
Branches 11677 11677
=======================================
Hits 29741 29741
Misses 1517 1517
Partials 652 652
🚀 New features to boost your workflow:
|
|
Warning 🟨🟨🟨🟨🟨🟨🟨🟨🟨🟨🟨🟨 ⏸️ Gittensory review result - manual review recommendedReview updated: 2026-07-05 21:03:27 UTC
⏸️ Suggested Action - Manual Review Review summary Nits — 6 non-blocking
Review context
Contributor next steps
Signal definitions
🟩 Safe / merged · 🟦 Advisory · 🟨 Held for review · 🟥 Blocked / closed 💰 Earn for open-source contributions like this. Gittensor lets GitHub contributors earn for the work they already do — register to start earning →. Checked by Gittensory, a quiet PR intelligence layer for OSS maintainers.
|
Closes #1511
What
Adds a
deprecatedDepREES analyzer that flags a direct dependency a PR newly adds or upgrades when that package is officially deprecated or unmaintained and a maintained successor exists — an adoption risk + future supply-chain liability the no-checkout headless reviewer cannot see from the diff alone.How
Pure local, deterministic, no-network analyzer (
cost: "local",requires: ["files"]), matching the established offline-list approach thetyposquatanalyzer already uses for its popular-package set:extractDependencyChanges(same parserdependency-scan,typosquat, andheavy-dependencyuse), so only deps present after the change are considered — removals are never flagged.[]on an aborted signal or absent patches; bounded by manifest, patch-line, and finding caps.Wiring (established 10-file pattern)
review-enrichment/src/analyzers/deprecated-dep.ts— the analyzerregistry.ts(import + descriptor, appended last),render.ts(brief section),types.ts(DeprecatedDependencyFinding+BriefFindingskey)src/review/enrichment-analyzer-names.ts— one canonical name entry (deprecatedDep)review-enrichment/analyzer-metadata.json,apps/gittensory-ui/src/lib/rees-analyzers.ts,.env.example— regenerated vianpm run rees:metadatareview-enrichment/test/deprecated-dep.test.ts(units, full analyzer branch coverage) +analyzer-registry.test.ts(stable-order entry)Verification
npm run typecheck— cleannpm run rees:test— all units pass, incl.metadata:checkand sourcemap validationnpm run ui:typecheck/npm run ui:lint/npm run ui:test— 0 errorsgit diff --check— clean