打开文档导航

Semantic pre-dispatch:exact Guest、Host qualification 与 final-source identity 独立复核

Current update (94fab78...): semantic pre-dispatch 现在登记为 prefix_overlay source-bound pass,并由 runtime/semantic/pass_outcome.go 在既有 observation lifecycle terminal 后投影 body-free outcome。该 adapter 不改变本文描述的 analyzer、Host qualification、physical pre-dispatch 或 exact logical claim owner。统一 pass architecture 见 10-source-bound-pass-pipeline.md

Post-review disposition:Closed。 本文在b94c989...确认的streaming prefix SHA缺口已由b6458b41f0fa32085fdd4cad0a528d98602569d2以最小方式修复:seal复用既有final source SHA并更新ready record;依赖append-only source lineage,不做第二次final AST analysis。本文的Partially confirmed描述现在是历史审查发现,而不是当前实现状态。

0. Scope、状态与结论

  • 审查状态:Current / fixed-target read-only review。 只审查 agent-python-runtime 精确 commit b94c989785632d98634cdd5c2a6d4a1de6cc13ac,tree 6b8bb6a8d8274b8329a2aba444d13eac9fac19e9
  • 固定方式: 以该 commit 解出的隔离 snapshot /tmp/agent-python-runtime-review-b94c989 为源码读取基线;没有跟随 live checkout 漂移。源仓库未修改、未 commit/push,未运行 campaign 或 benchmark。
  • 严格范围: exact Guest analyzer、Host verified analysis、candidate/legality/pass registration、qualified call、physical pre-dispatch、prepared-region/staged observation、dynamic exact claim、finalize/orphan/cancel、source/argument/occurrence/replay 负例,以及 EAGER opportunity comparison。
  • 核心区分: AST candidate 不是 authority;authority/qualified call 不是 physical result;physical preparation 不是 logical effect;prefix identity 不是 final full-source identity。
  • Hypothesis disposition:Partially confirmed
    • Confirmed(streaming prefix lane): Analysis.SourceSHA256 的 prefix digest 经 QualifiedCall 直接进入 semantic-call staged identity;SealFinalSource 只更新父 controller 的 sourceSealed/finalSourceSHA256,没有把每个 staged observation promotion/bind 到 final full-source digest。
    • Refuted / 不适用于 ordinary one-shot lane: 非 streaming Analyze 接收完整 source;其 QualifiedCall.SourceSHA256 在该 lane 可是完整 source digest。因此不能把缺口扩大为所有 semantic pre-dispatch。
    • 仍然存在的保护: final execution request 必须逐字等于 GeneratedSource.Source(),且 controller 必须先 sealed;这阻止了任意 final source substitution,但不能反向证明已启动的 semantic-call observation 自己携带 final digest。
  • 影响判断: 当前是 source/claim identity contract gap,而不是本复核已经证明的任意 provider duplicate 或错误结果路径。它削弱“staged semantic result 已被最终完整 source 绑定”的可审计性;在当前 single-call/fresh-final-Guest 路径中,final-source gate 仍限制了可执行组合。最小修复见第 11 节。

1. 固定 target 与证据分层

1.1 Target identity

项目
Repository/Users/yuzhe/projects/agent-python-runtime
Commitb94c989785632d98634cdd5c2a6d4a1de6cc13ac
Tree6b8bb6a8d8274b8329a2aba444d13eac9fac19e9
隔离读取/tmp/agent-python-runtime-review-b94c989
live 初始状态main,HEAD 等于目标 commit;无未提交状态行
target commit 内容变化docs/evidence/prepared-data-phase3-v2.jsondocs/plans/2026-08-21-authority-preserving-prepared-data-autonomous-megagoal.md

目标 commit 的上述 prepared-data 文档属于相邻研究 lane;不能替代 semantic prefix 的 source/claim join 证据。

1.2 证据标签

  • Current: 目标 snapshot 中的 Go/C/Python source、测试、接口与验证逻辑。
  • Observed: 本次对固定 snapshot 运行的 focused package tests 返回 ok;这是测试执行结果,不是 wall-clock 或 interval-trace 结论。
  • Framing: docs/research/authority-preserving-prepared-data-contract-v1.md 与 source/semantic 研究文档给出的设计边界;它们是解释约束,不自动证明实现已满足每一项。
  • Historical: docs/research/semantic-speculation-phase3-campaign-result-v1.mddocs/evidence/semantic-predispatch-experiment.jsondocs/evidence/source-prefix-overlap-v1.jsondocs/evidence/source-prefix-day-trip-evidence-v2.json 中的旧实验/报告。部分 producer/harness identity 不是本 target commit,不能作为 target-bound certification。
  • Deferred: 多个相同 capability+arguments 的 streaming occurrence 在 unchanged Broker 接口上如何携带 exact occurrence;semantic-call 的 prefix→final promotion 测试与 adapter。
  • Unsupported: 本文不声称自然 workload speedup、wall-clock dominance、observed interval trace、same-Guest analyzer continuation、任意 Python 支持、generic object ABI、cache/coalescing、writes 或 EAGER dominance theorem。

2. 端到端 sequence:两条 Guest lane 与一条 Host claim lane

2.1 Exact Guest analyzer lane

Host Request{Source, Bindings, Capabilities}
  -> runtime/semantic.Analyze
  -> exact target Guest runner.AnalyzeSemantic
  -> guest runtime_analyze_source
  -> agent_runtime.semantic.analyze_request_json
  -> canonical Analysis JSON
  -> strict DecodeAnalysis + request/identity re-check
  -> AnalyzeVerified / VerifiedAnalysis

具体锚点:

  1. runtime/semantic/analyzer.go:117Analyze 将 request canonicalize 后调用 analyzer.AnalyzeSemanticanalysisMatchesRequest 重新计算 source digest,并检查 analyzer/artifact/profile/import-closure/capability-plan 绑定。
  2. runtime/engine/wazero/engine.go:750-804Engine.AnalyzeSemantic 每次 instantiate 一个 authority-free analyzer Guest,调用 _initializeruntime_initruntime_analyze_source,随后 close;它不是最终执行 Guest 的 continuation。
  3. guest/src/runtime.c:346-370runtime_analyze_source 只调用 Guest 模块 agent_runtime.semantic
  4. guest/bootstrap/agent_runtime/semantic.py:972analyze_request_json 负责 exact target-Guest 的 semantic analysis;Host 不用自己的 Python parser 代替它。
  5. runtime/semantic/analyzer.go:24-65AnalyzeVerified 只接受 concrete Wazero engine/verified authority-free properties;VerifiedAnalysis 是 Host TCB 内的 opaque qualification,不是对 hostile in-process Host 的独立签名信任根。

2.2 Candidate、legality 与 pass registration

runtime/semantic/contract.go 将 Guest 返回的数据限定为 body-free semantic facts:

  • CallSitecontract.go:119-128):ID、span、capability、control region、necessarily-reached、canonical arguments、dynamic occurrence。
  • CandidateRegioncontract.go:135-150):control/data predecessor、live-ins/live-outs、effects、capability occurrence、barriers、rejection reasons。
  • Analysis.Validatecontract.go:180-314):schema/digest、call-site coverage、candidate-region coverage、排序唯一性、span containment、occurrence bijection、referent 与 effect coverage。
  • CandidateRegion.LocallyReusablecontract.go:152-158)只代表 analyzer-local shape,不能 issue、transport、cache 或 replace。
  • Plan/Region.Reusablecontract.go:329-400plan.go:33-96)仍是 Host 侧 plan facts;candidate/whole-run plan 不直接产生 physical operation。

Pass registration 在 runtime/passregistration/registration.go:16-59

  • semantic_pre_dispatch 版本为 pysolate.semantic-pre-dispatch-pass.v0,consumer 是 overlay_only
  • overlay bindings 包括 source/AST/analysis/analyzer/profile/import/plan/pass-config/occurrence;不包含 FinalSourceSHA256
  • prepared_pure_region 的 execution-patch bindings 才包含 FinalSourceSHA256,这是相邻 patch lane 的区别。
  • runtime/semantic/planner.go:110-208BuildSourceBoundPlan 生成 documents/occurrences/pass decisions,并将 CanPreissue 结果放入 private qualified map;public projection 不暴露 handler、Broker pointer 或 executable IR。

因此:AST 出现、candidate region、read_only/idempotent、pass enabled 都不构成 Host authority。

2.3 Host qualified call 与 physical pre-dispatch

runtime/semantic/legality.go 是唯一的 semantic-to-capability join:

  1. CanPreissue / CanPreissueStreamingPrefixlegality.go:243-324)先验证 VerifiedAnalysis、Plan identity、exact call site、context/budget、PreDispatch qualification、streaming observation binding、canonical arguments 与 resource identity。
  2. QualifiedCalllegality.go:152-175)的 private fields 绑定 source digest、call-site、capability、canonical argument digest、resource、dynamic occurrence、spec/handler/plan/grant、epochs、privacy、lineage、budget 与 span。
  3. streamingPrefixSpeculationAllowedlegality.go:326-376)只允许 straight-line、无 data dependency/barrier、无 publish/unknown effect、前驱也是 canonical unique call 且 unclaimed disposition 为 discard-with-disposition 的 look-ahead;conditional/data-dependent/publishing/unknown predecessor fail closed。
  4. QualifiedCall.ExpectedObservationClaimlegality.go:229-240)把 source digest 与 claim identity 放进 exact claim;CanClaimStagedObservationlegality.go:400-411)要求 claim 完全 equality 且 Ready。

runtime/capability/predispatch.go:31-108PreparedPreDispatch

  • PreparePreDispatch 只校验 sealed capability registration、live-only contract 与 canonical arguments,不启动 work。
  • Call 是 one-shot physical handler invocation,外部 launcher/scheduler 负责 start;handler/invalid-result/error 被编码成 staged logical outcome;不把结果当作 Guest logical call。
  • PhysicalResultBytes、provider cost、physical start/finish 与 logical claim 分开。

2.4 Staged observation 与 unchanged dynamic claim

runtime/streaming/observation.go:26-91ObservationIdentity 只存 bounded identities,不存 body/path/credential:

  • ObservationBindingStreamSuiteObservationBindingSemanticCall 是互斥 binding kinds。
  • 注释与 Validate(sealed) 明确规定:sealed identity 必须有 final full-source digest;provisional identity 不能猜 final digest。
  • 但 semantic call 分支(observation.go:82-86)要求 !sealed 直接无效,因此当前 semantic-call object 只能以 sealed identity 建立。
  • NewStagedObservationobservation.go:128-135)依据 SourceSHA256 != "" 判定 sealed;BindSourceobservation.go:138-149)只适用于 provisional record。

未改变的 Guest call 通过 runtime/engine/wazero/engine.go:1216-1258hostCall 进入 Broker:

Guest dynamic call
  -> hostCall
  -> Broker.Call / Broker.CallStreaming
  -> normal capability + schema validation
  -> configured StagedObservationClaimer.Claim(capability, canonical arguments)
  -> exact staged record Consume(identity)
  -> logical claim/result/error

runtime/semantic/predispatch.go:222-275 的 child SemanticPreDispatch.Claim

  • mismatch 的 capability/arguments fail closed;不发第二次 live provider call。
  • CanClaimStagedObservation 对 claim identity 做 exact equality。
  • record.Consume(identity) 是 one-shot;成功后 logical++、disposition=consumed

对于 ordinary one-shot,NewSemanticPreDispatch 的 exclusive dynamic-call 要求(predispatch.go:121-147)限制为一个 exact call surface;对于 streaming controller,StreamingSemanticPreDispatch.Add 可持有多个 child,但其 Claimstreaming_predispatch.go:132-172)从 Broker 仅收到 capability+arguments,选择第一个未 claim 的相同 capability+arguments entry。后者的多 occurrence exactness 见第 9 节 Deferred。

3. Streaming prefix lifecycle 与 physical/logical ledger

source chunk visible
  -> ShouldAnalyzePrefix (skip-only)
       false -> RecordSkippedPrefix;不 mint authority
       true  -> exact Analyze(prefix)
  -> AdmitVerifiedPrefix
       -> analysis.SourceSHA256 == sha256(exact prefix)
       -> CallSite -> CanPreissueStreamingPrefix
       -> QualifiedCall
       -> StreamingSemanticPreDispatch.Add
            -> reserve one budget
            -> PreparedPreDispatch.Start/Call
            -> child staged physical outcome
  -> all chunks consumed; pending analyses joined in schedule order
  -> SealFinalSource(full source)
       -> controller.sourceSealed=true
       -> controller.finalSourceSHA256=sha256(full source)
  -> ExecuteGeneratedSource...
       -> request.Code == exact generated full source
       -> fresh final Guest.Run
       -> unchanged Broker dynamic boundary Claim

对应 symbol:

  • runtime/semantic/prefix_readiness.go:12-58ShouldAnalyzePrefix 是 Host-owned skip-only lexical screen;true 只请求 exact analysis,false 只能省略 analysis。
  • runtime/semantic/prefix_execution.go:45-195GenerateVerifiedSourceWithPreDispatch 累积 append-only chunks,按 scheduled prefix order commit analysis,任何 analysis/admission/seal error 都 deferred finalize false。
  • runtime/semantic/streaming_predispatch.go:290-345AdmitVerifiedPrefix 要求 analysis digest 等于该 prefix,并以 capability+span+arguments digest 去重;RecordSkippedPrefix 只推进 visible source。
  • runtime/semantic/streaming_predispatch.go:379-403SealFinalSource 要求 append-only/final suffix/prefix newline,并设置父 controller 的 sourceSealedfinalSourceSHA256
  • runtime/semantic/prefix_execution.go:199-315ExecuteGeneratedSourceObserved/Outcome 要求 final request code 逐字等于 generated source,父 controller sealed 且 digest 相等,然后只允许一次 fresh final execution。

物理/逻辑 ledger:

阶段owner允许的含义不允许升级成
candidate/ASTexact Guest + Host decodersyntax/semantic factauthority 或 logical reach
QualifiedCallHostexact plan/occurrence/policy/budget proof已发生 physical read
PreparedPreDispatchHost capabilityone-shot physical attempt/outcomePython logical call、cache hit
StagedObservationRun-private Host recordbounded result + identity + terminal statedurable/global cache
unchanged Broker callGuest dynamic occurrence + Host Brokerexact logical claim/consumearbitrary source substitution
FinalizeHost lifecycle ownercancel/orphan/retire unclaimed physical workretroactive logical success

4. Final-source identity hypothesis:逐符号独立复核

4.1 Contract expected by the generic observation API

ObservationIdentity.Validate 的 contract 是:

provisional observation: SourceSHA256 == ""
  -> exact final SourceSeal / final-source adapter
  -> BindSource(final full-source digest)
  -> sealed semantic/stream observation

SourceSeal.BindObservationruntime/streaming/source.go:101-125)确实实现了这类 promotion,但它只接受 stream_suite observation,并要求 suite range/digest 与该 exact source seal 的 admitted suite 相符。它不能自动接受或改写 semantic_call

4.2 Semantic prefix production path

逐符号追踪结果:

  1. StreamingPrefixAdmission.AdmitVerifiedPrefixstreaming_predispatch.go:290-345)从 analysis.SourceSHA256 得到当时 prefix 的 digest。
  2. CanPreissueStreamingPrefixlegality.go:253-324)在构造 QualifiedCall 时把 analysis.SourceSHA256 直接写入 call.sourceSHA256legality.go:307-309)。
  3. StreamingSemanticPreDispatch.Addstreaming_predispatch.go:94-129)将该 call 交给 newSemanticPreDispatch(call, ..., false);这里没有 final-source 参数,也没有 provisional adapter。
  4. newSemanticPreDispatchpredispatch.go:125-178)把 call identity 直接复制到 ObservationIdentity,包括 SourceSHA256: call.sourceSHA256 与基于该 claim 的 ClaimIdentitySHA256,并以 sealed identity 启动。
  5. child physical completion(predispatch.go:185-220)调用 streaming.NewStagedObservation(controller.identity, encodedOutcome);因为 sourceSHA 非空,semantic-call observation 以 prefix digest sealed。
  6. SealFinalSourcestreaming_predispatch.go:379-403)只写父 controller 的 sourceSealedfinalSourceSHA256,没有遍历 entries/child/record,也没有修改 ObservationIdentity.SourceSHA256 或重算 claim identity。
  7. StreamingSemanticPreDispatch.Claimstreaming_predispatch.go:132-172)只检查 source seal gate、capability+canonical arguments,并转发到 child;child 的 CanClaimStagedObservation/record.Consume 仍按原始 prefix-bound claim/identity equality。
  8. ExecuteGeneratedSourceObserved 的 full-source equality(prefix_execution.go:286-315)只证明 final Guest request 与 GeneratedSource 相同,不能补写此前已 sealed 的 child observation identity。
  9. passregistration.OverlayBindingsregistration.go:46-50)没有 FinalSourceSHA256,而 PatchBindingsregistration.go:52-56)有;这与上述 semantic overlay 生产路径一致,是独立的 contract signal。

4.3 Disposition 与边界

判定:Partially confirmed

  • 对“prefix staged observation 没有 promotion 到 final full-source digest”这一具体 streaming hypothesis:Confirmed
  • 对“semantic pre-dispatch 普遍没有 final-source identity”这一泛化:Refuted / 不适用。ordinary one-shot 的 full-source analysis 可直接产生 full-source QualifiedCall.SourceSHA256;generic streaming.BindSource 也能处理某些 provisional stream-suite records。
  • 对 final execution 的防护:Current / confirmed。wrong request.Code 会在 ExecuteGeneratedSource...ErrAnalysisBinding 拒绝;source seal 前的 streaming claim 也被 controller 拒绝。因此当前不是“任意 final source 都能拿 prefix result claim”。
  • 对 identity contract:Current gapsemantic_call 被当作 sealed prefix identity,违反 observation.go 对 sealed identity 的 final-source 语义;父 snapshot 的 FinalSourceSHA256 不是 record-level rebind。

4.4 影响分层

  1. 直接 safety boundary(当前保留): final generated source 与 final run request 的逐字 equality;source seal gate;one-shot budget;normal Broker/schema gate;mismatch 不 fallback 到第二次 live call。
  2. 当前缺口: staged record 的 claim identity 无法独立回答“此 physical result 属于哪个 final full source”;父 controller 字段不能替代 child record identity。
  3. 未证明为当前 defect 的部分: 本次没有通过一个可执行 exploit 证明错误 provider result 被错误 source 消费;当前 narrow path 的 final seal/ordered prefix 约束降低了这一风险。
  4. 论文/答辩可说: “Host 可以对 source-prefix 产生 bounded staged opportunity,并在 final source seal 后开放 unchanged dynamic claim。”
  5. 论文/答辩不可说: “每一个 prefix-staged semantic result 已由最终完整 source digest 密码/record-level 绑定。”

5. Candidate、authority、physical preparation、logical effect 的边界

Host-owned

  • capability registry、sealed Plan、grant/spec/handler、PreDispatch contract;
  • analyzer artifact、execution profile、import closure、source/AST/analysis/plan digests;
  • prefix accumulator、append-only/final source check、final digest、budget reservation、privacy/freshness/lineage;
  • CanPreissue*CanClaimStagedObservationPreparedPreDispatch、staged record、Broker lifecycle、workspace publish/discard;
  • source-bound resolver/receipt identity,以及 semantic overlay 的 opaque private fields。

Guest-owned / exact Guest oracle

  • CPython target 的 compile/AST/semantic facts、call-site span、candidate region、barrier/effect facts;
  • unchanged final Python 的 actual control flow 与 dynamic Broker occurrence;
  • final Guest 的 result/error envelope、异常位置与 ordinary call semantics。

Shared / explicit joins

  • Host 发送 bounded source/request,exact Guest 返回 canonical body-free facts;Host strict decode/recompute 后才生成 VerifiedAnalysis
  • Guest candidate 与 Host Plan 必须逐项 join;candidate 不能 mint authority。
  • physical read 只能由 Host qualification + budget + capability start;physical completion 不计为 logical call。
  • unchanged dynamic occurrence 才能消费 exact staged result;claim 失败不发第二次 physical provider call。
  • final source 需要同时约束 execution request 与 staged observation identity;当前第二个 join 在 streaming semantic-call record 上缺失。

6. Lifecycle、失败语义与 terminal disposition

