Ejecución larga|INEMA.CLUB-PRO

Clase 2 · 18 min

Escribir el goal.md nivel 3+ sin atajo posible

En el piloto del kit, con criterio nivel 3 y 14 pruebas congeladas, la ejecución terminó en el primer ciclo, en 3 minutos. La mayor parte del trabajo de una ejecución larga es escribir el criterio. Aquí escribes tu goal.md de forma que la única manera de cumplirlo sea hacer el trabajo.

Comenzar la clase
Calibrador digital midiendo una pieza metálica mecanizada sobre un banco oscuro.

En esta clase vas a

  1. 1Cubrir función, regresión y límite
  2. 2Poner un candado: conteo mínimo, prueba congelada, validador
  3. 3Hacer que la prueba aparezca en la salida del /goal
  4. 4Probar el criterio contra la trampa más barata

Objetivo: escribir un goal.md con criterios comando → salida que cubran función, regresión y límite y que no se cumplan por atajo.

01Del resultado a la prueba en pantalla

Un goal.md bueno tiene estas cinco partes. Toca cada una.

Haz clic en cada bloque del diagrama para ver qué hace.

Función + regresión + límite, cada uno con candado, y la prueba visible. La escala 0–4 completa es del curso 0; cómo montar el verificador, del curso 1.

02Las cinco preguntas del templates/goal.md

Cada "no" baja el nivel del criterio.

1. ¿Se puede comprobar con un comando?

"Dejar bien" y "revisado y limpio" no tienen comando. Reescríbelo hasta tener uno.

Reescritopython3 validar.py && echo OK → OK

03El goal.md y los dos prompts de /goal

Ejemplo completado para una tarea pequeña (contar palabras). Cámbialo por el tuyo.

longrun/[fecha]-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.
Ejemplo del repositorio

Del longrun/2026-10-01-medir-sessao/goal.md del kit, la ejecución que construyó el 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: terminado en el 1.er ciclo (3 min). Verificación independiente después: hash de las pruebas intacto, sin valores fijos en el código, 14 passed reproducido y una sesión nunca vista comprobada.

04Práctica

Usa la carpeta que creaste en la clase 1.

E4 · El goal.md de tu ejecución

30 min

Completa el goal.md con resultado, función, regresión, límite, las dos pruebas, restricciones y puertas humanas. Antes de cualquier trabajo, ejecuta cada criterio en la terminal.

Listo cuando: cada criterio tiene un comando que se ejecuta ahora; los de función fallan antes del trabajo (si ya pasan, el criterio no mide la tarea) y el de límite ya pasa: git diff --exit-code -- tests/; echo $? → 0.

E5 · Ataca tu propio criterio

20 min

En un branch descartable (git switch -c ataque), haz la trampa más barata: borra una prueba que falla, o cambia la función por un valor fijo. Ejecuta los criterios de nuevo y vuelve con git switch -.

Listo cuando: para cada trampa, al menos un criterio falla; al borrar una prueba, git diff --exit-code -- tests/; echo $? → 1.

05Prueba de la clase

Pregunta 1 de 4

El criterio es "pytest -q → 0 falhas". ¿Qué trampa deja pasar?competencia

06En tres frases

Tres capasFunción, regresión y límite, cada una con un comando y la salida esperada.
Pon un tope en cada unaCantidad mínima, pruebas congeladas por git diff o hash, validador del contenido: el atajo tiene que fallar.
Prueba a la vistaEl evaluador del /goal de Claude solo lee la conversación; el loop headless ejecuta la prueba él mismo (lección 6).

Para ir más allá

Clase anteriorPróxima clase