Pipeline de geração, merge e exportação do corpus. Editar sempre em scripts/ — cópias em docs/scripts/ são artefato de build Jekyll.
Requisitos: Python 3.10+ (stdlib na maioria). Exceções: pipeline_tse_farmaceutico.py e lawfare_timeline_farma_2022.py exigem pandas.
Ordem típica após receber JSON em _data/todo/:
# 1. Simular publicação (lista posts que seriam criados)
python scripts/sync_todo_current.py --dry-run
# 2. Publicar: _posts/ + lawfare.json + sync JSON + arquivar todo
python scripts/sync_todo_current.py
# 3. Atualizar mapa de IDs e HTML de status
python tools/sync_corpus_ids.py
# 4. Validar integridade do corpus
pwsh -File tools/validate-ids.ps1 -VerboseVerificação cruzada antes do merge:
python tools/verify_todo_posts.pyPublica JSON pendentes em _data/todo/ como posts Jekyll e atualiza o corpus.
| Entrada | Destino |
|---|---|
T-NNN*.json ou analise_estrutural |
_posts/estudos/ (track temático) |
entries[] com ID numérico |
_posts/<categoria>/ (track main) |
Batches mistos (ex.: 1620 + T-222) |
Roteamento por item |
Também atualiza lawfare.json, lawfare-unified-corpus.json, claude.ai-corpus-ids-sync.json e move JSON processados para _data/processados/.
python scripts/sync_todo_current.py --dry-run
python scripts/sync_todo_current.pyExemplo: batch lawfare-batch-1620-t222-t223-lacunas.json gera 1 post timeline + 2 estudos e arquiva o arquivo.
Resolve renumeracao de batches antigos com colisão de faixas:
| Origem | Destino |
|---|---|
| Biomm 1481–1500 | 1527–1546 |
| Zema 185–188 | 1547–1550 |
| Homeschooling | 1551 |
| Thematic 189 | 190 |
python scripts/merge_todo_pending.py --dry-run
python scripts/merge_todo_pending.pyPreferir
sync_todo_current.pypara fila editorial atual. Usarmerge_todo_pending.pyapenas para batches históricos documentados.
Merge de batches todo em lawfare.json + posts, com regras fixas (Biazucci 1511–1513, crise 1514–1524, Ramagem 1525–1526).
python scripts/merge_todo_batches.py --dry-run
python scripts/merge_todo_batches.py
python scripts/merge_todo_batches.py --force-posts # sobrescreve posts existentes
python scripts/merge_todo_batches.py --skip-xarticles # pula conversão X ArticleProcessa qualquer JSON em _data/todo/ com schemas variados (instancia_padrao, entries[], assuntos[], objeto único).
python scripts/merge_todo_json.py --dry-run
python scripts/merge_todo_json.py
python scripts/merge_todo_json.py --force # sobrescreve posts existentesScripts one-shot para rodadas editoriais específicas (IDs a partir de 1577; Sepse T-210–T-214; decano Gilmar Mendes). Não são genéricos — ler cabeçalho do arquivo antes de executar.
python scripts/sync_todo_batches.py --dry-run
python scripts/sync_todo_batches.py
python scripts/sync_new_todo_batches.pyGera posts a partir de _data/lawfare-unified-corpus.json (respeita jekyll_filename, conexões P01–P12).
# Apenas arquivos ausentes em _posts/
python scripts/gerar_posts_unified_corpus.py
# Regenerar tudo (cuidado: sobrescreve)
python scripts/gerar_posts_unified_corpus.py --forceGera posts a partir de _data/lawfare-mare-liberum-timeline.json (não usa lawfare.json principal).
python scripts/gerar_posts_from_lawfare.pyBatch histórico: _data/lawfare-timeline-124-145.json → _posts/.
python scripts/gerar_posts_timeline_124_145.pyPosts categoria penduricalhos + entradas em lawfare.json a partir de tools/penduricalhos-novos-eventos-*.json.
python scripts/gerar_penduricalhos_de_json.pyGera Markdown a partir de JSON com campos data, acao, descricao_completa, violacao, envolvidos, fontes.
python scripts/gerar_artigos.py _data/meu-batch-eventos.jsonGera posts Jekyll para categoria crise diplomática a partir de JSON (assuntos[] ou array direto).
python scripts/crise-diplomatica-AJUSTADA.py _data/export-crise-diplomatica.json
python scripts/crise-diplomatica-AJUSTADA.py _data/batch.json --output-dir crise-diplomaticaPublica listas fixas de arquivos (entries-153-158.json, lawfare-1441-1447.json, etc.). Editar o array files no script antes de rodar.
python scripts/publish_json_entries.pyExport reverso: _posts/ → JSON estruturado (front matter + corpo).
python scripts/extrair_posts_para_json.py
python scripts/extrair_posts_para_json.py --output _data/posts-extraidos.json
python scripts/extrair_posts_para_json.py --posts-dir _posts/lawfare --limit 50
python scripts/extrair_posts_para_json.py --no-prettyExtrai subset temático de lawfare.json (lawfare, dossiê, vaza toga + keywords Bolsonaro).
python scripts/filtrar_lawfare_bolsonaro.py
python scripts/filtrar_lawfare_bolsonaro.py \
--input _data/lawfare.json \
--output _data/lawfare-ataques-bolsonaro-apoiadores.jsonAlternativa atualizada: timeline deduplicada em _data/export-bolsonaro-timeline.json via python tools/export_bolsonaro_timeline.py.
Scripts one-shot para checkpoints históricos — usar só se o caso se aplicar.
| Script | Função |
|---|---|
merge_abr_mai_2026_lawfare.py |
Insere posts 2026-04-* e 2026-05-* ausentes em lawfare.json |
unificar_timeline_em_lawfare_full.py |
Mescla lawfare-timeline-124-145.json em lawfare-full.json |
adicionar_entradas_export_15abr2026.py |
Import checkpoint abr/2026 (FPA, Persona Non Grata, Gilmar) |
python scripts/merge_abr_mai_2026_lawfare.py
python scripts/unificar_timeline_em_lawfare_full.py
python scripts/adicionar_entradas_export_15abr2026.pyAnálise externa (não altera o site Jekyll). Requer CSVs do TSE e Receita Federal.
python scripts/pipeline_tse_farmaceutico.py \
--receitas receitas_candidatos_2022_BRASIL.csv \
--estabelecimentos Estabelecimentos0.csv \
--ano 2022 \
--saida ranking_partidos_farma_2022.csvNotebook-style: editar caminhos ARQUIVO_RECEITAS_TSE e ARQUIVO_EMPRESAS_RF no topo do arquivo e executar.
python scripts/lawfare_timeline_farma_2022.py| Script | Uso |
|---|---|
optimize_images.ps1 |
Otimiza pasta assets/img (resize, compress, WebP) |
convert_to_webp.ps1 |
Converte uma imagem |
convert_to_webp_python.py |
Fallback Python (Pillow) |
convert_estudos_webp.ps1 |
Capas em assets/img/estudos |
# Otimizar todas as imagens (dry-run)
.\scripts\optimize_images.ps1 -DryRun
# Otimizar com qualidade customizada
.\scripts\optimize_images.ps1 -Path assets\img -Quality 82
# Converter uma imagem
.\scripts\convert_to_webp.ps1 -ImagePath assets\img\lawfare-timeline.png -Quality 80
# Capas dos estudos
.\scripts\convert_estudos_webp.ps1
.\scripts\convert_estudos_webp.ps1 -Force -Quality 82 -IncludeArtigosHeropython scripts/convert_to_webp_python.py assets/img/exemplo.png 80Guia detalhado: optimize_images.md.
| Objetivo | Comando |
|---|---|
Publicar fila _data/todo/ |
python scripts/sync_todo_current.py |
| Validar IDs pós-merge | pwsh -File tools/validate-ids.ps1 |
| Sync mapa de IDs | python tools/sync_corpus_ids.py |
| Posts → JSON | python scripts/extrair_posts_para_json.py |
| Timeline Bolsonaro | python tools/export_bolsonaro_timeline.py |
| Gerar posts unified | python scripts/gerar_posts_unified_corpus.py |
| Otimizar imagens | .\scripts\optimize_images.ps1 |
- Ferramentas diárias:
tools/e tabela emREADME.md - Metodologia e schema:
METHODOLOGY.md - Fila editorial:
TODO.md· notas em_data/todo/todo.md - Sync de IDs para agentes:
tools/instrucao-claude-ai-ids.md
Atualizado: 2026-07-18