- [3P Quota Decoupling and Unauthorized Slot Blanks, Eliminating Phantom Quotas] (Fixes #3809, Ref #3811, PR #3812, Thanks to @cubelikeplayDaniel):
- Capability-Gated Frontend Blanks: Added actual model authorization checks to
getGroupQuotaSummaries; accounts with no usable Claude / 3P models now return empty values so quota cards render the standard-placeholder, removing the false 100% saturation caused by idle upstream 3P quota groups; dashboard averages, bottleneck extraction, and the 5H best-account ranking now skip accounts without 3P capability, safely showing-instead of errors when no account qualifies. (Fixes #3809, PR #3812, Thanks to @cubelikeplayDaniel) - Backend Phantom-Quota Isolation:
fetch_quota_with_cachenow strips generic 3P quota groups when an account has no usable Claude / GPT models;Account::update_quotaperforms defensive cleanup of legacy records so stale on-disk quotas cannot resurrect;token_managervalidates real authorization during bucket event sync to prevent phantom data from propagating downstream. (Fixes #3809, Ref #3811, PR #3812, Thanks to @cubelikeplayDaniel) - Regression Coverage: Added the frontend
claudeQuotaSanitizesuite and the Rusttest_update_quota_purges_phantom_3p_groups_when_no_claude_or_gpt_modelstest covering blanks without 3P models, normal listings, and fully disabled model isolation. (PR #3812, Thanks to @cubelikeplayDaniel)
- Capability-Gated Frontend Blanks: Added actual model authorization checks to
- [Quota Auto-Refresh Default Tightened to 10 Minutes] (Fixes #3809, PR #3814, Thanks to @cubelikeplayDaniel):
- Atomic Default Alignment: Lowered
refresh_intervalfrom 15 to 10 minutes in bothAppConfig::new()and the settings form defaults, reducing local state lag after quota consumption and window resets. (Fixes #3809, PR #3814, Thanks to @cubelikeplayDaniel)
- Atomic Default Alignment: Lowered
- [Inbound Model Gate Documentation Alignment and Ordering Regression Test] (Ref #3815):
- Clarified Retired-Family Scope: Corrected the
is_retired_model_iddocs — the hard gate applies to the final mapped egress model, so retired names remain valid as inbound alias keys pointing to compliant models; documented thatdownstream_exposed_modelsneeds no alias registration because aliases are resolved before gating. (Ref #3815) - Locked Map-Before-Judge Ordering: Added a regression test covering exact, dotted-version canonicalization, and wildcard alias paths to prevent future refactors from moving the retired check ahead of custom mapping and killing user aliases again. (Ref #3815)
- Clarified Retired-Family Scope: Corrected the
- [3P 配额解耦与无授权留空,杜绝虚假满额与幽灵配额] (Fixes #3809, Ref #3811, PR #3812, Thanks to @cubelikeplayDaniel):
- 前端能力准入留空: 在
getGroupQuotaSummaries中增加实际授权模型校验,账号在 Claude / 3P 分组下无任何可用模型时返回空值,驱动配额卡片统一渲染占位符-,消除上游空转配额组造成的虚假 100% 满额;大盘均值、短板提取与 5H 最优账号推荐同步跳过无 3P 能力账号,全池无可用账号时安全展示-而非报错。(Fixes #3809, PR #3812, Thanks to @cubelikeplayDaniel) - 后端幽灵配额隔离:
fetch_quota_with_cache在账号实际可用模型不含任何 Claude / GPT 模型时主动剥离通用 3P 配额组;Account::update_quota增加历史防御清理,避免旧数据反序列化复活虚假配额;token_manager配额桶事件同步校验真实授权,杜绝幽灵数据向下游广播。(Fixes #3809, Ref #3811, PR #3812, Thanks to @cubelikeplayDaniel) - 回归测试覆盖: 新增前端
claudeQuotaSanitize测试与 Rusttest_update_quota_purges_phantom_3p_groups_when_no_claude_or_gpt_models,覆盖无 3P 模型留空、正常模型展示与纯禁用模型隔离。(PR #3812, Thanks to @cubelikeplayDaniel)
- 前端能力准入留空: 在
- [配额自动刷新默认间隔收敛至 10 分钟] (Fixes #3809, PR #3814, Thanks to @cubelikeplayDaniel):
- 前后端默认值原子对齐: 将全局
AppConfig::new()与设置页表单状态的refresh_interval默认值由 15 分钟调整为 10 分钟,缩短配额消耗与窗口重置后的本地状态同步延迟。(Fixes #3809, PR #3814, Thanks to @cubelikeplayDaniel)
- 前后端默认值原子对齐: 将全局
- [入站模型门禁文档口径更正与顺序回归测试] (Ref #3815):
What's Changed
- fix(quota,dashboard): 3P模型解耦与无授权留空,杜绝虚假满额与报错 (Fixes #3809, Ref #3811) by @cubelikeplayDaniel in #3812
- fix(config): 将自动刷新配额默认间隔调整为10分钟 (Fixes #3809) by @cubelikeplayDaniel in #3814
Full Changelog: v5.0.2-beta.7...v5.0.2-beta.8