独立源码审查 A · 修订后复验¶
结论:PASS(本报告限定的核心源码语义与相应课程章节范围)。初审 A-01–A-07 已闭环;复验时发现的“文件尾 / active branch 路径尾”措辞也已纠正。原 FAIL 报告保留,不覆盖或删除。
基线与复验范围¶
- 稳定源码:
pi-1.0/的v1.0.0,commita13d35a742c6ef8462812a28fbe1d8c8b7431c32。 - 最新主分支对照:
upstream/commit9fba660cf1caca0ade5bea72269352416e595a19。本报告实际重新运行 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 新讲解的独立核验¶
- 默认参数与严格大于阈值一致;128000 − 16384 = 111616,等于不触发,大 1 才触发。
- 最新有效 usage 的选择跳过 error / aborted / 全零;投影来源映射可定位 usage entry。usage 后发生 edit/compaction 时回退重估;新的有效 response 在 edit 之后时可以重新使用 usage。
- cut point 不选 toolResult;大工具结果超过保留预算也须保留其前面的 assistant 调用。按 projected entries 处理 edits,而非按原始行数截断。
- split turn 保留本轮 goal / prefix 的独立摘要,较早完整轮次进入历史摘要,切点之后的工具调用与结果仍保留真实消息。新图分别画出两种 summary、system checkpoint 与 retained tail。
- history summary 上限 0.8 倍 reserve,turn-prefix 为 0.5 倍,均只有 model.maxTokens 正数才把它作为限制。
getSummarizationFailure()只检查 error 和 length。源码确实没有在这个 helper 内独立拒绝 aborted;文档准确限定取消还受 signal 与 SDK 路径控制,未把 helper 说成完整取消保障。探针专门验证这一界限。- 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 行为均正确”。其他审查员与交付检查全部通过,才满足课程总体验收。