Skip to content

finding(scripts): both vi.mock gates are blind to an override's VALUE shape — 13 stubs drifted from PresenceUser[] to { viewers, others } and every gate stayed green #8903

Description

@os-zhuang

domain:ui 派发席(session_01611D6ZaRaMmwTNQmSbk8MH)在 objectui#8083 交付轮后立卡;测量由该卡的实现席做出,⛔ 不是本席的推断。Generated by Claude Code.

测出来的事实

本仓有两道 vi.mock 面的门。objectui#8083 的实现席实测了它们对「override 的返回值形状漂移」的判别力:把那 13 个已知漂移的桩(useRecordPresence 被桩成 { viewers: [], others: [] },而真实返回类型是 PresenceUser[]原样放回磁盘,两道门打印同样的 verdict 行、同样的 exit 0,与修好后的树逐字一致。

它判的是什么 对本类漂移
check:vi-mock-specifiers 一个相对 specifier 是否解析到文件 ⛔ 看不见 —— 这些桩 mock 的是裸 specifier @object-ui/collaboration,门自己的汇总把它计入 935 bare (out of scope)
check:vi-mock-inherit 工厂是否取到了真实模块 ⛔ 看不见 —— 那 13 个本来就在 spread ...(await importOriginal())带着漂移完全合规

两道门判的都不是 override 的值。 tsc 也不管:vi.mock 工厂是未类型化的,编译器从不拿桩去比对 PresenceUser[]

为什么这值得一张卡

这一类今天没有任何自动化守卫,那 13 处漂移是靠一次人工普查才被发现的。

⚠️ 而它的失效方式是最坏的那种 —— 用 objectui#8083 卡片自己的话:「the 9 correct files move and the 13 stay green」。当被桩的契约变化时,桩对了的文件会红、桩错了的文件静默继续绿,套件从中间裂开,而多数派悄悄停止追踪那个 hook

⭐ 更尖锐的一点(objectui#8083 已证实):{ viewers, others } 这个形状在本仓不存在任何真实来源 —— 全树扫描只在那 13 个桩里出现过。⇒ 它是从另一个 presence 界面借来的,也就是说这类漂移的产生方式是复制粘贴一个邻近但不同的形状,而不是误读类型。

承接者(⛔ 不是「无」)

任何为一个有类型的导出写 vi.mock override 的 PR。 这不是理论人口:门自己数出 935 处裸 specifier mock,而一次人工普查在单个 hook 的单个消费者目录下就找到 13 处漂移。

⛔ 本卡不主张什么

  • ⛔ 不主张具体该怎么修。扩哪一道门、还是新加一道、还是走别的路(例如给 vi.mock 工厂加类型标注的 lint 规则),都没有裁
  • ⛔ 不主张这一定要用门来解。「没有强制」是一个观察,把它变成一道门是有代价的决定 —— 935 处裸 specifier mock 意味着任何强制都会先撞上一个巨大的存量。
  • ⛔ 不主张 objectui#8083 本身没修好。那 13 处已在 PR test(app-shell): stub useRecordPresence as the array the hook returns #8902 修复并用变异测量钉住;本卡问的是下一次

复现

# 门对本类漂移无判别力:把漂移放回磁盘,两道门的 verdict 与 exit 与修好后逐字一致
pnpm check:vi-mock-specifiers   # 汇总行里会看到 "935 bare (out of scope)"
pnpm check:vi-mock-inherit

相关

objectui#8083(漂移本身,已修)· PR #8902(修复 + 变异测量)· objectui#8082(把工厂改成继承真实导出面的那一轮 —— 它正确地只动继承、不动 override 的值,所以既没引入也没修复本类漂移)。

Activity

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    domain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seatfindingpriority:p2tests

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions