Skip to content

fix(ci): restaura gates TS + ESLint quebrados em main#509

Merged
adm01-debug merged 2 commits into
mainfrom
claude/fix-ts-gate-regressions
May 29, 2026
Merged

fix(ci): restaura gates TS + ESLint quebrados em main#509
adm01-debug merged 2 commits into
mainfrom
claude/fix-ts-gate-regressions

Conversation

@adm01-debug
Copy link
Copy Markdown
Owner

@adm01-debug adm01-debug commented May 29, 2026

Contexto

Ao investigar a falha do gate de TypeScript no PR #503, descobri que a falha não era do #503main já estava vermelho nos gates de CI. Os commits recentes em main (723c9f2 "Fast Visual Edit" / 6d2b7dd "Changes", batch do Lovable) introduziram a feature de tooltip-style no ThemeContext e novos testes de forma incompleta, quebrando dois gates obrigatórios:

  • TypeScript gate (npm run typecheck) → 6 regressões
  • ESLint baseline gate (npm run lint:baseline) → 9 problemas novos

Como o CI roda PRs contra o merge commit (branch + último main), qualquer PR aberto agora herda essas falhas. Este PR as corrige.

Correções

TypeScript (6):

  • ThemeContext.tsx: prop tooltipStorageKey ausente em ThemeProviderProps; objeto de fallback do useTheme sem tooltipStyle/setTooltipStyle (novos membros obrigatórios de ThemeContextType).
  • ThemeInitializer.test.tsx: mocks de contexto sem os novos membros.
  • RiskTooltip.tsx: data.depleted/data.restocked possivelmente undefined (TS18048).
  • ProductCategoryBadges.test.tsx: defaultProps inferido como string impedia o override categoryUuid: null (a prop aceita string | null).
  • B2BProductDetailFlow.test.tsx: passava prop tags que não existe em ProductDetailHero.

ESLint (9):

  • RiskTooltip.tsx: import cn não usado; 3× eqeqeq (!=typeof === 'number', que também resolve o narrowing de undefined do TS acima — uma só mudança cobre os dois gates).
  • Testes novos: anyunknown/tipo concreto; waitFor não usado removido.
  • useFiltersPageState.ts: dependência faltante categoryFilterError no useMemo (exhaustive-deps).
  • ThemeContext.tsx: (document as any) → tipo concreto da View Transitions API (estava bloqueando o pre-commit hook).

Garantias

  • Sem mudança de comportamento de runtime — apenas tipos, guards equivalentes, imports e deps.
  • npm run typecheck (122 vs baseline 147, sem regressão)
  • npm run lint:baseline (90 err vs baseline 107, sem regressão)
  • ✅ Testes afetados: 15/15 (ThemeInitializer, ProductCategoryBadges, B2BProductDetailFlow)

Nota

Há também um test-filter.ts solto na raiz do repo (vindo do mesmo batch) que parece ser lixo de debug — não mexi nele aqui para manter o PR focado; posso removê-lo num PR separado se desejado.

https://claude.ai/code/session_01B2ghtor8Q4zfS5yQWCNDYW


Generated by Claude Code


Summary by cubic

Restaura os gates de TypeScript e ESLint e sincroniza o package-lock.json para corrigir o npm ci, destravando todo o pipeline sem mudar o comportamento de runtime.

  • Bug Fixes

    • ThemeContext: adiciona tooltipStorageKey; tipa startViewTransition; fallback do useTheme inclui tooltipStyle e setTooltipStyle.
    • RiskTooltip: troca != por checagens typeof === 'number' e remove import não usado.
    • Testes: atualiza mocks do ThemeInitializer; tipa defaultProps em ProductCategoryBadges.test; remove prop inexistente tags em ProductDetailHero; remove waitFor e substitui any por tipos concretos.
    • useFiltersPageState: adiciona categoryFilterError nas deps do useMemo.
    • CI: npm ci, npm run typecheck e npm run lint:baseline passam; testes tocados passam.
  • Dependencies

    • Sincroniza package-lock.json para incluir @axe-core/playwright (e axe-core) já listados em devDependencies, corrigindo o erro de sync do npm ci.

