name: phx:investigate description: 调查Elixir/Phoenix代码中的错误或bug。使用Ralph Wiggum方法 - 先检查明显的东西,字面读取错误。添加–parallel进行4轨深度调查。 argument-hint: <bug描述> [–parallel] disable-model-invocation: true
调查 Bug
使用Ralph Wiggum方法调查bug:检查明显的东西,字面读取错误。
用法
/phx:investigate 用户在密码重置后无法登录
/phx:investigate UserController.show中的FunctionClauseError
/phx:investigate 复杂身份验证bug --parallel
参数
$ARGUMENTS = Bug描述或错误消息。添加 --parallel
进行深度4轨调查。
模式选择
当bug涉及3个以上模块、跨越多个上下文、是间歇性的或涉及并发,或用户说 --parallel/deep 时,使用并行模式(启动 deep-bug-investigator)。
否则:运行下面的顺序工作流。
调查工作流
步骤 0: 咨询复合文档
grep -rl "KEYWORD" .claude/solutions/ 2>/dev/null
如果存在匹配的解决方案,呈现它并询问:“应用此修复,还是重新调查?”
步骤 0a: 运行时自动捕获(Tidewave – 当可用时为主要方式)
如果检测到Tidewave MCP,从这里开始,而不是让用户粘贴错误。自动捕获运行时上下文:
mcp__tidewave__get_logs level: :error– 捕获最近错误- 解析堆栈跟踪,通过
mcp__tidewave__get_source_location与源代码关联 - 对于数据bug:使用
mcp__tidewave__execute_sql_query检查状态 - 对于逻辑bug:使用
mcp__tidewave__project_eval测试假设 - 对于UI bug:使用组件名称调用
mcp__tidewave__get_source_location
向用户呈现预填充的上下文:
从运行时自动捕获:
- 错误:{从日志解析的错误}
- 位置:{从get_source_location获取的文件:行号}
正在调查此问题。如有错误请更正。
这消除了应用和代理之间复制粘贴错误。 如果Tidewave不可用:转到步骤1。
步骤 1: 健全性检查
mix compile --warnings-as-errors 2>&1 | head -50
mix ecto.migrate
步骤 2: 复现
mix test test/path_test.exs --trace
tail -200 log/dev.log | grep -A 5 -i "错误\\|异常"
步骤 3: 字面读取错误
解析错误消息 — 检查 references/error-patterns.md。
步骤 4: 检查明显的东西(Ralph Wiggum清单)
文件保存了吗?Atom vs string?数据预加载了吗?模式匹配正确吗?Nil?返回值?服务器重启了吗?
LiveView表单保存静默失败? 首先检查changeset错误 — 不是视口、点击机制或JS。缺少必需嵌入式字段的 hidden_input 会导致 {:error, changeset} 且没有可见UI反馈。
步骤 5: IO.inspect / Tidewave project_eval
步骤 6: 识别根本原因
实际发生的情况 vs 应该发生的情况。
自主迭代
对于自主调试,使用 /ralph-loop:ralph-loop 并指定清晰的完成标准和 --max-iterations。
参考文献
references/error-patterns.md— 常见错误和清单references/investigation-template.md— 输出格式references/debug-commands.md— 调试命令和常见修复