ENGINEERING PLAYBOOK · v2.3.1 · 开放平台事业部

AI 时代的开发流程,
从需求到上线 全周期指南

这份手册给团队所有工程师:我们如何用 AI Agent(终端编码助手)做需求、设计、编码、测试和发布。 重点解决新人最容易懵的分支环境映射、merge/rebase、上线顺序问题。

01六条基本原则

不管在哪个阶段,这六条是判断"这样做对不对"的默认标尺。

01
规格先行
先写清楚意图和验收标准,再让 AI Agent 写代码。一句话 prompt 直接开工必然返工。
02
人在环中
交易链路的代码必须人审。低风险工具类改动可以快,涉及订单/资金/支付的必须资深 review。
03
小批量增量
Agent 一次只做一个可验证的小改动。不要让它一口气写 500 行再 review。
04
硬门禁不绕过
Lint 和单测红灯就是不能合并。不要因为"赶上线"就 skip 门禁。
05
可回滚
交易链路的每一次发布都必须能快速回退。数据库变更必须配套回滚脚本。
06
留痕
plan.md、MR 讨论、override 记录都要留。出问题能回溯,做对了能复用。

02团队协作模式:高内聚,低耦合

AI 时代的协作不是"人 + AI 一起在一个文档里改",而是每个人/每个 Agent 独立负责一块,只交换结果,不纠缠过程。

核心原则
高内聚、低耦合
每个人独立负责一个模块,输入输出定义清楚,干完直接交付结果,不需要拉会汇报过程。
沟通方式
异步文档优先
减少同步会议。需要对接时直接甩结果和接口定义,不展开讨论"怎么做"的细枝末节。

基本单元:DRI(微型 CEO)+ Agent 集群

每个需求/模块有一个 DRI(Directly Responsible Individual) 对结果端到端负责,周围配一组可调度的 AI Agent 集群。DRI 做判断和担责,Agent 做执行和交付。

DRI 担什么责:流程责任——有没有按流程走、有没有及时升级问题、有没有 review 到位。不是资金责任——交易链路出问题,最终兜底还是资深工程师/架构师。DRI 是流程 owner,不是背锅侠。
DRI · 微型 CEO 定义目标 · 关键判断 · 调度资源 · 最终担责 (人,不是 Agent) DRI ↔ DRI 接口契约 · 异步文档 目标驱动 DRI 定目标 → 调度 Agent 拆任务 · 给边界 → Agent 执行 worktree 并行 → DRI 判断 Review · 拍板 研究分析 读代码 · 查文档 出方案对比 执行交付 写代码 · 跑测试 出 diff 流程跟进 跑 CI · 补文档 盯流水线 跨部门协同 整理接口文档 同步给对接方 Agent 之间不直接通信,统一向 DRI 汇报,由 DRI 调度和拍板 组织形态:扁平化 · 结果导向 · 跨职能协同 · 人机混编 前置条件:高素质人才 · 坚实数据基础 · 高效工具支撑 · 成功示范样板
关系怎么做不怎么做
人 ↔ 人
  • 按模块边界拆任务,明确谁负责哪块
  • 接口/契约先定义清楚,各自独立开发
  • 对接走 MR 评论、文档,不走临时拉群
  • 不拉会同步"我做到哪了"
  • 不互相 push 对方改代码
  • 不口头约定接口(必须落文档)
人 ↔ AI
  • 人把需求"蒸馏"干净:目标、约束、验收标准
  • 给 AI Agent 明确指令和边界,让它独立跑完
  • 人 review 结果,不盯着它每一步操作
  • 不一步步指挥 AI Agent 写代码
  • 不让 AI Agent 自己拍板架构决策
  • 不把模糊需求扔给它自由发挥
AI ↔ AI
  • 独立任务用 worktree 隔离(见 Build 章节)
  • 同一需求内的子任务用 Subagents 并行
  • 输出都走 git diff,人来统一把关
  • 允许 Agent 相互 review(子 Agent 复核、陌生人 Reviewer,见 Build 章节)
  • 不让两个 Agent 在同一目录同时改
  • Agent 互审结论不得越过各项目定义的人审范围——每个项目在 review-scope.yml 中显式定义(独立成文件,不放在 AGENTS.md 内):哪些路径必须人审、哪些非核心修改可由 Agent review 替代人审(只替代 review 环节,不改变合并时机——所有 MR 一律锁定到 prod 验证通过后才合并)。治理三闸门:① review-scope.yml 自身的变更永远不符合 Agent-review-替代条件——修改它的 MR 必须 Tech Lead approve(一个文件不能授权跳过它自己的人审);② 单向阀:DRI 只可收紧范围,放宽必须 TL(与 Evals 基线"只升不降"同一纪律);③ Agent 配置变更(AGENTS.md / Skills / Hooks / review-scope.yml)触发 Evals 回归——Evals 配置变更接线排 3 个月路线第一优先,接线前 review-scope.yml 的 TL 闸门是唯一防线

传统角色在 AI-Native SDLC 中干什么?

现阶段团队仍区分产品经理、前端、后端、测试,部分人已逐步跨职能。角色边界不是消失,而是从"各管一段"变成"围绕 DRI 补位":

角色承担什么不做什么 / 什么时候补位
产品经理
  • 写 intent.md:业务意图、目标、验收标准(需求从哪来、做成什么样)
  • 需求优先级、范围判断
  • 业务结果负责(用户价值、指标)
不写代码、不参与技术选型;评审 spec.md 是否还原业务意图
架构师
  • 写 spec.md:技术方案、接口契约、数据模型(技术侧意图并入 spec,不另写 intent)
  • 架构决策、技术债务取舍、复杂方案设计
  • 跨模块契约对齐
不逐行写业务代码;核心交易链路架构变更必须过架构师
前端 / 后端工程师
  • 可承担 DRI(对应领域需求从头到尾)
  • 写 spec.md(自己负责的模块)
  • 驱动 Agent 执行、Review 产出、跑测试
超出自己专业领域时(如前端碰复杂 SQL、后端碰交互设计),找对应专业人员补位,不硬扛
测试工程师
  • 评测集(Evals)完备性兜底:核心链路 20-50 个评测用例由测试维护(设计中——集子尚未建立,起步摸底见 07 节路线图第⓪步;已上线的是单测层 PIT 变异门禁)
  • 线上 bug 转评测用例、回归验证;连续 6 个月未捕获差异且业务已下线的用例,评测集 owner 可提 MR 退役并留痕
  • 核心场景测试人工审核(Agent 写的测试可能"为了绿而绿")
  • 转型锚点(TL 维护):当前测试团队 N 人,从【试点链路】起步建设评测集,季度覆盖 M 条核心链路
不重复开发自己跑一遍所有测试——把精力放在评测集建设和人工审核上
DRI 怎么选:传统团队中任何能胜任的角色都可以当 DRI(前端、后端、测试都行),不限于某个岗位。但 DRI 专业知识不完备是常态——专业问题找专业人员补位:DRI 负责流程和调度,卡住的专业点(资金、合规、复杂算法、交互规范)明确找对应的人确认,不许自己拍脑袋。
跨职能是趋势,不是硬性要求:部分人已逐步跨职能(前端会写后端接口、后端会调前端页面),值得鼓励,但跨职能的前提是本职过硬——先把自己领域做到专业,再向外扩展。不要为了"全能"牺牲专业性。

什么时候必须拉会协同?

高内聚低耦合不是什么都异步。遇到下面这些情况,该拉会还是要拉会:

必须同步
复杂决策 / 创意碰撞
架构选型、跨模块方案、技术债务取舍——这些需要多人讨论,异步文档讨论效率低。
警惕信号
长期不协作 → 互信缺失
如果大家只甩结果不沟通,团队会变成"陌生同事"。定期站会/技术分享不能省,只是不拿来做进度汇报。
一句话记住:能独立完成的尽量独立,该协同的时候还是得协同。默认异步,必须同步的时候才拉会。

03分支模型与环境映射(master 单主干 + MR 发布)

模型一句话:只有一条主干 master。feature 一律从 master 切出;要上线就提合并到 master 的 MR——MR 只用来审查和构建部署,prod 验证通过前不合并;多个 feature 要同时上线,就建 release/x.x.x 分支把它们聚合起来构建部署。

dev 环境 自动部署 uat 环境 测试手动部署 prod 环境 运维手动部署 master 主干基线,只进已上线验证通过的代码 feature/xxx MR:只审查 · 构建 · 部署 prod 验证通过前不合并 验证通过后合并 MR release/x.x.x(多分支聚合) feature/A feature/B 验证通过后 MR 合入 + tag uat 与 prod 部署同一构建产物(MR 源分支 / release/*)

分支-环境对照速查

环境对应分支部署方式用途
devfeature/*(MR 源分支)Codeup MR 流水线自动部署开发自测、联调
uat上线 MR 源分支(单特性)/ release/*(多特性聚合)测试手动触发测试/产品验收
prod与 uat 同一构建产物;验证通过后 MR 合入 master运维手动触发线上生产
新手必读:merge 还是 rebase?什么时候用哪个?

这是新人最常问的问题。规则很简单:

场景用什么为什么
feature 分支更新代码git rebase master保持提交历史线性,MR 干净
feature 上线提 MR 到 master,Merge(不 rebase)保留合并节点,可追溯每次上线包含哪些 feature
多特性同时上线从 master 切 release/x.x.x,把各 feature 分支 merge 进去发布对象 = 多分支聚合,构建部署以 release 分支为准
release 上的 bug fix直接在 release 分支提交,不走 feature 分支uat 验证对象 = 发布对象;fix 随 release → master 的 MR 合回主干,不允许只存在于 release 的提交
铁律:永远不要在已经 push 到远程的公共分支(master / release/*)上 rebase。rebase 只在你自己的 feature 分支上做。
新手必读:为什么"构建、部署,但不合并 MR"?

传统流程是"先合并进主干,再从主干部署"。我们把顺序反过来:MR 只作为审查和构建部署的载体,prod 验证通过后才合并。三个理由:

  • master 永远等于线上:主干上只出现"已上线且验证通过"的提交,未验证代码不进主干
  • 发布对象 = 审查对象:uat / prod 部署的制品和 reviewer 看到的 diff 零偏差,不存在合并时的意外改动
  • 回滚不动主干:出问题回滚制品即可,master 不用 revert,不留"合了又撤"的脏历史
步骤动作操作方式
1feature 完成,提 MR → masterCodeup 建 MR,CI 全量门禁自动跑
2review 通过后不合并,构建部署单特性:直接部署 MR 源分支;多特性:合入 release/x.x.x 后部署 release
3uat 验收 → prod 发布运维部署同一构建产物,观察 30 分钟监控
4验证通过,最后一步才合并单特性:点合并 MR;多特性:提 release → master 的 MR 合入、打版本标签、删 release 分支,本批各 feature 的 MR 标注"已随 release/x.x.x 合入"后关闭
关键:合并是发布的收尾动作,不是起手动作。任何"先把 MR 合了再部署"的操作都会让 master 带上未验证代码——翻车时既要回滚制品,又要回退主干。
新手必读:MR 什么时候合并?正确顺序是什么?

以一个 feature 上线为例,正确顺序是:

  1. 从 master 切出 feature/xxx,本地跑 lint + 单测
  2. 提 MR 到 master,等资深工程师 review(只审查,不合并)
  3. MR 流水线自动构建,部署 MR 源分支到 dev
  4. dev 环境验证没问题
  5. 需要上线:通知测试部署该 MR 的构建产物到 uat(多特性同时上线:从 master 切 release/x.x.x 合入多个 feature 分支,测试部署 release)
  6. uat 验证通过(测试 + 产品验收)
  7. 运维把同一构建产物发到 prod
  8. 盯 30 分钟监控,确认没问题后合并 MR——这一刻 master 才更新
关键顺序:审查的是 MR、构建部署的是 MR、合并是 prod 验证通过后的收尾动作。不要"先合进 master 再从 master 部署"——那会让未验证代码进主干,翻车还得回退主干。
MR 创建后,Codeup 自动部署 dev 的完整机制

MR 创建 / 更新触发两段流水线:MR 校验 + 部署验收。全程不需要合并 MR,两段各自独立:

两段流水线

阶段做什么失败怎么办
MR 校验只检查单个项目的问题:Lint、单测、构建红灯进不了发布流程,改到绿再提
部署流水线基于 MR 源分支重新构建制品 → 部署 dev → 单应用 + 跨应用端到端验收见下方失败处理

失败处理与回滚

  • 服务不可用(部署后探活失败、进程起不来)→ 自动回滚到上一个无问题构建产物
  • 测试脚本失败(验收用例挂了)→ 人工介入,由 DRI 决定是否回滚(可能是脚本本身写错了)
  • 回滚目标:上一个"部署后验证通过"的构建产物(制品回滚),不是回退代码分支。该原则同样适用于 prod(见 Deploy 章节)
  • 回滚后:MR 源分支不 revert,标注"dev 验证失败",在 feature 分支修复后推送,MR 自动更新重跑流水线

DB 迁移

  • feature 开发时就要一起提供数据库回滚脚本(up + down 成对)
  • 没提供回滚脚本 = 说明该变更不需要回滚数据库,写清楚即可
  • 迁移失败 → 用 down 脚本回滚数据,再回滚制品

跨应用验收

交易链路涉及多个服务,验收采用各自独立验收:A 服务部署完就验收 A(含对 B 的契约调用验证),不等 B 也更新完。跨应用契约在 spec.md 里定义,验收时按契约 mock 或真实调用验证。

两个特性一起上线,一个能上、一个不能上,怎么办?

A、B 都完成开发并通过 dev 验证,本打算一起上线,但 B 因为外部条件(依赖方没就绪、运营窗口错不开)不能随本批发。核心原则:上线什么由 release/* 聚合进来哪些分支决定,不由"代码已完成"决定。

两个方案

方案做法适用
1. 本批不聚合 B(默认做法)release/* 只合入 A 的 feature 分支;B 的 MR 保持锁定,留到下一批 release/* 一起上绝大多数场景——B 的代码本来就没合进 master,"不上 B"是零成本操作
2. Feature FlagB 与 A 的改动拆不开(共享代码、契约变更)时,A、B 一起进 release/*,B 的变更用开关默认关闭,上线后条件满足再打开耦合改动拆不开;交易链路灰度

单主干模型下不存在"先合并再摘除":MR 在 prod 验证通过前不合并,"不上 B"就是聚合时不带 B 的分支,无需 git revert 手术。B 等待下一批期间按规则 git rebase master 同步主干,避免基线漂移。

04六个阶段怎么做

每个阶段都给出核心做法和常见坑。项目记忆文件和命令以当前团队使用的 Agent 工具为准,直接照做即可。

每阶段产出物总览

阶段产出物谁写 / 谁审批过不了怎么办
1. Planintent.mdintent.md(业务意图、验收标准)内容由产品经理主笔(经工单需求模板提供,DRI/工具转成仓库文件)、产品负责人审。工单管状态排期,intent.md 管内容——双向一行链接,重叠字段为零没想清楚就别动手,写大白话想法让 AI 追问
2. Designspec.md架构师、工程师写;产品负责人确认业务还原,资深工程师 review 技术方案spec 定方案与契约边界(技术方案、接口契约、数据模型、DDL 及回滚)——这就是"怎么做"的设计部分;实现步骤留给 plan.md
3. Buildplan.md + 代码 + 测试plan.md 由 DRI 基于 spec.md 转抄撰写、DRI 审;代码 DRI 写并自审模块清单 / DB 变更必须是对 spec 的转抄而非预测;评审 plan 即校验 DRI 是否读懂 spec
4. TestEvals 评测集测试工程师兜底完备性;自动回归20-50 个真实任务,掉分禁合并(设计中:集子未建,见 07 路线图⓪)
5. Deploy无(发布流程环节,不新增文档产出)人(DRI)最终审批AI 先审查标记问题,Hooks 拦截违规部署
6. Maintain新 intent.mdAI 诊断 → 人确认监控指标异常 → AI 诊断 → 自动回到 Plan 阶段
1
Plan · 写清楚再让 Agent 动手
一句话 prompt 直接开工,是返工的最大来源

怎么做

  1. 需求开始前,先确认 intent.md(业务意图、目标、验收标准)就位;没有就先补,再动手。真相源字段切分:工单系统管状态(要不要做、优先级、排期、验收流转),intent.md 管内容(唯一内容真相源,随代码进版本库)。双向一行链接:工单描述里只放 intent.md 的仓库路径,intent.md 头部保留工单号——重叠字段为零,漂移无处发生。PM 经工单需求模板提供内容(字段与 intent 章节一一对应),格式转换由 DRI / Agent 代劳。
  2. 顺序铁律:intent.md(Plan)→ spec.md(Design)→ plan.md(动手编码前)。实现计划必须知道"改哪些模块、有没有 DDL、风险在哪"——这些是设计决策的输出,所以在 spec 定稿之后写,模板见 Build 章节。不允许在 spec 之前凭预测填模块清单和数据库变更。
  3. 自己先过一遍"陌生人测试":没参与讨论的人拿到 intent + spec 能直接做吗?不能就补。
  4. 用 Agent 的 Plan Mode 启动,让它先输出实现计划,你确认后再让它写代码。
不要这样
  • "帮我加个订单取消功能"——Agent 会自由发挥,产出你不要的东西
  • 验收标准写"用户体验更好"——不可机器判定,没法测试
  • 涉及数据库变更但没写回滚脚本——交易链路回滚可能要运维帮忙
2
Design · 关键决策人审
交易链路的架构决策不能让 Agent 自己拍板

怎么做

  1. 让 Agent 先列 2-3 个候选方案和各自的取舍,不要让它直接选一个就写。
  2. 涉及订单、支付、库存、资金这些核心链路的改动,方案必须给资深工程师过一眼。
  3. 重要决策写在 MR 描述里:为什么这么做、放弃了什么、什么条件下会推翻。
  4. 明确告诉 Agent 不能动什么:不要改 legacy 模块、不要新增依赖、不要破坏现有接口契约。
  5. spec.md 评审通过后,DRI 基于 spec 写 plan.md(实现步骤、模块改动清单、DDL 及回滚、验收标准到测试的映射)——模块与 DB 声明是对 spec 的转抄,不是预测。模板见 Build 章节。
不要这样
  • 让 Agent 同时做设计和写代码——它会选最容易写的方案,不是最合理的
  • 设计只在聊天记录里——下次会话 Agent 就忘了,会重新发明轮子
3
Build · 用 AI Agent 高效写代码
终端 Agent,Plan Mode + 项目记忆 + Subagents

每次新会话必须做的事

  1. 在仓库根目录放 AGENTS.md(Agent 会自动读取),写清楚项目规范。
  2. 用 Agent 的 Plan Mode 启动:先让它出计划,你确认后再动手。
  3. 一次只让 Agent 做一个小改动——写完、跑测试、确认,再让它做下一个。
  4. 独立任务(比如写接口 + 写测试)可以用 Subagents 并行,但最后你统一 review。
  5. 关键决策写入项目记忆(omp 用 /memory retain;其他工具用其等价机制,如 CLAUDE.md 追加),下次会话不用重新说。

AGENTS.md 模板(本团队)

# 项目:XXX 服务
技术栈:Java 17 / Spring Boot / MySQL / Redis / Kafka

# 常用命令(与硬门禁清单 ① 本地开发五项一一对应)
- 格式:mvn spotless:apply
- 静态检查:mvn checkstyle:check pmd:check spotbugs:check
- 编译:mvn clean compile
- 单测(改动模块):mvn test -Dtest=你改的类
- 全量测试:mvn test
提交前五项必须全绿(以本清单为准,与 CI 门禁保持同步)。

# 代码规范
- Controller 只做参数校验和路由,业务逻辑在 Service
- 数据库操作必须走 Mapper,不要在 Service 里拼 SQL
- 业务异常继承 BizException,错误码统一管理
- 交易链路接口必须加幂等设计

# 不能做的事
- 不要动 src/legacy/ 目录
- 不要引入新的第三方库(需要先问 Tech Lead)
- 不要在循环里调用 RPC 或数据库查询
- 所有对外接口必须写参数校验和异常处理

docs 目录:业务知识沉淀(人审受控)

每个项目根目录 docs/ 下放业务文档——Agent 懂代码结构,但不懂业务语义。

  • 放什么:业务场景说明、状态机、交易规则、接口契约——这些是人审受控文档:只能随代码同 MR 由人更新,Agent 不得自行改写(Agent 是 docs 最重度的消费者,不能既当读者又当作者)
  • 怎么更新:改业务逻辑必须先改 docs 再改代码,同一个 MR。不允许只改代码不改 docs
  • 多久 review:每季度 DRI 过一遍 docs 是否过时,过期的比没有更危险。review 落痕:在 docs/REVIEW-LOG.md 追加一行(日期 / DRI / 结论),没记录 = 没做过

Skills 库(awesome-rules 仓)

高频操作沉淀成可复用的 Skill,存在 awesome-rules 仓,不用每次重新跟 Agent 描述。项目里引用即可。

  • 怎么用:在 AGENTS.md 里引用需要的 Skill,Agent 按需加载,不用全塞进上下文
  • 沉淀时机:同一个操作跟 Agent 描述过 3 次以上,就该写成 Skill 放进 awesome-rules
  • 已有示例:查线上日志、写 SQL 排查、生成回滚脚本、MR 描述模板等
展开:当前 Agent 工具命令速查(以 omp 为例,换工具时找等价命令)
命令用途
/memory view查看当前项目已记住的内容
/memory retain <事实>把重要决策存为长期记忆
Plan Mode 启动当前工具默认先出计划再执行,确认后才改代码
Subagents独立任务并行派发,主会话把关
展开:多 Agent 并行开发——用 git worktree 隔离会话

同时跑多个 Agent 会话(一个改接口、一个写测试、一个重构),如果在同一个目录里,两个 Agent 会互相覆盖文件、git 状态打架。正确做法是每个 Agent 一个独立 worktree:同一个仓库,多个工作目录,各 check out 各的分支。

worktree 并行示意

共享 .git 对象库 worktree A 分支 feature/order-cancel Agent 会话 A(独立上下文) 端口 8081 worktree B 分支 feature/order-refund Agent 会话 B(独立上下文) 端口 8082

标准操作流程

# 假设主仓库在 ~/repo/order-service

# 1. 为任务 A 建一个独立 worktree(新目录 + 新分支)
git worktree add ../order-A feature/order-cancel

# 2. 为任务 B 再建一个
git worktree add ../order-B feature/order-refund

# 3. 两个终端分别进去,各启动一个 Agent
cd ../order-A && omp
cd ../order-B && omp

# 4. 各自开发、各自提 MR
# 5. 任务完成后清理 worktree
git worktree remove ../order-A
git worktree remove ../order-B

为什么不用分支切换就行?

  • 切换分支要 stash 当前未提交的改动,来回切很容易丢东西
  • 两个 Agent 会话都有自己的上下文(已打开的文件、记忆),切分支会搞混
  • worktree 共享同一个 .git 对象库,不占额外磁盘存两份代码

注意事项

1. 端口冲突:两个 worktree 都在本地起服务,端口要错开(A 用 8081,B 用 8082)。
2. 不要在两个 worktree 改同一个文件:合并时必冲突。并行任务提前拆清楚文件边界。
3. 数据库:多个 worktree 连同一个本地库没问题,但跑迁移脚本前确认其他 worktree 不在跑测试。
4. 用完就删:任务合并后立刻 git worktree remove,不然目录越堆越多。
5. 查看有哪些 worktree:git worktree list。

什么时候用 worktree,什么时候用 Subagents?

场景用什么
一个需求里的两个独立子任务(写接口 + 写测试)Subagents:同一个 Agent 会话里派,上下文共享,你统一 review
两个完全独立的需求/任务,要长时间并行worktree:两个独立 Agent 会话,互不干扰
一个人同时修 bug + 做新功能worktree:bug 要紧急合,新功能还没好,别互相等

plan.md 模板(动手编码前写,基于 spec.md 转抄)

plan.md 在 spec.md 评审通过后、编码前撰写。评审 plan = 校验 DRI 是否读懂 spec。

展开:plan.md 完整模板(交易链路适用)
# Feature: <名称>  关联需求:JIRA/工单号

## 目标
一句话。例:订单超时未支付自动取消并释放库存。

## 非目标
- 本次不做退款流程
- 本次不改消息推送模板

## 验收标准
- [ ] 订单超过 30 分钟未支付,状态变为 CANCELLED
- [ ] 取消后库存自动释放回可用库存
- [ ] 用户收到取消通知(短信+站内信)
- [ ] 重复取消不产生副作用(幂等)

## 涉及模块
- 修改:order-service / 定时任务 / 库存服务
- 新增:取消订单的领域事件

## 数据库变更
- 是否有 DDL:是/否
- 如有,回滚脚本:xxx.sql

## 风险
- 风险描述(例:并发取消导致超卖)→ 只登记风险,缓解方案见 spec.md
- 回滚方式:feature flag / 回退代码重发

三步写代码:计划 → 写 → 自查

  1. 先出计划(plan.md):工程师审计划,消除模糊后再动手。先改文档返工更轻。审的时候核对:模块清单与 DB 变更是否与 spec.md 一致(转抄而非预测)——不一致要么改 spec 走设计评审,要么改 plan,不许两边各说各话。
  2. AI 写代码:按计划一步步写,每步跑测试。
  3. AI 自查:写完自动跑测试 + 构建,全部通过才算完成。不通过自己改,最多 5 轮。
子 Agent 复核(避免灯下黑):核心场景的代码,让另一个独立的子 Agent 从"挑刺"角度再看一遍——它不知道你原来怎么想的,更容易发现问题。

陌生人 Reviewer 闭环(核心场景)

参考 Peter Steinberger(OpenClaw 之父)的做法:主 Agent 写完代码后,唤起一个全新空白上下文的子 Agent 当 Reviewer,双方来回辩论:

  1. 主 Agent 写完代码,唤起空白 Reviewer:"帮我把刚才改的代码全盘过一遍"
  2. Reviewer 挑出问题回传给主 Agent
  3. 主 Agent 辩解或认错修改,改完再提交给 Reviewer
  4. 来回拉扯最多 10 个回合;第 10 回合仍未收敛即升级人裁决,双方意见全文留入 MR 描述,不无限辩论

跑与不跑按各项目 review-scope.yml 定义的人审范围执行:定义为核心链路的必须跑,之外可选。成本预期:核心链路 MR 预留 1-2 小时,排进发布节奏。

不要这样
  • 一个 prompt 让 Agent 改 5 个文件——review 起来你会崩溃
  • 让 Agent 自己说"完成了"就算完——必须你自己跑测试确认
  • 无限制让 Agent 改——最多 5 轮自修复,超过就人工介入
4
Test · 边写边测,硬门禁不绕过
Lint 和单测红灯 = 不能合并,没有例外

怎么做

  1. 让 Agent 写代码的同时把单测一起写了——不要留到最后补。
  2. 本地必须跑通:lint + 单测全绿,再提 MR。
  3. CI 红灯不要 skip——让 Agent 看日志、改到绿为止,最多 5 轮。
  4. 交易链路的改动,必须补边界 case:空值、并发、幂等、异常路径。
  5. 改完测试跑全量,不要只跑你改的那个文件。
什么时候算写完:不是 Agent 说"完成了",而是——lint 绿 + 单测绿 + 你自己看懂 diff + 边界 case 覆盖了。四个条件同时满足才算。

AI 写的测试,信多少?

场景信任程度你要做什么
非核心场景(后台管理、内部工具、CRUD)基本全信抽查断言是否真的验证了逻辑,而不是空跑
核心交易链路(下单、支付、退款、对账)必须人工审核逐行看测试用例、边界覆盖、断言强度,Agent 写的测试可能"为了绿而绿"

Evals 评测闭环(核心场景)

光靠单测不够——核心链路要维护一个 20-50 个真实任务的评测集,每次代码变更或 Agent 配置变更都自动跑一遍,通过率掉了就禁止合并。

现状(v2.3.1 纠偏,2026-10 盘点):gtsp-wop-service 的单测层变异门禁已上线(PIT:3233 变异体、击杀率 89-92%、pre-push 阈值 89)——"用变异证明用例有效"的纪律已在单测层运转;但 agent 任务级 Evals 评测集尚未建立,本节为设计目标,起步需先摸底用例来源(历史 bug 回放是最便宜的第一批)。

  • 同等待遇(3 个月内接线,排期第一优先):代码变更和 Agent 配置变更(AGENTS.md / review-scope.yml / Skills / Hooks 改动)一视同仁都要跑 Evals——当前 CI 仅代码变更触发。接线前,review-scope.yml 的 TL 闸门是配置治理的唯一防线,这也是把接线排第一的原因
  • 持续回归:不是提测前才跑,每次 MR 自动跑
  • 掉分禁合并:通过率比基线低就红,不许强合。基线三条纪律:① 初始基线 = 评测集首次全量跑通率,记录在仓(如 evals/baseline.json);② 基线只升不降,下调需 MR + Tech Lead approve 并留痕;③ 新用例合入时基线重算为 min(当前通过率, 旧基线),新用例不得放松旧约束
  • 用例上岗纪律:一个用例必须先证明自己能抓差异,才能参与基线——从未抓到过差异的评测集配上"掉分禁合并",等于用随机数挡合并:拦不住真 bug,却会拦住真功能。两条路径任选:① 回放历史 bug(线上事故转的用例天然合格);② mutation 变异测试——对被测代码做人工变异(改边界、删幂等检查),用例必须变红。从未变红的新用例挂「观察」状态:不进基线、不触发禁合并。已有集子的仓先做一轮变异体检(一天工作量),抓不到差异的标「观察」;集子还没建的仓(现状 = 多数),首批用例从历史 bug 回放起步、天然走路径①
  • 线上 bug 转 Evals:每次线上修复后,补一个评测用例进集子里,下次自动检测
  • 用例退役:连续 6 个月未捕获差异且业务已下线的用例,评测集 owner 可提 MR 退役并留痕(防止集子只增不减变成新屎山)
不要这样
  • CI 红了就找"赶上线"理由跳过——下次技术债翻倍还
  • 让 Agent 删掉跑不过的测试来"通过"——这是在掩盖问题
  • 只测 happy path——交易链路出问题都在异常路径
5
Deploy · 按 MR 发布流程走,不跳步
dev 自动 → uat 测试发 → prod 运维发,按环境逐级验证

发布流程(务必照做)

  1. 提 MR → master:feature 开发完成后提 MR 合到 master。MR 只作为载体——人审 + CI 构建,不合并(Codeup 分支保护锁定合并:prod 验证通过前谁都不能点合并)。
  2. MR → dev:MR 流水线自动构建,部署 MR 源分支到 dev,你自己验证。
  3. uat 验证:单特性——通知测试部署该 MR 的构建产物到 uat;多特性同时上线——从 master 切 release/x.x.x,把要一起上线的 feature 分支合入,测试部署 release。release 只修 bug,不加新功能;bug fix 一律在 release 分支上直接提交(保持 uat 验证对象 = 发布对象),随 release → master 的 MR 合回主干——不允许只存在于 release 的提交。
  4. prod 发布:uat 通过后,运维把同一构建产物发到生产,发布后盯 30 分钟监控。
  5. 合并收尾(最后一步):prod 验证通过后——单特性点合并该 MR;多特性提 release → master 的 MR 合入、打版本标签、删 release 分支,本批各 feature 的 MR 标注"已随 release/x.x.x 合入"后关闭,不留挂起的僵尸 MR。合并前 master 不动,保证 master 永远等于线上。
  6. 同步 feature:master 前进后,通知未上线的 feature 分支 git rebase master——所有分支都从 master 切出,主干动了自己要跟上。
为什么"构建、部署,但不合并 MR":合并是发布的收尾动作,不是起手动作。先合并再部署会让未验证代码进 master——翻车时既要回滚制品,又要回退主干。MR 不合并直接构建部署,发布对象 = 审查对象,回滚只动制品不动主干。详见 03 节"为什么'构建、部署,但不合并 MR'"折叠块。

紧急回滚怎么做

生产出问题时:先找运维回滚旧版本(不用先自己改代码),同时你立刻定位原因。回滚后按普通特性流程修复:从 master 切 feature 分支提 MR(见下方折叠块)。不要在 prod 上直接改代码。
带 DB 变更的回滚顺序(含 DDL 的发布必读):① 查变更记录确认本次发布是否含 DDL(变更记录必填此项,见硬门禁 ④);② 含 DDL:先停流量/切读 → 运维执行 down 脚本 → 再回滚制品(顺序不能反:旧代码可能起不来,或运行中请求写不进去);③ 不含 DDL:直接制品回滚。down 脚本由运维执行、开发提供并陪同。prod 回滚目标同样是制品(上一个验证通过的构建产物),不是回退代码分支。
展开:线上修复流程(生产事故后——按普通特性流程走)
  1. 回滚、定位后,从 master 切出 feature/fix-xxx 分支修复——与普通新特性完全同路,不设 hotfix 特殊分支
  2. 本地门禁照跑:lint + 单测,不豁免
  3. 提 MR 到 master,走同一发布流程:只审查 + 构建 + 部署,prod 验证通过前不合并——线上事故也不例外,紧急靠优先排 review 与部署解决,不裁剪门禁
  4. 运维部署该 MR 构建产物到 prod,照常盯 30 分钟监控;验证通过后合并 MR、打补丁版本标签
  5. master 前进后,通知未上线的 feature 分支 rebase master——与普通上线相同
  6. 走「翻车复盘三步闭环」(见 Maintain 章节)

哪些路径必须资深 review

敏感路径要求
核心链路 · 高风险档(契约变更、资金/结算逻辑、DDL、状态机)必须资深工程师 + Tech Lead 双人 review
核心链路 · 低风险档(docs/、日志、注释、测试、纯内部重构且测试全绿)资深单人 review + 强制陌生人 Reviewer 闭环。分层标准以各项目 review-scope.yml 为准;单审 reviewer 拿不准或 Reviewer 10 回合未收敛时升级 TL。启用前置:先做双审排队量化分桶(近 3 个月 git/Codeup 数据,按核心/非核心 × 排队时长),确认瓶颈在核心链路再启用;若根因是资深人手总量不足,分层无效,加人
数据库 DDL / 表结构变更必须有回滚脚本,提前告知运维
对外 API 接口变更不能 breaking change,新增字段可以,删改必须兼容
权限、鉴权相关必须资深 review
普通工具类 / 内部后台一人 review 即可
不要这样
  • 先合并 MR 再部署——合并是 prod 验证通过后的收尾,master 不进未验证代码
  • release 分支上继续加新功能——要上新功能提新 MR,等下一批合入 release
  • uat 没测完就发 prod——交易链路出问题代价很大
  • 出问题先慌着改代码——先回滚止血,再修
6
Maintain · 上线后盯什么
发布不是终点,线上验证才是
  1. prod 发布后,自己盯 30 分钟。判定基准(占位,按实际监控能力校准):错误率 > 发布前 1 小时基线的 2 倍、核心接口 P99 超基线 30%、订单量低于上周同期 70%,任一命中即触发回滚评估。监控入口:【dashboard 地址/命令待填】。
  2. 触发权:观察期内 DRI 有权直接呼叫运维回滚,不需要再审批。发现问题先关流量/回滚,再定位原因。
  3. 踩过的坑(比如某个配置项容易漏、某个边界 case 没想到)写入项目记忆(omp 用 /memory retain;其他工具用等价机制)记下来。
  4. 定期让 Agent 扫描热点路径,提性能优化 MR(这是后面的事,先把手头流程走顺)。

翻车复盘三步闭环

线上出问题后,光写复盘文档不够——要确保 Agent 下次不再犯同样的错:

  1. 写复盘文档:存档,讲清楚什么问题、根因、影响
  2. AGENTS.md 加一条"别再犯":把教训写进项目规则,Agent 下次自动遵守
  3. Evals 加一个用例:下次自动回归,再犯直接红

三步走完才算复盘结束。只写文档不加规则和评测 = 下次还会犯。

05硬门禁清单:每个环节必须过什么

硬门禁 = 红灯就不能往下走,没有"赶上线"例外。按本地开发 → MR → uat → prod 四个环节逐层加严。

① 本地开发 — 你自己跑,跑不过别提 MR ② MR → master — CI 硬阻断,review 通过(不合并) ③ uat — 上线对象(MR 源分支 / release/*)集成测试 + DB 回滚脚本 ④ prod — 人工审批 + 回滚方案确认,验证通过才合并 MR

Agent 权限与安全边界(红线)

边界规则
代码推送权限Agent 无权直接 push 到 master,只能通过 feature/* 分支提 MR,由人 review;MR 在 prod 验证通过前处于合并锁定状态,Agent 更无权点合并
生产数据库可读不可写;敏感表/敏感字段(用户手机号、身份证、交易密码相关)配置不可访问,Agent 查不到
密钥与凭据Agent 不能读取配置中心生产密钥;开发环境密钥脱敏后使用
部署权限Agent 不能触发 uat / prod 部署,只能跑 dev 环境自动流水线
提交身份Agent 提交一律使用本人 git 身份,commit message 带 AI 署名标注(如 Co-Authored-By: <agent> trailer)——回溯、缺陷率分桶统计、责任定界都依赖它
AI 产出标注MR 标题或标签标明 AI 辅助程度(纯 AI / AI 辅助人写),与 MR 描述里建议附的 Prompt 摘要互相印证(摘要为建议性信号,不作门禁,见 08 节)
红线双层执行机制:上面每条红线必须映射到建议层 + 确定性层各至少一处;只有建议层(AGENTS.md 文本)的,降级为"约定",不许文本喊红线、执行层裸奔。团队工具栈为 omp + Claude Code,确定性层落地方式:
  • Claude Code hooks(Agent 动作时拦截,覆盖 Claude 会话):docs/ 目录写入拒绝、src/legacy/ 触碰拒绝、白名单外新增依赖拒绝、生产密钥/敏感字段读取拒绝。
  • CI 兜底(覆盖非 Claude 工具会话,三条都是便宜的 diff 检查):① MR 触碰 docs/ 但未触碰 src/ → 红灯;② diff 触碰 src/legacy/ → 红灯(白名单 MR 例外);③ pom.xml 新增白名单外 dependency → 红灯。
  • Codeup 分支保护:Agent 无 push master 权限、MR 合并锁定到 prod 验证通过、review 人数要求、review-scope.yml 变更须 TL approve。

① 本地开发(你自己跑,跑不过别提 MR)

门禁检查什么命令
代码格式缩进、import 顺序、命名风格统一mvn spotless:apply 或 checkstyle
静态检查空指针、未关闭资源、可疑写法、循环里调 RPC/DBmvn checkstyle:check pmd:check spotbugs:check
编译通过类型错误、依赖冲突mvn clean compile
单元测试你改的模块的单测全绿mvn test -Dtest=你改的类
大测试全量确认没改坏别的地方mvn test

② MR 到 master(Codeup CI 自动跑,红灯不能进入发布)

门禁检查什么级别
编译 + Lint和本地一致,CI 上再跑一遍硬阻断
单元测试全量所有单测必须绿硬阻断
测试覆盖率新增代码覆盖率 ≥ 80%,总覆盖率不能比 master 低硬阻断
依赖漏洞扫描第三方库有没有已知 CVE硬阻断(高危与中危均拦)
MR Review人审范围按各项目 review-scope.yml 定义:核心路径(交易链路 / DB / 对外接口 / 权限)强制人审,交易链路高风险档 = 资深 + TL 双人;非核心修改可由 Agent review 替代人审(只替代 review 环节;MR 合并仍锁定到 prod 验证通过)。review-scope.yml 自身的变更必须 TL approve,不适用 Agent-review-替代硬阻断
不能 draft 直接合草稿 MR 必须标记 ready 才能合硬阻断
commit 规范commit message 符合规范(feat/fix/refactor 开头)建议,暂不硬卡

③ 上线对象:MR 源分支 / release/*(发 uat 前,比 MR 阶段更严)

门禁检查什么级别
上面所有 +MR 阶段全部门禁在上线对象(MR 源分支 / release/*)上再跑一遍硬阻断
集成测试跨服务接口联调测试通过硬阻断
DB 变更检查有 DDL 必须配套回滚脚本,提前通知运维硬阻断
关键接口冒烟核心交易链路接口 P99 耗时不超过基线提示,超标要说明

④ prod 发布前(人工 + 流程门禁)

门禁检查什么谁来确认
uat 验收通过测试和产品在 uat 上点过测试 + 产品
变更记录发布内容、影响范围、回滚方式写清楚开发自己写
回滚方案确认出问题能不能 5 分钟内回退;含 DDL 的发布必须演练过 down 脚本开发 + 运维
运维审批通知运维发 prod,确认窗口运维
发布后观察盯 30 分钟错误率 / 核心指标开发自己盯
落地节奏:现在已经有的是"Lint + 单测硬阻断"。覆盖率阈值和依赖漏洞扫描不做 warn 观察期,直接硬拦(pmd / spotbugs 一并配进 CI)。review 人数要求在 Codeup 分支保护里按各项目定义的人审范围配置,不用写代码。

06一次需求从开发到上线的完整 SOP

新人入职第一个需求,照着这张清单一步步走,不会错。先看谁做什么、再看时间顺序。

RACI 责任矩阵:每件事谁负责

活动 开发 资深/TL 测试 产品 运维
写 intent.md(业务意图)CI—R/A—
写 plan.md / 技术方案RACCI
写代码(AI Agent 辅助)RI———
MR Review—R/A———
dev 环境验证R/A———I
dev 环境回滚(制品)R/A———I
部署 uat——R/A——
uat 验收CIRR—
部署 prod————R/A
prod 上线观察R/AC—II
生产回滚CA——R

R = 执行负责   A = 最终负责   C = 需要咨询   I = 知会   — = 不参与

一次需求的时序图

开发 Codeup CI 资深/TL 运维 测试/产品 写代码+单测 Agent 辅助,本地跑通 提 MR→master Lint+单测 Review MR 部署 dev 自动部署(不合并) ↓ dev 环境自测通过 申请发 uat 部署 uat uat 验收 申请发 prod 部署 prod 盯30min+合并MR
第 1 步
写 plan.md
上游 intent.md 由 PM 经工单需求模板提供内容(工单管状态、intent.md 管内容、双向一行链接);Design 产出 spec.md 后,再基于 spec 写 plan.md(转抄非预测),自己改到"陌生人能照做"。涉及数据库变更必须写回滚脚本。
第 2 步
切 feature 分支
从 master 切出 feature/xxx,用 Agent Plan Mode 开发。一次做一个小改动,跑通再继续。
第 3 步
提 MR 到 master
本地 lint + 单测全绿再提。MR 描述里贴 plan.md 要点。等资深 review——只审查,不合并。
第 4 步
MR 部署 dev,dev 验证
MR 流水线自动构建、部署 MR 源分支到 dev。自己在 dev 环境过一遍功能。
第 5 步
发 uat
单特性:测试部署该 MR 的构建产物到 uat;多特性同时上线:从 master 切 release/x.x.x 合入多个 feature 分支,测试部署 release。配合测试和产品验收。
第 6 步
发 prod
uat 通过后,运维把同一构建产物发到生产。发布后盯 30 分钟监控。
第 7 步
合并 MR,收尾
线上确认没问题后合并 MR(多特性:提 release → master 的 MR 合入、打 tag、删 release 分支)。此刻 master 才更新,等于线上。
完成

07团队接下来的落地路线

现状已经有 Codeup 流水线和硬门禁,下一步按这个顺序补:

第一个试点怎么选?

不要上来就动支付核心。试点选对了,团队有信心;选错了,翻车一次就推不动了。按这个原则挑:

维度选什么样的
复杂度中等——不是 CRUD 太简单(看不出 AI 价值),也不是核心交易链路(翻车代价大)
失败代价出错不影响钱、不影响用户,最多内部功能不好用
代码质量已有测试覆盖、文档还可以——不然 Agent 在屎山上写代码,你 review 都看不懂
owner找一个愿意试、心态开放的工程师当种子用户,别强推
大小2-3 周能做完一个完整需求——太快没体感,太慢看不到结果
推荐
内部工具 / 后台管理 / 非核心查询
逻辑清晰、边界明确、出问题没人哭,适合先跑通流程。
别碰
支付核心 / 资金结算 / 对外接口
等流程跑顺、团队有体感了再上,不拿生产事故做教学。
现阶段(已接线 / 试点中)
✓ 已接线:AI Agent 编码 · Lint+单测硬门禁 · 单测变异门禁(PIT,gtsp-wop-service 阈值 89)· Codeup 流水线 · MR 人审|ⓘ 设计中:Evals(agent 任务级评测集未建,起步摸底待排期)|ⓘ 新流程:master 单主干 + MR 发布(v2.3 起,替代原 Git Flow)
手册全量使用三态标记【已接线 / 试点中 / 设计中】,现状与目标态不许混排在现在时态里——新人是拿着这份手册照做的。v2.3.1 纠偏:Evals 此前标"试点中"不实——gtsp-wop-service 不存在 agent 任务级评测集(单测层 PIT 变异门禁已上线,是另一个机制);集子建立前 Evals 不承担任何门禁职责。
下一步(3 个月内,按优先级排序)
⓪ Evals 集子起步摸底(用例来源盘点:历史 bug 回放第一批)→ ① Evals 配置变更接线(第一优先)→ ② AGENTS.md 标准化 + review-scope.yml 抽离 → ③ plan.md 流程 → ④ AI PR Review 辅助
⓪ v2.3.1 增补:集子不存在则接线无从谈起——先盘点 20-50 个真实任务从哪来(历史 bug 回放最便宜且天然满足上岗纪律路径①),摸底结论决定立项或改判"Evals 不适用本栈、以 PIT 为等价物";① 配置变更(AGENTS.md / review-scope.yml / Skills / Hooks)触发 Evals 回归——hooks 已确认可落 Claude Code,无技术障碍;② 每个仓库补 AGENTS.md + review-scope.yml(人审范围独立成文件,含双审 reviewer 列表,排队瓶颈可视化;gtsp-wop-developer 已有模板落仓);③ 新需求先走 intent → spec → plan;CI 里类型检查、覆盖率、依赖扫描均为硬门禁;④ AI 先过一遍 MR 机械性问题,缓解非核心 MR 的人审负担(注:核心链路双审队列的解法见 Deploy 章节风险分档,量化分桶先行——分桶脚本已落 tools/review-queue-bucket.py)。
中期(6 个月)
AI PR Review 深化 + Feature Flag
AI 预审从机械性问题扩展到风险提示;交易链路逐步上 Feature Flag 支持灰度。
远期
Canary 发布 + 自动回滚 + 运维闭环
现在 uat 由测试手动发、prod 由运维手动发,逐步自动化;错误率超阈值自动回滚。

怎么度量 AI 真的提效了?

凭感觉不算。每月看一次这几个指标,对比用 Agent 前后的变化:

指标看什么目标方向
MR 周期从提 MR 到 review 通过的时间变短
返工率MR 被打回改超过 2 次的比例下降
生产 bug 数上线后 1 周内提 bug 的数量不上升(这是底线)
人 review 时长一个 MR review 平均花多少分钟。解读批注:变长时先排查人审产能瓶颈(双审排队),再归因 AI——两者混判会得出「AI 提效失败」的假结论不应该变长

基线怎么建:用 Agent 之前 3 个月的 git 历史数据算出来,每月对比看趋势。第一个月别期待太大,看方向不看绝对值。

技术债分级偿还

级别什么样的债什么时候还
红色(必须现在还)影响交易正确性、有安全风险、阻塞别人开发下个迭代必须还,不许拖
黄色(计划还)代码丑、重复、性能小问题、缺注释排进季度规划,跟着需求一起还
绿色(记录但不急)命名不优雅、小重构机会写到 TODO,下次碰这块代码时顺手还

新人第一天 Checklist

顺序做什么
1读这份手册全文(30 分钟),重点看分支模型映射(03 节)和硬门禁
2装环境:JDK 17、Maven、本地 MySQL/Redis、Codeup 账号、Agent 工具
3clone 主仓库,读 AGENTS.md 和 docs/ 目录下的业务文档
4跑通 mvn clean package + 本地起服务,确认能打开首页
5找你的 buddy(指定带你的资深工程师),选一个小需求开始第一个 MR
6第一个 MR 不要用 Agent——手动写,理解清楚流程后再用

08Review AI Agent 产出时重点盯这些

除了常规代码质量,AI Agent 生成的代码有几个特有的危险信号,review 时重点看:

MR 建议附 Prompt 摘要(建议性信号,不作门禁):每个 MR 描述里建议附一段人工撰写的 Prompt 对话摘要——看你是真花心思拆解问题、跟 Agent 来回推敲,还是扔一句"帮我修了"加一张报错截图。前者是真思考,后者是批量生成的垃圾。本项不可机器验证,不设硬门禁:能机器判定的只有"存在性",而最擅长写这段摘要的恰恰是 Agent 本身——存在性检查只会得到 Agent 代笔的粘贴,测量的是合规表演不是思考,还会污染门禁制度的严肃性。检测职能交给更硬的既有机制:diff 偏离 plan.md(下表)+ 陌生人 Reviewer 闭环——"扔一句帮我修了"的 MR,plan.md 必然空洞。reviewer 想验真思考,用不可伪造的测试:在 MR 评论里问一个关于实现取舍的具体问题——真做过拆解的人 30 秒能答,粘贴摘要的人答不出。脱敏标准与代码相同(见硬门禁红线):手机号 / 身份证 / 密钥 / 内网地址一律打码,禁止整段粘贴对话原文(Prompt 上下文常含真实报错栈和样本数据,整段贴 = 数据泄漏通道)。
展开:Prompt 摘要模板(5 行,MR 描述直接用)
## Prompt 摘要
- 背景:一句话说清这个 MR 解决什么问题
- 关键决策:2-3 条(为什么选这个方向、改了哪些边界条件)
- 被否方案:1 条(试过什么、为什么放弃)
- 遗留问题:有则写,无则删掉本行
(以上由人撰写;敏感数据已打码)
信号为什么危险
删测试 / 跳过测试为了让 CI 绿而删掉暴露问题的测试
重复造已有轮子Agent 没检索到仓库已有实现,写了个重复的
一次 MR 跨多个模块违反小批量原则,review 难度指数上升
新引入未在 AGENTS.md 评估的依赖可能违反许可证或安全要求
diff 偏离 plan.md没记录的设计变更,要问为什么
循环里调 RPC / DB性能大坑,AI Agent 常犯
一句话记住:AI Agent 是你的高级实习生——它写得快、愿意干活,但你必须 review 每一行。交易链路不相信"AI 写的应该没问题"。