| 1 | --- |
| 2 | name: principle-fix-root-causes |
| 3 | description: "Apply when debugging. Trace each symptom to its root cause and fix it there; reproduce first, ask why until you reach it, resist nil-check guards that silence crashes." |
| 4 | disable-model-invocation: true |
| 5 | --- |
| 6 | |
| 7 | # Fix Root Causes |
| 8 | |
| 9 | When debugging, do not fix symptoms. Trace every problem to its root cause and fix it there. |
| 10 | |
| 11 | **Why:** Symptom fixes accumulate. Each workaround makes the system harder to reason about, and the real bug remains. Root-cause fixes are slower upfront but reduce total debugging time. |
| 12 | |
| 13 | **Pattern:** |
| 14 | - Reproduce first |
| 15 | - Ask "why" until you hit the root cause |
| 16 | - Do not add guards (adding a nil check to silence a crash is a symptom fix) |
| 17 | - If a workaround needs a paragraph-long comment to justify it, the code is wrong (fix the code, not the comment) |
| 18 | - Check for the pattern, not just the instance (grep for the same pattern, fix all instances) |
| 19 | - When stuck, instrument. Don't guess (add logging, read the actual error) |
| 20 | |
| 21 | **Restart bugs: suspect state before code** |
| 22 | |
| 23 | When something "fails after restart," suspect stale persistent state first: config files, caches, lock files, serialized state. If clearing a state file restores behavior, prioritize state validation as the fix. |