蚁群 · 研究报告

我们量化了三家顶级开源组织的「制度腐化」:64–78% 的文档是孤儿

数据日期 2026-09-12 · 口径:引用图(入链) · 约 8 分钟读完

🌐 语言: English 中文
一间安静档案室里的老式卡片档案柜,只拉开了一个抽屉、其余抽屉都关着,地上堆着一摞旧文件夹——多数文件再没人打开,正是「制度不会死」的样子

Kubernetes、CNCF、GitLab —— 治理能力最顶级的三家,制度库里 64–78% 的文档是「孤儿」; 在 Kubernetes 的 652 个提案里,只有 3% 被明确标注为废弃,其余 97% 永远停在「在用 / 在议」, 中位 6.5 年没更新过。

企业病的根源不是「制度不够多」,是「制度不会死」。

68%
CNCF TOC 孤儿率
598 份文档
64%
Kubernetes community
964 份文档
78%
GitLab Handbook
4,717 份文档
3%
K8s 652 个提案中
明确标注废弃的比例

一、现象:几十万块钱,买到的是一堆没人愿意打开的页面

几乎所有上规模的组织都做过同一件事:建知识库、写 SOP、发流程文档。

行业里有一句被反复引用的话,精准描述了结果:「很多企业花了几十万元,最后得到一堆没人愿意用的文档页面。」

(这条是行业评测口径的二手引用,我们不把它当自己的一手数据。本文所有一手数字见第三、八节,全部可复现。)

这不难理解。写制度有收益(证明自己在管理),删制度有风险(万一以后要用?谁签字负责?)。于是制度只增不减,直到没人看。

而成本在别处悄悄累积。McKinsey Global Institute《The Social Economy》(2012) 的一手口径是:知识工作者每周约 19% 的工作时间(约 7.6 小时)花在「寻找与汇集信息」上,另有 28% 花在邮件上 —— 花掉的时间还不是最贵的,找到的东西可能已经过期才是最贵的。更麻烦的是,这一代开始,读这些文档的不只是人:AI agent 会按过时的假设规模化地做错事,比人错得更快、更多。

顺带做一个口径示范:这条数据在网上最常见的版本是「员工每天1.8 小时找信息」—— 那是一手口径被转述了几轮之后的产物(换算回去是每周 9.3 小时,与报告原文的 19% 不符)。我们引一手:每周 19%。 这件事本身就是本文要讲的问题的缩影。

问题在于:所有人都说得出「制度没人看」这句话,但没人能把它变成一个数字

没有数字,就没法排优先级,没法验收,没法反驳「我觉得文档还是有用的」。

二、方法:我们用「引用图」把「没人用」量化成一个比率

先说清楚我们量的是什么。

对象 = 一个文档库里的全部 Markdown 文档(不含代码、图片)。

被引用 = 至少被另一个文档用链接指向它(相对路径链接 / 仓库绝对路径链接 / wikilink / 站点式引用)。

孤儿文档 = 零入链:没有任何其他文档指向它。

孤儿率 = 孤儿文档数 ÷ 全部文档数。

三个必须写清楚的口径纪律:

  1. 「孤儿」≠「没用」。 它只说明一件事:在这个库的链接结构里,没有任何文档把它当作入口。 一个被搜索引擎天天命中、却从不被任何文档引用的页面,在这个口径下仍然是孤儿。所以我们是低估而非高估它的使用价值 —— 这是一个保守指标。
  2. 不同口径不得混算。 同一个目录,换一个口径会得到完全相反的结论。以我们自己的 docs/ 为例:运行时被读取口径下(117 份文件),只有 13% 从未被读过 —— 看起来相当健康;而引用图口径下(其中 65 份 markdown),98% 是孤儿 —— 看起来全烂了。两个数都对,但它们回答的是不同的问题(前者问「有没有人打开」,后者问「有没有文档指向它」),样本范围也不相同。谁把不同口径的数字放进同一张表里平均,谁就在制造假的确定性。
  3. 口径必须匹配文档库的形态。 这是最容易出错、也是我们踩坑最多的一条:
文档库形态引用图口径运行时口径说明
链接型(Confluence / Notion / 人手写链接)✅ 推荐需访问日志门槛最低,本文主口径
站点型(Hugo / Docusaurus 等生成站点)失效导航与索引页由系统生成,互链数字无意义(我们曾据此作废掉一个 8,215 份文档的大样本)
注入型(AGENTS.md / CLAUDE.md / MEMORY.md 等自动注入)必须从样本里剔除,否则「100% 被引用」是假的
代码库型(可校验锚点)改用锚点存在性口径,回答「引用是否还指向真实存在的目标」

我们踩过的三次口径事故,值得单独说,因为它们决定了上面的表长什么样:

这条经验我们后来写成了硬规则:形态与口径不匹配 → 该样本作废,不得计入统计。 一个能被复现的错误口径,比一个正确的直觉危险得多。

深色木桌上的一台黄铜天平,一侧托盘压着一摞文件夹、另一侧只有薄薄一份——死重往往压在大文件这一边
死重体量占比 = 孤儿文档占用的字节 ÷ 全库字节。孤儿往往是大文件(评审报告、评估书、会议记录归档),删掉它们释放的空间远大于条数比例。

三、证据:三个组织,同一口径,全部超过 50%

采样对象都是公开仓库,规模从 598 到 4,717 份文档,全部用同一个引用图口径计算。

表 1|三个组织的孤儿率(同口径,全库计算)

样本文档数孤儿率死重体量占比
CNCF TOC(基金会官方治理文档)59868%82%
Kubernetes community(社区制度与 SIG 文档)96464%65%
GitLab Handbook(真实公司的对外制度库)4,71778%73%

「死重体量占比」= 孤儿文档占用的字节数 ÷ 全库字节数。它比条数更能说明问题:孤儿往往是大文件(评审报告、评估书、会议记录归档),删掉它们释放的空间远大于条数比例。

表 2|Kubernetes KEP:状态不会死

Kubernetes Enhancement Proposal(KEP)是这类样本里最好的一种,因为它自带机器可读的状态字段(provisional / implementable / implemented / withdrawn / replaced / superseded …)。全量 652 个:

指标
僵尸草案(状态「在议」但 > 2 年未动)26%(87/333)
化石制度(状态「已实现」但 > 5 年未动)30%(87/294)
1 年内动过的1%(9/652)
最后更新距今(中位)6.5 年
明确标注废弃 / 被替代3%(21/652)
→ 其余97% 永停「在用 / 在议」

(这里还有一个我们主动否掉的结论:原本假设「被废弃的提案引用率更低」,实测废弃状态零引用率 81% vs 在役状态 77% —— 只差 4 个百分点,属于噪音范围,不足以支撑因果结论,所以我们不写。真正有信息量的是上面这张状态×时间的表。)

表 3|同一组织内部,差异可以有 76 个百分点

只看平均值会误导。把 Kubernetes community 的 964 份文档先在全库图上算链接图,再按目录分组

