Passo 7 · O Loop · O Loop · Loop Engineering ENPT
Passo 7 · O Loop

O loop em movimento: AFK — você observa, não conduz

Você conheceu cada etapa do loop uma de cada vez. Agora veja a coisa toda rodar sozinha — passada após passada, sem nenhum humano apertar go. Seu papel muda de rodar as passadas para assistir às passadas rodarem e ler a evidência. AFK: longe do teclado, totalmente observável.

Linguagem simples primeiro. Abra um painel só quando quiser a versão precisa.
1

A grande ideia


Até aqui você aprendeu o loop como cinco movimentos que você faz: LEARN o estado real, ANALYZE a lacuna e escolha uma coisa, EXECUTE essa única unidade delimitada, VERIFY no limite real e DECIDE o que acontece em seguida. Lidos assim, soam como um checklist que você percorre na mão, uma passada de cada vez.

Não é. Uma vez escrito o contrato de escopo — o "pronto" mensurável da lição 2 — o loop roda AFK: longe do teclado. Um agente faz uma passada. Depois outra. Depois outra. Ele continua até "pronto" ser atingido ou bater em algo que só um humano pode responder. Ninguém clica em nada entre as passadas.

Isso muda seu papel por completo. Você não é mais quem roda cada passada. Você é quem assiste à execução — lendo um log que o loop escreve à medida que avança, dando uma olhada numa linha de status, vendo um checklist se preencher. Isso é observabilidade: você vê o que está acontecendo, mas não está no caminho. O sistema conduz; você observa.

A reformulação, em uma linha: o operador não roda as passadas — o operador assiste às passadas rodarem e lê a prova. A única vez em que você é chamado de volta é uma bifurcação genuína que só um humano pode resolver. Revisão de rotina nunca é trabalho seu.

Pense como… uma máquina de lavar louça. Você carrega, escolhe o ciclo, aperta start — e então vai embora. Você não fica ali girando o braço ou apertando o detergente a cada minuto. Você dá uma olhada na luzinha de vez em quando. Ela roda lavar → enxaguar → secar sozinha e para quando a louça está limpa. A única vez em que ela te chama de volta é um problema real que não consegue resolver sozinha — o ralo está entupido ou acabou o sal. Aquela luzinha piscando é a sua observabilidade; o ciclo é o loop; "louça limpa" é o seu done-when. Onde a analogia falha: uma máquina de lavar louça pode forjar "pronto" só parando, mas ao loop isso é proibido — toda passada precisa provar que está pronta num limite real, nunca alegar.

O que "AFK" significa precisamente aqui

AFK não é "dispare e reze". É um loop autônomo rigorosamente delimitado com três garantias estruturais. Um: toda passada termina num Proof Gate real — a mudança é exercitada contra o limite de verdade (o executor de testes, o endpoint HTTP, o arquivo em disco, a página renderizada), nunca uma alegação ou um mock. Dois: o loop anexa cada passada a um artefato observável (LOOP-LOG.md) e mantém um status ao vivo, de modo que a execução é legível sem interrompê-la. Três: o loop bloqueia o humano somente numa bifurcação genuína que só o usuário resolve — uma decisão que nenhuma quantidade de coleta de evidência consegue resolver (uma decisão de produto, uma ação irreversível, uma credencial faltando). Todo o resto ele resolve sozinho e registra.

Observabilidade vs controle

Em termos de operações, o humano fica no plano de observabilidade, não no plano de controle. Você consome sinais — LOOP-LOG.md, o checklist do done-when, o status por passada, o review.md ao fim da execução. Você não emite ações de controle dentro do loop entre as passadas. A separação é deliberada: um humano no caminho de controle por passada é o gargalo que torna a autonomia de longo prazo impossível. Tire o humano do caminho, deixe a ele uma janela clara para dentro, e o loop pode rodar por horas.

Para onde o resto do curso vai daqui

Esta lição é a dobradiça. O Módulo 2 ensinou os cinco movimentos; este os mostra rodando sem supervisão. O Módulo 3 (o Forge) envolve um front-end completo em torno de uma execução AFK — um Executor constrói cada ticket e um Validator independente o prova contra o GOAL.md (o Validator nunca é quem construiu), e uma passada final de QA AFK emite o review.md como um relatório de observabilidade. O fio que amarra tudo é exatamente a afirmação desta lição: tudo roda AFK; o único papel do humano é observabilidade.

2

Duas formas de "usar" o loop — e só uma escala


Existe um modelo errado tentador, e o certo. O errado parece produtivo porque você está ocupado. O certo parece estranho no começo porque você não está.

