O loop que aprende|INEMA.CLUB-PRO

Aula 3 · 20 min

Cartão de decisão, promoção e rollback

Um keep no laboratório ainda não é a versão oficial. Em produção, a versão nova só sobe quando o veredito diz que B ganhou sem piorar nada, alguém aprova pelo cartão de cinco linhas e há um caminho de volta que não apaga nada. Nesta aula você refaz os vereditos publicados do exemplo do LOOP-R, promove e reverte.

Começar a aula
Chave seletora industrial de duas posições num painel escuro, uma posição marcada com ponto amarelo, ao lado de uma alavanca de retorno.

Nesta aula você vai

  1. 1Veredito: B_GANHOU, A_SEGUE ou AMOSTRA_INSUFICIENTE
  2. 2O cartão de decisão de cinco linhas
  3. 3Promover: veredito + aprovação, com commit
  4. 4Rollback: o link volta, a pasta fica

Objetivo: ler um veredito A/B com guarda-corpos, mostrar o cartão de 5 linhas, promover só com aprovação e reverter sem apagar a versão.

01Do veredito à versão oficial, e de volta

Os comandos decidir, promover e reverter do runner LOOP-R. Clique em cada bloco.

Rollback não é desfazer o commit: é um commit novo que muda o link. A história inteira continua no git.

Invariantes do runner: nunca promover sem B_GANHOU + aprovação, nunca apagar ciclo, versão ou linha de memória, nunca dois experimentos ao mesmo tempo.

02Os dois vereditos publicados do exemplo

O exemplo vendas-whatsapp do LOOP-R tem dados SINTÉTICOS (gerador com seeds escolhidos para refletir efeitos desenhados) e decisões humanas simuladas; os agentes rodaram de verdade. O kit refaz a conta numa cópia.

Terminal · ensaio sem custo
K=~/projetos/loop-r-eng-aprende-v72/kit
X=~/projetos/loop-r/exemplos/vendas-whatsapp   # git clone https://github.com/inematds/loop-r ~/projetos/loop-r (dados SINTÉTICOS)
E=${TMPDIR:-/tmp}/ensaio-aprende/a3; rm -rf $E; L=$E/loop   # uma CÓPIA: nada é gravado no repo loop-r
python3 $K/loopr.py iniciar $L --v1 $X/versoes/v1/executor.prompt.md --candidata $X/versoes/v2/executor.prompt.md
echo "## E0001 · H2 (até 80 palavras), tolerância 0 em reclamações"
python3 $K/loopr.py veredito $L --csv $X/dados/execucoes.csv --de 2026-02-02 --ate 2026-04-26 \
  --metrica resposta --minimo 166 --vigiar reclamou:0 --vigiar optout:0.005; echo "saída: $?"
echo "## E0002 · H3 (abrir citando um ponto da avaliação)"
python3 $K/loopr.py veredito $L --csv $X/dados/execucoes.csv --de 2026-05-04 --ate 2026-07-26 \
  --metrica resposta --minimo 212 --vigiar reclamou:0.01 --vigiar optout:0.005; echo "saída: $?"
Exemplo do repositório
loop iniciado: versoes/atual → v1
## E0001 · H2 (até 80 palavras), tolerância 0 em reclamações
VEREDITO: A_SEGUE
Métrica do teste: resposta  A=0.1933 (58/300)  B=0.2967 (89/300)  z=2.9426 p=0.0033
Vigiada reclamou: A 1/300 vs B 6/300, Δ=+0.0167 tol 0 → FALHA
Vigiada optout: A 0/300 vs B 1/300, Δ=+0.0033 tol 0.005 → DENTRO
saída: 1
## E0002 · H3 (abrir citando um ponto da avaliação)
VEREDITO: B_GANHOU
Métrica do teste: resposta  A=0.1933 (58/300)  B=0.2933 (88/300)  z=2.8543 p=0.0043
Vigiada reclamou: A 2/300 vs B 4/300, Δ=+0.0067 tol 0.01 → DENTRO
Vigiada optout: A 3/300 vs B 1/300, Δ=-0.0067 tol 0.005 → DENTRO
saída: 0

Os mesmos números do ledger publicado: E0001 com 58/300 contra 89/300 (z=2,94) foi descartado por reclamações (6 contra 1, tolerância 0); E0002 com 58/300 contra 88/300 (z=2,85, p=0,004) ganhou. Mesmo com a tolerância de 0,01 que o exemplo adotou depois, o E0001 ainda cairia (Δ=0,0167).

