beads 文档工程化指南:从概念模型到验证门禁的写作规范深度解析
2026/9/11 6:40:42 网站建设 项目流程

beads 文档工程化指南:从概念模型到验证门禁的写作规范深度解析

【免费下载链接】beadsBeads - A memory upgrade for your coding agent项目地址: https://gitcode.com/GitHub_Trending/beads1/beads

Beads 是面向编码 Agent 的持久化、依赖感知工作图(issue graph),其用户文档站(docs/)以 Mintlify 站点形式发布。本篇指南以仓库中.claude/skills/beads-docs/SKILL.md为核心骨架,系统拆解 beads 官方文档的"写作宪章":统一的概念模型、强制术语表、散文与排版纪律、图表管线、生成文档回源编辑机制,以及提交前必须运行的验证门禁。读完你将掌握 beads 文档的完整写作/评审工作流,并能用同一套标准审阅或贡献任何一篇 docs/ 下的页面。

一、这份 Skill 是什么:docs/ 的"房规"与读者定位

.claude/skills/beads-docs/SKILL.md是 beads 仓库为"写作、编辑、重构或评审用户文档"定义的 house style(房规)。它的适用面非常广:任何触碰docs/的工作——概念页、参考文档、集成指南、恢复手册、图表、docs.json导航,甚至"只修一处文案"的请求——都必须遵循它。它同时明确了读者对象:

  • docs/ 的读者是 beads 的"用户":人类或 Agent,安装bd、跟踪工作、同步数据的人;
  • 面向贡献者的材料engdocs/AGENTS.md)走另一套规则,可以字面化描述实现细节;
  • 因此文档的核心目标是:先讲动机再讲术语、全站用同一套说法、用图与代码片段代替大段散文、绝不与代码脱节

仓库中该 Skill 的配套材料位于 .claude/skills/beads-docs/references/,包括terminology.md(概念改名纪律)、simplification.md(精简段落流程)、verification.md(验证门禁清单),本文后续会逐一展开。

二、规范的核心:一份必须内化的概念模型

SKILL.md 反复强调:教学要一致,并链接到唯一的概念权威页 docs/core-concepts/index.md,而不是每页重新推导一遍模型。这个"canonical model"由以下概念构成:

概念角色关键点
bead(issue)工作单元一条被跟踪的工作项,带哈希 ID(如bd-a1b2)、类型、状态、优先级;"bead" 与 "issue" 指同一事物
dependency排序blocks边让工作项在阻塞者关闭前对 Agent 隐藏;parent-childrelateddiscovered-from只做组织不做阻塞
ready workbd ready计算的结果无开放阻塞者的 open 工作项,排除 in_progress、blocked、deferred、被 gate 挂起者——即可认领的前沿
formula工作流源文件一个定义步骤 DAG 的 TOML/JSON 文件;bd cook将其编译为 proto
proto工作流模板{{variables}}的模板 epic(label 为template);不是真实工作
molecule实例化工作流从 proto 浇筑出的真实 beads(bd mol pour);持久存在
wisp临时 molecule同样的实例化过程但生命周期是临时的(bd mol wisp);由bd purge清理
gate异步等待阻塞工作流步骤直到被关闭——由人、定时器、GitHub run/PR 或跨 rig 的 bead 关闭
sync跨机器移动在 git remote 的refs/dolt/data上做 Dolt push/pull;.beads/issues.jsonl只是被动导出,绝不是数据库
federation跨仓库同步跨仓库/组织的点对点共享

值得内化的管线是:formula → (cook) → proto → (pour) → molecule,或→ (wisp) → wisp;gate 会暂停 molecule 的步骤;bd ready浮出可认领的步骤;sync 把整张图搬到别的机器。

存储事实(页面反复写错的点):嵌入式模式(默认的bd init)数据在.beads/embeddeddolt/;服务端模式(bd init --server)在.beads/dolt/。绝不能把.beads/dolt/当作通用数据路径来写。

跨项目词汇(beads ↔ Gas City):姊妹项目 Gas City 也使用 molecule、formula、wisp、gate 这些词,但两套文档的用法不同——Gas City 把 molecule/wisp 当作 v1 实现细节(绝非用户概念),其 formula 是编排方法;而 beads 里 molecule/wisp/proto就是用户概念,formula 是被 cook 成 proto 的 TOML 源文件。写页面时严禁把 Gas City 的定义搬进 beads 页面(反之亦然)。

三、强制术语表:说同一件事,用同一个词

SKILL.md §2 给出"用左列,永不右列(除非特别注明)"的对照表。这套术语纪律在 .claude/skills/beads-docs/references/terminology.md 中有完整的"概念改名"规程。核心映射如下:

