---
name: dependency-upgrade-migrator
description: "Expert guide for dependency upgrades, breaking change migrations, codemod automation, and package audit remediation / Panduan ahli untuk upgrade dependensi, migrasi breaking change, otomasi codemod, dan remediasi audit paket."
author: "Roedy Rustam"
version: "4.4.2"
---
# Dependency Upgrade Migrator (2026 Edition)
[English](#english) | [Bahasa Indonesia](#bahasa-indonesia)
---
## English
### Orchestration & Integration
- **Upstream & Lifecycle**: `zero-to-prod-orchestrator` (Phase 2 & Phase 7 upgrades), `brainstorming`, `session-memory-manager`.
- **Monorepos & Package Architecture**: `monorepo-architect` (pnpm catalogs & workspace dependency alignment), `living-codebase-ast-graph` (breaking change blast radius).
- **Quality Gates & Testing**: `e2e-testing-expert` (post-upgrade regression suites), `autonomous-tdd-debugger` (lockfile & test runner self-healing), `production-ready-hardener` (vulnerability audit).
- **CI/CD & Debt Cleanup**: `ci-cd-devops-architect` (Renovate bot pipelines), `zero-tech-debt-auditor` (dead code & deprecated API removal).
### Description
Production-grade guide for safely upgrading dependencies, migrating through breaking changes, and maintaining healthy dependency trees. Covers **automated upgrade tooling** (`npm-check-updates`, `taze`, Renovate Bot), **major framework migration guides** (React 18→19, Next.js 14→15, Tailwind v3→v4), **codemod automation** (jscodeshift, ts-morph), **vulnerability remediation** (`npm audit`, `pnpm audit`), **lockfile hygiene**, **monorepo alignment** (pnpm catalogs), and **breaking change detection workflows**.
### Trigger Conditions
Activate this skill when:
- Upgrading major versions of frameworks (React, Next.js, Tailwind, etc.).
- Running security audits and remediating vulnerabilities.
- Setting up automated dependency update bots (Renovate, Dependabot).
- Writing or running codemods for API migration.
- Cleaning up dependency trees and removing unused packages.
- Aligning dependency versions across monorepo packages.
---
### 1. Upgrade Strategy Matrix
| Upgrade Type | Risk Level | Strategy | Tools |
|---|---|---|---|
| **Patch** (1.0.x) | 🟢 Low | Auto-merge after tests pass | Renovate, Dependabot |
| **Minor** (1.x.0) | 🟡 Medium | Auto-merge with manual review | Renovate + test suite |
| **Major** (x.0.0) | 🔴 High | Manual review, migration guide, branch | Manual + codemods |
| **Security** (any) | 🔴 Critical | Immediate upgrade, hotfix | `npm audit fix`, manual |
---
### 2. Pre-Upgrade Checklist
```markdown
- [ ] Run `pnpm audit` / `npm audit` to identify vulnerabilities
- [ ] Check changelog/migration guide for the target version
- [ ] Ensure test suite is passing on current version (baseline)
- [ ] Create a dedicated branch for the upgrade
- [ ] Check peer dependency compatibility
- [ ] Review breaking changes list
- [ ] Identify files that need codemod transformation
- [ ] Back up lockfile before changes
```
---
### 3. Automated Upgrade Tooling
#### Checking for Updates
```bash
# Using taze (recommended — supports monorepos)
npx taze major # Show available major upgrades
npx taze minor -w # Auto-write minor updates to package.json
npx taze -r # Recursive (monorepo)
# Using npm-check-updates
npx ncu # Show available updates
npx ncu -u # Auto-write updates to package.json
npx ncu --target minor # Only show minor updates
```
#### Renovate Bot Configuration
```json
// renovate.json
{
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
"extends": ["config:best-practices"],
"labels": ["dependencies"],
"schedule": ["after 10pm and before 5am every weekday"],
"packageRules": [
{
"matchUpdateTypes": ["patch"],
"automerge": true,
"automergeType": "pr"
},
{
"matchUpdateTypes": ["minor"],
"automerge": true,
"automergeType": "pr",
"requiredStatusChecks": ["ci/test", "ci/build"]
},
{
"matchUpdateTypes": ["major"],
"automerge": false,
"labels": ["major-upgrade", "manual-review"]
},
{
"matchPackageNames": ["typescript", "react", "next"],
"automerge": false,
"labels": ["core-dependency"]
}
]
}
```
---
### 4. Major Framework Migration Guides
#### React 18 → 19
```typescript
// Key breaking changes:
// 1. forwardRef no longer needed (ref is a regular prop)
// ❌ Before (React 19)
const Input = forwardRef((props, ref) => (
));
// ✅ After (React 19)
function Input({ ref, ...props }: Props & { ref?: React.Ref }) {
return ;
}
// 2. useActionState replaces useFormState
// ❌ Before: import { useFormState } from 'react-dom'
// ✅ After: import { useActionState } from 'react'
// 3. use() hook for promises and context
// ✅ New: const data = use(fetchPromise);
// ✅ New: const theme = use(ThemeContext);
```
#### Next.js 14 → 15
```typescript
// Key changes:
// 1. params/searchParams are now async in page/layout/route
// ❌ Before: export default function Page({ params }: { params: { id: string } })
// ✅ After: export default async function Page({ params }: { params: Promise<{ id: string }> }) {
// const { id } = await params;
// 2. Caching: fetch() no longer cached by default
// ❌ Before: fetch() was cached by default
// ✅ After: fetch(url, { cache: 'force-cache' }) for explicit caching
// 3. Route handlers: GET is no longer cached by default
// Add: export const dynamic = 'force-static' if you want caching
```
#### Tailwind CSS v4 → v4
```css
/* Key changes: */
/* 1. Configuration moves from JS to CSS */
/* ❌ Before: tailwind.config.js with theme.extend */
/* ✅ After: @theme directive in CSS */
@import 'tailwindcss';
@theme {
--color-primary: oklch(0.6 0.2 260);
--font-sans: 'Inter', sans-serif;
--breakpoint-sm: 40rem;
}
/* 2. No more @tailwind directives */
/* ❌ Before: @tailwind base; @tailwind components; @tailwind utilities; */
/* ✅ After: @import 'tailwindcss'; */
/* 3. Renamed utilities */
/* ❌ Before: bg-opacity-50 */
/* ✅ After: bg-black/50 */
```
---
### 5. Codemod Automation (jscodeshift)
```typescript
// codemods/remove-forward-ref.ts
import type { API, FileInfo } from 'jscodeshift';
export default function removeForwardRef(fileInfo: FileInfo, api: API) {
const j = api.jscodeshift;
const root = j(fileInfo.source);
// Find all forwardRef calls and transform them
root.find(j.CallExpression, {
callee: { name: 'forwardRef' },
}).forEach((path) => {
// Extract the inner component function
const args = path.node.arguments;
if (args.length > 0 && (args[0].type === 'ArrowFunctionExpression' || args[0].type === 'FunctionExpression')) {
// Replace forwardRef(...) with the inner function
j(path).replaceWith(args[0]);
}
});
// Remove forwardRef import
root.find(j.ImportSpecifier, { imported: { name: 'forwardRef' } }).remove();
return root.toSource({ quote: 'single' });
}
// Run: npx jscodeshift -t codemods/remove-forward-ref.ts src/ --extensions=tsx,ts
```
---
### 6. Vulnerability Remediation
```bash
# Audit current state
pnpm audit # Show vulnerabilities
pnpm audit --fix # Auto-fix where possible
# For stubborn transitive dependencies
pnpm patch @ # Create a local patch
# or
pnpm overrides # Force specific version in package.json
# package.json — Force resolution
{
"pnpm": {
"overrides": {
"vulnerable-package": ">=2.0.0"
}
}
}
```
---
### 7. Dependency Cleanup
```bash
# Find unused dependencies
npx depcheck # Detect unused deps
npx depcheck --ignores="@types/*" # Ignore type packages
# Find duplicate packages
pnpm dedupe # Deduplicate lockfile
pnpm why # See why a package is installed
# Monorepo: Align versions with pnpm catalogs
# pnpm-workspace.yaml
catalog:
react: "^19.0.0"
typescript: "^5.7.0"
"@tanstack/react-query": "^5.60.0"
```
---
### Common Pitfalls to Avoid
| Anti-Pattern | Problem | Correct Approach |
|---|---|---|
| Upgrading all deps at once | Hard to identify breaking changes | Upgrade one major dep at a time |
| Ignoring peer dependency warnings | Runtime errors, subtle bugs | Resolve all peer dep conflicts |
| No test suite before upgrading | Can't verify nothing broke | Ensure tests pass before AND after |
| `npm audit fix --force` blindly | Can introduce breaking changes | Review each fix manually for major bumps |
| Skipping changelogs | Missing breaking changes | Always read CHANGELOG/migration guide |
| No lockfile in version control | Non-reproducible builds | Always commit `pnpm-lock.yaml` |
### Sovereign Execution, Token Efficiency & Invariants
| Dimension | Sovereign Mandate & Deterministic Contract |
| :--- | :--- |
| **Frontier Model Cascade** | Medium / High (`GPT-5.6 Sol Medium`, `Gemini 4 Argon`, `Claude Sonnet 5.5 High`, `Grok 4.7 High Fast`) |
| **Availability Fallback** | `Gemini 4 Argon/Pro` -> `Gemini 3.8 Flash`; `Claude Opus 5.5` -> `Claude Opus 4.6` (Zero unhandled missing-model errors) |
| **KV-Cache & Token Protocol** | Pin static instructions & schemas at prompt prefix (`kv-cache-prefix-optimizer`); pass surgical `CONTEXT_MAP.md` slices (<250 tokens/call) during Swarm Fan-Out |
| **SaaT CLI & MCP Dispatch** | CLI: `vibes skill exec dependency-upgrade-migrator ` / MCP: `vibes_skill_dispatch`, `vibes_ast_query`, `vibes_compile_cache`, `vibes_optimize_budget`, `vibes_verify_gate` |
| **NFR & Anti-Slop Invariants** | P99 API Gateway Latency < 85ms, OpenAPI 3.1 / TypeSpec strict schema parity, RFC 9457 Problem Details error contracts, Idempotency-Key enforcement; 100% complete zero-placeholder output verified via `node scripts/check-anti-slop.js --strict` |
---
---
## Bahasa Indonesia
### Integrasi Orkestrasi
- **Hulu & Siklus Hidup**: `zero-to-prod-orchestrator` (Upgrade Fase 2 & Fase 7), `brainstorming`, `session-memory-manager`.
- **Monorepo & Arsitektur Paket**: `monorepo-architect` (katalog pnpm & penyelarasan dependensi workspace), `living-codebase-ast-graph` (radius dampak breaking change).
- **Quality Gate & Pengujian**: `e2e-testing-expert` (suite regresi pasca-upgrade), `autonomous-tdd-debugger` (pemulihan mandiri lockfile & test runner), `production-ready-hardener` (audit kerentanan).
- **CI/CD & Pembersihan Utang**: `ci-cd-devops-architect` (pipeline bot Renovate), `zero-tech-debt-auditor` (penghapusan kode mati & API usang).
### Deskripsi
Panduan tingkat produksi untuk upgrade dependensi yang aman, migrasi melalui breaking change, dan pemeliharaan dependency tree yang sehat. Mencakup **tooling upgrade otomatis** (`taze`, Renovate Bot), **panduan migrasi framework utama** (React 18→19, Next.js 14→15, Tailwind v3→v4), **otomasi codemod** (jscodeshift, ts-morph), **remediasi kerentanan** (`pnpm audit`), **kebersihan lockfile**, dan **penyelarasan dependensi monorepo** (pnpm catalogs).
### Kondisi Pemicu
Aktifkan skill ini ketika:
- Mengupgrade versi mayor framework (React, Next.js, Tailwind, dll).
- Menjalankan audit keamanan dan memperbaiki kerentanan paket.
- Menyiapkan bot update dependensi otomatis (Renovate, Dependabot).
- Menulis atau menjalankan codemod untuk refaktor API usang secara massal.
- Membersihkan dependency tree dan menghapus paket yang tidak lagi terpakai.
---
### Matriks Strategi Upgrade Dependensi
| Tipe Upgrade | Tingkat Risiko | Strategi Penanganan | Tooling yang Dianjurkan |
|---|---|---|---|
| **Patch** (1.0.x) | 🟢 Rendah | Auto-merge setelah seluruh test suite lulus | Renovate, Dependabot |
| **Minor** (1.x.0) | 🟡 Sedang | Auto-merge dengan review PR singkat | Renovate + CI pipeline test |
| **Mayor** (x.0.0) | 🔴 Tinggi | Review manual, pelajari changelog, branch terpisah | Manual + Codemod AST |
| **Keamanan** (CVE) | 🔴 Kritis | Upgrade darurat dan rilis hotfix langsung | `pnpm audit --fix` / manual patch |
---
### Resep & Panduan Migrasi Kunci
#### 1. Tooling Pemindaian Upgrade (`taze`)
```bash
# Tampilkan upgrade versi mayor yang tersedia di workspace
npx taze major
# Tulis otomatis pembaruan minor ke package.json
npx taze minor -w
# Jalankan pemindaian secara rekursif di seluruh paket monorepo
npx taze -r
```
#### 2. Konfigurasi Renovate Bot Otomatis (`renovate.json`)
```json
{
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
"extends": ["config:best-practices"],
"labels": ["dependencies"],
"packageRules": [
{
"matchUpdateTypes": ["patch"],
"automerge": true,
"automergeType": "pr"
},
{
"matchUpdateTypes": ["minor"],
"automerge": true,
"requiredStatusChecks": ["ci/test", "ci/build"]
},
{
"matchUpdateTypes": ["major"],
"automerge": false,
"labels": ["major-upgrade", "manual-review"]
}
]
}
```
#### 3. Ringkasan Migrasi Framework Utama (2026 Standard)
- **React 18 ke 19**: `forwardRef` tidak lagi dibutuhkan (prop `ref` diteruskan seperti prop biasa). `useActionState` menggantikan `useFormState`. Hook `use()` dapat membaca promise dan React Context secara langsung.
- **Next.js 14 ke 15**: Parameter `params` dan `searchParams` pada page/layout/route kini bersifat asinkron (`Promise<{ id: string }>`). Default `fetch()` tidak lagi di-cache secara otomatis (`cache: 'force-cache'` harus dideklarasikan secara eksplisit jika diinginkan).
- **Tailwind CSS v3 ke v4**: Konfigurasi berpindah dari `tailwind.config.js` ke CSS native melalui direktif `@theme`. Direktif lama `@tailwind base;` diganti dengan `@import 'tailwindcss';`.
#### 4. Otomasi Codemod Menghapus `forwardRef` Menggunakan `jscodeshift`
```typescript
// codemods/hapus-forward-ref.ts
import type { API, FileInfo } from 'jscodeshift';
export default function transform(fileInfo: FileInfo, api: API) {
const j = api.jscodeshift;
const root = j(fileInfo.source);
root.find(j.CallExpression, {
callee: { name: 'forwardRef' },
}).forEach((path) => {
const args = path.node.arguments;
if (args.length > 0) {
j(path).replaceWith(args[0]);
}
});
root.find(j.ImportSpecifier, { imported: { name: 'forwardRef' } }).remove();
return root.toSource({ quote: 'single' });
}
```
### Jebakan Umum yang Wajib Dihindari
- **Mengupgrade Seluruh Dependensi Sekaligus**: Sulit melacak sumber error saat build rusak. Upgrade dependensi mayor satu per satu.
- **Mengabaikan Peringatan Peer Dependencies**: Menimbulkan konflik runtime tersembunyi.
- **Menjalankan `npm audit fix --force` Secara Membabi Buta**: Dapat memaksa install versi mayor yang merusak kode aplikasi.
### Matriks Eksekusi Berdaulat, Efisiensi Token & Invarian
| Dimensi | Mandat Berdaulat & Kontrak Deterministik |
| :--- | :--- |
| **Kaskade Model Frontier** | Medium / High (`GPT-5.6 Sol Medium`, `Gemini 4 Argon`, `Claude Sonnet 5.5 High`, `Grok 4.7 High Fast`) |
| **Invarian Fallback Ketersediaan** | `Gemini 4 Argon/Pro` -> `Gemini 3.8 Flash`; `Claude Opus 5.5` -> `Claude Opus 4.6` (Bebas gagal saat model belum tersedia/kuota penuh) |
| **Protokol Hemat Token & KV-Cache** | Kunci instruksi & skema statis di prefix awal (`kv-cache-prefix-optimizer`); kirim potongan `CONTEXT_MAP.md` (<250 token/panggilan) saat Fan-Out |
| **Eksekusi SaaT CLI & MCP** | CLI: `vibes skill exec dependency-upgrade-migrator ` / MCP: `vibes_skill_dispatch`, `vibes_ast_query`, `vibes_compile_cache`, `vibes_optimize_budget`, `vibes_verify_gate` |
| **Invarian NFR & Anti-Slop** | Latensi P99 API < 85ms, paritas skema ketat OpenAPI 3.1 / TypeSpec, kontrak error RFC 9457 Problem Details, penegakan Idempotency-Key; kode 100% tuntas tanpa placeholder diverifikasi melalui `node scripts/check-anti-slop.js --strict` |