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

18 KiB
Raw Blame History

name, description, metadata
name description metadata
req-dev 需求开发计划编写技能。用于 PRD 到代码转换、代码库分析、开发任务拆分、技术方案设计。当用户执行 /req doc 或需要编写开发计划时自动激活。
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. 现有功能检查(最重要)

# 前端功能检查
## 步骤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分钟 验证视觉效果 仅最后一步

原则:

  • ✅ 在编写代码前先验证需求(最重要)
  • ✅ 优先使用自动化检查(快速)
  • ✅ 截图仅用于最终视觉确认(不作为主要测试手段)
  • ❌ 不要先实现再验证(浪费时间)

验证示例:

# 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. 截图(可选,仅用于记录)
# 如需要文档化,最后再截图

检查清单总结:

## 需求实现前验证清单(必做)

- [ ] **现有UI检查**(1-2分钟)- 功能是否已存在?
- [ ] **价值验证** - 解决什么痛点?有无更好方案?
- [ ] **设计审查** - UI设计是否合理?
- [ ] **数据库检查** - 字段是否已存在?
- [ ] **API检查** - 接口是否已返回数据?

**通过验证后再开始编码!**

开发计划文档模板

# [需求标题] 开发计划

## 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 任务文档创建

// 创建开发任务文档
mcp__ai-proj__create-and-attach({
  taskId: 5326, // 开发任务 ID
  title: "开发计划 - 项目手册列表页设计",
  content: "# 开发计划\n\n[使用本模板生成的内容]"
})

9.2 子任务拆分

// 拆分子任务
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 开发进度更新

// 开发过程中更新文档
mcp__ai-proj__update_task_document({
  taskId: 5326,
  content: originalContent + `

## 开发过程

### 实际修改
- 修改了 manual_handler.go,新增了发布接口

### 遇到的问题
- 问题1:路由冲突
  - 解决方案:调整路由顺序

### 代码变更摘要
- 新增 1 个接口
- 修改 2 个文件
`
})

12. 工具使用指南

12.1 Task(Explore) 使用

场景1:搜索功能相关代码

Task({
  subagent_type: "Explore",
  prompt: "搜索项目手册(manual)相关的所有后端代码,包括 Model、Handler、Service",
  description: "Explore manual backend code"
})

场景2:定位修改文件

Task({
  subagent_type: "Explore",
  prompt: "找到所有包含 ManualListPage 导航链接的文件",
  description: "Find manual navigation links"
})

12.2 Grep 使用

// 搜索后端代码
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 使用

// 查找所有 manual 相关文件
Glob({
  pattern: "**/*manual*.{go,tsx,ts}",
  path: "."
})

// 查找特定目录下的文件
Glob({
  pattern: "*.go",
  path: "backend/handlers"
})

13. 输出规范

13.1 开发文档结构

# [需求标题] 开发计划

## 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 常用命令速查

# 后端开发
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 相关文档


变更记录

版本 日期 变更内容 变更人
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:

  • ⚠️ 既有契约与读模型迁移门禁(必须)
    1. 技术方案设计
    1. 开发任务拆分
    1. 实施顺序指南
    1. 技术风险评估
    1. 代码规范检查
    1. 测试策略
    1. 最佳实践
    1. 项目特定规范(ai-proj)