Files
deepseek-harness/.agents/notes/implemented/process/2026-08-13-published-document-fragments.zh.md
T
2026-08-13 14:20:09 +08:00

2.1 KiB

Agent Note: 校验已发布文档的 fragment

Status: implemented

English | 中文

Problem

verify-md-links 使用 GitHub 的 Markdown 标题 id 校验 fragment,而文档网站使用 VitePress 渲染标题。包含较多标点的标题与翻译后的标题可能通过源码校验,却在已发布 HTML 中没有对应 id。VitePress 构建成功只会校验目标页面,不会校验 fragment id。

Decision

docs:build 及其 MPA 变体会在 VitePress 生成 website/.dist 后运行 verify-doc-site-fragments。该校验器解析每个生成的 HTML 页面,按照 VitePress clean URL 解析每个内部 fragment 链接,并在构建产物不存在、目标页面不存在或请求的 id 缺失时失败。单元测试覆盖缺失构建产物、clean URL、.html 别名、同页链接、编码 id、缺失 id、缺失路由和外部链接排除。

生成的配置、工具和持久化目录会在包含较多标点的标题前生成与 GitHub 兼容的显式 id 别名。如果翻译页面的 VitePress 本地化标题 id 与双语对侧文件共享的 fragment 不同,编写者会添加语言无关的显式别名。源码 Markdown 校验保持独立,仍会拒绝在仓库渲染规则下无法解析的链接。

Alternatives considered

使用各语言专属的 fragment。 双语对侧文件会刻意保留相同的链接目标。语言专属 fragment 会使两侧源码不一致,还会要求每个链接生成方都了解目标语言翻译后的标题。

依赖 VitePress 标题 id。 这些 id 取决于渲染后的标点与本地化标题文本,无法保留仓库链接和生成引用已经使用的 GitHub id。

只检查 Markdown 源码。 这种做法不会校验发布产物,也无法发现 GitHub 与 VitePress slug 算法之间的差异。

Consequences

每次生产文档构建都会读取一次生成的 HTML,在现有网站构建后增加一个有界检查。跨页面 fragment 链接必须指向发布后仍存在的 id。显式别名成为已发布参考的一部分,使标题更换语言或标点后仍能保留既有 fragment。