Code Quality Checker
Analyzes Done implementation tasks with quantitative Code Quality Score based on metrics, MCP Ref validation, and issue penalties.
Purpose & Scope
- Load Story and Done implementation tasks (exclude test tasks)
- Calculate Code Quality Score using metrics and issue penalties
- MCP Ref validation: Verify optimality, best practices, and performance via external sources
- Check for DRY/KISS/YAGNI violations, architecture boundary breaks, security issues
- Produce quantitative verdict with structured issue list; never edits Linear or kanban
Code Metrics
| Metric |
Threshold |
Penalty |
| Cyclomatic Complexity |
≤10 OK, 11-20 warning, >20 fail |
-5 (warning), -10 (fail) per function |
| Function size |
≤50 lines OK, >50 warning |
-3 per function |
| File size |
≤500 lines OK, >500 warning |
-5 per file |
| Nesting depth |
≤3 OK, >3 warning |
-3 per instance |
| Parameter count |
≤4 OK, >4 warning |
-2 per function |
Code Quality Score
Formula: Code Quality Score = 100 - metric_penalties - issue_penalties
Issue penalties by severity:
| Severity |
Penalty |
Examples |
| high |
-20 |
Security vulnerability, O(n²)+ algorithm, N+1 query |
| medium |
-10 |
DRY violation, suboptimal approach, missing config |
| low |
-3 |
Naming convention, minor code smell |
Score interpretation:
| Score |
Status |
Verdict |
| 90-100 |
Excellent |
PASS |
| 70-89 |
Acceptable |
CONCERNS |
| <70 |
Below threshold |
ISSUES_FOUND |
Issue Prefixes
| Prefix |
Category |
Default Severity |
MCP Ref |
| SEC- |
Security (auth, validation, secrets) |
high |
— |
| PERF- |
Performance (algorithms, configs, bottlenecks) |
medium/high |
✓ Required |
| MNT- |
Maintainability (DRY, SOLID, complexity) |
medium |
— |
| ARCH- |
Architecture (layers, boundaries, patterns) |
medium |
— |
| BP- |
Best Practices (implementation differs from recommended) |
medium |
✓ Required |
| OPT- |
Optimality (better approach exists for this goal) |
medium |
✓ Required |
PERF- subcategories:
| Prefix |
Category |
Severity |
| PERF-ALG- |
Algorithm complexity (Big O) |
high if O(n²)+ |
| PERF-CFG- |
Package/library configuration |
medium |
| PERF-PTN- |
Architectural pattern performance |
high |
| PERF-DB- |
Database queries, indexes |
high |
When to Use
- Invoked by ln-500-story-quality-gate Pass 1 (first gate)
- All implementation tasks in Story status = Done
- Before regression testing (ln-502) and test planning (ln-510)
Workflow (concise)
- Load Story (full) and Done implementation tasks (full descriptions) via Linear; skip tasks with label "tests".
- Collect affected files from tasks (Affected Components/Existing Code Impact) and recent commits/diffs if noted.
- Calculate code metrics:
- Cyclomatic Complexity per function (target ≤10)
- Function size (target ≤50 lines)
- File size (target ≤500 lines)
- Nesting depth (target ≤3)
- Parameter count (target ≤4)
3.5) MCP Ref Validation (MANDATORY for code changes):
Level 1 — OPTIMALITY (OPT-):
- Extract goal from task (e.g., "user authentication", "caching", "API rate limiting")
- Research alternatives:
ref_search_documentation("{goal} approaches comparison {tech_stack} 2026")
- Compare chosen approach vs alternatives for project context
- Flag suboptimal choices as OPT- issues
Level 2 — BEST PRACTICES (BP-):
- Research:
ref_search_documentation("{chosen_approach} best practices {tech_stack} 2026")
- For libraries:
query-docs(library_id, "best practices implementation patterns")
- Flag deviations from recommended patterns as BP- issues
Level 3 — PERFORMANCE (PERF-):
- PERF-ALG: Analyze algorithm complexity (detect O(n²)+, research optimal via MCP Ref)
- PERF-CFG: Check library configs (connection pooling, batch sizes, timeouts) via
query-docs
- PERF-PTN: Research pattern pitfalls:
ref_search_documentation("{pattern} performance bottlenecks")
- PERF-DB: Check for N+1, missing indexes via
query-docs(orm_library_id, "query optimization")
Triggers for MCP Ref validation:
- New dependency added (package.json/requirements.txt changed)
- New pattern/library used
- API/database changes
- Loops/recursion in critical paths
- ORM queries added
Analyze code for static issues (assign prefixes):
- SEC-: hardcoded creds, unvalidated input, SQL injection, race conditions
- MNT-: DRY violations, dead code, complex conditionals, poor naming
- ARCH-: layer violations, circular dependencies, guide non-compliance
Calculate Code Quality Score:
- Start with 100
- Subtract metric penalties (see Code Metrics table)
- Subtract issue penalties (see Issue penalties table)
Output verdict with score and structured issues. Add Linear comment with findings.
Critical Rules
- Read guides mentioned in Story/Tasks before judging compliance.
- MCP Ref validation: For ANY architectural change, MUST verify via ref_search_documentation before judging.
- Context7 for libraries: When reviewing library usage, query-docs to verify correct patterns.
- Language preservation in comments (EN/RU).
- Do not create tasks or change statuses; caller decides next actions.
Definition of Done
- Story and Done implementation tasks loaded (test tasks excluded).
- Code metrics calculated (Cyclomatic Complexity, function/file sizes).
- MCP Ref validation completed:
- OPT-: Optimality checked (is chosen approach the best for the goal?)
- BP-: Best practices verified (correct implementation of chosen approach?)
- PERF-: Performance analyzed (algorithms, configs, patterns, DB)
- Issues identified with prefixes and severity, sources from MCP Ref/Context7.
- Code Quality Score calculated.
- Output format:
verdict: PASS | CONCERNS | ISSUES_FOUND
code_quality_score: {0-100}
metrics:
avg_cyclomatic_complexity: {value}
functions_over_50_lines: {count}
files_over_500_lines: {count}
issues:
# OPTIMALITY
- id: "OPT-001"
severity: medium
file: "src/auth/index.ts"
goal: "User session management"
finding: "Suboptimal approach for session management"
chosen: "Custom JWT with localStorage"
recommended: "httpOnly cookies + refresh token rotation"
reason: "httpOnly cookies prevent XSS token theft"
source: "ref://owasp-session-management"
# BEST PRACTICES
- id: "BP-001"
severity: medium
file: "src/api/routes.ts"
finding: "POST for idempotent operation"
best_practice: "Use PUT for idempotent updates (RFC 7231)"
source: "ref://api-design-guide#idempotency"
# PERFORMANCE - Algorithm
- id: "PERF-ALG-001"
severity: high
file: "src/utils/search.ts:42"
finding: "Nested loops cause O(n²) complexity"
current: "O(n²) - nested filter().find()"
optimal: "O(n) - use Map/Set for lookup"
source: "ref://javascript-performance#data-structures"
# PERFORMANCE - Config
- id: "PERF-CFG-001"
severity: medium
file: "src/db/connection.ts"
finding: "Missing connection pool config"
current_config: "default (pool: undefined)"
recommended: "pool: { min: 2, max: 10 }"
source: "context7://pg#connection-pooling"
# PERFORMANCE - Database
- id: "PERF-DB-001"
severity: high
file: "src/repositories/user.ts:89"
finding: "N+1 query pattern detected"
issue: "users.map(u => u.posts) triggers N queries"
solution: "Use eager loading: include: { posts: true }"
source: "context7://prisma#eager-loading"
# MAINTAINABILITY
- id: "MNT-001"
severity: medium
file: "src/service.ts:42"
finding: "DRY violation: duplicate validation logic"
suggested_action: "Extract to shared validator"
- Linear comment posted with findings.
Reference Files
- Code metrics:
references/code_metrics.md (thresholds and penalties)
- Guides:
docs/guides/
- Templates for context:
shared/templates/task_template_implementation.md
Version: 5.0.0 (Added 3-level MCP Ref validation: Optimality, Best Practices, Performance with PERF-ALG/CFG/PTN/DB subcategories)
Last Updated: 2026-01-29
1---2name: ln-501-code-quality-checker3description: Worker that checks DRY/KISS/YAGNI/architecture compliance with quantitative Code Quality Score. Validates architectural decisions via MCP Ref: (1) Optimality - is chosen approach the best? (2) Compliance - does it follow best practices? (3) Performance - algorithms, configs, bottlenecks. Reports issues with SEC-, PERF-, MNT-, ARCH-, BP-, OPT- prefixes.4---5
6# Code Quality Checker
7
8Analyzes Done implementation tasks with quantitative Code Quality Score based on metrics, MCP Ref validation, and issue penalties.
9
10## Purpose & Scope
11- Load Story and Done implementation tasks (exclude test tasks)
12- Calculate Code Quality Score using metrics and issue penalties
13- **MCP Ref validation:** Verify optimality, best practices, and performance via external sources
14- Check for DRY/KISS/YAGNI violations, architecture boundary breaks, security issues
15- Produce quantitative verdict with structured issue list; never edits Linear or kanban
16
17## Code Metrics
18
19| Metric | Threshold | Penalty |
20|--------|-----------|---------|
21| **Cyclomatic Complexity** | ≤10 OK, 11-20 warning, >20 fail | -5 (warning), -10 (fail) per function |
22| **Function size** | ≤50 lines OK, >50 warning | -3 per function |
23| **File size** | ≤500 lines OK, >500 warning | -5 per file |
24| **Nesting depth** | ≤3 OK, >3 warning | -3 per instance |
25| **Parameter count** | ≤4 OK, >4 warning | -2 per function |
26
27## Code Quality Score
28
29Formula: `Code Quality Score = 100 - metric_penalties - issue_penalties`
30
31**Issue penalties by severity:**
32
33| Severity | Penalty | Examples |
34|----------|---------|----------|
35| **high** | -20 | Security vulnerability, O(n²)+ algorithm, N+1 query |
36| **medium** | -10 | DRY violation, suboptimal approach, missing config |
37| **low** | -3 | Naming convention, minor code smell |
38
39**Score interpretation:**
40
41| Score | Status | Verdict |
42|-------|--------|---------|
43| 90-100 | Excellent | PASS |
44| 70-89 | Acceptable | CONCERNS |
45| <70 | Below threshold | ISSUES_FOUND |
46
47## Issue Prefixes
48
49| Prefix | Category | Default Severity | MCP Ref |
50|--------|----------|------------------|---------|
51| SEC- | Security (auth, validation, secrets) | high | — |
52| PERF- | Performance (algorithms, configs, bottlenecks) | medium/high | ✓ Required |
53| MNT- | Maintainability (DRY, SOLID, complexity) | medium | — |
54| ARCH- | Architecture (layers, boundaries, patterns) | medium | — |
55| BP- | Best Practices (implementation differs from recommended) | medium | ✓ Required |
56| OPT- | Optimality (better approach exists for this goal) | medium | ✓ Required |
57
58**PERF- subcategories:**
59
60| Prefix | Category | Severity |
61|--------|----------|----------|
62| PERF-ALG- | Algorithm complexity (Big O) | high if O(n²)+ |
63| PERF-CFG- | Package/library configuration | medium |
64| PERF-PTN- | Architectural pattern performance | high |
65| PERF-DB- | Database queries, indexes | high |
66
67## When to Use
68- **Invoked by ln-500-story-quality-gate** Pass 1 (first gate)
69- All implementation tasks in Story status = Done
70- Before regression testing (ln-502) and test planning (ln-510)
71
72## Workflow (concise)
731) Load Story (full) and Done implementation tasks (full descriptions) via Linear; skip tasks with label "tests".
742) Collect affected files from tasks (Affected Components/Existing Code Impact) and recent commits/diffs if noted.
753) **Calculate code metrics:**
76 - Cyclomatic Complexity per function (target ≤10)
77 - Function size (target ≤50 lines)
78 - File size (target ≤500 lines)
79 - Nesting depth (target ≤3)
80 - Parameter count (target ≤4)
81
823.5) **MCP Ref Validation (MANDATORY for code changes):**
83
84 **Level 1 — OPTIMALITY (OPT-):**
85 - Extract goal from task (e.g., "user authentication", "caching", "API rate limiting")
86 - Research alternatives: `ref_search_documentation("{goal} approaches comparison {tech_stack} 2026")`
87 - Compare chosen approach vs alternatives for project context
88 - Flag suboptimal choices as OPT- issues
89
90 **Level 2 — BEST PRACTICES (BP-):**
91 - Research: `ref_search_documentation("{chosen_approach} best practices {tech_stack} 2026")`
92 - For libraries: `query-docs(library_id, "best practices implementation patterns")`
93 - Flag deviations from recommended patterns as BP- issues
94
95 **Level 3 — PERFORMANCE (PERF-):**
96 - **PERF-ALG:** Analyze algorithm complexity (detect O(n²)+, research optimal via MCP Ref)
97 - **PERF-CFG:** Check library configs (connection pooling, batch sizes, timeouts) via `query-docs`
98 - **PERF-PTN:** Research pattern pitfalls: `ref_search_documentation("{pattern} performance bottlenecks")`
99 - **PERF-DB:** Check for N+1, missing indexes via `query-docs(orm_library_id, "query optimization")`
100
101 **Triggers for MCP Ref validation:**
102 - New dependency added (package.json/requirements.txt changed)
103 - New pattern/library used
104 - API/database changes
105 - Loops/recursion in critical paths
106 - ORM queries added
107
1084) **Analyze code for static issues (assign prefixes):**
109 - SEC-: hardcoded creds, unvalidated input, SQL injection, race conditions
110 - MNT-: DRY violations, dead code, complex conditionals, poor naming
111 - ARCH-: layer violations, circular dependencies, guide non-compliance
112
1135) **Calculate Code Quality Score:**
114 - Start with 100
115 - Subtract metric penalties (see Code Metrics table)
116 - Subtract issue penalties (see Issue penalties table)
117
1186) Output verdict with score and structured issues. Add Linear comment with findings.
119
120## Critical Rules
121- Read guides mentioned in Story/Tasks before judging compliance.
122- **MCP Ref validation:** For ANY architectural change, MUST verify via ref_search_documentation before judging.
123- **Context7 for libraries:** When reviewing library usage, query-docs to verify correct patterns.
124- Language preservation in comments (EN/RU).
125- Do not create tasks or change statuses; caller decides next actions.
126
127## Definition of Done
128- Story and Done implementation tasks loaded (test tasks excluded).
129- Code metrics calculated (Cyclomatic Complexity, function/file sizes).
130- **MCP Ref validation completed:**
131 - OPT-: Optimality checked (is chosen approach the best for the goal?)
132 - BP-: Best practices verified (correct implementation of chosen approach?)
133 - PERF-: Performance analyzed (algorithms, configs, patterns, DB)
134- Issues identified with prefixes and severity, sources from MCP Ref/Context7.
135- Code Quality Score calculated.
136- **Output format:**
137 ```yaml
138 verdict: PASS | CONCERNS | ISSUES_FOUND
139 code_quality_score: {0-100}
140 metrics:
141 avg_cyclomatic_complexity: {value}
142 functions_over_50_lines: {count}
143 files_over_500_lines: {count}
144 issues:
145 # OPTIMALITY
146 - id: "OPT-001"
147 severity: medium
148 file: "src/auth/index.ts"
149 goal: "User session management"
150 finding: "Suboptimal approach for session management"
151 chosen: "Custom JWT with localStorage"
152 recommended: "httpOnly cookies + refresh token rotation"
153 reason: "httpOnly cookies prevent XSS token theft"
154 source: "ref://owasp-session-management"
155
156 # BEST PRACTICES
157 - id: "BP-001"
158 severity: medium
159 file: "src/api/routes.ts"
160 finding: "POST for idempotent operation"
161 best_practice: "Use PUT for idempotent updates (RFC 7231)"
162 source: "ref://api-design-guide#idempotency"
163
164 # PERFORMANCE - Algorithm
165 - id: "PERF-ALG-001"
166 severity: high
167 file: "src/utils/search.ts:42"
168 finding: "Nested loops cause O(n²) complexity"
169 current: "O(n²) - nested filter().find()"
170 optimal: "O(n) - use Map/Set for lookup"
171 source: "ref://javascript-performance#data-structures"
172
173 # PERFORMANCE - Config
174 - id: "PERF-CFG-001"
175 severity: medium
176 file: "src/db/connection.ts"
177 finding: "Missing connection pool config"
178 current_config: "default (pool: undefined)"
179 recommended: "pool: { min: 2, max: 10 }"
180 source: "context7://pg#connection-pooling"
181
182 # PERFORMANCE - Database
183 - id: "PERF-DB-001"
184 severity: high
185 file: "src/repositories/user.ts:89"
186 finding: "N+1 query pattern detected"
187 issue: "users.map(u => u.posts) triggers N queries"
188 solution: "Use eager loading: include: { posts: true }"
189 source: "context7://prisma#eager-loading"
190
191 # MAINTAINABILITY
192 - id: "MNT-001"
193 severity: medium
194 file: "src/service.ts:42"
195 finding: "DRY violation: duplicate validation logic"
196 suggested_action: "Extract to shared validator"
197 ```
198- Linear comment posted with findings.
199
200## Reference Files
201- Code metrics: `references/code_metrics.md` (thresholds and penalties)
202- Guides: `docs/guides/`
203- Templates for context: `shared/templates/task_template_implementation.md`
204
205---
206**Version:** 5.0.0 (Added 3-level MCP Ref validation: Optimality, Best Practices, Performance with PERF-ALG/CFG/PTN/DB subcategories)
207**Last Updated:** 2026-01-29