DSHarness 系统拆解 固定基线 47f943859b · 36 已复核 / 0 撰写中 / 36 章
English
综合结论·第 34 章

缺口、限制与待验证问题

Developer Preview 中尚未闭合的语义和证据

已复核上游 47f943859b范围: 记录未实现、弱保证、文档/代码漂移、平台差异及需要运行实验的问题。

结论:这里没有一个“完成度”数字,只有不同证据状态的问题清单

DeepSeek Harness 在公开仓库中主动维护限制台账,但台账的存在不等于所有限制具有同一性质。本章把问题严格分为五类:源码和公开合同直接证明的明确缺口;能力存在、但交付、隔离或一致性只到某一边界的弱保证;同一提交内公开说明与实现不一致的文档/代码漂移;由操作系统或 runner 决定、不能归并为单一承诺的平台差异;以及静态阅读无法判定、必须用真实网络、进程、崩溃或并发夹具回答的运行实验问题

这套分类首先防止两种误判:已明确排除的能力不自动等于缺陷;尚未做运行实验也不自动等于已经失败。所有事实固定在提交 47f943859bef60e4160492346772ded9b24f765a

1. 五种证据状态不能混用

状态本章采用的判据能下的结论不能下的结论
明确缺口实现、类型合同或公开 Known Limitations 直接写明缺失、stub、保留但未实现,或代码路径会返回不安全值该能力在此提交上不存在或不能被安全依赖已经发生过生产事故
弱保证能力已实现,但 ack、原子性、隔离、一致性、完成判定或恢复只覆盖有限边界调用者必须承担剩余策略实现等于完全无效
文档/代码漂移同一提交内,公开合同描述的值或覆盖面与实际实现直接冲突至少一侧需要校正,消费者不能同时信任两者所有手写文档普遍陈旧
平台差异Linux、macOS、Windows 或 CI runner 明确提供不同机制、强度或 verdict 权重结论必须携带平台与 runner较弱平台必然是 bug
运行实验问题答案取决于 DNS、kernel、SDK、文件系统、崩溃时点、并发进程或真实模型行为可以设计可证伪实验仅凭源码宣告通过或失败

仓库门禁扫描每个 packages/*/*/package.json,要求相邻 README 使用唯一规范标题并至少有一个顶层 bullet;本次运行报告 219 个 package README 被检查、1 个白名单项、全部符合。OPEN-LIMITATIONS-GATE

2. 明确缺口:两个输入边界仍可能把敏感目标或秘密带过去

Settings wire redaction:redactSecrets 只递归 objectdictarray。默认分支明确指出:只经 union、intersection 或 transform 可达的 secret 会被原样返回,而且没有 miss 记录。OPEN-SETTINGS-REDACTION-CODE公开 README 还补充了第二条路径:schema.toJSON() 会把 secret field 的 default 带给客户端;两种情况目前都不会 fail closed。OPEN-SETTINGS-REDACTION-DOC

HTTP fetch SSRF:provider 已有限 URL、协议、大小、超时、内容类型和同源 redirect 策略,但明确没有 private、loopback、link-local、multicast 目标阻断,没有 resolve-then-validate,也没有逐 hop 重验。公开合同直接称它在能访问敏感内网的部署中是 SSRF primitive,不应启用。OPEN-WEB-SSRF

状态:明确缺口

这两项不是“纵深防御还可更好”,而是当前 wire/network admission 无法覆盖已点名输入形状或目的地址。现有 schema、cookie-free 请求、同源 redirect 和 byte cap 不能替代缺失的 fail-closed secret proof 或网络目的地政策。

3. 明确缺口与范围边界:文件约束不等于 hostile-code 隔离

Sandbox seam 的完整政策词汇只描述文件 effect;network、process、syscall、device 和 credential restriction 不在合同内。它还是 same-world confinement,denial 依赖 stderr dialect,runner diagnostic 也在带内,恶意 child 可以伪造诊断而造成误归因,但不能借此绕过实际 confinement。OPEN-SANDBOX-SCOPE

当前 workflow engine 每个 run 使用一个 worker thread。它解决 host event loop 被同步脚本阻塞以及强制终止问题,但文档明确说 node:vm 只是 API shaping;逃逸后的脚本可以取得 host process 权限,真正的不受信脚本需要另一个 process/container engine。OPEN-WORKFLOW-ISOLATION

分类边界

“Sandbox 不限制网络”是已实现 seam 的明确范围,不应写成文件约束失效;“现有 workflow engine 不能承载 hostile script”则是相对于不受信代码部署的明确缺口。两者共同说明:看到 sandbox、worker 或 vm 名称,不能自动推导通用安全边界。

4. 明确缺口:长运行、资源预算与生命周期还有空席

Workflow 目前只支持 foreground collection,不记录 script、child progress 或 intermediate value,因此 process restart 不能续跑;接口也没有跨 child 的 token-budget vocabulary,live run 由 holder 而不是 service registry 跟踪。OPEN-WORKFLOW-DURABILITYRalph 的完成状态由 worker 自报,没有独立 evaluator;aggregate effort 只有 round count,token、price 与 elapsed-time budget 仍属 deferred work。OPEN-RALPH-VERIFICATION

附件对象是不可变且可跨 resume/fork 共享的,但 retention 与 reference-aware garbage collection 尚未实现;本地 backend 公开声明会无限期保留对象。OPEN-ATTACHMENT-RETENTIONOPEN-ATTACHMENT-LOCAL-RETENTION通用 atomic-write primitive 保证同目录 rename 的可见原子性,却没有 file/directory fsync,因此不是 crash durability;owner 崩溃留下的 lock 也只能由 operator 在确认无活 writer 后恢复。OPEN-ATOMIC-DURABILITY

状态:明确缺口

这些缺口不会否定 foreground workflow、immutable attachment 或 atomic replacement 的现有价值;它们限定了不能承诺的产品语义:process-resumable orchestration、aggregate model budget、自动对象回收、以及普通 atomic-write caller 的 crash-durable commit。

5. 弱保证:恢复会保留未知结果,而不会创造 exactly-once

Checkpoint policy 在 top-level tool body 前持久化 execution intent;如果 crash 落在 call 已持久、result 未持久的窗口,recovery 写入 TOOL_OUTCOME_UNKNOWN。合同明确指出它无法证明外部 effect 是否完成,因此不会自动重试;side-effecting provider 若支持,应使用 exec.callId 作为 idempotency key。OPEN-CHECKPOINT-UNKNOWN

状态:弱保证

系统保证的是“意图可恢复、未知性不被伪装成成功”,不是任意外部系统的 exactly-once。这里没有待修复的通用算法:没有 provider-side idempotency、查询或补偿协议时,进程内 runtime 无法从 durable call 单方面推断现实世界结果。

6. 弱保证:Telemetry 的 cursor 是 handoff 水位,不是 delivery acknowledgement

Telemetry disclosure 明确只声称把 record 非阻塞地交给 backend;batching、retry 和 loss policy 属于 SDK。module-scope cursor 记录最高 handed-off sequence,不记录 delivered sequence;旧进程没有交付的记录不会在 resume 时 backfill。OPEN-TELEMETRY-HANDOFF

它还不附带任何 redaction rule:没有 listener 时,record 按捕获内容离开进程;crash 时 backend queue 中的内容可能丢失。OPEN-TELEMETRY-LIMITSOTel backend 的 authentication、TLS、throttling 和 live collector 行为由 upstream SDK 决定,shutdown deadline 也不能取消 transport。OPEN-OTEL-BOUNDARY

状态:弱保证 + 明确配置责任

“full”表示每个 eligible event 都进入 handoff path,不表示成功送达;“feedback-only”表示在 feedback 时重放 eligible prefix,不表示 capture-time snapshot。端到端 delivery、dedupe、privacy 和 retention 必须在 deployment 与 collector 侧另行证明。

7. 明确缺口:公开 API 与客户端生命周期中的保留席位

session.list 的 request 接受可选 cursor,但 v1 返回全部 persisted sessions,cursor 只是未实现的保留席位;events.mux.since 同样被忽略,重连策略是重新打开 stream 并重新拉 history。OPEN-API-RESERVED-SEATSOPEN-EVENT-RESUME-SEAT

