E7 · Refazer os vereditos
10 minRode 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.
Aula 3 · 20 min
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
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.
Os comandos decidir, promover e reverter do runner LOOP-R. Clique em cada bloco.
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.
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.
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: $?"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).
Ler só a métrica do teste. O E0001 tinha ganho maior que o E0002 e mesmo assim não podia subir: um guarda-corpo passou da tolerância. E a tolerância é combinada antes; mudá-la depois de ver o número é reescrever a hipótese.
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.
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=%sRECUSADO: 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á.
Conversa simulada. O teste da versão B está na metade da amostra. Escolha o que você responde.
Escolha a sua resposta. O comentário aparece logo depois e a conversa segue conforme a escolha.
Tudo numa cópia em /tmp: o kit nunca grava no repositório loop-r.
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.
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.
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".
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
Pergunta 2 de 4
O veredito deu B_GANHOU e o aprovador não respondeu no prazo. O que acontece em L1?competência
Pergunta 3 de 4
No rollback de v2 para v1, o que acontece com a pasta v2?
Pergunta 4 de 4
Quando é permitido parar um teste antes da amostra mínima?
Escolha uma alternativa. A explicação aparece depois da sua tentativa.