fix(qa): P0 build (index.html base64) + restaura gates TSC/ESLint verdes#634
fix(qa): P0 build (index.html base64) + restaura gates TSC/ESLint verdes#634adm01-debug wants to merge 1 commit into
Conversation
Auditoria QA exaustiva rodando os gates reais da branch. Achados e correções: P0 — index.html estava inteiro em base64 (não era HTML). O Vite lia como entry, não encontrava o <script src="/src/main.tsx"> e o build emitia o blob base64 como dist/index.html SEM nenhum assets/*.js — o deploy serviria uma página sem JavaScript. Origem: PR #618 base64-encodou vários arquivos; o hotfix #622 corrigiu robots.txt/sitemap.xml/cors.ts/.tsc-baseline.json mas esqueceu o index.html. Fix: decode in-place (roundtrip exato, 136 linhas). Build agora gera 358 chunks JS e o index.html referencia o bundle. Gate ESLint (estava vermelho): - src/utils/currency.ts: eqeqeq (== null -> === null || === undefined) em 3 fns - src/pages/NotFound.tsx: remove import morto `Search` + diretiva eslint-disable inútil Gate TSC (drift pré-existente dos PRs #624-628, deixava o gate vermelho): - src/lib/notifications-metrics.ts: reset() esquecia a chave 'filter-change' do Record<FetchSource, number> (bug real de contador não-resetado) - src/hooks/auth/useProfileRoles.ts: select pedia coluna organization_id inexistente em `profiles` (400 PostgREST silencioso impedindo o profile de carregar) e só buscava 4 de 13 campos do Profile (preferences/user_id/ is_active/created_at ficavam undefined em runtime). Fix: select com todas as colunas reais de Profile + cast pontual de `preferences` (Json -> Record). Teste obsoleto: - tests/pages/NotFound.test.tsx espiava console.error; o PR #625 trocou para console.warn. Atualizado. Gates verificados: typecheck baseline OK, eslint baseline OK, build OK (358 JS chunks), test:ci-core 317/317. Zero regressão (10 falhas pré-existentes em price-freshness/mockup-history/postgrest-remap/theme-presets confirmadas idênticas com/sem estas mudanças via git stash).
|
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. |
|
Important Review skippedDraft detected. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
…out JS The index.html on main was stored as base64 text since PR #618. Vite reads this as entry point, finds no <script> tags to transform, and outputs the base64 blob as dist/index.html — the deployed site serves base64 text instead of HTML, with zero JS bundles. Fix: replace with the decoded HTML (136 lines, exact roundtrip). Same fix as PR #634 branch but applied directly to main for immediate production recovery.
|
Fechando como superseded pela
Sem valor único a integrar — fechando para reduzir ruído de PRs concorrentes. O saneamento de gates está sendo conduzido sobre a Generated by Claude Code |
Contexto
Auditoria QA exaustiva rodando os gates reais da branch para medir a saúde do sistema. A maioria estava verde, mas encontrei 1 P0 que quebra produção e 2 gates de CI vermelhos. Todas as correções são cirúrgicas e verificadas.
🚨 P0 —
index.htmlinteiro em base64 → build sem JavaScriptO
index.htmlda branch não era HTML: era o HTML real codificado em base64 (PCFkb2N0eXBlIGh0bWw+=<!doctype html>). O Vite lia o arquivo como entry, não encontrava<script type="module" src="/src/main.tsx">e onpm run buildemitia o blob base64 comodist/index.htmlsem nenhumassets/*.js— o deploy serviria uma página de lixo, sem nenhum JavaScript do app.robots.txt/sitemap.xml/cors.ts/.tsc-baseline.jsonmas esqueceu oindex.html. Omaintem HTML válido.</html>, com security headers + entry/src/main.tsx). Varredura confirmou que era o único arquivo restante corrompido.npm run buildagora gera 358 chunks JS e odist/index.htmlreferencia o bundle de entry.❌ Gate ESLint (estava vermelho — exit 1)
src/utils/currency.ts:39/48/57—eqeqeq(== null→=== null || === undefined); comportamento idêntico, satisfaz o gate.src/pages/NotFound.tsx— remove import mortoSearch(lucide-react) + diretivaeslint-disableinútil.❌ Gate TSC (drift pré-existente dos PRs #624–628 — exit 1)
src/lib/notifications-metrics.ts:371—reset()esquecia a chave'filter-change'doRecord<FetchSource, number>(contador real não-resetado).src/hooks/auth/useProfileRoles.ts— o.select()pedia a colunaorganization_idinexistente emprofiles(PostgREST retorna 400, deixandoprofileResult.errorsetado e impedindo o profile de carregar silenciosamente). Além disso buscava só 4 de 13 campos doProfile, deixandopreferences/user_id/is_active/created_atundefinedem runtime mesmo no caminho feliz (esses campos são lidos em vários pontos do app). Fix: select com todas as colunas reais deProfile+ cast pontual depreferences(Json→Record<string, unknown>).🧪 Teste obsoleto
tests/pages/NotFound.test.tsxespiavaconsole.error; o PR fix(qa-sprint4-p1): proteção offline global, CSS de bloqueio e 404 contextual #625 trocou o log de 404 paraconsole.warn. Atualizado → 5/5 ✅.✅ Verificação (exaustiva)
npm run typecheck(baseline TSC)node scripts/check-eslint-baseline.mjsnpm run buildnpm run test:ci-core(deploy gate)currency.tsZero regressão: 10 falhas pré-existentes (
ProductDetailHero.priceFreshness,MockupHistoryPage,postgrest-migration,theme-presets) foram confirmadas idênticas com e sem estas mudanças viagit stash— nenhuma importa os módulos alterados. Ficam registradas como backlog não relacionado.https://claude.ai/code/session_01Kn4RqeLmAJdjZaKdVzGHWo
Generated by Claude Code
Summary by cubic
Corrige um P0 de build ao decodificar o
index.htmlque estava em base64, voltando a carregar o JavaScript do app. Restaura os gates de ESLint e TSC e atualiza um teste obsoleto.index.htmldecodificado;<script type="module" src="/src/main.tsx">restaurado; build volta a emitir bundles JS.eqeqeqemsrc/utils/currency.tse remove import morto + diretiva inútil emsrc/pages/NotFound.tsx.notifications-metrics.reset()passa a zerar'filter-change';useProfileRolescorrigeselect(remove coluna inexistente, busca todas as colunas deProfilee faz cast depreferences), evitando 400 silencioso e camposundefined.tests/pages/NotFound.test.tsxagora espiaconsole.warn(alinhado ao comportamento atual).Written for commit 95e7641. Summary will update on new commits.