vinarse

Meu estudo das seções com voto zero agora tem um registro público que qualquer pessoa pode refazer

Republiquei meu estudo das 106 seções do segundo turno em que Flávio Bolsonaro não teve nenhum voto, agora com cada passo à vista. Um único programa, executado do começo ao fim, grava cada número em uma tabela de resultados que só recebe acréscimos. Congelei os arquivos em 1º de novembro, e um bloco do Bitcoin prova que eles já existiam nessa forma naquela noite. Os números não mudaram.

7 min de leitura

Em resumo

Em 27 de outubro de 2026, a Folha de S.Paulo noticiou um estudo que encontrou 106 seções eleitorais sem nenhum voto para Flávio Bolsonaro (PL) no segundo turno de 2026, vencido por Lula (PT). Uma seção é o grupo de eleitores que vota em uma mesma urna. Dois dias depois, refiz a contagem a partir dos arquivos públicos e comparei com 2018 e 2022. Quase todas as seções com voto zero nos três últimos segundos turnos foram zeros do lado do PL: 328, 143 e 106, contra 4 por ano do lado do PT.

Em outubro, pedi aos leitores que acreditassem em duas coisas só pela minha palavra. Uma era que o plano veio antes dos resultados. A outra era que os números do texto eram os números que o código produziu. Agora a segunda você pode conferir. Os 135 números medidos no texto de outubro remetem a uma tabela de resultados gravada pelo código, e qualquer pessoa pode rodar de novo o código que a gera. A primeira ainda depende da minha palavra, porque não congelei o plano antes de calcular os resultados. Uma segunda contagem que escrevi à parte, sem código em comum com a análise, dá as mesmas contagens principais a partir dos arquivos do TSE. Também rodei tudo de novo sem os dois arquivos rotulados à mão que não posso publicar, e saíram iguais 133 dos 135 números.

Principais achados

  1. No segundo turno de 2026, Flávio Bolsonaro teve zero voto em 106 seções, nas quais Lula somou 14.860 votos. Lula teve zero voto em 4 seções, nas quais Flávio Bolsonaro somou 296 (scale.csv). São os números de outubro, sem mudança. #
  2. Jair Bolsonaro teve 328 seções com voto zero em 2018 e 143 em 2022, Flávio Bolsonaro 106 em 2026. Os candidatos do PT tiveram 4 em cada ano. Em 2018 e 2022, a maioria dos zeros do lado do PL estava no Nordeste, 177 de 328 e 82 de 143. Em 2026, a maioria estava no Norte, 65 de 106 (zero_by_state.json). #
  3. Cada um dos 135 números listados é igual à sua linha na tabela de resultados. Todas as 63 tabelas publicadas saem byte a byte idênticas ao pacote de outubro (FINDINGS.md, seções 1 e 8). #
  4. Uma segunda contagem dos arquivos brutos de seções do TSE, feita por um script awk curto que escrevi à parte, sem código em comum com o notebook, bate com a tabela de resultados nos 63 campos que cobre, entre eles 106, 4, 143, 4, 328, 4 e a margem de vitória de Lula, de 4.430.191 votos. Ela conta de novo os arquivos publicados. Não reconta nenhum voto (REPRODUCE.md, seção 7). #
  5. O TSE republicou quatro arquivos de entrada depois do meu download de 28 de outubro, com os mesmos valores que a análise lê. Mudaram as datas e horas de geração, a ordem das linhas, as datas internas do arquivo compactado e o nome de um município em uma coluna que a análise não lê (sources.freshness-2026-11-01.tsv). #
  6. Uma nova execução com os arquivos republicados, sem os rótulos privados, reproduz 133 dos 135 números listados e 56 das 63 tabelas. Os outros dois números e as sete tabelas dependem dos rótulos (REPRODUCE.md, seção 4). #
  7. O selo abrange 108 arquivos, publicados no commit c41e4eda do repositório, assinado com a minha chave (BUNDLE.sha256). O carimbo do tempo está ancorado no bloco 974.183 do Bitcoin, minerado às 22h15 UTC de 1º de novembro de 2026 (BUNDLE.sha256.ots). #

A história completa

O que foi afirmado

Em 27 de outubro de 2026, a coluna Painel da Folha de S.Paulo noticiou as 106 seções, nas quais Lula teve quase 15 mil votos. Meu texto de outubro refez essa contagem, e os achados dele se mantêm. Repito abaixo só o necessário para entender o registro.

O que encontrei, sem mudança

O lado do PL é Jair Bolsonaro em 2018 e 2022 e Flávio Bolsonaro em 2026. Em 2018, Jair Bolsonaro concorreu pelo PSL. O lado do PT é Fernando Haddad em 2018 e Lula em 2022 e 2026. Conto um zero apenas quando pelo menos um voto válido foi para um dos candidatos.

