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 视觉、排序或搜索逻辑。