mirror of
https://github.com/melgarafael/DeskcommCRM.git
synced 2026-10-02 01:28:34 +08:00
fix(prospecting): o hash da versão trata inbound_debounce_ms nulo como ausente
O setup do agente de prospecção grava na criação o hash da versão montada, a partir do objeto parseado, que não tem a chave `inbound_debounce_ms`. Depois ele confere esse hash contra a linha lida do banco, onde a coluna nova da 0498 vem `null`. Os dois hashes divergiam, e o setup recusava com "O rascunho foi alterado" ou "O conteúdo do agente mudou" nas 5 specs de tests/invariants/prospecting-agent-setup.test.ts (invariants vermelho no #1997). `trigger_config` já tinha essa exceção. A lista passa a nomear as duas colunas. Medido: test:db do arquivo, 8/8 com o conserto; sabotado (coluna fora da lista), 5 failed | 3 passed, as mesmas 5 do CI; restaurado e conferido por grep. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
d645fe8fb9
commit
ef05841653
@@ -180,15 +180,21 @@ interface SetupMetadata {
|
||||
proposal_hash?: string;
|
||||
prepared_only?: boolean;
|
||||
}
|
||||
// Colunas em que `null` na linha do banco é o mesmo que ausente na versão montada: o hash
|
||||
// gravado na criação parte do objeto parseado (sem a chave), e a conferência parte da
|
||||
// linha lida (com `null`). Sem esta lista os dois hashes divergem e o setup recusa com
|
||||
// "O rascunho foi alterado" — o que a 0498 (inbound_debounce_ms) fez nas 5 specs de
|
||||
// tests/invariants/prospecting-agent-setup.test.ts.
|
||||
// ponytail: lista explícita; coluna nullable nova em ai_agent_versions entra aqui (#2004).
|
||||
const NULO_E_AUSENTE = new Set(["trigger_config", "inbound_debounce_ms"]);
|
||||
|
||||
function versionHash(row: Record<string, unknown>) {
|
||||
const keys = Object.keys(versionCreateSchema.shape);
|
||||
return hash(
|
||||
versionCreateSchema.parse(
|
||||
Object.fromEntries(
|
||||
keys
|
||||
.filter(
|
||||
(key) => row[key] !== undefined && !(key === "trigger_config" && row[key] === null),
|
||||
)
|
||||
.filter((key) => row[key] !== undefined && !(NULO_E_AUSENTE.has(key) && row[key] === null))
|
||||
.map((key) => [key, row[key]]),
|
||||
),
|
||||
),
|
||||
|
||||
Reference in New Issue
Block a user