跳转至

独立审查 B:修订复验报告

结论:PASS(限定于本审查范围)。首轮 B-01 至 B-09 均已闭环,复验未发现仍须阻断的源码契约错误。原 reviewer-b-initial.md 保持 FAIL 原记录,不覆盖。本次没有调用真实模型、没有使用真实 API 凭据、没有启动子代理,没有修改课程与实验代码。

本次复验方法与边界

重新完整阅读修订后的 docs/source/08-tools-extensions.md、09-mcp-codemode.md、10-interfaces.md、11-durable.md、docs/labs/12-customize.md 和新增 docs/20-review-and-version-delta.md,并检查第 01 章的新快照标识。逐项重读相关源码函数/类型上下文,核对六张相关 Mermaid 图的箭头、决策条件与持久化时刻。本报告为源码语义复验,没有以构建通过、截图存在或别人的 PASS 代替自己的阅读。

固定发布基线仍为 a13d35a742c6ef8462812a28fbe1d8c8b7431c32;main 实际 HEAD 为 9fba660cf1caca0ade5bea72269352416e595a19,与版本章一致。重点独立核对第 20 章 Code Mode 输出保护、MCP override、Coding Agent OAuth CIMD 三项;provider payload/价格改动属于 A/D 的其他专项核对。没有将本结论扩展为全部 Pi 仓库逐行人工安全审计,也没有声称完成了真实 MCP OAuth 服务端故障测试。

初审问题逐项闭环

ID 复验结果 修订事实与独立源码证据
B-01 PASS §10.4 改为 started / queued / handled,真实 response JSON 与 rpc-mode.ts:64–74 success 构造器相符;agent-session.ts:294–295 枚举无 accepted。rpc-mode.ts:394–412 在 preflightResult 返回 disposition;rpc-client.ts:491–518 collectEvents 先监听,promptAndWait 未处理 handled,课程已明确发送前注册与 handled 独立分支。
B-02 PASS §8.11 明确 session_tree 重建与每次 getBranch 重算两种方案;agent-session.ts:4039–4102 leaf 切换后只发送 session_tree,与所述一致;内建 codemode/execute.ts:391–394 每次读取当前 branch,图中 A/B 路径分别产生 reviewed/pending 状态。
B-03 PASS §8.8 明确 Core/SDK schema validate 在 mutable hook 前且无自动重验;与 extensions/types.ts:1198–1203、agent-loop.ts:706–777 一致。对比 Durable harness/tool.ts:63–88 的 beforeTool 后 validate,课程现在明确两套合约不能互相推断。
B-04 PASS §11.7 四行表分别区分 returned isError / execute 或 env throw / abort / 非双 safe 的恢复,和 durable/harness/tool.ts:241–256、360–396、101–118 一致。普通 result.isError 仍 completed,不自动取消 owned child。§11.4 图新增外部已执行而 result commit 未发生的第二崩溃窗口,§11.5 仍要求业务幂等,没有承诺 exactly-once。
B-05 PASS §9.11 加完整 metadata +(response iss 或 metadata advertised support)条件,与 mcp/oauth/flow.ts:339–344 相符;支持却缺失 iss 也拒绝,未声明且无 iss 不进行该比较,边界明确。
B-06 PASS §01 与 §20 标识 main 9fba660... 并保留 stable。git diff v1.0.0..HEAD 确认新增输出 chars/items 为 16,777,216 / 100,000;main prelude-source.ts:235–255 在超过任一值时 done(false) 并 throw,stable 无这项累计保护。main mcp/config.ts:105–124 只允许设置型 override 的 enabled/exposure/toolExposure,stable config.ts:89–114 要完整 server。main core/mcp-servers.ts:153–168 有新 clientRegistration/cimd 约束;stable 底层 pi-mcp/oauth/flow.ts:44,316–320 已有 clientMetadataUrl,可选协议能力与新 CLI 配置选项区分准确。
B-07 PASS §11.6 已明确 single storage unique process owner、没有跨进程锁,不能因 SQLite 自带写锁而多个 Harness 共同拥有;与固定版 durable/README.md:527 所有权前提一致。
B-08 PASS §9.7 解释 outputSchema+structuredContent 优先,因此 MCP server returned isError 可以 resolve,补 result.isError 分支;与 codemode/execute.ts:302–314、mcp/tools.ts:208–229,274 相符。参数错误/hook block 无 structured value 时 reject,bash exit_code 需自行检查,_meta 不承诺透传,与 tools.ts:221 的剥离相符。
B-09 PASS §9.11 重试表分建连、readOnly transient、普通 tool、首次 SessionExpired、needs-auth;与 mcp/runtime.ts:69–75,290–313 一致,明确 501 排除及 tool 首次 expired 仍可建新 session 重试的前提,未泛化成未知副作用盲重发。

