No ar · coleta até 01/11
dados de 30/10/2026, 16:02
PROJETO · HISTÓRICO DE VERSÕES
Versões
Todas as mudanças importantes do projeto, em ordem reversa cronológica. Formato segue Keep a Changelog; versões em SemVer.
Histórico de versões
Registro cronológico de tudo que mudou no painel — dados, metodologia e interface —, da versão mais recente para a mais antiga.
Página 8 de 14 · 167 versões no total.
-
v4.18.0 2026-08-14 Tópicos em alta sem inflação de base pequena Changed
- "Tópicos em alta" (capa, Cenário Semanal e Mensal) trocou a métrica: a antiga (crescimento percentual × volume) fazia um tema que saltava de 1 pra 17 artigos (+1600%) vencer de temas grandes, e enterrava emergências reais — na semana desta mudança, "fraude eleitoral" saiu do zero pra 135 artigos e ficava fora do top 5. Agora a ordem usa razão amortecida com piso mínimo de volume; o selo mostra o múltiplo de crescimento ("4×") em vez de percentual, e "NOVO" marca tema sem ocorrência no período anterior. Mesma correção já aplicada ao antigo "candidato em destaque" (crescimento sobre base minúscula não é destaque).
- A contagem das listas passou a ser por artigos distintos — o rótulo sempre disse "artigos", mas a métrica antiga contava vínculos tema-candidato, inflando temas de artigos multi-candidato.
-
v4.17.2 2026-08-12 Metodologia atualizada pós-leaderboards Changed
- Metodologia acompanha as mudanças recentes: o guia do Cenário Geral descreve o share of voice com viradas explicadas e os rankings com sentimento e espectro; a seção Tópicos documenta a régua de aceleração (tópico do momento da capa e motivo das viradas) e a "temperatura" das barras de sentimento nos rankings; a seção Veículos explicita que o badge de espectro é o nível predominante da fonte — mesma régua do ranking do Cenário Geral.
- Referências mortas corrigidas: "Cobertura mais recente" (seção removida da home) e descrições da página 404 ("KPIs vivos", espectro em 3 níveis).
-
v4.17.1 2026-08-12 Coletor Google News: cache de decode + circuit breaker Fixed
- Google News voltou a operar sob controle de taxa. Desde 11/08 à tarde o coletor vinha zerado: o Google bloqueou as requisições de decodificação de URL (HTTP 429) porque cada rodada redecodificava ~1,7 mil URLs — quase todas já vistas — cinco vezes ao dia. Agora as URLs decodificadas ficam num cache permanente (falhas são retentadas só depois de 24h) e um circuit breaker interrompe as tentativas da rodada após 10 falhas seguidas, deixando o bloqueio expirar em vez de realimentá-lo. Nenhum artigo publicado foi afetado — a perda foi de cobertura de coleta no intervalo, compensada pelos demais coletores.
-
v4.17.0 2026-08-12 Treemaps aposentados: tópicos e fontes viram leaderboards Changed
- "Tópicos da cobertura" e "Fontes monitoradas" (Cenário Geral) deixaram de ser treemaps e passaram ao padrão leaderboard: uma linha por item com rank, volume e barra de sentimento (fatia positiva, neutra e negativa dos vínculos verificados). Área é codificação visual fraca pra um ranking de 20 itens e, em períodos curtos, transformava 1 artigo num bloco monumental; a cor, que era decorativa, agora carrega informação.
- Fontes ganharam o badge de espectro editorial (nível predominante da fonte na série, em cinco níveis — mesma régua da tabela da Metodologia) e nome de exibição no lugar do slug técnico. A seção passa a responder quem publica mais, de que lado vem e com que tom cobre.
-
v4.16.0 2026-08-12 Home como banca + revisão de legibilidade Added
- "Tópico do momento" na home: o tema que mais acelerou nos últimos 7 dias frente ao próprio histórico (métrica de lift), com volume e tom por candidato — substitui o antigo "candidato em destaque". Em seção própria: tópico do momento e liderança da semana são recortes independentes, e lado a lado induziam leitura causal.
- Share of voice no Cenário Geral, parametrizado por período (pills): fatia de cada candidato por semana fechada (30d/90d/tudo) ou por dia fechado (7 dias). Trocas de liderança anotadas no gráfico e explicadas em lista — tópico que puxou a virada + manchete real linkada; quando não há troca, o estado diz isso explicitamente.
- Leaderboard compacto de candidatos nos três cenários: uma linha por candidato (rank, volume, barra de sentimento, variação), no lugar do grid de cards — os cards completos seguem em /candidatos.
- Menu colapsável (hambúrguer) no mobile.
Changed
- Home reordenada como banca de jornal (pirâmide invertida): manchete da casa → semana até aqui (líder, tom e sobe/desce na mesma seção — mesma janela de comparação) → extremos → tópicos em alta → análises da série. Cortados o grid de KPIs de infraestrutura (virou linha de status no hero), "Cobertura mais recente" e "Explore o painel".
- NAV: Cenário Semanal antes do Mensal — em campanha, o ciclo de leitura é semanal.
- Legibilidade como regra global: tooltips dos gráficos com fundo opaco legível nos dois temas; anotações sem sobreposição, com alturas escalonadas; toda seção com intertítulo e explicação de leitura.
- Pills de período viraram navegação normal (sem HTMX): o swap re-executava os scripts Plotly e, de forma intermitente, um gráfico perdia o hover. Página cheia cacheada resolve a classe inteira de bugs.
-
v4.15.2 2026-08-11 Imagens dos resumos migradas pra Gemini 3.1 Flash Image Changed
- Metodologia: imagens dos resumos editoriais agora são geradas por Gemini 3.1 Flash Image (Google) — o Google desativa os endpoints do Imagen 4 em 17/08/2026. A migração é no projeto blog-automation (
utils/imagen_client.py, Interactions API); aqui muda só a linha da seção Resumos. Mesmas duas variantes (16:9 e 1:1) e a mesma paleta.
- Metodologia: imagens dos resumos editoriais agora são geradas por Gemini 3.1 Flash Image (Google) — o Google desativa os endpoints do Imagen 4 em 17/08/2026. A migração é no projeto blog-automation (
-
v4.15.1 2026-08-10 Metodologia atualizada para a fase de campanha Changed
- Página /metodologia reescrita para refletir a revisão de campanha: cadência de coleta 5×/dia (07h, 10h, 13h, 16h e 21h), campo fechado em candidaturas oficiais (contagem dinâmica do banco no lede), verificação anti-falso-positivo documentada como etapa das fontes de dados (todos os vínculos pendentes adjudicados a cada coleta, sem janela), guias de navegação com share of voice, gênero jornalístico, bipartite por sentimento e comparações por período equivalente.
- Seção nova "Revisões de série": registro público das mudanças de 10/08/2026 que afetam a comparabilidade das séries — adjudicação retroativa de ~9,4 mil vínculos pendentes (~7,9 mil removidos como falso positivo), recalibração do prompt de sentimento, espectro em 5 níveis, comparações por período equivalente e nova cadência de coleta.
- Tabela de veículos monitorados em 5 níveis: badge de espectro migrado de 3 pra 5 níveis (nível modal por fonte canônica), com badges também para agregadores e não classificados.
- Seção "Como esse resumo foi feito" dos resumos publicados (weekly/monthly no blog-automation): frequência de coleta corrigida para cinco vezes por dia.
Fixed
- Dois erros factuais antigos na /metodologia, ambos verificados contra produção: a tabela de faixas do score dizia neutro = [−0,1; +0,1], mas as fronteiras reais do classificador são ±0,2 (conferido nas 78 mil classificações do banco); os resumos editoriais "saem às 08h00", mas os timers reais rodam segunda 06h30 (semanal) e dia 1º 06h45 (mensal). A descrição do insumo do sentimento também dizia "título e descrição" — o modelo recebe título + primeiros parágrafos do corpo quando capturado.
- Página /api dizia "coleta três vezes por dia (07h, 14h e 21h)" — atualizada pra cadência real de cinco rodadas.
-
v4.15.0 2026-08-10 Share of voice, o custo da opinião e resumos com memória Added
- Share of voice semanal no Cenário Semanal: fatia de cada candidato no total de artigos por semana fechada desde abril, com as trocas de liderança marcadas no gráfico — o dado limpo revela que Flávio Bolsonaro assumiu a liderança de volume em quatro semanas (11/05, 22/06, 06/07 e 20/07) e Lula retomou nas quatro seguintes. Série que nenhuma página mostrava.
- "O custo da opinião" na página de candidato: sentimento médio por gênero jornalístico (notícia, análise, opinião, entrevista). O gênero era classificado a cada coleta desde abril e nunca havia sido cruzado com candidato.
- Grafo candidato↔tópico colorido por sentimento: a cor da aresta agora indica o tom médio daquele candidato naquele tema — o grafo vira mapa de vulnerabilidade e força por assunto. Barras de Zeitgeist do detalhe também ganham o tom por cluster.
- Resumos editoriais (SapiensLabs) com três dimensões novas: linha editorial em 5 níveis (antes 3), gênero jornalístico com sentimento, e comparação com a janela anterior (volume + tom) — o prompt sempre pediu comparação temporal e o dado nunca chegava.
Fixed
- Página de candidato 14× mais rápida (5-6s → ~0,4s): a função que monta o detalhe rodava ~12 consultas agregadas a cada visita, sem cache — na página que mais recebe compartilhamento. Cacheada e incluída no aquecimento pós-coleta.
-
v4.14.0 2026-08-10 Espectro em 5 níveis, janelas justas e a página que abre no presente Added
- Espectro Editorial em cinco níveis — da extrema-esquerda à extrema-direita. A página colapsava a classificação detalhada (produzida a cada coleta desde abril) em três níveis grossos, somando os extremos aos vizinhos — exatamente onde mora o sinal mais forte do banco: a cobertura de Flávio Bolsonaro cresce monotonicamente da extrema-esquerda (-0,60) à extrema-direita (+0,27), e a de Lula é o espelho invertido (+0,25 na esquerda → -0,48 na extrema-direita). Renan Santos é o desviante: positivo no centro E na direita. Agregadores e veículos sem classificação ficam fora do espectro, com contagem declarada em rodapé.
- Janela "48h" no Cenário Geral e pills reordenadas do presente para o passado (Hoje → 48h → 7 dias → ... → Tudo). A página passa a abrir nos últimos 7 dias — o padrão anterior ("Tudo") diluía o momento em cinco meses de série.
Fixed
- Comparações "vs anterior" agora usam o mesmo período da janela anterior (apontado na revisão editorial): na segunda-feira, compara-se com a segunda anterior; na terça, com segunda+terça; no domingo converge para a semana cheia — idem no mês, dia a dia. Antes, a janela corrente PARCIAL era comparada com a anterior INTEIRA: toda segunda de manhã o painel mostrava o campo inteiro "em queda de 90%", número que só fechava no domingo. A correção foi feita na fonte e alcança todos os consumidores: "Quem sobe · quem desce" da capa, grid e KPIs do Cenário Semanal, KPIs mensais, candidato em destaque, gráfico dumbbell e tópicos emergentes. Rótulos atualizados para dizer o que o número de fato é.
-
v4.13.0 2026-08-10 Fase 1 da revisão de campanha: capa quente, URL /candidatos e SEO O dashboard vira a chave da era pré-campanha para a campanha (propaganda começa 16/08).
Added
- Capa quente. KPIs "Artigos hoje" e "Tom da semana" (sentimento médio ponderado por volume); seção "Quem sobe · quem desce" (top-3 altas e quedas de volume da semana vs anterior, piso de 10 artigos); seção "A semana em dois extremos" (manchetes mais negativa e mais positiva do candidato com cobertura mais dividida, rotuladas como leitura do classificador, linkando às fichas internas). Tudo derivado de dados que o painel já calculava — nada de coleta ou query nova.
- Contagem regressiva para o 1º turno (04/10/2026) e carimbo de última coleta na sidebar — visíveis em todas as páginas. Antes, 11 das 14 páginas não tinham nenhum sinal de frescor.
- Cartão social (og:image) e metadados completos: description, canonical, og:title/description/url/image e twitter:card em todas as páginas. Compartilhar qualquer página do painel deixa de gerar cartão cinza sem informação.
Changed
- URL do índice de candidatos migrada:
/pre-candidatos→/candidatos, com redirect 301 permanente nas URLs antigas (links salvos continuam funcionando). Com 13 candidatos oficiais e 0 pré-candidatos, a URL antiga era a etiqueta da fase anterior em toda página compartilhada. - Navegação reordenada: Espectro Editorial sobe (é a página mais eleitoral do painel); API pública sobe para o grupo Análise; Zeitgeist e Análises formam o grupo "Aprofundamento"; Radar sai do menu (a rota continua acessível por link direto) — num campo de 13 candidatos, um gráfico limitado a 3 com eixos de normalização relativa induzia mais confusão que leitura.
- Espectro e Comparativo agora abrem com os 13 candidatos — o padrão anterior (top-5 por volume) escondia 8 candidaturas oficiais da visão inicial, um viés de exposição herdado da era pré-campanha.
- Página de candidato descontinuado: rótulo correto ("FORA DA CORRIDA" — antes dizia "PRÉ-CANDIDATO") e
noindex(fica no ar como contexto histórico, fora do índice de busca). - Sitemap com lastmod honesto: páginas de dados carregam a data do último snapshot; páginas estáticas, a da última edição real (antes tudo dizia "hoje" — sinal de baixa confiança para buscadores).
- Metodologia atualizada: título próprio ("Metodologia"), remoção da promessa vencida de validação em julho, dos canais desligados (Tavily) e de fontes removidas (Jornal Opção); modelo editorial corrigido para Opus 5.
-
v4.12.0 2026-08-10 Fase 0 da revisão de campanha: estanca a fuga de dados do verificador Primeira leva da revisão de fase para o início da campanha eleitoral (16/08). Diagnóstico completo em três auditorias (dashboard, dados, pipeline) precedeu este lote — as mudanças abaixo atacam o que corrompia dados publicados.
Fixed
- Verificador sem janela temporal — corrige fuga estrutural que tornava candidatos pequenos invisíveis. A janela
--horas 3filtrava pora.fetched_at(timestamp do artigo), mas os coletores criam vínculos novos em artigos velhos no caminho de duplicata: o vínculo nasciaverified=0já fora de qualquer janela futura e nunca mais era verificado — logo, nunca aparecia no dashboard nem nos resumos (que filtramverified=1). Em 10/08, eram 9.407 pares invisíveis (100% deles comcreated_at>fetched_at), com perda REGRESSIVA: 54,7% dos pares de Edmilson Costa invisíveis, 51,4% de Samara Martins, 46,4% de Hertz Dias — contra 4,2% de Lula. O ranking publicado subestimava os candidatos pequenos em 20-55%. Agora o verificador processaWHERE verified = 0sem janela (imune também ao desalinhamento UTC/localtime decreated_at), a limpeza de órfãos idem, e o alerta do Telegram ganhou o campoPendentes— invariante 0; qualquer valor ≠0 acusa a fuga na hora.--horasé aceito e ignorado (deprecado). - Body scraping deixa de re-baixar falhas permanentes. Coluna nova
articles.body_status: 401/403/404/410 e paywall-sem-corpo são marcados'permanent'e saem do SELECT. Antes, 5.478 artigos mortos eram re-baixados a cada coleta — ~2h30 de trabalho perdido por run, 3× por dia. A coleta cai de ~2h20 para menos de 1h. - Google News cobria só 8 dos 13 candidatos. Entraram Augusto Cury, Edmilson Costa, Hertz Dias, Rui Costa Pimenta e Samara Martins (com partido na query para os homônimos fortes); saíram 6 chaves de descontinuados. Os quatro mais ausentes eram os mesmos que mais perdiam na fuga do verificador — os dois defeitos se compunham.
- Patterns que morreriam em 16/08. Quatro candidatos usavam
pré-candidatocomo desambiguador de sobrenome; quando a imprensa passar a escrever só "candidato", esses ramos morreriam em silêncio (RSS e sitemaps dependem 100% dos patterns). Agora aceitam(pré-)?candidato, nas duas direções para Zema e Caiado ("o candidato Zema"). Vices entraram como desambiguadores dos titulares: Kassab→Caiado, Girão→Zema, Gaspar→Flávio, Delgado→Cury, Medina→Renan, Torquato→Clariana, Tenente Dalma→Avalanche, Vanessa Portugal→Hertz, Cleusa→Edmilson, Brício→Samara, Antônio Carlos Silva→Pimenta. "Chapa Caiado-Kassab é registrada no TSE" agora casa. 11 casos de teste novos (27 no total). - Prompt do sentimento ensinava a oposição errada. Citava Tarcísio e Michelle (ambos fora da corrida) como exemplos canônicos de oposição e nunca mencionava Flávio Bolsonaro — o 2º maior volume do banco. Agora traz o contexto real da corrida (governista Lula; oposição liderada por Flávio, com Caiado/Zema/Renan/Cury) e regra explícita para Jair/Michelle Bolsonaro (não-candidatos; só afetam Flávio com conexão explícita no texto). Prompt do verificador idem: Leite (dropped) removido, Caiado/Zema como ex-governadores, homônimo "Avalanche" documentado. Quebra leve de comparabilidade: sentimento de artigos sobre "oposição" difusa tende a deslocar de Tarcísio/Michelle para Flávio a partir desta versão.
Changed
- Vocabulário de fase na coleta. O grupo
_geraldo Google News ganhou 5 queries que não existiam em nenhuma camada: debate presidencial, pesquisa eleitoral, registro no TSE, horário eleitoral e propaganda eleitoral. O funil continua exigindo match de candidato — as queries alargam recall sem criar lixo. - Feeds mortos removidos (Carta Capital e Jornal Opção — 403 permanente desde julho; cobertura preservada via Google News/sitemap). O campo
Fontes offdo alerta volta ao piso 0 e passa a indicar falha real. - Docstrings e logs dos produtores atualizados para o modelo real (
gemini-3.1-flash-lite) — diziam Ollama/Gemma4/Gemini 2.5 desde abril.
- Verificador sem janela temporal — corrige fuga estrutural que tornava candidatos pequenos invisíveis. A janela
-
v4.11.14 2026-08-07 Campo fecha em 13: Clariana Barão e Rui Costa Pimenta oficializados; 3 vices atualizados Changed
- Clariana Barão (DC) →
candidate. Convenção nacional em 05/08/2026, em São Paulo, com a advogada Fabiana Torquato na vice — chapa 100% feminina. É a primeira vez desde a fundação do DC, em 1995, que o candidato à Presidência não é o fundador José Maria Eymael. Múltiplas fontes com data e local: Blog do Mário Flávio, capitalnews, Congresso em Foco, Folha, Metrópoles. - Rui Costa Pimenta (PCO) →
candidate. Mantidopre-candidatedesde 04/08 por falta de convenção datada por fonte primária. Passadas 48h do prazo legal, manter esse status deixou de ser neutro: todo roundup pós-05/08 (Metrópoles, CartaCapital — "lista final… 13 chapas", em.com.br, Goiás 246, gauchazh, El Universal) o trata como candidato assentado, sem hedge algum — contraste nítido com Cabo Daciolo (explicitamente excluído por todas as fontes) e com a própria Clariana antes de sua convenção ("deve lançar").droppednão se aplica: nada indica saída da corrida. A ambiguidade genuína foi para anotes, não para o status: o PCO não divulgou convenção nacional com data e local — o evento de 08/08/2026 em São Paulo é chamado pelo próprio partido de "lançamento", não convenção; a chapa (Antônio Carlos Silva "Toninho" na vice) foi escolhida na 38ª Conferência Nacional, instância interna. - 📝 Composição final: 22 monitorados = 13 candidatos, 0 pré-candidatos, 9 descontinuados. O campo das candidaturas presidenciais está fechado.
Fixed
- Três vices corrigidos de "indefinido" para nomeado, todos registrados nos dias seguintes ao prazo:
- Flávio Bolsonaro (PL) — deputado federal Alfredo Gaspar (PL-AL).
- Romeu Zema (Novo) — senador Eduardo Girão (Novo-CE); chapa já registrada no TSE em 06/08/2026.
- Augusto Cury (Avante) — ex-deputado federal Júlio Delgado, que já vinha assessorando o candidato desde o início do ano.
Reference
- Achado que explica o padrão do PCO: um artigo regional (correiodopovo.com.br, 04/08) sobre a convenção estadual no RS registrou que o partido cumpre o prazo legal em nível estadual ("o PCO deve realizar sua convenção na quarta-feira"), mas revela os nomes da chapa nacional só no lançamento do dia 8. Isso é consistente com uma legenda pequena que separa o ato legal (convenção, silencioso pra imprensa) do evento de publicidade (lançamento, com data e local divulgados). Não achamos confirmação primária de que esse ato legal específico ocorreu até 05/08 para a chapa presidencial — a promoção se apoiou no peso da cobertura pós-prazo, não numa data de convenção.
- Clariana Barão (DC) →