Skip to content

[BUG][P2] 两处假闸门:源码文本断言冒充接线证据 + ratchet 扫描集漏掉 session-rail 全部 33 个文件 #904

Description

@jinjunnn

缺陷

两处「测试存在但测不出坏」的假闸门。它们的危害不是少拦一个 bug,是让人以为这条边界有人看守——正是本仓 CLAUDE.md 里「闸门失效的九种形态」第①种(断言源码文本)与第③种(扫描集不全)。

实例一:用源码文本断言冒充接线证据

packages/ui-mac/src/renderer/alpha-ui/session-rail/artifacts/session-rail-artifacts.test.ts:137-142

shell / workspace 是 readFileSync 读进来的源码文本(同文件 :9、:11),断言是 expect(shell).toContain("focusArtifact")。

⇒ 把 focusArtifact / jumpToReview 的函数体整个删空、标识符留在注释里,它照样绿。

这条测试是 alpha-code#203 的 Evidence map 指派给 #273 的证据面(「AC4 | #273 shell-to-Workbench wiring test」)——也就是说,「已接线」这件事从未被行为验证过。

实例二:静态 ratchet 扫描集不全 + 存在性断言冒充排他性

packages/ui-mac/src/renderer/alpha-ui/session-workspace/alpha-session-workspace.test.ts

  • :11-16 —— 只 readFileSync 6 个固定文件(alpha-session-workspace / shell / dock / composerMount / dockCore / permissionFeed)。session-rail/ 下的 33 个文件全在扫描集之外,包括 review-panel.tsx、session-rail-files.tsx、terminal-engine-adapter.tsx。
  • :154-156 —— 实为 expect(tsx).toContain("useServerSDK")。存在性断言表达不了排他性:一个同时 import 二十个私有 context 的实现照样全绿。

实测反例已存在:session-rail/files/session-rail-files.tsx:16 从 @opencode-ai/app 取用,session-rail/terminal/terminal-engine-adapter.tsx:9 消费上游私有 context useTerminal —— 两者都不受该 ratchet 约束。

修法约束

参照仓内已有的正确形态:packages/ui-mac/src/renderer/alpha-ui/surface-seam-contract.test.ts 是闭世界等值断言 —— expect(surfaceSubpaths).toEqual([...])(加一条即红)+ expect(Object.keys(pkg.exports).some(k => k.includes("context"))).toBe(false)(结构性封死)。两处假闸都应改成这个形态:

  • 实例一:改为行为断言(渲染 + 触发 + 断言焦点/面板状态),不读源码文本。
  • 实例二:扫描集从目录枚举派生(新增文件自动进闸),断言改 toEqual 白名单。

边界

上述两个测试文件。不改生产代码。

Out of scope

  • 不修 #273 的焦点返回缺陷本身(该票仍 OPEN 拥有它)。
  • 不普查其它测试文件的假闸形态(那是一张单独的类票,值得开但不在本票)。

退出条件

PR 合并 + 自绕过验证:把 focusArtifact 函数体删空 → 实例一的测试必须变红;在 session-rail/ 下新增一个 import 私有 context 的文件 → 实例二必须变红。两条都要真跑一遍,不是推断。


出处:2026-08-10 W0 存量普查第二轮。两处都是对抗方在复核 alpha-code#273 / #268 时挖出来的。

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

    area:governanceStandards or lifecycle governanceprio:P2Planned normal-priority worktype:bugSomething is incorrect or regressed

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions