MÓDULO 2.5

A Metodologia

Os padrões extraídos da construção do Claudex — princípios que se aplicam a qualquer plugin, ferramenta ou sistema construído incrementalmente com Claude Code.

6
Tópicos
45
Minutos
Inter
Nível
Met.
Tipo
1

Sempre especificar antes de codificar

O papel do SPEC na construção incremental

A primeira tentação ao construir um plugin com Claude Code é ir direto ao código. "Me cria um hook que faz X." O resultado quase sempre é uma implementação que parece funcionar mas acumula dívida técnica invisível — nomes errados, responsabilidades misturadas, acoplamentos que você só vai notar quando tentar adicionar a segunda feature. O Claudex foi construído de forma diferente: o SPEC veio primeiro, antes de qualquer prompt de código.

Conceito Principal

Por que o SPEC vem antes de qualquer prompt de código

O SPEC não é documentação — é uma decisão de design. Ele força você a nomear os componentes antes de criá-los, definir as invariantes antes de implementá-las e estabelecer os limites de responsabilidade antes que o código os atravesse. Quando você manda o primeiro prompt de código, o Claude vai nomear coisas, escolher estruturas de dados e dividir responsabilidades. Sem um SPEC, essas escolhas são feitas ad hoc, baseadas em padrões do treinamento. Com um SPEC, o Claude trabalha dentro das suas decisões — não das dele.

Dica Prática

Template de SPEC mínimo viável — 5 seções obrigatórias

1
Propósito: O que este sistema faz em uma frase. O que ele deliberadamente não faz.
2
Componentes: Lista nomeada de arquivos/módulos com uma linha descrevendo a responsabilidade de cada um.
3
Interfaces: Como os componentes se comunicam. Arquivos de estado, chamadas de função, stdin/stdout.
4
Invariantes: O que sempre deve ser verdade. O que nunca pode acontecer. Garantias que o código deve preservar.
5
Sequência de build: Em qual ordem os componentes vão ser construídos e por quê essa ordem.
Fazer
  • Escrever o SPEC em markdown antes do primeiro prompt de código
  • Colocar o SPEC no mesmo diretório que o código para o Claude consultar
  • Referenciar o SPEC explicitamente em cada prompt: "seguindo a SPEC.md..."
  • Atualizar o SPEC quando uma decisão mudar — antes de mudar o código
Evitar
  • Improvisar arquitetura dentro do prompt ("faz um arquivo pra guardar o estado")
  • Deixar o Claude nomear os componentes sem orientação prévia
  • Escrever o SPEC depois que o código já existe (vira documentação, não design)
  • SPEC de 10 páginas que nenhum prompt vai conseguir absorver de uma vez
2

Fail-open primeiro, lógica depois

Segurança antes de funcionalidade

O Claudex vive na path crítica do Claude Code: se ele travar, o usuário fica bloqueado. Por isso o primeiro hook que foi construído não fazia nada além de existir e retornar exit 0. Fail-open não é um detalhe de implementação — é uma decisão de arquitetura que determina se o sistema é seguro de operar enquanto ainda está sendo construído.

Conceito Principal

O que significa fail-open e por que é uma decisão de arquitetura

Fail-open significa que quando algo dá errado — crash, arquivo corrompido, estado inválido — o sistema deixa a operação passar em vez de bloquear. Para um hook do Claude Code, isso se traduz em: qualquer caminho de erro termina em exit 0 com uma mensagem de aviso, nunca em exit 1 ou crash silencioso.

A decisão arquitetural é: este sistema vai priorizar disponibilidade sobre corretude ou o contrário? Para ferramentas de desenvolvimento que ficam na path do usuário, disponibilidade quase sempre vence. Para sistemas de segurança ou pipelines de produção, corretude pode vencer. Você precisa decidir isso antes de escrever qualquer código — porque reescrever todos os caminhos de erro retroativamente é muito mais caro.

O risco de adicionar fail-open retroativamente

Se você construir toda a lógica primeiro e tentar adicionar fail-open depois, vai encontrar um problema: não é uma mudança localizada. Cada função que pode falhar precisa ter seu caminho de erro revisado. Cada chamada de sistema, cada leitura de arquivo, cada parse de JSON. Em código que já existe e funciona, fazer isso sem quebrar nada é difícil. O Claudex adicionou fail-open no prompt 7 exatamente porque os prompts 1–6 precisaram ser revisados sistematicamente — e ainda assim alguns edge cases só apareceram em produção.

