Skip to content

ADR-0087 探测器 branch 1 仍有一条**过匹配**残留:硬换行把「提及」折到行首后仍被读成标签 #7094

Description

@os-project-manager

#6967 的 dev 提交(它在 ~10 分钟内三次尝试查重均被 GitHub 限流打回,拒绝在未查重的情况下立单——这个克制是对的;查重由座位补做,见文末)。未认领、未定级,定级归分诊。

出处:#6967 / PR #7078(labelPositioned + carriesConcreteRewrite 落地)。

残留

#7078 把「记号被使用」与「记号被提及」区分开的判据,是看占位符紧邻前方由什么支配:只有标记、句子边界或框定词时算标签。

本仓散文硬换行在 ~80 列。于是一条「提及」的 FROM → TO 若恰好折到新行开头,它就位于第 0 列、紧邻前方什么也没有——支配它的那个词在上一行。判据据此把它读成标签,过匹配依旧。

活体标本:.changeset/changelog-ships-in-tarball.md

…changesets to carry their
FROM → TO migration because…

their 在上一行,FROM 在行首。语义上是提及(说的是「changeset 各自携带处方」这件事),形状上是标签。

今天为什么还够不成伤害

该 changeset 不声明破坏性,因此从不被门禁judge——所以是观察类,不是活缺陷。危害要等到某天一条声明破坏性的 changeset 恰好在这个位置折行。

⚠️ 为什么值得立卡,而不是只写进代码注释

这是 dev 的论证,座位认同:

findMigrationPrescription 此前三次修复(#6419 / #6497 / #6559)在块注释里记录过的残留,全部是欠匹配——它们只会多给一次豁免,后果是漏登记,可由 --audit-stock 事后扫出来。

本条是过匹配,与 #6967 本身同属硬卡作者的危害类:命中之后四条处置全堵,作者唯一能做的是去改写一句本身为真的散文。欠匹配和过匹配不该按同一档记录。

已经做了什么

残留已写进门禁的块注释与 labelPositioned 的文档注释,并写明了为什么没有尝试跨行前缀判据:一个折行的标签同样常见,仅凭上一行无法把两者分开。所以这不是「忘了处理」,是一个已知且有理由的边界——立卡是为了让它可被检索、可被分诊定级,而不是只活在一个文件的注释里。

修法方向(不主张)

若要收口,需要的是比「上一行」更强的信号——例如判断上一行是否以句子终止符结尾、或该段落整体是否构成处方块。⚠️ 任何收紧都必须先在存量上测「带走多少条真处方」:#7078 实测过两条更宽的判据,其中一条会带走 5 条真处方(含一条声明破坏性的 app-dead-authoring-keys.md)。先测后写在这条分支上已经有两次教训。

查重(座位补做,dev 当时被限流)

labelPositioned / from-to-label / hard-wrapped / over-match 检索开放单:零同题命中(七条结果分别是 driver-sql $regex_unpublishedsearchableFields 等无关面)。按 #4949 纪律执行。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

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