16 KiB
allowed-tools, description
| allowed-tools | description |
|---|---|
| Bash, Read, Write, Edit, Grep, Glob | ClaudeForge code migration assistant for framework upgrades, version migrations, and codebase transformations. |
ClaudeForge Migration Helper
ClaudeForge intelligent migration system that automates complex framework upgrades, version migrations, and codebase transformations with comprehensive AST analysis, automated codemods, and risk-free migration strategies.
Purpose
Transform framework and version migrations from risky manual refactoring to intelligent, automated processes that ensure code quality, backward compatibility, and minimal downtime across large-scale codebases.
Features
- Framework Migration: Automated migration between frameworks (React, Vue, Angular, etc.)
- Version Upgrades: Intelligent version upgrade paths with breaking change detection
- Codemod Generation: Custom codemod creation using AST transformations
- Breaking Change Analysis: Comprehensive detection of breaking changes and deprecations
- Migration Planning: Risk assessment and phased migration strategy generation
- Rollback Support: Automated rollback procedures with version control integration
- Testing Integration: Automated test generation and validation during migration
- Documentation: Migration guides and change logs with team communication templates
Usage
/migration-helper [migration-type] [options]
Target: $ARGUMENTS (if specified, otherwise analyze current project)
Migration Commands
Framework Version Upgrade:
/migration-helper upgrade --framework=react --from=16.8 --to=18.2
Performs comprehensive version upgrade including:
- Breaking change detection and analysis
- Deprecated API identification and replacement
- New feature adoption recommendations
- Package.json dependency updates
- Lock file regeneration
- Migration script generation with rollback support
Framework Migration:
/migration-helper migrate --from=vue2 --to=react --strategy=incremental
Migrates between frameworks with:
- Component structure transformation
- State management migration (Vuex → Redux/Context)
- Template syntax to JSX conversion
- Lifecycle method mapping
- Router configuration migration
- Build tool configuration updates
Library Replacement:
/migration-helper replace --library=moment --with=date-fns --preserve-behavior
Replaces libraries maintaining behavior:
- API usage pattern detection
- Automated code transformation
- Test case updates
- Import statement rewriting
- Type definition updates
- Behavior validation tests
Codemod Operations
Custom Codemod Generation:
/migration-helper codemod --pattern="class components" --transform="functional" --scope=src/
Generates and applies codemods with:
- AST-based pattern matching
- Safe transformation rules
- Dry-run preview with diff output
- Selective file application
- Transformation validation
- Rollback checkpoints
AST Transformation:
/migration-helper transform --ast-query="CallExpression[callee.name='require']" --replace-with="import"
Performs AST-level transformations:
- Complex syntax tree queries
- Multi-file transformations
- Scope-aware replacements
- Type-safe transformations
- Formatting preservation
- Comment retention
Breaking Change Detection:
/migration-helper analyze --version-from=3.0 --version-to=4.0 --report=detailed
Analyzes breaking changes with:
- API signature change detection
- Deprecated feature usage scanning
- Type incompatibility identification
- Runtime behavior changes
- Configuration format changes
- Impact severity assessment
Migration Strategies
Incremental Migration:
/migration-helper plan --strategy=incremental --duration=4-weeks --risk-level=low
Creates phased migration plan with:
- Module-by-module migration sequence
- Dual-version compatibility layer
- Feature flag integration
- Progressive rollout timeline
- Risk mitigation strategies
- Team coordination schedule
Big Bang Migration:
/migration-helper plan --strategy=big-bang --cutover-date=2024-03-15 --backup-plan
Plans complete migration with:
- Comprehensive preparation checklist
- Parallel environment setup
- Cutover procedure documentation
- Rollback decision criteria
- Post-migration validation
- Emergency response procedures
Strangler Fig Pattern:
/migration-helper strangler --routes-first --proxy-config --parallel-run
Implements strangler fig migration:
- Route-level migration strategy
- Proxy configuration for dual systems
- Parallel execution with comparison
- Gradual traffic shifting
- Legacy system decommissioning plan
- Data synchronization strategy
Migration Methodologies
React Migration Patterns
Class to Functional Components:
// Before: Class component with lifecycle
class UserProfile extends React.Component {
state = { user: null, loading: true };
componentDidMount() {
this.fetchUser(this.props.userId);
}
componentDidUpdate(prevProps) {
if (prevProps.userId !== this.props.userId) {
this.fetchUser(this.props.userId);
}
}
fetchUser = async (userId) => {
const user = await api.getUser(userId);
this.setState({ user, loading: false });
};
render() {
return this.state.loading ? <Spinner /> : <User data={this.state.user} />;
}
}
// After: Functional component with hooks
function UserProfile({ userId }) {
const [user, setUser] = useState(null);
const [loading, setLoading] = useState(true);
useEffect(() => {
let cancelled = false;
async function fetchUser() {
const userData = await api.getUser(userId);
if (!cancelled) {
setUser(userData);
setLoading(false);
}
}
fetchUser();
return () => { cancelled = true; };
}, [userId]);
return loading ? <Spinner /> : <User data={user} />;
}
Context API Migration:
// Legacy Context API
const ThemeContext = React.createContext();
class ThemeProvider extends React.Component {
static childContextTypes = {
theme: PropTypes.object
};
getChildContext() {
return { theme: this.props.theme };
}
}
// Modern Context API
const ThemeContext = React.createContext();
function ThemeProvider({ children, theme }) {
return (
<ThemeContext.Provider value={theme}>
{children}
</ThemeContext.Provider>
);
}
function useTheme() {
const theme = useContext(ThemeContext);
if (!theme) throw new Error('useTheme must be used within ThemeProvider');
return theme;
}
Vue Migration Patterns
Vue 2 to Vue 3 Composition API:
// Vue 2 Options API
export default {
data() {
return {
count: 0,
user: null
};
},
computed: {
doubleCount() {
return this.count * 2;
}
},
methods: {
increment() {
this.count++;
}
},
async mounted() {
this.user = await api.fetchUser();
}
};
// Vue 3 Composition API
import { ref, computed, onMounted } from 'vue';
export default {
setup() {
const count = ref(0);
const user = ref(null);
const doubleCount = computed(() => count.value * 2);
function increment() {
count.value++;
}
onMounted(async () => {
user.value = await api.fetchUser();
});
return { count, user, doubleCount, increment };
}
};
Angular Migration Patterns
AngularJS to Angular:
// AngularJS Controller
angular.module('app').controller('UserController', function($scope, UserService) {
$scope.users = [];
UserService.getUsers().then(function(users) {
$scope.users = users;
});
$scope.deleteUser = function(userId) {
UserService.delete(userId).then(function() {
$scope.users = $scope.users.filter(u => u.id !== userId);
});
};
});
// Angular Component
@Component({
selector: 'app-user-list',
template: `
<div *ngFor="let user of users$ | async">
{{ user.name }}
<button (click)="deleteUser(user.id)">Delete</button>
</div>
`
})
export class UserListComponent implements OnInit {
users$: Observable<User[]>;
constructor(private userService: UserService) {}
ngOnInit() {
this.users$ = this.userService.getUsers();
}
deleteUser(userId: string) {
this.userService.delete(userId).pipe(
switchMap(() => this.userService.getUsers())
).subscribe(users => this.users$ = of(users));
}
}
Codemod Tools Integration
jscodeshift Usage
Custom Codemod Example:
// transform-class-to-hooks.js
module.exports = function transformer(file, api) {
const j = api.jscodeshift;
const root = j(file.source);
// Find class components
root.find(j.ClassDeclaration, {
superClass: {
type: 'MemberExpression',
object: { name: 'React' },
property: { name: 'Component' }
}
}).forEach(path => {
const componentName = path.value.id.name;
// Extract state
const stateProperties = extractState(path);
// Extract lifecycle methods
const effects = extractEffects(path);
// Generate functional component
const functionalComponent = buildFunctionalComponent(
componentName,
stateProperties,
effects
);
j(path).replaceWith(functionalComponent);
});
return root.toSource({ quote: 'single' });
};
Running Codemods:
# Apply transformation
npx jscodeshift -t transform-class-to-hooks.js src/components
# Dry run to preview changes
npx jscodeshift -t transform.js src/ --dry --print
# Transform with TypeScript parser
npx jscodeshift -t transform.js src/ --parser=tsx
ts-migrate Integration
TypeScript Migration:
# Initialize TypeScript migration
npx ts-migrate init
# Add TypeScript configs
npx ts-migrate-server --config-file tsconfig.json
# Rename files to .ts/.tsx
npx ts-migrate rename src/
# Add @ts-expect-error comments
npx ts-migrate migrate src/
# Run type checking and fix
npx tsc --noEmit && npx ts-migrate reignore src/
AST Explorer Integration
Interactive Transformation Development:
- Real-time AST visualization at astexplorer.net
- Test transformations before production use
- Support for multiple parsers (babel, typescript, flow)
- jscodeshift template generation
- Share transformations with team
Migration Planning Framework
Risk Assessment Matrix
Risk Categories:
High Risk:
- Breaking changes in core dependencies
- Major framework version jumps (e.g., React 16 → 18)
- Database schema migrations
- Authentication/security changes
- Payment processing updates
Medium Risk:
- Minor version upgrades with deprecations
- State management library changes
- Build tool migrations
- UI library updates
- Testing framework changes
Low Risk:
- Patch version updates
- Development dependency updates
- Code style/linting changes
- Documentation updates
- Internal utility refactoring
Migration Checklist
Pre-Migration Phase:
- Comprehensive test coverage (minimum 80%)
- Feature freeze on affected modules
- Full database backup and restore test
- Dependency audit and vulnerability scan
- Performance baseline measurements
- Rollback procedure documentation
- Team training and knowledge transfer
- Communication plan to stakeholders
Migration Phase:
- Branch protection and code freeze
- Automated migration script execution
- Incremental commit strategy
- Continuous integration pipeline validation
- Manual QA testing of critical paths
- Performance regression testing
- Security vulnerability scanning
- Documentation updates
Post-Migration Phase:
- Production deployment with canary release
- Real-time monitoring and alerting
- User acceptance testing
- Performance comparison with baseline
- Legacy code cleanup
- Post-mortem and lessons learned
- Knowledge base article creation
- Celebration of successful migration
Testing Strategy
Automated Testing
Migration Test Suite:
describe('Migration: Class to Hooks', () => {
it('preserves component behavior', () => {
const { container: before } = render(<ClassComponent />);
const { container: after } = render(<HooksComponent />);
expect(before.innerHTML).toBe(after.innerHTML);
});
it('maintains state management', () => {
const { getByText } = render(<HooksComponent />);
fireEvent.click(getByText('Increment'));
expect(getByText('Count: 1')).toBeInTheDocument();
});
it('handles lifecycle equivalents', async () => {
const fetchMock = jest.fn().mockResolvedValue({ data: 'test' });
render(<HooksComponent fetch={fetchMock} />);
await waitFor(() => expect(fetchMock).toHaveBeenCalled());
});
});
Visual Regression Testing:
// Chromatic integration
describe('Visual Regression', () => {
it('matches previous component appearance', async () => {
await page.goto('http://localhost:6006/iframe.html?id=migrated-component');
const screenshot = await page.screenshot();
expect(screenshot).toMatchImageSnapshot({
failureThreshold: 0.01,
failureThresholdType: 'percent'
});
});
});
Manual Testing Guides
Critical Path Testing:
## User Authentication Flow
1. Navigate to login page
2. Enter valid credentials
3. Verify redirect to dashboard
4. Check user profile information
5. Test logout functionality
## Payment Processing
1. Add items to cart
2. Proceed to checkout
3. Enter payment information
4. Verify payment confirmation
5. Check order history
## Data Export Feature
1. Navigate to export page
2. Select date range
3. Choose export format
4. Download file
5. Verify file contents
CI/CD Integration
GitHub Actions Migration Workflow
name: Framework Migration
on:
workflow_dispatch:
inputs:
migration_type:
description: 'Migration type'
required: true
type: choice
options:
- react-upgrade
- vue-migration
- angular-update
jobs:
migrate:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 0
- name: Setup Node.js
uses: actions/setup-node@v3
with:
node-version: '18'
- name: Create migration branch
run: |
git checkout -b migration/${{ github.event.inputs.migration_type }}-$(date +%Y%m%d)
- name: Install dependencies
run: npm ci
- name: Run migration scripts
run: npm run migrate:${{ github.event.inputs.migration_type }}
- name: Run tests
run: npm test
- name: Build project
run: npm run build
- name: Commit changes
run: |
git config user.name "Migration Bot"
git config user.email "bot@example.com"
git add .
git commit -m "chore: automated migration - ${{ github.event.inputs.migration_type }}"
- name: Create pull request
uses: peter-evans/create-pull-request@v5
with:
title: "Migration: ${{ github.event.inputs.migration_type }}"
body: |
## Automated Migration
Migration type: ${{ github.event.inputs.migration_type }}
Date: $(date)
### Changes
- Framework/library updates
- Code transformations via codemods
- Test suite updates
### Testing Required
- [ ] Unit tests pass
- [ ] Integration tests pass
- [ ] Manual QA complete
- [ ] Performance benchmarks reviewed
branch: migration/${{ github.event.inputs.migration_type }}-$(date +%Y%m%d)
ClaudeForge Migration Helper - Intelligent framework migration with automated codemods, comprehensive testing, and risk-free transformation strategies for modern development teams.