home / skills / falkicon / mechanic / s-debug
This skill helps diagnose and fix WoW addon bugs using evidence-based debugging, runtime instrumentation, and hypothesis-driven investigation.
npx playbooks add skill falkicon/mechanic --skill s-debugReview the files below or copy the command above to add this skill to your agents.
---
name: s-debug
description: >
Diagnose and fix bugs using evidence-based investigation. Requires runtime
evidence before fixes—never guess based on code alone. Covers hypothesis-driven
debugging, instrumentation logging, Lua errors, taint issues, combat lockdown,
and API failures. Triggers: error, bug, debug, fix, crash, taint, nil value,
diagnose, hypothesis, runtime, evidence, instrumentation.
---
# Debugging WoW Addons
Systematic debugging and error recovery for WoW addons.
## Related Commands
- [c-debug](../../commands/c-debug.md) - Reload loop workflow for finding and fixing issues
- [c-review](../../commands/c-review.md) - Full code review (includes debug step)
## MCP Tools (Use These First)
> **MANDATORY**: ALWAYS use MCP tools directly instead of the shell.
| Task | MCP Tool |
|------|----------|
| Get All Output | `addon.output(agent_mode=true)` |
| Lint Addon | `addon.lint(addon="MyAddon")` |
| Scan Deprecations | `addon.deprecations(addon="MyAddon")` |
| Queue Lua Eval | `lua.queue(code=["GetMoney()"])` |
| Get Eval Results | `lua.results()` |
## Capabilities
1. **Evidence-Based Debugging** — Hypothesis-driven investigation with runtime instrumentation and log proof
2. **Error Analysis** — Parse Lua errors, identify root cause in stack traces
3. **Taint Investigation** — Track secure/insecure code interaction and "Action blocked" issues
4. **Combat Issues** — Debug lockdown-related failures and protected frame issues
5. **API Failures** — Handle deprecated or changed APIs (Midnight 12.0 prep)
## Routing Logic
| Request type | Load reference |
|--------------|----------------|
| Evidence-based debugging, hypothesis-driven | [references/evidence-based-debugging.md](references/evidence-based-debugging.md) |
| Lua errors, nil values | [references/error-patterns.md](references/error-patterns.md) |
| Debug workflow, isolation | [references/debugging-strategies.md](references/debugging-strategies.md) |
| Error tracking (BugGrabber) | [../../docs/integration/errors.md](../../docs/integration/errors.md) |
| Troubleshooting guide | [../../docs/integration/troubleshooting.md](../../docs/integration/troubleshooting.md) |
| Structured logging | [../../docs/integration/console.md](../../docs/integration/console.md) |
| Frame inspection | [../../docs/integration/inspect.md](../../docs/integration/inspect.md) |
## Debug Output Best Practice
> **CRITICAL**: Use `MechanicLib:Log()` instead of `print()` for all debug output.
| Feature | `print()` | `MechanicLib:Log()` |
|---------|-----------|---------------------|
| Agent access | ❌ Requires screenshot | ✅ `addon.output` retrieves directly |
| Filtering | ❌ None | ✅ Source + category filters |
| Copyable | ❌ No | ✅ Yes, via Console export |
```lua
-- ✅ Correct: Agent can see this in addon.output
local MechanicLib = LibStub("MechanicLib-1.0", true)
if MechanicLib then
MechanicLib:Log("MyAddon", "Debug: value=" .. tostring(val), MechanicLib.Categories.CORE)
end
-- ❌ Avoid: Spams chat, requires screenshot
print("[MyAddon] Debug: value=" .. tostring(val))
```
## Quick Reference
### Get Addon Data (Compressed for AI)
**Ask** user to `/reload` and confirm, then:
```bash
addon.output(agent_mode=true)
```
### Common Error Patterns
- `attempt to index nil value`: API returned nil, check if unit exists or data is loaded.
- `Action blocked by Blizzard`: You tried to call a protected function in combat.
- `Interface action failed`: Taint has spread to a secure UI component.
### Systematic Workflow
1. **Gather Evidence**: **Ask** user to `/reload`, wait for confirmation, then `addon.output(agent_mode=true)`
2. **Isolate**: Can you reproduce with minimal code?
3. **Hypothesis**: "If X then Y because Z"
4. **Fix & Validate**: Apply minimal fix, **ask** user to `/reload` and confirm, then verify with `addon.output`.
This skill diagnoses and fixes World of Warcraft addon bugs using evidence-driven investigation. It enforces runtime proof before proposing changes, avoiding guesses from static code alone. The skill covers Lua errors, taint and combat lockdown issues, instrumentation logging, and API failures common around major client updates.
It guides a hypothesis-driven workflow: gather runtime evidence, isolate the fault, form a testable hypothesis, instrument with logs, and validate fixes with repeatable reloads. It uses MCP tools for capturing output, queuing Lua evals, and retrieving results, and prefers MechanicLib:Log for shareable, filterable debug output. The skill interprets stack traces, taint paths, and protected-frame failures to identify root causes.
What evidence should I collect before asking for a fix?
Collect a fresh addon.output(agent_mode=true) after a /reload and any relevant lua.results entries from queued evaluations. Include reproduction steps and whether the issue occurs in combat.
Why use MechanicLib:Log instead of print()?
MechanicLib:Log produces filtered, copyable output retrievable by addon.output so the agent can inspect logs directly without screenshots.