home / skills / d-oit / do-novelist-ai / iterative-refinement

iterative-refinement skill

/.claude/skills/iterative-refinement

This skill guides iterative refinement workflows with validation loops to test-fix cycles, improve quality, and optimize performance until criteria are met.

npx playbooks add skill d-oit/do-novelist-ai --skill iterative-refinement

Review the files below or copy the command above to add this skill to your agents.

Files (6)
SKILL.md
6.4 KB
---
name: iterative-refinement
description: Execute iterative refinement workflows with validation loops until quality criteria are met. Use for test-fix cycles, code quality improvement, performance optimization, or any task requiring repeated action-validate-improve cycles.
---

# Iterative Refinement

Execute workflows iteratively with systematic validation, progress tracking, and intelligent termination.

## When to Use

Use for tasks requiring iterative refinement:
- Test-fix-validate cycles: Fix failures → retest → repeat until passing
- Code quality improvement: Review → fix → review until standards met
- Performance optimization: Profile → optimize → measure until targets achieved
- Progressive enhancement: Iterative improvements until diminishing returns

Don't use for single-pass tasks, purely parallel work, or simple linear workflows.

## Pre-Usage Research (Optional)

Before starting iterations, consider researching:
- Current best practices for your validation tools (search "[tool] best practices 2025")
- Known issues with your tech stack (search "[language] [tool] common issues")
- Optimal configuration for your validators (search "[tool] configuration production")
- Recent improvements or alternatives (search "[tool] vs alternatives 2025")

Benefits:
- Better validators from the start
- Avoid known issues
- Use current best practices
- Save iteration cycles

When to research first:
- Unfamiliar validation tools
- New tech stack
- Complex quality criteria
- High-stakes optimization

## Core Loop Pattern

Every iteration follows:

1. Execute action (fix, optimize, improve)
2. Validate result (test, measure, check)
3. Assess progress (compare to criteria)
4. Decide (continue or stop)

## Instructions

### Step 1: Define Configuration

Establish before starting:

**Success Criteria** (specific and measurable):
- Criterion 1: [Example: "All 50 tests passing"]
- Criterion 2: [Example: "Zero linter warnings"]
- Criterion 3: [Example: "Response time < 100ms"]

**Loop Limits**:
- Max iterations: 5-15 (justify if >20)
- Min iterations: (optional)

**Termination Mode**:
- Fixed: Run exactly N iterations
- Criteria: Stop when success criteria met
- Convergence: Stop when improvements < threshold (e.g., <10% over 3 iterations)
- Hybrid: Combine multiple conditions

### Step 2: Execute Iteration

For each iteration:

1. **Take action** - Apply fixes or implement changes
2. **Run validator** - Execute tests, linters, or measurements
3. **Record progress**:
   ```
   Iteration N:
   - Action: [what was done]
   - Results: [metrics/outcomes]
   - Issues remaining: [count/description]
   - Decision: [Continue/Success/Stop]
   ```
4. **Assess termination**:
   - All criteria met? → SUCCESS
   - Improvement < threshold? → CONVERGED
   - Reached max iterations? → STOP
   - Otherwise → CONTINUE

### Step 3: Pass Context Between Iterations

Each iteration needs:
- Previous results
- Current metrics
- Remaining issues
- Progress trend

This prevents repeating failed approaches.

### Step 4: Handle Stuck States

If no progress for 2-3 iterations:
1. Analyze why progress stopped
2. Try different approach
3. Consider manual intervention
4. Stop if truly stuck

### Step 5: Report Results

```
Loop Summary:
- Iterations: N
- Termination: [Success/Converged/Max/Stuck]
- Initial state: [metrics]
- Final state: [metrics]
- Improvement: [percentage/delta]
- Remaining issues: [list if any]
```

## Validation Best Practices

### Make Validators Specific

Bad: "Check if code is better"
Good: "Run linter and count warnings"

Bad: "See if it's faster"
Good: "Run benchmark: average response time over 100 requests"

### Use Automated Validation

Prefer scripts/tools over manual inspection:
- Test frameworks over reading test code
- Linters over manual code review
- Benchmarks over estimated performance
- Coverage tools over counting tests

### Capture Concrete Metrics

Track measurable progress:
- Test pass rate: 42/50 → 48/50 → 50/50
- Warning count: 23 → 8 → 2 → 0
- Response time: 320ms → 180ms → 95ms → 48ms
- Code coverage: 65% → 78% → 85% → 92%

