fix(quotes): autosave resiliente a versão histórica corrompida#503
Conversation
O autosave de cotações lia todas as versões históricas do localStorage e fazia JSON.parse de cada uma SEM guarda, dentro do try/catch principal do save. Uma única versão corrompida (storage truncado por quota, adulteração ou drift de schema) lançava exceção e abortava o save inteiro → status 'error' e a cotação parava de persistir silenciosamente, com risco de perda de dados num fluxo crítico. Fix: parse defensivo por entrada — versões inválidas são ignoradas e a chave corrompida é removida do localStorage, sem afetar o save da versão nova. Gates: typecheck ✅ · lint:baseline ✅ (90 err vs baseline 107). https://claude.ai/code/session_01B2ghtor8Q4zfS5yQWCNDYW
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
|
Caution Review failedThe pull request is closed. ℹ️ Recent review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (1)
WalkthroughO componente ChangesResiliência de auto-save contra dados corrompidos
Estimated code review effort🎯 2 (Simple) | ⏱️ ~8 minutes Possibly related PRs
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Comment |
|
This pull request has been ignored for the connected project Preview Branches by Supabase. |
|
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.
Pull request overview
Este PR melhora a resiliência do autosave de cotações ao lidar com versões históricas corrompidas no localStorage, evitando que um JSON.parse inválido interrompa o fluxo de salvamento.
Changes:
- Adiciona parse defensivo por entrada ao varrer versões históricas no
localStorage. - Remove automaticamente chaves históricas inválidas/corrompidas para não abortar o autosave.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| const existingDrafts: QuoteDraft[] = []; | ||
| for (let i = 0; i < localStorage.length; i++) { | ||
| const key = localStorage.key(i); | ||
| if (key?.startsWith(storageKey + '_v')) { | ||
| const draft = JSON.parse(localStorage.getItem(key) || ''); | ||
| existingDrafts.push(draft); | ||
| try { | ||
| existingDrafts.push(JSON.parse(localStorage.getItem(key) || '') as QuoteDraft); | ||
| } catch { | ||
| localStorage.removeItem(key); | ||
| } | ||
| } | ||
| } |
Contexto
Primeiro lote de uma auditoria técnica por camadas. Foco deste PR: resiliência de estado client-side no fluxo crítico de cotações.
Problema (real, confirmado por leitura)
src/components/quotes/QuoteAutoSave.tsx— ao salvar, o autosave varre todas as versões históricas dolocalStoragee faziaJSON.parsede cada uma sem guarda, dentro dotry/catchprincipal do save.JSON.parse.catchdo save → status'error'e o autosave para de persistir a cotação silenciosamente, mesmo a versão nova sendo válida. Risco de perda de dados num fluxo crítico.Correção
Parse defensivo por entrada: versões inválidas são ignoradas e a chave corrompida é removida do
localStorage, sem afetar o save da versão nova. Mudança mínima, sem alterar comportamento do caminho feliz nem UX.Verificação
npm run typecheck— sem regressãonpm run lint:baseline— 90 erros vs baseline 107 (sem regressão)Nota sobre a auditoria
A varredura ampla confirmou que a base está saudável e bem governada (gates de TS/ESLint verdes, 597 arquivos de teste, checkers de segurança/RLS/Radix, realtime com cleanup balanceado, auth sólida). Não há um acúmulo de bugs críticos; os próximos lotes seguirão por camada, corrigindo apenas problemas reais e confirmados.
https://claude.ai/code/session_01B2ghtor8Q4zfS5yQWCNDYW
Generated by Claude Code
Summary by cubic
Autosave de cotações agora é resiliente a versões históricas corrompidas no
localStorage. Fazemos parse defensivo por entrada e removemos chaves inválidas, evitando que uma versão ruim aborte o save ou interrompa o autosave.Written for commit 3750a0f. Summary will update on new commits.
Review in cubic
Summary by CodeRabbit
Notas de Lançamento