From 06bf1cad0c8c1efca8e1fafd797220343a683867 Mon Sep 17 00:00:00 2001 From: Francisco Solla Date: Tue, 11 Aug 2026 07:37:44 -0300 Subject: [PATCH] =?UTF-8?q?chore(D11):=20chrome=20comum=20dos=20passos=20f?= =?UTF-8?q?inais=20do=20wizard=20=E2=80=94=20WizardStepFormChrome=20+=20De?= =?UTF-8?q?mandFields?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../e2e-combobox-label-strict-mode-flake.md | 36 ++++ .../plans/escala-dry-pos-wizard-steps-impl.md | 86 +++++++++ .../campaign/demand/DemandFields.tsx | 175 ++++++++++++++++++ src/components/campaign/demand/DemandForm.tsx | 133 ++----------- .../municipality/WizardTrendNoteStep.tsx | 50 ++--- .../municipality/WizardUpdateBodyStep.tsx | 30 +-- .../shared/WizardExpectedVotesStep.tsx | 34 +--- .../shared/WizardRegisterDemandStep.tsx | 114 ++---------- .../campaign/shared/WizardStepFormChrome.tsx | 89 +++++++++ 9 files changed, 451 insertions(+), 296 deletions(-) create mode 100644 docs/plans/e2e-combobox-label-strict-mode-flake.md create mode 100644 docs/plans/escala-dry-pos-wizard-steps-impl.md create mode 100644 src/components/campaign/demand/DemandFields.tsx create mode 100644 src/components/campaign/shared/WizardStepFormChrome.tsx diff --git a/docs/plans/e2e-combobox-label-strict-mode-flake.md b/docs/plans/e2e-combobox-label-strict-mode-flake.md new file mode 100644 index 00000000..6810971d --- /dev/null +++ b/docs/plans/e2e-combobox-label-strict-mode-flake.md @@ -0,0 +1,36 @@ +# E2E: flake do `getByLabel('Atividade relacionada')` (strict mode) sob carga + +Status: rascunho +Atualizado em: 2026-08-11 +Issue: #619 (D11) colheu; registro D12 +Priority: P3 +Kind: defect +Depends: [] — pré-existente em main, não nasce do D11 + +## O sintoma + +`tests/e2e/campaignRegisterDemand.e2e.spec.ts:38` — `expect(page.getByLabel(CAMPAIGN_DEMAND_ACTIVITY_LABEL)).toBeVisible()` (label `Atividade relacionada`) falha com **strict mode violation: resolved to 2 elements**, ambos botões com `aria-label="Atividade relacionada: Nenhuma atividade"` (o trigger do `AsyncSearchCombobox`). + +## Caracterização (colhida no D11, 2026-08-11) + +- **Falha em runs completos, passa isolado:** 3/4 runs completos do set (dev e prod/E2E_PROD=1) falharam; o teste isolado passa sempre (dev e prod). +- **Pré-existente:** `git stash` no worktree do D11 (código 100% main) reproduziu a falha **idêntica** no mesmo teste — inclusive o mesmo diretório de error-context. Não é regressão do D11. +- **Ambiente:** máquina do pool com carga alta (compiles dev de 6–27s; asserts com budget 10s). O erro aparece como violação de strict mode em `getByLabel`, que é substring-match: casam o trigger button (aria-label `Atividade relacionada: …`) e um segundo nó. +- **Snapshot pós-falha:** o form renderizado mostra um único trigger e o conteúdo do `CommandDialog` (título + descrição) montado no DOM com o dialog fechado — o segundo match é transitório/estado de reconciliação, não duas instâncias estáveis do componente. + +## Hipóteses a investigar (sem implementação aqui) + +1. `AsyncSearchCombobox` renderiza `CommandDialog` com conteúdo sempre montado: `CommandInput` tem `aria-label={label}` (o label exato, sem sufixo) — candidato natural a segundo match quando visível à a11y tree (possível `forceMount`/transição do Radix/cmdk). +2. Mesmo nó resolvido duas vezes por caminhos de label distintos (aria-label + associação via `