缺陷
两处「测试存在但测不出坏」的假闸门。它们的危害不是少拦一个 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 时挖出来的。
缺陷
两处「测试存在但测不出坏」的假闸门。它们的危害不是少拦一个 bug,是让人以为这条边界有人看守——正是本仓
CLAUDE.md里「闸门失效的九种形态」第①种(断言源码文本)与第③种(扫描集不全)。实例一:用源码文本断言冒充接线证据
packages/ui-mac/src/renderer/alpha-ui/session-rail/artifacts/session-rail-artifacts.test.ts:137-142shell/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—— 只readFileSync6 个固定文件(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消费上游私有 contextuseTerminal—— 两者都不受该 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时挖出来的。