coverme-scanner 1.0.8 → 1.0.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/prompts/quality-analyzer.md +239 -43
- package/dist/report/generator.d.ts.map +1 -1
- package/dist/report/generator.js +43 -72
- package/dist/report/generator.js.map +1 -1
- package/dist/templates/report.html +2 -2
- package/package.json +1 -1
- package/src/prompts/quality-analyzer.md +239 -43
- package/src/report/generator.ts +46 -68
- package/src/templates/report.html +2 -2
|
@@ -9,7 +9,173 @@ You will receive PROJECT CONTEXT from the Context Discovery agent. Use it to und
|
|
|
9
9
|
- Architecture patterns in use
|
|
10
10
|
- Existing abstractions and utilities
|
|
11
11
|
|
|
12
|
-
##
|
|
12
|
+
## CRITICAL: Active Detection Strategies
|
|
13
|
+
|
|
14
|
+
### Strategy 1: Find Dead Code (Orphan Detection)
|
|
15
|
+
|
|
16
|
+
**Step 1: Build the call graph mentally**
|
|
17
|
+
- Identify all entry points: routes, exports, event handlers, CLI commands
|
|
18
|
+
- Trace what each entry point calls
|
|
19
|
+
- Anything NOT reachable from entry points is dead code
|
|
20
|
+
|
|
21
|
+
**Step 2: Search for orphaned exports**
|
|
22
|
+
```bash
|
|
23
|
+
# Find all exports
|
|
24
|
+
grep -r "export\s" --include="*.ts" --include="*.js"
|
|
25
|
+
|
|
26
|
+
# For each export, verify it's imported somewhere
|
|
27
|
+
grep -r "import.*{.*ExportName.*}" --include="*.ts" --include="*.js"
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
**Step 3: Check for disconnected files**
|
|
31
|
+
- Files that export but are never imported
|
|
32
|
+
- Components that exist but aren't used in any route/page
|
|
33
|
+
- Utility functions that have no callers
|
|
34
|
+
- API endpoints with no frontend calls
|
|
35
|
+
|
|
36
|
+
**Red flags for dead code:**
|
|
37
|
+
- Functions with 0 callers (check with: where is this function called?)
|
|
38
|
+
- Files not imported anywhere
|
|
39
|
+
- Routes not linked from UI
|
|
40
|
+
- Event handlers for events never emitted
|
|
41
|
+
- Feature flags that are always false
|
|
42
|
+
- Code behind `if (false)` or `if (0)`
|
|
43
|
+
|
|
44
|
+
### Strategy 2: Find Duplicate Code
|
|
45
|
+
|
|
46
|
+
**Step 1: Look for similar function names**
|
|
47
|
+
```bash
|
|
48
|
+
# Functions with similar names often do similar things
|
|
49
|
+
grep -r "function validate" --include="*.ts"
|
|
50
|
+
grep -r "function format" --include="*.ts"
|
|
51
|
+
grep -r "function parse" --include="*.ts"
|
|
52
|
+
grep -r "function handle" --include="*.ts"
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
**Step 2: Look for repeated patterns**
|
|
56
|
+
- Same regex appearing in multiple files
|
|
57
|
+
- Same error handling pattern copy-pasted
|
|
58
|
+
- Same API call structure repeated
|
|
59
|
+
- Same validation logic in multiple places
|
|
60
|
+
- Same date/string formatting code
|
|
61
|
+
|
|
62
|
+
**Step 3: Compare similar files**
|
|
63
|
+
- Controllers that handle similar resources
|
|
64
|
+
- Components that render similar UI
|
|
65
|
+
- Services that call similar APIs
|
|
66
|
+
|
|
67
|
+
**Report duplicates with ALL locations:**
|
|
68
|
+
```json
|
|
69
|
+
{
|
|
70
|
+
"locations": [
|
|
71
|
+
{"file": "src/a.ts", "line": 10},
|
|
72
|
+
{"file": "src/b.ts", "line": 25},
|
|
73
|
+
{"file": "src/c.ts", "line": 42}
|
|
74
|
+
]
|
|
75
|
+
}
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
### Strategy 3: Find Silent Failures (Fallback שקט)
|
|
79
|
+
|
|
80
|
+
**This is CRITICAL - silent failures hide bugs!**
|
|
81
|
+
|
|
82
|
+
**Pattern 1: Empty catch blocks**
|
|
83
|
+
```javascript
|
|
84
|
+
// BAD - silent failure
|
|
85
|
+
try {
|
|
86
|
+
await doSomething();
|
|
87
|
+
} catch (e) {
|
|
88
|
+
// nothing here - BUG HIDER!
|
|
89
|
+
}
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
**Pattern 2: Catch with only console.log**
|
|
93
|
+
```javascript
|
|
94
|
+
// BAD - logs but continues as if success
|
|
95
|
+
try {
|
|
96
|
+
await saveToDatabase();
|
|
97
|
+
} catch (e) {
|
|
98
|
+
console.log(e); // No rethrow, no return, continues execution!
|
|
99
|
+
}
|
|
100
|
+
// Code here runs even on failure
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
**Pattern 3: Default values hiding errors**
|
|
104
|
+
```javascript
|
|
105
|
+
// BAD - returns empty instead of failing
|
|
106
|
+
function getUsers() {
|
|
107
|
+
try {
|
|
108
|
+
return fetchUsers();
|
|
109
|
+
} catch {
|
|
110
|
+
return []; // Silent! Caller thinks there are 0 users
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
**Pattern 4: Optional chaining abuse**
|
|
116
|
+
```javascript
|
|
117
|
+
// Suspicious - why would this be undefined?
|
|
118
|
+
const name = user?.profile?.name ?? 'Unknown';
|
|
119
|
+
// If user should always exist, this hides a bug
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
**Pattern 5: || and ?? hiding errors**
|
|
123
|
+
```javascript
|
|
124
|
+
// BAD - error becomes empty string
|
|
125
|
+
const data = riskyOperation() || '';
|
|
126
|
+
const config = parseConfig() ?? {};
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
**Pattern 6: .catch() with no action**
|
|
130
|
+
```javascript
|
|
131
|
+
// BAD
|
|
132
|
+
fetchData().catch(() => {});
|
|
133
|
+
promise.catch(console.error); // logs but doesn't handle
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
**Search commands:**
|
|
137
|
+
```bash
|
|
138
|
+
# Empty catch
|
|
139
|
+
grep -r "catch.*{[\s]*}" --include="*.ts" --include="*.js"
|
|
140
|
+
|
|
141
|
+
# Catch with only console
|
|
142
|
+
grep -r "catch.*console\.(log|error)" --include="*.ts"
|
|
143
|
+
|
|
144
|
+
# Silent fallbacks
|
|
145
|
+
grep -r "catch.*return \[\]" --include="*.ts"
|
|
146
|
+
grep -r "catch.*return {}" --include="*.ts"
|
|
147
|
+
grep -r "catch.*return null" --include="*.ts"
|
|
148
|
+
grep -r "catch.*return ''" --include="*.ts"
|
|
149
|
+
|
|
150
|
+
# Empty .catch()
|
|
151
|
+
grep -r "\.catch\(\s*\(\)\s*=>" --include="*.ts"
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
### Strategy 4: Find Disconnected Code
|
|
155
|
+
|
|
156
|
+
**Code that exists but isn't wired up:**
|
|
157
|
+
|
|
158
|
+
1. **React components not in routes**
|
|
159
|
+
- Check every component in /components
|
|
160
|
+
- Verify it's used in a page or another component
|
|
161
|
+
|
|
162
|
+
2. **API endpoints not called**
|
|
163
|
+
- List all routes
|
|
164
|
+
- Search frontend for each endpoint URL
|
|
165
|
+
|
|
166
|
+
3. **Event handlers not connected**
|
|
167
|
+
- onClick handlers defined but not attached
|
|
168
|
+
- Event listeners for events never emitted
|
|
169
|
+
|
|
170
|
+
4. **Config options not used**
|
|
171
|
+
- Config keys defined but never read
|
|
172
|
+
- Feature flags that are never checked
|
|
173
|
+
|
|
174
|
+
5. **Database fields not used**
|
|
175
|
+
- Schema fields with no queries
|
|
176
|
+
- Migrations that add columns never used
|
|
177
|
+
|
|
178
|
+
## Standard Quality Checks
|
|
13
179
|
|
|
14
180
|
### 1. DRY Violations (Don't Repeat Yourself)
|
|
15
181
|
- [ ] Duplicated code blocks (>10 lines similar)
|
|
@@ -18,15 +184,6 @@ You will receive PROJECT CONTEXT from the Context Discovery agent. Use it to und
|
|
|
18
184
|
- [ ] Repeated patterns that should be abstracted
|
|
19
185
|
- [ ] Duplicated constants/magic numbers
|
|
20
186
|
|
|
21
|
-
**How to find:**
|
|
22
|
-
```bash
|
|
23
|
-
# Look for similar function signatures
|
|
24
|
-
grep -r "function\|const.*=.*=>" --include="*.js" --include="*.ts" | sort | uniq -d
|
|
25
|
-
|
|
26
|
-
# Look for repeated patterns
|
|
27
|
-
# Use your judgment when reading code
|
|
28
|
-
```
|
|
29
|
-
|
|
30
187
|
### 2. Complexity Issues
|
|
31
188
|
- [ ] Functions >50 lines
|
|
32
189
|
- [ ] Cyclomatic complexity >10
|
|
@@ -36,13 +193,15 @@ grep -r "function\|const.*=.*=>" --include="*.js" --include="*.ts" | sort | uniq
|
|
|
36
193
|
- [ ] Files with >500 lines
|
|
37
194
|
|
|
38
195
|
### 3. Dead Code
|
|
39
|
-
- [ ] Unused functions
|
|
196
|
+
- [ ] Unused functions (no callers)
|
|
40
197
|
- [ ] Unused variables
|
|
41
198
|
- [ ] Unreachable code paths
|
|
42
|
-
- [ ] Commented-out code blocks
|
|
199
|
+
- [ ] Commented-out code blocks (>3 lines)
|
|
43
200
|
- [ ] Unused imports
|
|
44
201
|
- [ ] Unused dependencies in package.json
|
|
45
202
|
- [ ] Deprecated code still present
|
|
203
|
+
- [ ] Feature flags always false
|
|
204
|
+
- [ ] Exports with no imports
|
|
46
205
|
|
|
47
206
|
### 4. Anti-Patterns
|
|
48
207
|
- [ ] God objects (classes doing too much)
|
|
@@ -54,14 +213,16 @@ grep -r "function\|const.*=.*=>" --include="*.js" --include="*.ts" | sort | uniq
|
|
|
54
213
|
- [ ] Magic numbers/strings
|
|
55
214
|
- [ ] Stringly-typed code
|
|
56
215
|
|
|
57
|
-
### 5. Error Handling
|
|
58
|
-
- [ ] Empty catch blocks
|
|
59
|
-
- [ ] Swallowed errors (catch without
|
|
216
|
+
### 5. Error Handling Issues (FOCUS HERE!)
|
|
217
|
+
- [ ] Empty catch blocks (**CRITICAL**)
|
|
218
|
+
- [ ] Swallowed errors (catch without rethrow)
|
|
219
|
+
- [ ] Silent fallbacks (return default on error)
|
|
60
220
|
- [ ] Missing error handling on async operations
|
|
61
221
|
- [ ] Inconsistent error formats
|
|
62
222
|
- [ ] No error boundaries in React
|
|
63
223
|
- [ ] No try-catch around JSON.parse
|
|
64
|
-
- [ ]
|
|
224
|
+
- [ ] .catch() with no meaningful action
|
|
225
|
+
- [ ] Errors logged but not propagated
|
|
65
226
|
|
|
66
227
|
### 6. Type Safety (TypeScript)
|
|
67
228
|
- [ ] `any` type usage
|
|
@@ -106,45 +267,80 @@ For EACH finding, output:
|
|
|
106
267
|
```json
|
|
107
268
|
{
|
|
108
269
|
"id": "QUAL-001",
|
|
109
|
-
"title": "
|
|
270
|
+
"title": "Silent Error Handling in Payment Service",
|
|
271
|
+
"severity": "critical",
|
|
272
|
+
"category": "quality",
|
|
273
|
+
"subcategory": "silent_failure",
|
|
274
|
+
"file": "src/services/paymentService.ts",
|
|
275
|
+
"line": 45,
|
|
276
|
+
"endLine": 52,
|
|
277
|
+
"code": "try {\n await chargeCard(amount);\n} catch (e) {\n console.error(e);\n // continues to \"success\" response!\n}",
|
|
278
|
+
"description": "Payment errors are caught and logged but execution continues as if payment succeeded. Customer could receive product without paying.",
|
|
279
|
+
"impact": "Financial loss. Customers charged $0 for orders. Silent data corruption.",
|
|
280
|
+
"recommendation": "Rethrow the error or return error response:\n\n```typescript\ntry {\n await chargeCard(amount);\n} catch (e) {\n logger.error('Payment failed', { error: e, orderId });\n throw new PaymentError('Payment processing failed');\n}\n```",
|
|
281
|
+
"effort": "low"
|
|
282
|
+
}
|
|
283
|
+
```
|
|
284
|
+
|
|
285
|
+
### Dead Code Finding Example
|
|
286
|
+
```json
|
|
287
|
+
{
|
|
288
|
+
"id": "QUAL-015",
|
|
289
|
+
"title": "Orphaned Component: UserAvatar",
|
|
290
|
+
"severity": "medium",
|
|
291
|
+
"category": "quality",
|
|
292
|
+
"subcategory": "dead_code",
|
|
293
|
+
"file": "src/components/UserAvatar.tsx",
|
|
294
|
+
"line": 1,
|
|
295
|
+
"endLine": 45,
|
|
296
|
+
"description": "UserAvatar component is defined but never imported or used anywhere in the codebase. It appears to be leftover from a removed feature.",
|
|
297
|
+
"evidence": [
|
|
298
|
+
"grep for 'UserAvatar' returns only the definition file",
|
|
299
|
+
"No imports found in any other file",
|
|
300
|
+
"Component not in any route or page"
|
|
301
|
+
],
|
|
302
|
+
"recommendation": "Delete the file or integrate it if it was meant to be used.",
|
|
303
|
+
"effort": "low"
|
|
304
|
+
}
|
|
305
|
+
```
|
|
306
|
+
|
|
307
|
+
### Duplicate Code Finding Example
|
|
308
|
+
```json
|
|
309
|
+
{
|
|
310
|
+
"id": "QUAL-022",
|
|
311
|
+
"title": "Duplicated Date Formatting Logic",
|
|
110
312
|
"severity": "medium",
|
|
111
313
|
"category": "quality",
|
|
112
314
|
"subcategory": "dry_violation",
|
|
113
|
-
"file": "src/
|
|
114
|
-
"line":
|
|
115
|
-
"endLine": 55,
|
|
315
|
+
"file": "src/utils/formatters.ts",
|
|
316
|
+
"line": 12,
|
|
116
317
|
"additionalLocations": [
|
|
117
|
-
{"file": "src/
|
|
118
|
-
{"file": "src/
|
|
318
|
+
{"file": "src/components/OrderList.tsx", "line": 34},
|
|
319
|
+
{"file": "src/components/InvoiceTable.tsx", "line": 89},
|
|
320
|
+
{"file": "src/pages/Dashboard.tsx", "line": 156}
|
|
119
321
|
],
|
|
120
|
-
"code": "const
|
|
121
|
-
"description": "
|
|
122
|
-
"
|
|
123
|
-
"
|
|
124
|
-
"effort": "low"
|
|
125
|
-
"linesAffected": 33,
|
|
126
|
-
"evidence": [
|
|
127
|
-
"Found in userService.js:45-55",
|
|
128
|
-
"Found in authController.js:78-88",
|
|
129
|
-
"Found in validators.js:12-22"
|
|
130
|
-
]
|
|
322
|
+
"code": "const formatted = `${date.getMonth()+1}/${date.getDate()}/${date.getFullYear()}`",
|
|
323
|
+
"description": "Same date formatting pattern appears in 4 different files. Any format change requires 4 updates.",
|
|
324
|
+
"recommendation": "Extract to shared utility:\n\n```typescript\n// src/utils/date.ts\nexport function formatDate(date: Date): string {\n return new Intl.DateTimeFormat('en-US').format(date);\n}\n```",
|
|
325
|
+
"linesAffected": 4,
|
|
326
|
+
"effort": "low"
|
|
131
327
|
}
|
|
132
328
|
```
|
|
133
329
|
|
|
134
330
|
## Severity Guidelines
|
|
135
331
|
|
|
136
|
-
- **Critical**:
|
|
137
|
-
- **High**: Significant maintainability risk (
|
|
138
|
-
- **Medium**: Should be fixed (
|
|
139
|
-
- **Low**: Nice to fix (
|
|
140
|
-
- **Info**: Suggestions (
|
|
332
|
+
- **Critical**: Silent failures that hide bugs, especially in payments/auth/data
|
|
333
|
+
- **High**: Significant maintainability risk (large dead code, major duplication)
|
|
334
|
+
- **Medium**: Should be fixed (DRY violations, missing types, smaller dead code)
|
|
335
|
+
- **Low**: Nice to fix (naming issues, minor dead code, small duplication)
|
|
336
|
+
- **Info**: Suggestions (could be more idiomatic)
|
|
141
337
|
|
|
142
338
|
## Rules
|
|
143
339
|
|
|
144
|
-
1. **
|
|
145
|
-
2. **
|
|
146
|
-
3. **
|
|
147
|
-
4. **
|
|
340
|
+
1. **Actively search** - Don't just read, grep for patterns
|
|
341
|
+
2. **Verify dead code** - Confirm it's really not called anywhere
|
|
342
|
+
3. **Find ALL duplicates** - List every location, not just the first two
|
|
343
|
+
4. **Silent failures are CRITICAL** - Empty catch blocks hide production bugs
|
|
148
344
|
5. **Give fixes** - Show exactly how to refactor
|
|
149
345
|
|
|
150
|
-
START SCANNING NOW.
|
|
346
|
+
START SCANNING NOW. Be aggressive about finding dead code and silent failures.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../../src/report/generator.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAY,MAAM,aAAa,CAAC;AAE1E,UAAU,SAAS;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,gBAAgB,EAAE,CAAC;CAC9B;AAED,UAAU,eAAe;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,gBAAgB,EAAE,CAAC;CAC9B;AAED,UAAU,UAAU;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,gBAAgB,EAAE,CAAC;IACrC,YAAY,EAAE,gBAAgB,EAAE,CAAC;IACjC,cAAc,EAAE,gBAAgB,EAAE,CAAC;IACnC,WAAW,EAAE,gBAAgB,EAAE,CAAC;IAChC,UAAU,EAAE,SAAS,EAAE,CAAC;IACxB,gBAAgB,EAAE,eAAe,EAAE,CAAC;IACpC,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,eAAe,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC7F,kBAAkB,EAAE,MAAM,CAAC;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,oBAAoB,EAAE,CAAC,MAAM,GAAG;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,EAAE,CAAC;IAC5E,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,UAAU,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAwBnF;AAED,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CAkBnE;
|
|
1
|
+
{"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../../src/report/generator.ts"],"names":[],"mappings":"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"}
|
package/dist/report/generator.js
CHANGED
|
@@ -135,90 +135,61 @@ function createFileGroups(findings) {
|
|
|
135
135
|
return groups;
|
|
136
136
|
}
|
|
137
137
|
function createDepartmentGroups(findings) {
|
|
138
|
-
//
|
|
139
|
-
const
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
description: 'Kubernetes, Docker, CI/CD, Cloud configuration',
|
|
143
|
-
isInfra: true,
|
|
144
|
-
patterns: [/chart\//, /\.ya?ml$/, /dockerfile/i, /docker-compose/, /\.tf$/, /terraform/, /helm/]
|
|
145
|
-
},
|
|
146
|
-
'backend': {
|
|
147
|
-
name: 'Backend Development',
|
|
148
|
-
description: 'Server-side code, APIs, services',
|
|
149
|
-
isInfra: false,
|
|
150
|
-
patterns: [/backend/, /server/, /api\//, /routes\//, /services\//, /middleware\//]
|
|
151
|
-
},
|
|
152
|
-
'frontend': {
|
|
153
|
-
name: 'Frontend Development',
|
|
154
|
-
description: 'UI components, client-side logic',
|
|
155
|
-
isInfra: false,
|
|
156
|
-
patterns: [/frontend/, /app\//, /components\//, /lib\//, /hooks\//]
|
|
157
|
-
},
|
|
158
|
-
'security': {
|
|
159
|
-
name: 'Security',
|
|
160
|
-
description: 'Authentication, authorization, encryption',
|
|
161
|
-
isInfra: false,
|
|
162
|
-
patterns: [/auth/, /security/, /crypto/, /encryption/]
|
|
163
|
-
},
|
|
164
|
-
'testing': {
|
|
165
|
-
name: 'Quality & Testing',
|
|
166
|
-
description: 'Tests, code quality, coverage',
|
|
167
|
-
isInfra: false,
|
|
168
|
-
patterns: [/test/, /spec/, /__tests__/]
|
|
169
|
-
}
|
|
170
|
-
};
|
|
171
|
-
const deptMap = new Map();
|
|
172
|
-
// Categorize findings
|
|
138
|
+
// Group by top-level component (first directory in path)
|
|
139
|
+
const componentMap = new Map();
|
|
140
|
+
// Infrastructure patterns for icon selection
|
|
141
|
+
const infraPatterns = [/chart/, /helm/, /docker/, /k8s/, /kubernetes/, /terraform/, /\.tf$/, /ci-?cd/, /\.github/, /\.gitlab/];
|
|
173
142
|
for (const finding of findings) {
|
|
174
|
-
const filePath =
|
|
175
|
-
|
|
176
|
-
let
|
|
177
|
-
//
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
}
|
|
143
|
+
const filePath = finding.file || '';
|
|
144
|
+
// Extract component name from path
|
|
145
|
+
let component = 'other';
|
|
146
|
+
// Try to get first meaningful directory
|
|
147
|
+
const parts = filePath.split('/').filter(p => p && !p.startsWith('.'));
|
|
148
|
+
if (parts.length > 0) {
|
|
149
|
+
// Use first directory, or filename if it's a root file
|
|
150
|
+
component = parts[0];
|
|
151
|
+
// Clean up component name
|
|
152
|
+
component = component.replace(/[-_]/g, '-').toLowerCase();
|
|
153
|
+
// Handle special cases
|
|
154
|
+
if (component === 'src' && parts.length > 1) {
|
|
155
|
+
component = parts[1]; // Use subdirectory of src
|
|
156
|
+
}
|
|
157
|
+
if (component === 'packages' && parts.length > 1) {
|
|
158
|
+
component = parts[1]; // Use package name
|
|
191
159
|
}
|
|
192
160
|
}
|
|
193
|
-
if (!
|
|
194
|
-
|
|
161
|
+
if (!componentMap.has(component)) {
|
|
162
|
+
componentMap.set(component, []);
|
|
195
163
|
}
|
|
196
|
-
|
|
164
|
+
componentMap.get(component).push(finding);
|
|
197
165
|
}
|
|
198
166
|
// Convert to DepartmentGroup array
|
|
199
167
|
const groups = [];
|
|
200
|
-
for (const [
|
|
201
|
-
const
|
|
168
|
+
for (const [componentName, componentFindings] of componentMap) {
|
|
169
|
+
const isInfra = infraPatterns.some(p => p.test(componentName));
|
|
170
|
+
// Create readable name
|
|
171
|
+
const displayName = componentName
|
|
172
|
+
.split('-')
|
|
173
|
+
.map(word => word.charAt(0).toUpperCase() + word.slice(1))
|
|
174
|
+
.join(' ');
|
|
202
175
|
const severityOrder = { critical: 0, high: 1, medium: 2, low: 3, info: 4 };
|
|
203
|
-
|
|
176
|
+
componentFindings.sort((a, b) => (severityOrder[a.severity] || 4) - (severityOrder[b.severity] || 4));
|
|
204
177
|
groups.push({
|
|
205
|
-
name:
|
|
206
|
-
description:
|
|
207
|
-
isInfra
|
|
208
|
-
criticalCount:
|
|
209
|
-
highCount:
|
|
210
|
-
mediumCount:
|
|
211
|
-
lowCount:
|
|
212
|
-
findings:
|
|
178
|
+
name: displayName,
|
|
179
|
+
description: `${componentFindings.length} issues in ${componentName}/`,
|
|
180
|
+
isInfra,
|
|
181
|
+
criticalCount: componentFindings.filter(f => f.severity === 'critical').length,
|
|
182
|
+
highCount: componentFindings.filter(f => f.severity === 'high').length,
|
|
183
|
+
mediumCount: componentFindings.filter(f => f.severity === 'medium').length,
|
|
184
|
+
lowCount: componentFindings.filter(f => f.severity === 'low' || f.severity === 'info').length,
|
|
185
|
+
findings: componentFindings
|
|
213
186
|
});
|
|
214
187
|
}
|
|
215
|
-
// Sort by
|
|
188
|
+
// Sort by total issues (most issues first)
|
|
216
189
|
groups.sort((a, b) => {
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
return b.highCount - a.highCount;
|
|
221
|
-
return b.mediumCount - a.mediumCount;
|
|
190
|
+
const totalA = a.criticalCount * 1000 + a.highCount * 100 + a.mediumCount * 10 + a.lowCount;
|
|
191
|
+
const totalB = b.criticalCount * 1000 + b.highCount * 100 + b.mediumCount * 10 + b.lowCount;
|
|
192
|
+
return totalB - totalA;
|
|
222
193
|
});
|
|
223
194
|
return groups;
|
|
224
195
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../src/report/generator.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../src/report/generator.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqDA,wCAwBC;AAED,4DAkBC;AA2KD,wCAiMC;AAED,8CAsEC;AAED,gDAmDC;AA1kBD,uCAAyB;AACzB,2CAA6B;AAC7B,0DAAkC;AAmDlC,SAAgB,cAAc,CAAC,MAAkB;IAC/C,oDAAoD;IACpD,qBAAqB;IACrB,gBAAgB;IAChB,kBAAkB;IAClB,eAAe;IACf,UAAU;IAEV,IAAI,KAAK,GAAG,GAAG,CAAC;IAChB,KAAK,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,GAAG,EAAE,CAAC;IACtC,KAAK,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC;IACjC,KAAK,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;IACnC,KAAK,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC;IAEhC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;IAE1C,IAAI,KAAa,CAAC;IAClB,IAAI,KAAK,IAAI,EAAE;QAAE,KAAK,GAAG,GAAG,CAAC;SACxB,IAAI,KAAK,IAAI,EAAE;QAAE,KAAK,GAAG,GAAG,CAAC;SAC7B,IAAI,KAAK,IAAI,EAAE;QAAE,KAAK,GAAG,GAAG,CAAC;SAC7B,IAAI,KAAK,IAAI,EAAE;QAAE,KAAK,GAAG,GAAG,CAAC;;QAC7B,KAAK,GAAG,GAAG,CAAC;IAEjB,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;AACjC,CAAC;AAED,SAAgB,wBAAwB,CAAC,MAAkB;IACzD,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;IACnC,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC;IACzC,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;IAEjC,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;QACjB,OAAO,wBAAwB,KAAK,6CAA6C,QAAQ,kBAAkB,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,sCAAsC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,iBAAiB,IAAI,iEAAiE,CAAC,CAAC,CAAC,EAAE,4EAA4E,CAAC;IAC7V,CAAC;IAED,IAAI,IAAI,GAAG,CAAC,EAAE,CAAC;QACb,OAAO,wBAAwB,KAAK,mBAAmB,IAAI,uBAAuB,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,sKAAsK,CAAC;IAC9Q,CAAC;IAED,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;QACd,OAAO,wBAAwB,KAAK,oNAAoN,CAAC;IAC3P,CAAC;IAED,OAAO,mLAAmL,CAAC;AAC7L,CAAC;AAED,SAAS,UAAU,CAAC,IAAY;IAC9B,OAAO,IAAI;SACR,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;SACtB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC;SACvB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AAC7B,CAAC;AAED,SAAS,gBAAgB,CAAC,QAA4B;IACpD,MAAM,OAAO,GAAG,IAAI,GAAG,EAA8B,CAAC;IAEtD,yBAAyB;IACzB,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,IAAI,SAAS,CAAC;QAC3C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC3B,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QAC5B,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACvC,CAAC;IAED,wEAAwE;IACxE,MAAM,MAAM,GAAgB,EAAE,CAAC;IAC/B,KAAK,MAAM,CAAC,QAAQ,EAAE,YAAY,CAAC,IAAI,OAAO,EAAE,CAAC;QAC/C,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACzC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAEvC,wCAAwC;QACxC,MAAM,aAAa,GAA2B,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QACnG,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAEjG,MAAM,CAAC,IAAI,CAAC;YACV,QAAQ;YACR,OAAO,EAAE,OAAO,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO;YACvC,QAAQ;YACR,aAAa,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,UAAU,CAAC,CAAC,MAAM;YACzE,SAAS,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC,MAAM;YACjE,WAAW,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,MAAM;YACrE,QAAQ,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,KAAK,IAAI,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC,MAAM;YACxF,QAAQ,EAAE,YAAY;SACvB,CAAC,CAAC;IACL,CAAC;IAED,4CAA4C;IAC5C,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACnB,IAAI,CAAC,CAAC,aAAa,KAAK,CAAC,CAAC,aAAa;YAAE,OAAO,CAAC,CAAC,aAAa,GAAG,CAAC,CAAC,aAAa,CAAC;QAClF,IAAI,CAAC,CAAC,SAAS,KAAK,CAAC,CAAC,SAAS;YAAE,OAAO,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC;QAClE,IAAI,CAAC,CAAC,WAAW,KAAK,CAAC,CAAC,WAAW;YAAE,OAAO,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,WAAW,CAAC;QAC1E,OAAO,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,sBAAsB,CAAC,QAA4B;IAC1D,yDAAyD;IACzD,MAAM,YAAY,GAAG,IAAI,GAAG,EAA8B,CAAC;IAE3D,6CAA6C;IAC7C,MAAM,aAAa,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;IAE/H,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC;QAEpC,mCAAmC;QACnC,IAAI,SAAS,GAAG,OAAO,CAAC;QAExB,wCAAwC;QACxC,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;QACvE,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrB,uDAAuD;YACvD,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YAErB,0BAA0B;YAC1B,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;YAE1D,uBAAuB;YACvB,IAAI,SAAS,KAAK,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC5C,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,0BAA0B;YAClD,CAAC;YACD,IAAI,SAAS,KAAK,UAAU,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACjD,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,mBAAmB;YAC3C,CAAC;QACH,CAAC;QAED,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;YACjC,YAAY,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;QAClC,CAAC;QACD,YAAY,CAAC,GAAG,CAAC,SAAS,CAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC7C,CAAC;IAED,mCAAmC;IACnC,MAAM,MAAM,GAAsB,EAAE,CAAC;IACrC,KAAK,MAAM,CAAC,aAAa,EAAE,iBAAiB,CAAC,IAAI,YAAY,EAAE,CAAC;QAC9D,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;QAE/D,uBAAuB;QACvB,MAAM,WAAW,GAAG,aAAa;aAC9B,KAAK,CAAC,GAAG,CAAC;aACV,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;aACzD,IAAI,CAAC,GAAG,CAAC,CAAC;QAEb,MAAM,aAAa,GAA2B,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QACnG,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAEtG,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,WAAW;YACjB,WAAW,EAAE,GAAG,iBAAiB,CAAC,MAAM,cAAc,aAAa,GAAG;YACtE,OAAO;YACP,aAAa,EAAE,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,UAAU,CAAC,CAAC,MAAM;YAC9E,SAAS,EAAE,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC,MAAM;YACtE,WAAW,EAAE,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,MAAM;YAC1E,QAAQ,EAAE,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,KAAK,IAAI,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC,MAAM;YAC7F,QAAQ,EAAE,iBAAiB;SAC5B,CAAC,CAAC;IACL,CAAC;IAED,2CAA2C;IAC3C,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACnB,MAAM,MAAM,GAAG,CAAC,CAAC,aAAa,GAAG,IAAI,GAAG,CAAC,CAAC,SAAS,GAAG,GAAG,GAAG,CAAC,CAAC,WAAW,GAAG,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC;QAC5F,MAAM,MAAM,GAAG,CAAC,CAAC,aAAa,GAAG,IAAI,GAAG,CAAC,CAAC,SAAS,GAAG,GAAG,GAAG,CAAC,CAAC,WAAW,GAAG,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC;QAC5F,OAAO,MAAM,GAAG,MAAM,CAAC;IACzB,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,cAAc,CAAC,QAA4B,EAAE,QAAgB;IACpE,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAElD,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;QACtB,IAAI,IAAI,GAAG,QAAQ,CAAC;QACpB,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACrD,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;QAC3D,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,UAAU,CAAC,CAAC,CAAC,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC;QAClE,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC;QAC3D,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,CAAC,CAAC;QACtE,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,sBAAsB,EAAE,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;QACvE,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;QACjE,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC;QAChE,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,UAAU,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC;QAC/D,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,yBAAyB,EAAE,UAAU,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC;QAC7E,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC;QACrD,wCAAwC;QACxC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,UAAU,CAAE,CAAS,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC;QACtE,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,UAAU,CAAE,CAAS,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC;QAC9E,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,sBAAsB,EAAE,UAAU,CAAE,CAAS,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,CAAC;QAEtF,4BAA4B;QAC5B,IAAK,CAAS,CAAC,GAAG,EAAE,CAAC;YACnB,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;QAC3E,CAAC;aAAM,CAAC;YACN,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,sCAAsC,EAAE,EAAE,CAAC,CAAC;QAClE,CAAC;QACD,IAAK,CAAS,CAAC,OAAO,EAAE,CAAC;YACvB,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,sBAAsB,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;QAC/E,CAAC;aAAM,CAAC;YACN,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,0CAA0C,EAAE,EAAE,CAAC,CAAC;QACtE,CAAC;QACD,IAAK,CAAS,CAAC,WAAW,EAAE,CAAC;YAC3B,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,0BAA0B,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;QACnF,CAAC;aAAM,CAAC;YACN,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,8CAA8C,EAAE,EAAE,CAAC,CAAC;QAC1E,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC;AAED,SAAgB,cAAc,CAAC,YAAoB,EAAE,IAAgB;IACnE,IAAI,IAAI,GAAG,YAAY,CAAC;IAExB,sBAAsB;IACtB,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,sBAAsB,EAAE,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;IAC1E,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IACpE,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;IAC5D,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;IACpE,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,wBAAwB,EAAE,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;IAC1E,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,oBAAoB,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;IAClE,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,sBAAsB,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;IACtE,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IAChE,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,oBAAoB,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;IAClE,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,uBAAuB,EAAE,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;IACxE,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,6BAA6B,EAAE,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC;IACpF,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,2BAA2B,EAAE,UAAU,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC;IACpF,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,uBAAuB,EAAE,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;IAC5E,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;IACpE,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,wBAAwB,EAAE,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;IAE1E,qCAAqC;IACrC,MAAM,oBAAoB,GAAG,IAAI,CAAC,KAAK,CAAC,0DAA0D,CAAC,CAAC;IACpG,MAAM,eAAe,GAAG,oBAAoB,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAE5E,4CAA4C;IAC5C,oBAAoB;IACpB,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,kDAAkD,CAAC,CAAC;IACvF,IAAI,eAAe,EAAE,CAAC;QACpB,IAAI,IAAI,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrC,IAAI,OAAO,GAAG,eAAe,CAAC,CAAC,CAAC;iBAC7B,OAAO,CAAC,0BAA0B,EAAE,EAAE,CAAC;iBACvC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;YAC1B,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,wDAAwD,CAAC,CAAC;YAC1F,IAAI,SAAS,EAAE,CAAC;gBACd,MAAM,QAAQ,GAAG,cAAc,CAAC,IAAI,CAAC,gBAAgB,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;gBACrE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;YACpD,CAAC;YACD,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QACnD,CAAC;aAAM,CAAC;YACN,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;IAED,gBAAgB;IAChB,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAC;IAC/E,IAAI,WAAW,EAAE,CAAC;QAChB,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjC,IAAI,OAAO,GAAG,WAAW,CAAC,CAAC,CAAC;iBACzB,OAAO,CAAC,sBAAsB,EAAE,EAAE,CAAC;iBACnC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;YAC1B,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,oDAAoD,CAAC,CAAC;YACtF,IAAI,SAAS,EAAE,CAAC;gBACd,MAAM,QAAQ,GAAG,cAAc,CAAC,IAAI,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;gBACjE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;YACpD,CAAC;YACD,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QAC/C,CAAC;aAAM,CAAC;YACN,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC;IAED,kBAAkB;IAClB,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,gDAAgD,CAAC,CAAC;IACnF,IAAI,aAAa,EAAE,CAAC;QAClB,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnC,IAAI,OAAO,GAAG,aAAa,CAAC,CAAC,CAAC;iBAC3B,OAAO,CAAC,wBAAwB,EAAE,EAAE,CAAC;iBACrC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;YAC1B,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,sDAAsD,CAAC,CAAC;YACxF,IAAI,SAAS,EAAE,CAAC;gBACd,MAAM,QAAQ,GAAG,cAAc,CAAC,IAAI,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;gBACnE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;YACpD,CAAC;YACD,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QACjD,CAAC;aAAM,CAAC;YACN,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;IAED,eAAe;IACf,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,6CAA6C,CAAC,CAAC;IAC7E,IAAI,UAAU,EAAE,CAAC;QACf,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAChC,IAAI,OAAO,GAAG,UAAU,CAAC,CAAC,CAAC;iBACxB,OAAO,CAAC,qBAAqB,EAAE,EAAE,CAAC;iBAClC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;YAC1B,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,mDAAmD,CAAC,CAAC;YACrF,IAAI,SAAS,EAAE,CAAC;gBACd,MAAM,QAAQ,GAAG,cAAc,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;gBAChE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;YACpD,CAAC;YACD,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QAC9C,CAAC;aAAM,CAAC;YACN,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;IAED,kBAAkB;IAClB,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,gDAAgD,CAAC,CAAC;IAC/E,IAAI,SAAS,EAAE,CAAC;QACd,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnC,IAAI,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC;iBACvB,OAAO,CAAC,wBAAwB,EAAE,EAAE,CAAC;iBACrC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;YAC1B,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,sDAAsD,CAAC,CAAC;YACxF,IAAI,SAAS,EAAE,CAAC;gBACd,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;oBAC5C,IAAI,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;oBAC5B,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,aAAa,EAAE,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;oBAC9D,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,gBAAgB,EAAE,UAAU,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;oBACpE,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,eAAe,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC;oBACxE,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,0BAA0B,EAAE,UAAU,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC;oBACxF,OAAO,QAAQ,CAAC;gBAClB,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACd,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;YACpD,CAAC;YACD,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QAC7C,CAAC;aAAM,CAAC;YACN,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;IAED,cAAc;IACd,MAAM,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAAC,kDAAkD,CAAC,CAAC;IACzF,IAAI,iBAAiB,EAAE,CAAC;QACtB,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;YAC3C,IAAI,SAAS,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC;YACrC,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,mBAAmB,EAAE,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;YAC/E,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,kBAAkB,EAAE,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;YAC7E,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,mBAAmB,EAAE,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;YAE/E,4BAA4B;YAC5B,IAAI,KAAK,CAAC,aAAa,GAAG,CAAC,EAAE,CAAC;gBAC5B,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,4BAA4B,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;gBAC7F,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,wBAAwB,EAAE,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC;YACvF,CAAC;iBAAM,CAAC;gBACN,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,gDAAgD,EAAE,EAAE,CAAC,CAAC;YACtF,CAAC;YACD,IAAI,KAAK,CAAC,SAAS,GAAG,CAAC,EAAE,CAAC;gBACxB,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,wBAAwB,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;gBACzF,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,oBAAoB,EAAE,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;YAC/E,CAAC;iBAAM,CAAC;gBACN,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,4CAA4C,EAAE,EAAE,CAAC,CAAC;YAClF,CAAC;YACD,IAAI,KAAK,CAAC,WAAW,GAAG,CAAC,EAAE,CAAC;gBAC1B,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,0BAA0B,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;gBAC3F,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,sBAAsB,EAAE,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC;YACnF,CAAC;iBAAM,CAAC;gBACN,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,8CAA8C,EAAE,EAAE,CAAC,CAAC;YACpF,CAAC;YACD,IAAI,KAAK,CAAC,QAAQ,GAAG,CAAC,EAAE,CAAC;gBACvB,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,uBAAuB,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;gBACxF,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,mBAAmB,EAAE,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;YAC7E,CAAC;iBAAM,CAAC;gBACN,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,2CAA2C,EAAE,EAAE,CAAC,CAAC;YACjF,CAAC;YAED,yCAAyC;YACzC,MAAM,aAAa,GAAG,SAAS,CAAC,KAAK,CAAC,gDAAgD,CAAC,CAAC;YACxF,IAAI,aAAa,EAAE,CAAC;gBAClB,MAAM,gBAAgB,GAAG,cAAc,CAAC,KAAK,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC1E,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC;YACpE,CAAC;YAED,OAAO,SAAS,CAAC;QACnB,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACd,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;IACtD,CAAC;IAED,gEAAgE;IAChE,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,uDAAuD,CAAC,CAAC;IACvF,IAAI,UAAU,EAAE,CAAC;QACf,KAAK,MAAM,QAAQ,IAAI,UAAU,EAAE,CAAC;YAClC,IAAI,IAAI,CAAC,oBAAoB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACzC,IAAI,OAAO,GAAG,QAAQ;qBACnB,OAAO,CAAC,8BAA8B,EAAE,EAAE,CAAC;qBAC3C,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;gBAC1B,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,4DAA4D,CAAC,CAAC;gBAC9F,IAAI,SAAS,EAAE,CAAC;oBACd,MAAM,QAAQ,GAAG,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;wBACnD,MAAM,IAAI,GAAG,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC;wBAClF,OAAO,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,eAAe,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;oBACjE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBACd,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;gBACpD,CAAC;gBACD,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YACzC,CAAC;iBAAM,CAAC;gBACN,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;YACpC,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAEM,KAAK,UAAU,iBAAiB,CACrC,MAAkB,EAClB,UAAkB,EAClB,iBAA+F,EAAE;IAEjG,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,aAAa,CAAC,CAAC;IAC5E,MAAM,YAAY,GAAG,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;IAE5D,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;IAEhD,MAAM,gBAAgB,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,UAAU,CAAC,CAAC;IAChF,MAAM,YAAY,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC;IACxE,MAAM,cAAc,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC;IAC5E,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,KAAK,IAAI,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC;IAE/F,MAAM,UAAU,GAAG,gBAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACrD,MAAM,gBAAgB,GAAG,sBAAsB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAEjE,MAAM,IAAI,GAAe;QACvB,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,QAAQ,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,kBAAkB,CAAC,OAAO,EAAE;YAC9D,IAAI,EAAE,SAAS;YACf,KAAK,EAAE,MAAM;YACb,GAAG,EAAE,SAAS;SACf,CAAC;QACF,UAAU,EAAE,KAAK;QACjB,UAAU,EAAE,KAAK;QACjB,aAAa,EAAE,MAAM,CAAC,OAAO,EAAE,QAAQ,IAAI,CAAC;QAC5C,SAAS,EAAE,MAAM,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC;QACpC,WAAW,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC;QACxC,QAAQ,EAAE,MAAM,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC;QAClC,SAAS,EAAE,MAAM,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC;QACpC,gBAAgB,EAAE,wBAAwB,CAAC,MAAM,CAAC;QAClD,gBAAgB;QAChB,YAAY;QACZ,cAAc;QACd,WAAW;QACX,UAAU;QACV,gBAAgB;QAChB,aAAa,EAAE,MAAM,CAAC,oBAAoB,EAAE,MAAM,IAAI,CAAC;QACvD,cAAc;QACd,kBAAkB,EAAE,cAAc,CAAC,MAAM;QACzC,YAAY,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,CAAC;QACtE,oBAAoB,EAAE,MAAM,CAAC,oBAAoB,IAAI,EAAE;QACvD,YAAY,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,YAAY,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG;QACjE,UAAU,EAAG,MAAc,CAAC,UAAU,IAAI,MAAM,CAAC,UAAU,EAAE,MAAM,IAAI,CAAC;KACzE,CAAC;IAEF,MAAM,YAAY,GAAG,cAAc,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;IAExD,+BAA+B;IAC/B,MAAM,OAAO,GAAG,MAAM,mBAAS,CAAC,MAAM,CAAC;QACrC,QAAQ,EAAE,IAAI;QACd,IAAI,EAAE,CAAC,cAAc,EAAE,0BAA0B,CAAC;KACnD,CAAC,CAAC;IAEH,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;IACrC,MAAM,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE,EAAE,SAAS,EAAE,cAAc,EAAE,CAAC,CAAC;IAEnE,MAAM,IAAI,CAAC,GAAG,CAAC;QACb,IAAI,EAAE,UAAU;QAChB,MAAM,EAAE,IAAI;QACZ,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE;QACpE,eAAe,EAAE,IAAI;QACrB,iBAAiB,EAAE,IAAI;KACxB,CAAC,CAAC;IAEH,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;IAEtB,OAAO,CAAC,GAAG,CAAC,yBAAyB,UAAU,EAAE,CAAC,CAAC;AACrD,CAAC;AAEM,KAAK,UAAU,kBAAkB,CACtC,MAAkB,EAClB,UAAkB,EAClB,iBAA+F,EAAE;IAEjG,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,aAAa,CAAC,CAAC;IAC5E,MAAM,YAAY,GAAG,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;IAE5D,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;IAEhD,MAAM,gBAAgB,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,UAAU,CAAC,CAAC;IAChF,MAAM,YAAY,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC;IACxE,MAAM,cAAc,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC;IAC5E,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,KAAK,IAAI,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC;IAC/F,MAAM,UAAU,GAAG,gBAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACrD,MAAM,gBAAgB,GAAG,sBAAsB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAEjE,MAAM,IAAI,GAAe;QACvB,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,QAAQ,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,kBAAkB,CAAC,OAAO,EAAE;YAC9D,IAAI,EAAE,SAAS;YACf,KAAK,EAAE,MAAM;YACb,GAAG,EAAE,SAAS;SACf,CAAC;QACF,UAAU,EAAE,KAAK;QACjB,UAAU,EAAE,KAAK;QACjB,aAAa,EAAE,MAAM,CAAC,OAAO,EAAE,QAAQ,IAAI,CAAC;QAC5C,SAAS,EAAE,MAAM,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC;QACpC,WAAW,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC;QACxC,QAAQ,EAAE,MAAM,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC;QAClC,SAAS,EAAE,MAAM,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC;QACpC,gBAAgB,EAAE,wBAAwB,CAAC,MAAM,CAAC;QAClD,gBAAgB;QAChB,YAAY;QACZ,cAAc;QACd,WAAW;QACX,UAAU;QACV,gBAAgB;QAChB,aAAa,EAAE,MAAM,CAAC,oBAAoB,EAAE,MAAM,IAAI,CAAC;QACvD,cAAc;QACd,kBAAkB,EAAE,cAAc,CAAC,MAAM;QACzC,YAAY,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,CAAC;QACtE,oBAAoB,EAAE,MAAM,CAAC,oBAAoB,IAAI,EAAE;QACvD,YAAY,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,YAAY,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG;QACjE,UAAU,EAAG,MAAc,CAAC,UAAU,IAAI,MAAM,CAAC,UAAU,EAAE,MAAM,IAAI,CAAC;KACzE,CAAC;IAEF,MAAM,YAAY,GAAG,cAAc,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;IAExD,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;IAC3C,OAAO,CAAC,GAAG,CAAC,0BAA0B,UAAU,EAAE,CAAC,CAAC;AACtD,CAAC"}
|
|
@@ -722,8 +722,8 @@
|
|
|
722
722
|
Files
|
|
723
723
|
</button>
|
|
724
724
|
<button class="nav-tab" onclick="showTab('department')">
|
|
725
|
-
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><
|
|
726
|
-
|
|
725
|
+
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><rect x="3" y="3" width="7" height="7"/><rect x="14" y="3" width="7" height="7"/><rect x="14" y="14" width="7" height="7"/><rect x="3" y="14" width="7" height="7"/></svg>
|
|
726
|
+
Components
|
|
727
727
|
</button>
|
|
728
728
|
{{#if positiveObservations}}
|
|
729
729
|
<button class="nav-tab" onclick="showTab('positive')">
|
package/package.json
CHANGED
|
@@ -9,7 +9,173 @@ You will receive PROJECT CONTEXT from the Context Discovery agent. Use it to und
|
|
|
9
9
|
- Architecture patterns in use
|
|
10
10
|
- Existing abstractions and utilities
|
|
11
11
|
|
|
12
|
-
##
|
|
12
|
+
## CRITICAL: Active Detection Strategies
|
|
13
|
+
|
|
14
|
+
### Strategy 1: Find Dead Code (Orphan Detection)
|
|
15
|
+
|
|
16
|
+
**Step 1: Build the call graph mentally**
|
|
17
|
+
- Identify all entry points: routes, exports, event handlers, CLI commands
|
|
18
|
+
- Trace what each entry point calls
|
|
19
|
+
- Anything NOT reachable from entry points is dead code
|
|
20
|
+
|
|
21
|
+
**Step 2: Search for orphaned exports**
|
|
22
|
+
```bash
|
|
23
|
+
# Find all exports
|
|
24
|
+
grep -r "export\s" --include="*.ts" --include="*.js"
|
|
25
|
+
|
|
26
|
+
# For each export, verify it's imported somewhere
|
|
27
|
+
grep -r "import.*{.*ExportName.*}" --include="*.ts" --include="*.js"
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
**Step 3: Check for disconnected files**
|
|
31
|
+
- Files that export but are never imported
|
|
32
|
+
- Components that exist but aren't used in any route/page
|
|
33
|
+
- Utility functions that have no callers
|
|
34
|
+
- API endpoints with no frontend calls
|
|
35
|
+
|
|
36
|
+
**Red flags for dead code:**
|
|
37
|
+
- Functions with 0 callers (check with: where is this function called?)
|
|
38
|
+
- Files not imported anywhere
|
|
39
|
+
- Routes not linked from UI
|
|
40
|
+
- Event handlers for events never emitted
|
|
41
|
+
- Feature flags that are always false
|
|
42
|
+
- Code behind `if (false)` or `if (0)`
|
|
43
|
+
|
|
44
|
+
### Strategy 2: Find Duplicate Code
|
|
45
|
+
|
|
46
|
+
**Step 1: Look for similar function names**
|
|
47
|
+
```bash
|
|
48
|
+
# Functions with similar names often do similar things
|
|
49
|
+
grep -r "function validate" --include="*.ts"
|
|
50
|
+
grep -r "function format" --include="*.ts"
|
|
51
|
+
grep -r "function parse" --include="*.ts"
|
|
52
|
+
grep -r "function handle" --include="*.ts"
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
**Step 2: Look for repeated patterns**
|
|
56
|
+
- Same regex appearing in multiple files
|
|
57
|
+
- Same error handling pattern copy-pasted
|
|
58
|
+
- Same API call structure repeated
|
|
59
|
+
- Same validation logic in multiple places
|
|
60
|
+
- Same date/string formatting code
|
|
61
|
+
|
|
62
|
+
**Step 3: Compare similar files**
|
|
63
|
+
- Controllers that handle similar resources
|
|
64
|
+
- Components that render similar UI
|
|
65
|
+
- Services that call similar APIs
|
|
66
|
+
|
|
67
|
+
**Report duplicates with ALL locations:**
|
|
68
|
+
```json
|
|
69
|
+
{
|
|
70
|
+
"locations": [
|
|
71
|
+
{"file": "src/a.ts", "line": 10},
|
|
72
|
+
{"file": "src/b.ts", "line": 25},
|
|
73
|
+
{"file": "src/c.ts", "line": 42}
|
|
74
|
+
]
|
|
75
|
+
}
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
### Strategy 3: Find Silent Failures (Fallback שקט)
|
|
79
|
+
|
|
80
|
+
**This is CRITICAL - silent failures hide bugs!**
|
|
81
|
+
|
|
82
|
+
**Pattern 1: Empty catch blocks**
|
|
83
|
+
```javascript
|
|
84
|
+
// BAD - silent failure
|
|
85
|
+
try {
|
|
86
|
+
await doSomething();
|
|
87
|
+
} catch (e) {
|
|
88
|
+
// nothing here - BUG HIDER!
|
|
89
|
+
}
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
**Pattern 2: Catch with only console.log**
|
|
93
|
+
```javascript
|
|
94
|
+
// BAD - logs but continues as if success
|
|
95
|
+
try {
|
|
96
|
+
await saveToDatabase();
|
|
97
|
+
} catch (e) {
|
|
98
|
+
console.log(e); // No rethrow, no return, continues execution!
|
|
99
|
+
}
|
|
100
|
+
// Code here runs even on failure
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
**Pattern 3: Default values hiding errors**
|
|
104
|
+
```javascript
|
|
105
|
+
// BAD - returns empty instead of failing
|
|
106
|
+
function getUsers() {
|
|
107
|
+
try {
|
|
108
|
+
return fetchUsers();
|
|
109
|
+
} catch {
|
|
110
|
+
return []; // Silent! Caller thinks there are 0 users
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
**Pattern 4: Optional chaining abuse**
|
|
116
|
+
```javascript
|
|
117
|
+
// Suspicious - why would this be undefined?
|
|
118
|
+
const name = user?.profile?.name ?? 'Unknown';
|
|
119
|
+
// If user should always exist, this hides a bug
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
**Pattern 5: || and ?? hiding errors**
|
|
123
|
+
```javascript
|
|
124
|
+
// BAD - error becomes empty string
|
|
125
|
+
const data = riskyOperation() || '';
|
|
126
|
+
const config = parseConfig() ?? {};
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
**Pattern 6: .catch() with no action**
|
|
130
|
+
```javascript
|
|
131
|
+
// BAD
|
|
132
|
+
fetchData().catch(() => {});
|
|
133
|
+
promise.catch(console.error); // logs but doesn't handle
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
**Search commands:**
|
|
137
|
+
```bash
|
|
138
|
+
# Empty catch
|
|
139
|
+
grep -r "catch.*{[\s]*}" --include="*.ts" --include="*.js"
|
|
140
|
+
|
|
141
|
+
# Catch with only console
|
|
142
|
+
grep -r "catch.*console\.(log|error)" --include="*.ts"
|
|
143
|
+
|
|
144
|
+
# Silent fallbacks
|
|
145
|
+
grep -r "catch.*return \[\]" --include="*.ts"
|
|
146
|
+
grep -r "catch.*return {}" --include="*.ts"
|
|
147
|
+
grep -r "catch.*return null" --include="*.ts"
|
|
148
|
+
grep -r "catch.*return ''" --include="*.ts"
|
|
149
|
+
|
|
150
|
+
# Empty .catch()
|
|
151
|
+
grep -r "\.catch\(\s*\(\)\s*=>" --include="*.ts"
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
### Strategy 4: Find Disconnected Code
|
|
155
|
+
|
|
156
|
+
**Code that exists but isn't wired up:**
|
|
157
|
+
|
|
158
|
+
1. **React components not in routes**
|
|
159
|
+
- Check every component in /components
|
|
160
|
+
- Verify it's used in a page or another component
|
|
161
|
+
|
|
162
|
+
2. **API endpoints not called**
|
|
163
|
+
- List all routes
|
|
164
|
+
- Search frontend for each endpoint URL
|
|
165
|
+
|
|
166
|
+
3. **Event handlers not connected**
|
|
167
|
+
- onClick handlers defined but not attached
|
|
168
|
+
- Event listeners for events never emitted
|
|
169
|
+
|
|
170
|
+
4. **Config options not used**
|
|
171
|
+
- Config keys defined but never read
|
|
172
|
+
- Feature flags that are never checked
|
|
173
|
+
|
|
174
|
+
5. **Database fields not used**
|
|
175
|
+
- Schema fields with no queries
|
|
176
|
+
- Migrations that add columns never used
|
|
177
|
+
|
|
178
|
+
## Standard Quality Checks
|
|
13
179
|
|
|
14
180
|
### 1. DRY Violations (Don't Repeat Yourself)
|
|
15
181
|
- [ ] Duplicated code blocks (>10 lines similar)
|
|
@@ -18,15 +184,6 @@ You will receive PROJECT CONTEXT from the Context Discovery agent. Use it to und
|
|
|
18
184
|
- [ ] Repeated patterns that should be abstracted
|
|
19
185
|
- [ ] Duplicated constants/magic numbers
|
|
20
186
|
|
|
21
|
-
**How to find:**
|
|
22
|
-
```bash
|
|
23
|
-
# Look for similar function signatures
|
|
24
|
-
grep -r "function\|const.*=.*=>" --include="*.js" --include="*.ts" | sort | uniq -d
|
|
25
|
-
|
|
26
|
-
# Look for repeated patterns
|
|
27
|
-
# Use your judgment when reading code
|
|
28
|
-
```
|
|
29
|
-
|
|
30
187
|
### 2. Complexity Issues
|
|
31
188
|
- [ ] Functions >50 lines
|
|
32
189
|
- [ ] Cyclomatic complexity >10
|
|
@@ -36,13 +193,15 @@ grep -r "function\|const.*=.*=>" --include="*.js" --include="*.ts" | sort | uniq
|
|
|
36
193
|
- [ ] Files with >500 lines
|
|
37
194
|
|
|
38
195
|
### 3. Dead Code
|
|
39
|
-
- [ ] Unused functions
|
|
196
|
+
- [ ] Unused functions (no callers)
|
|
40
197
|
- [ ] Unused variables
|
|
41
198
|
- [ ] Unreachable code paths
|
|
42
|
-
- [ ] Commented-out code blocks
|
|
199
|
+
- [ ] Commented-out code blocks (>3 lines)
|
|
43
200
|
- [ ] Unused imports
|
|
44
201
|
- [ ] Unused dependencies in package.json
|
|
45
202
|
- [ ] Deprecated code still present
|
|
203
|
+
- [ ] Feature flags always false
|
|
204
|
+
- [ ] Exports with no imports
|
|
46
205
|
|
|
47
206
|
### 4. Anti-Patterns
|
|
48
207
|
- [ ] God objects (classes doing too much)
|
|
@@ -54,14 +213,16 @@ grep -r "function\|const.*=.*=>" --include="*.js" --include="*.ts" | sort | uniq
|
|
|
54
213
|
- [ ] Magic numbers/strings
|
|
55
214
|
- [ ] Stringly-typed code
|
|
56
215
|
|
|
57
|
-
### 5. Error Handling
|
|
58
|
-
- [ ] Empty catch blocks
|
|
59
|
-
- [ ] Swallowed errors (catch without
|
|
216
|
+
### 5. Error Handling Issues (FOCUS HERE!)
|
|
217
|
+
- [ ] Empty catch blocks (**CRITICAL**)
|
|
218
|
+
- [ ] Swallowed errors (catch without rethrow)
|
|
219
|
+
- [ ] Silent fallbacks (return default on error)
|
|
60
220
|
- [ ] Missing error handling on async operations
|
|
61
221
|
- [ ] Inconsistent error formats
|
|
62
222
|
- [ ] No error boundaries in React
|
|
63
223
|
- [ ] No try-catch around JSON.parse
|
|
64
|
-
- [ ]
|
|
224
|
+
- [ ] .catch() with no meaningful action
|
|
225
|
+
- [ ] Errors logged but not propagated
|
|
65
226
|
|
|
66
227
|
### 6. Type Safety (TypeScript)
|
|
67
228
|
- [ ] `any` type usage
|
|
@@ -106,45 +267,80 @@ For EACH finding, output:
|
|
|
106
267
|
```json
|
|
107
268
|
{
|
|
108
269
|
"id": "QUAL-001",
|
|
109
|
-
"title": "
|
|
270
|
+
"title": "Silent Error Handling in Payment Service",
|
|
271
|
+
"severity": "critical",
|
|
272
|
+
"category": "quality",
|
|
273
|
+
"subcategory": "silent_failure",
|
|
274
|
+
"file": "src/services/paymentService.ts",
|
|
275
|
+
"line": 45,
|
|
276
|
+
"endLine": 52,
|
|
277
|
+
"code": "try {\n await chargeCard(amount);\n} catch (e) {\n console.error(e);\n // continues to \"success\" response!\n}",
|
|
278
|
+
"description": "Payment errors are caught and logged but execution continues as if payment succeeded. Customer could receive product without paying.",
|
|
279
|
+
"impact": "Financial loss. Customers charged $0 for orders. Silent data corruption.",
|
|
280
|
+
"recommendation": "Rethrow the error or return error response:\n\n```typescript\ntry {\n await chargeCard(amount);\n} catch (e) {\n logger.error('Payment failed', { error: e, orderId });\n throw new PaymentError('Payment processing failed');\n}\n```",
|
|
281
|
+
"effort": "low"
|
|
282
|
+
}
|
|
283
|
+
```
|
|
284
|
+
|
|
285
|
+
### Dead Code Finding Example
|
|
286
|
+
```json
|
|
287
|
+
{
|
|
288
|
+
"id": "QUAL-015",
|
|
289
|
+
"title": "Orphaned Component: UserAvatar",
|
|
290
|
+
"severity": "medium",
|
|
291
|
+
"category": "quality",
|
|
292
|
+
"subcategory": "dead_code",
|
|
293
|
+
"file": "src/components/UserAvatar.tsx",
|
|
294
|
+
"line": 1,
|
|
295
|
+
"endLine": 45,
|
|
296
|
+
"description": "UserAvatar component is defined but never imported or used anywhere in the codebase. It appears to be leftover from a removed feature.",
|
|
297
|
+
"evidence": [
|
|
298
|
+
"grep for 'UserAvatar' returns only the definition file",
|
|
299
|
+
"No imports found in any other file",
|
|
300
|
+
"Component not in any route or page"
|
|
301
|
+
],
|
|
302
|
+
"recommendation": "Delete the file or integrate it if it was meant to be used.",
|
|
303
|
+
"effort": "low"
|
|
304
|
+
}
|
|
305
|
+
```
|
|
306
|
+
|
|
307
|
+
### Duplicate Code Finding Example
|
|
308
|
+
```json
|
|
309
|
+
{
|
|
310
|
+
"id": "QUAL-022",
|
|
311
|
+
"title": "Duplicated Date Formatting Logic",
|
|
110
312
|
"severity": "medium",
|
|
111
313
|
"category": "quality",
|
|
112
314
|
"subcategory": "dry_violation",
|
|
113
|
-
"file": "src/
|
|
114
|
-
"line":
|
|
115
|
-
"endLine": 55,
|
|
315
|
+
"file": "src/utils/formatters.ts",
|
|
316
|
+
"line": 12,
|
|
116
317
|
"additionalLocations": [
|
|
117
|
-
{"file": "src/
|
|
118
|
-
{"file": "src/
|
|
318
|
+
{"file": "src/components/OrderList.tsx", "line": 34},
|
|
319
|
+
{"file": "src/components/InvoiceTable.tsx", "line": 89},
|
|
320
|
+
{"file": "src/pages/Dashboard.tsx", "line": 156}
|
|
119
321
|
],
|
|
120
|
-
"code": "const
|
|
121
|
-
"description": "
|
|
122
|
-
"
|
|
123
|
-
"
|
|
124
|
-
"effort": "low"
|
|
125
|
-
"linesAffected": 33,
|
|
126
|
-
"evidence": [
|
|
127
|
-
"Found in userService.js:45-55",
|
|
128
|
-
"Found in authController.js:78-88",
|
|
129
|
-
"Found in validators.js:12-22"
|
|
130
|
-
]
|
|
322
|
+
"code": "const formatted = `${date.getMonth()+1}/${date.getDate()}/${date.getFullYear()}`",
|
|
323
|
+
"description": "Same date formatting pattern appears in 4 different files. Any format change requires 4 updates.",
|
|
324
|
+
"recommendation": "Extract to shared utility:\n\n```typescript\n// src/utils/date.ts\nexport function formatDate(date: Date): string {\n return new Intl.DateTimeFormat('en-US').format(date);\n}\n```",
|
|
325
|
+
"linesAffected": 4,
|
|
326
|
+
"effort": "low"
|
|
131
327
|
}
|
|
132
328
|
```
|
|
133
329
|
|
|
134
330
|
## Severity Guidelines
|
|
135
331
|
|
|
136
|
-
- **Critical**:
|
|
137
|
-
- **High**: Significant maintainability risk (
|
|
138
|
-
- **Medium**: Should be fixed (
|
|
139
|
-
- **Low**: Nice to fix (
|
|
140
|
-
- **Info**: Suggestions (
|
|
332
|
+
- **Critical**: Silent failures that hide bugs, especially in payments/auth/data
|
|
333
|
+
- **High**: Significant maintainability risk (large dead code, major duplication)
|
|
334
|
+
- **Medium**: Should be fixed (DRY violations, missing types, smaller dead code)
|
|
335
|
+
- **Low**: Nice to fix (naming issues, minor dead code, small duplication)
|
|
336
|
+
- **Info**: Suggestions (could be more idiomatic)
|
|
141
337
|
|
|
142
338
|
## Rules
|
|
143
339
|
|
|
144
|
-
1. **
|
|
145
|
-
2. **
|
|
146
|
-
3. **
|
|
147
|
-
4. **
|
|
340
|
+
1. **Actively search** - Don't just read, grep for patterns
|
|
341
|
+
2. **Verify dead code** - Confirm it's really not called anywhere
|
|
342
|
+
3. **Find ALL duplicates** - List every location, not just the first two
|
|
343
|
+
4. **Silent failures are CRITICAL** - Empty catch blocks hide production bugs
|
|
148
344
|
5. **Give fixes** - Show exactly how to refactor
|
|
149
345
|
|
|
150
|
-
START SCANNING NOW.
|
|
346
|
+
START SCANNING NOW. Be aggressive about finding dead code and silent failures.
|
package/src/report/generator.ts
CHANGED
|
@@ -152,95 +152,73 @@ function createFileGroups(findings: ConsensusFinding[]): FileGroup[] {
|
|
|
152
152
|
}
|
|
153
153
|
|
|
154
154
|
function createDepartmentGroups(findings: ConsensusFinding[]): DepartmentGroup[] {
|
|
155
|
-
//
|
|
156
|
-
const
|
|
157
|
-
'devops': {
|
|
158
|
-
name: 'DevOps / Infrastructure',
|
|
159
|
-
description: 'Kubernetes, Docker, CI/CD, Cloud configuration',
|
|
160
|
-
isInfra: true,
|
|
161
|
-
patterns: [/chart\//, /\.ya?ml$/, /dockerfile/i, /docker-compose/, /\.tf$/, /terraform/, /helm/]
|
|
162
|
-
},
|
|
163
|
-
'backend': {
|
|
164
|
-
name: 'Backend Development',
|
|
165
|
-
description: 'Server-side code, APIs, services',
|
|
166
|
-
isInfra: false,
|
|
167
|
-
patterns: [/backend/, /server/, /api\//, /routes\//, /services\//, /middleware\//]
|
|
168
|
-
},
|
|
169
|
-
'frontend': {
|
|
170
|
-
name: 'Frontend Development',
|
|
171
|
-
description: 'UI components, client-side logic',
|
|
172
|
-
isInfra: false,
|
|
173
|
-
patterns: [/frontend/, /app\//, /components\//, /lib\//, /hooks\//]
|
|
174
|
-
},
|
|
175
|
-
'security': {
|
|
176
|
-
name: 'Security',
|
|
177
|
-
description: 'Authentication, authorization, encryption',
|
|
178
|
-
isInfra: false,
|
|
179
|
-
patterns: [/auth/, /security/, /crypto/, /encryption/]
|
|
180
|
-
},
|
|
181
|
-
'testing': {
|
|
182
|
-
name: 'Quality & Testing',
|
|
183
|
-
description: 'Tests, code quality, coverage',
|
|
184
|
-
isInfra: false,
|
|
185
|
-
patterns: [/test/, /spec/, /__tests__/]
|
|
186
|
-
}
|
|
187
|
-
};
|
|
155
|
+
// Group by top-level component (first directory in path)
|
|
156
|
+
const componentMap = new Map<string, ConsensusFinding[]>();
|
|
188
157
|
|
|
189
|
-
|
|
158
|
+
// Infrastructure patterns for icon selection
|
|
159
|
+
const infraPatterns = [/chart/, /helm/, /docker/, /k8s/, /kubernetes/, /terraform/, /\.tf$/, /ci-?cd/, /\.github/, /\.gitlab/];
|
|
190
160
|
|
|
191
|
-
// Categorize findings
|
|
192
161
|
for (const finding of findings) {
|
|
193
|
-
const filePath =
|
|
194
|
-
const category = (finding.category || '').toLowerCase();
|
|
162
|
+
const filePath = finding.file || '';
|
|
195
163
|
|
|
196
|
-
|
|
164
|
+
// Extract component name from path
|
|
165
|
+
let component = 'other';
|
|
197
166
|
|
|
198
|
-
//
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
//
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
167
|
+
// Try to get first meaningful directory
|
|
168
|
+
const parts = filePath.split('/').filter(p => p && !p.startsWith('.'));
|
|
169
|
+
if (parts.length > 0) {
|
|
170
|
+
// Use first directory, or filename if it's a root file
|
|
171
|
+
component = parts[0];
|
|
172
|
+
|
|
173
|
+
// Clean up component name
|
|
174
|
+
component = component.replace(/[-_]/g, '-').toLowerCase();
|
|
175
|
+
|
|
176
|
+
// Handle special cases
|
|
177
|
+
if (component === 'src' && parts.length > 1) {
|
|
178
|
+
component = parts[1]; // Use subdirectory of src
|
|
179
|
+
}
|
|
180
|
+
if (component === 'packages' && parts.length > 1) {
|
|
181
|
+
component = parts[1]; // Use package name
|
|
210
182
|
}
|
|
211
183
|
}
|
|
212
184
|
|
|
213
|
-
if (!
|
|
214
|
-
|
|
185
|
+
if (!componentMap.has(component)) {
|
|
186
|
+
componentMap.set(component, []);
|
|
215
187
|
}
|
|
216
|
-
|
|
188
|
+
componentMap.get(component)!.push(finding);
|
|
217
189
|
}
|
|
218
190
|
|
|
219
191
|
// Convert to DepartmentGroup array
|
|
220
192
|
const groups: DepartmentGroup[] = [];
|
|
221
|
-
for (const [
|
|
222
|
-
const
|
|
193
|
+
for (const [componentName, componentFindings] of componentMap) {
|
|
194
|
+
const isInfra = infraPatterns.some(p => p.test(componentName));
|
|
195
|
+
|
|
196
|
+
// Create readable name
|
|
197
|
+
const displayName = componentName
|
|
198
|
+
.split('-')
|
|
199
|
+
.map(word => word.charAt(0).toUpperCase() + word.slice(1))
|
|
200
|
+
.join(' ');
|
|
223
201
|
|
|
224
202
|
const severityOrder: Record<string, number> = { critical: 0, high: 1, medium: 2, low: 3, info: 4 };
|
|
225
|
-
|
|
203
|
+
componentFindings.sort((a, b) => (severityOrder[a.severity] || 4) - (severityOrder[b.severity] || 4));
|
|
226
204
|
|
|
227
205
|
groups.push({
|
|
228
|
-
name:
|
|
229
|
-
description:
|
|
230
|
-
isInfra
|
|
231
|
-
criticalCount:
|
|
232
|
-
highCount:
|
|
233
|
-
mediumCount:
|
|
234
|
-
lowCount:
|
|
235
|
-
findings:
|
|
206
|
+
name: displayName,
|
|
207
|
+
description: `${componentFindings.length} issues in ${componentName}/`,
|
|
208
|
+
isInfra,
|
|
209
|
+
criticalCount: componentFindings.filter(f => f.severity === 'critical').length,
|
|
210
|
+
highCount: componentFindings.filter(f => f.severity === 'high').length,
|
|
211
|
+
mediumCount: componentFindings.filter(f => f.severity === 'medium').length,
|
|
212
|
+
lowCount: componentFindings.filter(f => f.severity === 'low' || f.severity === 'info').length,
|
|
213
|
+
findings: componentFindings
|
|
236
214
|
});
|
|
237
215
|
}
|
|
238
216
|
|
|
239
|
-
// Sort by
|
|
217
|
+
// Sort by total issues (most issues first)
|
|
240
218
|
groups.sort((a, b) => {
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
return
|
|
219
|
+
const totalA = a.criticalCount * 1000 + a.highCount * 100 + a.mediumCount * 10 + a.lowCount;
|
|
220
|
+
const totalB = b.criticalCount * 1000 + b.highCount * 100 + b.mediumCount * 10 + b.lowCount;
|
|
221
|
+
return totalB - totalA;
|
|
244
222
|
});
|
|
245
223
|
|
|
246
224
|
return groups;
|
|
@@ -722,8 +722,8 @@
|
|
|
722
722
|
Files
|
|
723
723
|
</button>
|
|
724
724
|
<button class="nav-tab" onclick="showTab('department')">
|
|
725
|
-
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><
|
|
726
|
-
|
|
725
|
+
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><rect x="3" y="3" width="7" height="7"/><rect x="14" y="3" width="7" height="7"/><rect x="14" y="14" width="7" height="7"/><rect x="3" y="14" width="7" height="7"/></svg>
|
|
726
|
+
Components
|
|
727
727
|
</button>
|
|
728
728
|
{{#if positiveObservations}}
|
|
729
729
|
<button class="nav-tab" onclick="showTab('positive')">
|