govctl logo govctl
返回博客
govctl 团队

理解阶段规范

深入探讨 spec → impl → test → stable 工作流,以及为什么它对确定性 AI 辅助开发至关重要。

概念阶段规范工作流

阶段规范是 govctl 背后的核心概念。这是一个简单的想法,但对我们如何与 AI 编程助手协作有着深远的影响。

两个生命周期

govctl 强制执行两个相互配合的生命周期:

状态生命周期(RFC 成熟度)

draft → normative → deprecated
  • draft(草案):讨论中。实现必须不依赖草案 RFC。
  • normative(规范):具有约束力。实现必须符合规范。
  • deprecated(废弃):已被取代。不允许新工作。

阶段生命周期(开发阶段)

spec → impl → test → stable
  • spec(规范):定义要构建什么。不允许实现工作。
  • impl(实现):构建规范定义的内容。
  • test(测试):验证实现符合规范。
  • stable(稳定):发布用于生产使用。

四个阶段

1. Spec(规范)

规范阶段定义要做什么而不定义如何做。这是你:

  • 起草带有条款的 RFC
  • 使用 RFC 2119 关键字定义规范性要求(MUST、SHOULD、MAY)
  • 设置验收标准
  • 获得审查和批准
# 创建 RFC
govctl rfc new "为 API 添加限流"

# 添加条款
govctl clause new RFC-0015:C-SCOPE "范围" -s "规范" -k normative
govctl clause new RFC-0015:C-LIMITS "限流规则" -s "规范" -k normative

# 编辑条款内容
govctl clause edit RFC-0015:C-LIMITS --stdin <<'EOF'
系统必须(MUST)限制每个 API 密钥每分钟 100 次请求。
系统必须(MUST)在超限时返回 429 状态。
系统应该(SHOULD)包含 retry-after 头。
EOF

规范阶段强迫你在编码之前思考。当与 AI 助手合作时,RFC 成为 AI 的操作约束。

2. Impl(实现)

一旦 RFC 是规范性的,你可以推进到实现:

# 使 RFC 具有约束力
govctl rfc finalize RFC-0015 normative

# 推进到实现阶段
govctl rfc advance RFC-0015 impl

在实现阶段:

  • 代码按照规范编写
  • 变更必须符合规范性条款
  • AI 助手在 RFC 边界内操作

实现阶段可以迭代。但在实现满足规范之前,你不能离开实现阶段。

3. Test(测试)

测试阶段证明实现符合规范:

govctl rfc advance RFC-0015 test
  • 编写验证每个规范性条款的测试
  • 运行测试套件
  • 记录发现的边缘情况

如果测试失败,你可能需要返回实现阶段修复问题。

4. Stable(稳定)

稳定阶段标志着变更完成:

govctl rfc advance RFC-0015 stable

在稳定阶段:

  • 规范已满足
  • 实现正确
  • 仅限修复缺陷 — 不允许新功能
  • RFC 成为项目历史的一部分

阶段转换规则

阶段之间的转换是明确的并经过验证:

From      To        要求
────────────────────────────────────────────
spec   →  impl      RFC 状态 = normative
impl   →  test      实现完成
test   →  stable    所有测试通过

你不能跳过阶段。spec → stable 是无效的。这确保每个变更都经过适当的验证。

状态 × 阶段兼容性

              spec    impl    test    stable
─────────────────────────────────────────────
draft          OK      WARN    WARN    NO
normative      OK      OK      OK      OK
deprecated     OK      NO      NO      OK
  • WARN = 实验性,门禁是软警告
  • NO = 禁止

为什么阶段对 AI 编程很重要

AI 助手功能强大但上下文有限。它们本质上不知道:

  • 它们被允许改变什么
  • 它们处于哪个工作阶段
  • 必须保留哪些契约

阶段规范提供了这个上下文。当你告诉 AI “我们处于 RFC-0015 的 impl 阶段”时,它知道:

  • RFC 定义了边界
  • 它应该生成实现代码
  • 它必须符合规范性条款

这将 AI 从混乱的代码生成器转变为有规范的协作者。

实践示例

让我们追踪一个真实变更经过所有阶段:

# 初始化 govctl
govctl init

# 规范阶段:创建和定义 RFC
govctl rfc new "添加深色模式支持"
govctl clause new RFC-0001:C-SCOPE "范围" -s "规范" -k normative
govctl clause new RFC-0001:C-TOGGLE "切换" -s "规范" -k normative
govctl clause edit RFC-0001:C-TOGGLE

# 使其规范性(有约束力)
govctl rfc finalize RFC-0001 normative

# 实现阶段:构建
govctl rfc advance RFC-0001 impl
# 与 AI 合作生成 CSS 变量、主题切换等

# 测试阶段:验证
govctl rfc advance RFC-0001 test
# 编写主题切换、持久化、可访问性测试

# 稳定阶段:发布
govctl rfc advance RFC-0001 stable
# 变更现在是项目历史的一部分

# 验证一切
govctl check

每个阶段创建一个检查点。如果生产中出现问题,你可以追溯阶段来理解发生了什么。

结论

阶段规范不是为了放慢速度 — 而是为了有信心地快速前进。当每个变更都是结构化的、经过验证的、可审计的,你就可以信任你的 AI 助手来帮助你,而不必担心混乱。

spec → impl → test → stable 工作流足够简单以便记忆,足够强大以治理复杂的变更,足够灵活以适应任何项目。


准备好将阶段规范添加到你的工作流了吗?查看 govctl 文档 开始使用。