govctl v0.15.0:从规范要求到验证证据
govctl 0.15 引入一等 Conformance Case,完成 canonical CLI 收口,并把近期 RFC 生命周期、agent discovery 与 TUI 改进整合为统一模型。
govctl v0.15.0 是最近几条演进路线汇合成统一模型的节点。
这一版最显眼的新功能是一等 Conformance Case:它在带版本的 RFC
requirement、项目自己的验证场景和可复用 Verification Guard 之间建立稳定、非规范性的
链接。但更大的变化横跨 0.10 到 0.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.10 到 0.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
- 已有打开的
speccandidate 时不再允许第二次 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 操作会打印对应的 canonicalgovctl 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