TIPS 09 · PROVA

Quando diz «feito» e não é verdade

A linha a pôr no CLAUDE.md para que o Claude deixe de dizer «feito» sem uma prova, e os quatro controlos com que verifico que a cumpre.

O que é e porque importa

Pedes-lhe uma alteração. Passado um bocado, o Claude escreve «feito». Abres a app e não funciona, ou só funciona a meio. No início acontece muitas vezes, e a primeira reação é pensar que te mentiu.

Não é assim. O Claude para quando o trabalho parece acabado, e para ele muitas vezes o trabalho acaba quando escreveu o código. Se ninguém lhe pediu para o testar, «parece feito» é o único sinal que tem. Por isso o controlo fica para ti, depois, quando se calhar já estás a pensar noutra coisa.

A solução é uma linha só, no ficheiro que o Claude Code lê no início de cada sessão: o CLAUDE.md. A linha muda o significado de «feito». Já não quer dizer «escrevi o código», quer dizer «vi-o a funcionar e mostro-te a prova». Eu chamo-lhe o recibo.

Importa porque um recibo verifica-se depressa. Repetires tu todos os testes de cada vez custa muito mais, e com o tempo deixas de o fazer.

1. A linha no CLAUDE.md

O CLAUDE.md é um ficheiro de texto com as regras que queres que o Claude respeite em cada sessão. O do projeto fica na pasta principal do projeto: CLAUDE.md, ou .claude/CLAUDE.md. Se não existir, cria-o.

A forma mais simples é a partir do Claude Code: escreve /memory. Mostra-te os ficheiros de memória, incluindo os que ainda não existem. Escolhe o do projeto: se não existir, é criado e aberto no teu editor. Se o projeto ainda não tem um CLAUDE.md, também podes correr /init: o Claude olha para o código e prepara-te um de partida. Depois acrescentas a linha.

A linha
Nunca digas "feito" sem prova: os testes que correste com o resultado, uma captura de ecrã se houver uma interface, o comando que usaste para testar. Se não conseguiste testar, escreve-me "não verificado" e porquê.

Cada parte tem um motivo:

  • Os testes com o resultado: diz-te o que verificou e como correu, não só que os correu.
  • A captura de ecrã se houver uma interface: um teste pode passar mesmo com um botão que foi parar fora do ecrã.
  • O comando que usou: assim podes repetir tu o mesmo teste, igual.
  • «Não verificado» e porquê: é a saída. Sem ela, empurras o Claude a dizer «feito» na mesma. Com ela, sabes logo onde tens de olhar.

Sobre a captura: o Claude Code consegue ver imagens, mas para fazer uma ele próprio precisa de uma forma de ver a app, por exemplo um browser ligado ao Claude Code ou um simulador. Se não a tiver, para essa parte vai escrever «não verificado». Está bem assim: pelo menos ficas a saber.

2. Como a verifico

Uma sessão nova e uma pergunta

Guardo o ficheiro e abro uma sessão nova, porque o CLAUDE.md é lido no início da sessão. Depois pergunto:

O prompt
Para ti, quando é que uma coisa está feita? Responde-me com as regras que tens no CLAUDE.md.

Se não repetir a regra, o ficheiro não é o certo ou não está na pasta do projeto. Para confirmar, escreve /context: em Memory files vês que ficheiros de memória foram carregados. Se o teu CLAUDE.md não estiver lá, o Claude não o vê.

Um trabalho pequeno

Dou-lhe uma coisa pequena e fácil de verificar, por exemplo:

O prompt
Corrige a mensagem de erro do login quando o email está vazio.

Quando diz «feito», verifico se estão lá as três coisas: testes e resultado, captura de ecrã, comando. Se faltar uma e não estiver escrito «não verificado» com o motivo, o recibo está incompleto.

Repito o comando dele

Copio o comando que escreveu e corro-o eu no terminal. Se me der um resultado diferente, o recibo não vale. Não é preciso fazê-lo sempre, mas nas primeiras vezes sim: é assim que percebes se podes confiar nos recibos dele.

