Files
brasiliano/tasks/TODO.md
T

68 lines
6.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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/`](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`](done/TODO-2026-09-30.md). Plano, estado e
> descrição NOBRADE: [`PLANO.md`](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).