问题
docs/(不是 docs-site/)里按 blob/main/<file>#L<n> 钉的源码引用,有一批已经指错了,
而且现有的任何一道门都不覆盖它们 。
数字(都是跑出来的,不是估的)
一、docs/ 完全不在 #843 那道门的范围内
scripts/check-doc-source-pins.py:54:
把它临时改成 "docs" 再跑同一个脚本:
pin_doc_pairs=37 unique_pins=36 broken_pins=8
FAIL: 7 个新的失效 pin(不在基线里)
7 条明细:
[trivial-line] agent-network/bin/cli.ts#L1724 // 缺 bun/bunx 时直接 process.exit(1)…
[trivial-line] agent-network/bin/cli.ts#L198 (空行)
[trivial-line] agent-network/bin/cli.ts#L2044 });
[trivial-line] agent-network/bin/cli.ts#L228 // Minimal WebSocket JSON-RPC thread creator…
[trivial-line] agent-network/bin/cli.ts#L2725 (空行)
[trivial-line] agent-node/src/cli.ts#L558 // "Reached maximum number of turns (5)"…
[line-out-of-range] server/src/index.ts#L816 (行号 816,文件 16 行)
所以扩 DOC_ROOT 的代价是具体的、不大的 :多 8 条失效 pin,其中 7 条要处理。
(我此前说过「会立刻多出一批」——那是没测过的话,实测是 8 条。)
二、扩了 DOC_ROOT 也只解决 2/11
另有一类更隐蔽的:行号在范围内、指着一行正常代码,但不是声称的那个符号 。
我在 #850 量过,docs/ 下锚文本带符号名、可机器判定的引用有 11 条,漂移 11、仍对 0 :
声称
origin/main 上第几行才是它
那个行号现在是什么
cli.ts:228 loadProfile
—
// Minimal WebSocket JSON-RPC thread creator…
cli.ts:246-273 saveProfile
—
const p = pending.get(msg.id);
cli.ts:556 setupCommand
—
"-e", \ANET_NODE_MARKER=${identityMarker}`,`
cli.ts:2044 runCommand
—
});
cli.ts:1644 ensureMcpJson
—
minor: Number.parseInt(match[2], 10),
cli.ts:105-111 saveAdminUtok
—
import {
cli.ts:89-95 saveServerConfig
—
grokBuildCliCreationFields,
cli.ts:77-81 saveGlobal
—
} from "../src/opencode-package-binary";
cli.ts:2629-2631 renameCommand
—
const resolved = resolveNodeRef(ref);
cli.ts:2583-2721 renameCommand
—
anet config [path|json] … 帮助文本
cli.ts:28 adminUtokPath
—
removeMarker as removeCopresenceMarker,
把这 11 条的行号,和「扩 DOC_ROOT 后会被判失效的 cli.ts 行」求交集:
我的 11 条: [28, 77, 89, 105, 228, 246, 556, 1644, 2044, 2583, 2629]
扩后被判失效的: [198, 228, 1724, 2044, 2725]
交集: [228, 2044] → 2 / 11
仍漏: [28, 77, 89, 105, 246, 556, 1644, 2583, 2629] → 9 / 11
被抓到的那 2 条是碰巧 漂到了注释行/闭合括号上(trivial-line 判据);
其余 9 条漂到了正常代码行,那道门按设计就看不见 —— 它的文件头写着实测召回率 5/10。
要做两步,别混成一件事
扩 DOC_ROOT 到 docs/ :代价已量化(8 条失效 pin),做法和 ci(test831): 文档站行号 pin 的下限门(守住不再变多,不解决 #831) #843 一致
(进基线 + 基线只许缩小)。收益 2/11。
符号级校验 :断言「锚点那一行确实包含锚文本里写的那个符号」。
docs(mcp-tools): 正文行号引用改钉符号 —— 两版行号 pin 归零 #845 的 scripts/check-doc-symbol-anchors.py 是这个路子,但它只针对
mcp-tools.md 的 ### <tool_name> 章节结构,套不到 docs/ 这些散文档上。
这一步才是剩下 9/11 的解,也是工作量真正所在。
🔴 记一条我自己的错
我在上一轮说过「#843 是那 11 条漂移唯一的机械解」,后来又更正成「范围和类别两个方向都不成立」。
第二句也说过头了 :类别上它并非一条都抓不到,trivial-line 判据能碰到 2 条。
准确的说法是:范围上完全不覆盖;扩范围后覆盖 2/11。
相关:#843 (那道门本身)、#850 (changelog 里的同类)、#851 (已修的两条)、#831 。
问题
docs/(不是docs-site/)里按blob/main/<file>#L<n>钉的源码引用,有一批已经指错了,而且现有的任何一道门都不覆盖它们。
数字(都是跑出来的,不是估的)
一、
docs/完全不在 #843 那道门的范围内scripts/check-doc-source-pins.py:54:把它临时改成
"docs"再跑同一个脚本:7 条明细:
所以扩
DOC_ROOT的代价是具体的、不大的:多 8 条失效 pin,其中 7 条要处理。(我此前说过「会立刻多出一批」——那是没测过的话,实测是 8 条。)
二、扩了
DOC_ROOT也只解决 2/11另有一类更隐蔽的:行号在范围内、指着一行正常代码,但不是声称的那个符号。
我在 #850 量过,
docs/下锚文本带符号名、可机器判定的引用有 11 条,漂移 11、仍对 0:origin/main上第几行才是它cli.ts:228 loadProfile// Minimal WebSocket JSON-RPC thread creator…cli.ts:246-273 saveProfileconst p = pending.get(msg.id);cli.ts:556 setupCommand"-e", \ANET_NODE_MARKER=${identityMarker}`,`cli.ts:2044 runCommand});cli.ts:1644 ensureMcpJsonminor: Number.parseInt(match[2], 10),cli.ts:105-111 saveAdminUtokimport {cli.ts:89-95 saveServerConfiggrokBuildCliCreationFields,cli.ts:77-81 saveGlobal} from "../src/opencode-package-binary";cli.ts:2629-2631 renameCommandconst resolved = resolveNodeRef(ref);cli.ts:2583-2721 renameCommandanet config [path|json] …帮助文本cli.ts:28 adminUtokPathremoveMarker as removeCopresenceMarker,把这 11 条的行号,和「扩
DOC_ROOT后会被判失效的cli.ts行」求交集:被抓到的那 2 条是碰巧漂到了注释行/闭合括号上(
trivial-line判据);其余 9 条漂到了正常代码行,那道门按设计就看不见 —— 它的文件头写着实测召回率 5/10。
要做两步,别混成一件事
DOC_ROOT到docs/:代价已量化(8 条失效 pin),做法和 ci(test831): 文档站行号 pin 的下限门(守住不再变多,不解决 #831) #843 一致(进基线 + 基线只许缩小)。收益 2/11。
docs(mcp-tools): 正文行号引用改钉符号 —— 两版行号 pin 归零 #845 的
scripts/check-doc-symbol-anchors.py是这个路子,但它只针对mcp-tools.md的### <tool_name>章节结构,套不到docs/这些散文档上。这一步才是剩下 9/11 的解,也是工作量真正所在。
🔴 记一条我自己的错
我在上一轮说过「#843 是那 11 条漂移唯一的机械解」,后来又更正成「范围和类别两个方向都不成立」。
第二句也说过头了:类别上它并非一条都抓不到,
trivial-line判据能碰到 2 条。准确的说法是:范围上完全不覆盖;扩范围后覆盖 2/11。
相关:#843(那道门本身)、#850(changelog 里的同类)、#851(已修的两条)、#831。