home / skills / falkicon / mechanic / s-debug

s-debug skill

/.agent/skills/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-debug

Review the files below or copy the command above to add this skill to your agents.

Files (4)
SKILL.md
3.8 KB
---
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`.

Overview

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.

How this skill works

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.

When to use it

  • You see runtime errors like "attempt to index nil value" or nil dereferences.
  • When addons trigger "Action blocked by Blizzard" or other taint-related behavior.
  • If features fail only in combat or protected frames display bugs.
  • After a crash or repeatable error when you need reliable evidence before editing code.
  • When API deprecations or changes around major patches may be the root cause.

Best practices

  • Always collect runtime output via addon.output(agent_mode=true) after a /reload before changing code.
  • Use MechanicLib:Log() for instrumentation so logs are copyable and accessible to the agent.
  • Form concise hypotheses (If X then Y because Z) and design a single test to falsify each hypothesis.
  • Isolate the addon: reproduce with minimal code and disabled dependencies to reduce noise.
  • Use MCP tools (lua.queue, lua.results, addon.lint) rather than ad-hoc shell commands for reproducible evidence.

Example use cases

  • Diagnose a nil-value crash by capturing addon.output and inspecting the stack trace to find the missing API result.
  • Track down taint propagation after an "Interface action failed" report by instrumenting frame creation and secure hooks.
  • Resolve combat lockdown failures by identifying protected calls attempted during combat and moving them to secure templates or event-driven handlers.
  • Verify an API change after a patch by queuing Lua evals to check return values and behavior across units.

FAQ

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.