打开文档导航

Pysolate streamed source 与 identity 单切片源码审查

基线状态:Historical fixed-target dossier。 本文保留 b94c989...b6458b41... 的修复过程;本科生 guide 当前 target 是 94fab78...。新的 source-bound pass registration/outcome 关系见 implementation/10-source-bound-pass-pipeline.md

Post-review update(Current): 本文固定审查基线仍是b94c989...。随后b6458b41f0fa32085fdd4cad0a528d98602569d2已关闭第0节发现的prefix SHA残留:final source通过append-only gate后,ready child与staged record改用已有final source SHA;不会重新解析final AST,也没有新增identity字段。source aggregate同时加入1 MiB上限。下文相关段落保留为发现过程,不再表示当前HEAD仍有该缺口。

0. 审查边界与状态

  • 审查状态:Current / fixed-target read-only review。 本文只审查 agent-python-runtime 的精确 commit b94c989785632d98634cdd5c2a6d4a1de6cc13ac,其 tree 为 6b8bb6a8d8274b8329a2aba444d13eac9fac19e9

  • 取证方式: 从该 commit 解出的隔离快照 /tmp/pysolate-target-b94c989 阅读;没有跟随 live 工作树漂移。源仓库审查开始与结束时均为 clean main## main...origin/main)。

  • 范围: streamed source admission、prefix identity、Guest syntax/compile gate、source sealing/final identity、same-Guest 与 fresh execution 边界、occurrence/provenance binding、late facts、discard/cancel/failure 语义,以及对应 overlap evidence。

  • 明确不展开: prepared-data、通用 benchmark 目录、COW/冷 I/O/缓存/全量性能结论。

  • 总体判断: 当前实现有三条相邻但没有完全合并的路径:

    1. runtime/streaming.SourceStream 是 Host 状态机 + GuestCompiler oracle 的 S1 协议;
    2. runtime/engine/wazero.Engine.RunStream + Guest _StreamingSession 是实际的单 Guest preparation/stream 执行 seam;
    3. runtime/semantic.GenerateVerifiedSourceWithPreDispatch 是 prefix analysis + Host pre-dispatch + final fresh Guest 的语义路径。

    它们分别证明了增量 admission、同一 Guest 内的 preparation execution、以及 source-prefix overlap;不能仅凭相同的“stream/source”命名拼成一个已经具有 full-source identity 的统一 claim。 当前最重要的 source blocker 是:semantic streaming pre-dispatch 的 staged observation 在 prefix 阶段已把 prefix digest 放进 SourceSHA256,最终 SealFinalSource 只更新 controller 的汇总字段,没有把每个 staged observation promotion/bind 到最终 full-source digest。

1. Source symbols 与权威边界

精确源路径与 symbol作用 / authority
S1 Host protocolruntime/streaming/source.go: SourceStream, GuestCompiler, CompileResult, SourceSeal, SourceSeal.BindObservationHost 只校验 append-only、byte range、digest、preamble freeze 与状态转移;Python 完整性/合法性由注入的 exact Guest compiler oracle 返回。该 package 本身不解析 Python。
S1 staged identityruntime/streaming/observation.go: ObservationIdentity.Validate, NewStagedObservation, BindSource, Consume, Terminate只存 identity 与有界 result;支持 provisional/sealed 两阶段,sealed identity 按注释应含最终完整 source digest。
实际 Guest streamguest/bootstrap/agent_runtime/__init__.py: _StreamingSession.chunk, _StreamingSession.end, _stream_begin/_stream_chunk/_stream_endtarget Guest 使用 codeop.CommandCompiler、Guest AST/source contract、future flags 与一个私有 namespace;完整 suite 才执行。
Wazero seamruntime/engine/wazero/engine.go: Engine.RunStream, runWithPrepares, callSourceValidation保持一个 fresh Guest module 接收 Host-trusted preparation fragments;先对普通 RunRequest.Coderuntime_validate_source,再逐片调用 runtime_prepare,最后 execute
Prepare builderruntime/streaming/prepare.go: BuildBeginPrepare, BuildChunkPrepare, BuildEndPrepare将输入 canonicalize 后以 Python 字符串 literal 注入 _stream_begin/_stream_chunk/_stream_end;不是独立的 authority issuer。
semantic prefix admissionruntime/semantic/prefix_execution.go: GenerateVerifiedSourceWithPreDispatch只接收已到达的 append-only chunks;按 prefix skip/analyze,按 schedule order 提交 verified analysis,最后 SealFinalSource。失败 deferred controller.Finalize(false)
exact analyzerruntime/semantic/analyzer.go: Analyze, AnalyzeVerified; runtime/engine/wazero/engine.go:AnalyzeSemantic每次 analysis request 由 exact target Guest 新建 analyzer module;属性、artifact、execution profile 与 request bindings 必须相等。
semantic Host gateruntime/semantic/legality.go: CanPreissueStreamingPrefix, QualifiedCall, ObservationClaimcandidate/analysis 只能产生拒绝理由或 opaque Host QualifiedCall;资格要求 canonical arguments、capability plan、policy/grant、freshness、privacy、budget 等。
streaming semantic controllerruntime/semantic/streaming_predispatch.go: StreamingPrefixAdmission, StreamingSemanticPreDispatchprefix arrival 后可 Add 一次物理 read;Claim 在 source seal 前拒绝;Finalize 将未消费 observation 标为 orphan/cancel。
final executionruntime/semantic/prefix_execution.go: ExecuteGeneratedSourceObserved, ExecuteGeneratedSourceOutcomerequest code 必须逐字等于 GeneratedSource.Source(),controller 必须已 sealed 且 digest 相等;同一个 GeneratedSource 只允许一次 final execution。
ordinary source-bound provenanceruntime/semantic/planner.go: BuildSourceBoundPlan, NewSourceBindingResolver; runtime/receipt/receipt.go: BindSource对完整 source 的 necessarily-reached、exclusive、programmatic occurrence 做 Host resolver;unique match 才能把 SourceBinding 并入 receipt identity。此路径不是 streaming semantic prefix promotion。