Sequência Correta de Implementação
1
Fail-open puro
Hook existe, registra no hooks.json, retorna exit 0 incondicionalmente. Zero lógica.
2
Estado com fail-open
Adicionar leitura/escrita de estado. Qualquer falha de I/O → exit 0, aviso no stderr.
3
Lógica com fail-open
Adicionar decisões reais. Cada branch de erro explicitamente mapeado para exit 0 ou exit 1.
4
Safety pass
Revisar todos os caminhos de erro sistematicamente. ERR trap, lockfile, sweeper.
3

Verificar camada por camada antes de subir

O princípio da solidez na construção incremental

Cada um dos 7 prompts do Claudex termina com uma instrução implícita: verifique antes de continuar. Não "rode o código e veja se parece funcionar" — verifique especificamente se os critérios da camada atual estão satisfeitos. Só então o próximo prompt pode ser enviado com segurança.

Conceito Principal

Por que verificar antes de avançar para o próximo prompt

Cada camada de um sistema construído incrementalmente assume que a camada abaixo está correta. A máquina de estados do Claudex assume que o scaffold está funcionando. O lifecycle do hook assume que a máquina de estados está funcionando. Se você pular a verificação e descobrir um bug três camadas depois, você tem um problema de debug muito mais difícil: o bug pode estar em qualquer uma das camadas não verificadas, e as camadas superiores estão interagindo com o bug de maneiras que obscurecem a causa raiz.

Dados e Referência

Custo de detecção tardia vs. detecção por camada

A regra de thumb da engenharia de software é que o custo de corrigir um bug cresce exponencialmente com o tempo entre a introdução e a detecção. O mesmo princípio se aplica a prompts incrementais:

Detectado na mesma camada onde foi introduzido
5–10×
Detectado uma camada acima (próximo prompt)
20–50×
Detectado três ou mais camadas acima
Verificação Sistemática
  • Definir critérios de "pronto" antes de executar o prompt
  • Testar o caminho feliz E o caminho de erro de cada camada
  • Inspecionar artefatos (arquivos de estado, logs) não apenas comportamento
  • Corrigir na camada atual antes de mandar o próximo prompt
Pular para a próxima feature
  • Mandar o próximo prompt porque "o anterior parecia ter funcionado"
  • Acumular "vou verificar quando tudo estiver pronto"
  • Testar só o caminho feliz e assumir que o resto funciona
  • Depender do Claude para detectar bugs que você não testou
4

Estado explícito, nunca implícito

Visibilidade do sistema como princípio de design

O Claudex persiste todo o seu estado em arquivos JSON legíveis por humanos. Não em variáveis de ambiente, não em memória de processo, não em SQLite. Qualquer terminal consegue inspecionar o estado atual com um simples cat. Isso não é escolha de implementação — é um princípio de design que torna o sistema debugável, testável e confiável.

Conceito Principal

Estado em arquivo vs. estado em memória

Estado em memória é rápido e conveniente, mas tem três problemas para sistemas incrementalmente construídos: (1) não sobrevive a crashes ou reinicios — o sistema perde o que estava fazendo; (2) não é inspecionável sem um debugger ou logging explícito; (3) não é testável sem executar o sistema inteiro. Estado em arquivo resolve os três: persiste, é visível com qualquer leitor de texto, e pode ser preparado manualmente para testes.

O custo é a complexidade das escritas atômicas — você precisa garantir que uma falha no meio da escrita não corrompeu o estado. O Claudex usa write-to-tmp + mv para isso: escreve em um arquivo temporário e só substitui o arquivo de estado quando a escrita está completa.

Dica Prática

Como inspecionar o estado do Claudex com qualquer editor

Os arquivos de estado ficam em ~/.claudex/loops/ — um diretório por loop ativo, com um state.json dentro de cada um. Para ver o que está acontecendo em tempo real:

# listar loops ativos
ls ~/.claudex/loops/
# inspecionar estado de um loop
cat ~/.claudex/loops/<loop-id>/state.json | jq .
# acompanhar mudanças em tempo real
watch -n1 "cat ~/.claudex/loops/<loop-id>/state.json | jq .phase"
Estado Explícito
  • Persistir estado em arquivos com nomes descritivos
  • Usar JSON legível, não formatos binários
  • Incluir timestamps e IDs de transição no estado
  • Escrever atomicamente (tmp + mv)
