.claude/skills/ln-653-runtime-performance-auditor/SKILL.md
Runtime performance audit worker (L3). Checks blocking IO in async, unnecessary allocations, sync sleep in async, string concat in loops, missing to_thread for CPU-bound, redundant data copies. Returns findings with severity, location, effort, recommendations.
npx skillsauth add cbbkrd-tech/jl-finishes ln-653-runtime-performance-auditorInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Paths: File paths (
shared/,references/,../ln-*) are relative to skills repo root. If not found at CWD, locate this SKILL.md directory and go up one level for repo root.
Specialized worker auditing runtime performance anti-patterns in async and general code.
MANDATORY READ: Load shared/references/task_delegation_pattern.md#audit-coordinator--worker-contract for contextStore structure.
Receives contextStore with: tech_stack, best_practices, codebase_root.
Domain-aware: Supports domain_mode + current_domain.
Parse context from contextStore
Scan codebase for violations
scan_pathasync def blocks first, then check for violations inside themCollect findings with severity, location, effort, recommendation
Calculate score using penalty algorithm
Return JSON result to coordinator
What: Synchronous file/network operations inside async functions, blocking event loop
Detection (Python):
async def functionsopen(, .read_bytes(), .read_text(), .write_bytes(), .write_text(), Path(...).(read|write)requests.get, requests.post, urllib.requestsubprocess.run(, subprocess.call(await asyncio.to_thread(...) or await loop.run_in_executor(...)Detection (Node.js):
async function or arrow async, grep for fs.readFileSync, fs.writeFileSync, child_process.execSyncSeverity:
Recommendation: Use aiofiles, asyncio.to_thread(), or loop.run_in_executor() for file operations; use httpx.AsyncClient instead of requests
Effort: S (wrap in to_thread or switch to async library)
What: List comprehension where generator expression suffices
Detection:
len([x for x in ...]) - allocates list just to count; use sum(1 for ...)any([x for x in ...]) - allocates list for short-circuit check; use any(x for ...)all([x for x in ...]) - same pattern; use all(x for ...)set([x for x in ...]) - use set comprehension {x for x in ...}"".join([x for x in ...]) - use generator directly "".join(x for x in ...)Severity:
Recommendation: Replace [...] with generator (...) or set comprehension {...}
Effort: S (syntax change only)
What: time.sleep() inside async function blocks event loop
Detection:
time\.sleep inside async def blocksawait some_async_call() ... time.sleep(N) ... await another_call()Severity:
time.sleep() in async API handler (freezes all concurrent requests)time.sleep() in async background taskRecommendation: Replace with await asyncio.sleep(N)
Effort: S (one-line change)
What: Building string via += inside loop (O(n^2) for large strings)
Detection:
result, output, html, text with += inside for/while loop+= containing string operand inside loop bodySeverity:
Recommendation: Use list.append() + "".join(), or io.StringIO, or f-string with "".join(generator)
Effort: S (refactor to list + join)
to_thread for CPU-BoundWhat: CPU-intensive synchronous code in async handler without offloading to thread
Detection:
async def, find CPU-intensive operations:
json.loads(large_data), json.load(file)PIL.Image.open, cv2.imreadhashlib, bcrypt.hashpwlxml.etree.parse, BeautifulSoup(asyncio.to_thread() or executorSeverity:
Recommendation: Wrap in await asyncio.to_thread(func, *args) (Python 3.9+) or loop.run_in_executor(None, func, *args)
Effort: S (wrap in to_thread)
What: Unnecessary .copy(), list(), dict() when data is only read, not mutated
Detection:
data = list(items) where data is only iterated (never modified)config = config_dict.copy() where config is only readresult = dict(original) where result is returned without modificationSeverity:
Recommendation: Remove unnecessary copy; pass original if not mutated
Effort: S (remove copy call)
MANDATORY READ: Load shared/references/audit_scoring.md for unified scoring formula.
Return JSON to coordinator:
{
"category": "Runtime Performance",
"score": 7,
"total_issues": 5,
"critical": 0,
"high": 2,
"medium": 2,
"low": 1,
"findings": [
{
"severity": "HIGH",
"location": "app/infrastructure/messaging/job_processor.py:444",
"issue": "Blocking IO: input_path.read_bytes() inside async function blocks event loop",
"principle": "Async Best Practices / Non-Blocking IO",
"recommendation": "Use aiofiles or await asyncio.to_thread(input_path.read_bytes)",
"effort": "S"
}
]
}
to_thread/run_in_executorshared/references/audit_scoring.mdshared/references/audit_output_schema.mdVersion: 1.0.0 Last Updated: 2026-02-04
testing
When the user wants to plan a content strategy, decide what content to create, or figure out what topics to cover. Also use when the user mentions "content strategy," "what should I write about," "content ideas," "blog strategy," "topic clusters," or "content planning." For writing individual pieces, see copywriting. For SEO-specific audits, see seo-audit.
development
When the user wants to create competitor comparison or alternative pages for SEO and sales enablement. Also use when the user mentions 'alternative page,' 'vs page,' 'competitor comparison,' 'comparison page,' '[Product] vs [Product],' '[Product] alternative,' or 'competitive landing pages.' Covers four formats: singular alternative, plural alternatives, you vs competitor, and competitor vs competitor. Emphasizes deep research, modular content architecture, and varied section types beyond feature tables.
development
Write B2B cold emails and follow-up sequences that get replies. Use when the user wants to write cold outreach emails, prospecting emails, cold email campaigns, sales development emails, or SDR emails. Covers subject lines, opening lines, body copy, CTAs, personalization, and multi-touch follow-up sequences.
development
When the user wants to reduce churn, build cancellation flows, set up save offers, recover failed payments, or implement retention strategies. Also use when the user mentions 'churn,' 'cancel flow,' 'offboarding,' 'save offer,' 'dunning,' 'failed payment recovery,' 'win-back,' 'retention,' 'exit survey,' 'pause subscription,' or 'involuntary churn.' This skill covers voluntary churn (cancel flows, save offers, exit surveys) and involuntary churn (dunning, payment recovery). For post-cancel win-back email sequences, see email-sequence. For in-app upgrade paywalls, see paywall-upgrade-cro.