独立审查 C · 初审记录(保留 FAIL)¶
审查时间:2026-10-03。审查员 C 未参与被审七章与实验的编写;本报告不是 C 自己所写 14–17 章的独立验收。主研究源码 da00f7f5358f2949383b35c14f548bc20187d80c,实验发布源码 639ed015397290b3745d163aafe02ffee4aa3f84 / dsh-v0.2.0-rc.2。两仓库实际 HEAD 已独立读取。
初审结论:FAIL。 下列问题是审查过程中确实遇到的原始问题。作者已在审查期间开始修订;初审历史不因修订删除或改写为“从未发现问题”,修订后的结论另见 reviewer-c-final.md。
审查范围与方法¶
- 连续阅读 A 作者
02-design.md、03-cordis.md、05-session.md、06-projection-and-prompt.md、07-agent-loop.md、08-tools.md、13-agents-and-goals.md全文,核对代码示例、Mermaid 的顺序和边界。 - 连续阅读
examples/src全部自写 TypeScript 源文件、三份test/*.test.mjs、Python demo、五份 vendor Python SDK 文件、来源清单、依赖和构建配置、README;补读 18–20 章以检查这些实验究竟声称验证什么。 - 源码复核关注完整函数而非只看关键词:Cordis Context / Proxy get / provide / Registry / Fiber effect 与 unload / 全部分发模式;Session append / prepare / flush / fork / repair / tool history;projection register / stateOf / snapshots / checkpoints;runtime-context 两个投影;Agent turn / step / kick / cancellation / tool scheduler;Tools pre/body/post/output/result 契约;Subagent start / fork / depth / settlement / continuation 公共边界;Jobs start / access / producer settlement;Goal mutation / driver 双重准入与卸载;Schedule 投递;Teams task-board / journal / mailbox 顺序。未声称逐行复核整个仓库。
- 独立运行
npm run check、npm test、两种 demo,随后重新npm run build并再跑完整实验测试;没有运行上游全套 tests、真实模型、远端 transport 或 native/Electron/操作系统沙箱。 - 后续执行两个临时错误实现负控和一个真实 projection registry 探针,所有改动限独立
reviewer-c-probes/,未修改正式 examples 或 node_modules。
C-01 · 中等:把上线清单写成已运行验收¶
位置: 原 docs/08-tools.md §8.13 末段(当前该节行 134–138)。原文称实验章逐项实际运行前面的清单,但实际只有 11 项组件契约测试,另有 7 项 SDK 集成测试,并未覆盖清单每项。
可复核证据: examples/test/contracts.test.mjs 的实际测试从卸载、provider 重绑、JSON provider、数据/参数、pre deny、post block、output schema、已取消 signal、异步 gate 到 copy,总计 11 项。不存在 ask 缺 approval、wrapper/caller signal fusion、运行中 timeout 收敛、并发 contexts/result 提交顺序、block body-only contexts、conclude final success、scope override/restriction、durable replay presentation 的运行测试。完整结果 reviewer-c-test.txt 18/18 通过不能证明这些未运行项。
影响: 学员可能错误地把源码阅读结论当成行为测试证据。
建议: 明确这是上线建议清单,另列当前实际已测和未测范围。A 已按该方式修订,终审必须核对修订正文与测试而非仅收到“已修”消息。
C-02 · 低:Python rc.2 源码链接目录不存在¶
位置: 原 docs/20-sdk-labs.md:68,链接指向 packages/sdk/python-sdk。
可复核证据: git -C release show 639ed015397290b3745d163aafe02ffee4aa3f84:packages/sdk/python-sdk 失败;真实目录是 python/sdk。初始链接扫描的证据保存在 reviewer-c-links.json。
影响: 读者无法追溯用于解决 npm / PyPI 版本不同步的真实官方源码。
建议: 改为同一 40 位 commit 下的 python/sdk,不是指向可变 main。root 已开始修订;终审需再次检查路径存在。
C-03 · 中等:夸大 projection definition 冲突检查¶
位置: 原 docs/06-projection-and-prompt.md:52:“不同 definition 冲突应明确拒绝”。
实际契约: upstream/packages/session/session-projection/src/index.ts:279 起的 register 分支只比较同 key 的 stateVersion。同版本直接 refs += 1,继续使用首个 definition;不比较后续 init/apply/schema/函数身份。不同版本才抛错。
可复现: 独立 reviewer-c-probes/projection-duplicate.mjs 在实际 rc.2 Context + SessionStore + SessionProjectionRegistry 注册同 key/版本但 init 分别返回 first / second 的两个 definition;没有抛错,stateOf 为 first;不同版本探针才按预期拒绝。原始输出 reviewer-c-projection-duplicate.txt。
影响: 自建插件作者可能误以为框架会拒绝同版本语义冲突,而实际会静默沿用第一次定义。
建议: 精确说明版本检查、首定义复用与注册方自己保证语义一致的义务。A 已修订;终审重读。
C-04 · 低:runtime-context 清空分支来源字段写成通用形状¶
位置: 原 docs/06-projection-and-prompt.md:83,将 source 简写字符串,并普遍列 form=snapshot 与 sections。
实际契约: upstream/packages/core/agent-loop/src/runtime-context.ts:152–162 返回 typed source object:sections 非空才为 { kind: 'runtime-context', form: 'snapshot', sections };空 sections(包括 CLEARED)只有 { kind: 'runtime-context' },不带已消失的贡献。
影响: 编写 event 消费者时会误把 form/sections 视为每条更新都必有。
建议: 列出两个实际分支;A 已修订,终审重读。
当前实验结果与限制¶
check / test / demo / demo:python 均实际成功。重新 build 后完整测试仍 18/18 通过。V4 日志测试等正常 runtime close 后读文件,未将 idle 当 fsync acknowledgement。项目 sentinel 测的是 AGENTS/SYSTEM 实际请求正文;当前标题没有再声称额外 .dsh patch fixture。step budget 是 admitted step 而非 retry attempt/token/总时间预算。测试使用实际发布 SDK / CLI / HTTP SSE / Tools 管道,没有用自写假 SDK 替代关键链路。
Python vendor 五文件与 release 对应文件逐字节一致,SHA256 全部与 SOURCE.json 一致。TS child env 替换、Python SDK 合并父环境的差异在两层 launcher 和教程中正确保留。测试不证明模型质量、所有 provider、冷重启全恢复、硬崩溃耐久性或 OS sandbox。
以上原始发现必须闭环后方可 PASS。正式复验记录另存,初审 FAIL 保留。