diff --git a/docs/postmortems/2026-10-02-hero-webp-avif-otimizador.md b/docs/postmortems/2026-10-02-hero-webp-avif-otimizador.md index c83f6402..2c22b7be 100644 --- a/docs/postmortems/2026-10-02-hero-webp-avif-otimizador.md +++ b/docs/postmortems/2026-10-02-hero-webp-avif-otimizador.md @@ -10,19 +10,19 @@ | Severidade | alta (imagens principais da home ausentes para parte dos visitantes; sem indisponibilidade geral nem perda de dados) | | Ambiente | prod | | Issue(s) | sem Issue | -| PR do fix | pendente — PR deste fluxo | +| PR do fix | [#1433](https://github.com/fsolla/teqo/pull/1433) | | Detectado por | humano (relato na sessão de bug-fix de 2026-10-02 ~17:15 -03: "as imagens pararam de aparecer") | ## Timeline -| Momento | Data/hora | Evento | -| --------------------- | ------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| Início provável | 2026-10-02 ~16:35 -03 (~19:35Z) | Deploy de produção do SHA `ac39c817` recria o container (job de produção do `deploy.yml` rodou 19:26:40Z–19:35:53Z; container recriado ~19:35Z ≈ 16:35 -03). Antes disso o sintoma não existia; staging (mesmo SHA, deploy 15:17Z) nunca reproduziu. | -| Detecção | 2026-10-02 ~17:15 -03 (≈20:15Z) | Relato humano na sessão de bug-fix ("as imagens pararam de aparecer"). No browser, requests a `/_next/image` ficavam pendentes para sempre (`complete=false`, `naturalWidth=0`); o Cloudflare devolvia 524 após ~100–125s no mesmo URL exato. Sem Issue. | -| Correção implementada | 2026-10-02 | Worktree `fix/16`: 5 masters do hero regerados em WebP display-size, 3 refs de cards da home apontadas para `.webp` existentes, 9 `.avif` de `public/` removidos, `scripts/build-radio-artes.mjs` lendo `JOA00162.webp` e 3 guards de formato. `pnpm gate:fast` verde (468 arquivos, 5178 testes); e2e `frontend.e2e.spec.ts` 42 passed. | -| Correção mergeada | pendente | PR deste fluxo aberto com o fix, os guards e este post-mortem; merge pendente do required check + auto-merge. | -| Deploy | pendente | Merge em `main` dispara o deploy; produção só após approve humano no environment `production`. | -| Verificado em prod | pendente | Aguardando deploy e confirmação humana. | +| Momento | Data/hora | Evento | +| --------------------- | -------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Início provável | 2026-10-02 ~16:35 -03 (~19:35Z) | Deploy de produção do SHA `ac39c817` recria o container (job de produção do `deploy.yml` rodou 19:26:40Z–19:35:53Z; container recriado ~19:35Z ≈ 16:35 -03). Antes disso o sintoma não existia; staging (mesmo SHA, deploy 15:17Z) nunca reproduziu. | +| Detecção | 2026-10-02 ~17:15 -03 (≈20:15Z) | Relato humano na sessão de bug-fix ("as imagens pararam de aparecer"). No browser, requests a `/_next/image` ficavam pendentes para sempre (`complete=false`, `naturalWidth=0`); o Cloudflare devolvia 524 após ~100–125s no mesmo URL exato. Sem Issue. | +| Correção implementada | 2026-10-02 | Worktree `fix/16`: 5 masters do hero regerados em WebP display-size, 3 refs de cards da home apontadas para `.webp` existentes, 9 `.avif` de `public/` removidos, `scripts/build-radio-artes.mjs` lendo `JOA00162.webp` e 3 guards de formato. `pnpm gate:fast` verde (468 arquivos, 5178 testes); e2e `frontend.e2e.spec.ts` 42 passed. | +| Correção mergeada | 2026-10-02 18:55 -03 (21:55:55Z) | PR [#1433](https://github.com/fsolla/teqo/pull/1433) mergeado via rebase (`afc22e5b`) após o required check `CI (PR) / checks` verde. | +| Deploy | 2026-10-02 20:54 -03 (23:54:33Z) | O run automático do merge (`37069700073`) foi pulado pelo `preflight` (havia run aguardando approval de produção — gap previsto no runbook, linha "Merge durante aprovação pendente"); o `workflow_dispatch` manual `37069890690` verificou e publicou staging, mas o job de produção falhou sem runner associado (`runner_id` 0 — causa não apurada). Produção foi publicada pelo run seguinte `37075531360` (push do C246-hotfix `8e32c7ce`, que contém `afc22e5b`) em 23:54:33Z ≈ 20:54 -03. | +| Verificado em prod | 2026-10-02 ~20:55 -03 | Read-only em `jorgesolla1313.com.br`: home com 0 ocorrências de avif; as 5 imagens do hero carregam no browser (`complete=true`, `naturalWidth` 176–591); chaves novas `*.webp` do otimizador 200 `image/webp` em 0,13–0,39s; masters novos no ar (`Jeronimo.webp` 61.752B, antes 626.200B) e AVIF antigos 404. Confirmação do humano na sessão. | ## O bug @@ -53,7 +53,8 @@ Resolve a causa: o caminho de decodificação vira libwebp (o patch oficial trat - Suíte: `pnpm gate:fast` verde (468 arquivos, 5178 testes); e2e `tests/e2e/frontend.e2e.spec.ts` 42 passed (modo dev local; o comando com dependências estourou 900s e o recipe do config `--no-deps --project=frontend` passou em 1,1 min). - Otimizador local: home com 0 ocorrências de avif; os 8 masters WebP servidos via `/_next/image` a 256w em 200 `image/webp` (0,7–1,6ms) e derivados ligeiramente menores que os do AVIF (ex.: `RUI` 256: 9,8KB vs 12,2KB). - Prod (read-only, antes do deploy): as 4 chaves AVIF seguem presas (timeout/524) e a home ainda serve AVIF (260 ocorrências). -- CI: pendente (PR ainda não aberto). Prod: pendente (deploy e confirmação humana). +- CI: verde no PR [#1433](https://github.com/fsolla/teqo/pull/1433) (required check `CI (PR) / checks`; e2e do blast radius `frontend`, `frontendConteudos`, `frontendShareLink`) e no `verify` full do deploy. +- Prod (pós-deploy, read-only): home com 0 avif; as 5 imagens do hero carregam (`complete=true`, `naturalWidth` 176–591); chaves `*.webp` 200 `image/webp` em 0,13–0,39s; masters novos no ar (`Jeronimo.webp` 61.752B) e AVIF antigos 404. Confirmação do humano na sessão. ## Prevenção