Você usou uma ferramenta de programação com IA para criar um recurso. A lista aparece, os filtros funcionam e outro prompt muda o resultado. Então alguém pergunta por que um item desapareceu ou se uma pequena mudança de regra afetará outros filtros. Você precisa perguntar à IA novamente.

Experimente com um pequeno filtro JavaScript. Anote quais itens ele vai manter, altere o limite de estoque à mão e compare o resultado com sua previsão.

Escolha um comportamento que consiga prever

“Ensine-me este app inteiro” é uma tarefa grande. Escolha um resultado específico: quais itens permanecem quando categoria, texto de busca e disponibilidade são combinados?

Faça três perguntas antes de mudar o código:

  1. Quais IDs esta entrada deve retornar?
  2. Qual condição inclui ou exclui cada item?
  3. Se a regra de disponibilidade mudar, quais resultados devem permanecer iguais?

Se ainda não entende a sintaxe, examine uma expressão por vez. Neste exercício, filter mantém itens cujo callback retorna true, && exige todas as condições e || permite que qualquer lado satisfaça a condição. A entrada e a saída são pequenas o bastante para calcular no papel.

Baixe o laboratório de aprendizado com filtros. O código e os quatro registros foram construídos para esta lição; não são uma resposta capturada de IA nem código de uma aplicação real. Descompacte e abra filter-learning-lab. Você precisa de Node.js 22 ou posterior, editor de texto e terminal. Não há dependências para instalar, chamadas de modelo ou requisições de rede.

Escreva três previsões antes de executar

Leia catalog.mjs e filter.mjs. O catálogo contém estes registros:

ID Rótulo Categoria Estoque
folded-stars Folded stars paper 1
paper-kites Paper kites paper 3
clay-moons Clay moons clay 0
clay-bells Clay bells clay 2

A regra original inclui um item com pelo menos uma unidade. A busca usa o rótulo, ignora maiúsculas/minúsculas e remove espaços nas extremidades da consulta. Categoria, busca e disponibilidade precisam corresponder. A categoria all aceita qualquer categoria; a busca vazia aceita qualquer rótulo.

Abra blank-note.md e escreva os IDs esperados para estas entradas. Consulte a função quando precisar, mas ainda não execute o observador nem peça a resposta.

Caso Categoria Busca availableOnly O que explicar
A paper vazia true Por que estoque 1 ainda serve
B all CLAY false Por que o item sem estoque aparece
C clay bells true Como as três condições se combinam

Depois execute estes comandos na pasta extraída:

node observe.mjs
node --test baseline.test.mjs
Compare suas previsões com os resultados originais
Caso IDs originais Motivo
A folded-stars, paper-kites Ambos são de papel e têm estoque de pelo menos 1.
B clay-moons, clay-bells A busca no rótulo, sem espaços extras e sem diferenciar maiúsculas, encontra ambos. O filtro de disponibilidade está desligado.
C clay-bells Corresponde à categoria e ao rótulo, e seu estoque é 2.

Se sua previsão divergir, marque a primeira condição que entendeu errado. No caso B, “o item tem estoque” seria uma explicação errada: clay-moons tem estoque zero. Ele permanece porque availableOnly é false, então a condição não o exclui.

Explique a regra sem copiar uma resposta

Feche a nota preenchida se a abriu. Escreva duas ou três frases explicando o caso B para alguém olhando o catálogo. Inclua a entrada real e a condição que permite estoque zero.

Separe os poucos arquivos e suas funções:

Arquivo Função neste exercício
catalog.mjs Fornece os quatro registros.
filter.mjs Decide quais registros correspondem às condições fornecidas.
observe.mjs Fornece três conjuntos de condições e imprime IDs e estoques selecionados.
baseline.test.mjs Verifica o comportamento original do filtro.

O observador é um chamador no terminal, não uma captura de navegador. No seu app, um botão ou formulário pode fornecer valores semelhantes; leia esse chamador antes de presumir o que a interface envia.

Use o leitor de código local do Yenpo para manter dados, filtro e chamador abertos durante a leitura. A busca de arquivos e texto não exige modelo. Se usar o AI Reader com seu provedor, pergunte sobre a condição em que travou, volte ao código ao redor e escreva sua própria explicação. Execute os comandos no Terminal; este exercício não precisa de resposta de modelo.

Altere uma regra manualmente

Agora mude o requisito: com o filtro de disponibilidade ligado, mostre apenas materiais com estoque para duas pessoas, uma unidade por pessoa. Preserve a filtragem por categoria, a normalização da busca e o comportamento com disponibilidade desligada.

A regra original de “pelo menos um” estava correta para o requisito original. É uma pequena mudança de recurso, não uma correção de bug oculto.

Antes de editar, escreva outra previsão. O caso A deve perder folded-stars. B deve manter o registro sem estoque porque o filtro está desligado. C deve manter clay-bells, com estoque exatamente 2.

Execute uma vez as verificações do novo requisito contra o código original:

node --test exercise/pair-policy.check.mjs

Espera-se que o comando falhe antes da edição: a função baixada ainda aceita estoque 1. Leia a asserção que falhou para identificar o comportamento ainda não implementado. Erro de sintaxe ou arquivo ausente seria outro tipo de falha.

Em filter.mjs, mude apenas o limite de >= 1 para >= 2. Preserve a condição availableOnly ao redor. Depois execute:

node observe.mjs
node --test exercise/pair-policy.check.mjs
Caso IDs após a edição O que verifica
A paper-kites Uma unidade não atende mais à regra de duas pessoas.
B clay-moons, clay-bells Desligar disponibilidade continua ignorando o estoque; a busca ainda remove espaços e ignora maiúsculas.
C clay-bells Duas unidades exatas bastam; trocar para > 2 estaria errado.

A suíte original descreve a regra de uma unidade. As asserções afetadas falharão após esta mudança intencional de requisito. Use as verificações de duas pessoas, nomeadas separadamente, para o novo comportamento; não apague uma asserção apenas para ocultar uma falha. O pacote mantém o código original para repetir o exercício.

Explique a mudança novamente, incluindo o que ficou igual

Deixe o exemplo preenchido de lado e termine sua nota com suas palavras. Ela deve identificar:

  • Os limites de estoque antigo e novo e a posição exata alterada.
  • Por que A perde um item enquanto B permanece igual.
  • Por que estoque exatamente 2 ainda precisa servir no caso C.
  • Os comandos executados e o que suas saídas mostraram.
  • O que não foi conferido, como entradas de um formulário real, comportamento do servidor ou persistência.

Uma explicação final útil é específica: “Com disponibilidade ligada, todos os filtros devem corresponder e o estoque agora precisa ser pelo menos dois. Desligada, o estoque não afeta a seleção. O novo limite remove folded-stars de A, enquanto B e C mantêm os IDs.” Feche a página e tente explicar pelo código, sem memorizar a frase.

Agora tente outra entrada. Preveja o resultado antes de executar e explique quais condições mantiveram ou removeram cada item.

Use o ciclo em um recurso do seu projeto

Escolha um comportamento pequeno com entradas visíveis e saída reproduzível. Registre a versão, faça uma cópia ou use seu fluxo de controle de versão e mantenha a primeira edição restrita. Escreva a previsão antes de executar. Se o resultado divergir, leia a condição relevante e o chamador antes de pedir outro patch gerado.

Se ainda não consegue localizar o comportamento, comece encontrando uma entrada em código desconhecido. Para decidir se uma explicação da IA é verdadeira, use o exercício de verificação de explicações. Para revisar uma mudança proposta, o passo a passo do cache de promises examina um patch concreto e seu caso de falha.