Backlog — Saneamento TypeScript (pós Etapa 4 — 2026-04-26)
Catálogo de débitos técnicos identificados durante a Etapa 4 (Header Novidades + Placeholders). Foram corrigidos via
as anycontrolado para destravar build; resolução de fundo segue como PR separado.
Status atual
✅ Build frontend (bun run build) limpo ✅ deno check limpo em todas as Edge Functions tocadas ✅ 42/42 testes Deno de especialista-headers verdes ✅ Audit dos 12 domínios aprovado (AUDIT_HEADER_NOVIDADES_2026-04-26.md)
Itens (ordem de prioridade)
1. Casts as any em supabase-client (auth/password)
Arquivos: change-password, reset-password, set-password, send-otp, verify-otp, verify-password
Causa raiz: incompatibilidade entre SchemaName da tipagem regenerada e o helper createSupabaseSystem quando usado em RPCs de senha.
Solução de fundo: atualizar _shared/supabase-client.ts para tipar explicitamente o SchemaName esperado por cada cliente ('public').
2. PromiseLike compat em portal-* helpers
Arquivos: _shared/portal-cadastro.ts, _shared/portal-login-aluno.ts, _shared/portal-login-responsavel.ts
Solução aplicada: .then(onfulfilled, onrejected) para compat com PromiseLike v2.
Solução de fundo: padronizar em await e remover dependência da chain .then() (refactor pequeno).
3. EdgeRuntime ambient typing
Arquivos: gestao-resultados/index.ts
Solução aplicada: (globalThis as any).EdgeRuntime.waitUntil(...).
Solução de fundo: declarar EdgeRuntime em supabase/functions/deno.d.ts (criar arquivo).
4. MPPayment interface inline
Arquivos: mercadopago-webhook/index.ts
Solução aplicada: interface MPPayment declarada localmente para tipar resposta da SDK.
Solução de fundo: mover para _shared/payment-gateway.types.ts e reusar entre webhook + preference.
5. escolaId: string | null relaxado
Arquivos: _shared/snapshot-publicados.ts, _shared/resultados-queries.ts, _shared/resultados-import.ts
Solução aplicada: assinatura aceita null + guard runtime.
Solução de fundo: revisar callers para garantir invariância (escolaId nunca null no caminho crítico) e voltar para string.
6. Drop coluna olimpiadas.tipo_inscricao (agendado 2026-05-09)
Contexto: coluna escalar substituída por tipos_inscricao TEXT[]. Backfill 39/39 ✅, contrato coord ✅. Restam 10 espelhos legados (backend escrita+leitura, frontend fallbacks) + tipos auto-gerados.
Cronograma:
- 2026-05-08 — Etapa C: remover espelhos (PR único).
- 2026-05-09 — Etapa D:
ALTER TABLE olimpiadas DROP COLUMN tipo_inscricao.
Mapa completo + checklist: docs/plans/DROP_OLIMPIADAS_TIPO_INSCRICAO.md.
Itens fechados nesta entrega
- ✅
logout/index.ts— cast depayload.expcorrigido - ✅
maintenance-cron/index.ts— import degerarMensagemSMSadicionado - ✅
send-otp/index.ts—smsResult.sid→msgId - ✅
admin-feature-flags/security.test.ts— header types - ✅
mural-escola/index.ts— typing alinhado
Linter Supabase — issues pré-existentes
12 warnings/infos do supabase linter (categoria já documentada em ADR-011):
- 6×
RLS Enabled No Policy— tabelasescola_anotacoes,portal-*(categoria 5 do ADR) - 1×
Function Search Path Mutable - 1×
Extension in Public - 4×
Public Bucket Allows Listing— buckets de imagens públicas (design intencional)
Nenhum relacionado à feature auditada.