跳转至

独立源码审查 A · 修订后复验

结论:PASS(本报告限定的核心源码语义与相应课程章节范围)。初审 A-01–A-07 已闭环;复验时发现的“文件尾 / active branch 路径尾”措辞也已纠正。原 FAIL 报告保留,不覆盖或删除。

基线与复验范围

  • 稳定源码:pi-1.0/ 的 v1.0.0,commit a13d35a742c6ef8462812a28fbe1d8c8b7431c32。
  • 最新主分支对照:upstream/ commit 9fba660cf1caca0ade5bea72269352416e595a19。本报告实际重新运行 rev-parse,确认两者未混用。
  • 复读章节:02、04、05、06、07,以及新 20 章的版本差异与 A 范围说明。
  • 复核源码:Agent / Agent Loop / Agent types、SDK 工厂、AgentSession 的请求投影/图片/事件持久化/运行结束关键函数、SessionManager 的投影/压缩 checkpoint/分支/路径提取/全树 fork、transcript helpers、compaction 算法。20 章 Anthropic 条目另外逐段比较稳定源码与 main diff。
  • 图示:上述五篇主体中的 13 张 Mermaid 图作语义复读。这里核的是箭头、控制条件、工具保护与时序;浏览器渲染和全站视觉验收由交付审查负责。

初审逐项闭环

问题 当前修订定位 重新核对的实际依据 结论
A-01 normalizeContext 被说成完整协议规范化 04 §4.4–4.5,约 L63–85 transcript.ts 仅 fold 外置字段;新增 provider adapter 节点;role 原样保留的独立探针再次通过 闭环
A-02 图片与本次最终物理模型时序混淆 06 §6.6,约 L78–96 _limitsModel() 返回历史 routedModel 或 selection;本次 resolveModel 在之后 prepareRequest;新时序图按此区分 闭环
A-03 所有 fork 被当成路径复制 07 §7.9,约 L179–187 branch / createBranchedSession / forkFrom 三者分别列出;实际磁盘探针及目标测试确认全树与路径不同 闭环
A-04 branch 光标未持久化边界遗漏 07 §7.9,约 L189–202 branch 只设置内存 leaf;重开 _buildIndex() 落在最后物理 entry;未 append 便重开 / append B 后重开测试通过 闭环
A-05 StreamFn 与 observer 失败合约不足 05 §5.5 自定义 StreamFn 失败合约 重读 types.ts 与后台 .then(end) 路径、runWithLifecycle/handleRunFailure;实际验证执行器错误转标准失败,以及坏 awaited listener 仍可能 reject 闭环
A-06 Compaction 深度不足 07 §7.7.1–7.7.6 重读估算、失效检测、projected cut、split turn、摘要失败/输出上限函数;新增独立 compaction 探针通过 闭环
A-07 loop 图漏 length 保护及退出事件 05 §5.7 图,约 L122–144 有 toolCall 再判断 length → 全批拒绝;error/aborted → finishTurn → turn_end → agent_end;与 runLoop 一致 闭环

复验新增精度项:07 §7.7.3 原“最新 compaction 已在文件尾”会忽略当前路径与完整文件的区别。已改为“当前传入的 active branch 路径尾部已是 compaction”(当前 L127),对应 prepareCompaction 对 pathEntries 最后元素的判断。此项已闭环。

Compaction 新讲解的独立核验

  1. 默认参数与严格大于阈值一致;128000 − 16384 = 111616,等于不触发,大 1 才触发。
  2. 最新有效 usage 的选择跳过 error / aborted / 全零;投影来源映射可定位 usage entry。usage 后发生 edit/compaction 时回退重估;新的有效 response 在 edit 之后时可以重新使用 usage。
  3. cut point 不选 toolResult;大工具结果超过保留预算也须保留其前面的 assistant 调用。按 projected entries 处理 edits,而非按原始行数截断。
  4. split turn 保留本轮 goal / prefix 的独立摘要,较早完整轮次进入历史摘要,切点之后的工具调用与结果仍保留真实消息。新图分别画出两种 summary、system checkpoint 与 retained tail。
  5. history summary 上限 0.8 倍 reserve,turn-prefix 为 0.5 倍,均只有 model.maxTokens 正数才把它作为限制。
  6. getSummarizationFailure() 只检查 error 和 length。源码确实没有在这个 helper 内独立拒绝 aborted;文档准确限定取消还受 signal 与 SDK 路径控制,未把 helper 说成完整取消保障。探针专门验证这一界限。
  7. chars/4、图片固定估计明确写为启发式,没有沿用源码注释中“总是保守”的不可靠外推。

最新 main 差异条目的复验

20 §20.2 的 Anthropic 行对应实际 diff:

  • stable native tool-change 路径需具备 compat 能力、初始 active tools,且没有 hasToolRedefinitions;同名重定义回退 current tool list。原位 additions/removals 引用已有工具名。
  • main 去掉 redefinition 排除条件,addition 携带 inline tool_definition;top-level 只保留 initial tools 与 deferred placeholder,之后定义通过 inline blocks 表达。
  • 因此当前条目正确区分已发布 1.0 与 main,未把 inline/redefinition 新能力归入稳定 npm 行为。
  • 独立 diff 同时确认本报告的 Agent/loop/types、SDK factory、AgentSession、SessionManager、compaction 主干文件在两快照间没有实现差异;transcript helper 部分注释与 deprecated 标记有变化。

20 章其余 MCP / VM / OAuth / Durable 等变化由 B 范围审核负责,本报告不以阅读版本表替代相应独立源码审查。

实际运行证据

本复验独立执行,全部通过,无真实 provider / key / 付费调用:

node research/reviews/reviewer-a-probe.ts
PASS: branch navigation is not persisted before append;
      forkFrom copies all entries;
      normalizeContext does not validate message roles.

node --test --test-reporter spec examples/test/edge-cases.test.ts
5 tests, 5 pass, 0 fail, 0 skipped.

node research/reviews/reviewer-a-compaction-probe.ts
PASS: strict compaction threshold;
      old usage invalidation and refresh;
      split-turn cut keeps tool-call/result pair;
      failure helper rejects error/length and does not itself reject aborted.

node research/reviews/reviewer-a-lifecycle-probe.ts
PASS: Agent translates executor failure;
      repeatedly failing awaited listener can still reject prompt;
      finally clears streaming state.

这些探针分别触发不同语义分支;不是重复执行一个构建命令。初审 probe 与新增 probe 保存原文件,便于后续复跑;目标 edge-cases 测试独立检查实际 SDK 资源隔离、branch恢复、fork范围、context edit 与 system checkpoint。

PASS 的边界

PASS 说明上述核心章节与对应固定源码路径、图示和已运行探针一致,A 所发现的实际问题均解决。本报告不是全仓库 1848 文件逐行人工审计,也没有真实模型服务的完整 E2E、认证、缓存命中、联网效果或模型摘要质量验证;不能扩写为“所有 provider、所有 API、所有 Pi 行为均正确”。其他审查员与交付检查全部通过,才满足课程总体验收。