001 — A checklist
Ship It With AI
A checklist que faço a cada bloco de código que a IA escreve.
Vinte e sete perguntas. As primeiras três secções são específicas de código gerado — são as que a revisão normal não procura, porque o código parece bem escrito. As outras três são revisão a sério, que continua a ser precisa.
27 perguntas
APIs que não existem
específico de código gerado- Cada método, opção ou campo que não reconheces: confirmaste na documentação, ou só no autocomplete?
- Opções passadas a funções nativas existem mesmo? Uma opção inventada não dá erro — é ignorada em silêncio.
- A biblioteca tem esta função *nesta* versão? Confirma no package.json instalado, não num artigo de 2023.
- Os imports resolvem todos sem o editor os corrigir sozinho por baixo?
Casos limite calados
específico de código gerado- Array vazio: divisões por comprimento, acesso a [0], reduce sem valor inicial.
- null e undefined estão distinguidos de 0 e de string vazia, ou caíram todos no mesmo if?
- Ordenações têm comparador? sort() sem argumento ordena como texto: 9900 antes de 24900.
- Dinheiro em inteiros de cêntimos, não em floats. E o arredondamento está decidido, não herdado.
- Datas: fuso definido explicitamente, e limites de dia, mês e horário de verão testados.
Tratamento de erros que só parece tratamento
específico de código gerado- Cada catch faz alguma coisa além de registar? Registar não é tratar.
- Depois de um catch, a execução continua para código que assumia que tinha corrido bem?
- fetch: res.ok verificado? Um 500 devolve uma resposta válida — o fetch não rejeita.
- A mensagem que o utilizador vê diz-lhe o que fazer a seguir, ou só que algo correu mal?
- O erro é registado com contexto suficiente para o reproduzires sem adivinhar?
Correção
- Escreveste um teste que falha *antes* da correção, e passa depois?
- Leste o ficheiro inteiro, ou só o diff? O que a IA apagou não aparece no diff que ela te mostra.
- Consegues explicar cada linha em voz alta? A que não consegues explicar é a que te vai partir.
- Os nomes dizem a verdade sobre o que a função faz agora, ou sobre o que fazia antes?
Segurança
- Input do utilizador validado no servidor, e não só no cliente.
- Queries parametrizadas. Nada de SQL construído por concatenação de strings.
- Segredos fora do código e fora do bundle do cliente — tudo o que é NEXT_PUBLIC_ é público.
- Autorização verificada por pedido: quem é dono deste registo, não apenas quem tem sessão.
- Dependências novas: quem as mantém, quantos downloads, e quando foi a última publicação?
Desempenho
- Há consultas à base de dados dentro de ciclos? É o N+1, e chega sempre em produção.
- Cada await dentro de um for podia ser um Promise.all?
- O que corre a cada pedido e podia ser calculado uma vez e cacheado?
- A resposta devolve campos que ninguém usa? Payload é latência.
Isto é a revisão do M12 — Verificar Código Que Não Escreveste — numa página. Corre-a na próxima coisa que gerares.
© 2026 ship it with ai — dubai