uninstrumented-llm-call
LLM API call without timing instrumentation hides latency bottlenecks
Applies to: JavaScript, Python, TypeScript
Why this matters
LLM API calls are the slowest part of most AI applications, often taking 1-10+ seconds. Without timing instrumentation you can't identify which calls are bottlenecks, compare prompt strategies, or detect regressions. Wrapping calls with ChatTimer makes latency visible and debuggable.
Catch it before it ships
pip install stablestack # or: npx stablestackstablestack # scans your project, PERF002 includedstablestack explain PERF002PERF002 is part of the Pro rule set. See pricing — the free tier ships 24 checks with no signup.
False positive in your codebase? Suppress a single line with # noqa: PERF002
More Performance checks
n-plus-one-query
Database or API calls inside loops can cause N+1 performance issues
PERF003redundant-trpc-calls
3+ tRPC calls to the same router suggest data should be fetched once.
PERF004subscription-waterfall
2+ child queries gated by the same parent query create a sequential waterfall.
PERF005render-blocking-font-import
@import url() for external font CDNs blocks rendering until the font CSS is fetched
PERF006uncached-public-page
Next.js page does database queries but does not export revalidate, dynamic, or generateStaticParams — every request triggers a fresh SSR.
PERF007no-cdn-configured
App Runner service detected without a CloudFront distribution — static assets are not edge-cached and clients are limited to HTTP/1.1.