实战:从零开始用 GSD 开发项目(下)

📑 目录

这是「GSD 全景代码解析」专题的第 54 篇。

四、执行阶段

4.1 启动执行

$ /gsd-execute-phase

⚡ 启动执行阶段...
📋 加载任务计划: .planning/phases/m1-core-features.md
🤖 初始化 Agent 池...
🌊 Wave 1: 启动 3 个任务

[████████████████████░░░░░░░░░░] 60%

4.2 Wave 执行模型

TaskMaster 的 M1 阶段采用 Wave 模型执行:

graph TD
    subgraph Wave1
        A1[m1-t1: 用户认证] --> A2[m1-t2: 数据模型]
        A2 --> A3[m1-t3: API 层]
    end
    
    subgraph Wave2
        B1[m1-t4: 看板 UI] --> B2[m1-t5: 任务操作]
        B2 --> B3[m1-t6: 实时更新]
    end
    
    subgraph Wave3
        C1[m1-t7: 评论系统] --> C2[m1-t8: 通知中心]
    end
    
    Wave1 --> Wave2
    Wave2 --> Wave3

Wave 1: 后端基础设施

[Wave 1/3] 执行中...
─────────────────────────────
✅ m1-t1 用户认证 (backend-dev)
   耗时: 1.5d
   提交: a1b2c3d 实现 NextAuth 配置
   
✅ m1-t2 数据模型 (backend-dev)
   耗时: 0.8d
   提交: e4f5g6h 定义 Prisma Schema
   
✅ m1-t3 API 层 (backend-dev)
   耗时: 1.2d
   提交: i7j8k9l 实现 tRPC routers

Wave 1 完成 ✅ (3.5d / 预估 4d)
─────────────────────────────

Wave 2: 前端核心功能

[Wave 2/3] 执行中...
─────────────────────────────
✅ m1-t4 看板 UI (frontend-dev)
   耗时: 2.1d
   提交: m0n1o2p 实现 Kanban Board
   
✅ m1-t5 任务操作 (frontend-dev)
   耗时: 1.5d
   提交: q3r4s5t 实现 CRUD 操作
   
✅ m1-t6 实时更新 (frontend-dev)
   耗时: 1.0d
   提交: u6v7w8x 集成 WebSocket

Wave 2 完成 ✅ (4.6d / 预估 5d)
─────────────────────────────

Wave 3: 协作功能

[Wave 3/3] 执行中...
─────────────────────────────
✅ m1-t7 评论系统 (fullstack-dev)
   耗时: 1.2d
   提交: y9z0a1b 实现评论线程
   
⚠️  m1-t8 通知中心 (fullstack-dev)
   耗时: 2.0d
   状态: 需要审查
   提交: c2d3e4f 实现邮件通知
   
   审查意见:
   - 邮件模板缺少退订链接
   - 建议添加批量通知合并

4.3 原子提交策略

# 每个任务的提交历史
$ git log --oneline --graph

* c2d3e4f feat(notifications): 实现邮件通知中心
* y9z0a1b feat(comments): 实现任务评论线程
* u6v7w8x feat(realtime): 集成 WebSocket 实时更新
* q3r4s5t feat(tasks): 实现任务 CRUD 前端操作
* m0n1o2p feat(kanban): 实现看板拖拽界面
* i7j8k9l feat(api): 实现 tRPC task routers
* e4f5g6h feat(db): 定义 Task/User Prisma Schema
* a1b2c3d feat(auth): 配置 NextAuth.js 认证

每个提交对应一个任务,清晰可追溯。

4.4 执行监控

// 执行期间的实时监控
{
  "phase": "m1-core-features",
  "progress": {
    "total": 8,
    "completed": 7,
    "inProgress": 1,
    "failed": 0
  },
  "agents": {
    "backend-dev": { "status": "idle", "tasksCompleted": 3 },
    "frontend-dev": { "status": "idle", "tasksCompleted": 3 },
    "fullstack-dev": { "status": "reviewing", "tasksCompleted": 1 }
  },
  "timeline": {
    "started": "2024-01-08T09:00:00Z",
    "estimatedEnd": "2024-01-12T18:00:00Z",
    "actualProgress": "87.5%"
  }
}

五、验证阶段

5.1 启动验证

$ /gsd-verify-work

🔍 启动验证阶段...
📋 检查交付物完整性...
🧪 运行自动化测试...
👁️  执行代码审查...
🎨 进行 UI 审查...

验证报告生成中...

5.2 功能测试

功能验证结果
═══════════════════════════════════════

✅ 用户注册/登录
   测试: 12 个用例
   通过: 12/12
   
✅ 任务 CRUD
   测试: 20 个用例
   通过: 20/20
   
✅ 看板拖拽
   测试: 8 个用例
   通过: 8/8
   
⚠️  实时更新
   测试: 6 个用例
   通过: 5/6
   失败: WebSocket 重连时丢失状态
   建议: 添加重连状态恢复机制
   
✅ 评论系统
   测试: 10 个用例
   通过: 10/10

