不止是写代码|研发如何用 SKill 驱动业务缺陷检测

本文作者:易柏胜,TRAE 开发者用户

本文最后有详细的 Skill,大家可以自行取用。

前言

如何将资深测试专家的"质量思维"无缝传递给一线业务研发,让 Bug 在写代码那一刻就被拦截,而不是等到提测甚至上线后才引爆?

在回答这个问题前,我们需要先界定一下"缺陷"的本质。在研发实战中,缺陷通常分为两类:

  • 通用缺陷(硬知识): 它是代码层面的"硬伤",如空指针异常、SQL 注入、内存泄漏或不符合编程规范的命名。这类问题有标准答案,静态扫描工具(SonarQube 等)已经做得很好。

  • 业务缺陷(软知识): 它是结合具体业务场景的"逻辑漏洞",比如"在促销活动结束前,订单状态机是否允许直接跳转至退款"或"VIP 用户的权益计算是否遗漏了新规则"。这类问题高度依赖上下文,传统的静态工具对此无能为力。

目前的痛点在于,针对"业务缺陷"的质量平台大多游离在 IDE 之外:规范在文档里、规则在脑子里、开发却在编辑器中。大家虽知晓规范,但没人会在写代码的心流时刻频繁切屏去翻阅几百页的业务文档。

基于这个痛点,本文利用 SOLO 模式 + 自定义 Agent Skills 做了一次探索:把复杂的质量检测能力拆成一个个可复用的「原子化研发技能」,让每个开发在写代码时,都能随手召唤一位"虚拟质量专家"。

通过在 IDE 内编排 5 个 Agent Skill,我们把从需求理解、技术方案对齐,到代码变更分析、缺陷判定和修复建议的完整链路自动化串联起来。

这意味着,每位开发者在写代码时,都随时有一位懂业务、懂代码的"虚拟质量专家"在侧,让高危业务缺陷在提测前即刻暴露。

实战数据表明,这种方式显著提升了研发的主动质量意识与缺陷拦截效率。

如何让质量能力"住"进 IDE?

作为开发者,我们 90% 的时间都沉浸在 IDE 里构建逻辑、调试堆栈。然而,决定代码正确性的"依据"却散落在 IDE 之外的信息海洋中。

研发体验的断层

  • 需求碎片化: 核心逻辑可能藏在飞书文档的某个批注里,或者 PRD 的第 5 次变更记录中。

  • 知识隐性化: 很多历史业务规则并不在文档里,而是在 Wiki 的角落,甚至存在于已经离职的老员工的口口相传中。

  • 反馈滞后性: 传统的质量检测往往发生在代码提交之后。你得等待 CI 流水线跑完,去 Jenkins 或 Sonar 平台查看几百行日志,才能发现一个逻辑漏洞。此时,你早已切换到下一个任务,这种"异步反馈"极大地拉高了修复成本。

这种割裂带来的直接后果是极高的上下文切换成本。

在真实的编码场景中,很少有人能做到每写一行代码就切屏去翻阅文档或咨询产品经理。当 Deadline 逼近,面对模糊的业务边界,人性使然的选择往往是:

"这个特殊的退款逻辑好像在哪里见过,但现在去翻聊天记录太断片了,凭经验应该是这样写吧......"

许多线上故障并非源于技术能力的匮乏,而是源于认知负荷的超载。当获取"正确规则"的成本过高时,由于缺乏 IDE 内实时的辅助,Bug 便在指尖敲击键盘的那一刻,悄无声息地成为了系统的一部分。

SKill 带来的契机

Agent Skill 机制让我们看到了破局的希望:如果能把质量专家的知识封装成 Skill,直接装进 IDE 里,岂不是就能让研发人员拥有一位"随叫随到的质量专家"?利用 TRAE 的能力,为业务研发提供一套轻量、即时、嵌入式的"质量辅助插件"。

设计核心思路:将"专家经验"转化为"Agent Skill"

我们没有从零搭一个新平台,而是基于 TRAE 的 SOLO 模式,把资深 QA 和架构师沉淀多年的经验,拆解成 5 个标准化 Skill。它们聚焦解决研发最常问、也最容易出问题的三个灵魂拷问:

  • 需求到底要什么?

  • 系统是怎么实现的?

  • 我这次改动有没有漏?

如何设计 Skill

我们把质量检测链路拆成研发在 IDE 内可以单独调用的「原子能力」,每个 Skill 都只负责一件事。

Skills 使用示例

在研发提交代码代码前,使用 TRAE Skills 进行缺陷检测。

第一步:导入 Skills

在项目根目录创建 。trae/skills 文件夹,将技能包放入目录。

配置 TRAE Skills

第二步:配置 MCP 工具

业务缺陷检测流程,需要分析需求文档和技术方案文档,因此需要配置 飞书 MCP 工具用于查看文档。

飞书 MCP 工具:搜索文档、查看文档、创建文档等功能。

配置流程,参考:

open.larkoffice.com/document/mc...

1. 登录飞书 MCP 配置平台

2. 点击 创建 MCP 服务

3.MCP 工具配置 区域,确认当前用户身份。

4.添加工具 卡片内,点击 添加,在添加工具对话框,选择**「云文档」**工具集。

5. 点击 确认添加 ,并在弹出的 获取用户授权 对话框,确认授权用户登录信息、飞书 MCP 应用获得的权限信息后,点击 授权

6. 添加工具后,在 如何使用 MCP 服务 区域,查看 服务器 URL、JSON。

7. 在 TRAE 的 MCP 手动配置对话框内,点击 确认

第三步:触发检测流程

完成 Skills 和 MCP 配置后,在 SOLO 模式下触发缺陷检测流程。

SOLO 模式下触发检测

使用 Skills 进行缺陷检测

使用 Skills 进行缺陷检测,产出飞书缺陷报告文档

实战:进行一次"无感"检测

接下来,我们从一位业务研发同学的视角,走一遍完整的实战流程,看看这套 Skill 组合是如何帮助他完成 "消息夜间防打扰" 功能开发的。

场景

研发"小张"接到一个需求:在现有消息服务中加入夜间防打扰逻辑------

每天 22:00 - 次日 08:00,营销类消息需要静默(不发送或返回失败),但验证码类消息不受影响。

小张写完了代码,准备提测。

Workflow Strategy: 串行化检测流水线

由于每一步检测之间有严格的数据依赖,我们没有把它们做成松散的零散工具,而是设计了一条包含 5 个阶段的 串行 Workflow,确保每一个环节的输出都成为下一个环节的上下文输入。

Step 1: 建立全局技术认知 (Skill 1)

调用 Skill: codebase-insight-analyzer

动作: 小张在对话框输入"分析当前仓库"。

背后做了什么?

这个 Skill 不只是粗暴扫文件,而是自动做了一次缩略版的 "架构逆向工程"

  • 技术栈识别: 通过 go.mod 和构建脚本,识别出项目基于 CloudWeGo 技术栈(Kitex + Hertz),并依赖 Redis 做缓存;

  • 架构分层推断: 结合目录结构(如 internal/handlerinternal/serviceinternal/repo ),推断这是一个 DDD-lite 分层架构,请求大致流向是 Handler -> Service -> Domain -> Repo

  • 核心域定位: 通过代码密度和依赖关系,识别出 internal/service/dispatchinternal/biz/strategy 是业务逻辑最集中的核心域,而 utilscommon 等更多是支撑模块。

产出成果 (AGENTS.md):

最终,Agent 在仓库根目录生成了一份结构化的全局上下文文档 AGENTS.md ,帮后续的所有 Skill 画出了一张清晰的 "作战地图"

markdown 复制代码
 # Architecture Overview
