Skip to content

docs/ 下的源码行号引用没有任何门覆盖:扩 DOC_ROOT 只解决 2/11,剩下 9 条要符号级校验 #852

Description

@vansin

问题

docs/(不是 docs-site/)里按 blob/main/<file>#L<n> 钉的源码引用,有一批已经指错了,
而且现有的任何一道门都不覆盖它们

数字(都是跑出来的,不是估的)

一、docs/ 完全不在 #843 那道门的范围内

scripts/check-doc-source-pins.py:54:

DOC_ROOT = "docs-site"

把它临时改成 "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。

要做两步,别混成一件事

  1. DOC_ROOTdocs/:代价已量化(8 条失效 pin),做法和 ci(test831): 文档站行号 pin 的下限门(守住不再变多,不解决 #831) #843 一致
    (进基线 + 基线只许缩小)。收益 2/11。
  2. 符号级校验:断言「锚点那一行确实包含锚文本里写的那个符号」。
    docs(mcp-tools): 正文行号引用改钉符号 —— 两版行号 pin 归零 #845scripts/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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions