RSS

第 10 章 / 共 10 章

完整实战:一条链路跑到底

约 9 分钟 更新于

10.1 起点:一句话需求

场景:你在维护一个 RSS 阅读器,用户提了一句——

能不能让我把订阅列表导出来?

按第9章的决策表判断:改动跨 2-3 个文件,涉及对外的文件格式(导出的文件会被别的软件读,格式定错了要返工),但你对「该做什么」基本清楚。落在高不可逆 + 低不确定,对应轻规格:重点写非目标和验收标准。

10.2 采访与规格定稿

进入计划模式,防止它一边聊一边改文件:

claude --permission-mode plan

然后发第5章的采访提示词。两轮问答后,被问出这些原本没定的点:

agent 的问题你的回答落到规格哪一层
导出成什么格式?OPML 还是 JSON?OPML 2.0,要能被别的阅读器导入接口与约束
分组要保留吗?单层还是嵌套?保留,当前只有单层分组接口与约束
订阅为空时怎么处理?提示「暂无订阅可导出」,不下载验收标准
要不要顺便做导入?不做非目标
允许引入 XML 库吗?不引入新依赖非目标

定稿后的 SPEC.md 就是第2章 2.4 节那一份。注意它是被问出来的,不是憋出来的——上表五行里,至少有三行是你在自己写规格时会漏掉的。

10.3 计划与任务

规格落盘后,/clear 或开新会话,让它读 SPEC.md 生成计划:

读 SPEC.md,生成实现计划写入 PLAN.md。
技术方案部分给出两种做法并说明取舍,不要直接下结论。
明确列出涉及文件和风险。先不要写代码。

它给出两种方案(引入 XML 构建库 vs 模板字符串手写),你按规格里「不引入新依赖」的非目标选了后者——这次选择只花了十秒钟,因为非目标已经写在纸上了。如果规格里没这一条,你会看到一份用了新库的实现,然后在代码审查时才发现。

计划确认后生成任务,就是第4章 4.3 节那三张卡。

第10章:完整链路
图 10.1:注意每个环节回到上一层的虚线——那不是失败,那是这套流程正常工作的样子。

10.4 实现与验证

按任务卡逐张执行,每张卡自带验收方式:

执行 T1:实现 src/lib/opml.ts 的 serializeToOpml。
先按 SPEC.md 的验收标准 1、2、4 写测试,让我确认测试是否正确表达了标准,
确认后再写实现,然后运行 npm test 直到全绿。
把你运行的命令和输出贴出来。

三处细节值得注意:

  1. 先写测试并让你确认。测试是规格的可执行版本,评审测试比评审实现便宜得多。
  2. 明确点出覆盖哪几条标准。这让你能机械地对照,不用凭印象判断。
  3. 要求贴出命令和输出。审阅证据比自己重跑一遍快,而且对你没盯着的回合同样有效。

T1、T2 完成后,交付前跑一次独立审查:

用一个子代理对照 SPEC.md 审查本次改动。检查每条验收标准是否实现、
异常路径是否有测试、有没有改动范围外的文件。
只报影响正确性或违反规格的问题。

假设它报回来一条:folder 名里的特殊字符没有转义——规格的验收标准 4 只写了「标题」,实现也就只处理了标题。这条值得修,而且顺手要把规格的标准 4 改成「标题或分组名」。规格漏了,实现就会漏。这正是规格作为检查基准的价值:它让漏洞变得可指认。

10.5 变更发生时

功能上线两周后,用户反馈想按分组导出。按第7章:这是需求本身变了,写变更提案,不是直接改规格。提案就是 7.2 节那一份,五分钟写完,它明确告诉你 T1 要补测试、T2 要返工——在动手之前你就知道了成本。

10.6 完整链路回顾

阶段你做什么agent 做什么产物
判断按象限判断严格度—「这次写轻规格」
采访回答问题提问、整理SPEC.md
计划选方案给备选方案与取舍PLAN.md
拆分扫一眼粒度拆任务、回链标准任务卡
实现评审测试、看证据写测试、写实现、跑检查代码 + 测试输出
审查判断哪些要修独立上下文对照规格问题清单
变更判断值不值得写提案变更提案

你在整条链路里的位置很清楚:做判断、做选择、评审标准。具体的写作和执行都交出去了。

10.7 练习

给应用加一个离线模式,网络不好的时候也能用。

10.8 自检量表

交付前逐条打勾。全部通过,说明这次的规格是有效的,不只是有。

#检查项通过标准
1严格度判断你能说出这次为什么写(或不写)规格
2目标一句话说清为谁解决什么问题
3非目标至少三条,包含「不改动哪些文件」
4接口与约束点名了涉及的文件与数据结构
5验收标准每条都能变成一个会失败的测试
6异常分支至少有一条「若……则……」
7验证方式每条标准都标注了验证手段,靠人工的被单独标出
8任务回链每张任务卡标注了覆盖的标准编号
9覆盖检查规格里没有任何一条标准没被任务覆盖
10执行上下文实现在一个只带规格、不带采访历史的新会话里进行
11证据agent 交付时附了命令与输出,不是一句「已完成」
12独立审查有一个新上下文对照规格审查过 diff
13规格同步实现中发生的行为变化已回写规格
14没有过度规格规格里没有循环、变量名和函数内部逻辑

如果 14 条里你只做得到 5 条,也远好过一条都没有。这套流程的收益是渐进的,不是全有或全无。

10.9 收尾:把这套流程变成默认动作

到这里,你手上应该有:一份最小规格模板、一套 EARS 改写方法、一个采访提示词、一张严格度决策表、一份自检量表。

接下来最有价值的一步,不是读更多资料,而是把这套流程固化成你自己的工具:

  1. 把采访提示词变成一条命令或技能。你已经知道怎么做——SKILL.md 里放采访要求和规格模板,之后 /spec 一句话需求 就能启动。
  2. 把项目原则写进 CLAUDE.md 或 AGENTS.md。技术栈边界、不许引入的依赖、必须遵守的架构决定,写一次,之后每份规格都受益。
  3. 把「对照规格审查 diff」做成一个子代理。让它在每次交付前自动跑一遍。
  4. 把自检量表贴进 PR 模板。

这四件事都不难,加起来一个下午能做完,之后每一个需求都在受益。

最后回到开头那句话:agent 不是在瞎猜,它是在填你留下的空白。 规格驱动开发不是给它戴上镣铐,而是把你脑子里那份本来就存在的规格,写到一个它和你都能看见的地方。