Written for commit aa577d0. Summary will update on new commits.

Review in cubic

Summary by CodeRabbit

Release Notes

  • Bug Fixes

    • Melhorada validação e exibição de valores numéricos nas tooltips de risco de estoque.
  • New Features

    • Aprimorada persistência de preferências de tema e estilo de tooltip.
  • Refactor

    • Otimizada re-avaliação de filtros de categoria em tempo real.

Review Change Stack

…entes

Os commits recentes em main ("Fast Visual Edit"/"Changes") introduziram a
feature de tooltip-style no ThemeContext e novos testes de forma incompleta,
deixando main VERMELHO nos gates de CI (typecheck e lint:baseline).

TypeScript (6 regressões):
- ThemeContext: prop `tooltipStorageKey` ausente em ThemeProviderProps; objeto
  de fallback do useTheme sem `tooltipStyle`/`setTooltipStyle` (novos membros
  obrigatórios de ThemeContextType).
- ThemeInitializer.test / mocks: contextos sem os novos membros.
- RiskTooltip: `data.depleted`/`data.restocked` possivelmente undefined.
- ProductCategoryBadges.test: tipo de `defaultProps` inferido como string
  impedia override `categoryUuid: null` (a prop aceita string | null).
- B2BProductDetailFlow.test: passava prop `tags` inexistente em ProductDetailHero.

ESLint (9 problemas novos):
- RiskTooltip: import `cn` não usado; `eqeqeq` (!= → `typeof === 'number'`,
  que também resolve o narrowing de undefined).
- testes novos: `any` → `unknown`/tipo concreto; `waitFor` não usado removido.
- useFiltersPageState: dep faltante `categoryFilterError` no useMemo.
- ThemeContext: `(document as any)` → tipo concreto da View Transitions API.

Sem mudança de comportamento de runtime. Gates: typecheck ✅ · lint:baseline ✅
(90 err vs baseline 107). Testes afetados: 15/15 ✅.

https://claude.ai/code/session_01B2ghtor8Q4zfS5yQWCNDYW
@vercel
Copy link
Copy Markdown

vercel Bot commented May 29, 2026

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

Project Deployment Actions Updated (UTC)
we-dream-big Error Error May 29, 2026 2:01pm

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented May 29, 2026

Walkthrough

PR agrupa melhorias em validação de tipos numéricos, aprimoramentos de tipagem através de ComponentProps, extensão de ThemeContext com suporte a tooltipStorageKey e View Transitions tipado, ajuste de dependência em hook de filtro, e reorganização de dados de teste em flow B2B. Cinco áreas distintas, todos no mesmo cohort funcional.

Changes

Theme Context e Componentes — Aprimoramentos de Tipagem e Validação

Layer / File(s) Summary
ThemeContext — Storage Tooltip e View Transitions
src/contexts/ThemeContext.tsx
ThemeProviderProps adiciona tooltipStorageKey opcional; setTheme usa Document & { startViewTransition?: ... } tipado em vez de verificação por string; useTheme fallback inclui tooltipStyle: 'standard' e setTooltipStyle para garantir shape completo do contexto.
ThemeInitializer Tests — Atualizar Mocks de Contexto
src/tests/ThemeInitializer.test.tsx
Testes incluem tooltipStyle e setTooltipStyle no mockContext fornecido ao ThemeProvider em todos os cenários, alinhando com a nova shape de ThemeContextType.
RiskTooltip — Validação de Tipos Numéricos
src/components/inventory/risk/RiskTooltip.tsx
Validação com typeof ... === 'number' antes de formatar estoque, saídas/entradas e reposição detectada; remove import cn não utilizado; ajusta classes CSS com tabular-nums e estilos de cor; exibe "—" para valores não numéricos.
ProductCategoryBadges Test — Tipagem com ComponentProps
src/components/products/ProductCategoryBadges.test.tsx
Adiciona import type { ComponentProps }; defaultProps usa tipagem explícita via ComponentProps<typeof ProductCategoryBadges>; casts genéricos (any) substituídos por tipos derivados de ComponentProps; ajustes de formatação sem mudança semântica.
useFiltersPageState — Dependência categoryFilterError
src/pages/filters/useFiltersPageState.ts
categoryFilterError adicionado às dependências do useMemo que recalcula filteredProducts, garantindo reavalição quando o estado de erro do filtro por categoria muda.
B2BProductDetailFlow Test — Reorganização de Tags e Limpeza
src/tests/B2BProductDetailFlow.test.tsx
mockProduct declara tags diretamente; renderPDP deixa de aceitar parâmetro tags; onSelect do SingleVariantPicker mock muda de any para unknown; waitFor removido de imports; testes refatorados para consumir tags do mockProduct.

