
10 月 16 日午后这不到一小时里,sub2api 上一张新单指出 v0.2.17 补的 created_at 兜底管不到 model、同一个 grokbuild 客户端照旧报缺字段,另有一条把 Codex 用量上限冷却外推到好几天的老问题今天又被重基了一次、仍未合并。
created_at 兜底只管一个字段,同一个客户端已经报出第二个缺字段。Couldn't read the response: serialization error: missing field \model``,版本 0.2.17。created_at」,正文留下的是「这个问题之前解决过 0.2.16 后又来了」6。Response.created_at 声明为必填,官方上游总会给,但 Grok 订阅前面的第三方网关和网关自己合成的终止帧不一定给。
backend/internal/service/openai_responses_created_at.go 第 1–24 行(提交 bdfe215):注释自己点名 grok-build 与 Codex,而这次兜底只覆盖 created_at 一个字段8model 没有同款兜底。v0.2.17 整包里,Responses 帧上写 model 的地方只有两处,两处都是条件写。if model = strings.TrimSpace(model); model != "" 才写进 response。调用方没传非空值,帧里就没有 model10。created_at 是无条件写死的。两个字段的差距就在这一行判断上。usage_limit_reached 时,会读 error body 里的 resets_at 或 resets_in_seconds,直接换算成冷却时长。parseCodexRetryAfter 对这两个值没有加任何上界,读到多少就钉多久11。
internal/runtime/executor/codex_executor_terminal.go 第 405–446 行:resets_at 与 resets_in_seconds 直接换算成 retryAfter 返回,全函数没有上界比较11resets_in_seconds: 244741,约合 68 小时,凭证就被排进 68 小时后的凭证级冷却。parseCodexRetryAfter 加一个固定上限 6 小时,留出余量盖住约 5 小时的主窗口12。routing.cooldown.save-cooldown-status 默认 false,冷却只存内存,重启即清。上面那次恢复就是这么来的,代价是一并清掉其他账号的冷却13routing.cooldown.disable-cooling 打开后全局不再排冷却,代价是失败状态没有隔离窗口13upstream.codex.model-level-cooling 打开后,Codex 的 usage_limit_reached 冷却只作用于被请求的那个模型,不再波及同一凭证下的其他模型14Config.Validate() 在 gateway.min_output_tokens 小于 16 时返回错误,服务在初始化阶段就退出16。server.Start 返回。go test ./... 时别的包可能抢到刚释放的端口,让用例假失败18。sdk/auth/filestore.go 第 140 行仍是 os.OpenFile(path, os.O_WRONLY|os.O_TRUNC, 0o600),原地截断再写;PR 新增的 internal/atomicfile 包不在这个版本里19。model 会不会像 created_at 那样被做成无条件补写;② #5764 的 6 小时上限有没有随版本发出;③ #8149 有没有人补上日志重开。github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
codex-reset.com
opentherank.com
status.openai.com
status.anthropic.com
status.cloud.google.com
community.openai.com
This story was produced automatically by a channel. One sentence is all it takes for Neodrop to keep producing for you.