Initial TrueGrowth source import
This commit is contained in:
815
docs/SPEC_KIT_BEST_PRACTICES.md
Normal file
815
docs/SPEC_KIT_BEST_PRACTICES.md
Normal file
@@ -0,0 +1,815 @@
|
||||
# Spec-Kit 最佳实践指南
|
||||
|
||||
本文档介绍如何在 Opentu 项目中使用 GitHub Spec-Kit 进行规范驱动开发(Spec-Driven Development, SDD)。
|
||||
|
||||
## 目录
|
||||
|
||||
- [什么是 Spec-Kit](#什么是-spec-kit)
|
||||
- [核心理念](#核心理念)
|
||||
- [安装与设置](#安装与设置)
|
||||
- [工作流程](#工作流程)
|
||||
- [Monorepo 项目配置](#monorepo-项目配置)
|
||||
- [最佳实践](#最佳实践)
|
||||
- [常见问题](#常见问题)
|
||||
|
||||
## 什么是 Spec-Kit
|
||||
|
||||
Spec-Kit 是 GitHub 开源的规范驱动开发工具包,它将传统的"先编码后写文档"流程倒置为"先写规范后生成代码"。规范成为项目的真实来源(source of truth),AI 工具根据规范生成、测试和验证代码。
|
||||
|
||||
### 核心组件
|
||||
|
||||
1. **Specify CLI** - 用于初始化项目和下载模板的命令行工具
|
||||
2. **模板和脚本** - 预设的规范模板和辅助脚本
|
||||
3. **AI 集成** - 支持 Claude Code、GitHub Copilot、Gemini CLI 等 AI 编码助手
|
||||
|
||||
### 支持的 AI 工具
|
||||
|
||||
- Claude Code (推荐用于 Opentu 项目)
|
||||
- GitHub Copilot
|
||||
- Gemini CLI
|
||||
- Cursor
|
||||
- 其他兼容的 AI 编码助手
|
||||
|
||||
## 核心理念
|
||||
|
||||
### 规范驱动开发的优势
|
||||
|
||||
1. **意图优先** - 从"做什么"和"为什么"开始,而不是"怎么做"
|
||||
2. **清晰性** - 在编码前就明确需求和架构决策
|
||||
3. **活文档** - 规范与代码同步演进,始终保持最新
|
||||
4. **人机协作** - 人类负责战略决策,AI 负责执行实现
|
||||
5. **早期验证** - 在多个检查点捕获需求偏差,避免后期返工
|
||||
|
||||
### 何时使用 Spec-Kit
|
||||
|
||||
**✅ 推荐使用:**
|
||||
- 为现有系统添加新功能
|
||||
- 复杂的功能开发需要架构决策
|
||||
- 团队协作需要明确的需求文档
|
||||
- 需要保持代码与文档同步
|
||||
|
||||
**❌ 不建议使用:**
|
||||
- 简单的 bug 修复
|
||||
- 样式微调
|
||||
- 配置文件更新
|
||||
- 一次性实验性代码
|
||||
|
||||
## 安装与设置
|
||||
|
||||
### 前置要求
|
||||
|
||||
```bash
|
||||
# 检查 Python 版本 (需要 3.11+)
|
||||
python --version
|
||||
|
||||
# 检查 Git
|
||||
git --version
|
||||
|
||||
# 安装 uv 包管理器
|
||||
curl -LsSf https://astral.sh/uv/install.sh | sh
|
||||
```
|
||||
|
||||
### 初始化 Spec-Kit
|
||||
|
||||
```bash
|
||||
# 在项目根目录执行
|
||||
npx @github/specify init
|
||||
|
||||
# 或使用 Python 包
|
||||
pip install github-specify
|
||||
specify init
|
||||
```
|
||||
|
||||
这将创建 `.specify/` 目录结构:
|
||||
|
||||
```
|
||||
.specify/
|
||||
├── memory/
|
||||
│ └── constitution.md # 项目宪章(非常重要!)
|
||||
├── specifications/ # 功能规范文档
|
||||
├── plans/ # 实现计划
|
||||
└── tasks/ # 任务列表
|
||||
```
|
||||
|
||||
## 快速开始 - Specify 命令步骤流程
|
||||
|
||||
### 完整开发周期命令序列
|
||||
|
||||
```bash
|
||||
# 0. 前置准备 - 初始化项目
|
||||
npx @github/specify init
|
||||
|
||||
# 在 Claude Code 中按顺序执行以下 slash 命令:
|
||||
|
||||
# 1. 建立宪章 (一次性,项目级)
|
||||
/speckit.constitution
|
||||
|
||||
# 2. 编写功能规范 (每个新功能)
|
||||
/speckit.specify
|
||||
|
||||
# 3. (可选)澄清不明确的需求
|
||||
/speckit.clarify
|
||||
|
||||
# 4. 制定实现计划
|
||||
/speckit.plan
|
||||
|
||||
# 5. 生成任务清单
|
||||
/speckit.tasks
|
||||
|
||||
# 6. (可选)分析一致性
|
||||
/speckit.analyze
|
||||
|
||||
# 7. (可选)生成验收检查清单
|
||||
/speckit.checklist
|
||||
|
||||
# 8. 执行实现
|
||||
/speckit.implement
|
||||
|
||||
# 9. (可选)将任务转换为 GitHub Issues
|
||||
/speckit.taskstoissues
|
||||
```
|
||||
|
||||
### 命令详解
|
||||
|
||||
| 命令 | 用途 | 执行时机 | 输出文件 |
|
||||
|------|------|---------|---------|
|
||||
| `/speckit.constitution` | 定义项目宪章和开发原则 | 项目初期(一次性) | `.specify/memory/constitution.md` |
|
||||
| `/speckit.specify` | 编写功能规范(what & why) | 每个新功能开始前 | `.specify/specifications/{feature}.md` |
|
||||
| `/speckit.clarify` | 识别并澄清规范中的不明确之处 | 规范编写后(可选) | 更新 `.specify/specifications/{feature}.md` |
|
||||
| `/speckit.plan` | 制定技术实现方案(how) | 规范确认后 | `.specify/plans/{feature}-plan.md` |
|
||||
| `/speckit.tasks` | 分解为可执行任务 | 计划制定后 | `.specify/tasks/{feature}-tasks.md` |
|
||||
| `/speckit.analyze` | 检查规范/计划/任务的一致性 | 任务生成后(可选) | 分析报告 |
|
||||
| `/speckit.checklist` | 生成验收检查清单 | 实现前(可选) | 自定义检查清单 |
|
||||
| `/speckit.implement` | AI 执行任务实现 | 任务清单确认后 | 实际代码文件 |
|
||||
| `/speckit.taskstoissues` | 将任务转换为 GitHub Issues | 团队协作场景(可选) | GitHub Issues |
|
||||
|
||||
### 典型工作流示例
|
||||
|
||||
#### 场景 1: 首次使用(新项目)
|
||||
|
||||
```bash
|
||||
# Step 1: 初始化
|
||||
cd /path/to/aitu
|
||||
npx @github/specify init
|
||||
|
||||
# Step 2: 在 Claude Code 中
|
||||
/speckit.constitution
|
||||
# AI 会引导你定义项目宪章,你可以基于现有的 CODING_STANDARDS.md
|
||||
|
||||
# Step 3: 开发第一个功能
|
||||
/speckit.specify
|
||||
# 描述: "添加图片圆形裁剪功能"
|
||||
|
||||
/speckit.plan
|
||||
# AI 制定技术方案
|
||||
|
||||
/speckit.tasks
|
||||
# AI 生成任务列表
|
||||
|
||||
/speckit.implement
|
||||
# AI 开始实现
|
||||
```
|
||||
|
||||
#### 场景 2: 日常功能开发
|
||||
|
||||
```bash
|
||||
# 直接跳过 constitution(已存在)
|
||||
|
||||
# Step 1: 写规范
|
||||
/speckit.specify
|
||||
# 输入: "用户可以导出白板为 PDF 格式"
|
||||
|
||||
# Step 2: (可选)澄清
|
||||
/speckit.clarify
|
||||
# AI 提问: "PDF 导出是否包含注释?", "是否支持分页?"等
|
||||
# 你回答后,AI 更新规范
|
||||
|
||||
# Step 3: 制定计划
|
||||
/speckit.plan
|
||||
|
||||
# Step 4: 生成任务
|
||||
/speckit.tasks
|
||||
|
||||
# Step 5: (可选)分析一致性
|
||||
/speckit.analyze
|
||||
# AI 检查规范、计划、任务是否一致
|
||||
|
||||
# Step 6: 实现
|
||||
/speckit.implement
|
||||
```
|
||||
|
||||
#### 场景 3: 团队协作
|
||||
|
||||
```bash
|
||||
# 产品经理/技术负责人
|
||||
/speckit.specify
|
||||
/speckit.plan
|
||||
/speckit.tasks
|
||||
|
||||
# 转换为 GitHub Issues
|
||||
/speckit.taskstoissues
|
||||
# 团队成员可以在 GitHub 上认领任务
|
||||
|
||||
# 开发团队成员
|
||||
# 直接使用 GitHub Issues 进行开发
|
||||
# 或者再次运行 /speckit.implement 自动实现
|
||||
```
|
||||
|
||||
### 工作流检查点
|
||||
|
||||
```
|
||||
┌─────────────────┐
|
||||
│ Constitution │ ← 项目宪章(一次性)
|
||||
└────────┬────────┘
|
||||
│
|
||||
▼
|
||||
┌─────────────────┐
|
||||
│ Specify │ ← 功能规范(每个功能)
|
||||
└────────┬────────┘
|
||||
│
|
||||
├──→ [Clarify] (可选澄清)
|
||||
│
|
||||
▼
|
||||
┌─────────────────┐
|
||||
│ Plan │ ← 技术方案
|
||||
└────────┬────────┘
|
||||
│
|
||||
▼
|
||||
┌─────────────────┐
|
||||
│ Tasks │ ← 任务分解
|
||||
└────────┬────────┘
|
||||
│
|
||||
├──→ [Analyze] (可选分析)
|
||||
├──→ [Checklist] (可选检查清单)
|
||||
├──→ [TasksToIssues] (可选团队协作)
|
||||
│
|
||||
▼
|
||||
┌─────────────────┐
|
||||
│ Implement │ ← AI 执行实现
|
||||
└─────────────────┘
|
||||
│
|
||||
▼
|
||||
[Code Review]
|
||||
│
|
||||
▼
|
||||
[Merge & Deploy]
|
||||
```
|
||||
|
||||
## 工作流程
|
||||
|
||||
Spec-Kit 遵循五阶段工作流,每个阶段都有明确的检查点:
|
||||
|
||||
### 1. 建立宪章 (Constitution)
|
||||
|
||||
**命令:** `/speckit.constitution`
|
||||
|
||||
宪章是项目的"根本大法",定义不可妥协的原则和标准。
|
||||
|
||||
**Opentu 项目宪章示例:**
|
||||
|
||||
```markdown
|
||||
# Opentu 项目宪章
|
||||
|
||||
## 代码质量原则
|
||||
|
||||
### 文件大小限制
|
||||
- 单个文件不超过 500 行代码(包括空行和注释)
|
||||
- 超过限制必须进行合理拆分
|
||||
|
||||
### TypeScript 规范
|
||||
- 必须使用严格的 TypeScript 配置
|
||||
- 禁止使用 `any` 类型,使用具体类型或泛型
|
||||
- 所有组件 Props 必须有类型定义
|
||||
|
||||
### 架构约定
|
||||
- 使用插件化架构(`withXxx` 模式)
|
||||
- React 组件必须使用函数式组件和 Hooks
|
||||
- 状态管理优先使用 React Context
|
||||
|
||||
### UI/UX 规范
|
||||
- UI 组件必须使用 TDesign React (light 主题)
|
||||
- Tooltip 统一使用 `theme='light'`
|
||||
- 遵循品牌色彩系统(橙金色 #F39C12、蓝紫色 #5A4FCF)
|
||||
|
||||
### 测试要求
|
||||
- 所有新功能必须包含单元测试
|
||||
- 测试覆盖率不低于 80%
|
||||
- 提交前必须通过类型检查和测试
|
||||
|
||||
### Git 提交规范
|
||||
- 遵循 Conventional Commits: `<type>(<scope>): <subject>`
|
||||
- 类型: feat, fix, docs, style, refactor, test, chore, perf, ci
|
||||
|
||||
### 性能要求
|
||||
- 大组件必须使用 React.lazy 进行代码分割
|
||||
- 图片必须使用懒加载
|
||||
- 长列表必须考虑虚拟化
|
||||
|
||||
### 安全原则
|
||||
- 所有用户输入必须验证和清理
|
||||
- 不得硬编码敏感信息
|
||||
- API 调用必须有安全的错误处理
|
||||
```
|
||||
|
||||
**最佳实践:**
|
||||
- 基于现有的 `CODING_STANDARDS.md` 提炼核心原则
|
||||
- 宪章应该简洁(1-2 页),只包含非妥协性原则
|
||||
- 定期审查和更新宪章
|
||||
|
||||
### 2. 编写规范 (Specification)
|
||||
|
||||
**命令:** `/speckit.specify`
|
||||
|
||||
规范聚焦于"做什么"和"为什么",避免过早陷入技术细节。
|
||||
|
||||
**好的规范示例:**
|
||||
|
||||
```markdown
|
||||
# 规范: 图片圆形裁剪功能
|
||||
|
||||
## 背景
|
||||
用户在插入图片后,只能使用方形裁剪,无法创建圆形或椭圆形的图片效果,
|
||||
限制了设计创意。
|
||||
|
||||
## 目标
|
||||
为用户提供三种图片裁剪形状选项:方形、圆形、椭圆形。
|
||||
|
||||
## 用户故事
|
||||
作为白板用户,我希望能够:
|
||||
1. 选中画布上的图片
|
||||
2. 点击工具栏的"裁剪"按钮
|
||||
3. 在弹出菜单中选择裁剪形状(方形/圆形/椭圆形)
|
||||
4. 看到图片以选定形状显示
|
||||
|
||||
## 功能需求
|
||||
- FR1: 在图片选中时显示裁剪按钮
|
||||
- FR2: 提供三种裁剪形状选项
|
||||
- FR3: 裁剪后保持图片质量
|
||||
- FR4: 支持撤销/重做操作
|
||||
|
||||
## 非功能需求
|
||||
- NFR1: 裁剪操作响应时间 < 200ms
|
||||
- NFR2: 裁剪不影响原始图片文件
|
||||
- NFR3: 支持移动端触摸操作
|
||||
|
||||
## 成功标准
|
||||
- 用户可以成功应用三种裁剪形状
|
||||
- E2E 测试通过
|
||||
- 符合品牌设计规范
|
||||
```
|
||||
|
||||
**❌ 避免在规范阶段:**
|
||||
- 指定具体的技术实现(如"使用 canvas API")
|
||||
- 详细的代码结构
|
||||
- 具体的库或框架选择
|
||||
|
||||
### 3. 制定计划 (Plan)
|
||||
|
||||
**命令:** `/speckit.plan`
|
||||
|
||||
计划阶段做出技术决策,选择实现方案。
|
||||
|
||||
**计划示例:**
|
||||
|
||||
```markdown
|
||||
# 实现计划: 图片圆形裁剪功能
|
||||
|
||||
## 技术栈选择
|
||||
- 图片处理: Canvas API (浏览器原生支持)
|
||||
- 组件库: TDesign React Popup 组件
|
||||
- 状态管理: React useState + useCallback
|
||||
|
||||
## 架构方案
|
||||
|
||||
### 组件结构
|
||||
```
|
||||
components/
|
||||
├── image-crop/
|
||||
│ ├── ImageCropPopup.tsx # 裁剪菜单弹窗
|
||||
│ ├── ImageCropPopup.scss # 样式文件
|
||||
│ ├── image-crop.types.ts # 类型定义
|
||||
│ └── use-image-crop.ts # 裁剪逻辑 Hook
|
||||
```
|
||||
|
||||
### 数据流
|
||||
1. 用户选中图片 -> 触发 popup 显示
|
||||
2. 用户选择裁剪形状 -> 调用 `applyCrop(shape)`
|
||||
3. Canvas API 处理图片 -> 生成新的图片 URL
|
||||
4. 更新 Plait 节点数据
|
||||
|
||||
## 依赖项
|
||||
- 无需新增外部依赖
|
||||
- 复用现有的 Plait 插件系统
|
||||
|
||||
## 风险与缓解
|
||||
- 风险: 大图片裁剪可能卡顿
|
||||
- 缓解: 添加 loading 状态,使用 Web Worker
|
||||
|
||||
## 测试策略
|
||||
- 单元测试: 测试 `useImageCrop` Hook
|
||||
- 集成测试: 测试 ImageCropPopup 组件交互
|
||||
- E2E 测试: 测试完整的用户流程
|
||||
```
|
||||
|
||||
**最佳实践:**
|
||||
- 评估多个技术方案,说明选择理由
|
||||
- 识别技术风险和缓解策略
|
||||
- 考虑与现有系统的集成点
|
||||
|
||||
### 4. 分解任务 (Tasks)
|
||||
|
||||
**命令:** `/speckit.tasks`
|
||||
|
||||
将计划分解为可执行的小任务。
|
||||
|
||||
**任务列表示例:**
|
||||
|
||||
```markdown
|
||||
# 任务清单: 图片圆形裁剪功能
|
||||
|
||||
## Phase 1: 类型和工具函数
|
||||
- [ ] 定义 `CropShape` 类型('rectangle' | 'circle' | 'ellipse')
|
||||
- [ ] 定义 `ImageCropPopupProps` 接口
|
||||
- [ ] 实现 `cropImageToShape()` 工具函数
|
||||
|
||||
## Phase 2: 核心组件
|
||||
- [ ] 创建 `ImageCropPopup.tsx` 组件
|
||||
- [ ] 实现 `useImageCrop` Hook
|
||||
- [ ] 添加 BEM 样式 `image-crop-popup.scss`
|
||||
|
||||
## Phase 3: 集成
|
||||
- [ ] 在 popup-toolbar 中添加裁剪按钮
|
||||
- [ ] 连接到 Plait 图片节点更新逻辑
|
||||
- [ ] 添加撤销/重做支持
|
||||
|
||||
## Phase 4: 测试
|
||||
- [ ] 编写 `useImageCrop.test.ts` 单元测试
|
||||
- [ ] 编写 `ImageCropPopup.test.tsx` 组件测试
|
||||
- [ ] 编写 E2E 测试场景
|
||||
|
||||
## Phase 5: 文档和优化
|
||||
- [ ] 更新组件文档
|
||||
- [ ] 性能测试和优化
|
||||
- [ ] Code review 和修复问题
|
||||
```
|
||||
|
||||
**最佳实践:**
|
||||
- 每个任务应该可以在 2-4 小时内完成
|
||||
- 按逻辑依赖关系排序
|
||||
- 包含测试和文档任务
|
||||
|
||||
### 5. 执行实现 (Implement)
|
||||
|
||||
**命令:** `/speckit.implement`
|
||||
|
||||
AI 根据规范、计划和任务开始生成代码。
|
||||
|
||||
**工作方式:**
|
||||
1. AI 按顺序执行任务列表
|
||||
2. 生成代码并运行测试
|
||||
3. 遇到问题时暂停,寻求人类指导
|
||||
4. 完成后更新任务状态
|
||||
|
||||
**人类在循环中的角色:**
|
||||
- 审查生成的代码
|
||||
- 在检查点提供反馈
|
||||
- 解决 AI 无法处理的设计决策
|
||||
- 批准关键的架构变更
|
||||
|
||||
## Monorepo 项目配置
|
||||
|
||||
Opentu 使用 Nx monorepo 结构,需要特殊配置来支持 Spec-Kit。
|
||||
|
||||
### 当前限制
|
||||
|
||||
⚠️ Spec-Kit 假设 `.specify` 在项目根目录,但 monorepo 中不同包可能需要独立的宪章。
|
||||
|
||||
### 推荐配置
|
||||
|
||||
#### 方案 1: 单一宪章(适合小型 monorepo)
|
||||
|
||||
```
|
||||
aitu/
|
||||
├── .specify/
|
||||
│ └── memory/
|
||||
│ └── constitution.md # 全局宪章
|
||||
├── apps/
|
||||
│ └── web/
|
||||
└── packages/
|
||||
├── drawnix/
|
||||
└── react-board/
|
||||
```
|
||||
|
||||
**适用场景:** 所有包遵循相同的编码标准
|
||||
|
||||
#### 方案 2: 分层宪章(适合大型 monorepo)
|
||||
|
||||
```
|
||||
aitu/
|
||||
├── .specify/
|
||||
│ └── memory/
|
||||
│ └── constitution.md # 根宪章(通用原则)
|
||||
├── packages/
|
||||
│ ├── drawnix/
|
||||
│ │ └── .specify/
|
||||
│ │ └── memory/
|
||||
│ │ └── constitution.md # drawnix 特定原则
|
||||
│ └── react-board/
|
||||
│ └── .specify/
|
||||
│ └── memory/
|
||||
│ └── constitution.md # react-board 特定原则
|
||||
```
|
||||
|
||||
**适用场景:** 不同包有不同的技术栈或规范
|
||||
|
||||
**⚠️ 注意:** 截至 2025 年初,Spec-Kit 对子目录 `.specify` 的支持仍在开发中。建议先使用方案 1。
|
||||
|
||||
### Monorepo 工作流建议
|
||||
|
||||
```bash
|
||||
# 1. 在项目根目录初始化 Spec-Kit
|
||||
cd /path/to/aitu
|
||||
npx @github/specify init
|
||||
|
||||
# 2. 创建全局宪章
|
||||
# 在 Claude Code 中运行: /speckit.constitution
|
||||
|
||||
# 3. 为特定包开发功能时,在规范中明确范围
|
||||
# 示例规范开头:
|
||||
# Specification: Add Image Crop Feature to Drawnix Package
|
||||
# Scope: packages/drawnix/
|
||||
# ...
|
||||
|
||||
# 4. 在计划阶段明确文件路径
|
||||
# 示例计划:
|
||||
# Files to modify:
|
||||
# - packages/drawnix/src/components/image-crop/ImageCropPopup.tsx
|
||||
# - packages/drawnix/src/hooks/useImageCrop.ts
|
||||
```
|
||||
|
||||
## 最佳实践
|
||||
|
||||
### 1. 编写高质量规范
|
||||
|
||||
**✅ DO:**
|
||||
- 使用用户故事格式("作为[角色],我希望[功能],以便[价值]")
|
||||
- 定义明确的成功标准
|
||||
- 包含非功能需求(性能、安全、可访问性)
|
||||
- 使用具体的场景和示例
|
||||
|
||||
**❌ DON'T:**
|
||||
- 过早指定技术实现细节
|
||||
- 假设读者了解隐含的业务逻辑
|
||||
- 使用模糊的术语("用户体验良好")
|
||||
|
||||
### 2. 渐进式规范
|
||||
|
||||
对于复杂功能,采用分阶段规范:
|
||||
|
||||
```markdown
|
||||
# Phase 1 Specification: 基础图片裁剪
|
||||
- 支持方形裁剪
|
||||
- 基本的 UI 交互
|
||||
|
||||
# Phase 2 Specification: 高级裁剪形状
|
||||
- 添加圆形和椭圆形
|
||||
- 裁剪预览
|
||||
|
||||
# Phase 3 Specification: 性能优化
|
||||
- Web Worker 处理大图
|
||||
- 缓存裁剪结果
|
||||
```
|
||||
|
||||
### 3. 版本控制规范
|
||||
|
||||
```bash
|
||||
# 提交规范文档
|
||||
git add .specify/specifications/image-crop.md
|
||||
git commit -m "docs(spec): add image crop feature specification"
|
||||
|
||||
# 提交计划
|
||||
git add .specify/plans/image-crop-plan.md
|
||||
git commit -m "docs(plan): add implementation plan for image crop"
|
||||
|
||||
# 实现完成后更新规范
|
||||
git add .specify/specifications/image-crop.md
|
||||
git commit -m "docs(spec): update image crop spec with final implementation"
|
||||
```
|
||||
|
||||
### 4. 团队协作
|
||||
|
||||
**规范审查会议:**
|
||||
1. 产品经理提出需求
|
||||
2. 使用 `/speckit.specify` 起草规范
|
||||
3. 团队审查规范,提出问题和建议
|
||||
4. 迭代规范直到达成共识
|
||||
5. 技术负责人制定计划
|
||||
6. 开发团队执行实现
|
||||
|
||||
**异步协作:**
|
||||
- 在 GitHub PR 中审查规范文档
|
||||
- 使用 GitHub Discussions 讨论计划方案
|
||||
- 在 Issues 中跟踪规范变更请求
|
||||
|
||||
### 5. 测试驱动规范
|
||||
|
||||
在规范中明确测试场景:
|
||||
|
||||
```markdown
|
||||
## 测试场景
|
||||
|
||||
### 场景 1: 成功裁剪为圆形
|
||||
Given: 用户已上传一张图片
|
||||
When: 用户选择"圆形裁剪"
|
||||
Then: 图片以圆形显示,保持原始宽高比
|
||||
|
||||
### 场景 2: 大图片性能
|
||||
Given: 用户上传 10MB 的高分辨率图片
|
||||
When: 用户应用裁剪
|
||||
Then: 操作在 500ms 内完成,UI 不卡顿
|
||||
|
||||
### 场景 3: 移动端触摸
|
||||
Given: 用户在移动设备上
|
||||
When: 用户触摸选择裁剪形状
|
||||
Then: 触摸区域足够大(最小 44x44px),操作流畅
|
||||
```
|
||||
|
||||
### 6. 活文档原则
|
||||
|
||||
规范是"活"的,随代码演进:
|
||||
|
||||
```markdown
|
||||
# Specification: Image Crop Feature
|
||||
|
||||
## Version History
|
||||
- v1.0 (2025-01-15): Initial specification
|
||||
- v1.1 (2025-01-20): Added ellipse shape after user feedback
|
||||
- v1.2 (2025-01-25): Updated performance requirements
|
||||
|
||||
## Implementation Status
|
||||
✅ Completed: Rectangle and circle crop
|
||||
🚧 In Progress: Ellipse crop
|
||||
📋 Planned: Custom polygon crop
|
||||
```
|
||||
|
||||
### 7. 利用 Opentu 现有规范
|
||||
|
||||
将项目现有文档整合到 Spec-Kit 工作流:
|
||||
|
||||
```markdown
|
||||
# Constitution 引用现有规范
|
||||
参见项目根目录的详细规范:
|
||||
- 编码标准: docs/CODING_STANDARDS.md
|
||||
- 品牌指南: docs/BRAND_GUIDELINES.md
|
||||
- 设计系统: docs/TDESIGN_THEME_INTEGRATION.md
|
||||
|
||||
本宪章提炼这些文档中的核心原则,作为 AI 开发的指导方针。
|
||||
```
|
||||
|
||||
### 8. 性能与质量检查
|
||||
|
||||
在实现阶段嵌入自动检查:
|
||||
|
||||
```markdown
|
||||
# Implementation Checklist (自动化)
|
||||
|
||||
## 代码质量
|
||||
- [ ] TypeScript 类型检查通过 (`nx typecheck drawnix`)
|
||||
- [ ] ESLint 检查通过 (`nx lint drawnix`)
|
||||
- [ ] 单元测试通过 (`nx test drawnix`)
|
||||
- [ ] 文件行数 < 500 行
|
||||
|
||||
## 性能基准
|
||||
- [ ] 裁剪操作 < 200ms (Lighthouse)
|
||||
- [ ] 组件首次渲染 < 100ms
|
||||
- [ ] Bundle 大小增加 < 10KB
|
||||
|
||||
## 安全检查
|
||||
- [ ] 输入验证完整
|
||||
- [ ] 无硬编码密钥
|
||||
- [ ] 依赖漏洞扫描通过
|
||||
```
|
||||
|
||||
## 常见问题
|
||||
|
||||
### Q: Spec-Kit 会让开发变慢吗?
|
||||
|
||||
**A:** 初期可能稍慢,但长期加速开发:
|
||||
- ✅ 减少返工(早期发现需求偏差)
|
||||
- ✅ 降低沟通成本(规范即文档)
|
||||
- ✅ 提升代码质量(AI 遵循宪章)
|
||||
- ✅ 新成员上手快(规范清晰)
|
||||
|
||||
### Q: 简单功能也要写规范吗?
|
||||
|
||||
**A:** 根据复杂度判断:
|
||||
- 简单 bug 修复 → 直接编码
|
||||
- 添加新 UI 组件 → 简化的规范(1-2 段)
|
||||
- 复杂功能 → 完整的规范-计划-任务流程
|
||||
|
||||
### Q: 规范与代码不同步怎么办?
|
||||
|
||||
**A:** 建立同步机制:
|
||||
1. PR 模板要求更新相关规范
|
||||
2. CI 检查规范文件的修改时间
|
||||
3. 定期规范审计(每月/每季度)
|
||||
|
||||
### Q: 如何处理规范变更?
|
||||
|
||||
**A:** 版本化规范文档:
|
||||
```markdown
|
||||
# Specification: Feature X (v2.0)
|
||||
|
||||
## Changes from v1.0
|
||||
- Added: Support for dark mode
|
||||
- Removed: Legacy browser support
|
||||
- Modified: Performance requirement from 500ms to 200ms
|
||||
|
||||
## Migration Guide
|
||||
...
|
||||
```
|
||||
|
||||
### Q: AI 生成的代码不符合预期怎么办?
|
||||
|
||||
**A:** 调整规范和宪章:
|
||||
1. 检查宪章是否明确约束
|
||||
2. 在规范中添加反例("不应该...")
|
||||
3. 在计划中明确技术选择理由
|
||||
4. 人工审查并修正,然后更新规范
|
||||
|
||||
### Q: Spec-Kit 与 CLAUDE.md 的关系?
|
||||
|
||||
**A:** 互补使用:
|
||||
- **CLAUDE.md** - 项目级指导,所有会话生效
|
||||
- **.specify/constitution.md** - 功能级宪章,特定开发任务生效
|
||||
- 建议: CLAUDE.md 保持简洁,详细规范放入 `.specify/`
|
||||
|
||||
|
||||
### Q: 为什么不是全自动?
|
||||
|
||||
**A:** 这是设计理念,而不是技术限制:
|
||||
|
||||
1. 检查点验证 - 每个阶段都是质量门禁,防止错误累积
|
||||
2. 人类在循环中 - 关键决策(架构选择、技术方案)需要人类判断
|
||||
3. 早期纠偏 - 在编码前发现需求理解偏差,避免返工
|
||||
4. 渐进式明确 - 从模糊的想法逐步细化到可执行任务
|
||||
|
||||
可以简化的场景
|
||||
|
||||
对于简单、明确的需求,你可以:
|
||||
|
||||
快速模式(跳过可选步骤):
|
||||
/speckit.specify # 必需
|
||||
/speckit.plan # 必需
|
||||
/speckit.tasks # 必需
|
||||
/speckit.implement # 必需
|
||||
|
||||
最小化模式(极简单任务):
|
||||
/speckit.specify # 直接在这里描述清楚所有细节
|
||||
/speckit.implement # 跳过 plan 和 tasks,直接实现
|
||||
|
||||
未来可能性
|
||||
|
||||
虽然官方没有全自动模式,但理论上你可以:
|
||||
|
||||
1. 自己创建自动化脚本(但不推荐):
|
||||
#!/bin/bash
|
||||
# 不推荐:绕过检查点可能导致质量问题
|
||||
claude-code "/speckit.specify $1 && /speckit.plan && /speckit.tasks && /speckit.implement"
|
||||
|
||||
2. 提交 Feature Request 到 https://github.com/github/spec-kit/issues,建议增加:
|
||||
- --auto 标志自动执行所有步骤
|
||||
- --fast 模式跳过可选步骤
|
||||
- 交互式确认点(而非完全自动)
|
||||
|
||||
我的建议
|
||||
|
||||
保持当前的分阶段流程,因为:
|
||||
- ✅ 质量更高:每个检查点都是质量保证
|
||||
- ✅ 更可控:出问题时容易定位在哪个阶段
|
||||
- ✅ 更灵活:可以在任何阶段调整方向
|
||||
- ✅ 学习价值:理解 AI 的思考过程
|
||||
|
||||
对于重复性高的简单任务,可以使用快速模式(跳过 clarify/analyze),但保留核心的 specify → plan → tasks → implement 流程。
|
||||
## 参考资源
|
||||
|
||||
### 官方文档
|
||||
- [Spec-Kit GitHub](https://github.com/github/spec-kit)
|
||||
- [Spec-Driven Development 博客](https://github.blog/ai-and-ml/generative-ai/spec-driven-development-with-ai-get-started-with-a-new-open-source-toolkit/)
|
||||
|
||||
### Opentu 项目文档
|
||||
- [编码规范](./CODING_STANDARDS.md)
|
||||
- [品牌指南](./BRAND_GUIDELINES.md)
|
||||
- [项目指导](../CLAUDE.md)
|
||||
|
||||
### 社区讨论
|
||||
- [Monorepo 支持讨论](https://github.com/github/spec-kit/discussions/769)
|
||||
- [工作区支持 Issue](https://github.com/github/spec-kit/issues/1026)
|
||||
|
||||
---
|
||||
|
||||
**文档版本:** v1.0
|
||||
**最后更新:** 2025-01-22
|
||||
**维护者:** Opentu 团队
|
||||
|
||||
*本文档遵循 Spec-Kit 的活文档原则,会随着工具和项目实践持续演进。*
|
||||
Reference in New Issue
Block a user