.claude/skills/systematic-debugging/SKILL.md
Use when encountering any bug, test failure, or unexpected behavior. Enforces a strict reproduce-first, root-cause-first, failing-test-first debugging workflow before fixing.
npx skillsauth add baekenough/oh-my-customcode systematic-debuggingInstall 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.
엄격한 디버깅 워크플로우다. 버그, 테스트 실패, 예기치 않은 동작을 다룰 때 사용한다.
핵심 목적은 세 가지다.
다음 규칙은 예외 없이 따른다.
이 과정을 어기는 것은 디버깅 실패로 본다.
다음 상황이면 이 스킬을 사용한다.
다음 핑계는 허용하지 않는다.
이 스킬을 사용할 때는 내부적으로 아래 항목을 반드시 고정한다.
이 7개 중 빠진 항목이 있으면 아직 끝난 일이 아니다.
반드시 아래 순서로 진행한다.
Trigger: When any external dependency, tool, or resource appears unavailable.
Before declaring a task blocked or unsolvable, exhaust this checklist:
| # | Workaround Path | Check | |---|----------------|-------| | 1 | Environment bypass | Can the dependency be bypassed in the current environment? | | 2 | Alternative tool | Is there an alternative tool, library, or approach? | | 3 | Partial solution | Can the task be partially completed without the dependency? | | 4 | Install/configure | Can the dependency be installed or configured now? | | 5 | Existing credentials | Are related tokens, auth files, or configs already present? |
Rules:
Output format:
[Blocker Triage]
├── Dependency: {what is unavailable}
├── Path 1: {attempted} → {outcome}
├── Path 2: {attempted} → {outcome}
├── Path 3: {attempted} → {outcome}
└── Verdict: {proceed with workaround N | genuinely blocked — reason}
If verdict is "genuinely blocked", escalate to user with full triage report. Do NOT silently abandon the task.
먼저 문제를 축약한다.
출력 형식:
Problem: <expected> but got <actual> under <condition>
증상과 추측을 섞지 않는다.
Good: Product detail API returns 500 when brand is null.
Bad: Serializer is broken because brand mapping seems wrong.
수정 전에 실패를 다시 볼 수 있어야 한다.
우선순위:
규칙:
재현 불가 상태에서 해야 할 일:
관측 가능한 사실만 모은다.
항상 확인할 것:
멀티 컴포넌트 문제에서는 경계마다 확인한다.
예시:
각 경계에서 확인할 것:
문제 위치를 특정하기 전에는 고치지 않는다.
원인 후보를 하나만 세운다.
형식:
Hypothesis: <root cause> because <evidence>
좋은 가설의 조건:
나쁜 가설의 예:
원인을 소스까지 거슬러 올라간다. 오류가 깊은 스택에서 보이면 증상이 아니라 입력의 출처를 추적한다.
수정 전에 실패를 고정한다.
우선순위:
규칙:
자동화 테스트를 쓸 수 있으면 test-driven-development 스킬을 함께 사용한다.
수정은 하나의 가설만 다룬다.
허용:
금지:
실패하면 즉시 다시 Phase 1 또는 Phase 3으로 돌아간다. 이전 가설이 틀렸다는 뜻이다.
아래를 모두 만족해야 종료한다.
간헐 버그라면 한 번 통과로 끝내지 않는다. 반복 실행 또는 조건 변화 하 검증이 필요하다.
다음 상황이면 멈추고 프레임을 다시 잡는다.
여러 번 시도해도 재현이 안 되면:
재현이 안 되는데 코드를 바꾸는 것은 금지다.
세 번 연속으로 수정이 빗나가면 이렇게 판단한다.
이 시점부터는 "네 번째 땜질"이 아니라 구조 논의가 필요하다.
실패 테스트나 동등한 재현 장치를 만들 수 없으면, 완료로 선언하지 않는다. 최소한 재현 명령과 관측 결과를 남긴다.
아래 생각이 들면 즉시 멈추고 앞 단계로 돌아간다.
실행 중에는 아래 체크리스트를 기준으로 스스로 검증한다.
이 스킬의 완료 기준은 "코드가 바뀌었다"가 아니다.
완료 기준:
이 네 가지가 없으면 디버깅은 끝난 것이 아니다.
This skill includes reference documents for specific debugging techniques:
root-cause-tracing.md — Tracing bugs back through call chains to the original triggerdefense-in-depth.md — Adding validation at every layer to make bugs structurally impossiblecondition-based-waiting.md — Replacing arbitrary delays with condition-based pollingfind-polluter.sh — Bisection script for finding test pollution sourcescondition-based-waiting-example.ts — Complete implementation of condition-based waiting utilitiesdevelopment
Generate and maintain a persistent codebase wiki — LLM-built interlinked markdown knowledge base (Karpathy LLM Wiki pattern)
development
Use the project wiki as RAG knowledge source — search wiki pages to answer codebase questions before exploring raw files
tools
Analyze task trajectories to propose reusable SKILL.md candidates from successful patterns
data-ai
hada.io RSS feed monitoring for AI agent/harness articles with automated /scout analysis