乐于分享
好东西不私藏

【文档篇】文档体系与预算控制:如何治理膨胀的技术文档?

【文档篇】文档体系与预算控制:如何治理膨胀的技术文档?

技术文档治理的最高纪律:像控制代码单测一样控制文档坏链,像管理云资源配额一样给文档设定硬性字数预算。


一、现实痛点:技术文档的“中年危机”与信息熵增

在很多长期演进的开源项目与企业代码库中,技术文档往往会陷入不可逆的“中年危机”:

  • 翻车场景一:文体严重混乱(Mixed Forms)
    • 通俗类比
      :就像新手刚进一家餐馆想看“今日推荐菜单”,服务员却直接递过来一本 500 页的《食品原料国家安全标准与猪肉冷链运输规范》。
    • 现实映射
      :在原本面向新手的「入门快速指南(Getting Started)」里,硬塞了几千字的底层并发锁实现机制与几十个边缘错误码字典,新手还没跑通 Demo 就已被劝退。
  • 翻车场景二:复制粘贴泛滥,事实割裂(Doc Drift)
    同一个架构原理或事件格式,在 10 几个 Markdown 文件里各复制了一份。代码重构后,开发者改了其中的 3 个,遗漏了另外 7 个,导致全仓文档自相矛盾、真假难辨。
  • 翻车场景三:篇幅无限膨胀,成为信息垃圾场(Doc Slop)
    没有字数约束,单篇文档随心所欲地膨胀到数万字,充斥着过期的讨论草稿与会议流水账,没人能通读,也没人敢维护。

DeepSeek Harness(DSH)确立了 dsh-doc-standards 技能:把文档当成代码一样进行静态编译检查,通过「文体双轨分治」、「单一事实来源」与「硬性字数预算门禁」,从根本上遏制文档熵增。


二、文档文体的两极分化:Tutorial vs Reference 双轨分治

DSH 严格禁止将“引导式教程”与“字典式手册”混写在同一篇文档中,确立了清晰的双轨分流模型

                    ┌─────────────────────────────────────────┐
                    │      全仓技术文档体系 (Docs Hierarchy)   │
                    └────────────────────┬────────────────────┘
                                         │
        ┌────────────────────────────────┴────────────────────────────────┐
        ▼                                                                 ▼
┌─────────────────────────────────────────┐       ┌─────────────────────────────────────────┐
│ 1. 教程型文档 (Tutorials / Cookbooks)   │       │ 2. 参考型文档 (References / Specs)      │
├─────────────────────────────────────────┤       ├─────────────────────────────────────────┤
│ • 读者定位:明确初级/进阶水平           │       │ • 读者定位:面向精准查阅与配置速查      │
│ • 阅读模式:严格按时间时序单向推进      │       │ • 阅读模式:支持无序随机访问 (Random)   │
│ • 终点目标:产出一个可观测的结果 (Demo) │       │ • 终点目标:给出穷尽的字段/错误类型字典 │
│ • 严禁行为:原地展开底层参数字典        │       │ • 引用规范:作为底层事实,被教程链接引用│
└─────────────────────────────────────────┘       └─────────────────────────────────────────┘
        │                                                                 │
        └────────────────────────────────┬────────────────────────────────┘
                                         ▼
                    ┌─────────────────────────────────────────┐
                    │  底部门禁:字数预算与坏链自动拦截 (CI)   │
                    └─────────────────────────────────────────┘

教程型 vs 参考型核心对照表

核心维度
教程型文档(Tutorial / Cookbook)
参考型文档(Reference / Spec)
核心受众
探索型读者、新手或需要完成特定任务的开发者。
查阅型维护者、需要精确参数签名的集成方或 Agent。
阅读路径线性单向流(Step-by-step)
:第一步 $\rightarrow$ 第二步 $\rightarrow$ 验证。
随机点状查阅(Random Access)
:通过目录或搜索直达。
交付产物一个可观测的成功状态
(如控制台输出预期日志、跑通测试)。
一套完备的客观事实
(配置字段全集、类型签名、异常清单)。
底层原理处置严禁原地长篇大论
,必须通过超链接跳转到对应的 Reference。
作为单一权威事实源
,承载该主题的完整技术命题。

三、单一事实来源(Single Source of Truth / SSOT)

