fix: preserve Luna Reserve quota routing - #457
Conversation
|
补充修复已推送:
现网首个账号的只读验证结果:请求返回 200,已带 Luna Reserve opt-in 与正确的 ChatGPT account UUID,但 upstream 返回 |
|
继续修复(commit d6e4e90):
|
|
最终验证补充(commit d6e4e90):
|
qxcnm
left a comment
There was a problem hiding this comment.
基础构建和测试是通过的,但这里还有 3 个需要在合并前修正的行为问题:
-
Reserve 恢复没有失效边界。
store_usage_snapshot在上游持续返回additional_rate_limits: null/缺失时,会把任意历史“曾可用”的 Reserve 反复复制到新快照;has_usable_luna_reserve不校验原始快照时间、恢复次数或权益撤销。结果是套餐撤销、身份变化或 Reserve 下线后,旧额度仍可能永久显示为available_luna_reserve并参与候选路由。请加入有界恢复策略(例如来源时间/TTL 或一次性恢复)以及重复 null、过期/撤销的回归测试。另请用默认retain=1的真实写入序列覆盖“旧版空快照恢复”:当前测试直接insert_usage_snapshot绕过 prune,而默认配置下旧 Reserve 已经会被删掉。 -
Reserve 的请求模型不能等同为普通 Luna。OpenAI Codex 把
gpt-reserve定义为后端授权的临时请求别名;它只借用normal_model_slug/Luna 的展示和 reasoning 元数据,最终请求仍应保持gpt-reserve:
https://github.com/openai/codex/blob/1b53f6a44eff890b5169bde8d3bd5b12b8766946/codex-rs/tui/src/chatwidget/luna_reserve_model.rs#L1-L33
当前is_luna_reserve_model把所有包含luna的模型视作 Reserve,候选测试也只用gpt-5.6-luna,却没有验证最终上游 JSON 的model。请收紧为明确的gpt-reserve别名;若产品要自动切换,则应显式改写当前请求并补最终请求体/额度扣减验证,不能只放宽候选池。 -
apps/src/hooks/useAccounts.ts的lastKnownUsagesRef不按serviceStatus.addr隔离,也不清理权威usage/list中已不存在的项。从实例 A 切到实例 B,若相同 accountId 在 B 暂无 usage,会继续展示 A 的旧 Reserve 配额与可用状态。请按服务地址分区/切换时清空,并在成功取得权威列表时完成对账,补服务切换与空列表测试。
已核对:head d6e4e909、3 项 CI 全绿、cargo fmt --all -- --check、Core 用量测试、Service 213 项 usage 测试、前端 runtime 199/199 与生产构建均通过;以上是通过测试仍未覆盖到的语义问题。force_enabled 的硬状态保护以及 ChatGPT account ID 优先级目前未发现问题。

变更
additional_rate_limits返回为null时,保留旧快照中的 Reserve bucket;显式数组仍按上游结果作为权威值,并兼容旧的additionalRateLimits缓存格式。Luna Reserve,额外额度子卡宽度提升约 10%。验证
cargo fmt --all -- --checkcargo test -p codexmanager-core --test usage -- --nocapture(5 passed)cargo test -p codexmanager-service usage_request_headers -- --nocapture(2 passed)cargo test -p codexmanager-service legacy_usage_request_ignores_proxy_pool_when_account_proxy_is_disabled -- --nocapture(1 passed)cargo test -p codexmanager-service followup_usage_without_extra_buckets_keeps_previous_luna_reserve -- --nocapture(1 passed)pnpm -C apps run build与pnpm -C apps run test:runtime(199 passed)QA
使用独立 QA 实例和隔离数据库验证:点击首行“刷新用量”后,5h 与 Reserve 同时显示;仅首个 fixture account 生成新快照,其余账号快照保持不变。随后视觉复核确认
Luna Reserve标题和加宽后的子卡无文字遮挡。官方实例端口保持不变。