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

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

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

01六条基本原则

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

01
规格先行
先写清楚意图和验收标准,再让 AI Agent 写代码。一句话 prompt 直接开工必然返工。
02
人在环中
交易链路的代码必须人审。低风险工具类改动可以快,涉及订单/资金/支付的必须资深 review。
03
小批量增量
Agent 一次只做一个可验证的小改动。不要让它一口气写 500 行再 review。
04
硬门禁不绕过
Lint 和单测红灯就是不能合并。不要因为"赶上线"就 skip 门禁。
05
可回滚
交易链路的每一次发布都必须能快速回退。数据库变更必须配套回滚脚本。
06
留痕
plan.md、PR 讨论、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 调度和拍板 组织形态:扁平化 · 结果导向 · 跨职能协同 · 人机混编 前置条件:高素质人才 · 坚实数据基础 · 高效工具支撑 · 成功示范样板
关系怎么做不怎么做
人 ↔ 人
  • 按模块边界拆任务,明确谁负责哪块
  • 接口/契约先定义清楚,各自独立开发
  • 对接走 PR 评论、文档,不走临时拉群
  • 不拉会同步"我做到哪了"
  • 不互相 push 对方改代码
  • 不口头约定接口(必须落文档)
人 ↔ AI
  • 人把需求"蒸馏"干净:目标、约束、验收标准
  • 给 AI Agent 明确指令和边界,让它独立跑完
  • 人 review 结果,不盯着它每一步操作
  • 不一步步指挥 AI Agent 写代码
  • 不让 AI Agent 自己拍板架构决策
  • 不把模糊需求扔给它自由发挥
AI ↔ AI
  • 独立任务用 worktree 隔离(见 Build 章节)
  • 同一需求内的子任务用 Subagents 并行
  • 输出都走 git diff,人来统一把关
  • 允许 Agent 相互 review(子 Agent 复核、陌生人 Reviewer,见 Build 章节)
  • 不让两个 Agent 在同一目录同时改
  • Agent 互审结论不得越过各项目定义的人审范围——每个项目在 AGENTS.md 中显式定义:哪些路径必须人审、哪些非核心修改可由 Agent review 替代人审直接合并

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

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

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

什么时候必须拉会协同?

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

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

03Git Flow 分支与环境映射

新人最容易搞混的三件事:merge 还是 rebase、先合并还是先部署、哪个环境对应哪个分支。这一节直接给答案。