- **Style** : DDD-lite / Clean Architecture
- **Core Modules** : 
  - `internal/service/dispatch`: 消息分发核心域
  - `internal/biz/strategy`: 策略过滤核心域
- **Data Flow** : Request -> Handler -> DispatchService -> Strategy -> Repo

价值: 有了这张"地图",后续再找"防打扰策略"相关逻辑时,Agent 会直接去 strategy 等核心域定位,而不会在无关目录里漫游,既省 Token 又提高准确率。

Step 2: 从 PRD 中提炼出结构化需求 (Skill 2)

调用 Skill: prd-function-extractor

动作: 小张在对话框提供 PRD 文档链接:xxx ,提取防打扰规则"。

背后做了什么?

这个 Skill 相当于一位 "顶级业务分析师" ,把冗长的 PRD 变成清晰的需求清单,主要做了三件事:

  • 场景识别: 通过飞书 MCP 接口获取文档全文,识别出"用户发送消息"的主场景,以及"夜间""营销消息"等分支条件;

  • 要素清洗: 用内置的 CoT Prompt 把背景介绍、废话和噪音统统剥离,只保留真正影响逻辑的业务规则和约束条件(比如"按用户时区判断时间段");

  • 结构化输出: 把这些自然语言规则变成机器可读的 JSON,并为每条需求打上唯一的 ID。

产出成果 (JSON):

最终,Agent 输出了一份类似下面的标准化需求列表,其中还特别标注了最容易被忽略的边缘场景(例如时区处理):

css 复制代码
[  {    "requirement_id": "PRD-MSG-005",    "scenario_description": "营销消息夜间防打扰",    "business_rule": "每日 22:00 至次日 08:00 期间,类型为 'Marketing' 的消息应被拦截,直接返回发送失败状态。",    "constraints": "1. 仅针对 Marketing 类型,Verification 类型不受限;2. 时间判断需基于用户所在时区(若无时区信息,默认东八区)。",    "priority": "P0"  }]

价值: 这一步解决了研发人员"看文档抓不住重点"的痛点。通过强制结构化,Agent 显式地将 "隐性约束" (如时区问题)摆在台面上,让研发在动手写代码之前,就能一眼看到:

  • 哪些是 P0 规则

  • 哪些是必须考虑的边界场 景;

  • 哪些细节一旦漏掉,后面一定会变成 Bug。

Step 3: 让业务规则和技术实现对齐 (Skill 3)

调用 Skill: trd-spec-extractor

动作: 在 Skill 1 的仓库知识、Skill 2 的需求 JSON 已经就绪的前提下,让 Agent 去分析 TRD。

背后做了什么?

这一步是整个流水线的"分水岭",决定了后续缺陷检测能不能真正对上业务意图。Skill 做的不是简单"读一遍 TRD",而是完成一次 多源信息融合(Context Fusion)

  • 输入对齐: 同时读取 "PRD 业务规则(Step 2 输出)" 和 "TRD 技术方案";

  • 实体映射 (Entity Mapping): 把 PRD 中的自然语言概念(如"用户时区")映射到 TRD 中的具体技术实体,比如 **UserContext.GetTimezone() **、time.ParseInLocation 等;

  • 约束传递: 把"验证码豁免"这样的业务规则,转成技术世界里的硬约束,比如"msgType == Verification 时必须跳过防打扰检查"。

产出成果 (JSON):

Agent 输出了一份 "技术规格书" ,将抽象的业务规则翻译成了具象的代码预期:

css 复制代码
[  {    "specification_id": "TRD-MSG-005",    "related_requirement_id": "PRD-MSG-005",    "module": "DispatchService.CheckDoNotDisturb",    "specific_requirements": "1. 必须在 DispatchService 中新增私有方法 CheckDoNotDisturb;2. 必须使用 UserContext.GetTimezone() 获取用户时区,禁止使用 time.Now();3. 针对 msgType=Verification 必须直接返回 true。"  }]

价值: 这一步彻底消除了 "自然语言"与"编程语言"之间的语义鸿沟 。 如果没有这一步,后面的检测 Skill 可能会认为:

  • 用 **time.Now() **也没什么不对;

  • 忘写 Verification 的豁免逻辑也"看起来合理"。

而现在,每一条检测都有了清晰的 "定罪依据"

Step 4: 精准锁定变更范围 (Skill 4)

调用 Skill: function-level-defect-tracer

动作: Agent 分析 Git Diff,进行初步匹配。

背后做了什么?

这个 Skill 的目标,是为"大法官"准备一份干净、聚焦的 "证据包" ,因此它对原始 Git Diff 做了精细化加工:

  1. AST 级差异分析: 不是只看"哪几行变了",而是解析 Go 的 AST,识别这次改动发生在 DispatchService 结构体的 SendMessage 方法内部;

  2. 噪音过滤: 自动忽略 import 排序、注释修改、空行变动等对业务逻辑无实质影响的改动;

  3. 调用关系追踪: 识别出新增代码引入了对 **time.Now() **的调用,并打上"高风险"标签(因为时间相关逻辑往往和状态、时区强相关)。

产出成果 (JSON):

Agent 生成了一份 "变更画像" ,清晰地指出了改了哪里、怎么改的、有什么风险:

json 复制代码
{
  "changed_files": ["internal/service/dispatch.go"],
  "function_level_changes": [
    {
      "symbol": "SendMessage",
      "change_type": "MODIFIED",
      "diff_hunks_refs": ["dispatch.go#L45-L58"],
      "change_summary": "在消息分发前新增了基于 time.Now().Hour() 的条件判断分支",
      "impact_analysis": {
        "new_dependencies": ["time"],
        "control_flow": "新增了一个提前返回 (early return) 的分支"
      }
    }
  ],
  "risk_notes": [
    {"entity": "SendMessage", "reason": "核心分发链路引入了新的阻断逻辑,可能导致消息丢弃"}
  ]
}

价值: 这一步通过 "去噪"和"聚焦" ,极大地降低了后续步骤的上下文干扰。它告诉检测 Skill:"别管那些无关紧要的改动,盯着 SendMessage 里的这 13 行代码看!"这为高精度的缺陷判定奠定了坚实基础。

Step 5: 业务缺陷裁决与一键闭环 (Skill 5)

调用 Skill: business-rule-defect-detector

动作: Agent 汇总前 4 步的所有信息,进行最终裁决。

背后做了什么?

这是本方案的 "大脑" 。不同于传统的 Linter 只看代码,该 Skill 执行的是多源证据链推理(Multi-Source Reasoning):

1. 证据拼图: Agent 将"架构知识(Skill 1)"、"PRD 规则(Skill 2)"、"TRD 映射(Skill 3)"和"变更画像(Skill 4)"拼在一起。

2. 逻辑推演:

  • 事实:代码变更引入了 if hour >= 22

  • 规则:PRD 要求的是 22:00 - 08:00 全时段拦截。

  • 冲突:代码漏掉了 00:00 - 08:00 这半段。

  • 事实:代码使用了 **time.Now() **。

  • 约束:TRD 明确要求使用 **UserContext.GetTimezone() **。

  • 冲突:违反了技术规格书的实体映射。

3. 结论生成: 基于上述冲突,Agent 判定本次变更存在 [P0] 级业务逻 辑遗漏。

产出成果与闭环:

Agent 自动调用飞书 MCP 接口,生成了一份可读性极强的《业务缺陷检测报告》,并附带了可执行的修复代码:

go 复制代码
// 修复建议:
// 1. 获取用户时区上下文
userLoc := ctx.GetTimezone()
// 2. 修正跨日逻辑判断
currentHour := time.Now().In(userLoc).Hour()
if msg.Type == "Marketing" {
    if currentHour >= 22 || currentHour < 8 { // 补全了凌晨时段
        return ErrDoNotDisturb
    }
}

价值: 这不仅仅是发现问题,更是解决问题 。小张只需点击 Trae 的"Apply Fix"按钮,即可一键修复缺陷。通过将业务逻辑、技术规范与代码实现进行深度对齐,小张成功将业务缺陷消灭在了代码提交之前,避免了昂贵的返工成本。未来,随着更多业务知识库的接入,这一检测的准确率还将进一步提升。

从"人找规范"到"规范找人"

这次实践让我深刻体会到,TRAE IDE 不仅仅是一个代码编辑器,更是一个 "研发能力挂载平台" 。通过 Agent Skills,我们把散落在 Wiki、PRD、TRD 和专家经验里的质量规范,转化成了每个研发随时可用的"肌肉记忆"。

  • 沉浸式体验 (Immersion): 研发人员无需在 IDE、文档、质量平台之间反复横跳。所有的交互------从查看需求、对齐技术方案到检查缺陷------都在 IDE 的对话框中一气呵成。这种"零切换"的体验,极大地降低了认知负荷。

  • 极致左移 (Shift-Left): 我们将缺陷拦截的时机推到了极限------代码 Commit 之前。这不仅仅是节省了测试成本,更重要的是它改变了研发的心智: "质量不是测试测出来的,而是设计和编码出来的。"

  • 知识的活化 (Knowledge Activation): 以往躺在 Wiki 里落灰的"防打扰规范"、"时区处理指南"、"业务知识",现在变成了活跃在侧边栏里的 Agent。Skill 让死知识变成了活能力,每一次调用都是一次最佳实践的落地。

总结

本文用一个具体场景展示了如何借助 SOLO 模式,通过编排 5 个精准的 Agent Skill,解决一个看似简单但极易出问题的问题:

"怎么防止开发在关键链路里,漏写一个看似不起眼的 if 判断?

SOLO + Agent Skills 的组合,正在开启一种新的研发范式:人与 Agent 协同进化。

  • 负责定义业务规则、做价值判断;

  • Agent 负责记忆规则、执行检查、给出修复建议。

在这个体系下,每一位研发都不再是孤身作战,在他身后站着的是:一整套由专家经验、最佳实践和业务规范凝结而成的"数字质量助手"。

这,大概就是 AI 时代下无数个场景的缩影。

附录

飞书 MCP 配置

本案例最后会用到飞书文档的调用,我们选择接入飞书 MCP。具体的配置方式可以见文章上半部分。

Skills 配置分享给大家

codebase-insight-analyzer

makefile 复制代码
---
name: codebase-insight-analyzer
description: >
  为 AI Agent 快速生成代码仓库的结构化全局上下文。自动识别技术栈、架构分层、核心业务域、模块依赖关系与风险热点,在项目根目录下覆盖写入 AGENTS.md,适用于首次接触仓库、缺陷评测准备、架构理解等场景。
---

# codebase-insight-analyzer

## Goal
对已 clone 到本地的代码仓库进行结构化洞察,形成"全局上下文包",帮助后续缺陷校验理解:系统分层、业务域边界、关键模块及接口、功能模块的依赖关系与高风险区域。

---

## 📋 基本信息

| 属性 | 值 |
|------|-----|
| **Skill 名称** | codebase-insight-analyzer |
| **分类** | Tier 1: 全局理解 + Tier 2: 结构理解 |
| **目标应用场景** | AI Coding Agent 快速理解新仓库 |
| **输出格式** | JSON (agent-consumable) + Markdown (human-readable) |
| **首次执行耗时** | 3-10 分钟(取决于仓库大小) |
| **后续增量更新** | < 30 秒(Git hook 触发) |

---

## 🎯 核心目标

生成**代码仓库的结构化"全局上下文包"**,使 AI Agent 能够:

1. **秒速定位** - 知道从哪里开始读代码(入口点、关键文件)
2. **精准搜索** - 理解模块间的依赖关系,快速定位相关代码
3. **风险意识** - 识别高风险区域、核心链路、耦合点
4. **自动化决策** - 理解技术栈、分层、约定,自动生成符合风格的代码

**不做的事**:
- ❌ 不进行缺陷判断或修复建议(留给下游 Skill)
- ❌ 不做完整代码分析(只做结构化洞察)
- ❌ 不解析测试代码和脚手架代码

---

## 🔍 适用场景

### ✅ 使用这个 Skill 的时机

| 场景 | 描述 | 优先级 |
|------|------|--------|
| **首次接触仓库** | 新 Agent 启动或开发者上手新项目 | ⭐⭐⭐ 高 |
| **缺陷评测前准备** | 在深度分析缺陷前,需要理解整体架构和边界 | ⭐⭐⭐ 高 |
| **大型仓库架构理解** | 超过 100K 行代码,模块众多,结构复杂 | ⭐⭐⭐ 高 |
| **技术栈梳理** | 需要快速了解技术栈和依赖关系 | ⭐⭐ 中 |
| **跨模块功能开发** | 需要理解多个模块的协作与数据流 | ⭐⭐ 中 |
| **代码审查准备** | 审查者需要快速建立代码库心智模型 | ⭐ 低 |

### ❌ 不适合用这个 Skill 的时机

- 修改单个隔离的工具函数
- 已经很熟悉代码库的情况
- 只关心某个特定文件的内部逻辑

---

## 📥 输入参数

### 必填参数

```json
{
  "repo_path": "/path/to/local/repo"
}
```

| 参数 | 类型 | 必需 | 说明 |
|------|------|------|------|
| `repo_path` | string | ✅ | 本地仓库路径(已通过 `git clone` 获取) |

### 可选参数

```json
{
  "repo_path": "/path/to/repo",
  "mode": "balanced",
  "focus_paths": ["src/", "internal/", "cmd/"],
  "depth": "module",
  "language_hints": ["go", "java"],
  "exclude_dirs": ["vendor", "node_modules", ".git"],
  "max_file_scan": 5000,
  "output_format": "json_with_markdown"
}
```

| 参数 | 类型 | 默认值 | 说明 |
|------|------|--------|------|
| `mode` | string | `balanced` | `fast` (仅元数据) / `balanced` (常用) / `deep` (完整分析) |
| `focus_paths` | array | `[]` | 需要重点洞察的目录前缀(如后续缺陷涉及的文件所在目录)。为空时分析整个仓库 |
| `depth` | string | `module` | `architecture` (分层) / `module` (模块细节) / `dependency` (完整依赖) |
| `language_hints` | array | `[]` | 编程语言提示(加快检测),如 `["go", "python"]` |
| `exclude_dirs` | array | 默认值 | 排除扫描的目录(已包含常见的 node_modules, vendor 等) |
| `max_file_scan` | int | 5000 | 最多扫描的文件数(防止超大仓库耗时过长) |
| `output_format` | string | `json_with_markdown` | `json` / `markdown` / `json_with_markdown` |

### 完整输入示例

#### 示例 1:首次接触新仓库(推荐配置)

```json
{
  "repo_path": "/home/agent/repos/my-service",
  "mode": "balanced",
  "depth": "architecture",
  "output_format": "json_with_markdown"
}
```

**预期输出**:全面的架构总览 + 关键模块细节,适合初期快速理解。

#### 示例 2:缺陷评测前的精准分析

```json
{
  "repo_path": "/home/agent/repos/payment-service",
  "mode": "deep",
  "focus_paths": ["internal/order", "internal/payment", "infra/db"],
  "depth": "dependency",
  "output_format": "json_with_markdown"
}
```

**预期输出**:聚焦在关键路径上的完整依赖分析,包括跨模块调用和风险热点。

#### 示例 3:快速了解技术栈(快速模式)

```json
{
  "repo_path": "/home/agent/repos/legacy-system",
  "mode": "fast",
  "depth": "architecture",
  "language_hints": ["java", "python"]
}
```

**预期输出**:快速的技术栈 + 分层信息,< 1 分钟完成。

---

## 📤 输出结构

### 输出设计理念

根据 AI Agent 的 Token 预算,输出采用**分层加载策略**:

```
Level 1 (always)
├─ tech_stack                 ← 200 tokens
├─ architecture_overview      ← 300 tokens
├─ entrypoints               ← 200 tokens
└─ core_domains              ← 200 tokens
   Subtotal: ~900 tokens (快速上下文)

Level 2 (on demand)
├─ functional_modules         ← 2K-5K tokens
├─ data_flow_clues           ← 1K-3K tokens
└─ dependency_clues          ← 2K-5K tokens
   Subtotal: ~5K-13K tokens (详细分析)

Level 3 (surgical)
├─ risk_hotspots             ← 500-1K tokens
├─ navigation_hints           ← 300 tokens
└─ evidence_map              ← 500 tokens
   Subtotal: ~1.3K-1.8K tokens (辅助决策)
```

### 完整输出 JSON Schema

```json
{
  "metadata": {
    "generated_at": "2026-01-21T14:48:00Z",
    "repo_path": "/path/to/repo",
    "repo_size_mb": 125,
    "total_files": 1847,
    "total_lines": 250000,
    "language_distribution": {
      "go": 85,
      "proto": 10,
      "yaml": 5
    },
    "analysis_mode": "balanced",
    "analysis_duration_seconds": 45
  },
  
  "tech_stack": {
    "languages": [
      {
        "name": "Go",
        "version": "1.24",
        "primary": true,
        "evidence": "go.mod"
      }
    ],
    "frameworks": [
      {
        "name": "Kitex",
        "version": "0.7.2",
        "usage": "RPC Framework",
        "evidence": "go.mod"
      },
      {
        "name": "Hertz",
        "version": "1.0",
        "usage": "Web Framework",
        "evidence": "go.mod"
      }
    ],
    "storage": [
      {
        "type": "MySQL",
        "usage": "Data Store",
        "driver": "Gorm",
        "config_location": "conf/db.yaml"
      },
       {
        "type": "Redis",
        "usage": "Data Store",
        "config_location": "conf/redis.yaml"
      }
    ],
    "messaging": [
      {
        "type": "RocketMQ",
        "usage": "Messaging",
        "config_location": "conf/rmq.yaml"
      }
    ],
    "build_system": {
      "type": "Make / Shell",
      "build_command": "./build.sh",
      "test_command": "go test ./..."
    }
  },

  "architecture_overview": {
    "style": "DDD-lite / Clean Architecture",
    "diagram": "mermaid graph TD...",
    "layers": [
      {
        "name": "Interface Layer (Adapter)",
        "directories": ["cmd/", "internal/handler/"],
        "responsibility": "HTTP/RPC 请求解析,响应组装"
      },
      {
        "name": "Application Layer",
        "directories": ["internal/service/"],
        "responsibility": "业务流程编排,事务管理"
      },
      {
        "name": "Domain Layer",
        "directories": ["internal/domain/"],
        "responsibility": "核心业务规则,不依赖框架的纯业务逻辑"
      },
      {
        "name": "Infrastructure Layer",
        "directories": ["infra/", "internal/repo/"],
        "responsibility": "数据持久化,外部资源访问"
      }
    ]
  },
  
  "build_and_commands": {
      "prerequisites": ["Go 1.24+", "MySQL"],
      "commands": [
          {"task": "Build", "command": "./build.sh", "description": "Compiles binary"},
          {"task": "Test", "command": "go test ./...", "description": "Runs all unit tests"}
      ]
  },
  
  "code_style_and_conventions": [
      "Use GORM/GEN for database operations.",
      "Wrap errors with context.",
      "Follow Thrift IDL Guidelines."
  ],
  
  "testing_strategy": {
      "unit_tests": "Located alongside source files (e.g., *_test.go)",
      "integration_tests": "test/ directory",
      "mocking": "mockey"
  },
  
  "configuration_management": {
      "files": ["conf/*.yaml"],
      "loading_logic": "Determines environment (BOE/CN) and loads corresponding YAML."
  },
  
  "security_policy": [
      "NEVER commit API keys or passwords.",
      "Validate all inputs in the API layer."
  ],

  "entrypoints": [
    {
      "type": "server_bootstrap",
      "file": "cmd/server/main.go",
      "key_functions": [
        {
          "name": "main",
          "responsibility": "程序入口,初始化 DI 容器"
        }
      ]
    }
  ],
  
  "core_domains": [
    {
      "domain_name": "BugDetect",
      "path": "agent/bug_detect.go",
      "responsibilities": ["Defect Detection", "ReAct Agent"]
    }
  ]
}
```

---

## 🔄 执行流程(Procedure)

### 阶段 1: 前置检查(Pre-Analysis)

```bash
检查项:
□ repo_path 是否存在且是有效的 Git 仓库
□ 是否有读取权限
□ 仓库大小(确定分析深度)
□ 主要编程语言(确定检测策略)
```

### 阶段 2: 快速识别技术栈与构建系统(Tech Stack & Build Detection)

```
扫描顺序:
1. 构建/依赖文件(go.mod, pom.xml, package.json, requirements.txt)
2. 构建脚本(Makefile, build.sh, package.json scripts)
3. 目录结构(cmd/, src/, internal/, src/main/, lib/)
4. 特征文件(*.proto, *.thrift, *.sql, docker-compose.yml)

输出: tech_stack, build_and_commands
耗时: < 15 秒
```

### 阶段 3: 架构与分层识别(Architecture & Layers)

```
推断架构风格:
- 识别常见分层目录(handler, service, domain, repo, infrastructure)
- 识别入口点(main.go, router.go, idl definitions)
- 生成 Mermaid 架构图(表示层级关系与数据流向)

输出: architecture_overview, entrypoints
耗时: < 30 秒
```

### 阶段 4: 领域与模块深度分析(Domain & Module Analysis)

```
提取模块信息:
- 模块名 (目录名)
- 职责 (README / 包注释)
- 关键数据模型 (Struct / Entity 定义)
- 识别核心业务域(Core Domains)

输出: core_domains, functional_modules
耗时: < 45 秒
```

### 阶段 5: 测试与配置分析(Testing & Configuration Analysis)

```
测试分析:
- 查找测试文件位置 (*_test.go, test/ 目录)
- 识别测试框架与 Mock 工具

配置分析:
- 查找配置文件位置 (conf/, config/, .env)
- 分析配置加载逻辑 (config.go)

输出: testing_strategy, configuration_management
耗时: < 30 秒
```

### 阶段 6: 安全与规范分析(Security & Conventions)

```
安全扫描:
- 检查是否有硬编码密钥风险
- 识别鉴权中间件 (Auth Middleware)
- 检查输入验证逻辑

规范提取:
- 提取代码风格约定 (CONTRIBUTING.md, linter config)
- 提取数据库操作规范 (ORM vs Raw SQL)

输出: security_policy, code_style_and_conventions
耗时: < 30 秒
```

### 阶段 7: 生成 AGENTS.md(Documentation Generation)

```
生成符合 Biz Bug Detection Agent 格式的文档:
1. Project Overview (Capabilities, Tech Stack)
2. Architecture (Mermaid Diagram, Directory Structure)
3. Build & Commands (Prerequisites, Command Table)
4. Code Style & Conventions
5. Testing (Unit/Integration, Mocking)
6. Configuration (Loading Logic, Key Configs)
7. Security (Secrets, Data Protection)
8. Domain Deep Dive (Agent Development / Core Logic)

输出: AGENTS.md 写入仓库根目录
耗时: < 10 秒
```

