独立审查 C:修订后复验¶
日期:2026-10-03(Asia/Shanghai)。最终结论:PASS,限下述审查范围。
初审报告 reviewer-c-initial.md 保留 FAIL,不覆盖历史。初审 C-01 至 C-07 全部闭环;本次没有发现新的阻塞问题。独立复验读修订的实际代码与文档,运行正常测试,并在临时副本中引入错误行为确认新测试真的失败。没有改正式 docs/examples/upstream。
版本与范围¶
实验固定官方 Pi 1.0.0,源码对应 release commit a13d35a742c6ef8462812a28fbe1d8c8b7431c32。当前主分支 9fba660cf1caca0ade5bea72269352416e595a19 是另记的发布后快照。本审查不把 main 行为混入 stable npm 实验契约。
范围延续初审:03、13–16、18–19 章节;全部自写 TypeScript、package manifests、README、skill/prompt;此次追加阅读共用资源配置 research-resources.ts、预算 turn-budget.ts、全部新增边界测试和第 20 章的 C 修订矩阵。与父代理正在做的最终公网/下载交付验证分开:此 PASS 不声称已经由 C 独立完成最终浏览器、TLS、最终 zip 重建,也不声称全部上游源码逐行安全审计。
本次读到的固定源码及文档哈希记录:reviewer-c-reviewed-files.sha256。18 / 20 章仍需父代理填入所有审查结果与最终网站日志,不能因 C 单独 PASS 就将其他尚未完成的项写成通过。
七项问题逐一闭环¶
| 问题 | 实际修复与独立复验 | 结论 |
|---|---|---|
| C-01 · 目标 SYSTEM.md 仍注入 | research-resources.ts:5–20 共用函数显式项目不受信、关闭 context、SYSTEM override 返回 undefined、APPEND 仅产品规则;SDK 程序调用实际共用函数。edge-cases.test.ts:14–50 创建真实恶意 AGENTS/SYSTEM/APPEND/extension,断言 loader 与 provider 收到的 messages 无哨兵且产品指令存在。恢复项目受信并移除 SYSTEM override 的负控精确检出 SYSTEM 哨兵。14 章解释三个不同来源和非沙箱范围。 |
PASS |
| C-02 · 弱 sequential 测试 | contracts.test.ts:108–133 改为 mixed sequential + parallel,前工具经过真实 setImmediate 才结束;后工具必须在结束后开始。移除 sequential 的负控产生 first-start, second-too-early, first-end,断言失败。13 / 18 / 20 章覆盖说明与当前测试一致。 |
PASS |
| C-03 · 弱 listener 测试 | contracts.test.ts:136–162 用宿主 gate 阻塞 listener;未释放时核对 prompt 未 settled、仍 streaming,最后释放并核对 idle。把返回 Promise 改成 fire-and-forget 的负控在 settled 断言失败。 |
PASS |
| C-04 · store 无跨执行提交 | codemode.test.ts:17–35 检查执行不会自动修改宿主 store,显式 apply delta,再第二次 execute load 读取提交后状态。去掉 Object.assign 的负控实际读到 2、预期 3,因此失败。测试与文档不再越过证据范围。 |
PASS |
| C-05 · 八轮停止未测 | 真程序和测试共用 createTurnBudget(8);contracts.test.ts:228–246 提供 9 次 toolUse,验证 provider/execute/toolResult/预算计数都只有 8 且正常 idle。移除 finishTurn 预算连接的负控产生 10 次 dispatch,断言失败。13 章说明第八轮工具已经执行,以及预算停止不等于业务成功。 |
PASS |
| C-06 · 合作取消 vs 硬停止 | 13 / 14 章明确 120 秒定时器发出取消请求;忽略 signal 的 provider/tool/listener 可能继续,硬时间边界需要 watchdog 和进程隔离,外部动作不回滚。与实际 AbortSignal 机制一致。 | PASS |
| C-07 · 模型直接画到用户 | 13 章图改为模型回复 Agent,再由宿主订阅流事件输出用户。箭头与 offline-demo.ts / core-agent.ts 事件输出实现一致。 |
PASS |
原初审给出的三项弱点探针仍保存,说明原稿为什么 FAIL;本次负控说明修订后的断言具有区分能力,两者不能互换引用。
独立运行结果¶
| 本次执行 | 实际结果 | 原始证据 |
|---|---|---|
npm run check |
tsc --noEmit 通过 |
reviewer-c-final-typescript.txt |
npm test |
21 tests / 21 pass / 0 fail / 0 skipped | reviewer-c-final-tests.txt |
npm run demo |
三轮响应、两个真实工具调用、7 条 transcript;正常结束 | reviewer-c-final-demo.txt |
| 五项错误行为负控 | 五项都由目标 AssertionError 拒绝,均 exit 1 | reviewer-c-negative-controls.txt 与各项日志 |
复验日志独立生成,没有将父代理运行输出重命名为独立审查结果。全部测试只用官方 Faux / 实际 SDK / QuickJS;没有调用用户凭据或收费模型。
负控方法与具体失败¶
可运行 python3 research/reviews/reviewer-c-negative-controls.py。脚本复制正式测试到临时目录,只变异待检行为;共享只读 node_modules 与未修改业务源码,测试过滤只跑目标 case,30 秒上限;运行完自动清理临时目录。若只因 import/setup 出错不能算成功负控,因此脚本还验证日志确有 AssertionError 和预期失败。
| 变异 | 检出的真实差异 | 原始证据 |
|---|---|---|
| 移除 executionMode sequential | parallel 工具在第一个异步工具完成前启动 | reviewer-c-negative-sequential.txt |
| listener 返回 Promise 被忽略 | gate 未释放,prompt 已 settled:true != false | reviewer-c-negative-listener.txt |
| 预算 hook 未连接 | 请求次数 10 != 8 | reviewer-c-negative-budget.txt |
| 宿主不 apply 成功 store delta | 下一次执行得到 2 != 3 | reviewer-c-negative-store.txt |
| 恢复项目受信、去掉 SYSTEM override | loader 读到 UNTRUSTED_SYSTEM_SENTINEL != undefined | reviewer-c-negative-resources.txt |
“负控失败”是期望结果,表示正确断言拒绝错误行为;它不表示修订后的正式代码测试失败。
内容准确性与剩余边界¶
未发现修订实战说明与 1.0 类型/运行契约错配。项目指令隔离、工具 allowlist、cwd 非沙箱、合作取消、八轮预算、生效的异步完成屏障、宿主提交 store 与任务验收边界均有对应实现或明确说明。
Core、SDK 的真实 provider 入口已经类型检查,API 使用和预算连接正确;这不证明账户认证、模型行为、真实任务质量或费用。已公开的 brace-expansion high finding 仍被如实披露,本 PASS 是教学代码与陈述审查通过,不是把该已知依赖问题改为“依赖全绿”。
父代理仍必须等 A、B 的最终独立语义审查与 D 的最终构建/下载/浏览器/版本检查全部通过,再宣布整个任务结束。C 本范围已完成且没有待修实际问题。
交付缓存修订补验¶
父代理 D 最终检查发现 Cloudflare 返回旧版 ZIP,此问题发生在 C 原 PASS 范围之外。C 收到具体修订后独立复核 docs/19-deployment.md §19.7、deployment/pi.baoer.me.conf、实际安装配置与第 20 章结果 metadata,结论:补验 PASS。
- 下载链接统一附
?revision=20261003-review2,明确变更 CDN cache key;第 19 章没有将普通 HTTP 200 冒充新版字节确认。 - Nginx 下载 location 为
^/assets/.*\.(zip|md)$,设置 no-store;保留 nosniff、referrer 与 frame 三项原安全 headers,避免 location add_header 影响继承。dotfile 拒绝 regex 在下载 regex 前;其他课程静态资源没有被此规则误覆盖。 - 独立运行 Nginx 配置语法检查通过;本地安装配置与交付 conf 一致。对源站请求
/assets/.reviewer-c-hidden.zip实際返回 403,说明隐藏路径没有被下载 regex 放行。证据:reviewer-c-origin-dotfile.txt。 - 独立公网请求三个实际 revision URL:完整 Markdown、实战 ZIP、分章 ZIP,全部 200,逐字节和本地
site/assets对应文件一致。三者响应均含Cache-Control: no-store和上述三个安全 headers。证据:reviewer-c-cache-check.json;独立脚本:reviewer-c-cache-check.py。 - 第 20 章准确记录 A/B/C 为 PASS,而 D 仍在最终交付检查,不提前宣称 D 全部通过;C 的七项闭环、21 项测试、五项负控信息与原报告一致。
此次补验文件哈希另存 reviewer-c-delivery-reviewed-files.sha256,不覆盖首次复验快照。当前字节比对仅证明本次请求看到的版本;若父代理将本补验记录加入课程导致 Markdown/ZIP 再生成,最终 D 应在发布后重新运行公共下载比对,而不能直接沿用这些旧哈希作为后来产物的证据。无需因纯静态缓存修订重复全部 Agent 测试;正式实验代码没有再改。