mcpField
G
gstack-openclaw-investigate

gstack-openclaw-investigate

github.com/garrytan开发138.1k292 次安装今天更新
代码仓库

关于 gstack-openclaw-investigate

gstack-openclaw-investigate 是面向开发者和编码 Agent 的系统化调试技能。它要求先查明并验证根因,再实施最小修复,并验证结果、保存报告。

主要功能

  1. 01追踪症状与近期变更
  2. 02检验根因假设
  3. 03三次假设失败后停止
  4. 04添加回归测试
  5. 05验证修复并保存报告

适用场景

  1. 01调查可复现的软件故障
  2. 02从近期变更追查回归问题
  3. 03记录已验证的修复供后续参考

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/garrytan/gstack --skill gstack-openclaw-investigate

安装后在 Claude Code 中输入/gstack-openclaw-investigate确认已加载。

详细介绍

系统化调试

铁律

未先调查根本原因,不得进行任何修复。

修复症状会导致打地鼠式调试。每次未解决根本原因的修复,都会让下一个 Bug 更难排查。找到根本原因,然后修复它。


阶段 1:调查根本原因

形成任何假设之前,先收集背景信息。

  1. 收集症状: 阅读错误消息、堆栈跟踪和复现步骤。如果用户提供的背景信息不足,每次只问一个问题。不要一次问五个问题。

  2. 阅读代码: 从症状出发,沿代码路径追溯潜在原因。搜索所有引用,并阅读故障点附近的逻辑。

  3. 检查近期变更:

    git log --oneline -20 -- <affected-files>
    

    之前能正常工作吗?发生了什么变化?如果是回归问题,根本原因就在差异中。

  4. 复现问题: 能否稳定触发这个 Bug?如果不能,在继续之前收集更多证据。

  5. 检查记忆中是否有同一方面以往的调试记录。同一文件反复出现 Bug,说明架构存在问题。

输出:“根本原因假设:……”……具体、可测试地说明哪里出了问题以及原因。


阶段 2:模式分析

检查这个 Bug 是否符合已知模式:

竞态条件……间歇性发生,依赖时序。检查对共享状态的并发访问。

Nil/null 传播……NoMethodError、TypeError。对可选值缺少保护。

状态损坏……数据不一致、部分更新。检查事务、回调和钩子。

集成故障……超时、响应异常。检查外部 API 调用和服务边界。

配置漂移……本地运行正常,但在 staging/prod 中失败。检查环境变量、功能标志和数据库状态。

缓存过期……显示旧数据,清除缓存后恢复。检查 Redis、CDN 和浏览器缓存。

另外还要检查:

  • 项目中是否有相关问题的已知记录
  • 同一方面以往修复的 Git 日志。同一文件反复出现 Bug,说明架构存在问题,并非巧合。

外部搜索: 如果 Bug 不符合已知模式,请在线搜索错误类型。先清理信息: 去除主机名、IP、文件路径、SQL 和客户数据。搜索错误类别,不要搜索原始消息。


阶段 3:测试假设

编写任何修复代码之前,先验证你的假设。

  1. 确认假设: 在疑似根本原因处添加临时日志语句、断言或调试输出。运行复现步骤。证据是否吻合?

  2. 如果假设不成立: 搜索该错误(先清理敏感数据)。返回阶段 1,收集更多证据。不要猜测。

  3. 三次失败规则: 如果 3 个假设都不成立,停止。告诉用户:

    “已测试 3 个假设,均不吻合。这可能是架构问题,而非简单 Bug。”

    可选方案:

    • 使用新假设继续调查(说明该假设)
    • 升级处理,交由人工审查(需要熟悉该系统的人)
    • 添加日志并等待(为相关区域添加埋点,下次捕获问题)

危险信号……如果出现以下情况,请放慢速度:

  • “先快速修一下”……没有所谓的“先”。要么正确修复,要么升级处理。
  • 尚未追踪数据流就提出修复方案……这是在猜测。
  • 每次修复都在其他地方引出新问题……问题出在错误的层,而非错误的代码。

阶段 4:实施

确认根本原因后:

  1. 修复根本原因,而非症状。 用最小的改动消除实际问题。

  2. 尽量减少差异: 触及的文件最少,改动的行数最少。克制重构相邻代码的冲动。

  3. 编写回归测试,确保:

    • 不应用修复时失败(证明测试有意义)
    • 应用修复后通过(证明修复有效)
  4. 运行完整测试套件。 不允许引入回归问题。

  5. 如果修复涉及 >5 个文件: 在继续之前,向用户说明影响范围。对于 Bug 修复而言,这个范围很大。


阶段 5:验证与报告

全新验证: 重现原始错误场景,并确认问题已修复。这是必做项。

运行测试套件。

输出一份结构化调试报告:

调试报告

  • 症状: 用户观察到的现象
  • 根本原因: 实际问题所在
  • 修复: 所做的更改及文件引用
  • 证据: 测试输出、证明修复有效的复现过程
  • 回归测试: 新测试的位置
  • 相关信息: 同一领域的既往错误、架构说明
  • 状态: DONE | DONE_WITH_CONCERNS | BLOCKED

将报告保存到 memory/,并使用当天日期命名,以便后续会话参考。


重要规则

  • 修复尝试失败 3 次以上:停止并质疑架构。 这不是假设失败,而是架构有误。
  • 绝不要应用无法验证的修复。 如果无法复现并确认,就不要发布。
  • 绝不要说“这应该能修复问题”。 必须验证并证明修复有效。运行测试。
  • 如果修复涉及超过 5 个文件: 继续之前先告知用户。
  • 完成状态:
    • DONE ……已找到根本原因、应用修复、编写回归测试,且所有测试均通过
    • DONE_WITH_CONCERNS ……已修复,但无法完全验证(例如,间歇性错误、需要在预发布环境中验证)
    • BLOCKED ……调查后仍不清楚根本原因,已升级处理

评论

支持 Markdown