# Bug Fix Loop Coordinator

> Bug修复循环协调者。测试完成后，读取技术问题追踪台，按P0→P1→P2顺序协调修复，每修复一个触发针对性回归测试，循环直至P0+P1全清，输出可上线结论。所有信息通过文档传递，不依赖对话历史。触发词：「全自动修复循环」「按Bug清单修复」「修复所有问题」「循环修复到上线」「开始bug修复循环」。

- Skill: `tashangkd/bug-fix-loop-coordinator` (Agent Skill, multi-file: 6 files)
- Install (CLI): `npx skillmds@latest add tashangkd/bug-fix-loop-coordinator`
- Raw SKILL.md: https://api.skillmd.com/api/skills/tashangkd/bug-fix-loop-coordinator/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: TashanGKD (https://skillmd.com/u/tashangkd)
- Updated: 2026-09-22
- Page: https://skillmd.com/skills/tashangkd/bug-fix-loop-coordinator

---


# Bug 修复循环协调者（bug-fix-loop-coordinator）

> **核心定位**：测试→修复→回归的自动循环引擎。
> 信息传递媒介：全程通过文档（追踪台、修复记录、轮次追踪表）交换状态，不依赖对话历史。
> 终止条件：`技术问题追踪台.md` 中 P0=0 且 P1=0，全量回归通过。

---

## 知识导航表（执行前必读）

| 层级 | 文档 | 用途 |
|---|---|---|
| **D0 认知根** | `_内部总控/认知结构/L1_系统性文档/技术架构思维维度/知识库/测试后Bug修复到上线全流程_调研_20260324.md` | 修复流程最佳实践：先复现→TDD→最小改动→回归 |
| **D0-AI** | `_内部总控/认知结构/L1_系统性文档/技术架构思维维度/知识库/AI_Agent平台生产架构_调研_20260325.md` | **AI 平台架构全景（Layer 0-9，含代码示例和生产数据）**；修复排序规则见 `_内部总控/开发规范/AI平台架构分层框架.md`（薄包装层）|
| **D1 项目追踪** | `项目群/[项目]/技术架构师/技术问题追踪台.md` | 信息源：所有 Bug 的状态（未解决/修复中/已修复/回归通过）|
| **D2 轮次记录** | `项目群/[项目]/3_开发计划/test-round-tracker.md` | 循环进度追踪：第几轮，上一轮的状态快照 |
| **D3 测试规格** | `项目群/[项目]/测试工程师/test-spec-*.md`（最新版）| 回归测试的执行标准 |
| **D4 修复记录** | `项目群/[项目]/内部总控/修复记录.md` | 每次修复的 TDD 证据 |

---

## 核心设计原则

```
单一信息源：技术问题追踪台.md 是唯一的 Bug 状态来源
  → 所有角色只写入追踪台，不通过对话传递 Bug 信息

文档驱动循环：
  追踪台有未解决P0/P1 → 继续循环
  追踪台P0+P1清零 + 全量回归通过 → 退出循环

TDD 约束（通过 bug-fix-tdd-guard Rule 强制执行）：
  修复顺序：先写失败测试 → 再改代码 → 再运行全量CI
  
最小改动原则：
  每个 Bug 独立 PR，不合并，不借机重构
```

---

## 激活后立即执行

```
Step 0  【确认项目路径】
        从对话上下文确认当前项目目录
        Read: 项目群/[项目]/技术架构师/技术问题追踪台.md
        → 若文件不存在：
          告知用户「技术问题追踪台不存在，请先运行测试工程师（关卡C）生成追踪台」
          停止执行
        → 存在则继续

Step 1  【轮次记录初始化】
        Read: 项目群/[项目]/3_开发计划/test-round-tracker.md
        → 若不存在：从模板创建（见附录A）
        → 记录当前轮次号 N = 已有轮次数 + 1
        更新 test-round-tracker.md，写入本轮开始状态：
          - 轮次 N
          - 开始时间
          - 本轮来自上一轮的遗留 Bug 数（读追踪台统计）

Step 1.5  【D0 产品认知根确认——在处理任何 Bug 之前】
        
        这一步确保修复循环始终在「产品意图」的框架下运行，
        而不是纯粹根据技术严重程度做决策。
        
        Read: 项目群/[项目]/产品经理/产品定义.md（或等价路径）
        
        提取并记录以下内容作为本轮循环的「产品上下文」：
        
        1. 核心价值承诺（产品对用户最重要的 3 条承诺）
        2. 各功能闭环（A/B/C/D/E/F）的用户价值
        3. 产品诚信强制项（标注了「强制设计规则」的条目）
        4. 当前 MVP 边界（哪些在范围内，哪些不在）
        
        将此上下文写入本轮循环的「产品视角评估基准」（内存中持有，dispatch 时传递给 fixer）
        
        IF 产品定义不存在：
          → 警告：「⚠️ 未找到产品定义文档。修复循环将只能做「不影响用户行为」的技术修复。
                    涉及用户可见行为的 Bug 需要产品定义支持，请先创建产品定义。」
          → 继续，但标记所有涉及用户行为的 Bug 为「需人工决策」

Step 1.8  【架构层分类（AI 平台专项，替代纯 P0/P1/P2 排序）】
        Read: _内部总控/开发规范/AI平台架构分层框架.md
        
        对追踪台中所有未解决 Bug 进行架构层标注：
          Layer 0/1（部署模型/状态管理）：状态不持久化、build lock、任务可见性等
          Layer 2（并发模型）：rate limit、并发死锁、资源竞争
          Layer 3（LLM 调用管理）：截断、context 不完整、token 超限
          Layer 4（数据隔离）：跨用户数据串扰
          Layer 5（Agent 框架）：路由绕过、工作流入口混乱、工具调用错误
          Layer 6-9（可观测/安全/性能/扩展）：监控缺失、注入风险等
          前端：UI/交互/显示问题
        
        修复排序原则（从 AI平台架构分层框架.md）：
          1. 先修低层（Layer 0/1 优先于 Layer 5 优先于前端）
          2. 同层内：AI 确定先修，AI 不确定列出选项等用户决策
          3. 不用 P0/P1/P2 作为主排序轴（仅作同层内参考）
        
        构建架构层排序后的执行队列：
        arch_sorted_queue = [
          [Layer 1] BUG-XX（状态管理问题），
          [Layer 3] PRIN-01-XX（LLM截断）× N，
          [Layer 5] BUG-YY（Agent框架问题），
          [前端] BUG-ZZ（UI问题），
          ...
        ]
        
        输出摘要：
        「🏗️ 架构层分析完成：
         Layer 1（状态管理）：N 个
         Layer 3（LLM调用）：N 个
         Layer 5（Agent框架）：N 个
         前端：N 个
         
         修复将从 Layer 1 开始，逐层推进。」

Step 2  【读取 Bug 清单 + 产品影响评估 + 构建层序队列】
        Read: 技术问题追踪台.md
        
        统计（辅助参考）：
        - P0_bugs = [未解决的P0列表]
        - P1_bugs = [未解决的P1列表]
        - P2_bugs = [未解决的P2列表]
        
        【产品影响判断（标注，不改变层序主轴）】
        使用 Step 1.5 的「产品上下文」，对每个 Bug 判断产品重要性：
        □ 破坏产品核心价值承诺 → 标注「产品高优」
        □ 涉及产品诚信问题 → 标注「产品高优」
        □ 出现在认知飞轮关键节点 → 标注「产品高优」
        
        【构建层序修复队列（主轴：架构层，第二轴：AI确定/不确定）】
        参考 Step 1.8 的层分类结果，构建最终队列：
          [L1 层 Bug（AI确定）] → [L1 层 Bug（AI不确定，等决策）] →
          [L3 层 Bug（AI确定）] → ... → [FE Bug] → ...
        
        同层内「产品高优」标注的 Bug 排在其他 Bug 前面
        
        IF 所有 Bug 均已清零：
          → 跳至 Step 7（触发全量回归）
        
        输出摘要：
        「📊 第 N 轮修复循环（层序）
         架构层：L1=N | L3=N | L5=N | FE=N
         辅助：P0=N | P1=N | P2=N
         修复顺序：先低层（L1→FE），同层内 AI 确定优先」

Step 3  【按层序逐条修复】
        FOR each bug in 层序队列:
          Step 3.1  输出当前Bug信息：
                    「🔧 处理 Bug: [TC-XXX] [架构层] [Bug描述]
                     复现步骤：[从追踪台读取]
                     涉及模块：[从追踪台读取]
                     AI 确定？[是/否]」
          
          IF AI 不确定（多方案或涉及设计决策）：
            → 列出选项，等待用户决策后再修复
          
          Step 3.2  确定负责角色：
                    - 后端Bug → role-后端开发
                    - 前端Bug → role-前端开发
                    - AI行为Bug → role-AI工程师
                    
          Step 3.3  Spawn fixer 子智能体执行修复（含产品上下文）：
                    Read: 修复记录.md（了解是否有类似修复参考）
                    
                    从 Step 1.5 的产品上下文中，提取与此 Bug 相关的功能描述
                    
                    调用 /fixer 子智能体（隔离上下文，防止开发偏见），传入：
                    ---
                    模式：单Bug修复（模式A）
                    Bug ID：[TC-XXX]
                    Bug描述：[从追踪台读取的完整描述]
                    失败现象：[从追踪台读取]
                    复现步骤：[从追踪台读取]
                    期望结果：[从 test-spec 读取对应验收标准]
                    涉及模块：[从追踪台读取]
                    代码库路径：[当前项目路径]
                    追踪台路径：[技术问题追踪台.md 完整路径]
                    修复记录路径：[修复记录.md 完整路径]
                    
                    【产品上下文（来自 Step 1.5）—— fixer D0 使用】
                    产品定义路径：[产品定义.md 完整路径]
                    相关功能描述：[从产品定义中提取与此 Bug 相关的功能段落]
                    用户价值承诺：[该功能对用户的核心价值，1-2句话]
                    产品诚信约束：[如有强制设计规则，列出]
                    ---
                    
                    ⚠️ 注意：fixer 必须先完成 D0（产品认知根确认）再开始技术修复。
                    如果 fixer 报告「这是产品设计问题，不是实现问题」→ 写入产品问题追踪台，不做技术修复。
                    
                    ⚠️ 为什么用子智能体而不是开发角色：
                    子智能体从干净上下文启动，不知道「协调者知道什么」，
                    以纯粹的怀疑者视角分析 Bug，避免「既知道答案又验证答案」的偏见。
          
          Step 3.4  等待 fixer 子智能体返回报告，解析结果：
                    
                    IF fixer 返回 status=success：
                      → 确认 TDD 证据存在（失败测试 + 通过测试 + CI 通过）
                      → 确认追踪台已更新（fixer 会自动更新，但要验证）
                      → 输出：「✅ [TC-XXX] fixer 报告修复成功」
                      → 继续 Step 3.5（独立回归验证）
                    
                    IF fixer 返回 status=escalated（3次失败）：
                      → 输出：「⚠️ [TC-XXX] fixer 三次修复失败，需人工介入」
                      → 更新追踪台状态为「需人工介入」
                      → 暂停当前 P0 处理，等待用户指令
                    
                    IF fixer 返回 status=cannot_reproduce：
                      → 输出：「⚠️ [TC-XXX] 无法复现，复现步骤需要更新」
                      → 向用户报告，请求提供更多复现信息
                    
                    输出：「▶️ 触发针对 [TC-XXX] 的独立回归验证...」
                    触发 role-测试工程师（回归模式），传入：
                      - 复现该Bug的测试用例
                      - 相关联的测试用例（影响范围内的）
                    
          Step 3.5  解析回归结果：
                    IF 回归通过:
                      更新 技术问题追踪台.md → 状态: 「已修复（轮次N，日期）」
                      追加到 修复记录.md（TDD证据：测试ID + 修复说明）
                      输出：「✅ [TC-XXX] 修复验证通过」
                    ELSE:
                      输出：「❌ [TC-XXX] 回归失败，重新分析...」
                      更新追踪台状态为「修复中（验证失败）」
                      回到 Step 3.2 重新分析根因（最多3次，超过则标记为「需人工介入」）
          
          Step 3.6  IF 本 Bug 标记「需人工介入」:
                    输出：「⚠️ [TC-XXX] 三次修复未通过回归，需要人工介入」
                    等待用户指令（暂停循环，不继续下一个P0）

Step 4  【P0 全清检查】
        Re-Read: 技术问题追踪台.md
        IF 仍有未解决P0:
          → 回到 Step 3（处理下一个P0）
        ELSE:
          → 输出「✅ P0 全清，开始处理 P1」
          → 继续 Step 5

Step 5  【P1 修复循环（类同 Step 3，严重程度 P1）】
        FOR each bug in P1_bugs（实时从追踪台读取最新列表）:
          [与 Step 3.1~3.6 相同的流程，severity = P1]
          
        P1 处理完毕后：更新 test-round-tracker.md（本轮P1修复完成）

Step 6  【本轮 P2 处置（默认自动跳过，除非调用方明确指定处理）】
        Read: P2_bugs（当前未解决P2列表）
        
        Read: p2_handling 参数（从调用方输入读取，默认 = "skip"）
        
        IF p2_handling == "skip"（默认）:
          → 输出 P2 清单（仅列表，不等待）：
            「📋 跳过 [P2_count] 个 P2（记入技术债，不阻止上线）：
             [ID] [描述]
             ...
             ⏩ 自动进入全量回归验证」
          → 将所有 P2 在追踪台标记为「已知技术债（跳过上线）」
          → 直接进入 Step 7
        
        IF p2_handling == "fix_all":
          → 与 P1 相同流程逐个修复，完成后进入 Step 7
        
        IF p2_handling == "ask"（仅当调用方明确传入时）:
          → 输出 P2 清单，暂停等待用户决策：
            「P2 不阻止上线。现在修还是跳过？[A/B/C]」
          → 等待用户回复

Step 7  【全量回归测试（上线前最终验证）】
        输出：「▶️ P0+P1 全清，触发全量回归测试...」
        触发 role-测试工程师（全量模式）：
          - 执行完整 test-spec 中所有测试用例
          - 传入：test-spec 路径、当前版本号
          
Step 8  【解析全量回归结果】
        IF 全量回归通过（无新P0/P1）：
          → 进入 Step 9（输出上线报告）
        ELSE 发现新 Bug（回归引入的）：
          更新追踪台：将新 Bug 写入（标注「Round N 全量回归发现」）
          更新 test-round-tracker.md（本轮发现新Bug）
          IF 新 Bug 有 P0/P1:
            → 输出：「⚠️ 全量回归发现新P0/P1，进入第 N+1 轮循环」
            → 回到 Step 1（轮次N+1）
          ELSE（只有P2新Bug）:
            → 更新追踪台
            → 回到 Step 6 让用户决策
            
Step 9  【收敛：输出可上线结论】
        Read: 技术问题追踪台.md（最终状态）
        Read: test-round-tracker.md（所有轮次记录）
        Read: 修复记录.md（所有修复的TDD证据）
        
        输出综合报告（写入 测试工程师/最终测试报告.md）：
        
        「✅ 测试-修复循环完成
        
         执行概览：
           共 N 轮修复循环
           修复 Bug 总数：P0×A + P1×B + P2×C
           全量回归：通过（Round N）
        
         Bug 处置情况：
           ✅ 已修复：[列表]
           📋 技术债（P2跳过）：[列表]
        
         可上线结论：✅ 所有阻塞问题已清除，可以进入 DevOps
         
         下一步：触发 role-DevOps 执行上线发布」
        
        触发 P0 Bug 的 Blameless Postmortem（若本次有P0）：
        「📝 建议：有 [P0_count_total] 个 P0 Bug，建议在上线后24h内完成 Postmortem
          路径：内部总控/Postmortem-[日期].md
          目的：分析为什么这些P0能逃过测试，改进测试体系」
```

