Ariver
2026-06-27 28be00ea53666fd5500a702a3c187c0e27dd90ad
Simplify SmartStart default categories
36 files modified
2 files added
781 ■■■■ changed files
CODEGRAPH.md 4 ●●●● patch | view | raw | blame | history
src/Apptag/AppleDefaultAppCatalog.swift 1 ●●●● patch | view | raw | blame | history
src/Apptag/DataLayer.swift 9 ●●●●● patch | view | raw | blame | history
src/Apptag/Info.plist 4 ●●●● patch | view | raw | blame | history
src/Apptag/Localization/ar-Najdi.json 8 ●●●● patch | view | raw | blame | history
src/Apptag/Localization/ar.json 8 ●●●● patch | view | raw | blame | history
src/Apptag/Localization/cs.json 8 ●●●● patch | view | raw | blame | history
src/Apptag/Localization/da.json 8 ●●●● patch | view | raw | blame | history
src/Apptag/Localization/de.json 8 ●●●● patch | view | raw | blame | history
src/Apptag/Localization/en.json 8 ●●●● patch | view | raw | blame | history
src/Apptag/Localization/es.json 8 ●●●● patch | view | raw | blame | history
src/Apptag/Localization/fr.json 8 ●●●● patch | view | raw | blame | history
src/Apptag/Localization/id.json 8 ●●●● patch | view | raw | blame | history
src/Apptag/Localization/it.json 8 ●●●● patch | view | raw | blame | history
src/Apptag/Localization/ja.json 8 ●●●● patch | view | raw | blame | history
src/Apptag/Localization/ko.json 8 ●●●● patch | view | raw | blame | history
src/Apptag/Localization/ms.json 8 ●●●● patch | view | raw | blame | history
src/Apptag/Localization/nb.json 8 ●●●● patch | view | raw | blame | history
src/Apptag/Localization/nl.json 8 ●●●● patch | view | raw | blame | history
src/Apptag/Localization/nn.json 8 ●●●● patch | view | raw | blame | history
src/Apptag/Localization/no.json 8 ●●●● patch | view | raw | blame | history
src/Apptag/Localization/pl.json 6 ●●●● patch | view | raw | blame | history
src/Apptag/Localization/pt-BR.json 8 ●●●● patch | view | raw | blame | history
src/Apptag/Localization/ro.json 8 ●●●● patch | view | raw | blame | history
src/Apptag/Localization/ru.json 8 ●●●● patch | view | raw | blame | history
src/Apptag/Localization/sr-Cyrl.json 8 ●●●● patch | view | raw | blame | history
src/Apptag/Localization/sv.json 8 ●●●● patch | view | raw | blame | history
src/Apptag/Localization/th.json 8 ●●●● patch | view | raw | blame | history
src/Apptag/Localization/tr.json 8 ●●●● patch | view | raw | blame | history
src/Apptag/Localization/uk.json 8 ●●●● patch | view | raw | blame | history
src/Apptag/Localization/vi.json 8 ●●●● patch | view | raw | blame | history
src/Apptag/Localization/zh-Hans.json 6 ●●●● patch | view | raw | blame | history
src/Apptag/Localization/zh-Hant.json 8 ●●●● patch | view | raw | blame | history
src/Apptag/SmartCategorization/SmartCategory.swift 56 ●●●●● patch | view | raw | blame | history
src/Apptag/SmartCategorization/SmartStartService.swift 1 ●●●● patch | view | raw | blame | history
src/CHANGELOG.md 8 ●●●●● patch | view | raw | blame | history
src/Docs/Requirements/2026-06-27-smartstart-category-simplification.md 259 ●●●●● patch | view | raw | blame | history
src/Scripts/smartstart_default_categories_qa.sh 211 ●●●●● patch | view | raw | blame | history
CODEGRAPH.md
@@ -95,6 +95,8 @@
- `src/Apptag/SmartCategorization/SmartCategory.swift`
  - 内置智能分类定义。
  - `SmartCategoryDefaults.orderedIDs` 是 SmartStart 默认初始化标签事实源;当前默认方案为 15 个标签。
  - `SmartCategoryID.smartStartDefaultCategoryID` 负责把旧细分 catalog 分类归并到 15 个默认标签;这是新 SmartStart 写入前的归并,不做老用户旧标签自动迁移。
- `src/Apptag/SmartCategorization/SmartCategorizationDraft.swift`
  - 智能分类草稿、默认备注 provenance、未分配应用和 warning 模型。
- `src/Apptag/SmartCategorization/SmartStartService.swift`
@@ -145,6 +147,8 @@
  - SmartStart catalog 资源检查。
- `src/Scripts/smart_category_localization_qa.sh`
  - SmartCategory/default system tag 初始化标签 29 语种本地化检查;禁止非英文语言包直接复制英文标签,保留 `PDF`、`DevOps` 等技术通用词例外。
- `src/Scripts/smartstart_default_categories_qa.sh`
  - SmartStart 默认初始化标签检查;验证 15 个默认分类、catalog 分类归并入口、首次 starter tags 和关键多语言目标文案。
- `src/Scripts/quick_search_app_name_qa.sh`
  - Quick Search 应用显示名回归。
