[WebServer] ⚠ "next start" does not work with "output: standalone" configuration. Use "node .next/standalone/server.js" instead. [seed] radar lead existing: ed013ae5-084f-4a17-a476-d92b79ba3ee4 ✅ Radar seed completo. lead=ed013ae5-084f-4a17-a476-d92b79ba3ee4 conv=320391d3-87aa-4c9a-83c1-6f78641a3346 (frio desde 2026-07-22T15:54:52.616Z) Running 58 tests using 1 worker ✓ 1 [chromium] › tests/e2e/auth.spec.ts:5:7 › auth flow › anon GET /app/inbox redirects to /login (639ms) [WebServer] [audit] insert error new row violates row-level security policy for table "api_audit_log" ✓ 2 [chromium] › tests/e2e/auth.spec.ts:12:7 › auth flow › invalid login shows error (1.9s) ✓ 3 [chromium] › tests/e2e/auth.spec.ts:22:7 › auth flow › login form is keyboard navigable in tab order (313ms) ✓ 4 [chromium] › tests/e2e/auth.spec.ts:34:7 › auth flow › login page has no serious or critical a11y violations (576ms) ✘ 5 [chromium] › tests/e2e/degradacao-silenciosa.spec.ts:86:7 › degradação silenciosa do tempo real › com a entrega morta, a tela avisa que pode estar desatualizada (17.7s) ✓ 6 [chromium] › tests/e2e/error-pages.spec.ts:4:7 › error pages › /404 renders PT-BR copy (359ms) ✓ 7 [chromium] › tests/e2e/error-pages.spec.ts:11:7 › error pages › /403 renders sem permissão (331ms) ✘ 8 [chromium] › tests/e2e/error-pages.spec.ts:16:7 › error pages › /500 renders erro interno (5.2s) ✓ 9 [chromium] › tests/e2e/error-pages.spec.ts:21:7 › error pages › /503 renders manutenção (339ms) ✓ 10 [chromium] › tests/e2e/followup-builder.spec.ts:88:7 › followup flows — lista + criação (Task 6.1) › manager cria um fluxo e ele aparece na lista com badge Rascunho (2.9s) ✓ 11 [chromium] › tests/e2e/followup-builder.spec.ts:116:7 › followup flows — lista + criação (Task 6.1) › viewer não vê o botão de criar fluxo (RBAC) (948ms) ✓ 12 [chromium] › tests/e2e/followup-builder.spec.ts:168:7 › followup flow builder — canvas visual (Task 6.2) › manager cria um fluxo, clica na linha e o canvas React Flow abre (2.0s) ✓ 13 [chromium] › tests/e2e/followup-builder.spec.ts:192:7 › followup flow builder — canvas visual (Task 6.2) › adiciona os 4 nós via paleta e conecta trigger→wait→action→end (3.2s) ✓ 14 [chromium] › tests/e2e/followup-builder.spec.ts:239:7 › followup flow builder — canvas visual (Task 6.2) › clica no nó Aguardar e configura 10min; clica no nó Ação e configura o prompt_hint (2.5s) ✓ 15 [chromium] › tests/e2e/followup-builder.spec.ts:283:7 › followup flow builder — canvas visual (Task 6.2) › fluxo completo: montar, publicar incompleto (422 ancorado), corrigir, publicar, recarregar, rollback desabilitado (7.4s) ✓ 16 [chromium] › tests/e2e/followup-builder.spec.ts:455:7 › followup flow builder — editor de condição de aresta / ai_classify (Task 6.3) › ai_classify só publica depois de configurar class_match/no_reply/always nas arestas de saída (9.2s) ✅ Followup agent fixtures seed completo. credential=da54f96d-a690-4ebc-be23-b365c97b5600 channel_session=e3a4e9f2-ba0f-4ecc-979f-7c9d564594bc ✓ 17 [chromium] › tests/e2e/followup-builder.spec.ts:603:7 › followup flow selector no editor do agente (Task 7.2) › admin vincula um fluxo publicado ao agente, salva, e a persistência é provada via API (4.4s) ✓ 18 [chromium] › tests/e2e/followup-builder.spec.ts:707:7 › followup flow builder — controle de gatilho na PublishBar (Task 8.5) › operador arma o gatilho de Silêncio (threshold) pela UI; oferece só Manual/Silêncio; PATCH round-trips (3.0s) ✅ Followup agent fixtures seed completo. credential=da54f96d-a690-4ebc-be23-b365c97b5600 channel_session=e3a4e9f2-ba0f-4ecc-979f-7c9d564594bc [WebServer] [ai_agents/publish] event_log error null value in column "entity_kind" of relation "event_log" violates not-null constraint [WebServer] [ai-sentiment-worker] sentiment_classify_failed { [WebServer] event_id: 'a2e23a46-4471-4763-81aa-86d6de15861d', [WebServer] error: 'Unauthenticated. Configure AI_GATEWAY_API_KEY or use a provider module. Learn more: https://ai-sdk.dev/unauthenticated-ai-gateway' [WebServer] } [WebServer] [ai-sentiment-worker] sentiment_classify_failed { [WebServer] event_id: 'aebd918e-1de9-449b-bf10-383a429d9b5c', [WebServer] error: 'Unauthenticated. Configure AI_GATEWAY_API_KEY or use a provider module. Learn more: https://ai-sdk.dev/unauthenticated-ai-gateway' [WebServer] } [WebServer] [ai-sentiment-worker] sentiment_classify_failed { [WebServer] event_id: '09c7652c-aa1c-4b3c-a86a-128965468922', [WebServer] error: 'Unauthenticated. Configure AI_GATEWAY_API_KEY or use a provider module. Learn more: https://ai-sdk.dev/unauthenticated-ai-gateway' [WebServer] } [WebServer] [ai-sentiment-worker] sentiment_classify_failed { [WebServer] event_id: '133f3f2d-4ebf-4fc2-a390-b82108ed7483', [WebServer] error: 'Unauthenticated. Configure AI_GATEWAY_API_KEY or use a provider module. Learn more: https://ai-sdk.dev/unauthenticated-ai-gateway' [WebServer] } [WebServer] [ai-sentiment-worker] sentiment_classify_failed { [WebServer] event_id: 'b0652b67-fc3f-4ad0-9af9-0c8569923d85', [WebServer] error: 'Unauthenticated. Configure AI_GATEWAY_API_KEY or use a provider module. Learn more: https://ai-sdk.dev/unauthenticated-ai-gateway' [WebServer] } [WebServer] [ai-sentiment-worker] sentiment_classify_failed { [WebServer] event_id: 'a796066d-a893-4dc3-8ae5-c203e3214d9c', [WebServer] error: 'Unauthenticated. Configure AI_GATEWAY_API_KEY or use a provider module. Learn more: https://ai-sdk.dev/unauthenticated-ai-gateway' [WebServer] } [WebServer] [ai-sentiment-worker] sentiment_classify_failed { [WebServer] event_id: '21d7b82b-dd80-4a45-8415-f31fe1091708', [WebServer] error: 'Unauthenticated. Configure AI_GATEWAY_API_KEY or use a provider module. Learn more: https://ai-sdk.dev/unauthenticated-ai-gateway' [WebServer] } [WebServer] [ai-sentiment-worker] sentiment_classify_failed { [WebServer] event_id: '81a40c60-abcf-49e9-9c67-f14e8ef52183', [WebServer] error: 'Unauthenticated. Configure AI_GATEWAY_API_KEY or use a provider module. Learn more: https://ai-sdk.dev/unauthenticated-ai-gateway' [WebServer] } ✓ 19 [chromium] › tests/e2e/followup-journey.spec.ts:193:7 › followup — jornada completa (Task 8.3) › silêncio → enroll → trigger→wait→action→classify → resposta → outcome → fila (33.2s) ✅ Follow-up promise seed completo. cron_job=a819f2eb-5fb6-40fd-8e1a-80a8605e31e1 contact=c0cf3d6d-e8a4-44c5-a98b-753a5230da1e ✓ 20 [chromium] › tests/e2e/followup-queue.spec.ts:147:7 › followup queue — fila unificada (Task 7.1) › manager vê enrollment na fila, filtra por status/fluxo, cancela, e a promessa seedada aparece (4.8s) ✓ 21 [chromium] › tests/e2e/followup-queue.spec.ts:251:7 › followup queue — fila unificada (Task 7.1) › viewer vê a fila (leitura) mas não consegue cancelar — 403 client E server-side (3.2s) ✓ 22 [chromium] › tests/e2e/inbox-scope.spec.ts:32:7 › G4-02 — inbox com escopo › agent em modo own*: vê Minhas e Fila, NÃO vê Todas (943ms) ✓ 23 [chromium] › tests/e2e/inbox-scope.spec.ts:41:7 › G4-02 — inbox com escopo › manager: vê a visão Todas (1.2s) ✓ 24 [chromium] › tests/e2e/inbox-scope.spec.ts:48:7 › G4-02 — inbox com escopo › deep-link para conversa fora do escopo → estado vazio claro (sem stack trace) (2.9s) ✓ 25 [chromium] › tests/e2e/invite-lifecycle.spec.ts:177:7 › ciclo de vida do convite (ponta a ponta + adversarial) › 1. ciclo feliz: convidar → aceitar → vira agent → cai no inbox (2.8s) ✓ 26 [chromium] › tests/e2e/invite-lifecycle.spec.ts:216:7 › ciclo de vida do convite (ponta a ponta + adversarial) › 2. escopo pós-aceite: agent vê inbox/kanban, bloqueado em billing/api-tokens (2.0s) ✓ 27 [chromium] › tests/e2e/invite-lifecycle.spec.ts:233:7 › ciclo de vida do convite (ponta a ponta + adversarial) › 3. permissão pós-aceite: agent NÃO consegue convidar (403) (724ms) ✓ 28 [chromium] › tests/e2e/invite-lifecycle.spec.ts:241:7 › ciclo de vida do convite (ponta a ponta + adversarial) › 4. reuso do token: aceitar 2x é idempotente (sem membership duplicada) (1.3s) ✘ 29 [chromium] › tests/e2e/invite-lifecycle.spec.ts:268:7 › ciclo de vida do convite (ponta a ponta + adversarial) › 5. already_member: reconvidar quem já é membro → failed already_member (4.8s) - 30 [chromium] › tests/e2e/invite-lifecycle.spec.ts:277:7 › ciclo de vida do convite (ponta a ponta + adversarial) › 6. token expirado → convite inválido ou expirado - 31 [chromium] › tests/e2e/invite-lifecycle.spec.ts:289:7 › ciclo de vida do convite (ponta a ponta + adversarial) › 7. token adulterado (HMAC quebrado) → inválido - 32 [chromium] › tests/e2e/invite-lifecycle.spec.ts:303:7 › ciclo de vida do convite (ponta a ponta + adversarial) › 8. email não corresponde: logado com outra conta → mismatch - 33 [chromium] › tests/e2e/invite-lifecycle.spec.ts:317:7 › ciclo de vida do convite (ponta a ponta + adversarial) › 9. não autenticado → CTA de login, não o formulário de aceite ✓ 34 [chromium] › tests/e2e/kanban-owner-filter.spec.ts:51:5 › filtro por responsável reflete na URL e esconde leads com dono (1.5s) [WebServer] [audit] insert error new row violates row-level security policy for table "api_audit_log" [WebServer] [audit] insert error new row violates row-level security policy for table "api_audit_log" ✓ 35 [chromium] › tests/e2e/password-recovery.spec.ts:65:5 › recuperar senha: forgot → e-mail → nova senha → login com a nova (1.9s) [seed] conversation reset to queue state: e85b3416-0ac4-4689-8e31-dca29247353f ✅ Queue seed completo. conversation=e85b3416-0ac4-4689-8e31-dca29247353f ✓ 36 [chromium] › tests/e2e/queue-assign.spec.ts:70:7 › G5-03 — fila com posição + atribuição › conversa aparece na Fila com posição → worker atribui → move para Minhas (3.4s) ✓ 37 [chromium] › tests/e2e/rbac-roles.spec.ts:88:7 › rbac role matrix (spec 13 §4) › agent é bloqueado em api-tokens e billing (403) (1.7s) ✓ 38 [chromium] › tests/e2e/rbac-roles.spec.ts:102:7 › rbac role matrix (spec 13 §4) › admin acessa api-tokens e billing (login com MFA TOTP) (2.5s) ✓ 39 [chromium] › tests/e2e/rbac-roles.spec.ts:115:7 › rbac role matrix (spec 13 §4) › agent vê inbox e kanban (2.0s) ✓ 40 [chromium] › tests/e2e/rbac-roles.spec.ts:131:7 › rbac role matrix (spec 13 §4) › viewer não consegue enviar mensagem (403 no POST /api/v1/messages) (746ms) ✓ 41 [chromium] › tests/e2e/reset-password-mfa.spec.ts:53:5 › reset de senha com MFA pede o código TOTP e conclui (879ms) [seed] radar lead existing: ed013ae5-084f-4a17-a476-d92b79ba3ee4 ✅ Radar seed completo. lead=ed013ae5-084f-4a17-a476-d92b79ba3ee4 conv=320391d3-87aa-4c9a-83c1-6f78641a3346 (frio desde 2026-07-22T15:57:18.289Z) ✓ 42 [chromium] › tests/e2e/risk-radar.spec.ts:59:5 › o atendente vê no Radar a demanda aberta que esfriou sem próximo passo (1.6s) ✓ 43 [chromium] › tests/e2e/risk-radar.spec.ts:70:5 › o atendente assume a demanda direto do Radar e vira o responsável (1.9s) [WebServer] [audit] insert error new row violates row-level security policy for table "api_audit_log" ✓ 44 [chromium] › tests/e2e/signup-journey.spec.ts:17:5 › criar conta: signup → e-mail de confirmação → onboarding → re-login (1.2s) ✓ 45 [chromium] › tests/e2e/smoke.spec.ts:3:5 › home returns 200 and no console errors (202ms) [WebServer] [audit] insert error new row violates row-level security policy for table "api_audit_log" ✓ 46 [chromium] › tests/e2e/vps-fresh-onboarding.spec.ts:103:7 › J1 — onboarding do dono numa instalação fresca › J1.2 senha errada → mensagem clara, sem stack (380ms) [WebServer] [audit] insert error new row violates row-level security policy for table "api_audit_log" ✘ 47 [chromium] › tests/e2e/vps-fresh-onboarding.spec.ts:111:7 › J1 — onboarding do dono numa instalação fresca › J1.1 login do bootstrap cai no wizard (org sem onboarded_at) (20.3s) - 48 [chromium] › tests/e2e/vps-fresh-onboarding.spec.ts:120:7 › J1 — onboarding do dono numa instalação fresca › J1.12 /app/inbox antes de concluir → volta pro onboarding - 49 [chromium] › tests/e2e/vps-fresh-onboarding.spec.ts:127:7 › J1 — onboarding do dono numa instalação fresca › J1.3 + J1.4 welcome: termos obrigatórios; salva nome/timezone e avança - 50 [chromium] › tests/e2e/vps-fresh-onboarding.spec.ts:149:7 › J1 — onboarding do dono numa instalação fresca › J1.5 WAHA ativo → QR code aparece de verdade - 51 [chromium] › tests/e2e/vps-fresh-onboarding.spec.ts:167:7 › J1 — onboarding do dono numa instalação fresca › J1.11 + J1.6 abandona e volta → retoma no step pendente; pular WhatsApp avança - 52 [chromium] › tests/e2e/vps-fresh-onboarding.spec.ts:180:7 › J1 — onboarding do dono numa instalação fresca › J1.7 setup IA: cria agente default e avança - 53 [chromium] › tests/e2e/vps-fresh-onboarding.spec.ts:194:7 › J1 — onboarding do dono numa instalação fresca › J1.8 convite SEM Resend: a UI não pode mentir que enviou email - 54 [chromium] › tests/e2e/vps-fresh-onboarding.spec.ts:221:7 › J1 — onboarding do dono numa instalação fresca › J1.9 done → onboarded_at setado e cai no inbox - 55 [chromium] › tests/e2e/vps-fresh-onboarding.spec.ts:233:7 › J1 — onboarding do dono numa instalação fresca › J1.10 gate MFA: enrola TOTP e VÊ os códigos de recuperação (regressão do bug do gate) - 56 [chromium] › tests/e2e/vps-fresh-onboarding.spec.ts:296:7 › J1 — onboarding do dono numa instalação fresca › J1.13 wizard não reabre depois de concluído [WebServer] {"level":"warn","msg":"[ai-dispatcher.rate-limit] redis incr failed; falling back to in-memory","ts":"2026-07-27T15:57:54.064Z","error":"fetch failed","bucket":"webhook_in:VU4ZX-9CgP1P4YxeaM68v8KB_4-IQ6Zi"} [WebServer] [audit] insert error new row violates row-level security policy for table "api_audit_log" [WebServer] [audit] insert error new row violates row-level security policy for table "api_audit_log" [WebServer] [audit] insert error new row violates row-level security policy for table "api_audit_log" ✓ 57 [chromium] › tests/e2e/vps-webhook-outbound-ssrf.spec.ts:95:7 › J6.8 — anti-SSRF do outbound call_webhook (real, ponta a ponta) › regra call_webhook para host interno → run falha e receiver recebe ZERO hits (10.8s) [WebServer] {"level":"warn","msg":"[ai-dispatcher.rate-limit] redis incr failed; falling back to in-memory","ts":"2026-07-27T15:58:04.161Z","error":"fetch failed","bucket":"webhook_in:e7loOe-Np4N1LjkTAPgvzoaPh1XuTmse"} [WebServer] {"level":"warn","msg":"[ai-dispatcher.rate-limit] redis incr failed; falling back to in-memory","ts":"2026-07-27T15:58:10.112Z","error":"fetch failed","bucket":"webhook_in:e7loOe-Np4N1LjkTAPgvzoaPh1XuTmse"} [WebServer] [audit] insert error new row violates row-level security policy for table "api_audit_log" [WebServer] [audit] insert error new row violates row-level security policy for table "api_audit_log" ✘ 58 [chromium] › tests/e2e/webhooks.spec.ts:102:7 › webhooks & automações — fluxo completo › cria fonte, cria automação, dispara lead real, confere atividade e kanban; agent sem acesso (23.8s) 1) [chromium] › tests/e2e/error-pages.spec.ts:16:7 › error pages › /500 renders erro interno ───── Error: expect(locator).toBeVisible() failed Locator: getByText(/erro interno/i) Expected: visible Timeout: 5000ms Error: element(s) not found Call log: - Expect "toBeVisible" with timeout 5000ms - waiting for getByText(/erro interno/i) 16 | test("/500 renders erro interno", async ({ page }) => { 17 | await page.goto("/500"); > 18 | await expect(page.getByText(/erro interno/i)).toBeVisible(); | ^ 19 | }); 20 | 21 | test("/503 renders manutenção", async ({ page }) => { at /Users/rafaelmelgaco/DeskcommCRM-canais/tests/e2e/error-pages.spec.ts:18:51 Error Context: test-results/error-pages-error-pages-500-renders-erro-interno-chromium/error-context.md 2) [chromium] › tests/e2e/invite-lifecycle.spec.ts:268:7 › ciclo de vida do convite (ponta a ponta + adversarial) › 5. already_member: reconvidar quem já é membro → failed already_member Error: expect(received).toBe(expected) // Object.is equality Expected: true Received: false 271 | await loginAdminTotp(page); 272 | const { failed } = await issueInvite(page, inv.invitee_email, "agent"); > 273 | expect(failed.some((f) => f.email === inv.invitee_email && f.reason === "already_member")).toBe(true); | ^ 274 | await ctx.close(); 275 | }); 276 | at /Users/rafaelmelgaco/DeskcommCRM-canais/tests/e2e/invite-lifecycle.spec.ts:273:96 Error Context: test-results/invite-lifecycle-ciclo-de--5cd10-bro-→-failed-already-member-chromium/error-context.md 3) [chromium] › tests/e2e/vps-fresh-onboarding.spec.ts:111:7 › J1 — onboarding do dono numa instalação fresca › J1.1 login do bootstrap cai no wizard (org sem onboarded_at) TimeoutError: page.waitForURL: Timeout 20000ms exceeded. =========================== logs =========================== waiting for navigation until "load" ============================================================ 113 | expect(before.onboarded_at).toBeNull(); 114 | await login(page); > 115 | await page.waitForURL(/\/onboarding/, { timeout: 20_000 }); | ^ 116 | await expect(page).toHaveURL(/\/onboarding\/welcome/); 117 | await snap(page, "j1.1-welcome"); 118 | }); at /Users/rafaelmelgaco/DeskcommCRM-canais/tests/e2e/vps-fresh-onboarding.spec.ts:115:16 Error Context: test-results/vps-fresh-onboarding-J1-—--3d906-izard-org-sem-onboarded-at--chromium/error-context.md 4) [chromium] › tests/e2e/webhooks.spec.ts:102:7 › webhooks & automações — fluxo completo › cria fonte, cria automação, dispara lead real, confere atividade e kanban; agent sem acesso Error: expect(locator).toBeVisible() failed Locator: getByRole('heading', { name: 'Ana E2E 1785167877522' }).locator('xpath=ancestor::div[contains(concat(\' \', normalize-space(@class), \' \'), \' border-border \')][1]').getByText('e2e-tag') Expected: visible Timeout: 5000ms Error: element(s) not found Call log: - Expect "toBeVisible" with timeout 5000ms - waiting for getByRole('heading', { name: 'Ana E2E 1785167877522' }).locator('xpath=ancestor::div[contains(concat(\' \', normalize-space(@class), \' \'), \' border-border \')][1]').getByText('e2e-tag') 236 | "xpath=ancestor::div[contains(concat(' ', normalize-space(@class), ' '), ' border-border ')][1]", 237 | ); > 238 | await expect(leadCard.getByText(TAG)).toBeVisible(); | ^ 239 | 240 | // --- Step 9: AGENT não vê "Webhooks" e é redirecionado --- 241 | const agentContext = await browser.newContext(); at /Users/rafaelmelgaco/DeskcommCRM-canais/tests/e2e/webhooks.spec.ts:238:45 Error Context: test-results/webhooks-webhooks-automaçõ-64c41-e-e-kanban-agent-sem-acesso-chromium/error-context.md 4 failed [chromium] › tests/e2e/error-pages.spec.ts:16:7 › error pages › /500 renders erro interno ────── [chromium] › tests/e2e/invite-lifecycle.spec.ts:268:7 › ciclo de vida do convite (ponta a ponta + adversarial) › 5. already_member: reconvidar quem já é membro → failed already_member [chromium] › tests/e2e/vps-fresh-onboarding.spec.ts:111:7 › J1 — onboarding do dono numa instalação fresca › J1.1 login do bootstrap cai no wizard (org sem onboarded_at) [chromium] › tests/e2e/webhooks.spec.ts:102:7 › webhooks & automações — fluxo completo › cria fonte, cria automação, dispara lead real, confere atividade e kanban; agent sem acesso 13 did not run 41 passed (3.6m) exit=1