端点即证明:一个规范、三种形态、四个工具
本文引证来源 · 一切锚定的规范文本:draft-li-rttp-iqa-addressing-02(40 页 · 2026-11-01 · TXT sha25602491c5a)· 向量层:iqa-org 1.3.2(crates.io / PyPI / npm)· 工具层:iqa-mcp 1.0.3(crates.io / PyPI / npm)· 本文发布的端点:mcp.iqa.org(streamable-http · 四工具)· 不装任何东西即可离线重放:iqa.org/challenge/ · URI 规范页:rttp.com/URI/ · iqa.org/URI/ · 本周提交实验室的四个新向量家族:PR #221 · #222 · #223 · #224 · 双柱:RTTP(rttp://,Resonant Time Transfer Protocol,IANA CRI 27)· IQA(iqa://,Identity Quality Assurance,IANA CRI 28)
软件项目在文档词穷的时候才发布工具。这个项目发布工具是为了另一个理由:让文档可以被检验。双柱工作——RTTP(rttp://)解析一个意图在哪里、什么时候算数,IQA(iqa://)陈述一个主张是否成立——在本博客的整个生命周期里都以文本形态存在:一份在 ISE 审核中的草案、一批逐文件带哈希的向量家族、一份份可字节级重放的运行记录。这一周,第四种形态加入了前三种,而它改变的是举证方式:一个托管的 Model Context Protocol 端点,已在 mcp.iqa.org 上线——任何 MCP 客户端只需一个 URL 即可消费,无需安装、无需本地运行时、也无需信任我们。
三种形态,同一批字节
端点不是另一个实现,也不是重写。它的部署流程是把 PyPI 上的 iqa-mcp 1.0.3 装进一个干净的虚拟环境,用 streamable-http 传输把这份代码原样端出去;唯一的增量是一个选择传输方式的启动器。这个选择就是全部要点:在本地用 stdio 跑安装包的开发者,与连在线端点的客户端,行使的是同一批向量上的同一套四个工具——两者若有一天不一致,那是一个带哈希线索的 bug,不是一个哲学分歧。这正是 1.3.2 发布时用过的纪律:当时的发布件从注册表回拉、与本地构建逐字节比对后才叫发布完成;端点在部署时接受同样的待遇——对刚装好的包跑七项自检。
逐层看,引用一律向上走,终点只有一个文档。iqa-org 1.3.2 里的向量带 spec_ref 字段,指向 draft-li-rttp-iqa-addressing-02,钉在 TXT sha256 02491c5a——正是 IETF/ISE 审核中的那份草案,正是任何人都能哈希核对的那些字节。工具消费这些向量;端点端出这些工具。整条栈里没有一处引用博客的修辞、README 的情绪或记忆。
四个工具,以及每个工具拒绝做什么
工具面刻意很小——四个动词,每一个对应草案里的一次教义动作:
derive_route_shard 回答地址从哪来。给定一个 canonical authority,它返回 ROUTE_SHARD——ASCII 权威字符串的 SHA-256 截断——以及派生的 rttp:// 地址形态。它体现的教义:地址是派生的,不是注册的。任何人、离线、用任何实现,算出的是同一个地址。没有房东可问,也没有房东可贿赂。
parse_envelope 回答字节里写了什么。它逐字段解码 AE-128 信封——magic、版本、租约到期、shard、attestation、organ、nonce、standing——返回这一帧所作的陈述。它刻意不返回的是裁决:解析是陈述,不是判断。两者的分离是整个设计的承重墙,这个工具从构造上就尊重它。
verify_envelope 回答这一帧算不算数。对全帧做密码学验证,对着 organ 的印章,对照声明的租约到期时刻检查新鲜度——外加一条绝对规则:fail closed。畸形输入、坏哈希、过期租约、不可达的验证路径——每一种失败都以拒绝收场,绝不给"看起来像就行"的宽宥。这个工具没有仁慈选项,因为协议没有仁慈选项。
published_vector 回答别信我们,自己重放。它交出已发布的测试向量——精确字节加期望结果——让世上任何实现都能对同一批冻结输入受检。这是自证线的入口:输出可字节级重放,意味着端点作出的每一个主张都能在没有端点的情况下重新推导。
安装包已经存在,为什么还要一个托管端点
诚实的答案有两半。便利的那一半:MCP 客户端只需要一个 URL。审计的那一半更有意思——端点是这条栈与"永远不会安装 Python 包的人"相遇的地方,而它运行时遵守的,恰是咱们博客一直要求别人遵守的那些约束。它无状态:没有可劫持的会话、没有账号、没有 cookie。它零托管:永远看不到你的内容,不知道你验证了什么、为什么验证;你检验的字节本来就是你的。它构造上 fail closed——那条我们在专门向量家族里测过的规则,如今跑在生产环境里,对象是我们自己。它不留"谁问过"的账本,因为验证一旦需要许可,验证就变成了服务,就不再是检验。
还有一处对称值得写下来。同一周,四个新向量家族——ae128-fail-closed、pulse-header、uri-grammar、route-shard——已作为候选项提交给 Agent-Authority-Conformance 实验室(PR #221 · #222 · #223 · #224)。把两件事放在一起读,闭环合上了:家族检验规则;工具执行规则;端点端出工具;草案陈述规则;向量引用草案。五个环节,一条链,每个环节都用哈希钉住上面那个。
我们不主张什么
端点是便利与示范,不是认证服务:它只为递给它的字节作保,别无其他。它不主张"托管形态比安装包形态更权威"——两者是同一份代码,审计者反而应该优先选安装包形态,恰恰因为它跑在审计者自己手里。端点跑在我们付费的基础设施上,这是事实,不是承诺;对这一点的诚实对冲就是第四个工具:它交出的一切,可以在一台从没听说过我们的机器上重放。规范层也停在它一直在的位置——一份公开的、受独立评审的草案,可按节号引用,只能公开地修改。
一句话:文本论证了它,向量钉住了它,工具运行了它,端点端出了它——一个真相的四种形态,而最新的那种形态对你的全部要求,只是一个 URL。