Havia dois runbooks sobrepostos, escritos para o piloto, e nenhum documento do ambiente de homologação. - `20-homologacao-runbook.md` consolida os dois e cobre DNS, TLS, Nginx, Supabase de homologação, banco com a decisão do shim, bucket privado, containers, worker, observabilidade, flag, rollback, diagnóstico e smoke. Os dois runbooks antigos ficam no repositório marcados como histórico, preservando o registro das decisões. - Rollback de imagem com comandos: identificar o que está no ar, listar tags, desligar a flag antes de trocar, subir só web e worker com `--no-deps`, conferir saúde, religar a flag. As migrations de segurança — RLS e auditoria append-only — estão declaradas sem caminho de volta: desfazê-las afrouxa o isolamento entre workspaces, então um rollback que precise disso está errado por definição. - `21-checklist-validacao.md` separa o que foi executado do que depende de infraestrutura, com a evidência de cada item e a tabela dos quatro defeitos encontrados. Nada está marcado PASS por inspeção de código. - ADR 0007 registra o ambiente lógico e a autenticação de homologação, com as alternativas descartadas e o motivo. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
3.0 KiB
0007 — Ambiente lógico e autenticação de homologação
Contexto
next start força NODE_ENV=production. Até aqui o módulo só conhecia dois estados: NODE_ENV=production ou não. Consequência prática: em homologação a autenticação local sem senha ficava desligada (correto) e o módulo exigia o login central do Elo Pro (que ainda não existe), sem terceira opção. Homologação ficava sem caminho de entrada.
Além disso, nada no repositório gravava o cookie elo_pro_workspace_id, lido como origem do workspace ativo. Mesmo com sessão válida, a resposta seria sempre "sem workspace".
Decisão
-
ADAPTER_ENVcom três valores:development,staging,production. É independente deNODE_ENV, que continuaproductionem homologação para manter o build otimizado. Toda política passa a derivar deADAPTER_ENV. -
Homologação autentica com Supabase Auth real, em um projeto Supabase exclusivo de homologação, via
signInWithPasswordem/api/auth/staging/session. Há senha, emitida e validada pelo Supabase. O Adaptador continua sem tabela de usuário, senha, cadastro ou sessão própria. -
ADAPTER_DEV_AUTHsó existe emdevelopment. Não é configuração: emstagingeproductiono provedor de desenvolvimento não entra na lista de provedores, eADAPTER_DEV_AUTH=1faz o start ser recusado. -
Contrato de identidade explícito em
src/server/auth/identity-provider.ts. Trocar o Supabase de homologação pelo SSO do Elo Pro é adicionar uma implementação; nenhum outro arquivo conhece o mecanismo. -
Workspace é resolvido no servidor, por associação real. O cookie é preferência, não prova:
resolveWorkspacesó o aceita quando corresponde a uma linha deworkspace_memberslida sob RLS. Sem associação, não há workspace. Com várias, a pessoa escolhe em/selecionar-workspace, ePOST /api/auth/workspacegrava o cookie apenas depois de confirmar a associação.
Alternativas descartadas
- Habilitar o dev auth em homologação. Rejeitada: homologação é pública, e autenticação sem senha em host público é uma porta aberta.
- Aceitar o cookie de workspace como autorização. Rejeitada: transformaria um valor editável pelo cliente em credencial. O custo de reler a associação por requisição é uma consulta indexada.
- Usar o projeto Supabase de produção com usuários de teste. Rejeitada: compartilharia a service role entre ambientes.
- Inferir o ambiente de
SENTRY_ENVIRONMENT. Rejeitada: observabilidade e política de segurança são decisões diferentes; a mesma variável governando as duas foi o que fez o namespace do Redis colidir entre ambientes.
Consequências
ADAPTER_ENVpassa a ser obrigatória nos ambientes implantados, eADAPTER_APPLY_IDENTITY_SHIMpassa a ser uma decisão explícita.- Homologação tem seu próprio projeto Supabase, bucket, banco, Redis e ambiente Sentry.
- O
0002-sso-topology.mdcontinua valendo para produção. Esta decisão acrescenta o degrau de homologação, sem substituí-lo.