☰
gstack /investigate 调试方法论指南:“不调查不修复”铁律与 3 次失败止损机制
2026/10/16 20:19:53 网站建设 项目流程

gstack /investigate 调试方法论指南:“不调查不修复”铁律与 3 次失败止损机制

【免费下载链接】gstackUse Garry Tan's exact Claude Code setup: 23 opinionated tools that serve as CEO, Designer, Eng Manager, Release Manager, Doc Engineer, and QA项目地址: https://gitcode.com/GitHub_Trending/gs/gstack

在 AI 辅助编程时代,gstack 的/investigate 技能把系统化调试(Systematic Debugging)变成了一条可执行的流水线:核心铁律是“不调查不修复”(No Fixes Without Root Cause),并配有3 次假设失败即止损的 3-strike rule,外加自动锁定调试作用域,让 AI 智能体像资深工程师一样做根因分析,而不是盲目试错改代码。本文面向新手完整拆解这套调试方法论。

为什么 AI 调试需要“铁律”?

很多 AI 编程工具遇到报错时的第一反应是“猜一个修复、跑一遍、再猜”。短期看似乎有效,长期看却制造了 whack-a-mole(打地鼠式)调试:每个没触及根因的修复,都会让下一个 bug 更难定位。

gstack 对这个问题开出的药方写在 investigate/SKILL.md 的 Iron Law 一节:

NO FIXES WITHOUT ROOT CAUSE INVESTIGATION FIRST.(未先完成根因调查,禁止任何修复。)

这条铁律被写进技能的指令层,意味着只要触发/investigate,AI 就被强制要求先调查、后修复——这正是 gstack 自称“23 位有主见的专家工具”之一(Debugger)的原因。

一键安装与触发 /investigate 技能

gstack 是 Y Combinator CEO Garry Tan 公开分享的 Claude Code 完整配置集,/investigate是其中负责调试的技能。

克隆安装步骤(需先安装 Claude Code):

git clone --single-branch --depth 1 https://gitcode.com/GitHub_Trending/gs/gstack.git ~/.claude/skills/gstack cd ~/.claude/skills/gstack && ./setup

安装后,以下自然语言即可触发调试技能(定义在技能触发词 triggers):

  • “debug this”(调试一下这个)
  • “fix this bug”(修复这个 bug)
  • “why is this broken”(为什么坏了)
  • “root cause analysis”(根因分析)

更妙的是,gstack 支持主动触发:当你报告 500 错误、贴出堆栈、说“昨天还好好的”时,AI 会自动调用/investigate而不是直接动手改代码。

/investigate 五阶段调试流水线

整个方法论分为五个阶段,每个阶段都有明确产出物,AI 不允许跳步。

阶段一:根因调查(先收集证据,不许有假设)

这是铁律的执行层。AI 必须按顺序完成 5 件事(Phase 1):

  1. 收集症状:读报错信息、堆栈、复现步骤;上下文不够时,一次只问你一个问题;
  2. 追踪代码路径:用 Grep 找所有引用,Read 理解逻辑,从症状一路回溯到可疑代码;
  3. 检查近期变更:对受影响文件跑git log看最近 20 条提交——回归类 bug 的根因往往就藏在 diff 里;
  4. 确定性复现:无法稳定触发就先继续收集证据;
  5. 查历史调查记录:同一块代码反复出 bug,是架构异味(architectural smell),不是巧合。

本阶段的强制产出是一句“Root cause hypothesis: ...”(根因假设)——一个具体的、可被证伪的论断,说明哪里坏了、为什么坏。

阶段二:模式分析(对照 6 种经典 bug 模式)

技能内置了一张模式速查表(Phase 2),帮 AI 快速归类问题:

模式特征签名排查方向
竞态条件间歇性、依赖时序共享状态的并发访问
空值传播NoMethodError、TypeError可选值缺少守卫
状态损坏数据不一致、部分更新事务、回调、钩子
集成故障超时、意外响应外部 API、服务边界
配置漂移本地正常、预发/线上失败环境变量、特性开关、数据库状态
陈旧缓存清缓存后恢复Redis、CDN、浏览器缓存

如果都对不上,AI 会用 WebSearch 搜索“{框架} {错误类型}”——但有一条安全细则:先脱敏再搜索,剥离主机名、IP、文件路径、客户数据,只搜错误类别,不搜原始报错,防止内部信息外泄。

阶段三:假设检验 + 3 次失败止损 ⚠️

