在渐进式交付流程中,决策(promote、abort 或 pause)直接决定了服务状态。虽然控制器负责执行这些决策,但验证决策的依据至关重要。现有的做法往往依赖运行时状态或模糊的日志,缺乏确定的证据链。dsh-canary-decision-proof 提供了一种离线、确定性的方法,证明已记录的 canary 决策遵循了显式、仅哈希的策略。
这是什么¶
这是一个控制器无关的离线证据验证器。它不执行 rollout,不查询 live metrics,不进行认证或授权,也不证明统计显著性或用户结果。它的核心职责是接收提供的证据,通过严格的逻辑规则进行重算,并生成一份内容寻址的报告。如果证据不完整,它会失败到 pause。
核心功能¶
该插件通过以下机制实现决策的可验证性:
- 证据完整性校验:插件会检查证据是否包含必要的指纹(artifact digest)、环境信息、收据、分析窗口、最大流量、最小窗口长度、观察者阈值、新鲜度以及指标规则。如果证据不完整、过期、未绑定或采样不足,判定逻辑会优先触发
pause。 - 确定性指标计算:指标值使用正固定点整数 (
valueMicros)。对于“越高越好”的指标,回归值为(baseline - canary) / baseline;对于“越低越好”的指标,回归值为(canary - baseline) / baseline。使用整数基点进行判断,确保计算结果的确定性。 - 决策优先级:插件定义了明确的决策优先级顺序:
- 证据不完整、过期或无效 →
pause - 存在失败的指标 →
abort - 其他情况 →
promote
- 证据不完整、过期或无效 →
- 输出内容寻址报告:插件在显式的工作区相对
artifactDir下写入报告。它拒绝路径转义和符号链接,仅生成包含哈希、计数、时间戳、定点比较、检查和裁决的报告,不包含原始业务文本或密钥。
环境与兼容性¶
- 依赖环境:需要 Node.js 22 或更高版本。
- DSH 版本兼容:与 DSH >= 0.1.2-alpha.4 兼容。
- 权限注意:该插件以当前 DSH 进程权限运行,安装前应检查源码与许可证。
典型用法¶
插件提供了 inspect 和 verify 两个主要命令,用于查看和验证证据。
# 验证证据并输出报告
node bin/dsh-canary-decision-proof.mjs verify examples/promote.json
# 检查证据详情
node bin/dsh-canary-decision-proof.mjs inspect examples/promote.json
除了命令行工具,插件还通过 dsh_canary_decision_inspect、dsh_canary_decision_verify 暴露接口,并支持通过独立的 stdio MCP 服务器调用 canary_decision_inspect 和 canary_decision_verify。
适用场景¶
该插件适合需要严格审计决策逻辑的场景。例如,在需要证明某次 promote 决策确实满足所有预设阈值和窗口条件时,可以使用此插件进行离线复核。它不适用于需要实时流量控制或自动回滚的场景(这通常由 dsh-ankh-guard 等插件负责)。
总结¶
dsh-canary-decision-proof 专注于“证明”而非“执行”。它将决策依据固化为可验证的证据,为渐进式交付提供了审计层面的确定性。对于需要严格合规或复杂回滚策略的团队,这是一个可控、离线的辅助验证工具。
目录页:dsh-canary-decision-proof
源码仓库:github.com/dongsheng123132/dsh-canary-decision-proof