流式 source 与最终代码身份
一句话
代码仍在生成时,Pysolate 只分析 Host 已收到的精确 prefix,并要求最终 source 是这个 prefix 的 append-only extension;提前结果在 final-source gate 打开后,仍须由匹配的动态 occurrence claim。
先看一个例子
假设模型正在逐段生成:
profile = sources.read("/profiles/alice.json")
# 后面的代码还没到达
Host 已经看到完整的第一行,可以考虑提前读取 profile。但后续 source 可能变成:
raise ValueError("stop")
也可能继续使用 profile。Host 不能因为第一行曾经出现,就假定最终程序一定成功消费读取结果;更不能允许生成器回头把前缀替换成另一段程序。
真实机制
这条链中有三种不同 identity:
- Prefix identity:当时已经到达的精确 source bytes 及其 digest。它回答“分析器看到的是哪个前缀”。
- Final-source identity:生成结束后完整 source bytes 的 digest。它回答“最终执行的是哪个完整程序”。
- Occurrence identity:完整程序中哪一个 call site、参数和动态 occurrence 可以 claim 结果。
Host 只接受单调追加的 source:新的文本必须保留此前所有 bytes,并在尾部扩展。当前 aggregate 还有 1 MiB 上限。Exact target Guest 判断 Python prefix 是 incomplete、complete 还是 invalid,并返回 source/semantic facts;Host 不用自己的简化 Python parser 代替目标 Guest。
exact prefix arrives
→ target Guest analyzes that prefix
→ Host may qualify one bounded preparation
→ remaining source only appends
→ Host seals exact final-source digest
→ final Guest executes exact generated source
→ matching occurrence may claim
Final-source gate 负责阻止过早 claim。Source 没有 seal、最终 request 与 generated source 不一致,或 append-only 条件被破坏时,执行或 claim 会 fail closed。当前实现还会在 seal 时把 ready streaming semantic record 绑定到已有 final source SHA,而不再次解析 final AST。
项目中存在三条相邻的 streaming seam:SourceStream 的增量 admission 协议、Wazero RunStream 的同一 Guest preparation seam,以及 semantic prefix pre-dispatch 后使用 fresh final Guest 的路径。它们分别证明不同机制,不能仅凭都叫 streaming 就拼成一条统一 production pipeline。
当前 Runtime 还把 semantic pre-dispatch 登记为 prefix_overlay stage 的 source-bound pass,并在原 observation lifecycle terminal 后投影统一 outcome。这个 adapter 只统一 registration、binding 和 evidence vocabulary;它不会把三条 streaming seam 合成同一个执行路径,也不会重新 dispatch 或 claim work。
Digest 的作用也有限:它证明 canonical bytes 相等,不证明代码安全、作者身份、语义正确或 capability authority。
为什么重要
技术上: Host 可以利用代码生成尾部的等待窗口,又能把“早期看见的 prefix”“最终执行的 source”和“真正发生的调用”分别核对。Source 漂移不会静默复用旧结果。
产品和业务上: 流式 Agent 不必等整个程序生成完才开始所有准备工作;同时,用户不会因为模型后来改变控制流,就被错误记上一笔逻辑调用。
不能推出什么
- Prefix digest 不等于 final-source digest,append-only 也不证明程序语义安全。
- Semantic analyzer Guest 与 final execution Guest 是 fresh 的两次执行,不是同一个 Python frame 的 continuation。
- 已有 authored fixture 只展示受控 overlap,不证明自然 workload 或生产环境普遍加速。
术语卡
- Source prefix:Host 截至某一时刻收到的精确代码前缀。
- Append-only:后续 source 只能在原 bytes 末尾添加,不能修改前缀。
- Final-source gate:完整 source identity 被 seal 前禁止 logical claim 的 Host gate。
- Occurrence identity:把结果绑定到 exact call site 与动态调用次序的身份。
- Source seal:Host 对最终完整 source 和相关 admission facts 的封存记录。
继续阅读
- 前置:Candidate、Qualified、Physical 与 Logical
- 后续:Semantic pre-dispatch、为什么纯 AST 优化现在真的是 Pass
- 说明文档:
implementation/03-streaming-and-source-binding.md、defense/limitations.md - 源码 owner:
runtime/streaming/source.go、runtime/semantic/streaming_predispatch.go、runtime/semantic/prefix_execution.go、runtime/semantic/pass_outcome.go