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的精确 commitb94c989785632d98634cdd5c2a6d4a1de6cc13ac,其 tree 为6b8bb6a8d8274b8329a2aba444d13eac9fac19e9。 -
取证方式: 从该 commit 解出的隔离快照
/tmp/pysolate-target-b94c989阅读;没有跟随 live 工作树漂移。源仓库审查开始与结束时均为 cleanmain(## 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/缓存/全量性能结论。
-
总体判断: 当前实现有三条相邻但没有完全合并的路径:
runtime/streaming.SourceStream是 Host 状态机 +GuestCompileroracle 的 S1 协议;runtime/engine/wazero.Engine.RunStream+ Guest_StreamingSession是实际的单 Guest preparation/stream 执行 seam;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 protocol | runtime/streaming/source.go: SourceStream, GuestCompiler, CompileResult, SourceSeal, SourceSeal.BindObservation | Host 只校验 append-only、byte range、digest、preamble freeze 与状态转移;Python 完整性/合法性由注入的 exact Guest compiler oracle 返回。该 package 本身不解析 Python。 |
| S1 staged identity | runtime/streaming/observation.go: ObservationIdentity.Validate, NewStagedObservation, BindSource, Consume, Terminate | 只存 identity 与有界 result;支持 provisional/sealed 两阶段,sealed identity 按注释应含最终完整 source digest。 |
| 实际 Guest stream | guest/bootstrap/agent_runtime/__init__.py: _StreamingSession.chunk, _StreamingSession.end, _stream_begin/_stream_chunk/_stream_end | target Guest 使用 codeop.CommandCompiler、Guest AST/source contract、future flags 与一个私有 namespace;完整 suite 才执行。 |
| Wazero seam | runtime/engine/wazero/engine.go: Engine.RunStream, runWithPrepares, callSourceValidation | 保持一个 fresh Guest module 接收 Host-trusted preparation fragments;先对普通 RunRequest.Code 做 runtime_validate_source,再逐片调用 runtime_prepare,最后 execute。 |
| Prepare builder | runtime/streaming/prepare.go: BuildBeginPrepare, BuildChunkPrepare, BuildEndPrepare | 将输入 canonicalize 后以 Python 字符串 literal 注入 _stream_begin/_stream_chunk/_stream_end;不是独立的 authority issuer。 |
| semantic prefix admission | runtime/semantic/prefix_execution.go: GenerateVerifiedSourceWithPreDispatch | 只接收已到达的 append-only chunks;按 prefix skip/analyze,按 schedule order 提交 verified analysis,最后 SealFinalSource。失败 deferred controller.Finalize(false)。 |
| exact analyzer | runtime/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 gate | runtime/semantic/legality.go: CanPreissueStreamingPrefix, QualifiedCall, ObservationClaim | candidate/analysis 只能产生拒绝理由或 opaque Host QualifiedCall;资格要求 canonical arguments、capability plan、policy/grant、freshness、privacy、budget 等。 |
| streaming semantic controller | runtime/semantic/streaming_predispatch.go: StreamingPrefixAdmission, StreamingSemanticPreDispatch | prefix arrival 后可 Add 一次物理 read;Claim 在 source seal 前拒绝;Finalize 将未消费 observation 标为 orphan/cancel。 |
| final execution | runtime/semantic/prefix_execution.go: ExecuteGeneratedSourceObserved, ExecuteGeneratedSourceOutcome | request code 必须逐字等于 GeneratedSource.Source(),controller 必须已 sealed 且 digest 相等;同一个 GeneratedSource 只允许一次 final execution。 |
| ordinary source-bound provenance | runtime/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。
CompileStatus有CompileIncomplete、CompileComplete、CompileInvalid;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”。SourceSeal的Digest是完整 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 顺序是:
- append exact text,并检查总 source 不超过一 MiB;
self.compiler(self.pending, ..., "exec"):None只是 incomplete,SyntaxError/ValueError/TypeError/MemoryError 变成 invalid;_validate_agent_source(self.source, None):Guest source contract 检查 module docstring、__future__/static imports、late imports、dynamic import、eval/exec等;- pending 是 preamble 时在 import namespace 执行并合并;否则 seal imports、关闭 preamble、执行 complete suite;
- 记录
[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 continuation:Engine.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
source与sha256(source); Analysis.SourceSHA256;CallSite.ID、span、capability、DynamicOccurrence、canonical arguments digest;QualifiedCall.SourceSHA256()(在 streaming path 中来自 prefix analysis);StreamingPrefixAdmission.Snapshot.LastSourceSHA256;StreamingPreDispatchEvent的CallSiteID、arguments digest、prefix occurrence digest。
prefix digest 可以支持“当时已看到且被 exact Guest 分析的 source-prefix”这一事实,不能单独回答最终完整 source 是什么。
3.2 Full-source identity(完整 source 身份)
它回答:“最终被执行/封存的完整 source bytes 是否正是这一个 source?”
当前有两个正确但彼此独立的 seam:
GeneratedSource.SHA256+ExecuteGeneratedSourceObserved:request code 必须逐字等于 generated source,controllerFinalSourceSHA256必须相等;Wazero 的runtime_validate_source再做 final Guest source gate。streaming.SourceSeal.BindObservation:只接收ObservationBindingStreamSuite且SourceSHA256为空的 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绑定CallSiteID、DynamicOccurrence、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、fullSourceSHA256、OccurrenceID、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:AdmitVerifiedPrefix从Analysis.SourceSHA256生成QualifiedCall。 -
StreamingSemanticPreDispatch.Add调用newSemanticPreDispatch。 -
runtime/semantic/predispatch.go:newSemanticPreDispatch把claim.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)不能修复 semanticsemantic_callrecord;当前没有 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;但 GenerateVerifiedSourceWithPreDispatch 的 source += 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.Inputscanonical JSON、capabilityPlan、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/GeneratedSourcebinding、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、CPythoncodeop.CommandCompilercompleteness;- 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_only或idempotent单独都不能 issue authority。 - final execution 必须用 exact full source request;dynamic occurrence 仍是 logical effect 的唯一 claim point。
必须保持的 invariants
- Host 不用 Host Python parser 代替 target Guest compiler/analyzer。
- source prefix 只能单调追加;suite range half-open
[Start, End)且 digest 对 exact bytes。 - preamble freeze 后不能被后续 import 改写;late/dynamic import fail closed。
- 一个 qualified occurrence 最多一次 physical issue;budget reservation 是 per-run、不可重复。
- physical result 与 logical claim 分开;unreached qualified work 可 orphan,但不能被另一个 occurrence 因 arguments 相同而重放。
- source seal 前
StreamingSemanticPreDispatch.Claim拒绝;final request source 不等于 generated source 时ErrAnalysisBinding。 - Broker mismatch 不启动第二次 live provider request;
Claim失败是 fail closed。 - success 仅在 Guest response
status=ok且 runner close 成功后 publish;run error、close error、malformed/non-ok response 都 discard attempt。 SourceSeal.BindObservation只允许 exact admitted suite observation;ready 以外、已 source-bound、wrong range/digest、semantic-call binding 均拒绝。- provenance field 必须由 producer/consumer identity 一起解释;non-empty
source_commit或body_safe不是独立验证。
6. Failure、cancel、late facts 与 disposition
source admission
| 情形 | 当前行为 |
|---|---|
| empty/invalid inputs 或 empty chunk | builder/stream API 直接拒绝;不进入 authority path |
| compiler 返回 incomplete | prefix 可等待;End 时 ErrGuestIncomplete,不 seal |
| compiler invalid / oracle error | stream failed;后续 End 不可 seal |
| suite range revoke/change/digest mismatch | ErrSuiteRevoked/ErrPreambleChanged/ErrSourceDigest,fail closed |
| duplicate End | ErrStreamEnded |
| Cancel | streamCancelled,不调用 oracle、不产生 seal/publication |
Guest _StreamingSession exception | Guest session ended;Wazero run error;streaming.finish close + attempt discard |
semantic pre-dispatch
GenerateVerifiedSourceWithPreDispatch在 context、analysis、admission、seal 任一失败时 deferredcontroller.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_out、late、fallback_playback,但固定 commit 的 production search 只在 validation/test 中出现;没有看到实际 producer 将它们设置为late。这类 disposition 当前是 接口可表达,未由本切片证明已端到端覆盖。- late analysis result 不会在
Complete/sourceSealed后重新 Add:controller 已sourceSealed或finalized时Add拒绝;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.goSourceSeal只绑定 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。
- 非 streaming 的 ordinary Run 上 real Guest programmatic receipt:receipt 的
integration/e2e/streaming_semantic_predispatch_test.gotoolStarted < 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:
docs/evidence/source-prefix-overlap-v1.json:3 pairs,baseline_median_ns=2950046792,streaming_median_ns=1533922917,median_speedup_milli=1923,每 rowlogical_calls=1 / physical_dispatches=1 / guest_starts=1 / fallback=false / published。docs/evidence/source-prefix-day-trip-evidence-v2.json:3 pairs,baseline_median_ns=2942787333,streaming_median_ns=1537471584,median_speedup_milli=1914,同样每 row 一次 logical/physical dispatch、一次 Guest、published。- 两份 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 也不等于独立重现。 docs/evidence/observed-deepseek-stream-opportunity-v1.md的 six accepted live provider streams 是 Observed opportunity projection:median complete Python source8.465 s,first eligible call→source complete0.362 s,相对 post-source parallel 的 median opportunity0.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;
guestStarted在sourceSealed之后不是 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 应补的最小证据/修复
- 为 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。 - 增加测试: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。
- 为
GenerateVerifiedSourceWithPreDispatch增加与 S1/Guest 一致的 aggregate byte/chunk bound,并测试 all-skipped oversized source。 - 生成与目标 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 密码绑定”。