E13 · Bloco gravado e conferido
10 minRode o ensaio depois dos blocos da aula 4.
Pronto quando: grep -c "sil-loop-r:begin" $E/p/AGENTS.md → 1; as linhas de check, na ordem: 1, 0, 1, 0.
Aula 5 · 18 min
Uma regra aprovada que mora só num banco de dados não chega à sessão nova: ela só existe se alguém lembrar de consultar. Nesta aula você faz a pergunta de promoção, registra o degrau de proteção e o vazamento conhecido, grava o bloco no AGENTS.md com diff antes, e vê o check acusar quando alguém edita o bloco à mão.
Começar a aula
Objetivo: marcar a regra como vinculante com degrau e vazamento, gravar o bloco no AGENTS.md com promote --write e pegar o bloco editado com check.
enforce, promote e check (SIL Loop R 1.1.0). Clique em cada bloco.
A lacuna que a v1.1.0 fechou: na v1.0.0, nenhuma regra chegava ao AGENTS.md (sil-melhoramento/ANALISE.md, achado nº 1).
Valores aceitos em --rung, do mais fraco ao mais forte. O SIL registra o degrau; quem constrói o hook ou o teste é você.
A regra é lida pelo agente (AGENTS.md, CLAUDE.md) ou conferida numa lista. Vaza quando a sessão não lê o arquivo ou lê e esquece.
Bom para regra rara ou de julgamento.
Um teste ou uma sonda falha quando a regra é quebrada. Vaza quando ninguém roda o teste.
Ligado ao portão do loop (curso 1, aula 8), deixa de depender de memória.
Um hook barra a ferramenta antes de rodar, ou o servidor recusa. Vaza por --no-verify, permissão alargada ou outra ferramenta.
Hook de guarda é o curso 4, aula 5.
verify ID --positive … --negative … --evidence … guarda o relato dos casos que você rodou. Ele não executa nem certifica nada.
Continua o ensaio da aula 4 (R0001 ativa). No fim, o que um hook de início de sessão injetaria.
SIL=~/projetos/sil-loop-r/sil.py
E=${TMPDIR:-/tmp}/ensaio-aprende/a4; cd $E/p # continua o ensaio da aula 4 (R0001 ativa)
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 do --write, o check já acusa: regra vinculante sem bloco. Depois da edição à mão, acusa de novo, até o promote regravar. O bloco sai em português porque o sil.py imprime em português.
Para quem não usa AGENTS.md, ou quer as regras experimentais também: um hook SessionStart que imprime context --brief (a SIL 1.1.0 criou o --brief para isso). Junte o bloco hooks ao .claude/settings.json do projeto, sem substituir o arquivo inteiro; a última parte do ensaio acima mostra o texto que entraria. Hooks de guarda, com bloqueio, são o curso 4.
{
"hooks": {
"SessionStart": [
{
"hooks": [
{
"type": "command",
"command": "python3 ~/projetos/sil-loop-r/sil.py --project \"$CLAUDE_PROJECT_DIR\" context --brief"
}
]
}
]
}
}Ensaio, depois uma regra sua.
Rode o ensaio depois dos blocos da aula 4.
Pronto quando: grep -c "sil-loop-r:begin" $E/p/AGENTS.md → 1; as linhas de check, na ordem: 1, 0, 1, 0.
Das regras que você adotou na aula 4, faça a pergunta de promoção a quem decide (você mesmo, se for o seu projeto). Para a que for vinculante, registre degrau e vazamento honestos, veja o diff e grave.
Pronto quando: python3 $SIL --project . status | python3 -c 'import json,sys; print(json.load(sys.stdin)["promotion"]["in_sync"])' → True, e o AGENTS.md tem o bloco.
Escolha a regra vinculante que já escorregou (aparece mais de uma vez nas suas lições). Escreva um teste ou uma sonda que falha quando ela é quebrada, rode um caso bom e um ruim, e registre com enforce --rung test (ou probe) e verify.
Pronto quando: o seu teste sai com código diferente de 0 no caso ruim e 0 no caso bom; e status não lista mais essa regra em prose_binding.
Pergunta 1 de 4
Quem responde à pergunta de promoção ("quebrar esta regra numa sessão que não consulta o SIL causa dano real?")?competência
Pergunta 2 de 4
Alguém corrigiu um erro de digitação dentro do bloco sil-loop-r no AGENTS.md. O que o check faz?competência
Pergunta 3 de 4
A regra de checar a porta antes de subir servidor foi escrita três vezes nas lições. Qual é o passo certo?
Pergunta 4 de 4
O que o promote sem --write faz?
Escolha uma alternativa. A explicação aparece depois da sua tentativa.