Estado Implícito
  • Guardar estado importante em variáveis globais de shell
  • Inferir estado a partir de quais arquivos existem ou não
  • Estado distribuído entre múltiplas fontes sem coordenação
  • Escrever estado diretamente (sem tmp) — corrupção em crashes
5

Testar cada primitivo isolado antes de compor

Composição confiável começa com primitivos verificados

Antes de o Claudex ter um loop funcionando de ponta a ponta, cada parte foi testada isoladamente: a escrita atômica de estado, a leitura de estado, a transição de fase, o runner de script. Só quando cada primitivo estava provado é que o lifecycle do hook foi construído em cima deles. Esse princípio transforma debugging de "onde está o bug?" para "qual primitivo falhou?"

Conceito Principal

Por que primitivos verificados tornam composições debugáveis

Quando você sabe que a escrita atômica funciona corretamente, e sabe que a leitura funciona corretamente, e a transição de fase quebra — você sabe exatamente onde está o bug. Sem esse conhecimento prévio, um bug na transição de fase pode parecer um bug de leitura, que pode parecer um bug de escrita. Primitivos verificados são axiomas: você não questiona mais, você confia neles e usa essa confiança para isolar o problema.

Sequência de Testes
1
Primitivos isolados
Cada função individualmente. Escrita atômica, leitura de JSON, transição de fase. Script de teste de 5 linhas cada.
2
Integração de dois componentes
Estado + lifecycle. Hook + runner. Verificar que a interface entre dois componentes verificados funciona.
3
End-to-end
Loop completo, do /claudex:start até a conclusão. Só depois que a integração está validada.
Dica Prática

Como testar escrita atômica de forma isolada

Antes de integrar a escrita atômica em qualquer fluxo maior, valide estes três comportamentos individualmente:

# teste 1: escrita normal
write_state '{"phase":"idle"}' && cat state.json
# teste 2: crash durante escrita (simula com kill)
write_state '{"phase":"running"}' & kill $! ; cat state.json
# estado deve ser o anterior, não corrompido
# teste 3: concorrência (dois processos simultaneamente)
write_state '{"phase":"a"}' & write_state '{"phase":"b"}' & wait; cat state.json
# deve ser "a" ou "b", nunca JSON inválido
6

Como sequenciar qualquer projeto em prompts

A receita universal extraída do Claudex

Os 7 prompts do Claudex não são uma sequência acidental — eles seguem um padrão que se aplica a qualquer sistema que precise ser construído com confiança incremental. O padrão é: SPEC → Scaffold → Estado → Lógica → Utils → Safety. Cada etapa assume a anterior está verificada e adiciona exatamente uma responsabilidade nova.

Conceito Principal

A sequência SPEC → Scaffold → Estado → Lógica → Utils → Safety

SPEC
Decisões de design antes de qualquer código. Componentes, interfaces, invariantes.
Scaffold
Esqueleto que carrega. Plugin registrado, hooks existindo, fail-open puro.
Estado
Persistência verificada antes da lógica. Escrita atômica, leitura, transições.
Lógica
Comportamento real construído sobre estado confiável. O "o que faz".
Utils
Comandos de observabilidade e controle. Status, diagnóstico, cancelamento.
Safety
Pass sistemático em todos os caminhos de erro. ERR trap, lockfile, sweeper.

Esta sequência como framework reutilizável

Qualquer sistema com estado persistente, lógica de decisão e caminhos de erro pode ser construído nessa sequência. A chave é que cada etapa produz um artefato verificável independente — você não precisa de todo o sistema para testar o estado, não precisa do state para verificar o scaffold. Essa decomposição é o que torna a construção incremental com Claude Code confiável em vez de caótica.

Dica Prática

Como adaptar a sequência para projetos menores — 3 prompts vs 7

Nem todo projeto precisa de 7 prompts. A regra é: comprima etapas que podem ser verificadas juntas, mas nunca pule a verificação entre elas.

Projeto pequeno (3 prompts)
Prompt 1: SPEC + Scaffold + Estado
Prompt 2: Lógica completa
Prompt 3: Utils + Safety juntos
Funciona quando cada prompt ainda produz algo verificável
Projeto médio (5 prompts)
Prompt 1: SPEC (separado, como documento)
Prompt 2: Scaffold + fail-open
Prompt 3: Estado
Prompt 4: Lógica
Prompt 5: Utils + Safety

Resumo do Módulo 2.5

Os seis princípios da metodologia — cada um extraído de uma decisão real feita durante a construção do Claudex: