edit | blame | history | raw

TagLauncher WindowServer 会诊四项修复

日期:2026-07-01

用户目标

基于 26.0701-Taglauncher.WindowServer会诊-风险复核.md 的结论,修复 4 个发布前风险:

  1. Quick Search 缺 IME marked-text guard。
  2. Quick Search global mouse monitor 可能在点击 IME 候选窗时关闭文本客户端。
  3. Quick Search 输入更新期间重复 activate / orderFront。
  4. TagNavigation 阻塞式 mouseDown 事件循环可能卡主线程。

当前起点

  • 仓库:/Users/ar/Projects/Taglauncher
  • 源码根目录:/Users/ar/Projects/Taglauncher/src
  • 分支:codex/pro-custom-hotkeys-8.2.0
  • 起始 HEAD:0ae3a93,tag v8.3.1-build20260701.2302
  • 备注:工作区已有历史 src/Release/... 发布资料脏改动,本轮未触碰。

已完成事项

  • QuickSearch.swift
  • 新增 tagLauncherQuickSearchCompositionChanged 通知。
  • QuickSearchNativeTextField 上报 IME composition 状态。
  • updateNSView 在 marked text 期间不再覆盖 field.stringValue
  • doCommandBykeyDownhasMarkedText / composing 状态下放行给输入法。
  • Return submit fallback 在 composing 状态下不触发搜索结果启动。
  • Quick Search panel 的 activate/orderFront 改为按需执行,避免每次 query/results 刷新重复置前。
  • focus retry 在 field editor 已存在时停止,避免反复抢 first responder。
  • ContentView.swift
  • 记录 Quick Search composition 状态。
  • mouse / backdrop dismiss 在 composition 期间被忽略,keyboard / programmatic dismiss 不受影响。
  • TagNavigationView.swift
  • 现有长按 reorder 循环新增窗口可见、App active、鼠标按钮状态和最大 8 秒时长兜底。
  • 异常退出时会结束 active reorder,避免主线程困在 eventTracking loop。
  • Scripts/windowserver_event_safety_qa.sh
  • 新增 WindowServer / TextInput 事件安全静态门禁。
  • CODEGRAPH.md
  • 补充新 QA 入口说明。

核心事实 / 变更快照

  • 变更对象:Quick Search 输入法安全、外部点击关闭策略、面板置前策略、TagNavigation 事件循环。
  • 事实来源:源码改动与 QA 命令输出。
  • 变更前:
  • Quick Search 直接拦截 Up / Down / Return / Esc。
  • 外部 mouseDown 会无条件请求关闭 Quick Search。
  • Quick Search panel 每次 apply 都 activate / makeKey / orderFront。
  • TagNavigation mouseDownwhile !finished 只等 drag / mouseUp。
  • 变更后:
  • Quick Search composing 状态下按键和 submit fallback 不再抢输入法。
  • Quick Search composing 状态下忽略 mouse / backdrop dismiss。
  • Quick Search panel 只在不可见、失 key 或不是 key window 时置前。
  • TagNavigation 循环有窗口、App active、鼠标按钮和 8 秒硬退出兜底。
  • 范围边界:本轮未做真实 GUI 中文输入法候选窗点击自动化;验证以静态门禁、typecheck 和 build 为主。

文件变更

  • /Users/ar/Projects/Taglauncher/src/Apptag/QuickSearch.swift
  • /Users/ar/Projects/Taglauncher/src/Apptag/ContentView.swift
  • /Users/ar/Projects/Taglauncher/src/Apptag/TagNavigationView.swift
  • /Users/ar/Projects/Taglauncher/src/Scripts/windowserver_event_safety_qa.sh
  • /Users/ar/Projects/Taglauncher/CODEGRAPH.md

可复用命令 / Runbook

用途:复查 WindowServer / TextInput 事件安全修复、Quick Search 启动合同、TagNavigation 交互合同,以及构建可用性。

前置条件:在 /Users/ar/Projects/Taglauncher/src 运行。

WindowServer / TextInput 事件安全门禁

cd /Users/ar/Projects/Taglauncher/src
bash Scripts/windowserver_event_safety_qa.sh

本轮结果:

PASS windowserver event safety QA

Quick Search 启动合同

cd /Users/ar/Projects/Taglauncher/src
bash Scripts/quick_search_launch_contract_qa.sh
bash Scripts/quick_search_app_name_qa.sh
bash Scripts/quick_search_system_app_qa.sh

本轮结果:

PASS quick search launch contract
SKIP Sunlogin wrapper app not installed at /Applications/贝锐向日葵被控.app
PASS Keychain Access indexed search candidates: Keychain Access | 钥匙串访问 | 钥匙串访问 | 钥匙串访问

TagNavigation / 标签编辑事件回归

cd /Users/ar/Projects/Taglauncher/src
bash Scripts/tag_double_click_preferences_qa.sh
bash Scripts/tag_navigation_hover_scroll_qa.sh
bash Scripts/tag_editor_mouse_event_qa.sh

本轮结果:

PASS: double-click tag navigation opens Preferences Tags tab without removing single-click, hover, or long-press wiring
PASS: tag navigation hover scroll semantics are guarded
PASS Tag editor mouse event QA: text-field clicks focus without recursive mouseDown forwarding

macOS 14 兼容与构建

cd /Users/ar/Projects/Taglauncher/src
bash Scripts/macos14_availability_typecheck_qa.sh
bash Scripts/macos14_build_metadata_qa.sh
bash build.sh

本轮结果:

PASS macOS 14.0 availability typecheck: arm64
PASS build metadata: LSMinimumSystemVersion=14.0 minos=14.0 arches=arm64
✅ App built at: /Users/ar/Projects/Taglauncher/src/build/TagLauncher.app

Diff 质量检查

cd /Users/ar/Projects/Taglauncher
git diff --check

本轮结果:无输出,退出码 0。

未决问题

  • 本轮没有启动真实 GUI 自动化,不覆盖中文输入法候选窗真实点击体验。
  • 如果要发布前进一步收紧,可让用户空闲时再做一轮真实 Quick Search 中文输入法输入、候选窗点击和标签导航长按拖拽人工验收。

后续建议

  • 若本轮修复进入发布候选,建议把 Scripts/windowserver_event_safety_qa.sh 纳入后续发布前 QA 清单。