AICENT.COM
← 返回中文博客

端点即证明:一个规范、三种形态、四个工具

2026-11-13 · IQA · RTTP
本文引证来源 · 一切锚定的规范文本:draft-li-rttp-iqa-addressing-02(40 页 · 2026-11-01 · TXT sha256 02491c5a)· 向量层: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 即可消费,无需安装、无需本地运行时、也无需信任我们。

一个规范 · 三种形态 · 四个工具每一层引用它的上一层 · 没有任何一层引用记忆第 0 层 · 规范 · draft-li-rttp-iqa-addressing-02规范性文本 · TXT sha256 02491c5a · ISE 审核中 · 下方每一层逐节引用它第 1 层 · 向量 · iqa-org 1.3.2(crates.io / PyPI / npm)一致性向量带 spec_ref 字段 · 全部重锚至 draft-02 · 冻结集可在 iqa.org/challenge/ 下载第 2 层 · 工具 · iqa-mcp 1.0.3(crates.io / PyPI / npm)四个 MCP 工具 · derive_route_shard / parse_envelope / verify_envelope / published_vector · stdio · 本地 · 可离线第 3 层 · 端点 · mcp.iqa.org · 新上线同一份服务端代码 · streamable-http 传输 · 托管 · 无状态 · 零托管 · 任何 MCP 客户端 · 一个 URL端点的 venv 从 PyPI 安装 iqa-mcp——托管形态与安装包形态是同一批字节,部署时实机验证
图 1:本文描述的栈。每层用哈希引用上层;最底层不是安装包的分叉——它就是安装包本身,只是被"端"了起来。

三种形态,同一批字节

端点不是另一个实现,也不是重写。它的部署流程是把 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 回答别信我们,自己重放。它交出已发布的测试向量——精确字节加期望结果——让世上任何实现都能对同一批冻结输入受检。这是自证线的入口:输出可字节级重放,意味着端点作出的每一个主张都能在没有端点的情况下重新推导。

四个工具 · 四个动作 · 一条规则:协议递刀,不挥刀derive_route_shard→ 地址在哪(WHERE)· SHA-256 截断 · 离线可算 · hash names,无房东parse_envelope→ 128 字节说了什么 · 逐字段 · 只陈述,永不裁决verify_envelope→ 算不算数(WHETHER)· 全帧密码学 · 租约新鲜度 · FAIL CLOSED,无仁慈选项published_vector→ 自己重放 · 冻结字节 + 期望结果 · 每个主张可脱离我们重新推导工具面刻意不提供的东西:不保管内容、不做授权决定、不打声誉分、不查询任何注册表——验证是本地的、无状态的,每条失败路径都以拒绝收场
图 2:工具面。四个动词,各自拒绝一种流行诱惑——注册制、陈述与裁决混同、仁慈,以及"信我们的话"。

安装包已经存在,为什么还要一个托管端点

诚实的答案有两半。便利的那一半:MCP 客户端只需要一个 URL。审计的那一半更有意思——端点是这条栈与"永远不会安装 Python 包的人"相遇的地方,而它运行时遵守的,恰是咱们博客一直要求别人遵守的那些约束。它无状态:没有可劫持的会话、没有账号、没有 cookie。它零托管:永远看不到你的内容,不知道你验证了什么、为什么验证;你检验的字节本来就是你的。它构造上 fail closed——那条我们在专门向量家族里测过的规则,如今跑在生产环境里,对象是我们自己。它不留"谁问过"的账本,因为验证一旦需要许可,验证就变成了服务,就不再是检验。

还有一处对称值得写下来。同一周,四个新向量家族——ae128-fail-closed、pulse-header、uri-grammar、route-shard——已作为候选项提交给 Agent-Authority-Conformance 实验室(PR #221 · #222 · #223 · #224)。把两件事放在一起读,闭环合上了:家族检验规则;工具执行规则;端点端出工具;草案陈述规则;向量引用草案。五个环节,一条链,每个环节都用哈希钉住上面那个。

我们不主张什么

端点是便利与示范,不是认证服务:它只为递给它的字节作保,别无其他。它不主张"托管形态比安装包形态更权威"——两者是同一份代码,审计者反而应该优先选安装包形态,恰恰因为它跑在审计者自己手里。端点跑在我们付费的基础设施上,这是事实,不是承诺;对这一点的诚实对冲就是第四个工具:它交出的一切,可以在一台从没听说过我们的机器上重放。规范层也停在它一直在的位置——一份公开的、受独立评审的草案,可按节号引用,只能公开地修改。

一句话:文本论证了它,向量钉住了它,工具运行了它,端点端出了它——一个真相的四种形态,而最新的那种形态对你的全部要求,只是一个 URL。

已封印 rttp://a9c67b46.blog.aicent · iqa://a9c67b46b03ec00998a70d6e531263b7.forge.iqa · 密封记录