在实施 #6420(括号里的裸路径)时顺带扫出,非本单范围,按 Prime Directive #10 独立记录。⛔ 未自我认领。
#6420 修的是「括号」这一位置类;这一条是另一种输入形状 —— 路径相对自己所在目录书写,因而没有分类段。两者在同一个改写步骤里,但成因与修法都不同,零重叠。
观察
packages/spec/scripts/lib/file-description.ts 的 bare-path 改写步骤,以及 packages/spec/scripts/build-docs.ts:288 的 sourcePathToDocsRoute(),两侧都要求路径里至少有一个目录段:
- 改写正则要求
[\w-]+ + / + [\w.-]+\.zod\.ts;
- 解析器
target.match(/(?:^|\/)([\w-]+)\/([\w.-]+)\.zod\.ts$/) 同样要求那个 /,并把第一段当分类名。
所以作者写 auth.zod.ts(与自己同目录)时:正则根本不匹配 → 既不成链接,也不回退成代码段,以纯文本落在页面上。这与括号无关 —— 带不带括号都一样。
根因是 FileDescriptionContext 只收路径字符串,从未被告知正在渲染哪个文件;而生成器自己是知道的(build-docs.ts 按 category 遍历)。分类段本可以由渲染方补上。
实测(origin/main @ 7b48cf9,#6420 分支上重跑生成器所得)
模块描述管线内共 9 处,分布在 4 个源文件 / 4 张已发布页:
| 源文件 |
裸写的路径 |
目标页是否存在 |
api/realtime-shared.zod.ts |
realtime.zod.ts |
有(api/realtime) |
api/realtime-shared.zod.ts |
websocket.zod.ts |
有(api/websocket) |
cloud/package.zod.ts |
package-version.zod.ts |
有(cloud/package-version) |
cloud/package.zod.ts |
environment-package.zod.ts |
有(cloud/environment-package) |
identity/identity.zod.ts |
auth.zod.ts |
无 |
system/security-context.zod.ts |
audit.zod.ts |
无 |
system/security-context.zod.ts |
encryption.zod.ts |
有(system/encryption) |
system/security-context.zod.ts |
compliance.zod.ts |
无 |
system/security-context.zod.ts |
masking.zod.ts |
无 |
发布面对应 content/docs/references/ 下的 api/realtime-shared.mdx:19,21、cloud/package.mdx:17,18、identity/identity.mdx:13、system/security-context.mdx:14,16,17,18。
5 / 9 的目标页并不存在,所以这不是「放宽正则就完事」:那 5 处按 #6229 立下的规矩应当回退成代码段(目标没有页面就不发链接),而不是继续当纯文本 —— 但即便如此也仍是改善,纯文本是三种结果里唯一错的那种。
另有 2 处在别的管线里:security/permission.mdx:134 与 ui/page.mdx:111。那是 schema 级 description,由 lib/escape-mdx.ts 渲染,完全不做路径改写 —— 是相邻但独立的一面,不建议混在同一单里。
#6420 删的是括号前后瞻,改的是「位置」;这一条要改的是路径形状与 FileDescriptionContext 的入参契约(需要把渲染方的 category 递进去)。后者动的是那个接口的公开形状,#6420 一个字节都不碰它。两单也不互为前置。
待定的契约问题(所以只作记录,不自带结论)
补分类段有两种读法,选哪种会定下 FileDescriptionContext 的形状:
倾向 A(与 #4696 已定的方向一致,且不新造消歧规则),但这是接口面的决定,留给分诊/维护者裁定。
Generated by Claude Code
在实施 #6420(括号里的裸路径)时顺带扫出,非本单范围,按 Prime Directive #10 独立记录。⛔ 未自我认领。
#6420 修的是「括号」这一位置类;这一条是另一种输入形状 —— 路径相对自己所在目录书写,因而没有分类段。两者在同一个改写步骤里,但成因与修法都不同,零重叠。
观察
packages/spec/scripts/lib/file-description.ts的 bare-path 改写步骤,以及packages/spec/scripts/build-docs.ts:288的sourcePathToDocsRoute(),两侧都要求路径里至少有一个目录段:[\w-]++/+[\w.-]+\.zod\.ts;target.match(/(?:^|\/)([\w-]+)\/([\w.-]+)\.zod\.ts$/)同样要求那个/,并把第一段当分类名。所以作者写
auth.zod.ts(与自己同目录)时:正则根本不匹配 → 既不成链接,也不回退成代码段,以纯文本落在页面上。这与括号无关 —— 带不带括号都一样。根因是
FileDescriptionContext只收路径字符串,从未被告知正在渲染哪个文件;而生成器自己是知道的(build-docs.ts按 category 遍历)。分类段本可以由渲染方补上。实测(
origin/main@7b48cf9,#6420 分支上重跑生成器所得)模块描述管线内共 9 处,分布在 4 个源文件 / 4 张已发布页:
api/realtime-shared.zod.tsrealtime.zod.tsapi/realtime)api/realtime-shared.zod.tswebsocket.zod.tsapi/websocket)cloud/package.zod.tspackage-version.zod.tscloud/package-version)cloud/package.zod.tsenvironment-package.zod.tscloud/environment-package)identity/identity.zod.tsauth.zod.tssystem/security-context.zod.tsaudit.zod.tssystem/security-context.zod.tsencryption.zod.tssystem/encryption)system/security-context.zod.tscompliance.zod.tssystem/security-context.zod.tsmasking.zod.ts发布面对应
content/docs/references/下的api/realtime-shared.mdx:19,21、cloud/package.mdx:17,18、identity/identity.mdx:13、system/security-context.mdx:14,16,17,18。5 / 9 的目标页并不存在,所以这不是「放宽正则就完事」:那 5 处按 #6229 立下的规矩应当回退成代码段(目标没有页面就不发链接),而不是继续当纯文本 —— 但即便如此也仍是改善,纯文本是三种结果里唯一错的那种。
另有 2 处在别的管线里:
security/permission.mdx:134与ui/page.mdx:111。那是 schema 级 description,由lib/escape-mdx.ts渲染,完全不做路径改写 —— 是相邻但独立的一面,不建议混在同一单里。为什么不并进 #6420
#6420 删的是括号前后瞻,改的是「位置」;这一条要改的是路径形状与
FileDescriptionContext的入参契约(需要把渲染方的 category 递进去)。后者动的是那个接口的公开形状,#6420 一个字节都不碰它。两单也不互为前置。待定的契约问题(所以只作记录,不自带结论)
补分类段有两种读法,选哪种会定下
FileDescriptionContext的形状:FileDescriptionContext增加fromCategory: string,由build-docs.ts传入,解析器在裸文件名上补它。与既有的schemaHrefFrom(fromCategory)(build-docs.ts:275,build-docs.ts 的 schema→页面索引按「裸名字」全局建表,同名跨 category 的 schema 会被归到错误的页面 #4696 为消歧同名 schema 而引入)是同一条缝,措辞与理由都现成。sourcePathToDocsRoute自己接受无斜杠形状,在全部分类里搜同名文件。省一个参数,但把 build-docs.ts 的 schema→页面索引按「裸名字」全局建表,同名跨 category 的 schema 会被归到错误的页面 #4696 明确拒绝过的「裸名不是身份」重新引进来 ——identity/auth.zod.ts与别处同名文件会撞。倾向 A(与 #4696 已定的方向一致,且不新造消歧规则),但这是接口面的决定,留给分诊/维护者裁定。
Generated by Claude Code