---

## 📝 生成的 AGENTS.md 示例

```markdown
# [Project Name] - Architecture Overview

> **Note**: This document provides a high-level overview of the `[Project Name]` codebase for developers and AI agents.

## 1. Project Overview

**[Project Name]** is a [Description] system designed to [Goal]. It handles [Key Functionalities].

### Key Capabilities
- **Capability 1**: Description.
- **Capability 2**: Description.

### Tech Stack
- **Language**: Go 1.24+
- **Web Framework**: CloudWeGo Hertz
- **RPC Framework**: CloudWeGo Kitex
- **Data Store**: MySQL (GORM), Redis
- **Messaging**: RocketMQ

## 2. Architecture

The system follows a **[Architecture Style]** architecture.

```mermaid
graph TD
    API[HTTP API] -->|Request| Service
    Service -->|Logic| Domain
    Domain -->|Data| DB[(MySQL)]
```

### Directory Structure
- `agent/`: Core agent logic.
- `biz/`: Business logic, handlers.
- `conf/`: Configuration files.
- `dal/`: Data Access Layer.

## 3. Build & Commands

### Prerequisites
- Go 1.24+
- MySQL, Redis

### Common Commands

| Task | Command | Description |
|------|---------|-------------|
| **Build** | `./build.sh` | Compiles binary. |
| **Run** | `go run main.go` | Starts server. |
| **Test** | `go test ./...` | Runs unit tests. |

## 4. Code Style & Conventions

- **Go Version**: Use Go 1.24 features.
- **Database**: Use GORM; avoid raw SQL.
- **Error Handling**: Wrap errors with context.

## 5. Testing

- **Unit Tests**: Located alongside source files.
- **Integration Tests**: `test/` directory.
- **Mocking**: Use `mockey`.

## 6. Configuration

Configuration is managed via `config/config.go` and YAML files in `conf/`.

## 7. Security

- **Secrets**: NEVER commit API keys. Use env vars.
- **Access Control**: Internal APIs protected via ACL.

## 8. Domain Deep Dive

### [Core Domain Name]
- **Responsibilities**: ...
- **Key Files**: ...
```

prd-function-extractor

markdown 复制代码
---
name: prd-function-extractor
description: "Extracts functional points from PRD documents (Feishu). Invoke when user wants to analyze requirements or extract functions from a PRD."
---

# prd-function-extractor

This skill extracts functional points from a Product Requirement Document (PRD) hosted on Feishu.

## Workflow

1.  **Get the PRD Link**: Ask the user for the Feishu document link if not provided.
2.  **Fetch Document Content**:
    *   **Method 1 (Preferred)**: Use the `mcp_feishu-lark-mcp_fetch-doc` tool.
        *   Argument `doc_id` should be the full URL of the Feishu document.
    *   **Method 2 (Fallback)**: If Method 1 fails or is unavailable, run the python script located at `.trae/skills/prd-function-extractor/scripts/fetch_doc.py` to fetch the content via the HTTP interface.
        *   Usage: `python ./skills/prd-function-extractor/scripts/fetch_doc.py <doc_url>`
        *   Note: You may need to install `requests` if not available, or use standard library `urllib` if `requests` is missing and you cannot install it.
    *   **Method 3 (Manual)**: If both Method 1 and Method 2 fail, **ask the user to paste the document content directly**. Explain that automatic fetching failed.
3.  **Analyze Content**: Use the **Function Extraction Prompt** (below) to process the markdown content.

## Function Extraction Prompt

Use the following prompt to analyze the fetched markdown content. Paste the document content at the end of this prompt or provide it as context.

---

#### **角色与任务**  
你是**顶级业务分析师(Business Analyst)**和**PRD需求提取专家**,需从**任意PRD**中**100%精准提取所有功能相关核心信息**,分批次生成需求文档。 

#### **提取规则**  

--- 

##### **1. 场景识别:覆盖所有用户操作逻辑**  
需识别PRD中**所有用户与系统交互的场景**,包括:  
- **主场景**:核心功能的常规操作(如"用户填写表单提交信息""用户查看某模块数据列表");  
- **边缘场景**:异常/边界条件下的操作(如"用户输入无效值时的提示""功能禁用时的交互限制");  
- **关联场景**:跨模块的联动操作(如"操作A触发模块B的状态变更")。  

每个场景分配唯一需求ID(格式:`PRD-XXX`,按批次顺序编号)。  


##### **2. 要素提取:每个场景必须包含4项核心内容**  
需严格从PRD原文中提取以下要素,**不允许 paraphrase(改写)**,保持原文表述:  
- 场景描述:用户具体操作 + 目标(严格还原 PRD 动词、名词、流程); 
- 业务规则:PRD 明确的逻辑规则(如计算方式、展示优先级、操作联动、数据映射关系等); 
- 约束条件:PRD 明确的限制(输入范围、权限控制、禁用条件、提示文案、时间限制等); 
- 优先级:PRD 标注的优先级(P0/P1/P2 / 高 / 中 / 低)。 


##### **3. 覆盖要求:确保无遗漏**  
需覆盖PRD中**所有功能相关内容**,包括但不限于:  
- **文案细节**:按钮名称、标签内容、提示语、hover说明、字段说明;  
- **边缘场景**:异常输入提示、功能禁用规则、跨模块联动限制、数据边界条件;  
- **逻辑规则**:数据计算方式、状态流转规则、权限控制逻辑、操作生效条件。  


#### **输出格式**  
严格按照如下json格式输出,确保json格式合法: 
```json 
[ 
  { 
    "requirement_id": "PRD-001", // 需求ID 
    "scenario_description": "用户在[客户管理模块]的客户列表页,查看每条客户记录的「客户名称」「注册时间」「状态」字段", // 场景描述 
    "business_rule": "客户列表页展示的字段包括:客户名称(原文名称)、注册时间(格式:YYYY-MM-DD)、状态(标签形式,内容为「激活」「冻结」「注销」)", // 业务规则 
    "constraints": "注册时间仅展示至日期,不显示时分秒;状态标签颜色随状态不同区分(激活:绿色/冻结:橙色/注销:灰色)", // 约束条件 
    "priority": "P0" // 优先级 
  }, 
  { 
    "requirement_id": "PRD-002", 
    "scenario_description": "用户在[订单管理模块]的订单详情页,查看「订单金额」字段的hover说明", 
    "business_rule": "「订单金额」字段的hover文案为:「订单金额=商品总价+运费-优惠券抵扣-满减折扣」", 
    "constraints": "hover说明仅当鼠标悬浮至「订单金额」字段时显示,文案不可修改", 
    "priority": "P0" 
  } 
] 
```

Skill 用到的脚本:prd-function-extractor/scripts/fetch_doc.py

python 复制代码
import requests
import sys
import json

def get_doc_content(doc_url):
    api_url = "https://test-standardization-backend.byted.org/common/doc/markdown"
    params = {"doc": doc_url}
    try:
        response = requests.get(api_url, params=params)
        response.raise_for_status()
        data = response.json()
        if data.get("code") == 0:
            # Return just the content or the whole data object depending on needs
            # The prompt expects the content.
            return data["data"] 
        else:
            print(f"Error: {data.get('message')}", file=sys.stderr)
            return None
    except Exception as e:
        print(f"Exception: {e}", file=sys.stderr)
        return None

