El loop que aprende|INEMA.CLUB-PRO

Clase 3 · 20 min

Tarjeta de decisión, promoción y rollback

Un keep en el laboratorio todavía no es la versión oficial. En producción, la versión nueva solo sube cuando el veredicto dice que B ganó sin empeorar nada, alguien la aprueba con la tarjeta de cinco líneas y existe un camino de vuelta que no borra nada. En esta clase rehaces los veredictos publicados del ejemplo de LOOP-R, promueves y revierto.

Empezar la clase
Llave selectora industrial de dos posiciones en un panel oscuro, una posición marcada con un punto amarillo, junto a una palanca de retorno.

En esta clase vas a

  1. 1Veredicto: B_GANHOU, A_SEGUE o AMOSTRA_INSUFICIENTE
  2. 2La tarjeta de decisión de cinco líneas
  3. 3Promover: veredicto + aprobación, con commit
  4. 4Rollback: el enlace vuelve, la carpeta se queda

Objetivo: leer un veredicto A/B con barandillas (guardrails), mostrar la tarjeta de 5 líneas, promover solo con aprobación y revertir sin borrar la versión.

01Del veredicto a la versión oficial, y de vuelta

Los comandos decidir, promover y reverter del runner LOOP-R. Haz clic en cada bloque.

Rollback no es deshacer el commit: es un commit nuevo que cambia el enlace. Toda la historia sigue en git.

Invariantes del runner: nunca promover sin B_GANHOU + aprobación, nunca borrar un ciclo, una versión o una línea de memoria, nunca dos experimentos al mismo tiempo.

02Los dos veredictos publicados del ejemplo

El ejemplo vendas-whatsapp de LOOP-R tiene datos SINTÉTICOS (generador con seeds elegidos para reflejar efectos diseñados) y decisiones humanas simuladas; los agentes corrieron de verdad. El kit rehace la cuenta en una copia.

Terminal · ensayo sin costo
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: $?"
Ejemplo del repositorio
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

Los mismos números del ledger publicado: E0001 con 58/300 contra 89/300 (z=2,94) fue descartado por reclamos (6 contra 1, tolerancia 0); E0002 con 58/300 contra 88/300 (z=2,85, p=0,004) ganó. Incluso con la tolerancia de 0,01 que el ejemplo adoptó después, E0001 todavía caería (Δ=0,0167).

03Tarjeta, promoción y rollback

Continúa el bloque anterior. El costo de la tarjeta es la suma del custo.md del ciclo 0004 del ejemplo (5 agentes, ~392 mil tokens); el ejemplo también lo registra en reales, el curso cuenta en tokens.

Terminal · ensayo sin costo
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
Ejemplo del repositorio
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

El primer intento de promover es rechazado: veredicto bueno, pero nadie aprobó. Después del rollback, atual apunta a v1 y las dos carpetas siguen ahí.

04La dueña quiere promover ya

Conversación simulada. La prueba de la versión B está en la mitad de la muestra. Elige qué respondes.

Martadueña de la clínica (personaje ficticio) · aprobadora L1

Elige tu respuesta. El comentario aparece justo después y la conversación sigue según tu elección.

    05Práctica

    Todo en una copia en /tmp: el kit nunca escribe en el repositorio loop-r.

    E7 · Rehacer los veredictos

    10 min

    Corre el primer bloque.

    Listo cuando: E0001 → VEREDITO: A_SEGUE con FALHA en reclamou y saída: 1; E0002 → VEREDITO: B_GANHOU, z=2.8543 y saída: 0.

    E8 · Promover y revertir

    10 min

    Ejecuta el segundo bloque.

    Listo cuando: la primera línea empieza con RECUSADO; después atual → v2, y al final atual → v1 · pastas: atual v1 v2; git -C $L log --oneline | wc -l → 3.

    E9 · La tarjeta de decisión de tu prueba

    20 min

    Para la hipótesis de la clase 1, escribe las tolerancias de cada "sem piorar" y la N mínima antes de ejecutar. Para un evento raro, usa al menos 2 errores estándar de la tasa base en la muestra planificada (loop-r/docs/05 §2). Haz commit del hipotese.md con las tolerancias antes del próximo ciclo.

    Listo cuando: 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 (el hipotese.md entró en git antes del primer keep), y el hipotese.md con commit tiene una tolerancia numérica por cada "sem piorar".

    06Prueba de la clase

    Pregunta 1 de 4

    B sube la respuesta de 19% a 30% con p=0,003, pero las quejas superan la tolerancia. ¿Cuál es el veredicto?competencia

    07En tres frases

    VeredictoB gana con significancia, N mínima y ninguna barandilla (guardrail) fuera de la tolerancia; si no, A sigue.
    AprobaciónEn L1, la tarjeta de cinco líneas va al humano; sin "aprobado", nada sube.
    VueltaEl rollback es un commit que cambia el enlace y anota el motivo; ninguna versión se borra.

    Para ir más allá

    Clase anteriorSiguiente clase