AI 博客

AI 原生 SDLC 把评审前移——但有三个环节无人把关

Anthropic 的这份手册把生命周期重组成一条由提交产物构成的链:intent.md → spec.md → plan.md → diff → 评审结论 → 事故记录。把它读成一台编译器,每个做法都对应着某一跳上的一道检查——于是不难看出,有三跳根本没有任何检查,而风险如今就落在那里。

作者 智能体 AI 维基 35 分钟读完

采用这条产物链,你评审的对象就从 diff 变成了意图。这正是 Anthropic 于 2026-08-21 发布的 AI 原生 SDLC 手册押下的全部赌注——而它成立的前提,是从意图到代码这条链条本身忠实可靠。把六个阶段读成一台编译器——intent.mdspec.mdplan.md → diff → 评审结论 → 事故记录,每一跳都是一次翻译,每一个具名做法都是对某一跳的检查——你会立刻看清:有三跳根本没有任何检查。风险就搬到了那里。

先看全貌

这份手册(Louis Claxton,Anthropic,2026-08-21)把软件开发生命周期重组为六个阶段,每个阶段都提交一份纳入版本控制的产物,供下一阶段读取。提交历史即审计轨迹;所谓"做法",就是生产每份产物的具体实践。

阶段提交的产物人做什么具名做法
1. Planintent.md产品负责人评审并提交以 intent.md 的形式沉淀
2. Designspec.md处理被标记出来的政策问题需求与设计合并为一次会话
3. Buildplan.md,随后是 diff在任何改动之前批准计划plan mode、CLAUDE.md、skills、hooks、并行会话、反馈回路
4. Testeval 结果设定通过率闸门持续 eval
5. Deploy评审结论在关键路径上判断意图与风险AI 进入 PR 评审回路、hooks 作为审批闸门
6. Maintain事故记录 → 新的 intent.md接受或驳回自动生成的意图控制带检测、事故频道里的 Claude Tag
The artifact chain as a closed loop Six artifacts arranged as a cycle. The top row runs left to right: intent.md produced by Claude from raw sources, spec.md produced by Claude bounded by organisational skills, and plan.md produced by Claude in plan mode. An arrow descends on the right into the bottom row, which runs right to left: the code diff gated by hooks, then review findings from layered agentic review, then the incident record written by a control-band script. An arrow rises on the left from the incident record back into intent.md, closing the loop. Each stage commits what the next stage reads 1 · PLAN intent.md Claude, from raw sources 2 · DESIGN spec.md Claude, bounded by skills 3 · BUILD plan.md Claude in plan mode implement 3 · BUILD code diff Claude, gated by hooks 5 · DEPLOY review findings layered agentic review 6 · MAINTAIN incident record control-band script re-enters at stage 1 Top row left to right, bottom row right to left, and the rising arrow on the left closes the loop. That rising arrow is the only hop whose artifact has no human author.
每个阶段提交的,正是下个阶段要读的东西。Maintain 阶段把诊断结论写成新的 intent.md,回路由此闭合。

真正值得琢磨的是这条链,而不是阶段的数量。六阶段生命周期图比我们大多数人的工龄都长;而每一道阶段边界都是一次机器可读产物的 git 提交,这才是新东西——正是它让手册其余部分从愿景变成可执行的约束。

"代码不再是瓶颈"讲的是排队

手册以这句话开篇,很容易被读成一句产能自夸。它不是。它讲的是流水线的约束点在哪里,而约束点并不会因为你加快了它前面的环节就消失——它只会挪位置。把实现环节提速十倍,吞吐量不会跟着涨十倍;在制品会堆在下一道工序前面,而在任何一家软件组织里,下一道工序都是评审、测试与发布。

2025 年的 DORA 报告量到的正是这个形状。90% 的受访者已在工作中使用 AI——同比上升 14 个百分点——每天与之打交道的时间中位数为两小时。AI 采用度如今与交付吞吐量呈相关,这是对前一年结论的反转。而它依然与更高的不稳定性相伴:变更失败更多、返工更多、恢复耗时更长。同一份数据里吞吐上升、稳定性下降,正是"构建环节提速了、验证环节没跟上"这种流水线的特征。

信任度也沿着同一条裂缝分布。DORA 受访者中 24% 对 AI 输出高度信任,30% 只有一点信任甚至完全不信任。后者并非不喜欢这个工具——他们是控制系统跟不上产出量的那群人,对自己来不及核验的输出打折扣,这个判断本身是对的。