2. 三条路径的 sequence/state path

2.1 独立 S1 SourceStream 状态机

NewSourceStream(GuestCompiler)
  -> Begin
  -> Append(chunk)
       -> append exact UTF-8 bytes
       -> GuestCompiler.Compile(full prefix)
       -> validate status/ranges/preamble/digests
       -> admit newly complete SuiteRecord
  -> ...
  -> End
       -> final GuestCompiler.Compile(full source)
       -> require CompileComplete
       -> require frozen preamble
       -> SourceSeal{full source digest, suite records, preamble}

关键状态是 streamNew -> streamStarted -> streamEnded,异常进入 streamFailed,显式取消进入 streamCancelled

  • CompileStatusCompileIncompleteCompileCompleteCompileInvalid;Host 不从 Python 文本推断这些值。
  • Append 对完整 source 设一 MiB 上限;Guest compiler error、invalid suite range、suite revoke、preamble change、digest mismatch 会 fail closed。
  • End 会再做一次 oracle call;incomplete 变为 ErrGuestIncomplete,非 complete 变为 ErrGuestRejected,未冻结 preamble 变为 ErrPreambleUnfrozen,均不产生 seal。
  • Cancel 明确“不调用 Guest oracle,不产生 seal 或 publication record”。
  • SourceSealDigest 是完整 source digest;每个 SuiteRecord 的 digest 是该 suite 的精确 byte slice digest,不是 AST/candidate digest。

重要组合事实(Current): 在固定 commit 中,NewSourceStream 的生产 caller 搜索只落到该 package 的测试;没有看到它直接接入 Engine.RunStream。因此它是可测试的 S1 protocol,不应写成“Wazero streamed execution 已经由此 SourceSeal 驱动”。

2.2 实际单 Guest streamed preparation/execution

streaming.ExecuteStream
  -> Engine.RunStream (requires Mechanisms.Streaming)
  -> runWithPrepares(streaming=true)
       -> Decode/Admit final RunRequest
       -> instantiate one fresh Guest module
       -> runtime_init
       -> runtime_validate_source(final request.Code)
       -> for each Host prepare fragment: runtime_prepare
            -> _stream_begin(inputs, budget)
            -> _stream_chunk(text)
                 -> append source + pending
                 -> Guest codeop compile
                 -> incomplete: wait for more text
                 -> complete: validate full source contract
                 -> execute one complete suite in private namespace
            -> _stream_end()
       -> execute(final request)
       -> Broker.Finalize(true) / close module
  -> streaming.finish
       -> close failure/error path
       -> response status == ok 才 Publish workspace attempt

Guest 侧 _StreamingSession.chunk 的 gate 顺序是:

  1. append exact text,并检查总 source 不超过一 MiB;
  2. self.compiler(self.pending, ..., "exec")None 只是 incomplete,SyntaxError/ValueError/TypeError/MemoryError 变成 invalid;
  3. _validate_agent_source(self.source, None):Guest source contract 检查 module docstring、__future__/static imports、late imports、dynamic import、eval/exec 等;
  4. pending 是 preamble 时在 import namespace 执行并合并;否则 seal imports、关闭 preamble、执行 complete suite;
  5. 记录 [start,end) byte range、suite digest、timeline。

end 会再次检查 pending 是否 incomplete,并重新验证完整 self.source;只返回 result/log/timeline/suite/eager count。_stream_eager_calls 在 capability prelude 中被初始化为空 map;当前 metadata 不会自动把任意 capability 变成 Guest eager dispatch。历史文档中的 literal eager-preflight 不能当作该 commit 的默认 policy。

这里“same Guest”成立的范围很窄:runtime_prepare 执行的 streamed suites 与最终 execute 共享一个 Wazero module/Guest namespace;它不等于 SourceStream.SourceSeal、semantic analysis 或 source-bound receipt 已自动接入该 namespace。

2.3 semantic prefix + pre-dispatch + fresh final Guest

Host source chunk arrives
  -> prefix_visible
  -> ShouldAnalyzePrefix?
       false -> RecordSkippedPrefix (只能前进 visible binding,不能发 authority)
       true  -> async exact Guest Analyze(prefix)
  -> commit analyses in prefix order
  -> AdmitVerifiedPrefix
       -> Analysis.SourceSHA256 == exact prefix digest
       -> CallSite -> CanPreissueStreamingPrefix
       -> QualifiedCall -> controller.Add
            -> reserve per-call budget
            -> start one PreparedPreDispatch physical operation
  -> source channel closes
  -> wait all pending analyses
  -> StreamingPrefixAdmission.SealFinalSource(full source)
       -> controller.sourceSealed=true
       -> controller.finalSourceSHA256=full digest
  -> ExecuteGeneratedSource...
       -> request.Code == exact full generated source
       -> controller snapshot sealed + full digest matches
       -> one fresh final execution Guest.Run
       -> normal Broker dynamic boundary may Claim staged result

ShouldAnalyzePrefix 是 Host-owned skip-only filter:词法候选、风险/opaque marker、binding transition 只能决定是否请求 exact analysis,不能 mint authority。AdmitVerifiedPrefix 要求 analysis 的 SourceSHA256 精确等于当时 prefix,并要求 source 单调增长;seen 以 capability + span + canonical arguments digest 组成的 pysolate.streaming-prefix-occurrence.v1 去重,避免 extended-prefix re-analysis 重发同一物理工作。

GenerateVerifiedSourceWithPreDispatch 对异步结果按 scheduleIndex 顺序 commit,因而后来的分析不能绕过较早 prefix;source channel close 后仍等待所有 pending analysis。任一 context/analyzer/admission/seal error 都触发 deferred controller.Finalize(false);成功 seal 后才返回 GeneratedSource

但是 analyzer 与 final execution 的 Guest 边界是 fresh execution,不是 same-Guest continuationEngine.AnalyzeSemantic 每次请求 instantiate/close 一个 analyzer module;ExecuteGeneratedSource 又接收另一个 Runner,在 source seal 后执行一次普通 Run。物理 staged read 在 Host PreparedPreDispatch 中运行,也不是把 analyzer Guest frame 恢复到 final Guest。

3. 三种 identity 必须分开

3.1 Source-prefix evidence(前缀证据)

它回答:“在某一时刻,Host 已收到哪些 exact source bytes,exact Guest 对这一 prefix 报告了什么,哪个 call-site 因而被考虑/qualified?”

当前字段/证据包括:

  • prefix sourcesha256(source)
  • Analysis.SourceSHA256
  • CallSite.ID、span、capability、DynamicOccurrence、canonical arguments digest;
  • QualifiedCall.SourceSHA256()(在 streaming path 中来自 prefix analysis);
  • StreamingPrefixAdmission.Snapshot.LastSourceSHA256
  • StreamingPreDispatchEventCallSiteID、arguments digest、prefix occurrence digest。

prefix digest 可以支持“当时已看到且被 exact Guest 分析的 source-prefix”这一事实,不能单独回答最终完整 source 是什么。

3.2 Full-source identity(完整 source 身份)

它回答:“最终被执行/封存的完整 source bytes 是否正是这一个 source?”

当前有两个正确但彼此独立的 seam:

  1. GeneratedSource.SHA256 + ExecuteGeneratedSourceObserved:request code 必须逐字等于 generated source,controller FinalSourceSHA256 必须相等;Wazero 的 runtime_validate_source 再做 final Guest source gate。
  2. streaming.SourceSeal.BindObservation:只接收 ObservationBindingStreamSuiteSourceSHA256 为空的 ready provisional record;要求 observation 的 suite range/digest 出现在该 seal 的 Suites 中,再调用 record.BindSource(seal.Digest)

这两个 seam 都是 full-source binding 的证据;但 semantic pre-dispatch 的 ObservationBindingSemanticCall 不调用 SourceSeal.BindObservation

3.3 Logical occurrence(逻辑 occurrence)

它回答:“完整程序的哪一个动态/静态 occurrence 消费了这个 capability 结果?”

  • semantic QualifiedCall/ObservationClaim 绑定 CallSiteIDDynamicOccurrence、span、canonical arguments、capability、spec/handler/plan/grant、stream/workflow/freshness/expiry/privacy/lineage、budget reservation。
  • 普通 source-bound path 在 NewSourceBindingResolver 中只为 exclusive && NecessarilyReached && ArgumentsCanonical 的 static site 建 binding;Broker request 必须是 programmatic、有 parent/call ID,且 capability + canonical args 只能 unique match。普通 direct call、non-programmatic、mismatch、ambiguous/non-exclusive 均不记录 source-bound evidence。
  • receipt.BindSource 会把 DocumentID、full SourceSHA256OccurrenceID、dynamic occurrence 与 span 纳入 receipt v3 identity;Guest wrapper 不能自行 author source ID。

不等价关系: prefix occurrence 去重 key pysolate.streaming-prefix-occurrence.v1 只含 capability、span 与 arguments digest;它是“prefix admission 去重 key”,不是 full-source document identity,也不是 logical receipt identity。

4. 当前 source blocker:semantic staged result 没有 final-source promotion

4.1 代码链

  • runtime/semantic/streaming_predispatch.go:AdmitVerifiedPrefixAnalysis.SourceSHA256 生成 QualifiedCall

  • StreamingSemanticPreDispatch.Add 调用 newSemanticPreDispatch

  • runtime/semantic/predispatch.go:newSemanticPreDispatchclaim.SourceSHA256 直接写进 ObservationIdentity.SourceSHA256,随后调用 identity.Validate(true)

  • 因此 prefix digest 已被当成“sealed” identity,NewStagedObservation 也按 SourceSHA256 != "" 走 sealed 分支。

  • StreamingPrefixAdmission.SealFinalSource 只写:

    controller.sourceSealed = true
    controller.finalSourceSHA256 = finalSHA

    它没有遍历 entry/record,把 observation 的 SourceSHA256 从 prefix digest 绑定/替换为 finalSHA,也没有用 SourceSeal.BindObservation 做 semantic-call promotion。

  • StreamingSemanticPreDispatch.Claim 的 dynamic claim 只按 staged call 的 capability/canonical arguments 与其原始 ObservationIdentity 消费;controller 的 FinalSourceSHA256 不进入该 observation 的 identity equality。

4.2 影响与边界

这是 source blocker,不是“仅缺一条展示字段”:

  • observation.go 的注释明确规定“sealed identities must include the final full-source digest”;semantic prefix path 却把 prefix digest 当 sealed。
  • ExecuteGeneratedSource 的 request-to-final-source equality 能证明 final Guest 执行了 exact full source,但不能反向证明此前已启动的 staged physical result 的 identity 也属于该 full source。
  • SourceSeal.BindObservation 自带的拒绝条件(stream_suite、ready、unbound, admitted suite exact match)不能修复 semantic semantic_call record;当前没有 Host-owned adapter/promotion。
  • 因此当前可安全陈述的是:“prefix analysis 产生了一个 source-prefix-bound staged opportunity,且 final source seal 是 claim gate”;不能陈述为“staged semantic result 的 observation/receipt 已经绑定最终完整 source”。

4.3 相关资源界限 gap

