| name | refactor-code |
| description | Safely improve code quality through test-driven refactoring with automatic validation and rollback. Use during quality review to reduce technical debt while preserving behavior. |
| acceptance | [object Object], [object Object], [object Object], [object Object], [object Object] |
| inputs | [object Object] |
| outputs | [object Object] |
| telemetry | [object Object] |
Refactor Code Skill
Purpose
Safely improve code quality through automated refactoring while maintaining behavioral correctness. This skill identifies refactoring opportunities from quality findings and applies them incrementally with continuous test validation.
Core Capabilities:
- Test-driven refactoring (run tests after each change)
- Automatic rollback on test failures
- Risk-based prioritization (P0-P3, Low/Medium/High risk)
- Incremental application (one refactoring at a time)
- Full traceability (log all changes with rationale)
- Quality metrics tracking (before/after comparison)
Key Innovation: Safety-first approach ensures refactorings never break functionality. Each change is validated with tests before proceeding.
Prerequisites
- Task status is "Review"
- Quality assessment has been run (quality gate exists)
- Tests exist and are currently passing
- Configuration allows refactoring (
quality.allowRefactoring: true)
Workflow
Step 0: Load Configuration and Validate Prerequisites
Action: Verify refactoring is allowed and safe to proceed.
Load configuration: Read .claude/config.yaml for refactoring settings
See: references/templates.md#configuration-format for complete config structure
Check prerequisites:
- Verify
allowRefactoring: truein config (or input override) - Verify task status is "Review"
- Verify quality assessment exists (
.claude/quality/gates/{task-id}-gate.yaml) - Verify tests exist and are passing
Get refactoring scope: Ask user to choose Conservative/Moderate/Aggressive or Skip
See: references/templates.md#user-decision-refactoring-scope for prompt format
Halt if:
- Configuration disables refactoring and no input override
- No tests exist (can't validate safety)
- Tests are currently failing
- Quality assessment not yet run
- User chooses to skip
Output: Prerequisites validation summary (config, tests, scope)
See: references/templates.md#step-0-output-template for format
See: references/risk-assessment-guide.md for aggressiveness levels
Step 1: Analyze Code for Refactoring Opportunities
Action: Identify specific refactoring opportunities based on quality findings.
Load quality findings:
- Read quality gate file (
.claude/quality/gates/{task-id}-gate.yaml) - Extract issues by severity (critical, high, medium, low)
- Extract technical debt items
- Extract code quality findings
Scan implementation files: Read all files from task Implementation Record and identify patterns:
- Extract Method: Long methods (>50 lines)
- Extract Variable: Complex expressions
- Rename: Unclear variable/function names
- Remove Duplication: Repeated code blocks (2+ occurrences)
- Simplify Conditionals: Nested if/else chains
- Extract Class: Classes with too many responsibilities
- Inline: Unnecessary indirection
- Move Method: Misplaced functionality
Prioritize refactorings:
- P0 (Critical): Addresses critical/high severity quality issues
- P1 (High): Reduces technical debt
- P2 (Medium): Improves maintainability
- P3 (Low): Nice-to-have improvements
Estimate risk for each:
- Low Risk: Rename, extract variable, inline
- Medium Risk: Extract method, simplify conditionals
- High Risk: Extract class, move method, large-scale changes
Filter by aggressiveness level:
- Conservative: P0 only, low-risk refactorings
- Moderate: P0 + P1, low-to-medium risk refactorings
- Aggressive: P0 + P1 + P2, all risk levels
Output: List of refactoring opportunities with priority, risk, file location, rationale, and impact
See: references/templates.md#step-1-output-template for complete format
Halt if:
- No refactoring opportunities identified (already clean code)
- All refactorings exceed chosen aggressiveness level
- All refactorings are high-risk (safety concern)
See: references/refactoring-patterns.md for pattern identification
Step 2: Apply Refactorings Incrementally
Action: Apply each refactoring one at a time with test validation.
For each selected refactoring (in priority order):
For each refactoring:
- Announce what's being refactored (file, type, risk)
- Apply single refactoring (read, transform, write, backup)
- Run tests immediately (
npm test) - Evaluate results:
- If pass: Log success, keep changes, proceed
- If fail: Rollback, log failure, skip to next
- Update progress count (applied/skipped/failed)
Safety rules:
- Never apply multiple refactorings simultaneously
- Never skip test validation
- Never continue if critical (P0) refactoring fails
- Never modify tests to make them pass
- Always preserve backups until tests pass
Output: Refactoring completion summary with success/failure counts and test status
See: references/templates.md#step-2-output-templates for all step outputs
Halt if:
- Multiple consecutive failures (>3)
- Tests fail and can't be restored
- User requests halt
- Time limit exceeded (optional safety)
See: references/incremental-application-guide.md for detailed process
Step 3: Create Refactoring Log
Action: Document all refactoring changes with rationale.
Create/update log file:
- Path:
.claude/quality/refactoring-log.md - Append new entry (preserve existing logs)
Log structure: Append session entry to .claude/quality/refactoring-log.md with:
- Session metadata (task, scope, duration, success rate)
- Each refactoring applied (file, type, risk, rationale, before/after, impact, tests)
- Refactorings failed (if any)
- Files modified with line count changes
- Test results (before/after)
- Quality impact metrics
See: references/templates.md#step-3-refactoring-log-template for complete structure
Update quality gate file:
- Add refactoring summary to gate file
- Update code quality metrics
- Note improvements in maintainability
Output: Log creation confirmation with file path and refactoring counts
See: references/templates.md#step-3-output-template
See: references/refactoring-log-template.md for complete structure
Step 4: Final Test Validation and Summary
Action: Confirm all tests pass and provide comprehensive summary.
Run full test suite:
npm test
npm run test:integration # if exists
npm run test:e2e # if exists
Generate coverage report:
npm run test:coverage # if configured
Compare before/after metrics: Calculate improvements in lines, complexity, duplication, coverage
See: references/templates.md#step-4-metrics-comparison-template for complete format
Provide final summary: Present comprehensive summary with status, counts, quality improvements, files modified, next steps
See: references/templates.md#step-4-final-summary-template for complete format
Update task file: Append refactoring summary to task's Quality Review section with:
- Date and scope
- Success rate
- Refactorings applied
- Quality impact
- Test validation results
Halt if:
- Final test suite fails (critical issue)
- Coverage drops significantly (regression)
- User reports unexpected behavior
Completion Criteria
Refactoring is complete when:
- Prerequisites validated (config, tests, quality gate)
- Refactoring opportunities identified and prioritized
- Selected refactorings applied incrementally
- All tests passing after refactoring
- Refactoring log created with full documentation
- Task file updated with summary
- Quality metrics improved or maintained
- User notified with actionable next steps
Safety Guarantees
Behavioral preservation (no functionality changes) | Test validation (after each change) | Automatic rollback (on failures) | Full traceability (logged) | Incremental (one at a time) | User control (choose scope)
Integration with Quality Review
Runs after nfr-assess, before quality-gate in quality workflow. Optional - only if user opts in and tests exist/pass. Improvements reflected in final gate decision.
Routing Guidance
Use this skill when:
- Quality review identifies refactoring opportunities
- Technical debt needs systematic reduction
- Code quality metrics below targets
- Maintainability concerns raised in review
- User opts in for automated improvements
Do NOT use for:
- Feature additions (use implementation skills)
- Bug fixes (use fix-issue skill)
- Breaking changes (requires manual review)
- Experimental refactorings (too risky)
- Projects without tests (can't validate safety)
Feeds into:
- quality-gate skill (improved metrics inform decision)
Best Practices
Start Conservative:
- First session: Use conservative mode
- Build confidence before moderate/aggressive
Review Changes:
- Always review refactored code via git diff
- Verify alignment with coding style
- Check for unintended consequences
Commit Separately:
- Commit refactorings separate from features
- Message: "refactor: {description} (automated)"
Monitor Impact:
- Track quality metrics over time
- Verify maintainability improves
- Identify patterns to refactor proactively
Reference Files
Detailed documentation in references/:
- templates.md: All output formats, config examples, log templates
- refactoring-patterns.md: Common refactoring patterns with examples
- risk-assessment-guide.md: Risk levels, assessment, filtering by aggressiveness
- incremental-application-guide.md: Step-by-step application, test validation, rollback
- refactoring-log-template.md: Log structure and documentation format
Part of BMAD Enhanced Quality Suite