这是整个方法论的精华。铁律不只约束“修复前”,也约束“修复中”:

  1. 先验证假设,再写任何修复:在疑似根因处加临时日志、断言,跑复现,看证据是否吻合;

  2. 假设错了就回阶段一:收集更多证据,“不要猜”(Do not guess);

  3. 3-strike rule(三次出局规则):连续 3 个假设全部落空,必须 STOP,不再自行硬试,转而向你呈现三个选项(3-strike rule):

    • A) 继续调查——我有个新假设(需描述清楚)
    • B) 升级给人类审查——需要熟悉系统的人
    • C) 加日志埋点,等下次复现时捕获

配套还有三条“危险信号”自检(Red flags):

  • 冒出“先快速修一下”的念头——没有“暂时修一下”这回事,要么修对,要么升级;
  • 还没追踪数据流就提出修复——这是在猜;
  • 每修一处就冒出另一处新问题——说明修错了层次,不是修错了代码。

阶段四:最小化实现(修根因,不修症状)

根因确认后,修复同样有纪律(Phase 4):

  • 最小 diff:改最少的文件、最少的行,抵制“顺手重构旁边代码”的冲动;
  • 回归测试双向证明:新测试必须在修复前失败(证明测试有意义)、修复后通过(证明修复有效);
  • 爆炸半径告警:如果修复涉及超过 5 个文件,AI 必须先停下来向你确认——继续、拆分、还是重新想个更聚焦的方案。

阶段五:验证与结构化报告

“修复完成”不等于“修好了”。阶段五(Phase 5)要求新鲜验证:重新复现原始 bug 场景,确认真的修好了,然后输出一份 DEBUG REPORT:

Symptom: 用户观察到了什么 Root cause: 实际错误原因 Fix: 改了什么(附 文件:行号) Evidence: 测试输出、复现验证 Regression test: 新测试的 文件:行号 Status: DONE / DONE_WITH_CONCERNS / BLOCKED

三条收尾铁律(Important Rules):

  • 3 次以上修复尝试失败 → 停下来质疑架构,而不是换第 4 个假设;
  • 永远不应用无法验证的修复——不能复现确认,就不要上线;
  • 永远不许说“这样应该能修好”——跑测试,拿出证据。

调试作用域自动锁定:防止“手滑改飞”

调试时 AI 最大的风险之一是:修着修着,顺手改了无关代码。gstack 用/freeze 技能解决它——把 Edit/Write 操作限制在指定目录内,越界修改不是警告,而是直接拦截(freeze/SKILL.md)。

/investigate内置了 Scope Lock 机制:形成根因假设后,AI 会自动找到包含受影响文件的最窄目录并冻结编辑范围(Scope Lock)。比如 bug 在src/auth/,本次调试会话就只能改src/auth/下的文件。想解除限制,跑/unfreeze即可。

也就是说,一条“为什么这个接口报 500?”背后,是根因调查 + 作用域隔离 + 假设止损三重防线在同时运转。

经验复利:每次调查都会被记住

/investigate的最后一环是把本次调查记入学习日志(Capture Learnings):根因摘要、置信度(1-10 分)、受影响文件列表,全部落盘到本地。

下次在同一块代码调试时,技能启动时会自动检索历史调查记录与近期学习,命中时你会看到一行提示:

Prior learning applied: auth-cookie-expiry (confidence 9/10, from 2026-08-12)

同一区域反复出 bug、历史上修过的问题形态,都会直接浮现在新调查里。文件列表还用于陈旧检测——如果相关文件被删了,对应经验会被标记失效。调试经验因此变成了项目级的复利资产。

新手上手:3 个实用建议

  1. 直接说症状,让 gstack 自己路由:贴报错 + 一句“昨天还能跑,今天 500”,主动触发机制会帮你进入/investigate,不必记命令;
  2. 配合 /freeze 手动锁范围:如果你已经知道问题大概在哪个模块,先/freeze锁住再开查,爆炸半径最小;
  3. 认真对待 STOP:3-strike 触发时选 C(加日志埋点)往往性价比最高——间歇性 bug 硬猜十个假设,不如埋点等一次真实复现。

总结

gstack 的/investigate把“怎么调试”从一种个人手感变成了一套可审计的流程:

  • 铁律:不调查不修复,修复必须可验证;
  • 止损:3 个假设失败即停手,升级给人类或转向埋点;
  • 隔离:自动冻结调试作用域,杜绝手滑改飞;
  • 复利:每次根因调查沉淀为项目记忆,越用越懂你的代码库。

想继续了解 gstack 的完整技能体系与项目结构,可以阅读 README.md、ARCHITECTURE.md,以及调试相关的测试用例 test/investigate-freeze-path.test.ts。

【免费下载链接】gstackUse Garry Tan's exact Claude Code setup: 23 opinionated tools that serve as CEO, Designer, Eng Manager, Release Manager, Doc Engineer, and QA项目地址: https://gitcode.com/GitHub_Trending/gs/gstack

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询