网易首页 > 网易号 > 正文 申请入驻

我把新工具指向两个最靠谱的仓库,误报率飙到92%

0
分享至

昨天,一个叫 deadgate 的工具被发布到了 PyPI。它的功能很单一:读取 GitHub Actions 的工作流文件,找出那些"永远不会失败"的检查。

什么叫永远不会失败?一个被跳过的任务却满足了必需的门禁,一个被管道吞掉的退出状态,一个从不读取上游是否通过的汇总任务。这些检查看起来在把关,实际上什么都没拦。


发布之后,作者把它指向了 Arize-ai/openinference——一个 1.2k 星、22 个工作流的仓库。工具报告了 13 个 HIGH 级别的问题。

其中 12 个是误报。

文档推荐的那种写法,恰好是工具看不见的那种

GitHub 官方文档里,判断"上游有没有失败"的推荐写法是用通配符:contains(needs.*.result, 'failure')。

而检测器的正则写的是 needs\.[A-Za-z0-9_-]+\.(result|outputs)——它匹配不了那个星号。

于是出现了一个尴尬的场面:文档唯一推荐的写法,正好是工具盲区里的写法。每一个写得正确的汇总门禁,都被判定成了"永远不会失败的门禁"。

更讽刺的是报错信息本身。那条发现写着"从不读取 needs.*.result",而它自己就没能匹配上这个字符串。

修复、发布 0.1.1,然后把修好的版本指向 astral-sh/ruff。这次报告了 21 个 HIGH,其中 18 个是误报。

Ruff 用了第三种写法:把整个 needs 对象转成 JSON,再用 jq 一次性筛选出所有非 success、非 skipped 的上游。这种写法里,"result"这个词根本不出现在任何工作流表达式中,正则自然无从匹配。

第四类问题跟拼写无关。scikit-learn 有一个任务调用了可复用工作流,所以它只有 uses: 而没有 steps:,它通过任务级的 with: 传递 needs.check-sdist.result。这个表达式本身完全看得懂,只是它待在一个没被扫描的位置——工具只扫了步骤级的 with,没扫任务级的 with。

40% 是平均值,而错误分布得极不均匀

四类问题,前两类已经发到了 PyPI。后两类是在持续把"修好的"版本指向新仓库的过程中才发现的,而不是宣布胜利之后就收工。

真正关键的数字来自一个 275 个仓库、4543 个文件的语料库,两个版本读取完全相同的字节:40% 的 HIGH 级别发现是误报。

这个数字听起来已经很糟,但它还低估了问题的严重性,因为 40% 是平均值,而错误并不是均匀分布的。

在这 275 个仓库里,只有 15 个用到了通配符写法。误报集中堆在那些把门禁写得很仔细的仓库上:openinference 的误报率是 92%,ruff 是 86%。而在一个压根没有汇总门禁的仓库上,误报率是零——因为没有任何东西可以被误读。

这个工具在最优秀的代码上准确率最低。

一个工具如果在烂代码上很吵,噪音和信号是一起到达的,你会两个都读。但如果它偏偏在好代码上很吵,被惩罚的就是那些把活干对的人,而他们最自然的反应就是不再运行它。

语料库的平均值无法暴露这一点,因为语料库里大部分是普通仓库,工具碰巧在那里是对的。

一个活下来的变异体,可能意味着代码什么都没做

为了不再报告那些已经被门禁覆盖的失败任务,作者沿着 needs 图做了传递性遍历:如果某个门禁覆盖了 ci,而 ci 依赖 changes,那么 changes 也算被覆盖了。

接着对修复做了变异测试——也就是把每个测试声称能抓到的缺陷人为植入,看是否有东西变红。有一个变异体活了下来:删掉传递性遍历的那个。

第一反应是缺测试。但并不是。变异体活下来是因为那段遍历本身就是错的:needs.*.result 只报告直接依赖,而一个失败的祖父节点会让父节点被跳过,跳过不等于失败,所以门禁根本看不到它。传递性遍历会压制掉真实的发现。

