bug-fix-loop-coordinator

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

Bug 修复循环协调者(bug-fix-loop-coordinator)

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


知识导航表(执行前必读)

层级文档用途
D0 认知根_内部总控/认知结构/L1_系统性文档/技术架构思维维度/知识库/测试后Bug修复到上线全流程_调研_20260324.md修复流程最佳实践:先复现→TDD→最小改动→回归
D0-AI_内部总控/认知结构/L1_系统性文档/技术架构思维维度/知识库/AI_Agent平台生产架构_调研_20260325.mdAI 平台架构全景(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 追加格式

每次成功修复后追加:

## [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 初始化模板

# 测试-修复轮次追踪表

> 由 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)