Skip to content

fix: corrige lint, segurança e erros silenciosos das trilhas#78

Draft
caimanoliveira wants to merge 1 commit into
mainfrom
claude/kind-keller-tkceaq
Draft

fix: corrige lint, segurança e erros silenciosos das trilhas#78
caimanoliveira wants to merge 1 commit into
mainfrom
claude/kind-keller-tkceaq

Conversation

@caimanoliveira

Copy link
Copy Markdown
Owner

Resumo

Auditoria dos commits recentes (P3 — módulo de trilhas). Build e TypeScript passam limpos. Sem commits nas últimas 24h. Foram identificados e corrigidos 5 problemas, sendo 2 de severidade alta.

Mudanças

Segurança

  • exportar-star/route.ts: A rota consultava mentorado_trilhas filtrando apenas por trilha_slug, sem verificar explicitamente que o registro pertence ao usuário autenticado — confiando 100% no RLS. Adicionado lookup explícito de mentorado_id via user.id antes da query principal (defesa em profundidade, espelha o padrão de exportar-pdf).
  • exportar-star/route.ts: Substituído cast inseguro buf as unknown as BodyInit por new Uint8Array(buf) (mesmo padrão de exportar-pdf).

Erros silenciosos (alta severidade)

  • actions.ts (saveResposta e completeEtapa): Os dois upserts ignoravam o erro retornado pelo Supabase — falhas de banco passavam despercebidas e o cliente recebia sucesso falso. Agora if (upsertError) throw new Error(...), consistente com submitPlanoAcao.
  • content.ts (getTrilha): Retornava undefined para slugs inválidos sem avisar, causando TypeError: Cannot read properties of undefined em runtime. Agora lança Error('trilha_not_found: <slug>') explicitamente.

Linting (infra)

  • next lint removido no Next.js 16: O script "lint": "next lint" falhava com next: command not found. Instalados eslint e eslint-config-next como devDependencies; criado eslint.config.mjs com flat config (core-web-vitals + typescript); script atualizado para "lint": "eslint .".

Qualidade

  • BancoPerguntasWidget.tsx: O auto-save disparava uma server action a cada clique sem debounce, diferente dos outros widgets (ChecklistWidget: 800ms, StarBuilderWidget: 1500ms). Migrado para useEffect com debounce de 800ms para evitar rafaga de chamadas ao servidor.

Outros riscos identificados (não corrigidos neste PR)

Os itens abaixo foram identificados na auditoria mas não alterados por envolverem decisões de design ou mudanças mais amplas:

  • Queries no queries.ts descartam error silenciosamente
  • exportar-pdf: uso de service role key após check manual (correto, mas frágil se a auth logic for refatorada)
  • Widgets usam etapa.config as unknown as Config sem validação de schema em runtime
  • Double fetch em /trilhas/[slug]/page.tsx
  • Sem security headers no next.config.ts

Generated by Claude Code

- Substitui `next lint` (removido no v16) por `eslint .` com config flat;
  adiciona eslint + eslint-config-next como devDependencies e cria
  eslint.config.mjs com core-web-vitals + typescript
- exportar-star/route.ts: adiciona filtro explícito por mentorado_id antes
  de consultar mentorado_trilhas (defesa em profundidade, independe de RLS);
  substitui cast `buf as unknown as BodyInit` por `new Uint8Array(buf)`
- actions.ts: propaga erros de upsert em saveResposta e completeEtapa
  em vez de ignorá-los silenciosamente
- content.ts: getTrilha lança erro explícito para slug inválido em vez
  de retornar undefined causando TypeError em runtime
- BancoPerguntasWidget: migra auto-save para useEffect com debounce de
  800ms (mesmo padrão dos outros widgets), eliminando rafaga de chamadas
  ao servidor a cada clique

Co-Authored-By: Claude <noreply@anthropic.com>
@vercel

vercel Bot commented Jul 8, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
mentoria-crm Error Error Jul 8, 2026 7:17am
splinter Ready Ready Preview, Comment Jul 8, 2026 7:17am
splinter-yhcm Ready Ready Preview, Comment Jul 8, 2026 7:17am

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants