Skip to content

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 any controlado 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 de payload.exp corrigido
  • maintenance-cron/index.ts — import de gerarMensagemSMS adicionado
  • send-otp/index.tssmsResult.sidmsgId
  • 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):

  • RLS Enabled No Policy — tabelas escola_anotacoes, portal-* (categoria 5 do ADR)
  • Function Search Path Mutable
  • Extension in Public
  • Public Bucket Allows Listing — buckets de imagens públicas (design intencional)

Nenhum relacionado à feature auditada.