Trace errors backward through execution paths to identify the true root cause.
Copy the install command and let the AI configure it · recommended for beginners
Please install the "root-cause-tracing" skill from askskill: 1. Download https://raw.githubusercontent.com/microsoft/FluidFramework/main/.agency/plugins/nori/skills/root-cause-tracing/SKILL.md 2. Save it as ~/.claude/skills/root-cause-tracing/SKILL.md 3. Reload skills and tell me it's ready
Help me perform root-cause tracing: an API endpoint returns an incorrect user status. Start from the failure point, trace backward through the call chain, show each layer’s inputs, outputs, and key state changes, and identify the most likely source issue. If information is missing, suggest what logs or breakpoints to add.
A backward call-chain investigation showing suspicious steps, evidence, and recommended instrumentation points.
I found abnormal order amounts in a downstream report. Trace backward from the bad output to the original data write source, analyze which processing step may have introduced the incorrect value, and provide ways to validate each hypothesis.
A reverse data-flow analysis showing where the bad value likely appeared, why, and how to verify it.
The program crashes deep inside nested function calls, but the visible error message is unclear. Use the call stack to trace backward step by step, find the earliest point where the state became invalid, and suggest a minimal reproduction and fix.
A root-cause report including the earliest invalid state, reproduction steps, and fix recommendations.
Bugs 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.
digraph when_to_use {
"Bug appears deep in stack?" [shape=diamond];
"Can trace backwards?" [shape=diamond];
"Fix at symptom point" [shape=box];
"Trace to original trigger" [shape=box];
"Bug appears deep in stack?" -> "Can trace backwards?" [label="yes"];
"Can trace backwards?" -> "Trace to original trigger" [label="yes"];
"Can trace backwards?" -> "Fix at symptom point" [label="no - dead end"];
}
Use when:
Error: git init failed in /Users/jesse/project/packages/core
What code directly causes this?
await execFileAsync('git', ['init'], { cwd: projectDir });
WorktreeManager.createSessionWorktree(projectDir, sessionId)
→ called by Session.initializeWorkspace()
→ called by Session.create()
→ called by test at Project.create()
What value was passed?
projectDir = '' (empty string!)cwd resolves to process.cwd()Where did empty string come from?
const context = setupCoreTest(); // Returns { tempDir: '' }
Project.create('name', context.tempDir); // Accessed before beforeEach!
When you can't trace manually, add instrumentation:
// Before the problematic operation
async function gitInit(directory: string) {
const stack = new Error().stack;
console.error('DEBUG git init:', {
directory,
cwd: process.cwd(),
nodeEnv: process.env.NODE_ENV,
stack,
});
await execFileAsync('git', ['init'], { cwd: directory });
}
Critical: Use console.error() in tests (not logger - may not show)
Run and capture:
npm test 2>&1 | grep 'DEBUG git init'
Analyze stack traces:
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 created in packages/core/ (source code)
Trace chain:
git init runs in process.cwd() ← empty cwd parametercontext.tempDir before beforeEach{ tempDir: '' } initiallyRoot cause: Top-level variable initialization accessing empty value
Fix: Made tempDir a getter that throws if accessed before beforeEach
Also added validation at multiple layers:
digraph principle {
"Found immediate cause" [shape=ellipse];
"Can trace one level up?" [shape=diamond];
"Trace backwards" [shape=box];
"Is this the source?" [shape=diamond];
"Fix at source" [shape=box];
…
Create a custom skill with structure, documentation, and optional bundled scripts.
Update technical documentation after code changes are completed.
Generate Fluid-style PR content, push branches, and open GitHub pull requests.
Explains how to use abilities effectively before starting any conversation.
Break large, long-running tasks into manageable chunks and preserve context.
Turn rough ideas into actionable designs through structured questioning and validation.
Trace bugs backward through call stacks to find the original trigger.
Analyze bugs and tracebacks to find root causes and likely fixes.
Systematically investigate bugs before fixing them with a four-phase debugging framework.
Debug issues with a four-phase method that finds root causes before fixes.
Systematically reproduce, isolate, diagnose, and fix tricky software or environment issues.
Systematically investigate bugs, test failures, and unexpected behavior before fixing.