Os 14.860 votos nas seções com voto zero para Flávio Bolsonaro são 0,34% da margem de vitória de Lula (FINDINGS.md). Das 4 seções com voto zero para Lula, 3 são rurais ou ribeirinhas e 1 é urbana. Pelos cadastros oficiais, a maioria das 106 fica em aldeias indígenas ou comunidades quilombolas.

No modelo que melhor se ajustou aos dados, que acrescentei depois de ver os resultados, 2026 teve 106 seções com voto zero contra 10,8 esperadas do lado do PL, e 4 contra 0,4 do lado do PT. Nenhum dos meus modelos consegue representar uma comunidade inteira votando do mesmo jeito, e esse limite não diz nada, nem a favor nem contra, sobre a apuração. Em 503 locais de votação indígenas acompanhados de 2022 a 2026, a taxa de zeros do lado do PL foi de 3,6% e depois 3,4% das seções. Esses locais concentram 36 das 106. Também acrescentei essa comparação depois de ver os resultados. Toda verificação de consistência entre os arquivos publicados passou.

Antes da votação publiquei uma previsão que dava a Flávio Bolsonaro 84,6% de chance de vencer. Lula venceu. Esse erro é da minha previsão. Não diz nada sobre a apuração. Este texto não avalia essa previsão.

O que há de novo

A análise agora roda como um único notebook, zero_vote_sections.ipynb, do começo ao fim. Primeiro ele roda 37 testes com tabelas pequenas cujas respostas certas já são conhecidas, e recusa qualquer biblioteca que não esteja na versão travada. Depois roda o código de outubro, sem alterações.

Cada número vai para o results.csv, um livro-razão que só recebe acréscimos, com uma linha por medição. Cada linha identifica as entradas, o código e o ambiente por trás dela, e cada linha de decisão cita as linhas que usa. Toda proporção vem com sua margem de erro. Um script gera o FINDINGS.md a partir do livro-razão. A primeira seção dele lista os 135 números medidos do texto de outubro ao lado das suas linhas. Datas, parâmetros fixos como a regra de 1 km e números citados de outras páginas não estão nessa lista.

Uma expectativa que registrei de antemão não se confirmou, e o livro-razão diz isso. Eu esperava que os dois modelos mais simples considerassem a contagem inesperada em todos os testes, em todos os anos, dos dois lados. Um modelo considera a contagem inesperada quando há mais zeros do que ele admite. Meu plano dizia que isso, sozinho, não significa nada, porque esses modelos não conseguem representar uma comunidade inteira votando do mesmo jeito. Do lado do PL, isso aconteceu nos 18 testes de cada ano. Do lado do PT, em 5 de 18 em 2018, 13 em 2022 e 15 em 2026.

O selo é um único SHA-256, 18fed139d418a309b1a291e352a04565fd54c82aac75c9932f4a090a92bfe70c, sobre a lista de 108 arquivos em BUNDLE.sha256, incluindo o notebook executado. O commit selado guarda o pedido de carimbo do tempo como foi enviado a quatro calendários OpenTimestamps, às 21h53 UTC. Um commit posterior traz a prova atualizada, que liga o hash ao bloco 974.183 do Bitcoin. O commit selado não mudou. O GitHub mostra os dois commits como Verified. O bloco prova que esses 108 arquivos já existiam exatamente nessa forma às 22h15 UTC de 1º de novembro de 2026, três dias depois do texto de outubro. Ele não mostra quando o plano foi escrito, nem que a análise está certa.

Como conferi o registro

  1. O livro-razão contra o texto. Cada um dos 135 números listados bate com o valor no livro-razão. Uma segunda verificação encontra esses números no texto de outubro, na parte do texto indicada, quando há uma.
  2. As tabelas contra o pacote. As 63 tabelas batem com o pacote de outubro pelos checksums registrados. Nenhuma tabela nomeia seção, local de votação ou comunidade.
  3. Uma segunda contagem, sem código em comum. Um script awk de 33 linhas lê os arquivos brutos de seções do TSE e conta as seções com voto zero, os votos nelas e as margens. Não compartilha bibliotecas nem tabelas derivadas com o notebook. Na primeira versão, o script deixou de ler todas as linhas de 2022 sem dar erro, porque o arquivo daquele ano põe aspas em todos os campos. A saída veio visivelmente vazia, e corrigi na mesma hora. O registro guarda a falha e a correção, e o script agora para em qualquer ano com zero linhas (recount).

O que dá para refazer sem os meus arquivos privados