dev 环境 自动部署 uat 环境 运维手动部署 prod 环境 运维手动部署 develop 开发主干,自动部署 dev feature/xxx release/x.x.x main 生产主干 hotfix/*

分支-环境对照速查

环境对应分支部署方式用途
devdevelopCodeup 自动部署开发自测、联调
uatrelease/*运维手动触发测试/产品验收
prodmain运维手动触发线上生产
新手必读:merge 还是 rebase?什么时候用哪个?

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

场景用什么为什么
feature 分支更新代码git rebase develop保持提交历史线性,PR 干净
feature 合回 developPR Merge(不 rebase)保留合并节点,可追溯这次发布包含哪些 feature
release 合回 mainPR Merge打版本标签,保留发布节点
release 上的 bug fix直接在 release 分支提交,不走 feature 分支uat 验证对象 = 发布对象;随 release → develop 回合带回 develop,不允许只存在于 release 的提交
hotfix 合回 mainPR Merge紧急修复也要留痕
铁律:永远不要在已经 push 到远程的公共分支(develop/main)上 rebase。rebase 只在你自己的 feature 分支上做。
新手必读:我们为什么不用 git flow release finish 命令?

标准 git flow release finish 会一口气做三件事:

  1. 合并 release → main
  2. 打版本标签
  3. 合并 release → develop
  4. 删除 release 分支

但我们的流程需要先发 prod、观察没问题、再合回 develop——因为如果 prod 出问题要 hotfix,develop 上不应该带着这个未验证的发布。所以我们不用这个命令,手动分步走 PR:

步骤动作操作方式
1uat 验证通过后,提 PR:release → mainCodeup 建 PR,合并后打版本标签
2main 合入,运维发 prod发布后观察 30 分钟监控
3prod 没问题,再提 PR:release → develop把这次发布的改动合回开发主干
4develop 合入后,删 release 分支Codeup 上删远程分支
关键:release → develop 这一步必须在 prod 确认没问题之后再做。不要图省事用 git flow release finish 一把梭,那样 develop 会先于 prod 拿到未验证的代码。
新手必读:先合并还是先部署?正确顺序是什么?

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

  1. 在 feature 分支开发,本地跑 lint + 单测
  2. 提 PR 到 develop,等资深工程师 review
  3. Review 通过后 Merge 到 develop,Codeup 自动部署到 dev
  4. dev 环境验证没问题
  5. 从 develop 切出 release/x.x.x 分支
  6. 通知运维部署 release 分支到 uat
  7. uat 验证通过(测试 + 产品验收)
  8. 提 PR 把 release 合到 main,打版本标签
  9. 通知运维部署 main 到 prod
  10. 观察线上指标,确认没问题后把 release 合回 develop
关键顺序:先合并到对应分支,再让运维部署那个分支。不要"先在 uat 上测试一下再合代码"——uat 上跑的必须是已经合并的 release 分支,不能直接从 feature 分支部署。
合并到 develop 后,Codeup 自动部署 dev 的完整机制

feature 合并到 develop 触发两段流水线:合并前校验 + 合并后部署验收。两段各自独立:

两段流水线

阶段做什么失败怎么办
合并前(PR 校验)只检查单个项目的问题:Lint、单测、构建红灯不能合并,改到绿再提
合并后(部署流水线)重新构建制品 → 部署 dev → 单应用 + 跨应用端到端验收见下方失败处理

失败处理与回滚

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

DB 迁移

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

跨应用验收

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

04六个阶段怎么做

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

每阶段产出物总览

阶段产出物谁写 / 谁审批过不了怎么办
1. Planintent.md + plan.mdintent.md(业务意图、验收标准)由产品经理主笔、产品负责人审;plan.md(实现计划)由 DRI 写、DRI 审没想清楚就别动手,写大白话想法让 AI 追问
2. Designspec.md架构师、工程师写;产品负责人确认业务还原,资深工程师 review 技术方案只写"做什么、做成什么样",不写"怎么做"
3. Build代码 + 测试(实现按 plan.md 执行)DRI(工程师)写并自审先改文档再改代码,返工成本低
4. TestEvals 评测集测试工程师兜底完备性;自动回归20-50 个真实任务,掉分禁合并
5. DeployREVIEW.md人(DRI)最终审批AI 先审查标记问题,Hooks 拦截违规部署
6. Maintain新 intent.mdAI 诊断 → 人确认监控指标异常 → AI 诊断 → 自动回到 Plan 阶段
1
Plan · 写清楚再让 Agent 动手
一句话 prompt 直接开工,是返工的最大来源

怎么做

  1. 需求开始前,先确认产品经理提供的 intent.md(业务意图、目标、验收标准);没有就先补,再动手。
  2. DRI 基于意图写 plan.md(可以让 Agent 帮你起草,你改)。
  3. 计划必须包含:目标、非目标、可机器判定的验收标准、涉及哪些模块、有没有数据库变更。
  4. 自己先过一遍"陌生人测试":没参与讨论的人拿到这个 plan 能直接做吗?不能就补。
  5. 用 Agent 的 Plan Mode 启动,让它先输出实现计划,你确认后再让它写代码。
展开:plan.md 完整模板(交易链路适用)
# Feature: <名称>  关联需求:JIRA/工单号

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

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

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

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

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

## 风险
- 风险描述(例:并发取消导致超卖)→ 只登记风险,缓解方案写入 spec.md
- 回滚方式:feature flag / 回退代码重发
不要这样
  • "帮我加个订单取消功能"——Agent 会自由发挥,产出你不要的东西
  • 验收标准写"用户体验更好"——不可机器判定,没法测试
  • 涉及数据库变更但没写回滚脚本——交易链路回滚可能要运维帮忙
2
Design · 关键决策人审
交易链路的架构决策不能让 Agent 自己拍板

怎么做

  1. 让 Agent 先列 2-3 个候选方案和各自的取舍,不要让它直接选一个就写。
  2. 涉及订单、支付、库存、资金这些核心链路的改动,方案必须给资深工程师过一眼。
  3. 重要决策写在 PR 描述里:为什么这么做、放弃了什么、什么条件下会推翻。
  4. 明确告诉 Agent 不能动什么:不要改 legacy 模块、不要新增依赖、不要破坏现有接口契约。
不要这样
  • 让 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 懂代码结构,但不懂业务语义。

  • 放什么:业务场景说明、状态机、交易规则、接口契约——这些是人审受控文档:只能随代码同 PR 由人更新,Agent 不得自行改写(Agent 是 docs 最重度的消费者,不能既当读者又当作者)
  • 怎么更新:改业务逻辑必须先改 docs 再改代码,同一个 PR。不允许只改代码不改 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 排查、生成回滚脚本、PR 描述模板等
展开:当前 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. 各自开发、各自提 PR
# 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 要紧急合,新功能还没好,别互相等

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

  1. 先出计划(plan.md):工程师审计划,消除模糊后再动手。先改文档返工更轻。
  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 回合仍未收敛即升级人裁决,双方意见全文留入 PR 描述,不无限辩论

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

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

怎么做

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

AI 写的测试,信多少?

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

Evals 评测闭环(核心场景)

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

  • 同等待遇(目标态,3 个月内接线):代码变更和 Agent 配置变更(CLAUDE.md / Skills / Hooks 改动)一视同仁都要跑 Evals——当前 CI 仅代码变更触发,配置变更触发排在 3 个月路线
  • 持续回归:不是提测前才跑,每次 PR 自动跑
  • 掉分禁合并:通过率比基线低就红,不许强合。基线三条纪律:① 初始基线 = 评测集首次全量跑通率,记录在仓(如 evals/baseline.json);② 基线只升不降,下调需 PR + Tech Lead approve 并留痕;③ 新用例合入时基线重算为 min(当前通过率, 旧基线),新用例不得放松旧约束
  • 线上 bug 转 Evals:每次线上修复后,补一个评测用例进集子里,下次自动检测
  • 用例退役:连续 6 个月未捕获差异且业务已下线的用例,评测集 owner 可 PR 退役并留痕(防止集子只增不减变成新屎山)
不要这样
  • CI 红了就找"赶上线"理由跳过——下次技术债翻倍还
  • 让 Agent 删掉跑不过的测试来"通过"——这是在掩盖问题
  • 只测 happy path——交易链路出问题都在异常路径
5
Deploy · 按 Git Flow 流程走,不跳步
dev 自动 → uat 运维发 → prod 运维发,按环境逐级验证

发布流程(务必照做)

  1. develop → dev:PR 合并到 develop 后 Codeup 自动部署 dev,你自己验证。
  2. 切 release:从 develop 切 release/x.x.x,只修 bug,不加新功能。bug fix 一律在 release 分支上直接提交(保持 uat 验证对象 = 发布对象),由该 PR 的 DRI 负责随 release → develop 回合带回 develop——不允许只存在于 release 的提交。
  3. uat 验证:通知运维部署 release 到 uat,测试和产品验收。
  4. 合 main:uat 通过后,提 PR 把 release 合到 main,打版本标签。
  5. prod 发布:通知运维部署 main 到生产,发布后盯 30 分钟监控。
  6. 回 develop:发布确认没问题后,单独再提一个 PR 把 release 合回 develop,不要用 git flow release finish(它会一步合 main+develop,把未验证代码带进 develop)。
不要用 git flow release finish:这个命令会原子性地把 release 同时合 main 和 develop。我们的流程要求 prod 验证通过后才合回 develop,所以必须手动分两次 PR。详见上面"为什么不用 release finish"折叠块。

紧急回滚怎么做

生产出问题时:先找运维回滚旧版本(不用先自己改代码),同时你立刻定位原因。回滚后再走 hotfix 流程修复(见下方折叠块)。不要在 prod 上直接改代码。
带 DB 变更的回滚顺序(含 DDL 的发布必读):① 查变更记录确认本次发布是否含 DDL(变更记录必填此项,见硬门禁 ④);② 含 DDL:先停流量/切读 → 运维执行 down 脚本 → 再回滚制品(顺序不能反:旧代码可能起不来,或运行中请求写不进去);③ 不含 DDL:直接制品回滚。down 脚本由运维执行、开发提供并陪同。prod 回滚目标同样是制品(上一个验证通过的构建产物),不是回退代码分支。
展开:hotfix 完整流程(生产事故后的修复路径)
  1. 从 main(回滚后的版本标签)切出 hotfix/x.x.x 分支
  2. 本地门禁照跑:lint + 单测,不豁免
  3. 提 PR 合回 main。交易链路可以豁免 uat,但不可豁免资深 + TL 双人 review——这是全流程唯一的裁剪点
  4. 打补丁版本标签,运维发 prod,照常盯 30 分钟监控
  5. prod 确认没问题后,PR 合回 develop(与 release → develop 同规则)——不回流 = 下个 release 把已修的 bug 带回生产
  6. 走「翻车复盘三步闭环」(见 Maintain 章节)

哪些路径必须资深 review

敏感路径要求
订单、支付、资金相关必须资深工程师 + Tech Lead 双人 review
数据库 DDL / 表结构变更必须有回滚脚本,提前告知运维
对外 API 接口变更不能 breaking change,新增字段可以,删改必须兼容
权限、鉴权相关必须资深 review
普通工具类 / 内部后台一人 review 即可
不要这样
  • feature 分支直接部署 uat 测——uat 跑的必须是 release 分支
  • release 分支上继续加新功能——要加新功能等下一个版本
  • uat 没测完就发 prod——交易链路出问题代价很大
  • 出问题先慌着改代码——先回滚止血,再修
6
Maintain · 上线后盯什么
发布不是终点,线上验证才是
  1. prod 发布后,自己盯 30 分钟。判定基准(占位,按实际监控能力校准):错误率 > 发布前 1 小时基线的 2 倍、核心接口 P99 超基线 30%、订单量低于上周同期 70%,任一命中即触发回滚评估。监控入口:【dashboard 地址/命令待填】。
  2. 触发权:观察期内 DRI 有权直接呼叫运维回滚,不需要再审批。发现问题先关流量/回滚,再定位原因。
  3. 踩过的坑(比如某个配置项容易漏、某个边界 case 没想到)写入项目记忆(omp 用 /memory retain;其他工具用等价机制)记下来。
  4. 定期让 Agent 扫描热点路径,提性能优化 PR(这是后面的事,先把手头流程走顺)。

翻车复盘三步闭环

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

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

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

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

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

① 本地开发 — 你自己跑,跑不过别提 PR ② PR → develop — CI 硬阻断,review 通过 ③ release → uat — 集成测试 + DB 回滚脚本 ④ prod — 人工审批 + 回滚方案确认

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

边界规则
代码推送权限Agent 无权直接 push 到 main / develop,只能通过 feature/* 分支提 PR,由人 review 后合并
生产数据库可读不可写;敏感表/敏感字段(用户手机号、身份证、交易密码相关)配置不可访问,Agent 查不到
密钥与凭据Agent 不能读取配置中心生产密钥;开发环境密钥脱敏后使用
部署权限Agent 不能触发 uat / prod 部署,只能跑 dev 环境自动流水线
提交身份Agent 提交一律使用本人 git 身份,commit message 带 AI 署名标注(如 Co-Authored-By: <agent> trailer)——回溯、缺陷率分桶统计、责任定界都依赖它
AI 产出标注PR 标题或标签标明 AI 辅助程度(纯 AI / AI 辅助人写),与 PR 描述里的 Prompt 摘要互相印证

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

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

② PR 到 develop(Codeup CI 自动跑,红灯不能合并)

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

③ release 分支(发 uat 前,比 PR 更严)

门禁检查什么级别
上面所有 +PR 阶段全部门禁在 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———
PR 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 辅助,本地跑通 提 PR→develop Lint+单测 Review 合并 develop dev 自动部署 ↓ dev 环境自测通过 切 release 分支 部署 uat uat 验收 PR→main 打标签 部署 prod 盯30min+合回develop
第 1 步
写 plan.md
上游 intent.md(业务意图)由 PM 提供;用 Agent 帮你起草 plan,自己改到"陌生人能照做"。涉及数据库变更必须写回滚脚本。
第 2 步
切 feature 分支
从 develop 切出 feature/xxx,用 Agent Plan Mode 开发。一次做一个小改动,跑通再继续。
第 3 步
提 PR 到 develop
本地 lint + 单测全绿再提。PR 描述里贴 plan.md 要点。等资深 review。
第 4 步
合并到 develop,dev 验证
Codeup 自动部署 dev。自己在 dev 环境过一遍功能。
第 5 步
切 release,发 uat
从 develop 切 release/x.x.x,通知运维部署到 uat。配合测试和产品验收。
第 6 步
合 main,发 prod
uat 通过后提 PR 合 main,打标签。通知运维发生产。发布后盯 30 分钟监控。
第 7 步
合回 develop
线上确认没问题后,把 release 合回 develop。收尾。
完成

07团队接下来的落地路线

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

第一个试点怎么选?

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

维度选什么样的
复杂度中等——不是 CRUD 太简单(看不出 AI 价值),也不是核心交易链路(翻车代价大)
失败代价出错不影响钱、不影响用户,最多内部功能不好用
代码质量已有测试覆盖、文档还可以——不然 Agent 在屎山上写代码,你 review 都看不懂
owner找一个愿意试、心态开放的工程师当种子用户,别强推
大小2-3 周能做完一个完整需求——太快没体感,太慢看不到结果
推荐
内部工具 / 后台管理 / 非核心查询
逻辑清晰、边界明确、出问题没人哭,适合先跑通流程。
别碰
支付核心 / 资金结算 / 对外接口
等流程跑顺、团队有体感了再上,不拿生产事故做教学。
现阶段(已具备)
✓ AI Agent 编码 · Lint+单测硬门禁 · Git Flow · Codeup 流水线 · PR 人审 · Evals(核心链路)
基础已经有了,先把手头流程走顺。
下一步(3 个月内)
AGENTS.md 标准化 + plan.md 流程 + AI PR Review 辅助 + Evals 配置变更接线
每个仓库补 AGENTS.md(含人审范围与双审 reviewer 列表,排队瓶颈可视化);新需求先走 plan;CI 里类型检查、覆盖率、依赖扫描均为硬门禁;Evals 补上 Agent 配置变更触发;AI 先过一遍 PR 机械性问题,缓解双审排队。
中期(6 个月)
AI PR Review 深化 + Feature Flag
AI 预审从机械性问题扩展到风险提示;交易链路逐步上 Feature Flag 支持灰度。
远期
Canary 发布 + 自动回滚 + 运维闭环
现在 uat/prod 都要运维手动发,逐步自动化;错误率超阈值自动回滚。

怎么度量 AI 真的提效了?

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

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

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

技术债分级偿还

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

新人第一天 Checklist

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

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

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

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