- `src/Scripts/quick_search_system_app_qa.sh`
src/Apptag/AppleDefaultAppCatalog.swift
@@ -127,6 +127,7 @@
        let categoryIDs = entry.defaultTag
            .compactMap { SmartCategoryID(rawValue: $0) }
            .filter { $0 != .other }
            .map(\.smartStartDefaultCategoryID)
        guard !categoryIDs.isEmpty else { return nil }
        return AppleDefaultCategorization(
            canonicalName: entry.canonicalName,
src/Apptag/DataLayer.swift
@@ -1755,12 +1755,11 @@
        guard !FileManager.default.fileExists(atPath: storeURL.path) else { return }
        let starterCategoryIDs: [SmartCategoryID] = [
            .uiPrototyping,
            .ide,
            .writing,
            .game,
            .design,
            .development,
            .office,
            .entertainment,
            .system,
            .systemEnhancement,
            .gtd
        ]
src/Apptag/Info.plist
@@ -19,9 +19,9 @@
    <key>CFBundlePackageType</key>
    <string>APPL</string>
    <key>CFBundleShortVersionString</key>
    <string>8.1.2</string>
    <string>8.1.3</string>
    <key>CFBundleVersion</key>
    <string>20260627.0106</string>
    <string>20260627.1605</string>
    <key>LSApplicationCategoryType</key>
    <string>public.app-category.utilities</string>
    <key>LSMinimumSystemVersion</key>
src/Apptag/Localization/ar-Najdi.json
@@ -105,16 +105,16 @@
  "smart.category.productivity": "الإنتاجية",
  "smart.category.file-management": "إدارة الملفات",
  "smart.category.transfer": "الرفع والتنزيل",
  "smart.category.development": "التطوير",
  "smart.category.development": "البرمجة",
  "smart.category.design": "التصميم",
  "smart.category.writing": "الكتابة",
  "smart.category.media": "الوسائط",
  "smart.category.video": "الفيديو",
  "smart.category.audio": "الصوت",
  "smart.category.picture-photo": "الصور والفوتوغرافيا",
  "smart.category.picture-photo": "الصور",
  "smart.category.utilities": "الأدوات",
  "smart.category.system": "تطبيقات النظام",
  "smart.category.system-enhancement": "تحسينات النظام",
  "smart.category.system-enhancement": "أدوات النظام",
  "smart.category.entertainment": "الترفيه",
  "smart.category.game": "الألعاب",
  "smart.category.finance": "المالية",
@@ -190,7 +190,7 @@
  "smart.category.GTD": "المهام وGTD",
  "smart.category.Notes": "الملاحظات",
  "smart.category.Meeting": "الاجتماعات",
  "smart.category.office": "المكتب",
  "smart.category.office": "المكتب والمستندات",
  "smart.category.PDF": "PDF",
  "smart.category.api-tools": "أدوات API",
  "smart.category.database-tools": "قواعد البيانات",
src/Apptag/Localization/ar.json
@@ -105,16 +105,16 @@
  "smart.category.productivity": "الإنتاجية",
  "smart.category.file-management": "إدارة الملفات",
  "smart.category.transfer": "الرفع والتنزيل",
  "smart.category.development": "التطوير",
  "smart.category.development": "البرمجة",
  "smart.category.design": "التصميم",
  "smart.category.writing": "الكتابة",
  "smart.category.media": "الوسائط",
  "smart.category.video": "الفيديو",
  "smart.category.audio": "الصوت",
  "smart.category.picture-photo": "الصور والفوتوغرافيا",
  "smart.category.picture-photo": "الصور",
  "smart.category.utilities": "الأدوات",
  "smart.category.system": "تطبيقات النظام",
  "smart.category.system-enhancement": "تحسينات النظام",
  "smart.category.system-enhancement": "أدوات النظام",
  "smart.category.entertainment": "الترفيه",
  "smart.category.game": "الألعاب",
  "smart.category.finance": "المالية",
@@ -190,7 +190,7 @@
  "smart.category.GTD": "المهام وGTD",
  "smart.category.Notes": "الملاحظات",
  "smart.category.Meeting": "الاجتماعات",
  "smart.category.office": "المكتب",
  "smart.category.office": "المكتب والمستندات",
  "smart.category.PDF": "PDF",
  "smart.category.api-tools": "أدوات API",
  "smart.category.database-tools": "قواعد البيانات",
src/Apptag/Localization/cs.json
@@ -105,16 +105,16 @@
  "smart.category.productivity": "Produktivita",
  "smart.category.file-management": "Správa souborů",
  "smart.category.transfer": "Nahrávání a stahování",
  "smart.category.development": "Vývoj",
  "smart.category.development": "Programování",
  "smart.category.design": "Návrh",
  "smart.category.writing": "Psaní",
  "smart.category.media": "Média",
  "smart.category.video": "Videa",
  "smart.category.audio": "Zvuk",
  "smart.category.picture-photo": "Obrázky a fotografie",
  "smart.category.picture-photo": "Fotky",
  "smart.category.utilities": "Nástroje",
  "smart.category.system": "Systémové aplikace",
  "smart.category.system-enhancement": "Vylepšení systému",
  "smart.category.system-enhancement": "Systémové nástroje",
  "smart.category.entertainment": "Zábava",
  "smart.category.game": "Hry",
  "smart.category.finance": "Peníze",
@@ -190,7 +190,7 @@
  "smart.category.GTD": "Úkoly a GTD",
  "smart.category.Notes": "Poznámky",
  "smart.category.Meeting": "Schůzky",
  "smart.category.office": "Kancelář",
  "smart.category.office": "Kancelář a dokumenty",
  "smart.category.PDF": "PDF",
  "smart.category.api-tools": "Nástroje API",
  "smart.category.database-tools": "Databáze",
src/Apptag/Localization/da.json
@@ -105,16 +105,16 @@
  "smart.category.productivity": "Produktivitet",
  "smart.category.file-management": "Filhåndtering",
  "smart.category.transfer": "Uploads og downloads",
  "smart.category.development": "Udvikling",
  "smart.category.development": "Kodning",
  "smart.category.design": "Formgivning",
  "smart.category.writing": "Skrivning",
  "smart.category.media": "Medier",
  "smart.category.video": "Videoer",
  "smart.category.audio": "Lyd",
  "smart.category.picture-photo": "Billeder og fotos",
  "smart.category.picture-photo": "Fotos",
  "smart.category.utilities": "Værktøjer",
  "smart.category.system": "Systemapps",
  "smart.category.system-enhancement": "Systemforbedringer",
  "smart.category.system-enhancement": "Systemværktøjer",
  "smart.category.entertainment": "Underholdning",
  "smart.category.game": "Spil",
  "smart.category.finance": "Økonomi",
@@ -190,7 +190,7 @@
  "smart.category.GTD": "Opgaver og GTD",
  "smart.category.Notes": "Noter",
  "smart.category.Meeting": "Møder",
  "smart.category.office": "Kontor",
  "smart.category.office": "Kontor og dokumenter",
  "smart.category.PDF": "PDF",
  "smart.category.api-tools": "API-værktøjer",
  "smart.category.database-tools": "Databaser",
src/Apptag/Localization/de.json
@@ -105,16 +105,16 @@
  "smart.category.productivity": "Produktivität",
  "smart.category.file-management": "Dateiverwaltung",
  "smart.category.transfer": "Uploads und Downloads",
  "smart.category.development": "Entwicklung",
  "smart.category.development": "Programmieren",
  "smart.category.design": "Gestaltung",
  "smart.category.writing": "Schreiben",
  "smart.category.media": "Medien",
  "smart.category.video": "Videos",
  "smart.category.audio": "Ton",
  "smart.category.picture-photo": "Bilder und Fotos",
  "smart.category.picture-photo": "Fotos",
  "smart.category.utilities": "Dienstprogramme",
  "smart.category.system": "System-Apps",
  "smart.category.system-enhancement": "Systemerweiterungen",
  "smart.category.system-enhancement": "Systemwerkzeuge",
  "smart.category.entertainment": "Unterhaltung",
  "smart.category.game": "Spiele",
  "smart.category.finance": "Finanzen",
@@ -190,7 +190,7 @@
  "smart.category.GTD": "Aufgaben und GTD",
  "smart.category.Notes": "Notizen",
  "smart.category.Meeting": "Besprechungen",
  "smart.category.office": "Büro",
  "smart.category.office": "Büro & Dokumente",
  "smart.category.PDF": "PDF",
  "smart.category.api-tools": "API-Tools",
  "smart.category.database-tools": "Datenbanken",
src/Apptag/Localization/en.json
@@ -105,16 +105,16 @@
  "smart.category.productivity": "Productivity",
  "smart.category.file-management": "File Management",
  "smart.category.transfer": "Uploads & Downloads",
  "smart.category.development": "Development",
  "smart.category.development": "Coding",
  "smart.category.design": "Design",
  "smart.category.writing": "Writing",
  "smart.category.media": "Media",
  "smart.category.video": "Video",
  "smart.category.audio": "Audio",
  "smart.category.picture-photo": "Pictures & Photos",
  "smart.category.picture-photo": "Photos",
  "smart.category.utilities": "Utilities",
  "smart.category.system": "System Apps",
  "smart.category.system-enhancement": "System Enhancements",
  "smart.category.system-enhancement": "System Tools",
  "smart.category.entertainment": "Entertainment",
  "smart.category.game": "Games",
  "smart.category.finance": "Finance",
@@ -190,7 +190,7 @@
  "smart.category.GTD": "Tasks & GTD",
  "smart.category.Notes": "Notes",
  "smart.category.Meeting": "Meetings",
  "smart.category.office": "Office",
  "smart.category.office": "Office & Docs",
  "smart.category.PDF": "PDF",
  "smart.category.api-tools": "API Tools",
  "smart.category.database-tools": "Databases",
src/Apptag/Localization/es.json
@@ -105,16 +105,16 @@
  "smart.category.productivity": "Productividad",
  "smart.category.file-management": "Gestión de archivos",
  "smart.category.transfer": "Cargas y descargas",
  "smart.category.development": "Desarrollo",
  "smart.category.development": "Programación",
  "smart.category.design": "Diseño",
  "smart.category.writing": "Escritura",
  "smart.category.media": "Medios",
  "smart.category.video": "Vídeo",
  "smart.category.audio": "Sonido",
  "smart.category.picture-photo": "Imágenes y fotos",
  "smart.category.picture-photo": "Fotos",
  "smart.category.utilities": "Utilidades",
  "smart.category.system": "Apps del sistema",
  "smart.category.system-enhancement": "Mejoras del sistema",
  "smart.category.system-enhancement": "Herramientas del sistema",
  "smart.category.entertainment": "Entretenimiento",
  "smart.category.game": "Juegos",
  "smart.category.finance": "Finanzas",
@@ -190,7 +190,7 @@
  "smart.category.GTD": "Tareas y GTD",
  "smart.category.Notes": "Notas",
  "smart.category.Meeting": "Reuniones",
  "smart.category.office": "Oficina",
  "smart.category.office": "Oficina y documentos",
  "smart.category.PDF": "PDF",
  "smart.category.api-tools": "Herramientas API",
  "smart.category.database-tools": "Bases de datos",
src/Apptag/Localization/fr.json
@@ -105,16 +105,16 @@
  "smart.category.productivity": "Productivité",
  "smart.category.file-management": "Gestion de fichiers",
  "smart.category.transfer": "Envois et téléchargements",
  "smart.category.development": "Développement",
  "smart.category.development": "Programmation",
  "smart.category.design": "Conception",
  "smart.category.writing": "Rédaction",
  "smart.category.media": "Médias",
  "smart.category.video": "Vidéo",
  "smart.category.audio": "Son",
  "smart.category.picture-photo": "Images et photos",
  "smart.category.picture-photo": "Images",
  "smart.category.utilities": "Utilitaires",
  "smart.category.system": "Apps système",
  "smart.category.system-enhancement": "Améliorations système",
  "smart.category.system-enhancement": "Outils système",
  "smart.category.entertainment": "Divertissement",
  "smart.category.game": "Jeux",
  "smart.category.finance": "Finances",
@@ -190,7 +190,7 @@
  "smart.category.GTD": "Tâches et GTD",
  "smart.category.Notes": "Prises de notes",
  "smart.category.Meeting": "Réunions",
  "smart.category.office": "Bureau",
  "smart.category.office": "Bureau et documents",
  "smart.category.PDF": "PDF",
  "smart.category.api-tools": "Outils API",
  "smart.category.database-tools": "Bases de données",
src/Apptag/Localization/id.json
@@ -105,16 +105,16 @@
  "smart.category.productivity": "Produktivitas",
  "smart.category.file-management": "Manajemen file",
  "smart.category.transfer": "Unggahan dan unduhan",
  "smart.category.development": "Pengembangan",
  "smart.category.development": "Pemrograman",
  "smart.category.design": "Desain",
  "smart.category.writing": "Penulisan",
  "smart.category.media": "Media digital",
  "smart.category.video": "Video digital",
  "smart.category.audio": "Audio digital",
  "smart.category.picture-photo": "Gambar dan foto",
  "smart.category.picture-photo": "Foto",
  "smart.category.utilities": "Utilitas",
  "smart.category.system": "Aplikasi sistem",
  "smart.category.system-enhancement": "Peningkatan sistem",
  "smart.category.system-enhancement": "Alat sistem",
  "smart.category.entertainment": "Hiburan",
  "smart.category.game": "Game",
  "smart.category.finance": "Keuangan",
@@ -190,7 +190,7 @@
  "smart.category.GTD": "Tugas dan GTD",
  "smart.category.Notes": "Catatan",
  "smart.category.Meeting": "Rapat",
  "smart.category.office": "Kantor",
  "smart.category.office": "Kantor & dokumen",
  "smart.category.PDF": "PDF",
  "smart.category.api-tools": "Alat API",
  "smart.category.database-tools": "Basis data",
src/Apptag/Localization/it.json
@@ -105,16 +105,16 @@
  "smart.category.productivity": "Produttività",
  "smart.category.file-management": "Gestione file",
  "smart.category.transfer": "Caricamenti e download",
  "smart.category.development": "Sviluppo",
  "smart.category.development": "Programmazione",
  "smart.category.design": "Progettazione",
  "smart.category.writing": "Scrittura",
  "smart.category.media": "Contenuti multimediali",
  "smart.category.video": "Filmati",
  "smart.category.audio": "Suono",
  "smart.category.picture-photo": "Immagini e foto",
  "smart.category.picture-photo": "Foto",
  "smart.category.utilities": "Utility",
  "smart.category.system": "App di sistema",
  "smart.category.system-enhancement": "Miglioramenti di sistema",
  "smart.category.system-enhancement": "Strumenti di sistema",
  "smart.category.entertainment": "Intrattenimento",
  "smart.category.game": "Giochi",
  "smart.category.finance": "Finanza",
@@ -190,7 +190,7 @@
  "smart.category.GTD": "Attività e GTD",
  "smart.category.Notes": "Note",
  "smart.category.Meeting": "Riunioni",
  "smart.category.office": "Ufficio",
  "smart.category.office": "Ufficio e documenti",
  "smart.category.PDF": "PDF",
  "smart.category.api-tools": "Strumenti API",
  "smart.category.database-tools": "Database",
src/Apptag/Localization/ja.json
@@ -105,16 +105,16 @@
  "smart.category.productivity": "生産性",
  "smart.category.file-management": "ファイル管理",
  "smart.category.transfer": "アップロードとダウンロード",
  "smart.category.development": "開発",
  "smart.category.development": "コーディング",
  "smart.category.design": "デザイン",
  "smart.category.writing": "執筆",
  "smart.category.media": "メディア",
  "smart.category.video": "ビデオ",
  "smart.category.audio": "オーディオ",
  "smart.category.picture-photo": "画像と写真",
  "smart.category.picture-photo": "写真",
  "smart.category.utilities": "ユーティリティ",
  "smart.category.system": "システムアプリ",
  "smart.category.system-enhancement": "システム拡張",
  "smart.category.system-enhancement": "システムツール",
  "smart.category.entertainment": "エンターテインメント",
  "smart.category.game": "ゲーム",
  "smart.category.finance": "ファイナンス",
@@ -190,7 +190,7 @@
  "smart.category.GTD": "タスクとGTD",
  "smart.category.Notes": "メモ",
  "smart.category.Meeting": "会議",
  "smart.category.office": "オフィス",
  "smart.category.office": "オフィスと文書",
  "smart.category.PDF": "PDF",
  "smart.category.api-tools": "APIツール",
  "smart.category.database-tools": "データベース",
src/Apptag/Localization/ko.json
@@ -105,16 +105,16 @@
  "smart.category.productivity": "생산성",
  "smart.category.file-management": "파일 관리",
  "smart.category.transfer": "업로드 및 다운로드",
  "smart.category.development": "개발",
  "smart.category.development": "코딩",
  "smart.category.design": "디자인",
  "smart.category.writing": "글쓰기",
  "smart.category.media": "미디어",
  "smart.category.video": "비디오",
  "smart.category.audio": "오디오",
  "smart.category.picture-photo": "이미지와 사진",
  "smart.category.picture-photo": "사진",
  "smart.category.utilities": "유틸리티",
  "smart.category.system": "시스템 앱",
  "smart.category.system-enhancement": "시스템 향상",
  "smart.category.system-enhancement": "시스템 도구",
  "smart.category.entertainment": "엔터테인먼트",
  "smart.category.game": "게임",
  "smart.category.finance": "금융",
@@ -190,7 +190,7 @@
  "smart.category.GTD": "작업 및 GTD",
  "smart.category.Notes": "메모",
  "smart.category.Meeting": "회의",
  "smart.category.office": "오피스",
  "smart.category.office": "오피스 및 문서",
  "smart.category.PDF": "PDF",
  "smart.category.api-tools": "API 도구",
  "smart.category.database-tools": "데이터베이스",
src/Apptag/Localization/ms.json
@@ -105,16 +105,16 @@
  "smart.category.productivity": "Produktiviti",
  "smart.category.file-management": "Pengurusan fail",
  "smart.category.transfer": "Muat naik dan muat turun",
  "smart.category.development": "Pembangunan",
  "smart.category.development": "Pengekodan",
  "smart.category.design": "Reka bentuk",
  "smart.category.writing": "Penulisan",
  "smart.category.media": "Media digital",
  "smart.category.video": "Video digital",
  "smart.category.audio": "Audio digital",
  "smart.category.picture-photo": "Gambar dan foto",
  "smart.category.picture-photo": "Foto",
  "smart.category.utilities": "Utiliti",
  "smart.category.system": "Aplikasi sistem",
  "smart.category.system-enhancement": "Peningkatan sistem",
  "smart.category.system-enhancement": "Alat sistem",
  "smart.category.entertainment": "Hiburan",
  "smart.category.game": "Permainan",
  "smart.category.finance": "Kewangan",
@@ -190,7 +190,7 @@
  "smart.category.GTD": "Tugasan dan GTD",
  "smart.category.Notes": "Nota",
  "smart.category.Meeting": "Mesyuarat",
  "smart.category.office": "Pejabat",
  "smart.category.office": "Pejabat & dokumen",
  "smart.category.PDF": "PDF",
  "smart.category.api-tools": "Alat API",
  "smart.category.database-tools": "Pangkalan data",
src/Apptag/Localization/nb.json
@@ -105,16 +105,16 @@
  "smart.category.productivity": "Produktivitet",
  "smart.category.file-management": "Filbehandling",
  "smart.category.transfer": "Opplastinger og nedlastinger",
  "smart.category.development": "Utvikling",
  "smart.category.development": "Koding",
  "smart.category.design": "Utforming",
  "smart.category.writing": "Skriving",
  "smart.category.media": "Medier",
  "smart.category.video": "Videoer",
  "smart.category.audio": "Lyd",
  "smart.category.picture-photo": "Bilder og foto",
  "smart.category.picture-photo": "Bilder",
  "smart.category.utilities": "Verktøy",
  "smart.category.system": "Systemapper",
  "smart.category.system-enhancement": "Systemforbedringer",
  "smart.category.system-enhancement": "Systemverktøy",
  "smart.category.entertainment": "Underholdning",
  "smart.category.game": "Spill",
  "smart.category.finance": "Økonomi",
@@ -190,7 +190,7 @@
  "smart.category.GTD": "Oppgaver og GTD",
  "smart.category.Notes": "Notater",
  "smart.category.Meeting": "Møter",
  "smart.category.office": "Kontor",
  "smart.category.office": "Kontor og dokumenter",
  "smart.category.PDF": "PDF",
  "smart.category.api-tools": "API-verktøy",
  "smart.category.database-tools": "Databaser",
src/Apptag/Localization/nl.json
@@ -105,16 +105,16 @@
  "smart.category.productivity": "Productiviteit",
  "smart.category.file-management": "Bestandsbeheer",
  "smart.category.transfer": "Uploads en downloads",
  "smart.category.development": "Ontwikkeling",
  "smart.category.development": "Programmeren",
  "smart.category.design": "Ontwerp",
  "smart.category.writing": "Schrijven",
  "smart.category.media": "Mediabestanden",
  "smart.category.video": "Videomateriaal",
  "smart.category.audio": "Geluid",
  "smart.category.picture-photo": "Afbeeldingen en foto’s",
  "smart.category.picture-photo": "Foto’s",
  "smart.category.utilities": "Hulpprogramma’s",
  "smart.category.system": "Systeemapps",
  "smart.category.system-enhancement": "Systeemverbeteringen",
  "smart.category.system-enhancement": "Systeemtools",
  "smart.category.entertainment": "Ontspanning",
  "smart.category.game": "Spellen",
  "smart.category.finance": "Financiën",
@@ -190,7 +190,7 @@
  "smart.category.GTD": "Taken en GTD",
  "smart.category.Notes": "Notities",
  "smart.category.Meeting": "Vergaderingen",
  "smart.category.office": "Kantoor",
  "smart.category.office": "Kantoor en documenten",
  "smart.category.PDF": "PDF",
  "smart.category.api-tools": "API-tools",
  "smart.category.database-tools": "Databanken",
src/Apptag/Localization/nn.json
@@ -105,16 +105,16 @@
  "smart.category.productivity": "Produktivitet",
  "smart.category.file-management": "Filhandsaming",
  "smart.category.transfer": "Opplastingar og nedlastingar",
  "smart.category.development": "Utvikling",
  "smart.category.development": "Koding",
  "smart.category.design": "Utforming",
  "smart.category.writing": "Skriving",
  "smart.category.media": "Medium",
  "smart.category.video": "Videoar",
  "smart.category.audio": "Lyd",
  "smart.category.picture-photo": "Bilete og foto",
  "smart.category.picture-photo": "Foto",
  "smart.category.utilities": "Verktøy",
  "smart.category.system": "Systemappar",
  "smart.category.system-enhancement": "Systemforbetringar",
  "smart.category.system-enhancement": "Systemverktøy",
  "smart.category.entertainment": "Underhaldning",
  "smart.category.game": "Spel",
  "smart.category.finance": "Økonomi",
@@ -190,7 +190,7 @@
  "smart.category.GTD": "Oppgåver og GTD",
  "smart.category.Notes": "Notat",
  "smart.category.Meeting": "Møte",
  "smart.category.office": "Kontor",
  "smart.category.office": "Kontor og dokument",
  "smart.category.PDF": "PDF",
  "smart.category.api-tools": "API-verktøy",
  "smart.category.database-tools": "Databasar",
src/Apptag/Localization/no.json
@@ -105,16 +105,16 @@
  "smart.category.productivity": "Produktivitet",
  "smart.category.file-management": "Filbehandling",
  "smart.category.transfer": "Opplastinger og nedlastinger",
  "smart.category.development": "Utvikling",
  "smart.category.development": "Koding",
  "smart.category.design": "Utforming",
  "smart.category.writing": "Skriving",
  "smart.category.media": "Medier",
  "smart.category.video": "Videoer",
  "smart.category.audio": "Lyd",
  "smart.category.picture-photo": "Bilder og foto",
  "smart.category.picture-photo": "Bilder",
  "smart.category.utilities": "Verktøy",
  "smart.category.system": "Systemapper",
  "smart.category.system-enhancement": "Systemforbedringer",
  "smart.category.system-enhancement": "Systemverktøy",
  "smart.category.entertainment": "Underholdning",
  "smart.category.game": "Spill",
  "smart.category.finance": "Økonomi",
@@ -190,7 +190,7 @@
  "smart.category.GTD": "Oppgaver og GTD",
  "smart.category.Notes": "Notater",
  "smart.category.Meeting": "Møter",
  "smart.category.office": "Kontor",
  "smart.category.office": "Kontor og dokumenter",
  "smart.category.PDF": "PDF",
  "smart.category.api-tools": "API-verktøy",
  "smart.category.database-tools": "Databaser",
src/Apptag/Localization/pl.json
@@ -111,10 +111,10 @@
  "smart.category.media": "Multimedia",
  "smart.category.video": "Wideo",
  "smart.category.audio": "Dźwięk",
  "smart.category.picture-photo": "Obrazy i zdjęcia",
  "smart.category.picture-photo": "Zdjęcia",
  "smart.category.utilities": "Narzędzia",
  "smart.category.system": "Aplikacje systemowe",
  "smart.category.system-enhancement": "Ulepszenia systemu",
  "smart.category.system-enhancement": "Narzędzia systemowe",
  "smart.category.entertainment": "Rozrywka",
  "smart.category.game": "Gry",
  "smart.category.finance": "Finanse",
@@ -190,7 +190,7 @@
  "smart.category.GTD": "Zadania i GTD",
  "smart.category.Notes": "Notatki",
  "smart.category.Meeting": "Spotkania",
  "smart.category.office": "Biuro",
  "smart.category.office": "Biuro i dokumenty",
  "smart.category.PDF": "PDF",
  "smart.category.api-tools": "Narzędzia API",
  "smart.category.database-tools": "Bazy danych",
src/Apptag/Localization/pt-BR.json
@@ -105,16 +105,16 @@
  "smart.category.productivity": "Produtividade",
  "smart.category.file-management": "Gerenciamento de arquivos",
  "smart.category.transfer": "Uploads e downloads",
  "smart.category.development": "Desenvolvimento",
  "smart.category.development": "Programação",
  "smart.category.design": "Projeto",
  "smart.category.writing": "Escrita",
  "smart.category.media": "Mídia",
  "smart.category.video": "Vídeo",
  "smart.category.audio": "Áudio",
  "smart.category.picture-photo": "Imagens e fotos",
  "smart.category.picture-photo": "Fotos",
  "smart.category.utilities": "Utilitários",
  "smart.category.system": "Apps do sistema",
  "smart.category.system-enhancement": "Aprimoramentos do sistema",
  "smart.category.system-enhancement": "Ferramentas do sistema",
  "smart.category.entertainment": "Entretenimento",
  "smart.category.game": "Jogos",
  "smart.category.finance": "Finanças",
@@ -190,7 +190,7 @@
  "smart.category.GTD": "Tarefas e GTD",
  "smart.category.Notes": "Notas",
  "smart.category.Meeting": "Reuniões",
  "smart.category.office": "Escritório",
  "smart.category.office": "Escritório e documentos",
  "smart.category.PDF": "PDF",
  "smart.category.api-tools": "Ferramentas API",
  "smart.category.database-tools": "Bancos de dados",
src/Apptag/Localization/ro.json
@@ -105,16 +105,16 @@
  "smart.category.productivity": "Productivitate",
  "smart.category.file-management": "Gestionarea fișierelor",
  "smart.category.transfer": "Încărcări și descărcări",
  "smart.category.development": "Dezvoltare",
  "smart.category.development": "Programare",
  "smart.category.design": "Proiectare",
  "smart.category.writing": "Scriere",
  "smart.category.media": "Conținut media",
  "smart.category.video": "Videoclipuri",
  "smart.category.audio": "Sunet",
  "smart.category.picture-photo": "Imagini și fotografii",
  "smart.category.picture-photo": "Fotografii",
  "smart.category.utilities": "Utilitare",
  "smart.category.system": "Aplicații de sistem",
  "smart.category.system-enhancement": "Îmbunătățiri de sistem",
  "smart.category.system-enhancement": "Instrumente de sistem",
  "smart.category.entertainment": "Divertisment",
  "smart.category.game": "Jocuri",
  "smart.category.finance": "Finanțe",
@@ -190,7 +190,7 @@
  "smart.category.GTD": "Sarcini și GTD",
  "smart.category.Notes": "Note",
  "smart.category.Meeting": "Întâlniri",
  "smart.category.office": "Birou",
  "smart.category.office": "Birou și documente",
  "smart.category.PDF": "PDF",
  "smart.category.api-tools": "Instrumente API",
  "smart.category.database-tools": "Baze de date",
src/Apptag/Localization/ru.json
@@ -105,16 +105,16 @@
  "smart.category.productivity": "Продуктивность",
  "smart.category.file-management": "Управление файлами",
  "smart.category.transfer": "Загрузки и выгрузки",
  "smart.category.development": "Разработка",
  "smart.category.development": "Программирование",
  "smart.category.design": "Дизайн",
  "smart.category.writing": "Письмо",
  "smart.category.media": "Медиа",
  "smart.category.video": "Видео",
  "smart.category.audio": "Аудио",
  "smart.category.picture-photo": "Изображения и фото",
  "smart.category.picture-photo": "Фото",
  "smart.category.utilities": "Утилиты",
  "smart.category.system": "Системные приложения",
  "smart.category.system-enhancement": "Улучшения системы",
  "smart.category.system-enhancement": "Системные инструменты",
  "smart.category.entertainment": "Развлечения",
  "smart.category.game": "Игры",
  "smart.category.finance": "Финансы",
@@ -190,7 +190,7 @@
  "smart.category.GTD": "Задачи и GTD",
  "smart.category.Notes": "Заметки",
  "smart.category.Meeting": "Встречи",
  "smart.category.office": "Офис",
  "smart.category.office": "Офис и документы",
  "smart.category.PDF": "PDF",
  "smart.category.api-tools": "Инструменты API",
  "smart.category.database-tools": "Базы данных",
src/Apptag/Localization/sr-Cyrl.json
@@ -105,16 +105,16 @@
  "smart.category.productivity": "Продуктивност",
  "smart.category.file-management": "Управљање датотекама",
  "smart.category.transfer": "Отпремања и преузимања",
  "smart.category.development": "Развој",
  "smart.category.development": "Програмирање",
  "smart.category.design": "Дизајн",
  "smart.category.writing": "Писање",
  "smart.category.media": "Медији",
  "smart.category.video": "Видео",
  "smart.category.audio": "Аудио",
  "smart.category.picture-photo": "Слике и фотографије",
  "smart.category.picture-photo": "Фотографије",
  "smart.category.utilities": "Алатке",
  "smart.category.system": "Системске апликације",
  "smart.category.system-enhancement": "Побољшања система",
  "smart.category.system-enhancement": "Системски алати",
  "smart.category.entertainment": "Забава",
  "smart.category.game": "Игре",
  "smart.category.finance": "Финансије",
@@ -190,7 +190,7 @@
  "smart.category.GTD": "Задаци и GTD",
  "smart.category.Notes": "Белешке",
  "smart.category.Meeting": "Састанци",
  "smart.category.office": "Канцеларија",
  "smart.category.office": "Канцеларија и документи",
  "smart.category.PDF": "PDF",
  "smart.category.api-tools": "API алатке",
  "smart.category.database-tools": "Базе података",
src/Apptag/Localization/sv.json
@@ -105,16 +105,16 @@
  "smart.category.productivity": "Produktivitet",
  "smart.category.file-management": "Filhantering",
  "smart.category.transfer": "Uppladdningar och nedladdningar",
  "smart.category.development": "Utveckling",
  "smart.category.development": "Kodning",
  "smart.category.design": "Formgivning",
  "smart.category.writing": "Skrivande",
  "smart.category.media": "Medier",
  "smart.category.video": "Videor",
  "smart.category.audio": "Ljud",
  "smart.category.picture-photo": "Bilder och foton",
  "smart.category.picture-photo": "Foton",
  "smart.category.utilities": "Verktyg",
  "smart.category.system": "Systemappar",
  "smart.category.system-enhancement": "Systemförbättringar",
  "smart.category.system-enhancement": "Systemverktyg",
  "smart.category.entertainment": "Underhållning",
  "smart.category.game": "Spel",
  "smart.category.finance": "Ekonomi",
@@ -190,7 +190,7 @@
  "smart.category.GTD": "Uppgifter och GTD",
  "smart.category.Notes": "Anteckningar",
  "smart.category.Meeting": "Möten",
  "smart.category.office": "Kontor",
  "smart.category.office": "Kontor och dokument",
  "smart.category.PDF": "PDF",
  "smart.category.api-tools": "API-verktyg",
  "smart.category.database-tools": "Databaser",
src/Apptag/Localization/th.json
@@ -105,16 +105,16 @@
  "smart.category.productivity": "ประสิทธิภาพงาน",
  "smart.category.file-management": "จัดการไฟล์",
  "smart.category.transfer": "อัปโหลดและดาวน์โหลด",
  "smart.category.development": "การพัฒนา",
  "smart.category.development": "การเขียนโค้ด",
  "smart.category.design": "การออกแบบ",
  "smart.category.writing": "การเขียน",
  "smart.category.media": "สื่อ",
  "smart.category.video": "วิดีโอ",
  "smart.category.audio": "เสียง",
  "smart.category.picture-photo": "รูปภาพและภาพถ่าย",
  "smart.category.picture-photo": "รูปภาพ",
  "smart.category.utilities": "ยูทิลิตี้",
  "smart.category.system": "แอประบบ",
  "smart.category.system-enhancement": "ปรับปรุงระบบ",
  "smart.category.system-enhancement": "เครื่องมือระบบ",
  "smart.category.entertainment": "ความบันเทิง",
  "smart.category.game": "เกม",
  "smart.category.finance": "การเงิน",
@@ -190,7 +190,7 @@
  "smart.category.GTD": "งานและ GTD",
  "smart.category.Notes": "โน้ต",
  "smart.category.Meeting": "การประชุม",
  "smart.category.office": "สำนักงาน",
  "smart.category.office": "สำนักงานและเอกสาร",
  "smart.category.PDF": "PDF",
  "smart.category.api-tools": "เครื่องมือ API",
  "smart.category.database-tools": "ฐานข้อมูล",
src/Apptag/Localization/tr.json
@@ -105,16 +105,16 @@
  "smart.category.productivity": "Verimlilik",
  "smart.category.file-management": "Dosya yönetimi",
  "smart.category.transfer": "Yüklemeler ve indirmeler",
  "smart.category.development": "Geliştirme",
  "smart.category.development": "Kodlama",
  "smart.category.design": "Tasarım",
  "smart.category.writing": "Yazma",
  "smart.category.media": "Medya",
  "smart.category.video": "Videolar",
  "smart.category.audio": "Ses",
  "smart.category.picture-photo": "Resimler ve fotoğraflar",
  "smart.category.picture-photo": "Fotoğraflar",
  "smart.category.utilities": "Yardımcı araçlar",
  "smart.category.system": "Sistem uygulamaları",
  "smart.category.system-enhancement": "Sistem iyileştirmeleri",
  "smart.category.system-enhancement": "Sistem araçları",
  "smart.category.entertainment": "Eğlence",
  "smart.category.game": "Oyunlar",
  "smart.category.finance": "Finans",
@@ -190,7 +190,7 @@
  "smart.category.GTD": "Görevler ve GTD",
  "smart.category.Notes": "Notlar",
  "smart.category.Meeting": "Toplantılar",
  "smart.category.office": "Ofis",
  "smart.category.office": "Ofis ve belgeler",
  "smart.category.PDF": "PDF",
  "smart.category.api-tools": "API araçları",
  "smart.category.database-tools": "Veritabanları",
src/Apptag/Localization/uk.json
@@ -105,16 +105,16 @@
  "smart.category.productivity": "Продуктивність",
  "smart.category.file-management": "Керування файлами",
  "smart.category.transfer": "Вивантаження і завантаження",
  "smart.category.development": "Розробка",
  "smart.category.development": "Програмування",
  "smart.category.design": "Дизайн",
  "smart.category.writing": "Письмо",
  "smart.category.media": "Медіа",
  "smart.category.video": "Відео",
  "smart.category.audio": "Аудіо",
  "smart.category.picture-photo": "Зображення і фото",
  "smart.category.picture-photo": "Фото",
  "smart.category.utilities": "Утиліти",
  "smart.category.system": "Системні програми",
  "smart.category.system-enhancement": "Покращення системи",
  "smart.category.system-enhancement": "Системні інструменти",
  "smart.category.entertainment": "Розваги",
  "smart.category.game": "Ігри",
  "smart.category.finance": "Фінанси",
@@ -190,7 +190,7 @@
  "smart.category.GTD": "Завдання і GTD",
  "smart.category.Notes": "Нотатки",
  "smart.category.Meeting": "Зустрічі",
  "smart.category.office": "Офіс",
  "smart.category.office": "Офіс і документи",
  "smart.category.PDF": "PDF",
  "smart.category.api-tools": "Інструменти API",
  "smart.category.database-tools": "Бази даних",
src/Apptag/Localization/vi.json
@@ -105,16 +105,16 @@
  "smart.category.productivity": "Năng suất",
  "smart.category.file-management": "Quản lý tệp",
  "smart.category.transfer": "Tải lên và tải xuống",
  "smart.category.development": "Phát triển",
  "smart.category.development": "Lập trình",
  "smart.category.design": "Thiết kế",
  "smart.category.writing": "Viết",
  "smart.category.media": "Phương tiện",
  "smart.category.video": "Video clip",
  "smart.category.audio": "Âm thanh",
  "smart.category.picture-photo": "Ảnh và hình ảnh",
  "smart.category.picture-photo": "Ảnh",
  "smart.category.utilities": "Tiện ích",
  "smart.category.system": "Ứng dụng hệ thống",
  "smart.category.system-enhancement": "Cải tiến hệ thống",
  "smart.category.system-enhancement": "Công cụ hệ thống",
  "smart.category.entertainment": "Giải trí",
  "smart.category.game": "Trò chơi",
  "smart.category.finance": "Tài chính",
@@ -190,7 +190,7 @@
  "smart.category.GTD": "Công việc và GTD",
  "smart.category.Notes": "Ghi chú",
  "smart.category.Meeting": "Cuộc họp",
  "smart.category.office": "Văn phòng",
  "smart.category.office": "Văn phòng & tài liệu",
  "smart.category.PDF": "PDF",
  "smart.category.api-tools": "Công cụ API",
  "smart.category.database-tools": "Cơ sở dữ liệu",
src/Apptag/Localization/zh-Hans.json
@@ -111,10 +111,10 @@
  "smart.category.media": "媒体",
  "smart.category.video": "视频",
  "smart.category.audio": "音频",
  "smart.category.picture-photo": "图片与照片",
  "smart.category.picture-photo": "图片",
  "smart.category.utilities": "工具",
  "smart.category.system": "系统应用",
  "smart.category.system-enhancement": "系统能力强化",
  "smart.category.system-enhancement": "系统工具",
  "smart.category.entertainment": "影音娱乐",
  "smart.category.game": "游戏",
  "smart.category.finance": "财务",
@@ -190,7 +190,7 @@
  "smart.category.GTD": "任务与 GTD",
  "smart.category.Notes": "笔记",
  "smart.category.Meeting": "会议",
  "smart.category.office": "办公",
  "smart.category.office": "办公文档",
  "smart.category.PDF": "PDF",
  "smart.category.api-tools": "API 工具",
  "smart.category.database-tools": "数据库",
src/Apptag/Localization/zh-Hant.json
@@ -105,16 +105,16 @@
  "smart.category.productivity": "辦公",
  "smart.category.file-management": "檔案管理",
  "smart.category.transfer": "上傳與下載",
  "smart.category.development": "程式開發",
  "smart.category.development": "程式編寫",
  "smart.category.design": "設計",
  "smart.category.writing": "寫作",
  "smart.category.media": "媒體",
  "smart.category.video": "影片",
  "smart.category.audio": "音訊",
  "smart.category.picture-photo": "圖片與照片",
  "smart.category.picture-photo": "圖片",
  "smart.category.utilities": "工具",
  "smart.category.system": "系統應用",
  "smart.category.system-enhancement": "系統能力強化",
  "smart.category.system-enhancement": "系統工具",
  "smart.category.entertainment": "影音娛樂",
  "smart.category.game": "遊戲",
  "smart.category.finance": "財務",
@@ -190,7 +190,7 @@
  "smart.category.GTD": "任務與 GTD",
  "smart.category.Notes": "筆記",
  "smart.category.Meeting": "會議",
  "smart.category.office": "辦公",
  "smart.category.office": "辦公文件",
  "smart.category.PDF": "PDF",
  "smart.category.api-tools": "API 工具",
  "smart.category.database-tools": "資料庫",
src/Apptag/SmartCategorization/SmartCategory.swift
@@ -66,7 +66,7 @@
        case .meeting:
            return "Meetings"
        case .office:
            return "Office"
            return "Office & Docs"
        case .pdf:
            return "PDF"
        case .fileManagement:
@@ -76,7 +76,7 @@
        case .productivity:
            return "Productivity"
        case .development:
            return "Development"
            return "Coding"
        case .design:
            return "Design"
        case .aiTools:
@@ -110,13 +110,13 @@
        case .audio:
            return "Audio"
        case .picturePhoto:
            return "Pictures & Photos"
            return "Photos"
        case .utilities:
            return "Utilities"
        case .system:
            return "System Apps"
        case .systemEnhancement:
            return "System Enhancements"
            return "System Tools"
        case .systemMaintenance:
            return "System Maintenance"
        case .windowManagement:
@@ -248,6 +248,24 @@
            return 0
        }
    }
    var smartStartDefaultCategoryID: SmartCategoryID {
        switch self {
        case .pdf, .productivity, .writing:
            return .office
        case .fileManagement, .transfer, .utilities, .system, .systemMaintenance,
             .windowManagement, .deviceManagement, .inputTools, .networkTools, .security:
            return .systemEnhancement
        case .apiTools, .databaseTools, .devops, .ide, .runtimeSDK, .terminalTools, .automation:
            return .development
        case .font, .uiPrototyping, .threeDCAD, .diagramming:
            return .design
        case .media, .video, .audio, .game:
            return .entertainment
        default:
            return self
        }
    }
}
struct SmartCategoryDefinition: Codable, Hashable, Identifiable {
@@ -277,38 +295,14 @@
        .notes,
        .meeting,
        .office,
        .pdf,
        .fileManagement,
        .transfer,
        .systemEnhancement,
        .aiTools,
        .apiTools,
        .databaseTools,
        .devops,
        .ide,
        .runtimeSDK,
        .terminalTools,
        .font,
        .uiPrototyping,
        .threeDCAD,
        .diagramming,
        .writing,
        .media,
        .video,
        .audio,
        .development,
        .design,
        .picturePhoto,
        .utilities,
        .system,
        .systemMaintenance,
        .windowManagement,
        .deviceManagement,
        .inputTools,
        .automation,
        .networkTools,
        .entertainment,
        .game,
        .finance,
        .education,
        .security,
        .other
    ]
