O módulo usa a identidade Supabase, isola cada workspace e registra storage, TTL, runner e biblioteca XLSX como decisões ainda abertas. Co-authored-by: Cursor <cursoragent@cursor.com>
3.1 KiB
3.1 KiB
Revisão final contra o escopo V3
| Requisito | Status | Evidência |
|---|---|---|
| Sem login, senha ou token próprio | OK | src/server/auth, ausência de tabela de senha |
| Sessão Supabase e cookie de workspace | OK | context.ts, middleware |
| Flag de módulo, padrão desligado | OK | workspace_module_flags, página de módulo desligado |
| RLS e papéis | OK | 0003_rls.sql, testes de RLS e jornada |
| 10 modelos, nome único, soft delete provisório | OK | triggers, unique index, status |
| XLSX/CSV, 10 MB, 50k, 10 fontes | OK | domínio + testes; 50k no caminho CSV |
| Uma aba e linha de cabeçalho | OK | jornada e updateSource |
| Mapeamento 1:1, obrigatórias, select e drag | OK | domínio, UI e testes |
| Prévia antes de processar | OK | previewSource e passo da jornada |
| Lock, idempotência, Redis obrigatório em produção | OK | coordinator e teste de indisponibilidade |
| Modelo imutável | OK | SHA-256 e comparação de bytes na jornada |
| Temporários e limpeza | OK | cleanupExpired; TTL de produto aberto |
| Exclusão só owner/admin e bloqueio com job ativo | OK | jornada |
| Auditoria sem células | OK | scrub e teste do token =CMD() |
| Sentry sem planilha | OK | beforeSend e teste de scrub |
| Saída XLSX, CSV e PDF | OK | jornada gera os três |
| UI com tokens V3, Manrope, Lucide | PARCIAL | Componentes locais no token do escopo; biblioteca oficial do Elo Pro não estava no repo |
| Acessibilidade básica | PARCIAL | Select, switch, dialog e foco visível cobertos; não houve auditoria WCAG formal |
| E2E no browser do Elo Pro | PARCIAL | Jornada de API completa; browser do ecossistema inexistente aqui |
| Performance 10 MB / 50k XLSX / 10 fontes paralelas | PARCIAL | 50k CSV e rejeição de arquivo acima de 10 MB; ExcelJS de 50k linhas não medido |
| Job runner de produção | DECISÃO ABERTA | Worker no mesmo código; fila externa não escolhida |
| Storage de produção | DECISÃO ABERTA | Interface pronta; local só fora de produção |
| TTL, biblioteca XLSX, soft delete, SSO entre hosts | DECISÃO ABERTA | ADRs |
Bloqueios de release para o piloto no ecossistema
- Apontar
DATABASE_URLdo Postgres Elo Pro e não aplicar o shim de identidade se as tabelas já existirem com outro formato. - Aprovar bucket privado e preencher as envs de storage.
- Definir TTL numérico em
SPREADSHEET_TEMP_TTL_SECONDS. - Rodar
ADAPTER_JOB_MODE=workercom Redis, não o modo inline, no ambiente de piloto. - Confirmar a biblioteca ExcelJS (MIT, provisória) ou trocar o codec em
src/infra/spreadsheet/parse.ts. - Ligar a flag só no workspace piloto.
Riscos residuais
PDF truncado de propósito. Formatação do modelo não é reaproveitada. Conexão de serviço ignora RLS. Lock em memória não atravessa várias instâncias.
Checklist de release
- Suíte Vitest, typecheck, lint e build de produção locais
- Smoke no staging com Supabase, Redis e bucket reais
- Smoke no staging com Supabase, Redis e bucket reais
- Flag desligada para quem não é piloto
- Sentry com DSN, sem anexo de arquivo