跳转至

Comp 门禁证据与完整性

Comp 保真度仍然有两项独立要求:数值得分和不存在阻塞性发现。高总体得分、重复尝试或已有 plate 文件都不能满足缺失区域检查。

度量与决策

comp-diff 度量声明的区域边界。它不会扩大窄区域以包含相邻元素。亚像素区域至少采样一个真实源像素,包括图像边缘处。覆盖率和区域类型检查仍由 comp-spec 负责;此变更不授权省略区域或缩小其边界以排除必需工作。

独立的 comp-diff 报告包含原始裁决。hero 门禁可以使用当前的 plate 校验和渲染存在性来解释这些度量。对于 hero 和响应式证据:

  • raw-report.json 保留未解释的度量和裁决。
  • report.json 保留相同的得分,为每个区域添加 rawVerdict,并发布门禁和配对图像标签所使用的有效 verdict。
  • gate.ok 和 gate.reasons 描述是否允许推进以及所有未解决的阻塞项。仅凭 drift 并不意味着区域是非阻塞的。
  • 配对图像使用相同的报告字段,将其门禁状态标记为 BLOCKING、NONBLOCKING 或 CHECK GATE。
  • 区域特定的阻塞项记录在 blockingReasons 中。blocking: null 表示存在一个未限定范围的阻塞性发现,无法给该区域出具健康证明。未限定范围的发现保留在 gate.unscopedReasons 中;它们不会被隐藏或豁免。

当捕获、spec 或 plate 校验在度量之前失败时,当前报告会设置 measurementsAvailable: false,没有区域结果,并包含失败的门禁原因。它不会将之前的捕获呈现为当前证据。

修复裁剪仅包含当前存在阻塞项的区域;共享读数保留所有受影响的区域 ID。全帧阻塞项保留其整帧证据。hero 和响应式报告都会在预检和图像写入之前标记为不完整,并且只有在证据文件成功后才会原子提交。每次尝试都会清除之前的 raw 报告、整帧 PNG 和区域 PNG;失败的尝试也会清除它们写入的任何部分证据。已移除的区域不能在成功的比较中留下旧的裁剪图。清理仅限于生成的文件,不跟随区域目录符号链接,并且如果清理失败会阻塞门禁。当移除失败时,剩余生成的集合会在其当前路径旁以唯一的 invalid-comparison-* 前缀重命名。artifactCleanup 和隔离清单记录被移动的路径。保持在同一父目录下可避免需要对只读目录本身的写权限。如果文件系统权限也阻止隔离,该字段会记录错误并明确列出无效产物路径;任何证据都不会被认证,门禁保持关闭。写入失败会阻塞门禁,并且在报告位置可写时发布证据不可用报告。

停滞反馈会跟随重复出现的阻塞原因。它绝不会仅仅因为某个资产原始得分最低就选择重新生成该资产。该反馈只是附加上下文;它不会清除发现项,也不会推进阶段。

Plate 验证

成功的 plate 收据包含资产字节、度量区域和 comp 的 SHA-256 指纹。hero 和响应式门禁会重新验证收据。文件被更改或删除、区域被更改或 comp 被更改都会使收据失效。旧版仅含得分的收据也会被重新验证。无效的 plate 不能仅仅因为其 PNG 已解码就获得 ok 收据。由已接受的 --force 关闭的 plates 阶段会在每个失败收据上记录豁免,并将豁免绑定到相同的哈希;后续门禁仅在资产、区域、reference 和 comp 均未改变时承认该豁免,并且只对发生变化的 plates 重新执行门禁。资产验证后仍会检查渲染存在性,因此隐藏在页面中的文件不算已放置。

覆盖

使用 --force --reason 时必须包含一段直接引用的话语,表明用户本人降低 comp 的权威。无关地提到该用户并不能授权引用另一位发言者的话。泛化的委托、构建者声称可以继续的周边陈述,或门禁例外,都不能确立该授权。引用解析器刻意保守。它无法鉴别引用的真实性:调用方测试框架必须保留实际用户回答并评估其来源。无论是本地收据还是调用方写入的状态,都不是能抵御对全部文件和引擎代码拥有任意写权限的代理的安全边界。

验证

comp-verbs 回归测试覆盖:窄区域隔离、已更改/已删除的 plate 收据、comp-crop 复用、隐藏的渲染资产、重复失败的尝试、模糊的覆盖(overrides)、spec 覆盖率和类型拒绝,以及 raw/有效报告的一致性。它们并不证明任意作品的语义等价性,也不证明可以放宽保真度阈值。

本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 im/impeccable