tbphp
16be863ea5
fix(subscription): 允许手动刷新恢复异常订阅凭据 (#580)
* fix(subscription): 允许手动刷新恢复异常订阅凭据
订阅凭据刷新遇到网络故障后落入 outcome_unknown,此后所有刷新入口
全部关闭,重启也不恢复,只能重新连接账号或重新导入。
新增 RefreshForManualRecovery 作为唯一允许恢复异常认证状态的入口,
仅由管理面「刷新凭据」使用;数据面自动刷新、模型发现与额度观测继续
沿用原有门禁。放开后原代码「只有 ready 能进入刷新」的前提失效,同步
修正三处连带问题:
- 临时失败与启动失败不再无条件写回 ready,改为写回进锁时的原状态,
避免一次 503 把状态未知的凭据洗白并放回调度
- 残留 refreshing 归一为 outcome_unknown 再参与恢复,避免界面长期
显示正在刷新
- 版本复用分支增加认证状态与运行时一致性确认,版本变大不再单独作为
刷新成功的依据
调度排除、状态展示、失败分类与额度同步入口均保持不变。
Closes #571
* fix(subscription): 修正手动恢复的运行时确认与错误归属
Review 发现放开人工恢复后遗留两处边界:
- ensureRuntimeMatchesDurableSecret 依赖 ReconcileGroup 修复运行时,
但后者只比较持久化配置,不含 auth_state。运行时版本已是最新、仅
认证状态落后时会被判定为无需变更并返回成功,账号实际仍不可调度。
改为先定向同步认证状态,并在返回成功前重新确认版本与状态一致
- 失败分支把用于持久化的历史错误码直接用于 API evidence,异常账号
重试遇到网络失败时会报告旧的认证问题,残留 refreshing 的
refresh_interrupted 还会落到需要重新授权的兜底映射。持久化继续
沿用原状态与原错误码,evidence 改为依据本次失败分类生成
新增两个用例:版本相同仅认证状态落后时经真实 ReconcileGroup 修复;
原状态明确失效或残留 refreshing 时本次网络失败报告为结果未知。
2026-09-07 09:49:55 +08:00
..
2026-09-06 11:55:18 +08:00
2026-08-30 18:20:28 +08:00
2026-09-07 09:49:55 +08:00
2026-08-30 18:20:28 +08:00
2026-09-07 09:49:55 +08:00
2026-08-28 18:26:00 +08:00
2026-09-06 09:29:35 +08:00
2026-09-06 09:29:35 +08:00
2026-09-06 11:55:18 +08:00
2026-09-06 11:55:18 +08:00
2026-08-28 18:26:00 +08:00
2026-08-28 18:26:00 +08:00