一个存活的变异体有两种含义,而且很容易混淆:要么缺一个测试,要么这段代码什么都没做。如果当时写个测试把它杀掉,就等于把一个 bug 钉在原地,还管它叫覆盖率。

我公开更正了一个本来正确的数字

修这些问题的过程中,作者注意到自己有五个仓库的 README 里写着过期的测试数量。手动更正,并加了一个 CI 检查防止再次漂移。

这个检查立刻变红了。在一个刚刚"更正"过的数字上。

agent-graph 的 README 从 42 改成了 58,公开的提交信息里还写着上一个提交把数量夸大成 67。而 CI 收集到的是 67。本地虚拟环境缺了一个可选依赖,tests/test_rag.py 开头是 pytest.importorskip,于是九个测试在收集阶段悄无声息地消失了——没有报错,没有警告,连文件名都不提。pytest 说"收集到 58 个测试",它说的是实话。

原来的数字是对的。作者用一个来自非真实环境的测量值,公开更正了一个正确的说法。

一小时前刚发布的那个检查有同样的盲区,它同意了 58。现在它会在磁盘上任何测试文件贡献零个被收集测试时失败,因为那是环境不完整的唯一证据。

语料库给你体量,体量给你平均值

上面这些扫描由作者自己的测试框架驱动,而背后的智能体脚手架、门禁实现和提示词都不在仓库里,也不打算放进去。deadgate 本身很小,MIT 协议,全部代码可读。把它指向 275 个仓库并分类存活者的那部分,是保留的。

作者说,不知道怎么在没有优质代码样本的情况下测试一个 linter 的这类错误,而"优质代码"不是一个能自动检测的属性。语料库给你体量,体量给你平均值,而平均值恰恰是掩盖这个问题的那个统计量。

唯一有效的东西是品味:挑两个你本来就相信工程做得好的仓库。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
从0-2到4-2,陈幸同立功逆转晋级四强,日本队只剩下张本美和1人

从0-2到4-2,陈幸同立功逆转晋级四强,日本队只剩下张本美和1人

南海浪花
2026-10-09 14:29:57
女子关健部位纹两个字母,婚前被果断退婚!网友:男人确实受不了

女子关健部位纹两个字母,婚前被果断退婚!网友:男人确实受不了

四海神君
2026-10-07 07:25:07
12岁那年我在后山放羊发现邻居大嫂的秘密,一夜后我变成了大人

12岁那年我在后山放羊发现邻居大嫂的秘密,一夜后我变成了大人

温情邮局
2025-05-16 11:57:12
节后上班第一天,三个省级党委领导班子有调整

节后上班第一天,三个省级党委领导班子有调整

上观新闻
2026-10-09 14:07:21
24元救命药飙涨到1200元,网友:趁火打劫吧?

24元救命药飙涨到1200元,网友:趁火打劫吧?

东方豪侠
2026-10-09 14:59:31
“最美校长胡红梅”,堕落史:凭美貌走上巅峰,但一夜之间人设崩塌

“最美校长胡红梅”,堕落史:凭美貌走上巅峰,但一夜之间人设崩塌

阿坹武器装备科普
2026-10-08 17:09:06
为什么不吃猪肉和牛肉后,血脂一下子就降下来了?原因究竟是啥?

为什么不吃猪肉和牛肉后,血脂一下子就降下来了?原因究竟是啥?

路医生健康科普
2026-10-09 12:35:07
抛开事实不谈,这次懂车帝属实是太不懂事

抛开事实不谈,这次懂车帝属实是太不懂事

牛角说
2026-10-09 11:30:04
穆里尼奥铁腕清洗!皇马两大王牌上离队名单!冬窗直接送走

穆里尼奥铁腕清洗!皇马两大王牌上离队名单!冬窗直接送走

奶盖熊本熊
2026-10-09 07:58:56
不可思议!网传6名女生被安排无偿接机,辅导员只讲集体荣誉,她们就一句:要么发补贴,要么换人

