文档规范
文档规范
本文件只约定 docs/ 的组织方式。架构约束、TDD 流程、Plan 与 PR 要求、验证命令的权威来源是
AGENTS.md,此处不复制其正文,避免两份规则漂移。
目录职责
| 目录 | 面向 | 内容 | 变更方式 |
|---|---|---|---|
docs/user-guide/ |
使用者 | Client、Agent、管理后台、托管路由、SSH over WebSocket | 手工维护 |
docs/deployment/ |
部署者 | Docker、前端构建、Nginx、systemd/launchd/Windows Service、发行打包 | 手工维护 |
docs/operations/ |
运维 | 配置、Schema 升级、relay mTLS、连接池、可观测性、探针、日志、SLO、容量、排障、完整性清单 | 手工维护 |
docs/architecture/ |
架构 | 架构概览、集群架构 | 手工维护 |
docs/architecture/adr/ |
架构 | 架构决策记录 | 记录 + 生成索引 |
docs/protocol/ |
协议实现 | WebSocket frame、代理协议模块 | 手工维护 |
docs/api/ |
接口 | openapi.yaml,接口行为变更必须同步 |
手工维护 |
docs/en/ |
英文读者 | 生产部署、安全加固、三端使用入口 | 手工维护 |
docs/community/ |
社区与增长 | GitHub 元数据、技术文章、分发计划 | 手工维护 |
docs/assets/ |
所有读者 | 管理后台截图、演示 GIF、社交卡片 | 手工维护 |
docs/development/ |
贡献者 | 测试与验证、文档规范 | 手工维护 |
docs/superpowers/plans/ |
贡献者 | 实施计划(时点记录) | 记录 + 生成索引 |
docs/superpowers/specs/ |
贡献者 | 设计规格(时点记录) | 记录 + 生成索引 |
docs/pull-requests/ |
贡献者 | PR 描述记录(时点记录) | 记录 + 生成索引 |
docs/ 与 deploy/ 边界
仓库根目录的 deploy/ 不属于 docs/,两者按“产物 vs 说明”划分,不重复内容:
| 位置 | 放什么 | 不放什么 |
|---|---|---|
deploy/ |
可直接使用的部署产物:systemd unit、launchd/WinSW 模板、安装脚本、Prometheus 配置与规则、Grafana Dashboard 与 provisioning | 操作步骤、参数解释、排障流程 |
docs/ |
上述产物的使用说明、参数含义、安装步骤、升级与排障 | 第二份可执行产物或配置副本 |
deploy/README.md 是产物清单,逐条列出每个文件对应的 docs/ 文档;新增或重命名产物时必须同步
更新该清单。发布归档的目录布局由 scripts/build-release.sh 决定,属于对外契约,重命名
deploy/install、deploy/systemd、deploy/macos、deploy/windows 前必须先改脚本和
跨平台可执行文件打包。
命名约定
- 记录类文件必须带日期前缀:计划
YYYY-MM-DD-<feature-name>.md、规格YYYY-MM-DD-<feature-name>-design.md、PR 记录YYYY-MM-DD-<feature-name>.md、ADRNNNN-<short-title>.md。 - 说明类文件使用稳定语义名(
configuration.md、troubleshooting.md),不加日期,因为它们是 “当前状态”而不是“某次变更的记录”。 - 文件名一律英文短横线小写;正文标题使用中文。
- 每个目录都应有
README.md作为入口,GitHub 打开目录时才能直接渲染导航。
索引维护
计划、规格、PR 记录和 ADR 的索引由脚本生成,不要手工编辑:
python3 scripts/gen_doc_index.py
脚本扫描四个记录目录,按文件名日期与 feature slug 建立交叉引用,并识别正文中显式链接的
关联记录。因此新增记录时要在正文里链接对应的计划/规格/PR,否则索引只能靠 slug 猜测同名
关联。生成后检查 git diff,确认新记录已出现在索引中。
docs/README.md 是面向读者的分类索引,手工维护;新增说明类文档时必须同步登记,否则会成为
没有任何入口指向的孤儿文档。
时点记录不可改写
计划、规格、PR 记录和已接受的 ADR 是决策时点的证据:
- 不重写结论、不删除失败尝试、不追改验证结果。
- 需要修正时新增记录,或在计划正文标注“补记计划”并只记录已验证事实(AGENTS.md 紧急修复条款)。
- 允许的历史文件改动只有两类:链接维护(目标文档移动或改名时更新路径,不改动其余正文)和标识脱敏(把真实内网域名、主机名、机器名换成 RFC 2606 示例域)。脱敏只替换标识符,结论、时间线与验证结果必须原样保留。
- 文件改名前必须评估历史记录的引用面:
rg -l '<old-name>.md' docs/命中历史记录时,优先考虑 保留原名,避免为了命名美观而大面积改写历史文件。
语言与敏感信息
- 文档正文默认使用中文;命令、配置键、代码标识符、协议字段和错误码保持英文原文。
docs/en/与docs/community/面向英文读者和发布传播,可以使用英文;遇到语义冲突时以中文深度文档为准。- 文档与示例中不得出现密码、Token、私钥、生产 DSN、完整凭据或未脱敏日志。示例一律使用
tunnel.example.com、<token from the console>这类占位符。 - 真实内网域名、内部主机名与开发者机器名同样属于内部信息,测试夹具、示例配置、i18n 文案和
时点记录里都不得出现(历史上回归过两次:
91a030d清理后又被合并带回)。替换沿用固定映射: 动态后缀用apps.example.com,托管路由tm-*用tm-*.tm.example.com,控制台用example.com; 新增文档前先rg '<internal-domain>'确认没有把真实域名带回来,且不复述被清理的字符串。 - 涉及公网入口的示例必须使用真实存在的路径(
/ws/agent、/ws/client、/ws/tcp、/ws/webssh/<session-id>、/api/v1、/health/live、/health/ready、/metrics); 路径以internal/server/web.go和internal/server/health.go为准。
链接规范
- 使用仓库内相对路径,不写
file://、绝对路径或带机器名的路径。 - 链接目录时确保该目录有
README.md;否则链接在 GitHub 上只能看到文件列表。 - 提交前用
git diff --check检查空白错误,并确认新增链接的目标文件存在。