quality-fixer by aiskillstore
Automatically apply safe quality fixes including formatting (Black, isort), linting (Ruff auto-fixes), and resolve formatter conflicts. Use when quality checks fail or before committing code.
Content & Writing
85 Stars
2 Forks
Updated Jan 19, 2026, 04:39 AM
Why Use This
This skill provides specialized capabilities for aiskillstore's codebase.
Use Cases
- Developing new features in the aiskillstore repository
- Refactoring existing code to follow aiskillstore standards
- Understanding and working with aiskillstore's codebase structure
Install Guide
2 steps- 1
Skip this step if Ananke is already installed.
- 2
Skill Snapshot
Auto scan of skill assets. Informational only.
Valid SKILL.md
Checks against SKILL.md specification
Source & Community
Skill Stats
SKILL.md 588 Lines
Total Files 1
Total Size 0 B
License NOASSERTION
---
name: quality-fixer
description: Automatically apply safe quality fixes including formatting (Black, isort), linting (Ruff auto-fixes), and resolve formatter conflicts. Use when quality checks fail or before committing code.
---
# Quality Fix Applier
## ⚠️ MANDATORY: Read Project Documentation First
**BEFORE applying quality fixes, you MUST read and understand the following project documentation:**
### Core Project Documentation
1. **README.md** - Project overview, features, and getting started
2. **AI_DOCS/project-context.md** - Tech stack, architecture, development workflow
3. **AI_DOCS/code-conventions.md** - Code style, formatting, best practices
4. **AI_DOCS/tdd-workflow.md** - TDD process, testing standards, coverage requirements
### Session Context (if available)
5. **.ai-context/ACTIVE_TASKS.md** - Current tasks and priorities
6. **.ai-context/CONVENTIONS.md** - Project-specific conventions
7. **.ai-context/RECENT_DECISIONS.md** - Recent architectural decisions
8. **.ai-context/LAST_SESSION_SUMMARY.md** - Previous session summary
### Additional AI Documentation
9. **AI_DOCS/ai-tools.md** - Session management workflow
10. **AI_DOCS/ai-skills.md** - Other specialized skills/agents available
### Why This Matters
- **Tool Configuration**: Understand which formatters and linters are configured
- **Code Standards**: Apply fixes that align with project conventions
- **Safety Rules**: Know which auto-fixes are safe vs. require manual review
- **Integration**: Coordinate with other quality tools (Black, Ruff, isort)
**After reading these files, proceed with your quality fixing task below.**
---
## Overview
Automatically apply safe quality fixes to Python code, resolving formatting issues, linting problems, and formatter conflicts.
## When to Use
- After writing code, before running `make check`
- When `make lint` or `make format` reports fixable issues
- To resolve Black vs Ruff formatter conflicts
- Before committing code to ensure quality gates pass
- When you want to apply all safe, automatic fixes
## What This Skill Fixes
✅ **Formatting Issues**
- Black code formatting
- isort import sorting
- Line length adjustments
- Whitespace normalization
✅ **Linting Issues (Safe Auto-Fixes)**
- Unused imports removal
- Unused variables (when safe)
- F-string conversion
- Simplifiable if statements
- List/dict comprehension improvements
✅ **Type Hint Issues (Safe Cases)**
- Add `-> None` to functions without return
- Add obvious type hints (str, int, bool literals)
- Fix Ellipsis in stub signatures
✅ **Formatter Conflicts**
- Black vs Ruff disagreements
- Message variable extraction for long strings
- Line break adjustments
## Usage Examples
### Fix All Issues in Project
```bash
# Run comprehensive quality fixes
apply quality fixes to the entire project
```
**Actions:**
1. Run `make format` (Black + isort)
2. Run Ruff with `--fix` flag
3. Check for and resolve formatter conflicts
4. Report what was fixed
### Fix Specific File
```bash
# Fix a single file
fix quality issues in src/python_modern_template/validators.py
```
**Actions:**
1. Format the specific file
2. Apply Ruff fixes to that file
3. Verify no conflicts introduced
4. Show diff of changes
### Resolve Formatter Conflicts Only
```bash
# Focus on conflicts
resolve Black and Ruff formatter conflicts
```
**Actions:**
1. Run both formatters
2. Identify lines where they disagree
3. Apply conflict resolution strategies
4. Verify both are satisfied
### Preview Mode (Dry Run)
```bash
# See what would be fixed without applying
preview quality fixes for src/
```
**Actions:**
1. Run all checks in dry-run mode
2. Show what would be changed
3. Ask for confirmation before applying
## Step-by-Step Process
### Step 1: Run Formatting
```bash
# Apply Black formatting
make format
# This runs:
# - black src/ tests/
# - isort src/ tests/
```
**What gets fixed:**
- Code style (spacing, indentation, quotes)
- Import organization and grouping
- Line length compliance (88 characters)
### Step 2: Apply Ruff Auto-Fixes
```bash
# Run Ruff with auto-fix
uv run ruff check --fix src/ tests/
# Safe fixes include:
# - Remove unused imports
# - Remove unused variables (when safe)
# - F-string conversion
# - Simplify expressions
```
**What gets fixed:**
- Import cleanup
- Code simplification
- Modern Python idioms
### Step 3: Detect Formatter Conflicts
```bash
# Check if Black and Ruff agree
make format && make lint
```
**Common conflicts:**
- Long string literals exceeding line length
- Complex expressions needing line breaks
- Comment placement differences
### Step 4: Resolve Conflicts
**Strategy 1: Extract Message Variables**
```python
# Before (conflict - too long)
logger.error("This is a very long error message that exceeds the line length limit")
# After (resolved)
msg = "This is a very long error message that exceeds the line length limit"
logger.error(msg)
```
**Strategy 2: Use Parentheses for Line Breaks**
```python
# Before (conflict)
result = some_function(arg1, arg2, arg3, arg4, arg5, arg6)
# After (resolved)
result = some_function(
arg1, arg2, arg3, arg4, arg5, arg6
)
```
**Strategy 3: Split Long Strings**
```python
# Before (conflict)
text = "This is a very long string that should be split across multiple lines for readability"
# After (resolved)
text = (
"This is a very long string that should be "
"split across multiple lines for readability"
)
```
### Step 5: Verify Fixes
```bash
# Run complete quality check
make check
```
**Must pass:**
- ✅ Format (Black + isort)
- ✅ Lint (Ruff + Pylint + mypy)
- ✅ Tests (pytest)
- ✅ Security (Bandit)
## Conflict Resolution Strategies
### Identifying Conflicts
Run both tools and compare:
```bash
# Apply Black
black src/python_modern_template/module.py
# Check Ruff
ruff check src/python_modern_template/module.py
# If Ruff still complains about formatting, there's a conflict
```
### Resolution Decision Tree
1. **Long String Literals**
→ Extract to variable or split across lines
2. **Complex Expressions**
→ Add parentheses and line breaks
3. **Long Function Calls**
→ Break arguments to multiple lines
4. **Comment Placement**
→ Move comments above the line
5. **Type Annotation Complexity**
→ Split to multiple lines with proper indentation
### Example: Resolving Long String Conflict
**Problem:**
```python
# Black formats this way:
raise ValueError("The email address provided is not valid because it does not contain the required @ symbol")
# Ruff complains: E501 Line too long (92 > 88)
```
**Solution:**
```python
# Extract message variable
error_msg = (
"The email address provided is not valid because it "
"does not contain the required @ symbol"
)
raise ValueError(error_msg)
# Both Black and Ruff are satisfied!
```
## What This Skill Does NOT Fix
❌ **Complex Logic Issues**
- Algorithm problems
- Business logic errors
- Design flaws
❌ **Non-Obvious Type Hints**
- Complex generic types
- Union types requiring domain knowledge
- Custom type aliases
❌ **Docstring Content**
- Will format docstrings
- Won't write missing docstrings
- Won't improve docstring quality
❌ **Test Failures**
- Only fixes code style
- Doesn't fix failing tests
- Doesn't add missing tests
❌ **Breaking Changes**
- Only applies safe, non-breaking fixes
- Won't remove used variables
- Won't change semantics
## Output Format
After applying fixes, provide a report:
```markdown
## Quality Fixes Applied
**Files Modified:** X
**Total Changes:** X lines
### Formatting Fixes
- ✅ Applied Black formatting to X files
- ✅ Sorted imports with isort in X files
- ✅ Fixed line length issues: X lines
### Linting Fixes
- ✅ Removed X unused imports
- ✅ Converted X strings to f-strings
- ✅ Simplified X expressions
- ✅ Fixed X Ruff issues
### Conflicts Resolved
- ✅ Extracted X message variables
- ✅ Split X long strings
- ✅ Reformatted X function calls
### Quality Check Results
```bash
make check
```
[Show output]
### Files Changed
1. src/python_modern_template/module1.py (+12, -8)
2. src/python_modern_template/module2.py (+5, -3)
3. tests/test_module.py (+3, -2)
### Next Steps
- Review changes with `git diff`
- Run tests to ensure no breaking changes: `make test`
- Commit changes if satisfied
```
## Safety Features
### Dry Run Mode
Always available for preview:
```bash
# Format preview
black --check --diff src/
# Ruff preview
ruff check --fix --diff src/
```
### Git Integration
Verify changes before committing:
```bash
# See what changed
git diff
# Stage specific changes
git add -p
```
### Backup Strategy
For large fixes, create a commit first:
```bash
# Commit current state
git commit -m "Before quality fixes"
# Apply fixes
[quality-fixer runs]
# Review changes
git diff HEAD~1
# Undo if needed
git reset --hard HEAD~1
```
## Integration with Project Tools
### Makefile Integration
```bash
# Just formatting
make format
# Just linting (with fixes)
make lint
# Complete check (no auto-fix)
make check
```
### Pre-Commit Integration
Add to `.pre-commit-config.yaml`:
```yaml
- repo: local
hooks:
- id: quality-fixer
name: Quality Fixer
entry: python .claude/skills/quality-fixer/scripts/auto_fix.py
language: system
types: [python]
```
### CI Integration
Run in CI with `--check` mode:
```bash
# CI should verify, not fix
make check
# If it fails, developers run:
[quality-fixer to fix locally]
```
## Advanced Features
### Selective Fixing
Fix only specific types of issues:
```bash
# Only formatting
[quality-fixer] --format-only
# Only import cleanup
[quality-fixer] --imports-only
# Only conflicts
[quality-fixer] --conflicts-only
```
### Ignore Patterns
Respect configuration in `pyproject.toml`:
```toml
[tool.ruff.lint]
ignore = ["E501"] # Don't auto-fix line length in specific cases
[tool.black]
extend-exclude = '''
/(
| generated
)/
'''
```
### Custom Rules
Define project-specific fixes:
```python
# .claude/skills/quality-fixer/scripts/custom_rules.py
def fix_common_typos(code: str) -> str:
"""Fix project-specific common mistakes."""
fixes = {
"recieve": "receive",
"seperator": "separator",
}
for typo, correction in fixes.items():
code = code.replace(typo, correction)
return code
```
## Best Practices
1. **Run before committing** - Always clean up code before commits
2. **Review changes** - Don't blindly accept all fixes, use `git diff`
3. **Test after fixing** - Run `make test` to ensure no breaking changes
4. **Fix iteratively** - Start with formatting, then linting, then conflicts
5. **Understand the changes** - Learn from fixes to avoid future issues
## Common Scenarios
### Scenario 1: Before Committing
```bash
# 1. Apply fixes
[quality-fixer]
# 2. Review changes
git diff
# 3. Test
make test
# 4. Commit
git add .
git commit -m "feat: add new feature"
```
### Scenario 2: After Code Review
```bash
# Code reviewer says: "Fix formatting and linting"
# 1. Apply fixes
[quality-fixer]
# 2. Verify all issues resolved
make check
# 3. Push
git push
```
### Scenario 3: CI Failure
```bash
# CI reports quality issues
# 1. Pull latest
git pull
# 2. Apply fixes
[quality-fixer]
# 3. Verify locally
make check
# 4. Push fix
git commit -am "fix: resolve quality issues"
git push
```
## Troubleshooting
### "Black and Ruff still conflict after fix"
**Solution:** Manually review the conflicting lines and apply advanced strategies:
- Extract complex expressions to variables
- Restructure the code for better formatting
- Use `# noqa` comments sparingly for unavoidable cases
### "Auto-fix broke my tests"
**Solution:**
- Revert with `git checkout -- <file>`
- Review what was changed with `git diff`
- Apply fixes more selectively
- Report if a fix is unsafe (should not be applied)
### "Pylint still reports issues"
**Note:** This skill only applies auto-fixable issues. Pylint often requires manual fixes:
- Unused arguments → Use `_` prefix or remove
- Too many arguments → Refactor function
- Too complex → Simplify logic
## Remember
**Quality fixes are TOOLS, not SUBSTITUTES for good code:**
- Write clean code from the start
- Understand why formatters want changes
- Learn from the fixes applied
- Don't rely on auto-fix for everything
This skill helps you maintain code quality efficiently, but **good coding practices are still essential**!
Name Size