用这个不用这个备注
bead/issue"task"、"ticket"、"TODO item" 作为单元名两词都正确可互换;教身份时以bead领起,镜像 CLI 输出或 flag 时用issue;"task" 只是一种 issue 类型
ready work"unblocked queue"、"available tasks" 作为正式术语直接说bd ready返回什么:无开放阻塞者的 open 工作项
proto"template" 作概念名词template只保留为 proto 携带的字面 label
molecule行文中用 "mol"mol只是命令字面量(bd mol pour
formula与 molecule/proto 混为一谈formula 是文件;cook 产出 proto;pour 产出真实工作
gate"barrier"、"checkpoint"、"lock"gate 是带类型(human、timer、gh:run、gh:pr、bead)的异步等待条件
sync= Dolt push/pull把 export/import 说成同步工作流bd dolt push/bd dolt pullrefs/dolt/data.beads/issues.jsonl是给查看器和交换用的被动导出
embedded mode/server mode"local mode"、"daemon mode"嵌入式是默认,数据在.beads/embeddeddolt/;服务端连接dolt sql-server,数据在.beads/dolt/
federation把 "multi-repo sync" 当作独立功能名federation 才是点对点跨仓库共享功能
hash ID"random ID"、"UUID"bd-a1b2这类 ID 是内容派生哈希,长度自适应防碰撞

改名的纪律(references/terminology.md):概念在散文中改名,但每个反映程序真实字面量的字符串必须保留——代码和它的输出是事实来源,如果文档改了二进制仍会打印的字符串,文档就撒谎了。具体规程为:先普查docs/engdocs/README.md*.go中该词的出现;只改散文;保留程序输出、命令与子命令名(bd molbd dep)、flag、JSON 字段名、配置键(.beads/config.yaml)、label 名(proto 的templatelabel)、issue 类型、文件路径、任何反引号标识符;生成文件(docs/cli-reference/*docs/CLI_REFERENCE.mddocs.json中的 CLI pages 数组)绝不手改——要改就改cmd/bd/*.go里的 Cobra 字符串并跑生成脚本;还要留意连带词(改gate不能误伤 "delegate"/"aggregate",改mol不能破坏 "molecule")。

四、内容立场:先讲价值,再讲机制

SKILL.md §3 定义了内容立场(content stance):

  • 先动机后机制:一页以它解决的问题开头,然后给方案,再讲机制,绝不以词汇表开篇;
  • 文档不是项目历史:用户页面不出现internal/*包路径、不写"这在 vX 被移除了"、不做 "(v0.20.1+)" 版本门槛——beads 是 1.x 产品,pre-1.0 考古属于engdocs/或 CHANGELOG;
  • 以价值领起:beads 的价值是"编码 Agent 的持久化、依赖感知记忆"——工作图比会话活得久,Agent 不因上下文丢失而失忆。与 GitHub Issues、Jira、markdown TODO 清单的对比框架是最好的新用户转化工具,要放在页面靠前的位置;
  • 一个具体例子胜过三句抽象论述:断言能力时,展示bd调用及它的输出。

这条在 docs/getting-started/quickstart.md 中体现得淋漓尽致——首页先讲"扁平追踪器让 Agent 一上来就卡死"的问题,随即给出bd ready的对比输出,再进入安装与实操。

五、信息架构:docs.json 驱动的导航

导航定义在 docs/docs.json 中,分为九大组:Getting Started、Core Concepts、Architecture、Workflows、Recovery、Multi-Agent、Integrations、Community、Reference——其中生成的 CLI Reference 作为 Reference 内折叠的子组嵌套。要点:

  • 每个 section 都有 index/Overview 页:一两句话介绍该 section,然后列出每个子页并附一行准确摘要与链接;
  • 一页一职:一页既要教学又要当规范,两头都做不好——拆开并互相链接;
  • 概念材料统一收敛在core-concepts/index:其他页面不要重新推导模型,链接过去即可;
  • 仓库地图属于 README,不属于 docs/

docs.json还维护了庞大的redirects数组(如/QUICKSTART/getting-started/quickstart/MOLECULES/workflows/molecules),用于页面移动/重命名后的旧路由兼容。这也印证了 verification.md 的规则:移动或删除页面时,必须在redirects数组补一条从旧路由到新路由的跳转。

六、散文教义:把信息搬去更便宜的载体

SKILL.md §5 是"cut words, sharpen points"的实操层,核心思想是:多数臃肿是信息放错了介质,把它搬到更便宜的载体上,然后删掉不承担负载的部分。每页必须stand alone——冷着陆的读者需要一行式背景,而不是前一页。

Convert(把负载从散文搬走)

  • 关系或序列 →(mermaid 原生渲染;更丰富的图走 Excalidraw 管线,见 §七);
  • 并行的选项/字段/对比 →
  • "你运行 X,它做了 Y"的叙述 →带注释的 CLI 片段(展示命令和输出,注释关键行);
  • 边界情况与深层机制 →<Accordion>或参考页;把 80% 的常见情况留在页面上。

Delete(删除虚假负载):清喉式开场("在本节我们将……")、修饰链("generally / typically / in most cases")、复述、对代码片段已经展示的东西再叙述一遍、以及代替证据的形容词。

精简流程(references/simplification.md):当执行一次刻意的精简时,遵循每页循环(测量字数 → 按载体找机会 → 用页面自己的语气应用 → 损失检查 → 事实检查 → 跑门禁 → 预览后按批准提交,一次一页),并守住两条护栏:

  • 损失检查(loss-check):逐块对比删除的行——被删的如果是重要事实、命令、flag、配置键、注意点、行为或完整示例,且全站grep后无处安放,必须恢复为"更锐利的从句"而非原段落;
  • 事实检查(fact-check):对抗性地核验每个可检查的主张——CLI 命令/子命令/flag(最廉价的核对方式就是生成好的docs/cli-reference/页面)、配置键与默认值(internal/configfile/cmd/bd/config.go)、环境变量、文件与目录路径、issue 类型与依赖类型、数值默认值。默认"未验证"而非"没问题"。

七、强调与格式:最小干预原则

SKILL.md §6 的排版纪律:

  • 粗体在首次提及处命名术语斜体标记属性或对比;每段约 1–2 处标记,绝不重复强调已引入的术语,绝不一个短语同时用两种处理;
  • 正文没有# H1——frontmatter 的title就是 H1,正文用##/###
  • 链接是根相对且无扩展名/getting-started/quickstart);站外链接(engdocs/、仓库文件)用完整 GitHub URL;
  • Mintlify 把.md解析为 MDX:不能有 HTML 注释(用{/* … */}),尖括号占位符(如<id>)必须放进反引号或代码围栏内;
  • Mintlify 组件(<Note><Tip><Warning><Accordion>)要克制使用——滥用会失去力量。