✕ Conduzir cada passada (o velho hábito)

  • Você lê o resultado da passada 1, então você decide e dispara a passada 2.
  • Você avalia a olho se a mudança "parece pronta" — lendo, não por prova.
  • Você está no caminho entre toda passada; o loop trava sempre que você se afasta.
  • Trabalho de longo prazo é impossível — você é o gargalo, uma passada de cada vez.
  • "Pronto" é um juízo que você faz, então ele deriva com sua atenção e humor.

✓ Observar a execução (AFK)

  • O loop lê o próprio resultado, decide e dispara a próxima passada sozinho.
  • Cada passada prova "pronto" no limite real — um portão, não um olhar.
  • Você está fora do caminho; a execução segue por horas enquanto você não está.
  • Trabalho de longo prazo é normal — dezenas de passadas convergem sem supervisão.
  • "Pronto" é o contrato fixo e mensurável; o loop para exatamente quando ele é atingido.

O sinal revelador: se afastar-se do teclado para o progresso, você está conduzindo. Se afastar-se não muda nada além de você ler um log mais longo ao voltar, você está observando — e isso é o loop em movimento.

3

O loop em uma imagem — e onde você fica


Aqui está a coisa toda. Os cinco movimentos formam um anel que o agente percorre de novo e de novo. Você é desenhado fora desse anel de propósito. Você não estende a mão para dentro dele. Você lê o que ele escreve — LOOP-LOG.md e o status ao vivo — por uma janela de mão única.

o loop roda AFK — nenhum humano dentro deste anel 1 · LEARN 2 · ANALYZE 3 · EXECUTE uma 4 · VERIFY (proof) 5 · DECIDE DECIDE → (não pronto) → próxima passada você observador LOOP-LOG.md somente-leitura · mão única
Cinco etapas, um anel, percorrido repetidamente. O humano fica fora dele — lendo LOOP-LOG.md e o status por uma janela somente-leitura, sem nunca agir dentro.

Por que o humano é desenhado fora do anel

O posicionamento é o ponto inteiro do diagrama. Ponha o humano dentro do anel — fazendo a chamada DECIDE a cada passada, ou avaliando o VERIFY a olho — e o loop só consegue avançar na velocidade e na disponibilidade humanas. Ponha o humano fora, com uma janela somente-leitura para os artefatos, e o loop avança na velocidade da máquina enquanto permanece totalmente legível. A seta de LOOP-LOG.md para o humano aponta numa só direção: informação para fora, nenhum controle para dentro.

A aresta DECIDE é o que faz disso um loop, não uma linha

A seta isolada mais importante é a que vai de DECIDE de volta à próxima passada. Se VERIFY prova pronto, DECIDE para a execução. Se VERIFY mostra que a lacuna estreitou mas não fechou, DECIDE alimenta um plano melhorado de volta no LEARN e o anel gira de novo. Se VERIFY revela uma bifurcação que só o usuário resolve, DECIDE pausa e levanta um handoff. Três resultados, dos quais um (e só um) envolve você — e, mesmo assim, apenas como quem decide numa bifurcação, não como condutor das passadas de rotina.

4

Percorra uma passada — três formas de ela terminar


Vamos desacelerar o loop até o talo e percorrer uma única passada, etapa por etapa, com o exemplo recorrente deste curso: RHG, o app que viemos melhorando lição após lição. Escolha um cenário, então aperte Próximo para acender cada etapa por vez. Veja para onde VERIFY manda a passada no ramo DECIDE — porque uma passada pode terminar de três formas diferentes, e só uma delas envolve você.

  • Converge — a prova passa, o done-when é atingido, a execução para. Você não fez nada.
  • Itera — a prova mostra que a lacuna estreitou mas não fechou; o loop melhora o plano e gira de novo. Você ainda não fez nada.
  • Bloqueia — uma bifurcação genuína que só o usuário resolve. O loop pausa e levanta um handoff. Esta é a única vez em que você é chamado.
Trace uma passada que:
progresso, não pronto melhora o plano → próxima passada done-when atingido bifurcação só do usuário 1 · LEARN o estado real 2 · ANALYZE → escolha UMA 3 · EXECUTE uma unidade 4 · VERIFY no limite? ✓ Convergiu — para ↻ Iterar · melhorar ⚑ Bloqueado → handoff
Uma passada, de cima a baixo. O losango é VERIFY no limite real; as três saídas são os resultados de DECIDE. Só a vermelha (Bloqueado) chama você.
Passo 0 de 5

Comece aqui

