Skip to content

4.5 不变式、测试与文档规范

本章概览:DSH 如何用"运行时不变量 + 测试梯队 + 文档分层"三套纪律保证 200+ 包的正确性。理解它们,才能理解 DSH 的代码为什么长这样,以及贡献时被要求做什么。

运行时不变量:ctx.invariants

ctx.invariantsruntime-diagnostics/invariants)是包拥有的不变量注册表。各包的 ./invariant 伴生子路径注册归属自己的检查

伴生检查什么
dsh-session/invariant单调序列号、轮次/步骤包裹、同步骤工具调用/结果配对
dsh-agent/invariantagent 状态转换关系
dsh-agent-loop/invariant请求重建:要求活会话并独立重建消息边界与折叠请求头
dsh-goal/invariantgoal 变更 revision 连续、生命周期合法迁移、时间戳不倒退、轮次非降

关键纪律(AGENTS.md):"运行时不变式断言拥有的关系——检查权威事件流或可变数据,而非服务/方法存在、插件元数据或固定纯示例。没有合理关系时,给出解释的空伴生是正确的。"

出处:packages/runtime-diagnostics/invariants/README.mddocs/subsystems/invariants.md

测试梯队(testing tiers)

仓库测试策略把测试按表面(surface)分层(docs/testing.md):

层级命令要点
单元测试pnpm run testvitest 单元测试;CI 覆盖率门是 test:coverage(每个源文件 100% 覆盖)
真实 API e2epnpm run test:e2eDEEPSEEK_API_KEY 时自行跳过
快照测试pnpm run test:snapshot免 key 的 ACP/headless 回放对比预期输出;test:snapshot:record 重录
组合 e2e/快照计划单元、e2e、快照覆盖能力缝、生命周期路径与 transcript 输出

纪律要点:

  • 偏好真实实现而非 mock(Prefer the real implementation over a mock);
  • 验证世界而非自述(Verify the world, not the self-report);
  • 测试真实入口路径(Test the real entry path);
  • fixtures 必须在 macOS/Linux 上可回放:修 fixtures,不修 normalizer;
  • 行为测试描述行为而非正确性:行为变化要改测试,并在 PR 里解释原因。

文档分层:一个事实一个家

docs/AGENTS.md 定义了文档分级(tier taxonomy),每个事实只有一个家:

层级职责
根 AGENTS.md常驻命令:每条 1~3 行、链接其家
architecture.md有序地图:组合、核心包、loop、seam、扩展点
subsystems/每子系统一页参考:类型定义、语义、生成的 Cordis API
Agent Notes活跃决策记录:为什么、放弃了什么、需要什么验证
cookbook/带编号验证步骤的实操手册
user/产品向指南(发布到文档网站)
package README每包契约:配置、语义、限制、扩展点、Model Experience
生成目录tool-catalog、config-catalog、persistence-catalog、module-graph

"查找某事实"的规则:类型定义 → subsystems;决策理由 → Agent Notes;步骤 → cookbook;包契约 → README;常驻命令 → AGENTS.md。

生成目录:防漂移机制

DSH 大量文档是从源码生成的并带新鲜度门(doc-sync):

  • docs/tool-catalog.md:启动每个工具插件、收割 schema 生成;
  • docs/config-catalog.md:逐字粘贴 config 声明 + 校验 schemastery schema 与声明类型一一对应;
  • docs/persistence-catalog.md:持久会话事件目录;
  • docs/module-graph.md / docs/capability-seams.md:包依赖与能力图。

贡献时的强制项

  • 非平凡改动必须在同一 PR 含至少一篇 Agent Note(.agents/notes/README.md);
  • 每个非平凡模型/产品用户可见行为变化,添加或更新免 key 快照(真实可运行示例);
  • 改文档化类型时同步更新所属 subsystems 页(verify-type-equiv 捕获粘贴漂移)。

小结

三套纪律互相咬合:不变式在运行时断言"日志是真相",测试梯队验证行为与世界一致,文档分层让"每个事实只有一个家"并由生成器防漂移。这是 DSH 能支撑 200+ 包快速迭代的工程底座。

参考资料

本文档为学习用途的原创讲解,基于 MIT 许可的开源项目 deepseek-ai/deepseek-harness 编写;所有引用均注明出处。