Backward call-chain tracing - systematically trace bugs from error location back through call stack to original trigger. Adds instrumentation when needed.
/plugin marketplace add lerianstudio/ring/plugin install ring-default@ringThis skill inherits all available tools. When active, it can use any tool Claude has access to.
find-polluter.shBugs often manifest deep in the call stack (git init in wrong directory, file created in wrong location, database opened with wrong path). Your instinct is to fix where the error appears, but that's treating a symptom.
Core principle: Trace backward through the call chain until you find the original trigger, then fix at the source.
Use root-cause-tracing when:
Relationship with systematic-debugging:
When NOT to use:
Error: git init failed in /Users/jesse/project/packages/coreawait execFileAsync('git', ['init'], { cwd: projectDir })WorktreeManager.createSessionWorktree(projectDir) → Session.initializeWorkspace() → Session.create() → test at Project.create()projectDir = '' (empty!) → resolves to process.cwd() → source code directory!const context = setupCoreTest() returns { tempDir: '' } → accessed before beforeEach!When you can't trace manually, add instrumentation before the problematic operation:
console.error('DEBUG git init:', { directory, cwd: process.cwd(), stack: new Error().stack });
Critical: Use console.error() in tests (logger may not show). Run: npm test 2>&1 | grep 'DEBUG'
Analyze: Look for test file names, line numbers, patterns (same test? same parameter?).
If something appears during tests but you don't know which test:
Use the bisection script: @find-polluter.sh
./find-polluter.sh '.git' 'src/**/*.test.ts'
Runs tests one-by-one, stops at first polluter. See script for usage.
Symptom: .git in packages/core/ (source code)
Trace chain: git init in process.cwd() ← empty cwd ← WorktreeManager ← Session.create() ← test accessed context.tempDir before beforeEach ← setupCoreTest() returns { tempDir: '' }
Root cause: Top-level variable initialization accessing empty value
Fix: Made tempDir a getter that throws if accessed before beforeEach
Defense-in-depth: (1) Project.create() validates (2) WorkspaceManager validates (3) NODE_ENV guard (4) Stack trace logging
Flow: Found immediate cause → Can trace up? (yes → trace backwards) → Is this source? (no → keep tracing | yes → fix at source) → Add validation at each layer → Bug impossible
NEVER fix just where the error appears. Trace back to find the original trigger.
console.error() not logger (may be suppressed)new Error().stack shows complete chain5-level trace → fixed at source (getter validation) → 4 layers defense → 1847 tests, zero pollution
Creating algorithmic art using p5.js with seeded randomness and interactive parameter exploration. Use this when users request creating art using code, generative art, algorithmic art, flow fields, or particle systems. Create original algorithmic art rather than copying existing artists' work to avoid copyright violations.
Applies Anthropic's official brand colors and typography to any sort of artifact that may benefit from having Anthropic's look-and-feel. Use it when brand colors or style guidelines, visual formatting, or company design standards apply.
Create beautiful visual art in .png and .pdf documents using design philosophy. You should use this skill when the user asks to create a poster, piece of art, design, or other static piece. Create original visual designs, never copying existing artists' work to avoid copyright violations.