Olho para a captura de ecrã

Tem de mostrar o ecrã certo, não uma página qualquer. No caso do login: o campo do email vazio e a mensagem de erro por baixo. Se mostrar a página inicial, não prova nada.

3. Se o projeto não tem testes

Sem testes, a primeira parte do recibo não existe. Antes de mais, pede-lhe isto:

O prompt
Escreve um teste para o que acabaste de fazer, corre-o e mostra-me que passa. Depois estraga o código de propósito e mostra-me que o teste falha.

A segunda parte é a que conta. Um teste que nunca falha não prova nada: passa quer o código funcione quer não. Se ao estragar o código o teste fica vermelho, então está mesmo a verificar alguma coisa.

Depois pede-lhe para repor o código:

O prompt
Agora repõe o código como estava, corre o teste outra vez e mostra-me que volta a passar.

E para que da próxima vez não tenha de adivinhar como se correm os testes, pede-lhe para o escrever no CLAUDE.md:

O prompt
Acrescenta ao CLAUDE.md o comando exato para correr os testes deste projeto.

4. Se diz «feito» sem prova

Acontece mesmo com a regra. Responde só:

O prompt
Prova?

Normalmente chega. Se voltar a acontecer:

O prompt
Volta a ler as regras do CLAUDE.md e dá-me outra vez o "feito", com o recibo.

Se continuar a saltá-la, vê o comprimento do teu CLAUDE.md. Num ficheiro cheio de regras, as importantes perdem-se: mantém-no curto e tira o que o Claude percebe sozinho ao ler o código. Se uma só linha lhe continuar a escapar, podes destacá-la, por exemplo escrevendo IMPORTANTE à frente. Só essa: se destacares tudo, nada se destaca.

Os erros mais comuns

  • Pôr a regra num ficheiro que o Claude não lê, como o README ou uma nota à parte. Vai no CLAUDE.md do projeto, e com /context confirmas que está carregado.
  • Tirar «não verificado» para teres sempre um «feito». Deixa-o ficar: é a parte que o faz ser sincero quando não consegue testar.
  • Ler o recibo sem o verificar. Nas primeiras vezes, corre tu o comando e olha bem para a captura de ecrã.
  • Aceitar testes que passam sempre. Pede-lhe para estragar o código de propósito e vê o teste falhar.
  • Esperar que a regra valha logo na sessão que já tens aberta. Abre uma sessão nova e faz a pergunta de controlo.
  • Encher o CLAUDE.md de regras até a da prova se perder. Mantém-no curto e concreto.

Checklist

  • A linha está no CLAUDE.md do projeto
  • Numa sessão nova, o Claude repete a regra
  • Cada «feito» vem com testes e resultado, captura de ecrã e comando
  • Já corri eu o comando dele pelo menos uma vez
  • O teste falha quando o código está estragado
  • Quando não consegue testar, escreve «não verificado» e porquê

Perguntas frequentes

Quando diz «feito» sem prova, está a mentir-me?

Não. O «feito» sem prova não é uma mentira: para ele o trabalho acaba quando escreveu o código. A regra muda a meta para quando o viu a funcionar.

Com a regra no CLAUDE.md, posso ter a certeza de que o fará sempre?

Não. O Claude lê o CLAUDE.md e tenta segui-lo, mas é uma indicação, não um bloqueio. Se quiseres um controlo que não dependa dele, existem os hooks: comandos que o Claude Code executa em momentos fixos, decida o Claude o que decidir. Por exemplo, um que corre os testes e não o deixa terminar enquanto não passarem. Para começar, a linha chega.

E se a minha app não tiver interface?

Então a captura não é precisa: a regra só a pede se houver uma interface. Ficam os testes com o resultado e o comando. Para um script, a saída do comando que correu também é uma boa prova.

Tenho de a pôr em cada projeto?

Se a quiseres em todo o lado, põe-na em ~/.claude/CLAUDE.md: é o teu ficheiro pessoal, e o Claude Code lê-o em todos os projetos do teu computador. A do CLAUDE.md do projeto só vale aí.

← Todos os guias