# Taglauncher QA 审查记录 - 2026-06-08 ## 用户目标 用户要求以 QA 视角审查 `/Users/ar/Projects/Taglauncher-7.8.15-source` 中 Apple 系统自带 App 默认备注本地化方案,只做方案审查和测试设计,不改代码。关注文件:`DataLayer.swift`、`SmartStartService.swift`、`L10n.swift`、`ContentView.swift`、`AppleDefaultAppNotes.swift`。 ## 已完成事项 - 读取项目规则与 QA/交付门禁规则,确认本轮只做审查与测试设计。 - 审查默认备注数据模型:`AppNoteOrigin` 包含 `catalogDefault`、`appleDefault`、`manual`,`appNoteMetadata` 保存 provenance 与 fingerprint。 - 审查语言切换路径:`L10n.switchTo` / `switchToAutomatic` 发送 `.appLanguageDidChange`;`ContentView` 收到后异步调用 `SmartStartService.relocalizeDefaultNotesForCurrentLanguage(apps:)` 并刷新 UI。 - 审查保护逻辑:`relocalizeDefaultNotesForCurrentLanguage` 只覆盖 `origin == .catalogDefault` 且当前文本 fingerprint 与旧 catalog provenance 匹配的备注;手写编辑通过 `TagEditor.setAppNote` 写为 `manual`。 - 审查 SmartStart catalog 资源:base catalog 有 29 种语言、77 个 `com.apple.*` 条目;所有 Apple 条目在 29 种 notes JSON 中均有非空备注。 ## 关键结论 - 新 catalog 默认备注的语言切换保护机制方向正确:catalog 默认可跟随语言切换,manual 不应被覆盖。 - 主要风险是旧路径仍存在:`DataLayer.reconcileScannedApps` 初次扫描仍调用 `seedDefaultAppleAppNotes`,该函数从 `AppleDefaultAppNotes.swift` 写入中文硬编码备注并标记 `origin: appleDefault`;当前语言切换刷新函数不处理 `appleDefault`,老数据或首次扫描路径可能不会随语言切换。 - `SmartStartService.applyDraft` 允许覆盖 “knownDefaultNotes” 或 catalog default,但其候选集当前只包含当前语言的默认备注,不能天然识别旧中文 `appleDefault` 是否应迁移为 catalog default。 - 需要补自动化覆盖 store 迁移、manual 保护、catalog 完整性、构建资源完整性和真实 UI smoke。 ## 文件变更 未改项目源码。仅新增本轮会话记录文件: - `/Users/ar/Projects/X-sessionhistory/Taglauncher/2026-06-08-02.md` ## 未决问题 - 是否计划移除或迁移 `AppleDefaultAppNotes.swift` 的中文默认备注来源,尚未从代码中看到完整迁移实现。 - 是否已有外部 QA 脚本未放在源码目录内,当前源码目录未发现针对 app note 本地化的测试脚本。 ## 后续建议 - 发布前补 `appNoteMetadata` 迁移/保护单测或脚本测试。 - 补构建产物资源校验,确保 `.app/Contents/Resources` 含 29 个 `SmartStartUltimateDefaultCatalog.notes.*.json.deflate`。 - 真机 smoke 必须覆盖旧中文默认备注、手写备注、删除备注、语言快速切换、自动语言模式。