跳转至

Claude 转录分支证明分配

Orca 在保存或恢复 Claude 会话之前,会验证完整的对话祖先链。此更改改为增量读取转录,而不是将整个文件及其拆分后的行保留在内存中。它仍然会检查所观察字节范围内的每条记录,包括旧祖先和断开的冲突。它不会只解析第一行。

Reproduce

在仓库的正常依赖安装之后:

ORCA_BACKGROUND_LAUNCH=1 node --expose-gc docs/audits/claude-branch-proof-streaming/reproduce.cjs /tmp/claude-branch-streaming-results.json
ORCA_BACKGROUND_LAUNCH=1 node docs/audits/claude-branch-proof-streaming/regressions.mjs /tmp/claude-branch-streaming-regressions.json

diff 是一个固定版本的直接开发依赖。测试框架在内存中将 fix.patch 反向应用到签出的读取器上,并在构建比较之前验证原始读取器的 SHA-256。它不会修改生产文件。esbuild 会写入临时模块,这些模块会在退出时连同其 require 缓存条目一起移除。无需窗口或网络访问。

JSON 中的变体为:

  • baseline:原始全文件读取器,经过重建和哈希校验。
  • candidate:保留作为对照的开放式流式实验。它可以接受新追加的记录,并且不是正在合并的实现。
  • windowCandidate:完全签出的生产读取器,包括描述符增长后的一次内部刷新。

results.json 和 electron-results.json 已针对生产修订版本 2e623a227474101160de4c977bfae69da4b052ee 重新生成。它们记录运行时、工具版本、测试框架输入、实际打包依赖、生产源码变体和打包哈希。分配值和持续时间值在不同运行之间会有变化。provenance.json 现在描述已发布的源码;如果其源码哈希或引用的调用点行发生漂移,复现将失败。

过时的初始窗口和开放式结果快照已被移除,因为它们描述的是不同的拆分器和读取器。它们的实验结果仍可在 git 历史中获取。baseline-initial-results.json 明确属于历史资料:其原始运行时和完整依赖图未被捕获,因此它不是当前可复现性证据。

Production behavior

读取器只打开文件一次,对该描述符执行 stat,并通过现有行拆分器流式读取一个有限范围。每条消息体在解析后都可以释放;UUID 祖先图会保留到验证完成。现有的 10,000 个祖先限制保持不变。未引入转录配额、记录大小上限、驱逐或仅尾部证明。

有效的第一范围会立即返回,即使之后出现更新的标记。当第一范围缺少标记/游标或以不完整记录结尾时,读取器会检查同一描述符的大小。如果描述符大小增加,它会针对扩大后的有限范围重试整个证明一次。因此,已完成的修复无需调用方重试即可成功。未完成的修复仍可能需要现有的调用方重试。冲突的祖先链、无效会话、格式错误的中间记录和追加顺序错误仍然保持为错误。

大小增加并不能确立仅追加写入,也不能证明原始前缀保持不变。这不是原子文件系统快照:就地覆盖和截断可能会影响范围内的字节,这与旧读取器相同。失败的重新 stat、缩小和路径名替换不能证明增长。原始打开的描述符总是在生产读取器返回或抛出异常之前关闭。

Reachability

provenance.json 记录当前实现和报告发布版本 v1.4.198 的精确源码哈希和调用点:

  • 本地结构化 Claude 运行时适配器解析账户的转录,并通过 session-file-resolver.ts 委托给完整分支证明。
  • 关闭结构化会话时,会在连接关闭后、持久化句柄之前读取转录。证明失败会保留先前观察到的叶节点。意外退出持久化使用同一读取器。
  • 恢复的 PTY 验证器调用完整读取器,并在其现有 100 ms 节奏上重试不完整尾部错误,期限在 15 秒内。静态缺失和无效历史在那里仍然致命。

这些路径在 v1.4.198 中已经使用不受限制的全文件读取。回退处理比该发布版本更新。该审计确立了源码可达性和合成分配减少;它没有确立用户的转录大小、并发读取器数量或已报告生产 OOM 的原因。

Evidence and limits

两个已记录的运行时审计均通过 51 个静态真实文件用例(覆盖所有文件/字符串 API)、24 个增长和清理控制,以及 10 个实际验证器用例。增长控制针对真实文件注入追加、替换、删除、缩小、stat 错误和读取错误事件。三个已完成修复的验证器用例现在在第一次调用方尝试时即可成功。静态缺失、冲突、会话不匹配和追加顺序失败保留其错误行为。

测试框架检查原始 FileHandle 是否已关闭。没有暴露句柄的历史读取器也会检查描述符身份,以避免操作系统重用已关闭描述符编号时产生虚假泄漏报告。测试夹具仅使用私有 Node 文件系统绑定以获得确定性时序;生产使用公共 API。

regression-results.json 记录在三个变体中的每一个上,68 个解析器、回退、恢复和历史窗口测试通过(共 204 个测试)。聚焦的生产运行还通过了全部 26 个流式测试:五个相关文件总计 94 个测试。测试在 macOS arm64 上运行;这不声称进行了 Windows/Linux 或实时 SSH 集成运行。

32 MiB 分配测试夹具使用 64 个 512 KiB 的消息体,并带有真实标识符。当前 Electron 审计测量到原始读取器额外采样活动堆约 34.6 MB,生产读取器为 1.1 MB。两者在返回后几乎释放了该分配的大部分。采样在实际 JSON.parse 边界处强制 GC;它不是 RSS、自然峰值或保留泄漏的证据。GC 噪声可能使保留差值为负。

单个 8 MiB 记录在所有变体下仍需要约 16.8 MB。标识符图仍随记录数量增长。这移除了完整转录负载的保留;它不是总内存上限。

独立的时长控制读取一个稳定的 2.79 MB 文件,其中包含 8,193 条小记录,使用两个预热轮次和五个测量轮次,按交替顺序执行,且在计时期间不强制 GC。Electron 中位数为 之前 4.9 ms 和 之后 7.37 ms。这些是合成的单次运行观察值,不是吞吐量保证或计时门槛。

electron-results.json 使用已安装的 Electron 43.7.0 / Node 24.21.0,以仅 Node 模式运行,不启动应用/窗口:

ELECTRON_RUN_AS_NODE=1 ORCA_BACKGROUND_LAUNCH=1 node_modules/electron/dist/Electron.app/Contents/MacOS/Electron --expose-gc docs/audits/claude-branch-proof-streaming/reproduce.cjs /tmp/claude-branch-streaming-electron.json

其他平台使用其已安装的 Electron 可执行文件,并采用相同的环境变量和参数。这是针对已安装运行时的兼容性证据,而非历史 Electron 二进制文件。

本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 orca48/orca