Pi 1.3.0 独立交叉初审:实验作者检查其他作者正文¶
审查者:/root/v130_labs。固定源:71023aec1546d6d677a65669c5665c0927ce0dd0,本地 pi-1.3.0/;日期:2026-10-18。本文记录本轮真实问题及逐章覆盖,不把作者自测转换为独立审查证据。
独立性与方法¶
本审查者编写了 examples 主体及 13、14、16 章,因此这些文件全部排除。独立范围为 index、01–04、source/05–11、labs/12 与 15、17–22 共 20 篇正文,以及 root 编写的 examples/src/env-checkpoint.ts、examples/src/chord-checkpoint.ts。没有替自己编写的实验或章节签署独立 PASS。
先完整读正文,再逐图检查箭头表达的是依赖、顺序、并行还是生命周期;关键命题从调用入口读到实现和结果消费者。源码链接可达性只作为补充,不代替语义核查。本文不声称所有上游源码逐行安全审计。17 的生成表与最终文件指纹等全文冻结后复核。
实际发现¶
| 编号 | 初审问题 | 固定源码依据 | 修正要求及当前进度 |
|---|---|---|---|
| L1 | 08.2 Mermaid 的 malformed JSON 分支由 argumentsError 直接跳 validation,绕开 prepareArguments,与实际顺序不符 | agent/src/agent-loop.ts 的 prepareToolCall 在 prepareToolCallArguments 后才 validate;ai/utils/validation.ts 先拒绝保留的 argumentsError | 已向 root 报告,由作者改为 X→D→V,并解释 prepare 必须无副作用;已复核改图与正文 |
| L2 | 22 reload 图只有准备/迁移失败回滚,没有 commit 本身抛错、半发布后的宿主致命失败分支 | chord/src/reload.ts 574–596:commit catch 调用 host.fail;提交前 rollback 属另一条路径 | 已向 root 报告;作者添加 commit→Host terminal fail,说明不能伪装回滚;已复核 |
| L3 | 20.3 说跨 session worker 上限 2,却未限定 coding-agent 集成,可能误读为所有独立 pi-codemode 实例的硬编码全局上限 | coding-agent/src/extensions/codemode/execute.ts 49–60、500–533;codemode runtime 接收可配置 acquireWorker | 已向 root 报告;已补“coding-agent Code Mode 集成”,待最终冻结逐字复验 |
| L4 | 收尾中其他审查先发现22背压不是原始JSON字节;本审查进一步沿 Link.send 消费者发现改成“编码字节”仍不准确:文本使用JS字符串length | connection.ts 460–465、579–589 消费 Link.send 返回大小;link.ts 402–405 文本 length / packed byteLength;IpcLink transmit 返回 undefined | 已向 root 报告单位差异,作者改为 Link 报告编码大小并明确两种单位;已逐字复验 |
没有直接改写其他作者正文。最终报告保留这些问题与修复依据,不用“未发现问题”覆盖曾经存在的错误。
逐章、逐图语义覆盖¶
| 独立文件 | 已核查命题与图 | 实现/调用者/消费者核查 |
|---|---|---|
| docs/index.md | 学习入口、固定版本、业务主线、下载定位;无 Mermaid | 对照实际章节和 examples 脚本;没有把离线结果包装成模型能力评测 |
| docs/01-version-roadmap.md | tag/main 分离、30 commits、909 files、恢复与读取区分;无图 | 版本原始记录与三个运行层入口;发布后 main 变化不混入 release 结论 |
| docs/02-design.md | 正常 Harness sequence 与分层依赖图;业务验收和 runtime 完成分开 | Agent loop 消息追加、SDK canonical projection、Durable commit;图是限定成功路径和职责图,不是所有包必经链 |
| docs/03-usage.md | 安装/工具选择/MCP/分享,离线到真实 provider 的流程图 | SDK tools/noTools 与 CLI 文档;session-share.ts 检查 Radius 缺配置才 fallback、已开始失败不改传 gist |
| docs/04-models-messages.md | 消息变换图,thinking 三字段同模型,最终 JSON,duration | Core streamAssistantResponse→prepare/transform/convert;ai transformMessages 的两个 pass、validation、event-stream 消费与计时 |
| docs/source/05-agent-loop.md | 正常事件屏障 sequence、内外循环、批次执行 | agent.ts listener await 与 agent-loop 入队/finishTurn,prepare/validate/before/execute/after;sequential 不等于事务 |
| docs/source/06-session.md | 初始化依赖图;public listener→append→Core 返回的 sequence | sdk.ts 191+、tools restore、_installAgentRequestProjection、_handleAgentEvent、_startRun/_emitAgentSettled;public listener Promise 不被 await |
| docs/source/07-context.md | 树分支、投影、split-turn 三图 | session-manager buildSessionPath/buildContextEntries/buildSessionProjection、_persist/branch/fork;compaction estimate/cut/compact 顺序,checkpoint 的消费者为下一投影 |
| docs/source/08-tools-extensions.md | 参数管线与资源信任两图;发现 L1 | agent-loop prepare→validate→before;project-trust 决策顺序与 resource-loader bootstrap;nested executeTool 信号继承;同进程 extension 非沙箱 |
| docs/source/09-mcp-codemode.md | VM→host→tools/MCP 图、OAuth 取消 sequence、worker 容量图 | streamable-http 授权后再次检查 signal、close 使用 lastToken;worker launcher stop/exit 与集成层 acquire/release;structuredContent 分支 |
| docs/source/10-interfaces.md | runtime 所有权图、RPC disposition/events sequence | AgentSessionRuntime teardown/rebind;print text-only length/error exit;RPC preflight 一次 response,handled 不承诺 settled;TUI Component 合约 |
| docs/source/11-durable.md | Storage commit sequence、intent/effect/replay 图 | Session #runCommit→Storage→adopt→publish;submissions admission;generation request/partial 恢复;tool call 双校验、execute 双 safe、nested key、scheduler ownership、CodeMode journal |
| docs/labs/12-customize.md | 包的真实加载方法;search/read/submit 图 | ResourceLoader 和 runner nested ctx.executeTool;文本指导与 execute 验收分开,annotations 不等同授权 |
| docs/labs/15-production.md | 会话所有权图、取消与物理 worker 退出 sequence | runtime teardown、Core cancellation 和 host worker exit;并发/隔离/幂等/业务成功分别验证 |
| docs/17-source-map.md | 包依赖/读者覆盖/清单边界;无图 | 固定 package.json 与生成 reader 表;不把清单数量解释为全仓人工审查;冻结后核表 |
| docs/18-validation.md | 作者/交叉/第四独立审查及公网收据边界;无图 | 对照实际命令/日志;报告链接是交付目标,不以未生成链接冒充公网验证 |
| docs/19-deployment.md | prepare→freeze→build→publish 顺序;无图 | 实际 scripts 与 nginx archive alias,最终公网 receipt 不回填 ZIP 避免自引用;本审查不执行部署 |
| docs/20-review-and-version-delta.md | 移除旧栈、Chord/Env/Durable 迁移语义;发现 L3;无图 | changelog 线索复核当前实现、wire=4、SDK 选择恢复、实际 CodeMode 集成作用域 |
| docs/21-remote-env.md | 本地/远端责任图与 Connection sequence | Connection connect/send/session/close;RemoteExecutionEnv resolve/exec/cleanup;listFiles capability;SSH accept/deploy;watch reconnect overflow |
| docs/22-chord.md | 权限视图/共享 store、activation、状态交付、reload 四图;发现 L2 | host address/principal/root、object run/open/hydrate/init、connection method/result/state queues、reload prepare/gate/migrate/rollback/commit、close holders first |
| examples/src/env-checkpoint.ts | root 作者 fixture:真实 daemon 和 cleanup | Result 检查、有界 listing、pre-abort、秒→毫秒 timeout、cwd 逃逸仅本实验目录;没有真实 SSH |
| examples/src/chord-checkpoint.ts | root 作者 fixture:真实 memory links 与可信 principal | factory 是两个 view object,以 host 身份共享 store;等待状态条件,拒绝 malformed/guest method,finally 关闭 Host |
独立新增运行证据¶
在 root 的 Env/Chord fixtures 上增加审查者自己的反例,不重复本人作者测试集作为独立证据:
labs-review-run/chord-identity.ts:同一 input 的另一 reference 观察同样 rows;不同 project 保持空数组。保留原 owner/guest 和 malformed 拒绝检查。labs-review-run/env-limits.ts:有文件时 maxEntries=0 返回 entries=[] 且 truncated=true;close Connection 后新的读取返回失败,实际错误 code 为 unknown。保留真实 daemon 读写/timeout/pre-abort 范围。- 两条 Node 独立进程命令均退出 0,原始日志和命令退出码见
labs-review-run/commands.json。为解析包,运行时临时把该目录的 node_modules 链接到 examples/node_modules,运行后已删除,不分发依赖树。
这些探针不验证真实 SSH、WebSocket 接入、断网恢复、Chord 热更新故障、Durable 强杀/断电或所有操作系统。没有提供模型凭据,没有付费模型请求。源码语义检查和新运行结果分开陈述。
冻结后增量 L5:15.5 取消图顺序¶
第四位独立全文审查者发现 15.5 原图把 channel.stop 画在 pending host call abort 之前;本交叉初审未识别该顺序错误。产品作者修正后,本审查者重新核对 packages/codemode/src/runtime/execution.ts 410–447 和 runtime/host.ts 的真实 worker launcher:先逐个 pending.controller.abort、清 pending/unsent,再 stop,stop Promise 完成后 resolveResult。worker stop 设置共享中断标志、发出 terminate 请求并 unref,不等待实际 exit;releaseWorker 由 exit 事件触发。
当前图限定 channel 已建立且 worker 尚未退出的路径,改正 abort→stop 顺序,并用 par 分开逻辑结果与 actual exit;不把发送工具 AbortSignal 等同于远端动作取消成功。复验通过。仅更新15文件指纹,其余21项保持原值;本增量没有重跑测试。