验证与审计工作流

📑 目录

这是「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)
    end

gates.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: 100

1.4 验证失败的处理

当 verify-phase 检测到质量问题时,不会直接修改代码,而是遵循**"记录问题 → 生成修复任务 → 审计修复"**的闭环流程:

  1. 记录问题:在 VERIFY.md 中详细记录每个失败的检查点、失败原因、影响范围
  2. 生成修复任务:根据问题类型,自动生成对应的修复任务(如 fix-test-coveragefix-schema-drift
  3. 进入修复流程:将修复任务交给 audit-fix 工作流处理
  4. 重新验证:修复完成后,重新触发 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 --> MilestoneLevel

Milestone 的完成标准包括:

标准说明自动化程度
所有子 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-auditor Agent 执行,避免"自己审自己"

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 --> Audit

audit-uat 的审计重点不是"功能是否正确"(这是 verify-phase 的职责),而是:

  1. UAT 环境是否与生产环境一致
  2. 验收用例是否覆盖了需求文档中的全部场景
  3. 用户反馈是否被正确分类和追踪
  4. 阻塞性问题是否已解决或已接受风险

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 的三重检查:

  1. 方案审查:修复是否针对根因,而非症状
  2. 回归测试:修复是否破坏了原有功能
  3. 范围审查:修复是否引入了不必要的变更(过度修复)

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 -.-> FixAudit

5.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: 恢复工作流执行

检查点协议的核心设计原则:

  1. 状态持久化:检查点的所有上下文信息写入文件,工作流可以随时中断和恢复
  2. 决策可追溯:每个检查点的决策都被记录,便于后续审计
  3. 默认安全:如果检查点超时未响应,默认行为是"暂停"而非"继续"

七、验证与审计工作流的协作关系

四个验证与审计工作流并非孤立运行,它们通过文件系统和工作流触发器形成一个有机的质量保障网络

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 框架中不可或缺的质量保障基础设施。它们的设计理念可以概括为三句话:

  1. 验证分层,问题早现——从代码提交到版本发布,多层门控确保问题在引入的最早阶段被发现
  2. 审计独立,标准统一——由独立 Agent 执行审计,避免"自己审自己"的利益冲突
  3. 失败闭环,修复可追溯——任何验证失败都进入标准化的修复审计流程,确保问题得到彻底解决

verify-phase、audit-milestone、audit-uat 和 audit-fix 四个工作流,配合 gates.md 中定义的质量标准,共同构成了 GSD 的免疫系统——它不直接产生价值,但确保产生的价值是可靠、可用、可维护的。

下一篇预告: 第 20 篇《代码审查与修复工作流》

我们将聚焦 GSD 的代码审查机制(code-review)和修复工作流(fix-phase),探讨 AI 驱动的代码审查策略和修复任务的分派逻辑。 敬请期待。