robustness-checklists
Detailed checklists for complexity and concurrency review. Load when the review-robustness agent needs specific patterns to evaluate.
$ npx -y skills add rsmdt/the-startup --agent claude-codeHow it fires
How this agent gets triggered: by you, by Claude, or both.
- Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
- You can call itInvoke it directly when you want it.
Context preview
The summary Claude sees to decide when to auto-load this agent.
Detailed checklists for complexity and concurrency review. Load when the review-robustness agent needs specific patterns to evaluate.
Agent definition
robustness-checklists.mdRobustness Review Checklists
Detailed checklists for complexity and concurrency review. Load when the review-robustness agent needs specific patterns to evaluate.
---
Complexity: Abstraction Challenge Table
When you see a new abstraction, challenge it. First match wins.
| If You See | Ask | Expected Justification | |------------|-----|----------------------| | New interface | "How many implementations exist TODAY?" | 2+ concrete implementations | | Factory pattern | "Is there more than one product RIGHT NOW?" | Multiple products in use | | Abstract class | "What behavior is actually shared?" | Concrete shared methods | | Generic type parameter | "What concrete types are used TODAY?" | 2+ distinct type usages | | Configuration option | "Has anyone ever changed this from default?" | Evidence of variation | | Event/callback system | "Could a direct function call work?" | Multiple listeners needed | | Microservice extraction | "Does this NEED to scale independently?" | Different scaling profile proven |
Complexity: Code-Level Simplification
- [ ] Functions under 20 lines? If not, WHY?
- [ ] Nesting under 3 levels? Demand guard clauses and early returns
- [ ] No flag variables? Replace with early returns
- [ ] Positive conditionals only? No `if (!notReady)` double negatives
- [ ] Complex expressions named? `const isEligible = x && y && z`
- [ ] No dead code? Unused variables, unreachable branches removed
- [ ] No commented-out code? That's what version control is for
Complexity: Architecture-Level Simplification
- [ ] Every abstraction justified by CURRENT need (not future speculation)?
- [ ] No pass-through layers? (method just calls another method)
- [ ] No over-engineering? (factory for single implementation)
- [ ] No premature generics? (`Repository<T>` with only one T)
- [ ] Dependencies proportional to functionality?
- [ ] Layer count justified? Can any layer be collapsed?
Complexity: Anti-Pattern Detection
- [ ] No Lasagna Code? (too many thin layers)
- [ ] No Interface Bloat? (interfaces with unused methods)
- [ ] No Inheritance Addiction? (> 2 levels of inheritance)
- [ ] No Callback Hell? (use async/await)
- [ ] No Ternary Chains? (`a ? b : c ? d : e` → use if/else or switch)
- [ ] No Regex Golf? (unreadable regex → multiple simple checks)
- [ ] No Metaprogramming? (when direct code works fine)
---
Concurrency: Race Conditions
- [ ] Shared state protected by synchronization?
- [ ] Check-then-act operations atomic? (no TOCTOU vulnerabilities)
- [ ] Compound operations properly locked?
- [ ] Read AND write operations protected? (not just writes)
- [ ] Loop variables captured correctly in closures?
- [ ] Lazy initialization thread-safe?
Concurrency: Async/Await Patterns
- [ ] All promises awaited or intentionally fire-and-forget?
- [ ] Promise.all used for independent operations?
- [ ] No await in loops when Promise.all would work?
- [ ] Proper error handling for async operations?
- [ ] Async cleanup in finally blocks or using patterns?
- [ ] No mixing callbacks and promises inconsistently?
Concurrency: Deadlock Prevention
- [ ] Consistent lock ordering maintained?
- [ ] No nested locks that could deadlock?
- [ ] Timeouts on blocking operations?
- [ ] No circular wait conditions?
- [ ] Resources acquired in consistent order?
Concurrency: Resource Management
- [ ] Async resources properly cleaned up?
- [ ] Event listeners removed when no longer needed?
- [ ] Subscriptions unsubscribed on teardown?
- [ ] Connection pools configured with limits?
- [ ] Timeouts set on external calls?
- [ ] Graceful shutdown handles in-flight operations?
Concurrency: Database
- [ ] Appropriate transaction isolation level?
- [ ] Optimistic locking where applicable?
- [ ] No long-running transactions holding locks?
- [ ] Batch operations instead of row-by-row?
- [ ] Connection returned to pool promptly?
Concurrency: Event Handling
- [ ] Event handlers idempotent?
- [ ] No duplicate event processing?
- [ ] Event ordering handled correctly?
- [ ] Backpressure handled for high-volume events?
- [ ] Dead letter queues for failed events?
---
Concurrency: Common Patterns to Flag
| Pattern | Issue | Fix | |---------|-------|-----| | `if (cache[key]) return cache[key]` | TOCTOU race | Use atomic get-or-set | | `await` inside `forEach` | Sequential, not parallel | Use `Promise.all` with `map` | | `async () => { fetch(...) }` | Unhandled promise | Add error handling or await | | Shared mutable object | Race condition | Immutable or synchronized | | `setTimeout` without cleanup | Memory leak | Store and clear timeout ID |
Read more
Robustness Review Checklists
Detailed checklists for complexity and concurrency review. Load when the review-robustness agent needs specific patterns to evaluate.
---
Complexity: Abstraction Challenge Table
When you see a new abstraction, challenge it. First match wins.
| If You See | Ask | Expected Justification | |------------|-----|----------------------| | New interface | "How many implementations exist TODAY?" | 2+ concrete implementations | | Factory pattern | "Is there more than one product RIGHT NOW?" | Multiple products in use | | Abstract class | "What behavior is actually shared?" | Concrete shared methods | | Generic type parameter | "What concrete types are used TODAY?" | 2+ distinct type usages | | Configuration option | "Has anyone ever changed this from default?" | Evidence of variation | | Event/callback system | "Could a direct function call work?" | Multiple listeners needed | | Microservice extraction | "Does this NEED to scale independently?" | Different scaling profile proven |
Complexity: Code-Level Simplification
- [ ] Functions under 20 lines? If not, WHY?
- [ ] Nesting under 3 levels? Demand guard clauses and early returns
- [ ] No flag variables? Replace with early returns
- [ ] Positive conditionals only? No `if (!notReady)` double negatives
- [ ] Complex expressions named? `const isEligible = x && y && z`
- [ ] No dead code? Unused variables, unreachable branches removed
- [ ] No commented-out code? That's what version control is for
Complexity: Architecture-Level Simplification
- [ ] Every abstraction justified by CURRENT need (not future speculation)?
- [ ] No pass-through layers? (method just calls another method)
- [ ] No over-engineering? (factory for single implementation)
- [ ] No premature generics? (`Repository<T>` with only one T)
- [ ] Dependencies proportional to functionality?
- [ ] Layer count justified? Can any layer be collapsed?
Complexity: Anti-Pattern Detection
- [ ] No Lasagna Code? (too many thin layers)
- [ ] No Interface Bloat? (interfaces with unused methods)
- [ ] No Inheritance Addiction? (> 2 levels of inheritance)
- [ ] No Callback Hell? (use async/await)
- [ ] No Ternary Chains? (`a ? b : c ? d : e` → use if/else or switch)
- [ ] No Regex Golf? (unreadable regex → multiple simple checks)
- [ ] No Metaprogramming? (when direct code works fine)
---
Concurrency: Race Conditions
- [ ] Shared state protected by synchronization?
- [ ] Check-then-act operations atomic? (no TOCTOU vulnerabilities)
- [ ] Compound operations properly locked?
- [ ] Read AND write operations protected? (not just writes)
- [ ] Loop variables captured correctly in closures?
- [ ] Lazy initialization thread-safe?
Concurrency: Async/Await Patterns
- [ ] All promises awaited or intentionally fire-and-forget?
- [ ] Promise.all used for independent operations?
- [ ] No await in loops when Promise.all would work?
- [ ] Proper error handling for async operations?
- [ ] Async cleanup in finally blocks or using patterns?
- [ ] No mixing callbacks and promises inconsistently?
Concurrency: Deadlock Prevention
- [ ] Consistent lock ordering maintained?
- [ ] No nested locks that could deadlock?
- [ ] Timeouts on blocking operations?
- [ ] No circular wait conditions?
- [ ] Resources acquired in consistent order?
Concurrency: Resource Management
- [ ] Async resources properly cleaned up?
- [ ] Event listeners removed when no longer needed?
- [ ] Subscriptions unsubscribed on teardown?
- [ ] Connection pools configured with limits?
- [ ] Timeouts set on external calls?
- [ ] Graceful shutdown handles in-flight operations?
Concurrency: Database
- [ ] Appropriate transaction isolation level?
- [ ] Optimistic locking where applicable?
- [ ] No long-running transactions holding locks?
- [ ] Batch operations instead of row-by-row?
- [ ] Connection returned to pool promptly?
Concurrency: Event Handling
- [ ] Event handlers idempotent?
- [ ] No duplicate event processing?
- [ ] Event ordering handled correctly?
- [ ] Backpressure handled for high-volume events?
- [ ] Dead letter queues for failed events?
---
Concurrency: Common Patterns to Flag
| Pattern | Issue | Fix | |---------|-------|-----| | `if (cache[key]) return cache[key]` | TOCTOU race | Use atomic get-or-set | | `await` inside `forEach` | Sequential, not parallel | Use `Promise.all` with `map` | | `async () => { fetch(...) }` | Unhandled promise | Add error handling or await | | Shared mutable object | Race condition | Immutable or synchronized | | `setTimeout` without cleanup | Memory leak | Store and clear timeout ID |
The Agentic Startup - A collection of Claude Code commands, skills, and agents.
Repo: rsmdt/the-startup
Other agents on the-startup.
- research-product
PROACTIVELY research product direction by combining market evidence and requirement clarification. MUST BE USED when teams need competitive context, prioritization input, or clearer acceptance criteria before implementation. Automatically invoke when strategic decisions and
Open agent - design-system
PROACTIVELY design system architecture when building new services or planning for scale. MUST BE USED when making microservices vs monolith decisions, designing for 10x growth, or introducing new system components. Automatically invoke when architectural trade-offs need
Open agent - review-compatibility
PROACTIVELY review code for breaking changes and compatibility issues. MUST BE USED when reviewing PRs that modify public APIs, shared libraries, database schemas, or configuration formats. Automatically invoke for interface changes, deprecations, or version bumps. Includes
Open agent - review-robustness
PROACTIVELY review code for robustness risks caused by unnecessary complexity and unsafe concurrency patterns. MUST BE USED when reviewing async flows, shared state, multi-layer abstractions, or code that is hard to reason about. Automatically invoke for race-condition risk,
Open agent - review-security
PROACTIVELY review code and dependency changes for security vulnerabilities, supply chain risks, and compliance concerns. MUST BE USED when reviewing authentication, authorization, input handling, cryptography, package updates, lockfile changes, or third-party integrations.
Open agent - the-chief
PROACTIVELY assess complexity and route work when facing multi-step tasks, unclear requirements, or cross-domain work. MUST BE USED before starting any feature that touches multiple system areas. Automatically invoke when parallel execution opportunities exist.
Open agent

