| name | debugging |
| description | How to investigate a hard bug without tunnel-visioning on one method. Triggers: a hypothesis just failed, a second same-category fix attempt is about to be proposed, "I'm stuck", a long-running investigation. |
Debugging Without Tunnel Vision
Trying new hypotheses but testing all of them with the same method is still tunnel vision, even
though each attempt feels like progress. Cap it: 2 attempts per category below, then switch
categories. (Seen in #3475 — three synthetic unit-test probes for a bug only visible in a real
window.)
Categories
- Static/automated — unit tests, rendering-PNG tests, simplified scenarios
- Live observation — run + logs, breakpoints, user visually confirms
- Historical/comparative — bisect PRs/functionality,
git log/blame, cross-backend diff
- Structural isolation — minimal repro outside the app/framework
- External verification — read the actual upstream source, its issue tracker
- Specialized tooling — GPU frame capture, other domain debuggers
Self-invoke on the 2nd same-category miss — don't wait for the user to point this out (happened
on #3660: 4 rounds of GL/Skia-semantics patches before switching to live-observation logging).
Stop immediately if
- A sanity-check of your own method fails — the method is invalid, not "try harder within it."
- The symptom only shows in a context your current tool can't observe (e.g. a headless test can't
see a real window) — switch categories, don't refine the probe.
Communicate
Narrate switches ("ruled out X, trying Y") instead of going silent. Keep working if confident;
only stop to discuss when genuinely unsure which category to try next.