fix: corrige regressões do Lovable (gates TS/ESLint, teste do player, lockfile e mute do autoplay)#502
Conversation
… lockfile e mute do autoplay) Análise dos commits recentes do Lovable encontrou regressões que quebravam os gates de qualidade do CI, um teste unitário e o `npm ci`. Correções: TypeScript (gate `npm run typecheck`): - ProductDetail: usa `it.image_url` (campos `og_image_url`/`images` não existem em SimilarProductItem) — TS2551/TS2339. - PromoFlixPlayer.test: remove prop inexistente `isMuted`; tipa o mock de hls.js (MockHlsInstance/MockHlsStatic) e os elementos `<video>` (cast HTMLVideoElement). ESLint (gate `npm run lint:baseline`): - SupplierComparisonModal: remove imports/vars não usados, `!=`→`!==` e tipa as props de ComparisonRow/ComparisonCard (remove `any`). - PromoFlixPlayer: `details: unknown`, telemetria com eslint-disable, deps de hooks ajustadas. - PriceFreshnessBadge / price-freshness / SmartRecommendationsMock: remove bindings e import mortos. Teste unitário: - PromoFlixPlayer.test: corrige o teste de race condition (usa `rerender` na mesma instância em vez de um segundo `render`), validando o cleanup do HLS. Comportamento (bug do player): - PromoFlixPlayer: o mute forçado pela política de autoplay não é mais persistido em localStorage como preferência do usuário. Mute/unmute manual continua sendo persistido. Adiciona testes de regressão. Lockfile: - package-lock.json sincronizado com fast-check/pure-rand (usados em tests/hooks/useSupplierComparison.property.test.ts), destravando `npm ci`. https://claude.ai/code/session_01B2ghtor8Q4zfS5yQWCNDYW
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
|
This pull request has been ignored for the connected project Preview Branches by Supabase. |
|
Caution Review failedThe pull request is closed. ℹ️ Recent review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Run ID: ⛔ Files ignored due to path filters (2)
📒 Files selected for processing (10)
WalkthroughPR refatora o modal de comparação de fornecedores com novos tipos e layout expandido, atualiza labels de "price freshness" em múltiplos pontos da UI, melhora persistência de mute no player de vídeo com fallback de autoplay, e estende cobertura de testes. ChangesSupplier Comparison Modal Refactoring
Price Freshness Labels & Badge Display
PromoFlixPlayer Autoplay Mute Persistence
Polish & Test Infrastructure
Estimated code review effort🎯 4 (Complex) | ⏱️ ~45 minutes Possibly related PRs
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Comment |
…ertura do comparador CI verde (falhas pré-existentes da batch do Lovable, não causadas pelo PR original): price-freshness (copy do badge) — o commit 2df1824 do Lovable renomeou os rótulos do util, quebrando o contrato de cópia documentado (PriceFreshnessBadge.copyAssertions.test.tsx) + labels-parity + colorMatrix + thresholdMatrix + 2 testes do QuoteBuilder + os 3 testes do util. Revertido para o copy canônico: - fresh/aging: "Atualizado hoje" / "Atualizado há N dias" - stale: "Preço pode estar defasado (há N dias)" - variante pdp volta a usar "· há N dias" (em vez de "(há N dias)") - regenerados os snapshots e ajustados os 3 asserts do teste unitário do badge que o Lovable havia mudado para o copy novo. supplier-comparison (cobertura) — o hook useSupplierComparison ficava a 0,88% do piso de branches (84,12% < 85%). Adicionados 2 casos cobrindo a seleção por nome de categoria (sem id) e sem categoria → branches 86,04%, linhas 100%. Gates: typecheck ✅ · lint:baseline ✅ · test:price-freshness ✅ (461) · test:supplier-comparison ✅ (14). https://claude.ai/code/session_01B2ghtor8Q4zfS5yQWCNDYW
…b "Test Coverage" O commit 32c6cc6 do Lovable adicionou um threshold per-file de cobertura para `src/hooks/products/useSupplierComparison.ts` (90/90/85/90) dentro de `vitest.config.ts` (config GLOBAL). Como os flags `--coverage.thresholds.*=0` da CLI só sobrescrevem os thresholds de topo (não o objeto aninhado por arquivo), esse gate disparava em QUALQUER run de cobertura que não exercita o hook — em particular `npm run test:ci-core:coverage` (job "Test Coverage" do CI), que roda só 3 arquivos não relacionados → cobertura 0% do hook → falha. A exigência T14 (90/85) continua aplicada no job dedicado `npm run test:supplier-comparison` (via --coverage.include + --coverage.thresholds.*), que segue verde (branches 86,04%, linhas 100%). Removido apenas o bloco do config global; enforcement real preservado. Verificação: test:ci-core:coverage ✅ (309) · test:supplier-comparison ✅ (14, gate 90/85 ok). 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. |
Contexto
Revisão exaustiva dos commits recentes do Lovable (
gpt-engineer-app[bot], 28/05/2026 — player HLS, mock do SKU 09138, tooltip do badge, comparação de fornecedores, bateria de testes do PromoFlixPlayer). Foram encontradas regressões que quebravam os gates de qualidade do CI, um teste unitário e onpm ci. Mesmo padrão da rodada anterior (PR #499).Diagnóstico (antes)
npm run typecheck(gate tsc baseline) → ❌ 4 pares file:rule novosnpm run lint:baseline(gate eslint baseline) → ❌ 10 grupos novosvitest PromoFlixPlayer→ ❌ 1 teste (race condition)npm ci→ ❌fast-check/pure-randausentes do lockCorreções
TypeScript
ProductDetail: usait.image_url(camposog_image_url/imagesnão existem emSimilarProductItem) — TS2551/TS2339.PromoFlixPlayer.test: remove prop inexistenteisMuted; tipa o mock de hls.js (MockHlsInstance/MockHlsStatic) e os<video>(castHTMLVideoElement).ESLint
SupplierComparisonModal: remove imports/vars não usados,!=→!==, e tipa as props deComparisonRow/ComparisonCard(semany).PromoFlixPlayer:details: unknown, telemetria comeslint-disablejustificado, deps de hooks ajustadas.PriceFreshnessBadge/price-freshness/SmartRecommendationsMock: remove bindings e import mortos.Teste unitário
PromoFlixPlayer.test: corrige o teste de race condition (usarerenderna mesma instância em vez de um segundorender), validando o cleanup da instância HLS anterior.Bug de comportamento (player)
localStoragecomo preferência do usuário (antes deixava o vídeo mudo permanentemente entre sessões). Mute/unmute manual continua sendo persistido. Inclui 2 testes de regressão.Lockfile
package-lock.jsonsincronizado comfast-check/pure-rand(usados emtests/hooks/useSupplierComparison.property.test.ts), destravandonpm ci.Verificação (depois)
npm run typecheck— "Nenhuma regressão de TypeScript detectada"npm run lint:baseline— "Nenhuma regressão de lint detectada"vitest PromoFlixPlayer— 22/22 ·PriceFreshnessBadge+ property test — verdenpm run test:deploy-gate— 309/309npm installsincronizou o lockPendente (decisão de produto — ver comentário/conversa)
Há um drift pré-existente (não causado por este PR): a batch recente do Lovable mudou o formato dos rótulos em
src/utils/price-freshness.ts(ex.:Atualizado (há N dias)/Possivelmente defasado (há N dias)), mas 3 arquivos de teste mais antigos ainda esperam os rótulos canônicos antigos (Atualizado hoje/Preço pode estar defasado (...)), causando 19 falhas no jobcoveragedo CI. Aguardando decisão: atualizar os testes para o novo copy (recomendado) ou reverter o copy do util.https://claude.ai/code/session_01B2ghtor8Q4zfS5yQWCNDYW
Generated by Claude Code
Summary by cubic
Corrige regressões do pacote Lovable que quebravam os gates de TS/ESLint, um teste do player, o npm ci e o job Test Coverage; também restaura o copy canônico de price‑freshness e cobre um gap pequeno no hook de comparação. Todos os gates passam agora, incluindo
PromoFlixPlayer,PriceFreshnessBadgee cobertura.Bug Fixes
ProductDetailusaimage_url.localStorage; init/cleanup mais robustos; loading/erros refinados; testes atualizados e com regressões.vitest.config.tsque derrubava o job Test Coverage; a exigência do hook segue aplicada no job dedicado.Dependencies
fast-checkepure-randaopackage-lock.json, destravandonpm ci.Written for commit d2bd1b1. Summary will update on new commits.
Review in cubic
Summary by CodeRabbit
Notas de Lançamento
New Features
Bug Fixes
UI/UX