返回 AIPA 笔记
AIPA Day 115

长文#7 — spec-driven 下的多 coding agent 工作方式

长文#7 — spec-driven 下的多 coding agent 工作方式

2026-10-07
spec-drivenmulti-agent-codingadr-as-contractarchitect-role-shift

日期: 2026-10-07 阶段: Phase 4 - 自建 Agent 平台×求职冲刺 标签: #spec-driven #multi-agent-coding #adr-as-contract #architect-role-shift

核心问题

这是 P4 的第 7 篇长文。前 6 篇都在写「AML Copilot 这个系统怎么造」,今天换一个元层级的问题:这个系统是被怎么造出来的? 答案恰好是 2026 软件工程最大的范式迁移——spec-driven development(规约驱动开发,SDD):规约(spec)而非代码成为唯一真相源,代码是从规约再生的产物,多个 coding agent 并行地从同一份 spec 实现、验证、收口。

本计划本身就是一个天然的 SDD 实验场:120 天、每天若干篇笔记 + 代码组件,由 agent 团队(Claude Code 之类)执行,而我(架构师)的角色不是写每一行代码,而是写验收门禁、立项目宪法、审 spec 而非审 code。今天用这 120 天的真实构建实践为素材,回答三件事:

  1. spec-driven 到底改了什么? 从「代码是真相、文档会烂」翻转成「spec 是真相、代码可再生」,这一翻转如何重排了所有工程动作。
  2. 多 agent 怎么靠一份 spec 协同而不漂移? 并行标记、phase gate、项目宪法(constitution)如何把「意图漂移(intent drift)」这个 LLM 编码的头号杀手锁死。
  3. 架构师的工作方式怎么变? 从「code reviewer」变成「spec reviewer + constitution 作者」,这对求职定位意味着什么。

ThoughtWorks Technology Radar Vol 34(2026-04)把 spec-driven development 列为正在被采纳的实践——这不是边缘实验,是 2026 主流工程的既成事实。

关键内容

A. 范式翻转:spec 是真相源,代码是再生产物

传统开发的隐性公理是「代码是唯一真相,文档会烂(specs rot)」。架构师写设计文档,团队照着实现,三个月后文档和代码对不上,于是大家只信代码。SDD 把这条公理整个翻转——版本受控、可执行的规约才是唯一真相源(single source of truth),代码是从 spec 再生的输出(thebcms, 2026)。

翻转后的连锁反应:需求变更时,先改 spec,再让代码从新 spec 再生,而不是直接改代码事后补文档;PR 必须引用 spec(feat(auth): magic link, refs specs/004-magic-link/spec.md);spec 与代码同仓库、同版本演进。SDD 的核心制品(GitHub Spec Kit 口径):

  SDD 制品层级(spec-kit 标准)
  ──────────────────────────────────────────────
  .specify/memory/constitution.md   ← 项目宪法(最持久)
       · 跨 spec 的不可违反规则:语言、依赖政策、测试标准
       · 用 EARS Ubiquitous 句式写死:"系统 SHALL 记录每次认证"
       ↓
  specs/NNN-feature/spec.md          ← 单特性规约
       · User story + EARS 验收准则 + 非功能需求 + 范围外边界
       ↓
  plan.md                            ← 技术方案
       · 架构选择 + 数据模型 + API 契约 + 库选型(附 ADR 链接)
       ↓
  tasks.md                           ← 任务分解(带 [P] 并行标记)
       · 原子、可独立交付的单元,每个挂验收检查
       ↓
  code + tests + docs                ← 从上面全部再生的产物

这个层级的关键是 EARS 记法(Easy Approach to Requirements Syntax)——五种句式让验收准则既精确又可被 AI 解析,比 BDD 的 Given-When-Then(Gherkin)更严格:

EARS 句式模板AML 场景例
Ubiquitous(普遍)The system SHALL …系统 SHALL 为每次 SAR 决策写不可变审计轨
Event-driven(事件)WHEN [触发] THE system SHALL …WHEN judge κ<0.6 THE system SHALL 拒绝该 judge 进 CI gate
State-driven(状态)WHILE [状态] THE system SHALL …WHILE 人审未签发 THE system SHALL 标记 SAR 为 draft
Unwanted(异常)IF [条件] THEN THE system SHALL …IF 证据检索召回<阈值 THEN THE system SHALL 降级回规则基线
Optional(可选)WHERE [特性启用] THE system SHALL …WHERE 私有化部署 THE system SHALL 走本地 vLLM 端点