03Cartão, promoção e rollback

Continua o bloco anterior. O custo do cartão é a soma do custo.md do ciclo 0004 do exemplo (5 agentes, ~392 mil tokens); o exemplo também registra em reais, o curso conta em tokens.

Terminal · ensaio sem custo
K=~/projetos/loop-r-eng-aprende-v72/kit
E=${TMPDIR:-/tmp}/ensaio-aprende/a3; L=$E/loop   # continua o bloco anterior (veredito B_GANHOU gravado)
python3 $K/loopr.py promover $L; echo "saída: $?"
python3 $K/loopr.py cartao $L --hipotese "H3 — abrir citando a avaliação" --tokens 392000
python3 $K/loopr.py decidir $L aprovado --por "Seu Nome"
python3 $K/loopr.py promover $L; echo "atual → $(readlink $L/versoes/atual)"
python3 $K/loopr.py reverter $L --motivo "resposta caiu no 1º ciclo após a promoção"
echo "atual → $(readlink $L/versoes/atual) · pastas: $(ls $L/versoes | tr '\n' ' ')"
git -C $L log --format=%s
Exemplo do repositório
RECUSADO: promover exige veredito B_GANHOU e decisão aprovado (veredito: B_GANHOU; decisão: nenhuma)
saída: 1
CICLO — hipótese: "H3 — abrir citando a avaliação"
Resultado:   resposta 0.1933 → 0.2933  ((58/300) vs (88/300), z=2.8543, p=0.0043)  [VEREDITO: B_GANHOU]
Vigiado:     reclamou ok · optout ok
Custo:       392.000 tokens neste ciclo (sai da cota)
Decisão:     aprovar / rejeitar / esperar mais dados
decisão gravada: aprovado
PROMOVIDA: versoes/atual → v2
atual → v2
ROLLBACK: versoes/atual → v1 (a pasta v2 continua lá)
atual → v1 · pastas: atual v1 v2 
loop-r: rollback v2 → v1
loop-r: promote v2
loop-r: iniciar

A primeira tentativa de promover é recusada: veredito bom, mas ninguém aprovou. Depois do rollback, atual aponta para v1 e as duas pastas continuam lá.

04A dona quer promover já

Conversa simulada. O teste da versão B está na metade da amostra. Escolha o que você responde.

Martadona da clínica (personagem fictícia) · aprovadora L1

Escolha a sua resposta. O comentário aparece logo depois e a conversa segue conforme a escolha.

    05Prática

    Tudo numa cópia em /tmp: o kit nunca grava no repositório loop-r.

    E7 · Refazer os vereditos

    10 min

    Rode o primeiro bloco.

    Pronto quando: E0001 → VEREDITO: A_SEGUE com FALHA em reclamou e saída: 1; E0002 → VEREDITO: B_GANHOU, z=2.8543 e saída: 0.

    E8 · Promover e reverter

    10 min

    Rode o segundo bloco.

    Pronto quando: a primeira linha começa com RECUSADO; depois atual → v2, e no fim atual → v1 · pastas: atual v1 v2; git -C $L log --oneline | wc -l → 3.

    E9 · O cartão do seu teste

    20 min

    Para a hipótese da aula 1, escreva as tolerâncias de cada "sem piorar" e o N mínimo antes de rodar. Para evento raro, use pelo menos 2 erros-padrão da taxa-base na amostra planejada (loop-r/docs/05 §2). Commite o hipotese.md com as tolerâncias antes do próximo ciclo.

    Pronto quando: H=$(git log --diff-filter=A --format=%ct -- hipotese.md | tail -1); C=$(git log --reverse --format=%ct --grep='^keep:' | head -1); [ -n "$H" ] && { [ -z "$C" ] || [ "$H" -lt "$C" ]; }; echo "saída: $?" → saída: 0 (o hipotese.md entrou no git antes do primeiro keep), e o hipotese.md commitado tem uma tolerância numérica por "sem piorar".

    06Teste da aula

    Pergunta 1 de 4

    B sobe a resposta de 19% para 30% com p=0,003, mas as reclamações passam da tolerância. Qual é o veredito?competência

    07Em três frases

    VereditoB ganha com significância, N mínimo e nenhum guarda-corpo fora da tolerância; senão A segue.
    AprovaçãoEm L1, o cartão de cinco linhas vai ao humano; sem "aprovado", nada sobe.
    VoltaRollback é um commit que muda o link e anota o motivo; nenhuma versão é apagada.

    Para ir além

    Aula anteriorPróxima aula