总体: 55/56 通过 (98.2%)
═══════════════════════════════════════

5.3 代码审查

代码审查报告 (CodeReviewer Agent)
═══════════════════════════════════════

文件: src/components/KanbanBoard.tsx
─────────────────────────────────────
✅ 组件拆分合理
✅ TypeScript 类型完整
⚠️  建议: 提取拖拽逻辑到自定义 hook
   位置: Line 45-120
   影响: 可维护性

文件: src/server/routers/task.ts
─────────────────────────────────────
✅ tRPC 路由结构清晰
✅ 输入验证完整
⚠️  建议: 添加分页查询的 cursor 实现
   位置: Line 88
   影响: 大数据量性能

文件: src/lib/notifications/email.ts
─────────────────────────────────────
⚠️  严重: 硬编码 SMTP 密码
   位置: Line 12
   影响: 安全风险
   修复: 使用环境变量

审查评分: 82/100
═══════════════════════════════════════

5.4 UI 审查

UI 审查报告 (UIReviewer Agent)
═══════════════════════════════════════

✅ 色彩对比度符合 WCAG AA
✅ 交互状态反馈清晰
✅ 响应式布局正确

⚠️  建议改进:
1. 看板列标题在窄屏下截断
   建议: 添加横向滚动或折叠
   
2. 任务卡片缺少优先级视觉标识
   建议: 添加颜色标签
   
3. 加载状态统一使用 Skeleton
   当前: 部分页面使用 Spinner
   
设计评分: 85/100
═══════════════════════════════════════

5.5 安全审计

$ /gsd-security-audit

🔒 启动安全审计...
🔍 扫描 secrets...
🔍 检查依赖漏洞...
🔍 验证输入过滤...

安全报告
═══════════════════════════════════════

[CRITICAL] 发现硬编码凭证
  文件: src/lib/notifications/email.ts:12
  类型: SMTP 密码
  修复: 移至环境变量

[HIGH] 依赖漏洞
  包: lodash@4.17.20
  CVE: CVE-2021-23337
  修复: 升级至 4.17.21

[MEDIUM] 缺少 Rate Limiting
  路由: /api/auth/
  建议: 添加 5 req/min 限制

安全评分: 65/100 (需修复后重新审计)
═══════════════════════════════════════

六、里程碑审计

6.1 启动审计

$ /gsd-audit-milestone m1

📊 里程碑 M1 审计
═══════════════════════════════════════

目标: 核心功能可用
期限: 2024-01-12

交付物检查:
✅ 用户认证系统
✅ 任务数据模型
✅ 看板界面
✅ 任务分配逻辑
✅ 评论系统

质量指标:
─────────────────────────────────────
测试覆盖率: 78% (目标: 70%+) ✅
代码审查: 82/100 (目标: 80+) ✅
UI 评分: 85/100 (目标: 80+) ✅
安全评分: 65/100 (目标: 90+) ❌
Bug 数量: 3 P1, 7 P2 (目标: <5 P2) ⚠️

工时统计:
─────────────────────────────────────
预估: 10 人天
实际: 9.5 人天
偏差: -5% (效率高于预期)

审计结论: 有条件通过
─────────────────────────────────────
需修复:
1. 移除硬编码凭证
2. 升级 lodash 版本
3. 修复 WebSocket 重连问题

修复后重新验证即可标记完成。
═══════════════════════════════════════

6.2 修复与重新验证

# 修复安全 issues
$ sed -i 's/const SMTP_PASS = "secret123"/const SMTP_PASS = process.env.SMTP_PASS/' \
    src/lib/notifications/email.ts

# 升级依赖
$ npm update lodash

# 修复 WebSocket
$ cat >> src/lib/realtime/socket.ts << 'FIX'
// 重连状态恢复
socket.on('reconnect', () => {
  socket.emit('sync-state', { lastEventId });
});
FIX

# 重新验证
$ /gsd-verify-work --only-failed

✅ 所有检查通过
$ /gsd-audit-milestone m1 --confirm

🎉 里程碑 M1 正式完成!

6.3 项目状态快照

TaskMaster 项目状态
═══════════════════════════════════════

已完成:
├── M0 基础架构 ✅
├── M1 核心功能 ✅
├── 规划文档 ✅
└── 测试套件 ✅

进行中:
├── M2 AI 集成 (未开始)
└── M3 部署 (未开始)

代码统计:
─────────────────────────────────────
TypeScript:  4,200 行
React 组件:   28 个
API 路由:     15 个
测试用例:     56 个
覆盖率:       78%

Agent 工作量:
─────────────────────────────────────
backend-dev:    3.5d
frontend-dev:   4.6d
fullstack-dev:  3.2d
CodeReviewer:   0.5d
UIReviewer:     0.3d
─────────────────────────────────────
总计: 12.1d

═══════════════════════════════════════

下一篇预告: 第 55 篇《总结与架构启示》

我们将回顾 GSD 的设计哲学、Meta-Prompting 最佳实践,以及这套方法论对整个 AI 编程领域的启示。敬请期待。