# 2026-06-30 Quick Search 点击启动阻塞修复 ## 用户目标 - 修复 Quick Search 候选列表中,回车可打开应用但触摸板 / 鼠标点击候选行无法打开应用的阻塞问题。 - 产出新的 DMG 供人工验证。 ## 当前起点 - 分支:`codex/pro-custom-hotkeys-8.2.0`。 - 用户确认 8.2.7 DMG 中问题仍存在。 - 现有实现已有 `QuickSearchResultRowView.mouseDown` 和 `QuickSearchPanel.sendEvent` 点击兜底,但用户手测证明仍不足。 ## 根因判断 - 回车路径可用,说明 `launchQuickSearchResult` 和 `NSWorkspace.openApplication` 不是根因。 - 上一版 panel 级兜底仍依赖 `contentView.hitTest(...)` 返回 `QuickSearchResultRowView`。 - Quick Search 结果列表嵌在 SwiftUI / `NSHostingView` / `NSScrollView` 层级中,真实点击时中间层可能不把结果行作为 hit view 返回,导致已有兜底没有命中结果行。 ## 已完成事项 - `src/Apptag/QuickSearch.swift` - `QuickSearchPanel.sendEvent` 保留左键点击拦截。 - `quickSearchResultRow(at:)` 先走原 `hitTest` 路径,失败后按窗口坐标递归扫描子视图中的 `QuickSearchResultRowView`。 - `QuickSearchResultRowView` 增加 `containsWindowPointForLaunch(_:)`,只接受未隐藏、可见且在 `bounds` / `visibleRect` 内的点击点。 - `src/Scripts/quick_search_launch_contract_qa.sh` - 扩展 Quick Search 点击启动门禁,要求存在递归几何命中兜底,不再只检查“写了 sendEvent”。 - `src/Apptag/Info.plist` / `src/CHANGELOG.md` - 版本更新为 `8.2.8 (20260630.0128)`。 - `CODEGRAPH.md` - 记录 Quick Search panel 级点击兜底必须保留递归几何命中路径。 ## QA 证据 - `bash Scripts/quick_search_launch_contract_qa.sh` - PASS。 - `bash Scripts/pro_custom_hotkeys_qa.sh` - PASS:static QA 和 Carbon runtime QA。 - `bash Scripts/pro_feature_gate_qa.sh` - PASS。 - `git diff --check -- CODEGRAPH.md src/CHANGELOG.md src/Apptag/Info.plist src/Apptag/QuickSearch.swift src/Scripts/quick_search_launch_contract_qa.sh` - PASS,无输出。 - `APP_BUILD=20260630.0128 bash build.sh` - PASS,生成 `/Users/ar/Projects/Taglauncher/src/build/TagLauncher.app`。 - `bash make_dmg.sh` - PASS,生成 `/Users/ar/Projects/Taglauncher/src/build/TagLauncher.dmg`。 - `codesign --verify --deep --strict --verbose=2 build/TagLauncher.app` - PASS。 - `hdiutil verify build/TagLauncher.dmg` - PASS;首次 verify 时 DMG 被 `diskimage` 占用,detach `/dev/disk5` / `/dev/disk4` 后重跑通过。 - `plutil -p build/TagLauncher.app/Contents/Info.plist` - `CFBundleShortVersionString = 8.2.8` - `CFBundleVersion = 20260630.0128` ## 交付产物 - DMG:`/Users/ar/Projects/Taglauncher/src/build/TagLauncher.dmg` - 版本:`8.2.8` - Build:`20260630.0128` - DMG SHA256:`47b7d7127781a7c5dbf709b6a9f65be1baa9f1f0f5fd1e93b531fcc61eaaf61a` - 可执行文件 SHA256:`27d39957070512e8849b876edaa736ebd89a05e46b04e3312a4ffa4995885b32` ## 未覆盖风险 - 2026-06-30 02:10 左右补做真实 GUI 自动化点击验证,已取得干净 PASS 证据: - 启动 `/Users/ar/Projects/Taglauncher/src/build/TagLauncher.app`,版本 `8.2.8 (20260630.0128)`。 - `mcp__computer_use.press_key` 在 TagLauncher 主窗口按 `space` 打开 Quick Search。 - `mcp__computer_use.type_text` 输入 `Calculator`,候选列表出现 `Calculator`。 - 测试前 `osascript -e 'application "Calculator" is running'` 返回 `false`。 - 使用 `mcp__computer_use.click` 对候选项执行真实左键点击,不使用回车。 - 点击后 `osascript -e 'application "Calculator" is running'` 返回 `true`,`pgrep -fl Calculator` 显示 `/System/Applications/Calculator.app/Contents/MacOS/Calculator`。 - `System Events` 返回前台应用为 `Calculator`。 - 截图证据保存到 `/Users/ar/Projects/Taglauncher/.codex-sessionhistory/assets/2026-06-30-quicksearch-calculator-click-pass.png`。 - 测试结束后已退出 Calculator,再次确认 `application "Calculator" is running` 返回 `false`。 - 本轮没有改 Quick Search 视觉、排序或搜索逻辑。