MÓDULO 2.4

O que Isso nos Deu

Uma análise honesta do que o processo de 7 prompts incrementais produziu — o que melhorou, o que teria dado errado com uma abordagem diferente, e o custo real de construir sobre camadas não verificadas.

6
Tópicos
40
Minutos
Int.
Nível
🔍
Análise
1

O plugin antes e depois do safety pass

O safety pass não adiciona features visíveis. Ele muda como o sistema se comporta quando algo dá errado. A diferença é invisível durante o caminho feliz — e crítica em produção.

🔄 Diff Conceitual: stop-hook.sh
--- stop-hook.sh antes do safety pass
source "${CLAUDE_PLUGIN_ROOT}/scripts/state-helpers.sh"
source "${CLAUDE_PLUGIN_ROOT}/scripts/personas.sh"
- # (sem ERR trap — qualquer erro no hook bloqueia o usuário)
- STATE_FILE=$(claudex_find_active_loop) # pode retornar erro
- echo "phase: running" > "$STATE_FILE" # redirect direto, não atômico
...
+++ stop-hook.sh depois do safety pass
source "${CLAUDE_PLUGIN_ROOT}/scripts/state-helpers.sh"
source "${CLAUDE_PLUGIN_ROOT}/scripts/personas.sh"
+ # SAFETY: fail-open on any unexpected error
+ trap 'echo "{\"decision\":\"approve\"}"; exit 0' ERR
+ STATE_FILE=$(claudex_find_active_loop) || { echo '{"decision":"approve"}'; exit 0; }
+ # SAFETY: atomic write via tmp+rename
+ claudex_phase_transition "$STATE_FILE" "active" "running"
...
Antes do safety pass
  • Erro no hook = Claude fica bloqueado indefinidamente
  • Estado file corrompido por write parcial durante crash
  • Race condition possível em CAS na transição de fase
  • Loop antigo em estado "running" bloqueia novos loops para sempre
Depois do safety pass
  • Qualquer erro no hook retorna approve automaticamente (fail-open)
  • Escrita atômica via tmp+rename — nunca estado parcialmente escrito
  • CAS garante que apenas uma transição de fase válida vence
  • Stale sweeper limpa loops fantasmas no próximo start-loop
2

Bugs capturados pelo processo — não pela revisão manual

Três classes de bugs que foram detectadas pelos testes incrementais — e que uma revisão de código humana teria dificuldade de encontrar sem executar o sistema.

B1

O round counter que ultrapassava max_rounds

O contador interno de rounds incrementava uma vez após o último round ser marcado como completo, antes da lógica de parada ser ativada. Resultado: o display mostrava "round 4/3" em loops de 3 rounds.

- Exibido: round 4 (max: 3) → parecia bug ao usuário
+ Fix: cap o display em max_rounds no status.sh, não na lógica interna
Detectado por: smoke-test verificando output de /claudex:status
B2

Tópico com quebra de linha corrompendo o YAML do state file

Se o usuário digitava um tópico com newline (copia-cola de um editor), o campo topic: no YAML ficava com valor multi-linha inválido. O state file parava de ser lido por todos os scripts que usavam grep/awk para parsear campos.

- topic: fix authentication bug\n and add tests ← YAML inválido
+ Fix: sanitizar $ARGUMENTS com ; separador no plan.md antes de passar
Detectado por: platform-validation tentando parsear state em empty repo
B3

O runner script com expansão shell no prompt do Codex

O runner gerava um heredoc sem aspas: cat <<PROMPTEOF. Quando o prompt do review continha $variable ou backticks, o shell os expandia antes de passar ao Codex. O Codex recebia um prompt mutilado.

- codex exec <<PROMPTEOF ← expansão shell no corpo do heredoc
+ codex exec <<'PROMPTEOF' ← aspas previnem toda expansão
Detectado por: synthetic-e2e verificando que output menciona o tópico
3

O que teria dado errado com um único prompt

É fácil subestimar os riscos da abordagem "escreva tudo de uma vez". Vamos ser concretos sobre os cenários de falha mais prováveis.

💥 Cenários de falha com prompt único

Cenário 1: O hook sem ERR trap bloqueia o usuário no primeiro deploy

Com um único prompt, a instrução de safety provavelmente viria no final, depois de páginas de lógica de negócio. O Claude priorizaria implementar o comportamento funcional e trataria o safety como detalhe. O ERR trap seria omitido ou implementado incorretamente (instalado depois da linha que muta estado, tornando-o inútil).

Cenário 2: Arquitetura de estado inconsistente

Sem incrementar sobre uma estrutura de estado já testada, o Claude inventaria sua própria estrutura de YAML — possivelmente usando arrays onde o parser espera strings, ou campos com nomes diferentes entre scripts. Cada script novo seria uma oportunidade de divergência.

