跨账号展示并手动消耗 Codex 重置卡 - #47
Conversation
打开菜单即可查看各账号储存的重置机会,默认用最快到期的一张; 消耗后只刷新该账号额度,不为用卡切号。同时压住菜单打开时的高度回跳。 Co-authored-by: Cursor <cursoragent@cursor.com>
Review:合入前建议处理的问题整体功能闭环基本到位(跨账号重置卡、默认只露最快到期、侧边面板、手动消耗且不切写代码账号、72h 角标、24h 通知去重、菜单高度防抖)。下面按优先级列出已核实的问题。 阻塞 / 建议合入前修1. 消耗成功后刷新可能静默失败 2. 确认弹窗文案写死「5h / 每周」 重要3. 无 4. 详情接口失败时可能「有数量、无列表」 5. 6. 行为侧改动单测覆盖不到,需实机确认
7. 私有 API + 破坏性 consume(风险观察,非代码缺陷) 小清理(可不阻塞,建议顺手)
建议先修 #1(消耗后刷新静默失败) 和 #2(确认文案窗口名),再明确 #3/#4/#5 的预期行为;然后按 Test plan 做一轮实机回归(尤其防跳、真实扣卡、通知只弹一次)后再合。 |
实机验证 + 修复(见 PR #48)在真实 macOS(27.0 / Xcode 26.6)上构建并运行了本分支,逐项实测后确认了以下问题,并已在 PR #48(基于本分支代码快照
测试:目标用例 52 通过,全量 607 通过 0 失败。
|
针对 PR #47(跨账号展示并手动消耗 Codex 重置卡)在本机构建、运行并逐项实测,确认以下问题并修复: 1. 用卡成功后刷新失败/被跳过缺失可见反馈 - consumeResetCredit 成功用卡后 refreshAccount(announceResult:false) 会吞掉刷新失败;且 L.resetCreditUsed 死文案从未接入。 - 改为成功用卡先播报 L.resetCreditUsed(windowsReset),再 announceResult:true 让刷新失败可见;已 .alreadyRedeemed 单独播报;新增 .notice 状态用绿色对勾横幅区分成功与错误。 2. 确认弹窗窗口名写死"5h / 每周" - resetCreditConfirmMessage 硬编码窗口名,且未判断次级窗口,对 FREE/TEAM/PROLITE 会误导并编造"每周已用 X%"。 - 改为按 primary/secondaryLimitWindowSeconds 沿用 windowLabel 动态生成;次级窗口不存在时不拼接。RateLimitResetCreditItem 增加窗口秒数字段。 3. 无 expiresAt 卡 / 详情失败导致 count>0 但列表空白 - items 在无 expiresAt 时整卡丢弃;loadResetCreditsIfNeeded 失败时复用可能为空的旧 credits。 - 新增 resetCreditTotalAvailableCount 兜底,有数量但无可展示卡时给出提示,不再整体隐掉。 4. 切号后 refreshNow() 变成全量刷新 - 原 main 为只刷活跃账号;PR 让 force 触发 refreshAll,切号即刷全部。 - refreshNow() 改回只刷当前活跃账号;后台 5 分钟全量刷保留为独立节奏。 5. 死代码清理 - 删除 authorizationRequestedDefaultsKey(只写不读)、accountRowSummary 与 L.resetCreditAccountSummary(未使用且与"账号行不显示 N张摘要"目标一致);windowsReset 接入成功播报;L.resetCreditUsed 接入成功播报。 实测:目标用例 52 通过,全量 607 通过 0 失败。验证报告见 docs/plans/2026-09-06-pr47-reset-credits-verification.md。
* 实机验证 PR #47 并修复重置卡相关问题 针对 PR #47(跨账号展示并手动消耗 Codex 重置卡)在本机构建、运行并逐项实测,确认以下问题并修复: 1. 用卡成功后刷新失败/被跳过缺失可见反馈 - consumeResetCredit 成功用卡后 refreshAccount(announceResult:false) 会吞掉刷新失败;且 L.resetCreditUsed 死文案从未接入。 - 改为成功用卡先播报 L.resetCreditUsed(windowsReset),再 announceResult:true 让刷新失败可见;已 .alreadyRedeemed 单独播报;新增 .notice 状态用绿色对勾横幅区分成功与错误。 2. 确认弹窗窗口名写死"5h / 每周" - resetCreditConfirmMessage 硬编码窗口名,且未判断次级窗口,对 FREE/TEAM/PROLITE 会误导并编造"每周已用 X%"。 - 改为按 primary/secondaryLimitWindowSeconds 沿用 windowLabel 动态生成;次级窗口不存在时不拼接。RateLimitResetCreditItem 增加窗口秒数字段。 3. 无 expiresAt 卡 / 详情失败导致 count>0 但列表空白 - items 在无 expiresAt 时整卡丢弃;loadResetCreditsIfNeeded 失败时复用可能为空的旧 credits。 - 新增 resetCreditTotalAvailableCount 兜底,有数量但无可展示卡时给出提示,不再整体隐掉。 4. 切号后 refreshNow() 变成全量刷新 - 原 main 为只刷活跃账号;PR 让 force 触发 refreshAll,切号即刷全部。 - refreshNow() 改回只刷当前活跃账号;后台 5 分钟全量刷保留为独立节奏。 5. 死代码清理 - 删除 authorizationRequestedDefaultsKey(只写不读)、accountRowSummary 与 L.resetCreditAccountSummary(未使用且与"账号行不显示 N张摘要"目标一致);windowsReset 接入成功播报;L.resetCreditUsed 接入成功播报。 实测:目标用例 52 通过,全量 607 通过 0 失败。验证报告见 docs/plans/2026-09-06-pr47-reset-credits-verification.md。 * 验证报告:修正证据路径说明,统一指向 output/pr47-evidence
Summary
Test plan
Made with Cursor