反直觉洞察①(specs rot 这条「常识」在 SDD 下不再成立——因为 spec 是被执行的,不是被参考的):老工程师对「写详细文档」的本能抵触来自一条铁律——文档一定会烂。但这条律的前提是「文档只是被人参考、不被机器消费」。SDD 把这个前提打掉了:spec 是被 agent 直接消费来生成代码、被验证逻辑直接读取来打分的可执行制品。一份没人读的设计文档会烂,但一份每次 /implement 都要被 agent 解析、每个 PR 都要引用、与代码同仓版本化的 spec 不会烂——因为它一旦和代码漂移,下一次再生就会暴露。SDD 不是「逼你写更多文档」,而是「让文档变成不会烂的代码的一部分」。

B. 多 agent 协同:用一份 spec 锁死意图漂移

LLM 编码的头号失败模式是意图漂移(intent drift)——同一个含糊 prompt 喂给 agent 三次,得到三个互不兼容的实现。多 agent 并行时漂移成倍放大。SDD 用三层机制把漂移锁死:

① 共享 spec 作为契约。 多个 agent(Spec Kit 2026 支持 29+ 具名集成:Claude Code、Copilot、Gemini CLI、Cursor、Codex、Kiro CLI 等)读同一份 spec.md,各自抽取验收准则、生成独立实现方案、分解任务、再对照原始 EARS 句式自验。spec 充当「契约」,防止跨 agent 调用的意图漂移(thebcms / GitHub, 2026)。

② tasks.md 的 [P] 并行标记 + checkpoint。 /speckit.tasks 产出的 tasks.md 按 user story 组织、依赖排序、用 [P] 标记可并行任务;每个 user story 段末有一个 checkpoint,校验该阶段功能能独立跑通后才进下一段(GitHub spec-kit, 2026)。这把「多 agent 并行」从混沌变成有依赖图、有验收闸的流水线:

  多 agent 并行执行(tasks.md 调度)
  ─────────────────────────────────────────────
  Story A ──┬── T1 [P] agentX ──┐
            ├── T2 [P] agentY ──┤→ checkpoint A(独立跑通?)─┐
            └── T3     agentX ──┘   失败→停,不进 Story B    │
                                                              ▼
  Story B ──┬── T4 [P] agentZ ──┐                    (A 通过才解锁)
            └── T5 [P] agentX ──┴→ checkpoint B ──→ ...
  ─────────────────────────────────────────────
  [P]=无依赖可并行;无 [P]=须串行;checkpoint=阶段验收闸

③ constitution(项目宪法)作为不可重议的护栏。 没有宪法,每份 spec 都会重新争论同样的决定(用什么语言、能不能加新依赖、测试标准)。宪法把这些写死成 Ubiquitous EARS 规则,agent 受其约束、不再 re-litigate(thebcms, 2026)。SDD 的四阶段工作流,每阶段一个人类 checkpoint:

阶段制品OwnerGate
Specifyspec.md(EARS 准则)Human + Agentspec review
Plan技术方案 + 架构(附 ADR)Agent + Humanplan review
Tasks[P] 标记任务清单Agent + Humantask review
Implementcode + tests + docsAgent对照验收准则验证

反直觉洞察②(多 agent 并行的瓶颈不是 agent 能力,是「依赖图 + 验收闸」的设计质量):直觉以为多 agent 提速靠「换更强的模型」或「开更多并发」。但真正决定并行能不能跑通的是 tasks.md 里 [P] 标记和 checkpoint 划得对不对——如果两个标了 [P] 的任务其实有隐藏依赖(共享一个数据模型),并行只会产出两个冲突实现,比串行还慢。多 agent 工程的核心技能不是 prompt,是把工作正确分解成「真正无依赖的并行单元 + 卡得住的阶段验收闸」——这恰恰是架构师的传统看家本领(依赖分析、接口契约),只是换了个战场。所以 SDD 时代最稀缺的不是会用 agent 的人,是会给 agent 设计依赖图和门禁的人。

C. 本计划的 ADR 实例:把 120 天构建当 SDD 案例

把抽象的 SDD 套到本计划的真实构建上。这 120 天里,我对 agent 团队下的不是「帮我写个 AML 系统」这种漂移源,而是一份份带验收门禁的 spec + 跨笔记复用的 ADR。下表是本计划已沉淀的 ADR 与其充当「不可重议契约」的实例:

