Static resilience-pattern analysis. Detects missing retry/backoff, absent circuit breakers, unbounded timeouts, and missing deadline propagation in TypeScript, JavaScript, Python, and Go. Wired into the conductor's review and write operations.
From clean-code-codexnpx claudepluginhub mikecubed/agent-orchestration --plugin clean-code-codexThis skill uses the workspace's default tool permissions.
Guides Next.js Cache Components and Partial Prerendering (PPR) with cacheComponents enabled. Implements 'use cache', cacheLife(), cacheTag(), revalidateTag(), static/dynamic optimization, and cache debugging.
Migrates code, prompts, and API calls from Claude Sonnet 4.0/4.5 or Opus 4.1 to Opus 4.5, updating model strings on Anthropic, AWS, GCP, Azure platforms.
Analyzes BMad project state from catalog CSV, configs, artifacts, and query to recommend next skills or answer questions. Useful for help requests, 'what next', or starting BMad.
Precedence in the overall system: SEC → TDD → ARCH/TYPE → RESILIENCE-1 (BLOCK) → RESILIENCE-2 through RESILIENCE-4.
Severity: BLOCK | Languages: TypeScript, JavaScript, Python, Go | Source: CCC
What it prohibits: HTTP/network calls and external API calls that fail hard on first attempt with no retry or backoff strategy. Operations that throw/return errors immediately on transient failures without any retry logic.
Prohibited patterns:
// TypeScript/JavaScript
fetch(url); // bare fetch, no retry wrapper
axios.get(url); // bare axios, no retry wrapper
# Python
requests.get(url) # no retry or tenacity decorator
httpx.get(url) # no retry wrapper
// Go
http.Get(url) // no retry wrapper
http.Post(url, contentType, body) // no retry wrapper
Exemptions:
axios-retry, tenacity, retry,
go-retry, exponential backoff wrappers)Detection:
fetch(, axios., requests.get, requests.post, httpx.,
http.Get(, http.Post( in non-test source filesaxios-retry
interceptor, @retry decorator, tenacity.retry, go-retry loop)agent_action:
RESILIENCE-1 (BLOCK): Bare network call at {file}:{line} — no retry/backoff strategy.// TypeScript/JavaScript — wrap with retry
import retry from 'async-retry';
const result = await retry(() => fetch(url), { retries: 3 });
# Python — use tenacity
from tenacity import retry, stop_after_attempt, wait_exponential
@retry(stop=stop_after_attempt(3), wait=wait_exponential())
def call_api():
return requests.get(url, timeout=5)
// Go — use a retry helper
err := retry.Do(func() error {
resp, err := http.Get(url)
// ...
return err
}, retry.Attempts(3), retry.Delay(time.Second))
--fix: wrap the call with the appropriate retry library — preserve
existing error handling and do not alter the response typeBypass prohibition: "It's an internal service", "retries will cause duplicates" → Refuse. Cite RESILIENCE-1. Internal services still experience transient network failures. Idempotency concerns must be documented explicitly with a code comment explaining the no-retry decision.
Severity: WARN | Languages: TypeScript, JavaScript, Python, Go | Source: CCC
What it prohibits: Services that call external dependencies (payment processors, auth providers, third-party APIs) without circuit breaker protection. When the downstream is down, the caller should fail fast rather than exhausting threads/goroutines waiting for timeouts.
Prohibited patterns:
// TypeScript/JavaScript
const payment = await fetch("https://api.stripe.com/v1/charges", { ... });
const auth = await axios.post("https://auth.provider.com/token", { ... });
# Python
response = requests.post("https://api.twilio.com/send", data=payload)
// Go
resp, err := http.Post("https://external-payment.example.com/charge", ...)
Exemptions:
opossum, cockatiel, pybreaker,
gobreaker, resilience4j, Hystrix patterns)Detection:
agent_action:
RESILIENCE-2 (WARN): External call to '{host}' at {file}:{line} has no circuit breaker protection.// TypeScript/JavaScript — opossum
import CircuitBreaker from 'opossum';
const breaker = new CircuitBreaker(callPaymentAPI, {
timeout: 3000,
errorThresholdPercentage: 50,
resetTimeout: 30000,
});
const result = await breaker.fire(payload);
--fix: add the circuit breaker wrapper — require human to configure
threshold and reset values appropriate for the dependency SLASeverity: WARN | Languages: TypeScript, JavaScript, Python, Go | Source: CCC
What it prohibits: Network calls and external I/O with no timeout configured. Default timeouts of major HTTP libraries are often unlimited or extremely long, causing callers to hang indefinitely when a downstream is slow.
Prohibited patterns:
// TypeScript/JavaScript
fetch(url); // no AbortSignal.timeout
axios.get(url); // no timeout option
# Python
requests.get(url) // no timeout= parameter
httpx.get(url) // no timeout= parameter
// Go
http.Get(url) // default http.Client has no timeout
resp, err := client.Do(req) // client with no Timeout field set
ctx := context.Background() // no deadline on context passed to call
Exemptions:
Detection:
fetch(, axios., requests.get, requests.post, httpx.,
http.Get(, http.Post(, client.Do( in non-test source filesAbortSignal.timeout,
timeout=, or context deadline is present in the same statement or
enclosing client configurationagent_action:
RESILIENCE-3 (WARN): Unbounded timeout on network call at {file}:{line}.// TypeScript/JavaScript
fetch(url, { signal: AbortSignal.timeout(5000) });
axios.get(url, { timeout: 5000 });
# Python
requests.get(url, timeout=5)
httpx.get(url, timeout=5.0)
// Go
client := &http.Client{Timeout: 5 * time.Second}
ctx, cancel := context.WithTimeout(ctx, 5*time.Second)
defer cancel()
--fix: add the timeout parameter — use 5 seconds as a safe default
and add a comment prompting the developer to tune for the specific endpointSeverity: WARN | Languages: Go | Source: CCC
What it prohibits: Functions accepting context.Context that create new
child contexts without propagating the parent deadline. Or functions that use
context.Background() inside a handler that already has a request context.
This breaks the cancellation chain and prevents upstream timeouts from
propagating to downstream calls.
Prohibited patterns:
// Using context.Background() inside a function that receives ctx
func HandleRequest(ctx context.Context, req *Request) error {
// BAD: ignores the parent context deadline
newCtx := context.Background()
resp, err := client.Do(req.WithContext(newCtx))
// ...
}
// Using context.TODO() in production handler code
func ProcessOrder(ctx context.Context, order *Order) error {
// BAD: context.TODO() should not appear in production handlers
result, err := paymentClient.Charge(context.TODO(), order.Amount)
// ...
}
Exemptions:
context.Background() in main(), init(), or test setup functionscontext.TODO() in code explicitly marked as work-in-progress with a
linked tracking issueDetection:
context.Background() and context.TODO() in non-test .go filesctx context.Context parametercontext.Background() or
context.TODO(): flag as RESILIENCE-4main(), init(), and test filesagent_action:
RESILIENCE-4 (WARN): Context fork at {file}:{line} — context.Background() used inside function that receives ctx.// Use the parent context to propagate deadlines and cancellation
ctx, cancel := context.WithTimeout(ctx, 5*time.Second)
defer cancel()
resp, err := client.Do(req.WithContext(ctx))
Report schema: see skills/conductor/shared-contracts.md.