6 KiB
Onda 0 — go-live MVP (Consent + privacidade)
Status: implementado (engenharia)
Atualizado em: 2026-07-19
Item do roadmap: docs/roadmap.md (Onda 0 — Caminho crítico para /campanha em produção)
Responsável: —
Contexto
O MVP de Núcleos e o cadastro nominal de apoiadores (C2) estão em main e falham fechado sem as chaves estáveis de Consent e sem o Aviso de Privacidade publicado. A assessoria jurídica eleitoral ainda não entregou os textos finais; para desbloquear engenharia, QA e smoke operacional, a Onda 0 provisiona textos provisórios automaticamente em local e produção via migrations, com hold explícito de PII real até revisão jurídica.
Objetivos
- Provisionar automaticamente (local + prod via
pnpm migrate/ build Vercel) as quatro chaves deConsente o Globalprivacy-policypublicado. - Expor
/privacidadeno site público e corrigir links mortos (Footer, ficha de apoiador). - Manter fail-closed do runtime; não cadastrar lideranças/apoiadores reais antes da assessoria eleitoral substituir os textos.
- Oferecer
pnpm db:seed:consentcomo espelho idempotente para re-aplicar textos após edição no repo.
Decisões travadas
- Assessoria provisória no MVP (2026-07-19). A implementação redige textos utilizáveis em pt-BR com banner de status provisório. Não substituem parecer jurídico nem RIPD formal.
- Provisionamento automático. Migration de schema (
privacy-policyglobal) + migration de dados (seed_onda0_consent_and_privacy) aplicadas no deploy; sem passo manual de colar no admin. - Hold de PII real. Não importar CSV real, não convidar lideranças reais, não cadastrar apoiadores reais até substituição dos textos pela assessoria eleitoral.
- Fonte canônica dos textos:
src/lib/onda0ConsentTexts.ts+src/utilities/onda0Provision.ts. - i18n e naming seguem o AGENTS.md: identificadores em inglês (
privacy-policy,provisionOnda0ConsentAndPrivacy); strings visíveis em pt-BR.
Chaves de Consent
| Chave | Uso |
|---|---|
lideranca-autopreenchimento |
Convites / autopreenchimento de liderança |
apoiador-cadastro |
Cadastro nominal de apoiador |
apoiador-intencao-voto |
Intenção de voto (dado sensível — art. 11 LGPD) |
campanha-notificacoes-push |
Opt-in push (D2; chave provisionada, UI push pendente) |
Provisionamento
Automático (local + produção)
20260719_054706_add_privacy_policy_global— schema do Global.20260719_054707_seed_onda0_consent_and_privacy— upsert Consent ×4 +privacy-policy(published: true).
Aplicado por pnpm migrate localmente e por payload migrate no pnpm build da Vercel.
CLI espelho (re-seed)
pnpm db:seed:consent
# Neon (somente re-seed consciente pós-revisão jurídica):
ALLOW_REMOTE_DB=true pnpm db:seed:consent
Refusa host não-local sem ALLOW_REMOTE_DB=true (mesma família de guard que db:seed:tse).
Substituição pelos textos finais
- Assessoria eleitoral aprova textos definitivos.
- Atualizar
src/lib/onda0ConsentTexts.ts. - Nova migration de dados ou
ALLOW_REMOTE_DB=true pnpm db:seed:consentem produção. - Aceites com
contentHashantigo exigem novo checkbox (comportamento existente). - Só então liberar coleta de titulares reais (lideranças, apoiadores, import CSV).
Smoke (dados fictícios apenas)
Local (PR):
pnpm migrate(oudb:seed:consentse iterando textos).- Login
/campanha→ abrir um município e registrar dado fictício de teste. - Convite com Consent visível (contato fictício).
- Apoiador de teste (+ intenção de voto opcional).
- GET
/privacidadecom banner provisório.
Produção (pós-deploy):
- Confirmar env:
NEXT_PUBLIC_SITE_URLHTTPS,PAYLOAD_SECRET,DATABASE_URL,BLOB_*,REVALIDATE_SECRET. - Migrations aplicadas no build.
- Bustar cache de
/privacidade(migration SQL não disparaafterChangeno runtime deployado):
curl -X POST "https://<prod-domain>/api/revalidate?tag=global_privacy-policy" \
-H "x-revalidate-secret: $REVALIDATE_SECRET"
- Smoke com dados fictícios; não importar CSV real nem convidar titulares reais.
Onboarding staff (sem PII de campo)
- Criar
campaignUsercoordinator/advisor(ecandidate) via/admin. - Estruturar municípios de teste, agenda, baseline TSE.
- Seed da planilha de prioridades via E4R (import-planilha-projecao.md) — só estratégia sem PII (
voteGoals/priority); colunas com nomes (lideranças/assessores/dobradinhas) ficam para depois do lote jurídico. - Treinamento de campo com titulares reais após revisão jurídica.
RIPD
Ver onda-0-ripd-nota-mvp.md — nota interna; não substitui RIPD formal da assessoria.
Não escopo
- D2 push / VAPID.
- Known Gap #2 (Consent por ID nos fluxos públicos).
- Collection
Pages. - RBAC em
users. - Seed de lideranças/apoiadores reais.
Referências
docs/roadmap.md§ Onda 0docs/plans/escala-dry-pos-onda0.md— débitos técnicos pós-/simplify(revalidate globals, chaves Consent, testes SQL)docs/plans/cadastro-nominal-apoiadores.mddocs/plans/notifications.mdsrc/collections/Consent.tssrc/globals/PrivacyPolicy.ts- AGENTS.md — Consent por chave, fail-closed, checklist deploy
Revisões
- 2026-07-19: Plano criado na implementação Onda 0 — textos provisórios MVP, provisionamento automático local+prod, hold de PII real.
- 2026-07-19: Débitos do
/simplifyregistrados em escala-dry-pos-onda0.md (O0+).