From 21a8e39fe2e9a2ffb1709ecb20173e09711d4139 Mon Sep 17 00:00:00 2001 From: Francisco Solla Date: Wed, 19 Aug 2026 20:45:12 -0300 Subject: [PATCH] =?UTF-8?q?plan(OPS73):=20deploy=20do=20fix=20OPS69=20para?= =?UTF-8?q?=20produ=C3=A7=C3=A3o=20=E2=80=94=20admin=20segue=20em=20branco?= =?UTF-8?q?=20(Related=20#114)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ops73-deploy-admin-prod-evidence.png | Bin 0 -> 2702 bytes docs/plans/ops73-deploy-admin-prod.md | 74 ++++++++++++++++++ 2 files changed, 74 insertions(+) create mode 100644 docs/plans/ops73-deploy-admin-prod-evidence.png create mode 100644 docs/plans/ops73-deploy-admin-prod.md diff --git a/docs/plans/ops73-deploy-admin-prod-evidence.png b/docs/plans/ops73-deploy-admin-prod-evidence.png new file mode 100644 index 0000000000000000000000000000000000000000..116eb10c7b95effc1cac0559d8ad6a7578657f63 GIT binary patch literal 2702 zcmeAS@N?(olHy`uVBq!ia0y~yV7dUrWgJXEk)H)h77Pqr&YmugAr*7pTyx}QFyLS? z+~mXbZ|kB*b!)r+-IZl%xFpTcFr$Eh!SW#kL(w5dh9@n|3@13*872txF(|0ZFgW;G zFf_~=RWKS3qv>HZUyPOyqvhmibud~jjy4ZQP%}vu*qHqPKU>EX*uG?712rd^8GIyI VwU@*ds{utAJYD@<);T3K0RZ%;k$(UH literal 0 HcmV?d00001 diff --git a/docs/plans/ops73-deploy-admin-prod.md b/docs/plans/ops73-deploy-admin-prod.md new file mode 100644 index 00000000..6a2d19b3 --- /dev/null +++ b/docs/plans/ops73-deploy-admin-prod.md @@ -0,0 +1,74 @@ +# Admin do Payload segue em branco em produção — deploy do fix OPS69 + verificação pós-deploy + +Status: rascunho +Atualizado em: 2026-08-19 +Issue: #114 +Priority: P1 +Model: composer-2.5 +Impeccable: A — sem mudança de UI (deploy do que já está em main) +Rascunho UI: N/A +Appetite: ~0,5 dia — deploy + verificação funcional; um outcome verificável +Responsável: — + +## Intenção + +O time editorial e de campanha está **sem CMS**: `/admin` em produção (jorgesolla1313.com.br) abre em branco (tela preta) — a página carrega, o shell hidrata, mas o formulário de login nunca renderiza. O bug raiz já foi diagnosticado e corrigido em `main` pelo **OPS69** (Issue #77, fechada): o `importMap` commitado ficou sem a entrada `@payloadcms/storage-s3/client#S3ClientUploadHandler` e o admin não monta as views quando o plugin `s3Storage` está ativo (envs `S3_*` de produção). O fix está em main desde `7162c65e` (2026-08-19). + +**Mas produção nunca recebeu o fix.** O container roda um build de 2026-08-18 21:49 (`e6bd1d26`), anterior ao merge: o deploy automático antigo morreu (#85 OPS70 — runs agendados skipped) e o caminho novo (dispatch manual do `deploy.yml` no GitHub Actions) depende do runner self-hosted no homeserver, que ainda não está instalado (#113 OPS71-INFRA). A verificação pós-deploy do OPS69 (aceite do próprio plano) nunca rodou. + +Verificado ao vivo em 2026-08-19: `/admin` de produção renderiza o shell vazio — **0 inputs, 0 botões, body sem texto** — mesmo sintoma do diagnóstico OPS69. `main` no GitHub hoje (`f5862c9b`) contém o fix. + +## Persona e fluxo + +- **Persona / contexto:** editor de conteúdo do mandato/campanha (staff que alimenta notícias e campanhas pelo Painel de Controle), bloqueado há ~1 dia. +- **Job principal:** abrir o admin, logar e voltar a editar publicações — sem depender de infra nova. +- **Fluxo desejado:** abre `jorgesolla1313.com.br/admin` → formulário de login aparece (não mais tela preta) → credenciais → dashboard com as coleções → consegue abrir uma coleção. +- **Anti-goals de produto:** não rediagnosticar o bug (OPS69 já fechou o diagnóstico com evidência); não reabrir a Issue #77; não entregar nenhuma mudança de código nova — só publicar o que já está aprovado em main. + +## Objetivo e aceite + +- `/admin` em produção renderiza o formulário de login para quem tem credencial (tela preta some). +- O container de produção roda uma revisão que contém o fix do importMap (`7162c65e` ou posterior — HEAD atual `f5862c9b`). +- O log do container de produção não re-emite `getFromImportMap: PayloadComponent not found in importMap` para o handler do storage. +- Um editor loga e abre uma coleção sem editar nada (smoke mínimo de leitura). +- Guardrail: nada de schema/migration/Consent/UI nesta entrega — é o deploy do que já está em `main`. + +## Dados (intenção) + +- **Vou apresentar dados?** Não — a verificação é funcional (render do login + log do container), nenhum número novo. + +## Direção no codebase (hipótese) + +- **Áreas prováveis:** `scripts/deploy-homeserver.sh` (o script de deploy — fonte da verdade do fluxo, roda no homeserver), `.github/workflows/deploy.yml` (dispatch manual `verify` → `deploy`), runbook `docs/ops/teqo-1313-deploy.md`, `src/app/(payload)/admin/importMap.js` (o fix já commitado — conferir a revision do container, não o arquivo). +- **Precedente a olhar:** OPS69 (`docs/plans/ops69-admin-branco-importmap-s3*.md`, #77) — aceite de verificação pós-deploy pendente; OPS71 (cutover do deploy) e #113 (runner); OPS66 (ordem migrate→build já resolvida no script). +- **Risco de acoplamento:** o deploy de `main` leva junto outras mudanças já aprovadas (ex.: S7, cards da home) — esperado e desejado (deploy do HEAD); o smoke do script cobre `/`, `/campanha/login`, `/admin`; rollback = restore do compose (runbook). + +## Dependências + +- Nenhuma dura. #113 (runner self-hosted) é o habilitador do caminho A, não pré-requisito — o caminho B desbloqueia sem ele. + +## Fora de escopo + +- Rediagnóstico do bug e guard de CI do importMap — #87 OPS70 já na fila (P2). +- Instalação do runner self-hosted do GitHub — #113 (Issue própria). +- Deploy contínuo automático — decisão OPS71 é deploy manual; #85 OPS70 (pipeline antigo) parece obsoleto pós-cutover — sugestão de fechamento à parte, não escopo daqui. + +## Rabbit holes de produto + +- **"A tela preta voltou → reabrir o diagnóstico."** Se alguém só completar o desejo: regressar ao OPS69. **Corte neste item:** conferir a revision do container antes de qualquer diagnóstico — a evidência (build de 2026-08-18 sem o fix, main com o fix desde 2026-08-19) já explica o sintoma. +- **"Já que vou mexer, instalo o runner/automatizo tudo."** **Corte:** #113 (runner) e #87 (guard) são Issues separadas; este item entrega admin no ar. + +## Questões em aberto (produto) + +- **Caminho do deploy?** **Opções:** A) dispatch manual do `deploy.yml` no GitHub Actions (verify full ~50 min → deploy no runner do homeserver — exige instalar o runner, #113, antes); B) executar `scripts/deploy-homeserver.sh ` direto no homeserver (mesmo script idempotente que o runner rodaria; smoke + rollback documentados; não espera #113); C) instalar o runner primeiro e depois A. **Recomendação:** **B agora** — admin caído = CMS indisponível; o script é o mesmo e o runbook cobre smoke e rollback; depois, o primeiro dispatch via A valida o pipeline OPS71. _(assumido — validar com produto)_ +- **Prioridade?** **Opções:** P0 (mesma dor do incidente original) | P1 (o fix já existe em main; resta entrega + verificação). **Recomendação:** **P1** — claimável já, sem precisar de re-P0 da fila. _(assumido — validar com produto)_ +- **Quem toca o homeserver?** O agente não tem acesso ao homeserver nem ao GitHub para dispatch sem ação do operador. **Opções:** o executor prepara os comandos do runbook e o humano roda (2 passos, ~5 min) | o executor dispara via GitHub API (`GITHUB_TOKEN` disponível) quando o runner estiver em pé (#113). **Recomendação:** humana para o caminho B imediato; o agente executa o restante (conferir SHA, verificar `/admin` no browser, checar log) e registra a evidência. _(assumido — validar com produto)_ + +## Referências + +- OPS69: `docs/plans/ops69-admin-branco-importmap-s3.md` + `-impl.md`, Issue #77 (fechada — fix `7162c65e` em main) +- Runbook de deploy: `docs/ops/teqo-1313-deploy.md` (smoke, rollback, falhas conhecidas) +- OPS71 cutover: `docs/plans/ops71-ci-github-actions-tracker-forgejo.md`; runner: #113; guard de importMap: #87; pipeline antigo morto: #85 +- Evidência (gate): `docs/plans/ops73-deploy-admin-prod-evidence.png` — `/admin` de produção em 2026-08-19 (shell vazio, sem login) + +![Admin em branco em produção — 2026-08-19](ops73-deploy-admin-prod-evidence.png)