Uma passada começa — e você não está nela

Aperte Próximo para percorrer uma passada que converge. Troque o cenário acima para ver uma passada que gira, ou uma que precisa parar e perguntar a você.

A passada como código — o switch DECIDE

Uma passada é uma função. LEARN, ANALYZE, EXECUTE, então VERIFY retorna um veredito, e DECIDE é um switch de três vias sobre esse veredito. Repare que nada neste loop chama de volta um humano, exceto o único ramo explícito de handoff — e esse ramo dispara somente em fork, nunca numa passada de rotina.

async function pass(goal, log) {
  const state = await learn(goal);          // see the real state
  const unit  = analyze(state, goal);       // classify gap, pick ONE
  await execute(unit);                     // one bounded change
  const proof = await verify(unit, goal);  // at the REAL boundary

  log.append(proof);                       // observability, every pass

  switch (proof.verdict) {
    case 'done':     return { stop: true };          // converged
    case 'progress': return { stop: false };         // iterate → next pass
    case 'fork':     return handoff(proof);        // the ONLY human pull-in
  }
}

while (!(await pass(goal, log)).stop) { /* AFK: no human between passes */ }

Por que três resultados e não dois

Um loop ingênuo tem dois resultados: pronto, ou tente de novo. O terceiro — fork — é o que mantém a autonomia segura. Sem ele, um loop que esbarra numa pergunta genuinamente humana ou chuta (e produz lixo confiante) ou roda para sempre. Com ele, o loop faz a coisa honesta: para, empacota a decisão e a revela. A disciplina é que fork é raro e específico — uma decisão de produto, uma ação irreversível, um segredo faltando — nunca "isso é difícil" ou "por favor confirme este passo de rotina".

5

O ramo DECIDE, por si só


O ramo que você acabou de percorrer merece uma imagem só sua, porque é o coração de "você observa, você não conduz". VERIFY produz um veredito; DECIDE age sobre ele. Dois dos três caminhos mantêm o loop autônomo. Só o terceiro — e só às vezes — chega até você.

DECIDE sobre o veredito veredito pronto progresso fork (raro) ⚑ Handoff → chega a você ✓ Convergiu para · sem humano ↻ Iterar próxima passada · sem humano
Três saídas de DECIDE. Duas ficam dentro da máquina (parar, ou girar). Só Handoff — a rara bifurcação que só o usuário resolve — cruza para o seu lado.

Leia as cores: verde (convergiu) e azul (iterar) nunca tocam você. Ferrugem (handoff) é a única que toca — e dispara numa bifurcação genuína, não numa revisão de rotina. Se você se vir dentro do loop num caminho verde ou azul, algo está mal configurado: você está conduzindo quando deveria estar observando.

6

O painel de observabilidade — você assiste, você não executa


Agora conduza o painel do jeito que você de fato conduziria numa execução AFK — só que "conduzir" é a palavra errada, porque os únicos botões aqui são os movimentos do próprio loop, e seu trabalho de verdade é ler a leitura. Aperte um movimento para avançar a passada; veja o estado destacado viajar, os próximos movimentos permitidos se atualizarem e o log anexar. O ponto a sentir: em cada estado o loop sabe o que vem a seguir por conta própria — os botões estão mostrando as opções da máquina, não pedindo que você escolha.

Leve até o fim. Uma passada convergida termina em beco sem saída em CONVERGED, sem nada para apertar. Uma passada bloqueada termina em BLOCKED — e a única coisa que a move é uma decisão humana (o movimento resolve, marcado em azul). Esse movimento azul é o único lugar a que uma pessoa pertence.

start verify done again fork resolve Ocioso IDLE Rodando passada RUN · learn→exec Verificando VER · proof gate Iterar ITER · improve Convergiu DONE · final Bloq BLK

O nó cor de barro é o estado atual. Os nós esmaecidos não são alcançáveis daqui. resolve é o único movimento humano.

Estado atual · o que você observa

IDLE

A execução está configurada e esperando. Aperte start para começar a passada 1. Depois disso, o loop avança sozinho.

Movimentos que o loop pode fazer em seguida

