E10 · El lote en el ensayo
10 minEjecuta 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.
Clase 4 · 20 min
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
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.
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.
Fuente: sil-loop-r/skills/sil-loop-r/SKILL.md y sil.py --help (v1.1.0, commit 63746bd, 05/10/2026).
Proyecto de ensayo en /tmp. El j solo imprime los campos del JSON que devuelve sil.py.
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 requestedversion="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.
Continúa el bloque anterior. Una propuesta adoptada, otra en prueba por 14 días; después, el archivo vigilado cambia.
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: $?"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: 0check 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.
Prueba con fecha pasada: decide L0002 trial --until 2026-10-01 responde {"error": "Teste e adiamento exigem data futura."} (capturado el 19/10/2026). Por eso el bloque calcula la fecha con Python.
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í.
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.
El contar-licoes.py, ejecutado en la carpeta de wifi: 164 lecciones en LESSONS.md (9 marcadas como repetidas, ninguna con ID), 167 fallas y 424 límites, 115 todavía "aberto".
En 14 días los abiertos más que se duplicaron. Es lo que pasa cuando la lección entra sin decisión y sin fecha de revisión.
De las recomendaciones del análisis, solo se hizo la promoción en el SIL (v1.1.0, 05/10). Las otras (hook de puertas, reloj en LIMITES, IDs en las lecciones, sonda post-traducción) siguen como propuesta.
El SIL aún no se ha iniciado en wifi: el caso sirve de diagnóstico, no de vitrina.
Ejecútalo en la carpeta de tu proyecto. El script solo cuenta líneas y marcas; no imprime contenido.
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 .
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.
Ensayo, después tu proyecto.
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.
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.
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.
Pregunta 1 de 5
Llegó el lote de aprobación y la persona no respondió. ¿Qué hace el agente?competencia
Pregunta 2 de 5
¿Cuál de estos hace que una regla activa vuelva a revisión en el SIL?competencia
Pregunta 3 de 5
¿Qué exige un ensayo (trial) que la adopción no exige?
Pregunta 4 de 5
El check salió con 0. ¿Qué garantiza eso?
Pregunta 5 de 5
En el caso de wifi, ¿qué muestra que una lección en prosa por sí sola no cierra el loop?
Elige una alternativa. La explicación aparece después de tu intento.