Skip to content

OLP DocsDocumentação Técnica

Plataforma de Olimpíadas Científicas — Arquitetura, Segurança e Operações

📋

Pendências e Backlog

19 itens

Inventário consolidado do que está aguardando implementação, aprovação, evento externo ou janela de execução. Cada item lista bloqueio, critério de aceite e referências cruzadas.

6 alta 9 média 4 baixa

CI deno-tests — reavaliar 477 falhas após restaurar env do step

🧪 TestesAlta
Bloqueio
Após restauração do env (working-directory expôs ausência de .env em supabase/functions), reexecutar pipeline e classificar quais 401 são esperados e quais são regressão real
Critério de aceite
Run verde do job deno-tests OU lista catalogada de regressões reais por função, separadas de ruído de infraestrutura

Discrepância — fallback hardcoded para produção em e2e-login.contract.test.ts

🧪 TestesAlta
Bloqueio
Decisão de remoção alinhada com regra Core (sem fallback para produção em suites HTTP). Não corrigido nesta entrega para preservar contrato existente
Critério de aceite
Fallbacks de URL/anon_key removidos; teste falha explícito quando env ausente

Helper requireEnv para Deno tests (substituir non-null assertion)

🧪 TestesMédia
Bloqueio
Padrão atual `Deno.env.get(...)!` mascara env undefined, dificultando diagnóstico (vide incidente 2026-05-09)
Critério de aceite
_shared/test-env.ts publicado, primeiros 10 testes Deno migrados, run de CI demonstra mensagem clara em vez de Invalid URL

LGPD Responsável — correção de enumeração de CPF

⚖️ LGPDAlta
Bloqueio
Reunião jurídica + alinhamento com DPO para definir mensagem genérica vs. risco operacional
Critério de aceite
Aprovação jurídica formal + implementação respondendo identicamente a CPF existente e inexistente

Migração RLS — Fase 6 (gestao-alunos)

🔒 SegurançaAlta
Bloqueio
Continuação do plano de eliminar bypass de RLS via supabaseSystem (Fases 0-5 ✅)
Critério de aceite
Edge Function gestao-alunos passando a usar createSupabaseClient(req) com policies ativas + testes de isolamento por escola

Upstash Redis — Fase 0 (provisionamento)

⚙️ InfraAlta
Bloqueio
Provisionamento da conta Upstash + criação do database (decisão comercial)
Critério de aceite
Conta criada + endpoint REST disponível + secrets adicionados ao Worker e Edge Functions

wasender-webhook — fail-closed quando WASENDER_WEBHOOK_SECRET ausente

🔒 SegurançaAlta
Bloqueio
Hoje retorna true (fail-open) quando secret não configurado; finding pendente do scan
Critério de aceite
Função rejeita requisições quando secret ausente + teste contract validando 401

OTP com randomness criptográfico (4 fluxos)

🔒 SegurançaMédia
Bloqueio
Math.random() em send-otp e três helpers de portal — finding warn do scan
Critério de aceite
crypto.getRandomValues() centralizado em generateSecureOTP() + 4 fluxos migrados + teste

Saneamento TypeScript (5 itens — as any controlados)

🎨 FrontendMédia
Bloqueio
PR separado — destravado via cast controlado para não bloquear Etapa 4
Critério de aceite
5 itens do backlog resolvidos sem regressão no build + deno check limpo

Code Splitting — Fases B-E

🎨 FrontendMédia
Bloqueio
Aprovação individual de cada fase (componentes >400 linhas)
Critério de aceite
Cada componente extraído + testes de renderização + sem regressão visual

Inscrições — etapa unificada

🎨 FrontendMédia
Bloqueio
GO do produto para iniciar implementação unificada (Etapas 1+2 backend/frontend ✅)
Critério de aceite
Wizard único cobrindo cadastro + pagamento + confirmação com testes E2E

Worker V3 + Redis (rate limit distribuído)

⚙️ InfraMédia
Bloqueio
Upstash provisionado (depende do item Upstash Fase 0)
Critério de aceite
Worker consumindo Redis para contadores de rate limit + telemetria validando latência <50ms p95

Security Audit Plan — execução das fases restantes

🔒 SegurançaMédia
Bloqueio
Janela de execução (varredura exaustiva de Edge Functions remanescentes)
Critério de aceite
Todas as fases planejadas concluídas com relatório formal

Hooks useAdmin* sem teste (8 hooks)

🧪 TestesMédia
Bloqueio
Sprint dedicada de cobertura RTL para useAdminDashboard, useAdminLogs, useAdminFinanceiro, useAdminFaturas, useAdminComunicacao, useAdminEscolas, useAdminUsuarios, useAdminRelatorios
Critério de aceite
Cada hook com teste mínimo: render + queryKey contém escola_id + onError sanitiza

IDOR coverage para todas as Edge Functions admin-*

🧪 TestesMédia
Bloqueio
Cobertura cross-escola obrigatória; hoje parcial
Critério de aceite
Para cada admin-* (dashboard, logs, financeiro, comunicacao, faturas): teste em tests/security/ provando 403 em acesso cross-escola

Painel de Sessões Ativas

🔒 SegurançaBaixa
Bloqueio
Pré-requisitos JWT jti + token_blacklist (já implementados em P2). Aguardando priorização.
Critério de aceite
Tela do usuário listando sessões ativas + botão de revogar individual

Detecção de Anomalias (Anomaly Detection)

🔒 SegurançaBaixa
Bloqueio
Pré-requisito: Painel de Sessões Ativas (item acima)
Critério de aceite
Heurísticas de detecção implementadas + alertas push validados em staging

Argon2id Offload para Worker dedicado

⚙️ InfraBaixa
Bloqueio
Upgrade do Cloudflare Workers para plano Standard (CPU time 30s + mais memória) — decisão comercial
Critério de aceite
Worker dedicado com 128MB memória + benchmark mostrando ganho ≥2x sobre Deno isolate

RLS escola_anotacoes + tarefas-escola

🔒 SegurançaBaixa
Bloqueio
Backlog do ADR — categoria 5 (RLS Enabled No Policy)
Critério de aceite
Policies de SELECT/INSERT/UPDATE/DELETE criadas + Edge Functions migradas para createSupabaseClient(req)