Skip to content

Spec 003e: nomes de bebês da Nova Zelândia (DIA) - #28

Merged
matbrgz merged 8 commits into
masterfrom
spec-003e-nova-zelandia
Oct 12, 2026
Merged

matbrgz merged 8 commits into
masterfrom
spec-003e-nova-zelandia

Conversation

@matbrgz

@matbrgz matbrgz commented Oct 12, 2026 •

Copy link
Copy Markdown
Collaborator

Spec 003e: Nova Zelândia (DIA, "Baby Name popularity over time")

Status da spec: Em PR (#28).

O que muda

  • Spec docs/specs/003e-nova-zelandia/ (spec, plano, tarefas) e ADR 0007 (nomes corrompidos na fonte são descartados; um byte só é traduzido quando todas as suas ocorrências formam um nome atestado).
  • cache.py: resposta text/html para recurso que não é HTML vira BlockedError, sem novas tentativas e sem gravar no cache, com o caminho onde gravar o arquivo baixado pelo navegador. A Imperva do catálogo responde 200 com página de desafio, não 403, então a mensagem da spec 003 (R4) não disparava.
  • Adaptador nz_dia_births.py: UTF-8 se o arquivo inteiro for válido; senão tabela fechada 0x82/0xE9 -> é, 0xF6 -> ö (leituras em CP437, CP850, Windows-1252, Latin-1 e Mac Roman na tabela de R2 da spec); demais bytes viram U+FFFD. Nomes com ? ou U+FFFD são descartados e avisados no log (linhas, registros, formas).
  • sources.yaml e ATRIBUICAO.md com a fonte ao fim; amostra real de 18 linhas (331 bytes); NZ no passo das fontes oficiais da CI.
  • Mesclado com o master atual (003b INE, 003d Statistics Canada, manutenção Manutenção: pendências menores das specs 002 e 003 e passo anual do INSEE #21): a CI confere CA ES FR IE NO NZ US.

Critérios de aceite e verificação

  1. nz-dia-births em sources.yaml (CC-BY-4.0, NZ, births, suppression 10): test_fontes_oficiais.py.
  2. Registros da amostra escritos à mão, Esmé nas duas codificações: test_parse_da_amostra_real.
  3. Aviso de descarte: test_nomes_corrompidos_sao_descartados_e_avisados (caplog).
  4. UTF-8 válido com Māia: test_arquivo_utf8_valido_e_lido_como_utf8.
  5. HTML com 200: test_pagina_html_no_lugar_do_arquivo_nao_entra_no_cache; HTML no cache: test_pagina_html_no_cache_explica_o_que_fazer. Conferido contra o host real: namescommons fetch nz-dia-births falha com a mensagem e deixa o cache vazio.
  6. by_country/NZ.csv igual a valores escritos à mão: test_passo_das_fontes_oficiais_roda_localmente.
  7. Arquivo real (1.326.413 bytes, SHA-256 dccaa0ac...e102, baixado pelo navegador): adaptador emite 74.006 registros; ingest nz-dia-births --offline produz 73.991 observações (15 pares só com caixa diferente somados pela spec 002, R1.4), descarta 13 linhas e 164 registros; 1,15 s e 114 MB de pico num Apple M4.
  8. uv run pytest -q: 517 passed depois do merge com o master; os dois passos offline da CI rodados localmente: OK: 8 observações, 1 país e OK: 87 observações, 7 países, com o aviso de 3 linhas descartadas da amostra no stderr.

Decisões tomadas sozinho (e custo se estiverem erradas)

  • Tabela fechada em vez de uma página de código: o arquivo mistura CP437 e Latin-1. Custo: se um 0x82 ou 0xE9 não for é em algum nome, ele sai com a letra errada (64 linhas afetadas, todas conferidas).
  • 0x8D/0x8F (Nīkau, Kāwhai) descartados, não traduzidos: perde 7 linhas reais.
  • Regra do HTML no cache vale para todas as fontes. Custo: uma fonte que sirva dados com text/html passaria a falhar (nenhuma das atuais).
  • Aviso por logging (sem canal novo no contrato). Custo: quem configurar logging acima de WARNING não vê o aviso.

Pendência aberta: #32 (descartes por fonte no manifesto, spec 006).

Closes #10

🤖 Generated with Claude Code

matbrgz and others added 8 commits October 12, 2026 12:03
Registra o conjunto "Baby Name popularity over time" do Department of
Internal Affairs (CC BY 4.0), a codificação misturada medida byte a byte
no CSV real, o descarte de nomes corrompidos na fonte e o bloqueio da
Imperva que responde 200 com página HTML.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Três tarefas: recusa de página HTML no cache, adaptador nz-dia-births
com a tabela fechada de bytes e o descarte avisado, e o país NZ no
passo das fontes oficiais da CI.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Servidores como a Imperva do catálogo da Nova Zelândia respondem 200 com
uma página de desafio em vez de 403. fetch agora recusa text/html para
recurso que não é HTML, sem novas tentativas e sem gravar nada no cache,
e diz onde gravar o arquivo baixado pelo navegador.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Adaptador do CSV "Baby Name popularity over time" do Department of
Internal Affairs: lê UTF-8 quando o arquivo inteiro é válido e, senão,
traduz só os bytes de leitura inequívoca (0x82 e 0xE9 para é, 0xF6
para ö); nomes com ? ou U+FFFD são descartados e avisados no log com o
número de linhas e de registros (ADR 0006). Amostra real de 18 linhas,
com acentos em CP437 e Latin-1 e nomes corrompidos na origem.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…, Task 3)

O passo passa a exigir by_country/NZ.csv, e o teste compara o arquivo
com valores escritos à mão e confere o aviso de nomes descartados.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
O adaptador emite 74.006 registros; o ingest produz 73.991 observações
porque 15 pares diferem só na caixa e são somados pela chave da spec
002. 13 linhas e 164 registros descartados, 1,2 s e 114 MB.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Traz as specs 003b (INE, ADRs 0005 e 0006) e 003d (Statistics Canada,
ADR 0004) e a manutenção do PR #21. Conflitos: cache.py mantém a
recusa de text/html antes do arquivo temporário, a validação de
Content-Length e as tentativas definitivas do master; conftest e
test_cache juntam os dois grupos; CI e test_ci conferem os 7 países;
sources.yaml e ATRIBUICAO.md com ca, es e nz; ROADMAP com 3b e 3d
mescladas.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…spec 003e)

- ADR 0006 vira 0007, porque o master já tem o 0006 da contagem de
  sobrenomes; referências atualizadas na spec, no plano, nas tarefas, no
  ROADMAP e no adaptador.
- A tabela de R2 lista a leitura de cada byte em CP437, CP850,
  Windows-1252, Latin-1 e Mac Roman (0xE9 é Ú em CP850 e È em Mac
  Roman), e o ADR passa a decidir pela forma atestada em todas as
  ocorrências do byte, não por ser letra numa só página de código.
- ADR: edição convertida pela metade descarta os nomes UTF-8 de modo
  seguro e visível no aviso.
- Spec: forma exibida dos pares só de caixa segue a de maior contagem;
  status Em PR (#28).
- Adaptador: decodificação legada com decode("latin-1").translate.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@matbrgz
matbrgz merged commit 0ae9575 into master Oct 12, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

NZ DIA: avaliar licença e formato dos nomes de bebês

1 participant