All skills
simota avatar

/shift

@e307415
by shingo imotasimota/agent-skills85 stars
15

Orchestrating migrations, upgrades, and modernization across frameworks, libraries, APIs, databases, and dependencies. Generates codemods, applies Strangler Fig, verifies equivalence, plans rollback.

Use this Skill: https://skilld.dev/gh/simota/agent-skills/shift

This session only. Nothing lands on disk.

referencejavascript-ecosystem-anti-patterns.md

≈1.6k tokens on demand. Your agent reads this file only when SKILL.md points to it.

JavaScript Ecosystem Anti-Patterns

node_modules bloat, dependency-management traps, ecosystem-specific problems, and package manager choice

1. The 7 Major JavaScript Ecosystem Anti-Patterns

# Anti-Pattern Problem Symptoms Countermeasure
JE-01 Upgrade Cliff Dependency versions fall so far behind that updating becomes difficult Updates take weeks, the whole team is blocked Continuous small updates; use Renovate/Dependabot
JE-02 Transitive Bloat A direct dependency pulls in a mass of heavy transitive dependencies node_modules exceeds 500MB, 40,000+ files Check ahead of time with Bundlephobia/Packagephobia; consider lightweight alternatives
JE-03 Duplicate Dependencies Multiple major versions of the same package coexist Bundle size bloat, runtime inconsistencies yarn-deduplicate, npm dedupe, regular cleanup of the dependency tree
JE-04 Dead Dependencies Unused packages remain in the project Larger attack surface, unnecessary bundle size Regular scans with depcheck / knip, wired into CI
JE-05 Hidden Config Dependencies Config files for Babel/ESLint/Jest etc. implicitly reference packages Unexpected errors on config changes, hard to trace Explicitly document config-file dependencies
JE-06 Single-Purpose Micro-Packages Pulling in an external package for a few lines of function The left-pad problem, supply-chain attack risk Implement functionality under 10 lines yourself; use native APIs instead
JE-07 Package Manager Churn Frequently switching between npm/yarn/pnpm/bun Lockfile inconsistency, team confusion, unstable CI Standardize on one per project; manage it with corepack

2. Structural Causes of node_modules Problems and Countermeasures

Root cause:

  "JavaScript's dependency managers don't actually manage dependencies.
   They're just download-and-unpack tools."
  — Christoph Nakazawa (Meta)

  Structural issues:
    → Install speed degrades in proportion to dependency graph complexity
    → Adding a large dependency slows overall development speed
    → SemVer range resolution produces unnecessary duplicate versions
    → No post-install optimization algorithm exists

Countermeasure matrix:

  Problem               | Tool/Method
  ---------------------|----------------------------
  Unknown dependencies  | `yarn why`, ripgrep analysis
  Unused packages       | `depcheck`, `knip`, ripgrep
  Outdated versions     | `yarn outdated`, `ncu`
  Duplicate versions    | `yarn-deduplicate`, `npm dedupe`
  Overlapping similar packages | team-wide standardization rules + review
  Abandoned maintenance  | fork + publish custom, resolutions
  Growing size           | track node_modules size in CI

  Underlying principle:
    → Manage third-party code with the same rigor as your own code
    → Code review, team communication, continuous monitoring

3. Package Manager Selection Guide (2024-2025)

Comparison of major package managers:

  npm:
    ✅ Bundled with Node.js, the ecosystem standard
    ❌ Speed and disk usage on large-scale projects
    Fits: small-to-medium projects, teams standardized on npm

  pnpm:
    ✅ Fast, disk-efficient (content-addressable storage)
    ✅ Strict linking (prevents phantom dependencies)
    ❌ Compatibility issues with some tools
    Fits: monorepos, environments where disk efficiency matters

  Yarn (Berry):
    ✅ Plug'n'Play, zero-install
    ✅ Analysis tools like `yarn why`, `yarn-deduplicate`
    ❌ Learning cost of migrating to PnP
    Fits: large-scale projects, environments needing strict dependency management

  Bun:
    ✅ Extremely fast (native Zig implementation)
    ✅ Package manager + runtime + bundler in one
    ❌ Ecosystem maturity, not 100% Node.js compatible
    Fits: new projects, when speed is the top priority

  Selection criteria:
    → The team's existing skills + project scale + CI environment
    → Pin the version with corepack, declare it in the packageManager field

4. Supply Chain Security

Dependency security measures:

  Recognizing the attack surface:
    → A typical Node.js project depends on hundreds of third-party packages
    → Each package is a potential attack vector
    → An outdated package = an unpatched security hole

  Required measures:
    □ Run `npm audit` / `pnpm audit` regularly
    □ Visualize production dependencies with `npm ls --prod`
    □ Continuous monitoring via Snyk / Socket.dev
    □ Proactively remove unused packages (shrink the attack surface)

  Advanced measures:
    □ Force-update vulnerable transitive dependencies with npm overrides / pnpm overrides
    □ Manage approved packages via a private repository
    □ Build lockfile diff review into the PR process
    □ Detect malicious packages with `socket.dev`

  ❌ Anti-pattern: deploying to production while ignoring `npm audit` warnings
  ✅ Recommended: integrate security audits into the CI/CD pipeline

5. Integration with radar

Usage within `radar`:
  1. Screen for JE-01 through JE-07 during the ASSESS phase
  2. Run an ecosystem audit in coordination with dependency-health-scan.md
  3. Optimize size against the bundle budget (≤170KB initial JS, compressed)
  4. Build a PoC for alternative packages during the PREPARE phase

Quality gates:
  - Versions far behind → staged update plan (prevents JE-01)
  - node_modules exceeds 500MB → dependency inventory review (prevents JE-02)
  - Duplicate versions detected → run dedupe (prevents JE-03)
  - Unused packages → propose removal (prevents JE-04)
  - External dependency under 10 lines → propose a self-implementation (prevents JE-06)
  - Package manager change proposal → change cost must be quantified (prevents JE-07)

Source: Christoph Nakazawa: Dependency Managers Don't Manage Your Dependencies · NodeSource: Choosing the Right Package Manager (2024) · JavaScript Conference: Preventing Dependency Risks

Source: SKILL.md on GitHub

1 warning13d4 checks · Risk SAFE
  • Gen Agent Trust Hub13d

    The 'shift' skill is a highly structured framework for orchestrating software migrations and modernization. It provides comprehensive documentation and automation strategies for framework jumps (React 19, Next.js 16, Svelte 5, Spring Boot 4), language transitions (JS to TS, Python 2 to 3), and database evolution. The skill emphasizes best practices like the Strangler Fig pattern, AST-based codemods, and behavioral equivalence testing. No malicious patterns, obfuscation, or unauthorized data access were detected; the skill proactively includes security advisories regarding compromised packages (e.g., the 2026 Axios supply chain alert) and promotes the use of official, trusted migration tools.

  • Socket13d

    1 alert: gptAnomaly

  • Snyk13d

    Risk: LOW · No issues

  • ZeroLeaks5mo

    Score: 93/100 · 2 sections analyzed

Signed by skilld at e307415. This ties the file your Agent reads to that commit on GitHub. It does not review the instructions.

Last checked against GitHub 2 days ago.

Activeupdated 2 weeks ago

README badge

README badge for simota/agent-skills/shift