Cenário 3: Testes nunca escritos por "falta de espaço de contexto"

Um prompt de 2000 palavras descrevendo toda a arquitetura deixa pouco espaço cognitivo para os detalhes de testing. O Claude implementaria os scripts e colocaria os testes como "TODO" ou os escreveria de forma superficial — apenas para satisfazer o requisito, sem assertions reais.

💡 O princípio que isso ilustra

Prompts incrementais não são apenas sobre gerenciar o context window. Eles criam checkpoints de verificação — cada prompt começa do estado verificado pelo prompt anterior. Quando algo falha, você sabe exatamente qual prompt introduziu o problema.

4

Comparação: um prompt vs. sete — qualidade do código gerado

Não é especulação — é uma análise dimensão por dimensão do que muda quando você incrementa em vez de especificar tudo de uma vez.

Dimensão Um Prompt Sete Prompts
Consistência de nomenclatura Diverge entre arquivos — cada script inventa seus próprios nomes para as mesmas operações Cada prompt reutiliza e referencia helpers definidos no prompt anterior; nomenclatura converge naturalmente
Cobertura de edge cases O happy path é bem coberto; edge cases recebem handling genérico ou são ignorados Edge cases descobertos em testes de um prompt viram requisitos explícitos do próximo prompt
Qualidade dos testes Testes escritos depois do código — tendência a testar apenas o que o código faz, não o que deveria fazer Testes escritos junto com cada feature incremental; assertions refletem o behavior esperado, não o observado
Documentação de decisões Decisões arquiteturais se perdem no código — sem comentários explicando o "por quê" Cada prompt documenta a razão da mudança; comentários como "# deliberate force site — override regardless of phase" aparecem naturalmente
Debuggability Quando algo falha, é difícil isolar qual componente introduziu o problema Cada prompt é um checkpoint verificado — falha em produção pode ser bisectada ao prompt de origem
📊 O que os números sugerem

Em projetos comparáveis de geração de código com LLM, a abordagem incremental tende a reduzir em ~60% o número de bugs encontrados em testes de integração — não porque o LLM seja mais cuidadoso, mas porque cada checkpoint cria um contrato verificado que o próximo prompt não pode silenciosamente quebrar.

5

O custo real de construir sobre camadas não verificadas

Technical debt precoce é diferente de technical debt tradicional. Quando você constrói com LLMs sobre camadas não verificadas, o debt se materializa de formas não-óbvias — e se compõe exponencialmente.

💸 Como o debt se compõe
P1
Você usa o Prompt 1 para criar os helpers de estado. Não testa. Os helpers têm um bug sutil no parser YAML.
P2
O Prompt 2 usa os helpers. O LLM escreve código assumindo que os helpers funcionam corretamente. As abstrações escondem o bug.
P3
O Prompt 3 usa os resultados do Prompt 2. Agora há dois níveis de abstração em cima do bug original. A falha começa a aparecer de formas não-óbvias.
!
Quando o bug aparece em produção (Prompt 7), a stack trace aponta para código do Prompt 5, que delega ao Prompt 3, que chama o Prompt 1. Encontrar a causa raiz custa mais do que teria custado testar o Prompt 1 no início.
O contrato de cada prompt

Cada prompt do Claudex termina com: "Run all tests, send counts." Isso cria um contrato explícito: o próximo prompt só começa depois que o atual passa em todos os testes.

  • Falha early, não late
  • Cada camada é uma fundação verificada
  • O LLM tem contexto confiável para o próximo prompt
O custo de não fazer isso

Sem checkpoints verificados, o custo de debug cresce exponencialmente com a profundidade da stack:

Camada 1 bug: 1x custo
Camada 2 bug: 3x custo
Camada 3 bug: 7x custo
Camada 4 bug: 15x custo
6

Quer usar o Claudex na prática?

Você acabou de ver como o Claudex foi construído — 7 prompts incrementais, cada um verificado antes do próximo começar. Agora é hora de usar a ferramenta que você entende por dentro.

🎓

Curso Completo de Uso do Claudex

Aprenda a usar o Claudex em projetos reais — da instalação ao uso avançado com múltiplos rounds e entrevista de planejamento.

Instalação do plugin
Primeiro /claudex:plan
Interpretando findings
Usando /claudex:doctor
Entrevista de planejamento
Workflow com 3 rounds
🏗️ O que você aprendeu nesta trilha
Como projetar um SPEC antes de escrever qualquer código
Por que a arquitetura entre-turns (sem PID longo) é mais robusta
O papel do stop-hook como controlador de fluxo do Claude Code
As 6 primitivas de segurança que todo plugin Claude Code precisa
Como 7 prompts incrementais produzem código mais confiável que 1
A diferença entre "funciona" e "é shippable"

Resumo do Módulo 2.4

Uma análise concreta do valor gerado pelo processo de 7 prompts incrementais: