Candidate、Qualified、Physical 与 Logical
一句话
Pysolate 的 Experimental/default-off narrow lane 把一次可能的 capability call 分成四步:代码分析先发现 candidate,Host 再决定它是否 qualified,随后可以提前完成 physical work,只有原程序实际运行到对应位置时才产生 logical effect。
先看一个例子
Agent 生成了下面的程序:
if user_wants_profile:
profile = sources.read("/profiles/alice.json")
show_summary()
分析器看到 sources.read(...),只能说明“这里可能调用读取能力”。若 user_wants_profile 最终为假,这行代码根本不会执行。当前 streaming preissue lane 也会因为 conditional predecessor 拒绝 qualification,所以这个 candidate 不会触发提前读取。
若 source prefix 改成 straight-line、参数固定且没有 opaque/data-dependent predecessor,例如先直接调用 sources.read(...) 再处理结果,Host 才可能在剩余代码生成期间提前读取,把结果暂存在本次 Run 的私有记录中。最终 Guest 到达 exact occurrence 时才领取结果;若 source 漂移、前面先抛异常或 Run 被取消,结果就丢弃。
真实机制
四个阶段分别回答不同问题:
Candidate
代码里是否出现了一个可分析的调用位置?
↓ Host 检查 Plan、参数、identity、policy、budget
QualifiedCall
这一个 occurrence 是否允许进行受限的提前准备?
↓ Host 启动 one-shot preparation
Physical work
真实读取或解码是否已经开始、完成或失败?
↓ unchanged Guest 到达 exact dynamic occurrence
Logical effect
程序逻辑是否真正调用并一次性 claim 了结果?
Candidate 来自 exact target Guest 的 source/semantic analysis。AST 中出现函数名、调用被标记为 read-only,或参数看起来固定,都不能自己产生 authority。
QualifiedCall 是 Host 把 candidate 与本次 sealed Plan、canonical arguments、source 和 occurrence identity、privacy、freshness、lineage 以及独立预算逐项匹配后的私有证明。资格成立仍不等于物理工作已经发生。
Physical work 由 Host capability 路径执行,结果进入 Run-private staged observation。它有自己的开始、完成、取消和失败记录,但此时 Python 语义上的调用次数仍是零。
Logical effect 只能由 unchanged Guest 的 exact dynamic occurrence 触发。Claim 必须匹配 capability、参数、source、occurrence 和 staged identity,而且只能成功一次。若合法 lane 中的 occurrence 最终没有到达、代码身份漂移或 Run 被取消,ready result 会 orphan/cancel/discard,不会追认成一次逻辑成功。
纯 AST/source pass 是另一条 lane,不能生搬这四步。它读取完整 source,在 authority-free exact Guest 中生成 whole-program patch,再由 fresh final Guest 重新推导并选择 derived AST;这里没有提前 dispatch capability,也没有 staged result 等待 dynamic occurrence claim。Patch applied 只表示 derived execution 被选中,不表示产生了 capability logical event。它与 source-prefix pre-dispatch 共用一些 identity/pass 术语,但 fallback、outcome 和 owner 不同。
为什么重要
技术上: 系统可以把一部分等待时间与明确授权的 read/decode 重叠,又不必假定预测一定正确。错误预测浪费物理计算,但不会改写原程序的控制流或调用账本。
产品和业务上: Agent 程序可以保持普通条件判断和异常语义,同时利用流式生成期间的空档。系统也能分别核算 provider work 与用户程序真正消费的 effect,避免把猜中候选误报为成功执行。
不能推出什么
- 当前机制不允许任意 Python effect speculation,尤其不能把未知 write 提前执行后再假装可以回滚。
- Physical completion 不是 cache hit,也不是 logical success。
- Exact occurrence 约束是受支持 narrow lane 的合同,不是任意动态 Python control-flow bijection。
- Source-patch
applied不是 physical pre-dispatch、cache hit 或 capability logical success。
术语卡
- Candidate:分析发现的潜在调用位置,不带 authority。
- QualifiedCall:Host 对一个 exact occurrence 完成全部 admission 后产生的私有资格。
- Physical work:真实资源读取、解码或其他被授权的物理准备。
- Logical effect:原 Guest 程序实际到达调用点并 claim 后的逻辑事件。
- Orphan:物理结果已存在,但没有合法 logical occurrence 消费它。
继续阅读
- 前置:权限为什么有生命周期
- 后续:流式 source 与最终代码身份、Semantic pre-dispatch、为什么纯 AST 优化现在真的是 Pass
- 说明文档:
claims/main-claim.md、implementation/04-semantic-predispatch.md - 源码 owner:
runtime/semantic/analyzer.go、runtime/semantic/legality.go、runtime/preparedregion/table.go