Execução Longa|INEMA.CLUB-PRO

Aula 2 · 18 min

Escrever o goal.md nível 3+ sem atalho possível

No piloto do kit, com critério nível 3 e 14 testes congelados, a execução terminou no primeiro ciclo, em 3 minutos. A maior parte do trabalho de uma execução longa é escrever o critério. Aqui você escreve o seu goal.md de forma que o único jeito de cumprir seja fazer o trabalho.

Começar a aula
Paquímetro digital medindo uma peça metálica usinada sobre bancada escura.

Nesta aula você vai

  1. 1Cobrir função, regressão e limite
  2. 2Pôr trava: contagem mínima, teste congelado, validador
  3. 3Fazer a prova aparecer na saída do /goal
  4. 4Testar o critério contra a trapaça mais barata

Objetivo: escrever um goal.md com critérios comando → saída que cubram função, regressão e limite e que não se cumpram por atalho.

01Do resultado à prova na tela

Um goal.md bom tem estas cinco partes. Clique em cada uma.

Clique em cada bloco do diagrama para ver o que ele faz.

Função + regressão + limite, cada um com trava, e a prova visível. A escala 0–4 completa é do curso 0; como montar o verificador, do curso 1.

02As cinco perguntas do templates/goal.md

Cada "não" derruba o nível do critério.

1. Dá para checar com um comando?

"Deixar bom" e "revisado e limpo" não têm comando. Reescreva até ter um.

Reescritopython3 validar.py && echo OK → OK

03O goal.md e os dois prompts de /goal

Exemplo preenchido para uma tarefa pequena (contar palavras). Troque pelo seu.

longrun/[data]-contador-palavras/goal.md
# Goal — contador-palavras

- **Início:** 2026-10-19 09:00 · **Agente:** Claude /goal
- **Tetos:** tempo 2 h · memória 2G

## Resultado
`conta.py` tem conta_palavras(texto) que conta palavras separadas por qualquer espaço.

## Critérios de pronto (verificáveis)

**Função**
- [ ] `python3 -m pytest -q` → `3 passed`, 0 failed (e nunca menos de 3 testes)

**Regressão**
- [ ] `python3 -c "import conta"` → sem erro (o módulo continua importável)

**Limite**
- [ ] `git diff --exit-code -- tests/ pytest.ini` → código 0 (testes congelados)
- [ ] `git diff --stat` → só `conta.py` e a pasta longrun/

**Teste rápido por ciclo**: `python3 -m pytest -q`
**Teste completo no final**: `python3 -m pytest -q`

## Restrições
- só pela assinatura; nenhuma API
- não mexer em: tests/, pytest.ini

## Portões humanos (parar e perguntar)
- qualquer mudança fora de conta.py e da pasta longrun/
Claude Code · /goal (templates/prompt-goal-claude.md)
/goal A saída do terminal mostra <comando de verificação> passando com <resultado esperado>, e longrun/<pasta>/state.md diz "concluído".
Codex · /goal (templates/prompt-goal-codex.md)
/goal
RESULTADO: <resultado final em uma frase>

VERIFICAÇÃO (só termina quando todos passarem):
- <comando> → <saída esperada>

RESTRIÇÕES: <o que não pode>. Uso só pela assinatura; nenhuma API sem autorização.

ESTADO: use longrun/<pasta>/ (goal.md, plan.md, state.md, progress.md, failures.md, decisions.md, canal.md).
Após qualquer compactação ou retomada, releia goal.md, state.md, plan.md e canal.md antes de agir. Registre no canal.md (só acrescentar) fatos, aprendizados, glossário e armadilhas assim que surgirem.

CICLO: analisar → escolher a próxima ação útil → executar → testar → observar → corrigir → atualizar state/progress → commit no checkpoint → continuar.
Enquanto existir uma próxima ação objetiva, segura e alinhada ao objetivo, execute-a sem esperar nova instrução.
3 ciclos sem avanço mensurável = parar, registrar em failures.md e me chamar.

PARE E ME CHAME SÓ SE: gasto de crédito/API, ação irreversível ou externa (push em produção, e-mail, apagar), credencial ausente, decisão de negócio, conflito real entre requisitos.
Exemplo do repositório

Do longrun/2026-10-01-medir-sessao/goal.md do kit, a execução que construiu o medir-sessao.py:

Função
- pytest -q → todos passam (12 rápidos + 2 com sessões reais), 0 falhas, 0 skips

Regressão
- python3 tools/medicao/cx.py | head -1 e cc.py continuam rodando

Limite
- git diff --exit-code -- tests/ pytest.ini → vazio
  (testes congelados; hash inicial 3ae1ba7975508cba)
- só criar/alterar tools/medir-sessao.py e a pasta longrun/

Teste rápido por ciclo: pytest -q -m "not real"
Teste completo no final: pytest -q

Resultado: concluído no 1º ciclo (3 min). Verificação independente depois: hash dos testes intacto, sem valores fixos no código, 14 passed reproduzido e uma sessão nunca vista conferida.

04Prática

Use a pasta que você criou na aula 1.

E4 · O goal.md da sua execução

30 min

Preencha o goal.md com resultado, função, regressão, limite, os dois testes, restrições e portões humanos. Antes de qualquer trabalho, rode cada critério no terminal.

Pronto quando: cada critério tem um comando que roda agora; os de função falham antes do trabalho (se já passam, o critério não mede a tarefa) e o de limite já passa: git diff --exit-code -- tests/; echo $? → 0.

E5 · Ataque o próprio critério

20 min

Num branch descartável (git switch -c ataque), faça a trapaça mais barata: apague um teste que falha, ou troque a função por um valor fixo. Rode os critérios de novo e volte com git switch -.

Pronto quando: para cada trapaça, pelo menos um critério falha; apagando teste, git diff --exit-code -- tests/; echo $? → 1.

05Teste da aula

Pergunta 1 de 4

O critério é "pytest -q → 0 falhas". Qual trapaça ele deixa passar?competência

06Em três frases

Três camadasFunção, regressão e limite, cada uma com um comando e a saída esperada.
Trava em cada umaContagem mínima, testes congelados por git diff ou hash, validador do conteúdo: o atalho tem de falhar.
Prova à vistaO avaliador do /goal do Claude só lê a conversa; o loop headless roda o teste ele mesmo (aula 6).

Para ir além

Aula anteriorPróxima aula