2026-06-29 QuickSearch 修复
用户目标
- 修复重大回归:Quick Search 列出的应用点击或按 Return 都打不开。
- 不把未验证成果交给用户测试;需要 QA 自己实际按快捷键 / 操作验证。
当前起点
- 工作区已有 Pro 自定义快捷键、Pro UI、标签颜色、备注额度等多处未完成/未提交改动。
- 本轮只处理 Quick Search 启动阻断回归,不回退无关改动。
- 参考源码入口:
src/Apptag/ApptagApp.swift、src/Apptag/QuickSearch.swift、src/Apptag/ContentView.swift。
根因与修复
- 点击路径:Quick Search 打开时,本地 mouse monitor 对
overlayWindow 内部鼠标事件发 dismiss 并 return nil,会吞掉结果行点击,导致行内 mouseDown -> onLaunch 不可靠。
- 修复:
installQuickSearchLocalMouseMonitor() 对 event.window === overlayWindow 直接 return event,让事件继续传给 Quick Search 行视图。
- Return 路径:Quick Search 面板原先是
.nonactivatingPanel,并且只依赖 field editor/keyDown/delegate 路径,某些场景 Return 不可靠。
- 修复:Quick Search 面板去掉
.nonactivatingPanel,展示时先 NSApp.activate(ignoringOtherApps: true) 再 makeKeyAndOrderFront。
- 修复:
QuickSearchTextField 增加 NSControl.target/action,submitAction 兜底发出 .submit。
文件变更
src/Apptag/ApptagApp.swift
- 本地 Quick Search mouse monitor 不再吞 overlay 内事件。
src/Apptag/QuickSearch.swift
- Quick Search panel 改为可激活 key panel。
- 文本框增加 Return submit target/action fallback。
src/Scripts/quick_search_launch_contract_qa.sh
- 新增静态 contract QA,防止点击/Return 启动链再次断开。
CODEGRAPH.md
- 补充 Quick Search 启动路径保护边界和新增 QA 入口。
QA 证据
- 真实 GUI 验证:
- 使用 build 版
src/build/TagLauncher.app。
- 当前测试环境的 Quick Search effective hotkey 为
Option+Space。
- 打开 Quick Search,点击输入框,粘贴
Grapher,按 Return;验证 Grapher 进程启动:通过。
- 重新打开 Quick Search,粘贴
Grapher,点击第一条结果;验证 Grapher 进程启动:通过。
- 脚本验证:
bash src/Scripts/quick_search_launch_contract_qa.sh:通过。
bash src/Scripts/quick_search_system_app_qa.sh:通过。
bash src/Scripts/quick_search_app_name_qa.sh:本机未安装 /Applications/贝锐向日葵被控.app,脚本按预期跳过。
bash build.sh:通过,产物 /Users/ar/Projects/Taglauncher/src/build/TagLauncher.app。
git diff --check -- src/Apptag/ApptagApp.swift src/Apptag/QuickSearch.swift src/Scripts/quick_search_launch_contract_qa.sh CODEGRAPH.md:通过。
清理
- 已退出测试打开的 TagLauncher 和 Grapher 进程。
- 已删除临时 QA App:
~/Applications/TagLauncherQuickSearchQATarget.app。
- 已删除
/tmp/taglauncher-quicksearch-qa-marker。
- 已删除调试期间写入的
diagnosticLoggingEnabled defaults key,恢复未设置状态。
DMG 验收候选包
- 用户追问后补充生成 DMG:
/Users/ar/Projects/Taglauncher/src/build/TagLauncher.dmg。
- 包类型:验收候选临时 DMG;当前工作区仍有未提交源码/文档改动,所以不能称为正式可回滚发布包。
- DMG 内容验证:
hdiutil verify /Users/ar/Projects/Taglauncher/src/build/TagLauncher.dmg:通过。
- 挂载后检查包含
TagLauncher.app 和 Applications symlink:通过。
codesign --verify --deep --strict 挂载卷内 TagLauncher.app:通过。
- 版本:
8.2.2。
- Build:
20260629.1338。
- DMG 大小:
6.0M。
- SHA256:
114cd9dc4109c6e980cc32e75cd7966d77b4b8db06541a021870cc99eef1bba4。
未覆盖风险
- 旧
window_logic_qa.sh 仍偏窗口层级检查,不是完整 launch 端到端断言;本轮新增了静态 contract QA,并用真实 GUI 测试补充 launch 证据。
- 本轮没有改动无关 Pro 功能/UI 工作区改动,也没有回退当前工作区中已有的大量文档/Release 删除状态。