Skip to content

docs-drift 的 **Name** tile 散文规则只在英文页开火——zh 页正文里的磁贴引用无人检查 #725

Description

@yinlianghui

在实现 #685 时发现,作为观察记录立单,不在该 PR 里顺手改(属于判据变更,#685 的文件面明确限定为「DOC_PAGES 增两路径」)。

现象

test/docs-drift.test.ts 的 dashboards 守卫有两类规则:

  1. 磁贴清单:- **Name** — … 必须解析到该仪表盘的真实 widget。
  2. 散文引用:正文里任意 **Name** tile / tiles 必须解析到某个仪表盘的真实 widget。

第 2 条的正则是:

const TILE_REFERENCE = /\*\*([^*\n]+)\*\*\s+tiles?\b/g;

它要求加粗名之后紧跟英文单词 tile / tiles。#685 把两个语言页加进 DOC_PAGES 之后,第 1 条规则对三份文件都生效,第 2 条实际上只对英文页生效 —— 因为 zh 页写的是 **Quiet 90+ Days** 磁贴 / **Quiet 90+ Days** 磁貼,正则匹配不到。

为什么现在不是活的缺陷

#685 的 PR 里,两个语言页正文中出现的每一个加粗磁贴引用都人工逐条核对过,全部是真实 widget:Win / Loss by Rep、Why We Lose、Quiet 90+ Days、SLA Violations、SLA Compliance、Interactions on Deals、Open Deals。所以今天没有任何读者会踩到假引用 —— 这是休眠的覆盖缺口,不是现存错误,故按 observation-class 归类(finding,不带 pm:queue)。

它值得记下来的原因是:#610 的原始缺陷里,Slipping Deals 恰恰同时出现在清单和散文("每周五使用 Slipping Deals 磁贴来规划下周的交易评审通话")。也就是说,这一类缺陷在历史上真的以散文形态出现过;现在只是碰巧两处都干净。下一次有人往 zh 页正文里补一句「用 XXX 磁贴来…」,没有任何东西会拦。

可选的修法

正则加一个语言无关的替换分支即可,例如把量词部分放宽为 (?:tiles?|磁贴|磁貼);或者更稳的做法是让各语言页的「磁贴」用词从一个小映射表里取,避免正则里硬编码中文。两种都不影响英文页现有行为。

注意第 3 条 vacuity guard(refs.length 必须 > 0)是对三份文件的并集断言,所以放宽正则不会让它变得更脆。

现状记录

#685 的 PR 已在 test/docs-drift.test.ts 的 Locale note 注释里写明了这个不对称,免得下一个读者误以为 zh 页正文也已被覆盖。本单只是把它挂到 backlog 上等 PM 分诊。

https://claude.ai/code/session_01VHrPAGEgFDoHjphqYG4BMa

Activity

  1. added
    documentationImprovements or additions to documentation
    bugSomething isn't working
    pm:queueReady for the PM dispatch loop
    pm:dispatchedDispatched to a dev agent by /pm-dispatch
    and removed
    pm:queueReady for the PM dispatch loop
    on Aug 5, 2026
  2. self-assigned this
    on Aug 6, 2026
  3. yinlianghui commented on Aug 6, 2026

    @yinlianghui
    CollaboratorAuthor

    🔒 认领(/pm-dispatch R28)— session session_01VHrPAGEgFDoHjphqYG4BMa,分支 claude/issue-725-tile-regex-locale。

    文件面:test/docs-drift.test.ts 的 TILE_REFERENCE 正则族与相邻 Locale note 注释,守卫单,不动任何文档页。

    裁定:

    1. 修法二选一由你依代码结构定(正则加 (?:tiles?|磁贴|磁貼) 分支,或小映射表取词),PR 里说明取舍;倾向映射表若不增加复杂度。
    2. 两阶段红→绿验证必做(账本类守卫先例 docs(i18n): spell the lead convert verb 转化 on every Chinese page (#844) #906):先在某 zh 页临时注入一条假磁贴散文引用(**不存在的磁贴** 磁贴)证新正则能红,移除后回绿;两次运行输出贴进 PR body。临时注入不得进提交历史(工作树内验证即可)。
    3. vacuity guard(refs.length>0 并集断言)行为不得变脆——改后单跑该文件确认三 locale 的引用计数都被算入。
    4. 英文页现有行为零变化;基线 17.0.0-rc.3;此为测试代码,遵循文件既有注释风格。

    Generated by Claude Code

  4. yinlianghui commented on Aug 6, 2026

    @yinlianghui
    CollaboratorAuthor

    ✅ 验收通过 —— PR #929 已转 ready 并挂 auto-merge(CI 9/9 全绿实核)。

    验收要点:

    1. premise partial 收窄得当:核心前提成立(规则确实只读英文),但把 issue 的「7 个加粗名」精确到「符合『加粗名+紧跟磁贴名词』构造的只有 2 条,en 侧对其余 5 个同样不读」——修的是真实的洞,不是虚胖的洞。
    2. 映射表取舍论证充分:词表在文件内被三处消费(正则、vacuity 报错文案、新自检),内联即三份拷贝的漂移风险;代价(失去正则字面量语法校验)如实写明。
    3. 两处正则细节按实测定稿是本单亮点:分隔符放宽到零空白(中文排版不要求空格,否则 **X**磁贴 仍是洞);尾部用 ASCII 负向前瞻替代 \b(JS 词边界在「磁贴」+中文句号处不成立,照搬会让中文分支是死的)——第二条是「写守卫的人先证明守卫活着」的教科书案例。
    4. 红→绿完整且有历史根据:注入的假名正是 content/docs/analytics/dashboards.mdx describes tiles that no dashboard ships (near-total drift, plus a fabricated usage stat) #610 里以散文形态真实出现过的 Slipping Deals(带空格)+ 无空格繁体各一条,1 failed 逐条点名 → 移除 34 passed;反向(旧正则+注入)引用规则绿、新自检红并列出全部 6 种读不到的拼法——休眠缺口被双向证明。自检从首败中断改为收集后断言,报错完整性也顺手修了。
    5. 命中计数 en 2→2(行为零变化)、zh 0→2×2,并集 2→6;vacuity 判据未动,新自检补上「并集靠英文撑着静默重开」那一刀;注入未进历史(git log -S 验证)。零越界发现。

    Generated by Claude Code

  5. added and removed on Sep 9, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

bugSomething isn't workingdocumentationImprovements or additions to documentationpm:dispatchedDispatched to a dev agent by /pm-dispatchpriority:p2Medium: important, M3

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions