- [Account Deletion Consistency Fix: Deleted Accounts Are No Longer Dispatched, with Zero-Side-Effect Loading] (Fixes #3806, PR #3807, Thanks to @cubelikeplayDaniel, @dnmdngcsb):
- Index-Driven Pool Admission: The proxy pool now treats
accounts.jsonas the single admission source; credential files missing from the index are logged and skipped instead of being loaded again, completely eliminating ghost accounts (deleted in the UI but still on disk) from the rotation that caused 503 responses andCross-account replay cap reachedon large payloads. (Fixes #3806, PR #3807, Thanks to @cubelikeplayDaniel, @dnmdngcsb) - Zero-Side-Effect Loading Path: Orphan files are no longer physically deleted while loading accounts, preventing irreversible refresh-token loss during the legitimate "file written but index not yet committed" window (streaming batch import) or when only the
accounts/directory is restored from a backup; orphan detection now matches both the file stem and the internalidso historical files withstem != idare not misclassified. (PR #3807, Thanks to @cubelikeplayDaniel, @dnmdngcsb) - Hot Reload and Deletion Flow Hardening:
reload_account()now only unloads accounts missing from the index and returns success, avoiding false errors surfaced by enable/disable toggles and quota refreshes;delete_account()moved to fail-before-the-point-of-no-return (index persisted first, then the credential file removed, with errors propagated) while keeping orphan fallback cleanup; bulk deletion now hot-reloads the proxy pool immediately, keeping Web/CLI and desktop behavior aligned. (PR #3807, Thanks to @cubelikeplayDaniel, @dnmdngcsb) - Regression Coverage: Added and adjusted unit tests covering both final states — orphan files preserved on disk but excluded from the proxy pool, and orphan files still cleanable through the explicit delete API. (PR #3807, Thanks to @cubelikeplayDaniel, @dnmdngcsb)
- Index-Driven Pool Admission: The proxy pool now treats
- [账号删除一致性修复:已删除账号不再被反代调度,加载路径零副作用] (Fixes #3806, PR #3807, Thanks to @cubelikeplayDaniel, @dnmdngcsb):
- 调度池以索引为准入白名单: 反代加载账号池时以
accounts.json为唯一准入清单,索引外的残留凭据文件只记录警告并跳过,彻底杜绝已删除账号(幽灵账号)被重新载入轮询、向失效账号派发请求导致 503 或大请求体下触发Cross-account replay cap reached的问题。(Fixes #3806, PR #3807, Thanks to @cubelikeplayDaniel, @dnmdngcsb) - 加载路径零副作用,杜绝凭据误删: 孤儿文件不再在加载路径被物理删除,规避批量导入「文件已落盘、索引尚未提交」窗口期、以及仅从备份恢复
accounts/目录时误删 refresh token 的不可逆风险;孤儿判定同时兼容文件 stem 与文件内id,避免stem != id的历史文件被误判。(PR #3807, Thanks to @cubelikeplayDaniel, @dnmdngcsb) - 热重载与删除流程收敛:
reload_account()对已不在索引中的账号仅从内存池卸载并返回成功,避免启用/禁用与配额刷新时向界面透传误报;delete_account()改为失败点前置(索引先落盘、成功后再删除凭据文件,删除失败向上抛错),同时保留索引外孤儿文件的兜底清理能力;批量删除后立即热重载代理池,保证 Web/CLI 与桌面端行为一致。(PR #3807, Thanks to @cubelikeplayDaniel, @dnmdngcsb) - 回归测试覆盖: 新增与调整账号删除、调度池加载单测,分别覆盖「孤儿文件保留在磁盘但不进入调度池」与「索引外残留文件仍可通过显式删除接口兜底清理」两种终态。(PR #3807, Thanks to @cubelikeplayDaniel, @dnmdngcsb)
- 调度池以索引为准入白名单: 反代加载账号池时以
What's Changed
- fix(oauth): 换码异常时主动清理 Flow 脏状态并补齐手动回填 CSRF 双向校验 (Fixes #3802, Ref #3804) by @cubelikeplayDaniel in #3805
- fix(account,proxy): 清理已删除账号的残留孤儿文件并在调度池强制校验索引白名单 (Fixes #3806) by @cubelikeplayDaniel in #3807
Full Changelog: v5.0.2-beta.5...v5.0.2-beta.6