482 lines
18 KiB
Markdown
482 lines
18 KiB
Markdown
---
|
|
name: linter-driven-development
|
|
description: |
|
|
Orchestrates complete autopilot workflow: design → test → lint → refactor → review → commit.
|
|
AUTO-INVOKES when user wants to implement code: "implement", "ready", "execute", "continue",
|
|
"do step X", "next task", "let's go", "start coding". Runs automatically through all phases
|
|
until commit-ready. Uses parallel linter+review analysis and intelligent combined reports.
|
|
For: features, bug fixes, refactors. Requires: Go project (go.mod).
|
|
---
|
|
|
|
# Linter-Driven Development Workflow
|
|
|
|
META ORCHESTRATOR for implementation workflow: design → test → lint → refactor → review → commit.
|
|
Use for any commit: features, bug fixes, refactors.
|
|
|
|
## When to Use
|
|
- Implementing any code change that should result in a commit
|
|
- Need automatic workflow management with quality gates
|
|
- Want to ensure: clean code + tests + linting + design validation
|
|
|
|
## Pre-Flight Check (ALWAYS RUN FIRST)
|
|
|
|
Before starting the autopilot workflow, verify all conditions are met:
|
|
|
|
### 1. Confirm Implementation Intent
|
|
Look for keywords indicating the user wants to implement code:
|
|
- **Direct keywords**: "implement", "ready", "execute", "do", "start", "continue", "next", "build", "create"
|
|
- **Step references**: "step 1", "task 2", "next task", "do step X"
|
|
- **Explicit invocation**: "@linter-driven-development"
|
|
|
|
### 2. Verify Go Project
|
|
Check that `go.mod` exists in the project root or parent directories.
|
|
|
|
### 3. Find Project Commands
|
|
Discover test and lint commands by reading project documentation:
|
|
|
|
**Search locations** (in order):
|
|
1. Project docs: `README.md`, `CLAUDE.md`, `agents.md`
|
|
2. Build configs: `Makefile`, `Taskfile.yaml`, `.golangci.yaml`
|
|
3. Git repository root for workspace-level commands
|
|
|
|
**Extract commands**:
|
|
- **Test command**: Look for `go test`, `make test`, `task test`, or similar
|
|
- **Lint command**: Look for `golangci-lint run --fix`, `make lint`, `task lintwithfix`, or similar
|
|
- **Prefer**: Commands with autofix capability (e.g., `--fix` flag)
|
|
|
|
**Fallback defaults** (if not found in docs):
|
|
- Tests: `go test ./...`
|
|
- Linter: `golangci-lint run --fix`
|
|
|
|
**If fallbacks don't work**:
|
|
- Ask user: "What commands should I use for testing and linting?"
|
|
- Document discovered commands in project docs for future runs
|
|
|
|
**Store discovered commands** for use throughout the workflow.
|
|
|
|
### 4. Identify Plan Context
|
|
Scan conversation history (last 50 messages) for:
|
|
- Step-by-step implementation plan
|
|
- Which step the user wants to implement
|
|
- Any design decisions or architectural context
|
|
|
|
### 5. Decision Tree
|
|
|
|
✅ **All conditions met → AUTOPILOT ENGAGED**
|
|
- Announce: "Engaging autopilot mode for [feature/step description]"
|
|
- Proceed directly to Phase 1
|
|
|
|
❓ **Unclear intent or missing context → ASK FOR CONFIRMATION**
|
|
- "I detected you want to implement something. Should I start the autopilot workflow?"
|
|
- Clarify which step to implement if multiple options exist
|
|
|
|
❌ **No plan found → SUGGEST CREATING PLAN FIRST**
|
|
- "I don't see an implementation plan. Would you like me to help create one first?"
|
|
- Offer to use @code-designing skill for design planning
|
|
|
|
❌ **Not a Go project → EXPLAIN LIMITATION**
|
|
- "This skill requires a Go project with go.mod. Current project doesn't appear to be Go."
|
|
|
|
## Workflow Phases
|
|
|
|
### Phase 1: Implementation Foundation
|
|
|
|
**Design Architecture** (if new types/functions needed):
|
|
- Invoke @code-designing skill
|
|
- Output: Type design plan with self-validating domain types
|
|
- When in plan mode, invoke with plan mode flag
|
|
|
|
**Write Tests First**:
|
|
- Invoke @testing skill for guidance
|
|
- Write table-driven tests or testify suites
|
|
- Target: 100% coverage on new leaf types
|
|
|
|
**Implement Code**:
|
|
- Follow coding principles from coding_rules.md
|
|
- Keep functions <50 LOC, max 2 nesting levels
|
|
- Use self-validating types, prevent primitive obsession
|
|
- Apply storifying pattern for readable top-level functions
|
|
|
|
### Phase 2: Quality Analysis (Agent is the Gate)
|
|
|
|
**Invoke quality-analyzer agent** for parallel quality analysis:
|
|
|
|
```
|
|
Task(subagent_type: "quality-analyzer")
|
|
|
|
Prompt:
|
|
"Analyze code quality for this Go project.
|
|
|
|
Mode: full
|
|
|
|
Project commands:
|
|
- Test: [PROJECT_TEST_COMMAND from Pre-Flight Check]
|
|
- Lint: [PROJECT_LINT_COMMAND from Pre-Flight Check]
|
|
|
|
Files to analyze:
|
|
[list files from: git diff --name-only main...HEAD | grep '\.go$']
|
|
|
|
Run all quality gates in parallel and return combined analysis."
|
|
```
|
|
|
|
**The quality-analyzer agent automatically**:
|
|
- Executes tests, linter, and code review in parallel (40-50% faster)
|
|
- Normalizes outputs into common format
|
|
- Identifies overlapping issues (same file:line from multiple sources)
|
|
- Performs root cause analysis (why multiple issues occur together)
|
|
- Prioritizes fixes by impact (issues resolved per fix)
|
|
- Returns structured report with one of 4 statuses
|
|
|
|
**Route based on agent status**:
|
|
|
|
### Status: TEST_FAILURE → Enter Test Focus Mode
|
|
|
|
**When**: Agent returns TEST_FAILURE status (tests failed)
|
|
|
|
**Action**: Focus exclusively on fixing tests before any quality analysis
|
|
|
|
```
|
|
Loop until tests pass:
|
|
1. Display test failures from agent report
|
|
2. Analyze failure root cause
|
|
3. Apply fix to implementation or tests
|
|
4. Re-run quality-analyzer (mode: "full")
|
|
5. Check status:
|
|
- Still TEST_FAILURE → Continue loop
|
|
- ISSUES_FOUND or CLEAN_STATE → Exit Test Focus Mode, proceed with new status
|
|
|
|
Max 10 iterations. If stuck, ask user for guidance.
|
|
```
|
|
|
|
**Why Test Focus Mode**:
|
|
- Tests are Gate 1 - nothing else matters if tests fail
|
|
- Prevents wasting time on linter/review issues when code doesn't work
|
|
- Ensures quality analysis runs on working code
|
|
|
|
**After tests pass**: Re-run quality-analyzer and continue with new status
|
|
|
|
### Status: CLEAN_STATE → Skip to Phase 5 (Documentation)
|
|
|
|
**When**: Agent returns CLEAN_STATE status
|
|
- ✅ Tests passed
|
|
- ✅ Linter clean (0 errors)
|
|
- ✅ Review clean (0 findings)
|
|
|
|
**Action**: All quality gates passed! Skip fix loop, proceed directly to Phase 5 (Documentation)
|
|
|
|
### Status: ISSUES_FOUND → Continue to Phase 3 (Fix Loop)
|
|
|
|
**When**: Agent returns ISSUES_FOUND status
|
|
- ✅ Tests passed
|
|
- ❌ Linter has errors OR ⚠️ Review has findings
|
|
|
|
**Action**: Display agent's combined report and proceed to Phase 3
|
|
|
|
**Agent Report Contains**:
|
|
- 📊 Summary: Tests, linter, review status
|
|
- 🎯 Overlapping issues with root cause analysis
|
|
- 📋 Isolated issues (single source only)
|
|
- 🔢 Prioritized fix order (by impact)
|
|
|
|
**Example Report** (generated by quality-analyzer agent):
|
|
```
|
|
═══════════════════════════════════════════════════════
|
|
QUALITY ANALYSIS REPORT
|
|
Mode: FULL
|
|
Files analyzed: 8
|
|
═══════════════════════════════════════════════════════
|
|
|
|
📊 SUMMARY
|
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
|
|
Tests: ✅ PASS (coverage: 87%)
|
|
Linter: ❌ FAIL (5 errors)
|
|
Review: ⚠️ FINDINGS (8 issues: 0 bugs, 3 design, 4 readability, 1 polish)
|
|
|
|
Total issues: 13 from 3 sources
|
|
|
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
OVERLAPPING ISSUES ANALYSIS
|
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
|
|
Found 3 locations with overlapping issues:
|
|
|
|
┌─────────────────────────────────────────────────────┐
|
|
│ pkg/parser.go:45 - function Parse │
|
|
│ OVERLAPPING (4 issues): │
|
|
│ │
|
|
│ ⚠️ Linter: Cognitive complexity 18 (>15) │
|
|
│ ⚠️ Linter: Function length 58 statements (>50) │
|
|
│ 🔴 Review: Mixed abstraction levels │
|
|
│ 🔴 Review: Defensive null checking │
|
|
│ │
|
|
│ 🎯 ROOT CAUSE: │
|
|
│ Function handles multiple responsibilities at │
|
|
│ different abstraction levels (parsing, validation, │
|
|
│ building result). │
|
|
│ │
|
|
│ Impact: HIGH (4 issues) | Complexity: MODERATE │
|
|
│ Priority: #1 CRITICAL │
|
|
└─────────────────────────────────────────────────────┘
|
|
|
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
PRIORITIZED FIX ORDER
|
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
|
|
Priority #1: pkg/parser.go:45 (4 issues, HIGH impact)
|
|
Priority #2: pkg/validator.go:23 (3 issues, HIGH impact)
|
|
Priority #3: pkg/handler.go:67 (2 issues, MEDIUM impact)
|
|
|
|
Isolated issues: 6 (fix individually)
|
|
|
|
Total fix targets: 3 overlapping groups + 6 isolated = 9 fixes
|
|
|
|
STATUS: ISSUES_FOUND
|
|
```
|
|
|
|
### Status: TOOLS_UNAVAILABLE → Report Error
|
|
|
|
**When**: Agent returns TOOLS_UNAVAILABLE status (missing tools)
|
|
|
|
**Action**: Display agent report with missing tools and suggestions, ask user to install tools
|
|
|
|
### Phase 3: Iterative Fix Loop
|
|
|
|
**For each prioritized fix** (from agent's report):
|
|
|
|
1. **Apply Fix**:
|
|
- Invoke @refactoring skill with:
|
|
* File and function to fix
|
|
* All issues in that area (from agent's overlapping groups or isolated issues)
|
|
* Root cause analysis from agent (if available)
|
|
* Expected outcome
|
|
- @refactoring applies appropriate patterns:
|
|
* Early returns (reduce nesting)
|
|
* Extract function (break complexity)
|
|
* Storifying (uniform abstractions)
|
|
* Extract type (create domain types)
|
|
* Switch extraction (categorize cases)
|
|
* Extract constant (remove magic numbers)
|
|
|
|
2. **Verify Fix with Quality-Analyzer Agent (Incremental Mode)**:
|
|
|
|
```
|
|
Task(subagent_type: "quality-analyzer")
|
|
|
|
Prompt:
|
|
"Re-analyze code quality after refactoring.
|
|
|
|
Mode: incremental
|
|
|
|
Project commands:
|
|
- Test: [PROJECT_TEST_COMMAND]
|
|
- Lint: [PROJECT_LINT_COMMAND]
|
|
|
|
Files to analyze (changed):
|
|
[list files from: git diff --name-only HEAD~1 HEAD | grep '\.go$']
|
|
|
|
Previous findings:
|
|
[paste findings from previous quality-analyzer report]
|
|
|
|
Run quality gates and return delta report (what changed)."
|
|
```
|
|
|
|
**Agent returns delta report with status**:
|
|
- ✅ Fixed: Issues resolved since last run
|
|
- ⚠️ Remaining: Issues still present
|
|
- 🆕 New: Issues introduced by recent changes
|
|
|
|
3. **Route Based on Agent Status**:
|
|
|
|
**If status = TEST_FAILURE**:
|
|
- → Enter Test Focus Mode (refactoring broke tests)
|
|
- Loop until tests pass (same as Phase 2)
|
|
- Continue with new status
|
|
|
|
**If status = CLEAN_STATE**:
|
|
- → All issues resolved! Break out of fix loop
|
|
- Continue to Phase 4 (Documentation)
|
|
|
|
**If status = ISSUES_FOUND**:
|
|
- Check delta report for progress:
|
|
* ✅ If issues were fixed → Continue to next fix
|
|
* ⚠️ If no progress → Analyze why, try different approach
|
|
* 🆕 If new issues introduced → Fix them first
|
|
|
|
4. **Safety Limits**:
|
|
- Max 10 iterations per fix loop
|
|
- IF stuck (no progress after 3 attempts):
|
|
* Show current status and delta report
|
|
* Ask user for guidance
|
|
* User can review: `git diff`
|
|
|
|
**Example Delta Report** (from quality-analyzer agent):
|
|
```
|
|
═══════════════════════════════════════════════════════
|
|
QUALITY ANALYSIS DELTA REPORT
|
|
Mode: INCREMENTAL
|
|
Files re-analyzed: 1 (changed since last run)
|
|
═══════════════════════════════════════════════════════
|
|
|
|
📊 SUMMARY
|
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
|
|
Tests: ✅ PASS (coverage: 89% ↑)
|
|
Linter: ✅ PASS (0 errors)
|
|
Review: ✅ CLEAN (0 findings)
|
|
|
|
✅ Fixed: 4 issues from pkg/parser.go:45
|
|
⚠️ Remaining: 0 issues
|
|
🆕 New: 0 issues introduced
|
|
|
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
RESOLUTION DETAILS
|
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
|
|
✅ FIXED:
|
|
pkg/parser.go:45 | Linter | Cognitive complexity (was 18, now 8)
|
|
pkg/parser.go:45 | Linter | Function length (was 58, now 25)
|
|
pkg/parser.go:45 | Review | Mixed abstraction levels (resolved)
|
|
pkg/parser.go:45 | Review | Defensive null checking (resolved)
|
|
|
|
STATUS: CLEAN_STATE ✅
|
|
Ready to proceed with next fix or move to documentation phase.
|
|
```
|
|
|
|
**Loop until agent returns CLEAN_STATE**:
|
|
- ✅ Tests pass
|
|
- ✅ Linter clean
|
|
- ✅ Review clean
|
|
|
|
### Phase 4: Documentation
|
|
|
|
Invoke @documentation skill:
|
|
|
|
1. Add/update package-level godoc
|
|
2. Add/update type-level documentation
|
|
3. Add/update function documentation (WHY not WHAT)
|
|
4. Add godoc testable examples (Example_* functions)
|
|
5. IF last plan step:
|
|
- Add feature documentation to docs/ folder
|
|
|
|
**Verify**:
|
|
- Run: `go doc -all ./...`
|
|
- Ensure examples compile
|
|
- Check documentation coverage
|
|
|
|
### Phase 5: Commit Ready
|
|
|
|
Generate comprehensive summary with suggested commit message.
|
|
|
|
- Linter passes ✅
|
|
- Tests pass with coverage ✅
|
|
- Design review complete ✅
|
|
- Documentation complete ✅
|
|
- Present commit message suggestion
|
|
|
|
## Output Format
|
|
|
|
```
|
|
📋 COMMIT READINESS SUMMARY
|
|
|
|
✅ Linter: Passed (0 issues)
|
|
✅ Tests: 95% coverage (3 new types, 15 test cases)
|
|
⚠️ Design Review: 4 findings (see below)
|
|
|
|
🎯 COMMIT SCOPE
|
|
Modified:
|
|
- user/service.go (+45, -12 lines)
|
|
- user/repository.go (+23, -5 lines)
|
|
|
|
Added:
|
|
- user/user_id.go (new type: UserID)
|
|
- user/email.go (new type: Email)
|
|
|
|
Tests:
|
|
- user/service_test.go (+120 lines)
|
|
- user/user_id_test.go (new)
|
|
- user/email_test.go (new)
|
|
|
|
⚠️ DESIGN REVIEW FINDINGS
|
|
|
|
🔴 DESIGN DEBT (Recommended to fix):
|
|
- user/service.go:45 - Primitive obsession detected
|
|
Current: func GetUserByID(id string) (*User, error)
|
|
Better: func GetUserByID(id UserID) (*User, error)
|
|
Why: Type safety, validation guarantee, prevents invalid IDs
|
|
Fix: Use @code-designing to convert remaining string usages
|
|
|
|
🟡 READABILITY DEBT (Consider fixing):
|
|
- user/service.go:78 - Mixed abstraction levels in CreateUser
|
|
Function mixes high-level steps with low-level validation details
|
|
Why: Harder to understand flow at a glance
|
|
Fix: Use @refactoring to extract validation helpers
|
|
|
|
🟢 POLISH OPPORTUNITIES:
|
|
- user/repository.go:34 - Function naming could be more idiomatic
|
|
SaveUser → Save (method receiver provides context)
|
|
|
|
📝 BROADER CONTEXT:
|
|
While reviewing user/service.go, noticed 3 more instances of string-based
|
|
IDs throughout the file (lines 120, 145, 203). Consider refactoring the
|
|
entire file to use UserID consistently for better type safety.
|
|
|
|
💡 SUGGESTED COMMIT MESSAGE
|
|
Add self-validating UserID and Email types
|
|
|
|
- Introduce UserID type with validation (prevents empty IDs)
|
|
- Introduce Email type with RFC 5322 validation
|
|
- Refactor CreateUser to use new types
|
|
- Achieve 95% test coverage with real repository implementation
|
|
|
|
Follows vertical slice architecture and primitive obsession principles.
|
|
|
|
────────────────────────────────────────
|
|
|
|
Would you like to:
|
|
1. Commit as-is (ignore design findings)
|
|
2. Fix design debt only (🔴), then commit
|
|
3. Fix design + readability debt (🔴 + 🟡), then commit
|
|
4. Fix all findings (🔴 🟡 🟢), then commit
|
|
5. Refactor entire file (address broader context), then commit
|
|
```
|
|
|
|
## Workflow Control
|
|
|
|
**Sequential Phases**: Each phase depends on previous phase completion
|
|
- Phase 1: Design and implementation must complete before quality analysis
|
|
- Phase 2: Quality analysis (via quality-analyzer agent) determines next phase
|
|
- Phase 3: Fix loop continues until all issues resolved (agent returns CLEAN_STATE)
|
|
- Phase 4: Documentation only after all quality gates pass
|
|
- Phase 5: Commit ready summary presented to user
|
|
|
|
**Status-Based Routing**: Agent determines workflow path
|
|
- **TEST_FAILURE** → Test Focus Mode (fix tests, retry Phase 2)
|
|
- **CLEAN_STATE** → Skip fix loop, go directly to documentation
|
|
- **ISSUES_FOUND** → Enter fix loop (Phase 3)
|
|
- **TOOLS_UNAVAILABLE** → Report error, ask user to install tools
|
|
|
|
**Parallel Execution**: Phase 2 and fix verification run 3 tools simultaneously (40-50% faster)
|
|
|
|
**Incremental Review**: After first run, agent only analyzes changed files for faster iteration
|
|
|
|
## Integration with Other Skills and Agents
|
|
|
|
This orchestrator **invokes** other skills and agents automatically:
|
|
|
|
**Skills**:
|
|
- @code-designing (Phase 1, if needed for type design)
|
|
- @testing (Phase 1, principles applied)
|
|
- @refactoring (Phase 3, when issues found)
|
|
- @documentation (Phase 4, always)
|
|
|
|
**Agents**:
|
|
- quality-analyzer agent (Phase 2 and Phase 3 verification)
|
|
- Internally delegates to go-code-reviewer agent for design analysis
|
|
- Executes tests and linter in parallel
|
|
- Returns intelligent combined reports with overlapping issue detection
|
|
|
|
After committing, consider:
|
|
- If feature complete → Feature fully documented in Phase 4
|
|
- If more work needed → Run this workflow again for next commit
|