## Examples

### Example 1: Test Fixing

Task: Fix all failing tests

Configuration:
- Success: 100% tests passing
- Max iterations: 8

Execution:
```
I1: 42/50 → Fix 8 failures → Continue
I2: 48/50 → Fix 2 failures → Continue
I3: 50/50 → SUCCESS ✓
```

### Example 2: Linter Cleanup

Task: Remove all linter warnings

Configuration:
- Success: 0 warnings
- Max iterations: 5

Execution:
```
I1: 15 warnings → Fix → 6 warnings
I2: 6 warnings → Fix → 1 warning
I3: 1 warning → Fix → 0 warnings ✓
```

### Example 3: Performance Loop

Task: Optimize response time

Configuration:
- Success: <50ms OR converged
- Max iterations: 15
- Convergence: <10% over 3 iterations

Execution:
```
I1: 320ms → Optimize → 180ms (44%)
I2: 180ms → Optimize → 95ms (47%)
I3: 95ms → Optimize → 48ms (49%)
SUCCESS (target met)
```

### Example 4: Coverage Improvement

Task: Increase test coverage to 90%

Configuration:
- Success: Coverage ≥ 90%
- Max iterations: 12

Execution:
```
I1: 65% → Write tests → 72%
I2: 72% → Write tests → 81%
I3: 81% → Write tests → 88%
I4: 88% → Write tests → 91% ✓
```

## Language-Specific Tools

For validation tools and commands for your language:
- Python: See tools/python.md
- JavaScript/TypeScript: See tools/javascript.md
- Rust: See tools/rust.md
- Java: See tools/java.md
- Go: See tools/go.md
- C/C++: See tools/cpp.md
- Ruby: See tools/ruby.md
- PHP: See tools/php.md
- C#/.NET: See tools/dotnet.md

## Advanced Usage

For complex workflows, convergence detection, and advanced patterns:
See patterns.md

## Best Practices

### DO:
✓ Define clear, measurable success criteria
✓ Set reasonable max limits (5-15)
✓ Use automated validators
✓ Pass context between iterations
✓ Track concrete metrics
✓ Stop early when criteria met
✓ Detect convergence
✓ Document changes

### DON'T:
✗ Use loops for single-pass tasks
✗ Set high limits (>20) without justification
✗ Skip validation between iterations
✗ Lose context between iterations
✗ Continue after success/convergence
✗ Ignore stuck signals
✗ Use vague criteria
✗ Miss early termination

Overview

This skill runs iterative refinement workflows that repeat action-validate-assess cycles until measurable quality criteria are met. It’s designed for test-fix loops, code quality cleanup, performance tuning, and any task that benefits from repeated improvements with clear stopping rules. The skill emphasizes automated validators, progress tracking, and intelligent termination to avoid wasted cycles.

How this skill works

You configure success criteria, iteration limits, and a termination mode (fixed, criteria, convergence, or hybrid). Each iteration applies changes, runs automated validators (tests, linters, benchmarks), records metrics, and decides whether to continue. The loop passes prior results and trends into the next iteration and includes handling for stuck states and a final loop summary report.

When to use it

  • Fix failing tests through repeated test-fix-validate cycles
  • Remove linter warnings and improve code quality incrementally
  • Optimize performance by profile→optimize→measure iterations
  • Increase test coverage or other measurable quality metrics
  • Apply progressive enhancements until diminishing returns observed

Best practices

  • Define specific, measurable success criteria (e.g., 50/50 tests, <100ms response)
  • Limit iterations (typically 5–15) and justify larger limits
  • Prefer automated validators (CI tests, linters, benchmarks) over manual checks
  • Record per-iteration actions, results, issues remaining, and decisions
  • Detect convergence (e.g., <10% improvement over N iterations) and stop early
  • If no progress for 2–3 iterations, analyze causes, change approach, or stop

Example use cases

  • Test fixing: iterate until 100% tests pass (max iterations 8)
  • Linter cleanup: reduce warning count to zero over successive passes
  • Performance tuning: iterate until response time target met or improvements converge
  • Coverage drive: write tests across iterations to reach ≥90% coverage
  • Complex refactor: split work into small actions with validation after each step

FAQ

How do I choose iteration limits?

Start with 5–15 iterations based on task complexity; use higher limits only with a clear reason and monitoring.

What counts as a validator?

Any automated check that yields concrete metrics: test suites, linters, benchmarks, coverage tools, or custom scripts.