edit | blame | history | raw

2026-07-01 额度状态审查

用户目标

作为 TagLauncher 崩溃 / 新问题代码审核员 A,只读审查 8.3.0 新问题的最小修复方案,不修改源码。

问题:免费用户编辑 / 维护 4 个标签后,标签页顶部“免费用户可以使用6个自定义标签(容器):已使用 0 / 6”没有实时变化。

关注文件:

  • /Users/ar/Projects/Taglauncher/src/Apptag/TagEditorView.swift
  • /Users/ar/Projects/Taglauncher/src/Apptag/ContentView.swift
  • /Users/ar/Projects/Taglauncher/src/Apptag/PreferencesView.swift
  • /Users/ar/Projects/Taglauncher/src/Apptag/ProEntitlement.swift
  • /Users/ar/Projects/Taglauncher/src/Scripts/pro_custom_container_quota_qa.sh

已完成事项

  • 只读检查当前工作区、分支和 worktree。
  • 只读审查自定义标签容器额度状态流、TagEditorView mutation 回调、ContentView / PreferencesView 顶部 accessory、ProEntitlement quota policy 和现有 QA 脚本。
  • 运行现有 QA:bash src/Scripts/pro_custom_container_quota_qa.sh,结果 PASS。

关键决策

  • 最可能漏掉的状态驱动不是数据层计数,而是 UI 层缺少一个可观察的 customContainerQuotaStatus 或等价 refresh token。
  • 当前 customContainerQuotaAccessoryContentViewPreferencesView 的 computed view 中直接调用 ProEntitlementPolicy.customContainerQuotaStatus(),SwiftUI 不会自动订阅数据库文件或 TagDef.isCustomMaintained 派生计数变化。
  • 最小修复方向:在父视图维护 quota 状态,并在成功的标签维护 mutation、进入标签页 / 编辑模式、数据导入 / 恢复 / Pro 状态变化后刷新;不要为了刷新额度触发重型 app scan。

文件变更

  • 未修改源码。
  • 仅新增本会话记录,并更新会话命令索引。

核心事实 / 变更快照

  • 变更对象:TagLauncher 8.3.0 自定义标签容器额度显示刷新机制审查结论。
  • 事实来源:
  • /Users/ar/Projects/Taglauncher/src/Apptag/ContentView.swift
  • /Users/ar/Projects/Taglauncher/src/Apptag/PreferencesView.swift
  • /Users/ar/Projects/Taglauncher/src/Apptag/TagEditorView.swift
  • /Users/ar/Projects/Taglauncher/src/Apptag/ProEntitlement.swift
  • /Users/ar/Projects/Taglauncher/src/Apptag/DataLayer.swift
  • /Users/ar/Projects/Taglauncher/src/Scripts/pro_custom_container_quota_qa.sh
  • 当前状态:额度计算通过 ProEntitlementPolicy.customContainerQuotaStatus() 读取 TagDatabase.customMaintainedContainerCount();UI accessory 直接从 policy 读取,没有独立 SwiftUI 状态。
  • 风险边界:修复应避免改变 quota 计数定义、Pro gate、标签保存顺序、编辑态本地状态、异步 app scan 行为和设置页其它 Pro 状态。
  • 验证证据:bash src/Scripts/pro_custom_container_quota_qa.sh PASS,但该脚本当前只验证门禁和文案 wiring,未验证 accessory 有可变状态驱动。

未决问题

  • 是否由实现者采用 @State private var customContainerQuotaStatus,还是使用 refresh token 触发重算。审查建议优先状态化 status,避免 body 反复读磁盘。
  • 是否需要补真实 UI / AX 测试验证“新建、重命名系统标签、改系统标签颜色、删除标签”后顶部额度立即变化。

后续建议

  • ContentView / PreferencesView 引入父级 quota 状态。
  • TagEditorView.onRefresh 或新增专用回调应同步刷新 quota 状态,再按需要触发 refreshApps() / scanApps()
  • ContentView.handleTagMutationResult(.saved) 也应刷新 quota 状态,覆盖 AppGrid overlay 的 app membership mutation。
  • pro_custom_container_quota_qa.sh 增加静态断言:customContainerQuotaAccessory 不应直接作为唯一数据源调用 policy;父视图必须有 quota 状态 / refresh helper;TagEditorView 回调必须在两处父视图刷新 quota;membership mutation 成功路径也必须刷新 quota。

可复用命令 / Runbook

用途:复查 Pro 自定义容器额度门禁、文案和脚本 wiring。

前置条件:在 /Users/ar/Projects/Taglauncher 主工作区执行;不要求构建 App。

设置命令:

cd /Users/ar/Projects/Taglauncher
bash src/Scripts/pro_custom_container_quota_qa.sh

验证步骤:命令输出 PASS Pro custom container quota QA... 且退出码为 0。

清理 / 恢复命令:无,脚本为只读静态检查。

搜索关键词:pro_custom_container_quota_qa.shcustomContainerQuotaAccessorycustomContainerQuotaStatus已使用 0 / 6