Files
adaptador-planilhas/docs/decisions/0007-ambiente-logico-e-auth-de-homologacao.md
T
camilafagundesandClaude Opus 5 5b11496cd9
ci / lint, typecheck, testes e build (push) Has been cancelled
ci / Postgres e Redis reais (push) Has been cancelled
ci / imagem Docker Linux (push) Has been cancelled
Runbook único de homologação, checklist de evidências e ADR do ambiente
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>
2026-10-15 20:40:08 -03:00

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

  1. ADAPTER_ENV com três valores: development, staging, production. É independente de NODE_ENV, que continua production em homologação para manter o build otimizado. Toda política passa a derivar de ADAPTER_ENV.

  2. Homologação autentica com Supabase Auth real, em um projeto Supabase exclusivo de homologação, via signInWithPassword em /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.

  3. ADAPTER_DEV_AUTH só existe em development. Não é configuração: em staging e production o provedor de desenvolvimento não entra na lista de provedores, e ADAPTER_DEV_AUTH=1 faz o start ser recusado.

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

  5. Workspace é resolvido no servidor, por associação real. O cookie é preferência, não prova: resolveWorkspace só o aceita quando corresponde a uma linha de workspace_members lida sob RLS. Sem associação, não há workspace. Com várias, a pessoa escolhe em /selecionar-workspace, e POST /api/auth/workspace grava 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_ENV passa a ser obrigatória nos ambientes implantados, e ADAPTER_APPLY_IDENTITY_SHIM passa 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.md continua valendo para produção. Esta decisão acrescenta o degrau de homologação, sem substituí-lo.