NestJS architecture, dependency injection, validation, security, errors, testing, persistence, APIs, microservices, and deployment patterns with prioritized rule tiers and companion rule files.
99
100%
Does it follow best practices?
Impact
97%
1.12xAverage score across 2 eval scenarios
Advisory
Suggest reviewing before use
{
"context": "Tests whether the agent correctly implements background job processing using @nestjs/bullmq, wires event-driven decoupling with @nestjs/event-emitter, handles async errors in processors, integrates queue health into readiness checks, and uses structured logging.",
"type": "weighted_checklist",
"checklist": [
{
"name": "BullMQ package used",
"description": "Uses @nestjs/bullmq (not the older @nestjs/bull) for queue integration",
"max_score": 10
},
{
"name": "Queue injection pattern",
"description": "Uses @InjectQueue() decorator to inject the queue into the service — not manually instantiating a queue",
"max_score": 8
},
{
"name": "Processor decorator",
"description": "Worker class is decorated with @Processor() — not implementing a raw BullMQ worker manually",
"max_score": 8
},
{
"name": "Job retry options",
"description": "Job options include both attempts (retry count > 1) and backoff configuration when adding jobs to the queue",
"max_score": 10
},
{
"name": "Event-driven decoupling",
"description": "Publisher module uses @nestjs/event-emitter (@OnEvent() listener) to react to domain events and enqueue jobs — publisher module does NOT import the worker/processor module directly",
"max_score": 10
},
{
"name": "Async error handling in processor",
"description": "Job handler method contains a try-catch block or equivalent to handle errors locally — errors are NOT silently swallowed (they are logged or re-thrown for BullMQ retry)",
"max_score": 8
},
{
"name": "Structured logging with context",
"description": "Uses NestJS Logger instantiated with a class name context (e.g., new Logger(NotificationProcessor.name)) — NOT console.log",
"max_score": 8
},
{
"name": "Queue health in readiness probe",
"description": "Health check module includes a BullMQ queue health indicator (or Redis ping) as part of the /health/ready readiness endpoint — NOT mixed into the liveness probe",
"max_score": 10
},
{
"name": "Separate liveness endpoint",
"description": "A separate /health/live liveness endpoint exists with only lightweight checks (memory or basic process check) — database/Redis checks are NOT included in liveness",
"max_score": 8
},
{
"name": "Module exports pattern",
"description": "The queue service is exported from its module and the consuming module imports the module (not re-declares the service as a provider)",
"max_score": 8
},
{
"name": "Redis config from ConfigModule",
"description": "BullModule Redis connection is configured via ConfigService or registerAsync — no hardcoded host/port strings",
"max_score": 8
},
{
"name": "Constructor injection in services",
"description": "All services and processors obtain dependencies via constructor parameters — no property-injected @Inject() decorators on class fields",
"max_score": 4
}
]
}evals
scenario-1
scenario-2
rules