Simplify SmartStart default categories
36 files modified
2 files added
| | |
| | | |
| | | - `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` |
| | |
| | | - 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` |
| | |
| | | let categoryIDs = entry.defaultTag |
| | | .compactMap { SmartCategoryID(rawValue: $0) } |
| | | .filter { $0 != .other } |
| | | .map(\.smartStartDefaultCategoryID) |
| | | guard !categoryIDs.isEmpty else { return nil } |
| | | return AppleDefaultCategorization( |
| | | canonicalName: entry.canonicalName, |
| | |
| | | guard !FileManager.default.fileExists(atPath: storeURL.path) else { return } |
| | | |
| | | let starterCategoryIDs: [SmartCategoryID] = [ |
| | | .uiPrototyping, |
| | | .ide, |
| | | .writing, |
| | | .game, |
| | | .design, |
| | | .development, |
| | | .office, |
| | | .entertainment, |
| | | .system, |
| | | .systemEnhancement, |
| | | .gtd |
| | | ] |
| | | |
| | |
| | | <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> |
| | |
| | | "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": "المالية", |
| | |
| | | "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": "قواعد البيانات", |
| | |
| | | "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": "المالية", |
| | |
| | | "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": "قواعد البيانات", |
| | |
| | | "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", |
| | |
| | | "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", |
| | |
| | | "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", |
| | |
| | | "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", |
| | |
| | | "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", |
| | |
| | | "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", |
| | |
| | | "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", |
| | |
| | | "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", |
| | |
| | | "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", |
| | |
| | | "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", |
| | |
| | | "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", |
| | |
| | | "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", |
| | |
| | | "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", |
| | |
| | | "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", |
| | |
| | | "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", |
| | |
| | | "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", |
| | |
| | | "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": "ファイナンス", |
| | |
| | | "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": "データベース", |
| | |
| | | "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": "금융", |
| | |
| | | "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": "데이터베이스", |
| | |
| | | "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", |
| | |
| | | "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", |
| | |
| | | "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", |
| | |
| | | "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", |
| | |
| | | "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", |
| | |
| | | "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", |
| | |
| | | "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", |
| | |
| | | "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", |
| | |
| | | "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", |
| | |
| | | "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", |
| | |
| | | "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", |
| | |
| | | "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", |
| | |
| | | "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", |
| | |
| | | "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", |
| | |
| | | "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", |
| | |
| | | "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", |
| | |
| | | "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": "Финансы", |
| | |
| | | "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": "Базы данных", |
| | |
| | | "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": "Финансије", |
| | |
| | | "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": "Базе података", |
| | |
| | | "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", |
| | |
| | | "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", |
| | |
| | | "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": "การเงิน", |
| | |
| | | "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": "ฐานข้อมูล", |
| | |
| | | "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", |
| | |
| | | "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ı", |
| | |
| | | "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": "Фінанси", |
| | |
| | | "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": "Бази даних", |
| | |
| | | "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", |
| | |
| | | "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", |
| | |
| | | "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": "财务", |
| | |
| | | "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": "数据库", |
| | |
| | | "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": "財務", |
| | |
| | | "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": "資料庫", |
| | |
| | | case .meeting: |
| | | return "Meetings" |
| | | case .office: |
| | | return "Office" |
| | | return "Office & Docs" |
| | | case .pdf: |
| | | return "PDF" |
| | | case .fileManagement: |
| | |
| | | case .productivity: |
| | | return "Productivity" |
| | | case .development: |
| | | return "Development" |
| | | return "Coding" |
| | | case .design: |
| | | return "Design" |
| | | case .aiTools: |
| | |
| | | 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: |
| | |
| | | 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 { |
| | |
| | | .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 |
| | | ] |
| | | |
| | |
| | | let tagIDs = entry.defaultTag |
| | | .compactMap { SmartCategoryID(rawValue: $0) } |
| | | .filter { $0 != .other } |
| | | .map(\.smartStartDefaultCategoryID) |
| | | guard !tagIDs.isEmpty else { return nil } |
| | | |
| | | return SmartStartCatalogEntry( |
| | |
| | | |
| | | ## [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 自带`最后显示 |
| New file |
| | |
| | | # 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 标签自动迁移;已有用户标签保持原样,避免为极少量历史用户增加冗余迁移代码。 |
| New file |
| | |
| | | #!/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 |