chatModel was a free string accepted with empty/garbage values, failing only at runtime as a provider 503; tighten it (trim + non-empty + max 200). Driver was already @IsIn(AI_DRIVERS). Collapse the client driver list to one AI_DRIVER_VALUES source and add a contract test that reads the server AI_DRIVERS and fails on client/server drift. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>