Uh oh!
There was an error while loading. Please reload this page.
fix(spec): 参考页里写在括号中的裸源码路径重新成链接 —— 删掉 tokenizer 之后已无事可做的前后瞻对 - #6491
Conversation
`file-description.ts` 的 bare-path 改写步骤两端各挂一个前后瞻:`(?<!\()` 与 `(?!\))`。这是 tokenizer 出现之前的产物,本意是「别动已经是链接目标的路径」—— `](route)` 恰好把路径夹在这两个字符中间。前后瞻从来说不出这件事(说不出「不在 链接内部」,模块注释里写着),而 #6136 之后它更是无事可做:成形的链接是独立的 `link` token,这一步只会拿到 `text` token。 它仍在做的,是把作者写在**普通括号**里的路径一并拒掉 —— 那是散文,不是链接。 于是这些路径既没成链接也没成代码,以纯文本发布在三张参考页上(4 处)。 删掉这对前后瞻,原本想守的不变量交还给 tokenizer 守。目标没有页面的路径照旧 回退成代码段,所以括号位置不会产出 404。 单测 6 条与 #6229 的 7 条并列;语料级一条断言「能被本步匹配的路径不会以裸文本 留在括号里」。反向验证(实测):把前后瞻整对放回、或只放回任一半,都让 4 条括号 用例 + 语料条转红,其余全绿 —— 包括「成形链接的目标不被二次改写」那条,它证明 守不变量的现在是 tokenizer。 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AZgRyPVwi1jLb1mNNuUQ9o
`pnpm --filter @objectstack/spec gen:docs` 的纯产物,未手改一个字节。
231 个产物里 3 个文件、4 行变化,即本次放宽的全部实测半径:
- references/automation/etl:16 (integration/connector.zod.ts)
- references/integration/connector:17 (automation/etl.zod.ts)
- references/shared/mapping:16-17 (integration/connector.zod.ts) 与 (data/external-lookup.zod.ts)
三条新路由 /docs/references/{integration/connector,automation/etl,data/external-lookup}
均对应真实存在的页面。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AZgRyPVwi1jLb1mNNuUQ9o…s-gen-bare-path-parens
…6420) #6473(#6383)在飞行中落地,与本单同页相撞。按本仓成规**不做文本合并**: 合 main 后在合并树上整体重跑 `gen:schema && gen:docs`(#4675 第四步),产物取 生成器输出,未手改一个字节。仓库自带的 regen merge driver 也正是这样拒绝 文本合并并给出这条指令的。 合并后同页实测两侧效果俱在: - #6473:第 27-43 行「What this layer does NOT provide」一节在; - 本单:第 17 行 `- **ETL Pipeline** (automation/etl.zod.ts)` 已成链接。 并复核 #6473 新增散文里的路径:第 43/54/80/106/113 行均在反引号内,是 `code` token,本单放宽够不着 —— 与派单预判一致,此处为实测而非假定。 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AZgRyPVwi1jLb1mNNuUQ9o
The latest updates on your projects. Learn more about Vercel for GitHub. 1 Skipped Deployment
|
📓 Docs Drift CheckNo hand-written docs reference the 0 changed package(s). ✅ |
os-project-manager
commented
Aug 8, 2026
PM 验收:通过,转 ready for review。( 不取信实施报告,以下四项由本座位独立复核:
CI 26/26 全绿,含 ESLint job 携带的那组家族门禁(本地 一处记录在案的假红,值得其他座位复用:新 worktree 首跑 顺带扫出的 #6484 处理正确:独立立单、未认领未打标留给分诊,且明确不在本 PR 内顺手修 —— 它要动 Generated by Claude Code |
Uh oh!
There was an error while loading. Please reload this page.
Fixes#6420
问题
参考页开篇那段模块描述由
packages/spec/scripts/lib/file-description.ts渲染。其中把 JSDoc 里裸写的*.zod.ts路径改写成站内链接的那一步(renderProse()),正则两端各挂着一个前后瞻 —— 「前面不是左括号」和「后面不是右括号」。这对前后瞻是 tokenizer 出现之前的产物,本意是「别去动已经是链接目标的路径」:
](route)恰好把那个路径夹在这两个字符中间。它从来表达不了这件事(前后瞻说不出「不在链接内部」—— 该文件模块注释里就写着这句),而 #6136 之后它更是无事可做:成形的链接是独立的linktoken,这一步只会拿到texttoken。它仍在做的,是把作者自己写在普通括号里的每一个路径一并拒掉。那是散文,不是链接,于是这些路径既没成链接、也没回退成代码段,以纯文本发布在三张参考页上:
references/automation/etl:16- **Enterprise Connector** (integration/connector.zod.ts) - …references/integration/connector:17- **ETL Pipeline** (automation/etl.zod.ts) - …references/shared/mapping:16- Integration connectors (integration/connector.zod.ts)references/shared/mapping:17- External lookups (data/external-lookup.zod.ts)变更
删掉这对前后瞻,它们原本想守的不变量交还给 tokenizer 守。渲染成链接的前提没有放宽 —— 目标没有页面的路径照旧回退成代码段,所以括号位置永远不会产出 404。
四处的前后对照:
放宽的实测半径:就是这四处,别无其他
分诊座位点名这是本单最需要量出来的数,也定了一条 stop-and-report。在修好的生成器上重跑
pnpm --filter @objectstack/spec gen:docs:231 个产物,3 个文件,4 行 —— 新成链接的位置全语料共 4 处,与 issue 点名的四处完全重合,零附带。三条新路由
/docs/references/{integration/connector, automation/etl, data/external-lookup}均对应真实存在的.mdx;顺带把content/docs/references/**里发出的全部 214 条站内路由逐条核了一遍,无死链(其中 14 条是分类首页,落在分类/index.mdx)。stop-and-report 条件未触发。
反向验证 —— 方向是先预言再跑的
预言:把守卫放回去,四条括号用例 + 语料条转红,其余全绿。实测三种放法结果一致:
Tests 5 failed | 41 passed (46)Tests 5 failed | 41 passed (46)Tests 5 failed | 41 passed (46)红的恒是同一组:四条括号用例 + 语料条。未括号用例、#6229 整块、以及「成形链接的目标不被二次改写」那条,三种放法下全绿 —— 最后这条正是本 PR 的立论:守不变量的现在是 tokenizer,不是被删掉的守卫,所以删它不会重开 #6136。
这一点也单独量过,没有只靠推断:把 bare-path 那步的 token 白名单从「只含 text」改成「text 加 link」(即模拟 tokenizer 保护失效),#6136 的两条与这条一起转红,输出正是注释里写下的那个形状(下面去掉了 vitest 的外层引号):
测试
packages/spec/scripts/file-description.test.ts新增 6 条单测(与 #6229 的 7 条并列)+ 1 条语料级断言:automation/etl已发布那行的逐字输入;shared/mapping形状(与上一条的闭合方式不同,后瞻两者都拒);../前缀 —— docs-gen: 正文里裸露的../x.zod.ts路径,../前缀被漏在链接外面 —— 2 张已发布参考页 #6229 与本单可组合;.mdx——check:docs会忠实复制产物,三处已发布症状正是这样一路绿过来的)。与在飞 #6473 的同页相撞
#6473(#6383)在本单实施途中于 01:38Z 落地,与本单同改
content/docs/references/integration/connector.mdx。⛔ 未做文本合并:合main后在合并树上整体重跑gen:schema与gen:docs(#4675 第四步,#6224 / #5552 有先例)。仓库自带的 regen merge driver 也正是这样拒绝文本合并并给出这条指令的。packages/spec/src/integration/connector.zod.ts本单一字未碰。合并后同页实测两侧效果俱在:#6473 的「What this layer does NOT provide」一节在第 27-43 行;本单的第 17 行已成链接。并逐行复核 #6473 新增散文里的路径(第 43 / 54 / 80 / 106 / 113 行)全在反引号内,是
codetoken,本单放宽够不着 —— 此处为实测,非假定。门禁(全部前台执行,持容器级
flock锁,--filter限定范围)在合并后的树上:
Tests 8706对得上账:main上是 8699,本单新增 6 + 1 = 7 条。check:generated首跑曾报api-surface/陈旧 —— 那是新 worktree 未 build 的假红(gen:api-surface直接以Could not resolve module symbol … Is the package built?失败)。pnpm --filter @objectstack/spec build后复跑 10 项全绿,api-surface/一个字节未变 —— 本单不碰packages/spec/src,结构上不可能影响它。另在构建产物里核了终态:
.next/server/app/en/docs/references/shared/mapping.html与automation/etl.html里,这几处已是真正的a href锚点。交付物取舍
patch,@objectstack/spec):有读者可见的产物 —— 三张已发布参考页上四处纯文本变成可点链接。content/docs/releases/。gen:docs纯输出,未手改一个字节;源码修改与重生成分属不同 commit(合并树上的重跑再单列一个)。顺带扫出、未在本 PR 修
#6484 —— 同目录裸路径(无分类段,如
auth.zod.ts)从来不成链接:改写正则与sourcePathToDocsRoute()两侧都要求路径里有一个/,所以这类路径带不带括号都以纯文本落地。实测模块描述管线内 9 处 / 4 张已发布页,另有 2 处在 schema 级 description 那条别的管线里。已按 Prime Directive #10 独立立单(未认领、未打标,留给分诊),不在本 PR 内顺手修 —— 它要动的是FileDescriptionContext的入参契约,本单一个字节都不碰那个接口。🤖 Generated with Claude Code
https://claude.ai/code/session_01AZgRyPVwi1jLb1mNNuUQ9o