Skip to content

fix: corrige bugs e anti-padroes da revisao de codigo - #30

Merged
johnenderson merged 6 commits into
mainfrom
fix/code-review-issues
Jul 4, 2026
Merged

fix: corrige bugs e anti-padroes da revisao de codigo#30
johnenderson merged 6 commits into
mainfrom
fix/code-review-issues

Conversation

@johnenderson

Copy link
Copy Markdown
Owner

Resumo

Correções de bugs e anti-padrões encontrados em revisão de código da base inteira.

Bugs corrigidos

  • JSON-LD sem escape real (app/blog/[...slug]/page.tsx): o replaceAll usava String.raw sem escape nenhum, substituindo < por < — um no-op. Agora escapa para a sequência unicode u003c (com barra invertida), como manda o padrão para conteúdo dentro de <script>.
  • Label da fila do LoL nunca resolvia (src/lib/lol.ts): QUEUE_LABELS (chaves numéricas de queue id) era indexado com gameMode (string tipo CLASSIC), então o card de live game sempre exibia o valor cru. Agora usa gameQueueConfigId do spectator-v5, com fallback no gameMode.
  • API key da Riot enviada ao Data Dragon: as chamadas ao CDN público (versions.json, champion.json) passavam o header X-Riot-Token. Novo ddragonFetch sem credencial.
  • Flash de tema escuro (FOUC) (app/layout.tsx): a classe .light só era aplicada no useEffect do ThemeProvider — quem usa tema claro via um flash escuro a cada carregamento. Um script inline parser-blocking no início do <body> resolve o tema salvo antes do primeiro paint.
  • Hook pre-commit silenciosamente quebrado: o core.autocrlf=true do Git do Windows gravava o .husky/pre-commit com CRLF (/bin/sh\r → "cannot exec"), então lint/typecheck/prettier não rodavam em commit nenhum. Novo .gitattributes com * text=auto eol=lf impede a recorrência.

Anti-padrões

  • Deps de runtime em devDependencies: next-mdx-remote, @shikijs/rehype, remark-gfm e react-tweet-embed são usados em produção (MDXServer/TweetEmbed) — movidos para dependencies. Funcionava na Vercel, mas quebrava qualquer install --production.
  • Código morto removido (189 linhas): src/base/links-graph/ (incluía o único dangerouslySetInnerHTML do projeto), useReactFlowAttributionRemoval, graphPrint, mediaQuery e LocalStorage — nada em app/ ou src/ referenciava esses arquivos.
  • Script morto: update:webperf referenciava um diretório packages/ inexistente.

Validação

  • yarn typecheck, yarn lint e prettier --check passam (e agora rodam de verdade no pre-commit, em todos os commits desta branch).
  • yarn build de produção completo passa com todas as rotas.
  • Verificado no browser: tema claro aplica antes do paint, sem erros de console/hidratação; JSON-LD do artigo continua parseando como JSON válido.

🤖 Generated with Claude Code

johnenderson and others added 6 commits July 4, 2026 13:31
O replaceAll substituia < por < (String.raw sem escape e um no-op),
entao a sanitizacao do script ld+json nao tinha efeito. Agora escapa
para a sequencia unicode u003c, como manda o padrao.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…orto

next-mdx-remote, @shikijs/rehype, remark-gfm e react-tweet-embed sao
usados pelo MDXServer/TweetEmbed em producao, mas estavam em
devDependencies — funcionava na Vercel, mas quebrava qualquer install
--production. Remove tambem o script update:webperf, que referencia
um diretorio packages/ que nao existe.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Remove src/base/links-graph (Dialog com dangerouslySetInnerHTML,
Layout, getNodePosition), useReactFlowAttributionRemoval, graphPrint,
mediaQuery e LocalStorage — nada em app/ ou src/ referencia esses
arquivos.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
O core.autocrlf=true do Git do Windows regravava arquivos com CRLF no
checkout/edicao, quebrando o hook do husky (shebang /bin/sh + CR nao
executa) e o prettier --check no WSL. Com eol=lf no .gitattributes,
qualquer git escreve LF no worktree independente de config local.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- O label do live game indexava QUEUE_LABELS (chaves numericas de
  queue id) com gameMode (string tipo CLASSIC), entao nunca resolvia.
  Agora usa gameQueueConfigId do spectator-v5, com fallback no
  gameMode cru.
- Chamadas ao Data Dragon (CDN publico, sem auth) passavam o header
  X-Riot-Token; agora usam ddragonFetch, sem a credencial.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
A classe .light so era adicionada no useEffect do ThemeProvider,
entao quem usa tema claro via um flash escuro a cada carregamento.
Um script inline parser-blocking no inicio do body agora resolve o
tema salvo (light/dark/system) e aplica classe + color-scheme antes
do paint; o ThemeProvider assume depois da hidratacao.

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

vercel Bot commented Jul 4, 2026

Copy link
Copy Markdown

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

Project Deployment Actions Updated (UTC)
ojohn.dev Ready Ready Preview, Comment Jul 4, 2026 8:01pm

@johnenderson
johnenderson merged commit 27a2777 into main Jul 4, 2026
4 checks passed
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.

1 participant