/meridian:debug — Systematic Debugging
4-phase systematic debugging with decision logging. Uses the protocol from references/discipline-protocols.md.
Arguments
<description>— Bug description or error message--plan <id>— Associate with a specific plan--phase <id>— Associate with a specific phase
Procedure
Phase 1: Investigation
- Read the full error message and stack trace
- Identify the exact file, line, and function
- Check recent changes:
git log --oneline -10andgit diff - Reproduce the error by running the failing test/command
- Record findings
Phase 2: Pattern Recognition
- Categorize the error type:
- Import/module error
- Type error / null reference
- Logic error / wrong behavior
- Race condition / timing
- Configuration / environment
- Data integrity
- Search codebase for similar patterns
- Check if this is a known issue pattern
Phase 3: Hypothesis
- Form a specific hypothesis: "The error occurs because X"
- Identify evidence that would confirm/refute
- Test with minimal change
- Record hypothesis and result as a decision:
PYTHONPATH=$MERIDIAN_HOME uv run --project $MERIDIAN_HOME -- python -c "
from scripts.db import connect, get_db_path
from scripts.state import create_decision
conn = connect(get_db_path('.'))
create_decision(conn, '<hypothesis and result>', category='approach',
rationale='<evidence>', phase_id=<phase_id_or_None>)
conn.close()
"
Phase 4: Implementation
- Fix at the source, not the symptom
- Run the failing test — must pass now
- Run full test suite — no regressions
- Commit the fix with descriptive message
Escalation Rule
After 3 failed fix attempts:
- STOP fixing
- Record a deviation decision
- Re-examine assumptions
- Consider if the problem is architectural
- May need to re-plan the current phase
PYTHONPATH=$MERIDIAN_HOME uv run --project $MERIDIAN_HOME -- python -c "
from scripts.db import connect, get_db_path
from scripts.state import create_decision
conn = connect(get_db_path('.'))
create_decision(conn, 'Escalation: 3+ failed fixes on <issue>. Likely architectural.',
category='deviation', rationale='<what was tried>')
conn.close()
"
Output
Report:
- Root cause identified
- Fix applied (file:line)
- Tests passing
- Decision logged