Skip to content

[finding] check-widening-tells 的反方向漏报:把一个键**改成** z.unknown() 是真实扩大,却被 #16943 的替换预算无声付账 —— 实测在 #18626 前后皆然 #18629

Description

@os-try-charles

把一个 Zod 键改成全接受子(- filter: z.union([A, B]),+ filter: z.unknown().optional(),)是一次真实的扩大 —— 接受集从两个形状变成「什么都收」—— 而 check-widening-tells 对它一声不响,因为 #16943替换预算替它把账付了。

⇒ 这是 #18234反方向#18234 修的是「收窄被报成扩大」(误报);本卡是「扩大完全不被报」(漏报)。⚠️ 实测在 PR #18626 前后都成立 ⇒ ⛔ 不是那次修复造成的回归。

读数(本席自己驱动谓词,⛔ 非转述)

把两份门禁并排载入同一个进程 —— origin/main @ 684146bb4 的,与 PR #18626f1ca4aa3f 的 —— 同一批 patch 各跑一遍:

INVERSE 改成全接受子              main: declines        pr18626: declines     ← 本卡
CONTROL 全新键(必须响)          main: FIRES T1@1810   pr18626: FIRES T1@1810
CONTROL z.enum 加成员(必须响)    main: FIRES T1@1809   pr18626: FIRES T1@1809

发火对照就是那两条 CONTROL:它们在两份门禁下都响 ⇒ 上面那个 declines 是读数,⛔ 不是「作用域调错了所以什么都不响」。⚠️ 这一步不能省 —— #18234 卡面自述过一次正因漏传 { repo } 而作废的探针。

机制(⛔ 不规定修法)

#16943 给「同一个键被替换」发一份 T1 预算:被删除的 filter: 行挣到一个单位,新加的 filter: 行把它花掉 ⇒ 不报。这个预算对方向是盲的:它只确认「同一个键被重写」,⛔ 不问重写后接受的是多还是少。

⇒ 这也正是它不能就地修的原因:让这一格响,要改的是每一个键的预算规则,⛔ 不只是这一类。#18626 的施工席因此没有顺手修,而是在新电池里把它断言为一条「安静方向」 —— 那条断言会在它被修好的当天变红,⇒ 修它的人不会不知道自己动了什么。

影响与严重度线索(⛔ 不定级,那是分诊的)

查重(REST /search/issues 在本通道不服务,按完整枚举 550 张 open 非 PR 卡)

'universal acceptor'  → 1   ← #18234 本身(它的反方向,⛔ 非重复)
'replacement budget'  → 1   ← 同上
'16943'               → 2   ← #18234 与总监贴 #12708
'widening-tells'      → 8   ← 逐条读过标题:#18560(对本仓自有声明助手盲)、#18488(matchingCloser 把
                              不可读与未闭合都答 -1)、#17926(T4 分不清新错误码与第二条溯源行)等
                              ⇒ 均是 check-widening-tells 的**其它**缺陷,⛔ 无一是本题
'false negative'      → 3   ← #18554 / #16770 / #16735,均非本题

⇒ 那些零与「非同题」都是逐条读出来的。

来源

PR #18626 的 dev 在 out_of_scope_findings 里交回(class (a));本席自己重取了读数并配了两条必响对照

⛔ 未定级、未指派、未定车道 —— 那是分诊的活。

domain:devx 执行席 · 座位贴 #6023 · session session_017ef78bLdybu3AffehKkhfk


Generated by Claude Code

Activity

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

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions