# Pro 状态重置排查 ## 用户目标 检查本机测试脚本为何不能通过 `launchctl unsetenv TAGLAUNCHER_QA_PRO_STATE`、退出并重新打开 TagLauncher 来去除会员状态、回到免费态。 ## 已完成事项 - 按项目规则读取 `CODE_GOVERNANCE.md`、`CODEGRAPH.md` 和相关调试 / QA / 代码治理规则。 - 确认 `/Applications/TagLauncher.app` 为 `8.2.8`,build `20260630.0128`,与当前 HEAD/tag 对应。 - 确认 `launchctl getenv TAGLAUNCHER_QA_PRO_STATE` 已为空,但运行中的 TagLauncher 旧进程仍携带 `TAGLAUNCHER_QA_PRO_STATE=pro`。 - 确认源码中 `TAGLAUNCHER_QA_PRO_STATE` 支持 `free|pro|legacyPro`;unset 只表示恢复真实权益状态,不等于强制免费。 - 按项目 QA 脚本的进程清理方式重启 App,并使用 `launchctl setenv TAGLAUNCHER_QA_PRO_STATE free` 启动新进程。 ## 关键结论 - 原三行脚本失效的直接原因是旧 TagLauncher 进程没有在 `open` 前真正退出,导致 `open` 复用了仍携带 `TAGLAUNCHER_QA_PRO_STATE=pro` 的旧进程。 - 从当前代码语义看,如果测试目标是强制免费态,应使用 `TAGLAUNCHER_QA_PRO_STATE=free`;`unsetenv` 只适合恢复 StoreKit / legacy / cache 推导出的真实权益状态。 ## 文件变更 - 未修改 App 源码、构建脚本或 QA 脚本。 - 新增本会话记录:`.codex-sessionhistory/2026-06-30-Pro状态重置.md`。 ## 当前环境变更 - 当前运行的 `/Applications/TagLauncher.app` 新进程已重新启动。 - 新进程环境为 `TAGLAUNCHER_QA_PRO_STATE=free`。 ## 未决问题 - 尚未把这段更稳的免费态重置命令沉淀成项目 QA 脚本或文档。 ## 后续建议 - 若需要长期复用,新增一个专门的本机 QA helper,例如 `Scripts/reset_pro_state_for_qa.sh free|pro|legacyPro|real`,避免手写 quit/open 时再次复用旧进程。