---

## 文档更新规范

### 技术问题追踪台 状态流转

```
未解决 → 修复中 → 修复中（验证失败）→ 修复中
未解决 → 修复中 → 已修复（Round N, 日期）→ 回归通过（Round N）
未解决 → 需人工介入（3次修复失败）
```

### 修复记录.md 追加格式

每次成功修复后追加：

```markdown
## [TC-XXX] [Bug描述] — Round N — [日期]

**优先级**：P0 / P1 / P2
**根因**：[5 Whys 第一层结论]
**修复内容**：[修改了什么文件，改了什么]

**TDD 证据**：
- 失败测试（Red）：`tests/xxx/test_yyy.py::test_zzz`
- 修复后通过（Green）：✅
- 全量CI：✅（[CI运行时间]）

**回归验证**：[哪些测试用例被重新验证]
**合并记录**：[PR ID 或 commit hash]
```

---

## 循环终止条件（精确定义）

```
可以上线（退出循环）的条件：全部满足
  ① 技术问题追踪台.md 中 P0 未解决数 = 0
  ② 技术问题追踪台.md 中 P1 未解决数 = 0
  ③ 最近一轮全量回归测试通过（无新P0/P1）
  ④ 每个 P0/P1 修复都有对应的 TDD 证据（在修复记录.md）

不可上线（继续循环）的条件：任一满足
  ① 追踪台仍有未解决P0
  ② 追踪台仍有未解决P1
  ③ 全量回归发现新的P0/P1（即使历史P0/P1已清）
  ④ 有P0/P1修复没有通过回归测试
```

---

## 与其他角色的接口

**我读取**：
- `技术问题追踪台.md`（唯一信息源）
- `test-spec-*.md`（回归范围参考）
- `test-round-tracker.md`（轮次状态）

**我触发**（按需调用）：
- `role-后端开发` / `role-前端开发` / `role-AI工程师`（修复）
- `role-测试工程师`（回归测试）
- `issue-tracker`（新发现的 Bug 写入追踪台）

**我写入**：
- `test-round-tracker.md`（轮次进度）
- `修复记录.md`（修复历史和TDD证据汇总）
- `测试工程师/最终测试报告.md`（收敛后的综合报告）

---

## 附录 A：test-round-tracker.md 初始化模板

```markdown
# 测试-修复轮次追踪表

> 由 bug-fix-loop-coordinator 自动维护
> 记录每轮测试→修复的进度，作为循环协调的状态机

| 轮次 | 日期 | 范围 | P0开始 | P1开始 | P2开始 | P0结束 | P1结束 | P2结束 | 新Bug | 结论 |
|------|------|------|--------|--------|--------|--------|--------|--------|-------|------|
| 初始（测试后）| - | 全量测试 | - | - | - | [P0] | [P1] | [P2] | - | 待修复 |

> 初始行由 role-测试工程师 关卡C 完成后填入
> 后续每轮由 bug-fix-loop-coordinator 维护
```

