# Improvement Plan Format Detailed specification of the `improvement-plan-{skill-name}.md` file format generated by `skill-quality-reviewer` and consumed by `skill-improver`. ## File Structure ```markdown # Skill Improvement Plan: {skill-name} ## Priority Summary - **High Priority**: {count} items - **Medium Priority**: {count} items - **Low Priority**: {count} items ## High Priority Improvements ### 1. [Issue Title] **File**: SKILL.md:line:line **Dimension**: {Dimension Name} **Impact**: +X points **Current**: ```yaml or markdown {current content} ``` **Suggested**: ```yaml or markdown {suggested content} ``` **Reason**: {why this improves quality} [Repeat for all high priority items...] ## Medium Priority Improvements [Same format as High Priority...] ## Low Priority Improvements [Same format as High Priority...] ## Quick Wins (Easy Fixes) 1. {quick fix description} 2. {quick fix description} ## Estimated Time to Complete - High Priority: X hours - Medium Priority: X hours - Low Priority: X hours - **Total**: X hours ## Expected Score Improvement - Current: X/100 ({Grade}) - After High Priority: X/100 ({Grade}) - After All: X/100 ({Grade}) ``` ## Parsing Rules ### Priority Section Detection **Identify sections by heading:** ```markdown ## High Priority Improvements ## Medium Priority Improvements ## Low Priority Improvements ``` **Case insensitive but exact match preferred:** - "High Priority Improvements" ✓ - "high priority improvements" ✓ (acceptable) - "High Priority" ✗ (incomplete) ### Item Extraction **Each improvement item starts with:** ```markdown ### N. [Issue Title] ``` Where N is a sequential number (1, 2, 3, ...) **Required fields within each item:** 1. **File** (required) ``` **File**: SKILL.md:line:line **File**: references/filename.md **File**: examples/filename.md ``` - Format: `filepath:line:line` or just `filepath` - Line numbers are specific for edits - File only indicates new file creation or append 2. **Dimension** (required) ``` **Dimension**: Description Quality **Dimension**: Content Organization **Dimension**: Writing Style **Dimension**: Structural Integrity ``` 3. **Impact** (required) ``` **Impact**: +X points ``` - Points indicate expected score improvement - Used for calculating expected final score 4. **Current** (required for edits) ``` **Current**: ```yaml or markdown {exact current content} ``` - Must match exactly for Edit operations - Code fence specifies format (yaml, markdown, etc.) 5. **Suggested** (required) ``` **Suggested**: ```yaml or markdown {suggested replacement content} ``` - Content to replace current or create 6. **Reason** (optional but recommended) ``` **Reason**: {explanation} ``` - Human-readable explanation - Included in update report ### Code Fence Formats **Supported formats:** ```yaml ```yaml --- name: skill-name --- ``` ``` ```markdown ```markdown ## Section Header Content here... ``` ``` ```bash ```bash #!/bin/bash echo "script" ``` ``` **Format determines:** - Syntax highlighting - Validation rules - Parser expectations ## File Path Patterns ### SKILL.md References **With line numbers:** ``` **File**: SKILL.md:5:10 ``` - Lines 5-10 will be replaced - Used for Edit operations **Without line numbers:** ``` **File**: SKILL.md ``` - Typically indicates new file or append ### References/ Files **Specific file:** ``` **File**: references/api-guide.md **File**: references/examples-bad.md ``` **With line numbers:** ``` **File**: references/patterns.md:50:100 ``` ### Examples/ Files **New file creation:** ``` **File**: examples/demo.md ``` - No line numbers - Suggested content becomes entire file **Modification:** ``` **File**: examples/basic-usage.sh:20:30 ``` ### Scripts/ Files **Script updates:** ``` **File**: scripts/validate.sh:15:25 ``` ## Parsing Pseudocode ```python def parse_improvement_plan(plan_path): """Parse improvement plan file into structured data.""" plan = read_file(plan_path) sections = { 'high': [], 'medium': [], 'low': [] } current_section = None current_item = None for line in plan.split('\n'): # Detect section headers if line.startswith('## High Priority'): current_section = 'high' elif line.startswith('## Medium Priority'): current_section = 'medium' elif line.startswith('## Low Priority'): current_section = 'low' # Detect item start elif line.startswith('### '): if current_item: sections[current_section].append(current_item) current_item = {'title': line[4:].strip()} # Parse fields within item elif current_item: if line.startswith('**File**'): current_item['file'] = parse_file_path(line) elif line.startswith('**Dimension**'): current_item['dimension'] = line.split(':', 1)[1].strip() elif line.startswith('**Impact**'): current_item['impact'] = parse_impact(line) elif line.startswith('**Current**'): current_item['current'] = extract_code_fence(plan, line) elif line.startswith('**Suggested**'): current_item['suggested'] = extract_code_fence(plan, line) elif line.startswith('**Reason**'): current_item['reason'] = line.split(':', 1)[1].strip() # Add last item if current_item: sections[current_section].append(current_item) return sections ``` ## Line Number Handling ### Single Line ``` **File**: SKILL.md:10:10 ``` - Only line 10 is replaced ### Line Range ``` **File**: SKILL.md:10:15 ``` - Lines 10-15 are replaced - Current content should span these lines ### No Line Numbers ``` **File**: references/new-file.md ``` - New file creation - Or append to existing file ### Line Number Extraction ```python def parse_file_path(line): """Extract file path and line numbers from File field.""" # Remove "**File**:" prefix value = line.split(':', 1)[1].strip() # Check for line numbers if ':' in value: parts = value.split(':') file_path = ':'.join(parts[:-2]) start_line = int(parts[-2]) end_line = int(parts[-1]) return { 'path': file_path, 'start': start_line, 'end': end_line } else: return { 'path': value, 'start': None, 'end': None } ``` ## Impact Extraction ```python def parse_impact(line): """Extract impact value from Impact field.""" # Format: **Impact**: +X points value = line.split(':', 1)[1].strip() # Extract number import re match = re.search(r'\+(\d+)', value) if match: return int(match.group(1)) return 0 ``` ## Code Fence Extraction ```python def extract_code_fence(content, start_line): """Extract code block starting after current line.""" lines = content.split('\n') start_idx = lines.index(start_line) # Find opening fence for i in range(start_idx, len(lines)): if lines[i].strip().startswith('```'): fence_start = i lang = lines[i].strip()[3:] break # Find closing fence for i in range(fence_start + 1, len(lines)): if lines[i].strip() == '```': fence_end = i break # Extract content code_lines = lines[fence_start + 1:fence_end] return '\n'.join(code_lines) ``` ## Validation Rules ### Required Sections - [ ] High Priority Improvements (may be empty) - [ ] Medium Priority Improvements (may be empty) - [ ] Low Priority Improvements (may be empty) ### Required Item Fields For each improvement item: - [ ] **File** field present - [ ] **Dimension** field present - [ ] **Impact** field present - [ ] **Current** field present (for edits) - [ ] **Suggested** field present ### File Path Validity - [ ] File path is valid format - [ ] Line numbers are integers (if present) - [ ] File extension matches content type ### Code Fence Validity - [ ] Opening fence present - [ ] Closing fence present - [ ] Language identifier valid - [ ] Content non-empty (for suggested) ## Example Improvement Plan ```markdown # Skill Improvement Plan: example-skill ## Priority Summary - **High Priority**: 2 items - **Medium Priority**: 1 item - **Low Priority**: 1 item ## High Priority Improvements ### 1. Fix Description Trigger Phrases **File**: SKILL.md:3:5 **Dimension**: Description Quality **Impact**: +20 points **Current**: ```yaml --- name: example-skill description: Use this for helpful tasks. --- ``` **Suggested**: ```yaml --- name: example-skill description: This skill should be used when the user asks to "validate data", "check schemas", or "verify formats". Perform data validation and schema checking for JSON and YAML files. --- ``` **Reason**: Add specific trigger phrases and use third-person format. ### 2. Fix Writing Style **File**: SKILL.md:25:30 **Dimension**: Writing Style **Impact**: +15 points **Current**: ```markdown ## Overview You should use this skill to validate data files. You can choose from JSON or XML formats. ``` **Suggested**: ```markdown ## Overview Validate data files in JSON or XML formats with configurable schemas. ``` **Reason**: Change to imperative form, remove second person. ## Medium Priority Improvements ### 1. Add Reference Documentation **File**: references/validation-rules.md **Dimension**: Content Organization **Impact**: +10 points **Suggested**: ```markdown # Validation Rules ## JSON Schema Rules - Required fields validation - Type checking - Format validation ## YAML Schema Rules - Structure validation - Type coercion rules ``` **Reason**: Move detailed rules to references for progressive disclosure. ## Low Priority Improvements ### 1. Clarify Description **File**: SKILL.md:50:52 **Dimension**: Writing Style **Impact**: +5 points **Current**: ```markdown ## Usage Use the skill when you need to validate files. ``` **Suggested**: ```markdown ## Usage Invoke skill for file validation tasks. ``` **Reason**: Use imperative form for consistency. ## Quick Wins (Easy Fixes) 1. Add space after comma in description (+2 points) 2. Fix indentation in examples section (+3 points) ## Estimated Time to Complete - High Priority: 0.5 hours - Medium Priority: 0.5 hours - Low Priority: 0.25 hours - **Total**: 1.25 hours ## Expected Score Improvement - Current: 65/100 (D) - After High Priority: 82/100 (B-) - After All: 88/100 (B+) ``` ## Integration Notes **Generated by:** `skill-quality-reviewer` **Consumed by:** `skill-improver` **Format version:** 1.0 **Compatibility:** Must maintain backward compatibility