Estimated Code Review Effort

🎯 2 (Simple) | ⏱️ ~12 minutes

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed O título descreve precisamente o objetivo principal do PR: restaurar gates de CI (TypeScript e ESLint) que foram quebrados em main por commits recentes.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch claude/fix-ts-gate-regressions

Warning

Tools execution failed with the following error:

Failed to run tools: 13 INTERNAL: Received RST_STREAM with code 2 (Internal server error)

Warning

Review ran into problems

🔥 Problems

Stopped waiting for pipeline failures after 30000ms. One of your pipelines takes longer than our 30000ms fetch window to run, so review may not consider pipeline-failure results for inline comments if any failures occurred after the fetch window. Increase the timeout if you want to wait longer or run a @coderabbit review after the pipeline has finished.


Comment @coderabbitai help to get the list of available commands and usage tips.

@supabase
Copy link
Copy Markdown

supabase Bot commented May 29, 2026

This pull request has been ignored for the connected project doufsxqlfjyuvxuezpln because there are no changes detected in supabase directory. You can change this behaviour in Project Integrations Settings ↗︎.


Preview Branches by Supabase.
Learn more about Supabase Branching ↗︎.

Os commits recentes ("Fast Visual Edit"/"Changes") adicionaram
`@axe-core/playwright@^4.11.3` (+ axe-core@4.11.4) em devDependencies do
package.json, mas NÃO atualizaram o package-lock.json. Resultado: `npm ci`
falha o sync check ("Missing: @axe-core/playwright from lock file") no passo
"Install dependencies" de TODOS os jobs de CI — derrubando o pipeline inteiro
(typecheck, lint, unit, e2e, coverage, etc.) em qualquer PR e no próprio main.

Fix: `npm install --package-lock-only` para sincronizar o lockfile com as duas
deps já declaradas. `npm ci` volta a passar (RC=0). Sem alteração de versões de
outras dependências.

https://claude.ai/code/session_01B2ghtor8Q4zfS5yQWCNDYW
@adm01-debug adm01-debug marked this pull request as ready for review May 29, 2026 14:09
Copilot AI review requested due to automatic review settings May 29, 2026 14:09
@chatgpt-codex-connector
Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.

Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
src/tests/B2BProductDetailFlow.test.tsx (1)

78-99: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Isolar o QueryClient por teste para evitar flakiness.

Hoje o provider usa um QueryClient compartilhado entre casos; isso pode vazar cache entre testes e causar regressão intermitente. Em Line 78, crie um client novo por render (ou limpe o cache no beforeEach).

