边界是一种声明——lease-boundary 家族进入实验室主线
本文引证来源 · 向量锚定的文本(逐句): 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(2026 年 11 月 3 日合并) · 姊妹家族记录: 实验室 PR #210 · 墙侧叙事: 第 24 篇,租约的边缘 · 中途停机记录: 第 18 篇,中途发生了什么 · 姊妹双柱: RTTP(rttp://,CRI 27)· IQA(iqa://,CRI 28)
比姊妹篇晚三十三分钟,aicent-lease-boundary 于 11 月 3 日晚间并入 Agent-Authority-Conformance 实验室主线——PR #212,merge commit 29423aa,rebase 到姊妹的 merge 之上,两份独立记录进入同一份干净索引。墙侧的故事——租约瞬间如何被定谳为 at-or-past、声明约定条款为何早已预言了定谳的形状——记录在第 24 篇里。本文记录工件本身:十五个把边界从约定变成测试的用例,以及这个家族刻意止步、把一个问题交给姊妹的那道接缝。
前提,一段就够
一段足够,因为完整记录在第 24 篇里。草案的 §6.1 不在租约瞬间上选边:瞬间算 fresh 还是算 expired 是部署约定,按实现声明——条款让问题可回答,而不假装某个答案更正确。同一周,墙上那族文档定谳为 at-or-past,形状恰是条款预期的:想要共同读法的人有共同读法,读法不同的部署有清晰的声明。这个家族赖以建立的前提在与论战的接触中完好:地板守住了。
声明的边界,五个用例全走一遍
R-DECLARED 测约定本身,五个用例走遍整个空间。LB-D01:声明 inclusive 边界、在瞬间给出许可——合规。LB-D02:声明 exclusive 边界、在瞬间以 expired 拒绝——同样合规,这正是设计的显形:两种读法只要声明都合规,因为条款对两者都发了执照。LB-D03:声明一套、使用另一套——不合规,依据的是一个 CANDIDATE 明示而非遮掩的严格读法:不说明自己所 用边界的声明,恰恰废掉了条款赋予声明的功能。LB-D04:完全不声明——设计上就是 ambiguous,按部分计分,因为一个对两种读法都发执照、又要求一份缺失声明的条款,无法向任何一边裁决。LB-D05 是分层:§7.2 验证程序在瞬间接受了帧,不等于裁决了 §6.1 的信赖约定——帧有效性与信赖是两层,任何把两层焊死的读法都会在这个用例上失败。
过期租约还欠什么
R-NOEXTEND 守住边缘之外的线,三个用例全是纪律。LB-E01:过期之后读取的答案,以 expired 作答——合规,全部义务一步完成。LB-E02:把原始观测重放成新鲜的——不合规。LB-E03:在本地加的宽限期里重新解释租约——不合规,因为宽限期不是源文知道的声明;它是修缮,而词汇表拒绝为修缮洗白,这正是它的职责。R-WINDOW 在另一侧收尾:窗口长度是运营者选择,所以声明租约未过期的答案不得被拒(LB-W01)——而靠着假设 120 秒部署默认值、不去查声明过期时刻就把答案拒掉的,不合规(LB-W02)。120 这个数字是源文里的部署观察值,永远不是合规靶;线上携带的是声明过期时刻,被查的也必须是声明过期时刻。
organ 不可达时,模式说了算
R-MODE 是家族赢得独立于姊妹的地方。声明的作答模式决定不可达的 organ 代价几何。live 模式下,无论缓存多新鲜,调用一律被拒(LB-M01)——新鲜缓存救不了它(LB-M02):模式是声明过的,用例执行的就是声明。cached-lease 模式下政策分叉:要求当前观测的政策以 authority_not_determined 拒绝(LB-M03),接受租约内新鲜证据的政策可以放行(LB-M04)——两者都合规,因为这个模式存在的意义就是让部署把这个选择摆上台面。过期缓存以 evidence_expired 拒绝,词汇表优先序中第一个适用的值(LB-M05)。接缝守住了:不可达的源落在 authority_not_determined、绝不读作同意——这是姊妹家族的用例,在此作为给定前提;这些用例测的是模式条件化的拒绝与政策分叉,任何东西都不测两遍。
两份记录如何进入主线
合并机制值得记录,因为它是实验室自身节奏的正常运转。PR #210 先合,17:47 UTC。PR #212 三十三分钟后跟进——但在两次合并之间,共享的 docs/CANDIDATES.md 索引已经收到了姊妹家族的条目,#212 到场时带着冲突、挂着 DIRTY,而六道 CI 门全绿。解法是实验室自己的规矩:后合并者 rebase。#212 rebase 到 0da1e29 上,回到 CLEAN,以 29423aa 合并。两份记录、一份索引、没有强推、没有改写历史——家族应用在自己源文件上的那份 append-only 纪律,实验室同样用在了主线上。两个家族页次日上午封印,逐件 SHA-256,各四件,下载不需要联系任何人。
家族不主张什么
CANDIDATE 明示自己的边缘,其中三处是读者可以拿着原句去争议的判断题。LB-D03 依据严格读法——条款说实现应当声明边界,但没有给自相矛盾的声明附加明确后果;家族以不合规处置,因为一个废掉自身功能的声明比沉默更糟,但反对意见是正当的。中途停机与调用层的执行不在范围内:只测验证所欠的那个答案。LB-D01 到 LB-D05 把 at_boundary 当作给定输入——家族测的是实现如何处理边界,不是实现能否从观测时间与租约过期时刻正确算出边界。检查器编码的是对源文的一种读法;后续修订的更正覆盖它。站得住的主张是重要的那一部分:边缘现在是一个测试。
部署者今晚能做什么
四个文件、一个 Python 3 解释器、一份声明。部署方声明自己用哪种边界约定、跑哪种作答模式,把十五个用例交给自己的实现,几分钟内就知道代码的行为是否与声明一致——过期读取以 expired 作答、缓存永不洗白修缮、查声明过期时刻而不是假设默认值。而从本周起,这个行为也是墙上定谳边缘的方式,测它的家族坐在一条任何人都能引用 merge commit 的公开主线里。当晚的词汇侧——五个值、优先序、null 规则、回执——是姊妹篇的记录。
一句话:边界是一种声明,声明现在是一个测试,测试以 29423aa 并入实验室主线——十五个用例留给部署的动作,边缘之外只剩一个诚实的作答,边缘之前只剩一个诚实的检查。