# 7.9.0 产品 PRD:容器内 App 手动排序 ## 1. 背景 TagLauncher 当前支持按标签/容器展示 App,也支持拖动 App 改变标签归属。但在同一个容器内,App 的显示顺序主要来自扫描后的默认名称排序,用户无法把高频 App 固定到自己习惯的位置。 对重度用户来说,容器不仅是分类,也是工作流入口。用户希望像整理桌面图标一样,在每个容器中把 App 摆成自己的顺序,并且这个顺序能随“分类与布局”一起保存、导入、恢复。 ## 2. 目标 - 用户可以在同一个容器/分组内拖动 App,改变该容器内显示顺序。 - 自定义顺序在刷新、重启、语言切换、导入导出、恢复上一方案、SmartStart 回滚后保持一致。 - 不破坏现有跨容器拖动改标签、Option 复制、拖到空白移除标签、Apple 内置组保护等既有行为。 - 将该需求作为 `7.9.0` 大版本需求管理。 ## 3. 用户价值 - 高频 App 可以放到容器最前面,减少寻找成本。 - 每个标签/容器可以形成独立工作流顺序。 - 多标签 App 在不同容器里可以有不同位置,符合不同使用语境。 - 导出“分类与布局”时真正包含布局顺序,便于迁移和恢复。 ## 4. 适用用户 - 安装 App 数量较多、依赖 TagLauncher 做日常启动入口的用户。 - 已经维护多个标签/容器,并希望在容器内进一步精细整理的用户。 - 需要在多台 Mac 或重装后恢复分类与布局的用户。 ## 5. 范围 ### 5.1 版本 7.9.0 必做 - 同一容器内拖动 App 改变顺序。 - 每个容器独立保存顺序。 - 多标签 App 在不同容器中的顺序互不影响。 - 新 App 或未记录 App 在自定义顺序之后按默认规则显示。 - 删除/卸载 App 后不显示空位、不崩溃。 - 顺序纳入分类与布局数据,可导出、导入、恢复。 - 旧用户数据无顺序字段时保持原有默认排序。 ### 5.2 版本 7.9.0 不做 - 不做跨容器插入位置排序。 - 不改变跨容器拖动的标签归属语义。 - 不改变 Quick Search 结果排序。 - 不提供“按名称重新排序”“重置单个容器顺序”等高级管理入口。 - 不做跨机器 bundle id/name fallback 的完整稳定匹配;第一版以 path 为 App 顺序身份。 ## 6. 核心交互 ### 6.1 同容器排序 用户在 App Grid 普通展示态中,长按并拖动某个 App 到同一容器中的另一个位置。 期望: - 拖动过程中显示清晰的插入位置提示。 - 松手后该 App 移动到目标位置。 - 不改变该 App 的标签归属。 - 不触发 App 启动。 ### 6.2 跨容器拖动 用户把 App 拖到其他容器/标签。 期望: - 沿用现有移动/复制标签逻辑。 - 按住 Option 时继续执行复制标签语义。 - 不把跨容器拖动解释为排序。 ### 6.3 拖到空白区域 用户把 App 拖到容器外空白区域。 期望: - 继续沿用现有移除来源标签或归为未分类确认逻辑。 - 不因为新增排序功能改变提醒、确认或“不再提醒”逻辑。 ### 6.4 特殊容器 - “未分类”容器:第一版允许读取排序;是否开放拖动排序按实现风险在开发阶段确认。 - “Mac 自带 / Apple 内置”容器:保持现有保护逻辑,不允许通过拖动改变系统标签归属;排序是否开放需单独评估,默认不作为第一优先级。 ## 7. 数据行为 - 自定义顺序属于“分类与布局方案”。 - 导出分类与布局时必须包含顺序。 - 导入分类与布局时必须恢复顺序。 - 恢复上一方案时必须恢复顺序。 - SmartStart 应用新方案前的备份必须包含顺序。 - “重置为未分类”应清理旧容器顺序,避免旧布局在未来意外复活。 ## 8. 兼容性要求 - macOS 14 起可用。 - 旧 `tags.json` 无新增字段时可正常读取。 - 旧版本 App 读取新 JSON 时不应破坏已知字段;新版本 App 重新读取后仍应尽量保留顺序。 - 语言切换不影响顺序,因为顺序 key 不能依赖本地化显示名。 ## 9. 验收标准 - 用户可在同容器内完成拖动排序。 - 排序结果立即显示。 - 关闭并重新打开 App Grid 后顺序保持。 - 重启 App 后顺序保持。 - 切换语言后顺序保持。 - 导出再导入后顺序保持。 - 恢复上一方案后顺序恢复。 - 跨容器拖动、Option 复制、拖到空白、Apple 内置保护保持现有行为。 - 旧数据用户升级后默认顺序不变。 ## 10. 发布要求 - 版本号从 `7.9.0` 开始。 - `CHANGELOG.md` 必须记录数据模型、交互范围和兼容性说明。 - 发布前必须有 QA 报告,覆盖数据层、UI 手工拖拽、macOS 14、导入导出、恢复、SmartStart 回归。 ## 11. 未决问题 - “未分类”容器是否开放拖动排序。 - “Mac 自带 / Apple 内置”容器是否开放仅显示顺序排序。 - 是否需要在后续版本提供“重置当前容器顺序”入口。 - 是否需要在后续版本支持跨机器导入时基于 bundle id/name 匹配顺序。