租约的边缘——墙上定谳 at-or-past,向量来测声明边界
规范解读 · 第 24 篇 · 本文引证来源 · 向量锚定的文本(逐句): draft-li-rttp-iqa-addressing-02(全文) · 系列页与修订史: datatracker · 本文介绍的向量家族: iqa.org/conformance/aicent-lease-boundary/(四件可下载,逐件 SHA-256) · 正本仓库: Aicent-Stack/conformance · candidates/aicent-lease-boundary · 以候选身份开放中: Agent-Authority-Conformance 实验室 PR #212 · 墙上线程在案: draft-jackson-wimse-evaluation · 被引先例: RFC 7519 §4.1.4 · 咱们声明地板的那一帖: WIMSE 存档,闭集线程,11 月 2 日 · W3C 墙: public-agentprotocol,2026 年 11 月 · 系列中途停机篇: 第 18 篇,中途发生了什么 · 姊妹双柱: RTTP(rttp://,CRI 27)· IQA(iqa://,CRI 28)
一面墙在数拒绝码——上一篇的主题——另一面墙悄悄关掉了一桩更老的公案:租约到期的那一瞬间,答案还算 fresh,还是已经 stale?11 月 3 日,也就是咱们的 conformance 档案发布两个向量家族的同一天,这个问题在 WIMSE 列表上迎来了定谳。这场定谳对本系列重要,因为咱们的草案在其中采取了一个乍看像「没立场」的立场;也因为吵完的这场架,恰恰是咱们第二个向量家族为之而建的考试。本文记录边缘如何被定谳、同一周 W3C 墙在 mid-task 上说了什么,然后介绍 aicent-lease-boundary:十五个用例,把声明边界从约定变成测试。
边界问题,及其定谳
先例早在 2015 年就写进了书里:RFC 7519 定义 JWT 的 exp 主张时要求当前时刻必须早于到期时刻——到了期,令牌即已过期。换句话说,at-or-past 是全世界部署最广的到期字段早已采用的读法。WIMSE 列表闭集线程里一位新参与者引的正是这个先例,主张评估类文档同样取 at-or-past:同一个边缘、同一家族的两份配套文档各执一端,是等着被触发的缺陷——同样的输入,被同族两份文档验证,落在边缘的两侧。
定谳在几小时内到来,出手的是 draft-jackson-wimse-evaluation 的作者——那条线围绕的、五周五版的评估文档:「I weigh in for at-or-past: -05 keeps its rule, FR2 flips on the record side, and the AIMS vectors move.」一份文档保留既有规则,另一份的要求记录翻转,测试向量随迁,并提议协调配套文档同规同落,让整个家族对边缘的读法一致。同一帖的第二句把更深的原则钉在案上:地平线以评估瞬间判定——做决定的时刻是使用时刻,不是授予时刻。对本系列,这两半都不是新闻:使用时刻的拆分自 -02 起就是 §6.3 的开篇动作,而 §6.1 的边界句正是为这一天写的。
咱们的线程早已声明过什么
读过咱们在那条线上第一帖的人,对定谳不会意外。闭集线程原本聚在「规范固定了词表、部署对约定各执一词时怎么办」这个问题上,咱们的帖子答的正是本系列称之为「地板,不是对手」的立场:协议条款可以让一个问题变得可答——每个实现声明自己用哪条边界——而不必裁决哪个答案赢。帖中原话:「the settled rule simply becomes what every implementation declares; the clause is the floor, not a rival to settlement.」三天后,定谳恰好以这个形状抵达:文档家族选定共同读法,声明不同的实现保住自己声明的可读性,线格式一字不动。§6.1 要求实现说明自己站在边缘哪一侧;它不——这正是设计——假装某一侧更正确。约定是部署方的地盘;声明的可测试性才是协议的。
中途,租约就是急停
同一周,W3C 墙在吵边缘的后果——边界在作业进行中被跨过时怎么办。mid-task halts 线程在 conformance 实验室产出一个 running-call-halt 候选,开帖当日即合并:二十四条 finish-or-stop 契约用例,纪律是租约过期的在途代理必须在证据尚能支撑的范围内收尾,否则停机。咱们草案对这场讨论的贡献写在 -02 的 §6.2,本系列第 18 篇精读过:边界后的下一次验证以 authority_revoked 或 evidence_expired 作答,而自第一次答案起就握着到期时间戳的调用方,「can arm its halt at the boundary before the boundary arrives.」物理的停机动作留在调用层;线上提供的是新鲜度。墙上当作架构辩论的,草案写成线上语义,下面的家族让它可测。
测边缘的家族
aicent-lease-boundary 是十五个用例——9 合规、5 不合规、1 ambiguous——四条读取规则。R-DECLARED 测边界约定本身:声明 inclusive 下的许可与声明 exclusive 下的过期拒绝都合规;与使用相矛盾的声明不合规;未声明则边界答案无法裁决,该用例按具名分部计分;而瞬间处帧在 §7.2 验证程序下被接受不决定信赖约定——帧有效与信赖是两层。R-NOEXTEND 测过期读取:过期后读取的答案以 expired 作答;把原观察重放为 fresh 不合规;在本地加宽限期重新解释租约不合规。R-MODE 测 organ 不可达时的声明作答模式:live 模式下调用被拒,与任何缓存答案的年龄无关——新鲜缓存救不了它;cached-lease 模式下,要求当前观察的策略以 authority_not_determined 拒绝,接受租约新鲜证据的策略可以放行;过期缓存以 evidence_expired 拒绝——序中第一个命中的值。R-WINDOW 测窗口长度是运营者选择:不检查声明到期、凭 120 秒部署默认就拒绝未过期答案,不合规——那个数字是源文里的一次部署观察,不是一致性目标。
在提交版上,check 与全部 15 条期望一致,突变体电池双向击杀 17/17,均 exit 0。每条期望锚定 §6.1、§6.2、§6.3 与 §7.2 的验证程序——每条规则一句引文,取回的 TXT 钉在 sha256 02491c5a——且家族把 never-assent 映射让给姊妹家族:源头不可达止于 authority_not_determined、绝不读作同意,由 aicent-grant-ref 测;本家族测的是模式系统在它之上加的一切。
向量不主张什么
家族的文件披露了自己的边缘,其中一处是值得广告的裁量。「与使用相矛盾的声明」案立足的是严格读法:§6.1 说实现应当声明边界,但没有给矛盾的声明挂上明确的后果——家族判其不合规,理由是不说出所用边界的声明废掉了条款赋予声明的功能。不同意的人有那句话可指。未声明案设计即 ambiguous,因为条款同时许可两种读法、却要求一份缺席的声明。窗口用例只测声明到期检查——120 秒这个数字本身是部署观察,永不是目标。检查器编码对源文的一种读法;后续修订的更正覆盖它。剩下的主张才是要紧的:边缘如今是一个测试。部署方可以声明自己的约定,把十五个用例交给自己的实现,几分钟内知道边界的行为是否符合自己的声明——而这一周之后,那也是墙上定谳的方向。
一句话:本周墙上把租约瞬间定谳为 at-or-past,恰好落进一个声明约定条款预言过的形状——而 aicent-lease-boundary 把定谳的前提变成十五个用例:声明你的边界,过期以过期作答,organ 不可达时让模式开口,查声明到期而不是假设默认。