Files
camilafagundes 419325db12
ci / verify (push) Has been cancelled
Inicio do Projeto Piloto
2026-10-02 23:59:36 -03:00

6.4 KiB
Raw Permalink Blame History

Auditoria de prontidão do piloto

Estado encontrado antes do hardening desta entrega. O resultado depois das mudanças está em 18-pilot-final-gate.md.

Nenhum repositório real da Elo Pro estava disponível. Os nomes profiles, workspaces e workspace_members são o contrato local, não um schema confirmado.

Item Classificação Estado Evidência Risco Dependência externa Decisão Módulo Ação Severidade
1. Autenticação Supabase NEEDS INTEGRATION getUser quando URL e anon key existem. Sem tabela de senha. src/server/auth/context.ts Piloto sem o projeto Supabase da Elo Pro não autentica de verdade Projeto Supabase Elo Pro Não criar identidade paralela src/server/auth Ligar as envs e validar login real Alta
2. Workspace READY WITH CONFIGURATION Cookie elo_pro_workspace_id validado por membership no servidor context.ts Cookie de outro ambiente aponta workspace errado Cookie emitido pela Elo Pro Confirmar o nome do cookie no host real context.ts Testar troca de workspace no host Alta
3. RLS READY WITH CONFIGURATION Policies e FORCE RLS no shim. Testes usam PGlite com app_user migrations/0003_rls.sql, tests/integration/rls.test.ts Postgres real pode divergir do PGlite Postgres Elo Pro Não aplicar o shim se as tabelas já existirem com outro formato migrations/ Rodar o teste de isolamento no banco do piloto Alta
4. Papéis READY owner, admin, gestor, agent. Superadmin local não ignora o módulo permissions.ts Papéis reais da Elo Pro podem ter outros nomes Membership real Mapear papéis quando o schema for confirmado permissions.ts Manter o adaptador Média
5. Feature flag READY WITH CONFIGURATION spreadsheet_adapter nasce desligada workspace_module_flags, scripts/set-flag.ts Ligar para todos os workspaces Operação Só o workspace piloto flag Ativar no passo final do runbook Alta
6. Storage NEEDS INTEGRATION Interface privada. Produção exige bucket. Download passa pela rota autenticada src/infra/storage Bucket público ou URL permanente Bucket Supabase Manter privado storage/supabase.ts Criar bucket privado Alta
7. Jobs READY WITH CONFIGURATION Estados duráveis no Postgres. Inline só fora de produção service.ts, process-job.ts Piloto subir em inline Worker ADAPTER_JOB_MODE=worker scripts/worker.ts Subir o worker Alta
8. Redis NEEDS INTEGRATION Lock e fila de IDs. Sem Redis a produção recusa o processamento src/infra/redis Várias instâncias sem Redis processam em duplicidade Redis Obrigatório no piloto redis.ts Preencher REDIS_URL Alta
9. Locks READY Lock por usuário, TTL 120s, liberação no finally lockKey Lock em memória não atravessa processos Redis no piloto Não usar lock global redis.ts Usar Redis Média
10. TTL READY WITH CONFIGURATION Obrigatório em produção. Dev usa 3600 src/config/retention.ts, ADR 0004 Temporários eternos se a env faltar Número operacional Não gravar o número no código retention.ts Definir a env no piloto Alta
11. Limpeza READY cleanupExpired ignora /models/ e é idempotente process-job.ts Falha de storage deixa blob órfão Storage Falha de limpeza não pode derrubar o job worker Observar CLEANUP_FAILED Média
12. Auditoria READY Eventos sem células. Append-only para app_user scrub.ts, 0004_audit_append_only.sql Service role ainda escreve Nenhuma Não apagar auditoria no rollback audit_log Manter Média
13. Sentry READY WITH CONFIGURATION Sem DSN fica inerte. Payload descarta texto livre scrub.ts, capture.ts DSN ausente deixa o piloto cego Projeto Sentry Não anexar arquivo instrumentation.ts Configurar DSN Média
14. XLSX NEEDS DECISION ExcelJS 4.4.0 gera workbook novo. O modelo original não é reescrito parse.ts, ADR 0005 Formatação do modelo não é preservada Nenhuma para o MVP Manter ExcelJS no piloto 13-xlsx-library-review.md Aceitar a recomendação Média
15. CSV READY UTF-8, delimitador, neutralização na saída csv.ts, csv-injection.ts Encoding legado é recusado Nenhuma UTF-8 apenas parse.ts Manter Baixa
16. PDF READY Gerado sob demanda, truncado em 200 linhas e 12 colunas pdf.tsx Usuário espera o arquivo inteiro Nenhuma Truncamento já documentado pdf.tsx Informar o limite Baixa
17. Exclusão NEEDS DECISION Soft delete de modelo. Blob temporário sai com o TTL ADR 0006 Reter planilha além do necessário Negócio Política provisória configurável retention-policy.ts Não fazer hard delete de auditoria Média
18. Migrations READY WITH CONFIGURATION 0001 é shim. 0002–0004 são do Adaptador migrations/ Aplicar 0001 em cima do schema real da Elo Pro Schema real 0001 só se as tabelas não existirem identity-port.ts Conferir o banco antes do migrate Alta
19. Variáveis NEEDS INTEGRATION .env.example lista o conjunto. A validação recusa produção incompleta src/config/env.ts Build de CI não tem os segredos e não deve falhar Secrets do piloto Falhar no start, não no build 15-production-environment.md Preencher no ambiente Alta
20. Dev versus produção READY WITH CONFIGURATION ADAPTER_DEV_AUTH exige não-produção dev-session.ts Segredo de dev vazado para produção Nenhuma Produção recusa a flag env.ts Não definir o segredo no piloto Alta

Pilot Go-Live Blockers

Estes itens impedem ativar o primeiro workspace piloto. O restante é preparação já coberta no código ou decisão que não bloqueia se a recomendação for aceita.

  1. O banco e o Auth reais da Elo Pro não estão ligados. O shim de identidade não pode ser aplicado se as tabelas já existirem com outro formato.
  2. O bucket privado de storage não está criado nem configurado.
  3. Redis e o worker não estão em execução no ambiente do piloto. Inline fica recusado em produção.
  4. SPREADSHEET_TEMP_TTL_SECONDS ainda não tem valor no ambiente de piloto.
  5. O smoke com Supabase, Redis e bucket reais não foi executado.
  6. A feature flag do workspace piloto continua desligada, de propósito, até o fim do runbook.