demo-verify
完整开发前针对设计中的风险点构建可运行原型,验证可行再投入开发(仅复杂/高风险需求自动触发)。触发:"先做个 demo 验证"、设计涉及没用过的技术/API、性能敏感路径、第三方集成、多方案对比。
SKILL.mdskills/demo-verify/SKILL.md
GitHubDemo Verify(设计验证)
在投入完整开发之前,用最小代价验证设计是否可行。
定位
design-craft → demo-verify(可选)→ 完整开发
技术设计 验证风险点 验证通过后开始
- 输入:design-craft 产出的设计文档
- 输出:验证报告 + 决策建议(继续 / 回退 / 调整)
- 边界:只验证风险点,不做完整实现
核心原则
- 风险驱动:只验证不确定的部分,不重复验证已知可行的部分
- 最小实现:能跑通就行,不追求代码质量、不处理边界情况
- 可丢弃:原型代码是临时的,开发完成后删除
- 自动触发:根据设计复杂度自动判断是否需要验证,不需要用户手动触发
- 结论明确:每个风险点必须给出明确结论——通过 / 不通过 / 有条件通过
触发条件
满足以下任一条件时自动触发:
| 条件 | 判定方式 |
|---|---|
| 涉及未使用过的技术/库/API | 设计文档中出现项目未使用过的依赖 |
| 涉及性能敏感路径 | 设计中提到并发、大数据量、实时性要求 |
| 涉及第三方系统集成 | 设计中包含外部 API/服务调用 |
| 方案有多个备选 | 设计文档中列出多个方案并需要选择 |
| 用户明确要求 | 用户说"先验证"、"做个 demo"、"试试看" |
不触发的情况:
- 简单 CRUD,无技术风险
- 纯 UI 变更,无后端逻辑变化
- 已有类似实现可参考
工作流总览
阶段 1:风险识别 → 从设计文档中提取风险点
阶段 2:验证范围 → 确定最小验证集
阶段 3:实现原型 → 在独立目录中构建可运行代码
阶段 4:验证评估 → 对每个风险点给出结论
阶段 5:决策与清理 → 继续/回退/调整,保留或删除原型
阶段 1:风险识别
从 design-craft 产出的设计文档中提取不确定的技术点。
风险类型
| 风险类型 | 特征 | 示例 |
|---|---|---|
| 技术可行性 | 使用项目未用过的技术 | "引入 Redis 做分布式锁" |
| 性能风险 | 涉及高并发/大数据量/实时性 | "支持 1000 QPS 的查询" |
| 集成风险 | 调用第三方 API/服务 | "对接支付宝支付接口" |
| 方案选择 | 设计中有多个备选方案 | "方案 A 用消息队列,方案 B 用轮询" |
| 数据一致性 | 分布式/并发场景的一致性保证 | "多节点间的数据同步" |
输出格式
⚠️ 风险识别
━━━━━━━━━━━━━━━━
| 编号 | 风险点 | 风险类型 | 来源(设计文档章节) | 验证必要性 |
|------|--------|----------|---------------------|-----------|
| R-01 | Redis 分布式锁的实现可行性 | 技术可行性 | 方案设计章 | 必须验证 |
| R-02 | 查询接口在 1000 QPS 下的响应时间 | 性能风险 | 性能考虑章 | 必须验证 |
| R-03 | 支付宝回调的可靠性 | 集成风险 | 接口设计章 | 建议验证 |
请确认风险点是否完整。
阶段 2:验证范围
为每个风险点确定最小验证集——只做能验证结论的最少工作。
验证范围定义
| 风险点 | 验证内容 | 不验证内容 |
|---|---|---|
| Redis 分布式锁 | 加锁/解锁/超时释放 | 集群部署、持久化、监控 |
| 1000 QPS 查询 | 单接口压测结果 | 全链路压测、缓存预热 |
| 支付宝回调 | 回调接收+验签+状态更新 | 完整支付流程、退款 |
输出格式
🎯 验证范围
━━━━━━━━━━━━━━━━
| 风险点 | 验证内容 | 最小实现 | 预估工作量 |
|--------|----------|----------|-----------|
| R-01 | 加锁/解锁/超时 | 单文件脚本 | 30 分钟 |
| R-02 | 单接口压测 | 压测脚本 + 接口 | 45 分钟 |
| R-03 | 回调接收+验签 | Mock 服务 | 30 分钟 |
请确认验证范围是否合理。
阶段 3:实现原型
在独立目录中构建可运行的验证代码。
原型规则
- 独立目录:所有原型代码放在
{项目根目录}/.demo-verify/目录下 - 最小实现:只覆盖核心路径,不处理异常、不做日志、不做配置
- 可运行:必须能实际运行并产生结果,不能只是伪代码
- 自包含:原型代码应该能独立运行,不依赖项目的其他部分
- 标注目的:每个文件开头注释说明验证目的
目录结构
.demo-verify/
├── README.md # 验证目标和结论
├── R-01_redis-lock/ # 风险点 R-01 的验证代码
│ └── test_lock.py
├── R-02_perf-query/ # 风险点 R-02 的验证代码
│ ├── server.py
│ └── benchmark.py
└── R-03_alipay-callback/ # 风险点 R-03 的验证代码
└── mock_callback.py
输出格式
🔨 原型实现
━━━━━━━━━━━━━━━━
已完成:
- R-01:Redis 分布式锁验证 → .demo-verify/R-01_redis-lock/
- R-02:查询性能验证 → .demo-verify/R-02_perf-query/
- R-03:支付宝回调验证 → .demo-verify/R-03_alipay-callback/
阶段 4:验证评估
运行原型代码,对每个风险点给出明确结论。
结论类型
| 结论 | 含义 | 后续动作 |
|---|---|---|
| ✅ 通过 | 风险已消除,方案可行 | 进入完整开发 |
| ⚠️ 有条件通过 | 方案可行但需要调整 | 标注调整项,更新设计文档 |
| ❌ 不通过 | 方案不可行 | 回退到 design-craft 重新设计 |
输出格式
📊 验证报告
━━━━━━━━━━━━━━━━
【R-01:Redis 分布式锁】
- 结论:✅ 通过
- 依据:加锁/解锁/超时释放均正常,单机 10000 次操作无死锁
- 备注:生产环境需考虑 Redis 集群部署
【R-02:查询性能】
- 结论:⚠️ 有条件通过
- 依据:单接口 800 QPS 时 P99 延迟 120ms,未达标(目标 50ms)
- 调整项:需要增加缓存层,设计文档需补充缓存策略
【R-03:支付宝回调】
- 结论:✅ 通过
- 依据:回调接收、验签、状态更新均正常,网络超时后重试机制有效
【整体决策】
- R-01、R-03:可直接进入开发
- R-02:需要更新设计文档(补充缓存策略),更新后可进入开发
阶段 5:决策与清理
决策
| 整体结论 | 后续动作 |
|---|---|
| 全部 ✅ | 进入完整开发 |
| 存在 ⚠️ | 更新设计文档中的调整项,然后进入开发 |
| 存在 ❌ | 回退到 design-craft,基于验证发现重新设计 |
原型清理
- 开发期间:原型保留在
.demo-verify/目录,作为开发参考 - 开发完成后:删除整个
.demo-verify/目录 - 在 design-craft 的阶段 5(落盘归档)中:提醒用户清理原型目录
输出格式
✅ 验证完成
📄 验证报告:<路径>
📁 原型目录:.demo-verify/(开发完成后删除)
决策:[进入开发 / 更新设计后进入开发 / 回退设计]
下一步:
- [如继续] 进入完整开发
- [如需更新] 更新 design-craft 文档中的 [具体章节]
- [如回退] 回退到 design-craft 阶段 [X]
与 design-craft 的衔接
- 输入:design-craft 产出的设计文档
- 输出:验证报告,可能触发 design-craft 的回退或增量变更
- 清理:design-craft 阶段 5 落盘时提醒删除
.demo-verify/目录
反模式
- ❌ 所有需求都做验证 → 只在有真实风险时触发,简单需求直接开发
- ❌ 原型写成生产代码 → 原型是临时的,不需要代码质量
- ❌ 验证范围过大 → 只验证风险点,不验证 happy path
- ❌ 结论模糊("大概可行")→ 每个风险点必须有明确的通过/不通过
- ❌ 忘记清理原型 → 开发完成后必须删除
.demo-verify/目录 - ❌ 验证失败后硬继续 → 发现方案不可行必须回退,不能硬着头皮开发
- ❌ 验证失败即判方案不可行 → 先调用
use_skill("debug")区分「方案本身不可行」与「原型实现有 Bug」:后者可修复后复验,误判会把可行方案错杀
需求管理集成
当项目配置了 .requirements/config 时,demo-verify 在阶段 5(决策与清理)后自动执行以下集成操作:
自动触发条件
项目中存在 .requirements/config 且 storage_path 指向有效目录。
集成步骤
- 获取需求上下文:验证前,如果关联了 REQ-ID,先读取需求信息作为验证参照:
req list --id {REQ-NNN} --deps
- 写入验证报告和 demo 代码到需求目录后,调用
req update注册文档关联:
req update {REQ-NNN} \
--docs add demo/verify-report.md,demo --changelog "完成设计验证"
demo 代码迁移:将
.demo-verify/下的 demo 代码复制到需求目录的demo/子目录(而非.demo-verify/),作为需求产出物的持久化部分。复制完成后删除.demo-verify/临时目录。错误处理:
- 需求 ID 不存在 → 提示用户先创建需求,跳过集成
- 文件锁超时 → 自动重试 1 次,仍失败则告知用户
存储路径映射
| 产出物 | 存储路径 | docs 类型 |
|---|---|---|
| 验证报告 | demo/verify-report.md |
demo |
| demo 代码 | demo/ 目录下 |
— |