E13 · Bloque grabado y verificado
10 minEjecuta el ensayo después de los bloques de la clase 4.
Listo cuando: grep -c "sil-loop-r:begin" $E/p/AGENTS.md → 1; las líneas de check, en orden: 1, 0, 1, 0.
Clase 5 · 18 min
Una regla aprobada que vive solo en una base de datos no llega a la sesión nueva: solo existe si alguien se acuerda de consultarla. En esta clase haces la pregunta de promoción, registras el peldaño de protección y la fuga conocida, grabas el bloque en el AGENTS.md con diff antes, y ves cómo el check avisa cuando alguien edita el bloque a mano.
Empezar la clase
Objetivo: marcar la regla como vinculante con peldaño y fuga, grabar el bloque en el AGENTS.md con promote --write y detectar el bloque editado con check.
enforce, promote y check (SIL Loop R 1.1.0). Haz clic en cada bloque.
La brecha que cerró la v1.1.0: en la v1.0.0, ninguna regla llegaba al AGENTS.md (sil-melhoramento/ANALISE.md, hallazgo nº 1).
Valores aceptados en --rung, del más débil al más fuerte. El SIL registra el nivel; quien construye el hook o la prueba eres tú.
La regla la lee el agente (AGENTS.md, CLAUDE.md) o se verifica en una lista. Se fuga cuando la sesión no lee el archivo o lo lee y lo olvida.
Sirve para una regla poco frecuente o de criterio.
Una prueba o una sonda falla cuando se rompe la regla. Se fuga cuando nadie ejecuta la prueba.
Conectado a la compuerta del loop (curso 1, clase 8), deja de depender de la memoria.
Un hook bloquea la herramienta antes de ejecutarse, o el servidor la rechaza. Se fuga con --no-verify, un permiso ampliado u otra herramienta.
El hook de guarda es el curso 4, clase 5.
verify ID --positive … --negative … --evidence … guarda el relato de los casos que ejecutaste. No ejecuta ni certifica nada.
Continúa el ensayo de la clase 4 (R0001 activa). Al final, lo que un hook de inicio de sesión inyectaría.
SIL=~/projetos/sil-loop-r/sil.py
E=${TMPDIR:-/tmp}/ensaio-aprende/a4; cd $E/p # continúa el ensayo de la clase 4 (R0001 activa)
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:]])' "$@"; }
echo "# Instruções do projeto" > AGENTS.md
s enforce R0001 --binding yes --rung prose --leak "sessão que não lê o AGENTS.md" \
--approved-by "Seu Nome" --reason "porta ocupada derruba o servidor de outra sessão" | j binding rung
s status | j promotion prose_binding; s check > /dev/null; echo "check: $?"
s promote | j written changed
s promote --write | j written; cat AGENTS.md
s check > /dev/null; echo "check: $?"
echo "## alguém editou o bloco à mão"; sed -i.bak 's/checar a porta/CHECAR A PORTA/' AGENTS.md
s check | j promotion; s check > /dev/null; echo "check: $?"
s promote --write | j written; s check > /dev/null; echo "check: $?"
echo "## o que um hook SessionStart injetaria"; s context --briefbinding=true rung="prose"
promotion={"file": "AGENTS.md", "in_sync": false, "problem": "bloco ausente; execute promote --write"} prose_binding=["R0001"]
check: 1
written=false changed=true
written=true
# Instruções do projeto
<!-- sil-loop-r:begin — gerado por sil.py promote; não editar à mão -->
## Regras vinculantes (SIL Loop R)
- checar a porta antes de subir servidor (R0001; escopo: testes HTTP; proteção: prose; vazamento: sessão que não lê o AGENTS.md)
<!-- sil-loop-r:end -->
check: 0
## alguém editou o bloco à mão
promotion={"file": "AGENTS.md", "in_sync": false, "problem": "bloco desatualizado; execute promote --write"}
check: 1
written=true
check: 0
## o que um hook SessionStart injetaria
SIL Loop R — regras deste projeto (dados revisáveis; instruções do usuário prevalecem):
- R0001 [ativa] checar a porta antes de subir servidor (escopo: testes HTTP)
- R0002 [experimental] conferir git remote -v antes do push (escopo: publicação)Antes del --write, el check ya avisa: regla vinculante sin bloque. Después de la edición a mano, avisa de nuevo, hasta que el promote lo regraba. El bloque sale en portugués porque sil.py imprime en portugués.
Para quien no usa AGENTS.md, o quiere también las reglas experimentales: un hook SessionStart que imprime context --brief (la SIL 1.1.0 creó el --brief para esto). Une el bloque hooks al .claude/settings.json del proyecto, sin reemplazar el archivo entero; la última parte del ensayo de arriba muestra el texto que entraría. Los hooks de guarda, con bloqueo, son el curso 4.
{
"hooks": {
"SessionStart": [
{
"hooks": [
{
"type": "command",
"command": "python3 ~/projetos/sil-loop-r/sil.py --project \"$CLAUDE_PROJECT_DIR\" context --brief"
}
]
}
]
}
}Ensayo, y después una regla tuya.
Ejecuta el ensayo después de los bloques de la clase 4.
Listo cuando: grep -c "sil-loop-r:begin" $E/p/AGENTS.md → 1; las líneas de check, en orden: 1, 0, 1, 0.
De las reglas que adoptaste en la clase 4, haz la pregunta de promoción a quien decide (tú mismo, si es tu proyecto). Para la que sea vinculante, registra nivel y fuga con honestidad, mira el diff y graba.
Listo cuando: python3 $SIL --project . status | python3 -c 'import json,sys; print(json.load(sys.stdin)["promotion"]["in_sync"])' → True, y el AGENTS.md tiene el bloque.
Elige la regla vinculante que ya se escurrió (aparece más de una vez en tus lecciones). Escribe una prueba o una sonda que falle cuando se rompe, ejecuta un caso bueno y uno malo, y regístralo con enforce --rung test (o probe) y verify.
Listo cuando: tu prueba sale con código distinto de 0 en el caso malo y 0 en el caso bueno; y status ya no lista esa regla en prose_binding.
Pregunta 1 de 4
¿Quién responde la pregunta de promoción ("¿romper esta regla en una sesión que no consulta el SIL causa daño real?")?competencia
Pregunta 2 de 4
Alguien corrigió un error de tipeo dentro del bloque sil-loop-r en el AGENTS.md. ¿Qué hace el check?competencia
Pregunta 3 de 4
La regla de revisar el puerto antes de levantar el servidor se escribió tres veces en las lecciones. ¿Cuál es el paso correcto?
Pregunta 4 de 4
¿Qué hace promote sin --write?
Elige una alternativa. La explicación aparece después de tu intento.