- Compile docs/roadmap.md into a next-steps document (277→206 lines): R0–R5/M1–M5 tables and the delivered map/list item paragraphs compressed into 'Já entregue'; janelas, grafo and cortes list only open IDs; C10/C11/C8 fill-ins keep their original triggers; C5 moved under 'A validar'. - Record the production deploy of the destructive remodel chain (2026-07-23 Vercel builds) across roadmap, AGENTS.md, the project notebook and plans — supersedes every 'deploy pendente'; smoke pós-deploy + onboarding remain the open blockers. - Fix AGENTS.md internal contradictions: Município locked-decisions bullet (435, Camaçari whole, candidate role), campaignUser role enum, deploy-checklist item 7 as historical, access/* structure note, election-aggregates artifact + election-tse revalidate runbook. - Sync open plans to real identifiers (plaza*/nucleus* → municipality*): the intelligence program (master + E8–E15/B13/C12 with artifact/caching context and satisfied deps), B8 rescoped to Salvador ZE 1–19 only, WhatsApp D3–D5, D2, A6 (now the insight layer over stateDeputy), RS+, onda-0 smoke step. - Close items verified done in code: C8 F4 (DRY de forms) complete, filtros-auto shared pending shell, petition generateStaticParams select/depth; ledger the surviving user-visible 'Praça' copy in src as new P2 debt. - Banner delivered praça-era plans (production note + rename pointer); mark remodelagem-pracas.md superseded and remodelagem-municipios.md delivered. - TECH-DEBT smell statuses, TESTING RBAC row, README quality gates, campanha UI rules updated to current component names.
5.5 KiB
E15 — Backtest pós-eleição (pledge vs. resultado; calibração de limiares)
Status: rascunho Atualizado em: 2026-07-24 (refs sincronizadas pós-remodelagem Municípios + hardening) Item do roadmap: docs/roadmap.md (seção "Inteligência de campanha", E15; plano-mestre inteligencia-campanha.md) Impeccable: A — N/A (sem superfície UI de produto neste ciclo; saída é relatório/dado) Appetite: ~1 dia eng; janela pós-04/10 (sem pressa, sem migration própria) Responsável: —
Contexto
"Cada campanha que não compara pledge com voto realizado joga fora o experimento que pagou caro para rodar" (relatório C4). O backtest é a única calibração real de: fator de desconto de pledges (declarado × estimado × realizado), limiares da classificação relativa (E10), critérios de nível (E14), e a leitura ex-ante do motor (E11 — sugestões aceitas/descartadas vs. desfecho). Depende de dois lados: o lado TSE (resultado 2026 por município×zona — chega via extensão do seed pnpm db:seed:tse para 2026) e o lado campanha, que só existe se C12 registrar durante o ciclo (trajetória de pledges com datas, decisões com snapshot, sinais datados, esforço/origem de visitas). Este plano é deliberadamente pequeno: a fundação é C12; aqui é a leitura.
Objetivos
- Import do resultado 2026 (extensão do seed TSE existente para
year=2026, mesmo formatoelectionTally/electionCandidateVote). - Análises do backtest (script/utility, saída em markdown versionado em
docs/research/como apêndice do ciclo):- Pledge → voto: por município, trajetória de comprometido (fotos em 15/08, 15/09, véspera) vs. nominal realizado; fator de conversão global e por assessor/liderança-fonte (com o cuidado anti-punição de K-C/G4 — leitura agregada, não ranking individual público).
- Limiares: quais cortes de LQ/captura teriam separado ex-ante os municípios onde o candidato cresceu (calibra E10/E14 para 2030).
- Decisões:
allocationDecisionaceitas/descartadas vs. desfecho do município — o motor acertou onde? a leitura alternativa descartada era a certa? - Sinais: sinal registrado (invasão/esfriamento) previu queda? lead time médio.
- Roll-off: municípios I-A trabalhados vs. não trabalhados — o diferencial se moveu?
- Tudo com o estatuto honesto: n=1 eleição, sem contrafactual — é calibração, não prova causal.
Decisões travadas
- Saída é documento versionado + dados derivados, não dashboard. Pós-eleição não há usuário sob pressão; o consumidor é o planejamento 2030 e a plataforma white-label. Rejeitado: UI de produto para o backtest (custo sem usuário no ciclo).
- Nenhuma análise individual punitiva. Fatores por liderança existem para desconto futuro, não para ranking — G4 (punição ensina a inflar). Saída pública interna só agregada.
- i18n e naming:
backtest2026.ts(script na família dos seeds), leituraspledgeConversion,thresholdCalibration,decisionAudit.
Questões em aberto
- Fotos da trajetória em quais datas? Opções: fixas (15/08, 15/09, 03/10) | todas as semanas. Recomendação: semanais com destaque às três âncoras — versions do C12 permitem qualquer recorte.
- Onde roda? Recomendação: script CLI com guard de banco local (padrão dos seeds), lendo prod via
db:pull— nunca análise pesada contra o banco de produção.
Abordagem proposta
flowchart LR
TSE26["seed TSE 2026<br/>(electionTally/CandidateVote)"]
Hist["pledgeHistory (C12 versions)"]
Dec["allocationDecision + sinais"]
Bt["backtest2026<br/>(5 leituras)"]
Doc["docs/research/backtest-2026.md<br/>+ calibração E10/E14"]
TSE26 --> Bt
Hist --> Bt
Dec --> Bt
Bt --> Doc
Componentes:
scripts/seed-tse-results.mjs: aceitar 2026 quando o TSE publicar (mesma família de flags de E2).src/utilities/backtest2026.ts(ou script emscripts/): as 5 leituras sobrepledgeHistory(C12),allocationDecision, sinais e tallies; saída markdown.- Sem migration (dado 2026 usa as collections existentes).
Dependências
- Duras: C12 (sem registro não há backtest — é por isso que C12 é não-cortável), resultado TSE 2026 publicado (externo, ~nov/2026). Suaves: E10/E14 (consumidores da calibração), E11 (auditoria de decisões só se o motor rodou).
Não escopo
- Previsão/modelo para 2030 (só calibração descritiva); relatório público externo; qualquer análise de dados pessoais além do agregado interno (LGPD — pledges são dados de campanha, tratamento segue o mesmo regime de acesso staff).
Rabbit holes
- Virar paper. 5 leituras, um markdown, cortes sugeridos — não análise econométrica.
- Rodar contra produção. Guard de banco local obrigatório (padrão
assertLocalDatabasedos seeds); dados de campanha viadb:pullcom PII já excluída onde aplicável.
Adiado com gatilho
- Backtest contínuo durante a campanha (mini-calibrações mensais). Gatilho: coordenação pedir leitura intermediária + C12 com ≥6 semanas de série.
Referências
docs/roadmap.md(Inteligência de campanha, E15) · plano-mestredocs/research/relatorio-entrevista-persona-campanha.mdC4 (calibração), FU4 (registro ex-ante), D4 (limiar por backtest), G4 (anti-punição)scripts/seed-tse-results.mjs,scripts/db-pull.mjs,tests/helpers/assertTestDatabase.ts(família de guards)- registro-fundacao.md (C12 — a fundação)
- AGENTS.md — guards de banco, seeds TSE