Diff sugerido
-const queryClient = new QueryClient();
-
 const renderPDP = () => {
+  const queryClient = new QueryClient();
   return render(
     <QueryClientProvider client={queryClient}>
       <BrowserRouter>
         <TooltipProvider>
           <ProductDetailHero
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/tests/B2BProductDetailFlow.test.tsx` around lines 78 - 99, O teste está
reutilizando o QueryClient compartilhado (queryClient) o que pode vazar cache
entre casos; atualize a função renderPDP para criar e usar um novo QueryClient
por chamada (instanciar um novo QueryClient e passá-lo ao QueryClientProvider
dentro de renderPDP) ou alternativamente limpar/resetar o cache no beforeEach;
localize renderPDP e substitua a referência a queryClient por uma nova instância
de QueryClient dentro dessa função (ou adicione um beforeEach que chama
queryClient.clear() / new QueryClient() antes de cada teste).
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Outside diff comments:
In `@src/tests/B2BProductDetailFlow.test.tsx`:
- Around line 78-99: O teste está reutilizando o QueryClient compartilhado
(queryClient) o que pode vazar cache entre casos; atualize a função renderPDP
para criar e usar um novo QueryClient por chamada (instanciar um novo
QueryClient e passá-lo ao QueryClientProvider dentro de renderPDP) ou
alternativamente limpar/resetar o cache no beforeEach; localize renderPDP e
substitua a referência a queryClient por uma nova instância de QueryClient
dentro dessa função (ou adicione um beforeEach que chama queryClient.clear() /
new QueryClient() antes de cada teste).

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 3f092f46-8952-4b37-884f-89a5fdf84d1f

📥 Commits

Reviewing files that changed from the base of the PR and between 17f9927 and aa577d0.

⛔ Files ignored due to path filters (1)
  • package-lock.json is excluded by !**/package-lock.json, !**/package-lock.json
📒 Files selected for processing (6)
  • src/components/inventory/risk/RiskTooltip.tsx
  • src/components/products/ProductCategoryBadges.test.tsx
  • src/contexts/ThemeContext.tsx
  • src/pages/filters/useFiltersPageState.ts
  • src/tests/B2BProductDetailFlow.test.tsx
  • src/tests/ThemeInitializer.test.tsx

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Este PR restaura os gates obrigatórios de CI (TypeScript + ESLint baseline) que estavam quebrados em main, ajustando tipos/mocks, correções de lint e sincronizando o package-lock.json para destravar npm ci.

Changes:

  • Atualiza ThemeContext e testes/mocks relacionados para incluir tooltipStyle/setTooltipStyle e tipar startViewTransition.
  • Corrige regressões de TS/ESLint em componentes e testes (ex.: guards numéricos no RiskTooltip, tipagens em fixtures/mocks, remoção de props/imports inválidos).
  • Sincroniza package-lock.json para refletir dependências já presentes no package.json (ex.: @axe-core/playwright).

Reviewed changes

Copilot reviewed 6 out of 7 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
src/contexts/ThemeContext.tsx Ajustes de tipos/props do provider e tipagem de View Transitions; fallback do hook com novos membros.
src/components/inventory/risk/RiskTooltip.tsx Guards mais seguros para valores possivelmente undefined/null + limpeza de import/lint.
src/pages/filters/useFiltersPageState.ts Corrige dependências do useMemo (inclui categoryFilterError).
src/tests/ThemeInitializer.test.tsx Atualiza mocks do contexto para refletir novos membros do ThemeContext.
src/tests/B2BProductDetailFlow.test.tsx Ajustes de mocks/props para alinhar com tipos reais e remover itens inválidos.
src/components/products/ProductCategoryBadges.test.tsx Tipagem de defaultProps via ComponentProps e ajustes de casts/mocks.
package-lock.json Sincroniza lockfile com devDependencies para corrigir npm ci.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +121 to 128
const docWithViewTransition = document as Document & {
startViewTransition?: (callback: () => void) => void;
};
if (typeof document !== 'undefined' && docWithViewTransition.startViewTransition) {
docWithViewTransition.startViewTransition(apply);
} else {
apply();
}
Comment on lines 71 to +74
},
priceUpdatedAt: new Date().toISOString(),
leadTimeDays: 5,
} as any;
} as unknown as Product;
@adm01-debug adm01-debug merged commit 8537ba8 into main May 29, 2026
48 of 52 checks passed
@adm01-debug adm01-debug deleted the claude/fix-ts-gate-regressions branch May 29, 2026 14:18
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.

3 participants