客户端 runtime 的公开限制还写明 loader.unload 是会抛出 not-implemented 的 stub,没有从 fiber disposal 到 registration/style removal 的通用卸载链。OPEN-CLIENT-UNLOAD

状态:明确缺口

这些是可定位的缺失能力,不是整个 reconnect 或 effect cleanup 都不存在:当前重连有 reopen + refetch 路径,许多具体 contribution 也由 fiber effect 清理。准确缺口是 wire-level cursor resume、unpaginated list 的扩展性,以及通用 module unload chain。

8. 文档/代码漂移:host.describe.version 不是合同所说的值

公开 Host API 注释把 version 定义为 apps/cli 的 package version。OPEN-HOST-VERSION-CONTRACT同一提交的实现却带着 TODO,固定返回 0.0.1;该提交中的 CLI package version 是 0.1.0-rc.5OPEN-HOST-VERSION-IMPLOPEN-CLI-VERSION

状态:已确认的文档/代码漂移

这不是 protocol-version negotiation 缺口的别名;合同明确把字段解释成 host app version。修复前,消费者不能把该字段当作真实应用版本,也不应从它推断兼容性。

另一个较小的公开文档遗漏出现在 sandbox seam 的实现摘要:父 README 的实现括注只列 Linux 和 macOS,但同页错误文案与 provider README 都包含 Windows ACL runner。provider 的真实存在不受影响;需要修的是摘要覆盖面。OPEN-SANDBOX-DOC-OMISSIONOPEN-SANDBOX-PLATFORM-LADDER

9. 平台差异:同一个“sandbox”或“process cleanup”不是同一强度

表面LinuxmacOSWindows正确读法
本地文件 confinement优先 bwrap,之后 Landlock;旧 ABI 可报告 partialSeatbelt,依赖已 deprecated 的 sandbox-execACL restricted-token,因 Everyone 权限与 NTFS hard link 明确报告 partialenforcement 是逐 backend/ABI 事实,不能只看 mode 名称
Terminal process observationtree/session inspection;调用 setsid 的 child 可逃离观察范围ps snapshot;首次 snapshot 前 reparent 的 child 可丢失terminal inspector 不支持;普通 tree kill 是 best-effort taskkillprocess-tree termination 与连续 OS containment 不是同一承诺

这些差异由 provider 明示而不是隐藏:Windows ACL 与某些 Landlock ABI 报告 partial,Seatbelt 的可持续性取决于 Apple 仍提供其 policy engine。OPEN-SANDBOX-PLATFORM-LIMITS本地 subprocess 也明确列出 Windows best-effort、Linux/macOS inspector 范围和 daemonized descendant escape。OPEN-PROCESS-PLATFORM-LIMITS

状态:平台差异

不能把 Linux bwrap 的实测结论外推到 Windows ACL,也不能因 Windows 标注 partial 就断言该 backend 完全无约束。部署声明必须同时写 mode、backend、kernel/ABI、报告的 enforcement 与测试过的 effect。

10. 验证缺口:确定性 replay 有明确未覆盖状态空间

LLM replay 通过 live session 的 first-call order 绑定已录制 parent/child scripts;这依赖 delegation 顺序。并发 sibling 会非确定地绑定到 scripts,更强的 keying 仍被 deferred。纯 pre-chunk throw、cancel/hang 和未标记的 external summarizer call 也必须靠 sidecar 表达。OPEN-REPLAY-CONCURRENCY

对于每个符合条件的已录制 scenario,ACP snapshot suite 会运行真实组装入口,归一化波动值,并把 stdout、采集到的 parent/child log 分别与 fixture 比较。TINV-SNAPSHOT-COMPARE它的 session harvest 只支持 raw JSONL;compressed JSONL 与 SQLite composition 没有 harvest path。OPEN-SNAPSHOT-BACKEND-GAP因此 green 结果只证明该次真实比较覆盖的已录制 scenario 与 channel,不能外推到并发 child interleaving 或所有 persistence backend 的相同路径。

状态:明确测试能力缺口