事件当前行为证据锚点
no Host qualification / no Planno physical attempt;ordinary path 或 rejectionlegality.go:257-305legality_test.go:13-61
prefix re-analysisseen occurrence key 去重,不重复 issuestreaming_predispatch.go:94-129streaming_predispatch_test.go:78
source/analysis binding mismatchfail closedAdmitVerifiedPrefix:302-305prefix_execution.go error/defer path
argument/capability mismatchclaim rejected;不 fallback duplicate live requestpredispatch.go:222-275predispatch_test.go:122-149broker_test.go staged mismatch case
source seal before claimcontroller rejects claimstreaming_predispatch.go:132-140
physical handler errortyped handler_error/failed outcome;不等于 logical successcapability/predispatch.go:84-107
invalid result/schema/budgettyped invalid/rejection;不发布 logical resultcapability/predispatch.go:99-107predispatch_test.go:55-120
final Guest/run errorchild cancelled/failed;workspace discard;Finalize(false)predispatch.go:312-376prefix_execution.go:45-195
success but occurrence not reachedready unclaimed result becomes orphaned;不变成 cache hitpredispatch.go:312-351predispatch_test.go:324-397
cancellation while physical read runschild context cancelled/waited;terminal disposition retainedpredispatch.go:278-310predispatch_test.go:218-291
replay/second consumeStagedObservation one-shot terminal state rejects consumeobservation.go:128-203observation_test.go:55-149
late completion after finalizationparent finalized/source sealed 后不得新增;terminal record 不可再次 claimstreaming_predispatch.go:104-112,174-190predispatch.go:312-351

timed_outlatefallback_playback 在接口中可表达,但本 lane 没有足够 producer-level path 把它们端到端证明;不要把枚举存在升级为已观察覆盖。

7. Negative controls 与 occurrence/replay 审查

已有且有效的负例

  • source mismatch: integration/e2e/streaming_semantic_predispatch_test.go:175-178generated.Source()+"# mismatch\n" 调用 final execution,期待 ErrAnalysisBinding
  • argument/capability mismatch: runtime/semantic/predispatch_test.go:122-149runtime/semantic/streaming_predispatch_test.go:103-125;normal Broker schema gate 后 claim fail closed。
  • occurrence identity at record level: runtime/streaming/observation_test.go:38-53 的 same arguments/different occurrence 不匹配;observation_test.go:151-176 的 semantic-call identity 要求 exact claim 与 budget。
  • replay/terminal: observation_test.go:55-149 覆盖 final source binding、consume once、terminal disposition;predispatch_test.go:14-54 覆盖 unchanged Broker boundary 一次 claim。
  • unreached/orphan/cancel: streaming_predispatch_test.go:127-153predispatch_test.go:261-397 覆盖 finalize、unclaimed disposition、cancel 与 wrapper/Broker failure。
  • candidate/legality: legality_test.go:13-180 覆盖 verified exact call、frozen context、exact claim、unsupported shared questions 与 exclusive dynamic-call gate;pass_registration_test.go:9-78 覆盖 unknown/duplicate/consumer drift。

仍然缺失或只能 Deferred 的负例

  1. StreamingSemanticPreDispatch 可以保存多个 child;Claim 的 public Broker shape 只有 capability+arguments,并按 entries 顺序选第一个匹配者(streaming_predispatch.go:142-171)。虽然 prefix admission 按 source order 加入,当前 tests 没有证明两个不同 span、相同 capability+arguments 在异常/分支/多 occurrence 下仍能与 exact dynamic occurrence 双向 bijection。
  2. ObservationIdentity 本身有 CallSiteID,但 streaming parent claim 不把 dynamic call-site token 带入 Broker;最小的 fail-closed 选项是禁止同一 capability+canonical arguments 的多个 pending occurrence,或扩展 Host-owned claim adapter/multiplexer 明确传递 occurrence。
  3. 没有现有测试断言:prefix digest 与 final digest 必然不同的 append-only suffix 下,每个 semantic-call record 被 promotion 后才可 claim;这正是本次 hypothesis 的独立复核缺口。

8. Test 与 machine-readable evidence

8.1 本次实际运行(固定 snapshot)

命令:

GOCACHE=/tmp/agent-python-runtime-review-gocache \
GOPATH=/tmp/agent-python-runtime-review-gopath \
go test ./runtime/semantic ./runtime/streaming ./runtime/capability

结果:三个 package 均 ok(semantic 0.338s、streaming 0.838s、capability 0.809s)。另运行:

go test ./integration/e2e \
  -run '^TestRealGuestStreamingPrefixesPreDispatchThreeReadsBeforeSourceFeedCompletes$' \
  -count=1

结果:ok github.com/bkmashiro/agent-python-runtime/integration/e2e 0.319s。这些是 focused correctness test results;没有由此宣称 timing dominance 或 observed interval trace。

8.2 Checked-in evidence 的保守解释

  • docs/evidence/semantic-predispatch-experiment.json 含 artifact/source/Plan digest、baseline/semantic result digest 与 physical/logical counters,但没有足以把 producer、harness、checker 全部绑定到本 target 的 provenance packet;标为 Historical / evidence limitation
  • docs/research/semantic-speculation-phase3-campaign-result-v1.md 明确是 frozen synthetic campaign result,且其 campaign source commit 不是本 target;不重跑、不把它当当前 target 的 runtime certification。
  • docs/evidence/source-prefix-overlap-v1.jsonsource-prefix-day-trip-evidence-v2.json 的 producer/harness commits 也不是本 target;它们最多提供 mechanism framing,不支持 natural speedup、wall-clock dominance 或本 target 的 final-source identity closure。
  • target commit 内 docs/evidence/prepared-data-phase3-v2.json 的 final-source/release/object claim 字段属于 fixed NumPy prepared-data lane;不能证明 semantic ObservationBindingSemanticCall 的 prefix promotion。

9. EAGER:只做 opportunity-level comparison

当前 research comparator 的 contract 在 research/semanticspeculation/eager_contract_types.go:39-80,prepare builder 在 eager_prepare.go:13-79

  • EAGER-style gate 使用 target Python、complete top-level statement、one-token lookahead、persistent interpreter/dynamic batching;dynamic names/denied modules 触发 suffix seal,previous prefixes 不 replay。
  • BuildEagerComparator... 发送 begin/chunk/finish prepare fragments 给 research-only eager_comparator namespace;不是 production semantic pre-dispatch consumer,也不等于 Host-owned staged typed object。
  • semantic pre-dispatch 不保留 final Guest Python heap/frame:它使用 exact analyzer Guest(可多次独立 request)、Host physical prepared read、Run-private staged observation,再用 fresh final Guest 执行 unchanged source。

机会层解释: 在某些 source-generation tail 与 early Host read 能重叠的形状中,Pysolate 的 semantic path 可以暴露 EAGER-style “execute while generating” 不同的 opportunity:它移动的是显式授权的 physical work,不把更宽的 interpreter state/authority 留在持续运行的 Guest 中。代价是 exact analysis、qualification、budget、staging、claim、final fresh Guest 与 cleanup overhead;单次运行可能更慢。EAGER 也有 persistent state、suffix policy 与研究限定。故这里只能比较安全边界和可暴露的 opportunity,不能声称谁在 wall-clock 上支配谁。

10. Trade-offs 与拒绝的替代解释

Design trade-offs

  • exact Guest analyzer 而非 Host parser: 保持 target CPython semantics 与 artifact provenance;代价是 analyzer instantiate/close 成本和不能复用跨 Run mutable state。
  • skip-only lexical readiness: false positive 只增加 exact analysis,false negative 只少 speculation;避免 lexical candidate 直接获得 authority,但不表达任意 Python control flow。
  • one-shot Host staged observation: 物理/逻辑/terminal 语义简单且不引入 durable cache;代价是不可用作全局 coalescing,也需要 final-source join。
  • fresh final Guest: 不把 analyzer frame、globals、WASM memory 或 native state 当作 continuation;代价是不能宣称 same-Guest continuation。
  • opaque Host plan/qualified call: 能保留 authority boundary;代价是 Broker public shape 不携带完整 occurrence token,multi-occurrence 需要额外 adapter 或 fail-closed cardinality。

明确拒绝

  • candidate region、AST call、工具 schema、变量名、read_onlyidempotent 不是 Host contract。
  • PrepareQualifiedCall 不是 physical start;physical completion 不是 logical call/cache hit。
  • prefix digest、monotonic append-only、父 controller FinalSourceSHA256 不能自动等价于每条 staged record 的 full-source identity。
  • SourceSeal.BindObservation 的 stream-suite promotion 不能自动修复 semantic-call record。
  • test 通过、non-empty source_commit、artifact SHA 字段或 body_safe 字段都不是独立 producer/consumer verification。
  • authored source schedule、historical campaign 或 comparator report 不能被写成自然 agent latency、wall-clock dominance 或 observed interval trace。

11. 最小修复建议(不在本审查中实施)

  1. 为 streaming semantic-call 增加 Host-owned final-source promotion seam。prefix 阶段把 prefix digest 作为 provisional provenance 单独保存,不把它作为 sealed ObservationIdentity.SourceSHA256
  2. SealFinalSource(finalSHA) 内,先在 controller barrier 下对所有 child entry 做一次原子 promotion:将 final full-source digest 写入每条 observation identity,并以 final source 重建 ExpectedObservationClaim/ClaimIdentitySHA256;任一 entry 已 terminal、identity 不匹配或 promotion 失败则整体 fail closed,不开放 claim。
  3. 由于当前 ObservationBindingSemanticCall.Validate(false) 禁止 provisional semantic call,最小实现可以增加一个窄的 Host-owned semantic-call provisional/promotion adapter,或让 child 在 physical completion 前只保存 typed outcome,待 final seal 后以 final identity materialize record;不要简单放宽到“任意 unsealed semantic call 可 claim”。
  4. 增加 RED tests:
    • prefix digest != final digest 且 source 只 append 时,record 必须先 final-bind 才能 exact claim;
    • wrong final source、non-prefix replacement、wrong occurrence/call-site、argument drift、late/terminal/replay 均拒绝;
    • claim identity 与 record identity 都必须含 final digest;父 snapshot 字段单独变化不得使测试通过。
  5. 对多 occurrence:若不扩展 Broker/Host adapter,则对同一 capability+canonical arguments 的多个 pending streaming entries 直接拒绝;否则加入 Host-owned occurrence multiplexer 与 bijection/race tests。
  6. 不把本次修复顺带扩大为 generic cache、coalescing、same-Guest continuation 或 arbitrary Python optimizer。

12. What this implementation does not establish

  • 不建立 semantic analysis 与 final execution 的 same-Guest continuation;实际是 analyzer Guest → Host staged physical work → fresh final Guest。
  • 不建立 candidate-to-authority 自动升级;所有 authority 来自 Host sealed Plan/contract/context。
  • 不建立 semantic-call staged record 的 final-source record-level cryptographic binding(streaming prefix lane 当前缺口)。
  • 不建立多 occurrence exact claim 的通用 public Broker ABI;当前 positive path 是 narrow/single exact call,streaming multi-entry 场景仍需 Deferred 负例。
  • 不建立 read-only external operation 的无副作用事实;provider cost、workspace/file observability、timing 与 cancellation 仍属于 Host policy。
  • 不建立 prepared result 的 durable/global cache、coalescing、replay 或 cross-Run reuse。
  • 不建立任意 Python purity、动态 control flow、writes、captured playback、generic typed object ABI、自然 workload prevalence 或生产 readiness。
  • 不建立 wall-clock dominance、production latency、或 observed interval trace。

13. 答辩版解释

Pysolate 不是看到 AST call 就提前执行。Exact target Guest 先对实际 source(或可见 prefix)产生 bounded semantic facts;Host 再把这些 facts 与 sealed capability Plan、canonical arguments、handler/spec/grant、freshness/privacy/lineage 和 per-Run budget 做 fail-closed join,才允许一次可丢弃的 physical preparation。原始 unchanged Guest 的 dynamic occurrence 仍是唯一的 logical claim point;没到达、source invalid、argument drift、cancel、run failure 或 finalization 的 work 只能被拒绝、cancel 或 orphan,不能变成 cache hit,也不能通过 mismatch 发起第二次 live request。

对 streaming semantic prefix,必须进一步区分三种 identity:prefix analysis identity、final execution source identity、logical occurrence identity。当前 target 已有 final source seal gate 和 exact final request equality,但 SealFinalSource 没有把已创建的 semantic-call staged record 从 prefix digest promotion 到 final full-source digest。因此可以诚实宣称“bounded source-prefix staged opportunity + final-source claim gate”,不能宣称“每一条 prefix-staged semantic result 已完成 final-source record-level binding”。EAGER 只能作为 opportunity-level comparator;本审查不作 wall-clock dominance 判断。