Vatt 通用问题排查工作流
从一条模糊的问题报告到根治修复 + 复盘沉淀的完整排查流水线。骨架取自 systematic-debugging「先根因后修复」四阶段纪律;证据层取自 troubleshooting-facio-logs 日志 SOP 与 crash-debug 的 dump 解析;停点/关卡设计沿用 vatt-feat-dev-workflow 的经验。
适用场景
- Vatt(video-editor-next)的 Bug、崩溃、性能/内存、日志埋点、导出/播放类问题排查
- 需要 agent 严守「无根因不修复」纪律、证据先行、禁止盲修的场景
- 不适用:需求开发(用 vatt-feat-dev-workflow);纯环境问题(worktree/依赖装配)
步骤总览
| # | 节点 | 路径 | 绑定 |
|---|------|------|------|
| ① | 问题受理与初步分诊 | 主路径 | — |
| ② | 复现与分类路由 | 主路径 · 路由 | Crashpad dump 检查 |
| ③ | Crash 证据链 | 条件触发 | docs/rules/crash-debug.md |
| ④ | 日志证据链与时间线 | 主路径 | troubleshooting-facio-logs |
| ⑤ | 根因假设与最小验证 | 主路径 | systematic-debugging、react-rerender-memory-guide |
| ⑥ | 根治修复(先失败测试) | 主路径 | test-driven-development、checklists.md |
| ⑦ | 回归验证与用户验收 | 主路径 | verification-before-completion |
| ⑧ | 复盘沉淀 | 主路径 · 终点 | flow skill(可选) |
强制用户停点(agent 禁止擅自决定)
- ① 时间只有「刚才/今天」必须问到钟点;复现步骤、环境缺失必须问用户,禁止臆造
- ② 无法复现禁止硬猜根因——要更多信息,或经用户确认走「不可复现路径」仅做证据收集
- ③ 堆栈全在 libmlt/libmltsdl2 → SDK 层 bug,报备用户决定是否通知 SDK 维护者,禁止应用层绕行补丁
- ④ 报告时刻附近无相关日志行 → 停下重选文件或向用户要准确时间,禁止硬猜
- ⑤ 动手改代码前必须向用户陈述根因假设并获认可;累计 3 次修复失败 → 熔断,与用户讨论架构,禁止第 4 次盲修
- ⑥ 修复涉及用户可感知行为变更或超出问题范围 → 先确认;完整 diff 未经确认禁止 commit/push
- ⑦ 用户可感知的症状必须由用户复验并给出结论,禁止代用户宣布「已修复」
- ⑧ 写文档、改 checklist、建 flow 记录均为写操作,列建议清单经用户同意后执行
变量表
| 变量 | 形式 | 默认值 | 说明 · 出现节点 |
|------|------|--------|----------------|
| {{问题描述...}} | 多行 | 示例:播放含大量字幕的项目时内存持续膨胀 | 症状:功能/预期/实际 · ① |
| {{问题发生时间}} | 单行 | 示例:2026-07-17 14:05 +08:00 | 选启动日志的依据,必须到钟点 · ① ④ |
| {{运行环境=dev|打包版}} | 选项 | dev | 决定日志/dump 路径与可否加诊断日志 · ① |
| {{日志路径}} | 单行 | 无 | Report Problem 的 logFilePath,有则最高优先 · ④ |
使用注意
{{…}}在网站上不渲染表单,复制 prompt 后手动替换- 图上无条件分支与环:③ 的条件执行写在其 prompt 首行;⑦→⑤ 回路与 ⑤ 的 3 次失败熔断以节点内指令表达
- 修复代码若需合入 main,本工作流到 ⑧ 为止,衔接 vatt-feat-dev-workflow 的 ⑧准入⑨审查⑩PR,不重复维护
- 深度绑定 video-editor-next 的排障文档与 skill 集,移植需替换对应引用
反模式
- grep 所有 app-*.log 挑最吓人的错误 —— 先按报告时间锁定唯一启动日志
- ERROR/WARN 词命中当因果 —— 必须有时间戳交接连到症状路径
- 混合进程/模块下结论 —— main.*/ui.*/domain.*/engine.*/sdk.* 分行记录
- 「先快速修一下回头再查」 —— 症状修补即失败,铁律是先根因后修复
- 多个改动一起上 —— 无法归因且引入新 bug,一次只验一个变量
- CppGC/内存膨胀先怀疑 C++ 泄漏 —— 先查 React 高频订阅与 memo 击穿
- 文件 mtime 当证据 —— 以文件名 UTC 时间戳 + 文件内时间线验证为准
- 3 次失败后第 4 次盲修 —— 停下质疑架构,找用户讨论