这里缺的是反例生成与 fixture 采集能力,不是已证明的生产语义错误。应先补更强的 replay identity 与 backend-neutral harvest,之后才能把相应状态空间纳入 deterministic regression。

11. CI 聚合边界:有信号不等于进入同一个 workflow aggregate

Pull request 的 windows job 在 hosted Linux 上使用 Windows Node under Wine,并被列入 all-checks-passed.needs。它调用的 runner 会验证 Windows Node archive 与 win32 x64 身份,然后只运行 workspace build 与 production-site build 两个 surface。OPEN-CI-WINDOWS-SIGNALSTINV-WINE-RUNNER真实 Windows kernel job 运行 complete inventory,但明确不进入这份 needs 列表。OPEN-CI-VERDICTHosted Linux 与 macOS serial reference jobs 在当前配置为 if: false;self-hosted serial lanes 只在 master push 运行。OPEN-CI-SERIAL-LANES

Real-API E2E 是独立 workflow:fork 与 Dependabot PR 因 secret model 被整个 job 跳过,而 GitHub 会把该 job-level skip 报成 successful check。OPEN-REAL-API-CIMaster-push real-kernel sandbox matrix 覆盖 bwrap、两种 Landlock architecture 与 Seatbelt;它还在命令中断言两个 platform file 都实际运行,防止 self-skip 伪装成 green。OPEN-SANDBOX-CI这两个 workflow 均不在 ci.ymlall-checks-passed 依赖图中。

状态:workflow 聚合政策与平台差异

这些不是“CI 没有测试”;仓库有独立 observational/reference signal。静态 workflow 文件只能证明 trigger、job 和 all-checks-passed aggregate 的范围。本研究没有验证仓库实时 ruleset 或 required-status 配置,因此不声称哪些 check 能实际阻止合入。

12. 跨进程与资源上限:局部串行化不能外推成全局保证

Message feedback 的 per-Session mutation queue 只序列化一个 service process;storage-domain 没有跨进程 conditional write,多个 Host process 写同一 storage root 时没有 compare-and-swap 或 lost-update 保证。它也没有 durable Session deletion cascade、item-count 或 aggregate-row byte cap。OPEN-FEEDBACK-CONSISTENCYSettings seam 同样只在进程内按 namespace 串行;跨进程收敛由 provider 决定,本地文件 provider 对同 namespace 冲突采用 last-write-wins。OPEN-SETTINGS-CROSS-PROCESS

资源方面,浏览器 /api bridge 会把每个 request body 全量缓存在内存,默认 resident bound 为 160 MiB;native-command helper 则同时无界缓存 stdout 与 stderr,只因当前 caller 预期很小而暂时成立。OPEN-API-BODY-BOUNDOPEN-NATIVE-OUTPUT-BOUND

状态:弱保证 + 部署前提

单进程队列和当前小输出 caller 是有效的局部前提,但不是多写者一致性或通用资源隔离。若部署会共享 storage root、扩大 command surface 或接受接近上限的并发 image request,就必须单独验证内存与冲突行为。

13. 待运行实验:每个问题都要有可证伪判定