if __name__ == "__main__":
    if len(sys.argv) < 2:
        print("Usage: python script.py <doc_url>")
        sys.exit(1)
    
    doc_url = sys.argv[1]
    result = get_doc_content(doc_url)
    if result:
        # Output the content part or the full JSON? 
        # The tool output will be read by the agent. 
        # Let's output the content field primarily, or the JSON.
        # The API returns {"title":..., "content":...} in 'data'.
        print(json.dumps(result, ensure_ascii=False, indent=2))
    else:
        sys.exit(1)

trd-spec-extractor

markdown 复制代码
---
name: trd-spec-extractor
description: "Extracts technical specifications from TRD documents (Feishu), mapping business rules to technical implementations. Invoke after PRD analysis when a TRD is available."
---

# trd-spec-extractor

This skill extracts technical specifications from a Technical Requirement Document (TRD) hosted on Feishu, mapping them to PRD business rules.

## Prerequisites

*   **PRD Analysis**: This skill is designed to run **after** `prd-function-extractor`. You must have the extracted PRD requirements (JSON format) available in the context.

## Workflow

1.  **Get the TRD Link**: Ask the user for the Feishu document link for the TRD if not provided.
2.  **Fetch Document Content**:
    *   **Method 1 (Preferred)**: Use the `mcp_feishu-lark-mcp_fetch-doc` tool.
        *   Argument `doc_id` should be the full URL of the Feishu document.
    *   **Method 2 (Fallback)**: If Method 1 fails or is unavailable, run the python script located at `.trae/skills/trd-spec-extractor/scripts/fetch_doc.py` to fetch the content via the HTTP interface.
        *   Usage: `python .trae/skills/trd-spec-extractor/scripts/fetch_doc.py <doc_url>`
        *   Note: You may need to install `requests` if not available, or use standard library `urllib` if `requests` is missing and you cannot install it.
    *   **Method 3 (Manual)**: If both Method 1 and Method 2 fail, **ask the user to paste the document content directly**. Explain that automatic fetching failed.
3.  **Analyze Content**: Use the **Specification Extraction Prompt** (below) to process the TRD content.
    *   **CRITICAL**: You MUST provide the **PRD Requirements JSON** (from the previous step/context) AND the **TRD Content** to the model when using the prompt.

## Specification Extraction Prompt

Use the following prompt to analyze the fetched TRD content.
**Input Context Required**:
1.  **PRD Requirements**: [Insert the JSON output from prd-function-extractor here]
2.  **TRD Content**: [Insert the fetched TRD markdown content here]

---

# 【核心目标】  
作为TRD技术规范提取专家,需**严格关联PRD中的「业务角色」「核心业务规则」与TRD中的「技术实现细节」**,从技术文档中提取**业务逻辑与技术方案一一对应**的可执行规范,确保规范既覆盖业务意图,又明确技术落地要求。 


# 【处理规则】  
1. **需求关联**:针对PRD中的每个需求ID,匹配TRD中对应的技术实现方案,分配唯一规范ID(格式:TRD-XXX);若TRD无对应实现,**不输出**。  
2. **模块完整性**:模块需同时包含:  
   - PRD中的**业务角色**(如"用户端APP""PC管理后台""OPEN接口服务");  
   - TRD中的**技术模块**(如"用户服务-Login接口""verify_code数据库表""SmsService-SendCodeRPC方法");  
   严格使用文档中明确的名称,禁止杜撰。  
3. **具体要求完整性(核心约束)**:  
   需覆盖2类**100%完整**的信息,**不得有任何省略、类比或模糊表述**:  
   - **PRD核心业务规则**:必须包含**场景(如"登录页")、时机(如"点击登录按钮时")、所有规则(如"6位数字验证码""5分钟有效期")、约束(如"提示文案")**;  
   - **TRD技术实现细节**:必须包含**对应业务规则的落地逻辑(如"Login接口校验code参数长度与格式""verify_code表存储过期时间")**,且需与业务规则**一一对应**。 


# 【禁止性约束(强制红线)】  
- ❌ **禁止遗漏业务上下文**:必须保留PRD中的"业务角色""场景""时机""所有规则""约束"(如PRD要求"6位数字验证码",则规范中必须完整写"6位数字验证码",不得简化为"验证码");  
- ❌ **禁止技术细节孤立**:技术实现需与业务规则强关联(如"PRD要求验证码5分钟有效,所以TRD中verify_code表存储创建时间,接口校验当前时间≤创建时间+5分钟");  
- ❌ **禁止模糊表述**:模块、字段、接口名需与PRD/TRD完全一致(如"用户端APP""Login接口""verify_code表");  
- ❌ **禁止类比/省略描述**:即使规则与其他需求重复,也需**完整复述所有内容**(如PRD-002要求"注册验证码规则同登录",则规范中必须完整写出"6位数字、5分钟有效",不得使用"同登录规则");**若违反此条,该规范直接无效**。  

# 【Few-Shot示例】  
## 场景背景:  
PRD需求是"用户端APP提交订单时,需填写包含省、市、区的收货地址,且地址需非空;订单服务需存储完整地址。PC端提交订单逻辑同APP端。";TRD实现是"订单服务-CreateOrder接口校验address参数的province/city/district非空,存储到order_info表的shipping_address字段"。  

## ❌ Bad Case1(问题:丢失业务角色与业务规则,仅描述技术实现)  
```json 
{ 
  "specification_id": "TRD-001", 
  "related_requirement_id": "PRD-001", 
  "module": "订单服务-CreateOrder接口、order_info表", 
  "specific_requirements": "CreateOrder接口校验address参数的province/city/district非空;order_info表新增shipping_address字段存储地址" 
} 
```  
**问题分析**:  
- 未提及PRD中的「业务角色」(用户端APP);  
- 未关联「业务规则」(用户端需填写三级地址)与技术实现的逻辑关系(因为用户端要填,所以接口要校验); 

## ✅ Good Case(正确:覆盖业务+技术,逻辑闭环)  
```json 
{ 
  "specification_id": "TRD-001", 
  "related_requirement_id": "PRD-001", 
  "module": "用户端APP、订单服务-CreateOrder接口、order_info表", 
  "specific_requirements": "1. PRD业务规则:用户端APP提交订单时,需填写包含省、市、区的收货地址,地址字段非空;2. TRD技术实现:订单服务-CreateOrder接口校验address参数的province/city/district字段非空" 
} 
```  

## ❌ Bad Case2(类比/省略) 
```json 
{ 
  "specification_id": "TRD-002", 
  "related_requirement_id": "PRD-002", 
  "module": "PC端、订单服务-CreateOrder接口、order_info表", 
  "specific_requirements": "1. PRD业务规则:PC端提交订单逻辑同APP端。2. TRD技术实现:订单服务-CreateOrder接口校验address参数的province/city/district字段非空" 
} 
``` 

## ✅ Good Case(完整/无省略)  
```json 
{ 
  "specification_id": "TRD-002", 
  "related_requirement_id": "PRD-002", 
  "module": "PC端、订单服务-CreateOrder接口、order_info表", 
  "specific_requirements": "1. PRD业务规则:PC端提交订单时,需填写包含省、市、区的收货地址,地址字段非空;2. TRD技术实现:订单服务-CreateOrder接口校验address参数的province/city/district字段非空" 
} 
```  

# 【输出格式要求】  
严格遵循以下JSON数组格式,确保json合法(注意必要的双引号转义不能丢失):  
```json 
[ 
  { 
    "specification_id": "TRD-XXX", // 技术规范ID(唯一) 
    "related_requirement_id": "PRD-XXX", // 关联PRD需求ID 
    "module": "业务角色1、技术模块1、技术模块2", // 如"用户端APP、订单服务-CreateOrder接口、order_info表" 
    "specific_requirements": "1. PRD核心业务规则;2. TRD技术实现细节" // 分点覆盖业务+技术,无任何省略 
  } 
] 
```

