cpp-sanitizer-triageFind and read memory and concurrency bugs in C and C++ with AddressSanitizer, UndefinedBehaviorSanitizer, ThreadSanitizer and MemorySanitizer: build the whole test suite with address and undefined together, run ThreadSanitizer alone in its own job, treat MemorySanitizer as a separate Clang-only effo
dotnet-memory-growthFind leaks and heap bloat in .NET services and tune the GC for containers. Watches dotnet-counters (gc-heap-size, gen-2-gc-count, loh-size, alloc-rate, working-set) to see which generation grows, takes two dotnet-gcdump files under steady load and diffs them to find the growing type and its root, ch
dotnet-threadpool-starvationDiagnose .NET services that slow to a crawl under load while CPU stays low, and sync-over-async deadlocks. Confirm starvation with dotnet-counters (rising threadpool-queue-length, slowly climbing threadpool-thread-count, idle CPU), find the blocked callers with dotnet-stack or a dotnet-dump (clrstac
go-gc-tuningTune Go memory and garbage collection for a service in a container. Observes first with GODEBUG=gctrace=1 and runtime/metrics (live heap, GC cycles, GC CPU seconds), cuts allocation before touching knobs using a heap profile read with alloc_space, gcflags=-m escape output and benchmarks with -benchm
go-goroutine-leakFind and fix goroutines that never exit in a Go service. Take goroutine profiles from /debug/pprof/goroutine at two times under the same load, diff them with go tool pprof -base, group by identical stack, read each group's wait reason (chan send, chan receive, select, IO wait, semacquire) to name th
go-race-triageHunt data races, concurrent map writes and deadlocks in Go. Run go test -race -count=N -shuffle=on in CI on every change, read a race report's access stacks first, then the goroutine creation sites below them, and decide ownership before locking: confine state to one goroutine or guard a documented
jvm-classpath-conflictResolve JVM dependency conflicts that appear only at runtime. Reads NoSuchMethodError, AbstractMethodError and LinkageError as one class existing in two versions with the wrong one winning: finds the supplying jar with -Xlog:class+load in the failing runtime, shows why with mvn dependency:tree -Dver
jvm-gc-tuningDiagnose and tune JVM garbage collection pauses and heap sizing. Turns on unified GC logging first (-Xlog:gc*,gc+heap=debug) and reads four numbers: pause p99 and max, allocation rate, promotion rate and live set after a full or mixed collection. Sizes the heap from the live set, expresses it with M
jvm-oom-triageWork out which memory ran out when a Java process dies or is killed. Classifies by exact message and exit evidence before collecting anything (heap space, GC overhead, Metaspace, direct buffer memory, native thread, or a kernel OOM kill from native memory), sets HeapDumpOnOutOfMemoryError with a dur
jvm-thread-dump-triageDiagnose a hung, slow or stalled JVM service from thread dumps and flight recordings. Capture three dumps 5 to 10 seconds apart with jcmd, keep only the threads that stay put, group by top frame and state (socket read means a slow dependency, many BLOCKED on one monitor means find the lock owner, a
native-core-dump-analysisGet a usable backtrace from a crash in a production native binary (C, C++, Rust, Go with cgo): make the next crash capturable before it happens with ulimit -c and kernel.core_pattern (host-wide, so containers need it set on the node, or piped to systemd-coredump and read with coredumpctl), keep symb
native-linking-errorsDiagnose C and C++ link failures, load failures and ABI mismatches by deciding first whether the fault is at link time or load time, then reading the artefact rather than the source: demangle the first undefined symbol, find its definer with nm, check archive order, extern \"C\" and the libstdc++ du
node-memory-leakFind why a Node.js server's memory climbs or it dies with heap out of memory. Places the growth first with process.memoryUsage() and v8.getHeapStatistics() (heapUsed is JavaScript objects, external and arrayBuffers are Buffers and addons, the rest is native), compares heap_size_limit with the contai
node-module-format-errorsUntangle ESM and CommonJS failures in Node and bundled projects. Establish three facts before touching config (which loader resolves the file, the module type from package.json type or the .mjs and .cjs extension, and which exports condition your import selects), check the Node version because requi
python-import-failuresDiagnose Python imports that behave differently by directory, tool or machine by asking the interpreter instead of guessing at paths: print where a module resolved with m.__file__ and m.__spec__, read python -m site, rerun under python -I to drop the cwd and user site, and pip show -f for what a dis
python-memory-growthFind why a long-running Python process keeps growing or never returns memory. Separates a leak from retention from allocator behaviour by comparing tracemalloc totals (started with PYTHONTRACEMALLOC=25) against RSS over hours; if tracemalloc grows, diffs two snapshots with compare_to(old, 'lineno')
python-native-wheel-failuresFix a Python package that builds from source, fails to compile, or will not import because no wheel matches the platform. Prove whether a wheel exists for the exact target before any compiler (pip debug --verbose for accepted tags, then pip download with --only-binary=:all: and --platform), then cho
python-typing-migrationIntroduce mypy or pyright into an untyped Python codebase, or tighten an existing config, without a flag day. Record a baseline first (basedpyright --writebaseline, or mypy-baseline) so CI fails only on new errors, order work by import graph with leaf modules and I/O boundaries first, raise strictne
rust-unsafe-reviewReview, justify or remove unsafe code and FFI in Rust: require a written safety contract on every unsafe block (invariants relied on, who upholds them, why they hold here), shrink each block to one operation behind a safe API, ask first whether safe code or a vetted crate does the job, then test und
typescript-strictness-migrationTurn on TypeScript strict mode, or stricter flags, in a codebase that does not pass it, without a flag day. Enable one flag per branch and size it with tsc --noEmit error counts, ratchet the large strictNullChecks step per directory with a second tsconfig that lists only passing paths, forbid @ts-ig