生成日期:2026-07-09
26.0702-Taglauncher.Coder3-WindowServer预防收窄.mdNSEvent.mouseLocation 的兜底,非本窗口事件直接返回 .zero。TextField 改为 AppKit NSTextField 桥接。# Taglauncher WindowServer 会诊
## 用户目标
- 作为代码审核员,基于管理员诊断说明会诊 TagLauncher 是否是 2026-07-01 大规模系统卡顿 / WindowServer watchdog 的重要原因之一。
- 按用户要求拉两位架构师和两位代码审核员共同做只读审查。
- 输出是否仍存在重大隐患,以及后续最小验证 / 缓解方向。
## 当前起点
- 作为代码审核员,基于管理员诊断说明会诊 TagLauncher 是否是 2026-07-01 大规模系统卡顿 / WindowServer watchdog 的重要原因之一。
- 按用户要求拉两位架构师和两位代码审核员共同做只读审查。
- 输出是否仍存在重大隐患,以及后续最小验证 / 缓解方向。
## 当前起点
- 项目:`/Users/ar/Projects/Taglauncher`
- 源码根目录:`/Users/ar/Projects/Taglauncher/src`
- 诊断说明:`/Users/ar/Documents/技术实验室/TagLauncher-WindowServer-CursorUIViewService-诊断说明-2026-07-01.md`
- 项目:`/Users/ar/Projects/Taglauncher`
- 源码根目录:`/Users/ar/Projects/Taglauncher/src`
- 诊断说明:`/Users/ar/Documents/技术实验室/TagLauncher-WindowServer-CursorUIViewService-诊断说明-2026-07-01.md`
- 开工时分支:`codex/pro-custom-hotkeys-8.2.0`
- 开工时 HEAD:`4c6f31c Remove non-source materials from source worktree`
- 开工时工作区状态:已有大量未提交改动,按用户 / 其他任务既有改动处理,本轮不回滚、不改源码。
- 最终核对时 HEAD 已由外部流程推进到 `0ae3a93 Prepare TagLauncher 8.3.1 candidate`,并带 tag `v8.3.1-build20260701.2302`;这不是本轮会诊创建的 commit。
## 核心事实 / 变更快照
# TagLauncher WindowServer 会诊四项修复
日期:2026-07-01
## 用户目标
基于 `26.0701-Taglauncher.WindowServer会诊-风险复核.md` 的结论,修复 4 个发布前风险:
1. Quick Search 缺 IME marked-text guard。
基于 `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` 事件循环可能卡主线程。
## 当前起点
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/...` 发布资料脏改动,本轮未触碰。
# TagLauncher WindowServer 会诊风险复核
日期:2026-07-01
## 用户目标
对照 `/Users/ar/Projects/Taglauncher-doc/chat-history/codex-sessionhistory/2026-07-01-WindowServer会诊.md`,以最新代码重新核查会诊中提到的 WindowServer / TextInput / 鼠标事件风险,拉上架构师和代码审核员判断还有哪些确实需要提前修复。
## 当前起点
对照 `/Users/ar/Projects/Taglauncher-doc/chat-history/codex-sessionhistory/2026-07-01-WindowServer会诊.md`,以最新代码重新核查会诊中提到的 WindowServer / TextInput / 鼠标事件风险,拉上架构师和代码审核员判断还有哪些确实需要提前修复。
## 当前起点
- 仓库:`/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/...` 发布资料,未触碰。
- 仓库:`/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/...` 发布资料,未触碰。
- 会诊基线:`2026-07-01-WindowServer会诊.md`
## 已完成事项
# Taglauncher WindowServer 预防收窄
日期:2026-07-02
项目:Taglauncher
会话:Coder3
主题:WindowServer 预防收窄
## 用户目标
日期:2026-07-02
项目:Taglauncher
会话:Coder3
主题:WindowServer 预防收窄
## 用户目标
用户确认按会诊建议继续做两项预防性收窄,顺序为:
1. 先做 Usage Tips local monitor 事件来源收窄。
- 新增 App note 泡泡输入静态 QA,并把 Usage Tips 同窗口收窄写进原有 QA。
- 完整构建通过,生成 `/Users/ar/Projects/Taglauncher/src/build/TagLauncher.app`,构建号输出为 `8.3.1 (20260702.0128)`。
## 关键决策
- 不改 `OverlayWindowController` 的 `.nonactivatingPanel` 行为,避免扩大行为变化。
- App note 泡泡只替换输入控件内部实现,保留原泡泡布局、外观、备注长度上限和 Esc 取消语义。
- Usage Tips 只收窄事件来源,不改变显示、关闭提醒、按钮和翻页行为。
## 核心事实 / 变更快照
2026-07-01-WindowServer会诊.md26.0701-Taglauncher.WindowServer会诊-四项修复.md26.0701-Taglauncher.WindowServer会诊-风险复核.md26.0702-Taglauncher.Coder3-WindowServer预防收窄.mdTagLauncher 8.3.0 (20260701.2029)。/Applications/TagLauncher.app 当前读到:8.3.0 (20260701.2234)。src/Apptag/Info.plist 读到:8.3.1 (20260701.2302)。src/Apptag/ContentView.swift、src/Apptag/ApptagApp.swift、src/Scripts/tag_editor_mouse_event_qa.sh 对当前 HEAD 已无 diff,说明相关修复已经进入 0ae3a93。20260701.2029 是本地验收 DMG,不是正式冻结包;会话记录已明确其未冻结 commit / tag。QuickSearch.swifttagLauncherQuickSearchCompositionChanged 通知。QuickSearchNativeTextField 上报 IME composition 状态。updateNSView 在 marked text 期间不再覆盖 field.stringValue。doCommandBy 和 keyDown 在 hasMarkedText / composing 状态下放行给输入法。src/Apptag/QuickSearch.swiftsrc/Apptag/ApptagApp.swiftNSEvent.mouseLocation 的兜底,非本窗口事件直接返回 .zero。TextField 改为 AppKit NSTextField 桥接。