spec-driven-development

spec-driven-development

热门

在编码前创建规范。适用于启动新项目、新功能或重大变更且尚无规范时。适用于需求不清晰、模糊或仅存在于模糊想法时。

7.7万Star
0Fork
更新于 2026/7/3
SKILL.md
readonly只读
name
spec-driven-development
description

在编码前创建规范。适用于启动新项目、新功能或重大变更且尚无规范时。适用于需求不清晰、模糊或仅存在于模糊想法时。

规范驱动开发

概述

在编写任何代码之前,先编写一份结构化的规范。规范是你与人类工程师之间的共享真相源——它定义了我们要构建什么、为什么构建以及如何知道完成。没有规范的代码就是猜测。

何时使用

  • 启动新项目或新功能
  • 需求模糊或不完整
  • 变更涉及多个文件或模块
  • 即将做出架构决策
  • 任务实施时间超过30分钟

何时不使用: 单行修复、拼写纠正或需求明确且自包含的变更。

门控工作流

规范驱动开发包含四个阶段。在当前阶段验证通过之前,不要进入下一阶段。

SPECIFY ──→ PLAN ──→ TASKS ──→ IMPLEMENT
   │          │        │          │
   ▼          ▼        ▼          ▼
 人类      人类      人类       人类
 审查      审查      审查       审查

阶段1:规范

从高层愿景开始。向人类提出澄清性问题,直到需求具体化。

立即表面化假设。 在编写任何规范内容之前,列出你的假设:

我做出的假设:
1. 这是一个Web应用(不是原生移动端)
2. 认证使用基于会话的Cookie(不是JWT)
3. 数据库是PostgreSQL(基于现有Prisma模式)
4. 我们只针对现代浏览器(不支持IE11)
→ 现在纠正我,否则我将按此继续。

不要默默填补模糊的需求。规范的整个目的是在代码编写之前表面化误解——假设是最危险的误解形式。

编写涵盖以下六个核心领域的规范文档:

  1. 目标 — 我们要构建什么以及为什么?用户是谁?成功是什么样的?

  2. 命令 — 完整的可执行命令及其标志,而不仅仅是工具名称。

    构建:npm run build
    测试:npm test -- --coverage
    检查:npm run lint --fix
    开发:npm run dev
    
  3. 项目结构 — 源代码位置、测试位置、文档位置。

    src/           → 应用程序源代码
    src/components → React组件
    src/lib        → 共享工具
    tests/         → 单元测试和集成测试
    e2e/           → 端到端测试
    docs/          → 文档
    
  4. 代码风格 — 一个真实的代码片段胜过三段描述。包括命名约定、格式化规则和良好输出的示例。

  5. 测试策略 — 使用什么框架、测试位置、覆盖率期望、不同关注点使用哪些测试级别。

  6. 边界 — 三级系统:

    • 始终做: 提交前运行测试、遵循命名约定、验证输入
    • 先询问: 数据库模式变更、添加依赖、更改CI配置
    • 绝不做: 提交密钥、编辑供应商目录、未经批准删除失败的测试

规范模板:

# 规范:[项目/功能名称]

## 目标
[我们要构建什么以及为什么。用户故事或验收标准。]

## 技术栈
[框架、语言、关键依赖及其版本]

## 命令
[构建、测试、检查、开发——完整命令]

## 项目结构
[目录布局及描述]

## 代码风格
[示例片段 + 关键约定]

## 测试策略
[框架、测试位置、覆盖率要求、测试级别]

## 边界
- 始终:[...]
- 先询问:[...]
- 绝不做:[...]

## 成功标准
[如何知道完成——具体、可测试的条件]

## 未决问题
[任何需要人类输入的未解决问题]

将指令重构为成功标准。 当收到模糊需求时,将其转化为具体条件:

需求:“让仪表盘更快”

重构后的成功标准:
- 仪表盘LCP在4G连接下小于2.5秒
- 初始数据加载在500毫秒内完成
- 加载期间无布局偏移(CLS < 0.1)
→ 这些是正确目标吗?

这让你能够循环、重试并朝着明确目标解决问题,而不是猜测“更快”的含义。

阶段2:计划

根据验证通过的规范,生成技术实施计划:

  1. 识别主要组件及其依赖关系
  2. 确定实施顺序(必须先构建什么)
  3. 记录风险及缓解策略
  4. 识别哪些可以并行构建,哪些必须串行
  5. 在阶段之间定义验证检查点

遵循 planning-and-task-breakdown 了解这些步骤背后的依赖图映射和垂直切片机制;它是权威来源。上面的要点是轻量级摘要;如果两者不一致,以 planning-and-task-breakdown 为准。

输出约定: 将计划保存到 tasks/plan.md,任务列表保存到 tasks/todo.md,遵循 /plan 命令约定。如果 tasks/ 不存在则创建。下游命令(/build 等)期望这些路径。

计划应可审查:人类应能阅读并说“是的,这是正确的方法”或“不,改变X”。

阶段3:任务

将计划分解为离散的、可实施的任务:

  • 每个任务应能在一次专注的会话中完成
  • 每个任务有明确的验收标准
  • 每个任务包含验证步骤(测试、构建、手动检查)
  • 任务按依赖关系排序,而非按感知重要性
  • 每个任务不应涉及超过约5个文件的更改

遵循 planning-and-task-breakdown 了解完整的任务大小确定和依赖排序机制;它是权威来源。下面的模板是轻量级内联形式;如果两者不一致,以 planning-and-task-breakdown 为准。

任务模板:

- [ ] 任务:[描述]
  - 验收:[完成时必须满足的条件]
  - 验证:[如何确认——测试命令、构建、手动检查]
  - 文件:[将涉及哪些文件]

阶段4:实施

一次执行一个任务,遵循 skills/incremental-implementation/SKILL.mdincremental-implementation)和 skills/test-driven-development/SKILL.mdtest-driven-development)。使用 skills/context-engineering/SKILL.mdcontext-engineering)在每一步加载正确的规范章节和源文件,而不是用整个规范淹没代理。

保持规范活跃

规范是活文档,而非一次性产物:

  • 当决策变更时更新 — 如果发现数据模型需要更改,先更新规范,再实施。
  • 当范围变更时更新 — 添加或削减的功能应在规范中反映。
  • 提交规范 — 规范应与代码一起纳入版本控制。
  • 在PR中引用规范 — 链接回每个PR实现的规范章节。

常见合理化理由

合理化理由 现实
“这很简单,我不需要规范” 简单任务不需要规范,但仍需要验收标准。两行规范就足够了。
“我会在编码后写规范” 那是文档,不是规范。规范的价值在于在编码前强制清晰。
“规范会拖慢我们” 15分钟的规范可以防止数小时的重做。15分钟的瀑布式胜过15小时的调试。
“需求无论如何都会变” 这就是为什么规范是活文档。过时的规范仍然比没有规范好。
“用户知道他们想要什么” 即使明确的需求也有隐含假设。规范表面化这些假设。

红旗

  • 在没有任何书面需求的情况下开始编写代码
  • 在澄清“完成”的含义之前问“我应该直接开始构建吗?”
  • 实施任何规范或任务列表中未提及的功能
  • 做出架构决策而不记录
  • 因为“构建什么很明显”而跳过规范

验证

在进入实施之前,确认:

  • [ ] 规范涵盖所有六个核心领域
  • [ ] 人类已审查并批准规范
  • [ ] 成功标准具体且可测试
  • [ ] 边界(始终/先询问/绝不做)已定义
  • [ ] 规范已保存到仓库中的文件