From stv
Guides blackbox debugging: confirms AS-IS/TO-BE symptoms, traces callstacks step-by-step in trace.md, explores branches heuristically then exhaustively, verifies fixes via red-green tests.
npx claudepluginhub 2lab-ai/oh-my-claude --plugin stvThis skill uses the workspace's default tool permissions.
A debugging methodology that records everything like an airplane black box while hunting for the root cause.
Generates design tokens/docs from CSS/Tailwind/styled-components codebases, audits visual consistency across 10 dimensions, detects AI slop in UI.
Records polished WebM UI demo videos of web apps using Playwright with cursor overlay, natural pacing, and three-phase scripting. Activates for demo, walkthrough, screen recording, or tutorial requests.
Delivers idiomatic Kotlin patterns for null safety, immutability, sealed classes, coroutines, Flows, extensions, DSL builders, and Gradle DSL. Use when writing, reviewing, refactoring, or designing Kotlin code.
A debugging methodology that records everything like an airplane black box while hunting for the root cause. Core constraint: An unexplored branch is an unexamined branch.
Before starting, always confirm with the user:
The gap between AS-IS and TO-BE is the bug. Do not start debugging without confirmation.
Create a debugging log file:
~/.claude/stv/debugging/{issueID}-{YYYYMMDDhhmm}/trace.md
Follow the callstack one step at a time from the entry point, recording in this file.
Once a hypothesis is identified:
The above blackbox method covers how to trace. These principles cover how to think while debugging.
setTimeout/sleep 대신 조건 폴링을 써라.waitFor(() => condition, timeout) — 10ms 간격 폴링 + 타임아웃 필수.# Bug Trace: ISSUE-1234 — Soccer team names appear in results
## AS-IS: Movie search results include soccer team names mixed in
## TO-BE: Movie search results should only contain movies
## Phase 1: Heuristic Top-3
### Hypothesis 1: Search query runs without category filter
- `SearchController.cs:45` → calls `SearchService.Query()`
- `SearchService.cs:112` → check categoryFilter parameter → **passed as null** ✅ Likely
### Hypothesis 2: DB table join is incorrect
- `SearchRepository.cs:78` → check SQL → join is correct ❌ Ruled out
### Hypothesis 3: Response mapping mixes in other entities
- `SearchMapper.cs:34` → check mapping logic → correct ❌ Ruled out
## Conclusion: Hypothesis 1 confirmed — categoryFilter passed as null to SearchService.Query()