第 4 天:SDD 三种落地方式——Spec-Kit / OpenSpec / 轻量手工的选型课

SDD+Harness 四周学习计划 · Week 1 · Day 4

Posted by LSG on August 13, 2026

SDD + Harness 四周学习计划 · Week 1 · Day 4(认知打底第 4 课)

今日主题:SDD 的三种落地方式——Spec-Kit(自动化)、OpenSpec(手动控制 + delta spec)、轻量手工;理解取舍与适用场景

建议用时:60–90 分钟 | 参考文章:见文末延伸阅读(Spec-Kit 官方、OpenSpec 仓库、多篇选型对比)

输出物:给一个真实/想象项目填一张「三选一决策表」并给出你的选择与理由——这是 Day 7 复盘和《研究式学习手册》4.5「对比/决断日剧本」的第一个案例


0. 一句话剧透

「SDD 三种落地方式」问的从来不是「哪个工具最强」,而是「自动化到什么程度、治理浓度多高、你愿意为规范付出多少仪式成本」——三者是同一条原理的三个档位:

  • Spec-Kit:把 spec 流程做成一条门控管道,一步步逼你走完,约束最重(适合从零起步的团队大项目)。
  • OpenSpec:轻量得多,以「一次变更」为单位,用 delta spec 增量累积一份「系统真实现状」的主 spec(适合改存量项目、快迭代)。
  • 轻量手工:不借任何工具,你自己在 git 里写 spec——本周你 Day 5 就在干这件事,Week 2 的 harness 则是给这种手工流程装上护栏。

今天不要求背命令(Spec-Kit 的四命令、delta spec 怎么用,Day 6 才深讲)。今天只做一件事:给这三种方式选一个主判据,学会在具体项目里对号入座。


1. 今日目标(学完你能做到)

  • 能用一句话说出三种方式的本质差别是「自动化程度 × 治理浓度 × 仪式成本」,而不是「谁强谁弱」
  • 能说清 Spec-Kit 的重治理、OpenSpec 的 delta spec 累积、轻量手工的零依赖,各解决什么、各牺牲什么
  • 能区分 绿地(greenfield)vs 棕地(brownfield),并说出它们各自更该选哪种
  • 能给任意一个项目填「决策表」,得出一个有理由的选择(而非凭感觉)
  • 能意识到一个共同软肋:没有任何工具真正解决「spec 与代码同步漂移」,以及「spec 纯文本活得比工具久」

目标对应评估标准第 2 条(能讲清三种方式取舍)。Day 4 是选型,Day 6 才是用工具;别混。


2. 学习动线(建议时间分配)

步骤 内容 用时
1 「3」:先立认知——三档不是三家人,是一条自动化谱系 5 分钟
2 「4」:逐个拆 Spec-Kit / OpenSpec / 轻量手工 25 分钟
3 「5」:三线对比总表(本课核心产出) 15 分钟
4 「6」:选型决策(4 个自问 + 决策表) 15 分钟
5 当日自测 + 打卡(填决策表) 10–15 分钟

今天是《研究式学习手册》里的对比/决断日:别问「哪个好」,问「什么维度能分出差别」——加判据的过程比答案更值钱。


3. 先立认知:这是同一条原理的三个档位,不是三家公司

Day 3 你已经会判断「一份 spec 好不好」了。今天要回答的上升一层:这份 spec 由什么流程来生产、维护、防漂移? 三种落地方式就是三种答案,本质区别在谁替你做多少

1
2
3
轻量手工 ◄────────────────── 自动化谱系 ──────────────────► Spec-Kit
0 工具,全靠人自律             AI 半自动、人点确认              门控管道,一步步卡死
(Week1/2 你自己 + harness)    (OpenSpec:改存量、快迭代)     (重治理、绿地、团队)

三档不是「高级/低级」,是三个交换:

档位 用「治理浓度」换到 付出「仪式成本」 最适合的土壤
轻量手工 完全的掌控与零依赖 全靠人自律,易漂移 个人、原型、想打底的人
OpenSpec 轻快、增量、文档自动累积 要学一套 change/delta 概念 棕地/存量、快迭代
Spec-Kit 强约束、可预测、审计痕迹 最重(文档多、步骤多) 绿地、团队、合规要求

