案例演示:openlibing-platform-release 全流程 AI 交付

演示如何使用 gitcode skills + Superpowers 完成从需求到交付的全生命周期开发

前提:环境准备

在开始之前,确保已安装以下组件:

# 1. 安装 Superpowers(本地开发循环)
# 在 Claude Code 中执行:
/plugin install superpowers

# 2. 安装 gitcode skills(远端协作)
git clone git@gitcode.com:gitcode-cli/gitcode-cli-skills.git /tmp/gitcode-skills
cp -r /tmp/gitcode-skills/gitcode-* ~/.claude/skills/

# 3. 验证安装
ls ~/.claude/skills/ | grep -E "brainstorming|writing-plans|gitcode"
# 应看到 Superpowers 的 13 个 skill + gitcode 的 9 个 skill

项目背景

仓库: git@gitcode.com:aflyingto/openlibing-platform-release.git

OpenLiBing Platform Release — 基于 Spring Boot 3.x + Java 21 + MongoDB 的企业级 OpenEuler Linux 发行版发布管理平台。

技术栈: Spring Boot / MongoDB / Redis / Apollo / Jenkins / 华为云 OBS / Docker


场景

平台上已有 CVE 管理功能,但每次只能手动逐条录入。运维团队每次安全扫描出来几十个 CVE,需要一个批量导入功能。


阶段一:需求(想法 → 清晰 Issue)

Step 1 — 触发工作流

用户: 启动开发工作流,我有个需求:openlibing-platform-release 的 CVE 管理模块
      需要支持批量导入,现在每次只能手动录入一条,运维每次巡检扫出来几十个
      CVE,逐条录入太慢了

→ gitcode-dev-workflow 自动识别为"需求阶段",触发 brainstorming

Step 2 — brainstorming(苏格拉底式提问)

AI: 批量导入的具体场景是怎样的?用什么格式的文件?
用户: 运维执行完安全扫描,导出一个 CSV,里面有几十条 CVE 记录

AI: 每条 CVE 记录包含什么字段?
用户: CVE编号、影响组件、严重等级、描述、修复版本、发现时间

AI: 导入时如果 CVE 已存在怎么处理?覆盖还是跳过?
用户: 存在就跳过,不要覆盖已有数据

AI: 验收标准是什么?
用户: 上传一个 50 行的 CSV,30 秒内完成,显示成功/跳过/失败数量

Step 3 — gitcode-issue-create(查重 + 提交)

# AI 自动执行
gc issue list -R aflyingto/openlibing-platform-release --search "CVE批量导入" --state all
# → 无重复

gc issue create -R aflyingto/openlibing-platform-release \
  --title "feat(CVE): 支持 CSV 批量导入 CVE 记录" \
  --body-file issue-body.md \
  --label "type/feature,scope/CVE,priority-medium"

生成的 Issue:

## 需求背景
运维团队每次安全扫描产生数十条 CVE,目前只能逐条手动录入,
一次扫描结果需要 30 分钟以上才能全部录入完成。

## 功能描述
- 上传 CSV 文件(CVE编号、组件、级别、描述、修复版本、发现时间)
- 已存在的 CVE 自动跳过,不覆盖
- 返回导入结果:成功 X 条 / 跳过 X 条 / 失败 X 条(含失败原因)
- 支持预览:先解析 CSV 展示将要导入的记录,用户确认后再执行

## 验收标准
- [ ] 50 行 CSV 30 秒内完成
- [ ] 重复 CVE 正确跳过
- [ ] 格式错误的行给出具体错误信息
- [ ] API 文档 (Swagger) 自动生成

Step 4 — gitcode-issue-review(需求分析 + 任务分解)

AI 自动搜索代码库:

cd /tmp/openlibing-platform
grep -r "CVE\|CveEntity\|CveController\|CveService" --include="*.java" src/

生成技术评审报告:

## 需求分析

**核心诉求**: CVE 管理从单条操作升级为批量操作

**技术可行性**: 完全可行
- 现有 CveEntity + CveMapper 已有单条写入能力
- Java 有成熟的 CSV 解析库 (OpenCSV / Apache Commons CSV)
- Spring Boot 的文件上传 (MultipartFile) 可直接复用

**影响范围**: ~5 文件
- 新增: business/controller/CveBatchController.java
- 新增: business/dto/CveBatchImportResult.java
- 修改: business/service/CveService.java(加批量写入方法)
- 新增: business/service/CveBatchService.java
- 新增: common/utils/CsvParserUtil.java

## 需求分解

| # | 子任务 | 涉及文件 | 预估 | 依赖 |
|---|--------|----------|------|------|
| 1 | CSV 解析工具类 | CsvParserUtil.java | S (~3h) | - |
| 2 | 批量写入 Service | CveBatchService.java | S (~3h) | #1 |
| 3 | REST API 端点 | CveBatchController.java + DTO | S (~3h) | #2 |
| 4 | 单元测试 + Swagger | *Test.java | S (~2h) | #3 |
| 5 | 集成验证 | - | XS (~1h) | #4 |

此时产出

  • GitCode Issue 已创建
  • 需求分析报告已有
  • 任务分解明确 → 可以进入开发阶段

阶段二:开发(分析报告 → 可运行代码)

Step 5 — Superpowers writing-plans(原子任务拆解)

将小时级任务拆为 2-5min 完成的原子单位:

原子任务 #1:  在 pom.xml 添加 OpenCSV 依赖                 (2min)
原子任务 #2:  创建 CsvParserUtil.java,实现 parseCveCsv()    (5min)
原子任务 #3:  写 CsvParserUtilTest,验证解析 50 行 CSV       (3min)
原子任务 #4:  创建 CveBatchImportResult.java DTO             (3min)
原子任务 #5:  在 CveService.java 添加 batchCreate()           (5min)
原子任务 #6:  写 CveServiceTest,验证重复跳过逻辑            (3min)
原子任务 #7:  创建 CveBatchService.java 编排解析+导入       (5min)
原子任务 #8:  创建 CveBatchController.java REST 端点         (5min)
原子任务 #9:  写 ControllerTest,验证文件上传和响应          (3min)
原子任务 #10: 运行全量测试确保无回归                        (2min)

Step 6 — TDD 循环(以原子任务 #2 为例)

┌─ RED ─────────────────────────────────────────┐
│  @Test                                        │
│  void parseCveCsv_50rows_shouldReturn50() {   │
│      MultipartFile csv = mockCsv(50);         │
│      var records = CsvParserUtil.parse(csv); │
│      assertThat(records).hasSize(50);         │
│  }                                            │
│  → 编译失败(类不存在)— RED ✓                │
└───────────────────────────────────────────────┘
                    ↓
┌─ GREEN ───────────────────────────────────────┐
│  public static List<CveRecord> parse(         │
│      MultipartFile file) {                    │
│      try (CSVReader r = new CSVReader(...)) { │
│          return r.readAll().stream()           │
│              .map(CveRecord::fromRow)          │
│              .toList();                        │
│      }                                        │
│  }                                            │
│  → 测试通过 — GREEN ✓                         │
└───────────────────────────────────────────────┘
                    ↓
┌─ REFACTOR ────────────────────────────────────┐
│  // 提取常量: CSV_HEADERS                     │
│  // 添加行号追踪: AtomicInteger lineNum       │
│  // 优化异常处理: 捕获 CsvException 转业务异常 │
│  → 测试仍绿 — REFACTOR ✓                      │
└───────────────────────────────────────────────┘

Step 7 — subagent-driven-dev(并行执行)

子代理 A: 原子任务 #1, #4           ─┐
子代理 B: 原子任务 #2, #3, #5, #6   ─┤ 并行
子代理 C: 原子任务 #7, #8, #9       ─┘

每个子代理:
- 只看自己的任务描述 + 相关代码片段
- 执行 TDD 循环
- 完成后触发 requesting-code-review
- 审查通过后任务标记为 done

🔒 质量关卡(必过,不可跳过)

Step 8 — gitcode-dev-quality

开发代码提交后、创建 PR 前,必须通过质量门禁。任何一步失败都不允许提交 PR

cd /tmp/openlibing-platform

# 1. 构建验证
mvn compile -q
# ✓ BUILD SUCCESS

# 2. 全量单元测试
mvn test
# ✓ Tests run: 91, Failures: 0, Errors: 0, Skipped: 0

# 3. 覆盖率检查
mvn verify -Pcoverage
# ✓ 增量覆盖率: 87% (>80% 阈值)

# 4. 代码格式化
mvn spotless:check
# ✓ No formatting issues

# 5. 静态分析
mvn pmd:check
# ✓ No PMD violations

# 最终判定: ✅ 全部通过 — 可提交 PR

质量报告生成后,才能进入交付阶段。


阶段三:交付(代码 → PR → 审查 → 合并)

Step 9 — gitcode-pr-create

# AI 检查变更
cd /tmp/openlibing-platform
git diff --stat origin/main...HEAD
# 5 files changed, +210/-5

git add -A
git commit -m "feat(CVE): add CSV batch import for CVE records"
git push origin feat/cve-batch-import

# 生成并创建 PR
gc pr create -R aflyingto/openlibing-platform-release \
  --title "feat(CVE): 支持 CSV 批量导入 CVE 记录" \
  --body-file pr-body.md \
  --head feat/cve-batch-import \
  --base main

自动生成的 PR 描述:

## 变更说明
新增 CVE CSV 批量导入功能,支持一次上传 50+ 条 CVE 记录。
解决运维团队安全扫描后逐条录入的低效痛点。

## 变更内容
- 新增 CsvParserUtil.java:CSV 解析,含错误行号追踪
- 新增 CveBatchService.java:批量导入编排逻辑(解析→校验→写入)
- 新增 CveBatchController.java:POST /api/v1/cve/batch 端点
- 修改 CveService.java:新增 batchCreate() 批量写入方法
- 新增 CveBatchImportResult.java:导入结果 DTO
- 新增 5 个单元测试 + 1 个集成测试

## 关联 Issue
Fixes #1

## 测试计划
- [x] 解析 50 行 CSV < 1s
- [x] 重复 CVE 正确跳过
- [x] 格式错误行返回具体错误描述
- [x] 86 个原有测试全部通过
- [ ] 手动验证:上传真实扫描导出的 CSV 文件

Step 10 — gitcode-pr-review

AI 执行 6 维度审查:

gc pr diff <number> -R aflyingto/openlibing-platform-release
gc pr comments <number> -R aflyingto/openlibing-platform-release --json

审查发现并发布行内评论:

[安全] CsvParserUtil.java:42
  文件大小未校验,恶意超大文件可能导致 OOM
  建议: 添加 @Size(max = 10MB) 注解

[代码质量] CveBatchService.java:28
  批量写入无事务保护,中途失败会留下部分数据
  建议: 添加 @Transactional(rollbackFor = Exception.class)

[测试] CveBatchService.java:batchCreate
  缺少空列表输入的边界测试
  建议: 添加 verify(batchCreate(emptyList)) 测试

PR 评论页面上可以看到 3 条行内评论 + 1 条整体报告。

Step 11 — Superpowers finishing

mvn test
# Results: 91 tests passed (86 existing + 5 new)

git status
# nothing to commit, working tree clean

→ 选项:merge PR → main

Step 12 — gitcode-release-helper(如需发布新版本)

# 生成 release note
gc release create v1.2 -R aflyingto/openlibing-platform-release \
  --title "v1.2 - CVE 批量导入" \
  --notes-file RELEASE.md

# 上传资产
gc release upload v1.2 target/openlibing-platform-release.jar \
  -R aflyingto/openlibing-platform-release

全流程总结

需求阶段 (AI 提问 + 自动创建 Issue)  → ~10min
开发阶段 (TDD + 子代理并行)          → ~2h
交付阶段 (PR + 审查 + merge)         → ~15min

总计: AI 编码 + 质量检查 ~3h,人工审核确认 ~10min

你做了什么事

阶段 你的操作 耗时
需求 回答 brainstorming 的 4 个问题,确认 Issue 和需求分析 ~5min
开发 审查 TDD 生成的测试用例和关键设计决策 ~3min
交付 确认 PR 描述,查看代码审查结果,点击 merge ~2min

AI 做了什么事

阶段 AI 自动完成
需求 提问澄清 → 查重 → 提交 Issue → 代码搜索 → 需求分析 → 任务分解
开发 原子任务拆解 → TDD 循环 → 3 子代理并行执行 → 任务间审查
🔒 质量关卡 构建验证 → 全量UT → 覆盖率 → 格式化 → 静态分析 → 生成报告
交付 检查变更 → PR 标题描述 → 6维度代码审查 → 行内评论发布
发布 release note → checklist → 上传资产