Migration Example

Migrate code between formats/versions iteratively.

Example: Code Migration Loop

Migrate code between formats/versions iteratively.

Scenario

You need to migrate code from one format to another (CommonJS to ESM, JavaScript to TypeScript, etc.) and want Al to keep iterating until the migration is complete.

CommonJS to ESM Migration

/ralph "Migrate src/lib/ from CommonJS to ESM (require to import, module.exports to export)" \
  --completion "node --experimental-vm-modules src/lib/index.mjs runs without errors" \
  --max-iterations 15

JavaScript to TypeScript Migration

/ralph "Convert src/utils/*.js files to TypeScript with proper types" \
  --completion "npx tsc --noEmit exits with code 0" \
  --max-iterations 20

React Class to Functional Components

/ralph "Convert src/components/*.tsx class components to functional components with hooks" \
  --completion "npm test passes AND npx tsc --noEmit passes"

Update Dependencies

/ralph "Update all dependencies to latest versions and fix any breaking changes" \
  --completion "npm test passes AND npm run build succeeds" \
  --max-iterations 25

API Version Migration

/ralph "Migrate API calls from v1 to v2 endpoints" \
  --completion "npm test -- api passes"

Iteration Example (ESM Migration)

Iteration 1:

  • Changes `require()` to `import`
  • Changes `module.exports` to `export`
  • Adds `.mjs` extension
  • Result: Module resolution errors

Iteration 2:

  • Fixes import paths (adds `.mjs` extensions)
  • Result: Named export errors

Iteration 3:

  • Converts default exports to named exports where needed
  • Result: A few circular dependency issues

Iteration 4-6:

  • Restructures to eliminate circular dependencies
  • Result: All imports resolve

Iteration 7:

  • Fixes runtime errors from the conversion
  • Result: Module runs successfully!

Expected Output

═══════════════════════════════════════════
Agent Loop: SUCCESS
═══════════════════════════════════════════

Task: Migrate src/lib/ from CommonJS to ESM
Status: SUCCESS
Iterations: 7
Duration: 12m 18s

Verification:
$ node --experimental-vm-modules src/lib/index.mjs
Library initialized successfully

Files modified: 15
- src/lib/index.mjs (renamed from .js)
- src/lib/utils.mjs
- src/lib/helpers.mjs
- ... (12 more)

Report: .aiwg/ralph/completion-2025-01-15T14-22.md
═══════════════════════════════════════════

Tips

  • Migrations often need more iterations (15-25)
  • Use compound criteria (tests + build + runtime)
  • Consider using `--branch` for large migrations
  • Break very large migrations into module-by-module