deepseek-harness 学习手册
← 返回 8.3 把工程约定写成 AI 可执行的形式
工程文化 · 8.3›Skill 09 · dsh-doc-site-sync
9 min

dsh-doc-site-sync

文档站是一个「受测的投影」:仓库 Markdown 是唯一可编辑源头,website/docs.ts 选页,投影器重写链接。

最后核对于 v0.1.1-rc.2 · commit b150a551b8 · 2026-08-22

这是 .agents/skills/dsh-doc-site-sync/SKILL.md 的中文精读。它维护一个关键的不变量:文档站不是另一份文档,而是仓库 Markdown 的一个「受测的投影」。

什么时候触发

发布、更新、移动或移除文档站页面;编辑 website/docs.ts 的映射或导航;诊断「某页在 VitePress 站上不见了」;修投影后的文档链接;或在网站内容改动后跑 docs:dev / docs:check / doc-sync 工作流时使用。

投影模型

仓库 Markdown 是唯一可编辑的内容源。网站是被测试的投影:

双语布局:源与路由是解耦的

仓库翻译遵守兄弟配对契约:英文 foo.md、中文 foo.zh.md、foo.i18n.yaml 住在一起。绝不为网站内容创建 zh-CN/ 之类的 locale 目录。而站上的路由树独立于源布局:foo.zh.md 投影到根路由,foo.md 投影到对应的 /en/ 路由。

先读属主契约

给改动分类

改动类型动作
编辑已发布的页只改它的权威 Markdown 源;路由或导航元数据不变就不碰清单
发布新页先建在它所属的 docs/ 层级,再加一条清单条目
改名 / 移动 / 移除权威文件、清单条目、仓内入站链接原子地同改;删掉陈旧清单条目(docs:check 会拒绝缺失的源)
发布生成的目录映射生成的 docs/ 文件,但改的是它的生成器或源元数据,绝不手改目录
改站点结构普通页面动清单;只有现有 sidebar / section / locale 模型表达不了时才动 VitePress 配置

绝不编辑或提交 website/.generated/、website/.cache/、website/.dist/。除 website/AGENTS.md 外,website/ 下不加任何 Markdown;website/zh-CN/、website/en/、website/api/ 这类 locale/route 目录是非法的源布局。生成的目录留在 docs/ 下做新鲜度门禁,通过清单发布。

清单条目的每个字段都要刻意

mirroredPages() 只用于「刻意在两个路由树里都回退到同一可用语言」的源;对侧补齐后要转成 pairedPages()。清单是一份显式的公开白名单:不要因为 RFC、postmortem、测试指南、AGENTS.md、维护者工作流恰好在 docs/ 下就发布它们——只有用户明确扩大发布范围时才加内部材料。

权威文档里写正常的仓库相对 Markdown 链接,投影器负责:

不要为迁就 VitePress 而把网站专属路由写进权威 Markdown。目录式的仓库链接想解析到某个映射的 index 页,用 sourceAliases。

预览与验证

terminal
$ pnpm docs:dev      # 边改边预览;改了清单而新源没被拾取就重启
$ pnpm docs:check    # 把映射当成有效之前的聚焦门禁

Markdown 链接检查过了但站点构建报缺 fragment 时,按 verify-doc-site-fragments 报告的源与目标路径处理,用显式别名保住英文 GitHub id。

提交文档站改动之前跑:

terminal
$ pnpm run doc-sync
$ pnpm run lint
$ git diff --check

push 前用 dsh-pre-push-checks。汇报:改动的权威文件、增删的清单条目、受影响的公开路由、实际跑过的检查。

部署是另一回事

同步 ≠ 发布

把内容同步进 VitePress 构建并不会把它发到互联网上。除非用户明确要求部署并确认了托管政策,否则不要加 GitHub Pages 权限、部署工作流、自定义域名或公开托管。

← 返回 8.3 把工程约定写成 AI 可执行的形式
目录

本页

Skill 09 · dsh-doc-site-sync