ADR(本计划真实决策)来源充当的不可重议契约EARS 化的宪法条款
不上多 agent,单 agent + 工具Day 33 day33-adr-no-multiagent.md后续所有编排 spec 不得引入 agent-to-agent 递归系统 SHALL 用单编排 agent + 工具调用,不得自发多 agent
judge κ≥0.6 才进 CI gateDay 17 judgeCalibration.ts所有评测 spec 的准入闸阈值统一IF judge κ<0.6 THEN 系统 SHALL 拒绝其分进 gate
评测门禁阻断 mergeDay 19 evalChecks.ts所有特性的 Implement 阶段验收闸WHEN eval 不达标 THE system SHALL 阻断 merge
私有化端点抽象Day 113 llmEndpoint.ts所有 LLM 调用 spec 须经端点适配层WHERE 断网部署 THE system SHALL 走本地 vLLM 端点
全局时效性硬规则CLAUDE.md所有笔记 spec 的内容验收准则系统 SHALL 用近 12 月 SOTA 为主线 + 标注日期

这张表说明:CLAUDE.md 就是本计划的 constitution,每篇笔记的「笔记硬规则 / 深度五条」就是该特性的 spec.md,分配给我的任务清单就是 tasks.md。我作为架构师,全程没写一行 src/aml/ 的实现代码,但我写了所有的验收准则(深度五条、κ 阈值、SOTA 检查日)和不可重议的宪法(时效性硬规则、单 agent ADR)。代码是 agent 从这些 spec 再生的产物——这本身就是一份活的 SDD 案例。

落到工具链,2026 的 SDD 工具谱系与本计划的对应:

工具模型无关关键特性本计划对应
GitHub Spec Kit/specify /plan /tasks /implement + [P] 并行概念骨架来源
AWS Kiro否(AWS)agentic IDE + hooks(test/lint/security 后置)若 POC 在 AWS 栈则用
Claude Code + cc-sdd通用/sdd:specify 终端工作流,长跑自主实现本计划实际执行环境
Tessl审计轨 + 受监管行业模板AML 合规场景候选

效能锚点(一手数据):GitHub 称 Spec Kit 比 ad-hoc prompting 「从头重来」周期少约 10×;AWS 称 40 小时的特性在 spec-driven 下人类时间 <8 小时搞定;DeepLearning.AI 2025 末上线专门 SDD 课程,标志主流化(thebcms / GitHub / AWS, 2025-2026)。单特性人类时间 2–6 小时,绝大部分花在 review 和 clarify,而非 implementation——这正是架构师角色迁移的量化证据。

设计要点/决策表

要点决策理由
真相源spec 而非 code;改需求先改 specspec 被执行不被参考,不会 rot
验收准则记法EARS 五句式,优于 Gherkin更严格、AI 可解析、覆盖异常/可选
多 agent 防漂移共享 spec + [P] 标记 + checkpoint + constitution三层锁死 intent drift
并行单元划分只标真正无依赖的任务为 [P]隐藏依赖的伪并行比串行更慢
不可重议决策写进 constitution,agent 不 re-litigate否则每份 spec 重复争论同样的事
ADR 与 spec 关系spec 说 what,ADR 说 why,宪法引 ADR完成 what+why+how-to-verify 闭环
架构师角色spec reviewer + constitution 作者,非 code reviewer80% 人类时间在 review/clarify
本计划定位CLAUDE.md=宪法,笔记硬规则=spec,深度五条=验收准则120 天构建本身即活 SDD 案例

对本项目的落地

  • 新建 .specify/memory/constitution.md(项目宪法,落地决策):把散落在 CLAUDE.md 与各 ADR 的不可重议规则收口成一份机器可读宪法——全局时效性硬规则、单 agent ADR(Day 33)、judge κ≥0.6(Day 17)、eval gate 阻断 merge(Day 19)、私有化端点抽象(Day 113),全部用 Ubiquitous EARS 句式写死。这让未来任何 agent 在本仓库工作都受同一套护栏约束。
  • 为 AML 核心特性补写 specs/ 目录(设计决策):把已实现的关键模块反向补 spec.md——specs/001-sar-narrative/spec.md(指向 src/aml/sarNarrative.ts,EARS 写验收:faithfulness/coverage 维度 + HITL 签发约束)、specs/002-judge-calibration/spec.md(指向 judgeCalibration.ts,κ 闸门)。这把「代码先行、文档后补」的历史欠债转成 SDD 制品,使系统可被多 agent 安全演进。
  • POC 验收契约与 spec 打通(接 Day 114):Day 114 的 POC 里程碑 gate(κ≥0.6、单案省时≥1.5h、回收期<18月)用 EARS 写成机器可读验收准则,存进 specs/poc/kyc-acceptance.md——这把「承诺数字不承诺功能」从商务话术变成可被 agent 和 CI 共同消费的契约,呼应 Day 114 洞察②。
  • tasks.md 并行调度(设计):未来给 agent 团队下任务时,显式用 [P] 标记真正无依赖单元(如「AML 多屏组件」与「合规映射层」可并行,因二者无共享数据模型),并在每个 user story 末设 checkpoint,避免伪并行产出冲突实现——把 B 节洞察②的「依赖图+门禁」落到本仓库的实际派单。
  • 诚实标注.specify/memory/constitution.mdspecs/ 反向补写为 P4 工程化动作;本计划过去 114 天的构建是「spec 化但未用 Spec Kit 工具链」的手工 SDD,本日决策是将其工具化、机器可读化。constitution 的 EARS 条款须执行当周与 CLAUDE.md 实际规则逐条核对,防止漂移。

