生成日期:2026-07-09
26.0830-Taglauncher.quicksearchfilter-TestFlight上传.mdAppInfo.localizedDisplayName(for:)、localizedNamesByLanguage、localizedNames、QuickSearchEngine.makeDocuments、L10n.supported 和 Apple 默认应用目录的语言 fallback。.app、helper、iOS-on-Mac wrapper 应归并到外层用户可见 App;内层标识最多参与搜索匹配,不应作为独立结果展示。QSF-DEV-001 实现 Quick Search 标签筛选 V1:搜索框下方、结果列表上方新增单行横向标签条;只显示 全部 与真实标签,排除未分类 / Mac 自带 / 不常用;标签筛选为运行时单选状态,不持久化;选中标签后与关键词搜索取交集,空搜索 + 标签列出该标签下 App,结果仍使用长条候选项。QSF-CR-001 独立代码审核通过,终态口令 CR_PASS_QSF。审核确认运行时单选、不持久化、不改 AppGrid / Pro / 数据结构;Return / Esc / 方向键、鼠标点击启动、IME composition 和焦点回到输入框契约未被破坏;后续仍需 QA 执行真实 UI / 视觉 / 鼠标 / IME 实机验收。QSF-QA-001 正式 QA 失败,终态口令 QA_FAIL_QSF。自动门禁通过,但真实 UI 发现 全部 chip 不能稳定清除筛选,且含 未分类 等保护容器标签的数据触发 Swift fatal Duplicate values for key: '未分类'。QA PASS 前不得生成 8.4.0 可安装验收包。QSF-QA-002 返修复测通过,终态口令 QA_PASS_QSF_FIX。真实 UI 确认 全部 chip 可稳定清除筛选,普通标签切换 / 同标签二次点击 / 标签 + 关键词交集 / 启动与关闭 / IME smoke 回归通过;保护容器 fixture 未再 duplicate-key 崩溃,保护名未进入 Quick Search 筛选条。PMO 消费后才能生成 8.4.0 可安装验收包。QSF-PKG-001 完成,终态口令 LOCAL_TEST_READY_QSF。8.4.0 (20260828.1732) 本地安装体验 DMG 已生成并通过基础验证;DMG 路径为 /Users/ar/Projects/Taglauncher/03-O/C2.builds/LocalTest-8.4.0-20260828.1732/Archive/TagLauncher-8.4.0-build20260828.1732-localtest.dmg,SHA256 为 76647a1133fbb96abdb8dd0531dc83819ac58815057071671204b746b781070f。8.4.0 (20260828.1732) 后确认“没有找到问题”。PMO 随后完成正式冻结,终态状态 ASC_UPLOAD_READY_QSF:正式上传包为 /Users/ar/Projects/Taglauncher/03-O/K3.运营与发布资料/Release/AppStore-8.4.0-20260828.2219/Upload/TagLauncher-8.4.0-build20260828.2219.pkg,SHA256 为 0d374a03b25c11a4bf9bad19238defd7c3043b72386ee70f7857e01f4f9d6318。QSF-ASC-001 完成,终态口令 TESTFLIGHT_INTERNAL_READY_QSF。8.4.0 (20260828.2219) 已上传 App Store Connect,Delivery UUID 482c12a7-543d-4dab-afac-aa4e1b4bb6d0,Apple 返回 VALID / BETA_INTERNAL_TESTING,下一步由 Owner 通过 TestFlight 测试几天。- 确认 `/Applications/TagLauncher.app` 已是 `7.8.25 (20260609.1741)`,当前运行进程也是安装后的 `/Applications/TagLauncher.app/Contents/MacOS/TagLauncher`。
- 确认用户数据库 `tags.json` 未记录 `isunclient`,因此不是本地数据旧项。
- 确认系统相关 app 路径包括:
- `/Applications/AweSun.app`
- `/Applications/AweSun.app/Contents/Helpers/AweSun_Desktop.app`
- `/Applications/贝锐向日葵被控.app`
- `/Applications/贝锐向日葵被控.app/Wrapper/isunclient.app`
- 判断 `7.8.25` 只按 URL pathComponents 识别嵌套 `.app` 不够稳,需要把 wrapper/helper 路径识别升为通用过滤规则。
- 实现 `7.8.26`:
- 确认 `/Applications/TagLauncher.app` 已是 `7.8.25 (20260609.1741)`,当前运行进程也是安装后的 `/Applications/TagLauncher.app/Contents/MacOS/TagLauncher`。
- 确认用户数据库 `tags.json` 未记录 `isunclient`,因此不是本地数据旧项。
- 确认系统相关 app 路径包括:
- `/Applications/AweSun.app`
- `/Applications/AweSun.app/Contents/Helpers/AweSun_Desktop.app`
- `/Applications/贝锐向日葵被控.app`
- `/Applications/贝锐向日葵被控.app/Wrapper/isunclient.app`
- 判断 `7.8.25` 只按 URL pathComponents 识别嵌套 `.app` 不够稳,需要把 wrapper/helper 路径识别升为通用过滤规则。
- 实现 `7.8.26`:
- 扫描层过滤 `.app/.../*.app`、`/Wrapper/`、`/Contents/Helpers/`、`/Contents/XPCServices/`。
- QA 增加 helper path fixture。
- 版本更新为 `7.8.26 (20260609.2004)`。
- 创建提交:`dd1c9fc Release 7.8.26 helper app filtering`。
- 生成本地验收 DMG:`/Users/ar/Projects/Taglauncher/src/build/TagLauncher-7.8.26-build20260609.2004.dmg`。
## 验证结果
- `Scripts/quick_search_app_name_qa.sh` 通过。
- `Scripts/quick_search_system_app_qa.sh` 通过。
- `APP_BUILD=20260609.2004 bash build.sh` 通过。
排查 TagLauncher 搜索“向日葵”时命中结果显示为英文 `isunclient`,而 Spotlight 显示中文名的问题,判断原因和修复风险。
## 已完成事项
- 重新读取 `/Users/ar/.codex/AGENTS.md` 与 `/Users/ar/Projects/Taglauncher/AGENTS.md`,并遵守项目要求的代码治理、实现前讨论、QA 与会话记录规则。
- 只读检查当前源码中 `AppIndexer`、`QuickSearchEngine`、`AppLibraryController` 和现有 `quick_search_app_name_qa.sh`。
- 确认系统中存在:
- `/Applications/AweSun.app`
- `/Applications/AweSun.app/Contents/Helpers/AweSun_Desktop.app`
- 重新读取 `/Users/ar/.codex/AGENTS.md` 与 `/Users/ar/Projects/Taglauncher/AGENTS.md`,并遵守项目要求的代码治理、实现前讨论、QA 与会话记录规则。
- 只读检查当前源码中 `AppIndexer`、`QuickSearchEngine`、`AppLibraryController` 和现有 `quick_search_app_name_qa.sh`。
- 确认系统中存在:
- `/Applications/AweSun.app`
- `/Applications/AweSun.app/Contents/Helpers/AweSun_Desktop.app`
- `/Applications/贝锐向日葵被控.app`
- `/Applications/贝锐向日葵被控.app/Wrapper/isunclient.app`
- 确认用户数据 `tags.json` 记录的是外层 `/Applications/贝锐向日葵被控.app`,不是内层 `isunclient.app`。
- 临时运行当前扫描逻辑复现实验,当前源码只输出外层 `/Applications/贝锐向日葵被控.app`,可读到中文显示名,不输出内层 `Wrapper/isunclient.app`。
- `/Applications/贝锐向日葵被控.app/Wrapper/isunclient.app`
- 确认用户数据 `tags.json` 记录的是外层 `/Applications/贝锐向日葵被控.app`,不是内层 `isunclient.app`。
- 临时运行当前扫描逻辑复现实验,当前源码只输出外层 `/Applications/贝锐向日葵被控.app`,可读到中文显示名,不输出内层 `Wrapper/isunclient.app`。
- 发现本机 `/Applications/TagLauncher.app` 仍为 `7.8.22 (20260608.2346)`,不是已冻结的 `7.8.24 (20260609.1221)`。
- 运行现有 QA 脚本通过,但该脚本没有覆盖最终 QuickSearch 文档是否含有 `isunclient`,存在回归测试盲区。
## 关键判断
- 直接原因:向日葵“被控”包结构特殊,外层 `.app` 是包装器,真实 bundle 在 `Wrapper/isunclient.app`。旧扫描结果或旧构建若把内层 bundle 当成独立 App 收入 QuickSearch,就会显示内部文件名 `isunclient`。
- 当前源码侧扫描器已能过滤这个内层 helper,截图现象更可能来自旧安装版或旧内存扫描数据。
legacy/codex-20260610/session-history/2026-06-09-helper过滤补强.mdlegacy/codex-20260610/session-history/2026-06-09-向日葵显示名排查.mdlegacy/codex-20260610/session-history/2026-06-09-多语种显示名策略.md26.0828-Taglauncher.quicksearchfilter-开发实现.md26.0828-Taglauncher.quicksearchfilter-代码审核.md26.0828-Taglauncher.quicksearchfilter-QA失败.md26.0828-Taglauncher.quicksearchfilter-QA返修复测.md26.0828-Taglauncher.quicksearchfilter-8.4.0本地包.md26.0828-Taglauncher.quicksearchfilter-8.4.0正式冻结.md26.0830-Taglauncher.quicksearchfilter-TestFlight上传.md/Applications/TagLauncher.app 已是 7.8.25 (20260609.1741),当前运行进程也是安装后的 /Applications/TagLauncher.app/Contents/MacOS/TagLauncher。tags.json 未记录 isunclient,因此不是本地数据旧项。/Applications/AweSun.app/Applications/AweSun.app/Contents/Helpers/AweSun_Desktop.app/Users/ar/.codex/AGENTS.md 与 /Users/ar/Projects/Taglauncher/AGENTS.md,并遵守项目要求的代码治理、实现前讨论、QA 与会话记录规则。AppIndexer、QuickSearchEngine、AppLibraryController 和现有 quick_search_app_name_qa.sh。/Applications/AweSun.app/Applications/AweSun.app/Contents/Helpers/AweSun_Desktop.appAppInfo.localizedDisplayName(for:)、localizedNamesByLanguage、localizedNames、QuickSearchEngine.makeDocuments、L10n.supported 和 Apple 默认应用目录的语言 fallback。.app、helper、iOS-on-Mac wrapper 应归并到外层用户可见 App;内层标识最多参与搜索匹配,不应作为独立结果展示。QSF-DEV-001 终态口令为 DEV_READY_QSF,证据见 02-P/Round01-QuickSearchTagFilter/04-开发自测与回报-8.4.0.md。QuickSearchEngine.search 增加 selectedTagName,先按真实标签精确收窄文档,再和关键词 token 匹配。ContentView 维护 quickSearchSelectedTagName 运行时状态,从当前索引与 tagDefinitions 生成可用标签,排除未分类、Mac 自带、不常用等保护容器名。QuickSearchTagFilterBar / QuickSearchTagFilterChip,保持结果区使用原有长条候选项。quick_search_tag_filter_qa.sh、quick_search_launch_contract_qa.sh、windowserver_event_safety_qa.sh、quick_search_system_app_qa.sh、macos14_availability_typecheck_qa.sh 和 git diff --check。QSF-CR-001 终态口令为 CR_PASS_QSF,证据见 02-P/Round01-QuickSearchTagFilter/05-代码审核报告-8.4.0.md。git diff --check。QSF-QA-001 终态口令为 QA_FAIL_QSF,证据见 02-P/Round01-QuickSearchTagFilter/06-QA执行报告-8.4.0.md。/Users/ar/Projects/Taglauncher/03-O/C1.source/build/TagLauncher.app,旧 /Applications/TagLauncher.app 未计入 QA 证据。全部 chip 不能稳定清除筛选;含 未分类 等保护容器标签的数据触发 Swift fatal Duplicate values for key: '未分类'。QSF-QA-002 终态口令为 QA_PASS_QSF_FIX,证据见 02-P/Round01-QuickSearchTagFilter/09-QA复测报告-8.4.0.md 和 QA-Retest-Evidence-8.4.0-20260828-QSF-QA-002/。/Users/ar/Projects/Taglauncher/03-O/C1.source/build/TagLauncher.app,旧 /Applications/TagLauncher.app 未计入复测证据。全部 chip 可清除已选标签筛选并保持 Quick Search 面板稳定;普通标签切换、同标签二次点击清除、标签 + 关键词交集、鼠标结果行启动、Return 启动、方向键、Esc、外部点击和中文 IME smoke 回归通过。未分类、Mac自带、不常用、__system.uncommon,未再触发 Duplicate values for key 崩溃,保护名未进入 Quick Search 筛选条。QA_PASS_QSF_FIX 后执行 QSF-PKG-001,终态口令为 LOCAL_TEST_READY_QSF。8.4.0 (20260828.1732),源码冻结提交 c5bdc7f1eb3ff4287beeeebb17d4f02f376a8d38,归档提交 c8f827e。/Users/ar/Projects/Taglauncher/03-O/C2.builds/LocalTest-8.4.0-20260828.1732/Archive/TagLauncher-8.4.0-build20260828.1732-localtest.dmg。76647a1133fbb96abdb8dd0531dc83819ac58815057071671204b746b781070f。8.4.0 (20260828.1732) 后确认“没有找到问题”,PMO 登记 Owner 验收并继续正式冻结。8.4.0 (20260828.2219)。7a94f69bb0dc5206a2e68d82486fd5959d16e664。e0b616c988e25d6db6e232c12056fb943c04e03e。v8.4.0-build20260828.2219。/Users/ar/Projects/Taglauncher/03-O/K3.运营与发布资料/Release/AppStore-8.4.0-20260828.2219/Upload/TagLauncher-8.4.0-build20260828.2219.pkg。0d374a03b25c11a4bf9bad19238defd7c3043b72386ee70f7857e01f4f9d6318。ASC_UPLOAD_READY_QSF,等待 Transporter / App Store Connect 上传和 Apple 后台处理反馈。8.4.0 (20260828.2219)。482c12a7-543d-4dab-afac-aa4e1b4bb6d0。import-status=VALID、processingState=VALID、build-status=BETA_INTERNAL_TESTING、buildAudienceType=APP_STORE_ELIGIBLE。TESTFLIGHT_INTERNAL_READY_QSF;未提交 App Review,下一步是 Owner 通过 TestFlight 体验。