docs(ops): runbook e changelog do ops:global (C247)

This commit is contained in:
Francisco Solla 2026-10-02 09:10:37 -03:00
parent b1a721418b
commit f9c2269722
2 changed files with 14 additions and 2 deletions

View file

@ -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.

View file

@ -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