参考资料

  1. thebcms — Spec-Driven Development (SDD): The Definitive 2026 Guide:spec 为唯一真相源、constitution/spec/plan/tasks 四制品、EARS 五句式、四阶段工作流 + 人类 checkpoint、SDD subsumes BDD、架构师转为 spec reviewer(2026)
  2. GitHub — spec-kit 仓库 + Spec-driven development with AI 博客:/specify /plan /tasks /implement、tasks.md 的 [P] 并行标记 + user story checkpoint、29+ agent 集成、Spec Kit 开源(2025-09 / 2026)
  3. Martin Fowler(martinfowler.com)— Understanding Spec-Driven Development: Kiro, spec-kit, and Tessl:三工具对比、Kiro hooks、Tessl 受监管行业审计轨模板(2026)
  4. ThoughtWorks Technology Radar Vol 34(2026-04):spec-driven development 列入采纳实践、AI 辅助开发主线、Langfuse v3 自托管(2026-04)
  5. AWS / DeepLearning.AI 口径(经 thebcms 转引):Spec Kit「从头重来」周期少约 10×、40h 特性 <8h 人类时间、DeepLearning.AI SDD 课程(2025 末)
  6. 本仓库 CLAUDE.md(本计划宪法)、docs/aipa/day33-adr-no-multiagent.mdsrc/aml/judgeCalibration.ts / evalChecks.tssrc/agent/config/llmEndpoint.ts(ADR 实例)(2026-06)

SOTA 检查 (2026-06-11)

  • spec-driven development 在 2026-06 是既成主流,非实验:ThoughtWorks Radar Vol 34(2026-04)列入采纳;GitHub Spec Kit(2025-09 开源)、AWS Kiro(2025-07)、Claude Code cc-sdd、Cursor Plan Mode、Tessl 等已覆盖 29+ agent;DeepLearning.AI 2025 末开课。本日 WebSearch×2 + WebFetch(thebcms 一手 + GitHub spec-kit)确认这是当周事实标准。
  • EARS vs Gherkin 之争已收敛向 EARS:2026 SDD 工具普遍采用 EARS 五句式作验收记法,因其比 Gherkin 更严格、覆盖异常/可选/状态三类 Gherkin 不擅长的约束。本笔记 AML 验收准则用 EARS 表达,与工具链对齐。
  • 效能数字(10×/40h→8h)须执行当周复核:引自 GitHub/AWS 厂商口径(经 thebcms 转引),属供应商宣传量级,实际增益随团队成熟度与任务类型波动。作品集引用时须标注来源与口径,不可当普适保证。
  • Spec Kit 集成数在快速增长:本日记 29+ 具名集成(部分来源称 30+),该数字每月在变;执行当周以 github/spec-kit 仓库 README 实时数为准。
  • 架构师角色迁移是 live 的求职信号:SDD 把架构师从 code reviewer 推向 spec reviewer + constitution 作者,与 AISA/SA 岗位「定义约束、主导验收」职责合流(呼应 Day 114)。这对求职定位是正向信号——本计划「写规约与门禁、不写实现」的构建方式恰是该角色的活体证明。
  • 待跟踪:① ThoughtWorks Radar Vol 35 发布后 SDD 象限是否从 Trial 进 Adopt;② Spec Kit / cc-sdd 是否新增「多 agent 跨 spec 冲突检测」能力(当前 checkpoint 仅校验阶段内);③ Tessl 受监管行业模板是否覆盖 AML/SR 11-7,若是则为本项目 SDD 工具链首选。以上执行当周重新确认。