分组文档数孤儿率
mentoring / contributors / sig-node41 / 98 / 2920% / 28% / 28%(活制度层)
communication4547%(但死重体量 82%
elections / archive / events180 / 66 / 9971% / 86% / 96%(档案记录层)

结论不是「这个库腐化到了 75%」,而是:引用率必须先按目录类型分层。

档案 / 记录层(events、archive、会议记录归档)天生就是高孤儿率 —— 它们的存在价值是留痕,不是被引用。把这类目录和活制度层混在一张平均数里,得出的任何结论都没有意义:该整层归档的,不该按「腐化」逐条处理。

附带一条方法论修正:分组必须在全库链接图上算。 我们第一版是直接对每个子目录单独跑脚本,结果孤儿率被系统性抬高(实测 92% vs 真值 75%)—— 因为子目录重算会丢掉来自其他目录的入链。这个错误差点让我们得出「SIG 文化已死」的错误结论。

一摞泛黄的文件夹、顶层落着薄灰,旁边立着一只老式黄铜座钟——状态说「在用」,时间已经过去 6.5 年
状态字段靠人更新,而时间不会撒谎 —— 这就是「状态-时间矛盾率」要量的东西。

四、机制:状态字段靠人更新,而时间不会撒谎

到这里,一个自然的问题是:为什么会这样?

KEP 这类文档其实已经做得很好了 —— 它有状态字段,有替代关系,有流程。但状态字段有一个致命前提:它靠人更新。

一个提案落地了,作者会去把状态改成 implemented(这是荣誉)。一个提案被放弃了,谁会专门去把它改成 withdrawn(这是承认失败、走流程、还需要别人评审)?没有人。

于是状态字段永远停留在乐观的那一侧:73% 的文档停在「在用 / 在议」,只有 3% 被正式宣告死亡。

所以「状态」不是可信信号,但「时间」是。 我们把两者交叉,得到一个比孤儿率更锋利的指标:

状态-时间矛盾率 = 文档状态声称「有效 / 在用」,但它在时间维度上早已停止演进的比例。

在 KEP 样本上,它是 26% + 30%(僵尸草案 + 化石制度)。这个指标的意义在于:它不需要判断文档的内容是否正确,只需要判断它的状态声明是否还成立 —— 而后者是可自动计算的

同一逻辑放到企业里:制度库里最常见的不是「错的规定」,而是「早就没人执行的、仍然标着『现行』的规定」

五、怎么治:把「只增不减」改成「主区 + 归档区 + 自动衰减」

我们不打算在这里推销工具,只公开规范与洞察 —— 因为这套东西的难点从来不是代码,是敢让制度退场

1. 双区结构:主区只留当前有效,归档区保留原文

这是整套规范里最重要的一条设计:降级的动作必须是可逆、可追溯、零信息损失的,否则没人敢执行它。

木架左边一只打开的托盘放着几份整齐的文件夹,右边是一只贴标签的封闭档案盒——主区只留当前有效,其余原文搬进归档区
主区只留当前有效;被降级的条目原文整块进归档区 —— 降级不是删除,是降低默认可见度。

2. 稳定 ID + 状态字段:让制度可被引用、可被批判

每个条目一个稳定 ID(用于跨区引用与去重),加上时间与状态字段。没有 ID 的条目无法跨区引用,也就无法自动衰减。

3. 衰减判据(我们的现行值,可调)

判据规则
保护窗口建档 ≤ 14 天 → 不降级(新东西永远先保护)
存疑窗口未完成且 > 45 天未动 → 存疑(搬归档,可找回)
已完成→ 候选归档
P0 / 骨架 / 机构记忆永不降级(文件头、契约、设计理念)
规划时域保护段名含「(a–b 个月)」→ 未触碰 ≤ b×30 天不降级,到点自动失效
无建档日期视为缺元数据,保持主区,等时间戳回填(不猜

判据里有两条特别值得抄走,都是踩坑换来的:

「未触碰」≠「过期」。 用 git 时间戳一刀切,会把 3–24 个月的产品路线图全部判成过期 —— 它本来就还没到时候。解法是用段名里的时域当保护期,到期自动失效。

说明文字继承它所在段的命运。 一个段落里的条目都该降级,段落的说明文字跟着走;但纯说明段(表格、契约、纪要)默认终身保留 —— 它们是机构记忆,不是待办。

判据值不是普适标准。 14 / 45 天是我们在自己库上标定出来的观测值,换一个库必须重新标定 —— 我们标定过一次:同样是「待办型」文档,一份 bug 归档文档用 90 天更合适(它的条目天然存活更久)。照抄别人的阈值,等于把别人的经验当成自己的事实。

4. 只搬不删 + 幂等 + 索引是派生物

5. 分层看:不是所有高孤儿率都需要治理

回到表 3:先给目录分类,再决定处理方式。

暖色木墙上一个小钩子挂着一把黄铜钥匙,下面窄木搁板上放着折叠的亚麻布和一本合起来的笔记本——有些东西必须留在人手里
记忆可以外置,但这五样不行:权力、责任、不可验证的判断、系统性偏见、审计要求。

六、边界:有五样东西不能外置

这套方法不是万能的。我们的结论是:记忆可以外置,但下面五样不行 —— 它们不是记忆问题。

不能外置原因
权力谁有权决定什么,是政治问题。系统可以执行规则,不能拥有规则制定权
责任出事必须有人担责,不能是「系统自动决定的」
不可验证的判断制度里大量「酌情 / 合理 / 必要时」—— 没有廉价验证器,自动聚合只会退化成平均值
系统性偏见组织文化里的偏见会被机制放大 N 倍且无人察觉
审计要求匿名的自动痕迹不可追溯 → 必须补稳定 ID 与人为签核

一句话:这套机制解决的是「注意力」问题,不是「权力」问题。 它能减少人花在维护制度上的注意力,但不能替人做决定。

七、我们对自己的库做了什么(自检)

同样的口径,也回头量了我们自己维护的文档体系(117 份 + 另一个 53 份的笔记库):

样本规模零引用率死重体量
工程文档库11712%170 KB
笔记库5313%26 KB

比三家公开样本好得多(因为库小、刚建立不久),但仍有 170 KB 是可以清退的 —— 而且这些孤儿文档正在被每一次 AI 会话重复读取。

这就是我们要说的第一件事:这件事每个组织都该做一次,而且一周内就能出数字。

暖木桌面俯拍平铺:一张写着空白勾选框的清单、一支木笔、一杯茶、角落一小盆绿植,晨光柔和
你的第一个动作:把现有制度 / 文档按「最后被引用时间」排一遍,算出「90 天内从未被任何引用触发的制度占比」。

你的第一个动作(一周内)

把现有制度 / 文档按「最后被引用时间」排一遍,算出:

「90 天内从未被任何引用触发的制度占比」

若 > 50%,说明「制度只增不减」这个问题在你的组织里是真实的、且可量化的。

注意:这个动作不需要部署任何系统,也不需要改造任何流程 —— 一个只读脚本、一份导出的链接表就能做。先拿到数字,再决定要不要治理。

八、复现(数据全部来自公开仓库)

采集口径(写清楚,任何人可用 30 行脚本重算)

  1. 遍历样本仓库全部 .md(跳过 .git / node_modules 等目录,跳过 > 500 KB 的巨型文件)。
  2. 从每个文件里提取链接:Markdown ](target)[[wikilink]]、站点式引用 {{< ref "path" >}}
  3. 把相对路径 / 仓库绝对路径解析成样本内的对象;自链不算
  4. 统计每个对象的入链数:入链 = 0 → 孤儿
  5. 孤儿率 = 孤儿数 ÷ 总数;死重体量占比 = 孤儿字节 ÷ 全库字节。
  6. 分组统计时,先在整库上算链接图,再按目录分组(否则会系统性高估高孤儿率)。

数据源与样本规模

样本来源规模形态
CNCF TOCgithub.com/cncf/toc598链接型
Kubernetes communitygithub.com/kubernetes/community964链接型
GitLab Handbookgitlab.com/gitlab-com/content-sites/handbook4,717链接型(87% 文件含链接)
Kubernetes KEPgithub.com/kubernetes/enhancements652提案型(自带状态字段)
Kubernetes website8,215站点型,口径失效,已作废

数据日期:2026-09-12。 全部为公开仓库当日快照,结论只在当日数据上成立(这类库每天都在变)。

说明:本文公开的是口径、判据与结论,测量脚本不在本次公开范围内 —— 口径定义已在上方完整给出,任何有基本工程能力的人都能独立复算或反驳我们的数字。能被复算的结论才是结论。

结语

我们用同一把尺子量了三个治理能力最强的组织,量到的不是「他们管得不好」,而是一个所有组织共有的结构性缺陷

制度的生产是有主人的(谁写谁加),制度的死亡是没有主人的(没人敢删)。

蚁群的信息素会自动蒸发 —— 于是留下的,一定是还在被使用的那一部分。人类组织至今没有这一半机制:所有知识库、所有 SOP、所有流程文档,最终都走向同一个终点 —— 只增不减,直到没人看。

所以该做的不是再写一份《知识管理规范》,而是给制度装上死亡机制

降级,不删除:默认不可见,随时可找回。 判断权交给时间和引用,不交给人的记性和勇气。

如果你的库算出来 > 50%,欢迎把数字(连同你的口径)发给我们 —— 我们想知道这个比率在真实企业里是什么分布,也想把有效的反驳写进下一版。

本文数据可复现,口径与判据全部公开。欢迎用同样的口径量你自己的库,也欢迎指出我们口径里的漏洞 —— 我们会把有效的反驳写进下一版。

交流 / 索取规范全文:[联系方式待定]

本文数据全部来自公开仓库当日快照(2026-09-12),口径与判据完整公开;封面配图为 AI 生成。