govctl logo govctl
返回博客
govctl team

govctl v0.15.0:从规范要求到验证证据

govctl 0.15 引入一等 Conformance Case,完成 canonical CLI 收口,并把近期 RFC 生命周期、agent discovery 与 TUI 改进整合为统一模型。

releasegovctlv0.15.0conformanceagents

govctl v0.15.0 是最近几条演进路线汇合成统一模型的节点。

这一版最显眼的新功能是一等 Conformance Case:它在带版本的 RFC requirement、项目自己的验证场景和可复用 Verification Guard 之间建立稳定、非规范性的 链接。但更大的变化横跨 0.100.15

  • RFC version 现在拥有明确的候选编写与封存生命周期
  • 过时 requirement 不再占据默认的人类可读上下文
  • 一条 canonical CLI path 取代累积的兼容语法
  • agent guidance 更短,并由 parser-owned discovery 支撑
  • TUI 逐渐成为结构化的治理控制面

这些变化让 govctl 不再只是存放治理文档。Agent 现在可以分别回答三个问题,同时不混淆 它们的权威性:

要求是什么?   -> RFC Clause
如何验收?     -> Conformance Case
由什么执行?   -> Verification Guard

Conformance Case 补上缺失的中间层

0.15.0 之前,govctl 已有规范性的 RFC Clause,也有可执行的 Guard,但缺少一个可 复用的身份来表示两者之间的验证场景。

在大型项目中,这个空缺通常会让验证场景流入三个不理想的位置:

  • 塞进规范正文,使 coverage 变化看起来像规范变化
  • 在多个 Work Item 之间重复
  • 藏在测试名和外部 manifest 中,没有可验证的反向链接

Conformance Case 为场景提供稳定的 CONF-* 身份:

govctl conformance new "Cache expiry" \
  --path tests/conformance/cache.toml \
  --selector cache-expiry \
  --requirement RFC-0012:C-CACHE-EXPIRY@1.2.0 \
  --guard GUARD-CACHE-CONFORMANCE

权威方向被有意限制为单向:

RFC requirement -> Conformance Case -> Guard
规范权威            派生场景             执行入口

Case 不能创造新义务,也不能反向解释 RFC。Guard binding 声明一个命令覆盖哪些 Case, 但不声称某次运行已经通过。govctl 负责验证关系图;领域相关的 fixture、oracle 和测试 执行仍由项目负责。

可以用 trace query 查看这些关系:

govctl conformance trace RFC-0012
govctl conformance trace CONF-CACHE-EXPIRY -o json

Trace output 会区分 provisional、candidate、current 和 stale applicability。这样版本 漂移会被直接暴露,而不是把旧场景静默当成当前证据。

RFC Version 开始像真正的候选版本

0.100.13 重新整理了 RFC version handling,核心想法很简单:一个 version 对应一个 authoring candidate。

处于 spec 的 normative RFC 仍可继续细化。进入 impl 时,当前内容被封存为实现应 满足的 baseline。如果之后发现问题,先编辑已封存内容形成 amendment,再 bump RFC, 从 spec 打开下一个 candidate。

spec -> impl -> test -> stable
         |
         +-- later amendment -> version bump -> spec

这消除了几类纯 bookkeeping churn:

  • 不再为了封存未变化内容做一次空 bump
  • 已有打开的 spec candidate 时不再允许第二次 bump
  • 不再静默重写 Clause since 历史
  • 不再用 loop round 数量推断执行失败

同期还加入了两个实用的恢复边界。尚未发布的 done Work Item 可以重新打开;最新一次 本地 release cut 可以在 expected version 匹配时撤回。一旦历史已经发布或进入其他 不可变边界,这两个操作都会停止。

当前状态与完整历史是两种视图

治理历史必须完整保留,但 agent 不应该把 superseded text 当成当前指令。

0.14.0 开始,人类可读的 show 默认使用 current projection。Deprecated RFC、 superseded ADR 和过时 Clause 会保留身份与 replacement metadata,但隐藏不再约束新 工作的正文。

完整历史仍然可以明确请求:

govctl clause show RFC-0012:C-OLD --history
govctl rfc show RFC-0012 --history

生成的 Markdown 仍然是 archival projection,结构化输出也仍然完整。这项变化不是 删除历史,而是为人和 agent 提供更安全的默认上下文。

一条 Canonical CLI,并提供更好的错误恢复

0.15.0 完成了从 0.8 系列开始的 compatibility cleanup。Mutation 现在只有一种 形状:

govctl <resource> edit <id> <path> <operation>

Wire-layout prefix、field alias、compatibility command name 和资源专属 mutation flag 不再作为并行接口存在。所有 Clause 操作始终位于根级 govctl clause namespace。

移除 alias 只有在错误可恢复时才有价值。因此最近的 diagnostic 不只是拒绝输入:

  • 发到 govctl rfc 的 Clause 操作会打印对应的 canonical govctl clause 命令
  • 未知 edit path 会列出当前层级的合法字段
  • 不支持的操作会报告该 path 接受的操作
  • 不支持的 legacy storage 会被明确识别,而不是静默跳过

这是一个 breaking boundary,但它给 agent 留下了更小的 grammar,以及从常见错误 直接恢复的路径。

更短的 Skill,更可靠的 Discovery

对能力更强的 agent 来说,长 workflow manual 不会自动带来更高安全性。它们可能重复 CLI、逐渐偏离 parser,并诱发不必要的 ceremony。

Bundled skill 现在更聚焦于 policy:

  • artifact authority
  • lifecycle boundary
  • authorization stop
  • completion evidence

命令语法来自 --help 和新的 machine-readable entry point:

govctl describe
govctl describe --context

describe 从 parser 派生命令树,并返回紧凑、有版本的 JSON。使用 --context 时,它会 加入完整计数,但只枚举 actionable RFC、ADR、Work Item 和本地 loop。它不会 dump artifact body,也不会凭空规定任务顺序。

Guard guidance 也遵循同一原则。适用于所有任务的廉价检查属于 project default;昂贵 suite 只绑定到风险确实需要它们的 Work Item。关闭 Work Item 仍是最终 effective guard gate,因此 agent 不需要在它之前立即重复运行同一套检查。

更清晰的只读 TUI

TUI 仍然只读,但它已经不再是一组平铺的文字 panel。

最近几个版本加入了:

  • 对齐的 RFC、ADR 与 Work Item lifecycle matrix
  • 分离的 execution activity 与 diagnostic health 区域
  • 更显眼、可容纳长输入的 filter command strip
  • 稳定的 result count 与 scroll indicator
  • Conformance Case 浏览、导航、tag 与 applicability
  • 对过时 artifact 使用 current-state detail projection

职责边界没有变化:用 TUI 理解项目,再用 canonical CLI command 修改项目。

升级到 0.15.0

从 crates.io 安装:

cargo install govctl --version 0.15.0 --locked

Schema version 3 仓库可以事务性升级:

govctl migrate
govctl check

Schema version 4 启用 Conformance Case。低于 schema version 3 的仓库必须先使用兼容的 早期 govctl 完成升级。Legacy RFC 或 Clause JSON storage 现在会被明确拒绝,而不是 静默忽略。

迁移后,可以用 govctl describe --context 获取紧凑的机器可读入口,或打开 govctl tui 使用人类控制面。

为什么在 1.0 之前先发布 0.15

Conformance traceability 是一次重要的数据模型扩展。先通过 0.15 系列发布,可以让 真实项目在 1.0 compatibility promise 之前充分测试 storage、migration、query 和 agent-context 行为。

现在的方向已经更清楚:

  • RFC 定义权威要求
  • ADR 保存设计理由
  • Work Item 跟踪交付
  • Conformance Case 把 requirement 映射到场景
  • Guard 提供可复用执行门禁
  • loop 保存本地执行证据

这就是 0.15.0 希望真实项目开始检验的模型。

完整变更日志:CHANGELOG.md

发布页面:govctl v0.15.0