From e94ba13dfe6a2cb28a40f6a353931e91902379c8 Mon Sep 17 00:00:00 2001 From: Jordan Ritter Date: Sat, 18 Jul 2026 10:48:39 -0700 Subject: [PATCH] fix(drift): classify bare chat-latest alias in openai excludeFamilies MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit chat-latest is a moving alias on OpenAI's /models endpoint with no per-tier prefix (unlike gpt-5-chat-latest, gpt-5.1-chat-latest, etc.). The normalizer leaves it unchanged (no date/build-tag suffix to strip), so it fell through the registry as an unclassified family. Per PR #313's stated policy, moving aliases belong in excludeFamilies. Also adds chat-latest to the static OpenAI wave in models.drift.ts to close the fixture-vs-live gap: the static suite previously omitted it, so the test exercised 0/0/0 while the live /models returned it (making this class of bare alias invisible to the test). Verified sibling *-latest entries across openai/gemini/anthropic — all other bare aliases already appear in include or excludeFamilies. --- src/__tests__/drift/model-registry.ts | 3 +++ src/__tests__/drift/models.drift.ts | 3 +++ 2 files changed, 6 insertions(+) diff --git a/src/__tests__/drift/model-registry.ts b/src/__tests__/drift/model-registry.ts index b946bbe2..212f2463 100644 --- a/src/__tests__/drift/model-registry.ts +++ b/src/__tests__/drift/model-registry.ts @@ -176,6 +176,9 @@ export const excludeFamilies: Record> = { "gpt-image-1.5", "gpt-image-2", "chatgpt-image-latest", + // Bare chat alias — a moving alias (not a stable mocked family); matches the + // *-latest exclude policy (chatgpt-image-latest, omni-moderation-latest, etc.) + "chat-latest", // Video generation (non-text) "sora-2", "sora-2-pro", diff --git a/src/__tests__/drift/models.drift.ts b/src/__tests__/drift/models.drift.ts index 872b5c73..b3da9f2c 100644 --- a/src/__tests__/drift/models.drift.ts +++ b/src/__tests__/drift/models.drift.ts @@ -266,6 +266,9 @@ describe("full live /models wave is fully classified (2026-07-16 drift)", () => "sora-2-pro", "omni-moderation", "omni-moderation-latest", + // bare chat alias (fixture-vs-live gap: present in live /models, was absent + // from the static wave — this is the 2026-07-18 canary residual) + "chat-latest", ]; expect(unclassifiedFamilies(openaiLive, "openai")).toEqual([]); });