读懂跑分报告:如何不信任我们也能当裁判
一致性实验 · 第 3 篇 · 本文引证来源 · 报告发布处:PR #180 评论,与密封副本逐字节一致 · 档案在册:iqa.org/conformance/lra-runner/ · 案例族本体:aps-conformance-suite PR #180 · 点名出处:第 0023 号信,逐字引自我方留档 · 我方申报:第 0015 号信 · resolver 现场:rttp.com/open · iqa.org/open · 双柱:RTTP(rttp://,CRI 27)· IQA(iqa://,CRI 28)
报告已经上线:内联贴在 PR 上、密封在我们的档案在册页、任何人从公开仓库一条命令即可复现。所以诚实的问题不是"要不要信我们的总结",而是"你自己该怎么读它"。本篇是裁判指南:报告里有什么、哪些数字有分量、哪些是装饰、以及最有意思的诚实住在哪——住在那格空格里、钉死的变异体里、还有一对对同一工件意见可见地分歧的 resolver 里。
先读声明,再读结果
报告的开篇方式,正是实验室公告要求所有人开篇的方式:声明主张。我们的第 0015 号信在主张表里填了两格——证据新鲜度:主张;权威有效性:主张——第三格依设计留空:行动时授权不主张,因为授权属于调用层。跑分报告原样继承了这张表,而案例族自己的计分规则让它承重。公告原文:“An axis a mechanism does not claim is recorded as not claimed and is not scored.”(机制不主张的轴记为 not claimed,不计分。)所以当你扫我们的逐向量表,看到某一列的结尾是"not claimed"而不是通过或失败,你看到的不是我们藏起来的弱点,而是我们提前公布的边界,以及实验室为让它保持可见而自带的语法。公告对我们本人也是同一句话:“Nothing in the family turns a refusal into an action decision for your schemes.”(本族中没有任何东西会把一次拒绝变成对你方案的行动裁决。)
第二步读模式:一次实验,两份裁决
每次运行都声明自己的模式,而两种模式刻意讲出两个不同的故事。缓存租约模式下,我们的方案从随语句携带的租约作答:验证者拿自己的时钟离线核对,T=119 的调用放行——包括撤销源不可达的那个变体,因为缓存租约证明新鲜度从不需要网络。活体 standing read 模式下,方案必须够到它的 organ;organ 够不着时,每一次调用都被拒绝——三个时间戳上全部 fail-closed。两个故事没有一个是"好听的"与"难堪的"之分;它们是两种不同的产品,各自诚实定价。租约说的是:这份证据可以多新鲜、旧到什么程度验证者就停止信任。活体读取说的是:当答案必须来自权威而权威不在时,会发生什么。只发布其中一个故事的机制,营销起来更容易、比较起来更难。我们把两个都发布了,因为第 0015 号信预注册的就是两个。
先读变异体:一板全绿是最便宜的
报告里最不重要的一页是正走向:48 个运行、176 次调用、528 项逐轴比较、176 个综合裁决,全部与预期结果一致。一板全绿只证明两件事之一——要么实现是正确的,要么实现根本没有失败的能力。报告真正的校准页是变异体电池:案例族逻辑的十二个变异变体,每一个都必须失败,每一个都被钉死在它精确的预期失败集上、别无他处。second-worker-stale 变异体只触发第二工作者的检查;fabricated-live-read 变异体被溯源当场抓获。十二比十二,无附带失败,无漏检。这才是测量仪器与橡皮图章的分界:不在于它同意预期答案,而在于它在现实被掰弯的地方精确地不同意。再加上负走向——被篡改的向量副本在加载时被拒、根本没有机会产出任何结果——这份报告没有一行绿色也完成了它最有力的主张:这台仪器没法被悄悄喂进谎言。
琥珀与全绿:两个 resolver 演示了什么
这个故事里有一个展品不在报告里,而在报告旁边。密封工件一物两址——两个地址都派生自工件自身的摘要——点开它们,能看到两个 resolver 行为不同。rttp://94bbaf3c.conformance.iqa,问题一侧:意图解析得干干净净,然后 pillar(conformance)被标成琥珀——不在十七柱表内、root 也非 DNS 锚定的那个——但照样解析:pillar 空间按语法就是开放的,操作者自选的标签合法,resolver 的职责是解析并注记,绝不假装认识它不认识的东西。iqa://94bbaf3c292abf69595bf5782d1db8cb.forge.iqa,答案一侧:每一项检查全绿——organ forge 在闭集之内,root 是它自己的主权锚。两种行为,都对,一堂课——正是报告量化的那个区分:开放的动作空间不能拿闭集清单打分,闭集的验证集绝不能放过一个不认识的名字。报告里那行"not claimed, not scored"与 resolver 的琥珀徽章,是同一种诚实穿着两套制服。
四条边界线
四条线框住这份报告所主张的东西,每一条都印在报告本体里。第一,案例族是评审中的 revision 2 候选版;我们的运行钉死了所消费向量的摘要,所以它证明的是面对那批冻结字节的行为,而不是这个案例族将来变成什么。第二,这是一个案例族,不是整个套件:我们跑 lease-revocation-axes,是因为那是我们被点名入座的席位;其他案例族仍然开放。第三,报告量的是我们的策略层——revision 2 的向量按设计不含密码学材料——而密码学层由包自身自检单独量:PyPI 上的 rttp 1.3.1 默认安装 80 项通过、3 项跳过,装上可选的 Ed25519 后端 83 项全过;两个数字谁也不冒充谁。第四,确定性主张——三次运行字节级一致——只延伸到记录在案的环境,报告把环境全文打印。这四条线没有一条削弱结果;正是它们让结果成为一次测量,而不是一圈庆功。
发帖之后:在实验室自己的屋檐下复验
本篇写就之后,同一份报告作为 interop 记录归档进了实验室自己的仓库(pull request #187),由实验室的 CI——而不是我们的主张——跑过这些字节。三个版本,简述:维护者在归档 head 上复现了我们的运行,得出的正是我们的数字——输出字节级一致、exit 0、篡改输入在摘要门被拒;仓库自己的检查随后浮出三个过程性发现(vendor 清单列了记录不携带的文件、六个 CRLF 文件、一句比守卫覆盖面更宽的表述);第三版把三件事全部解决,而数字一动未动——新 head 上的重跑与记录输出字节级一致。对裁判而言,值得细读的是这个故事的形状:每个发现都关于打包与措辞,没有一个关于测量本身;每个修复都作为新 head 落在同一次密封结果之上。这份报告如今经受了一次复现和一次评审,两者都没有改变它的算术。
一句话:跑分报告不是奖杯柜——它是校准证书,而最能打动裁判的部分,恰恰是那格空格、钉死的变异体,和那枚证明仪器在不知道时会告诉你的琥珀徽章。