A rodada selada lê os arquivos que baixei em 28 de outubro. Desde então o TSE republicou quatro deles, os resultados por município e zona eleitoral de 2022 e 2026, o relatório de totalização e a tabela de códigos de municípios. Baixei cada nova cópia e comparei o conteúdo dela com o da cópia travada. Os valores que a análise lê batem.

Duas entradas são arquivos que rotulei à mão e não posso publicar, porque nomeiam seções e locais de votação. As impressões digitais deles estão no registro selado, então não posso trocá-los sem que isso apareça. Rodei tudo de novo com os arquivos republicados, sem esses rótulos e sem as entradas do mapa. Deu os mesmos valores em 133 dos 135 números listados. Os outros dois, o "103 de 106", dependem dos rótulos. Só 56 tabelas puderam ser comparadas, e não 63, porque sete também dependem deles. A rodada usou um ambiente já montado com as versões travadas, então não testou a montagem de um ambiente do zero. Rodei essa verificação por conta própria, no ambiente que gerou o registro. Ela mostra o que outra pessoa obteria com os arquivos públicos em 1º de novembro. Não mostra que alguém de fora já tenha feito isso.

Em que se apoia a data do plano

Segundo meu relato, escrevi as perguntas, os modelos e as regras originais do que conta como "inesperado" em 29 de outubro de 2026, antes de calcular os resultados. Não congelei esse texto com um hash na época. O mesmo texto está publicado em EXPERIMENT.md, com o SHA-256 9d97b20920ab2da9bd7359334d401408954c049b7d43d1d21c88b4b13b35f617. O registro de publicação do serviço de hospedagem data essa cópia de 29 de outubro de 2026, às 11h21min07s UTC, um horário registrado por terceiros, não por mim. Esse registro não é público. Qualquer pessoa pode recalcular o hash hoje, mas a data depende desse registro. A cópia do plano que está no registro de pesquisa é esse texto sem mudança, mais uma seção de status datada e 38 desvios datados. A cópia publicada é posterior aos primeiros resultados. Então a afirmação de que as regras vieram primeiro ainda depende da minha palavra, e o registro de pesquisa diz isso com todas as letras.

O que os arquivos não podem mostrar

Nada neste texto muda os limites de outubro. As verificações de consistência comparam arquivos publicados por um único sistema. Elas não podem mostrar se uma urna registrou o que cada eleitor digitou, porque todo registro público de um voto vem da própria urna. Não conferi os arquivos que cada urna assina. Não consegui, porque as páginas do TSE que descrevem o formato bloquearam meus downloads automáticos. Este estudo não é uma auditoria das urnas. O lado do PT se apoia em 4 seções por ano, pouco para uma conclusão firme. Minha leitura pelos nomes dos locais acha cerca de 41% dos locais que os cadastros marcam como indígenas.

Confira por conta própria

Baixe o repositório, vá para a versão selada, confira o selo e depois rode. A última linha aceita os quatro arquivos que o TSE republicou. Cadastros baixados de novo podem diferir dos travados. Leia a seção 4 do REPRODUCE.md antes de aceitá-los com ZV_ACCEPT_NEW_REGISTERS=1.

` git clone https://github.com/vinarise/zero-vote-sections-2026 cd zero-vote-sections-2026 git checkout --detach c41e4eda480c1df105cf9dffa095d7f6ab76b9ce shasum -a 256 -c BUNDLE.sha256 ZV_ALLOW_CHANGED_SOURCES=1 ./run_all.sh `

É preciso ter Linux em x86_64, Python 3.13.5, pdftotext e cerca de 12 GB de disco. A primeira rodada baixa cerca de 4,9 GB de arquivos do TSE. O REPRODUCE.md diz o que esperar, e a seção 7 dele traz a segunda contagem. Com uma foto do boletim de urna impresso de uma seção, o texto de outubro mostra como conferi-la sem programar.

Para o carimbo do tempo, rode git show 3fc6e2d:BUNDLE.sha256.ots > BUNDLE.sha256.ots e depois ots verify BUNDLE.sha256.ots. Ele indica o bloco 974.183 do Bitcoin. Sem um nó de Bitcoin próprio, o site opentimestamps.org confere a prova no navegador, com o BUNDLE.sha256 como arquivo carimbado.

O código está sob a licença Apache 2.0, os dados derivados sob CC BY 4.0 e o texto sob CC BY-ND 4.0. Os dados do TSE mantêm a própria licença, com atribuição ao Tribunal Superior Eleitoral. Os contornos do mapa do IBGE mantêm os termos do IBGE, como explica o LICENSE.md.

Fontes

Acha que eu errei?

Envie suas evidências para vina@vinarise.com. Pessoas e agentes de IA são bem-vindos. Correções ficam datadas e ligadas ao trecho que corrigem.

Envie sua contestação

Informar um erro

Também disponível em: Markdown · Claims JSON · llms.txt