Relatório de Execução Playwright e Correlação com Código
Data: 2026-05-14 Escopo: execução E2E web (desktop e mobile) em https://meu.canta.app
Resumo da execução
- Total de cenários: 16
- Aprovados: 8
- Falhas: 8
- Artefatos: app/e2e/playwright/reports/html e app/e2e/playwright/reports/artifacts
- Resultado bruto: app/e2e/playwright/reports/results.json
Achados priorizados
1) CRÍTICO - Login Google no web quebra com erro de runtime
- Erro: TypeError: Cannot read properties of undefined (reading 'authorize')
- Evidência: execução de 60-console-regression e logs no results.json
- Correlação:
- app/src/arch/auth/Auth.ts:1
- app/src/arch/auth/Auth.ts:39
- Diagnóstico: chamada de authorize no fluxo web sem proteção específica.
2) CRÍTICO - Salvar momento/tonalidade gera mutação em objeto readonly
- Erro: TypeError: Cannot assign to read only property 'valor' of object
- Evidência: observado na exploração e documentado no plano de testes
- Correlação:
- app/src/repository/repertorios/RepertoriosRepository.ts:449
- app/src/repository/repertorios/RepertoriosRepository.ts:450
- app/src/view/screen/modal/MomentoModalScreen.tsx:23
- app/src/view/screen/modal/TonalidadeModalScreen.tsx:23
- Diagnóstico: updateItem muta diretamente item vindo de estado imutável.
3) ALTO - Fluxos de navegação com erro reading ids
- Erro: TypeError reading ids
- Evidência: exploração documentada no plano
- Correlação:
- app/src/view/screen/MusicasRepertorioPadraoScreen.tsx:22
- app/src/store/ui/ListaMusicas/ListaMusicas.selector.ts:12
- app/src/store/ui/ListaMusicas/ListaMusicas.types.ts:49
- Diagnóstico: rota/parâmetro inesperado pode resultar em window indefinida sem guarda defensiva.
4) ALTO - Safe area sem provider em fluxos específicos
- Erro: No safe area value available (SafeAreaProvider)
- Evidência: exploração documentada no plano
- Correlação:
- app/src/App.tsx:13
- app/src/App.tsx:92
- Diagnóstico: uso de SafeAreaView sem SafeAreaProvider envolvendo a árvore principal.
5) MÉDIO - Falhas de robustez da automação
- Timeout em clique de OK do modal Biblioteca (intercept/detach)
- app/e2e/playwright/helpers/app.ts:24
- app/e2e/playwright/tests/20-repertorios-crud.spec.ts:11
- Locator frágil para primeira música em favoritas
- app/e2e/playwright/tests/40-musica-detalhes.spec.ts:14
- Clique de voltar com elemento detach
- app/e2e/playwright/tests/60-console-regression.spec.ts:53
Classificação das falhas
- Bugs de produto:
- authorize undefined no login Google web
- mutação readonly ao salvar momento/tonalidade
- ausência de guardas para window inválida em fluxo de repertório padrão
- ausência de SafeAreaProvider
- Fragilidades de automação:
- clique em OK instável
- locator genérico de primeira música
- clique em link voltar instável
Recomendação executada após este relatório
Aplicar patch técnico em duas frentes:
- Produto: auth web, updateItem sem mutação, safe area/window guards.
- E2E: robustez de modal OK, seleção de música e retorno de navegação.
Em seguida, reexecutar a suíte completa para obter delta de falhas.
Atualização pós-patch (execução realizada)
Mudanças aplicadas
Produto:
- app/src/arch/auth/Auth.ts
- Guarda explícita para web antes de chamar authorize.
- app/src/repository/repertorios/RepertoriosRepository.ts
- updateItem agora usa cópia sanitizada, sem mutação direta em objeto readonly.
- app/src/App.tsx
- SafeAreaProvider adicionado na raiz da aplicação.
- app/src/store/ui/ListaMusicas/ListaMusicas.types.ts
- Fallback defensivo em getWindowByRepertorioPadrao para evitar window indefinida.
Robustez E2E:
- app/e2e/playwright/helpers/app.ts
- dismissBibliotecaModalIfPresent com retry/fallback.
- novo helper goBackSafely.
- app/e2e/playwright/tests/20-repertorios-crud.spec.ts
- uso de goBackSafely.
- app/e2e/playwright/tests/40-musica-detalhes.spec.ts
- locator de música atualizado para link navegável.
- app/e2e/playwright/tests/60-console-regression.spec.ts
- uso de goBackSafely.
Reexecução 1 (mesmo alvo de produção)
Comando: npm run test:e2e:playwright
Resultado:
- Aprovados: 8
- Falhas: 6
- Pulados: 2
Delta vs baseline inicial (8 falhas):
- Falhas reduzidas de 8 para 6 (-2).
Observação:
- O erro authorize undefined permaneceu porque o alvo era o deploy remoto (bundle de produção já publicado), não o bundle local com patch.
Reexecução 2 (localhost com código patchado)
Comandos:
- npm run web:build
- npm run web:preview -- --host 127.0.0.1 --port 4173
- E2E_BASE_URL=http://127.0.0.1:4173 npm run test:e2e:playwright
Resultado (results.json):
- expected: 0
- unexpected: 14
- skipped: 2
Diagnóstico dessa rodada local:
- Houve alta incidência de interceptação de clique por camadas da UI durante os fluxos, contaminando a medição funcional e impedindo validação limpa de regressão de produto nessa execução.
Conclusão operacional desta rodada
- O patch foi aplicado e compilou com sucesso.
- A evidência mais útil de delta comparável com o baseline foi a reexecução contra o mesmo alvo (produção), com redução de falhas totais de 8 para 6.
- Para validar integralmente os efeitos do patch de produto no runtime, o próximo passo é publicar o build corrigido e repetir a suíte contra esse novo deploy.
Atualização pós-hardening adicional de cliques (execução realizada)
Mudanças aplicadas na suíte
- Novo helper resiliente para clique com retry, scroll central e fallback com force:
- app/e2e/playwright/helpers/app.ts
- Substituição de cliques diretos por clickResilient em specs críticas:
- app/e2e/playwright/tests/00-smoke-navigation.spec.ts
- app/e2e/playwright/tests/10-home-sugestoes.spec.ts
- app/e2e/playwright/tests/20-repertorios-crud.spec.ts
- app/e2e/playwright/tests/30-busca-filtros.spec.ts
- app/e2e/playwright/tests/50-configuracoes.spec.ts
- app/e2e/playwright/tests/60-console-regression.spec.ts
- Ajustes de fallback de navegação no CRUD/console para voltar ao detalhe do repertório quando o back retorna à lista.
- Remoção de asserts frágeis que geravam strict mode por múltiplos nós de texto equivalentes.
Reexecuções e delta observado
Rodada A (suite completa):
- Aprovados: 9
- Falhas: 5
- Pulados: 2
- Falhas restantes concentradas em:
- runtime de produto no deploy remoto (authorize undefined e readonly mutation) em 60-console-regression
- strict mode em toast de atualização na configuração mobile (corrigido na sequência)
Rodada B (suite completa após ajuste em configurações):
- Aprovados: 10
- Falhas: 4
- Pulados: 2
- Falhas restantes em:
- runtime de produto no deploy remoto em 60-console-regression (desktop)
- variação de fluxo de criação/abertura em 20-repertorios-crud
Rodada C (suite completa final desta etapa):
- Aprovados: 11
- Falhas: 3
- Pulados: 2
- Falhas concentradas apenas no chromium-desktop, por ausência de dados esperados no momento da asserção:
- 00-smoke-navigation (sugestão Domingo não encontrada)
- 10-home-sugestoes (sugestão Domingo não encontrada)
- 20-repertorios-crud (item recém-criado não encontrado na lista antes de abrir detalhe)
Conclusão desta etapa de hardening
- O ruído dominante por clique interceptado foi substancialmente reduzido com a estratégia de clickResilient.
- As falhas remanescentes passaram a refletir principalmente:
- problemas reais de runtime no deploy remoto, ou
- volatilidade de dados/estado em ambiente compartilhado de produção.
- Para estabilidade total da suíte em CI, recomenda-se:
- publicar o build com os patches de produto já aplicados localmente,
- isolar massa de dados de teste por execução,
- reduzir paralelismo ou separar cenários stateful em projeto serial dedicado.