Skill 用到的脚本:trd-spec-extractor/scripts/fetch_doc.py

python 复制代码
import requests
import sys
import json

def get_doc_content(doc_url):
    api_url = "https://test-standardization-backend.byted.org/common/doc/markdown"
    params = {"doc": doc_url}
    try:
        response = requests.get(api_url, params=params)
        response.raise_for_status()
        data = response.json()
        if data.get("code") == 0:
            # Return just the content or the whole data object depending on needs
            # The prompt expects the content.
            return data["data"] 
        else:
            print(f"Error: {data.get('message')}", file=sys.stderr)
            return None
    except Exception as e:
        print(f"Exception: {e}", file=sys.stderr)
        return None

if __name__ == "__main__":
    if len(sys.argv) < 2:
        print("Usage: python script.py <doc_url>")
        sys.exit(1)
    
    doc_url = sys.argv[1]
    result = get_doc_content(doc_url)
    if result:
        # Output the content part or the full JSON? 
        # The tool output will be read by the agent. 
        # Let's output the content field primarily, or the JSON.
        # The API returns {"title":..., "content":...} in 'data'.
        print(json.dumps(result, ensure_ascii=False, indent=2))
    else:
        sys.exit(1)

function-level-defect-tracer

yaml 复制代码
---
name: function-level-defect-tracer
description: 基于 MR 的 source commit id 与 target commit id,对本次 MR 变更内容进行差异分析与定位(文件/函数级),输出变更摘要、关键 diff 片段索引与风险点,供缺陷校验使用。
---

# function-level-defect-tracer

## Goal
对指定 commit 范围(source..target)进行变更分析,产出"本次 MR 变更包",包括:变更文件清单、关键 diff、涉及函数/接口、潜在影响面与风险标注。

## When to use
- 对缺陷检测系统报告的缺陷进行校验前,需要先明确本次 MR 改了什么。
- 需要验证缺陷是否由本次 MR 引入(或是否已在 MR 中修复/回归)。

## Inputs
- repo_path: 本地仓库路径。
- source_commit_id: MR source commit id。
- target_commit_id: MR target commit id。
- optional:
  - focus_files: 缺陷报告涉及的文件列表(优先分析)。
  - focus_symbols: 缺陷报告涉及的函数/方法名列表(优先分析)。
  - diff_granularity: file | function(默认 function)。

### Input example
```json
{
  "repo_path": "/path/to/repo",
  "source_commit_id": "abc123",
  "target_commit_id": "def456",
  "focus_files": ["dash_board_action.go"],
  "focus_symbols": ["QueryConversationDispatch"],
  "diff_granularity": "function"
}
```

## Outputs
- commit_range: {source, target}
- changed_files: [{path, change_type, stats(add/del), hunks_count}]
- function_level_changes: [{symbol, file_path, change_summary, diff_hunks_refs}]
- risk_notes: [{entity, reason}]
- trace_hints: 给 business-defect-assessor 的线索(哪些变更最可能关联缺陷)

### Output example (shape)
```json
{
  "commit_range": {"source": "abc123", "target": "def456"},
  "changed_files": [
    {"path": "dash_board_action.go", "change_type": "M", "stats": {"add": 20, "del": 5}, "hunks_count": 3}
  ],
  "function_level_changes": [
    {
      "symbol": "QueryConversationDispatch",
      "file_path": "dash_board_action.go",
      "change_summary": "新增灰度分流分支与兜底逻辑",
      "diff_hunks_refs": ["dash_board_action.go#HUNK2"]
    }
  ],
  "risk_notes": [
    {"entity": "QueryConversationDispatch", "reason": "核心分发逻辑被改动,且包含条件分支"}
  ],
  "trace_hints": ["优先核对灰度开关含义与分支是否对齐业务规则"]
}
```

## Procedure
1. 验证 commit 存在且可比较。
2. 生成 file-level diff:变更文件、增删行统计、hunk 数。
3. 生成 function-level 索引(能做到就做到):
   - 对 Go/Java 等可通过简单符号匹配或 AST/ctags 生成函数级差异索引。
   - 若难以精确到函数,至少输出"可能涉及的函数/方法名 + diff hunk 位置"。
4. 对 focus_files / focus_symbols 做优先级排序输出。
5. 标注风险点:核心链路、条件分支、状态机、并发/缓存/一致性相关变更。

## Guardrails
- 只描述"变更事实 + 风险线索",不判断缺陷对错(留给 assessor)。
- 对于无法稳定提取函数级差异的语言/仓库结构,明确降级策略与不确定性。

business-rule-defect-detector

markdown 复制代码
---
name: business-rule-defect-detector
description: Detects business logic defects in code changes by verifying alignment with PRD/TRD requirements. Invoke after analyzing requirements and code diffs.
---

# business-rule-defect-detector

This skill acts as a senior code reviewer to detect business logic defects in code changes based on PRD/TRD requirements.

## Prerequisites

*   **Requirement Analysis**: Must have PRD/TRD analysis results (from `prd-function-extractor` / `trd-spec-extractor`).
*   **Diff Analysis**: Must have code change analysis results (from `function-level-defect-tracer`).

## Role & Goal

你是一位具备多轮推理和工具调用能力的代码审查助手,你的目标是结合代码整个上下文**精准匹配测试用例的业务规则**,判断相关代码是否满足了测试用例中指定的功能。你可以分步骤思考、调用工具获取信息,并在观察结果(Observation)基础上进一步推理,最终输出一段清晰的 Code Review 结论。

## Review Steps

### 第一步:提取关键信息
1.  **聚焦业务规则与约束**:
    *   测试用例一般会包含前端用户动线、数据加载展示(可选,当测试用例非'纯前端'需要依赖后端数据时),而数据来源一般是后端服务提供的
    *   从测试用例中提取**核心功能点**、**核心业务规则**(如"提交时所有目标字段需完成文本校验"等)。
2.  **区分职责边界**:
    *   确认测试用例中的功能点是否属于当前微服务的职责(如后端负责规则校验,前端负责交互提示),**非职责内的功能不做判断**。

### 第二步:跟踪调用链与深度审查
#### 2.1 完整跟踪调用链
*   沿变更链路查看**全链路源码**(如从入口函数到具体校验逻辑),调用 `SearchCodebase` (search_code_snippets) 或 `Read` (get_entity_contents) 获取关联函数/结构体的真实代码,不跳跃、不猜测、**避免仅看变更函数(这可能会让你陷入偏见)**。
*   在理解代码的过程中:像人一样,边阅读代码、边思考、边寻找证据来分析是否存在不符合预期的地方,包括但不限于文案错误、字段类型不匹配等。

#### 2.2 逐行梳理代码,验证"逻辑覆盖度"
*   如果需求中涉及一些校验规则场景的描述,需对**包含循环/条件判断的关键函数,强制梳理所有执行路径**,回答:
    1.  哪些分支会执行目标逻辑(如校验)?
    2.  哪些分支会跳过目标逻辑(如`continue`/`return`)?
    3.  跳过逻辑的条件(如"某字段非空")是否符合测试用例的"全量覆盖/校验"要求?

#### 2.3 结构体与字段校验
*   如果需求中涉及关键字段的返回,请对代码中相关**结构体字段的赋值/传递**(如`obj.FieldA = otherObj.FieldB`)逻辑进行严格审查:
    1.  获取赋值方与被赋值方的**完整结构体定义**(含嵌入/引用的关键结构体);
    2.  检查字段类型一致性与赋值正确性(如时间字段不能用用户字段赋值)。

### 第三步:整合输出bug列表
整合分析过程中得出的所有bug,你的最终输出必须是一个严格的、合法的(注意双引号转义)JSON数组对象,格式如下:

