Files
ESPDocs/CHANGELOG.md
T
Lucas RayanandClaude Sonnet 5.5 ea51aa62b8
Release / Plano (reaproveitar a imagem?) (push) Successful in 5s
Release / ci (push) Skipped
Release / Publica a imagem (linux/arm64) (push) Successful in 17s
Release / Cria a release no Gitea (push) Successful in 6s
docs: changelog 1.4.2
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-01 21:42:00 -03:00

178 lines
11 KiB
Markdown

# Registro de mudanças
Tudo o que muda de relevante no ESPDocs está aqui. O formato segue o
[Keep a Changelog](https://keepachangelog.com/pt-BR/1.1.0/) e o projeto segue o
[Versionamento Semântico](https://semver.org/lang/pt-BR/).
## [Não lançado]
## [1.4.2] - 2026-11-02
### Corrigido
- A release passa os segredos ao workflow de CI que chama (`secrets: inherit`). Sem isso,
uma release que precisava construir a imagem falhava no login do registro.
- Inclui a correção da 1.4.1: a tag `v1.4.1` não chegou a ter release, porque a CI
dela falhou pelo problema acima.
## [1.4.1] - 2026-11-01
### Corrigido
- As fotos das placas de desenvolvimento oficiais na página de cada série foram feitas
para fundo claro e ficavam ruins no tema escuro. O quadro delas agora é sempre
branco, nos dois temas; o resto do site continua seguindo o tema.
## [1.4.0] - 2026-11-01
### Adicionado
- Internacionalização completa para o idioma espanhol neutro latino-americano (`es`) (Fase 4):
- Ativação do espanhol em `ENABLED_LOCALES = ["pt", "en", "es"]` e no seletor de idiomas do cabeçalho.
- Tradução técnica integral e paridade estrutural em `messages/es.json` (15 namespaces) e arquivos de dados em `data/es/` (`series.json`, `frameworks.json`, `conexoes/*.json`) e `lib/data/es/` (`glossario.js`, `diagnostico.js`, `componentes.js`, `topicos.js`).
- 14 exemplos práticos de código com comentários em espanhol em `public/exemplos/es/`.
- Roteamento com slugs canônicos em espanhol (`/es/catalogo`, `/es/comparacion`, `/es/componentes`, `/es/diagnostico`, `/es/frameworks`, `/es/glosario`, `/es/selector`, `/es/acerca`).
- Busca por idioma em `/api/busca/es` com normalização de acentos e 'ñ', sem menção ao livro e com links para os slugs canônicos em espanhol.
- Exclusão total e estrita de referências ao livro no idioma espanhol (menu, rodapé, busca, sitemap e metadados), mantendo `/es/livro` respondendo HTTP 404.
- Tabela de catálogo com cabeçalhos traduzidos e mapeamento de valores na interface em espanhol.
- Negociação de idioma na raiz com roteamento para `es` para cabeçalhos Accept-Language `es-*` ou cookie `NEXT_LOCALE=es`, e fallback padrão para `en` para navegadores com idiomas inativos (`fr`, `de`, `zh-CN`).
- Metadados de SEO, Open Graph e Twitter Cards localizados com `og:locale` (`es_419`), `inLanguage` (`es-419`) e `hreflang` cruzado entre `pt-BR`, `en`, `es-419` e `x-default`.
- Extensão dos scripts de verificação: `scripts/check-i18n.mjs` valida `es`, `scripts/smoke-imagem.sh` testa as rotas espanholas e `scripts/verifica-vazamentos.py` varre as 36 rotas em espanhol (texto visível e JSON-LD).
## [1.3.0] - 2026-11-01
### Adicionado
- Internacionalização completa para o idioma inglês (`en`) (Fase 3):
- Ativação do inglês em `ENABLED_LOCALES = ["pt", "en"]` com reexibição do seletor de idiomas no cabeçalho.
- Tradução técnica integral e paridade estrutural em `messages/en.json` (15 namespaces) e arquivos de dados em `data/en/` (`series.json`, `frameworks.json`, `conexoes/*.json`) e `lib/data/en/` (`glossario.js`, `diagnostico.js`, `componentes.js`, `topicos.js`).
- 14 exemplos práticos de código com comentários em inglês em `public/exemplos/en/`.
- Roteamento com slugs canônicos em inglês (`/en/catalog`, `/en/compare`, `/en/components`, `/en/diagnostics`, `/en/frameworks`, `/en/glossary`, `/en/selector`, `/en/about`).
- Índice de busca dedicado por idioma em `/api/busca/[locale]`, com links direcionando aos slugs do idioma correspondente e caixa de busca localizada.
- Exclusão total e estrita de referências ao livro no idioma inglês (menu, rodapé, busca, sitemap e metadados), mantendo `/en/livro` respondendo HTTP 404.
- Tabela de catálogo com cabeçalhos traduzidos e mapeamento de valores na interface inglesa.
- Negociação de idioma na raiz com fallback padrão para `en` para navegadores com idiomas inativos ou genéricos, e redirecionamento 307 de prefixos inativos (`es`, `fr`, `de`, `zh-CN`) para `/en` preservando o mapeamento de slugs.
- Metadados de SEO, Open Graph e Twitter Cards localizados, com `hreflang` cruzado entre `pt-BR`, `en` e `x-default`.
- Verificações permanentes contra vazamento de português no inglês: `scripts/check-i18n.mjs` falha em textos idênticos entre `pt` e `en` (fora de uma lista de termos técnicos), e `scripts/verifica-vazamentos.py`, chamado pelo teste de fumaça da CI, varre as 36 rotas em inglês, texto visível e JSON-LD.
### Alterado
- A raiz `/` passa a levar quem não fala português ao inglês (`/en`); o português continua em `/pt`. Idiomas ainda sem tradução (`es`, `fr`, `de`, `zh-CN`) redirecionam para `/en`.
## [1.2.0] - 2026-11-01
### Adicionado
- Infraestrutura de internacionalização com `next-intl` (Fase 1):
- Roteamento com prefixo de idioma sob `app/[locale]/`, com 6 locales declarados (`pt`, `en`, `es`, `fr`, `de`, `zh-CN`).
- `middleware.js` com negociação de idioma na raiz por cookie `NEXT_LOCALE` e cabeçalho `Accept-Language` (com pesos `q`), redirecionamento 308 de URLs antigas sem prefixo para `/pt/`, e retorno 404 para `/livro` fora do português.
- Seletor de idiomas acessível no cabeçalho com atalho para os 6 idiomas, persistência via cookie `NEXT_LOCALE` e mapeamento de rota correspondente.
- Regras de tipografia de sistema CJK para `zh-CN` e hifenização/quebra de palavras para `de` e `fr`.
- Extração de strings e dados canônicos (Fase 2):
- Catálogo de mensagens canônico `messages/pt.json` cobrindo 15 namespaces de páginas e componentes sem alteração de conteúdo.
- Conjunto de dados canônicos em `data/pt/` (`series.json`, `frameworks.json`, `conexoes/*.json`) e módulos em `lib/data/pt/` (`glossario.js`, `diagnostico.js`, `componentes.js`, `topicos.js`) com carregadores por locale em `lib/data/index.js`.
- Script automatizado de validação `check:i18n` integrado ao `npm run check`, verificando paridade de chaves, ausência de valores vazios e garantia estrita de ausência de referências ao livro fora do português.
- Controle de idiomas ativos e proteção contra conteúdo não traduzido:
- Configuração centralizada em `i18n/links.js` (`ENABLED_LOCALES`), atualmente restrita a `["pt"]`.
- Redirecionamento 307 de qualquer prefixo de idioma inativo para `/pt` preservando o caminho ou mapeamento equivalente.
- Negociação de idioma na raiz selecionando unicamente entre os idiomas ativos (com fallback em `pt`).
- Seletor de idiomas no cabeçalho oculto enquanto apenas um idioma estiver ativo.
- Sitemap, hreflang/alternates e build SSG restritos aos idiomas ativos.
### Alterado
- Todas as páginas passam a viver sob `/pt/` (por exemplo `/pt/series`). As URLs
antigas, sem prefixo, redirecionam com 308 para o endereço novo, e a raiz `/`
redireciona para o idioma negociado. O conteúdo do site em português não mudou.
- O teste de subida da imagem na CI virou `scripts/smoke-imagem.sh`: confere as
rotas de cada idioma, a negociação de `Accept-Language`, os redirects 308 das
URLs antigas, o 404 do livro fora do português e a metadata no `<head>`, e
falha se o servidor registrar erro de render. O `curl` só na raiz deixou passar
uma home quebrada.
- A metadata (título, `canonical`, Open Graph) sempre sai no `<head>` do HTML
inicial, para qualquer cliente, como já era antes do i18n.
- A raiz `/` redireciona direto para `/<idioma>`, em um salto só.
## [1.1.0] - 2026-11-01
### Adicionado
- Busca no site, aberta pelo botão do cabeçalho ou por Ctrl/⌘+K. O índice
(séries, frameworks, glossário, erros de diagnóstico, componentes e conexões)
é gerado no build, em `/api/busca`.
### Alterado
- Os links do repositório do projeto (rodapé, "Sobre", dados estruturados)
apontam para o Gitea, e o ícone do GitHub virou o do Gitea. Os links dos
frameworks da Espressif continuam no GitHub, porque os repositórios são deles.
- O site passou a rodar na Oracle, a partir da imagem Docker do registro do
Gitea, em `espdocs.cienciaembarcada.com.br` e `espdocs.lucasrguerra.dev.br`.
- CI: a imagem é construída, escaneada e testada uma vez, em arm64, no push da
branch, e o release só aplica as tags; o gatilho `pull_request` (que repetia o
push) e o segundo `next build` do job de lint saíram, e os caches do npm e da
compilação do Next ficam entre as execuções.
## [1.0.0] - 2026-10-30
A primeira versão com tag. O trabalho anterior nunca foi tagueado, então esta
entrada resume tudo desde o primeiro commit, em 2025-10-21, até a imagem Docker.
### Conteúdo
- Documentação não oficial do ecossistema ESP32 em português: uma página por
série de chips, com especificações, conexões e consumo, e a página de comparação
lado a lado.
- Diagramas interativos de conexões e componentes, com o esquema de dados de
conexões padronizado.
- Frameworks documentados: ESP-IDF, Arduino, MicroPython, ESP-RainMaker e
ESP-Matter.
- Glossário técnico, página "Sobre" e chamadas para o catálogo.
- Catálogo de placas de desenvolvimento a partir de uma planilha do Google
(`/api/placas`), com filtros e cache de 10 minutos.
- Ferramenta de seleção: perguntas sobre o projeto (Ethernet, tela e outras) e
recomendação da série mais adequada.
- Novos modelos, incluindo o ESP32-H4, e a contagem de componentes e de drivers
(interface, conectividade e áudio) ampliada.
### Interface e acessibilidade
- Tema escuro e redesenho das páginas internas no novo sistema de design, com
contraste AAA e auditoria automática de temas e de páginas (`npm run check`).
- Identidade nova: logo, ícones, `manifest` e imagens Open Graph.
- SEO: mapa do site, dados estruturados, trilhas de navegação e favicons.
- Exportação do conteúdo em PDF CMYK e dos slides de treinamento em PDF 16:9,
gerados com Puppeteer (scripts locais).
### Dados corrigidos
- Revisão dos dados das séries contra os datasheets oficiais da Espressif:
consumo, temperatura, ADC, PSRAM, memória LP, CAN FD, frequências e versões de
Secure Boot do ESP32, S2, S3, C2, C3, C5, C6, C61, H2, H4, P4 e S31.
### Implantação
- Imagem Docker (`node:22-alpine`, build `standalone`, usuário sem privilégio,
`HEALTHCHECK`), pronta para o servidor Oracle, publicada para `linux/arm64` em
`git.lucasrguerra.dev.br/lucasrguerra/espdocs`. A variável `NEXT_OUTPUT=standalone`
liga o empacotamento só dentro da imagem; fora dela o build continua o mesmo
para o `pm2` (`start.config.js`, porta 3001).
- O código passou para o Gitea, com CI em `.gitea/workflows`: lint, auditorias,
Trivy no repositório e na imagem, e teste de que a imagem sobe e responde. O
Release reaproveita a imagem quando nada do que a compõe mudou.
### Segurança
- `next` 15.5.28, que corrige a execução remota de código sem autenticação na
otimização de imagens (GHSA-2464-fhr4-w9xw), e `postcss` fixado acima da cópia
embutida no `next`.
[Não lançado]: https://git.lucasrguerra.dev.br/lucasrguerra/ESPDocs/compare/v1.4.2...HEAD
[1.4.2]: https://git.lucasrguerra.dev.br/lucasrguerra/ESPDocs/compare/v1.4.1...v1.4.2
[1.4.1]: https://git.lucasrguerra.dev.br/lucasrguerra/ESPDocs/compare/v1.4.0...v1.4.1
[1.4.0]: https://git.lucasrguerra.dev.br/lucasrguerra/ESPDocs/compare/v1.3.0...v1.4.0
[1.3.0]: https://git.lucasrguerra.dev.br/lucasrguerra/ESPDocs/compare/v1.2.0...v1.3.0
[1.2.0]: https://git.lucasrguerra.dev.br/lucasrguerra/ESPDocs/compare/v1.1.0...v1.2.0
[1.1.0]: https://git.lucasrguerra.dev.br/lucasrguerra/ESPDocs/compare/v1.0.0...v1.1.0
[1.0.0]: https://git.lucasrguerra.dev.br/lucasrguerra/ESPDocs/releases/tag/v1.0.0