所以对这份手册的诚实概括不是"教你跑得更快",而是:约束点已经挪走了,你早就活在它的下游,而这里给出的是一次重组,把人的注意力挪到约束点如今所在的位置。手册自己的说法是:"当 agent 把代码产出翻倍时,要么评审队列越积越长,要么代码在评审不足的情况下上线。"

这条链是一台编译器,而它的各遍都没有校验

What the human reviews, before and after Three columns. The first, filled with the accent colour, is the traditional SDLC, where the human reads the diff, every line, at the end, and governance happens in the review cycle. The second is the AI-native SDLC, where the human reads the intent, line-by-line review is delegated to agents, and human review is reserved for regulated and critical paths. The third states what that substitution assumes: every hop from intent to diff translates correctly, while git records only order and not derivation. TRADITIONAL SDLC Human reads the diff every line, at the end; governance happens inside the review cycle AI-NATIVE SDLC Human reads the intent line-by-line review is delegated; people keep regulated and critical paths WHAT IT ASSUMES The chain is faithful every hop from intent to diff translates correctly — and git records order, never derivation
这份手册真正的动作不是提速,而是一次替换:人签字的对象不再是 diff,而是意图。

把这条链看成一条编译流水线。意图被降级为规格,规格降级为计划,计划降级为 diff,diff 降级为评审结论。每一跳都是从较高层表示到较低层表示的一次翻译——而且完全和真正的编译器一样,只有当你能信任每一遍时,整体才值得信任。

真正的编译器是靠结构挣来这份信任的。它的中间表示带类型,它的各遍是确定性的,某一遍降级出来的东西若被下一遍拒绝,构建时就会大声报错。这三条性质在这里一条也不成立。中间表示是英文散文。各遍是语言模型,同样的输入在两天里可以降级成两个样子。而且没有任何一种类型错误叫做"这份计划没有实现这份规格"——一份悄悄丢掉某条需求的计划照样编译通过,一路通到 CI 全绿。

这也就意味着,那些做法并不是一袋子提效小技巧。每一个都是钉在某一跳上的检查,替代了编译器本来白送的那份校验。用这种方式读手册——对每个做法追问"它校验的是哪一次翻译"——缺口才会显形,因为缺口就是那些没人给它配做法的跳。

git 不会替你补上。提交历史给你的是产物之间的先后顺序,而不是派生关系:它记录了 spec.mdintent.md 之后提交,从未记录它是照着后者写出来的。规格落地之后再去修改意图,日志看起来一模一样。

哪个做法守哪一跳

Eight translation hops and the strength of each check A table of eight hops in the artifact chain, what guards each one, and how strong that guard is. Sources to intent.md is guarded only by a product owner reading and committing it, judged. intent.md to spec.md has skills applied while authoring and a product owner read, judged. spec.md to plan.md is enforced, because plan mode withholds every edit until approval. plan.md to code diff is enforced by CLAUDE.md conventions, hooks that deny tool calls, and self-run tests. Code diff to policy is judged by layered agentic review and hooks acting as approval gates. Code diff to spec.md has nothing named guarding it. Config to behaviour is enforced by continuous evals gating on pass rate. Production to intent.md has nothing, because a control-band script writes it and it is reviewed only at intake. Eight hops, and what stops a bad one HOP WHAT GUARDS IT STRENGTH sources → intent.md Product owner reads it and commits judged intent.md → spec.md Skills applied while authoring; owner reads it judged spec.md → plan.md Plan mode withholds every edit until approval enforced plan.md → code diff CLAUDE.md conventions; hooks deny; self-run tests enforced code diff → policy Layered agentic review; hooks as approval gates judged code diff → spec.md Nothing named nothing config → behaviour Continuous evals gate on pass rate enforced production → intent.md Control-band script; reviewed only at intake nothing Accent = a machine can stop the hop. Soft = a person or a model judges it. Dashed = nothing checks fidelity.
八跳。其中三跳没有任何东西检查这次翻译是否忠实。

换一个轴来比较这些跳——翻译错了会发生什么?——它们会归为三类而不是八种。在 spec.mdplan.md 这一跳上,plan mode 在人批准计划之前扣住每一次文件改动,所以翻译错了就会卡住;在 plan.md → diff 上,一个 PreToolUse hook 可以直接拒掉这次工具调用,所以被禁止的动作根本不会发生;在配置 → 行为上,eval 套件低于通过率阈值就会让流水线失败。这三跳是"失败即关闭"。在 diff → 政策上,分层 agent 评审产出按严重程度排序的结论、由人裁决关键项——翻译错了通常会被抓到,但那是概率意义上的。而在剩下三跳上,一次错误的翻译会产出一份形式完全正确的产物,一声不响地流向下游。

值得点名的不对称在于:hooks 是整份手册里唯一真正确定性的控制。其他每一处,这条链要么是模型在检查模型,要么是人在读散文。而 hook 是 harness 在工具调用之前执行的一个 shell 脚本,它的拒绝不是建议:

{
  "hookSpecificOutput": {
    "hookEventName": "PreToolUse",
    "permissionDecision": "deny",
    "permissionDecisionReason": "Credential pattern in staged diff"
  }
}

注意这份 hook 契约允许你做什么。hook 可以拒掉一次调用;保持沉默并不等于批准,而退出码 2 是后续 JSON 也覆盖不了的唯一结果。hooks 只能收紧政策,永远不能放松。对一层治理机制而言,这种不对称恰到好处——同时也意味着你无法靠自动批准把 hook 当成消化评审积压的出口。这一层确定性只能用来说"不",也只用来说"不"。整体形态见面向 agent 的策略即代码,为什么强制拒绝优于口头叮嘱见护栏入门

三跳薄弱环节

intent.mdspec.md:创造最多,检查最少

这一跳创造的信息比链上任何一跳都多。几段问题陈述、受影响用户和待定问题,要变成一份带接口、边界情况和验收标准的完整规格。手册在这里的贡献是实打实的,但方向不同:组织 skills 会在规格撰写过程中注入品牌、安全、合规与 UX 标准,于是政策在撰写时就被套用,而不是三周后在评审里才被发现。这是真正的改进,而它检查的是规格对政策的符合度——不是规格对意图的忠实度。

除了产品负责人把两份 Markdown 并排读一遍,没有任何东西在检查规格是否忠实于意图。一条意图从未暗示过的需求,或者一个被规格朝着省事方向悄悄敲定的待定问题,对下游的一切都是隐形的:计划会忠实实现它,测试会覆盖它,评审会放它过,而最终那起事故,将记在一份人人都批准过的规格头上。

diff → spec.md:评审代码不等于评审需求

按手册的描述,agent 化 PR 评审拿进来的 diff 对照组织政策来读,并按严重程度给结论排序。这能抓出缺陷、漏洞和约定违例——也就是在"需求默认正确"的前提下评审者会找的东西。这与追问"这份 diff 是不是规格要的东西"是两份不同的工作,而后一份工作才抓得住那个昂贵的失效模式:agent 把错的东西做对了。

eval 也覆盖不到。回归套件告诉你的是,行为没有朝着你的 eval 集已知的那些方向变化;它对"行为是否匹配上周二写的那份规格"只字未提。eval 闸门能承诺什么、不能承诺什么,见eval 驱动开发与 CI

生产 → intent.md:唯一没有人类作者的产物

Maintain 阶段是手册里最新颖的部分,也是把守最少的部分。一个检测脚本盯着生产环境的控制带——测试失败率、错误率、周期时间——某一条被突破时就调用 Claude 去诊断;诊断结论被写成 intent.md,从第一阶段重新进入流水线。这是唯一一跳,产物进入链条的全过程都没有人类作者。

它的检查完全在下游:第一阶段的产品负责人评审。也就是说,这个回路闭合得有多紧,取决于那个入口队列有多少人在看。无人值守的入口,会把一个闭合的反馈回路变成一台不断生成工作的开环机器——而手册自己给第一阶段设的领先指标,从首次对话到提交 intent.md 的时长,会随着这台机器越高产而越好看。务必把它和滞后指标(进入第二阶段的存活率)配对使用,否则它会被读成进展。

这套指标没有测的东西

手册提出了一组考虑周到的领先与滞后指标——提交意图的时长、意图与规格两次提交之间的间隔、在评审质量不下滑的前提下每位工程师的并行会话占比、首次 PR 评审的耗时、eval 通过率;以及意图的存活率、构建开始后的需求返工、agent 所写变更的 CI 一次通过率、逃逸到生产的缺陷、同类事故的重复发生。其中缺了两样东西。

第一样是针对某一跳的度量。存活率量的是产品负责人是否接受了这份意图,而不是规格是否忠实于它。构建开始后的需求返工是最接近的代理指标,而它只有在误译已经害你白做一轮构建之后才会触发。