不可思议!网传6名女生被安排无偿接机,辅导员只讲集体荣誉,她们就一句:要么发补贴,要么换人

王老师你还好吗
2026-10-09 16:49:16
“我儿子周岁13,虚岁40”,家长无奈晒照片:跟中年男人没啥区别

“我儿子周岁13,虚岁40”,家长无奈晒照片:跟中年男人没啥区别

番外行
2026-10-09 09:39:16
变天了!世界不再认中国“全球第三”,双核格局成型,美国清醒了

变天了!世界不再认中国“全球第三”,双核格局成型,美国清醒了

麓谷隐士
2026-10-10 00:10:04
赫鲁晓夫对中国三大贡献:将斯大林时期赖着不给的旅顺港归还、为中国提供百万吨粮食,还帮中国建立首个原子反应堆,然而也因为他

赫鲁晓夫对中国三大贡献:将斯大林时期赖着不给的旅顺港归还、为中国提供百万吨粮食,还帮中国建立首个原子反应堆,然而也因为他

回京历史梦
2026-10-09 02:20:04
张本智和情商太低了!居然说:松岛世界第一,要在中国大满贯终结

张本智和情商太低了!居然说:松岛世界第一,要在中国大满贯终结

江启
2026-10-09 08:20:35
WTA发文祝贺郑钦文!直言极具含金量的胜利,2站比赛夺回一姐宝座

WTA发文祝贺郑钦文!直言极具含金量的胜利,2站比赛夺回一姐宝座

排球黄金眼
2026-10-09 19:19:58
全部金属:比亚迪郑羽公布仰望制动踏板材质,称踏板力执行2500N企业标准

全部金属:比亚迪郑羽公布仰望制动踏板材质,称踏板力执行2500N企业标准

IT之家
2026-10-09 18:23:09
“去医院时不要乱穿衣服啊!!”哈哈哈哈哈被误诊的风险还挺大!!

“去医院时不要乱穿衣服啊!!”哈哈哈哈哈被误诊的风险还挺大!!

脆皮先生
2026-10-09 21:22:46
品牌价值8.5亿欧元!C罗若退出国家队,葡萄牙足协恐遭商业巨震

品牌价值8.5亿欧元!C罗若退出国家队,葡萄牙足协恐遭商业巨震

星耀国际足坛
2026-10-09 21:36:15
中国大满贯,18岁少女两场0-3到3-0逆袭,唯一敌手遭29岁老将淘汰

中国大满贯,18岁少女两场0-3到3-0逆袭,唯一敌手遭29岁老将淘汰

格斗联盟王大锤
2026-10-09 09:50:55
尼克斯关上续约大门,唐斯愿降千万仍嫌砍太狠

尼克斯关上续约大门,唐斯愿降千万仍嫌砍太狠

篮坛第一线
2026-10-10 05:18:39
2026-10-10 05:31:00
Ping值焦虑
Ping值焦虑
有态度网友ytd
184文章数 109关注度
往期回顾 全部

科技要闻

华为小米手机同日涨价,最高涨1000元

头条要闻

白宫新任新闻秘书人选公布 现任特朗普"真实社交"顾问

头条要闻

白宫新任新闻秘书人选公布 现任特朗普"真实社交"顾问

体育要闻

与C罗硬碰硬,一个72岁老人的倔强

娱乐要闻

吴奇隆宣布重要决定,走上谢霆锋老路

财经要闻

时隔12年,公募基金运作办法修订

汽车要闻

2027款深蓝L06及追风版上市 限时权益价11.49万元起

态度原创

时尚
家居
旅游
数码
军事航空

时尚早知道!2027春夏十大流行趋势

家居要闻

2026建博会(广州) 公装联探展交流活动

旅游要闻

从险途天堑到避暑胜地,这条贵州山路,改写一方水土命运!

数码要闻

华为WATCH Ultimate 2等手表HarmonyOS 7版本亮点公布,新增高尿酸风险评估研究等

军事要闻

直击南部战区海军某部重装空投训练

无障碍浏览 进入关怀版