八、图表管线:mermaid 优先,Excalidraw 走严格流程

§7 规定:mermaid 围栏原生渲染,图和流程优先用它;更丰富的图走 Excalidraw 管线——在docs/diagrams/excalidraw/下创作.excalidraw源文件,用make diagrams-excalidraw渲染(源文件与渲染出的.svg都提交),以/diagrams/excalidraw-rendered/<name>.svg形式嵌入并配描述性 alt 文本,标签保持简短。两条硬性规定:

  • 必须栅格化并检查每张渲染图——文字溢出和布局问题在文本 diff 里是看不见的;
  • 图和图片无法在 diff 中评审——渲染出来并先获得维护者批准再提交。

仓库 docs/core-concepts/index.md 里大量使用 mermaid 展示产品全貌循环(create → graph → ready → claim → close)、ready 判定、formula→proto→molecule 管线与 Dolt sync 拓扑,正是这条规定的落地范例。SKILL.md 强调这些图不是装饰:它们是"关系/序列搬去更便宜载体"这一散文教义的第一选择。

九、生成内容编辑在源头:CLI 参考文档的双阶段管线

§8 是全篇最具工程特色的一节:绝不手改生成文件。生成面包括:

  • docs/cli-reference/*.mddocs/docs.json里的 CLI Reference 页面数组——bdcmd/bd/*.go的 Cobra 命令字符串,通过bd help --docs-root把厂商中立的页面发射到未提交的 staging 树,再由tools/docsmint后处理成提交到仓库的 Mintlify 形式;bd 本身绝不发出 Mintlify(或任何站点生成器)专有内容,那部分归 docsmint 管;
  • docs/CLI_REFERENCE.md——单文件参考,由bd help --docs-root直接生成。

要改其中任何措辞,就改 Go 源(Short:Long:Example:字符串)并运行./scripts/generate-cli-docs.sh(它会跑完两个阶段)。要改 Mintlify 页面形式本身(注释标记、链接风格、导航),改tools/docsmint及其测试。漂移门禁(generate-cli-docs.sh --check、PR CI 中的scripts/check-cli-docs-drift.sh、docs-autofix bot)会对任何手改失败或自动修复。

文档描述的是固定发布版本,不是 maindocs/cli-docs.pin指名整份文档语料所对准的 release tag;管线从该 tag 构建 bd 并据此校验。Go 源在 main 上的改动,要等到 pin 被提升(发布时)并重新生成后才会出现在已提交的文档中。手写页面遵循同样的政策:写固定发布版的行为,绝不写 main 独有的功能。依据见engdocs/decisions/2026-07-17-docs-release-pin.md

十、完成前必跑的验证门禁

§9 与 .claude/skills/beads-docs/references/verification.md 共同定义了"文档工作完成"的验收标准,按成本从低到高排列:

# 1. 文档同步:docs.json 导航 <-> 文件一致性、链接约定 # (docs/ 内根相对无扩展名;engdocs/ 与精选根文件用精确路径)、 # 孤儿检测(只有 CLI_REFERENCE.md 豁免)。 go test ./test/docsync # 2. 生成 CLI 文档的新鲜度:从实时命令树重新生成并与 # docs/CLI_REFERENCE.md、docs/cli-reference/、docs.json 中的 # CLI pages 数组做 diff(bd 发射通用页面到 staging, # tools/docsmint 产出提交用的 Mintlify 形式)。 ./scripts/generate-cli-docs.sh --check # CI 的 blame 范围变体(只对 PR 自身引入的漂移失败): ./scripts/check-cli-docs-drift.sh # 3. 文档 flag 与新鲜度标记:过期的 flag/命令引用,以及参考文档上的 # `Last reviewed:` / `Freshness source:` 标记。 # (make check-docs 会一起跑 1 和 3。) ./scripts/check-doc-flags.sh ./bd ./scripts/check-doc-freshness.sh # 4. 编辑时实时预览。 make docs-dev # 或:./mint.sh dev -> http://localhost:3000 # 5. 按 CI 的方式检查坏链接(PR 上经 .github/workflows/docs-mintlify.yml # 做 baseline-aware 检查): ./mint.sh broken-links

门禁没有完全覆盖但同样重要的原则:

  • 每个代码围栏必须是真实的bash围栏应展示当前bd接受的命令(核对生成的 CLI 参考);formula 的 TOML 围栏必须能解析;
  • MDX 合法性:无 HTML 注释(用{/* … */})、反引号外无裸尖括号占位符、Mintlify 组件闭合平衡;
  • 无正文# H1——frontmatter 的title才是 H1(注意代码围栏里的#注释不是 H1,要防误报);
  • 新鲜度标记:带Last reviewed:/Freshness source:的页面(configuration、ide-setup、azure-devops、json-schema、init-safety 等)编辑时必须保持完整且更新,scripts/check-doc-freshness.sh强制格式、时效与所命名的源路径存在。

移动或删除页面时要完成四步:在docs/docs.jsonredirects数组补跳转;全仓库改写入站链接(README、engdocs/、examples/、npm-package/、plugins/、integrations/、scripts、Go 注释——用 grep 而非猜);检查bd是否打印旧路径(是则改 Go 源并重新生成,绝不建指针桩);修正锚文本并去重已坍缩到同一目标的链接。

十一、评审与提交纪律

§10 规定了协作流程:作者 → 维护者评审 → 在明确批准后提交。这对图和图片尤为重要——它们无法在文本 diff 中评审。提交按受众分组:用户文档(docs/)与贡献者文档(engdocs/AGENTS.md)分开,与生成器/Go 改动分开。文档工作按AGENTS.md以 bd issue 跟踪。

结语:一套"永不与代码脱节"的文档系统

纵观全文,.claude/skills/beads-docs/SKILL.md真正回答的问题不是"怎么写好看的文档",而是"在代码即事实来源的项目里,如何让文档长期不撒谎"。它用四个机制达成这一点:概念模型统一(全站共享core-concepts/index的唯一权威定义)、术语纪律(散文改名但字面量永远跟随二进制输出)、生成内容回源(CLI 参考文档只能改 Go 源后重新生成,配合cli-docs.pin对准固定发布版)、以及自动化的漂移门禁(go test ./test/docsyncgenerate-cli-docs.sh --check、freshness 检查)。对贡献者而言,这套 Skill 既是写作模板也是评审清单;对读者而言,它解释了为什么 beads 的文档能保持"先动机、后机制、图与片段代替散文、永不漂移"的品质。如果你想上手实践,可以从 docs/getting-started/quickstart.md 读起,再对照 docs/core-concepts/index.md 体会概念模型如何被复用,最后跑一遍 §10 的门禁清单感受"验证优先"的文档文化。

【免费下载链接】beadsBeads - A memory upgrade for your coding agent项目地址: https://gitcode.com/GitHub_Trending/beads1/beads

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询