Files
ai-proj-helper/skills-req/req-dev-plugin/skills/SKILL.md
T
johnQ 237631147a chore(skill): 清理全部 23 条历史校验警告
- 11 个超 20KB 的 SKILL.md 拆分,大章节移入 references/details.md
- 7 处非标准字段(arguments/user_invocable)移入 metadata
- 修 req-dev 4 条相对链接;validate 跳过行内代码避免 ![](...) 误报
- validate-skills.py: 23 warns -> 0 warns,0 errors
2026-10-31 22:21:07 +08:00

656 lines
18 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.
---
name: req-dev
description: 需求开发计划编写技能。用于 PRD 到代码转换、代码库分析、开发任务拆分、技术方案设计。当用户执行 /req doc 或需要编写开发计划时自动激活。
metadata:
arguments: <REQ-ID>
---
## 概述
本技能用于从 PRD 文档到代码实现的转换工作,包括:
- **PRD 分析**:提取功能点和技术要求
- **代码库探索**:定位相关代码和修改文件
- **架构引导**:按分层架构规划实施顺序
- **任务拆分**:自动拆分开发子任务
- **风险评估**:识别技术风险和影响范围
- **与 ai-proj 集成**:创建开发任务和文档
---
## 核心能力
### 1. PRD 到代码的智能转换
```
PRD 文档
↓ 分析
功能点提取
↓ 映射
技术实现方案
↓ 定位
修改文件清单
↓ 拆分
开发子任务
```
### 2. 代码库智能探索
使用 Task(Explore) 工具:
- 搜索相关功能的现有实现
- 识别类似模式和最佳实践
- 定位需要修改的文件
- 分析依赖关系
**探索策略**:
```
1. 关键词搜索(Grep)
- 功能名称(如 "manual", "手册")
- 模型名称(如 "Manual", "ManualHandler")
2. 文件模式匹配(Glob)
- 按命名规范定位(如 "*manual*.go", "*Manual*.tsx")
- 按层级定位(如 "models/", "handlers/")
3. 依赖分析
- 查看 import 语句
- 查看 API 调用链
```
### 3. 分层架构引导
#### Go 后端架构(ai-proj 项目)
```
1. models/ - 数据模型层
└── manual.go - GORM 模型定义、表结构、关联关系
2. database/ - 数据访问层(Repository)
└── manual_repository.go - CRUD 操作、复杂查询
3. services/ - 业务逻辑层(Service/Biz)
└── manual_service.go - 业务规则、事务处理
4. handlers/ - HTTP 处理层(Controller)
└── manual_handler.go - 请求解析、响应封装、参数验证
5. routes/ - 路由层
└── manual_routes.go - 路由注册、中间件配置
6. migrations/ - 数据库迁移
└── YYYYMMDDHHMMSS_add_manual_table.up.sql
```
**开发顺序**:Model → Repository → Service → Handler → Route → Migration
#### React 前端架构
```
1. types/ - 类型定义
└── manual.ts - TypeScript 接口、枚举
2. services/ - API 服务层
└── manualService.ts - API 封装、Axios 请求
3. components/ - 可复用组件
└── ManualCard.tsx - 通用 UI 组件
4. pages/ - 页面组件
└── ManualListPage.tsx - 业务页面
5. App.tsx - 路由配置
```
**开发顺序**:Types → Services → Components → Pages → Router
#### iOS 客户端架构 (SwiftUI + MVVM)
```
AI-Proj-iOS/
├── AI_Proj_iOSApp.swift # App 入口
├── Core/ # 核心层
│ ├── Architecture/ # 架构组件
│ │ ├── AppCoordinator.swift # 导航协调器
│ │ └── AppState.swift # 全局状态
│ ├── Components/ # 通用 UI 组件
│ │ └── LoadingView.swift # 加载动画等
│ ├── Config.swift # 配置(API URL 等)
│ ├── Services/ # 服务层
│ │ ├── APIEndpoints.swift # API 端点定义
│ │ ├── AuthService.swift # 认证服务
│ │ ├── DatabaseService.swift # 本地数据库
│ │ ├── DIContainer.swift # 依赖注入
│ │ ├── NetworkService.swift # 网络请求
│ │ └── ServiceProtocols.swift # 服务协议
│ ├── Theme/ # 主题配置
│ └── Utilities/ # 工具类
│ └── DeviceAdaptation.swift # 设备适配
├── Features/ # 功能模块(MVVM)
│ └── Requirements/ # 需求模块示例
│ ├── RequirementListView.swift # 列表视图
│ ├── RequirementListViewModel.swift # 列表 ViewModel
│ ├── RequirementDetailView.swift # 详情视图
│ └── RequirementDetailViewModel.swift # 详情 ViewModel
├── Models/ # 数据模型
│ ├── DTOs/ # API 响应 DTO
│ │ ├── RequirementListResponse.swift
│ │ └── TaskListResponse.swift
│ ├── RequirementModel.swift # 需求模型
│ └── TaskModel.swift # 任务模型
└── Resources/ # 资源文件
└── Assets.xcassets # 图片资源
```
**开发顺序**:Model → DTO → APIEndpoints → ServiceProtocols → ViewModel → View
---
## 工作流程
### 完整流程图
```
0. ⚠️ 需求验证(必须第一步执行)
├── 查看现有 UI/功能
├── 确认需求价值
└── 检查冗余/冲突
1. 获取需求信息
├── mcp__ai-proj__get_requirement
└── mcp__ai-proj__get_requirement_tasks
2. 分析 PRD 文档
├── 提取功能点
├── 识别技术要求
└── 确定改动范围
3. 探索代码库(Task Explore)
├── 搜索相关现有代码
├── 识别修改文件
└── 分析依赖关系
4. 生成技术方案
├── 后端改动规划(Go 分层)
├── 前端改动规划(React)
└── 数据库改动(Migration)
5. 拆分开发任务
├── 查找开发任务(link_role=implementation)
├── 按文件/模块拆分子任务
└── mcp__ai-proj__create_subtask
6. 生成开发文档
├── mcp__ai-proj__create-and-attach
└── 使用开发计划模板
7. 风险评估
├── 功能影响分析
├── 性能影响分析
└── 兼容性检查
```
### ⚠️ 第 0 步:需求验证(防止浪费时间)
**为什么需要这一步?**
> **教训**:如果不先验证需求,可能花几小时实现一个冗余或错误的功能。
**验证清单**(5-10分钟,节省几小时):
#### 1. 现有功能检查(最重要)
```bash
# 前端功能检查
## 步骤1:打开相关页面
cd /path/to/project
npm start # 或直接访问 localhost:3000
## 步骤2:手动浏览 UI,回答问题
- [ ] 这个功能是否已经存在?
- [ ] 现有 UI 是否已经显示相关信息?
- [ ] 是否有专门的列/区域显示该数据?
- [ ] 新功能会不会与现有功能重复?
# 后端功能检查
## 步骤1:查看数据库表结构
psql -U user -d database -c "\d table_name"
## 步骤2:检查现有 API
grep -r "router.GET.*manual" backend/routes/
## 步骤3:回答问题
- [ ] 数据库是否已有相关字段?
- [ ] API 是否已返回所需数据?
- [ ] 是否只需修改前端显示,无需后端改动?
```
**示例:REQ-20260126-0010 的失败案例**
```
❌ 错误做法(浪费3小时):
1. 看到需求"需求列表显示需求类型标签"
2. 直接开始实现:在标题旁边添加 Tag 组件
3. 写代码 → ESLint 修复 → 截图测试
4. 发现:页面已经有"分类"列显示标签!
✅ 正确做法(5分钟验证,避免浪费):
1. 打开 localhost:3000/requirements
2. 查看现有 UI:发现已有"分类"列显示类别标签
3. 结论:需求冗余,无需实现
4. 与 PM/用户确认:建议优化现有列,而非添加重复信息
```
#### 2. 价值验证
问自己3个问题:
1. **用户痛点**:这个功能解决什么具体问题?
- ❌ "显示类别标签" - 太抽象,已有列显示
- ✅ "用户在列表页快速识别需求类型,现有列不够明显" - 具体痛点
2. **替代方案**:是否有更简单的实现方式?
- ❌ 添加重复信息
- ✅ 优化现有列(如:增大标签、调整位置)
3. **投入产出比**:实现成本 vs 用户价值
- 如果只是"显示信息",但信息已经显示 → 价值为0
#### 3. 设计审查
- [ ] UI 设计是否合理?(不重复、不混乱)
- [ ] 是否符合现有设计规范?
- [ ] 是否有更优的交互方式?
#### 4. 快速验证流程(替代截图测试)
**快速验证方法**(按优先级):
| 方法 | 耗时 | 用途 | 何时使用 |
|------|------|------|----------|
| **现有UI检查** | 1-2分钟 | 验证功能是否已存在 | **第一步必做** |
| **TypeScript 类型检查** | 10秒 | 验证代码逻辑 | 每次改代码后 |
| **ESLint 检查** | 5秒 | 验证代码规范 | 每次改代码后 |
| **单元测试** | 30秒 | 验证业务逻辑 | 复杂逻辑必做 |
| **手动功能测试** | 2-3分钟 | 验证交互流程 | 实现完成后 |
| **截图验证** | 5-10分钟 | 验证视觉效果 | **仅最后一步** |
**原则**:
- ✅ 在编写代码前先验证需求(最重要)
- ✅ 优先使用自动化检查(快速)
- ✅ 截图仅用于最终视觉确认(不作为主要测试手段)
- ❌ 不要先实现再验证(浪费时间)
**验证示例**:
```bash
# 1. 现有UI检查(1分钟)
# 访问 localhost:3000/requirements
# 目视检查:是否已有分类列? → 是
# 2. TypeScript检查(10秒)
cd frontend && npm run type-check
# 期望:0 errors
# 3. ESLint检查(5秒)
npm run lint
# 期望:0 errors 或 warnings
# 4. 手动功能测试(2分钟)
# 刷新页面 → 确认标签显示 → 点击筛选 → 确认筛选工作
# 5. 截图(可选,仅用于记录)
# 如需要文档化,最后再截图
```
**检查清单总结**:
```markdown
## 需求实现前验证清单(必做)
- [ ] **现有UI检查**(1-2分钟)- 功能是否已存在?
- [ ] **价值验证** - 解决什么痛点?有无更好方案?
- [ ] **设计审查** - UI设计是否合理?
- [ ] **数据库检查** - 字段是否已存在?
- [ ] **API检查** - 接口是否已返回数据?
**通过验证后再开始编码!**
```
---
## 开发计划文档模板
```markdown
# [需求标题] 开发计划
## 1. 需求概述
### 1.1 需求信息
| 项目 | 内容 |
|------|------|
| 需求编号 | REQ-YYYYMMDD-XXXX |
| 需求标题 | [标题] |
| 需求类型 | feature/bug/improvement |
| 优先级 | high/medium/low |
| 预估工时 | Xh |
### 1.2 功能点清单
- [ ] 功能点1:[描述]
- [ ] 功能点2:[描述]
- [ ] 功能点3:[描述]
### 1.3 技术要求
- [ ] 性能要求:[描述]
- [ ] 安全要求:[描述]
- [ ] 兼容性要求:[描述]
---
## 2. 代码库分析
### 2.1 相关现有代码
| 文件路径 | 层级/类型 | 当前功能 | 是否需要修改 | 改动类型 |
|---------|----------|----------|-------------|---------|
| `backend/models/manual.go` | Model | 手册数据模型 | ❌ 无需修改 | - |
| `backend/database/manual_repository.go` | Repository | 手册数据访问 | ⚠️ 需检查 | 新增方法 |
| `backend/services/manual_service.go` | Service | 手册业务逻辑 | ✅ 需修改 | 新增业务逻辑 |
| `backend/handlers/manual_handler.go` | Handler | 手册 HTTP 处理 | ✅ 需修改 | 新增接口 |
| `backend/routes/manual_routes.go` | Route | 手册路由 | ✅ 需修改 | 注册新路由 |
| `frontend/src/types/manual.ts` | Types | 类型定义 | ⚠️ 需检查 | 可能新增类型 |
| `frontend/src/services/manualService.ts` | Service | API 服务 | ✅ 需修改 | 新增 API 调用 |
| `frontend/src/pages/ManualListPage.tsx` | Page | 手册列表页 | ✅ 需修改 | 新增功能 |
### 2.2 探索发现
- **现有实现**:[描述已有的相关功能]
- **可复用代码**:[可以参考或复用的代码模式]
- **依赖关系**:[需要注意的依赖和调用链]
---
## 性能影响评估
### 数据库性能
- **查询复杂度**:O(n) / O(n log n) / O(n²)
- **索引使用**:是否使用索引 / 是否需要新增索引
- **数据量**:预估查询数据量(< 100 / < 1000 / > 1000)
- **并发影响**:是否有锁竞争 / 是否需要事务
### API 性能
- **响应时间**:预期 < 100ms / < 500ms / < 1s
- **QPS 预估**:预估每秒请求数
- **缓存策略**:是否需要 Redis 缓存
- **限流策略**:是否需要限流保护
### 前端性能
- **首屏加载**:新增资源大小(JS/CSS/Image)
- **渲染性能**:是否有大列表渲染 / 是否需要虚拟滚动
- **内存占用**:是否有内存泄漏风险
- **交互响应**:用户操作响应时间 < 100ms
```
---
## 9. 与 ai-proj 集成
### 9.1 任务文档创建
```typescript
// 创建开发任务文档
mcp__ai-proj__create-and-attach({
taskId: 5326, // 开发任务 ID
title: "开发计划 - 项目手册列表页设计",
content: "# 开发计划\n\n[使用本模板生成的内容]"
})
```
### 9.2 子任务拆分
```typescript
// 拆分子任务
const subTasks = [
{ title: "[Model] 修改 manual.go" },
{ title: "[Handler] 修改 manual_handler.go" },
{ title: "[Page] 修改 ManualListPage.tsx" }
];
for (const task of subTasks) {
await mcp__ai-proj__create_subtask({
parentId: 5326,
title: task.title
});
}
```
### 9.3 开发进度更新
```typescript
// 开发过程中更新文档
mcp__ai-proj__update_task_document({
taskId: 5326,
content: originalContent + `
## 开发过程
### 实际修改
- 修改了 manual_handler.go,新增了发布接口
### 遇到的问题
- 问题1:路由冲突
- 解决方案:调整路由顺序
### 代码变更摘要
- 新增 1 个接口
- 修改 2 个文件
`
})
```
---
## 12. 工具使用指南
### 12.1 Task(Explore) 使用
**场景1:搜索功能相关代码**
```typescript
Task({
subagent_type: "Explore",
prompt: "搜索项目手册(manual)相关的所有后端代码,包括 Model、Handler、Service",
description: "Explore manual backend code"
})
```
**场景2:定位修改文件**
```typescript
Task({
subagent_type: "Explore",
prompt: "找到所有包含 ManualListPage 导航链接的文件",
description: "Find manual navigation links"
})
```
### 12.2 Grep 使用
```typescript
// 搜索后端代码
Grep({
pattern: "func.*Manual",
path: "backend/handlers",
output_mode: "content",
glob: "*.go"
})
// 搜索前端代码
Grep({
pattern: "ManualListPage",
path: "frontend/src",
output_mode: "files_with_matches",
glob: "*.{tsx,ts}"
})
```
### 12.3 Glob 使用
```typescript
// 查找所有 manual 相关文件
Glob({
pattern: "**/*manual*.{go,tsx,ts}",
path: "."
})
// 查找特定目录下的文件
Glob({
pattern: "*.go",
path: "backend/handlers"
})
```
---
## 13. 输出规范
### 13.1 开发文档结构
```markdown
# [需求标题] 开发计划
## 1. 需求概述
[需求信息、功能点、技术要求]
## 2. 代码库分析
[相关代码、探索发现、依赖关系]
## 3. 技术方案设计
### 3.1 后端改动
[Model → Repository → Service → Handler → Route]
### 3.2 前端改动
[Types → Services → Components → Pages]
### 3.3 数据库改动
[Migration 脚本]
## 4. 开发任务拆分
[子任务列表,按层级和文件拆分]
## 5. 实施顺序
[详细的开发步骤和时间安排]
## 6. 技术风险评估
[影响分析、风险清单、性能影响]
## 7. 测试策略
[单元测试、集成测试、E2E 测试]
## 8. 注意事项
[特殊说明、依赖关系、兼容性]
```
### 13.2 任务标题规范
```
格式:[层级/类型] 动作 + 文件名/模块名 + 简要说明
示例:
- [Model] 新增 manual.go 手册数据模型
- [Handler] 修改 manual_handler.go 添加发布接口
- [Page] 修改 ManualListPage.tsx 添加发布按钮
- [Migration] 创建手册版本表
- [Test] 添加手册发布功能单元测试
```
---
## 14. 常见问题
### Q1: 如何确定是否需要新增数据库表?
**A**: 检查以下条件:
- 新数据是否与现有实体是 1:N 或 N:N 关系
- 新数据是否有独立的生命周期
- 新数据是否需要独立查询和管理
如果任一条件满足,考虑新增表;否则可以扩展现有表字段。
### Q2: 什么时候需要创建子任务?
**A**: 当以下条件满足时创建子任务:
- 需要修改 3 个以上文件
- 预估总工时 > 4 小时
- 涉及多个层级(如 Model + Service + Handler)
否则可以作为单个任务处理。
### Q3: 如何评估性能影响?
**A**: 关注以下维度:
- 数据库:查询复杂度、索引使用、数据量
- API:响应时间、QPS、缓存策略
- 前端:首屏加载、渲染性能、内存占用
如果任一维度有显著影响,需要优化方案。
### Q4: 什么时候需要 Migration?
**A**: 以下情况需要 Migration:
- 新增/删除/修改表
- 新增/删除/修改字段
- 新增/删除索引
- 数据迁移/转换
---
## 15. 附录
### 15.1 常用命令速查
```bash
# 后端开发
cd backend
go run main.go # 启动服务
go test ./... # 运行测试
make swagger # 生成 Swagger 文档
# Web 前端开发
cd frontend
npm start # 启动开发服务器
npm run build # 构建生产版本
npm test # 运行测试
# iOS 开发
cd AI-Proj-iOS
open AI-Proj-iOS.xcodeproj # 打开 Xcode 项目
xcodebuild -scheme AI-Proj-iOS -sdk iphonesimulator build # 命令行构建
xcodebuild test -scheme AI-Proj-iOS -sdk iphonesimulator # 运行测试
# 数据库迁移
cd backend
migrate -path migrations -database "postgres://..." up
```
### 15.2 相关文档
- [CLAUDE.md](../../../CLAUDE.md) - 项目说明
- [req SKILL.md](../../req-plugin/skills/SKILL.md) - 需求管理
- [req-prd SKILL.md](../../req-prd-plugin/skills/SKILL.md) - PRD 编写
- [dev-coding SKILL.md](../../../skills-dev/dev-coding-plugin/skills/SKILL.md) - 代码实现
- [dev-test SKILL.md](../../../skills-dev/dev-test-plugin/skills/dev-test/SKILL.md) - 测试
---
## 变更记录
| 版本 | 日期 | 变更内容 | 变更人 |
|------|------|----------|--------|
| V1.0 | 2026-01-26 | 初始版本,创建 req-dev 技能 | Claude + qiudl |
| V1.1 | 2026-01-29 | 添加 iOS 端开发规范(SwiftUI + MVVM 架构) | Claude Opus 4.5 |
| V1.2 | 2026-08-26 | 新增既有契约与读模型迁移强制门禁,防止新写链路与原 API/前端脱节 | Codex |
## 详细内容
以下章节已移到 [references/details.md](references/details.md):
- ⚠️ 既有契约与读模型迁移门禁(必须)
- 3. 技术方案设计
- 4. 开发任务拆分
- 5. 实施顺序指南
- 6. 技术风险评估
- 7. 代码规范检查
- 8. 测试策略
- 10. 最佳实践
- 11. 项目特定规范(ai-proj)