From 8bd517e5842d95410c0dc34621a6c91fba0692bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=A6=A8=E5=86=89?= Date: Thu, 10 Sep 2026 11:04:27 +0800 Subject: [PATCH] fix(codex-models): keep fallback order so a missing cache degrades exactly CI: adapter-models.test.ts pins toEqual(codexFallbackModels), including the static array's original order. The no-key path went through mergedWithFallback, which sorts; with an empty CLI cache that reordered the fallback and broke two existing tests. Merge without sorting so a missing or unusable cache returns the pre-change result bit-for-bit. --- server/src/adapters/codex-models.test.ts | 16 ++++------------ server/src/adapters/codex-models.ts | 9 +++++++-- 2 files changed, 11 insertions(+), 14 deletions(-) diff --git a/server/src/adapters/codex-models.test.ts b/server/src/adapters/codex-models.test.ts index eeed556174..a20d884f2c 100644 --- a/server/src/adapters/codex-models.test.ts +++ b/server/src/adapters/codex-models.test.ts @@ -48,13 +48,9 @@ describe("codex model discovery via the CLI models cache", () => { else process.env.OPENAI_API_KEY = originalOpenAiKey; }); - it("returns the static fallback when the cache file is missing", async () => { + it("returns the static fallback in its original order when the cache file is missing", async () => { const models = await listCodexModels(); - expect(models.map((m) => m.id)).toEqual( - [...codexFallbackModels.map((m) => m.id)].sort((a, b) => - a.localeCompare(b, "en", { numeric: true, sensitivity: "base" }), - ), - ); + expect(models).toEqual(codexFallbackModels); }); it("lists cache entries with visibility list and keeps internal slugs out", async () => { @@ -88,15 +84,11 @@ describe("codex model discovery via the CLI models cache", () => { expect(models.find((m) => m.id === "o3-mini")?.label).toBe("o3-mini"); }); - it("returns the static fallback when the cache file is malformed", async () => { + it("returns the static fallback in its original order when the cache file is malformed", async () => { writeCache(tempHome, "{not json"); const models = await refreshCodexModels(); - expect(models.map((m) => m.id)).toEqual( - [...codexFallbackModels.map((m) => m.id)].sort((a, b) => - a.localeCompare(b, "en", { numeric: true, sensitivity: "base" }), - ), - ); + expect(models).toEqual(codexFallbackModels); }); it("returns the static fallback when the cache payload has no models array", async () => { diff --git a/server/src/adapters/codex-models.ts b/server/src/adapters/codex-models.ts index 2b7b072976..a896f9328e 100644 --- a/server/src/adapters/codex-models.ts +++ b/server/src/adapters/codex-models.ts @@ -139,8 +139,13 @@ async function loadCodexModels(options?: { forceRefresh?: boolean }): Promise