为了彻底根除“同一原理解释到处复制粘贴导致的事实漂移”,DSH 执行严苛的 一事一地(One Home Per Fact) 原则:

1. 唯一权威归宿

整个仓库中,关于某个核心机制、架构设计或配置项的完整命题,只能由一个权威 Markdown 文件承载。全仓其他所有提及该概念的地方,一律只能通过相对路径 Markdown 链接指向该权威文件。

2. 自动化坏链与跨文件锚点门禁(CI 强制拦截)

在 DSH 的预推检查中,集成了自动化文档验证工具:

# 1. 扫描全仓所有 Markdown 相对链接与 #heading-slug 锚点有效性
pnpm run verify-md-links

# 2. 扫描 TypeScript 源码注释中引用的 docs/*.md 路径是否真实存在
pnpm run verify-doc-refs
  • 原子化重构
    :一旦某个文档被重命名或章节标题修改,CI 会直接报出红灯并列出所有失效的相对链接与锚点,强制要求全仓所有引用必须在同一个 Commit 中原子修复

四、文档字数预算门禁(verify-doc-budgets

这是 DSH 在大型 Monorepo 治理中最具前瞻性的创新之一:给核心技术文档设定硬性「字数预算上限(Budget Ceiling)」

# 检查全仓核心文档是否超过字数预算上限
pnpm run verify-doc-budgets

文档字数预算监控示例

文档路径
文档定位
当前字数
预算上限
门禁状态
AGENTS.md
根目录总则
780 词
800 词
✅ 达标
docs/architecture.md
架构总览
1,420 词
1,500 词
✅ 达标
docs/testing.md
测试规范
1,180 词
1,200 词
✅ 达标
docs/defensive-patterns.md
防御模式
1,350 词
1,200 词
🚨 超限报警

当字数预算超限时的「三级处置阶梯」:

[ CI 字数预算超限告警 (Over Budget) ]
                  │
                  ▼
┌────────────────────────────────────────────────────────┐
│ 【优先级 1: 细节外迁 (Relocate)】                      │
│ 将非核心的深入细节拆分到子模块文档中,使用链接引用    │
└─────────────────────────┬──────────────────────────────┘
                          │ (若无法外迁)
                          ▼
┌────────────────────────────────────────────────────────┐
│ 【优先级 2: 语言凝练 (Condense)】                      │
│ 应用 dsh-prose-standard 剔除空洞废话与流水账叙述      │
└─────────────────────────┬──────────────────────────────┘
                          │ (若已极度凝练仍超限)
                          ▼
┌────────────────────────────────────────────────────────┐
│ 【优先级 3: 严格论证申请上调 (Raise Budget)】          │
│ 论证该文档确实承载了全新核心架构事实,方可修改配置上限│
└────────────────────────────────────────────────────────┘
  1. 优先级 1:细节外迁(Relocate)
     —— 将过于深入的实现细节拆分到子文档,在主文档保留 1~2 句话总结并加链接;
  2. 优先级 2:语言凝练(Condense)
     —— 按照 dsh-prose-standard 剔除形容词、历史过程叙述与无效修饰;
  3. 优先级 3:严格论证后上调(Raise Budget)
     —— 只有当确实合入了重大新子系统时,才允许在配置文件中提升该文档的预算数值。

五、工程启示与落地指南

  1. 像编译代码一样编译文档
    将文档坏链(Broken Links)和失效锚点纳入 CI 门禁,杜绝“代码跑通了,文档全指空”的尴尬。
  2. 文体分离是抗击熵增的第一道防线
    永远不要让教程变成手册,教程负责“带新手跑通”,手册负责“给老手查阅”。
  3. 给文档引入「资源配额」管理思维
    通过设定字数预算,倒逼工程师和 AI 持续重构、凝练文字,防止文档沦为无法维护的信息垃圾场。

💡 下期预告
很多团队会写架构决策记录(ADR),但三年前过时的旧 ADR 该如何处理?直接修改历史决策会导致上下文丢失,放任不管又会误导新人。
下一篇我们将拆解 dsh-archive-agent-notes,看 DeepSeek 如何用「状态机迁移」与「SHA-256 只增清单哈希密封」,让历史决策具备不可篡改的法律级存证效力!

欢迎「关注」专栏并设为「星标」🌟,第一时间获取硬核工程深度解析!如果本文对你有启发,请点个「在看」与「赞」支持一下!