S1 SourceStream 与 Guest _StreamingSession.chunk 都显式限制一 MiB;但 GenerateVerifiedSourceWithPreDispatchsource += chunk 没有同等的 aggregate source/chunk bound。若 ShouldAnalyzePrefix 对所有 prefix 返回 false,source 可在 RecordSkippedPrefix 路径持续增长,直到下游 request/analyzer 失败;该 all-skipped oversized path 在现有 focused tests 中没有证明。故 semantic prefix API 不能自动宣称与 S1 相同的 bounded admission contract。

5. Host / Guest ownership 与 invariants

Host-owned

  • BeginConfig.Inputs canonical JSON、capability Plan、per-run pre-dispatch budget、artifact/profile/import closure/plan bindings。
  • append-only source accumulator、byte/range/digest comparison、preamble freeze state、final source digest、SourceSeal/GeneratedSource binding、workspace attempt Publish/Discard。
  • ShouldAnalyzePrefix 只做 skip;CanPreissueStreamingPrefix/CanClaimStagedObservation 是共享 fail-closed legality predicate;Add/Claim/Finalize 是 physical/logical lifecycle。
  • capability registry、spec/handler/grant/policy、canonical arguments、freshness/privacy/lineage、occurrence uniqueness。
  • source-bound resolver 与 receipt identity;external plugin 不能经 internal/sourcebinding.Authority 伪造 source-bound receipt。

Guest-owned / exact Guest oracle

  • CompileStatus、complete suite boundaries、CPython codeop.CommandCompiler completeness;
  • AST/source contract:top-level preamble、late/dynamic imports、eval/exec 禁止、compile flags;
  • actual Python control flow 与动态 Broker call occurrence;
  • Guest private namespace 中的 suite execution 与 result/timeline。

Shared / explicit joins

  • Host 给 exact Guest source/analysis request;Guest 返回 body-free canonical analysis/compile facts;Host 严格 decode、recompute/bind identity 后才生成 opaque qualification。
  • physical staged work 只能由 Host qualification + budget + prepared capability start;Guest syntax、candidate、AST、read_onlyidempotent 单独都不能 issue authority。
  • final execution 必须用 exact full source request;dynamic occurrence 仍是 logical effect 的唯一 claim point。

必须保持的 invariants

  1. Host 不用 Host Python parser 代替 target Guest compiler/analyzer。
  2. source prefix 只能单调追加;suite range half-open [Start, End) 且 digest 对 exact bytes。
  3. preamble freeze 后不能被后续 import 改写;late/dynamic import fail closed。
  4. 一个 qualified occurrence 最多一次 physical issue;budget reservation 是 per-run、不可重复。
  5. physical result 与 logical claim 分开;unreached qualified work 可 orphan,但不能被另一个 occurrence 因 arguments 相同而重放。
  6. source seal 前 StreamingSemanticPreDispatch.Claim 拒绝;final request source 不等于 generated source 时 ErrAnalysisBinding
  7. Broker mismatch 不启动第二次 live provider request;Claim 失败是 fail closed。
  8. success 仅在 Guest response status=ok 且 runner close 成功后 publish;run error、close error、malformed/non-ok response 都 discard attempt。
  9. SourceSeal.BindObservation 只允许 exact admitted suite observation;ready 以外、已 source-bound、wrong range/digest、semantic-call binding 均拒绝。
  10. provenance field 必须由 producer/consumer identity 一起解释;non-empty source_commitbody_safe 不是独立验证。

6. Failure、cancel、late facts 与 disposition

source admission

情形当前行为
empty/invalid inputs 或 empty chunkbuilder/stream API 直接拒绝;不进入 authority path
compiler 返回 incompleteprefix 可等待;EndErrGuestIncomplete,不 seal
compiler invalid / oracle errorstream failed;后续 End 不可 seal
suite range revoke/change/digest mismatchErrSuiteRevoked/ErrPreambleChanged/ErrSourceDigest,fail closed
duplicate EndErrStreamEnded
CancelstreamCancelled,不调用 oracle、不产生 seal/publication
Guest _StreamingSession exceptionGuest session ended;Wazero run error;streaming.finish close + attempt discard

semantic pre-dispatch

  • GenerateVerifiedSourceWithPreDispatch 在 context、analysis、admission、seal 任一失败时 deferred controller.Finalize(false);已启动的 child 会 cancel/wait,ready unclaimed result 最终为 cancelled,错误 physical call 为 failed
  • source seal 成功、final Run 成功但 occurrence 未达到时,SemanticPreDispatch.Finalize(true) 将 ready result 置为 orphaned 并清空 body;这是真实 speculative waste,不是 logical effect。
  • final Run 失败时 Finalize(false)cancelled;physical provider error 是 failed,context cancellation/deadline 是 cancelled
  • StagedObservation 还定义 timed_outlatefallback_playback,但固定 commit 的 production search 只在 validation/test 中出现;没有看到实际 producer 将它们设置为 late。这类 disposition 当前是 接口可表达,未由本切片证明已端到端覆盖
  • late analysis result 不会在 Complete/sourceSealed 后重新 Add:controller 已 sourceSealedfinalizedAdd 拒绝;generation 本身等待 pending results 后才 seal。late physical completion也不能通过已 terminal record claim。

7. Tests 与 machine-readable evidence

已实际运行(fixed-target snapshot)

/tmp/pysolate-target-b94c989 上运行:

GOTOOLCHAIN=go1.26.5 go test ./runtime/streaming ./runtime/semantic ./runtime/receipt ./runtime/capability -count=1

结果:四个 package 均 ok(分别约 0.274s / 0.575s / 0.306s / 0.897s)。没有运行 campaign、没有运行 benchmark、没有修改源仓库。

focused source/identity tests

  • runtime/streaming/source_test.go
    • quoting/canonical input 与 empty/invalid chunk gate;
    • complete/incomplete/invalid Guest oracle;
    • simple/multiline/compound suite、preamble freeze、late import/dynamic operation rejection;
    • append-only、duplicate End、Cancel。
  • runtime/streaming/observation_test.go
    • SourceSeal 只绑定 exact admitted suite observation;
    • semantic-call 与 stream-suite identity fields 分离;
    • source binding、consume once、terminal dispositions。
  • runtime/semantic/prefix_readiness_test.go
    • monotonic candidate transition、opaque definition、binding risk、pure-local skip;
    • skipped suffix 与 delayed exact analysis 的顺序/统计。
  • runtime/semantic/streaming_predispatch_test.go
    • prefix source binding、source seal gate、one-shot claim、mismatch/late cancellation/finalization 等 controller lifecycle。
  • runtime/semantic/legality_test.go / predispatch_test.go
    • exact plan/analysis/context/arguments/budget/observation identity,拒绝 unknown/mismatch,未消费 result 的 orphan/cancel。
  • integration/e2e/semantic_source_binding_test.go
    • 非 streaming 的 ordinary Run 上 real Guest programmatic receipt:receipt 的 SourceSHA256 == analysis.SourceSHA256、OccurrenceID/dynamic occurrence/span exact、handler 一次;这证明 ordinary source-bound resolver,不证明 streaming prefix promotion。
  • integration/e2e/streaming_semantic_predispatch_test.go
    • toolStarted < sourceFeedComplete 的 overlap;guestStarted >= sourceSealed 的 fresh final Guest boundary;wrong final source 拒绝;second execution 拒绝;logical/physical call count 1。

overlap evidence(必须保守解释)

research/workflowbench/source_prefix_overlap.go 的 validator 检查:

  • baseline generate_then_execute 的 tool start 不早于 generation complete;
  • streaming stream_while_generating 的 tool start 早于 generation complete;
  • 每 lane 结果 oracle、logical calls、physical dispatch、Guest starts、workspace identity/disposition 都通过;
  • medians 与 rows 可重算,speedup_supported 只是 baselineMedian > streamingMedian 的派生布尔值。

固定 commit 中的 checked-in artifacts:

  1. docs/evidence/source-prefix-overlap-v1.json:3 pairs,baseline_median_ns=2950046792streaming_median_ns=1533922917median_speedup_milli=1923,每 row logical_calls=1 / physical_dispatches=1 / guest_starts=1 / fallback=false / published
  2. docs/evidence/source-prefix-day-trip-evidence-v2.json:3 pairs,baseline_median_ns=2942787333streaming_median_ns=1537471584median_speedup_milli=1914,同样每 row 一次 logical/physical dispatch、一次 Guest、published。
  3. 两份 evidence 的 claim_boundary 都是 mechanism_fixture_bounded,但 producer identities 不是当前目标 commit:第一份 artifact/harness commit 为 501daef.../ca25b1...,第二份为 cb32e4.../d7baa9...。故它们是 Historical / evidence limitation,不能作为 b94c989... 当前实现的 target-bound certification。measurement_attempt=provenance-remediation-v2 与非空 identity field 也不等于独立重现。
  4. docs/evidence/observed-deepseek-stream-opportunity-v1.md 的 six accepted live provider streams 是 Observed opportunity projection:median complete Python source 8.465 s,first eligible call→source complete 0.362 s,相对 post-source parallel 的 median opportunity 0.281865792 s;该 replay 排除了 semantic analysis、staging、claim、Guest、workspace overhead,明确不建立 net speedup。

因此应写成:当前 fixture/e2e 证明了一个受控的 physical-start-before-generation-complete 区间;不能写成 natural-agent speedup、普遍 provider latency benefit、或没有 overhead 的 end-to-end dominance。尤其不能把 authored timed chunks(OffsetMS)产生的 overlap 叫作自然 Agent stream 的 speedup。

8. Trade-offs、拒绝的替代方案与待补证据

设计 trade-offs

  • Guest oracle 而非 Host parser: 保持 CPython target semantics,代价是每次 prefix analysis 的 Guest instantiate/close 成本和 artifact/profile provenance 约束。
  • skip-only lexical filter: false positive 只多一次 exact analysis,false negative 只少 speculation,避免 candidate 直接升级 authority;代价是保守、不能表达任意 Python control flow。
  • one-shot staged observation + no coalescing: identity 简洁、无第二次 provider dispatch;代价是同 capability/arguments 不能用全局 cache 跨 occurrence 复用。
  • final Guest fresh run: 不继承 analyzer 的 interpreter frame、globals、tables、native state 或 side effects,边界清晰;代价是不能声称 analyzer 与 final execution 是同一 Guest continuation。
  • private workspace attempt + publish/discard: invalid/abandoned suffix 不污染 base;代价是 staged result、workspace 与 final source 需要额外 join。

明确拒绝的替代解释

  • candidate list/AST/call appearance 不是 authority,也不是 final logical occurrence;
  • SourceSeal 自身不能把 stream-suite record 变成 semantic-call claim;需显式 Host adapter/promotion;
  • prefix digest 不是 full-source digest;source monotonicity 不是 cryptographic equality;
  • guestStartedsourceSealed 之后不是 same-Guest proof,只是 fresh execution ordering proof;
  • authored overlap rows 不是 natural-agent speedup,也不是 EAGER dominance theorem;
  • receipt 的 source_commit、evidence 的 artifact_source_commit、或 body_safe 字段不是 producer/consumer identity 的独立验证。

本 slice 应补的最小证据/修复

  1. 为 semantic ObservationBindingSemanticCall 增加 Host-owned provisional-to-final promotion:record 在 prefix 阶段必须保持 unbound/provisional,seal 时用 exact final digest + source/call-site/claim identity 重建或严格 bind;禁止把 prefix digest 当 sealed full-source digest。
  2. 增加测试:prefix digest 与 final digest 不同但 source 单调时,physical staged result 可以被 final-source-bound promotion 后 exact claim;wrong final source、wrong occurrence、late/terminal record 均拒绝;receipt/source evidence 必须带 final source digest。
  3. GenerateVerifiedSourceWithPreDispatch 增加与 S1/Guest 一致的 aggregate byte/chunk bound,并测试 all-skipped oversized source。
  4. 生成与目标 commit/tree、Guest artifact、harness/checker、raw report digest 全绑定的 overlap artifact;否则保持 Historical/evidence limitation 标签。

9. 答辩解释(defense-ready)

Pysolate 的安全边界不是“看到一段 Python 就提前执行”。Host 先把实际到达的 source-prefix 交给 exact target Guest 做 syntax/compile/semantic gate;只有 Host-owned capability Plan、canonical arguments、policy/grant、freshness/privacy/lineage 与独立 budget 都通过,才可以启动一次可丢弃的 physical read。原始 Guest 的动态 occurrence 仍是唯一能够 claim logical effect 的位置;未到达、source invalid、run failure、cancel 或 final source mismatch 的工作只能被拒绝、cancel 或 orphan,不能改写 published workspace,也不能靠 fallback 再发第二次 provider request。

当前代码确实给出了 prefix overlap 与 fresh final execution 的机制证据;但必须诚实区分:prefix evidence、full-source identity、logical occurrence 是三个维度。b94c989... 中 semantic streaming pre-dispatch 还缺少把 prefix-staged observation promotion 到 final full-source digest 的 Host join,因此论文/答辩可以宣称“source-sealed claim gate 与 bounded overlap opportunity”,不能宣称“每个 prefix-staged semantic result 已由最终完整 source identity 密码绑定”。