沉淀日期:2026-05-27 最近更新:2026-05-28(基于 v2.1 分析,8 项改进集成) 版本变更:v2.1 → v2.2(CRRC 项目适配、交付验证改革、编译自检、自动化测试、回溯流程、分层抽查、日志度量)
每个需求/任务以文档为启动点,初始化为 Git 仓库。多个不同职能的 Agent 团队按阶段接力开发,通过 Git 分支隔离工作,里程碑合并汇总成果。贯穿全流程的业务领导角色负责审批和管控。
| 改进项 | 解决的问题 |
|---|---|
| 业务领导提炼上下文 | 子Agent无状态导致上下游信息断裂 |
| 并行开发合并策略 | 多团队并行时文件冲突无预案 |
| 返工升级路径 | 返工死循环无兜底方案 |
| 代码质量抽查 | 编译通过≠质量合格 |
| 环境就绪检查 | M3→M4 环境问题导致阻塞 |
| 交付物可验证 | 防止交付物检查流于形式 |
| 测试重点指定 | 防止测试阶段缺乏策略指导 |
| 改进项 | 解决的问题 |
|---|---|
| CRRC 项目适配(附录 C) | 流程与实际 Gradle 多模块项目不匹配 |
| 覆盖度检查替代行数校验 | 行数校验流于形式,无法反映交付质量 |
| 对上团队的问题通道 | 下游发现问题时无快速反馈机制 |
| Team C 编译自检门控 | 编译验证依赖业务领导手动执行 |
| Team D 自动化测试集成 | 测试交付物缺少可执行测试代码 |
| 跨阶段回溯流程 | M3/M4 发现上游问题时无标准化处理流程 |
| 风险导向分层抽查 | 单一文件抽查覆盖率过低 |
| 项目日志过程度量 | 缺少阶段耗时、失败原因分类等改进数据 |
业务领导 (Business Owner)
│ 贯穿全流程,负责:
│ - 定义项目目标、验收标准
│ - 审批每个里程碑是否达标
│ - Go / No-Go 决策
│ - 返工决策和方向调整
│ - 最终验收
│ - 维护项目生命周期日志
│ - 派单时提炼关键上下文传递给下游团队
│
├── Team A 需求分析师
├── Team B 架构师
├── Team C 开发者
└── Team D 测试工程师
| 角色 | 模型 | 职责 |
|---|---|---|
| 业务领导 | GLM-5.1 | 全局管控、审批、决策、派单、上下文传递。不参与具体执行 |
| 需求分析师 | MiniMax M2.7 | 产出需求规格、用例、约束条件 |
| 架构师 | MiniMax M2.7 | 产出架构设计、接口定义、技术选型 |
| 开发者 | MiniMax M2.7 | 按架构编码,分模块分阶段提交 |
| 测试工程师 | MiniMax M2.7 | 基于业务领导指定的测试重点,执行测试,提交报告 |
原则:由业务领导在派单时提炼关键上下文,同时要求当前团队在 DELIVERY-MANIFEST.md 中填写"给下游团队的关键信息"。
双重保障:
当前团队填写:在 DELIVERY-MANIFEST.md 中填写"给下游团队的关键信息"
业务领导提炼:派单时将关键信息嵌入 prompt
示例(业务领导派单给Team B时的prompt片段):
## 上游关键信息
### Team A 的关键决策
- 用户认证采用JWT方案,原因是系统需要支持移动端
- 权限控制采用RBAC模型,每个用户绑定一个角色
### 隐含约束
- 数据库必须使用MySQL 5.7(客户环境限制)
- 所有接口必须支持租户隔离(tenant_id字段)
### 特别注意
- 需求中的"报表导出"功能优先级较低,可简化设计
[业务领导] 制定项目目标 + 验收标准
│
▼ git init main
│ 1. 创建 .gitignore(排除 target/、*.class、.idea/、*.iml、.DS_Store、*.log)
│ 2. 提交 .gitignore 到 main
│ 3. 提交 docs/charter.md、docs/acceptance-criteria.md
│
[业务领导] 派单 → Team A(prompt中明确项目目标和验收标准)
│
┌─ Team A 需求分析 ──→ branch: phase/01-requirement
│ 输出: spec.md, use-cases.md, constraints.md, DELIVERY-MANIFEST.md
│ │
│ ▼ merge request → main
│ │
[业务领导] 审查 DELIVERY-MANIFEST.md → Go/No-Go
│ (含对上团队问题处理)
[业务领导] 派单 → Team B(prompt中嵌入 Team A 的关键信息)
│
┌─ Team B 架构设计 ──→ branch: phase/02-architecture
│ 输出: design.md, api-definition.md, tech-stack.md, DELIVERY-MANIFEST.md
│ │
│ ▼ merge request → main
│ │
[业务领导] 审查 DELIVERY-MANIFEST.md → Go/No-Go
│ (含对上团队问题处理)
[业务领导] 派单 → Team C(prompt中嵌入 Team B 的关键信息)
│
┌─ Team C 编码实现 ──→ branch: phase/03-coding
│ 输出: 代码 + DELIVERY-MANIFEST.md
│ │
│ ▼ 编译自检(Team C 执行)
│ │ cd {affected_module} && ./gradlew compileJava
│ │ 通过 → 自检结果写入 DELIVERY-MANIFEST.md → 提交 merge request
│ │ 失败 → 修复后重新自检
│ │
│ ▼ merge request → main
│ │
[业务领导] 风险导向分层代码抽查 + 审查 DELIVERY-MANIFEST.md → Go/No-Go
│ (含对上团队问题处理)
▼ 环境就绪检查(./gradlew bootRun + 冒烟,在具体模块目录内执行)
│
[业务领导] 派单 → Team D(prompt中嵌入测试重点 + Team C 的关键信息)
│
┌─ Team D 测试验收 ──→ branch: phase/04-testing
│ 输出:
│ - test-cases.md # 测试用例说明
│ - test-report.md # 测试执行报告
│ - bug-list.md # Bug 清单
│ - DELIVERY-MANIFEST.md # 交付清单
│ - {module}/src/test/java/ # 可执行的自动化测试代码
│ 执行:
│ 1. 手动验证核心接口(冒烟)
│ 2. 编写自动化测试(JUnit 4 + Spring Boot Test)
│ 3. ./gradlew test 确认全部通过
│ 4. 结果写入 test-report.md
│ │
│ ▼ merge request → main
│ │
[业务领导] 审查 DELIVERY-MANIFEST.md → 最终验收
│ (含对上团队问题处理)
当 Team C 拆分为 Backend 和 Frontend 并行开发时:
1. 文件所有权划分(业务领导派单时明确)
Team C-Backend 拥有:
- src/main/java/**(所有 Java 代码)
- src/main/resources/mapper/**(MyBatis XML)
- schema.sql
Team C-Frontend 拥有:
- src/main/resources/templates/**(HTML 模板)
- src/main/resources/static/**(CSS/JS/图片)
共享文件(由业务领导预先定义模板):
- src/main/resources/application.properties
→ Backend 负责:server.port、数据库配置、MyBatis 配置
→ Frontend 负责:静态资源路径、模板引擎配置
→ 双方只填充各自段落,不得修改对方段落
禁止修改的文件(任何一方都不允许修改):
- pom.xml(由业务领导统一管理)
- .gitignore(由业务领导统一管理)
- 已合并到 main 的其他团队交付物
2. 合并流程
1. Backend 和 Frontend 各自完成
2. 业务领导对比两方的 DELIVERY-MANIFEST.md 中的修改文件清单
3. 检查清单:
a. 是否有重叠文件 → 手动解决冲突
b. 是否有修改"禁止修改"的文件 → 打回
c. 是否有修改未明确归属的文件 → 业务领导判定归属
4. 无冲突 → 统一 commit
3. DELIVERY-MANIFEST.md 补充字段
## 修改文件清单(Team C 必填)
| 序号 | 文件路径 | 操作类型 | 说明 |
|------|----------|----------|------|
| 1 | src/main/java/.../UserController.java | 新增 | 用户模块 Controller |
| 2 | src/main/resources/application.properties | 修改 | 添加数据库配置(仅 DB 段落) |
M3→M4 派单前,业务领导必须完成以下检查:
| 序号 | 检查项 | 状态 |
|---|---|---|
| 1 | ./gradlew bootRun 启动无报错(在具体模块目录内执行) |
□ |
| 2 | 启动日志无 ERROR | □ |
| 3 | 核心 API 冒烟测试通过(≥2个) | □ |
检查结果记录到 docs/environment-checklist.md。
main # 主分支,每个里程碑合并
phase/01-requirement # 各阶段工作分支
phase/02-architecture
phase/03-coding
phase/04-testing
rework/01-requirement # 返工分支
rework/02-architecture
rework/03-coding
backport/arch-api-fix # 回溯分支:修复架构接口定义
backport/req-clarification # 回溯分支:澄清需求歧义
[milestone-N] 简述内容
例: [milestone-1] 完成用户模块需求规格
[rework-N] 简述返工内容
例: [rework-1] 补充用户权限约束条件
[backport-N] 简述回溯修改内容
例: [backport-1] 修正 User API 返回值定义,增加 errorCode 字段
repo/
├── docs/
│ ├── charter.md # 业务领导:项目章程、目标、验收标准
│ ├── acceptance-criteria.md # 业务领导:每个里程碑的通过条件
│ ├── project-log.md # 业务领导:项目生命周期日志
│ ├── environment-checklist.md # 业务领导:环境就绪检查(M3→M4)
│ └── reviews/
│ ├── milestone-1-review.md # 业务领导评审记录
│ ├── milestone-2-review.md
│ └── ...
│
├── deliveries/ # ===== 各团队交付目录 =====
│ │
│ ├── team-a-requirement/ # Team A 独属目录
│ │ ├── DELIVERY-MANIFEST.md # 交付清单
│ │ ├── spec.md # 需求规格
│ │ ├── use-cases.md # 用例文档
│ │ └── constraints.md # 约束条件
│ │
│ ├── team-b-architecture/ # Team B 独属目录
│ │ ├── DELIVERY-MANIFEST.md # 交付清单
│ │ ├── design.md # 架构设计文档
│ │ ├── api-definition.md # 接口定义
│ │ └── tech-stack.md # 技术选型说明
│ │
│ ├── team-c-coding/ # Team C 独属目录
│ │ ├── DELIVERY-MANIFEST.md # 交付清单
│ │ └── impl-notes.md # 实现说明(可选)
│ │
│ └── team-d-testing/ # Team D 独属目录
│ ├── DELIVERY-MANIFEST.md # 交付清单
│ ├── test-cases.md # 测试用例
│ ├── test-report.md # 测试报告
│ └── bug-list.md # Bug 清单
│
├── com.sayu.service-xxx/ # Team C 代码产物(各业务模块)
│ ├── src/main/java/... # 业务代码
│ ├── src/main/resources/... # 配置 + MyBatis XML 映射
│ └── src/test/java/... # Team D 自动化测试代码
├── com.sayu.service-common/ # 共享库模块(只读,修改需返工流程)
├── tests/ # Team D 测试文档目录(deliveries 内的子目录备选)
│
└── rework/ # 返工请求
└── rework-01.md # 返工请求文档
deliveries/team-X-xxx/ 目录下提交交付产物com.sayu.service-*/src/main/java/ 由 Team C 产出com.sayu.service-*/src/test/java/ 由 Team D 产出com.sayu.service-common/ 是共享库模块,修改需通过返工流程,且修改后需优先编译验证每个团队在提交最终交付前,必须在自己的交付目录下维护一份 DELIVERY-MANIFEST.md。
# 交付清单 — [团队名称]
## 里程碑信息
- 阶段: [需求分析 / 架构设计 / 编码实现 / 测试验收]
- 里程碑编号: milestone-N
- 提交时间: YYYY-MM-DD HH:MM
- 负责团队: Team X
## 交付产物
| 序号 | 文件路径 | 说明 | 覆盖度检查 | 核心内容摘要 |
|------|----------|------|------------|--------------|
| 1 | deliveries/team-a-requirement/spec.md | 需求规格文档 | 模块数: 3/3, 功能点: 12/12 | 包含用户模块、订单模块、报表模块 |
| 2 | deliveries/team-a-requirement/use-cases.md | 用例文档 | 用例数: 20/20, 覆盖需求: 全部 | 覆盖所有功能点 |
## 修改文件清单(Team C 必填,其他团队可选)
| 序号 | 文件路径 | 操作类型 | 说明 |
|------|----------|----------|------|
| 1 | src/main/java/.../UserController.java | 新增 | 用户模块 Controller |
## 交付说明
(简要说明本次交付的核心内容、关键决策)
## 给下游团队的关键信息(必填)
- 关键决策:(本次交付中最重要的技术/业务决策)
- 隐含约束:(下游必须遵守的限制)
- 特别注意:(需要提醒下游的事项)
## 对上团队的问题(可选)
(当前团队在工作中发现的、需要上游团队澄清或修正的问题。
业务领导审查时应当关注这些问题,必要时触发跨阶段回溯。)
- 问题:(描述问题,引用上游交付物中的具体章节/行号)
- 期望:(期望上游如何修正)
- 影响范围:(问题影响哪些下游工作)
## 待确认事项
(如有需要业务领导确认的问题,列在此处)
每个团队的覆盖度检查含义不同:
| 团队 | 覆盖度定义 | 示例 |
|---|---|---|
| Team A | spec.md 模块数 / charter.md 总模块数;use-cases.md 功能点 / charter.md 总功能点 | 模块数: 3/3 |
| Team B | api-definition.md 接口数 / spec.md 功能点数;DDL 表数 / 需求实体数 | 接口数: 8/8 |
| Team C | 实现接口数 / api-definition.md 接口数;编译自检通过的模块数 | 接口实现: 8/8 |
| Team D | 测试用例数 / use-cases.md 用例数;核心接口测试 / 领导指定核心接口 | 用例覆盖: 20/20 |
为什么不用行数? 行数不反映质量。500 行可能是模板填充或注释堆砌,50 行可能是高度精炼。"覆盖度检查"让审查者一眼看出交付物是否完整覆盖了上游定义的预期范围,且覆盖度描述本身迫使团队核算交付完整性。
1. 团队提交 merge request
2. 业务领导读取 DELIVERY-MANIFEST.md
3. 按清单逐项查验:
a. 用 Glob 工具确认文件存在
b. 检查清单中的"覆盖度检查"和"核心内容摘要"是否合理
c. 用 Read 工具抽查 1 个文件,核对内容与清单描述是否一致
d. 检查"给下游团队的关键信息"是否完整
e. 检查"对上团队的问题"字段 —— 如有问题,优先处理:
- 可立即澄清的:业务领导直接回复
- 需上游修改的:触发跨阶段回溯流程(见第九章回溯部分)
4. M3 阶段:执行风险导向分层代码抽查(见第八章)
5. 输出评审文档 docs/reviews/milestone-N-review.md
6. 做出决策:
- Go → merge to main,记录日志
- No-Go → 打回,附具体修改意见,记录日志
为确保子 Agent 严格按模板输出交付清单,在 delegate_task 的 prompt 末尾必须嵌入以下指令:
你必须在交付目录下创建 DELIVERY-MANIFEST.md,严格按以下格式:
# 交付清单 — [团队名称]
## 里程碑信息
- 阶段: [需求分析 / 架构设计 / 编码实现 / 测试验收]
- 里程碑编号: milestone-N
- 提交时间: YYYY-MM-DD HH:MM
- 负责团队: Team X
## 交付产物
| 序号 | 文件路径 | 说明 | 覆盖度检查 | 核心内容摘要 |
|------|----------|------|------------|--------------|
| 1 | ... | ... | ... | ... |
## 修改文件清单(Team C 必填)
| 序号 | 文件路径 | 操作类型 | 说明 |
|------|----------|----------|------|
| 1 | ... | 新增/修改/删除 | ... |
## 交付说明
(核心内容、关键决策)
## 给下游团队的关键信息(必填)
- 关键决策:(本次交付中最重要的技术/业务决策)
- 隐含约束:(下游必须遵守的限制)
- 特别注意:(需要提醒下游的事项)
## 对上团队的问题(可选)
(列出需要上游团队澄清的问题,包括问题描述、期望、影响范围)
## 待确认事项
(需要业务领导确认的问题)
⚠️ 不按此格式输出视为交付不完整。
⚠️ "给下游团队的关键信息"缺失视为交付不完整。
⚠️ 发现上游交付物有歧义或矛盾时,必须在"对上团队的问题"中记录,不得保持沉默。
业务领导维护一份贯穿项目全生命周期的日志文档。
# 项目生命周期日志
## 项目基本信息
- 项目名称: XXX
- 启动时间: YYYY-MM-DD
- 项目目标: (一句话描述)
- 当前状态: [进行中 / 已交付 / 已暂停]
---
## 日志记录
### [YYYY-MM-DD HH:MM] 项目启动
- 动作: 初始化项目仓库,定义项目章程
- 产出: docs/charter.md, docs/acceptance-criteria.md
### [YYYY-MM-DD HH:MM] Milestone 1 — 需求分析派单
- 动作: 派单给 Team A
- 预期交付: 需求规格、用例、约束条件
### [YYYY-MM-DD HH:MM] Milestone 1 — 审查
- 审查结果: [通过 / 不通过]
- 意见: (评审意见)
- 决策: [Go / No-Go]
- 提取的关键信息: (将传递给 Team B 的内容)
### [YYYY-MM-DD HH:MM] 返工(如有)
- 原因: (具体问题)
- 返工次数: 第 X 次
- 处理: (修改意见)
...(后续里程碑同理)
### [YYYY-MM-DD HH:MM] 项目交付
- 最终状态: 所有里程碑通过
- 交付版本: tag v1.0
- 统计: 返工 X 次,一次通过率 X%,总历时 Xh Xm
以下数据由业务领导在项目执行过程中持续更新,用于评估流程效果和指导后续迭代改进。
| 阶段 | 派出时间 | 交付时间 | 总耗时 | 说明 |
|---|---|---|---|---|
| M1 需求分析 | YYYY-MM-DD HH:MM | YYYY-MM-DD HH:MM | Xh Xm | - |
| M2 架构设计 | YYYY-MM-DD HH:MM | YYYY-MM-DD HH:MM | Xh Xm | - |
| M3 编码实现 | YYYY-MM-DD HH:MM | YYYY-MM-DD HH:MM | Xh Xm | 含返工/回溯 |
| M4 测试验收 | YYYY-MM-DD HH:MM | YYYY-MM-DD HH:MM | Xh Xm | 含返工/回溯 |
| 阶段 | 返工次数 | 团队 | 最常见原因 |
|---|---|---|---|
| M1 需求分析 | X | Team A | 需求遗漏 / 约束不完整 / ... |
| M2 架构设计 | X | Team B | 接口定义不覆盖需求 / 技术选型不合理 / ... |
| M3 编码实现 | X | Team C | 编译错误 / 与接口定义不一致 / ... |
| M4 测试验收 | X | Team D | 用例遗漏 / 测试未通过 / ... |
| 阶段 | 一次通过率 |
|---|---|
| M1 需求分析 | X% |
| M2 架构设计 | X% |
| M3 编码实现 | X% |
| M4 测试验收 | X% |
| 项目整体 | X% |
| 排名 | 失败原因 | 出现次数 | 涉及阶段 |
|---|---|---|---|
| 1 | 接口定义与实际实现不一致 | X | M2→M3 |
| 2 | 测试用例未覆盖核心接口 | X | M4 |
| 3 | 数据库 Schema 遗漏字段 | X | M2 |
| ... | ... | ... | ... |
说明:阶段耗时由业务领导在日志中自动计算(派出时间与审查时间的差值)。 返工次数和一次通过率在每次审查/返工时累计。失败原因分类在每次 No-Go 决策时记录。 这些数据用于下一轮迭代的过程改进,不在当前交付中强制要求。
每个里程碑结束时,业务领导执行审批:
1. 读取该阶段团队的 DELIVERY-MANIFEST.md
2. 按清单逐项查验:
a. 用 Glob 工具确认文件存在
b. 检查清单中的"覆盖度检查"和"核心内容摘要"是否合理
c. 用 Read 工具抽查 1 个文件,核对内容与清单描述是否一致
d. 对照 acceptance-criteria.md 中的通过条件
e. 检查"对上团队的问题"字段 —— 如有问题,优先处理或触发回溯
3. 交叉验证:
M1 评审 → 对照 charter.md 核对需求覆盖度
M2 评审 → 对照 spec.md 核对 API 覆盖度
M3 评审 → 对照 api-definition.md 核对实现 + 复核编译自检结果 + 风险导向分层代码抽查
M4 评审 → 对照 use-cases.md 核对测试用例覆盖度 + 验证自动化测试通过
4. 检查"给下游团队的关键信息"是否完整
5. 输出评审文档 docs/reviews/milestone-N-review.md
6. 更新 docs/project-log.md
7. 做出决策:
- Go → merge to main
- No-Go → 打回,附具体修改意见
| 里程碑 | 量化检查项 |
|---|---|
| M1 需求 | spec.md 每个功能模块有独立章节;use-cases.md 覆盖 charter.md 中每个功能点;"给下游团队的关键信息"完整 |
| M2 架构 | api-definition.md 接口数 ≥ spec.md 功能点数;DDL 每张表有字段注释;"给下游团队的关键信息"完整 |
| M3 编码 | DELIVERY-MANIFEST.md 中注明编译自检结果;业务领导复核 ./gradlew compileJava(受影响的模块)零错误;每个 Controller 方法对应 api-definition.md 中一个接口;风险导向分层抽查通过 |
| M4 测试 | 测试用例数 ≥ use-cases.md 用例数;自动化测试 ./gradlew test 通过(新增测试 + 已有测试);Bug 清单含复现步骤+严重等级;测试覆盖业务领导指定的重点场景;核心接口测试覆盖率 ≥ 80% |
业务领导在 M3 审查时,按以下分层策略执行抽查:
根据变更文件总数决定抽样深度:
| 变更文件数 | 抽样基数 | 抽样策略 |
|---|---|---|
| 1-5 个 | 全量 | 100% 文件抽查 |
| 6-15 个 | 至少 4 个 | 高风险层 100% + 中风险层抽样 2 个 |
| 16-30 个 | 至少 6 个 | 高风险层 100% + 中风险层 3 个 + 低风险层 1 个 |
| 30+ 个 | 至少 8 个 | 高风险层 100% + 中风险层 4 个 + 低风险层 2 个 |
第一层(高风险 — 100% 抽查):
${} 注入)检查项:无硬编码密钥/密码、用户输入有校验(@Valid、参数校验注解)、SQL 全部使用 #{} 参数化(无 ${} 字符串替换)、无敏感数据硬编码、文件不超过 500 行
第二层(中风险 — 按比例抽样):
检查项:命名符合项目规范、异常处理合理(有 try-catch 或 throws 声明)、关键路径有日志、文件不超过 500 行
第三层(低风险 — 抽样 1-2 个):
检查项:命名符合项目规范、无明显的拼写错误或模板残留
当变更文件清单中包含 MyBatis XML 文件时,必须额外执行:
MyBatis XML 专项检查(详见附录 C.4):
- Grep 搜索 \$\{[^#] 确认无字符串替换
- 验证 namespace 与 Java 接口匹配
- 验证 resultType 引用的类存在
业务领导将抽查结果记录在 docs/reviews/milestone-N-review.md 中:
## 代码抽样记录
- 变更文件总数: X 个
- 抽样基数: Y 个(高风险 Z 个)
- 抽查文件列表:
| 文件 | 风险层 | 检查结果 | 备注 |
|------|--------|---------|------|
| ... | 高 | 通过 | - |
| ... | 中 | 发现问题 | 见下方说明 |
- 发现的问题: (如有)
- 结论: [通过 / 需修改后重审]
业务领导派单给 Team D 时,必须在 prompt 中指定测试重点:
## 测试重点(业务领导指定)
### 核心接口(必须测试)
- /api/login — 用户登录
- /api/orders — 订单创建和查询
- /api/users — 用户管理
### 重点场景
- 用户登录成功/失败
- 订单创建成功/参数校验失败
- 并发场景(可选,如时间允许)
### 已知风险
- 订单模块的并发处理未做压力测试
- 报表导出功能性能未验证
### 测试范围
- 功能测试:必须覆盖上述核心接口
- 边界测试:必须覆盖参数校验场景
- 性能测试:可选
- 安全测试:可选
Team D 产出的测试代码需满足以下质量要求:
./gradlew test 全部通过(不能仅因为新增测试而跳过)src/main/java/ 下的任何文件@Test 注解,非 JUnit 5注意:当前项目测试覆盖极少。Team D 的策略是"核心接口优先"——优先为业务领导指定的核心接口编写测试,再视时间补充其他场景。不必追求 100% 覆盖率。
如果产出的测试代码未通过编译,必须在"对上团队的问题"中反馈,不得跳过。
1. 业务领导在评审中发现交付不达标
2. 基于 main 开 rework/XX-阶段名 分支
3. 提交 rework-request.md(必须包含具体修改指令)
4. 更新 project-log.md
5. 重新 delegate_task 给原团队
6. 返工完成后重新走 merge → review 流程
返工1次(原团队修改):
- 业务领导提出具体修改意见
- 原团队修改
- 业务领导重新审查
- 通过 → 进入下一阶段
- 不通过 → 返工2次
返工2次(业务领导介入指导):
- 业务领导提供精确到文件、内容的修改指令
- 原团队按指令执行
- 业务领导重新审查
- 通过 → 进入下一阶段
- 不通过 → 返工3次(升级)
返工3次(升级处理):
- 标记为 BLOCKED
- 业务领导按以下决策树判断:
┌─ 问题是否因为任务太复杂?
│ → 是 → 拆分任务,将大任务拆成多个小任务,分别派单
│ → 否 ↓
│
├─ 问题是否因为需求不清晰?
│ → 是 → 重新定义需求,可能需要 Team A 返工
│ → 否 ↓
│
├─ 问题是否因为子Agent能力不足?
│ → 是 → 业务领导提供更详细的指令(精确到代码级别),重新派单
│ → 否 ↓
│
└─ 该功能是否为核心功能?
→ 是 → 标记为 BLOCKED,人工介入(如果有开发人员)
→ 否 → 降级需求,从 charter.md 中移除
- 无论选择哪种,必须在 project-log.md 中记录决策和原因
# 返工请求 — [阶段名称]
## 基本信息
- 返工编号: rework-N
- 触发时间: YYYY-MM-DD HH:MM
- 目标团队: Team X
- 返工次数: 第 X 次
- 原因类型: [质量问题 / 需求变更 / 任务复杂度]
## 问题描述
(具体描述问题,必须具体到文件、章节、内容)
## 具体修改要求
1. 修改点1:[文件路径] [具体修改内容]
2. 修改点2:[文件路径] [具体修改内容]
## 期望完成标准
(怎样算修改完成)
当 M3/M4 阶段发现的问题根源在上游阶段(M1/M2),且无法通过当前阶段的局部修补解决时,启动回溯返工:
典型场景:
1. M3 编码时发现 M2 架构设计有缺陷(接口定义不合理、技术选型不支持需求)
2. M3 编码时发现 M1 需求有歧义或遗漏
3. M4 测试时发现 M2 架构设计导致功能不可测试
4. M4 测试时发现 M1 需求定义与用户实际场景不符
[发现者] 在 DELIVERY-MANIFEST.md 的"对上团队的问题"中注明
│
▼
[业务领导] 评估影响范围:
│ - 问题是否影响其他并行模块?
│ - 修复需要的工时估算(粗略)
│ - 是否存在临时绕过方案?
│
├── 影响面小 → 业务领导直接在上游文档中打补丁(inline fix)
│ ├ 在 docs/reviews/ 中记录补丁说明
│ └ 继续当前阶段,不中断主线
│
└── 影响面大 → 启动回溯返工流程:
1. 冻结当前阶段的 merge(暂不合并到 main)
2. 从 main(而非当前工作分支)开回溯分支:
backport/reason-xxx-description
3. 业务领导编写 backtrack-request.md:
- 问题描述(精确到文件、行号)
- 需要修改的上游文件
- 修改要求
- 预期对其他模块的影响
4. 派出原上游团队(Team A 或 Team B)在回溯分支上修改
5. 修改完成后,业务领导审查回溯分支
6. 审查通过 → 合并回溯分支到 main → 打 tag: backtrack-v<N>
7. 当前阶段团队 rebase 到 main(或重新从 main 开分支)
8. 继续当前阶段工作
| 维度 | 普通返工 | 回溯返工 |
|---|---|---|
| 触发者 | 业务领导在审查中发现 | 下游团队在工作中发现 |
| 修改对象 | 当前阶段的交付物 | 上游阶段(已合并到 main)的交付物 |
| 分支策略 | 从 main 开 rework/分支 | 从 main 开 backport/分支 |
| merge 后 | 正常进入下一阶段 | 下游团队需 rebase |
| 次数上限 | 2 次 | 1 次(仍不通过则进入升级流程) |
# 回溯请求 — [阶段名称]
## 基本信息
- 回溯编号: backport-N
- 触发时间: YYYY-MM-DD HH:MM
- 目标团队: Team X(被回溯的上游团队)
- 发现团队: Team Y(发现问题的下游团队)
- 触发文件: (下游团队在 DELIVERY-MANIFEST 中记录问题的文件路径)
## 问题描述
(具体描述问题,引用上游交付物中的具体文件、章节、行号)
## 影响范围
- 受影响的并行模块列表
- 预计修复工时
- 是否存在临时绕过方案
## 修改要求
1. [目标文件路径] [具体修改内容]
2. [目标文件路径] [具体修改内容]
## 期望完成标准
(怎样算修改完成)
| 管控点 | 动作 | 产出文件 | 检查方式 |
|---|---|---|---|
| 项目启动 | 定义目标 + 验收标准 | charter.md, project-log.md | - |
| 派单 | 指定团队 + 提炼上下文 + 下发任务 | project-log.md | 每次 No-Go 决策时记录失败原因分类 |
| Milestone 审批 | 查验交付清单 → Go/No-Go | reviews/milestone-N.md, project-log.md | Glob确认文件存在 + Read抽查1个文件 |
| 代码抽查(M3) | 风险导向分层抽查 | 记录在 milestone-N-review.md | 按风险分层从修改清单中选择,数量取决于变更总数 |
| 环境就绪检查 | 启动 + 冒烟测试 | environment-checklist.md | 实际执行 ./gradlew 命令验证 |
| 返工决策 | 决定打回 + 具体修改指令 | rework/rework-N.md, project-log.md | - |
| 回溯返工 | 评估影响 → 开 backport/ 分支 → 派出上游团队 → 审查 → 通知下游 rebase | backtrack-request.md, project-log.md | 检查回溯分支修改是否精准、未引入副作用 |
| 最终验收 | 全量审查 → 发布/打回 | release tag, project-log.md | - |
我 (GLM-5.1) → 业务领导:拆任务、审批、决策、维护日志、提炼上下文、指定测试重点
delegate_task → 派出各职能团队(子 Agent 只负责写文件,不操作 Git)
Team A prompt → "你是需求分析师,基于 docs/ 产出需求规格到 deliveries/team-a-requirement/
你必须创建 spec.md、use-cases.md、constraints.md、DELIVERY-MANIFEST.md
DELIVERY-MANIFEST.md 必须包含'给下游团队的关键信息'字段"
Team B prompt → "你是架构师,基于 main 上的需求文档设计架构到 deliveries/team-b-architecture/
[业务领导嵌入 Team A 的关键信息]
你必须创建 design.md、api-definition.md、tech-stack.md、DELIVERY-MANIFEST.md
DELIVERY-MANIFEST.md 必须包含'给下游团队的关键信息'字段"
Team C prompt → "你是开发者,基于架构文档编码到各模块 src/main/java/
[业务领导嵌入 Team B 的关键信息]
你必须在 DELIVERY-MANIFEST.md 中列出修改文件清单
DELIVERY-MANIFEST.md 必须包含'给下游团队的关键信息'字段
完成编码后,进入每个修改的模块目录执行 ./gradlew compileJava 自检
自检结果写入 DELIVERY-MANIFEST.md 的'交付说明'字段"
(可拆为 C-ModuleA + C-ModuleB 并行,按模块边界划分文件所有权)
Team D prompt → "你是测试工程师,基于代码产出测试:
- 测试文档: deliveries/team-d-testing/test-cases.md, test-report.md, bug-list.md, DELIVERY-MANIFEST.md
- 自动化测试: {affected_module}/src/test/java/ 目录,JUnit 4 + Spring Boot Test 风格
[业务领导嵌入测试重点 + Team C 的关键信息]
自动化测试必须可编译、可通过(./gradlew test)
测试用例必须覆盖业务领导指定的核心接口和重点场景
测试结果写入 test-report.md"
git add/commit → 业务领导负责
git merge --no-ff → 业务领导在每个里程碑审批通过后执行
返工 → 重新 delegate_task,附带返工请求中的具体修改指令
回溯返工 → 业务领导开 backport/ 分支 → delegate_task 给上游团队
→ 上游修改后审查 → merge → 通知下游 rebase
project-log.md → 每次决策后追加日志
审查流程:
1. Glob 确认文件存在
2. 检查 DELIVERY-MANIFEST.md 中的"覆盖度检查"和"核心内容摘要"
3. Read 抽查 1 个文件,核对内容与清单描述是否一致
4. M3 阶段:风险导向**分层**代码抽查(含 MyBatis XML 专项检查)
5. 检查"给下游团队的关键信息"是否完整
6. 检查"对上团队的问题"字段,如有问题优先处理
⚠️ 关键约束:子 Agent 运行在隔离环境中,无法直接调用 git。
所有 git 操作必须由业务领导执行。
子 Agent 的职责仅限于:读取文件 → 分析/编码 → 写入文件到指定目录。
为确保流程可执行,业务领导在每个关键节点必须完成以下检查:
本附录汇总了 CRRC 项目(Java 8 / Spring Boot 1.5.9 / Gradle 多模块)特有的流程适配点。 当流程在 CRRC 项目中执行时,以下约定优先于正文通用描述。
CRRC 项目是约 20 个独立 Gradle 模块的集合,每个模块拥有独立的 build.gradle 和 gradlew:
settings.gradle,各模块独立编译./gradlew 命令service-common 是共享库,修改公共 DTO/VO/常量后,先编译该模块,再编译依赖它的业务模块编译验证命令示例:
# 验证 service-bill 模块编译
cd com.sayu.service-bill
./gradlew compileJava
# 依赖链编译(先公共库,后业务模块)
cd com.sayu.service-common && ./gradlew compileJava
cd com.sayu.service-bill && ./gradlew compileJava
并行开发时,文件所有权按模块粒度划分(见 C.3)。
src/test/java/(非 src/main/test/)com.sayu.service-message/src/test/main/ServiceTest.javasrc/main/ 下创建测试文件替代附录A中的"单模块文件所有权",CRRC 模式下 Team C 的并行拆分按模块边界划分:
Team C-User 负责:
- com.sayu.service-user/src/main/java/**(全部 Java 代码)
- com.sayu.service-user/src/main/resources/**(配置 + MyBatis XML)
Team C-Bill 负责:
- com.sayu.service-bill/src/main/java/**
- com.sayu.service-bill/src/main/resources/**
Team C-Gateway 负责:
- com.sayu.gateway-*/src/main/java/**
- com.sayu.gateway-*/src/main/resources/**
共享库(任何 Team C 子团队不可擅自修改,需通过返工流程):
- com.sayu.service-common/**
禁止修改的文件:
- 各模块 build.gradle(由业务领导统一管理)
- .gitignore
- 已合并到 main 的其他阶段交付物
CRRC 项目使用 MyBatis XML 动态 SQL。M3 代码抽查中,必须增加对 XML 的专项检查:
检查项(覆盖所有新增/修改的 XML 文件):
| 序号 | 检查项 | 说明 |
|---|---|---|
| 1 | 禁止 ${} 字符串替换 |
参数必须使用 #{} 语法,${} 可能导致 SQL 注入 |
| 2 | namespace 一致性 | Mapper namespace 必须与 Java Mapper 接口全限定名一致 |
| 3 | resultType 有效性 | resultType 引用的 VO/Entity 类必须存在(用 Glob 确认) |
| 4 | 文件路径规范 | 必须位于 src/main/resources/mapper/{domain}/ |
| 5 | mybatis.base.package | application.properties 中的扫描路径需覆盖新增的 mapper 包 |
${} 排查方法: 用 Grep 搜索 XML 文件中的 $ 符号:
Grep pattern: \$\{[^#]
匹配到的行需要逐一审查,确认是否为合法的动态表名/列名使用(极少场景才允许),或应改为 #{} 参数化。
CRRC 项目既有拼写提醒: 以下拼写是历史遗留,抽查时不要误报:
contanst(非 constant)— 常量/枚举包名bootstrapt(非 bootstrap)— service-file 模块启动包名annotion(非 annotation)— 框架注解包名| 目录类型 | 归属团队 | 说明 |
|---|---|---|
com.sayu.*/src/main/java/ |
Team C | 业务代码 |
com.sayu.*/src/main/resources/ |
Team C | 配置 + MyBatis XML |
com.sayu.*/src/test/java/ |
Team D | 自动化测试代码 |
deliveries/team-a-requirement/ |
Team A | 需求文档 |
deliveries/team-b-architecture/ |
Team B | 架构文档 |
deliveries/team-c-coding/ |
Team C | 实现说明 |
deliveries/team-d-testing/ |
Team D | 测试文档 |
com.sayu.service-common/ |
ALL(只读) | 共享库,修改需返工流程 |
docs/ |
业务领导 | 项目文档 |
application.properties 和 Gradle 发布配置可能包含内部 Nexus 凭据或测试环境密钥,不要复制到新文档或提交说明中SERVICE_NAME / SERVICE_CONTEXT_PATH 常量一致gateway-pc、gateway-mobile、gateway-management)的免登录、免权限路径配置需在新增公开接口时同步检查