Files
brasiliano/tasks/TODO.md
T

6.4 KiB
Raw Blame History

TODO — Brasiliana → S3

Só o que está aberto. O que foi concluído, com os achados e o histórico das sessões, está em tasks/done/; a última versão completa deste arquivo, com os achados 2.15–2.28 e 3.1–3.5 citados abaixo, é done/TODO-2026-09-30.md. Plano, estado e descrição NOBRADE: PLANO.md. Scripts e estado em pipeline/.

Pendente

Acervo no bucket

  • Rebaixar os 69 itens sem preservação (achados 2.25–2.27): a origem responde HTTP 500 ao bitstream; todos têm miniatura. Quando a origem se recuperar, basta um FALTA3.retomar()/F5.iniciar() na aba do navegador (o que já baixou fica marcado em bras_faltantes_v3). Lista em errors.md.
  • 30 arquivos extra_seqN apagados pelo subidor.py antigo (achado 2.19): os 8 itens principais já têm preservação de novo, mas estes 30 extras (vários TIFF) não aparecem no ledger. Lista com URL em pipeline/apagados-pelo-subidor-antigo.jsonl. Precisa da aba do navegador.
  • subidor.py antigo: aposentar ou corrigir a regra de assinatura antes de qualquer uso futuro — do jeito que está, apaga TIFF. O que roda hoje é o subidor-paralelo.py.
  • 30 objetos (N) com tamanho diferente do gêmeo (achado 2.20) — conferência individual, não dá pra automatizar com segurança.
  • 43 objetos (N) que são o único arquivo do item (achado 2.20) — renomear tirando o sufixo, pra o nome não mentir sobre haver um original ao lado.
  • Baixar os 348 legados recuperáveis pelo endereço novo (achado 2.28) — atualizar antes o baixador.py para https://objdigital.bn.br/objdigital2/acervo_digital/.
  • Decidir o que fazer com as 66 páginas HTML de visualizador (25 já em legado/ + 41 no endereço novo; achado 2.28): apagar do bucket e do ledger (não são imagem), ou montar a imagem a partir dos tiles Deep Zoom quando o objdigital voltar. Todos os 25 itens já têm preservação.
  • Confirmar no bucket que a contagem de itens/checksums bate com os itens reais esperados.
  • Reconciliar 13.058 vs 13.060 — o MANIFEST fala em 13.058 itens reais, o catalogo.jsonl tem 13.060 handles distintos. Diferença de 2 nunca explicada.
  • Crawl da Fase 1 pode ter mais buracos (achado 2.10 do PLANO.md): 2 itens reais (1799, 4798) só foram achados porque o WordPress os citava. Não existe verificação exaustiva de que browse?type=title pegou 100% de cada comunidade.
  • dc.rights ausente em 5.833 itens (44,7%) — característica real da fonte, não bug. Só precisa ficar documentado no MANIFEST final.

Mural

  • .git do rafapolo/xyz está em 2,5 GB e cada publicação do atlas .webp soma ~51 MB permanentes (binário não faz delta). Se o atlas for republicado com frequência, tirar os .webp do git — LFS, ou servir do próprio bucket. (Publicar só index.html + atlas-map.json, como em 30/09, não pesa.)
  • Encolher o atlas-map.json com dicionário (achado 3.2) — hoje 10,4 MB com os campos NOBRADE. Só vale se o JSON.parse no celular virar problema medido.

Notas técnicas úteis pra retomar

  • Downloads automáticos do Chrome exigem permissão manual em chrome://settings/content/automaticDownloads (site adicionado: https://brasilianafotografica.bn.gov.br) — já concedida, vale pra novos scripts também, não só o original.
  • BRAS, BAIXA, BAIXA_THUMB, BAIXA_EXTRA — todos no window da mesma aba, mesmo IndexedDB (bras). Todos sobrevivem a fechar/reabrir a aba (dado fica salvo), mas o loop para e precisa recolar o script certo pra retomar.
  • Regerar as miniaturas derivadas (tudo reconstruível, nada precisa ser guardado): no finland, apt install libvips-tools parallel + s5cmd; pra cada chave de itens/*/preservacao/*, s5cmd cat num tmp e vipsthumbnail "$TMP" --size 256 --output "$OUT[Q=80,strip]", com parallel -j 10. ~640 thumbs/min, tráfego intra-Hetzner (bucket é hel1, o finland também) — não passa pelo link de casa. O que ainda está só em ~/Downloads sai mais barato derivado localmente com magick: mandar os 71 GB pro finland custaria os mesmos dias do upload pendente.
  • Cuidado ao parsear s5cmd ls: nomes de arquivo do acervo têm espaço duplo (48094 Álbum 311 - ...jpg). awk '{$1="";$2="";$3=""; print}' recolapsa esses espaços e produz chaves que não existem — 31 downloads falharam assim antes de eu perceber. Use sed -E 's|^[0-9/]+ +[0-9:]+ +[0-9]+ ||'`, que preserva o resto literal.
  • sqlite3 desta máquina tem .sqliterc forçando modo box: qualquer script que leia a saída precisa de sqlite3 -init /dev/null -noheader -separator $'\t', senão vem borda de tabela no lugar dos dados (me custou um diff inteiro de falso positivo).
  • until ! pgrep -f X; do sleep; done nunca termina: a linha de comando do próprio loop contém X, então o pgrep -f se acha e a condição nunca vira falsa. Um loop desses ficou girando horas depois do trabalho acabar (12/09, morto à mão). Esperar por PID (while kill -0 $PID) ou usar pgrep -f '[t]humb-local' para o padrão não casar consigo mesmo.
  • Parar processo lançado em background: SIGTERM, não SIGINT. Processo iniciado com & num shell não interativo herda o SIGINT ignorado (o subidor.py ficou 60 s vivo depois do kill -INT). Com SIGTERM, o aws s3 cp filho termina órfão, o que é inofensivo: sem linha no ledger e sem apagar o local, o próximo uploader sobe de novo a mesma chave.
  • Upload de casa: 69 Mbps (networkQuality -s, 12/09); download 312 Mbps.
  • Assinaturas aceitas como imagem (subidor-paralelo.py): JPEG FFD8, PNG, TIFF II*\0/MM\0*, GIF, JP2, BMP BM, WebP. Content-Type sai do conteúdo, não da extensão (TIFF chega com nome .jpg).
  • vipsthumbnail --output é relativo à pasta do arquivo de entrada, não ao diretório corrente: vipsthumbnail tmp/x.img --output out/y.webp tenta gravar em tmp/out/y.webp e falha. Usar caminho absoluto na saída. (Custou uma miniatura "refeita" que não foi refeita, em 13/09.)
  • Scripts-fonte em pipeline/: coletor.js / coletor-resume.js (metadados), baixador-navegador.js (preservação, todos os itens), baixador-thumb.js (miniaturas), baixador-extras.js (2a+ imagem de itens multi-bitstream), reparo-multibitstream.js (enumera bitstreams reais de um item).