BMAD-METHOD/bmad-core/tasks/document-project.md

346 lines
12 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!-- 由 BMAD™ Core 驱动 -->
# 记录现有项目
## 目的
为现有项目生成为AI开发代理优化的综合文档。此任务创建结构化的参考资料使AI代理能够理解项目背景、惯例和模式从而有效地为任何代码库做出贡献。
## 任务说明
### 1. 初步项目分析
**关键:** 首先检查上下文中是否存在PRD或需求文档。如果存在则用它来将您的文档工作重点放在相关领域。
**如果存在PRD**
- 审查PRD以了解计划中的增强/功能
- 确定将受影响的模块、服务或区域
- 仅将文档重点放在这些相关区域
- 跳过代码库中不相关的部分,以保持文档精简
**如果不存在PRD**
询问用户:
“我注意到您没有提供PRD或需求文档。为了创建更专注、更有用的文档我推荐以下选项之一
1. **首先创建PRD** - 您希望我在记录之前帮助创建棕地PRD吗这有助于将文档重点放在相关领域。
2. **提供现有需求** - 您是否有可以共享的需求文档、史诗或功能描述?
3. **描述重点** - 您能简要描述您计划的增强或功能吗?例如:
- ‘向用户服务添加支付处理’
- ‘重构身份验证模块’
- 与新的第三方API集成
4. **记录所有内容** - 或者我应该继续对整个代码库进行综合文档记录?(注意:对于大型项目,这可能会产生过多的文档)
请告诉我您的偏好,或者如果您愿意,我可以继续进行完整的文档记录。”
根据他们的回应:
- 如果他们选择选项1-3使用该背景来专注文档记录
- 如果他们选择选项4或拒绝继续下面的综合分析
首先对现有项目进行分析。使用可用工具:
1. **项目结构发现**:检查根目录结构,识别主文件夹,并了解整体组织
2. **技术栈识别**查找package.json、requirements.txt、Cargo.toml、pom.xml等以识别语言、框架和依赖项
3. **构建系统分析**查找构建脚本、CI/CD配置和开发命令
4. **现有文档审查**检查README文件、docs文件夹和任何现有文档
5. **代码模式分析**:抽样关键文件以了解编码模式、命名约定和架构方法
向用户提出这些启发性问题,以更好地了解他们的需求:
- 该项目的主要目的是什么?
- 代码库中是否有任何特定领域对于代理理解特别复杂或重要?
- 您希望AI代理在该项目上执行哪些类型的任务例如错误修复、功能添加、重构、测试
- 您是否有任何偏好的现有文档标准或格式?
- 文档应针对哪个技术细节级别?(初级开发人员、高级开发人员、混合团队)
- 您是否正在计划特定的功能或增强?(这有助于专注文档记录)
### 2. 深入代码库分析
关键:在生成文档之前,对现有代码库进行广泛分析:
1. **探索关键领域**
- 入口点(主文件、索引文件、应用程序初始化程序)
- 配置文件和环境设置
- 包依赖项和版本
- 构建和部署配置
- 测试套件和覆盖率
2. **提出澄清问题**
- “我看到您正在使用[技术X]。我应该记录任何自定义模式或惯例吗?”
- “开发人员在此系统中最关键/复杂的部分是什么?”
- “我应该捕获任何未记录的‘部落知识’领域吗?”
- “我应该记录哪些技术债务或已知问题?”
- “代码库的哪些部分更改最频繁?”
3. **映射现实**
- 识别实际使用的模式(而不是理论上的最佳实践)
- 找到关键业务逻辑的位置
- 定位集成点和外部依赖项
- 记录变通方法和技术债务
- 注意与标准模式不同的区域
**如果提供了PRD**:还要分析增强功能需要更改什么
### 3. 核心文档生成
[[LLM: 生成一份反映代码库实际状态的综合性棕地架构文档。
**关键**:这不是一份理想化的架构文档。记录存在的内容,包括:
- 技术债务和变通方法
- 不同部分之间不一致的模式
- 无法更改的旧代码
- 集成约束
- 性能瓶颈
**文档结构**
# [项目名称] 棕地架构文档
## 引言
本文档记录了[项目名称]代码库的当前状态包括技术债务、变通方法和实际模式。它作为AI代理进行增强工作的参考。
### 文档范围
[如果提供了PRD“专注于与以下内容相关的领域{增强描述}”]
[如果没有PRD“整个系统的综合文档”]
### 变更日志
| 日期 | 版本 | 描述 | 作者 |
| --- | --- | --- | --- |
| [日期] | 1.0 | 初始棕地分析 | [分析师] |
## 快速参考 - 关键文件和入口点
### 理解系统的关键文件
- **主入口**`src/index.js`(或实际入口点)
- **配置**`config/app.config.js`、`.env.example`
- **核心业务逻辑**`src/services/`、`src/domain/`
- **API定义**`src/routes/`或指向OpenAPI规范的链接
- **数据库模型**`src/models/`或指向模式文件的链接
- **关键算法**[列出具有复杂逻辑的特定文件]
### 如果提供了PRD - 增强影响区域
[突出显示计划的增强将影响哪些文件/模块]
## 高层架构
### 技术摘要
### 实际技术栈来自package.json/requirements.txt
| 类别 | 技术 | 版本 | 说明 |
| --- | --- | --- | --- |
| 运行时 | Node.js | 16.x | [任何约束] |
| 框架 | Express | 4.18.2 | [自定义中间件?] |
| 数据库 | PostgreSQL | 13 | [连接池设置] |
等等...
### 存储库结构现实检查
- 类型:[单体仓库/多仓库/混合]
- 包管理器:[npm/yarn/pnpm]
- 值得注意的:[任何不寻常的结构决策]
## 源代码树和模块组织
### 项目结构(实际)
```text
project-root/
├── src/
│ ├── controllers/ # HTTP请求处理程序
│ ├── services/ # 业务逻辑(注意:用户和支付服务之间的模式不一致)
│ ├── models/ # 数据库模型Sequelize
│ ├── utils/ # 混合包 - 需要重构
│ └── legacy/ # 请勿修改 - 仍在使用的旧支付系统
├── tests/ # Jest测试覆盖率60%
├── scripts/ # 构建和部署脚本
└── config/ # 环境配置
```
### 关键模块及其用途
- **用户管理**`src/services/userService.js` - 处理所有用户操作
- **身份验证**`src/middleware/auth.js` - 基于JWT的自定义实现
- **支付处理**`src/legacy/payment.js` - 关键:不要重构,紧密耦合
- **[列出其他关键模块及其各自的文件]**
## 数据模型和API
### 数据模型
不要重复,而是引用实际的模型文件:
- **用户模型**:参见 `src/models/User.js`
- **订单模型**:参见 `src/models/Order.js`
- **相关类型**`src/types/` 中的TypeScript定义
### API规范
- **OpenAPI规范**`docs/api/openapi.yaml`(如果存在)
- **Postman集合**`docs/api/postman-collection.json`
- **手动端点**[列出发现的任何未记录的端点]
## 技术债务和已知问题
### 关键技术债务
1. **支付服务**`src/legacy/payment.js` 中的旧代码 - 紧密耦合,没有测试
2. **用户服务**与其他服务模式不同使用回调而不是Promise
3. **数据库迁移**:手动跟踪,没有合适的迁移工具
4. **[其他重大债务]**
### 变通方法和陷阱
- **环境变量**:即使对于预发环境,也必须设置 `NODE_ENV=production`(历史原因)
- **数据库连接**连接池硬编码为10更改会破坏支付服务
- **[开发人员需要知道的其他变通方法]**
## 集成点和外部依赖
### 外部服务
| 服务 | 目的 | 集成类型 | 关键文件 |
| --- | --- | --- | --- |
| Stripe | 支付 | REST API | `src/integrations/stripe/` |
| SendGrid | 电子邮件 | SDK | `src/services/emailService.js` |
等等...
### 内部集成点
- **前端通信**端口3000上的REST API需要特定的头信息
- **后台作业**Redis队列参见 `src/workers/`
- **[其他集成]**
## 开发和部署
### 本地开发设置
1. 实际可行的步骤(不是理想步骤)
2. 设置的已知问题
3. 所需的环境变量(参见 `.env.example`
### 构建和部署过程
- **构建命令**`npm run build`webpack配置在 `webpack.config.js` 中)
- **部署**:通过 `scripts/deploy.sh` 手动部署
- **环境**:开发、预发、生产(参见 `config/environments/`
## 测试现状
### 当前测试覆盖率
- 单元测试60%覆盖率Jest
- 集成测试:最少,在 `tests/integration/`
- 端到端测试:无
- 手动测试主要的QA方法
### 运行测试
```bash
npm test # 运行单元测试
npm run test:integration # 运行集成测试(需要本地数据库)
```
## 如果提供了增强PRD - 影响分析
### 需要修改的文件
根据增强需求,这些文件将受到影响:
- `src/services/userService.js` - 添加新的用户字段
- `src/models/User.js` - 更新模式
- `src/routes/userRoutes.js` - 新的端点
- [等等...]
### 需要的新文件/模块
- `src/services/newFeatureService.js` - 新的业务逻辑
- `src/models/NewFeature.js` - 新的数据模型
- [等等...]
### 集成注意事项
- 需要与现有的身份验证中间件集成
- 必须遵循 `src/utils/responseFormatter.js` 中的现有响应格式
- [其他集成点]
## 附录 - 有用的命令和脚本
### 常用命令
```bash
npm run dev # 启动开发服务器
npm run build # 生产构建
npm run migrate # 运行数据库迁移
npm run seed # 填充测试数据
```
### 调试和故障排除
- **日志**:检查 `logs/app.log` 以获取应用程序日志
- **调试模式**:设置 `DEBUG=app:*` 以获取详细日志
- **常见问题**:参见 `docs/troubleshooting.md`]]
### 4. 文档交付
1. **在Web UI中Gemini, ChatGPT, Claude**
- 在一个响应中呈现整个文档(如果太长则分多个)
- 告诉用户复制并另存为 `docs/brownfield-architecture.md``docs/project-architecture.md`
- 如果需要提及以后可以在IDE中分片
2. **在IDE环境中**
- 将文档创建为 `docs/brownfield-architecture.md`
- 告知用户此单个文档包含所有架构信息
- 如果需要以后可以使用PO代理分片
文档应足够全面,以便将来的代理能够理解:
- 系统的实际状态(非理想化)
- 在哪里找到关键文件和逻辑
- 存在哪些技术债务
- 必须遵守哪些约束
- 如果提供了PRD增强功能需要更改什么]]
### 5. 质量保证
关键:在最终确定文档之前:
1. **准确性检查**:验证所有技术细节与实际代码库匹配
2. **完整性审查**:确保所有主要系统组件都已记录
3. **重点验证**:如果用户提供了范围,验证相关领域是否被强调
4. **清晰度评估**检查解释对AI代理是否清晰
5. **导航**:确保文档具有清晰的章节结构,便于参考
在主要章节后应用高级启发任务,以根据用户反馈进行完善。
## 成功标准
- 创建了单一的综合性棕地架构文档
- 文档反映了现实,包括技术债务和变通方法
- 关键文件和模块用实际路径引用
- 模型/API引用源文件而不是重复内容
- 如果提供了PRD清晰的影响分析显示需要更改的内容
- 文档使AI代理能够导航和理解实际代码库
- 清楚地记录了技术约束和“陷阱”
## 说明
- 此任务创建一个捕获系统真实状态的单一文档
- 尽可能引用实际文件而不是重复内容
- 诚实地记录技术债务、变通方法和约束
- 对于有PRD的棕地项目提供清晰的增强影响分析
- 目标是为从事实际工作的AI代理提供实用的文档