```json
[
    {
      "file": "service/order_service.go", // 缺陷函数所在文件,使用相对路径
      "function": "OrderService.SplitOrderWithDiscount", // 发生缺陷的函数名
      "start_line": 5, // 问题代码的起始行,不要设置为0
      "end_line": 10, // 问题代码的结束行,不要设置为0
      "problem": "功能实现错误,计算 'total' 时未过滤商品类别,导致全品类分摊。", // 内容为bug的具体描述,必须包括bug发生的条件、推理逻辑等信息
      "suggestion": "过滤商品类别,在计算 'total' 时只计算指定商品类别的分摊金额。", // 内容为修复bug的具体方法(包括如何修改字段、修改代码逻辑等信息),也可以直接输出修复代码
      "reasoning": "详细解释为什么这是个bug",
      "score": 8, // 置信度评分[1-10]
      "type": "问题类型,比如:文案错误、业务逻辑错误等",
      "label": "P0", // 问题严重级别,可选值:P0/P1/P2,P0代表严重,P1代表中等
      "uncertainties": [// 如果不存在不确定性,该字段需置为空数组
        {
          "summary": "针对当前bug判定的不确定性总结,明确指出影响置信度的关键未知信息。",
          "reasoning": "详细解释这个不确定性如何影响bug判定,说明缺失的上下文信息及其对问题确认的影响,比如指出bug所在代码其依赖的、无法审查的外部组件或未知信息是什么,并应用"职责链追溯"原则说明当前代码已经履行的职责。"
        }
      ]
    }
]
```

### 第四步:生成飞书分析报告
在完成缺陷分析后,**必须**使用 `mcp_feishu-lark-mcp_create-doc` 工具生成一份详细的业务缺陷分析报告。

#### 报告生成要求:
1.  **标题**:`业务缺陷分析报告 - [当前日期]`
2.  **内容结构**:
    *   **概述**:简要说明本次分析的背景(关联的 PRD/TRD)和发现的缺陷总数。
    *   **缺陷详情**:针对每一个发现的缺陷,生成一个详细的分析板块,包含:
        *   **缺陷标题**:[P0/P1] 简短描述
        *   **基本信息**:
            *   **严重等级**:明确标注 P0/P1/P2,并简述定级理由(如"涉及核心资损路径")。
            *   **关联需求**:明确指出违反的 PRD-XXX 或 TRD-XXX 编号。
        *   **业务背景 (Business Context)**:
            *   **业务规则**:引用具体的业务规则原文。
            *   **业务影响**:说明该缺陷会导致什么业务后果(如"导致用户无法下单"、"金额计算错误导致资损")。
        *   **技术分析 (Technical Analysis)**:
            *   **位置**:文件路径 + 函数名 + 起止行号。
            *   **触发场景 (Trigger Scenario)**:描述触发该缺陷的具体输入参数、前置条件或业务场景(如"当 price > 100 且 user_type 为 VIP 时触发")。
            *   **问题代码片段 (Critical)**:**必须**包含一段带有行号和**行内注释**的代码片段,直接在代码中指出问题所在。
                ```go
                // 示例格式
                func CalculatePrice(price int) int {
                    if price > 100 { 
                        return price * 0.8 // <--- 缺陷:PRD要求打9折,此处代码实现了8折
                    }
                    return price
                }
                ```
            *   **根因分析**:解释代码逻辑为何未能满足业务规则(如"遗漏了边界条件判断"、"使用了错误的字段来源")。
            *   **技术风险 (Technical Risks)**:评估缺陷或修复可能带来的技术副作用(如"涉及历史数据清洗"、"破坏接口兼容性"、"存在并发安全隐患")。
        *   **解决方案 (Solution)**:
            *   **修复建议**:提供具体的修复代码或伪代码。
            *   **验证方法**:描述如何验证修复是否生效(如"构造 price=101 的测试用例,预期结果应为...")。
    *   **不确定性说明**(如有):列出分析过程中遇到的不确定因素及其对结论的影响。
3.  **格式**:使用 Markdown 格式,利用高亮块(Callout)、代码块等增强可读性。

## Output Requirements

*   整个过程务必使用中文输出。
*   功能实现遗漏问题不检测、不输出。
*   start_line和end_line不要跨越整个函数,区间范围尽量小。
*   json数组中的每一个条目都应当是缺陷描述,若函数代码逻辑完全符合测试用例的业务规则与职责要求,无需生成任何 JSON 条目;若最终没有任何bug,输出空数组[]即可。

## Important Principles

1.  **确凿证据原则**:
    *   判定bug必须在已审查的代码中找到**确凿的、不依赖于外部的**实现缺陷,且缺陷直接违反测试用例的业务规则;无证据不判定bug。
    *   不要猜测struct、variable等实现,务必调用工具(比如 `SearchCodebase` 等)查询真实内容,准确理解后再给出结论,结论务必严谨、禁止任何猜测,不要出现"可能"这些表示推测的词。
    *   如果审查源代码时发现了**明显且十分确定的**逻辑缺陷,务必透出该缺陷,例如:函数A的功能是获取用户的信息,但其日志打印中却出现了"创建用户错误"的文案。

2.  **不确定性优先原则**:
    这是最重要的原则,若功能正确性依赖无法审查的外部组件(如前端交互、下游rpc服务),不武断判定为bug。
    *   举例1:根据开发人员习惯,输入框相关的分隔符不一定需要后端来处理,也可能是前端分隔后调用多次接口,这块是不确定的;
    *   举例2:根据规范,用户密码一般需要hash加密后才能进行存储,如果在本服务检测出没有进行加密操作缺陷时,可能已经在其它服务进行了加密操作,由于是微服务架构,这块也是不确定的。

3.  **职责链追溯(关注点分离)原则**:
    要深刻理解当前的检测的是**微服务架构的分布式系统**,一个功能点可以由不同代码仓库来实现**其不同部分的能力**,明确当前代码的职责范围(如"某函数仅负责某字段的规则校验"),非本服务职责内的功能(如前端提示)禁止作出正确性判断。

4.  **逐行代码审查原则**:
    请**仔细审查每一行源代码**,并仔细思考确认其是否存在逻辑缺陷,不要因为在某一行代码中发现了明确的缺陷,就偷懒直接得出结论,而不再审阅任何其他代码行是否存在缺陷,**这种行为是不可接受的**极大概率会让你错失发现其它缺陷的机会!
相关推荐
Molesidy29 分钟前
【VSCode】VSCode或者Trae的扩展文件夹以及用户设置文件夹的路径更改到指定位置
ide·编辑器·trae
yosh'joy!!3 小时前
下载Trae使用
ai·trae
豆包MarsCode16 小时前
只需一个指令,让 OpenClaw 安排 TRAE 干活
trae
sugar15691 天前
Trae快速构建自己项目的docker镜像
docker·容器·trae
sugar15691 天前
Trae 添加项目规则,快速完成crmeb项目本地开发环境搭建
docker·容器·trae
欧简墨2 天前
kotlin Android Extensions插件迁移到viewbinding总结
android·trae
arbboter2 天前
【AI编程】约束即设计:AI时代的人机边界重构
ai编程·ai工作流·人机协作·trae·声明式执行·流程编排
进击的雷神4 天前
Trae AI IDE 完全指南:从入门到精通
大数据·ide·人工智能·trae
圣殿骑士-Khtangc5 天前
Trae IDE AI 编程超全使用教程|从入门到精通,解锁 AI 开发新效率
ide·人工智能·ai编程·编程助手·trae
Mr_Carl7 天前
我用 Trae 花了一周,从零打造了一个 AI 面试官🚀
面试·trae·vibecoding