PROJETO · HISTÓRICO DE VERSÕES
Changelog
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 2 de 12 · 136 versões no total.
-
v4.49.0 2026-09-03 Perguntar volta, privada, sem SQL escrito por modelo Adicionado
- Página
/perguntar(privada, em teste). A versão de abril, despublicada em 20/04 por respostas inventadas e vazamento entre turnos, foi revista (docs/perguntar-revisao-2026-09-03.md) e reconstruída no caminho oposto: o modelo não escreve SQL. Ele escolhe uma consulta de um catálogo fechado de dez (volume por candidato, sentimento, sentimento por veículo, veículos que mais publicam, tópicos, espectro, artigos, mapa de veículos, quem fala, comparação) e preenche os parâmetros; a consulta é código do painel, lê a view de imprensa com o recorte oficial, e a tabela sai na página com o nome da consulta e os parâmetros. A prosa só pode descrever a tabela. Cada pergunta é um turno só. Parâmetro fora do catálogo, candidato fora do elenco ou pergunta fora do tema recebem recusa curta. Log próprio (perguntar_log.db) e teto diário. - Escada de modelos na Ollama Cloud (
PERGUNTAR_MODEL, começa emgpt-oss:20b), medida nollm_usagecomo o resto do pipeline viagemini_client.call_ollama.scripts/perguntar_gabarito.py: 30 perguntas com a consulta esperada; sobe quem acerta 90% sem inventar consulta. - Privada por token:
PERGUNTAR_TOKENno.envdo serviço (a unit ganhouEnvironmentFile=-), cookie via?chave=, 404 sem ele; fora da NAV, do sitemap e comDisallowno robots.
Mudado
- Handler de 404 e rotas novas usam a assinatura atual do
TemplateResponse(request primeiro), válida no Starlette da LXC e no do Mac, onde a antiga já não existe.
- Página
-
v4.48.0 2026-09-03 Taxonomia 1.2: movimento social e sindical saem de "partidário" Mudado
- Dois rótulos novos de natureza,
movimento-socialesindical(CLASSIFICACAO.md1.2). Ao revisar os partidários, o editor separou dois grupos que não são partido: movimentos organizados (MST, MRT, MES/PSOL, MPR, coletivos e correntes internas de partido) e sindicatos, federações, confederações e centrais, de trabalhadores ou patronais, mais entidades de classe (ACSP, ABAD, Secovi). Os três são porta-voz: ficam na coleta e fora das métricas de imprensa (a viewarticles_imprensapassa a excluí-los, com a mesma exigência de proveniência manual/aprovado). Rubrica da passada em v1.3, com âncoras e a regra de desempate entre os três: quem controla a linha — partido registrado, movimento ou entidade de categoria. Revisão emconfig/espectro_revisao_porta_vozes.csv(66 perfis: os 37partidario+ 29 com sinal de sindicato, federação ou movimento no dono, host ou justificativa), com proposta pré-preenchida para o editor decidir. - Flickr entra na lista negra de redes sociais (um post de junho havia passado).
- Dois rótulos novos de natureza,
-
v4.47.0 2026-09-03 Mapa dos veículos: página, dataset e rubrica públicos Adicionado
- Página
/veiculos. Uma linha para cada host da coleta (~1.870), com o rótulo que vale, a proveniência em selo — classificação manual (mapa do projeto), aprovado em revisão (proposta da máquina revisada pelo editor) ou proposto pela máquina — e o motivo: quem tem menos de 10 artigos não passou pela revisão humana, e a página diz isso ao lado do rótulo. Busca por nome, domínio ou dono; filtros por rótulo, UF da sede e proveniência. Justificativa e fontes da apuração só aparecem nos perfis revisados; o texto gerado sobre os demais fica guardado, não exibido. Contagem de artigos é viva (acervo bruto, com subdomínio somado no host-pai) e não a da hora da classificação. - Dataset
/veiculos.csve/veiculos.json. Só perfis revisados (decisão do editor, 03/09: 1.600 textos gerados por máquina sobre veículos reais, sem revisão, não saem como dado). Colunas: host, veículo, rótulo, eixo, proveniência, UF, alcance, tipo, dono, artigos, justificativa, nota de revisão (quando o rótulo final divergiu da proposta), fontes, perna de pesquisa, versão da rubrica e data de revisão. CSV em UTF-8 com BOM (Excel pt-BR) e vírgula; JSON commeta(licença, atribuição, geração). Licença CC BY 4.0, como tudo o que o projeto produz — agora dito também no rodapé do painel. - Rubrica pública em
/veiculos/rubrica: oCLASSIFICACAO.mdque o pipeline lê, renderizado. O conversor de markdown do changelog aprendeu##, tabelas e---para isso. espectro.py --backfill-manual: os hosts do mapa manual (~300, 69 mil artigos assinados antes de existir a tabela) entram emsource_profilecom statusmanual, rótulo modal do host, sem dossiê nem modelo. Subdomínio de perfil existente não ganha linha (herdou o rótulo do pai). Assim o mapa é UMA tabela.espectro.py --resolver-fontes: o grounding devolve as fontes como redirects do Google (vertexaisearch…/grounding-api-redirect/), que expiram; a coluna novafontes_resolvidasguarda o destino do 302 e é o que a página e o CSV mostram.fontesfica como veio, prova do que o modelo viu.
Mudado
- Rótulos de exibição num dicionário único (
LEAN_DETAIL_PT): as tabelas de veículos tinham cada uma a própria cópia, e os rótulos novos (partidário, oficial, internacional, sem posição declarada) saíam crus numa e traduzidos noutra. - NAV: "Veículos" entra no grupo Análise (05); os demais renumeram. Sitemap ganha
/veiculose/veiculos/rubrica.
- Página
-
v4.46.1 2026-09-02 Threads fora de tudo; snapshot público pelo backup online Corrigido
- 31 posts do Threads saem do acervo. A lista negra de redes sociais (29/08) tinha
threads.net; o Threads passou athreads.come 31 posts entraram entre 29/03 e 25/08. Domínio adicionado à lista, posts removidos com cópia de segurança (*_social_backup_20260902), como em 29/08. Rede social não é imprensa. - O snapshot público deixa de ser
cpdo arquivo. Às 14:41 a cópia saiu com o esquema rasgado ("index idx_polls_dedup already exists") e o painel ficou vazio por cinco minutos; o banco privado estava íntegro. Copiar o arquivo de um banco em modo WAL durante um checkpoint mistura páginas velhas e novas. Agora o snapshot usa o backup online do SQLite e passa porintegrity_checkantes de substituir o anterior; cópia inválida mantém a versão que estava no ar. - pt.org.br e pcdob.org.br aprovados como
partidariopelo editor (primeiras decisões do CSV de revisão). Entram na regra de exclusão das métricas de imprensa.
- 31 posts do Threads saem do acervo. A lista negra de redes sociais (29/08) tinha
-
v4.46.0 2026-09-02 Espectro por veículo: a máquina propõe, o editor decide Adicionado
- Passada de espectro dos veículos (
src/produtores/espectro.py, tabelasource_profile). O mapa manual cobria 164 nomes; no período inteiro havia 2.228 hosts sem espectro, 244 deles com dez artigos ou mais (Band, Reuters, GZH, Diário de Pernambuco, A Tarde entre eles). Cada host sem rótulo recebe agora um perfil em dois tempos: uma pesquisa factual com grounding (Gemini + busca) produz um dossiê com fontes, e a rubrica deCLASSIFICACAO.mdé aplicada sobre esse dossiê. A chave é o hostname, não o nome do veículo — duas grafias de uma redação viravam dois rótulos. O rótulo proposto fica emsource_profile.status='proposto'e nunca entra na coluna que o painel lê sem decisão humana: a revisão vive emconfig/espectro_revisao.csv, ordenada pela confiança que o modelo declarou (os hesitantes primeiro), e--aplicara ingere. Sem fontes de grounding a confiança tem teto de 0,5; dossiê vazio, 0,3. Gabarito contra o mapa manual (fora das âncoras citadas na rubrica): 10/10. Incremental a cada coleta para hosts novos.
Mudado
- Taxonomia editorial 1.1 (
CLASSIFICACAO.md). Três rótulos novos:partidario(veículo controlado por partido, campanha, sindicato ou movimento — o critério é o controle da linha, não a forma: vale para o jornal com redação e para o site institucional),oficial(Estado: TSE, Câmara, Senado, gov.br) esem-posicao-declarada(redação identificável, cobertura local, nenhuma linha documentável).internacionalpara veículo estrangeiro, onde o eixo esquerda↔direita é irrelevante. Diário Causa Operária (PCO) e Vermelho (PCdoB) passam apartidario. Regra de leitura: partidário e oficial ficam na coleta, mas não contam como cobertura de imprensa — saem de tom, escada de voz e espectro (aplicação nas consultas do painel em curso).
Corrigido
- O Diário Causa Operária carregava dois rótulos (112 artigos como extrema-esquerda, 74 como esquerda) por variantes do nome da fonte. Unificado.
- Passada de espectro dos veículos (
-
v4.45.0 2026-09-02 Quem fala: a voz na cobertura, par a par Adicionado
- Passada "quem fala" (
src/produtores/voz.py, tabelaarticle_voice). A rubrica de sentimento define o jornalismo declaratório e pontua a favor de quem fala, mas gravava só o tom. Agora cada par artigo×candidato verificado, desde 10/08/2026, carrega três respostas: o candidato fala na matéria (sujeito de verbo dicendi, aspas, entrevista — a mesma definição da rubrica v2.2), um terceiro fala sobre ele (com nome e papel), ou ninguém fala. Relato de pesquisa não é voz: instituto "dizendo" um número é relato. Primeira carga em 01–02/09 (21.779 pares, 3 omitidos, 5h25); incremental a cada coleta, logo após o verificador. Piloto de 59 pares comparou lote por artigo com um a um: fala própria idêntica em 59/59. Nasce para a série "16 respostas sobre a imprensa" (peças 5 e 6) e entra no painel em seguida.
- Passada "quem fala" (
-
v4.44.0 2026-08-30 Uma régua só para toda a série Mudado
- A rubrica de sentimento ganha o jornalismo declaratório. Matéria construída apenas sobre a declaração de uma fonte, sem que o veículo apure ou confronte o que foi dito, é favorável a quem fala — ceder manchete, credibilidade e alcance a uma fala não verificada é ganho editorial para quem a proferiu, independentemente de o que foi dito ser bom, ruim ou falso — e desfavorável a quem a fala ataca. Duas fronteiras ficam explícitas: quem fala precisa ser o candidato analisado (relato de pesquisa continua neutro, mesmo quando o instituto "diz" que alguém lidera), e protagonismo sem fala não basta (agenda, gravação de propaganda e articulação relatadas em tom factual seguem neutras).
- O contexto de cada época passa a acompanhar a matéria. As regras de classificação são as mesmas do início ao fim da série; o que varia com a data é apenas quem era quem — o campo ainda aberto em março, as convenções em agosto, as candidaturas registradas depois. Sem isso, reler uma matéria de março com a lista de hoje seria anacrônico.
- Todo o acervo desde 25/03 foi reclassificado com a régua nova. A série carregava quatro réguas sobrepostas, e o degrau aparecia nos números: a fatia de textos neutros saltava de cerca de 29% entre março e julho para 56% em agosto — mudança do nosso critério, não da imprensa. Comparar fases da campanha agora mede a cobertura, não o método. Os rótulos antigos ficam preservados para auditoria.
- Cada matéria passa a ser classificada sozinha, e não mais em lotes de cinco. Medimos que o vizinho no lote contaminava o julgamento: a mesma matéria mudava de classificação em 11% dos casos apenas por trocar as que a acompanhavam.
Como a régua foi fechada
- Duas rodadas de avaliação humana às cegas (29 e 30/08), com 79 casos julgados sem que o avaliador soubesse o que a máquina havia respondido. Na primeira, o julgamento humano divergiu do sistema e o exame das divergências mostrou que a máquina estava certa: faltava à rubrica a categoria do declaratório. A segunda rodada testou a régua nova nas suas fronteiras.
- Contra esse gabarito humano, a régua nova reproduz o julgamento editorial em 89% dos casos, contra 67% da anterior.
-
v4.43.0 2026-08-29 Post de rede social não é cobertura jornalística Removido
- 269 itens de rede social saem do acervo — 167 posts do Instagram, 85 do X/Twitter, 16 do Facebook e 1 do YouTube, coletados entre 25/03 e 29/08. Não são matérias: o corpo capturado de um post do Estadão no Instagram terminava na caixa de comentários dos leitores, e o classificador media aquilo como se fosse o tom do veículo. O painel mede a cobertura da imprensa; post de rede social não é imprensa.
- Com eles saem 399 pares candidato-matéria (0,4% dos verificados), 1.155 tópicos, 17 registros de Zeitgeist e 10 pesquisas que o extrator havia tirado de posts. O acervo verificado passa de 95.920 para 95.521 pares.
- As plataformas entram na lista de bloqueio dos coletores (Instagram, X/Twitter, Facebook, TikTok, YouTube, Threads e Bluesky), então não voltam na próxima coleta. Veículos cujo endereço contém o nome de uma rede — folhamax, midiamax, falagenefax — seguem sendo coletados normalmente; o bloqueio é por domínio exato, não por trecho do endereço.
Contexto
- O caso apareceu na lupa de avaliação humana de 29/08, quando um post do Instagram entrou por sorteio na amostra. A verificação anti-falso-positivo não o barrava porque ela julga se o candidato é mesmo o assunto — não se aquilo é jornalismo.
- O conteúdo removido está preservado em cópia no banco (
articles_social_backup_20260829e as tabelas irmãs), caso a decisão seja revista.
-
v4.42.0 2026-08-29 Panorama e Balanço: as duas páginas de conjunto ganham nome próprio Mudado
- "Cenário Geral" e "Cenário" — que a fusão de ontem deixou lado a lado, distinguidos só pela ausência de uma palavra — passam a se chamar Panorama e Balanço.
- Panorama (
/panorama) é a cobertura na janela que o leitor escolher, de hoje à série completa: share of voice, timeline, tópicos emergentes e os rankings. - Balanço (
/balanco) é o ciclo fechado — semana ou mês corrente, sempre comparado ao mesmo período anterior. - Endereços antigos redirecionam permanentemente, inclusive os de Cenário Semanal e Mensal, que agora apontam direto para o destino final em vez de encadear redirecionamentos.
-
v4.41.1 2026-08-29 Correção: a contagem de denúncias do Pardal estava dobrada Corrigido
- O vigia do Pardal contava cada denúncia duas vezes. Os pacotes do TSE trazem, no mesmo arquivo compactado, os 27 conjuntos estaduais e um consolidado nacional; a leitura somava os dois. Números corretos na leitura de 29/08: 110 denúncias contra candidaturas presidenciais (não 220) e cerca de 7,2 mil no país. A nota de 28/08 (4.39.1) foi corrigida com os valores reais. O mesmo defeito atingia o vigia de cassações — que segue em zero — e foi corrigido junto; as fichas de candidatura e patrimônio nunca foram afetadas (já liam só o consolidado).
- Nada disso aparecia no painel: o Pardal é vigia interno, sem exibição pública.
-
v4.41.0 2026-08-28 DeepSeek vira o modelo titular de classificação Mudado
- Os cinco classificadores (sentimento, tópicos, gênero, verificação anti-falso-positivo e Zeitgeist) e o extrator de pesquisas passam a usar o DeepSeek V4 Flash (versão fixada, via Ollama Cloud) como titular, com o Gemini 3.1 Flash Lite como reserva — inversão da cadeia de resiliência que operava desde 11/08. Vale a partir da coleta das 07h de 29/08; o reprocessamento noturno da madrugada de 29/08 já roda no titular novo.
- Motivo: custo — dois esgotamentos de saldo da API do Google em 15 dias. Benchmark de suporte (100 casos, gabarito independente Claude Haiku 4.5): DeepSeek com 87% de concordância em sentimento, acima dos 78% do Gemini de produção; um segundo candidato avaliado no mesmo dia (GLM 5.3 Flash) foi reprovado (56%, achatando classificações para o neutro). O Gemini permanece nas tarefas que só ele faz: geração de imagens e revistas de imprensa com busca integrada.
- A linha
🔀 fallbackdo monitoramento inverte de significado: agora indica que o Gemini respondeu.
Corrigido
- A categoria "checagem" (4.39.0) era descartada na gravação por uma lista de valores válidos que não foi atualizada junto com o prompt — 4 artigos da tarde de 28/08 ficaram sem gênero e serão reclassificados automaticamente.
-
v4.40.1 2026-08-28 Janela de 23/08 reclassificada pelo modelo titular Corrigido
- Em 23/08, entre ~13h e ~22h48, o teto de gasto da API do Google esgotou e três coletas classificaram tudo pelo modelo reserva (nota de série da 4.37.0). Em 28/08, sentimento (729 vínculos) e tópicos dessa janela foram refeitos pelo modelo titular: 102 vínculos (14%) mudaram de classe de sentimento — na linha da divergência caso a caso medida no sombreamento de agosto. A distribuição agregada mudou pouco (era estatisticamente parecida com dias vizinhos); o ganho é a série uniforme e as fichas individuais corretas. Gênero, Zeitgeist e verificação anti-falso-positivo da janela foram mantidos (concordância de 94–97% entre os modelos nessas tarefas, e a verificação não é reversível).
Nota de transparência
- Na tarde de 28/08 o saldo da API esgotou de novo (desta vez o crédito pré-pago) e a coleta das 16h também rodou no modelo reserva até a recarga — o mesmo mecanismo de fallback visível segurou a operação. A reclassificação acima foi concluída após a recarga, já com o modelo titular.