fix(ia): revalidacao que falha zera o catalogo de modelos (recorte do #714)

O ramo de falha gravava validated_at:null e validation_error e deixava
models_available como estava -- a lista da validacao ANTERIOR. A tela
desenha essa contagem (CredentialCard.tsx:165) ao lado da mensagem de
erro, entao uma credencial que deixou de ser confiavel aparece com
catalogo, como se estivesse pronta.

A decifragem que falha passa a usar o logger estruturado no lugar do
console.error. Isso e consistencia com a casa, nao conserto de violacao:
o anti-pattern 14 do CLAUDE.md nomeia console.log, e o eslint permite
error explicitamente (eslint.config.mjs:25).

Recorte do PR #714, de @betoarts.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01X2i1fgsteAjoAU6T8ewnq2
This commit is contained in:
betoarts
2026-09-20 17:42:17 -03:00
committed by melgarafael
co-authored by Claude Opus 5
parent a796ea3c97
commit d6542aa90a
@@ -14,6 +14,7 @@ import { audit } from "@/lib/audit";
import { requireRole } from "@/lib/auth/require-role";
import { byteaToBuffer, decryptKey } from "@/lib/crypto/aes_gcm";
import { validateProviderKey } from "@/lib/ai/provider-validators";
import { logger } from "@/lib/logger";
import { createAdminClient } from "@/lib/supabase/admin";
import { traduzir } from "@/lib/i18n/dicionario";
@@ -69,7 +70,10 @@ export async function POST(
tag: byteaToBuffer(row.api_key_tag),
});
} catch (err) {
console.error("[ai.credentials] decrypt failed during revalidate", err);
logger.error("[ai.credentials] decifragem falhou durante a revalidação", {
credentialId: id,
erro: err instanceof Error ? err.name : typeof err,
});
return fail("decrypt_failed", t("Falha ao decifrar credential."), 500, { requestId });
}
@@ -83,6 +87,9 @@ export async function POST(
: {
validated_at: null,
validation_error: result.error,
// Não conservar o catálogo de uma validação anterior: a credencial
// deixou de ser confiável e a lista antiga faria a tela parecer pronta.
models_available: null,
};
const { data: updated, error: updErr } = await admin