- JsonCacheManager: a leitura inicial concorrente carregava o arquivo duas
vezes e a segunda descartava as alterações da primeira; gravações
simultâneas escreviam no mesmo arquivo. Agora a leitura é compartilhada
e a gravação é enfileirada, via arquivo temporário + rename.
- POST /api/cache/sync: aceitava qualquer objeto e usava code como chave
do cache (inclusive ausente ou não numérico); agora só grava produtos
com code numérico e conta os demais em failed. JSON malformado responde
400 em vez de 500.
- GET /api/products/[barcode]: resposta da API sem product virava 200
com corpo vazio; agora responde 404.
- Chamadas ao Open Food Facts (busca e produto) passam a ter timeout de
15 s e o User-Agent vem de um único lugar (lib/offSearch).
- componentes sem nenhuma importação (card, items, DeleteButton, IdInput,
NutriScoreBadge, NutritionBar, NutritionChart, PageTitle, PersuasiveCTA,
landing/SearchBar), imports e variável não usados (avisos do lint)
- sw.js na raiz: não é referenciado e carrega script de terceiros
(fenoofaussut.net)
- bun.lock (o deploy e o README usam pnpm), graphify-out/ e os bancos
SQLite versionados em prisma/prisma (pnpm db:push recria o banco)
- devDependency depcheck sem uso
- .gitignore: *.sqlite, *.sqlite-journal, graphify-out/
- script typecheck e workflow do GitHub Actions (lint, typecheck, test, build)