mirror of
https://github.com/thedotmack/claude-mem
synced 2026-04-25 17:15:04 +02:00
feat: add Anti-Pattern Czar Generalization Analysis report
This commit is contained in:
@@ -3,36 +3,5 @@
|
||||
|
||||
<!-- This section is auto-generated by claude-mem. Edit content outside the tags. -->
|
||||
|
||||
### Dec 12, 2025
|
||||
|
||||
**README.ar.md**
|
||||
| ID | Time | T | Title | Read |
|
||||
|----|------|---|-------|------|
|
||||
| #24246 | 2:43 AM | 🟣 | Comprehensive Translation System Added with 22 Language READMEs | ~386 |
|
||||
|
||||
**README.zh.md**
|
||||
| ID | Time | T | Title | Read |
|
||||
|----|------|---|-------|------|
|
||||
| #24241 | 2:35 AM | ✅ | Internationalized README Files Moved to Dedicated i18n Directory | ~284 |
|
||||
|
||||
### Dec 22, 2025
|
||||
|
||||
**README.ja.md**
|
||||
| ID | Time | T | Title | Read |
|
||||
|----|------|---|-------|------|
|
||||
| #31948 | 8:08 PM | ✅ | Batch Updated All Translation READMEs with Language Navigation | ~400 |
|
||||
|
||||
**README.zh.md**
|
||||
| ID | Time | T | Title | Read |
|
||||
|----|------|---|-------|------|
|
||||
| #31947 | 8:07 PM | ✅ | Added Language Navigation Menu to Chinese Translation README | ~412 |
|
||||
| #31945 | 8:06 PM | 🟣 | Multi-language navigation added to internationalized README files | ~386 |
|
||||
| #31942 | 8:01 PM | 🔵 | Internationalization Documentation Coverage | ~315 |
|
||||
|
||||
### Dec 28, 2025
|
||||
|
||||
**README.*.md**
|
||||
| ID | Time | T | Title | Read |
|
||||
|----|------|---|-------|------|
|
||||
| #33540 | 10:55 PM | 🔵 | Grep search found mem-search references in internationalized documentation | ~577 |
|
||||
*No recent activity*
|
||||
</claude-mem-context>
|
||||
@@ -0,0 +1,215 @@
|
||||
# Anti-Pattern Czar Generalization Analysis
|
||||
|
||||
*Generated: January 10, 2026*
|
||||
|
||||
This report analyzes whether the `/anti-pattern-czar` command and its underlying detector script can be generalized for use in any TypeScript codebase or other programming languages.
|
||||
|
||||
---
|
||||
|
||||
## Executive Summary
|
||||
|
||||
The anti-pattern detection system in claude-mem consists of two components:
|
||||
1. **`/anti-pattern-czar`** - An interactive workflow command for detecting and fixing error handling anti-patterns
|
||||
2. **`detect-error-handling-antipatterns.ts`** - The underlying static analysis script
|
||||
|
||||
**Verdict:** The core detection patterns are highly generalizable to any TypeScript/JavaScript codebase. However, the current implementation has claude-mem-specific hardcoding that would need to be extracted into configuration for broader use.
|
||||
|
||||
---
|
||||
|
||||
## Current Implementation Analysis
|
||||
|
||||
### Detection Methodology
|
||||
|
||||
The script uses **purely regex-based detection** (no AST parsing) with two phases:
|
||||
|
||||
1. **Line-by-Line Pattern Matching** - Scans for known anti-patterns:
|
||||
- `ERROR_STRING_MATCHING` - Fragile `error.message.includes('keyword')` checks
|
||||
- `PARTIAL_ERROR_LOGGING` - Logging `error.message` instead of full error object
|
||||
- `ERROR_MESSAGE_GUESSING` - Multiple `.includes()` chains for error classification
|
||||
- `PROMISE_EMPTY_CATCH` - `.catch(() => {})` handlers
|
||||
- `PROMISE_CATCH_NO_LOGGING` - Promise catches without logging
|
||||
|
||||
2. **Try-Catch Block Analysis** - Brace-depth tracking to identify:
|
||||
- `EMPTY_CATCH` - Catch blocks with no meaningful code
|
||||
- `NO_LOGGING_IN_CATCH` - Catch blocks without logging/throwing
|
||||
- `LARGE_TRY_BLOCK` - More than 10 significant lines (uncertain error source)
|
||||
- `GENERIC_CATCH` - No `instanceof` or error type discrimination
|
||||
- `CATCH_AND_CONTINUE_CRITICAL_PATH` - Logging but not failing in critical code
|
||||
|
||||
### Claude-Mem Specific Elements
|
||||
|
||||
| Element | Location | Generalization Required |
|
||||
|---------|----------|-------------------------|
|
||||
| `CRITICAL_PATHS` array | Lines 24-30 | Extract to config file |
|
||||
| Script path in command | anti-pattern-czar.md | Make path configurable |
|
||||
| Severity thresholds | Line 10 limit | Make configurable |
|
||||
| Directory to scan | `src/` hardcoded | Accept as parameter |
|
||||
| Exclusions | `node_modules`, `dist` | Make configurable |
|
||||
|
||||
---
|
||||
|
||||
## Comparison with Industry Tools
|
||||
|
||||
### ESLint Rules Coverage
|
||||
|
||||
| Anti-Pattern | ESLint Equivalent | Coverage Gap |
|
||||
|--------------|-------------------|--------------|
|
||||
| Empty catch blocks | `no-empty` | Fully covered |
|
||||
| Catch-and-rethrow | `no-useless-catch` | Fully covered |
|
||||
| Floating promises | `@typescript-eslint/no-floating-promises` | Fully covered |
|
||||
| Partial error logging | None | **Gap** |
|
||||
| Error string matching | None | **Gap** |
|
||||
| Error message guessing | None | **Gap** |
|
||||
| Large try blocks | `sonarjs/cognitive-complexity` | Partial |
|
||||
| Critical path continuation | None | **Gap** |
|
||||
|
||||
### Unique Value Proposition
|
||||
|
||||
The claude-mem detector catches patterns that **no standard ESLint rule addresses**:
|
||||
|
||||
1. **Partial Error Logging** - Logging `error.message` loses stack traces
|
||||
2. **Error String Matching** - Fragile `if (error.message.includes('timeout'))` patterns
|
||||
3. **Error Message Guessing** - Chained `.includes()` for error classification
|
||||
4. **Critical Path Continuation** - Logging but continuing in code that should fail
|
||||
|
||||
These patterns represent **real debugging nightmares** that caused hours of investigation in claude-mem's development.
|
||||
|
||||
---
|
||||
|
||||
## Generalization Recommendations
|
||||
|
||||
### Tier 1: Quick Generalization (Configuration)
|
||||
|
||||
Extract hardcoded values to a config file:
|
||||
|
||||
```json
|
||||
{
|
||||
"sourceDir": "src/",
|
||||
"criticalPaths": ["**/services/*.ts", "**/core/*.ts"],
|
||||
"excludeDirs": ["node_modules", "dist", "test"],
|
||||
"largeBlockThreshold": 10,
|
||||
"overrideComment": "// [ANTI-PATTERN IGNORED]:"
|
||||
}
|
||||
```
|
||||
|
||||
**Effort:** 2-4 hours
|
||||
|
||||
### Tier 2: ESLint Plugin (Broader Adoption)
|
||||
|
||||
Convert patterns to ESLint custom rules for standard toolchain integration:
|
||||
|
||||
```javascript
|
||||
// eslint-plugin-error-hygiene
|
||||
module.exports = {
|
||||
rules: {
|
||||
'no-partial-error-logging': { /* ... */ },
|
||||
'no-error-string-matching': { /* ... */ },
|
||||
'no-error-message-guessing': { /* ... */ },
|
||||
'critical-path-must-fail': { /* ... */ }
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**Advantages:**
|
||||
- Integrates with existing toolchains
|
||||
- IDE integration via ESLint plugins
|
||||
- Auto-fix support possible
|
||||
- Community-standard distribution
|
||||
|
||||
**Effort:** 1-2 weeks
|
||||
|
||||
### Tier 3: Multi-Language Support
|
||||
|
||||
The regex patterns could be adapted for:
|
||||
- **Go** - `defer` with empty recover, error checking patterns
|
||||
- **Python** - `except:` without logging, bare `except Exception:`
|
||||
- **Rust** - `.unwrap()` in production paths, `_` pattern for `Result`
|
||||
|
||||
**Effort:** 1 week per language
|
||||
|
||||
---
|
||||
|
||||
## Architecture for General Use
|
||||
|
||||
```
|
||||
error-pattern-detector/
|
||||
├── config/
|
||||
│ ├── default.json # Sensible defaults
|
||||
│ └── schema.json # Config validation
|
||||
├── patterns/
|
||||
│ ├── typescript/ # TS-specific patterns
|
||||
│ │ ├── empty-catch.ts
|
||||
│ │ ├── partial-logging.ts
|
||||
│ │ └── critical-path.ts
|
||||
│ └── shared/ # Cross-language patterns
|
||||
│ ├── large-try-block.ts
|
||||
│ └── swallowed-errors.ts
|
||||
├── reporters/
|
||||
│ ├── console.ts # CLI output
|
||||
│ ├── json.ts # Machine-readable
|
||||
│ ├── sarif.ts # GitHub/IDE integration
|
||||
│ └── markdown.ts # Report generation
|
||||
├── cli.ts # Entry point
|
||||
└── index.ts # Programmatic API
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## PR #666 Review Context
|
||||
|
||||
The PR review raised a valid concern: the `/anti-pattern-czar` command references a script (`scripts/anti-pattern-test/detect-error-handling-antipatterns.ts`) that only exists in the claude-mem development repository.
|
||||
|
||||
**Options:**
|
||||
|
||||
1. **Keep as development tool** - Don't distribute with plugin (recommended by reviewer)
|
||||
2. **Bundle the detector** - Include the script in the plugin distribution
|
||||
3. **Extract to standalone package** - Publish as `@claude-mem/error-pattern-detector` and depend on it
|
||||
|
||||
Option 3 enables both plugin distribution and community adoption.
|
||||
|
||||
---
|
||||
|
||||
## Conclusions
|
||||
|
||||
### What's Generalizable
|
||||
|
||||
| Component | Generalizability | Notes |
|
||||
|-----------|------------------|-------|
|
||||
| Regex detection patterns | High | Universal to TS/JS |
|
||||
| Brace-depth tracking | High | Works for any curly-brace language |
|
||||
| Override comment syntax | High | Adoptable by any project |
|
||||
| Report formatting | High | Standard markdown output |
|
||||
| 4-step workflow | High | Applicable to any codebase |
|
||||
|
||||
### What's Claude-Mem Specific
|
||||
|
||||
| Component | Specificity | Extraction Effort |
|
||||
|-----------|-------------|-------------------|
|
||||
| Critical path file list | High | Configuration file |
|
||||
| Script location | High | Path parameter |
|
||||
| Severity philosophy | Medium | Documentation |
|
||||
| Exit codes | Low | Already standard |
|
||||
|
||||
### Recommendation
|
||||
|
||||
**Invest in Tier 2 (ESLint Plugin)** - The patterns detected are genuinely unique and valuable. Standard ESLint rules miss these debugging nightmares. An ESLint plugin would:
|
||||
|
||||
1. Enable adoption in any TS/JS project
|
||||
2. Integrate with existing CI/CD pipelines
|
||||
3. Provide IDE feedback in real-time
|
||||
4. Allow community contributions to pattern library
|
||||
5. Create a marketable open-source project
|
||||
|
||||
The name `eslint-plugin-error-hygiene` captures the philosophy: maintaining clean error handling practices to prevent silent failures.
|
||||
|
||||
---
|
||||
|
||||
## Next Steps
|
||||
|
||||
1. **Short-term:** Extract configuration to enable use in other projects
|
||||
2. **Medium-term:** Create ESLint plugin with AST-based detection (more robust than regex)
|
||||
3. **Long-term:** Multi-language support, SARIF output for security tool integration
|
||||
|
||||
---
|
||||
|
||||
*Report generated by analyzing PR #666 review comments, the anti-pattern-czar.md command, and detect-error-handling-antipatterns.ts implementation.*
|
||||
Reference in New Issue
Block a user