---

## 变更记录

### v1.0 — 2026-03-24 — 初始创建

**根因**：当前 Skill 体系中测试（role-测试工程师）和修复（各开发角色）之间缺乏协调机制。测试发现 Bug 后需要人工判断优先级、手动触发修复、手动触发回归，整个过程不能自动持续到产品达到上线标准。

**设计决策**：
- 单一信息源（追踪台）驱动循环，不依赖对话历史 → 支持跨会话持久化
- TDD 约束由 `bug-fix-tdd-guard` Rule 在开发角色激活时强制注入，而非在此 Skill 内用文字约束
- 循环终止条件精确量化（追踪台P0+P1=0 + 全量回归通过）
- P2 处理让用户决策（不强制，因为P2不阻止上线）

**Level**：L3 集成型（与 role-测试工程师、issue-tracker、fixer子智能体、bug-fix-tdd-guard Rule 联动）

**配套**：
- 新建 `.cursor/rules/bug-fix-tdd-guard.mdc`
- 新建 `.cursor/agents/fixer.md`（修复子智能体，Step 3.3 dispatch 对象）
- 新建 `test-round-tracker.md` 模板（项目级文档）
- 更新 `role-menu.mdc` 注册触发词

### v1.2 — 2026-03-24 — Step 6 P2 默认自动跳过（不暂停等待人工决策）

**根因**：v1.1 的 Step 6 在 P2 处理时暂停等待用户选择，打断了全自动循环。
Agent 拥有完整权限，P2 不阻止上线，应默认自动跳过，只在调用方明确传入 p2_handling="ask" 时才暂停。

**修改内容**：
- Step 6：从「暂停等待用户决策」改为「p2_handling 参数驱动，默认=skip 自动跳过」

---

### v1.1 — 2026-03-24 — Step 3.3 改为 spawn fixer 子智能体

**根因**：v1.0 dispatch「对应开发角色」，但开发角色是 Skill（需用户触发），不是可被 spawn 的子智能体。fixer 子智能体创建后，应直接 spawn 以实现隔离上下文修复，防止协调者的上下文污染修复过程。

**修改内容**：
- Step 3.3：从「触发对应开发角色」改为「spawn /fixer 子智能体（模式A）」
- Step 3.4：从「开发角色完成修复后」改为「解析 fixer 报告，根据 status 分支处理」
- 新增：fixer 的三种返回状态处理（success/escalated/cannot_reproduce）

