edit | blame | history | raw

用户目标

  • 阅读 Docs/X-01产品文档/2026-06-25-PRD-免费版与Pro解锁.md
  • 结合当前 src/ 代码,输出“功能门禁与数据安全”的落地方案。
  • 聚焦回答:
  • 免费/Pro 主题、备注、手动排序、导入导出分别在哪个入口拦截。
  • 预览只改显示、不写真实数据时,现有代码里哪些写入点必须绕开。
  • 设置页 Pro 区域和轻量 Pro 弹窗最小改动挂点。
  • Phase 1 / Phase 2 最小实现切片。
  • 本轮只做分析,不改业务文件。

已完成事项

  • 读取并遵守:
  • CODE_GOVERNANCE.md
  • ~/.codex/rules/pre-implementation-discussion.md
  • ~/.codex/rules/code-governance.md
  • CODEGRAPH.md
  • ~/.codex/rules/session-memory.md
  • 检查当前 Git 起点与工作区状态。
  • 只读分析 PRD、PreferencesView.swiftContentView.swiftDataLayer.swiftAppGridCollectionView.swiftAppGridSupport.swiftApptagApp.swiftAppLibraryController.swiftQuickSearch.swift

关键决策

  • 门禁采用“双层策略”:
  • UI 入口先拦截,避免误导。
  • 持久化写入点再补硬门,避免后续调用绕过。
  • 主题预览必须走“瞬时预览态”,不能再直接写 @AppStorage(appGridThemeID)
  • 排序预览必须只改 ContentView 本地态,不调用 TagEditor.reorderApps,并避免立刻 refreshApps(forceLayoutRefresh:) 把预览和真实数据混淆。
  • 设置页 Pro 区域最小挂点放在 PreferencesView 的 Data tab 顶部,复用现有 dataSection 结构;不新增侧边栏 tab。
  • 轻量 Pro 弹窗最小挂点:
  • 设置页挂在 PreferencesViewZStack,与现有 SettingsConfirmationView 同层。
  • 主浮层挂在 ContentView 的 overlay 栈,纳入 publishModalInteractionState()
  • 关键假设:PRD 的“手动排序”只指应用图标排序,不含标签排序。若产品要求连 tag reorder 也收费,需额外门禁 ContentView 的 tag reorder 入口与 TagEditor.reorderTags

涉及代码定位

  • 主题:
  • src/Apptag/PreferencesView.swift 主题点击直接写 appGridThemeID
  • src/Apptag/ContentView.swift 读取 appGridThemeID 并渲染 renderedAppGridTheme
  • 备注:
  • src/Apptag/AppGridCollectionView.swift 右键/菜单进入备注编辑
  • src/Apptag/ContentView.swift commitBubbleNote()
  • src/Apptag/DataLayer.swift TagEditor.setAppNote
  • 排序:
  • src/Apptag/AppGridCollectionView.swift 同容器 drop 时回调 onReorderApps
  • src/Apptag/ContentView.swift reorderApps(inContainer:orderedPaths:)
  • src/Apptag/DataLayer.swift TagEditor.reorderApps
  • 导入导出:
  • src/Apptag/PreferencesView.swift exportTags() / importTags()
  • src/Apptag/DataLayer.swift TagDatabase.exportTo / importFrom

文件变更

  • 新增会话记录:
  • .codex-sessionhistory/2026-06-26-Pro门禁数据安全.md

未决问题

  • 现有应用图标排序是“拖拽即保存”,没有“保存排序”按钮;若严格执行 PRD 的“点击保存排序时提示解锁 Pro”,需要补一个明确保存动作。
  • 是否把标签排序也纳入 Pro,PRD 与现有代码能力边界之间仍需产品确认。

后续建议

  • 若进入实现,先由架构师 A 交付统一 ProEntitlement 只读接口,再由架构师 B 分三步接入:
  • 设置页 Pro 区域与购买/恢复入口。
  • 主题预览与导入导出门禁。
  • 备注额度与排序预览硬门。