第二样是成本。并行会话与分层 agent 评审在设计上都会成倍放大 token 支出,而"在评审质量不下滑的前提下每位工程师的并行会话占比"只量了分子。agent 每一步都会把整段对话重新发一遍,所以一次长会话的输入 token 会随步数的平方增长——见agent 成本控制。六个阶段的 agent 产物,意味着相当多段对话。

让这条链真正承重

上面这些缺口都不构成反对这份手册的理由。它们是手册留给你的部分,而每一个都有便宜的补法,且都契合手册自己的语汇——要么是一份纳入版本控制的产物,要么是一个 hook。

盖上出处,让 git 记录派生而不只是顺序

把上游产物的提交 SHA 写进下游产物的 front matter:spec.md 带上它所依据的那份 intent.md 的 SHA,plan.md 带上规格的,PR 正文带上计划的。这样这条链就成了一张真正的图,而不是一堆恰好放在同一个仓库里的文件;"规格批准之后意图又改了"也从"得有人记得"变成了一项 CI 检查。一个 PreToolUse hook 可以拒绝那种 front matter 指向的 SHA 已不再是该产物 HEAD 的提交。这就是把决策回执模式套用到 SDLC 上。

先把最容易的那一跳检查机械化

在没有检查的几跳里,spec.mdplan.md 是唯一可以用脚本而非模型来校验的:一份计划若动了规格任何章节都没提到的文件,或者漏掉了规格点名的某个子系统,就值得在批准环节标出来。这是个粗糙的启发式,遇到重构会误报。它同时也几乎不花钱,而且抓得住那种悄悄长了范围的计划。

给意图 → 规格这一跳配一个裁判,而不是一个读者

最需要检查的那一跳,恰恰最不适合用脚本,因为两份散文之间的忠实度是一项判断。这正是带固定评分量表的 LLM 裁判该干的活:规格是否回应了意图提出的每一个待定问题,又是否引入了意图并未暗示的需求?把它当作 Design 阶段的闸门跑起来,一项阅读任务就变成了可度量的任务。信任它之前先校准它——见裁判校准与元评测,因为一个未经校准的裁判守在治理闸门上,比不设这道闸门更糟。

给自动入口加一道人工闸

生产环境检测出来的意图,落地时应当是一份带负责人和有效期的草稿,而不是与人类撰写的意图平起平坐。要统计的是接受数,不是生成数。这正是人在回路这个"该放在哪里"的问题最锋利的形态:整个回路除了这一点之外都是自动的,那这一点就必须真有人在。

hooks 留给那些绝不能靠概率的事

diff 里的凭据、对受保护路径的写入、生产部署,以及一切不可逆的动作。在这些地方,"模型通常做得对"不是一种可接受的控制,而 hook 只能拒绝的那种不对称在这里恰是优点。其余的,做成评审结论就够了。

可移植,还是只属于 Claude Code?

手册明确是模块化的——组织按优先级挑阶段和做法,每个做法都列出自己的前置条件。在规划落地之前值得先分清:哪些做法是你今天下午就能采纳的文件约定,哪些是靠提示词复现不出来的 harness 特性。

做法它实际上是什么可移植?最接近的非 Claude 对应物
intent.md / spec.md / plan.md一套文件命名约定加上提交纪律完全可以GitHub Spec Kit;Kiro 的 requirements.md / design.md / tasks.md
CLAUDE.md会话开始时读取的约定文件完全可以AGENTS.md.cursorrules 之类
Skills按需加载的版本化指令包形态上可以任何渐进披露式的指令加载器
Plan mode批准之前扣住改动的 harness 状态不行需要 harness 支持;提示词强制不了
Hooksharness 在工具调用前执行的 shell 脚本不行唯一一个在提示词层面没有替代品的做法
PR 评审回路仓库上的机器人加非交互式 CI 运行完全可以各家主流编码 agent 厂商都有
经 MCP 部署把发布与回滚暴露为 agent 工具完全可以协议是开放的;风险归你

规格驱动开发不是 Claude 的发明,生态也很健康:GitHub 的 Spec Kit 采用 MIT 许可,star 数已过 13 万,并于 2026-08-21——它的一周岁生日——发布 v1.0.1,驱动着三十多个 agent(含 Claude Code)走完 specification、plan、tasks、implement 四步。AWS 的 Kiro 则围绕三份规格文件 requirements.mddesign.mdtasks.md 建了一个 IDE。Anthropic 的命名不同,形态并无二致。

所以手册的"格式"那一半是一套约定,而这套约定正在全行业收敛。"强制"那一半是 harness 特性——而真正干活的正是"强制"这一半。一个采纳了 intent.md 却没有采纳任何"能拒绝"的东西的团队,采纳的是一套归档制度。

有一行值得比原文更加谨慎。把部署与回滚通过 MCP 暴露出去,等于把发布按钮交到 agent 手里、只隔着一层按环境划分的权限梯度,而权限梯度的可靠程度取决于其背后的身份。接线之前先读agent 身份与权限环境权限;一个继承了某个人类凭据的部署工具不是权限梯度,是一套戏服。

从哪里开始

只有按约束点而不是按阶段序号来挑,模块化才有用。真正该问的是:眼下哪条队列最长。

如果痛在……先采纳因为
评审队列积压Deploy——agent 化 PR 评审、hooks 作为审批闸门它直接打在约束点上;其他每个阶段都在往它这里灌
构建开始后大量返工Plan 与 Design——intent.mdspec.md、skills返工是一次代价变高了的误译;把检查挪到构建的上游
缺陷逃逸到生产Test——持续 eval——再加一道 diff 对照规格的检查eval 闸门是机械的;规格检查补上 eval 覆盖不到的那一跳
同类事故反复发生Maintain——控制带——并且入口要有人值守只有生成的意图真被分诊,回路才算闭合
说不清痛在哪先做度量没有分阶段的耗时数据,你分不清某个阶段是改善了还是只把队列挪了个地方

最后一行不是凑数的答案。一次以"约束点已经挪走了"为全部前提的重组,不该闭着眼睛采纳——如果你看不见自己的在制品堆在哪里,你就分不清改善与挪位。度量手段见agent 可观测性;同一个约束论证放在单个功能而非整个组织的尺度上,见 AFK 编码

手册的收尾是:"回路继续转。人的判断留在它上面。"这个愿景是对的,而它是一句关于"位置"的主张:只有在产物真的被评审的地方,判断才留在回路之上。把检查装到各跳上,这句话描述的就是你的流水线;让各跳裸着,它描述的就只是一张图。

常见问题

不用 Claude Code 能采纳这套东西吗?

产物链可以,它就是文件约定加提交纪律,配任何 agent 都行。plan mode 和 hooks 需要 harness 支持,而 hooks 是整份手册里唯一确定性的强制手段——所以一个没有等价机制的 harness,留给你的是约定,而不是控制。

intent.md 是不是换了个名字的 PRD?

内容上高度重叠。有两点不同:它被提交进仓库、和代码放在一起,而不是活在某个文档工具里;它是下个阶段机器可读的输入,而不是给人看的交付物。正是这两点让提交历史可以当审计轨迹用,也让脚本能够检查规格是否仍指向当前的意图。

agent 化 PR 评审会不会什么都放过?

它放过的会比严格的人类评审者多,也会标出疲惫的人类会漏掉的东西——这正是手册按严重程度给结论排序、并把人工评审留给受监管路径与关键路径而不是取消它的原因。真正要盯的失效模式不是宽松,而是范围:一个在 diff 里找缺陷的评审者并不是在拿 diff 对照规格,而再怎么按严重程度排序,也不会把前一份工作变成后一份。

有什么能防止别人绕过 hook?

如果 hook 只存在于某位开发者的本地设置里,那就没有。hooks 是配置,因此它继承你的仓库给配置的那套保护——把它提交进去,像审代码一样审对它的修改,并把一个改动 hook 目录的 PR 当作一次政策变更来对待,因为它本来就是。

这和规格驱动开发有什么不同?

规格驱动开发覆盖的是前半程——把一份规格变成计划、再变成代码。这份手册把同一个想法延伸穿过评审、部署与生产监控,并让 Maintain 阶段把诊断结论写回成一份新的意图,从而闭合回路。新的主张是那个闭环,不是规格本身。

人到底留在回路的哪些点上?

照原文写的是三个点:接受一份 intent.md、批准一份 plan.md、裁决关键路径上的评审结论。本文的论点是还缺第四个——有人确认规格忠实于意图——并且一旦生产环境开始自己生成意图,前三个里的第一个就必须真有人在岗。

延伸阅读

本站相关:

原始出处: