Prompt
Você é um revisor de código cético. Sua reputação sofre mais com um falso
positivo do que com um achado perdido.
## Diff em revisão
```diff
{{diff}}
```
## Contexto
- Linguagem/stack: {{stack}}Adquira esse prompt para visualizá-lo
O que este prompt faz
Um review em duas passadas: a primeira levanta hipóteses de falha, a segunda tenta refutar cada uma delas construindo um caso concreto de entrada e estado. Só sobrevive o achado com cenário de falha reproduzível, o que elimina quase todo o ruído típico de review automatizado.
Preview
[alta] search.ts:2, resultado vazio nunca é cacheado, e cada requisição volta ao banco
Cenário de falha: fetchSearch("xyzzy") devolve [] para um termo sem resultado. cache.set guarda [], mas na requisição seguinte cache.get devolve [], que é truthy como objeto, então esta hipótese não se confirma para array. Confirma-se, porém, se fetchSearch devolver null ou 0 resultados como undefined: aí if (cached) é falso e o cache nunca serve. Com um termo popular e sem resultado, os 4 workers vão ao banco em toda requisição.
Correção sugerida:
- const cached = cache.get(key);
- if (cached) return cached;
+ if (cache.has(key)) return cache.get(key);
[média] search.ts:3, nada impede a estampida de cache
Cenário de falha: o termo "iphone" expira às 12h00m00s. Vinte requisições concorrentes chegam em 12h00m00.05s. Todas leem o cache vazio e todas disparam fetchSearch antes da primeira gravar. O banco recebe 20 consultas idênticas, o pico é maior do que sem cache nenhum, porque elas chegam simultâneas.
Correção sugerida: guarde a promise em vez do resultado, para que os concorrentes aguardem a mesma execução:
if (!cache.has(key)) cache.set(key, fetchSearch(query), 60);
return cache.get(key);
[média] search.ts:4, erro de busca é cacheado como sucesso pela correção acima
Cenário de falha: ao cachear a promise, uma rejeição de fetchSearch fica guardada por 60s e toda requisição no período recebe o mesmo erro. Sem tratamento, um blip de 200ms no banco vira 60s de indisponibilidade da busca.
Correção sugerida: remova a entrada no catch antes de repropagar.
Descartadas na passada 2
- Chave de cache colide entre usuários: não construí o cenário,
keynão aparece no diff. Ver "Não verificado". - Vazamento de memória: o cache tem TTL de 60s; sem evidência de crescimento ilimitado.
- Off-by-one no TTL: 60 vs 60000 é plausível, mas a unidade da API de cache não está no diff.
Não verificado
- Como
keyé construída (arquivo não incluído), é onde estaria um possível vazamento entre usuários. - A unidade do terceiro argumento de
cache.set(segundos ou milissegundos). - Se
fetchSearchjá tem retry interno, o que mudaria a análise de estampida.
Como usar
- 1
Copie o template
Depois da compra o template completo fica disponível para copiar.
- 2
Preencha as variáveis
Troque a variável destacada pelo seu conteúdo. Deixar em branco degrada a saída.
- 3
Escolha um dos modelos listados
Rode em um dos modelos listados na lateral. Modelo menor costuma degradar o resultado.
- 4
Cole e execute
Ou use o laboratório, com sua chave, e compare com o preview.