src/Apptag/SmartCategorization/SmartStartService.swift
@@ -529,6 +529,7 @@
            let tagIDs = entry.defaultTag
                .compactMap { SmartCategoryID(rawValue: $0) }
                .filter { $0 != .other }
                .map(\.smartStartDefaultCategoryID)
            guard !tagIDs.isEmpty else { return nil }
            return SmartStartCatalogEntry(
src/CHANGELOG.md
@@ -2,6 +2,14 @@
## [Unreleased]
## [8.1.3] — 2026-06-27
- 精简 SmartStart 智能初始化默认分类:新用户 / 重置智能初始化方案后的默认标签从 39 个收敛为 15 个,降低初次使用时的分类冗余
- 合并细分分类:`Office / PDF / Writing` 归入 `Office & Docs`,系统工具相关分类归入 `System Tools`,开发相关分类归入 `Coding`,设计相关分类归入 `Design`,`Video / Audio / Games` 归入 `Entertainment`
- SmartStart 第三方应用 catalog 和 Apple 自带应用 catalog 在写入前统一归并到 15 个默认标签;已有用户的旧标签保持原样,本轮不做老用户旧 39 标签自动迁移
- 更新 29 个语种中 15 默认分类的关键目标文案,并新增 `Scripts/smartstart_default_categories_qa.sh`,防止默认分类数量、归并入口和首次 starter tags 回退
- 版本号更新为 `8.1.3`,Build 更新为 `20260627.1605`
## [8.1.2] — 2026-06-27
- 优化样式 2 / 样式 3 的底部特殊容器排版:`未分类`和`Mac 自带`都固定在瀑布流底部并横向占满,`未分类`倒数第二、`Mac 自带`最后显示
src/Docs/Requirements/2026-06-27-smartstart-category-simplification.md
New file
@@ -0,0 +1,259 @@
# SmartStart 智能初始化默认标签精简方案
日期:2026-06-27
状态:产品已确认 `network-tools` 归入 `System Tools / 系统工具`;确认 `system-tools` 的用户可见名称采用 `System Tools / 系统工具`;确认 `office`、`PDF`、`writing` 合并为 `Office & Docs / 办公文档`;确认 `Video / Audio / Games` 合并进 `Entertainment / 影音娱乐`,最终默认智能分类为 15 个。
## 1. 本轮目标
用户反馈当前智能初始化使用 39 个默认标签,过于冗余。本方案把默认标签精简为 15 个,并明确合并关系、最终标签列表与后续落地注意事项。
## 2. 当前 39 个初始化标签
来源:`src/Apptag/SmartCategorization/SmartCategory.swift` 中 `SmartCategoryDefaults.orderedIDs`。
| 序号 | category id | 英文默认名 | 简体中文 |
|---:|---|---|---|
| 1 | `browser` | Browsers | 浏览器 |
| 2 | `communication` | Communication | 沟通 |
| 3 | `GTD` | Tasks & GTD | 任务与 GTD |
| 4 | `Notes` | Notes | 笔记 |
| 5 | `Meeting` | Meetings | 会议 |
| 6 | `office` | Office | 办公 |
| 7 | `PDF` | PDF | PDF |
| 8 | `file-management` | File Management | 文件管理 |
| 9 | `transfer` | Uploads & Downloads | 上传与下载 |
| 10 | `ai-tools` | AI Tools | AI 工具 |
| 11 | `api-tools` | API Tools | API 工具 |
| 12 | `database-tools` | Databases | 数据库 |
| 13 | `devops` | DevOps | DevOps |
| 14 | `ide` | IDEs | IDE |
| 15 | `runtime-sdk` | Runtimes & SDKs | 运行时与 SDK |
| 16 | `terminal-tools` | Terminal Tools | 终端工具 |
| 17 | `Font` | Fonts | 字体 |
| 18 | `ui-prototyping` | UI Prototyping | UI 原型 |
| 19 | `3d-cad` | 3D & CAD | 3D 与 CAD |
| 20 | `diagramming` | Diagramming | 图表绘制 |
| 21 | `writing` | Writing | 写作 |
| 22 | `media` | Media | 媒体 |
| 23 | `video` | Video | 视频 |
| 24 | `audio` | Audio | 音频 |
| 25 | `picture-photo` | Pictures & Photos | 图片与照片 |
| 26 | `utilities` | Utilities | 工具 |
| 27 | `system` | System Apps | 系统应用 |
| 28 | `system-maintenance` | System Maintenance | 系统维护 |
| 29 | `window-management` | Window Management | 窗口管理 |
| 30 | `device-management` | Device Management | 设备管理 |
| 31 | `input-tools` | Input Tools | 输入工具 |
| 32 | `Automation` | Automation | 自动化 |
| 33 | `network-tools` | Network Tools | 网络工具 |
| 34 | `entertainment` | Entertainment | 影音娱乐 |
| 35 | `game` | Games | 游戏 |
| 36 | `finance` | Finance | 财务 |
| 37 | `education` | Education | 学习 |
| 38 | `security` | Security | 安全 |
| 39 | `other` | Other | 其他 |
## 3. 已确认的合并规则
### 改动 1:合并为 Coding / 编程
11、12、13、14、15、16、32 合并成 `Coding / 编程`。
涉及:
- API 工具
- 数据库
- DevOps
- IDE
- 运行时与 SDK
- 终端工具
- 自动化
说明:第 33 项 `network-tools / 网络工具` 不归入 Coding,已确认归入 System Tools。
### 改动 2:合并为 Design / 设计
17、18、19、20 合并成 `Design / 设计`。
涉及:
- 字体
- UI 原型
- 3D 与 CAD
- 图表绘制
### 改动 3:合并为 System Tools / 系统工具
8、9、28、29、30、31、33、38 合并成 `System Tools / 系统工具`。
涉及:
- 文件管理
- 上传与下载
- 系统维护
- 窗口管理
- 设备管理
- 输入工具
- 网络工具
- 安全
确认理由:
- 网络工具在普通用户心智里更接近系统能力、连接、代理、网络诊断,而不是纯编程。
- coding 已经覆盖 API、数据库、DevOps、IDE、SDK、终端、自动化,范围足够大。
- 把网络工具归入 system-tools,可以避免 coding 继续膨胀成“所有技术工具”的大杂烩。
### 改动 4:合并为 Office & Docs / 办公文档
6、7、21 合并成 `Office & Docs / 办公文档`。
涉及:
- 办公
- PDF
- 写作
确认理由:
- 这三类都属于文档生产、文档阅读、文档处理。
- 合并后能减少普通用户在“办公 / PDF / 写作”之间选择的成本。
- `Office & Docs / 办公文档`比单独的 `Office / 办公`覆盖范围更准确,也比 `Docs & Writing / 文档写作`更贴近用户已确认的命名方向。
### 改动 5:合并为 Entertainment / 影音娱乐
11、12、15(基于 18 标签方案中的 `Video`、`Audio`、`Games`)合并进 `Entertainment / 影音娱乐`。
涉及原始 39 标签中的:
- 媒体
- 视频
- 音频
- 影音娱乐
- 游戏
确认理由:
- 这些标签面向普通用户时都属于休闲、影音、游戏和娱乐心智。
- 合并后能进一步降低默认标签数量,避免新用户第一屏出现过多细分分类。
- `Entertainment / 影音娱乐`作为总标签更适合默认初始化;如果用户需要细分,可后续手动拆分。
## 4. 命名确认
### System Tools
- 英文:`System Tools`
- 简体中文:`系统工具`
实现建议:
- 代码里优先复用既有 `SmartCategoryID.systemEnhancement`,避免新增 category id。
- 只把用户可见文案改为 `System Tools / 系统工具`。
- 不使用 `系统能力强化`作为最终展示文案,因为它偏长、偏抽象,且在标签栏和容器标题里不够利落。
### Office & Docs
- 英文:`Office & Docs`
- 简体中文:`办公文档`
实现建议:
- 可优先复用既有 `SmartCategoryID.office` 作为合并目标,减少新增 category id。
- 将 `office` 的用户可见文案从 `Office / 办公`调整为 `Office & Docs / 办公文档`。
- `PDF` 和 `writing` 不再作为默认初始化标签出现,但仍可作为内部识别来源映射到 `office`。
## 5. 合并后的最终标签数量
当前:39 个默认标签。
合并后:15 个默认标签。
减少:24 个标签。
## 6. 最终 15 个默认标签列表
以下列表按“尽量保留原始顺序 + 合并项放在首次出现位置”的原则排列。
| 新序号 | category id | 英文显示名 | 简体中文显示名 | 来源 |
|---:|---|---|---|---|
| 1 | `browser` | Browsers | 浏览器 | 原 1 |
| 2 | `communication` | Communication | 沟通 | 原 2 |
| 3 | `GTD` | Tasks & GTD | 任务与 GTD | 原 3 |
| 4 | `Notes` | Notes | 笔记 | 原 4 |
| 5 | `Meeting` | Meetings | 会议 | 原 5 |
| 6 | `office` | Office & Docs | 办公文档 | 原 6、7、21 |
| 7 | `system-enhancement` | System Tools | 系统工具 | 原 8、9、26、27、28、29、30、31、33、38 |
| 8 | `ai-tools` | AI Tools | AI 工具 | 原 10 |
| 9 | `development` | Coding | 编程 | 原 11、12、13、14、15、16、32 |
| 10 | `design` | Design | 设计 | 原 17、18、19、20 |
| 11 | `picture-photo` | Photos | 图片 | 原 25 |
| 12 | `entertainment` | Entertainment | 影音娱乐 | 原 22、23、24、34、35 |
| 13 | `finance` | Finance | 财务 | 原 36 |
| 14 | `education` | Education | 学习 | 原 37 |
| 15 | `other` | Other | 其他 | 原 39 |
## 7. 完整合并映射表
| 原序号 | 原 category id | 原简体中文 | 新 category id | 新显示名 |
|---:|---|---|---|---|
| 1 | `browser` | 浏览器 | `browser` | 浏览器 |
| 2 | `communication` | 沟通 | `communication` | 沟通 |
| 3 | `GTD` | 任务与 GTD | `GTD` | 任务与 GTD |
| 4 | `Notes` | 笔记 | `Notes` | 笔记 |
| 5 | `Meeting` | 会议 | `Meeting` | 会议 |
| 6 | `office` | 办公 | `office` | 办公文档 |
| 7 | `PDF` | PDF | `office` | 办公文档 |
| 8 | `file-management` | 文件管理 | `system-enhancement` | 系统工具 |
| 9 | `transfer` | 上传与下载 | `system-enhancement` | 系统工具 |
| 10 | `ai-tools` | AI 工具 | `ai-tools` | AI 工具 |
| 11 | `api-tools` | API 工具 | `development` | 编程 |
| 12 | `database-tools` | 数据库 | `development` | 编程 |
| 13 | `devops` | DevOps | `development` | 编程 |
| 14 | `ide` | IDE | `development` | 编程 |
| 15 | `runtime-sdk` | 运行时与 SDK | `development` | 编程 |
| 16 | `terminal-tools` | 终端工具 | `development` | 编程 |
| 17 | `Font` | 字体 | `design` | 设计 |
| 18 | `ui-prototyping` | UI 原型 | `design` | 设计 |
| 19 | `3d-cad` | 3D 与 CAD | `design` | 设计 |
| 20 | `diagramming` | 图表绘制 | `design` | 设计 |
| 21 | `writing` | 写作 | `office` | 办公文档 |
| 22 | `media` | 媒体 | `entertainment` | 影音娱乐 |
| 23 | `video` | 视频 | `entertainment` | 影音娱乐 |
| 24 | `audio` | 音频 | `entertainment` | 影音娱乐 |
| 25 | `picture-photo` | 图片与照片 | `picture-photo` | 图片 |
| 26 | `utilities` | 工具 | `system-enhancement` | 系统工具 |
| 27 | `system` | 系统应用 | `system-enhancement` | 系统工具 |
| 28 | `system-maintenance` | 系统维护 | `system-enhancement` | 系统工具 |
| 29 | `window-management` | 窗口管理 | `system-enhancement` | 系统工具 |
| 30 | `device-management` | 设备管理 | `system-enhancement` | 系统工具 |
| 31 | `input-tools` | 输入工具 | `system-enhancement` | 系统工具 |
| 32 | `Automation` | 自动化 | `development` | 编程 |
| 33 | `network-tools` | 网络工具 | `system-enhancement` | 系统工具 |
| 34 | `entertainment` | 影音娱乐 | `entertainment` | 影音娱乐 |
| 35 | `game` | 游戏 | `entertainment` | 影音娱乐 |
| 36 | `finance` | 财务 | `finance` | 财务 |
| 37 | `education` | 学习 | `education` | 学习 |
| 38 | `security` | 安全 | `system-enhancement` | 系统工具 |
| 39 | `other` | 其他 | `other` | 其他 |
## 8. 后续落地建议
如果产品确认这版列表,建议后续实现按低风险路径做:
1. 调整 `SmartCategoryDefaults.orderedIDs`,把 39 个默认标签压缩为 15 个。
2. 复用既有 `SmartCategoryID.office`、`SmartCategoryID.development`、`SmartCategoryID.design`、`SmartCategoryID.systemEnhancement` 作为合并目标。
3. 建立旧 category id 到新 category id 的映射表,SmartStart 匹配结果统一归并后再写入标签。
4. 29 个语言包中将 `system-enhancement` 的用户可见文案改为 `System Tools / 系统工具`对应语义,将 `office` 改为 `Office & Docs / 办公文档`对应语义,将 `picture-photo` 简化为 `Photos / 图片`对应语义。
5. QA 覆盖:
   - 新用户智能初始化最终标签数是 15。
   - 合并来源 app 进入正确目标标签。
   - 第 33 项 `network-tools`归入 `system-enhancement`,不重复创建标签。
   - `office`、`PDF`、`writing`都归入 `Office & Docs / 办公文档`。
   - 新默认智能分类结果中 29 语种没有旧细分标签残留、没有英文兜底污染。
   - 老用户已有标签保持原样;本轮不做旧 39 标签自动迁移。
## 9. 产品边界确认
1. 本轮只影响新用户 / 重置分类方案后的智能初始化。
2. 不做老用户旧 39 标签自动迁移;已有用户标签保持原样,避免为极少量历史用户增加冗余迁移代码。
src/Scripts/smartstart_default_categories_qa.sh
New file
@@ -0,0 +1,211 @@
#!/usr/bin/env bash
set -euo pipefail
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
SMART_CATEGORY_SWIFT="$ROOT_DIR/Apptag/SmartCategorization/SmartCategory.swift"
SMARTSTART_SWIFT="$ROOT_DIR/Apptag/SmartCategorization/SmartStartService.swift"
APPLE_CATALOG_SWIFT="$ROOT_DIR/Apptag/AppleDefaultAppCatalog.swift"
DATA_LAYER_SWIFT="$ROOT_DIR/Apptag/DataLayer.swift"
LOCALIZATION_DIR="$ROOT_DIR/Apptag/Localization"
SMARTSTART_BASE="$ROOT_DIR/Research/SmartStart/UltimateDefaultCatalog/SmartStart_UltimateDefaultCatalog.base.json"
APPLE_BASE="$ROOT_DIR/Research/AppleDefaultApps/AppleDefaultApps.base.json"
fail() {
  printf 'FAIL: %s\n' "$*" >&2
  exit 1
}
[[ -f "$SMART_CATEGORY_SWIFT" ]] || fail "missing SmartCategory.swift"
[[ -f "$SMARTSTART_SWIFT" ]] || fail "missing SmartStartService.swift"
[[ -f "$APPLE_CATALOG_SWIFT" ]] || fail "missing AppleDefaultAppCatalog.swift"
[[ -f "$DATA_LAYER_SWIFT" ]] || fail "missing DataLayer.swift"
[[ -d "$LOCALIZATION_DIR" ]] || fail "missing Localization directory"
[[ -f "$SMARTSTART_BASE" ]] || fail "missing SmartStart base catalog"
[[ -f "$APPLE_BASE" ]] || fail "missing Apple default base catalog"
python3 - "$ROOT_DIR" <<'PY'
import json
import pathlib
import re
import sys
root = pathlib.Path(sys.argv[1])
smart_category = root / "Apptag" / "SmartCategorization" / "SmartCategory.swift"
smartstart = root / "Apptag" / "SmartCategorization" / "SmartStartService.swift"
apple_catalog = root / "Apptag" / "AppleDefaultAppCatalog.swift"
data_layer = root / "Apptag" / "DataLayer.swift"
localization_dir = root / "Apptag" / "Localization"
smartstart_base = root / "Research" / "SmartStart" / "UltimateDefaultCatalog" / "SmartStart_UltimateDefaultCatalog.base.json"
apple_base = root / "Research" / "AppleDefaultApps" / "AppleDefaultApps.base.json"
EXPECTED_ORDERED_CASES = [
    "browser",
    "communication",
    "gtd",
    "notes",
    "meeting",
    "office",
    "systemEnhancement",
    "aiTools",
    "development",
    "design",
    "picturePhoto",
    "entertainment",
    "finance",
    "education",
    "other",
]
EXPECTED_RAW_IDS = {
    "browser",
    "communication",
    "GTD",
    "Notes",
    "Meeting",
    "office",
    "system-enhancement",
    "ai-tools",
    "development",
    "design",
    "picture-photo",
    "entertainment",
    "finance",
    "education",
    "other",
}
MERGE_MAP = {
    "PDF": "office",
    "productivity": "office",
    "writing": "office",
    "file-management": "system-enhancement",
    "transfer": "system-enhancement",
    "utilities": "system-enhancement",
    "system": "system-enhancement",
    "system-maintenance": "system-enhancement",
    "window-management": "system-enhancement",
    "device-management": "system-enhancement",
    "input-tools": "system-enhancement",
    "network-tools": "system-enhancement",
    "security": "system-enhancement",
    "api-tools": "development",
    "database-tools": "development",
    "devops": "development",
    "ide": "development",
    "runtime-sdk": "development",
    "terminal-tools": "development",
    "Automation": "development",
    "Font": "design",
    "ui-prototyping": "design",
    "3d-cad": "design",
    "diagramming": "design",
    "media": "entertainment",
    "video": "entertainment",
    "audio": "entertainment",
    "game": "entertainment",
}
TARGET_LABELS = {
    "en": {
        "smart.category.office": "Office & Docs",
        "smart.category.development": "Coding",
        "smart.category.system-enhancement": "System Tools",
        "smart.category.picture-photo": "Photos",
    },
    "zh-Hans": {
        "smart.category.office": "办公文档",
        "smart.category.development": "编程",
        "smart.category.system-enhancement": "系统工具",
        "smart.category.picture-photo": "图片",
    },
    "zh-Hant": {
        "smart.category.office": "辦公文件",
        "smart.category.development": "程式編寫",
        "smart.category.system-enhancement": "系統工具",
        "smart.category.picture-photo": "圖片",
    },
}
def fail(message: str) -> None:
    print(f"FAIL: {message}", file=sys.stderr)
    sys.exit(1)
def load_json(path: pathlib.Path):
    try:
        return json.loads(path.read_text(encoding="utf-8"))
    except Exception as error:
        fail(f"{path} is not valid JSON: {error}")
swift = smart_category.read_text(encoding="utf-8")
order_match = re.search(
    r"static\s+let\s+orderedIDs\s*:\s*\[SmartCategoryID\]\s*=\s*\[(.*?)\n\s*\]",
    swift,
    re.S,
)
if not order_match:
    fail("could not find SmartCategoryDefaults.orderedIDs")
ordered_cases = re.findall(r"\.([A-Za-z0-9_]+)", order_match.group(1))
if ordered_cases != EXPECTED_ORDERED_CASES:
    fail(f"SmartCategoryDefaults.orderedIDs mismatch: {ordered_cases}")
required_mapping_snippets = [
    "case .pdf, .productivity, .writing:",
    "return .office",
    "case .fileManagement, .transfer, .utilities, .system, .systemMaintenance,",
    "case .apiTools, .databaseTools, .devops, .ide, .runtimeSDK, .terminalTools, .automation:",
    "case .font, .uiPrototyping, .threeDCAD, .diagramming:",
    "case .media, .video, .audio, .game:",
    "return .entertainment",
]
missing_snippets = [snippet for snippet in required_mapping_snippets if snippet not in swift]
if missing_snippets:
    fail("SmartStart merge mapping is missing snippets: " + " | ".join(missing_snippets))
for path in [smartstart, apple_catalog]:
    text = path.read_text(encoding="utf-8")
    if ".map(\\.smartStartDefaultCategoryID)" not in text:
        fail(f"{path.name} must normalize catalog category IDs through smartStartDefaultCategoryID")
starter_match = re.search(
    r"let\s+starterCategoryIDs\s*:\s*\[SmartCategoryID\]\s*=\s*\[(.*?)\n\s*\]",
    data_layer.read_text(encoding="utf-8"),
    re.S,
)
if not starter_match:
    fail("could not find starterCategoryIDs")
starter_cases = re.findall(r"\.([A-Za-z0-9_]+)", starter_match.group(1))
legacy_starter_cases = set(starter_cases) - set(EXPECTED_ORDERED_CASES)
if legacy_starter_cases:
    fail("starterCategoryIDs contains non-default categories: " + ", ".join(sorted(legacy_starter_cases)))
def normalize(raw: str) -> str:
    return MERGE_MAP.get(raw, raw)
for catalog_path in [smartstart_base, apple_base]:
    catalog = load_json(catalog_path)
    unexpected = {}
    for entry in catalog.get("entries", []):
        for raw in entry.get("defaultTag", []):
            if raw == "other":
                continue
            normalized = normalize(raw)
            if normalized not in EXPECTED_RAW_IDS:
                unexpected.setdefault(raw, normalized)
    if unexpected:
        fail(f"{catalog_path.name} normalizes to non-default categories: {unexpected}")
for language_code, expected in TARGET_LABELS.items():
    data = load_json(localization_dir / f"{language_code}.json")
    for key, value in expected.items():
        if data.get(key) != value:
            fail(f"{language_code}.json {key} is {data.get(key)!r}, expected {value!r}")
print(
    "PASS SmartStart default categories: "
    f"{len(EXPECTED_ORDERED_CASES)} defaults, catalog IDs normalized, "
    "starter tags restricted, target labels checked"
)
PY