fix(ci): restaura gates TS + ESLint quebrados em main#509
Conversation
…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
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
WalkthroughPR agrupa melhorias em validação de tipos numéricos, aprimoramentos de tipagem através de ChangesTheme Context e Componentes — Aprimoramentos de Tipagem e Validação
Estimated Code Review Effort🎯 2 (Simple) | ⏱️ ~12 minutes 🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
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🔥 ProblemsStopped 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 Comment |
|
This pull request has been ignored for the connected project Preview Branches by Supabase. |
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
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
There was a problem hiding this comment.
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 winIsolar o
QueryClientpor teste para evitar flakiness.Hoje o provider usa um
QueryClientcompartilhado 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 nobeforeEach).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
⛔ Files ignored due to path filters (1)
package-lock.jsonis excluded by!**/package-lock.json,!**/package-lock.json
📒 Files selected for processing (6)
src/components/inventory/risk/RiskTooltip.tsxsrc/components/products/ProductCategoryBadges.test.tsxsrc/contexts/ThemeContext.tsxsrc/pages/filters/useFiltersPageState.tssrc/tests/B2BProductDetailFlow.test.tsxsrc/tests/ThemeInitializer.test.tsx
There was a problem hiding this comment.
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
ThemeContexte testes/mocks relacionados para incluirtooltipStyle/setTooltipStylee tiparstartViewTransition. - 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.jsonpara refletir dependências já presentes nopackage.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.
| const docWithViewTransition = document as Document & { | ||
| startViewTransition?: (callback: () => void) => void; | ||
| }; | ||
| if (typeof document !== 'undefined' && docWithViewTransition.startViewTransition) { | ||
| docWithViewTransition.startViewTransition(apply); | ||
| } else { | ||
| apply(); | ||
| } |
| }, | ||
| priceUpdatedAt: new Date().toISOString(), | ||
| leadTimeDays: 5, | ||
| } as any; | ||
| } as unknown as Product; |
Contexto
Ao investigar a falha do gate de TypeScript no PR #503, descobri que a falha não era do #503 —
mainjá estava vermelho nos gates de CI. Os commits recentes emmain(723c9f2 "Fast Visual Edit"/6d2b7dd "Changes", batch do Lovable) introduziram a feature de tooltip-style noThemeContexte novos testes de forma incompleta, quebrando dois gates obrigatórios:npm run typecheck) → 6 regressõesnpm run lint:baseline) → 9 problemas novosComo 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: proptooltipStorageKeyausente emThemeProviderProps; objeto de fallback douseThemesemtooltipStyle/setTooltipStyle(novos membros obrigatórios deThemeContextType).ThemeInitializer.test.tsx: mocks de contexto sem os novos membros.RiskTooltip.tsx:data.depleted/data.restockedpossivelmenteundefined(TS18048).ProductCategoryBadges.test.tsx:defaultPropsinferido comostringimpedia o overridecategoryUuid: null(a prop aceitastring | null).B2BProductDetailFlow.test.tsx: passava proptagsque não existe emProductDetailHero.ESLint (9):
RiskTooltip.tsx: importcnnão usado; 3×eqeqeq(!=→typeof === 'number', que também resolve o narrowing deundefineddo TS acima — uma só mudança cobre os dois gates).any→unknown/tipo concreto;waitFornão usado removido.useFiltersPageState.ts: dependência faltantecategoryFilterErrornouseMemo(exhaustive-deps).ThemeContext.tsx:(document as any)→ tipo concreto da View Transitions API (estava bloqueando o pre-commit hook).Garantias
npm run typecheck(122 vs baseline 147, sem regressão)npm run lint:baseline(90 err vs baseline 107, sem regressão)ThemeInitializer,ProductCategoryBadges,B2BProductDetailFlow)Nota
Há também um
test-filter.tssolto 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.jsonpara corrigir onpm ci, destravando todo o pipeline sem mudar o comportamento de runtime.Bug Fixes
tooltipStorageKey; tipastartViewTransition; fallback douseThemeincluitooltipStyleesetTooltipStyle.!=por checagenstypeof === 'number'e remove import não usado.defaultPropsemProductCategoryBadges.test; remove prop inexistentetagsemProductDetailHero; removewaitFore substituianypor tipos concretos.categoryFilterErrornas deps douseMemo.npm ci,npm run typecheckenpm run lint:baselinepassam; testes tocados passam.Dependencies
package-lock.jsonpara incluir@axe-core/playwright(eaxe-core) já listados emdevDependencies, corrigindo o erro de sync donpm ci.Written for commit aa577d0. Summary will update on new commits.
Summary by CodeRabbit
Release Notes
Bug Fixes
New Features
Refactor