EventLint -- Event & Message Queue Anti-Pattern Analyzer
EventLint scans codebases for event-driven architecture anti-patterns, producer/consumer issues, schema validation gaps, dead letter queue misconfigurations, ordering and delivery failures, and observability gaps across Kafka, RabbitMQ, SQS, NATS, and Redis Pub/Sub. It uses regex-based pattern matching against 90 event-specific patterns across 6 categories, lefthook for git hook integration, and produces markdown reports with actionable remediation guidance. 100% local. Zero telemetry.
Commands
Free Tier (No license required)
eventlint scan [file|directory]
One-shot event architecture quality scan of files or directories.
How to execute:
bash "<SKILL_DIR>/scripts/dispatcher.sh" --path [target]
What it does:
- Accepts a file path or directory (defaults to current directory)
- Discovers all source files (skips .git, node_modules, binaries, images, .min.js)
- Runs 30 event architecture patterns against each file (free tier limit)
- Calculates an event architecture quality score (0-100) per file and overall
- Grades: A (90-100), B (80-89), C (70-79), D (60-69), F (<60)
- Outputs findings with: file, line number, check ID, severity, description, recommendation
- Exit code 0 if score >= 70, exit code 1 if event quality is poor
- Free tier limited to first 30 patterns (PP + CP categories)
Example usage scenarios:
- "Scan my code for event issues" -> runs
eventlint scan .
- "Check this file for consumer anti-patterns" -> runs
eventlint scan src/consumer.ts
- "Find missing dead letter queues" -> runs
eventlint scan src/
- "Audit my Kafka configuration" -> runs
eventlint scan .
- "Check for message ordering problems" -> runs
eventlint scan .
Pro Tier ($19/user/month -- requires EVENTLINT_LICENSE_KEY)
eventlint scan --tier pro [file|directory]
Extended scan with 60 patterns covering producer, consumer, schema, and dead letter patterns.
How to execute:
bash "<SKILL_DIR>/scripts/dispatcher.sh" --path [target] --tier pro
What it does:
- Validates Pro+ license
- Runs 60 event architecture patterns (PP, CP, MS, ED categories)
- Detects schema validation gaps and breaking changes
- Identifies dead letter queue misconfigurations
- Full category breakdown reporting
eventlint scan --format json [directory]
Generate JSON output for CI/CD integration.
bash "<SKILL_DIR>/scripts/dispatcher.sh" --path [directory] --format json
eventlint scan --format html [directory]
Generate HTML report for browser viewing.
bash "<SKILL_DIR>/scripts/dispatcher.sh" --path [directory] --format html
eventlint scan --category ED [directory]
Filter scan to a specific check category (PP, CP, MS, ED, OD, EO).
bash "<SKILL_DIR>/scripts/dispatcher.sh" --path [directory] --category ED
Team Tier ($39/user/month -- requires EVENTLINT_LICENSE_KEY with team tier)
eventlint scan --tier team [directory]
Full scan with all 90 patterns across all 6 categories including ordering/delivery and observability.
How to execute:
bash "<SKILL_DIR>/scripts/dispatcher.sh" --path [directory] --tier team
What it does:
- Validates Team+ license
- Runs all 90 patterns across 6 categories
- Includes ordering & delivery detection (dual-write, missing outbox, race conditions)
- Includes event observability checks (no tracing, missing metrics, no audit trail)
- Full category breakdown with per-file results
eventlint scan --verbose [directory]
Verbose output showing every matched line and pattern details.
bash "<SKILL_DIR>/scripts/dispatcher.sh" --path [directory] --verbose
eventlint status
Show license and configuration information.
bash "<SKILL_DIR>/scripts/dispatcher.sh" status
Check Categories
EventLint detects 90 event architecture anti-patterns across 6 categories:
| Category |
Code |
Patterns |
Description |
Severity Range |
| Producer Patterns |
PP |
15 |
Fire-and-forget publish, missing keys, no schema validation, acks=0 |
medium -- critical |
| Consumer Patterns |
CP |
15 |
No idempotency, auto-ack, unbounded prefetch, blocking handlers |
low -- critical |
| Message Schema |
MS |
15 |
No schema registry, unversioned, breaking changes, loose typing |
low -- critical |
| Error & Dead Letter |
ED |
15 |
Missing DLQ, infinite redelivery, swallowed exceptions, no poison handling |
low -- critical |
| Ordering & Delivery |
OD |
15 |
Dual-write, no outbox, missing dedup, saga without timeout |
low -- critical |
| Event Observability |
EO |
15 |
No tracing, missing metrics, no audit trail, no alerting |
low -- medium |
Tier-Based Pattern Access
| Tier |
Patterns |
Categories |
| Free |
30 |
PP, CP |
| Pro |
60 |
PP, CP, MS, ED |
| Team |
90 |
PP, CP, MS, ED, OD, EO |
| Enterprise |
90 |
PP, CP, MS, ED, OD, EO + priority support |
Scoring
EventLint uses a deductive scoring system starting at 100 (perfect):
| Severity |
Point Deduction |
Description |
| Critical |
-25 per finding |
Severe reliability issue (message loss, infinite redelivery, dual-write) |
| High |
-15 per finding |
Significant event problem (missing DLQ, auto-ack, no idempotency) |
| Medium |
-8 per finding |
Moderate concern (missing correlation ID, unversioned schema) |
| Low |
-3 per finding |
Informational / best practice suggestion |
Grading Scale
| Grade |
Score Range |
Meaning |
| A |
90-100 |
Excellent event architecture quality |
| B |
80-89 |
Good architecture with minor issues |
| C |
70-79 |
Acceptable but needs improvement |
| D |
60-69 |
Poor event architecture quality |
| F |
Below 60 |
Critical event architecture problems |
- Pass threshold: 70 (Grade C or better)
- Exit code 0 = pass (score >= 70)
- Exit code 1 = fail (score < 70)
Configuration
Users can configure EventLint in ~/.openclaw/openclaw.json:
{
"skills": {
"entries": {
"eventlint": {
"enabled": true,
"apiKey": "YOUR_LICENSE_KEY_HERE",
"config": {
"severityThreshold": "medium",
"ignorePatterns": ["**/test/**", "**/fixtures/**", "**/*.test.*"],
"ignoreChecks": [],
"reportFormat": "text"
}
}
}
}
}
Important Notes
- Free tier works immediately with no configuration
- All scanning happens locally -- no code is sent to external servers
- License validation is offline -- no phone-home or network calls
- Pattern matching only -- no AST parsing, no external dependencies beyond bash
- Supports scanning all file types in a single pass
- Git hooks use lefthook which must be installed (see install metadata above)
- Exit codes: 0 = pass (score >= 70), 1 = fail (for CI/CD integration)
- Output formats: text (default), json, html
Error Handling
- If lefthook is not installed and user tries hooks, prompt to install it
- If license key is invalid or expired, show clear message with link to https://eventlint.pages.dev/renew
- If a file is binary, skip it automatically with no warning
- If no scannable files found in target, report clean scan with info message
- If an invalid category is specified with --category, show available categories
When to Use EventLint
The user might say things like:
- "Scan my code for event issues"
- "Check my message queue patterns"
- "Find missing dead letter queues"
- "Detect fire-and-forget publishing"
- "Are there any consumer anti-patterns?"
- "Check for schema validation gaps"
- "Audit my Kafka configuration"
- "Find ordering and delivery issues"
- "Check for dual-write problems"
- "Scan for event observability gaps"
- "Run an event architecture audit"
- "Generate an event quality report"
- "Check if my consumers have idempotency"
- "Find missing DLQ configuration"
- "Check my code for auto-ack issues"
1---2name: eventlint3description: Event & message queue anti-pattern analyzer -- detects producer/consumer issues, schema problems, dead letter queue gaps, ordering failures, and observability gaps in event-driven architectures (Kafka, RabbitMQ, SQS, NATS, Redis Pub/Sub)4---5
6# EventLint -- Event & Message Queue Anti-Pattern Analyzer
7
8EventLint scans codebases for event-driven architecture anti-patterns, producer/consumer issues, schema validation gaps, dead letter queue misconfigurations, ordering and delivery failures, and observability gaps across Kafka, RabbitMQ, SQS, NATS, and Redis Pub/Sub. It uses regex-based pattern matching against 90 event-specific patterns across 6 categories, lefthook for git hook integration, and produces markdown reports with actionable remediation guidance. 100% local. Zero telemetry.
9
10## Commands
11
12### Free Tier (No license required)
13
14#### `eventlint scan [file|directory]`
15One-shot event architecture quality scan of files or directories.
16
17**How to execute:**
18```bash
19bash "<SKILL_DIR>/scripts/dispatcher.sh" --path [target]
20```
21
22**What it does:**
231. Accepts a file path or directory (defaults to current directory)
242. Discovers all source files (skips .git, node_modules, binaries, images, .min.js)
253. Runs 30 event architecture patterns against each file (free tier limit)
264. Calculates an event architecture quality score (0-100) per file and overall
275. Grades: A (90-100), B (80-89), C (70-79), D (60-69), F (<60)
286. Outputs findings with: file, line number, check ID, severity, description, recommendation
297. Exit code 0 if score >= 70, exit code 1 if event quality is poor
308. Free tier limited to first 30 patterns (PP + CP categories)
31
32**Example usage scenarios:**
33- "Scan my code for event issues" -> runs `eventlint scan .`
34- "Check this file for consumer anti-patterns" -> runs `eventlint scan src/consumer.ts`
35- "Find missing dead letter queues" -> runs `eventlint scan src/`
36- "Audit my Kafka configuration" -> runs `eventlint scan .`
37- "Check for message ordering problems" -> runs `eventlint scan .`
38
39### Pro Tier ($19/user/month -- requires EVENTLINT_LICENSE_KEY)
40
41#### `eventlint scan --tier pro [file|directory]`
42Extended scan with 60 patterns covering producer, consumer, schema, and dead letter patterns.
43
44**How to execute:**
45```bash
46bash "<SKILL_DIR>/scripts/dispatcher.sh" --path [target] --tier pro
47```
48
49**What it does:**
501. Validates Pro+ license
512. Runs 60 event architecture patterns (PP, CP, MS, ED categories)
523. Detects schema validation gaps and breaking changes
534. Identifies dead letter queue misconfigurations
545. Full category breakdown reporting
55
56#### `eventlint scan --format json [directory]`
57Generate JSON output for CI/CD integration.
58
59```bash
60bash "<SKILL_DIR>/scripts/dispatcher.sh" --path [directory] --format json
61```
62
63#### `eventlint scan --format html [directory]`
64Generate HTML report for browser viewing.
65
66```bash
67bash "<SKILL_DIR>/scripts/dispatcher.sh" --path [directory] --format html
68```
69
70#### `eventlint scan --category ED [directory]`
71Filter scan to a specific check category (PP, CP, MS, ED, OD, EO).
72
73```bash
74bash "<SKILL_DIR>/scripts/dispatcher.sh" --path [directory] --category ED
75```
76
77### Team Tier ($39/user/month -- requires EVENTLINT_LICENSE_KEY with team tier)
78
79#### `eventlint scan --tier team [directory]`
80Full scan with all 90 patterns across all 6 categories including ordering/delivery and observability.
81
82**How to execute:**
83```bash
84bash "<SKILL_DIR>/scripts/dispatcher.sh" --path [directory] --tier team
85```
86
87**What it does:**
881. Validates Team+ license
892. Runs all 90 patterns across 6 categories
903. Includes ordering & delivery detection (dual-write, missing outbox, race conditions)
914. Includes event observability checks (no tracing, missing metrics, no audit trail)
925. Full category breakdown with per-file results
93
94#### `eventlint scan --verbose [directory]`
95Verbose output showing every matched line and pattern details.
96
97```bash
98bash "<SKILL_DIR>/scripts/dispatcher.sh" --path [directory] --verbose
99```
100
101#### `eventlint status`
102Show license and configuration information.
103
104```bash
105bash "<SKILL_DIR>/scripts/dispatcher.sh" status
106```
107
108## Check Categories
109
110EventLint detects 90 event architecture anti-patterns across 6 categories:
111
112| Category | Code | Patterns | Description | Severity Range |
113|----------|------|----------|-------------|----------------|
114| **Producer Patterns** | PP | 15 | Fire-and-forget publish, missing keys, no schema validation, acks=0 | medium -- critical |
115| **Consumer Patterns** | CP | 15 | No idempotency, auto-ack, unbounded prefetch, blocking handlers | low -- critical |
116| **Message Schema** | MS | 15 | No schema registry, unversioned, breaking changes, loose typing | low -- critical |
117| **Error & Dead Letter** | ED | 15 | Missing DLQ, infinite redelivery, swallowed exceptions, no poison handling | low -- critical |
118| **Ordering & Delivery** | OD | 15 | Dual-write, no outbox, missing dedup, saga without timeout | low -- critical |
119| **Event Observability** | EO | 15 | No tracing, missing metrics, no audit trail, no alerting | low -- medium |
120
121## Tier-Based Pattern Access
122
123| Tier | Patterns | Categories |
124|------|----------|------------|
125| **Free** | 30 | PP, CP |
126| **Pro** | 60 | PP, CP, MS, ED |
127| **Team** | 90 | PP, CP, MS, ED, OD, EO |
128| **Enterprise** | 90 | PP, CP, MS, ED, OD, EO + priority support |
129
130## Scoring
131
132EventLint uses a deductive scoring system starting at 100 (perfect):
133
134| Severity | Point Deduction | Description |
135|----------|-----------------|-------------|
136| **Critical** | -25 per finding | Severe reliability issue (message loss, infinite redelivery, dual-write) |
137| **High** | -15 per finding | Significant event problem (missing DLQ, auto-ack, no idempotency) |
138| **Medium** | -8 per finding | Moderate concern (missing correlation ID, unversioned schema) |
139| **Low** | -3 per finding | Informational / best practice suggestion |
140
141### Grading Scale
142
143| Grade | Score Range | Meaning |
144|-------|-------------|---------|
145| **A** | 90-100 | Excellent event architecture quality |
146| **B** | 80-89 | Good architecture with minor issues |
147| **C** | 70-79 | Acceptable but needs improvement |
148| **D** | 60-69 | Poor event architecture quality |
149| **F** | Below 60 | Critical event architecture problems |
150
151- **Pass threshold:** 70 (Grade C or better)
152- Exit code 0 = pass (score >= 70)
153- Exit code 1 = fail (score < 70)
154
155## Configuration
156
157Users can configure EventLint in `~/.openclaw/openclaw.json`:
158
159```json
160{
161 "skills": {
162 "entries": {
163 "eventlint": {
164 "enabled": true,
165 "apiKey": "YOUR_LICENSE_KEY_HERE",
166 "config": {
167 "severityThreshold": "medium",
168 "ignorePatterns": ["**/test/**", "**/fixtures/**", "**/*.test.*"],
169 "ignoreChecks": [],
170 "reportFormat": "text"
171 }
172 }
173 }
174 }
175}
176```
177
178## Important Notes
179
180- **Free tier** works immediately with no configuration
181- **All scanning happens locally** -- no code is sent to external servers
182- **License validation is offline** -- no phone-home or network calls
183- Pattern matching only -- no AST parsing, no external dependencies beyond bash
184- Supports scanning all file types in a single pass
185- Git hooks use **lefthook** which must be installed (see install metadata above)
186- Exit codes: 0 = pass (score >= 70), 1 = fail (for CI/CD integration)
187- Output formats: text (default), json, html
188
189## Error Handling
190
191- If lefthook is not installed and user tries hooks, prompt to install it
192- If license key is invalid or expired, show clear message with link to https://eventlint.pages.dev/renew
193- If a file is binary, skip it automatically with no warning
194- If no scannable files found in target, report clean scan with info message
195- If an invalid category is specified with --category, show available categories
196
197## When to Use EventLint
198
199The user might say things like:
200- "Scan my code for event issues"
201- "Check my message queue patterns"
202- "Find missing dead letter queues"
203- "Detect fire-and-forget publishing"
204- "Are there any consumer anti-patterns?"
205- "Check for schema validation gaps"
206- "Audit my Kafka configuration"
207- "Find ordering and delivery issues"
208- "Check for dual-write problems"
209- "Scan for event observability gaps"
210- "Run an event architecture audit"
211- "Generate an event quality report"
212- "Check if my consumers have idempotency"
213- "Find missing DLQ configuration"
214- "Check my code for auto-ack issues"