El loop que aprende|INEMA.CLUB-PRO

Clase 4 · 20 min

Lecciones y reglas: aprobación en lote y revisión de regla vencida

El otro lado del loop que aprende no es un número: es la lección que el agente saca de un error. Escrita directo en el CLAUDE.md, solo crece, nadie la decide ni la revisa. En esta lección usas el SIL Loop R: ocurrencia, propuesta, aprobación en lote con decisión explícita y revisión automática cuando cambia el archivo de la regla.

Empezar la clase
Fichero metálico abierto con fichas organizadas por divisores y una ficha destacada con borde amarillo.

En esta clase vas a

  1. 1Ocurrencia, propuesta y regla: tres cosas diferentes
  2. 2Lote de aprobación: el agente propone, la persona decide
  3. 3Regla en prueba con fecha y criterio
  4. 4Revisión por archivo modificado, antigüedad y falta de uso

Objetivo: registrar la ocurrencia y la propuesta en el SIL Loop R, aprobar en lote con decisión explícita y reabrir la regla cuando cambia el archivo vigilado.

01El camino de una lección en el SIL Loop R

sil.py 1.1.0, SQLite local en la carpeta .sil del proyecto. Ningún comando envía mensajes ni llama a un modelo. Haz clic en cada bloque.

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

Fuente: sil-loop-r/skills/sil-loop-r/SKILL.md y sil.py --help (v1.1.0, commit 63746bd, 05/10/2026).

02Ensayo: dos ocurrencias, un lote

Proyecto de ensayo en /tmp. El j solo imprime los campos del JSON que devuelve sil.py.

Terminal · ensayo sin costo
SIL=~/projetos/sil-loop-r/sil.py   # git clone https://github.com/inematds/sil-loop-r ~/projetos/sil-loop-r
E=${TMPDIR:-/tmp}/ensaio-aprende/a4; rm -rf $E; mkdir -p $E/p; cd $E/p && git init -q
echo 'python3 -m http.server 8000' > serve.sh
s() { python3 $SIL --project $E/p "$@"; }
j() { python3 -c 'import json,sys; d=json.load(sys.stdin); print(*[k+"="+json.dumps(d.get(k),ensure_ascii=False) for k in sys.argv[1:]])' "$@"; }
s init | j version; s config --approval-batch 2 | j approval_batch
s occurrence --title "porta ocupada" --evidence "teste HTTP falhou: address already in use" \
  --cause "servidor de outra sessão na mesma porta" --correction "checar a porta antes" | j id
s lesson --occurrence O0001 --proposal "checar a porta antes de subir servidor" --scope "testes HTTP" --watch serve.sh | j id status
s occurrence --title "push no remoto errado" --evidence "git push foi para origin, não para o remoto da conta" | j id
s lesson --occurrence O0002 --proposal "conferir git remote -v antes do push" --scope "publicação" | j id status
echo "## fim da tarefa: chegou a hora do lote?"; s status | j approval_due approval_reasons
s request | j requested
Ejemplo del repositorio
version="1.1.0"
approval_batch=2
id="O0001"
id="L0001" status="proposed"
id="O0002"
id="L0002" status="proposed"
## fim da tarefa: chegou a hora do lote?
approval_due=true approval_reasons=["lote de novas propostas"]
requested=true

Con el lote en 2, la segunda propuesta enciende approval_due. De aquí en adelante, el agente le muestra a la persona ID, propuesta, evidencia, alcance y decisión sugerida, y espera.

03Decidir y ver la regla volver a revisión

Continúa el bloque anterior. Una propuesta adoptada, otra en prueba por 14 días; después, el archivo vigilado cambia.

Terminal · ensayo sin costo
SIL=~/projetos/sil-loop-r/sil.py
E=${TMPDIR:-/tmp}/ensaio-aprende/a4; cd $E/p   # continua o bloco anterior
s() { python3 $SIL --project $E/p "$@"; }
j() { python3 -c 'import json,sys; d=json.load(sys.stdin); print(*[k+"="+json.dumps(d.get(k),ensure_ascii=False) for k in sys.argv[1:]])' "$@"; }
ATE=$(python3 -c 'import datetime; print(datetime.date.today() + datetime.timedelta(days=14))')
s decide L0001 adopt --approved-by "Seu Nome" --reason "falhou duas vezes; correção comprovada" | j status rule
s decide L0002 trial --until $ATE --criterion "nenhum push no remoto errado em 14 dias" \
  --approved-by "Seu Nome" --reason "uma ocorrência só" | j status
