ワンクリックで
verify-workflow-debug
系统化根因调试——先建反馈循环再假设。当遇到 bug、测试失败、意外行为,或提到"调试""debug""为什么不工作""crash"
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
メニュー
系统化根因调试——先建反馈循环再假设。当遇到 bug、测试失败、意外行为,或提到"调试""debug""为什么不工作""crash"
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
SOC 職業分類に基づく
结构化脑暴——发散探索 + 收敛评估。当想法模糊、面临开放性问题或需要方案对比,或提到"脑暴""想法""方案对比""怎么办"
恢复保存的工作上下文。当新 session 需要继续之前的工作,或提到"恢复""restore""继续上次"
保存工作上下文。当需要保存当前工作状态供后续 session 恢复,或提到"保存""save""checkpoint""挂起"
架构决策记录(ADR)。当面临技术选型、架构决策、方案取舍需要记录,或提到"ADR""决策记录""为什么这样做"
发布或导出检查 → Go/No-Go → 归档。当审查通过后需要上线或交付最终产物,或提到"发布""上线""ship""Go/No-Go"
合并 PR → 等待 CI → 验证生产。当 PR 已创建需要合并到主分支并验证部署,或提到"合并""merge""PR""land"
| name | verify-workflow-debug |
| description | 系统化根因调试——先建反馈循环再假设。当遇到 bug、测试失败、意外行为,或提到"调试""debug""为什么不工作""crash" |
docs/bugs/<name>/01-root-cause.md(根因记录)build-quality-tdd/SKILL.mddocs/bugs/<name>/01-root-cause.md → build-workflow-execute(重新 build)或 verify-workflow-review(重新 review)在尝试任何修复之前:
读错误信息仔细 — 不跳过错误。读完整堆栈。记下行号、文件路径、错误码。
稳定复现 — 能可靠触发吗?准确步骤是?每次必现吗?不可复现 → 收集更多数据,不要猜。
构建最小复现 — 去掉无关代码/配置直到只剩 bug 本身。简化输入到最小触发用例。最小复现让根因变得明显,防止修复症状而不是原因。
查最近变更 — git diff、最近提交、新依赖、配置变更、环境差异。
多组件系统加诊断埋点 — 当系统跨多个组件(CI → build → signing,API → service → DB)时:
向上追溯数据流 — 错误在调用栈深处时:从最终错误点向上追溯。错误值从哪来?谁带着错误值调用了这里?不断追溯直到找到源头。在源头修复,不在症状处修。
在确定模式后再修复:
build-quality-tdd/SKILL.md 写失败测试。先有测试再修复。没有复现测试的修复 = 没有修复。连续 3 次修复失败 = 架构问题:
迹象:
STOP 并质疑基础:
与人类讨论后再尝试更多修复。这不是假设失败——这是错误的架构。
测试在代码变更后失败:
├── 代码被测试覆盖了?
│ └── YES → 测试还是代码错了?
│ ├── 测试过时 → 更新测试
│ └── 代码有 bug → 修复代码
├── 改了不相关的代码?
│ └── YES → 副作用 → 检查共享状态、import、全局变量
└── 测试本来就 flaky?
└── 检查时序问题、顺序依赖、外部依赖
构建失败:
├── 类型错误 → 读错误信息,检查对应位置类型
├── Import 错误 → 模块存在?exports 匹配?路径正确?
├── 配置错误 → 检查构建配置文件的语法/schema
├── 依赖错误 → 检查 package.json,重装依赖
└── 环境错误 → Node 版本、OS 兼容性
运行时错误:
├── TypeError: Cannot read property 'x' of undefined
│ └── 某个值不该 null/undefined → 向上追溯数据流
├── 网络错误 / CORS
│ └── 检查 URL、headers、服务端 CORS 配置
├── 渲染错误 / 白屏
│ └── 检查 error boundary、console、组件树
└── 意外行为(无错误)
└── 关键路径加日志,验证每一步数据
时间压力下使用安全降级,不崩溃:
// 安全默认 + 警告(不崩溃)
function getConfig(key: string): string {
const value = process.env[key];
if (!value) {
console.warn(`Missing config: ${key}, using default`);
return DEFAULTS[key] ?? '';
}
return value;
}
// 优雅降级(不展示破碎功能)
function renderChart(data: ChartData[]) {
if (data.length === 0) {
return <EmptyState message="暂无数据" />;
}
try {
return <Chart data={data} />;
} catch (error) {
console.error('Chart render failed:', error);
return <ErrorBoundaryFallback />;
}
}
Phase 1 读错误信息 + 稳定复现 + 最小复现 → Phase 2 找工作示例对比差异 → Phase 3 假设"N+1 查询是根因" → Phase 4 写复现测试(RED)→ 修复 → 测试通过(GREEN)。根因可追溯,修复可验证。
"试试改这个"、"再改那个"、"改三个地方一起跑"。没有读错误信息、没有复现步骤、没有单一假设、没有复现测试。修了症状不知道根因,同类 bug 在其他位置复发。
templates/bug/01-root-cause.md,落盘到 docs/bugs/<name>/01-root-cause.mdtemplates/bug/02-fix-plan.md,落盘到 docs/bugs/<name>/02-fix-plan.md根因记录必须包含:Status Summary、症状、影响范围、时间线、复现步骤、复现证据、调查过程、根因、非根因排除、修复方向、Done When。
修复计划必须包含:Status Summary、修复目标、最小改动范围、复现测试、修复步骤、验证计划、回归风险、Follow-up Actions、Done When。
build-quality-tdd/SKILL.md输出或记录必须包含:
| 说辞 | 现实 | 后果 |
|---|---|---|
| "快速修复,之后调查" | 没有之后。先在根因,再修复。 | 修症状不修根因,同类 bug 在 3 个不同位置反复出现,累计修复时间 10x 于单次根因调查。 |
| "先改改看行不行" | 猜。先确定根因。 | 猜测式调试平均浪费 45 分钟(行业数据),系统化调试平均 15 分钟。每次猜错都在掩盖真实线索。 |
| "改多个地方一次跑" | 无法隔离有效变更。 | 两个变更互相干扰,通过纯属巧合。下一次只改其中一个时故障复现,且无法判断是哪个变更"真正"修复了问题。 |
| "跳过测试,手动验证" | 手动测试不能证明边界情况。 | 手动验证遗漏的边界条件(并发、空值、超时)以生产偶发故障形式出现,排查需 2-8 小时。 |
| "紧急情况没时间走流程" | 系统化调试比猜更快。 | 紧急中猜测式修复引入新 bug 的概率 ~40%,二次事故的停机损失 > 系统化调试多花的 10 分钟。 |
| "再试一次就好"(第 3+ 次) | 3 次失败 = 架构问题。质疑,不继续猜。 | 第 4、5、6 次尝试不会比前 3 次更好。每次失败都引入更多不确定性,最终不得不全部回退,浪费时间且代码更乱。 |
违反字面规则就是违反精神。 没有灰色地带。
| 失败场景 | 处理方式 |
|---|---|
| 无法复现 bug | 收集更多数据(日志、监控、用户上下文),不要猜测。不可复现 = 不能确定修复 |
| 修复后测试仍失败 | STOP。数一下尝试次数。< 3 次 → 回 Phase 1 重新分析;≥ 3 次 → 进入 Phase 4.5 架构质疑门 |
| 修复引入回归 | 回退修复,重新分析根本原因和副作用 |
| 找不到工作参考示例 | 扩展搜索范围到同技术栈的其他项目,或寻求人类指导 |
| 复现测试本身有缺陷 | 修复测试,确保 RED→GREEN 循环有效。测试没错之前不要修代码 |
全部意味着:STOP。回到 Phase 1。
注意来自人类伙伴的信号:
全部意味着:STOP。回到 Phase 1。
docs/bugs/<name>/01-root-cause.mddocs/bugs/<name>/02-fix-plan.md