fix-bug
Bug 修复流水线。当用户报告 Bug 或想要修复已知问题时使用。调用时需附带 Bug 描述或复现步骤。自动串联:Bug 分析 → 创建 Worktree → 代码修复 → 集成测试 → E2E 测试 → 全量验证 → 合入 main。
소스 정보
- 저장소
- studyzy/tapd-ai-cli
- 최근 소스 활동
- 2026년 4월 17일 06:09
- 감지된 SKILL.md 언어
- 중국어
- 스타
- 60
- 포크
- 15
설치 방법
기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.
소스 파일 검토
설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.
SKILL.md 표시 중
SKILL.md
소스 지침 · 읽기 전용 미리보기- name
- fix-bug
- description
- Bug 修复流水线。当用户报告 Bug 或想要修复已知问题时使用。调用时需附带 Bug 描述或复现步骤。自动串联:Bug 分析 → 创建 Worktree → 代码修复 → 集成测试 → E2E 测试 → 全量验证 → 合入 main。
- argument-hint
- [Bug 描述或复现步骤]
# Bug 修复流水线
从 Bug 描述出发,自动完成:Bug 分析与定位 → 创建隔离 Worktree → 代码修复 → 补充测试 → 全量验证 → 合入主分支 → 清理 Worktree。
适用于 **tapd-ai-cli** 项目——一个纯 Go CLI 工具,无前端、无 E2E 测试。
---
## 流程总览
```
用户输入 Bug 描述
|
v
[阶段 1] Bug 分析与定位
|
v
确认修复方案
|
v
[阶段 2] 创建 Worktree(隔离工作区)
|
v
[阶段 3] 代码修复
|
v
[阶段 4] 补充单元测试
|
v
[阶段 5] 全量验证(fmt / lint / build / test / coverage)
| ← 失败则修复代码并重新验证
v
[阶段 6] 合入主分支并清理 Worktree
|
v
完成
```
---
## 步骤
### 阶段 1:Bug 分析与定位
1. **获取 Bug 信息**
用户在调用此 SKILL 时应附带 Bug 描述。如果未提供,使用 **AskUserQuestion tool** 询问:
> "请描述您遇到的 Bug,包括复现步骤、期望行为和实际行为。"
2. **阅读项目上下文**
阅读以下文件获取项目背景:
- `CODEBUDDY.md` — 项目架构、构建命令、代码规范
- `docs/requirement.md` — 需求规格
3. **分析 Bug 根因**
使用 **Agent tool**(subagent_type=Explore)深入分析 Bug:
- 根据 Bug 描述定位相关代码文件
- 项目目录结构:`cmd/tapd/`(入口)、`internal/cmd/`(命令层)、`internal/client/`(API 客户端层)、`internal/config/`(配置层)、`internal/output/`(输出层)、`internal/model/`(数据模型层)
- 追踪数据流:参数解析 → API 调用 → 响应转换 → 格式化输出
- 分析可能的根因
- 检查是否有相关的已有测试覆盖该场景
4. **提出修复方案并确认**
使用 **AskUserQuestion tool** 向用户展示分析结果并确认修复方案:
- Bug 根因分析
- 受影响的文件和模块
- 修复方案(如有多种方案,列出各方案的优缺点)
- 可能的影响范围
等待用户确认修复方案后再继续。
### 阶段 2:创建 Worktree(隔离工作区)
5. **确认当前分支状态**
在创建 worktree 前,先检查当前分支状态:
```bash
git status
git branch --show-current
```
- 如果当前有未提交的更改,使用 **AskUserQuestion tool** 提醒用户并询问是否继续(worktree 是独立的,不影响当前工作区的更改)。
- 记录当前所在的主分支名称(通常是 `main` 或 `master`),后续合入时使用。
6. **创建隔离 Worktree**
使用 git 命令在项目父目录下创建 worktree,避免在项目内部产生额外目录:
```bash
# 获取项目根目录的父目录路径
PROJECT_ROOT=$(git rev-parse --show-toplevel)
WORKTREE_DIR="$(dirname "$PROJECT_ROOT")/worktree/fix-<bug简述>"
# 基于主分支创建新分支和 worktree
git worktree add -b fix-<bug简述> "$WORKTREE_DIR" <主分支名>
```
- 分支命名:使用 `fix-<bug简述>` 格式,例如 `fix-auth-token-error`
- Worktree 路径:`../worktree/fix-<bug简述>`(相对于项目根目录)
- 基于步骤 5 中记录的主分支创建
创建成功后,使用 `cd` 切换到新的 worktree 目录中。后续所有代码修改和测试都在此工作区中进行。
### 阶段 3:代码修复
7. **创建任务列表**
使用 **TaskCreate tool** 根据确认的修复方案创建详细的任务列表,将修复工作拆分为可跟踪的小任务。
8. **实现代码修复**
按照任务列表逐一修复代码:
- 使用 **Read tool** 阅读需要修改的文件
- 使用 **Edit tool** 进行精确修改
- 遵循项目编码规范(参见 `CODEBUDDY.md` 代码规范章节):
- 代码注释和文档用中文,错误消息用英文
- 每个导出函数/结构体/接口必须有中文文档注释
- 函数不超过 80 行,文件不超过 800 行,嵌套不超过 4 层
- 错误作为最后一个返回值,必须处理
- `switch` 必须有 `default`
- 业务逻辑禁止 `panic` 和 `goto`
- 命令层(`internal/cmd/`)只做参数解析和输出格式化,禁止直接构造 HTTP 请求
- API 调用必须经过客户端层(`internal/client/`)
- 每完成一个任务,使用 **TaskUpdate tool** 标记为完成
注意:
- 保持修改范围最小化,仅修复 Bug 本身,不做无关的重构
- 确保修改不引入新的问题
### 阶段 4:补充单元测试
9. **判断是否需要补充测试**
如果 Bug 场景已有测试覆盖且测试本身无误,可跳过。否则必须补充。
10. **编写单元测试**
- 查看对应包下已有的 `*_test.go` 文件作为参考
- 编写针对本次 Bug 修复的测试用例,确保:
- 测试覆盖 Bug 的复现场景(修复前该测试应失败)
- 测试验证修复后的正确行为
- 测试边界条件和异常情况
- API 客户端层测试使用 `net/http/httptest` 做 mock server
- 命令层测试验证参数解析和输出格式
- 测试文件命名:`xxx_test.go`,测试函数命名:`TestXxx`
### 阶段 5:全量验证
11. **代码格式化和静态检查**
```bash
make fmt
make lint
```
如果 lint 报错,修复后重新检查。
12. **构建**
```bash
make build
```
如果构建失败,分析错误并修复代码,然后重新构建。
13. **运行全量测试**
```bash
make test
```
如果测试失败,分析失败原因并修复代码/测试,然后重新运行。
14. **检查测试覆盖率**
```bash
make coverage
```
确保覆盖率 >= 60%。如果低于阈值,补充测试用例。
15. **验证循环**
如果步骤 11-14 中任何一步失败:
- 分析错误日志
- 修复代码或测试
- 从步骤 11 重新开始完整验证流程
- 最多重试 3 轮。如果 3 轮后仍有失败,暂停并报告问题,等待用户指导。
### 阶段 6:合入主分支并清理 Worktree
仅在阶段 5 的所有验证步骤全部通过后才执行此步骤。
16. **在 Worktree 中提交变更**
在当前 worktree 中提交所有修复代码:
```bash
git add <相关文件> # 不要添加无关文件
git commit -m "fix: <Bug 简述>
<详细描述修复内容和根因>"
```
17. **合入主分支**
使用 **AskUserQuestion tool** 询问用户是否将修复合入主分支:
> "所有验证已通过并已提交。是否将修复合入主分支(<主分支名>)?"
如果用户确认:
a. **切回主工作区**
```bash
cd <项目根目录> # 切回原来的主工作区
```
b. **合并修复分支到主分支**
使用 fast-forward 优先的合并策略,避免无冲突时产生多余的 merge commit:
```bash
git merge <worktree分支名> --ff
```
- 如果修复分支是主分支的直接后继(无分叉),git 会自动 fast-forward,不产生 merge commit
- 如果存在分叉但无冲突,会产生 merge commit(这是必要的)
- 如果合并冲突,手动解决冲突后继续
c. **删除 Worktree 和修复分支**
合并成功后,清理 worktree 目录和修复分支:
```bash
# 删除 worktree
PROJECT_ROOT=$(git rev-parse --show-toplevel)
git worktree remove "$(dirname "$PROJECT_ROOT")/worktree/fix-<bug简述>"
# 删除修复分支
git branch -d <worktree分支名>
```
18. **推送到远程仓库(可选)**
使用 **AskUserQuestion tool** 询问用户是否需要推送到远程仓库:
> "修复已合入主分支。是否需要推送到远程仓库?"
如果用户确认,执行推送。
---
## 完成时的输出
```
## Bug 修复完成
**Bug:** <Bug 简述>
**根因:** <根因分析>
**修复方案:** <方案简述>
### 修改的文件
- <文件列表及修改说明>
### 新增/修改的测试
- <测试文件及覆盖场景>
### 验证结果
- fmt/lint 通过
- 构建通过
- 全量测试通过
- 覆盖率 >= 60%
### Git 信息
- 修复分支:<分支名>
- 已合入:<主分支名>
- commit: <commit hash>
- worktree 已清理
Bug 修复全流程已完成。
```
---
## 护栏
- **严格按阶段顺序执行**:每个阶段必须完成后才能进入下一阶段
- **修复方案必须经用户确认**:不得跳过用户确认直接修改代码
- **必须在 Worktree 中修改代码**:所有代码修改必须在隔离的 worktree(`../worktree/` 目录)中进行,不得直接在主工作区修改
- **修改范围最小化**:仅修复 Bug 本身,不做无关重构或功能增强
- **Bug 场景必须有测试覆盖**:确保 Bug 不会回归
- **验证必须全部通过**:fmt、lint、build、test、coverage 全部通过后才能提交
- **失败时修复而非跳过**:验证失败时必须修复代码并重新验证
- **重试有上限**:验证循环最多 3 轮,超过后暂停等待用户指导
- **合入前确认**:合入主分支前必须征求用户同意
- **合入后清理**:合并成功后必须删除 `../worktree/` 下的 worktree 目录和修复分支,保持仓库整洁
- **合并策略**:使用 `--ff` 合并,能 fast-forward 时不产生 merge commit,保持提交历史简洁
- **推送前确认**:推送前必须征求用户同意
- **使用 Task tool 跟踪进度**:创建任务跟踪每个阶段的进度
- **遵循项目编码规范**:Go 代码遵循 `CODEBUDDY.md` 中的代码规范和 Go 编码规范
- **架构分层约束**:命令层不直接构造 HTTP 请求,API 调用必须经过客户端层
- **错误处理规范**:使用明确的退出码(0=成功,1=认证错误,2=未找到,3=参数错误,4=API 错误)
GitHub에서 보기