From f9c2269722826c890dcc9bc8bc922722a6e5c5fc Mon Sep 17 00:00:00 2001 From: Francisco Solla Date: Fri, 2 Oct 2026 09:10:37 -0300 Subject: [PATCH] docs(ops): runbook e changelog do ops:global (C247) --- docs/changelog/2026-10-02-c247.md | 1 + docs/ops/teqo-1313-deploy.md | 15 +++++++++++++-- 2 files changed, 14 insertions(+), 2 deletions(-) create mode 100644 docs/changelog/2026-10-02-c247.md diff --git a/docs/changelog/2026-10-02-c247.md b/docs/changelog/2026-10-02-c247.md new file mode 100644 index 00000000..989f102d --- /dev/null +++ b/docs/changelog/2026-10-02-c247.md @@ -0,0 +1 @@ +**C247 — Ligar/desligar globais públicos fora do admin (revalidação + ops) (2026-10-02):** a ops ganha o caminho de primeira classe `pnpm ops:global photoAlbum --selfie-search on|off [--apply|--verify]` para mudar flag de global público operado fora do admin — o atrito real da abertura do C242 era o `afterChange` do global só revalidar o `unstable_cache` dentro do processo Next. O CLI novo (`scripts/ops-global.mjs`, tabela fechada `selfie-search|published` em `scripts/lib/opsGlobal.mjs`) lê o global, grava **um único campo** pelo Local API (`overrideAccess` com bypass comentado) e busta a tag `global_photoAlbum` no servidor vivo via `POST /api/revalidate`; a allowlist do endpoint (`src/utilities/revalidateRequest.ts`) ganha `REVALIDATE_PHOTO_ALBUM_CACHE_TAG` derivada do owner `getGlobalCacheTag` e segue fechada (`global_metadata` continua recusado). Modos: plan (default, sem escrita), `--apply` (exige `OPS_GLOBAL_CONFIRM=1` fora do dev local e `TEQO_ENV` casando o banco exato; preflight de `NEXT_PUBLIC_SITE_URL`/`REVALIDATE_SECRET` e da allowlist **antes** da escrita) e `--verify` (exit 1 se divergir); recibo JSON em `data/ops-global/reports/` com valor anterior→novo, comando de rollback e a receita de recuperação sem segredo, e falha do bust pós-escrita falha alto (exit 1) — nunca silenciosa. Pin unit da tabela/parser/recibo, unit da allowlist e int do update parcial (o merge do Payload preserva os irmãos e o hook fail-closed do canal de remoção continua recusando `published` sem canal); runbook §C242 passa a apontar o CLI como caminho principal da abertura (admin como alternativa). Sem migration, sem UI. diff --git a/docs/ops/teqo-1313-deploy.md b/docs/ops/teqo-1313-deploy.md index 648e954f..476cbbc2 100644 --- a/docs/ops/teqo-1313-deploy.md +++ b/docs/ops/teqo-1313-deploy.md @@ -1506,8 +1506,19 @@ aparelho do visitante (o navegador envia só o vetor). A flag índice). A faceta "Pessoa pública" do C244 lê um mapa cacheado pela tag `archivePhotos`, que o lote não busta sozinho: buste a tag também depois da indexação (mesmo `curl` do fim do passo 3). -5. **Ligar** `Busca por selfie` no global Álbum de fotos (admin). Sem deploy; - desligar fecha a página (404), a API e a seção da home imediatamente. +5. **Ligar** `Busca por selfie` no global Álbum de fotos. Caminho principal pela + CLI (C247; grava pelo Local API e busta a tag `global_photoAlbum` no servidor + vivo na mesma execução — o write fora do Next não revalidaria sozinho): + ```bash + docker compose --profile maintenance run --rm \ + -e TEQO_ENV=production -e OPS_GLOBAL_CONFIRM=1 \ + -v /srv/ops-global-reports:/app/data/ops-global \ + teqo-1313-migrate pnpm ops:global photoAlbum --selfie-search on --apply + # rollback: --selfie-search off --apply (o recibo em data/ops-global/reports/ + # carrega o valor anterior e o comando de rollback) + ``` + O admin continua valendo (`/admin` → Configurações → Álbum de fotos). Sem + deploy; desligar fecha a página (404), a API e a seção da home imediatamente. ### Remoção e privacidade