Blocked-by: #6136
在实施 #5553 / #6136(PR #6224)时,给渲染链补 pin 用例顺带扫出。与那两单不同根因、不同输入形态,故单独立单;PR #6224 已刻意绕开这条形态,没有 pin 它(pin 了等于追认),并在用例注释里指向本单。
现象(origin/main,PR #6224 落地后依然如此)
packages/spec/scripts/lib/file-description.ts 里把「正文中裸露的源码路径」改写成链接的那一步:
.replace(/(?<!\()\b((?:\.\.\/)?[\w-]+\/[\w.-]+\.zod\.ts)\b(?!\))/g, …)
\b 写在可选的 (?:\.\.\/)? 前面。匹配起点若落在 ../ 的第一个 . 上,前面是空格、当前是 .,两侧都不是单词字符,\b 不成立;于是引擎只能从 integration 这类标识符处起匹,../ 被留在链接外面。
落到已发布页面上(两处):
content/docs/references/api/http-cache.mdx
See also: ../../[system/cache.zod.ts](/docs/references/system/cache) for application-level caching
content/docs/references/system/cache.mdx
See also: ../../[automation/etl.zod.ts](/docs/references/api/http-cache) for HTTP-level caching
读者看到「另见」前面挂着一截裸的 ../../,链接文本也不是完整路径。
与 #6136 的区别(为什么不是同一条)
#6136 是无标题 {@link 路径} 先产出链接、改写器再包一层(链接套链接);修法是让改写器跳过已成型链接,PR #6224 已修。本单的输入里没有 {@link} —— 源码写的是裸标签 @see ../../system/cache.zod.ts(api/http-cache.zod.ts:35、system/cache.zod.ts:28),链接完全由这一步自己产出,../ 从一开始就没进去。#6224 修好后这两处仍在,可直接复现:
$ grep -rn '\.\./\[' content/docs/references/
api/http-cache.mdx:… system/cache.mdx:…
两个叠加的子缺陷
\b 位置错(如上),../ 掉在链接外。
(?:\.\.\/)? 只写了一层,而实际语料用的是 ../../(跨 category 引用必然两层)。即便修好 (1),两层前缀也只能吃掉一层。
修法方向(未验证)
把可选前缀移到 \b 之外并允许重复,例如 ((?:\.\.\/)*[\w-]+\/[\w.-]+\.zod\.ts)\b,起点锚定改用「前面不是路径字符」的前瞻而非 \b。注意 sourcePathToDocsRoute()(build-docs.ts:278)本身用 (?:^|\/) 起匹,对 ../../a/b.zod.ts 已能正确解析出 category,所以路由侧无需改。
验收:grep -rn '\.\./\[' content/docs/references/ 归零,两句恢复成完整可点链接。渲染链已由 scripts/file-description.test.ts 覆盖,新用例可直接加在那里,不必跑整个生成器再 grep .mdx。
影响面
2 张已发布参考页的正文各一处,读者今天访问就能看到。纯展示层,无运行时/协议语义。
Generated by Claude Code
Blocked-by: #6136
在实施 #5553 / #6136(PR #6224)时,给渲染链补 pin 用例顺带扫出。与那两单不同根因、不同输入形态,故单独立单;PR #6224 已刻意绕开这条形态,没有 pin 它(pin 了等于追认),并在用例注释里指向本单。
现象(origin/main,PR #6224 落地后依然如此)
packages/spec/scripts/lib/file-description.ts里把「正文中裸露的源码路径」改写成链接的那一步:\b写在可选的(?:\.\.\/)?前面。匹配起点若落在../的第一个.上,前面是空格、当前是.,两侧都不是单词字符,\b不成立;于是引擎只能从integration这类标识符处起匹,../被留在链接外面。落到已发布页面上(两处):
读者看到「另见」前面挂着一截裸的
../../,链接文本也不是完整路径。与 #6136 的区别(为什么不是同一条)
#6136 是无标题
{@link 路径}先产出链接、改写器再包一层(链接套链接);修法是让改写器跳过已成型链接,PR #6224 已修。本单的输入里没有{@link}—— 源码写的是裸标签@see ../../system/cache.zod.ts(api/http-cache.zod.ts:35、system/cache.zod.ts:28),链接完全由这一步自己产出,../从一开始就没进去。#6224 修好后这两处仍在,可直接复现:两个叠加的子缺陷
\b位置错(如上),../掉在链接外。(?:\.\.\/)?只写了一层,而实际语料用的是../../(跨 category 引用必然两层)。即便修好 (1),两层前缀也只能吃掉一层。修法方向(未验证)
把可选前缀移到
\b之外并允许重复,例如((?:\.\.\/)*[\w-]+\/[\w.-]+\.zod\.ts)\b,起点锚定改用「前面不是路径字符」的前瞻而非\b。注意sourcePathToDocsRoute()(build-docs.ts:278)本身用(?:^|\/)起匹,对../../a/b.zod.ts已能正确解析出 category,所以路由侧无需改。验收:
grep -rn '\.\./\[' content/docs/references/归零,两句恢复成完整可点链接。渲染链已由scripts/file-description.test.ts覆盖,新用例可直接加在那里,不必跑整个生成器再 grep.mdx。影响面
2 张已发布参考页的正文各一处,读者今天访问就能看到。纯展示层,无运行时/协议语义。
Generated by Claude Code