mirror of
https://github.com/fsolla/teqo.git
synced 2026-11-13 15:13:07 +00:00
2.6 KiB
2.6 KiB
Impl: PetitionForm — Lead dentro do try pode transformar assinatura commitada em erro (retry duplica)
Status: rascunho Atualizado em: 2026-08-24 Issue: #766 Intenção: body da Issue #766 (sem plano de intenção separado — body é a spec) Appetite restante: herdado (chore P3, ~4 linhas + teste)
Leitura da intenção
- Outcome: falha de tracking (
crypto.randomUUIDem contexto não-secure, navegadores antigos) nunca mais vira erro de UI após assinatura commitada — eliminando retry duplicado e re-disparo deLead. - O que NÃO negociar: assinatura commitada deve sempre mostrar sucesso; tracking invisível ao visitante; no máximo um
Leadpor captura. - O que reavaliar: nada — padrão já resolvido no S10 (
CampaignNewsletterForm), replicar noPetitionForm.
Abordagem recomendada
flowchart LR
A[submitPetitionSignature ok] --> B{facebookPixelId set?}
B -- sim --> C[try trackMetaLead]
C -- throw --> D[catch vazio — tracking invisível]
B -- não --> E[reset + sucesso]
C -- ok --> E
Opções consideradas: A) guarda interna try/catch no bloco de tracking; B) mover tracking para fora do try de submit.
Recomendação: A — espelha exatamente o padrão S10 já aplicado e revisado em CampaignNewsletterForm.tsx:59-65.
Rejeitadas: B — cria fluxo de sucesso fora do try com estado sutil; divergiria do precedente consolidado.
Componentes / mudanças
PetitionForm.onSubmit(src/components/PetitionForm.tsx): envolvertrackMetaLead(...)emtry/catchpróprio com catch vazio.- Migration: sem migration.
- Access / Consent: não se aplica.
- UI: nenhuma mudança de UI.
Fases verificáveis
- Código — guarda interna no
PetitionForm(~4 linhas). - Teste — unit espelhando
campaignNewsletterLead.unit.spec.tsx: Lead uma vez com pixel em captura ok; tracking que lança não vira erro de UI; nenhum Lead sem pixel. - Gates —
pnpm gate:fast; push viapnpm push.
Rabbit holes / Não escopo (engenharia)
- Não mexer no
trackMetaLead(já no-op seguro semfbq). - Não tocar no
CampaignNewsletterForm(já corrigido). - Sem e2e novo: superfície já coberta por e2e existente da petição; o teste unit cobre o contrato do Lead.
Riscos e mitigação
- Teste unit do form é frágil (jsdom + Radix comboboxes): copiar scaffolding já provado do spec S10 (ResizeObserver stub,
fireEvent.inputnativo). Baixo.
Aceite de engenharia
- Aceite de produto da intenção ainda coberto
- Invariantes AGENTS/engineering-standards
- Testes de domínio previstos (unit) onde write paths mudam