一个关键心法(后面详述):工具只是「怎么存放和推进这些文档」的方式,真正值钱的是 spec 里的纯文本本身——它比任何 CLI 活得久,换工具零成本。 所以今天选型,别把自己绑死在某个工具上。


4. 逐个拆三种落地方式

4.1 Spec-Kit:自动化 × 门控管道(治理层)

它是什么:把 SDD 做成一条按顺序执行的命令管道,每步产出、人工确认后进入下一步,防止 AI(和你)跳步。典型最短链路就是你在计划里看到的四命令:

1
/specify(写要什么/为什么)→ /plan(定技术方案)→ /tasks(拆可执行清单)→ /implement(按单写码)

它的门控不只这四步:正式用法通常还有 constitution(先立项目宪法/红线)、clarify(AI 抛结构化问题消歧)、analyze(交叉检查 spec/plan/tasks 一致性)等质量闸门。特点:

  • 哲学:代码服务规范,规范是源头;规范即生成实现的依据。
  • 换到的:流程严谨、每步有人工卡点、clarify/analyze 显著减少返工、有完整审计痕迹、能把合规要求编码进流程。
  • 代价:重。一次变更可能产出数百行文档、八步仪式——改个 5 行的小修复也要走全套。批评者直言这是「重新发明的瀑布流」。
  • 适合:绿地项目、多特性复杂系统、需要强约束与高可预测性的团队、合规行业(医疗/金融/政务)。

4.2 OpenSpec:手动控制 + delta spec(连续性层)

它是什么:一个以「变更(change)」为单位的本地 spec 框架,核心假设是「你大多数时间在存量代码上做增量修改」。初始化后目录大致是:

1
2
3
4
5
6
7
8
openspec/
├── specs/<domain>/spec.md     # 主 spec:系统「当前真实行为」的单一事实源
├── changes/<change-name>/     # 一次进行中的变更
│   ├── proposal.md            # 为什么做、做什么(意图与范围)
│   ├── specs/<domain>/spec.md # ★ delta 增量规格
│   ├── design.md              # 怎么做(方案/架构)
│   └── tasks.md               # 实现清单(勾选推进)
└── archive/                   # 已归档变更(审计历史)

核心机制——delta spec(对应 Day 2 你学的「增量回填」,这里是它的完整实现):

  • 每次变更不重述整个系统规范,只在变更目录里写「我要对主 spec 增/改/删什么」:
1
2
3
4
5
6
7
8
9
10
# Delta for Auth
## ADDED Requirements
### Requirement: Two-Factor Authentication
The system MUST require a second factor during login.
#### Scenario: OTP required
- GIVEN a user with 2FA enabled
- WHEN the user submits valid credentials
- THEN an OTP challenge is presented
## MODIFIED Requirements   #(附 Previously 说明改了什么)
## REMOVED Requirements
  • 变更完成、人确认后 archive(归档):ADDED 追加进主 spec、MODIFIED 替换、REMOVED 删除——主 spec 永远等于「已实现的真实现状」,且两个并发变更只要不碰同一需求就不冲突。

  • 人通过少量命令手动推进:new(开变更)→ propose(一键生成提案+delta+tasks)→ apply(按 spec 实现)→ archive(合并归档),另有 validate(校验一致性)、ff(一次生成全部规划产物)等。

  • 换到的:轻、增量小步、快迭代、文档自动累积成一份「活的系统说明书」、不需要 MCP/API key。
  • 代价无强制门禁(validate 只查结构不阻塞);对超大复杂需求的经验覆盖还不足;大版本迭代替换整份主 spec 时偏繁琐。
  • 适合:棕地/存量项目、重度用 AI 代理、追求快速反馈循环、想把「当前系统到底是什么样」沉淀成知识库的个人与团队。

4.3 轻量手工:零依赖,你 + git 自己来

它是什么:不装任何 SDD 工具。你按 Day 3 的七要素在 git 里手写 spec,流程靠你自己和团队纪律,最多再配点护栏(这正是 Week 2 的 harness 干的事:spec 放 .ai/specs/,用 pre-commit 拦「只改代码没写 spec」的提交)。

  • 换到的:完全掌控格式与节奏、零工具依赖/零学习成本、不会被工具绑架。
  • 代价:一切靠人自律——没人盯着就容易跳步、spec 漂移;消歧、拆任务、一致性检查全落自己头上。
  • 适合:个人学习与原型、团队想彻底掌控、以及只想用 SDD 原理 + 一条 harness 护栏打底的人。本周你走的就是这一档,Day 5 亲手写、Week 2 加护栏。

5. 三线对比总表(本课核心,可抄进打卡)

维度 Spec-Kit OpenSpec 轻量手工
本质定位 治理层(重流程) 连续性层(重增量) 你自己 + git(零依赖)
自动化程度 高:命令门控管道 中:命令帮生成,人确认推进 低:全人肉
核心命令 /specify→/plan→/tasks→/implement(可加 constitution/clarify/analyze) new→propose→apply→archive 无(或用 harness 的 spec 命令)
spec 存放 每特性多文件 主 spec + changes/delta 累积 你想放哪放哪(建议 .ai/specs/)
delta spec 有概念,非核心卖点 ★ 核心:ADDED/MODIFIED/REMOVED 归档合并 你自己手写增量
防 spec 漂移手段 流程门禁 + 文档纪律 archive 让主 spec 永远=真实现状 靠纪律 + pre-commit 拦无 spec 提交
单次变更文档重量 重(可达数百行) 中(约百来行) 随你
仪式成本 最高(小改动也走全套) 中(以变更粒度,小修仍要建 change) 最低(想写就写,想略就略)
治理/门禁 有(每步卡点,可出审计) 弱(validate 不阻塞) 自己定(可借 harness 强约束)
适合场景 绿地、团队、复杂多特性、合规 棕地/存量、快迭代、AI 代理重度使用 个人、原型、想掌控一切的人
主要坑 过规格化、仪式感劝退、小修 overkill 无硬门禁,大重构换主 spec 繁琐 易漂移、一致性全自己扛

6. 怎么选:四个自问 + 一张决策表

6.1 四个自问(按顺序过,答案通常自己就出来了)

  1. 绿地还是棕地? 从零写系统 → 值得上 Spec-Kit 的重治理;改已有存量 → OpenSpec 或轻量手工,别把旧代码硬塞进新管道。
  2. 谁能扛仪式成本? 单人/小团队、功能常是几行到几百行的小迭代 → 8 步门控会逼人绕过,选轻的;大团队/多特性并行 → 重治理反而省混乱。
  3. 你要「强制」还是要「快」? 合规、多人协作、改错了代价高 → 要强制门禁(Spec-Kit,或轻量手工 + harness 钩子);要快速反馈、愿信纪律 → OpenSpec。
  4. 你依赖 AI 到什么程度、工具淘汰了怎么办? 重度用 AI 代理且要文档自动累积 → OpenSpec;不想被工具绑架、spec 要迁移零成本 → 写纯文本,格式自己管(轻量手工),这是唯一「工具换代也死不了」的档位。

6.2 一张决策表(打卡时把三列打勾加权,最后给结论)

判断维度 Spec-Kit OpenSpec 轻量手工
我的项目:从零建 / 改存量?(绿→棕)      
我的团队:1 人 / 几人 / 大团队?      
我多看重「强约束、可审计」?      
我多在乎「每次迭代轻快」?      
我愿意维护多少文档?      
我担心工具会过气/被弃用吗?      
合计(给我一个结论)      

没有标准答案。结论要能说出一句理由,而不是「看起来高级」。参考判据:单人或棕地快迭代→偏 OpenSpec/轻量手工;团队绿地要可预测→偏 Spec-Kit。

6.3 对照:本四周计划自己走哪条?

诚实说:这四周走的是「轻量手工 + harness 护栏」,外加拿 OpenSpec 当学习参照。 Week 1 你手写 spec(轻量手工档),Week 2 装的 harness 就是给这档加确定性护栏。所以今天学 Spec-Kit / OpenSpec 的真正目的,不是「我现在要切过去」,而是看懂工具如何把同样的原理自动化——你已能写七要素 spec,再看工具只是把这份 spec 的生成与维护自动化而已。


7. 当日自测

先合上讲义作答,再对照文末「参考答案」。

选择题(单选)

  1. 三种落地方式的本质差别是?
    • A. Spec-Kit 最强,OpenSpec 次之,轻量手工最弱
    • B. 自动化程度 × 治理浓度 × 仪式成本的取舍,不是强弱之分
    • C. 只有 Spec-Kit 和 OpenSpec 是 SDD,轻量手工不是
    • D. 取决于用哪种编程语言
  2. OpenSpec 的 delta spec 机制,最准确的说法是?
    • A. 每次变更都要重写整份系统 spec 以保证准确
    • B. 变更只记录增/改/删的片段,归档时合并进主 spec,使主 spec 始终等于系统真实现状
    • C. delta spec 只用于测试,与主 spec 无关
    • D. 归档后 delta 会被永久丢弃
  3. 关于 Spec-Kit,下列说法错误的是?
    • A. 它是一套按顺序执行的命令门控流程,典型四命令是 /specify→/plan→/tasks→/implement
    • B. 适合从零起步、需要强约束与可预测性的绿地项目
    • C. 仪式成本高,小功能修复也走全套流程,有人批评它是「重新发明的瀑布流」
    • D. 它完全不需要人工确认,全自动跑完
  4. 「轻量手工」这一档最贴近的说法是?
    • A. 一种低配版 Spec-Kit
    • B. 不依赖 SDD 工具、靠人自律在 git 里手写 spec;Week 2 的 harness 可给它加确定性护栏
    • C. 只适合玩具项目,生产项目不能这么干
    • D. 就是 Vibe Coding 的别名
  5. 下面哪句话最接近「所有 SDD 工具的共性软肋」?
    • A. 工具越贵越好用
    • B. spec 越写越长就越不会漂移
    • C. 没有任何主流工具真正解决「spec 与代码保持同步」的漂移问题;且 spec 的纯文本比任何 CLI 活得久
    • D. 只要用了工具,AI 就不会跑偏

简答题

  1. 用一句话分别说出:绿地项目该倾向哪种、为什么;棕地项目该倾向哪种、为什么。
  2. 为什么说「今天选型真正该投入的是 spec 的纯文本,而不是绑死某个工具」?请结合「工具迭代快、spec 需长期存活」解释。

8. 今日打卡输出

建议新开一个文件(同一目录,如 Day4-选型决策表.md),放三样东西:

  1. 填好的决策表(第 6.2 节那张,选一个真实/想象项目)。
  2. 一句话选择理由:用四个自问里的证据链写:「因为 __,我选 __;它牺牲了 __,我接受。」(选不出也没关系——写下「我在 __ 维度上拿不准」,这是研究式学习的好产出。)
  3. 一段 3 行的资料对照:Spec-Kit 命令 → OpenSpec change/delta → 轻量手工三档,各自对应你四周计划里的哪一周/哪件事(Week1 手写 spec、Week2 harness……)。

Day 7 复盘时这张表 + Day 2 闭环图 + Day 3 骨架卡,就是你本周「理解 SDD」的完整证据链。


9. 术语速查卡(Day 4 版)

术语 一句话解释
落地方式 同一条 SDD 原理的不同「生产/维护 spec 的流程」,区别在自动化与治理浓度
Spec-Kit 门控命令管道式的 SDD 落地;典型 /specify→/plan→/tasks→/implement,可加 constitution/clarify/analyze
constitution Spec-Kit 里的「项目宪法」:红线、测试底线、技术栈约束
clarify Spec-Kit 里让 AI 抛结构化问题消除歧义的一步
analyze Spec-Kit 里交叉检查 spec/plan/tasks 一致性、输出问题表的闸门
OpenSpec 以「变更(change)」为单位、靠 delta spec 增量累积主 spec 的轻量框架
主 spec(openspec/specs) 描述系统「当前真实行为」的单一事实源,经归档合并永远等于真实现状
delta spec 只记录本次变更对需求的 ADDED/MODIFIED/REMOVED 片段,归档时合并
archive OpenSpec 归档:合并 delta 进主 spec,变更目录进 archive/(审计历史)
轻量手工 不依赖 SDD 工具,人自律在 git 里写 spec;可加 harness 护栏
治理层 vs 连续性层 Spec-Kit 重流程门禁=治理层;OpenSpec 重增量累积=连续性层
绿地 / 棕地 greenfield 从零建 / brownfield 改存量代码库
仪式成本 每做一次变更要付出的流程与文档代价;小改动也走重流程=高仪式成本
spec 漂移 spec 与代码脱节、spec 过期(Day 3 的「规格腐烂」)
过规格化 把 spec 写得太重(混入 HOW、文档膨胀),反而没人维护

10. 延伸阅读

今日精读(选型对比,任选一两篇吃透即可)

  • 《一篇文章告诉你,Spec-Kit、OpenSpec 哪个适合你》(腾讯云,中文选型对比): https://developer.cloud.tencent.cn/article/2663371
  • 《OpenSpec vs Spec Kit: Choosing a Spec-Driven Framework for AI-Agent Development》:https://www.bighatgroup.com/blog/openspec-vs-speckit-spec-driven-ai-development/
  • 《spec-kit 和 openspec 的对比》(掘金,中文):https://juejin.cn/post/7594757769557180425

一手源(工具仓库/官方,作为「证据」而非转述)

  • OpenSpec(Fission-AI,GitHub)——读 README 的目录结构、commands、delta spec 示例: https://github.com/abdihaikal/OpenSpec
  • Spec Kit(GitHub 官方)——命令门控与 constitution 的官方说明,以你实际 init 后看到的为准。

进阶(共同的未解问题 + 一句重要提醒)

  • Spec-Driven Development 工具对比与批评(spec-coding.dev,含「工具比工具选型更脆弱」的洞察): https://spec-coding.dev/blog/spec-driven-development-tools-openspec-spec-kit-superpowers
  • 提醒:SDD 工具迭代极快、易换血;真正持久的是 spec 的纯文本——迁移工具零成本。

本讲义按计划把三种方式归类为「Spec-Kit(自动化)/ OpenSpec(手动控制 + delta spec)/ 轻量手工」;真实工具的细节会持续演进,以各工具当前官方文档为准。完整资源清单见计划主文件。


附录 A:参考答案

选择题

  1. B —— 三种方式是同一条原理的三个自动化档位;A/C/D 都是错误二分。
  2. B —— delta 只记增量片段,归档合并进主 spec,使主 spec 始终等于真实现状;A/C/D 均误读。
  3. D —— Spec-Kit 恰恰每步要人工确认/卡点,不是全自动;A/B/C 都对。
  4. B —— 轻量手工=零工具、人自律手写 spec,harness 可给它加强约束;它不是低配 Spec-Kit,也非玩具专属,更不是 Vibe Coding。
  5. C —— 所有工具都未真正解决 spec 同步漂移;纯文本 spec 比 CLI 活得久,是真正的资产。A/B/D 皆谬。

简答题(要点,供自评)

  1. 绿地:倾向 Spec-Kit(或轻量手工+重护栏)——从零起步没有存量包袱,重治理能从一开始就锁定规范,避免后期漂移与返工。棕地:倾向 OpenSpec(或轻量手工)——改存量代码最怕「把旧代码硬塞进新管道」,OpenSpec 的变更粒度与 delta 累积最适合增量小步改造,避免为每个小修付高仪式成本。
  2. SDD 工具迭代极快、今天选的 CLI 明年可能就不维护;而 spec 的核心资产是纯文本的「要什么、为什么、done 的定义」——它不依赖任何工具就能长期存活、迁移工具零成本。所以选型时把判断力投在「spec 内容写得好不好」(Day 3 七要素),而不是绑死在某个工具的目录格式上;格式是外壳,可换;内容是内核,要留。