edit | blame | history | raw

2026-06-30 Quick Search 点击启动阻塞修复

用户目标

  • 修复 Quick Search 候选列表中,回车可打开应用但触摸板 / 鼠标点击候选行无法打开应用的阻塞问题。
  • 产出新的 DMG 供人工验证。

当前起点

  • 分支:codex/pro-custom-hotkeys-8.2.0
  • 用户确认 8.2.7 DMG 中问题仍存在。
  • 现有实现已有 QuickSearchResultRowView.mouseDownQuickSearchPanel.sendEvent 点击兜底,但用户手测证明仍不足。

根因判断

  • 回车路径可用,说明 launchQuickSearchResultNSWorkspace.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' 返回 truepgrep -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 视觉、排序或搜索逻辑。