Thanks to visit codestin.com
Credit goes to github.com

Skip to content

fix(EPIC-05): preserve per-row contact import outcomes - #766

Open
Tong-bit-art wants to merge 1 commit into
melgarafael:mainfrom
Tong-bit-art:fix/EPIC-05-contact-import-outcomes
Open

fix(EPIC-05): preserve per-row contact import outcomes#766
Tong-bit-art wants to merge 1 commit into
melgarafael:mainfrom
Tong-bit-art:fix/EPIC-05-contact-import-outcomes

Conversation

@Tong-bit-art

Copy link
Copy Markdown

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úmero
da linha; não são criados eventos contact.created duplicados.

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 linha
falhar na validação ou no insert, a segunda ainda pode ser importada.

O que mudou

  • removida a reserva antecipada de telefone/e-mail durante o parse;
  • mantida a deduplicação por organização baseada nos contatos existentes e nos
    inserts que terminaram com sucesso;
  • adicionados 8 testes de rota usando multipart real, CSV/parser/schema reais e
    um dublê somente para as fronteiras de autenticação, auditoria e Supabase;
  • adicionado fragmento de release em .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.ts8 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;
  • a suíte completa pnpm test:unit --maxWorkers=4 terminou com 8.351 testes
    passando, 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-imagens e
    rascunho-superado-nao-e-regravado), portanto não são atribuídos a esta
    mudança.
  • removendo temporariamente apenas o conserto no commit, os 6 cenários de
    regressão voltam a falhar; restaurando-o, os 8 passam.

O que NÃO medi

  • fluxo visual em navegador com banco Supabase semeado;
  • RLS/invariantes de banco com Docker;
  • integração com WAHA, workers e deploy self-hosted.

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

  • Entrada: ImportContactsDialoguseImportContactsPOST /api/v1/contacts/import.
  • Saídas: contatos persistidos, emit_event com contact.created e
    audit com contacts.imported.
  • Tela: o diálogo existente mostra total, importados, duplicados e erros
    por número de linha; a lista existente de contatos é invalidada pelo hook.
  • Porta: botão de importação já existente na tela de contatos.
  • Anti-morte: falha por linha e ação “Importar outro arquivo” permitem
    corrigir/repetir sem perder o restante do lote.
  • Laço de retorno: o resumo e a auditoria devolvem os resultados da decisão
    ao operador; a próxima importação consulta os contatos gravados para evitar
    novos duplicados.

Crédito: @Tong-bit-art.

@vercel

vercel Bot commented Sep 13, 2026

Copy link
Copy Markdown

@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

ecc-tools Bot commented Sep 13, 2026

Copy link
Copy Markdown
Contributor

ECC Tools / Security Evidence

Commit: f56cdc05e3f512c8bd4bf176dfd38aded738edf2

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

ecc-tools Bot commented Sep 13, 2026

Copy link
Copy Markdown
Contributor

ECC Tools / PR Risk Taxonomy

Commit: f56cdc05e3f512c8bd4bf176dfd38aded738edf2

PR taxonomy review recommended (neutral)

Detected 1 PR taxonomy bucket(s): CI/CD Recommendation.

Scanned 3 changed file(s).

Roadmap taxonomy buckets:

CI/CD Recommendation

CI, dependency, coverage, and contract signals should be routed into follow-up checks or verification work.

Signals:

  • API contract changes may ship without integration coverage
  • API implementation changes may ship without contract artifact updates
  • 1 CI or workflow path(s) changed

Paths:

  • app/api/v1/contacts/import/route.test.ts
  • app/api/v1/contacts/import/route.ts

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

ecc-tools Bot commented Sep 13, 2026

Copy link
Copy Markdown
Contributor

ECC Tools / Reference Set Readiness

Commit: f56cdc05e3f512c8bd4bf176dfd38aded738edf2

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 /ecc-tools analyze comments and generated manifests.

Area Status Evidence / Next Step
Deep analyzer corpus Missing Add analyzer fixture, golden, benchmark, or reference-set files that can catch analyzer regressions.
RAG/evaluator comparison Missing Add retrieval or evaluator reference-set comparison fixtures with expected ranking behavior.
PR salvage/review corpus Missing Add stale-PR, review-thread, reopen-flow, or salvage reference cases for queue cleanup automation.
Discussion triage corpus Missing Add public discussion triage fixtures, golden cases, or reference sets for informational, answered, and no-response classifications.
Harness compatibility Missing Add cross-harness, adapter-compliance, or harness-audit evidence for Claude, Codex, OpenCode, Zed, dmux, and agent surfaces.
Security evidence Missing Attach security evidence such as SBOMs, SARIF, audit reports, or AgentShield evidence packs.
CI failure-mode evidence Missing Add captured CI failure logs, dry-run fixtures, or troubleshooting docs for common workflow failure modes.

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

ecc-tools Bot commented Sep 13, 2026

Copy link
Copy Markdown
Contributor

ECC Tools / Hosted Promotion Readiness

Commit: f56cdc05e3f512c8bd4bf176dfd38aded738edf2

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 src/analyzers/fixtures/evaluator-rag-corpus.ts.
Hosted output scoring inspected 0 completed cached hosted job results.

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.

@github-actions

Copy link
Copy Markdown

Recebido, @Tong-bit-art — obrigado por isto.

Duas coisas que vão parecer erro seu e não são:

  • O check Vercel vermelho ("Authorization required to deploy") é esperado em PR de fork. A
    main faz deploy de produção e a Vercel se recusa a construir código de fora, o que está
    certo. Ele não entra no gate de merge.
  • No primeiro PR de quem nunca contribuiu aqui, os workflows ficam parados esperando
    liberação
    — política do GitHub, não sua. Enquanto isso o PR parece não ter check nenhum
    (nem o gh pr checks mostra os que estão nesse estado). Quem tria libera; você não precisa
    fazer nada.

Um mantenedor vai revisar de verdade — rodando os gates e reproduzindo o comportamento, não só
lendo o diff — e responde aqui em até um dia útil, com a medição junto, nunca com um "acho
que".

Esta mensagem é automática e não diz nada sobre o seu PR: ela é sobre o processo. O que vem
depois é pessoa.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant