
> deskcomm-crm@0.1.0 test:e2e /Users/rafaelmelgaco/DeskcommCRM-canais
> playwright test

[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:27:56.808Z)

Running 58 tests using 5 workers


✅ Followup agent fixtures seed completo. credential=da54f96d-a690-4ebc-be23-b365c97b5600 channel_session=e3a4e9f2-ba0f-4ecc-979f-7c9d564594bc
  ✓   5 [chromium] › tests/e2e/auth.spec.ts:5:7 › auth flow › anon GET /app/inbox redirects to /login (1.1s)
  ✓   1 [chromium] › tests/e2e/error-pages.spec.ts:4:7 › error pages › /404 renders PT-BR copy (1.2s)
  ✓   7 [chromium] › tests/e2e/error-pages.spec.ts:11:7 › error pages › /403 renders sem permissão (417ms)
[WebServer] [audit] insert error new row violates row-level security policy for table "api_audit_log"
  ✓   6 [chromium] › tests/e2e/auth.spec.ts:12:7 › auth flow › invalid login shows error (2.4s)
  ✓   9 [chromium] › tests/e2e/auth.spec.ts:22:7 › auth flow › login form is keyboard navigable in tab order (844ms)
  ✓   3 [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 (4.9s)
  ✓  10 [chromium] › tests/e2e/auth.spec.ts:34:7 › auth flow › login page has no serious or critical a11y violations (1.3s)
  ✘   8 [chromium] › tests/e2e/error-pages.spec.ts:16:7 › error pages › /500 renders erro interno (5.3s)

✅ Follow-up promise seed completo. cron_job=98f19b12-1822-4a9d-a697-e341461f1e92 contact=c0cf3d6d-e8a4-44c5-a98b-753a5230da1e
  ✓  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) (2.6s)
  ✓  14 [chromium] › tests/e2e/error-pages.spec.ts:21:7 › error pages › /503 renders manutenção (454ms)
  ✓  15 [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 (2.5s)
  ✓  13 [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 (5.3s)
  ✓  16 [chromium] › tests/e2e/inbox-scope.spec.ts:41:7 › G4-02 — inbox com escopo › manager: vê a visão Todas (3.9s)
  ✘   4 [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 (20.5s)
  ✓  17 [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 (8.7s)
  ✓  12 [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 (15.2s)
  ✓  18 [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) (8.9s)
[WebServer] [ai_agents/publish] event_log error null value in column "entity_kind" of relation "event_log" violates not-null constraint
[WebServer] {"level":"error","msg":"[followup-flow-worker.cron] runSilenceSweep threw","ts":"2026-07-27T15:28:33.888Z","error":"","requestId":"9b664281-8081-4bfc-a8ae-bf2ef1ac90c4"}
[WebServer] [audit] insert error Database client error. Retrying the connection.
  ✘  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 (10.2s)
  ✘  22 [chromium] › tests/e2e/kanban-owner-filter.spec.ts:51:5 › filtro por responsável reflete na URL e esconde leads com dono (10.2s)
[WebServer] [audit] insert error Could not query the database for the schema cache. Retrying.
[WebServer] {"level":"error","msg":"[followup-flow-worker.cron] runSilenceSweep threw","ts":"2026-07-27T15:28:36.610Z","error":"Could not query the database for the schema cache. Retrying.","requestId":"65e29580-d4a1-46c6-84bb-cbf3917d1af0"}
  ✘  23 [chromium] › tests/e2e/password-recovery.spec.ts:65:5 › recuperar senha: forgot → e-mail → nova senha → login com a nova (0ms)
[seed] conversation reset to queue state: e85b3416-0ac4-4689-8e31-dca29247353f

✅ Queue seed completo. conversation=e85b3416-0ac4-4689-8e31-dca29247353f
  ✓  25 [chromium] › tests/e2e/rbac-roles.spec.ts:88:7 › rbac role matrix (spec 13 §4) › agent é bloqueado em api-tokens e billing (403) (4.3s)
  ✓  19 [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 (7.6s)
  ✓  24 [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 (8.1s)
  ✓  26 [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) (5.8s)
  ✓  28 [chromium] › tests/e2e/reset-password-mfa.spec.ts:53:5 › reset de senha com MFA pede o código TOTP e conclui (3.8s)
  ✘  20 [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 (30.1s)
[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:28:54.524Z)
  ✓  29 [chromium] › tests/e2e/rbac-roles.spec.ts:115:7 › rbac role matrix (spec 13 §4) › agent vê inbox e kanban (5.7s)
  ✓  27 [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 (8.6s)
  ✓  32 [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) (3.3s)
[WebServer] [audit] insert error new row violates row-level security policy for table "api_audit_log"
  ✓  33 [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) (4.7s)
  ✓  31 [chromium] › tests/e2e/risk-radar.spec.ts:59:5 › o atendente vê no Radar a demanda aberta que esfriou sem próximo passo (7.5s)
  ✓  34 [chromium] › tests/e2e/signup-journey.spec.ts:17:5 › criar conta: signup → e-mail de confirmação → onboarding → re-login (6.3s)
  ✓  37 [chromium] › tests/e2e/smoke.spec.ts:3:5 › home returns 200 and no console errors (498ms)
[WebServer] [audit] insert error Could not query the database for the schema cache. Retrying.
  ✓  38 [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 (825ms)
  ✘  39 [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) (104ms)
  -  40 [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
  -  41 [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
  -  42 [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
  -  43 [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
  -  44 [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
  -  45 [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
  -  46 [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
  -  47 [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)
  -  48 [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":"error","msg":"[event-log.drain] select failed","ts":"2026-07-27T15:29:06.798Z","error":"Could not query the database for the schema cache. Retrying."}
[WebServer] [ai-sentiment-worker] sentiment_classify_failed {
[WebServer]   event_id: '520ad661-6bbd-4519-a26f-be6f8ed0d778',
[WebServer]   error: 'Unauthenticated. Configure AI_GATEWAY_API_KEY or use a provider module. Learn more: https://ai-sdk.dev/unauthenticated-ai-gateway'
[WebServer] }
  ✘  30 [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 (14.3s)
  ✘  36 [chromium] › tests/e2e/risk-radar.spec.ts:70:5 › o atendente assume a demanda direto do Radar e vira o responsável (30.1s)
  ✘  51 [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 (6.0s)
  ✘  50 [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 (30.0s)

✅ Followup agent fixtures seed completo. credential=da54f96d-a690-4ebc-be23-b365c97b5600 channel_session=e3a4e9f2-ba0f-4ecc-979f-7c9d564594bc
  ✘  52 [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 (7.3s)
  ✘  53 [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 (7.0s)
  ✘  35 [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) (3.0m)
  -  54 [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
  -  55 [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
  -  56 [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
  -  57 [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
  -  58 [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
  ✘  49 [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 (3.0m)
cleanup: falha ao desativar o fluxo apiRequestContext.post: Test timeout of 300000ms exceeded.
    at /Users/rafaelmelgaco/DeskcommCRM-canais/tests/e2e/followup-journey.spec.ts:603:28 {
  log: []
}
cleanup: falha ao arquivar o agent apiRequestContext.delete: Test timeout of 300000ms exceeded.
    at /Users/rafaelmelgaco/DeskcommCRM-canais/tests/e2e/followup-journey.spec.ts:614:36 {
  log: []
}
  ✘   2 [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 (5.0m)


  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/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 

    Test timeout of 30000ms exceeded.

    Error: page.waitForURL: Test timeout of 30000ms exceeded.
    =========================== logs ===========================
    waiting for navigation until "load"
      navigated to "http://localhost:3002/login?next=%2Fapp%2Fai%2Ffollowups%2F45c219ce-4a7c-4fef-80cc-81c9f03ff2f6"
    ============================================================

      248 |     await expect(dialog).not.toBeVisible();
      249 |     await page.locator("li", { hasText: flowName }).getByRole("link").click();
    > 250 |     await page.waitForURL(/\/app\/ai\/followups\/[0-9a-f-]+$/);
          |                ^
      251 |     await expect(page.locator(".react-flow")).toBeVisible();
      252 |
      253 |     await page.getByTestId("palette-add-wait").click();
        at /Users/rafaelmelgaco/DeskcommCRM-canais/tests/e2e/followup-builder.spec.ts:250:16

    Error Context: test-results/followup-builder-followup--01d39-o-e-configura-o-prompt-hint-chromium/error-context.md

  3) [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 

    Error: expect(locator).toBeVisible() failed

    Locator: getByText(/reprovado na validação/i)
    Expected: visible
    Timeout: 5000ms
    Error: element(s) not found

    Call log:
      - Expect "toBeVisible" with timeout 5000ms
      - waiting for getByText(/reprovado na validação/i)


      337 |     // 4. Publish INCOMPLETE — expect 422 anchored to the offending nodes.
      338 |     await page.getByTestId("publish-button").click();
    > 339 |     await expect(page.getByText(/reprovado na validação/i)).toBeVisible();
          |                                                             ^
      340 |     await expect(page.locator(`[data-testid="node-error-${waitId}"]`)).toBeVisible();
      341 |     await expect(page.locator(`[data-testid="node-error-${actionId}"]`)).toBeVisible();
      342 |     await expect(page.locator(`[data-testid="node-error-${endId}"]`)).toBeVisible();
        at /Users/rafaelmelgaco/DeskcommCRM-canais/tests/e2e/followup-builder.spec.ts:339:61

    Error Context: test-results/followup-builder-followup--a8b5b-regar-rollback-desabilitado-chromium/error-context.md

  4) [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 

    Test timeout of 30000ms exceeded.

    Error: locator.click: Test timeout of 30000ms exceeded.
    Call log:
      - waiting for getByRole('button', { name: 'Novo fluxo' })


      460 |     await page.goto("/app/ai/followups");
      461 |     const flowName = `E2E Classify ${Date.now()}`;
    > 462 |     await page.getByRole("button", { name: "Novo fluxo" }).click();
          |                                                            ^
      463 |     const dialog = page.getByRole("dialog");
      464 |     await dialog.getByLabel("Nome").fill(flowName);
      465 |     await dialog.getByRole("button", { name: "Criar fluxo" }).click();
        at /Users/rafaelmelgaco/DeskcommCRM-canais/tests/e2e/followup-builder.spec.ts:462:60

    Error Context: test-results/followup-builder-followup--bbcdc-always-nas-arestas-de-saída-chromium/error-context.md

  5) [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 

    Error: expect(locator).toBeVisible() failed

    Locator: getByRole('heading', { name: 'E2E Agente Follow-up 1785166182453' })
    Expected: visible
    Timeout: 5000ms
    Error: element(s) not found

    Call log:
      - Expect "toBeVisible" with timeout 5000ms
      - waiting for getByRole('heading', { name: 'E2E Agente Follow-up 1785166182453' })


      660 |     // --- 3. abre o editor, habilita o toggle e seleciona o fluxo publicado ---
      661 |     await page.goto(`/app/ai/agents/${agentId}`);
    > 662 |     await expect(page.getByRole("heading", { name: agentName })).toBeVisible();
          |                                                                  ^
      663 |
      664 |     const followupHeading = page.getByRole("heading", { name: "Follow-up", exact: true });
      665 |     await followupHeading.scrollIntoViewIfNeeded();
        at /Users/rafaelmelgaco/DeskcommCRM-canais/tests/e2e/followup-builder.spec.ts:662:66

    Error Context: test-results/followup-builder-followup--46628-sistência-é-provada-via-API-chromium/error-context.md

  6) [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 

    Error: expect(locator).toBeVisible() failed

    Locator: getByTestId('flow-builder-shell')
    Expected: visible
    Timeout: 5000ms
    Error: element(s) not found

    Call log:
      - Expect "toBeVisible" with timeout 5000ms
      - waiting for getByTestId('flow-builder-shell')


      718 |     try {
      719 |       await page.goto(`/app/ai/followups/${flow.id}`);
    > 720 |       await expect(page.getByTestId("flow-builder-shell")).toBeVisible();
          |                                                            ^
      721 |
      722 |       // Draft novo nasce trigger_config={kind:'manual'} — o botão mostra isso sem precisar abrir o popover.
      723 |       const triggerButton = page.getByTestId("trigger-config-button");
        at /Users/rafaelmelgaco/DeskcommCRM-canais/tests/e2e/followup-builder.spec.ts:720:60

    Error Context: test-results/followup-builder-followup--fd2c8--Silêncio-PATCH-round-trips-chromium/error-context.md

  7) [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 

    Test timeout of 300000ms exceeded.

    Error: locator.click: Test timeout of 300000ms exceeded.
    Call log:
      - waiting for getByRole('tab', { name: 'Fila' })


      580 |
      581 |       await page.reload();
    > 582 |       await page.getByRole("tab", { name: "Fila" }).click();
          |                                                     ^
      583 |       await page.getByLabel("Buscar contato").fill(seed.contactName);
      584 |       const finalRow = page
      585 |         .locator('[data-testid="queue-row"]', { hasText: seed.contactName })
        at /Users/rafaelmelgaco/DeskcommCRM-canais/tests/e2e/followup-journey.spec.ts:582:53

    Error Context: test-results/followup-journey-followup--2b3ab-→-resposta-→-outcome-→-fila-chromium/error-context.md

  8) [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 

    Error: expect(received).toBe(expected) // Object.is equality

    Expected: 201
    Received: 401

      122 |
      123 |   const createContactRes = await page.request.post("/api/v1/contacts", { data: { display_name: contactName } });
    > 124 |   expect(createContactRes.status()).toBe(201);
          |                                     ^
      125 |   const { data: contactResult } = (await createContactRes.json()) as ApiOk<{ contact: { id: string } }>;
      126 |
      127 |   const createEnrollmentRes = await page.request.post("/api/v1/ai/followups/enrollments", {
        at createLiveEnrollment (/Users/rafaelmelgaco/DeskcommCRM-canais/tests/e2e/followup-queue.spec.ts:124:37)
        at /Users/rafaelmelgaco/DeskcommCRM-canais/tests/e2e/followup-queue.spec.ts:254:18

    Error Context: test-results/followup-queue-followup-qu-f68ba--—-403-client-E-server-side-chromium/error-context.md

  9) [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) 

    Test timeout of 180000ms exceeded.

    Error: page.waitForURL: Test ended.
    =========================== logs ===========================
    waiting for navigation until "load"
    ============================================================

      260 |     await page.goto(`/team/accept-invite/${token}`);
      261 |     await page.getByRole("button", { name: /Aceitar convite/i }).click();
    > 262 |     await page.waitForURL(/\/app\/inbox/);
          |                ^
      263 |     // sem duplicar membership
      264 |     expect(await membershipCount()).toBe(1);
      265 |     await ctx.close();
        at /Users/rafaelmelgaco/DeskcommCRM-canais/tests/e2e/invite-lifecycle.spec.ts:262:16

    Error Context: test-results/invite-lifecycle-ciclo-de--c26d1-e-sem-membership-duplicada--chromium/error-context.md

  10) [chromium] › tests/e2e/kanban-owner-filter.spec.ts:51:5 › filtro por responsável reflete na URL e esconde leads com dono 

    Error: expect(locator).toBeVisible() failed

    Locator: getByRole('heading', { name: 'Pedido E2E com responsavel' })
    Expected: visible
    Timeout: 5000ms
    Error: element(s) not found

    Call log:
      - Expect "toBeVisible" with timeout 5000ms
      - waiting for getByRole('heading', { name: 'Pedido E2E com responsavel' })


      55 |   const owned = page.getByRole("heading", { name: "Pedido E2E com responsavel" });
      56 |   const unowned = page.getByRole("heading", { name: "Pedido E2E sem responsavel" });
    > 57 |   await expect(owned).toBeVisible();
         |                       ^
      58 |   await expect(unowned).toBeVisible();
      59 |   // A badge de ausência de dono está presente em ao menos um card.
      60 |   await expect(page.getByText("Sem responsável").first()).toBeVisible();
        at /Users/rafaelmelgaco/DeskcommCRM-canais/tests/e2e/kanban-owner-filter.spec.ts:57:23

    Error Context: test-results/kanban-owner-filter-filtro-94327-RL-e-esconde-leads-com-dono-chromium/error-context.md

  11) [chromium] › tests/e2e/password-recovery.spec.ts:65:5 › recuperar senha: forgot → e-mail → nova senha → login com a nova 

    Error: seed org: Could not query the database for the schema cache. Retrying.

      52 |     .select("id")
      53 |     .single();
    > 54 |   if (orgError || !org) throw new Error(`seed org: ${orgError?.message}`);
         |                               ^
      55 |
      56 |   const { error: memberError } = await admin.from("user_organizations").insert({
      57 |     user_id: data.user.id,
        at /Users/rafaelmelgaco/DeskcommCRM-canais/tests/e2e/password-recovery.spec.ts:54:31

    Error Context: test-results/password-recovery-recupera-d0a34-va-senha-→-login-com-a-nova-chromium/error-context.md

  12) [chromium] › tests/e2e/risk-radar.spec.ts:70:5 › o atendente assume a demanda direto do Radar e vira o responsável 

    Test timeout of 30000ms exceeded.

    Error: page.waitForURL: Test timeout of 30000ms exceeded.
    =========================== logs ===========================
    waiting for navigation until "load"
      navigated to "http://localhost:3002/login?next=%2Fapp%2Fradar"
    ============================================================

      49 | async function gotoRadar(page: Page): Promise<void> {
      50 |   await page.getByRole("link", { name: "Radar" }).click();
    > 51 |   await page.waitForURL(/\/app\/radar/);
         |              ^
      52 |   await expect(page.getByRole("heading", { name: "Radar de risco" })).toBeVisible();
      53 | }
      54 |
        at gotoRadar (/Users/rafaelmelgaco/DeskcommCRM-canais/tests/e2e/risk-radar.spec.ts:51:14)
        at /Users/rafaelmelgaco/DeskcommCRM-canais/tests/e2e/risk-radar.spec.ts:72:3

    Error Context: test-results/risk-radar-o-atendente-ass-b35d9--Radar-e-vira-o-responsável-chromium/error-context.md

  13) [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) 

    {
      code: 'PGRST002',
      details: null,
      hint: null,
      message: 'Could not query the database for the schema cache. Retrying.'
    }

  14) [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 

    Test timeout of 180000ms exceeded.

    Error: locator.click: Test timeout of 180000ms exceeded.
    Call log:
      - waiting for getByRole('link', { name: 'Webhooks' })


      103 |       // --- fonte inbound (para gerar o lead que dispara a regra) ---
      104 |       await login(page, creds.users.manager!.email);
    > 105 |       await page.getByRole("link", { name: "Webhooks" }).click();
          |                                                          ^
      106 |       await page.waitForURL(/\/app\/webhooks/);
      107 |       await page.getByRole("button", { name: /Nova fonte|Criar primeira fonte/ }).click();
      108 |       await page.locator("#src-name").fill(SOURCE_NAME);
        at /Users/rafaelmelgaco/DeskcommCRM-canais/tests/e2e/vps-webhook-outbound-ssrf.spec.ts:105:58

    Error Context: test-results/vps-webhook-outbound-ssrf--e9f14-e-receiver-recebe-ZERO-hits-chromium/error-context.md

    Error Context: test-results/vps-webhook-outbound-ssrf--e9f14-e-receiver-recebe-ZERO-hits-chromium/error-context.md

  15) [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('link', { name: 'Webhooks' })
    Expected: visible
    Timeout: 5000ms
    Error: element(s) not found

    Call log:
      - Expect "toBeVisible" with timeout 5000ms
      - waiting for getByRole('link', { name: 'Webhooks' })


      112 |       // --- Step 1: login como manager; sidebar mostra "Webhooks" ---
      113 |       await login(page, creds.users.manager!.email);
    > 114 |       await expect(page.getByRole("link", { name: "Webhooks" })).toBeVisible();
          |                                                                  ^
      115 |       await page.getByRole("link", { name: "Webhooks" }).click();
      116 |       await page.waitForURL(/\/app\/webhooks/);
      117 |
        at /Users/rafaelmelgaco/DeskcommCRM-canais/tests/e2e/webhooks.spec.ts:114:66

    Error Context: test-results/webhooks-webhooks-automaçõ-64c41-e-e-kanban-agent-sem-acesso-chromium/error-context.md

  Slow test file: [chromium] › tests/e2e/followup-journey.spec.ts (5.0m)
  Consider running tests from slow files in parallel. See: https://playwright.dev/docs/test-parallel
  15 failed
    [chromium] › tests/e2e/error-pages.spec.ts:16:7 › error pages › /500 renders erro interno ──────
    [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 
    [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 
    [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 
    [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 
    [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 
    [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 
    [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 
    [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) 
    [chromium] › tests/e2e/kanban-owner-filter.spec.ts:51:5 › filtro por responsável reflete na URL e esconde leads com dono 
    [chromium] › tests/e2e/password-recovery.spec.ts:65:5 › recuperar senha: forgot → e-mail → nova senha → login com a nova 
    [chromium] › tests/e2e/risk-radar.spec.ts:70:5 › o atendente assume a demanda direto do Radar e vira o responsável 
    [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/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 
    [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 
  14 did not run
  29 passed (5.2m)
 ELIFECYCLE  Command failed with exit code 1.
exit=1
