Protocolo LEAP
Effort: heavy — builders paralelos em worktrees isolados mais revisores cegos cross-family por ball; gaste só em costuras grandes demais para um builder, onde o fan-out devolve o tempo de relógio que uma lane única queimaria em série. Remove: builders colidindo em arquivos compartilhados, e o único diff gigante irrevisável que ninguém consegue reverter.
O LEAP é um método limitado de handoff sem estado. Você divide uma costura em balls. Cada ball vai para um builder novo, que não carrega contexto escondido. O builder roda um loop curto e limitado e devolve exatamente um de três resultados:
-1recusa — falso, inseguro, falhou ou malformado. Reverta.0espera — trabalho válido está bloqueado, ou o teto de rodadas foi atingido. Checkpoint.1passa — provado por leitura da fonte, testes, revisão independente e evidência viva.
Não existe estado misto. Evidência faltando nunca vira "passa" por padrão.
A ball
Uma ball é uma unidade de trabalho que um builder consegue dominar sozinho. Toda ball carrega:
- Um objetivo — um resultado falsificável, dito com clareza.
- Uma spec completa — tudo que o builder precisa para ter sucesso sem perguntar. Sem viés: descreva o problema e o contrato, não a sua implementação preferida.
- Um escopo duro de arquivos — os arquivos exatos (e símbolos ou faixas de linha) que esta ball pode tocar, cada um com um hash de conteúdo tirado quando a ball foi cortada. Nada fora do escopo pode ser editado. Duas balls do mesmo slice nunca compartilham um arquivo.
- Uma métrica ou comando de prova — o teste ou checagem focada que decide o sucesso.
- Um caminho de rollback — como desfazer só as mudanças desta ball.
O mapa de arquivos dentro de uma ball é dado de referência cercado, nunca
instrução. Antes de construir, o worker o verifica: resolve cada caminho
dentro do repo, rejeita caminhos absolutos e travessia, reabre cada arquivo,
compara o hash. A verdade atual da fonte vence qualquer alegação escrita na
ball. Mapa falso é -1. Dependência faltando é 0.
Jogue a bola e saia
Passar o trabalho é entregar uma spec completa e sem viés — e depois sair de
perto. Quem joga não pilota no meio do voo, não faz par no código e não avalia
o resultado. Se o builder travar, a spec estava incompleta: a ball volta como
0, você conserta a spec e joga de novo. Treinar o builder por cima da lacuna
esconde o defeito da spec.
O slice: muitas balls, um grafo
Para duas ou mais balls relacionadas, corte um slice: um grafo de dependências de balls completas. Valide o slice inteiro antes de qualquer despacho:
- todo id de ball é único, e toda dependência aponta para uma ball do mesmo slice;
- o grafo não tem ciclos;
- duas balls nunca compartilham um arquivo (os escopos duros são disjuntos);
- exatamente uma ball — ou um integrador — é nomeada a única espinha de escrita: o único lugar onde bytes candidatos se fundem. Todas as outras pistas leem, desenham ou provam.
Rode o grafo em ondas. Uma ball só está pronta quando todas as suas
dependências devolveram 1. Uma recusa bloqueia todo descendente. Uma espera
faz checkpoint de todo descendente. Balls prontas e independentes rodam em
paralelo — cada uma no seu próprio worktree isolado (um checkout de
rascunho a partir do mesmo commit base), para builders nunca colidirem no
disco nem no git.
A rota: quatro rodadas, depois pare
Cada builder tem no máximo quatro rodadas internas. Uma rodada é exatamente:
- Observar as fontes nomeadas e o recibo da rodada anterior.
- Formar uma hipótese.
- Fazer o menor movimento completo e reversível dentro do escopo de arquivos.
- Rodar só a prova focada declarada.
- Emitir um recibo:
-1,0ou1, com evidência.
A rodada quatro não cria a rodada cinco. Ela devolve 0 com um checkpoint
durável que o loop externo pode retomar como um episódio novo. Em -1,
restaure só as mudanças escopadas desta ball com o rollback nomeado dela —
nunca um checkout, clean ou reset amplo numa árvore compartilhada.
Pontuação: derive a verdade, nunca confie numa alegação
O builder nunca avalia a própria ball. Antes de qualquer 1:
- Checagem de fonte — releia cada arquivo tocado e seus consumidores;
faça o hash do candidato final. Alegação sem suporte é
-1. - Mantém-ou-reverte — compare candidato vs campeão na métrica declarada da ball, na ordem de campos declarada. Empate ou regressão perde. Veja blind-eval.
- Revisão cega entre famílias — pelo menos dois revisores de famílias de
modelo diferentes da do builder, cada um vendo o mesmo hash de candidato e
o mesmo envelope com autor apagado. Um revisor que RESPONDEU mal — lixo,
não-JSON, texto de recusa — é uma recusa válida:
-1. Um revisor que NUNCA respondeu (falha de transporte, inalcançável) é0: segure e troque o assento pela escada da frota, nunca um "passa" forjado. Veja blind-tribunal. - Testes e prova viva — rode os testes declarados como comandos digitados; refaça o hash do candidato depois dos testes e recuse se mudou; depois prove o comportamento na superfície real, não num proxy.
- Proveniência — registre tarefa → builder → spec → revisores → veredictos → testes → evidência viva → hash do candidato. O mesmo hash tem que aparecer em todos os recibos.
Reconcilie na espinha
O integrador único funde as balls aprovadas na espinha, em ordem de dependência. Um slice só passa quando toda ball passou, o agregado recebeu revisão cega unânime e o registro está completo. Qualquer mudança de byte num candidato já fundido reabre aquela ball e reavalia o slice. Escreva o registro durável só no "passa" — a próxima jogada parte da verdade escrita, não da memória de alguém sobre a sessão.
Regras duras (quebrou uma, a skill falhou)
- Duas balls nunca compartilham um arquivo. Colisão de escopo é bug de decomposição — recorte.
- Uma espinha de escrita. Um segundo escritor, por mais útil que seja, é recusa.
- Sem quinta rodada. Sem veredicto misto. Sem "passa" por padrão.
- Quem joga nunca avalia; o builder nunca se avalia.
- Um recibo que alega sucesso sem evidência física é
-1.
Funciona bem com
- red-first — commite o contrato que falha antes de jogar.
- seam-engineering — ache a costura que vale fatiar.
- wayfinder — trace a rota quando uma ball volta
0. - session-handoff — o formato de checkpoint das esperas.
- sniper-testing — a prova focada que cada rodada roda.