landing-002 — Share viral — gerar link de referral (attribution-only)
CEO doc (decisão 2026-06-03) substituiu a mecânica de waitlist + subir-na-fila por attribution-only: o casal compartilha um link, o parceiro/amigo entra no whats, o bot registra quem-convidou-quem via cenário 016 refactored. K-factor vira analytics de atribuição, não rank-up mechanic. Sem fila, sem posição, sem “sobe N”.
Este cenário cobre o lado emissor do link:
- Geração — casal já com
Household(cookie/localStoragemel.householdIdsetado pelo bot via deep link inicial ou cross-device upgrade — fora do escopo da landing) abre/compartilhar(ou modal disparada pela CTA secundária do landing-001) e recebe um share link único. - Copy / Share — clica em “Copiar link” (clipboard) ou “Compartilhar via apps” (Web Share API quando disponível, fallback pra copy).
- Attribution acontece fora desta landing: o parceiro abre o link
?ref=<token>(cenário landing-001 cobre o prefill), clica na CTA → cai no whats comref-<token>→ bot dispara cenário 016 refactored.
O backend é mockado nesses e2e — sem rede real. Endpoint GET /api/referral-issue?householdId=<id> devolve { shareToken: "tok_abc123" } determinístico (impl decide: emissão por chamada ou idempotente por household).
Sem fila. Sem rank-up. Wording de UX evita “sobe N posições”, “fila”, “waitlist”. O texto do toast/feedback fala “link copiado” ou “compartilhe com seu parceiro” — sem promessa de upgrade.
Scenario: Casal autenticado abre /compartilhar, vê link e copia pra clipboard
Section titled “Scenario: Casal autenticado abre /compartilhar, vê link e copia pra clipboard”- Given o visitante tem
localStorage.mel.householdId = "hh-x"(cookie/localStorage local — anonymous-first, ADR 006; bot setou via cross-device upgrade) - And o backend mockado resolve
GET /api/referral-issue?householdId=hh-x→{ shareToken: "tok_abc123" } - When o visitante abre
/compartilhar(ou modal acionada pela CTA secundária do landing-001) - Then o elemento
share-linkmostra a URL absolutahttps://<host>/?ref=tok_abc123(formatohttps?://<host>/?ref=<token>) - When clica em “Copiar link”
- Then a clipboard contém a URL absoluta
https://<host>/?ref=tok_abc123 - And o
share-toastaparece com feedback visual (texto regex/copiad|link/i, sem menção a “fila” ou “posição”)
Scenario: Web Share API disponível — dispara navigator.share
Section titled “Scenario: Web Share API disponível — dispara navigator.share”- Given o visitante já tem
localStorage.mel.householdId = "hh-x"e abriu/compartilhar - And o browser suporta
navigator.share(spec injeta stub viapage.evaluateantes do click) - When clica em “Compartilhar via apps”
- Then
navigator.shareé chamado com{ url, text }contendo a URL?ref=tok_abc123 - And o spec captura a chamada via
window.__shareCalled
(Quando navigator.share não existe, a UX deve cair em copy automaticamente — comportamento testado implicitamente no cenário anterior.)