Automatically updates a codebase to a new language version, framework version, or library update while ensuring all tests still pass. Use this skill when migrating Python 2→3, upgrading framework versions (React, Django, Angular), updating dependencies, or performing any version migration where tests define correct behavior. The skill analyzes failing tests caused by migration, categorizes errors (import errors, API changes, type errors, behavior changes), proposes systematic fixes, and verifies that test-observable behavior remains unchanged. Triggers when users ask to migrate code versions, upgrade dependencies while keeping tests passing, update framework versions, or perform test-guided version migrations.
npx skills add https://github.com/ArabelaTso/Skills-4-SE --skill test-guided-migration-assistant
Automatically update a codebase to a new language version, framework version, or library update while ensuring all tests continue to pass.
Before starting migration, establish the current state:
# Run full test suite
<test_command>
# Record baseline
# - Total tests: X
# - Passing: Y
# - Failing: Z (should be 0 or known failures)
# - Coverage: N%
Document current state:
Gather information:
Consult migration guides:
Identify risks:
Update dependencies:
Incremental approach (recommended):
# Update one dependency at a time
npm install package@new-version
# or
pip install package==new-version
# Run tests immediately
<test_command>
Batch approach (for experienced migrations):
# Update all dependencies
npm update
# or
pip install -U -r requirements.txt
# Run tests
<test_command>
Update configuration:
Run tests and capture output:
# Pytest
pytest -v > test_output.txt 2>&1
# Jest
npm test > test_output.txt 2>&1
# Other frameworks
<test_command> > test_output.txt 2>&1
Use analysis script:
python scripts/analyze_test_failures.py test_output.txt
The script categorizes failures into:
Follow priority order from analysis. See migration_strategy.md for detailed strategies.
Fix import errors first:
# Example: Module moved
# Old
from collections import Mapping
# New
from collections.abc import Mapping
Fix API signature errors:
# Example: Parameter renamed
# Old
result = function(arg1, old_param=value)
# New
result = function(arg1, new_param=value)
Fix type errors:
// Example: Stricter types
// Old
function process(value: string) { }
// New (handle undefined)
function process(value: string | undefined) {
if (value === undefined) return;
// ...
}
Handle behavior changes:
# Example: Changed defaults
# Old behavior: returns None on error
# New behavior: raises exception
# Add error handling
try:
result = function()
except NewException:
result = None # Preserve old behavior
After each fix category:
# Run tests
<test_command>
# Commit if tests pass
git add .
git commit -m "Fix: migration import errors"
Run full test suite multiple times:
# Catch flaky tests
for i in {1..3}; do
echo "Run $i"
<test_command>
done
Verify coverage unchanged:
# Generate coverage report
<coverage_command>
# Compare to baseline
# Should be same or better
Check for warnings:
# Python
python -W all -m pytest
# Node.js
node --trace-warnings test
# Look for deprecation warnings
Success criteria:
Create migration summary:
MIGRATION SUMMARY
=================
Migration: Python 3.8 → Python 3.12
Changes Made:
- Updated collections imports (Mapping → collections.abc.Mapping)
- Fixed asyncio.coroutine → async def
- Updated type hints for stricter checking
- Removed distutils usage
Test Results:
- Before: 156/156 passing
- After: 156/156 passing
- Coverage: 87% (unchanged)
Breaking Changes Addressed:
1. Collections ABC moved
2. asyncio.coroutine removed
3. Type checking stricter
Deprecation Warnings:
- None remaining
Tests Define Correctness: If tests pass, behavior is preserved.
Fix by Priority: Import errors block everything - fix first. Then API errors, then types, then behavior.
Incremental Changes: Fix one category, test, commit. Don't accumulate many changes.
Never Modify Tests: Fix the code to make tests pass. Don't change tests to match new behavior (unless behavior change is intentional and documented).
Fail Fast: Run tests immediately after migration attempt. Don't wait.
print statement → print() functionxrange() → range().iteritems() → .items()except Exception, e: → except Exception as e:ReactDOM.render() → ReactDOM.createRoot().render()django.conf.urls.url() → django.urls.re_path()ugettext → gettextUSE_L10N settingThe analyze_test_failures.py script automates failure categorization:
# Analyze pytest output
python scripts/analyze_test_failures.py test_output.txt
# Analyze Jest output
python scripts/analyze_test_failures.py test_output.txt --format jest
# Auto-detect format
python scripts/analyze_test_failures.py test_output.txt --format auto
Output provides:
If migration has too many failures (>20% of tests):
# Revert dependency changes
git checkout HEAD -- package.json package-lock.json
npm install
# Or revert commits
git revert <commit-hash>
# Verify tests pass
<test_command>
Then plan incremental migration or allocate more time.
Guide for creating high-quality MCP (Model Context Protocol) servers that enable LLMs to interact with external services through well-designed tools. Use when building MCP servers to integrate external APIs or services, whether in Python (FastMCP) or Node/TypeScript (MCP SDK).
Automatically creates user-facing changelogs from git commits by analyzing commit history, categorizing changes, and transforming technical commits into clear, customer-friendly release notes. Turns hours of manual changelog writing into minutes of automated generation.
Use when implementation is complete, all tests pass, and you need to decide how to integrate the work - guides completion of development work by presenting structured options for merge, PR, or cleanup
Guide for creating high-quality MCP (Model Context Protocol) servers that enable LLMs to interact with external services through well-designed tools. Use when building MCP servers to integrate external APIs or services, whether in Python (FastMCP) or Node/TypeScript (MCP SDK).
React Native and Expo best practices for building performant mobile apps. Use when building React Native components, optimizing list performance, implementing animations, or working with native modules. Triggers on tasks involving React Native, Expo, mobile performance, or native platform APIs.
React and Next.js performance optimization guidelines from Vercel Engineering. This skill should be used when writing, reviewing, or refactoring React/Next.js code to ensure optimal performance patterns. Triggers on tasks involving React components, Next.js pages, data fetching, bundle optimization, or performance improvements.
Next.js best practices - file conventions, RSC boundaries, data patterns, async APIs, metadata, error handling, route handlers, image/font optimization, bundling
Use when starting feature work that needs isolation from current workspace or before executing implementation plans - creates isolated git worktrees with smart directory selection and safety verification
Take arabelatso/test-guided-migration-assistant from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.
The instructions reference pip, npm.
Without those the skill loads but fails at the first command.