本轮顺序:先对当前项目全量备份并复制到桌面“sub2备份”,逐文件与副本校验通过;再冻结本审查结论,然后修改。整个过程只在本地执行,不部署、不写远程服务器或真实业务数据库。
C:/Users/30214/Desktop/sub2本地/sub2新站-调整前-20260914-213426-complete.tar.gz
副本:C:/Users/30214/Desktop/sub2备份/sub2新站-调整前-20260914-213426-complete.tar.gz
两份 SHA-256:4C7A328E9A265C668451B198D4EF40DFBE66D17C4F3C4B3FDE39BFC5DD20A71A。71,005 个实际文件、3,162 个链接已逐项回读校验;归档内含 BACKUP_MANIFEST.json。此基线包含此前 B 方案与图片显示修复,也包含下述本轮待修问题。
检查了管理路由与角色保护、账号策略保存/还原、HTTP/WSS 重试与冷却、账号测试和队列、答案/SVG 评估、结果显示与设置操作、分组统计、更新/Live 功能边界及 CI 选择范围。前几轮的权限保护、定制站在线更新禁用、未结算 Live 禁用、共享并发、策略原子切换、图片安全显示等仍在代码中,不作为新的未修问题重复列出。
没有把未被调用的 TODO 当作线上缺陷,也没有将源码审查等同于穷尽整个项目或实际生产负载验收。
| 编号 | 优先级 | 当前问题与依据 | 执行方案 |
|---|---|---|---|
| T01 | P1 | OAuth 429 把 Retry-After: 90 秒截为 8 秒;带截止时间的重试绕过普通次数限制。见 openai_account_runtime_block_fastpath.go、handler/failover_loop.go。 |
同时尊重上游最早重试时间、次数与总时长;退避逐步延长并错开,预算不足不提前重试。 |
| T02 | P1 | 通用 SetRateLimited 直接覆盖恢复时间,迟到的短冷却可能缩短已保存的长冷却。 | 复用原子“仅延长”写入;保持明确恢复入口独立,并用并发数据库用例验证。 |
| T03 | P1 | 共享并发不等于遵守冷却,智能测试没有统一检查账号/模型的限流窗口。 | 执行前检查冷却,排队任务延后至可重试时间,展示具体等待原因;普通连接测试也不提前撞冷却窗口。 |
| T04 | P1 | 普通连接测试成功后调用 RecoverAccountState,清除所有模型的冷却,可能误清其他模型或并发新增限制。 | 成功测试只报告观测,不自动整体清除状态;手动恢复继续使用明确入口。 |
| T05 | P1 | 自然语言答案提取会把“因此答案不是12”“没有12颗糖”提为 12;JSON 重复答案键也可能被覆盖。 | 否定、假设、引用等歧义结果转人工复核;保留重复候选检查,不能因尾值正确放行冲突答案。 |
| T06 | P2 | 清空单位仍可能触发旧糖果题自动推断“颗”。 | 区分不接受单位、指定单位、旧题兼容;旧快照保留原语义,新设置按明确选项执行。评分规则升级版本,旧 B 记录仍可保留式重评。 |
| T07 | P2 | 请求完整性检查绑定 mode1;无法在 legacy 身份/TLS 下独立观察转换损失。 | 拆出独立观察/拦截控制,默认身份策略保持初代兼容;兼容阶段先观察,不自动把全部旧账号切到严格拦截。 |
| T08 | P2 | 分组 stats 管理接口直接返回占位零值,甚至没有用分组 ID 获取真实统计。 | 停止将未实现统计伪装成成功零值;明确返回功能未提供,不编造费用口径。 |
| T09 | P2 | protection-database CI 正则遗漏新增加的 ProtectedProxy 前缀用例;本地通过不保证 CI 执行。 | 补齐本轮相关用例和 CI 必测范围,并验证测试在独立环境中确实执行。 |
所有改动要通过针对性回归;涉及冷却写入和队列的变更使用新的本机临时 PostgreSQL 实例测试,测试结束后停止。再执行前端全量、类型与 lint、后端相关及全量单元测试和临时目录构建。不得调用真实上游账号,不把本地合成用例称作线上效果证明。
实施结果和实际验证数字将另写本轮结果报告;此文件保留调整前的问题证据。