LOOP-LOG.md — anexado conforme a execução avança

    A execução inteira em um objeto

    O painel é uma máquina de estados finitos — o mesmo formato do próprio loop. Há um estado atual, um conjunto fixo de movimentos e uma tabela que mapeia (state, move) → nextState. Os botões leem a tabela para decidir o que habilitar; você não consegue disparar um movimento que não seja legal a partir do estado atual, que é exatamente por que o loop não consegue "pular" o Proof Gate. CONVERGED é terminal (a execução acabou). BLOCKED é um estado especial: o único movimento para sair dele é resolve, e resolve é do humano.

    const run = {
      IDLE: { start: 'RUN' },
      RUN:  { verify: 'VER' },                 // always pass through proof
      VER:  { done: 'DONE', again: 'ITER',    // converge or loop…
              fork: 'BLK' },                   // …or raise a fork
      ITER: { start: 'RUN' },                 // next pass, autonomously
      BLK:  { resolve: 'IDLE' },              // the ONLY human move
      DONE: {}                              // terminal — converged
    };

    Por que desabilitar em vez de ignorar

    Quando um movimento não está na tabela para o estado atual, o botão fica desabilitado, não silenciosamente inerte. Essa restrição visível é o ensinamento: as opções do loop são finitas e conhecidas a cada passo, então seu comportamento é previsível e legível de fora. Um humano assistindo ao painel sempre consegue responder "o que pode acontecer a seguir?" sem ler nenhum código — o que é a essência da observabilidade.

    7

    O ciclo, rodando sem supervisão


    Um diagrama estático mostra as etapas; ele não consegue mostrar o movimento. Aperte Reproduzir e o loop roda sozinho — um token de passada viaja LEARN → ANALYZE → EXECUTE → VERIFY, o Proof Gate decide, e a execução ou converge ou manda o token de volta para outra passada. Reproduzir avança automaticamente sem nenhuma entrada sua (essa é a parte AFK); Passo percorre um compasso; Reiniciar reembaralha se esta execução vai convergir ou girar de novo. Repare que você não está apertando nada enquanto roda — você só está assistindo.

    pronto
    LEARN ANALYZE EXECUTE VERIFY proof gate DECIDE parar / girar ✓ CONVERGED execução para
    O ponto verde sempre orbita — o loop está sempre "rodando AFK". Aperte Reproduzir para mandar um token de passada dar a volta; DECIDE ou o para (Convergiu) ou o gira de volta a LEARN.

    Pronto. Aperte Reproduzir para rodar uma passada sem supervisão. Esta execução vai convergir ou girar — Reiniciar reembaralha qual.

    Máquina de estados, não um vídeo

    O movimento é uma máquina de estados finitos de cinco fases em JS puro — learn, analyze, execute, verify, decide. Cada compasso interpola o token com requestAnimationFrame e uma curva ease-in-out; Reproduzir dispara automaticamente o próximo compasso num timer (o comportamento AFK), Pausar o limpa. Não há <video>, nem GIF, nem biblioteca — então ele desliza, percorre e reinicia de forma determinística. O ponto verde que sempre orbita é um único <animateMotion> declarativo com repeatCount="indefinite", sinalizando "o loop está vivo" com zero JS.

    Respeitando movimento reduzido

    Honrar prefers-reduced-motion: reduce é inegociável para uma lição que se apoia em animação. Quando está ativado, as interpolações do JS viram saltos instantâneos (o token ainda se move entre etapas, só não desliza), e toda a sequência é narrada na legenda aria-live="polite" para que um usuário de leitor de tela — ou qualquer pessoa que desligou o movimento — receba cada compasso em palavras. A órbita declarativa é intencionalmente sutil e de baixo contraste para não distrair; um build mais rígido poderia pausá-la sob a mesma media query.

    8

    Lendo o LOOP-LOG.md — avance o tempo, veja-o se preencher


    Esta é a coisa mais importante que você de fato faz como observador: você lê o log. Então aqui está o próprio log, ao vivo. Aperte Avançar uma passada para deixar o loop dar mais um passo — e observe duas coisas ao mesmo tempo: o checklist de done-when à esquerda avança mais perto de completo, e o LOOP-LOG.md à direita ganha uma nova entrada. Você não está executando a passada. Você está assistindo ao loop executá-la e lendo o que ele escreveu.

    Continue avançando. A execução termina de uma de duas formas: cada caixa de done-when fica verde e o veredito diz convergiu, ou o loop esbarra numa bifurcação e o veredito fica azul — pronto para decisão, esperando por você. Esse é o ritmo inteiro de uma execução AFK, comprimido.

    passada 0 · t+0m

    done-when · o contrato de escopo do RHG

    • Build está verdenpm run build → exit 0
    • Todos os testes passamvitest run → 0 failing
    • /health retorna 200curl -s -o /dev/null -w '%{http_code}'
    • Sem violações críticas de a11yaxe → 0 critical
    • Copy de preços aprovadasó humano · decisão de produto
    Veredito: rodando — o loop está iterando. Nada para você fazer ainda.

    LOOP-LOG.md · anexado pelo loop, lido por você

    O que uma entrada real de LOOP-LOG.md contém

    Cada passada anexa um registro pequeno, somente-de-anexo. O formato é deliberado: um timestamp, qual unidade foi tentada, o veredito do Proof Gate e a evidência daquele veredito — o comando de fato executado e seu resultado de fato, nunca uma paráfrase. Essa última parte é o que torna o log confiável: o humano lê a prova, não a opinião do loop sobre si mesmo.

    ## pass 3 · 2026-06-15T14:22:09Z
    unit:    add /health endpoint + smoke test
    verify:  curl -s -o /dev/null -w '%{http_code}' :3000/health
    result:  200            # real boundary, not a claim
    verdict: progress      # done-when: 3/5 met → iterate
    next:    a11y sweep on the pricing view

    Somente-de-anexo é uma vantagem

    O log nunca é reescrito, só anexado. Isso dá ao observador um histórico completo e ordenado da execução — cada passada, cada veredito, cada pedaço de evidência — para que um humano chegando tarde possa reconstruir exatamente o que aconteceu sem ter assistido ao vivo. É o gravador de voo do loop. Quando a execução finalmente converge (ou bifurca), o mesmo artefato é a base do review.md de fim de execução que a passada de QA emite.

    A linha só-humano

    Repare que o último item do done-when — "Copy de preços aprovada" — está marcado como só humano. O loop consegue levar os outros quatro ao verde inteiramente por conta própria. Ele fisicamente não consegue marcar o quinto, porque é uma decisão de produto. Esse único item é o que acaba virando o veredito azul e levantando o handoff. Tudo acima dele é trabalho do loop; aquela única linha é sua.

    9

    A leitura de status por passada


    Às vezes você não quer ler o log inteiro — você quer os sinais vitais num relance, do jeito que um engenheiro de plantão varre um painel. Essa é a leitura de status. Quatro números de destaque dizem como vai a execução; uma tabela abaixo mostra a saúde de cada etapa na passada mais recente. Aperte Atualizar para puxar uma nova leitura, ou ligue Ao vivo para vê-la pulsar como faria durante uma execução AFK. De novo: você está lendo, não rodando.

    Saúde da execução — RHG · loop em movimento

    execução AFK · meta: GOAL.md · contínua, desde a passada 1

    Execução saudável — convergindo
    atualizado agora mesmo
    done-when atingido
    4/5
    +1 nesta passada
    passadas rodadas
    7
    +1
    taxa de falha da prova
    0.0%
    −12 pts
    chamados ao humano
    0
    nenhum ainda
    Saúde por etapa · passada mais recente
    Etapa Status Última latência Última nota

    Um modelo, duas vistas

    Um único array de objetos de etapa alimenta tanto a tabela quanto a pílula de resumo. Cada tique perturba as métricas dentro de limites realistas, recomputa o status de cada etapa, então re-deriva o banner: qualquer etapa com prova falha → vermelho, qualquer etapa esperando humano → azul, senão verde/convergindo. Os deltas dos KPIs são coloridos por significado — "chamados ao humano" em queda é bom (verde), mesmo que ambas as setas possam apontar para o mesmo lado. O ponto inteiro de uma leitura de status é que o olho lê a cor primeiro.

    O que "saudável" significa para uma execução do loop

    Para uma execução AFK, "saudável" é uma coisa específica: as passadas estão completando, a taxa de falha da prova é baixa ou caindo, o done-when está subindo, e os chamados ao humano estão em zero. Uma execução que itera feliz sem ninguém tocá-la é o estado ideal — significa que o loop está fazendo exatamente o seu trabalho. O número que você mais observa é "chamados ao humano": enquanto permanecer em zero, você pode ficar longe do teclado.

    10

    O quadro de tickets se move sozinho


    Quando o loop é envolvido pelo front-end Forge (próximo módulo), o trabalho é um quadro de tickets — pequenas unidades delimitadas, cada uma com relações de bloqueio, dispostas como um kanban. Numa execução AFK, você não arrasta os cartões. O loop arrasta: ele escolhe um ticket desbloqueado, o constrói, o prova e o desliza para Pronto — depois o próximo. Aperte Rodar uma passada do loop e veja um cartão avançar sozinho. As contagens no topo se mantêm honestas o tempo todo. Você ainda pode pegar um cartão para vê-lo se mover, mas numa execução real você só estaria assistindo.

    Um cartão é especial: RHG-19 carrega uma bifurcação só do usuário. O loop vai mover todo o resto para Pronto e deixar aquele estacionado em andamento com uma etiqueta de bloqueado — porque é a única decisão que o loop não tem permissão para tomar. Aquele cartão estacionado é a sua deixa.

    Abertos: 0 · Prontos: 0 · Chamados ao humano: 0
    Backlog0
    Em andamento0
    Pronto · provado0

    O quadro é estado, não pixels

    Cada ticket é um objeto com um campo col que só pode ser triage, progress ou done. As colunas na tela não são a fonte da verdade — o array de objetos de ticket é. "Rodar uma passada do loop" encontra o ticket desbloqueado de maior prioridade, o avança uma coluna e re-pinta. Um ticket com a flag human não atendida pode mover para dentro de andamento mas não consegue chegar a Pronto — espelhando exatamente o loop: o Executor o constrói, o Validator (um agente diferente, nunca quem construiu) tenta prová-lo, e o Proof Gate se recusa a aprovar uma decisão só humana.

    function runOnePass() {
      const t = tickets
        .filter(x => x.col !== 'done' && !x.blocked)
        .sort(byPriority)[0];
      if (!t) return raiseHandoff();   // only blocked work left → you
      t.col = next(t.col);             // triage→progress→done
      if (t.human && t.col === 'done') t.col = 'progress'; // can't auto-finish a fork
      render();
    }

    As relações de bloqueio mantêm tudo honesto

    No Forge, os tickets carregam arestas de bloqueio — o ticket B não pode começar até o ticket A estar pronto e provado. O loop as respeita automaticamente quando escolhe a próxima unidade desbloqueada, e é por isso que uma execução longa não precisa de um humano sequenciando o trabalho: o grafo de dependências mais a ordem de prioridade bastam. O único papel de sequenciamento do humano é o primeiríssimo (escrever a meta) e o último de todos (uma bifurcação genuína).

    11

    A execução de várias passadas, lida depois do fato


    Aqui está a outra forma de consumir uma execução AFK: não ao vivo, mas depois. Você voltou ao teclado; a execução terminou horas atrás. Você lê o registro de cima a baixo — uma linha do tempo de cada passada, por que cada veredito saiu do jeito que saiu, os totais e um checklist de quaisquer encaminhamentos. Este é o mesmo log de gravador de voo de antes, renderizado como um relatório que você varre em dois minutos. Pontos verde-oliva são passadas normais, cor de barro é uma passada que encontrou uma lacuna, azul é a única bifurcação que chamou um humano, verde é a convergência.

    RUN LOG

    RHG · o loop convergiu em 6 passadas

    Iniciada2026-06-15 · 14:02 UTC
    Convergiu2026-06-15 · 14:41 UTC
    Duração39m · sem supervisão
    Passadas6 (1 fork)
    ObservadorVocê · somente-leitura
    1. passada 1

      LEARN do baseline · 1/5 do done-when atingido

      O loop leu o estado real do RHG: build verde, mas sem endpoint /health, dois testes falhando, a11y não verificada. Escolheu os testes falhando como a primeira unidade.

      progresso
    2. passada 2

      Corrigiu os testes falhando · prova: vitest run → 0 failing

      Executou uma correção delimitada, verificou no limite real (rodou a suíte), registrou a passada. 2/5 atingido. Girou sozinho.

      progresso
    3. passada 3

      Adicionou /health — a primeira tentativa falhou na prova

      VERIFY bateu em :3000/health e recebeu 404, não 200. O Proof Gate se recusou a aprovar. O loop não alegou sucesso — registrou a falha e melhorou o plano.

      prova falhou → repetir
    4. passada 4

      /health retorna 200 · 3/5 atingido

      Rota registrada corretamente; curl retornou 200 no limite real. Registrou e girou. Ainda ninguém ao teclado.

      progresso
    5. passada 5

      Esbarrou numa bifurcação — a copy de preços precisa de um humano

      4/5 atingido. O último item era uma decisão de produto que o loop não tem permissão para tomar. Ele pausou, empacotou a decisão e levantou um handoff. Este é o único momento em que um humano foi chamado.

      handoff · pronto para decisão
    6. passada 6

      Decisão aplicada · 5/5 atingido · convergiu

      Assim que o humano respondeu a única bifurcação, o loop a aplicou, re-verificou todos os cinco itens do done-when em seus limites reais e parou. Execução completa, totalmente provada.

      convergiu
    passada 1 learn · 1/5 passada 2 testes · 2/5 passada 3 prova falhou → repetir passada 4 /health · 3/5 passada 5 ⚑ handoff (você) passada 6 convergiu
    Seis passadas, um momento humano. Cinco dos seis pontos são o loop trabalhando sozinho; só a passada 5 (azul) cruzou para você.
    11·b

    A execução em números


    O que 39 minutos sem supervisão renderam — e o número que mais importa no fim.

    6

    passadas rodadas

    1

    falha de prova (capturada)

    1

    chamado ao humano

    5/5

    done-when atingido
    11·c

    O que o observador faz com a execução


    Depois de ler a execução, as únicas coisas que sobram para você são encaminhamentos leves — não refazer o trabalho. Marque-os; a barra te acompanha. Repare que nenhum deles é "rodar as passadas de novo": o loop já provou cada uma.

    0 de 4 feitos
    • P1
    • P2
    • P2
    • P3

    O log da execução e o review.md são artefatos diferentes

    O LOOP-LOG.md é escrito durante a execução, passada a passada, pelo próprio loop — é o gravador de voo bruto. O review.md é escrito depois da execução por uma passada de QA AFK separada cujo único trabalho é observabilidade: ela lê o estado concluído, re-checa o done-when de forma independente e escreve um veredito legível por humanos. Crucialmente, o QA é ele próprio AFK — o humano não o roda. O humano lê a saída dele. Até a revisão da execução é automatizada; seu papel permanece pura observação.

    Por que uma falha de prova no log é um bom sinal

    A passada 3 falhar no seu Proof Gate, e então ser capturada e repetida, é o sistema funcionando corretamente. Uma execução com zero falhas de prova ao longo de muitas passadas é mais suspeita, não menos — pode significar que o portão é fraco demais para capturar qualquer coisa. A presença de uma falha capturada-e-recuperada no log é evidência de que o limite é real. O observador deveria se tranquilizar com isso, não se alarmar.

    12

    A única vez em que você É chamado — a bifurcação de handoff


    Tudo até aqui disse "você observa, você não conduz". Aqui está a única exceção, delimitada. Quando o loop esbarra numa decisão que nenhuma evidência consegue resolver — uma decisão de produto, uma ação irreversível, um segredo faltando — ele não chuta e não fica rodando à toa. Ele para numa bifurcação, empacota a decisão e a entrega a você pronta para decisão. Você toma a única decisão. O loop assume daí e volta a rodar sozinho.

    • É uma bifurcação, não um checkpoint. Você está respondendo a um ou/ou genuíno, não carimbando progresso de rotina.
    • Está pronta para decisão. O loop já reuniu tudo o que pôde; você recebe a pergunta e o contexto, não uma tarefa de pesquisa.
    • É rara. Uma execução saudável tem zero ou uma dessas. Se você está sendo chamado a cada passada, a meta ou os portões estão mal configurados — isso é um bug de configuração, não o loop funcionando.
    • Você nunca roda o QA de rotina. Até a revisão de fim de execução é AFK. O handoff é a única coisa que legitimamente precisa de um humano.
    zona autônoma — o loop roda AFK p1 p2 p3 fork? só usuário limite de observabilidade handoff você uma decisão pronta p/ decisão decisão aplicada → loop retoma → converge
    Muitas passadas sozinho, então uma bifurcação cruza o limite até você; sua única decisão cruza de volta e o loop retoma — e converge — por conta própria.

    O modelo inteiro em uma frase: o loop roda cada passada AFK e prova cada uma num limite real; você vive do lado da observabilidade lendo LOOP-LOG.md / status / review.md; a única coisa que algum dia cruza para o seu lado é uma bifurcação genuína, pronta para decisão — e depois que você a responde, o loop volta na hora a rodar sozinho.

    13

    No código: onde a execução é observada, não conduzida


    A ideia inteira tem um lar concreto: um arquivo de meta que você escreve uma vez, um log somente-de-anexo que o loop escreve enquanto roda, e um status que você lê. Você pode abrir os três com um comando. O que reparar é que nenhum deles é uma superfície de controle para você — eles são o espaço de trabalho do loop e a sua janela somente-leitura para ele.

    ~/.claude/skills/loop-engineering/forge-flow.md — o contrato de AFK + observabilidade
    # the human's ONLY role is observability:
    #   read  LOOP-LOG.md   — every pass, with real proof
    #   read  status        — converging / iterating / blocked
    #   read  review.md     — the AFK QA's end-of-run report
    # the human NEVER executes a pass, and NEVER runs the QA.
    # the human blocks ONLY on a genuine user-only fork (handoff).

    E a própria execução, reduzida à sua espinha — um loop que conduz as passadas e escreve o log, com o humano em lugar nenhum do caminho por passada:

    while (!doneWhenMet(goal)) {        // the contract from lesson 2
      const proof = await pass(goal);   // learn→analyze→execute→verify
      log.append(proof);                // observability, every pass
      if (proof.verdict === 'fork')     // the ONE human pull-in
        await handoff(proof);          // decision-ready, then resume
    }
    await qaReview(goal);              // AFK QA → review.md (you READ it)

    Abra o contrato e os artefatos da execução

    # read the AFK + observability flow that this lesson teaches
    cat ~/.claude/skills/loop-engineering/forge-flow.md
    
    # during a run, tail the flight recorder without touching the loop
    tail -f LOOP-LOG.md
    
    # after a run, read the AFK QA's observability report
    cat review.md

    A disciplina que isto codifica

    Das próprias regras de trabalho do projeto: "TUDO roda AFK; o humano só tem observabilidade (lê LOOP-LOG.md/review.md/status, não executa nada — nem o QA)." Ou seja: tudo roda AFK; o humano só tem observabilidade — lê o log, a revisão e o status, e não executa nada, nem o QA. O Validator nunca é quem construiu a unidade, e o humano bloqueia apenas numa bifurcação genuína só do usuário via handoff. Esta lição é essa regra, tornada visível.

    14

    Exemplo resolvido: uma execução de fim de tarde no RHG


    Vamos juntar tudo com uma história concreta, de ponta a ponta, do jeito que de fato acontece.

    17h58. Você escreve a meta para o RHG: entregar um endpoint /health, deixar a suíte de testes verde, limpar as questões críticas de a11y e fechar a nova copy de preços. Você torna o done-when mensurável — comandos exatos e condições de aprovação exatas — aprova, e inicia a execução. Então você fecha o laptop e vai fazer o jantar. Você está agora AFK.

    18h02–18h35. O loop roda. A passada 1 lê o baseline. A passada 2 corrige os testes falhando e prova com a suíte. A passada 3 adiciona /health mas o Proof Gate captura um 404 e se recusa a aprovar — o loop registra a falha honestamente e melhora o plano. A passada 4 obtém um 200 real do curl. Cada passada anexa ao LOOP-LOG.md. Você está jantando; ninguém está ao teclado. O status diz baixinho iterando.

    18h36. A passada 5 chega ao último item — a copy de preços. Isso é uma decisão de produto, não algo que a prova consiga resolver. O loop faz a coisa honesta: para numa bifurcação, escreve um handoff pronto para decisão, e o status vira bloqueado · pronto para decisão. Seu celular mostra uma notificação. Este é o único momento em que a noite precisou de você.

    18h37. Você dá uma olhada: duas opções de copy, com contexto. Você escolhe uma. Essa é sua contribuição inteira — uma decisão, dez segundos. Você larga o celular.

    18h38–18h41. O loop aplica sua escolha, re-verifica todos os cinco itens do done-when em seus limites reais, atinge 5/5 e para. Passada 6: convergiu. Uma passada de QA AFK então escreve o review.md. Ninguém a rodou.

    20h15. Você volta sem pressa, abre o LOOP-LOG.md e o review.md, e lê a noite inteira em dois minutos: seis passadas, uma falha de prova capturada, uma bifurcação que você respondeu, tudo provado. Você não rodou uma única passada. Você observou uma execução e tomou uma decisão. Isso é o loop em movimento.

    Conte suas ações: escrever a meta (uma vez), responder uma bifurcação (dez segundos), ler o log (depois do fato). Três toques ao longo de duas horas e dezessete minutos de trabalho. Todo o resto — seis passadas, uma falha capturada, re-verificação completa, o relatório de QA — rodou sem você.

    15

    Verificação rápida


    Três perguntas, de memória — sem espiar as seções acima. Escolha uma resposta em cada; você descobre na hora se está certa e por quê. Recordar vale mais que reler, então pense de verdade em cada uma primeiro.

    1 · Durante uma execução AFK, qual é o papel do humano?

    2 · Uma passada verifica, vê que a lacuna estreitou mas não fechou. O que acontece em seguida?

    3 · Qual evento é a ÚNICA razão legítima para chamar um humano para dentro de uma execução?

    Ainda confuso em algo? Seu agente é seu professor — peça a ele para re-rodar qualquer demo desta página contra um cenário diferente, ou para te guiar por um LOOP-LOG.md real de uma das suas próprias execuções. A seguir: o front-end Forge, onde este exato loop AFK ganha um pipeline completo de 7 passos envolvendo-o.