# Taglauncher 会话记录 2026-06-08 ## 用户目标 用户要求以架构师视角审查 `/Users/ar/Projects/Taglauncher-7.8.15-source`,只讨论方案、不改代码。核心目标是让 Apple 系统自带应用默认备注随界面语言显示本语言;当且仅当用户手动改过某条备注,该条不再随语言变化。用户明确说明目前没有真实老用户,老用户只有 owner 本人,因此不要以兼容旧 `appleDefault` 中文备注为核心约束。 ## 已完成事项 - 读取项目规则:`work-continuity.md`、`delivery-gate.md`。 - 审查 `Apptag/AppleDefaultAppNotes.swift`,确认其包含约 72 条中文硬编码备注和 familiar Apple app 白名单。 - 审查 `Research/SmartStart/UltimateDefaultCatalog`,确认 base catalog 中有 77 个 `com.apple.*` 条目,29 个 notes 语言文件存在。 - 审查 `Apptag/SmartCategorization/SmartStartService.swift`,确认 `.catalogDefault` 备注已有按 `L10n.currentCode` 加载、fallback、metadata provenance、语言切换重定位逻辑。 - 审查 `Apptag/DataLayer.swift`,确认当前 Apple 初始备注通过 `seedDefaultAppleAppNotes` 写入 `.appleDefault`,不会被 `relocalizeDefaultNotesForCurrentLanguage` 更新。 - 审查 `TagEditor.setAppNote`,确认用户非空编辑会写入 `.manual`,清空会删除备注和 metadata。 - 审查 `L10n.swift`、`ApptagApp.swift`、`ContentView.swift`,确认语言切换入口会发 `.appLanguageDidChange`,ContentView 收到后触发 catalog 默认备注重定位。 - 审查 `build.sh` 与 catalog 构建脚本,确认 build 会复制 base/manifest 并压缩所有 notes 资源;Research 生成脚本仍从 `AppleDefaultAppNotes.swift` 抽取 Apple fallback。 ## 关键决策建议 - 长期推荐把 Apple 自带 App 默认备注统一纳入 SmartStart catalog 体系,不再在运行时使用独立 `AppleDefaultAppNotes.swift` 作为备注来源。 - `AppNoteOrigin.appleDefault` 应迁移/降级为历史兼容枚举值;新写入的系统默认备注统一使用 `.catalogDefault`。 - `metadata.catalog` 应成为判断“仍跟随默认”的唯一依据:包含 `entryID`、实际语言、`notesVersion` 和 fingerprint。 - 用户手动编辑非空备注继续标记 `.manual`;语言切换只更新 `.catalogDefault` 且当前文本 fingerprint 仍匹配旧默认的条目。 - 清空备注的语义建议定义为“恢复默认跟随”,而不是“手动保持为空”;如产品需要永久空备注,应另设显式操作。 - Research 构建脚本应停止解析 Swift 运行时代码,Apple 中文源备注应保留在 catalog CSV 或专用 seed JSON 中。 ## 文件变更 无。用户明确要求只讨论方案、不改代码。 ## 未决问题 - 是否需要提供一个“保持为空/隐藏默认备注”的显式 UI 语义;若没有真实用户,建议暂不引入。 - 是否在下一版本做一次 store migration,把 owner 机器上 `.appleDefault` 且 fingerprint 匹配旧硬编码的备注迁到 `.catalogDefault`。 ## 后续建议 - 实现时优先修改默认备注来源和 migration,再调整清空备注语义。 - 发布前应验证 29 种语言的 Apple 默认备注、语言切换后 `.manual` 不变、清空后恢复跟随默认、build bundle 内包含所有压缩 notes 资源。