s check > /dev/null; echo "check: $?"
echo "## o arquivo vigiado mudou"; echo 'python3 -m http.server 8080' > serve.sh
s check | j reviews; s check > /dev/null; echo "check: $?"
s review R0001 keep --approved-by "Seu Nome" --reason "a porta mudou; a regra continua valendo" | j status
s check > /dev/null; echo "check: $?"
Ejemplo del repositorio
status="adopted" rule="R0001"
status="trial"
check: 0
## o arquivo vigiado mudou
reviews=[{"id": "R0001", "reasons": ["arquivo alterado: serve.sh"]}]
check: 1
status="active"
check: 0

check sale 0 sin pendientes, 1 con pendientes (aquí, la revisión) y 2 en error. Salida 0 no prueba que las reglas sean verdaderas; solo que no hay nada vencido.

04Caso real: el loop de lecciones de esta máquina

INEMA usa LESSONS.md, FALHAS.md y LIMITES.md en el proyecto wifi (el hub de monitoreo). Solo conteos; ninguna línea de los archivos aparece aquí.

1. 05/10/2026

El análisis sil-melhoramento/ANALISE.md contó 37 lecciones en el CLAUDE.md de wifi, 101 líneas en FALHAS.md y 255 en LIMITES.md, 49 todavía "aberto".

Su conclusión: 100% peldaño "prosa", sin triaje, sin ID, sin citas y sin poda. La lección sobre puerto ocupado se había escrito tres veces en fechas distintas.

05Mide el tuyo

Ejecútalo en la carpeta de tu proyecto. El script solo cuenta líneas y marcas; no imprime contenido.

Terminal · en tu proyecto
K=~/projetos/loop-r-eng-aprende-v72/kit
cd ~/projetos/<seu-projeto>   # la carpeta donde están tu CLAUDE.md/AGENTS.md y tus lecciones
python3 $K/contar-licoes.py .
Ejemplo del repositorio
CLAUDE.md: 82 linhas, 19 lições na seção Lessons
AGENTS.md: 10 linhas, 0 lições na seção Lessons
LESSONS.md: 164 lições · 9 marcadas como repetidas · 0 com ID
FALHAS.md: 167 falhas · 90 prompt · 85 infra (as duas contam quando a linha diz as duas)
LIMITES.md: 424 limites · 115 ainda 'aberto'
SIL Loop R: não iniciado nesta pasta
degrau: prosa — sem decisão registrada, sem data de revisão, sem citação

Las columnas prompt e infra suman más que el total porque 8 líneas dicen las dos.

06Práctica

Ensayo, después tu proyecto.

E10 · El lote en el ensayo

10 min

Ejecuta los dos bloques de ensayo.

Listo cuando: el primero muestra approval_due=true y requested=true; el segundo termina con check: 0, check: 1 (después de cambiar serve.sh) y check: 0.

E11 · Diagnóstico de tu loop de lecciones

10 min

Ejecuta contar-licoes.py en tu proyecto y anota cuántas lecciones hay, cuántas repetidas y si alguna tiene ID o fecha de revisión.

Listo cuando: python3 $K/contar-licoes.py . imprime la línea SIL Loop R: y al menos una línea de conteo.

E12 · Tres lecciones reales en el SIL

30 min

Inicia el SIL en tu proyecto, toma las tres lecciones que más se repiten y registra cada una como ocurrencia + propuesta, con --watch en el archivo que la regla protege. Cuando el lote se active, decide tú mismo, con motivo.

Listo cuando: python3 $SIL --project . export | python3 -c 'import json,sys; print(len(json.load(sys.stdin)["rules"]))' → al menos 1, y python3 $SIL --project . check; echo $? → 0.

07Prueba de la clase

Pregunta 1 de 5

Llegó el lote de aprobación y la persona no respondió. ¿Qué hace el agente?competencia

08En tres frases

SepararLa ocurrencia es el hecho, la propuesta es la lección, la regla es la lección aprobada; cada una con ID.
Decidir en loteEl agente propone y prepara el lote; la persona decide con nombre y motivo; el silencio no aprueba.
RevisarUn archivo modificado, la antigüedad o la falta de uso reabren la regla; check avisa cuando hay pendientes.

Para ir más allá

Clase anteriorSiguiente clase