这是「GSD 全景代码解析」专题的第 19 篇。在前面几篇文章中,我们深入解析了 execute-phase、plan-phase、new-project 等核心工作流的编排机制。如果说执行是 GSD 的"肌肉",规划是它的"大脑",那么验证与审计就是它的"免疫系统"——确保每一行交付的代码都经过严格检查,每一个里程碑都达到可发布的质量标准。
本文将聚焦 GSD 工作流编排层的质量保障机制,逐一拆解 verify-phase、audit-milestone、audit-uat 和 audit-fix 四个验证与审计工作流的设计哲学和实现细节。
验证与审计工作流
在 GSD 框架中,"写代码"只是交付流程的一半,另一半是验证代码是否正确、审计过程是否合规。GSD 通过四个专门的工作流来完成这一使命:
| 工作流 | 职责 | 触发时机 |
|---|---|---|
verify-phase | 阶段级验证 | 每个 phase 执行完成后 |
audit-milestone | 里程碑审计 | Milestone 标记为完成时 |
audit-uat | 用户验收测试审计 | UAT 阶段完成后 |
audit-fix | 修复审计 | 修复任务完成后 |
这四个工作流共同构成了 GSD 的质量门控体系(Quality Gate System),与 gates.md 中定义的质量标准深度集成。
一、verify-phase 工作流:阶段级质量把关
1.1 工作流定位
verify-phase.md 是 GSD 中最基础的验证工作流,其核心职责是:在一个 phase 的所有 Wave 执行完成后,系统性地验证该阶段的目标是否达成。
与 execute-phase 中的"过程验证"不同,verify-phase 做的是"结果验证"——它不关心代码是怎么写出来的,只关心代码是否满足阶段目标。
1.2 验证流程与检查点
verify-phase 的完整流程包含 6 个主要步骤:
flowchart TD
subgraph Prep["① 前置准备"]
P1[加载 STATE.md
获取阶段目标] --> P2[加载 gates.md
获取质量标准]
end
subgraph Check["② 检查点执行"]
C1[Goal Verification
目标达成检查] --> C2[Test Suite Check
测试套件检查]
C2 --> C3[Schema Consistency
Schema 一致性检查]
C3 --> C4[Documentation Check
文档完整性检查]
end
subgraph Gate["③ 质量门控"]
G1{所有检查通过?}
end
subgraph Result["④ 结果处理"]
G1 -->|是| R1[生成 VERIFY.md
标记阶段完成]
G1 -->|否| R2[生成 ISSUE.md
进入修复流程]
R2 --> R3[触发 audit-fix
修复审计]
end
Prep --> Check --> Gate --> Result各检查点的具体职责:
| 检查点 | 验证内容 | 失败处理 |
|---|---|---|
| Goal Verification | 阶段目标中定义的每个 deliverable 是否完成 | 标记未完成项,生成修复任务 |
| Test Suite Check | 单元测试、集成测试通过率是否达标 | 列出失败测试,分析失败原因 |
| Schema Consistency | 数据库 schema、API 契约是否与计划一致 | 检测 drift,生成迁移任务 |
| Documentation Check | 代码注释、API 文档、CHANGELOG 是否同步 | 标记缺失文档,生成补充任务 |
1.3 与 gates.md 的集成
verify-phase 并非独立运行,而是深度依赖 gates.md 中定义的质量标准:
sequenceDiagram
participant VP as verify-phase
participant G as gates.md
participant TS as Test Suite
participant DB as Schema Registry
participant Out as VERIFY.md
VP->>G: 读取阶段质量标准
G-->>VP: 返回阈值(测试覆盖率 ≥80%、API 兼容性等)
VP->>TS: 执行测试套件
TS-->>VP: 返回测试报告
VP->>DB: 检查 schema 一致性
DB-->>VP: 返回 drift 报告
VP->>VP: 综合评估所有指标
alt 全部达标
VP->>Out: 生成 VERIFY.md(PASSED)
else 部分未达标
VP->>Out: 生成 VERIFY.md(FAILED + issues)
endgates.md 中定义的质量门控是可配置的,不同项目、不同阶段可以有不同的阈值:
# gates.md 示例片段
phase_verification:
test_coverage_threshold: 80
api_compatibility: strict
documentation_required: true
schema_drift_tolerance: none
milestone_audit:
security_scan: required
performance_benchmark: required
code_review_coverage: 1001.4 验证失败的处理
当 verify-phase 检测到质量问题时,不会直接修改代码,而是遵循**"记录问题 → 生成修复任务 → 审计修复"**的闭环流程:
- 记录问题:在
VERIFY.md中详细记录每个失败的检查点、失败原因、影响范围 - 生成修复任务:根据问题类型,自动生成对应的修复任务(如
fix-test-coverage、fix-schema-drift) - 进入修复流程:将修复任务交给
audit-fix工作流处理 - 重新验证:修复完成后,重新触发 verify-phase
这种设计确保了问题不会被掩盖,修复不会被遗漏。
二、audit-milestone:里程碑审计
2.1 里程碑完成标准
在 GSD 中,Milestone 是比 Phase 更高层次的聚合单位。一个 Milestone 通常包含多个 Phase,代表一个可独立交付的功能模块或版本节点。
audit-milestone 的审计标准比 verify-phase 更严格:
flowchart LR
subgraph PhaseLevel["Phase 级别"]
P1[verify-phase]
P2[测试通过]
P3[文档完整]
end
subgraph MilestoneLevel["Milestone 级别"]
M1[audit-milestone]
M2[所有 Phase 通过]
M3[跨 Phase 集成测试]
M4[性能基准测试]
M5[安全扫描通过]
M6[代码审查 100%]
end
PhaseLevel --> MilestoneLevelMilestone 的完成标准包括:
| 标准 | 说明 | 自动化程度 |
|---|---|---|
| 所有子 Phase 的 VERIFY.md 为 PASSED | 前置条件 | 全自动 |
| 跨 Phase 集成测试通过 | 验证模块间协作 | 全自动 |
| 性能基准达标 | 响应时间、吞吐量等 | 半自动(需基线对比) |
| 安全扫描无高危漏洞 | SAST/DAST 扫描 | 全自动 |
| 代码审查覆盖率 100% | 所有变更经过 review | 全自动(记录检查) |
| 用户文档已更新 | 面向用户的指南同步 | 半自动(AI 辅助检查) |
2.2 审计流程
audit-milestone 的审计流程采用**"分层递进"**策略:
flowchart TD
A[开始 Milestone 审计] --> B{所有子 Phase
已通过验证?}
B -->|否| C[终止审计
返回 Phase 修复]
B -->|是| D[执行集成测试套件]
D --> E{集成测试通过?}
E -->|否| F[生成集成问题报告]
E -->|是| G[执行性能基准测试]
G --> H{性能达标?}
H -->|否| I[生成性能优化任务]
H -->|是| J[执行安全扫描]
J --> K{无高危漏洞?}
K -->|否| L[生成安全修复任务]
K -->|是| M[检查代码审查记录]
M --> N{覆盖率 100%?}
N -->|否| O[标记未审查变更]
N -->|是| P[生成 AUDIT.md]
P --> Q{全部通过?}
Q -->|是| R[标记 Milestone 完成]
Q -->|否| S[进入修复审计流程]关键设计点:
- 前置检查:如果子 Phase 未全部通过,直接终止审计,避免浪费资源
- 渐进式执行:每个检查点失败后即生成报告,不继续后续检查(除非配置为"全量模式")
- 审计独立性:audit-milestone 由独立的
gsd-auditorAgent 执行,避免"自己审自己"
2.3 审计报告
audit-milestone 的输出是一份结构化的 AUDIT.md 文件:
# Milestone Audit Report
## 基本信息
- Milestone: v1.0-user-authentication
- 审计日期: 2026-04-24
- 审计 Agent: gsd-auditor
- 结果: PASSED_WITH_NOTES
## 检查结果
| 检查项 | 状态 | 详情 |
|--------|------|------|
| Phase 验证 | ✅ PASSED | 3/3 Phases 通过 |
| 集成测试 | ✅ PASSED | 42/42 通过 |
| 性能基准 | ⚠️ NOTE | 响应时间 120ms(阈值 100ms),建议优化 |
| 安全扫描 | ✅ PASSED | 无高危/严重漏洞 |
| 代码审查 | ✅ PASSED | 100% 覆盖率 |
## 建议
- 登录接口响应时间接近阈值,建议在下一 Milestone 中优化
## 签名
- 审计 Agent: gsd-auditor
- 人类确认: [待确认]三、audit-uat:用户验收测试审计
3.1 UAT 流程
UAT(User Acceptance Testing,用户验收测试)是 GSD 交付流程中最接近真实用户的验证环节。audit-uat 工作流负责审计 UAT 过程的完整性和结果的可信度。
flowchart LR
subgraph UATFlow["UAT 流程"]
U1[准备 UAT 环境] --> U2[执行验收用例]
U2 --> U3[记录用户反馈]
U3 --> U4[分类问题优先级]
end
subgraph Audit["审计节点"]
A1[audit-uat]
end
UATFlow --> Auditaudit-uat 的审计重点不是"功能是否正确"(这是 verify-phase 的职责),而是:
- UAT 环境是否与生产环境一致
- 验收用例是否覆盖了需求文档中的全部场景
- 用户反馈是否被正确分类和追踪
- 阻塞性问题是否已解决或已接受风险
3.2 验收标准检查
audit-uat 对验收标准的检查采用**"需求追溯(Requirements Traceability)"**方法:
flowchart TD
A[加载 REQUIREMENTS.md] --> B[提取所有 acceptance criteria]
B --> C[加载 UAT 测试记录]
C --> D[匹配 criteria 与测试用例]
D --> E{每个 criteria
都有对应测试?}
E -->|否| F[标记遗漏的验收标准]
E -->|是| G[检查测试结果]
G --> H{所有 criteria 通过?}
H -->|否| I[分类失败:阻塞/严重/轻微]
H -->|是| J[生成 UAT-AUDIT.md]验收标准的三级分类:
| 级别 | 定义 | 处理策略 |
|---|---|---|
| 阻塞(Blocker) | 核心功能不可用,影响发布 | 必须修复,重新 UAT |
| 严重(Critical) | 重要功能有缺陷,有 workaround | 建议修复,可接受风险则记录 |
| 轻微(Minor) | 体验问题,不影响功能 | 记录为已知问题,后续版本处理 |
audit-uat 的独特之处在于它会审计 UAT 过程本身——确保测试不是走过场,反馈不是被忽视。
四、audit-fix:修复审计
4.1 修复验证流程
当 verify-phase、audit-milestone 或 audit-uat 发现问题后,会进入修复流程。修复完成后,audit-fix 工作流负责验证修复本身是否正确、是否引入了新的问题。
flowchart TD
A[接收修复任务] --> B[加载原始问题报告]
B --> C[审查修复方案]
C --> D{修复方案合理?}
D -->|否| E[要求重新设计修复]
D -->|是| F[执行回归测试]
F --> G{回归测试通过?}
G -->|否| H[标记回归失败]
G -->|是| I[检查修复范围]
I --> J{是否过度修复?}
J -->|是| K[建议精简修复范围]
J -->|否| L[生成 FIX-AUDIT.md]audit-fix 的三重检查:
- 方案审查:修复是否针对根因,而非症状
- 回归测试:修复是否破坏了原有功能
- 范围审查:修复是否引入了不必要的变更(过度修复)
4.2 回归测试
回归测试是 audit-fix 的核心环节。GSD 的回归测试策略分为两个层次:
flowchart LR
subgraph L1["第一层:受影响范围"]
A1[识别修改的文件] --> A2[运行相关单元测试]
end
subgraph L2["第二层:全量保护"]
B1[运行完整测试套件] --> B2[性能基准对比]
end
L1 --> L2- 第一层(快速反馈):仅运行与修改文件相关的测试,快速验证修复本身
- 第二层(全面保护):运行完整测试套件,确保没有引入回归问题
audit-fix 会根据修复的风险等级决定执行哪一层:
| 风险等级 | 判断依据 | 回归测试范围 |
|---|---|---|
| 低 | 单行注释修改、文档更新 | 第一层即可 |
| 中 | 局部逻辑修改、配置变更 | 第一层 + 相关集成测试 |
| 高 | 核心模块修改、接口变更 | 第一层 + 第二层全量 |
五、质量门控在工作流中的位置
5.1 门控的嵌入点
质量门控(Quality Gates)不是独立的工作流,而是嵌入在各个工作流中的检查点。在 GSD 的工作流体系中,门控分布在以下位置:
flowchart TD
subgraph NewProject["new-project"]
N1[项目初始化] --> N2[门控: 项目结构合规]
end
subgraph PlanPhase["plan-phase"]
P1[计划生成] --> P2[门控: 计划可执行性]
end
subgraph ExecutePhase["execute-phase"]
E1[Wave 执行] --> E2[门控: 原子提交检查]
E2 --> E3[门控: 代码审查]
E3 --> E4[门控: 回归测试]
end
subgraph VerifyPhase["verify-phase"]
V1[阶段验证] --> V2[门控: 目标达成]
V2 --> V3[门控: 测试覆盖率]
end
subgraph MilestoneAudit["audit-milestone"]
M1[里程碑审计] --> M2[门控: 集成测试]
M2 --> M3[门控: 安全扫描]
end
subgraph UATAudit["audit-uat"]
U1[UAT 审计] --> U2[门控: 验收标准]
end
subgraph FixAudit["audit-fix"]
F1[修复审计] --> F2[门控: 回归测试]
end
NewProject --> PlanPhase --> ExecutePhase --> VerifyPhase --> MilestoneAudit --> UATAudit
ExecutePhase -.-> FixAudit
VerifyPhase -.-> FixAudit
MilestoneAudit -.-> FixAudit5.2 门控的层次结构
GSD 的质量门控具有清晰的层次关系:
| 层次 | 门控名称 | 所属工作流 | 检查频率 |
|---|---|---|---|
| L0 | 项目结构门控 | new-project | 一次性 |
| L1 | 计划可执行性门控 | plan-phase | 每阶段一次 |
| L2 | 代码审查门控 | execute-phase | 每 Wave 一次 |
| L2 | 回归测试门控 | execute-phase | 每 Wave 一次 |
| L3 | 阶段目标门控 | verify-phase | 每 Phase 一次 |
| L3 | 测试覆盖率门控 | verify-phase | 每 Phase 一次 |
| L4 | 集成测试门控 | audit-milestone | 每 Milestone 一次 |
| L4 | 安全扫描门控 | audit-milestone | 每 Milestone 一次 |
| L5 | 验收标准门控 | audit-uat | 每版本一次 |
| L6 | 修复回归门控 | audit-fix | 每次修复后 |
这种分层门控设计的优势在于:
- 问题早发现:低级门控(如代码审查)在每次提交时运行,问题在引入时即被发现
- 资源合理分配:高级门控(如安全扫描)运行频率低但覆盖全面
- 反馈延迟递减:越靠近开发的门控,反馈越快;越靠近交付的门控,检查越全面
六、验证与审计的自动化策略
6.1 自动化程度分级
GSD 将验证与审计任务按可自动化程度分为四类:
flowchart LR
subgraph Auto["全自动"]
A1[单元测试执行]
A2[代码覆盖率统计]
A3[Schema 一致性检查]
A4[安全扫描]
end
subgraph Semi["半自动"]
S1[测试用例生成]
S2[代码审查辅助]
S3[文档完整性检查]
S4[性能基线对比]
end
subgraph Human["人工决策"]
H1[UAT 验收结论]
H2[风险接受判断]
H3[发布审批]
end
subgraph Hybrid["人机协作"]
M1[审计报告生成]
M2[问题优先级排序]
M3[修复方案建议]
end
Auto --> Semi --> Hybrid --> Human| 类别 | 示例 | 实施策略 |
|---|---|---|
| 全自动 | 测试执行、覆盖率统计、安全扫描 | CI/CD 流水线集成,零人工干预 |
| 半自动 | 用例生成、审查辅助、文档检查 | AI 生成 + 人工确认 |
| 人机协作 | 报告生成、优先级排序 | AI 分析 + 人工决策 |
| 人工决策 | 验收结论、发布审批 | AI 提供信息,人类做最终决定 |
6.2 自动化执行策略
在实际项目中,GSD 推荐以下自动化执行策略:
策略一:提交时触发(Pre-commit / CI)
# 每次代码提交时自动执行
- 代码格式检查(lint)
- 单元测试(受影响范围)
- 静态类型检查策略二:Wave 完成时触发(execute-phase 内置)
# 每个 Wave 执行完成后自动执行
- 代码审查门控
- 回归测试门控
- Schema Drift 检查策略三:Phase 完成时触发(verify-phase)
# 每个 Phase 结束后自动执行
- 目标达成验证
- 测试覆盖率检查
- 文档完整性检查策略四:Milestone 完成时触发(audit-milestone)
# 每个 Milestone 结束后自动执行
- 集成测试
- 性能基准测试
- 安全扫描策略五:修复完成后触发(audit-fix)
# 每次修复任务完成后自动执行
- 修复验证
- 回归测试
- 修复范围审查6.3 检查点协议(Checkpoint Protocol)
对于无法全自动化的检查点,GSD 使用**检查点协议(Checkpoint Protocol)**来管理人工介入:
sequenceDiagram
participant WF as 工作流
participant CP as 检查点
participant Human as 人类用户
participant Resume as 恢复执行
WF->>CP: 到达检查点
CP->>Human: 展示当前状态 + 决策选项
Human->>CP: 做出决策(通过/拒绝/修订)
CP->>Resume: 记录决策 + 上下文
Resume->>WF: 恢复工作流执行检查点协议的核心设计原则:
- 状态持久化:检查点的所有上下文信息写入文件,工作流可以随时中断和恢复
- 决策可追溯:每个检查点的决策都被记录,便于后续审计
- 默认安全:如果检查点超时未响应,默认行为是"暂停"而非"继续"
七、验证与审计工作流的协作关系
四个验证与审计工作流并非孤立运行,它们通过文件系统和工作流触发器形成一个有机的质量保障网络:
flowchart TD
E[execute-phase
执行阶段] --> V[verify-phase
阶段验证]
V -->|通过| M[audit-milestone
里程碑审计]
V -->|失败| F1[audit-fix
修复审计]
M -->|通过| U[audit-uat
UAT 审计]
M -->|失败| F2[audit-fix
修复审计]
U -->|通过| D[发布]
U -->|失败| F3[audit-fix
修复审计]
F1 --> V
F2 --> M
F3 --> U
style E fill:#e1f5fe
style V fill:#fff3e0
style M fill:#fff3e0
style U fill:#fff3e0
style F1 fill:#ffebee
style F2 fill:#ffebee
style F3 fill:#ffebee
style D fill:#e8f5e9这个网络的运作逻辑非常清晰:
- 执行驱动验证:每次 execute-phase 完成后自动触发 verify-phase
- 失败驱动修复:任何验证失败都进入 audit-fix 流程
- 修复驱动重验:修复完成后自动重新触发上层验证
- 层级递进:只有下层验证全部通过,才能进入上层审计
总结
验证与审计工作流是 GSD 框架中不可或缺的质量保障基础设施。它们的设计理念可以概括为三句话:
- 验证分层,问题早现——从代码提交到版本发布,多层门控确保问题在引入的最早阶段被发现
- 审计独立,标准统一——由独立 Agent 执行审计,避免"自己审自己"的利益冲突
- 失败闭环,修复可追溯——任何验证失败都进入标准化的修复审计流程,确保问题得到彻底解决
verify-phase、audit-milestone、audit-uat 和 audit-fix 四个工作流,配合 gates.md 中定义的质量标准,共同构成了 GSD 的免疫系统——它不直接产生价值,但确保产生的价值是可靠、可用、可维护的。
下一篇预告: 第 20 篇《代码审查与修复工作流》
我们将聚焦 GSD 的代码审查机制(code-review)和修复工作流(fix-phase),探讨 AI 驱动的代码审查策略和修复任务的分派逻辑。 敬请期待。