优先级问题最小实验夹具可证伪判定证据状态
P0Secret schema 能否在任何 wire-exposed 形状泄漏?为 union/intersection/transform/default/error-text 构造 canary secret,经真实 settings describe carrier 读取不支持的 schema 在发布前 fail closed;任何 response/error/serialized schema 均不含 canary现有缺口已确认;修复效果待实验
P0HTTP fetch 能否穿过 DNS rebinding 或 redirect 访问内部地址?双答案 DNS、TTL 切换、IPv4/IPv6、十进制/映射地址、每 hop redirect 与本地 metadata canary serverresolve 后和每 hop 都验证实际 destination;任何非公开地址在 socket connect 前被拒绝现有缺口已确认;防护完整性待实验
P0Hostile workflow script 能否逃逸 worker/vm 并读取 host authority?把模型脚本移到候选 separate-process/container engine,投放 CPU、memory、filesystem、network 与 credential canary只能访问显式 capability,越界被 OS boundary 拒绝;cancel/kill 后无 surviving child当前 engine 非边界已确认;替代 engine 待实验
P1Crash 窗口内的 tool effect 如何收敛?在 intent flush、external commit、result append 各点注入 process kill,provider 用与不用 callId idempotency 各跑一组log 始终可恢复;无 idempotency 时只报告 unknown,有 idempotency 时重试不产生第二个 effect弱保证;provider-dependent
P1Telemetry 在 collector 故障下实际丢失、重复与泄露多少?用真实 OTLP collector 注入 TLS/auth error、429、断网、queue saturation、hung shutdown 和 crash;先跑当前无 redaction listener 的 baseline arm,再跑显式挂载候选 redaction rule 的 policy arm,并分别放置 privacy canaryBaseline arm 只量化 disclosure/loss/duplication,不冒充 privacy pass;candidate arm 仅在 canary 不外发、receiver dedupe 有效、实测 loss/shutdown 符合预声明目标 policy 时通过SDK/deployment-owned,静态不可判定
P1两进程写同一 feedback/settings root 时是否丢更新?实验前声明“强一致”或“last-write-wins 特性刻画”目标,再让两个独立 Host process 做 barrier-synchronized update、kill/restart 与 watcher replacement强一致目标要求冲突全部可检测且无 silent lost update;特性刻画目标要求不同调度下的 winner 与 lost-update window 可复现、可记录,并明确保持非原子,不能计作强一致通过局部保证已知;实际部署行为需要实验
P1平台 sandbox 与 process cleanup 的真实边界是什么?在 bwrap、各 Landlock ABI、Seatbelt、Windows ACL 上运行同一 file/network/process/hard-link/reparent/setsid corpus报告 enforcement 与实际 effect 一致;fail-closed;残存 process 与误归因均有平台化结果平台差异已知;kernel behavior 待实验
P2并发 sibling replay 与非 raw backend 能否确定性回归?同时释放两个 child 的 first model call,并从 raw、compressed 与 SQLite 分别 harvestscript 绑定不依赖调度;三种 backend 产生同一规范化 logical log测试能力缺口已确认
P2资源上限在并发负载下是否满足部署预算?并发发送接近 160 MiB 的 API bodies,并让 native helper 产生受控大 stdout/stderrresident memory、拒绝点、cleanup 和 operator diagnostic 均落在预先声明预算内静态只知单请求/无界模型;容量待实验

14. 优先级:先关闭会扩大 authority 的缝,再补规模与便利性

优先级项目理由完成条件
P0Settings fail-closed wire description;HTTP destination policy;hostile workflow engine 选型错误会把 secret、内网或 host process authority 带过原本被理解为边界的位置代码修复 + 上节 canary/escape 实验 + 公开合同收敛
P1Telemetry redaction/outbox policy;跨进程 CAS;真实平台 blocking signal;workflow journal/budget决定隐私、恢复、一致性和长运行运维承诺先声明目标语义,再由 fault injection 或 native lane 证明
P2API cursor/since;client unload;attachment GC;snapshot backend parity;resource tuning主要影响规模、生命周期完整性与测试覆盖,不应抢在 authority 缝前面协议兼容路径、迁移/GC 安全性与回归证明齐全
立即文档修复host.describe.version 与 sandbox platform 摘要已有直接矛盾或遗漏,修复成本低且会影响消费者判断代码和公开说明在同一提交上相符

15. 本章验证范围

  • 仅使用公开 DeepSeek Harness 仓库在固定提交上的源码、package README 与 GitHub workflow;正文和 evidence 均不包含其他项目名、路径或标识符。
  • 对每个引用重新核对了 live path 与 line range;明确缺口、弱保证、文档/代码漂移、平台差异和待实验问题使用不同标签。
  • 只执行了结构性文档门禁 pnpm run verify-package-readme-limitations:219 个 package README、1 个白名单项,退出码 0。
  • 未运行 full build、unit/coverage/snapshot/browser suite、real-API、真实 collector、crash injection、并发多进程、native Windows/macOS 或 kernel sandbox 实验;相关结论均未冒充运行证明。
  • 中英文页面 section、table、claim/caveat、evidence 引用的结构与首次引用顺序相同。

我的学习体会

内容仅自动保存到当前浏览器,不上传、不进入仓库。你可以导出 Markdown 自行归档。