越界发现,记录于 #3730(订正 skills/objectui/guides/console-development.md 三处表/节的 13 个符号路径)期间。按纪律只报不改,单独立单,未认领。
打 finding:这是一条缺失的门禁,不是今天有人踩到的缺陷。用户面零影响,严重度留给分诊裁。
事实
skills/objectui/guides/*.md 是本仓 agent 写代码时的直接输入,正文里大量以反引号给出仓内路径当坐标(packages/app-shell/src/layout/UnifiedSidebar.tsx 这类)。没有任何门禁校验这些路径在磁盘上存在。
scripts/check-doc-links.mjs 的 SCAN_ROOTS(该文件第 392 行起)为
content/docs / examples / README.md / CONTRIBUTING.md / ROADMAP.md / docs / packages/*/README.md
—— 不含 skills/。且它校验的是 markdown 链接([x](y)),本来也不看反引号里的裸路径。
- 全仓搜
skills/ 的其他消费者:只有 scripts/__tests__/check-control-bytes.test.ts 命中,且那是它自己的 fixture 路径(.claude/skills/demo/SKILL.md),与本仓 skills/ 无关。
- 结论:
skills/** 正文里的仓内路径当前完全无人校验。
代价已经付了两轮,两轮都是靠人在阅读时肉眼发现:
这类错误的成本形态很特殊:符号都真实存在,只是坐标错了,所以 agent 照着去 Read/Edit 得到「文件不存在」,浪费一整圈定位,而不是立刻拿到一个编译错误。它也天然会复发 —— 代码搬家(c1e105793 / 28ffe4033 / b279d80d6 / cccdf84d7 这批 app-shell 抽取)不会有任何东西提醒 guide 跟着改。
一个可行的最小形状(仅供分诊参考,不预设结论)
抽出 skills/**/*.md 正文里所有反引号 token,取形如 ^(apps|packages|examples|scripts|content)/ 且不含空格的,逐个 existsSync。PR #3734 里我用一个 8 行 node 脚本跑过全文,34 条候选命中 33 条存在,唯一「不存在」的是一句故意的否定句(「apps/console/src/context/ 这个目录并不存在」)—— 说明:
- 信噪比够高,可直接当门禁;
- 但必须有豁免机制,因为「指出某路径不存在」是 guide 的合法写法(
packages/spec/src/ 下带占位段的路径同理)。豁免可以是 baseline JSON(仿 scripts/i18n-call-site-key-baseline.json)或行内注释标记,哪种更合仓内习惯由维护者定。
要不要连 content/docs/** 一起纳入(那里同样有反引号裸路径,且已在 SCAN_ROOTS 里但只查链接)也是分诊可以一并裁的范围问题。
关联
已就关键词(skills guides path、console-development.md、check-doc-links SCAN_ROOTS、docs path gate)搜过本仓开放 issue,无同源单。
Generated by Claude Code
越界发现,记录于 #3730(订正
skills/objectui/guides/console-development.md三处表/节的 13 个符号路径)期间。按纪律只报不改,单独立单,未认领。打
finding:这是一条缺失的门禁,不是今天有人踩到的缺陷。用户面零影响,严重度留给分诊裁。事实
skills/objectui/guides/*.md是本仓 agent 写代码时的直接输入,正文里大量以反引号给出仓内路径当坐标(packages/app-shell/src/layout/UnifiedSidebar.tsx这类)。没有任何门禁校验这些路径在磁盘上存在。scripts/check-doc-links.mjs的SCAN_ROOTS(该文件第 392 行起)为content/docs/examples/README.md/CONTRIBUTING.md/ROADMAP.md/docs/packages/*/README.md—— 不含
skills/。且它校验的是 markdown 链接([x](y)),本来也不看反引号里的裸路径。skills/的其他消费者:只有scripts/__tests__/check-control-bytes.test.ts命中,且那是它自己的 fixture 路径(.claude/skills/demo/SKILL.md),与本仓skills/无关。skills/**正文里的仓内路径当前完全无人校验。代价已经付了两轮,两轮都是靠人在阅读时肉眼发现:
这类错误的成本形态很特殊:符号都真实存在,只是坐标错了,所以 agent 照着去
Read/Edit得到「文件不存在」,浪费一整圈定位,而不是立刻拿到一个编译错误。它也天然会复发 —— 代码搬家(c1e105793/28ffe4033/b279d80d6/cccdf84d7这批 app-shell 抽取)不会有任何东西提醒 guide 跟着改。一个可行的最小形状(仅供分诊参考,不预设结论)
抽出
skills/**/*.md正文里所有反引号 token,取形如^(apps|packages|examples|scripts|content)/且不含空格的,逐个existsSync。PR #3734 里我用一个 8 行 node 脚本跑过全文,34 条候选命中 33 条存在,唯一「不存在」的是一句故意的否定句(「apps/console/src/context/这个目录并不存在」)—— 说明:packages/spec/src/下带占位段的路径同理)。豁免可以是 baseline JSON(仿scripts/i18n-call-site-key-baseline.json)或行内注释标记,哪种更合仓内习惯由维护者定。要不要连
content/docs/**一起纳入(那里同样有反引号裸路径,且已在SCAN_ROOTS里但只查链接)也是分诊可以一并裁的范围问题。关联
scripts/check-doc-links.mjs—— 最近的同类门禁;其 docblock 记录的历史(content/docs 有 16 个失效的相对链接,且 check-doc-links.mjs 对相对链接一律放行 #3479 / content/docs 有 18 条链接在站上是 404,但 check-doc-links 按设计放行(1 条相对链接跑出 docs collection + 17 条 /spec /protocol /api /examples 绝对链接) #3490 / CONTRIBUTING.md / ROADMAP.md 共 3 条死链:处在 check-doc-links 与 lychee 的双重扫描盲区 #3545 一次扩面就要连带清红)说明扩面要先量红再落地。已就关键词(
skills guides path、console-development.md、check-doc-links SCAN_ROOTS、docs path gate)搜过本仓开放 issue,无同源单。Generated by Claude Code