fix(EPIC-05): preserve per-row contact import outcomes - #766
Conversation
|
@Tong-bit-art is attempting to deploy a commit to the rafael-maudibrasil's projects Team on Vercel. A member of the Team first needs to authorize it. |
ECC Tools / Security EvidenceCommit: Security evidence gate passed (success) No security-sensitive scanner-evidence gap detected. Mode: enforce Scanned 3 changed file(s). No missing scanner-evidence signal was detected. Check publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission. |
ECC Tools / PR Risk TaxonomyCommit: PR taxonomy review recommended (neutral) Detected 1 PR taxonomy bucket(s): CI/CD Recommendation. Scanned 3 changed file(s). Roadmap taxonomy buckets: CI/CD RecommendationCI, dependency, coverage, and contract signals should be routed into follow-up checks or verification work. Signals:
Paths:
Check publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission. |
ECC Tools / Reference Set ReadinessCommit: Reference set readiness gaps detected (neutral) Reference evidence present for 0/7 areas (0%) across 3 changed file(s). This check is based on files changed in this PR. Repository-level readiness is still reported by
Check publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission. |
ECC Tools / Hosted Promotion ReadinessCommit: Hosted promotion readiness passed (success) No hosted promotion evidence gaps detected across 3 changed file(s); 0 corpus scenarios had matching evidence. This check compares PR file changes against the evaluator/RAG promotion corpus in No evaluator corpus scenarios matched this PR. Check publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission. |
|
Recebido, @Tong-bit-art — obrigado por isto. Duas coisas que vão parecer erro seu e não são:
Um mantenedor vai revisar de verdade — rodando os gates e reproduzindo o comportamento, não só Esta mensagem é automática e não diz nada sobre o seu PR: ela é sobre o processo. O que vem |
O que este PR faz
A importação de contatos por CSV promete um desfecho por linha, mas o handler
marcava identificadores como "vistos" antes da validação e da gravação. Com
isso, uma linha inválida, uma gravação com erro ou uma linha pulada por e-mail
existente podia fazer uma linha válida posterior desaparecer sem entrar no
relatório.
Este PR deixa a deduplicação acontecer somente contra contatos que já existem
ou que foram gravados com sucesso. Cada linha repetida passa pelo desfecho
normal e aparece em
skipped_duplicates; erros continuam associados ao númeroda linha; não são criados eventos
contact.createdduplicados.Exemplo: numa planilha com três linhas para o mesmo telefone, a resposta agora
é
total_linhas=3,imported=1,skipped_duplicates=2. Se a primeira linhafalhar na validação ou no insert, a segunda ainda pode ser importada.
O que mudou
inserts que terminaram com sucesso;
um dublê somente para as fronteiras de autenticação, auditoria e Supabase;
.changes/.Não há alteração de schema, RLS, contrato da API, tela ou variáveis de ambiente.
Validação
pnpm test:unit app/api/v1/contacts/import/route.test.ts— 8 passed;pnpm typecheck— passou;pnpm lint— 0 erros (349 avisos já existentes);pnpm lint:channels— passou;pnpm lint:role-rank— passou;pnpm release:conferir— passou (1.20.0 + patch = 1.20.1);pnpm build— compilação, TypeScript, páginas estáticas e otimização passaram;pnpm test:unit --maxWorkers=4terminou com 8.351 testespassando, 20 falhando e 1 expected fail em 792 arquivos. Os 14 failures
observados nas três famílias representativas também reproduzem no commit
original sem este PR (
leads-import-route,namespace-das-imagenserascunho-superado-nao-e-regravado), portanto não são atribuídos a estamudança.
regressão voltam a falhar; restaurando-o, os 8 passam.
O que NÃO medi
Esses ambientes não estão disponíveis neste clone; a mudança não altera SQL,
RLS ou serviços externos.
Living System Checklist
ImportContactsDialog→useImportContacts→POST /api/v1/contacts/import.emit_eventcomcontact.createdeauditcomcontacts.imported.por número de linha; a lista existente de contatos é invalidada pelo hook.
corrigir/repetir sem perder o restante do lote.
ao operador; a próxima importação consulta os contatos gravados para evitar
novos duplicados.
Crédito: @Tong-bit-art.