图示语义复验

位置 核对结果
§8.8 工具 hooks prepare → schema validate → mutable tool_call → block 或 execute,标无自动重验;符合 Core,且没有画成 Durable 的二次验证。
§8.11 分支状态 共同 root 后 A/B custom entry 分离,session_tree 切换按 getBranch 重放;图表示状态重建而非自动持久光标,正确。
§9.1 Code Mode 模型调用 codemode、VM 经统一 tool pipeline 到本地工具/MCP;结果回 VM 再选择输出给模型,表达正确,不把 VM 当 OS 沙箱。
§10.1 modes AgentSession 驱动 interactive/print/JSON/RPC/SDK,符合接口共享机制,未表示多个 UI 同时持有单 session 自动协调。
§10.6 attachment presentation capability 经 attachment/server router 到 session worker/harness/storage;正文限定 stale attachment、实验鉴权边界,未把 CLI JSONL 或公网已认证服务混进图中。
§11.4 Durable intent 在外部动作前,执行阶段或外部已执行/result 未 commit 两个 crash 均由 saved+current replay 双 safe 决定;safe 回 execute,unsafe interrupted,符合恢复 phase,无 exactly-once 错误承诺。

六张图均从文字结构与源码路径核查;网页渲染、手机布局与公网产物由交付审查验证,不属于本报告的渲染测试结果。

其他重新检查的内容

第 08 章 read 截断、edit 原始内容匹配/BOM/CRLF、mutation queue 同进程限定、扩展同进程权限、资源 trust 与 context 文件边界仍正确。第 09 章 SDK 不自动加载 CLI 内建扩展、defaultTools 增量与 bindExtensions、256 MiB CLI VM 与 standalone300000 ms deadline、storeWrites 成功提交和外部副作用无回滚仍正确。第 10 章 JSONL 与 protocol8 CBOR 的分层、LF framing、strictJSON opaque payload与实验 peer-auth 缺失仍与固定文档相符。第 11 章 Chord 的依赖 graph、trusted immutability、独立 codec、public subscription合并与remote reset区分准确。第 12 章依旧与研究 package 实物一致,没有把禁止几个工具名称声称为完整沙箱。

本次阅读版本的文档校验值

SHA-256 记录用于识别本次实际阅读稿;后续只添加审查结果的第 20 章可能改变,不意味着上述语义自动变化。

6fba474e37651ac046f24b3c1b31e31ba435fe14f9bda355f2f0c2d1ddb53259  docs/source/08-tools-extensions.md
7d51f7cc9e829b1e5fe188c70ed270d496b4bd5c881dad62e3bc059f792a85a6  docs/source/09-mcp-codemode.md
bd79ccda43c995ac5dbf1c88b31567f273871327908f4f6b0a33de9ac20d1ac3  docs/source/10-interfaces.md
a973701960c895e3958ba8df631111741abcb3a37f88bd4f5af2aa3ce8b85d12  docs/source/11-durable.md
1c0c304d4e6b98531c863618efdc45df0cb9e2102457bb5366cafff2d1f1a7e2  docs/labs/12-customize.md
baf98ded5547590b1ad3fecb3a3e80cae62de1d5cde46be53871f4ae9f6a5c6d  docs/20-review-and-version-delta.md

最终结论:PASS,B 本次范围内无未闭环阻断问题。 发布仍需 A/C/D 各自完成验收;不能用 B 的 PASS 覆盖其未审路径。