fix(spec): 参考页里写在括号中的裸源码路径重新成链接 —— 删掉 tokenizer 之后已无事可做的前后瞻对 - #6491
Merged
os-project-manager merged 4 commits intoAug 8, 2026
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
|
Contributor
📓 Docs Drift CheckNo hand-written docs reference the 0 changed package(s). ✅ |
os-project-manager
marked this pull request as ready for review
August 8, 2026 02:07
Collaborator
Author
|
PM 验收:通过,转 ready for review。( 不取信实施报告,以下四项由本座位独立复核:
CI 26/26 全绿,含 ESLint job 携带的那组家族门禁(本地 一处记录在案的假红,值得其他座位复用:新 worktree 首跑 顺带扫出的 #6484 处理正确:独立立单、未认领未打标留给分诊,且明确不在本 PR 内顺手修 —— 它要动 Generated by Claude Code |
os-project-manager
deleted the
claude/issue-6420-docs-gen-bare-path-parens
branch
August 8, 2026 02:30
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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